@teamix-evo/ui 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/README.md +1 -1
  2. package/package.json +8 -4
  3. package/src/components/accordion/accordion.meta.md +10 -5
  4. package/src/components/accordion/accordion.stories.tsx +11 -6
  5. package/src/components/affix/affix.meta.md +19 -10
  6. package/src/components/affix/affix.stories.tsx +4 -2
  7. package/src/components/alert/alert.meta.md +19 -14
  8. package/src/components/alert/alert.stories.tsx +1 -1
  9. package/src/components/alert/alert.tsx +5 -5
  10. package/src/components/alert-dialog/alert-dialog.meta.md +23 -10
  11. package/src/components/alert-dialog/alert-dialog.stories.tsx +1 -1
  12. package/src/components/alert-dialog/alert-dialog.tsx +1 -1
  13. package/src/components/anchor/anchor.meta.md +20 -11
  14. package/src/components/anchor/anchor.stories.tsx +1 -1
  15. package/src/components/app/app.meta.md +19 -10
  16. package/src/components/app/app.stories.tsx +4 -2
  17. package/src/components/aspect-ratio/aspect-ratio.meta.md +10 -5
  18. package/src/components/aspect-ratio/aspect-ratio.stories.tsx +1 -1
  19. package/src/components/auto-complete/auto-complete.meta.md +25 -16
  20. package/src/components/auto-complete/auto-complete.stories.tsx +4 -2
  21. package/src/components/avatar/avatar.meta.md +23 -11
  22. package/src/components/avatar/avatar.stories.tsx +1 -1
  23. package/src/components/badge/badge.meta.md +26 -21
  24. package/src/components/badge/badge.tsx +7 -13
  25. package/src/components/breadcrumb/breadcrumb.meta.md +21 -10
  26. package/src/components/breadcrumb/breadcrumb.stories.tsx +8 -0
  27. package/src/components/button/button.meta.md +22 -17
  28. package/src/components/button/button.stories.tsx +1 -1
  29. package/src/components/button/demo/as-child.tsx +24 -0
  30. package/src/components/button/demo/basic.tsx +8 -0
  31. package/src/components/button/demo/block.tsx +16 -0
  32. package/src/components/button/demo/loading.tsx +19 -0
  33. package/src/components/button/demo/shapes.tsx +18 -0
  34. package/src/components/button/demo/sizes.tsx +19 -0
  35. package/src/components/button/demo/variants.tsx +19 -0
  36. package/src/components/button/demo/with-icon.tsx +20 -0
  37. package/src/components/button-group/button-group.meta.md +18 -9
  38. package/src/components/button-group/button-group.stories.tsx +5 -2
  39. package/src/components/calendar/calendar.meta.md +14 -9
  40. package/src/components/calendar/calendar.stories.tsx +1 -1
  41. package/src/components/calendar/calendar.tsx +1 -1
  42. package/src/components/card/card.meta.md +36 -11
  43. package/src/components/card/card.stories.tsx +8 -0
  44. package/src/components/carousel/carousel.meta.md +16 -11
  45. package/src/components/carousel/carousel.stories.tsx +10 -5
  46. package/src/components/cascader/cascader.meta.md +28 -19
  47. package/src/components/cascader/cascader.stories.tsx +9 -8
  48. package/src/components/cascader/cascader.tsx +2 -2
  49. package/src/components/checkbox/checkbox.meta.md +26 -8
  50. package/src/components/checkbox/checkbox.stories.tsx +1 -1
  51. package/src/components/collapsible/collapsible.meta.md +11 -4
  52. package/src/components/collapsible/collapsible.stories.tsx +8 -0
  53. package/src/components/color-picker/color-picker.meta.md +27 -18
  54. package/src/components/color-picker/color-picker.stories.tsx +1 -1
  55. package/src/components/color-picker/color-picker.tsx +1 -0
  56. package/src/components/combobox/combobox.meta.md +29 -20
  57. package/src/components/combobox/combobox.stories.tsx +1 -1
  58. package/src/components/combobox/combobox.tsx +3 -3
  59. package/src/components/command/command.meta.md +32 -12
  60. package/src/components/command/command.stories.tsx +1 -1
  61. package/src/components/command/command.tsx +1 -1
  62. package/src/components/context-menu/context-menu.meta.md +34 -11
  63. package/src/components/context-menu/context-menu.stories.tsx +8 -0
  64. package/src/components/context-menu/context-menu.tsx +2 -2
  65. package/src/components/data-table/data-table.meta.md +24 -19
  66. package/src/components/data-table/data-table.stories.tsx +12 -5
  67. package/src/components/date-picker/date-picker.meta.md +40 -20
  68. package/src/components/date-picker/date-picker.stories.tsx +1 -1
  69. package/src/components/descriptions/descriptions.meta.md +23 -14
  70. package/src/components/descriptions/descriptions.stories.tsx +1 -1
  71. package/src/components/dialog/dialog.meta.md +25 -12
  72. package/src/components/dialog/dialog.stories.tsx +1 -1
  73. package/src/components/dialog/dialog.tsx +1 -1
  74. package/src/components/drawer/drawer.meta.md +19 -8
  75. package/src/components/drawer/drawer.stories.tsx +1 -1
  76. package/src/components/drawer/drawer.tsx +1 -0
  77. package/src/components/dropdown-menu/dropdown-menu.meta.md +42 -14
  78. package/src/components/dropdown-menu/dropdown-menu.stories.tsx +8 -0
  79. package/src/components/dropdown-menu/dropdown-menu.tsx +2 -2
  80. package/src/components/empty/empty.meta.md +20 -11
  81. package/src/components/empty/empty.stories.tsx +1 -1
  82. package/src/components/field/field.meta.md +27 -10
  83. package/src/components/field/field.stories.tsx +6 -3
  84. package/src/components/flex/flex.meta.md +23 -14
  85. package/src/components/flex/flex.stories.tsx +46 -14
  86. package/src/components/float-button/float-button.meta.md +35 -11
  87. package/src/components/float-button/float-button.stories.tsx +4 -2
  88. package/src/components/float-button/float-button.tsx +1 -1
  89. package/src/components/form/form.meta.md +57 -14
  90. package/src/components/form/form.stories.tsx +1 -1
  91. package/src/components/grid/grid.meta.md +31 -6
  92. package/src/components/grid/grid.stories.tsx +4 -2
  93. package/src/components/hover-card/hover-card.meta.md +21 -9
  94. package/src/components/hover-card/hover-card.stories.tsx +6 -2
  95. package/src/components/image/image.meta.md +24 -15
  96. package/src/components/image/image.stories.tsx +1 -1
  97. package/src/components/image/image.tsx +4 -4
  98. package/src/components/input/demo/addon.tsx +15 -0
  99. package/src/components/input/demo/basic.tsx +12 -0
  100. package/src/components/input/demo/clearable.tsx +21 -0
  101. package/src/components/input/demo/show-count.tsx +18 -0
  102. package/src/components/input/demo/sizes.tsx +15 -0
  103. package/src/components/input/demo/with-prefix-suffix.tsx +19 -0
  104. package/src/components/input/input.meta.md +21 -16
  105. package/src/components/input/input.stories.tsx +1 -1
  106. package/src/components/input/input.tsx +51 -47
  107. package/src/components/input-group/input-group.meta.md +26 -8
  108. package/src/components/input-group/input-group.stories.tsx +1 -1
  109. package/src/components/input-group/input-group.tsx +4 -3
  110. package/src/components/input-number/input-number.meta.md +26 -17
  111. package/src/components/input-number/input-number.stories.tsx +14 -3
  112. package/src/components/input-number/input-number.tsx +20 -6
  113. package/src/components/input-otp/input-otp.meta.md +22 -9
  114. package/src/components/input-otp/input-otp.stories.tsx +1 -1
  115. package/src/components/item/item.meta.md +32 -9
  116. package/src/components/item/item.stories.tsx +5 -2
  117. package/src/components/kbd/kbd.meta.md +29 -8
  118. package/src/components/kbd/kbd.stories.tsx +1 -1
  119. package/src/components/kbd/kbd.tsx +2 -1
  120. package/src/components/label/label.meta.md +14 -9
  121. package/src/components/masonry/masonry.meta.md +18 -9
  122. package/src/components/masonry/masonry.stories.tsx +4 -2
  123. package/src/components/masonry/masonry.tsx +1 -0
  124. package/src/components/mentions/mentions.meta.md +28 -19
  125. package/src/components/mentions/mentions.stories.tsx +1 -1
  126. package/src/components/mentions/mentions.tsx +2 -1
  127. package/src/components/menubar/menubar.meta.md +36 -14
  128. package/src/components/menubar/menubar.stories.tsx +8 -0
  129. package/src/components/menubar/menubar.tsx +2 -2
  130. package/src/components/native-select/native-select.meta.md +17 -8
  131. package/src/components/native-select/native-select.stories.tsx +6 -3
  132. package/src/components/navigation-menu/navigation-menu.meta.md +25 -11
  133. package/src/components/navigation-menu/navigation-menu.stories.tsx +11 -11
  134. package/src/components/navigation-menu/navigation-menu.tsx +3 -2
  135. package/src/components/notification/notification.meta.md +14 -5
  136. package/src/components/notification/notification.stories.tsx +5 -3
  137. package/src/components/notification/notification.tsx +3 -3
  138. package/src/components/pagination/pagination.meta.md +59 -28
  139. package/src/components/pagination/pagination.stories.tsx +9 -3
  140. package/src/components/popconfirm/popconfirm.meta.md +30 -21
  141. package/src/components/popconfirm/popconfirm.stories.tsx +1 -2
  142. package/src/components/popconfirm/popconfirm.tsx +1 -1
  143. package/src/components/popover/popover.meta.md +13 -8
  144. package/src/components/popover/popover.stories.tsx +1 -1
  145. package/src/components/progress/progress.meta.md +28 -13
  146. package/src/components/progress/progress.stories.tsx +1 -1
  147. package/src/components/progress/progress.tsx +6 -6
  148. package/src/components/radio-group/radio-group.meta.md +17 -12
  149. package/src/components/radio-group/radio-group.stories.tsx +1 -1
  150. package/src/components/rate/rate.meta.md +25 -16
  151. package/src/components/rate/rate.stories.tsx +11 -3
  152. package/src/components/rate/rate.tsx +2 -2
  153. package/src/components/resizable/resizable.meta.md +19 -8
  154. package/src/components/resizable/resizable.stories.tsx +1 -1
  155. package/src/components/result/result.meta.md +21 -12
  156. package/src/components/result/result.stories.tsx +2 -6
  157. package/src/components/result/result.tsx +3 -3
  158. package/src/components/scroll-area/scroll-area.meta.md +10 -5
  159. package/src/components/scroll-area/scroll-area.stories.tsx +8 -0
  160. package/src/components/scroll-area/scroll-area.tsx +3 -3
  161. package/src/components/segmented/segmented.meta.md +19 -14
  162. package/src/components/segmented/segmented.stories.tsx +35 -6
  163. package/src/components/select/select.meta.md +22 -9
  164. package/src/components/select/select.stories.tsx +1 -1
  165. package/src/components/select/select.tsx +2 -2
  166. package/src/components/separator/separator.meta.md +16 -11
  167. package/src/components/separator/separator.stories.tsx +1 -1
  168. package/src/components/sheet/sheet.meta.md +22 -11
  169. package/src/components/sheet/sheet.stories.tsx +1 -1
  170. package/src/components/sidebar/sidebar.meta.md +47 -18
  171. package/src/components/sidebar/sidebar.stories.tsx +10 -5
  172. package/src/components/skeleton/skeleton.meta.md +33 -10
  173. package/src/components/skeleton/skeleton.stories.tsx +1 -1
  174. package/src/components/slider/slider.meta.md +12 -7
  175. package/src/components/slider/slider.stories.tsx +1 -1
  176. package/src/components/sonner/sonner.meta.md +8 -3
  177. package/src/components/sonner/sonner.stories.tsx +13 -8
  178. package/src/components/space/space.meta.md +22 -13
  179. package/src/components/space/space.stories.tsx +20 -6
  180. package/src/components/spinner/spinner.meta.md +23 -10
  181. package/src/components/spinner/spinner.stories.tsx +1 -1
  182. package/src/components/statistic/statistic.meta.md +37 -16
  183. package/src/components/statistic/statistic.stories.tsx +2 -6
  184. package/src/components/statistic/statistic.tsx +1 -1
  185. package/src/components/steps/steps.meta.md +21 -12
  186. package/src/components/steps/steps.stories.tsx +7 -2
  187. package/src/components/switch/switch.meta.md +16 -11
  188. package/src/components/switch/switch.stories.tsx +1 -1
  189. package/src/components/switch/switch.tsx +58 -36
  190. package/src/components/table/table.meta.md +24 -9
  191. package/src/components/table/table.stories.tsx +9 -4
  192. package/src/components/tabs/tabs.meta.md +14 -9
  193. package/src/components/tabs/tabs.stories.tsx +8 -0
  194. package/src/components/tag/tag.meta.md +39 -10
  195. package/src/components/tag/tag.stories.tsx +7 -2
  196. package/src/components/tag/tag.tsx +3 -3
  197. package/src/components/textarea/textarea.meta.md +17 -12
  198. package/src/components/textarea/textarea.stories.tsx +1 -1
  199. package/src/components/textarea/textarea.tsx +1 -1
  200. package/src/components/time-picker/time-picker.meta.md +38 -15
  201. package/src/components/time-picker/time-picker.stories.tsx +44 -6
  202. package/src/components/time-picker/time-picker.tsx +74 -10
  203. package/src/components/timeline/timeline.meta.md +20 -11
  204. package/src/components/timeline/timeline.stories.tsx +14 -4
  205. package/src/components/timeline/timeline.tsx +3 -2
  206. package/src/components/toggle/toggle.meta.md +14 -9
  207. package/src/components/toggle/toggle.stories.tsx +1 -1
  208. package/src/components/toggle-group/toggle-group.meta.md +16 -11
  209. package/src/components/toggle-group/toggle-group.stories.tsx +1 -1
  210. package/src/components/tooltip/tooltip.meta.md +18 -13
  211. package/src/components/tooltip/tooltip.stories.tsx +1 -1
  212. package/src/components/tour/tour.meta.md +25 -16
  213. package/src/components/tour/tour.stories.tsx +1 -1
  214. package/src/components/tour/tour.tsx +1 -1
  215. package/src/components/transfer/transfer.meta.md +29 -20
  216. package/src/components/transfer/transfer.stories.tsx +2 -6
  217. package/src/components/tree/tree.meta.md +36 -23
  218. package/src/components/tree/tree.stories.tsx +30 -11
  219. package/src/components/tree-select/tree-select.meta.md +37 -22
  220. package/src/components/tree-select/tree-select.stories.tsx +1 -1
  221. package/src/components/tree-select/tree-select.tsx +1 -1
  222. package/src/components/typography/typography.meta.md +41 -16
  223. package/src/components/typography/typography.stories.tsx +4 -8
  224. package/src/components/typography/typography.tsx +5 -3
  225. package/src/components/upload/upload.meta.md +31 -22
  226. package/src/components/upload/upload.stories.tsx +8 -14
  227. package/src/components/watermark/watermark.meta.md +26 -17
  228. package/src/components/watermark/watermark.stories.tsx +4 -2
  229. package/src/components/watermark/watermark.tsx +1 -0
