Checkbox
用于多选、批量选择和卡片式选项的复选框组件
复选框(Checkbox)用于在一组选项中选择一个或多个值。组件同时提供基础复选框、数据驱动的复选框组、卡片式复选框和卡片式复选框组。
import {
Checkbox,
CheckboxCard,
CheckboxControl,
CheckboxGroup,
CheckboxGroupCard,
CheckboxIndicator,
CheckboxRoot
} from '@skyroc/web-ui';架构说明
Checkbox 由 Radix Checkbox 封装而来,基础组件负责单个选中状态,Group 组件负责多值集合状态。
Checkbox:单个复选框,支持checked、defaultChecked和indeterminate。CheckboxGroup:数据驱动的复选框组,通过items渲染多个Checkbox。CheckboxCard:卡片样式的单个复选框,支持图标、标题、描述和左右控制器位置。CheckboxGroupCard:数据驱动的卡片式复选框组,状态模型与CheckboxGroup一致。CheckboxRoot、CheckboxControl、CheckboxIndicator:基础结构子组件,适合需要完全自定义组合时使用。
何时使用
- 用户可以选择多个选项,且每个选项可以独立开关时。
- 需要通过“全选”展示部分选中状态时。
- 需要从一组配置项、权限项、偏好项中选择多个值时。
- 选项需要图标、描述或更大点击区域时,使用
CheckboxCard或CheckboxGroupCard。 - 如果用户只能选择一个选项,应使用 Radio;如果只是开关单一功能状态,应使用 Switch。
基础用法
Checkbox 支持受控与非受控模式。受控模式通过 checked 和 onCheckedChange 管理状态。
颜色
通过 color 控制选中和半选状态的颜色。基础 Checkbox 和卡片 Checkbox 都使用同一套主题颜色。
尺寸
通过 size 控制控制器尺寸、文字间距以及 Group 间距,从 xs 到 2xl 共 6 个尺寸。
状态
checked 可以是 true、false 或 'indeterminate'。半选状态常用于全选控件,表示子项只选中了其中一部分。
禁用
设置 disabled 后,复选框不可交互。Group 上的 disabled 会传递给所有子项,子项也可以单独设置 disabled。
复选框组
CheckboxGroup 使用 items 渲染选项列表,value / defaultValue 是当前选中的 value 数组。onValueChange 返回完整的新数组。
卡片复选框
CheckboxCard 适合展示更丰富的可选项。icon、label 和 description 组成内容区,checkboxPosition 控制复选框在左侧还是右侧。
卡片复选框组
CheckboxGroupCard 与 CheckboxGroup 使用相同的多值状态模型,但每个选项会渲染为 CheckboxCard。适合权限、能力、套餐、偏好等更强调内容说明的选择场景。
API
Checkbox
通用属性参考:支持 Radix Checkbox Root 的属性,如 checked、defaultChecked、disabled、required、name、value 和 onCheckedChange。
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| checked | 受控选中状态,支持半选状态 | boolean | 'indeterminate' | - |
| defaultChecked | 非受控默认选中状态 | boolean | 'indeterminate' | - |
| onCheckedChange | 选中状态变化时触发 | (checked: boolean | 'indeterminate') => void | - |
| color | 主题颜色,影响选中和半选状态 | 'primary' | 'destructive' | 'success' | 'warning' | 'info' | 'carbon' | 'secondary' | 'accent' | 'primary' |
| shape | 控制器形状 | 'square' | 'rounded' | 'square' |
| size | 尺寸,影响控制器大小和文字间距 | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'md' |
| children | 标签内容,存在时会渲染为可点击 Label | ReactNode | - |
| checkedIcon | 选中状态图标 | ReactNode | - |
| indeterminateIcon | 半选状态图标 | ReactNode | - |
| forceMountIndicator | 强制挂载 Indicator,常用于动画控制 | true | - |
| className | 根容器 class;存在时优先于 classNames.root | ClassValue | - |
| classNames | 各 slot 的自定义 class | CheckboxUi | - |
| indicatorProps | 传递给 CheckboxIndicator 的额外 props | CheckboxIndicatorProps | - |
| rootProps | 传递给 CheckboxRoot 的额外 props | CheckboxRootProps | - |
CheckboxGroup
CheckboxGroup 是数据驱动组件。items 中每一项都会渲染为一个 Checkbox,Group 负责维护 value 数组。
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| items* | 复选框组选项列表 | CheckboxItemProps[] | - |
| value | 受控选中值数组 | string[] | - |
| defaultValue | 非受控默认选中值数组 | string[] | - |
| onValueChange | 选中值数组变化时触发 | (value: string[]) => void | - |
| orientation | 排列方向 | 'horizontal' | 'vertical' | 'horizontal' |
| color | 统一设置子项主题颜色 | 'primary' | 'destructive' | 'success' | 'warning' | 'info' | 'carbon' | 'secondary' | 'accent' | 'primary' |
| size | 统一设置子项尺寸和组间距 | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'md' |
| disabled | 禁用整组复选框 | boolean | false |
| checkedIcon | 统一设置子项选中图标 | ReactNode | - |
| indeterminateIcon | 统一设置子项半选图标 | ReactNode | - |
| className | 组根容器 class;存在时优先于 classNames.groupRoot | ClassValue | - |
| classNames | 组和子项共用的 slot class | CheckboxUi | - |
CheckboxCard
CheckboxCard 支持 Radix Checkbox Root 的属性,并额外提供卡片内容和布局属性。
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| checked | 受控选中状态,支持半选状态 | boolean | 'indeterminate' | - |
| defaultChecked | 非受控默认选中状态 | boolean | 'indeterminate' | - |
| onCheckedChange | 选中状态变化时触发 | (checked: boolean | 'indeterminate') => void | - |
| label | 卡片标题 | ReactNode | - |
| description | 卡片描述文本 | ReactNode | - |
| icon | 卡片内容区图标 | ReactNode | - |
| checkboxPosition | 复选框在卡片中的位置 | 'left' | 'right' | 'left' |
| color | 主题颜色,影响控制器和选中边框 | 'primary' | 'destructive' | 'success' | 'warning' | 'info' | 'carbon' | 'secondary' | 'accent' | 'primary' |
| shape | 控制器形状 | 'square' | 'rounded' | 'square' |
| size | 尺寸,影响控制器大小 | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'md' |
| checkedIcon | 选中状态图标 | ReactNode | - |
| indeterminateIcon | 半选状态图标 | ReactNode | - |
| forceMountIndicator | 强制挂载 Indicator | true | - |
| className | 卡片根容器 class;存在时优先于 classNames.card | ClassValue | - |
| classNames | 各 slot 的自定义 class | CheckboxUi | - |
CheckboxGroupCard
CheckboxGroupCard 使用 CheckboxGroupCardItem[] 渲染卡片式选项,受控和非受控规则与 CheckboxGroup 一致。
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| items* | 卡片式复选框组选项列表 | CheckboxGroupCardItem[] | - |
| value | 受控选中值数组 | string[] | - |
| defaultValue | 非受控默认选中值数组 | string[] | - |
| onValueChange | 选中值数组变化时触发 | (value: string[]) => void | - |
| checkboxPosition | 复选框在卡片中的位置 | 'left' | 'right' | 'right' |
| shape | 控制器形状 | 'square' | 'rounded' | 'rounded' |
| orientation | 排列方向 | 'horizontal' | 'vertical' | 'horizontal' |
| color | 统一设置子项主题颜色 | 'primary' | 'destructive' | 'success' | 'warning' | 'info' | 'carbon' | 'secondary' | 'accent' | 'primary' |
| size | 统一设置子项尺寸和组间距 | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'md' |
| disabled | 禁用整组卡片复选框 | boolean | false |
| className | 组根容器 class;存在时优先于 classNames.groupRoot | ClassValue | - |
| classNames | 组和卡片子项共用的 slot class | CheckboxUi | - |
子组件
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| CheckboxRoot | 基础根容器,支持原生 div 属性 | CheckboxRootProps | - |
| CheckboxControl | Radix Checkbox Root 控制器 | CheckboxControlProps | - |
| CheckboxIndicator | 选中状态指示器 | CheckboxIndicatorProps | - |
类型
CheckboxProps
基础 Checkbox 属性。继承 CheckboxControlProps,并增加图标、slot class 和子组件 props 配置。
| 字段 | 类型 | 说明 |
|---|---|---|
| checked | boolean | 'indeterminate' | 受控选中状态。 |
| defaultChecked | boolean | 'indeterminate' | 非受控默认选中状态。 |
| onCheckedChange | (checked: boolean | 'indeterminate') => void | 选中状态变化回调。 |
| color | 'primary' | 'destructive' | 'success' | 'warning' | 'info' | 'carbon' | 'secondary' | 'accent' | 主题颜色。来自 CheckboxControlProps。 |
| shape | 'square' | 'rounded' | 控制器形状。来自 CheckboxControlProps。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 尺寸。来自 CheckboxControlProps。 |
| checkedIcon | ReactNode | 选中状态图标。 |
| children | ReactNode | 标签内容。 |
| className | ClassValue | 根容器 class。 |
| classNames | CheckboxUi | 各 slot 的自定义 class。 |
| forceMountIndicator | true | 强制挂载 Indicator。 |
| indeterminateIcon | ReactNode | 半选状态图标。 |
| indicatorProps | CheckboxIndicatorProps | Indicator 属性。 |
| rootProps | CheckboxRootProps | 根容器属性。 |
CheckboxGroupProps
复选框组属性。通过 items 渲染多个 Checkbox,并维护多值数组。
| 字段 | 类型 | 说明 |
|---|---|---|
| items* | CheckboxItemProps[] | 选项列表。 |
| value | string[] | 受控选中值数组。 |
| defaultValue | string[] | 非受控默认选中值数组。 |
| onValueChange | (value: string[]) => void | 选中值数组变化回调。 |
| orientation | 'horizontal' | 'vertical' | 排列方向。 |
| color | 'primary' | 'destructive' | 'success' | 'warning' | 'info' | 'carbon' | 'secondary' | 'accent' | 统一设置子项颜色。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 统一设置尺寸。 |
| disabled | boolean | 禁用整组。 |
| checkedIcon | ReactNode | 统一设置选中图标。 |
| className | ClassValue | 组根容器 class。 |
| classNames | CheckboxUi | 组和子项 slot class。 |
| indeterminateIcon | ReactNode | 统一设置半选图标。 |
CheckboxCardProps
卡片式 Checkbox 属性。继承 CheckboxControlProps,并增加卡片内容和布局配置。
| 字段 | 类型 | 说明 |
|---|---|---|
| checked | boolean | 'indeterminate' | 受控选中状态。 |
| defaultChecked | boolean | 'indeterminate' | 非受控默认选中状态。 |
| onCheckedChange | (checked: boolean | 'indeterminate') => void | 选中状态变化回调。 |
| checkboxPosition | 'left' | 'right' | 复选框在卡片中的位置。 |
| checkedIcon | ReactNode | 选中状态图标。 |
| className | ClassValue | 卡片根容器 class。 |
| classNames | CheckboxUi | 各 slot 的自定义 class。 |
| color | 'primary' | 'destructive' | 'success' | 'warning' | 'info' | 'carbon' | 'secondary' | 'accent' | 主题颜色。 |
| description | ReactNode | 描述文本。 |
| disabled | boolean | 禁用状态。 |
| forceMountIndicator | true | 强制挂载 Indicator。 |
| icon | ReactNode | 内容区图标。 |
| indeterminateIcon | ReactNode | 半选状态图标。 |
| label | ReactNode | 卡片标题。 |
| shape | 'square' | 'rounded' | 控制器形状。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 尺寸。 |
CheckboxGroupCardProps
卡片式复选框组属性。继承 CheckboxGroupProps 的多值状态模型,并使用 CheckboxGroupCardItem 渲染子项。
| 字段 | 类型 | 说明 |
|---|---|---|
| items* | CheckboxGroupCardItem[] | 卡片选项列表。 |
| value | string[] | 受控选中值数组。 |
| defaultValue | string[] | 非受控默认选中值数组。 |
| onValueChange | (value: string[]) => void | 选中值数组变化回调。 |
| checkboxPosition | 'left' | 'right' | 复选框在卡片中的位置。 |
| shape | 'square' | 'rounded' | 控制器形状。 |
| orientation | 'horizontal' | 'vertical' | 排列方向。 |
| color | 'primary' | 'destructive' | 'success' | 'warning' | 'info' | 'carbon' | 'secondary' | 'accent' | 统一设置子项颜色。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 统一设置尺寸。 |
| disabled | boolean | 禁用整组。 |
| className | ClassValue | 组根容器 class。 |
| classNames | CheckboxUi | 组和卡片子项 slot class。 |
CheckboxItemProps
CheckboxGroup 的单个选项配置。继承 CheckboxProps 的大部分属性,但使用 label 作为展示内容。
| 字段 | 类型 | 说明 |
|---|---|---|
| label* | ReactNode | 选项显示内容。 |
| value* | string | 选项值。 |
| checkedIcon | ReactNode | 该项选中图标。 |
| classNames | CheckboxUi | 该项 slot class。 |
| color | 'primary' | 'destructive' | 'success' | 'warning' | 'info' | 'carbon' | 'secondary' | 'accent' | 该项主题颜色。 |
| disabled | boolean | 该项禁用状态。 |
| indeterminateIcon | ReactNode | 该项半选图标。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 该项尺寸。 |
CheckboxGroupCardItem
CheckboxGroupCard 的单个选项配置。继承 CheckboxItemProps,并增加 icon。
| 字段 | 类型 | 说明 |
|---|---|---|
| icon | ReactNode | 卡片内容区图标。 |
| label* | ReactNode | 卡片标题。 |
| value* | string | 选项值。 |
| description | ReactNode | 卡片描述文本。 |
| disabled | boolean | 该项禁用状态。 |
| classNames | CheckboxUi | 该项 slot class。 |
CheckboxUi
Checkbox 全部 slot 的 class 配置。
| 字段 | 类型 | 说明 |
|---|---|---|
| root | ClassValue | 基础 Checkbox 根容器 class。 |
| control | ClassValue | 复选框控制器 class。 |
| indicator | ClassValue | 选中指示器 class。 |
| label | ClassValue | 基础 Checkbox 标签 class。 |
| groupRoot | ClassValue | Group 根容器 class。 |
| card | ClassValue | 卡片根容器 class。 |
| cardContent | ClassValue | 卡片内容区 class。 |
| cardLabel | ClassValue | 卡片标题 class。 |
| cardDescription | ClassValue | 卡片描述 class。 |
CheckboxRootProps
基础根容器属性,支持原生 div 属性。
| 字段 | 类型 | 说明 |
|---|---|---|
| children | ReactNode | 子节点。 |
| className | ClassValue | 根容器 class。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 尺寸,影响与标签的间距。 |
CheckboxControlProps
复选框控制器属性。继承 Radix Checkbox Root 属性,并增加主题颜色、尺寸和形状。
| 字段 | 类型 | 说明 |
|---|---|---|
| checked | boolean | 'indeterminate' | 受控选中状态。 |
| defaultChecked | boolean | 'indeterminate' | 非受控默认选中状态。 |
| onCheckedChange | (checked: boolean | 'indeterminate') => void | 选中状态变化回调。 |
| color | 'primary' | 'destructive' | 'success' | 'warning' | 'info' | 'carbon' | 'secondary' | 'accent' | 主题颜色。 |
| shape | 'square' | 'rounded' | 控制器形状。 |
| size | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 控制器尺寸。 |
| disabled | boolean | 禁用状态。 |
| id | string | 控制器 id。 |
| name | string | 表单字段名。 |
| required | boolean | 是否必填。 |
| value | string | 表单提交值。 |
CheckboxIndicatorProps
选中指示器属性,继承 Radix Checkbox Indicator 属性。
| 字段 | 类型 | 说明 |
|---|---|---|
| children | ReactNode | 指示器内容。 |
| className | ClassValue | 指示器 class。 |
| forceMount | true | 强制挂载指示器。 |