@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
@@ -1,13 +1,14 @@
1
1
  ---
2
2
  id: tree
3
3
  name: Tree
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
- # Tree
11
+ # Tree 树形控件
11
12
 
12
13
  树形控件 — antd 独有补足。递归层级展示(组织架构、文件系统、分类目录),支持**可展开 / 可单选 / 可勾选(父子级联 + 半选)**,受控与非受控并存。Radix 未提供 tree primitive — 本组件自实现递归 + 受控逻辑。
13
14
 
@@ -23,32 +24,39 @@ package: "@teamix-evo/ui"
23
24
  - 大数据量(> 1000 节点)— 本组件不做虚拟化,业务侧请自做分页 / 懒加载子节点
24
25
  - 拖拽排序场景 → 需配合 `react-dnd` 等库自行扩展,本组件不内置
25
26
 
27
+ ## Props
28
+
26
29
  <!-- auto:props:begin -->
27
- | 名称 | 类型 | 默认值 | 必填 | 说明 |
28
- | --- | --- | --- | --- | --- |
29
- | `data` | `TreeNode[]` | | | 树数据(antd `treeData` 并集)。 |
30
- | `checkable` | `boolean` | `false` | | 是否启用勾选 checkbox(antd `checkable` 并集) — 父子级联,半选状态自动计算。 |
31
- | `selectable` | `boolean` | `true` | – | 是否启用单击高亮选择(antd `selectable` 并集) |
32
- | `checkedKeys` | `string[]` | | – | 受控已勾选 key 集合(checkable 时生效)。 |
33
- | `defaultCheckedKeys` | `string[]` | – | – | uncontrolled 初值。 |
34
- | `onCheck` | `(next: string[]) => void` | – | – | 勾选变化回调。 |
35
- | `selectedKeys` | `string[]` | – | – | 受控已选中 key 集合(selectable 时生效;通常单选,数组形式与 antd 对齐)。 |
36
- | `defaultSelectedKeys` | `string[]` | – | – | uncontrolled 初值。 |
37
- | `onSelect` | `(next: string[]) => void` | – | – | 选中变化回调。 |
38
- | `expandedKeys` | `string[]` | – | – | 受控已展开 key 集合。 |
39
- | `defaultExpandedKeys` | `string[]` | – | – | uncontrolled 初值。 |
40
- | `defaultExpandAll` | `boolean` | `false` | – | 默认展开全部(antd `defaultExpandAll` 并集) — 仅 uncontrolled 模式生效。 |
41
- | `onExpand` | `(next: string[]) => void` | – | | 展开变化回调。 |
30
+
31
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
32
+ | --------------------- | -------------------------- | ------- | ---- | -------------------------------------------------------------------------- |
33
+ | `data` | `TreeNode[]` | | | 树数据(antd `treeData` 并集)|
34
+ | `checkable` | `boolean` | `false` | – | 是否启用勾选 checkbox(antd `checkable` 并集) — 父子级联,半选状态自动计算。 |
35
+ | `selectable` | `boolean` | `true` | – | 是否启用单击高亮选择(antd `selectable` 并集)。 |
36
+ | `checkedKeys` | `string[]` | – | – | 受控已勾选 key 集合(checkable 时生效)。 |
37
+ | `defaultCheckedKeys` | `string[]` | – | – | uncontrolled 初值。 |
38
+ | `onCheck` | `(next: string[]) => void` | – | – | 勾选变化回调。 |
39
+ | `selectedKeys` | `string[]` | – | – | 受控已选中 key 集合(selectable 时生效;通常单选,数组形式与 antd 对齐)。 |
40
+ | `defaultSelectedKeys` | `string[]` | – | – | uncontrolled 初值。 |
41
+ | `onSelect` | `(next: string[]) => void` | – | – | 选中变化回调。 |
42
+ | `expandedKeys` | `string[]` | – | – | 受控已展开 key 集合。 |
43
+ | `defaultExpandedKeys` | `string[]` | | – | uncontrolled 初值。 |
44
+ | `defaultExpandAll` | `boolean` | `false` | – | 默认展开全部(antd `defaultExpandAll` 并集) — 仅 uncontrolled 模式生效。 |
45
+ | `onExpand` | `(next: string[]) => void` | – | – | 展开变化回调。 |
46
+
42
47
  <!-- auto:props:end -->