@@ -0,0 +1,19 @@
1
+ import { Button } from '@/components/ui/button';
2
+
3
+ /**
4
+ * 七种 variant:default / secondary / destructive / outline / dashed / ghost / link。
5
+ * 视觉差异由 OpenTrek semantic tokens 决定,无任何 mock 值。
6
+ */
7
+ export default function Demo() {
8
+ return (
9
+ <div className="flex flex-wrap items-center gap-3">
10
+ <Button>Default</Button>
11
+ <Button variant="secondary">Secondary</Button>
12
+ <Button variant="destructive">Destructive</Button>
13
+ <Button variant="outline">Outline</Button>
14
+ <Button variant="dashed">Dashed</Button>
15
+ <Button variant="ghost">Ghost</Button>
16
+ <Button variant="link">Link</Button>
17
+ </div>
18
+ );
19
+ }
@@ -0,0 +1,20 @@
1
+ import { ChevronRight, Download } from 'lucide-react';
2
+ import { Button } from '@/components/ui/button';
3
+
4
+ /**
5
+ * 带图标按钮:通过 `icon` prop 传入 lucide-react 节点;
6
+ * 用 `iconPosition` 切换图标位置(默认 start)。
7
+ */
8
+ export default function Demo() {
9
+ return (
10
+ <div className="flex flex-wrap items-center gap-3">
11
+ <Button icon={<Download />}>下载</Button>
12
+ <Button icon={<ChevronRight />} iconPosition="end">
13
+ 下一步
14
+ </Button>
15
+ <Button variant="outline" icon={<Download />}>
16
+ Outline + Icon
17
+ </Button>
18
+ </div>
19
+ );
20
+ }
@@ -4,10 +4,11 @@ name: ButtonGroup
4
4
  type: component
5
5
  category: form
6
6
  since: 0.1.0
7
- package: "@teamix-evo/ui"
7
+ package: '@teamix-evo/ui'
8
+ displayName: 按钮组
8
9
  ---
9
10
 
10
- # ButtonGroup
11
+ # ButtonGroup 按钮组
11
12
 
12
13
  按钮组 — shadcn 2025-10 新增,**等价 antd `Space.Compact`**(v6 替代旧 `Button.Group`)。把多个按钮 / 输入框"粘"在一起共享边线,用于 Split Button、Toolbar、Input + Button 拼装等场景。配 `ButtonGroupText` 渲染只读 addon 文本。
13
14
 
@@ -23,21 +24,28 @@ package: "@teamix-evo/ui"
23
24
  - 互斥单选切换 → `ToggleGroup`(语义更强)
24
25
  - 不相干的按钮 → 普通 `Button` + flex gap
25
26
 
27
+ ## Props
28
+
26
29
  <!-- auto:props:begin -->
27
- | 名称 | 类型 | 默认值 | 必填 | 说明 |
28
- | --- | --- | --- | --- | --- |
29
- | `orientation` | `'horizontal' \| 'vertical'` | `"horizontal"` | | 排列方向。 |
30
- | `attached` | `boolean` | `true` | – | 是否把按钮"粘"在一起去除边距(antd `Space.Compact` 等价行为)— `false` 时按钮间留 8px gap。 |
30
+
31
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
32
+ | ------------- | ---------------------------- | -------------- | ---- | ----------------------------------------------------------------------------------------- |
33
+ | `orientation` | `'horizontal' \| 'vertical'` | `"horizontal"` | – | 排列方向。 |
34
+ | `attached` | `boolean` | `true` | – | 是否把按钮"粘"在一起去除边距(antd `Space.Compact` 等价行为)— `false` 时按钮间留 8px gap。 |
35
+
31
36
  <!-- auto:props:end -->