43
48
 
49
+ ## 依赖
50
+
44
51
  <!-- auto:deps:begin -->
52
+
45
53
  ### 同库依赖
46
54
 
47
55
  > `teamix-evo ui add tree` 时,以下 entry 会被自动连带安装(无需手动 add)。
48
56
 
49
- | Entry | 类型 | 描述 |
50
- | --- | --- | --- |
51
- | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
57
+ | Entry | 类型 | 描述 |
58
+ | ---------- | --------- | ---------------------------------------------------------------------------------- |
59
+ | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
52
60
  | `checkbox` | component | 复选框 — Radix Checkbox(原生 indeterminate)+ antd Checkbox.Group(options 数组驱动) |
53
61
 
54
62
  ### npm 依赖
@@ -58,6 +66,7 @@ package: "@teamix-evo/ui"
58
66
  ```bash
59
67
  pnpm add lucide-react@^0.460.0
60
68
  ```
69
+
61
70
  <!-- auto:deps:end -->
62
71
 
63
72
  ## AI 生成纪律
@@ -82,7 +91,11 @@ const data: TreeNode[] = [
82
91
  title: 'src',
83
92
  icon: <Folder className="size-3.5" />,
84
93
  children: [
85
- { key: 'src/index.ts', title: 'index.ts', icon: <File className="size-3.5" /> },
94
+ {
95
+ key: 'src/index.ts',
96
+ title: 'index.ts',
97
+ icon: <File className="size-3.5" />,
98
+ },
86
99
  {
87
100
  key: 'src/components',
88
101
  title: 'components',
@@ -97,7 +110,7 @@ const data: TreeNode[] = [
97
110
  ];
98
111
 
99
112
  // 默认展开 + 选择
100
- <Tree data={data} defaultExpandAll />
113
+ <Tree data={data} defaultExpandAll />;
101
114
 
102
115
  // 可勾选(受控)
103
116
  const [checked, setChecked] = React.useState<string[]>([]);
@@ -107,5 +120,5 @@ const [checked, setChecked] = React.useState<string[]>([]);
107
120
  defaultExpandAll
108
121
  checkedKeys={checked}
109
122
  onCheck={setChecked}
110
- />
123
+ />;
111
124
  ```
@@ -11,7 +11,7 @@ const meta: Meta<typeof Tree> = {
11
11
  docs: {
12
12
  description: {
13
13
  component:
14
- '树形控件 — 递归层级展示(目录、组织、分类)。支持展开 / 单选 / 父子级联勾选(自动半选),受控与非受控并存。Radix 未提供 tree primitive,本组件自实现递归与级联。视觉走 OpenTrek tokens,等价 antd `Tree`,所有样式来自 `@teamix-evo/design`,无 mock。',
14
+ '树形控件 — 递归层级展示(目录、组织、分类)。支持展开 / 单选 / 父子级联勾选(自动半选),受控与非受控并存。Radix 未提供 tree primitive,本组件自实现递归与级联。等价 antd `Tree`。',
15
15
  },
16
16
  },
17
17
  },
@@ -26,22 +26,45 @@ const fileTree: TreeNode[] = [
26
26
  title: 'src',
27
27
  icon: <Folder className="size-3.5" />,
28
28
  children: [
29
- { key: 'src/index.ts', title: 'index.ts', icon: <File className="size-3.5" /> },
29
+ {
30
+ key: 'src/index.ts',
31
+ title: 'index.ts',
32
+ icon: <File className="size-3.5" />,
33
+ },
30
34
  {
31
35
  key: 'src/components',
32
36
  title: 'components',
33
37
  icon: <Folder className="size-3.5" />,
34
38
  children: [
35
- { key: 'src/components/Button.tsx', title: 'Button.tsx', icon: <File className="size-3.5" /> },
36
- { key: 'src/components/Input.tsx', title: 'Input.tsx', icon: <File className="size-3.5" /> },
37
- { key: 'src/components/Dialog.tsx', title: 'Dialog.tsx', icon: <File className="size-3.5" />, disabled: true },
39
+ {
40
+ key: 'src/components/Button.tsx',
41
+ title: 'Button.tsx',
42
+ icon: <File className="size-3.5" />,
43
+ },
44
+ {
45
+ key: 'src/components/Input.tsx',
46
+ title: 'Input.tsx',
47
+ icon: <File className="size-3.5" />,
48
+ },
49
+ {
50
+ key: 'src/components/Dialog.tsx',
51
+ title: 'Dialog.tsx',
52
+ icon: <File className="size-3.5" />,
53
+ disabled: true,
54
+ },
38
55
  ],
39
56
  },
40
57
  {
41
58
  key: 'src/utils',
42
59
  title: 'utils',
43
60
  icon: <Folder className="size-3.5" />,
44
- children: [{ key: 'src/utils/cn.ts', title: 'cn.ts', icon: <File className="size-3.5" /> }],
61
+ children: [
62
+ {
63
+ key: 'src/utils/cn.ts',
64
+ title: 'cn.ts',
65
+ icon: <File className="size-3.5" />,
66
+ },
67
+ ],
45
68
  },
46
69
  ],
47
70
  },
@@ -99,11 +122,7 @@ export const ControlledExpand: Story = {
99
122
  render: () => {
100
123
  const [expanded, setExpanded] = React.useState<string[]>(['src']);
101
124
  return (
102
- <Tree
103
- data={fileTree}
104
- expandedKeys={expanded}
105
- onExpand={setExpanded}
106
- />
125
+ <Tree data={fileTree} expandedKeys={expanded} onExpand={setExpanded} />
107
126
  );
108
127
  },
109
128
  };
@@ -1,13 +1,14 @@
1
1
  ---
2
2
  id: tree-select
3
3
  name: TreeSelect
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
- # TreeSelect
11
+ # TreeSelect 树选择
11
12
 
12
13
  树形下拉选择 — antd 独有补足。**等价 antd `TreeSelect`**。把 `Tree` 嵌入 Popover,提供**单选**(selectable)或**多选**(checkable)两种模式 — 组织架构 / 分类树形选择 / 文件夹路径选择常用。
13
14
 
@@ -23,32 +24,39 @@ package: "@teamix-evo/ui"
23
24
  - 严格级联(每层必选一个,不可跨层) → `Cascader`
24
25
  - 树形浏览(不需要"选中"语义) → `Tree`
25
26
 
27
+ ## Props
28
+
26
29
  <!-- auto:props:begin -->
27
- | 名称 | 类型 | 默认值 | 必填 | 说明 |
28
- | --- | --- | --- | --- | --- |
29
- | `data` | `TreeNode[]` | | | 树形数据(antd `treeData` 并集)。 |
30
- | `multiple` | `boolean` | `false` | | 多选模式 启用后下拉内的 Tree 变为 checkable;value 是 key 数组。 |
31
- | `value` | `string \| string[]` | | – | 受控 value: - `multiple=false`:`string`(单 key)/ `undefined`(未选) - `multiple=true`:`string[]` |
32
- | `defaultValue` | `string \| string[]` | – | – | uncontrolled 初值。 |
33
- | `onChange` | `(value: string \| string[]) => void` | – | – | value 变化回调。 |
34
- | `defaultExpandAll` | `boolean` | `false` | – | 默认展开全部节点(antd `treeDefaultExpandAll` 并集)。 |
35
- | `placeholder` | `string` | `"请选择"` | – | 占位文本。 |
36
- | `disabled` | `boolean` | | – | 整体禁用。 |
37
- | `className` | `string` | – | – | 触发器 className。 |
38
- | `size` | `'sm' \| 'default' \| 'lg'` | `"default"` | – | 触发器尺寸。 |
30
+
31
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
32
+ | ------------------ | ------------------------------------- | ----------- | ---- | ----------------------------------------------------------------------------------------------- |
33
+ | `data` | `TreeNode[]` | | | 树形数据(antd `treeData` 并集)。 |
34
+ | `multiple` | `boolean` | `false` | – | 多选模式 启用后下拉内的 Tree 变为 checkable;value key 数组。 |
35
+ | `value` | `string \| string[]` | – | – | 受控 value: - `multiple=false`:`string`(单 key)/ `undefined`(未选) - `multiple=true`:`string[]` |
36
+ | `defaultValue` | `string \| string[]` | – | – | uncontrolled 初值。 |
37
+ | `onChange` | `(value: string \| string[]) => void` | – | | value 变化回调。 |
38
+ | `defaultExpandAll` | `boolean` | `false` | – | 默认展开全部节点(antd `treeDefaultExpandAll` 并集)。 |
39
+ | `placeholder` | `string` | `"请选择"` | – | 占位文本。 |
40
+ | `disabled` | `boolean` | – | – | 整体禁用。 |
41
+ | `className` | `string` | | – | 触发器 className。 |
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 tree-select` 时,以下 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 并集 |
51
- | `tree` | component | 树形控件 — antd 独有补足。递归层级展示(目录、组织、分类),可展开 / 可选 / 可勾选(父子级联 + 半选),受控与非受控并存 |
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 并集 |
59
+ | `tree` | component | 树形控件 — antd 独有补足。递归层级展示(目录、组织、分类),可展开 / 可选 / 可勾选(父子级联 + 半选),受控与非受控并存 |
52
60
 
53
61
  ### npm 依赖
54
62
 
@@ -57,6 +65,7 @@ package: "@teamix-evo/ui"
57
65
  ```bash
58
66
  pnpm add lucide-react@^0.460.0
59
67
  ```
68
+
60
69
  <!-- auto:deps:end -->
61
70
 
62
71
  ## AI 生成纪律
@@ -92,9 +101,15 @@ const data = [
92
101
  ];
93
102
 
94
103
  // 单选
95
- <TreeSelect data={data} defaultExpandAll />
104
+ <TreeSelect data={data} defaultExpandAll />;
96
105
 
97
106
  // 多选 + 受控
98
107
  const [v, setV] = React.useState<string[]>(['fe', 'be']);
99
- <TreeSelect data={data} multiple defaultExpandAll value={v} onChange={(next) => setV(next as string[])} />
108
+ <TreeSelect
109
+ data={data}
110
+ multiple
111
+ defaultExpandAll
112
+ value={v}
113
+ onChange={(next) => setV(next as string[])}
114
+ />;
100
115
  ```
@@ -10,7 +10,7 @@ const meta: Meta<typeof TreeSelect> = {
10
10
  docs: {
11
11
  description: {
12
12
  component:
13
- '树形下拉 — Tree 嵌入 Popover,单选(selectable)或多选(checkable)两种模式。组织架构 / 分类树形选择 / 文件夹路径选择常用。等价 antd `TreeSelect`。视觉走 OpenTrek tokens,所有样式来自 `@teamix-evo/design`,无 mock。',
13
+ '树形下拉 — Tree 嵌入 Popover,单选(selectable)或多选(checkable)两种模式。组织架构 / 分类树形选择 / 文件夹路径选择常用。等价 antd `TreeSelect`。',
14
14
  },
15
15
  },
16
16
  },
@@ -126,7 +126,7 @@ const TreeSelect = React.forwardRef<HTMLButtonElement, TreeSelectProps>(
126
126
  size={size}
127
127
  disabled={disabled}
128
128
  className={cn(
129
- 'min-w-[200px] justify-between font-normal',
129
+ 'min-w-panel-sm justify-between font-normal',
130
130
  !display && 'text-muted-foreground',
131
131
  className,
132
132
  )}
@@ -1,13 +1,14 @@
1
1
  ---
2
2
  id: typography
3
3
  name: Typography
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
- # Typography
11
+ # Typography 排版
11
12
 
12
13
  排版组件 — `Prose`(富文本容器)+ shadcn 风格 `Title / Paragraph / Text / Link` + antd `Text` 的 `type / strong / delete / disabled / code / ellipsis / copyable` 并集。
13
14
 
@@ -27,26 +28,51 @@ package: "@teamix-evo/ui"
27
28
  - 单一颜色文本 → 直接 `<span className="text-...">`,无需包装
28
29
  - 多行 ellipsis(2 行 / 3 行) → 自行 `line-clamp-N`(本组件 ellipsis 仅单行)
29
30
 
31
+ ## Props
32
+
33
+ > 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成,数据源是 [`typography.tsx`](./typography.tsx) 的 `TextProps` interface JSDoc。
34
+
30
35
  <!-- auto:props:begin -->
31
- | 名称 | 类型 | 默认值 | 必填 | 说明 |
32
- | --- | --- | --- | --- | --- |
33
- | `type` | `TextType` | `"default"` | – | 语义色(antd `type` 并集)。 |
34
- | `delete` | `boolean` | `false` | | 删除线。 |
35
- | `disabled` | `boolean` | `false` | | 不可用(灰色 + 不可选)。 |
36
- | `strong` | `boolean` | `false` | – | 加粗。 |
37
- | `code` | `boolean` | `false` | – | 行内代码样式(`code`)。 |
38
- | `ellipsis` | `boolean` | `false` | – | 单行省略(antd `ellipsis` 简化版 — 只支持 boolean,行数 / suffix 留 v0.x)。 |
39
- | `copyable` | `boolean \| { text: string; tooltips?: [string, string] }` | `false` | – | 可复制(antd `copyable` 并集)— 末尾追加复制图标按钮。 传对象时可指定要复制的文本(默认是 children 的纯文本);传 `true` 用 children。 |
36
+
37
+ #### Text
38
+
39
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
40
+ | ---------- | ---------------------------------------------------------- | ----------- | ---- | --------------------------------------------------------------------------------------------------------------------------------- |
41
+ | `type` | `TextType` | `"default"` | – | 语义色(antd `type` 并集)。 |
42
+ | `delete` | `boolean` | `false` | – | 删除线。 |
43
+ | `disabled` | `boolean` | `false` | – | 不可用(灰色 + 不可选)。 |
44
+ | `strong` | `boolean` | `false` | – | 加粗。 |
45
+ | `code` | `boolean` | `false` | – | 行内代码样式(`code`)。 |
46
+ | `ellipsis` | `boolean` | `false` | – | 单行省略(antd `ellipsis` 简化版 — 只支持 boolean,行数 / suffix 留 v0.x)。 |
47
+ | `copyable` | `boolean \| { text: string; tooltips?: [string, string] }` | `false` | – | 可复制(antd `copyable` 并集)— 末尾追加复制图标按钮。 传对象时可指定要复制的文本(默认是 children 的纯文本);传 `true` 用 children。 |
48
+
49
+ #### Title
50
+
51
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
52
+ | ------- | ----------------------- | ------ | ---- | ------------------------------------------------------- |
53
+ | `level` | `1 \| 2 \| 3 \| 4 \| 5` | `1` | – | 层级(1~5),决定字号 / 粗细;同时映射为 `<h1>~<h5>` 标签。 |
54
+
55
+ #### Link
56
+
57
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
58
+ | ------ | ---------- | ----------- | ---- | ------------------------- |
59
+ | `type` | `TextType` | `"default"` | – | 语义色(同 Text 的 type)。 |
60
+
40
61
  <!-- auto:props:end -->
41
62
 
63
+ ## 依赖
64
+
65
+ > 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成,数据源是 [`manifest.json`](../../../manifest.json)。**手工编辑 marker 之间的内容会在下次生成时被覆盖**。
66
+
42
67
  <!-- auto:deps:begin -->
68
+
43
69
  ### 同库依赖
44
70
 
45
71
  > `teamix-evo ui add typography` 时,以下 entry 会被自动连带安装(无需手动 add)。
46
72
 
47
- | Entry | 类型 | 描述 |
48
- | --- | --- | --- |
49
- | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
73
+ | Entry | 类型 | 描述 |
74
+ | ----- | ---- | -------------------------------------------------- |
75
+ | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
50
76
 
51
77
  ### npm 依赖
52
78
 
@@ -55,9 +81,8 @@ package: "@teamix-evo/ui"
55
81
  ```bash
56
82
  pnpm add lucide-react@^0.460.0
57
83
  ```
58
- <!-- auto:deps:end -->
59
84
 
60
- > 子组件:`Prose` / `Title`(level 1~5)/ `Paragraph` / `Text`(type / strong / delete / disabled / code / ellipsis / copyable)/ `Link`。各自的 props 详见 [`typography.tsx`](./typography.tsx)。
85
+ <!-- auto:deps:end -->
61
86
 
62
87
  ## AI 生成纪律
63
88
 
@@ -9,7 +9,7 @@ const meta: Meta<typeof Text> = {
9
9
  docs: {
10
10
  description: {
11
11
  component:
12
- '排版组件 — Prose 富文本容器 + Title/Paragraph/Text/Link,合并 antd 的 type/strong/delete/disabled/code/ellipsis/copyable 能力。OpenTrek tokens 适配,无 mock。',
12
+ '排版组件 — Prose 富文本容器 + Title / Paragraph / Text / Link,合并 antd 的 `type` / `strong` / `delete` / `disabled` / `code` / `ellipsis` / `copyable` 能力。',
13
13
  },
14
14
  },
15
15
  },
@@ -76,11 +76,7 @@ export const Links: Story = {
76
76
  <Link href="#docs" onClick={(e) => e.preventDefault()}>
77
77
  文档
78
78
  </Link>
79
- <Link
80
- href="#delete"
81
- type="danger"
82
- onClick={(e) => e.preventDefault()}
83
- >
79
+ <Link href="#delete" type="danger" onClick={(e) => e.preventDefault()}>
84
80
  危险操作链接
85
81
  </Link>
86
82
  </div>
@@ -98,8 +94,8 @@ export const ProseDemo: Story = {
98
94
  </p>
99
95
  <h2>子标题</h2>
100
96
  <p>
101
- 访问 <a href="#">链接</a> 查看更多。<strong>强调</strong>{' '}
102
- <em>斜体</em> <code>inline-code</code>。
97
+ 访问 <a href="#">链接</a> 查看更多。<strong>强调</strong> <em>斜体</em>{' '}
98
+ <code>inline-code</code>。
103
99
  </p>
104
100
  <ul>
105
101
  <li>列表项 1</li>
@@ -35,6 +35,7 @@ const Prose = React.forwardRef<HTMLDivElement, ProseProps>(
35
35
  '[&_strong]:font-semibold',
36
36
  '[&_em]:italic',
37
37
  // code
38
+ // eslint-disable-next-line teamix-evo/no-arbitrary-tw-value -- inline `<code>` uses em-relative size to scale with surrounding text; not tokenizable since it depends on parent context.
38
39
  '[&_code]:rounded [&_code]:bg-muted [&_code]:px-1.5 [&_code]:py-0.5 [&_code]:font-mono [&_code]:text-[0.875em]',
39
40
  '[&_pre]:my-4 [&_pre]:overflow-x-auto [&_pre]:rounded-md [&_pre]:bg-muted [&_pre]:p-4',
40
41
  '[&_pre_code]:bg-transparent [&_pre_code]:p-0',
@@ -143,8 +144,8 @@ export interface TextProps extends React.HTMLAttributes<HTMLSpanElement> {
143
144
  const typeColor: Record<TextType, string> = {
144
145
  default: 'text-foreground',
145
146
  secondary: 'text-muted-foreground',
146
- success: 'text-emerald-600',
147
- warning: 'text-amber-600',
147
+ success: 'text-success',
148
+ warning: 'text-warning',
148
149
  danger: 'text-destructive',
149
150
  };
150
151
 
@@ -185,6 +186,7 @@ const Text = React.forwardRef<HTMLSpanElement, TextProps>(
185
186
  disabled && 'cursor-not-allowed select-none opacity-50',
186
187
  ellipsis && 'inline-block max-w-full truncate align-bottom',
187
188
  code &&
189
+ // eslint-disable-next-line teamix-evo/no-arbitrary-tw-value -- inline `<code>` uses em-relative size to scale with surrounding text; not tokenizable.
188
190
  'rounded bg-muted px-1.5 py-0.5 font-mono text-[0.875em]',
189
191
  className,
190
192
  );
@@ -202,7 +204,7 @@ const Text = React.forwardRef<HTMLSpanElement, TextProps>(
202
204
  className="rounded-sm p-0.5 text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
203
205
  >
204
206
  {copied ? (
205
- <Check className="size-3.5 text-emerald-600" />
207
+ <Check className="size-3.5 text-success" />
206
208
  ) : (
207
209
  <Copy className="size-3.5" />
208
210
  )}
@@ -1,13 +1,14 @@
1
1
  ---
2
2
  id: upload
3
3
  name: Upload
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
- # Upload
11
+ # Upload 上传
11
12
 
12
13
  文件上传 — antd 独有补足。支持**点击 + 拖拽**双模式(`dragger`)、多文件、accept 过滤、`maxCount` / `maxSize` 校验、内置文件列表(显示文件名 / 进度 / 移除按钮)。**只负责前端选择与列表呈现 — 实际上传请求由消费方在 `onChange` 中发起**(组件不内置 XHR)。
13
14
 
@@ -22,34 +23,41 @@ package: "@teamix-evo/ui"
22
23
  - 仅需读取本地图片用于客户端预览 → 直接用 `<input type="file">`
23
24
  - 服务端推送式同步 → 不在本组件职责内
24
25
 
26
+ ## Props
27
+
25
28
  <!-- auto:props:begin -->
26
- | 名称 | 类型 | 默认值 | 必填 | 说明 |
27
- | --- | --- | --- | --- | --- |
28
- | `fileList` | `UploadFileItem[]` | | | 已上传文件列表(受控)— 不传则组件内部维护本地列表(限制少,通常配 onChange)。 |
29
- | `accept` | `string` | – | – | 文件接受类型(等价 input.accept) e.g. `image/*`, `.pdf,.docx`。 |
30
- | `multiple` | `boolean` | `false` | – | 是否支持多文件选择(antd `multiple` 并集)。 |
31
- | `maxCount` | `number` | | – | 最大文件数(超出则忽略,触发 `onExceed`)。 |
32
- | `maxSize` | `number` | – | – | 单文件最大字节数(超出则忽略,触发 `onExceed`)。 |
33
- | `dragger` | `boolean` | `false` | – | 启用拖拽上传(antd `Dragger` 并集) — 显示大块虚线区,可点击亦可拖拽。 |
34
- | `disabled` | `boolean` | | – | 禁用上传(已选文件不可删除) |
35
- | `showFileList` | `boolean` | `true` | – | 是否显示文件列表(antd `showUploadList` 并集)。 |
36
- | `onChange` | `(next: UploadFileItem[]) => void` | | – | 文件被添加(用户选择 / 拖入)时的回调 — 返回更新后的列表。 |
37
- | `onRemove` | `(file: UploadFileItem) => void` | – | – | 文件被移除时的回调。 |
38
- | `onExceed` | `(rejected: File[], reason: 'count' \| 'size') => void` | – | – | 超出 maxCount / maxSize 时的回调。 |
39
- | `children` | `React.ReactNode` | – | – | 触发器自定义内容(非 dragger 模式下渲染于 Button 内)。 |
40
- | `className` | `string` | – | – | |
29
+
30
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
31
+ | -------------- | ------------------------------------------------------- | ------- | ---- | -------------------------------------------------------------------------- |
32
+ | `fileList` | `UploadFileItem[]` | – | – | 已上传文件列表(受控)— 不传则组件内部维护本地列表(限制少,通常配 onChange)。 |
33
+ | `accept` | `string` | | – | 文件接受类型(等价 input.accept) — e.g. `image/*`, `.pdf,.docx`。 |
34
+ | `multiple` | `boolean` | `false` | – | 是否支持多文件选择(antd `multiple` 并集)。 |
35
+ | `maxCount` | `number` | – | – | 最大文件数(超出则忽略,触发 `onExceed`)。 |
36
+ | `maxSize` | `number` | | – | 单文件最大字节数(超出则忽略,触发 `onExceed`)|
37
+ | `dragger` | `boolean` | `false` | – | 启用拖拽上传(antd `Dragger` 并集) — 显示大块虚线区,可点击亦可拖拽。 |
38
+ | `disabled` | `boolean` | | – | 禁用上传(已选文件不可删除)。 |
39
+ | `showFileList` | `boolean` | `true` | – | 是否显示文件列表(antd `showUploadList` 并集)|
40
+ | `onChange` | `(next: UploadFileItem[]) => void` | – | – | 文件被添加(用户选择 / 拖入)时的回调 — 返回更新后的列表。 |
41
+ | `onRemove` | `(file: UploadFileItem) => void` | – | – | 文件被移除时的回调。 |
42
+ | `onExceed` | `(rejected: File[], reason: 'count' \| 'size') => void` | – | – | 超出 maxCount / maxSize 时的回调。 |
43
+ | `children` | `React.ReactNode` | – | – | 触发器自定义内容(非 dragger 模式下渲染于 Button 内)。 |
44
+ | `className` | `string` | – | – | – |
45
+
41
46
  <!-- auto:props:end -->
42
47
 
48
+ ## 依赖
49
+
43
50
  <!-- auto:deps:begin -->
51
+
44
52
  ### 同库依赖
45
53
 
46
54
  > `teamix-evo ui add upload` 时,以下 entry 会被自动连带安装(无需手动 add)。
47
55
 
48
- | Entry | 类型 | 描述 |
49
- | --- | --- | --- |
50
- | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
51
- | `button` | component | 通用按钮 — shadcn 实现 + antd 功能扩展(loading / icon / shape / block / dashed variant) |
52
- | `progress` | component | 进度条 — Radix 线性 + antd 的 status / showInfo / size 并集 + 配套 ProgressCircle 环形 |
56
+ | Entry | 类型 | 描述 |
57
+ | ---------- | --------- | --------------------------------------------------------------------------------------- |
58
+ | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
59
+ | `button` | component | 通用按钮 — shadcn 实现 + antd 功能扩展(loading / icon / shape / block / dashed variant) |
60
+ | `progress` | component | 进度条 — Radix 线性 + antd 的 status / showInfo / size 并集 + 配套 ProgressCircle 环形 |
53
61
 
54
62
  ### npm 依赖
55
63
 
@@ -58,6 +66,7 @@ package: "@teamix-evo/ui"
58
66
  ```bash
59
67
  pnpm add lucide-react@^0.460.0
60
68
  ```
69
+
61
70
  <!-- auto:deps:end -->
62
71
 
63
72
  ## AI 生成纪律
@@ -10,7 +10,7 @@ const meta: Meta<typeof Upload> = {
10
10
  docs: {
11
11
  description: {
12
12
  component:
13
- '文件上传 — 支持点击 + 拖拽双模式(Dragger),内置 maxCount / maxSize 校验、文件列表、进度条。组件只负责前端选择与列表呈现,真实上传请求由消费方在 onChange 中发起。视觉走 OpenTrek tokens,等价 antd `Upload` + `Upload.Dragger`,所有样式来自 `@teamix-evo/design`,无 mock。',
13
+ '文件上传 — 支持点击 + 拖拽双模式(Dragger),内置 maxCount / maxSize 校验、文件列表、进度条。组件只负责前端选择与列表呈现,真实上传请求由消费方在 onChange 中发起。等价 antd `Upload` + `Upload.Dragger`。',
14
14
  },
15
15
  },
16
16
  },
@@ -30,9 +30,7 @@ export const Playground: Story = {};
30
30
 
31
31
  export const Dragger: Story = {
32
32
  parameters: { controls: { disable: true } },
33
- render: () => (
34
- <Upload dragger multiple accept=".csv,.xlsx,.json" />
35
- ),
33
+ render: () => <Upload dragger multiple accept=".csv,.xlsx,.json" />,
36
34
  };
37
35
 
38
36
  export const WithLimits: Story = {
@@ -43,8 +41,11 @@ export const WithLimits: Story = {
43
41
  maxCount={3}
44
42
  maxSize={2 * 1024 * 1024}
45
43
  onExceed={(rej, reason) =>
46
- // eslint-disable-next-line no-alert
47
- alert(`${reason === 'count' ? '超出最大文件数' : '超出最大文件大小'}: ${rej.map((f) => f.name).join(', ')}`)
44
+ alert(
45
+ `${reason === 'count' ? '超出最大文件数' : '超出最大文件大小'}: ${rej
46
+ .map((f) => f.name)
47
+ .join(', ')}`,
48
+ )
48
49
  }
49
50
  />
50
51
  ),
@@ -58,14 +59,7 @@ export const ControlledProgress: Story = {
58
59
  { uid: 'demo-2', name: 'cover.png', status: 'done' },
59
60
  { uid: 'demo-3', name: 'broken.zip', status: 'error' },
60
61
  ]);
61
- return (
62
- <Upload
63
- dragger
64
- multiple
65
- fileList={files}
66
- onChange={setFiles}
67
- />
68
- );
62
+ return <Upload dragger multiple fileList={files} onChange={setFiles} />;
69
63
  },
70
64
  };
71
65