32
37
 
38
+ ## 依赖
39
+
33
40
  <!-- auto:deps:begin -->
41
+
34
42
  ### 同库依赖
35
43
 
36
44
  > `teamix-evo ui add button-group` 时,以下 entry 会被自动连带安装(无需手动 add)。
37
45
 
38
- | Entry | 类型 | 描述 |
39
- | --- | --- | --- |
40
- | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
46
+ | Entry | 类型 | 描述 |
47
+ | ----- | ---- | -------------------------------------------------- |
48
+ | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
41
49
 
42
50
  ### npm 依赖
43
51
 
@@ -46,6 +54,7 @@ package: "@teamix-evo/ui"
46
54
  ```bash
47
55
  pnpm add class-variance-authority@^0.7.0
48
56
  ```
57
+
49
58
  <!-- auto:deps:end -->
50
59
 
51
60
  ## AI 生成纪律
@@ -12,12 +12,15 @@ const meta: Meta<typeof ButtonGroup> = {
12
12
  docs: {
13
13
  description: {
14
14
  component:
15
- '按钮组 — 把多个按钮 / 输入框粘在一起共享边线(Split Button、Toolbar、Input + Button 拼装)。配 ButtonGroupText 渲染只读 addon。shadcn 2025-10 新增,等价 antd `Space.Compact`(v6 替代旧 `Button.Group`)。视觉走 OpenTrek tokens,所有样式来自 `@teamix-evo/design`,无 mock。',
15
+ '按钮组 — 把多个按钮 / 输入框粘在一起共享边线(Split Button、Toolbar、Input + Button 拼装)。配 ButtonGroupText 渲染只读 addon。shadcn 2025-10 新增,等价 antd `Space.Compact`(v6 替代旧 `Button.Group`)。',
16
16
  },
17
17
  },
18
18
  },
19
19
  argTypes: {
20
- orientation: { control: 'inline-radio', options: ['horizontal', 'vertical'] },
20
+ orientation: {
21
+ control: 'inline-radio',
22
+ options: ['horizontal', 'vertical'],
23
+ },
21
24
  attached: { control: 'boolean' },
22
25
  },
23
26
  args: { orientation: 'horizontal', attached: true },
@@ -1,13 +1,14 @@
1
1
  ---
2
2
  id: calendar
3
3
  name: Calendar
4
+ displayName: 日历
4
5
  type: component
5
6
  category: form
6
7
  since: 0.1.0
7
8
  package: '@teamix-evo/ui'
8
9
  ---
9
10
 
10
- # Calendar
11
+ # Calendar 日历
11
12
 
12
13
  日期选择面板 — 基于 [`react-day-picker`](https://react-day-picker.js.org/),与 design tokens 对齐。
13
14
  **两种用法**:
@@ -32,11 +33,13 @@ package: '@teamix-evo/ui'
32
33
  > 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成。
33
34
 
34
35
  <!-- auto:props:begin -->
35
- | 名称 | 类型 | 默认值 | 必填 | 说明 |
36
- | --- | --- | --- | --- | --- |
37
- | `className` | `string` | | | 容器 className。组件内部默认带 `p-3`,会与传入值自动 merge。 |
38
- | `classNames` | `DayPickerProps['classNames']` | – | – | 覆盖底层 react-day-picker 的 classNames slots(深度自定义日格 / 表头 / 导航等) |
39
- | `showOutsideDays` | `boolean` | `true` | – | 是否显示当月范围外的日期(灰色填充,占位补齐周表格)。 |
36
+
37
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
38
+ | ----------------- | ------------------------------ | ------ | ---- | ------------------------------------------------------------------------------- |
39
+ | `className` | `string` | – | – | 容器 className。组件内部默认带 `p-3`,会与传入值自动 merge |
40
+ | `classNames` | `DayPickerProps['classNames']` | | – | 覆盖底层 react-day-picker 的 classNames slots(深度自定义日格 / 表头 / 导航等)。 |
41
+ | `showOutsideDays` | `boolean` | `true` | – | 是否显示当月范围外的日期(灰色填充,占位补齐周表格)。 |
42
+
40
43
  <!-- auto:props:end -->
41
44
 
42
45
  ## 依赖
@@ -44,13 +47,14 @@ package: '@teamix-evo/ui'
44
47
  > 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成,数据源是 [`manifest.json`](../../../manifest.json)。**手工编辑 marker 之间的内容会在下次生成时被覆盖**。
45
48
 
46
49
  <!-- auto:deps:begin -->
50
+
47
51
  ### 同库依赖
48
52
 
49
53
  > `teamix-evo ui add calendar` 时,以下 entry 会被自动连带安装(无需手动 add)。
50
54
 
51
- | Entry | 类型 | 描述 |
52
- | --- | --- | --- |
53
- | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
55
+ | Entry | 类型 | 描述 |
56
+ | -------- | --------- | --------------------------------------------------------------------------------------- |
57
+ | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
54
58
  | `button` | component | 通用按钮 — shadcn 实现 + antd 功能扩展(loading / icon / shape / block / dashed variant) |
55
59
 
56
60
  ### npm 依赖
@@ -60,6 +64,7 @@ package: '@teamix-evo/ui'
60
64
  ```bash
61
65
  pnpm add react-day-picker@^9.0.0 lucide-react@^0.460.0
62
66
  ```
67
+
63
68
  <!-- auto:deps:end -->
64
69
 
65
70
  > 透传所有 react-day-picker `<DayPicker>` props(`mode` / `selected` / `onSelect` / `disabled` / `fromYear` / `toYear` / `numberOfMonths` 等)。完整 API:[react-day-picker.js.org](https://react-day-picker.js.org/)。
@@ -12,7 +12,7 @@ const meta: Meta<typeof Calendar> = {
12
12
  docs: {
13
13
  description: {
14
14
  component:
15
- '日历 — 内联日期选择面板。基于 [`react-day-picker@9`](https://daypicker.dev/) + design tokens,支持 `mode="single" | "multiple" | "range"` 三种选择模式、年份 / 月份导航、`disabled` 函数式禁用、`numberOfMonths` 多月并排;通常配 `Popover` 包装为 `DatePicker`。视觉走 OpenTrek semantic tokens,所有样式来自 `@teamix-evo/design`,无 mock。',
15
+ '日历 — 内联日期选择面板。基于 react-day-picker@9 + design tokens,支持 `mode="single" | "multiple" | "range"` 三种选择模式、年份 / 月份导航、`disabled` 函数式禁用、`numberOfMonths` 多月并排;通常配 `Popover` 包装为 `DatePicker`。',
16
16
  },
17
17
  },
18
18
  },
@@ -59,7 +59,7 @@ function Calendar({
59
59
  month_grid: 'w-full border-collapse',
60
60
  weekdays: 'flex',
61
61
  weekday:
62
- 'text-muted-foreground rounded-md w-8 font-normal text-[0.8rem]',
62
+ 'text-muted-foreground rounded-md w-8 font-normal text-xs-cal',
63
63
  week: 'flex w-full mt-2',
64
64
  day: cn(
65
65
  'relative p-0 text-center text-sm focus-within:relative focus-within:z-20',
@@ -1,13 +1,14 @@
1
1
  ---
2
2
  id: card
3
3
  name: Card
4
+ displayName: 卡片
4
5
  type: component
5
6
  category: layout
6
7
  since: 0.1.0
7
- package: "@teamix-evo/ui"
8
+ package: '@teamix-evo/ui'
8
9
  ---
9
10
 
10
- # Card
11
+ # Card 卡片
11
12
 
12
13
  卡片容器 — shadcn 组合式(`Card / Header / Title / Description / Content / Footer`)+ antd 并集(`hoverable / loading / Cover / Actions / Meta / extra`)。
13
14
  **单卡覆盖列表项 / 详情卡 / 资源卡 / 媒体卡多种形态**。
@@ -30,10 +31,34 @@ package: "@teamix-evo/ui"
30
31
  > 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成。
31
32
 
32
33
  <!-- auto:props:begin -->
33
- | 名称 | 类型 | 默认值 | 必填 | 说明 |
34
- | --- | --- | --- | --- | --- |
35
- | `hoverable` | `boolean` | `false` | – | 鼠标 hover 时的视觉反馈(antd `hoverable` 并集) — 阴影升级 + 微交互。 |
36
- | `loading` | `boolean` | `false` | | 加载态(antd `loading` 并集) — 整卡渲染为骨架屏占位,不展示 children。 |
34
+
35
+ #### Card
36
+
37
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
38
+ | ----------- | --------- | ------- | ---- | -------------------------------------------------------------------- |
39
+ | `hoverable` | `boolean` | `false` | – | 鼠标 hover 时的视觉反馈(antd `hoverable` 并集) — 阴影升级 + 微交互。 |
40
+ | `loading` | `boolean` | `false` | – | 加载态(antd `loading` 并集) — 整卡渲染为骨架屏占位,不展示 children。 |
41
+
42
+ #### CardHeader
43
+
44
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
45
+ | ------- | ----------------- | ------ | ---- | -------------------------------------------------------------------------- |
46
+ | `extra` | `React.ReactNode` | – | – | 右侧附加内容(antd `extra` 并集) — 用 flex 撑开,与 title/description 同行。 |
47
+
48
+ #### CardActions
49
+
50
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
51
+ | ------- | ------------------- | ------ | ---- | ----------------------------------------------------------- |
52
+ | `items` | `React.ReactNode[]` | – | ✓ | 操作项数组(antd `actions` 并集) — 自动均分等宽,中间分隔线。 |
53
+
54
+ #### CardMeta
55
+
56
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
57
+ | ------------- | ----------------- | ------ | ---- | ---------------------------------------- |
58
+ | `avatar` | `React.ReactNode` | – | – | 头像槽(antd `Card.Meta` `avatar` 并集)。 |
59
+ | `title` | `React.ReactNode` | – | – | 标题(粗体)。 |
60
+ | `description` | `React.ReactNode` | – | – | 描述。 |
61
+
37
62
  <!-- auto:props:end -->
38
63
 
39
64
  ## 依赖
@@ -41,21 +66,21 @@ package: "@teamix-evo/ui"
41
66
  > 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成,数据源是 [`manifest.json`](../../../manifest.json)。**手工编辑 marker 之间的内容会在下次生成时被覆盖**。
42
67
 
43
68
  <!-- auto:deps:begin -->
69
+
44
70
  ### 同库依赖
45
71
 
46
72
  > `teamix-evo ui add card` 时,以下 entry 会被自动连带安装(无需手动 add)。
47
73
 
48
- | Entry | 类型 | 描述 |
49
- | --- | --- | --- |
50
- | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
74
+ | Entry | 类型 | 描述 |
75
+ | ---------- | --------- | ------------------------------------------------------------------------------------------------- |
76
+ | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
51
77
  | `skeleton` | component | 骨架屏 — shadcn pulse 单元素 + antd Avatar/Image/Button/Input/Paragraph 子家族,自动 motion-reduce |
52
78
 
53
79
  ### npm 依赖
54
80
 
55
81
  _无 — 本组件不依赖任何 npm 包。_
56
- <!-- auto:deps:end -->
57
82
 
58
- > 子组件:`Card`(主容器)/ `CardHeader`(支持 `extra`)/ `CardTitle` / `CardDescription` / `CardContent` / `CardFooter` / `CardCover`(顶部封面)/ `CardActions`(底部分隔操作栏)/ `CardMeta`(avatar + title + description 行)。
83
+ <!-- auto:deps:end -->
59
84
 
60
85
  ## AI 生成纪律
61
86
 
@@ -22,6 +22,14 @@ const meta: Meta<typeof Card> = {
22
22
  title: '布局与容器 · Layout/Card',
23
23
  component: Card,
24
24
  tags: ['autodocs'],
25
+ parameters: {
26
+ docs: {
27
+ description: {
28
+ component:
29
+ '卡片容器 — shadcn 组合式(Card / Header / Title / Description / Content / Footer) + antd 并集(hoverable / loading / Cover / Actions / Meta / extra)。单卡覆盖列表项 / 详情卡 / 资源卡 / 媒体卡多种形态。',
30
+ },
31
+ },
32
+ },
25
33
  argTypes: {
26
34
  hoverable: { control: 'boolean' },
27
35
  loading: { control: 'boolean' },
@@ -1,13 +1,14 @@
1
1
  ---
2
2
  id: carousel
3
3
  name: Carousel
4
+ displayName: 走马灯
4
5
  type: component
5
6
  category: data-display
6
7
  since: 0.1.0
7
- package: "@teamix-evo/ui"
8
+ package: '@teamix-evo/ui'
8
9
  ---
9
10
 
10
- # Carousel
11
+ # Carousel 走马灯
11
12
 
12
13
  走马灯 — 基于 [`embla-carousel-react`](https://www.embla-carousel.com/),性能与可访问性出色。
13
14
  对应 antd `Carousel` 的核心场景。
@@ -30,12 +31,14 @@ package: "@teamix-evo/ui"
30
31
  > 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成。
31
32
 
32
33
  <!-- auto:props:begin -->
33
- | 名称 | 类型 | 默认值 | 必填 | 说明 |
34
- | --- | --- | --- | --- | --- |
35
- | `opts` | `CarouselOptions` | | | embla 选项透传(`loop / align / startIndex / dragFree` 等)。 |
36
- | `plugins` | `CarouselPlugin` | – | – | embla 插件数组(`autoplay`、`fade` 等)。 |
37
- | `orientation` | `'horizontal' \| 'vertical'` | `"horizontal"` | – | 滚动方向。 |
38
- | `setApi` | `(api: CarouselApi) => void` | | – | 提供 embla API 的回调,用于业务侧自行控制(scrollNext / scrollTo 等)。 |
34
+
35
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
36
+ | ------------- | ---------------------------- | -------------- | ---- | -------------------------------------------------------------------- |
37
+ | `opts` | `CarouselOptions` | – | – | embla 选项透传(`loop / align / startIndex / dragFree` 等)。 |
38
+ | `plugins` | `CarouselPlugin` | | – | embla 插件数组(`autoplay`、`fade` 等)。 |
39
+ | `orientation` | `'horizontal' \| 'vertical'` | `"horizontal"` | – | 滚动方向。 |
40
+ | `setApi` | `(api: CarouselApi) => void` | – | – | 提供 embla API 的回调,用于业务侧自行控制(scrollNext / scrollTo 等)。 |
41
+
39
42
  <!-- auto:props:end -->
40
43
 
41
44
  ## 依赖
@@ -43,13 +46,14 @@ package: "@teamix-evo/ui"
43
46
  > 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成,数据源是 [`manifest.json`](../../../manifest.json)。**手工编辑 marker 之间的内容会在下次生成时被覆盖**。
44
47
 
45
48
  <!-- auto:deps:begin -->
49
+
46
50
  ### 同库依赖
47
51
 
48
52
  > `teamix-evo ui add carousel` 时,以下 entry 会被自动连带安装(无需手动 add)。
49
53
 
50
- | Entry | 类型 | 描述 |
51
- | --- | --- | --- |
52
- | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
54
+ | Entry | 类型 | 描述 |
55
+ | -------- | --------- | --------------------------------------------------------------------------------------- |
56
+ | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
53
57
  | `button` | component | 通用按钮 — shadcn 实现 + antd 功能扩展(loading / icon / shape / block / dashed variant) |
54
58
 
55
59
  ### npm 依赖
@@ -59,6 +63,7 @@ package: "@teamix-evo/ui"
59
63
  ```bash
60
64
  pnpm add embla-carousel-react@^8.0.0 lucide-react@^0.460.0
61
65
  ```
66
+
62
67
  <!-- auto:deps:end -->
63
68
 
64
69
  > 子组件:`Carousel`(主容器,内置 embla)/ `CarouselContent`(可滚动 wrapper)/ `CarouselItem`(单页)/ `CarouselPrevious` + `CarouselNext`(导航按钮)+ `useCarousel()` 内部 hook。
@@ -12,7 +12,15 @@ const meta: Meta<typeof Carousel> = {
12
12
  title: '数据展示 · Data Display/Carousel',
13
13
  component: Carousel,
14
14
  tags: ['autodocs'],
15
- parameters: { layout: 'centered' },
15
+ parameters: {
16
+ layout: 'centered',
17
+ docs: {
18
+ description: {
19
+ component:
20
+ '走马灯 — 基于 embla-carousel-react,支持单页 / 多页 / 循环 / 拖拽 / 自动播放插件。对应 antd `Carousel` 的核心场景。',
21
+ },
22
+ },
23
+ },
16
24
  };
17
25
 
18
26
  export default meta;
@@ -41,10 +49,7 @@ export const Single: Story = {
41
49
  export const ThreePerView: Story = {
42
50
  parameters: { controls: { disable: true } },
43
51
  render: () => (
44
- <Carousel
45
- opts={{ align: 'start' }}
46
- className="w-full max-w-2xl"
47
- >
52
+ <Carousel opts={{ align: 'start' }} className="w-full max-w-2xl">
48
53
  <CarouselContent>
49
54
  {Array.from({ length: 8 }).map((_, i) => (
50
55
  <CarouselItem key={i} className="md:basis-1/3">
@@ -1,13 +1,14 @@
1
1
  ---
2
2
  id: cascader
3
3
  name: Cascader
4
+ displayName: 级联选择
4
5
  type: component
5
6
  category: form
6
7
  since: 0.1.0
7
- package: "@teamix-evo/ui"
8
+ package: '@teamix-evo/ui'
8
9
  ---
9
10
 
10
- # Cascader
11
+ # Cascader 级联选择
11
12
 
12
13
  级联选择 — antd 独有补足。**等价 antd `Cascader`**。多级联动选择(地区 / 分类 / 组织架构 / 文件夹路径),选项树由 `options.children` 表达;点击触发器弹出多列面板,**叶子触发 onChange**(可改 `changeOnSelect` 为每级触发)。
13
14
 
@@ -23,31 +24,38 @@ package: "@teamix-evo/ui"
23
24
  - 树形多选 → `TreeSelect`(可勾选)
24
25
  - 离散级别独立选择 → 多个 `Select` 并排(级联弱)
25
26
 
27
+ ## Props
28
+
26
29
  <!-- auto:props:begin -->
27
- | 名称 | 类型 | 默认值 | 必填 | 说明 |
28
- | --- | --- | --- | --- | --- |
29
- | `options` | `CascaderOption[]` | | | 级联选项树(antd `options` 并集)。 |
30
- | `value` | `string[]` | – | | 受控值(每层 value 数组)。 |
31
- | `defaultValue` | `string[]` | – | – | uncontrolled 初值。 |
32
- | `onChange` | `(value: string[], selectedOptions: CascaderOption[]) => void` | – | – | 值变化回调 — 触发条件:点选叶子节点或显式 changeOnSelect。 |
33
- | `changeOnSelect` | `boolean` | `false` | – | 每选中一级即触发 onChange(antd `changeOnSelect` 并集) 默认仅选叶子触发。 |
34
- | `placeholder` | `string` | `"请选择"` | – | 占位文本。 |
35
- | `separator` | `string` | `" / "` | – | 路径展示的分隔符。 |
36
- | `disabled` | `boolean` | | – | 整体禁用。 |
37
- | `className` | `string` | – | – | 触发器 className(给外层 Button)。 |
38
- | `size` | `'sm' \| 'default' \| 'lg'` | `"default"` | – | 触发器尺寸。 |
30
+
31
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
32
+ | ---------------- | -------------------------------------------------------------- | ----------- | ---- | -------------------------------------------------------------------------- |
33
+ | `options` | `CascaderOption[]` | – | | 级联选项树(antd `options` 并集)。 |
34
+ | `value` | `string[]` | – | – | 受控值(每层 value 数组)。 |
35
+ | `defaultValue` | `string[]` | – | – | uncontrolled 初值。 |
36
+ | `onChange` | `(value: string[], selectedOptions: CascaderOption[]) => void` | – | | 值变化回调触发条件:点选叶子节点或显式 changeOnSelect。 |
37
+ | `changeOnSelect` | `boolean` | `false` | – | 每选中一级即触发 onChange(antd `changeOnSelect` 并集) — 默认仅选叶子触发。 |
38
+ | `placeholder` | `string` | `"请选择"` | – | 占位文本。 |
39
+ | `separator` | `string` | `" / "` | – | 路径展示的分隔符。 |
40
+ | `disabled` | `boolean` | – | – | 整体禁用。 |
41
+ | `className` | `string` | | – | 触发器 className(给外层 Button)。 |
42
+ | `size` | `'sm' \| 'default' \| 'lg'` | `"default"` | – | 触发器尺寸。 |
43
+
39
44
  <!-- auto:props:end -->
40
45
 
46
+ ## 依赖
47
+
41
48
  <!-- auto:deps:begin -->
49
+
42
50
  ### 同库依赖
43
51
 
44
52
  > `teamix-evo ui add cascader` 时,以下 entry 会被自动连带安装(无需手动 add)。
45
53
 
46
- | Entry | 类型 | 描述 |
47
- | --- | --- | --- |
48
- | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
49
- | `button` | component | 通用按钮 — shadcn 实现 + antd 功能扩展(loading / icon / shape / block / dashed variant) |
50
- | `popover` | component | 可交互浮层 — Radix Popover + antd arrow 并集 |
54
+ | Entry | 类型 | 描述 |
55
+ | --------- | --------- | --------------------------------------------------------------------------------------- |
56
+ | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
57
+ | `button` | component | 通用按钮 — shadcn 实现 + antd 功能扩展(loading / icon / shape / block / dashed variant) |
58
+ | `popover` | component | 可交互浮层 — Radix Popover + antd arrow 并集 |
51
59
 
52
60
  ### npm 依赖
53
61
 
@@ -56,6 +64,7 @@ package: "@teamix-evo/ui"
56
64
  ```bash
57
65
  pnpm add lucide-react@^0.460.0
58
66
  ```
67
+
59
68
  <!-- auto:deps:end -->
60
69
 
61
70
  ## AI 生成纪律
@@ -10,7 +10,7 @@ const meta: Meta<typeof Cascader> = {
10
10
  docs: {
11
11
  description: {
12
12
  component:
13
- '级联选择 — 多级联动(地区 / 分类 / 文件夹路径),多列面板,叶子触发 onChange(可改 changeOnSelect 为每级触发)。等价 antd `Cascader`。视觉走 OpenTrek tokens,所有样式来自 `@teamix-evo/design`,无 mock。',
13
+ '级联选择 — 多级联动(地区 / 分类 / 文件夹路径),多列面板,叶子触发 onChange(可改 changeOnSelect 为每级触发)。等价 antd `Cascader`。',
14
14
  },
15
15
  },
16
16
  },
@@ -52,7 +52,13 @@ const regions: CascaderOption[] = [
52
52
  {
53
53
  value: 'us',
54
54
  label: '美国',
55
- children: [{ value: 'ca', label: '加州', children: [{ value: 'sf', label: '旧金山' }] }],
55
+ children: [
56
+ {
57
+ value: 'ca',
58
+ label: '加州',
59
+ children: [{ value: 'sf', label: '旧金山' }],
60
+ },
61
+ ],
56
62
  },
57
63
  ];
58
64
 
@@ -67,12 +73,7 @@ export const ChangeOnSelect: Story = {
67
73
  const [v, setV] = React.useState<string[]>([]);
68
74
  return (
69
75
  <div className="flex flex-col gap-2">
70
- <Cascader
71
- options={regions}
72
- changeOnSelect
73
- value={v}
74
- onChange={setV}
75
- />
76
+ <Cascader options={regions} changeOnSelect value={v} onChange={setV} />
76
77
  <div className="text-xs text-muted-foreground">
77
78
  value: {v.length ? v.join(' / ') : '(空)'}
78
79
  </div>
@@ -144,7 +144,7 @@ const Cascader = React.forwardRef<HTMLButtonElement, CascaderProps>(
144
144
  size={size}
145
145
  disabled={disabled}
146
146
  className={cn(
147
- 'min-w-[200px] justify-between font-normal',
147
+ 'min-w-panel-sm justify-between font-normal',
148
148
  !display && 'text-muted-foreground',
149
149
  className,
150
150
  )}
@@ -159,7 +159,7 @@ const Cascader = React.forwardRef<HTMLButtonElement, CascaderProps>(
159
159
  key={level}
160
160
  role="listbox"
161
161
  className={cn(
162
- 'min-w-[160px] max-h-72 overflow-auto py-1 text-sm',
162
+ 'min-w-submenu max-h-72 overflow-auto py-1 text-sm',
163
163
  level > 0 && 'border-l',
164
164
  )}
165
165
  >
@@ -4,10 +4,11 @@ name: Checkbox
4
4
  type: component
5
5
  category: form
6
6
  since: 0.1.0
7
- package: "@teamix-evo/ui"
7
+ package: '@teamix-evo/ui'
8
+ displayName: 复选框
8
9
  ---
9
10
 
10
- # Checkbox
11
+ # Checkbox 复选框
11
12
 
12
13
  复选框 — Radix Checkbox(原生支持 indeterminate)+ antd `Checkbox.Group`(`options` 数组驱动)。
13
14
 
@@ -28,7 +29,23 @@ package: "@teamix-evo/ui"
28
29
  > 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成。
29
30
 
30
31
  <!-- auto:props:begin -->
31
- _(no props)_
32
+
33
+ #### Checkbox
34
+
35
+ _透传 Radix Checkbox.Root 所有 props(`checked` / `defaultChecked` / `onCheckedChange` / `disabled` / `required` / `name` / `value` 等),无自定义扩展 props。_
36
+
37
+ #### CheckboxGroup
38
+
39
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
40
+ | -------------- | ---------------------------- | -------------- | ---- | ---------------------------------------------- |
41
+ | `options` | `CheckboxGroupOption[]` | – | ✔ | 选项数据。 |
42
+ | `value` | `string[]` | – | – | 受控值;`string[]` 表示当前选中的 value 集合。 |
43
+ | `defaultValue` | `string[]` | – | – | uncontrolled 初值。 |
44
+ | `disabled` | `boolean` | – | – | 整组禁用。 |
45
+ | `name` | `string` | – | – | 整组的 name(submitted form 用)。 |
46
+ | `orientation` | `'horizontal' \| 'vertical'` | `"horizontal"` | – | 排列方向。 |
47
+ | `onChange` | `(next: string[]) => void` | – | – | 选中变化回调。 |
48
+
32
49
  <!-- auto:props:end -->
33
50
 
34
51
  ## 依赖
@@ -36,13 +53,14 @@ _(no props)_
36
53
  > 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成,数据源是 [`manifest.json`](../../../manifest.json)。**手工编辑 marker 之间的内容会在下次生成时被覆盖**。
37
54
 
38
55
  <!-- auto:deps:begin -->
56
+
39
57
  ### 同库依赖
40
58
 
41
59
  > `teamix-evo ui add checkbox` 时,以下 entry 会被自动连带安装(无需手动 add)。
42
60
 
43
- | Entry | 类型 | 描述 |
44
- | --- | --- | --- |
45
- | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
61
+ | Entry | 类型 | 描述 |
62
+ | ----- | ---- | -------------------------------------------------- |
63
+ | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
46
64
 
47
65
  ### npm 依赖
48
66
 
@@ -51,10 +69,10 @@ _(no props)_
51
69
  ```bash
52
70
  pnpm add @radix-ui/react-checkbox@^1.1.0 lucide-react@^0.460.0
53
71
  ```
72
+
54
73
  <!-- auto:deps:end -->
55
74
 
56
- > 透传 Radix Checkbox.Root 所有 props(`checked` / `defaultChecked` / `onCheckedChange` / `disabled` / `required` / `name` / `value` 等)。
57
- > 子组件 `CheckboxGroup` 的 props 详见 [`checkbox.tsx`](./checkbox.tsx) 的 `CheckboxGroupProps`。
75
+ > 透传 Radix Checkbox.Root 所有 props(`checked` / `defaultChecked` / `onCheckedChange` / `disabled` / `required` / `name` / `value` 等)。
58
76
 
59
77
  ## AI 生成纪律
60
78
 
@@ -10,7 +10,7 @@ const meta: Meta<typeof Checkbox> = {
10
10
  docs: {
11
11
  description: {
12
12
  component:
13
- '复选框 — 在一组选项中进行多选,或单独切换某个布尔状态。基于 Radix Checkbox(原生可访问 + indeterminate 三态) + antd `Checkbox.Group` 批量管理;支持受控 / 非受控、`disabled`、中间态。视觉走 OpenTrek semantic tokens,所有样式来自 `@teamix-evo/design`,无 mock。',
13
+ '复选框 — 在一组选项中进行多选,或单独切换某个布尔状态。基于 Radix Checkbox(原生可访问 + indeterminate 三态)+ antd `Checkbox.Group` 批量管理;支持受控 / 非受控、`disabled`、中间态。',
14
14
  },
15
15
  },
16
16
  },