@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
@@ -11,7 +11,7 @@ const meta: Meta<typeof Rate> = {
11
11
  docs: {
12
12
  description: {
13
13
  component:
14
- '星级评分 — 评论 / 商品评分 / 偏好满意度。支持半星 + 再次点击清零 + 自定义图标 + 只读展示。等价 antd `Rate`。视觉走 OpenTrek tokens,所有样式来自 `@teamix-evo/design`,无 mock。',
14
+ '星级评分 — 评论 / 商品评分 / 偏好满意度。支持半星 + 再次点击清零 + 自定义图标 + 只读展示。等价 antd `Rate`。',
15
15
  },
16
16
  },
17
17
  },
@@ -22,7 +22,13 @@ const meta: Meta<typeof Rate> = {
22
22
  disabled: { control: 'boolean' },
23
23
  size: { control: 'inline-radio', options: ['sm', 'default', 'lg'] },
24
24
  },
25
- args: { count: 5, allowHalf: false, allowClear: true, disabled: false, size: 'default' },
25
+ args: {
26
+ count: 5,
27
+ allowHalf: false,
28
+ allowClear: true,
29
+ disabled: false,
30
+ size: 'default',
31
+ },
26
32
  };
27
33
 
28
34
  export default meta;
@@ -64,7 +70,9 @@ export const ReadOnly: Story = {
64
70
  render: () => (
65
71
  <div className="flex items-center gap-2">
66
72
  <Rate disabled value={4.5} allowHalf size="sm" />
67
- <span className="text-sm text-muted-foreground">4.5 / 5 (1,287 评价)</span>
73
+ <span className="text-sm text-muted-foreground">
74
+ 4.5 / 5 (1,287 评价)
75
+ </span>
68
76
  </div>
69
77
  ),
70
78
  };
@@ -128,9 +128,9 @@ const Rate = React.forwardRef<HTMLDivElement, RateProps>(
128
128
  ) : null}
129
129
 
130
130
  {filledFull ? (
131
- <span className="text-amber-400">{React.isValidElement(Icon) ? React.cloneElement(Icon as React.ReactElement<{ fill?: string }>, { fill: 'currentColor' }) : Icon}</span>
131
+ <span className="text-warning">{React.isValidElement(Icon) ? React.cloneElement(Icon as React.ReactElement<{ fill?: string }>, { fill: 'currentColor' }) : Icon}</span>
132
132
  ) : filledHalf ? (
133
- <span className="relative inline-block text-amber-400">
133
+ <span className="relative inline-block text-warning">
134
134
  <span className="absolute inset-0 overflow-hidden" style={{ clipPath: 'inset(0 50% 0 0)' }}>
135
135
  {React.isValidElement(Icon)
136
136
  ? React.cloneElement(Icon as React.ReactElement<{ fill?: string }>, { fill: 'currentColor' })
@@ -1,13 +1,14 @@
1
1
  ---
2
2
  id: resizable
3
3
  name: Resizable
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
- # Resizable
11
+ # Resizable 可拖拽分栏
11
12
 
12
13
  可拖拽分栏 — 基于 [`react-resizable-panels`](https://react-resizable-panels.vercel.app/),桌面应用 / 编辑器风格(VS Code、Figma、Slack)。
13
14
  对应 antd `Splitter`(v5.16+)的核心场景。
@@ -25,18 +26,29 @@ package: "@teamix-evo/ui"
25
26
  - 临时分栏 → `Sheet` / `Drawer`
26
27
  - 卡片网格 → CSS Grid
27
28
 
29
+ ## Props
30
+
28
31
  <!-- auto:props:begin -->
29
- _(组件无 `<Name>Props` interface — props 详见 [`resizable.tsx`](./resizable.tsx))_
32
+
33
+ #### ResizableHandle
34
+
35
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
36
+ | ------------ | --------- | ------- | ---- | ----------------------------------------------------------- |
37
+ | `withHandle` | `boolean` | `false` | – | 是否在 handle 上显示握把图标(`GripVertical`),提升可发现性。 |
38
+
30
39
  <!-- auto:props:end -->
31
40
 
41
+ ## 依赖
42
+
32
43
  <!-- auto:deps:begin -->
44
+
33
45
  ### 同库依赖
34
46
 
35
47
  > `teamix-evo ui add resizable` 时,以下 entry 会被自动连带安装(无需手动 add)。
36
48
 
37
- | Entry | 类型 | 描述 |
38
- | --- | --- | --- |
39
- | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
49
+ | Entry | 类型 | 描述 |
50
+ | ----- | ---- | -------------------------------------------------- |
51
+ | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
40
52
 
41
53
  ### npm 依赖
42
54
 
@@ -45,9 +57,8 @@ _(组件无 `<Name>Props` interface — props 详见 [`resizable.tsx`](./resizab
45
57
  ```bash
46
58
  pnpm add react-resizable-panels@^2.0.0 lucide-react@^0.460.0
47
59
  ```
48
- <!-- auto:deps:end -->
49
60
 
50
- > 子组件:`ResizablePanelGroup`(`direction="horizontal" | "vertical"`)/ `ResizablePanel`(`defaultSize / minSize / maxSize` 百分比)/ `ResizableHandle`(分隔条,`withHandle` 显示握把)。
61
+ <!-- auto:deps:end -->
51
62
 
52
63
  ## AI 生成纪律
53
64
 
@@ -13,7 +13,7 @@ const meta: Meta<typeof ResizablePanelGroup> = {
13
13
  docs: {
14
14
  description: {
15
15
  component:
16
- '可拖拽分栏 — 编辑器 / 桌面应用风格(VS Code、Figma)。基于 react-resizable-panels,支持横/纵向、嵌套、min/max 限制、握把可视化。OpenTrek tokens 适配。',
16
+ '可拖拽分栏 — 编辑器 / 桌面应用风格(VS Code、Figma)。基于 react-resizable-panels,支持横/纵向、嵌套、min/max 限制、握把可视化。',
17
17
  },
18
18
  },
19
19
  },
@@ -4,10 +4,11 @@ name: Result
4
4
  type: component
5
5
  category: feedback
6
6
  since: 0.1.0
7
- package: "@teamix-evo/ui"
7
+ package: '@teamix-evo/ui'
8
+ displayName: 结果页
8
9
  ---
9
10
 
10
- # Result
11
+ # Result 结果页
11
12
 
12
13
  结果页 — antd 独有补足。**整页级反馈**:操作成功、失败、404、403、500 等场景的居中状态页(图标 + 标题 + 副标题 + 操作区)。
13
14
 
@@ -24,24 +25,31 @@ package: "@teamix-evo/ui"
24
25
  - 短暂消息 → `Sonner`
25
26
  - 阻断式确认 → `AlertDialog`
26
27
 
28
+ ## Props
29
+
27
30
  <!-- auto:props:begin -->
28
- | 名称 | 类型 | 默认值 | 必填 | 说明 |
29
- | --- | --- | --- | --- | --- |
30
- | `status` | `ResultStatus` | `"info"` | | 状态类型 — 决定默认图标和配色;`404 / 403 / 500` 显示大字号错误码代替图标。 |
31
- | `icon` | `React.ReactNode` | – | | 自定义图标(覆盖默认)。 |
32
- | `title` | `React.ReactNode` | – | – | 标题。 |
33
- | `subTitle` | `React.ReactNode` | – | – | 副标题(描述)。 |
34
- | `extra` | `React.ReactNode` | – | – | 操作区(放 Button)。 |
31
+
32
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
33
+ | ---------- | ----------------- | -------- | ---- | -------------------------------------------------------------------------- |
34
+ | `status` | `ResultStatus` | `"info"` | – | 状态类型 决定默认图标和配色;`404 / 403 / 500` 显示大字号错误码代替图标。 |
35
+ | `icon` | `React.ReactNode` | – | – | 自定义图标(覆盖默认)。 |
36
+ | `title` | `React.ReactNode` | – | – | 标题。 |
37
+ | `subTitle` | `React.ReactNode` | – | – | 副标题(描述)。 |
38
+ | `extra` | `React.ReactNode` | – | – | 操作区(放 Button)。 |
39
+
35
40
  <!-- auto:props:end -->
36
41
 
42
+ ## 依赖
43
+
37
44
  <!-- auto:deps:begin -->
45
+
38
46
  ### 同库依赖
39
47
 
40
48
  > `teamix-evo ui add result` 时,以下 entry 会被自动连带安装(无需手动 add)。
41
49
 
42
- | Entry | 类型 | 描述 |
43
- | --- | --- | --- |
44
- | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
50
+ | Entry | 类型 | 描述 |
51
+ | ----- | ---- | -------------------------------------------------- |
52
+ | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
45
53
 
46
54
  ### npm 依赖
47
55
 
@@ -50,6 +58,7 @@ package: "@teamix-evo/ui"
50
58
  ```bash
51
59
  pnpm add lucide-react@^0.460.0
52
60
  ```
61
+
53
62
  <!-- auto:deps:end -->
54
63
 
55
64
  ## AI 生成纪律
@@ -10,7 +10,7 @@ const meta: Meta<typeof Result> = {
10
10
  docs: {
11
11
  description: {
12
12
  component:
13
- '结果页 — 整页级反馈(成功 / 失败 / 404 / 403 / 500)。图标 + 标题 + 副标题 + 操作区,自动配色。OpenTrek tokens 适配,等价 antd Result。',
13
+ '结果页 — 整页级反馈(成功 / 失败 / 404 / 403 / 500)。图标 + 标题 + 副标题 + 操作区,自动配色。等价 antd Result。',
14
14
  },
15
15
  },
16
16
  },
@@ -62,10 +62,6 @@ export const NotFound: Story = {
62
62
  export const Forbidden: Story = {
63
63
  parameters: { controls: { disable: true } },
64
64
  render: () => (
65
- <Result
66
- status="403"
67
- title="无权访问"
68
- subTitle="联系管理员申请访问权限。"
69
- />
65
+ <Result status="403" title="无权访问" subTitle="联系管理员申请访问权限。" />
70
66
  ),
71
67
  };
@@ -11,10 +11,10 @@ import { cn } from '@/utils/cn';
11
11
  export type ResultStatus = 'success' | 'error' | 'info' | 'warning' | '404' | '403' | '500';
12
12
 
13
13
  const iconMap = {
14
- success: { Icon: CheckCircle2, color: 'text-emerald-500' },
14
+ success: { Icon: CheckCircle2, color: 'text-success' },
15
15
  error: { Icon: XCircle, color: 'text-destructive' },
16
- info: { Icon: Info, color: 'text-blue-500' },
17
- warning: { Icon: AlertCircle, color: 'text-amber-500' },
16
+ info: { Icon: Info, color: 'text-info' },
17
+ warning: { Icon: AlertCircle, color: 'text-warning' },
18
18
  '404': { Icon: AlertCircle, color: 'text-muted-foreground' },
19
19
  '403': { Icon: AlertCircle, color: 'text-muted-foreground' },
20
20
  '500': { Icon: AlertCircle, color: 'text-destructive' },
@@ -1,13 +1,14 @@
1
1
  ---
2
2
  id: scroll-area
3
3
  name: ScrollArea
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
- # ScrollArea
11
+ # ScrollArea 滚动区域
11
12
 
12
13
  自定义滚动容器 — Radix ScrollArea。**shadcn-only**(antd 用原生滚动)。
13
14
  **核心价值**:跨浏览器一致的滚动条样式 + 触屏友好 + 自动隐藏 thumb。
@@ -28,7 +29,9 @@ package: "@teamix-evo/ui"
28
29
  > 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成。
29
30
 
30
31
  <!-- auto:props:begin -->
32
+
31
33
  _(no props)_
34
+
32
35
  <!-- auto:props:end -->
33
36
 
34
37
  ## 依赖
@@ -36,13 +39,14 @@ _(no props)_
36
39
  > 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成,数据源是 [`manifest.json`](../../../manifest.json)。**手工编辑 marker 之间的内容会在下次生成时被覆盖**。
37
40
 
38
41
  <!-- auto:deps:begin -->
42
+
39
43
  ### 同库依赖
40
44
 
41
45
  > `teamix-evo ui add scroll-area` 时,以下 entry 会被自动连带安装(无需手动 add)。
42
46
 
43
- | Entry | 类型 | 描述 |
44
- | --- | --- | --- |
45
- | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
47
+ | Entry | 类型 | 描述 |
48
+ | ----- | ---- | -------------------------------------------------- |
49
+ | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
46
50
 
47
51
  ### npm 依赖
48
52
 
@@ -51,6 +55,7 @@ _(no props)_
51
55
  ```bash
52
56
  pnpm add @radix-ui/react-scroll-area@^1.2.0
53
57
  ```
58
+
54
59
  <!-- auto:deps:end -->
55
60
 
56
61
  > 子组件:`ScrollArea`(主容器,内置 Viewport + ScrollBar 组合)/ `ScrollBar`(独立 ScrollBar,需要自定义双向滚动时使用)。
@@ -5,6 +5,14 @@ const meta: Meta<typeof ScrollArea> = {
5
5
  title: '布局与容器 · Layout/ScrollArea',
6
6
  component: ScrollArea,
7
7
  tags: ['autodocs'],
8
+ parameters: {
9
+ docs: {
10
+ description: {
11
+ component:
12
+ '自定义滚动容器 — 基于 Radix ScrollArea,跨浏览器一致的滚动条样式 + 触屏友好 + 自动隐藏 thumb。shadcn 专有,antd 用原生滚动。',
13
+ },
14
+ },
15
+ },
8
16
  };
9
17
 
10
18
  export default meta;
@@ -15,7 +15,7 @@ const ScrollArea = React.forwardRef<
15
15
  className={cn('relative overflow-hidden', className)}
16
16
  {...props}
17
17
  >
18
- <ScrollAreaPrimitive.Viewport className="size-full rounded-[inherit]">
18
+ <ScrollAreaPrimitive.Viewport className="size-full rounded-inherit">
19
19
  {children}
20
20
  </ScrollAreaPrimitive.Viewport>
21
21
  <ScrollBar />
@@ -36,9 +36,9 @@ const ScrollBar = React.forwardRef<
36
36
  className={cn(
37
37
  'flex touch-none select-none transition-colors',
38
38
  orientation === 'vertical' &&
39
- 'h-full w-2.5 border-l border-l-transparent p-[1px]',
39
+ 'h-full w-2.5 border-l border-l-transparent p-px',
40
40
  orientation === 'horizontal' &&
41
- 'h-2.5 flex-col border-t border-t-transparent p-[1px]',
41
+ 'h-2.5 flex-col border-t border-t-transparent p-px',
42
42
  className,
43
43
  )}
44
44
  {...props}
@@ -4,10 +4,11 @@ name: Segmented
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
- # Segmented
11
+ # Segmented 分段控制器
11
12
 
12
13
  分段控制器 — antd 独有补足。**等价 antd `Segmented`**(v5.0+)。视觉类似 iOS/macOS 系统 Segmented Control,强调**互斥单选 + 紧凑紧贴**(日 / 周 / 月、列表 / 网格、明 / 暗主题切换)。
13
14
 
@@ -24,25 +25,28 @@ package: "@teamix-evo/ui"
24
25
  - 选项超过 6 个 → 改用 `Select` / `Tabs`
25
26
 
26
27
  <!-- auto:props:begin -->
27
- | 名称 | 类型 | 默认值 | 必填 | 说明 |
28
- | --- | --- | --- | --- | --- |
29
- | `options` | `SegmentedOption[]` | | | 候选项数组。 |
30
- | `value` | `string` | – | | 受控 value。 |
31
- | `defaultValue` | `string` | – | – | uncontrolled 初值。 |
32
- | `onChange` | `(value: string) => void` | – | – | value 变化回调。 |
33
- | `size` | `'sm' \| 'default' \| 'lg'` | `"default"` | – | 尺寸。 |
34
- | `block` | `boolean` | `false` | – | 是否撑满父容器宽度(antd `block` 并集)。 |
35
- | `disabled` | `boolean` | – | | 整组禁用。 |
28
+
29
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
30
+ | -------------- | --------------------------- | ----------- | ---- | --------------------------------------- |
31
+ | `options` | `SegmentedOption[]` | – | | 候选项数组。 |
32
+ | `value` | `string` | – | – | 受控 value。 |
33
+ | `defaultValue` | `string` | – | – | uncontrolled 初值。 |
34
+ | `onChange` | `(value: string) => void` | | – | value 变化回调。 |
35
+ | `size` | `'sm' \| 'default' \| 'lg'` | `"default"` | – | 尺寸。 |
36
+ | `block` | `boolean` | `false` | – | 是否撑满父容器宽度(antd `block` 并集)。 |
37
+ | `disabled` | `boolean` | – | – | 整组禁用。 |
38
+
36
39
  <!-- auto:props:end -->
37
40
 
38
41
  <!-- auto:deps:begin -->
42
+
39
43
  ### 同库依赖
40
44
 
41
45
  > `teamix-evo ui add segmented` 时,以下 entry 会被自动连带安装(无需手动 add)。
42
46
 
43
- | Entry | 类型 | 描述 |
44
- | --- | --- | --- |
45
- | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
47
+ | Entry | 类型 | 描述 |
48
+ | ----- | ---- | -------------------------------------------------- |
49
+ | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
46
50
 
47
51
  ### npm 依赖
48
52
 
@@ -51,6 +55,7 @@ package: "@teamix-evo/ui"
51
55
  ```bash
52
56
  pnpm add class-variance-authority@^0.7.0
53
57
  ```
58
+
54
59
  <!-- auto:deps:end -->
55
60
 
56
61
  ## AI 生成纪律
@@ -11,7 +11,7 @@ const meta: Meta<typeof Segmented> = {
11
11
  docs: {
12
12
  description: {
13
13
  component:
14
- '分段控制器 — iOS / macOS 风格的紧凑互斥单选(视图切换、时间区间、主题档)。等价 antd `Segmented`(v5.0+),与 ToggleGroup 互补(后者偏工具栏多选)。视觉走 OpenTrek tokens,所有样式来自 `@teamix-evo/design`,无 mock。',
14
+ '分段控制器 — iOS / macOS 风格的紧凑互斥单选(视图切换、时间区间、主题档)。等价 antd `Segmented`(v5.0+),与 ToggleGroup 互补(后者偏工具栏多选)。',
15
15
  },
16
16
  },
17
17
  },
@@ -49,9 +49,17 @@ export const WithIcons: Story = {
49
49
  value={v}
50
50
  onChange={setV}
51
51
  options={[
52
- { value: 'grid', label: '网格', icon: <LayoutGrid className="size-4" /> },
52
+ {
53
+ value: 'grid',
54
+ label: '网格',
55
+ icon: <LayoutGrid className="size-4" />,
56
+ },
53
57
  { value: 'list', label: '列表', icon: <List className="size-4" /> },
54
- { value: 'cal', label: '日历', icon: <Calendar className="size-4" /> },
58
+ {
59
+ value: 'cal',
60
+ label: '日历',
61
+ icon: <Calendar className="size-4" />,
62
+ },
55
63
  ]}
56
64
  />
57
65
  );
@@ -79,9 +87,30 @@ export const Sizes: Story = {
79
87
  parameters: { controls: { disable: true } },
80
88
  render: () => (
81
89
  <div className="flex flex-col items-start gap-3">
82
- <Segmented size="sm" defaultValue="a" options={[{ value: 'a', label: 'A' }, { value: 'b', label: 'B' }]} />
83
- <Segmented size="default" defaultValue="a" options={[{ value: 'a', label: 'A' }, { value: 'b', label: 'B' }]} />
84
- <Segmented size="lg" defaultValue="a" options={[{ value: 'a', label: 'A' }, { value: 'b', label: 'B' }]} />
90
+ <Segmented
91
+ size="sm"
92
+ defaultValue="a"
93
+ options={[
94
+ { value: 'a', label: 'A' },
95
+ { value: 'b', label: 'B' },
96
+ ]}
97
+ />
98
+ <Segmented
99
+ size="default"
100
+ defaultValue="a"
101
+ options={[
102
+ { value: 'a', label: 'A' },
103
+ { value: 'b', label: 'B' },
104
+ ]}
105
+ />
106
+ <Segmented
107
+ size="lg"
108
+ defaultValue="a"
109
+ options={[
110
+ { value: 'a', label: 'A' },
111
+ { value: 'b', label: 'B' },
112
+ ]}
113
+ />
85
114
  </div>
86
115
  ),
87
116
  };
@@ -4,10 +4,11 @@ name: Select
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
- # Select
11
+ # Select 下拉选择
11
12
 
12
13
  下拉选择 — Radix Select 标准实现。**仅单选**(Radix Select 设计如此),多选 / 搜索请用 `Combobox`(基于 Command + Popover,在 v0.x)。
13
14
  对应 antd `Select` 的最常见单选场景;antd 的 `mode="multiple"` / `showSearch` / `tags` 等高级形态由 Combobox 接力。
@@ -27,12 +28,22 @@ package: "@teamix-evo/ui"
27
28
 
28
29
  ## Props
29
30
 
30
- > 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成。下表是 `SelectTrigger` 的 props;`Select`(Root)透传 Radix `value / defaultValue / onValueChange / open / disabled / required / name`。
31
+ > 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成。`Select`(Root)透传 Radix `value / defaultValue / onValueChange / open / disabled / required / name`。
31
32
 
32
33
  <!-- auto:props:begin -->
33
- | 名称 | 类型 | 默认值 | 必填 | 说明 |
34
- | --- | --- | --- | --- | --- |
35
- | `position` | `React.ComponentPropsWithoutRef< typeof SelectPrimitive.Content >['position']` | `"popper"` | – | 浮层定位策略。`popper` 跟随 trigger 并自动避让边界;`item-aligned` 把当前选中项与 trigger 对齐(类似原生 `<select>`)。默认 `popper` 与 antd Select 行为一致。 |
34
+
35
+ #### SelectTrigger
36
+
37
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
38
+ | ------ | --------------------------- | ----------- | ---- | ------------ |
39
+ | `size` | `'sm' \| 'default' \| 'lg'` | `"default"` | – | 触发器尺寸。 |
40
+
41
+ #### SelectContent
42
+
43
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
44
+ | ---------- | ------------------------------------------------------------------------------ | ---------- | ---- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
45
+ | `position` | `React.ComponentPropsWithoutRef< typeof SelectPrimitive.Content >['position']` | `"popper"` | – | 浮层定位策略。`popper` 跟随 trigger 并自动避让边界;`item-aligned` 把当前选中项与 trigger 对齐(类似原生 `<select>`)。默认 `popper` 与 antd Select 行为一致。 |
46
+
36
47
  <!-- auto:props:end -->
37
48
 
38
49
  ## 依赖
@@ -40,13 +51,14 @@ package: "@teamix-evo/ui"
40
51
  > 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成,数据源是 [`manifest.json`](../../../manifest.json)。**手工编辑 marker 之间的内容会在下次生成时被覆盖**。
41
52
 
42
53
  <!-- auto:deps:begin -->
54
+
43
55
  ### 同库依赖
44
56
 
45
57
  > `teamix-evo ui add select` 时,以下 entry 会被自动连带安装(无需手动 add)。
46
58
 
47
- | Entry | 类型 | 描述 |
48
- | --- | --- | --- |
49
- | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
59
+ | Entry | 类型 | 描述 |
60
+ | ----- | ---- | -------------------------------------------------- |
61
+ | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
50
62
 
51
63
  ### npm 依赖
52
64
 
@@ -55,6 +67,7 @@ package: "@teamix-evo/ui"
55
67
  ```bash
56
68
  pnpm add @radix-ui/react-select@^2.1.0 lucide-react@^0.460.0
57
69
  ```
70
+
58
71
  <!-- auto:deps:end -->
59
72
 
60
73
  > 完整子组件:`Select / SelectGroup / SelectValue / SelectTrigger / SelectContent / SelectLabel / SelectItem / SelectSeparator / SelectScrollUpButton / SelectScrollDownButton`。
@@ -18,7 +18,7 @@ const meta: Meta<typeof SelectTrigger> = {
18
18
  docs: {
19
19
  description: {
20
20
  component:
21
- '下拉选择 — 从预置选项中选中一个值,由按钮触发弹出选项列表。Radix Select 实现 + antd Select 的并集能力:支持 `SelectGroup` / `SelectLabel` / `SelectSeparator` 组合出分组下拉,`size`(sm / default / lg)可调,默认带键盘导航与文本检索。视觉走 OpenTrek semantic tokens,所有样式来自 `@teamix-evo/design`,无 mock。',
21
+ '下拉选择 — 从预置选项中选中一个值,由按钮触发弹出选项列表。Radix Select 实现 + antd Select 的并集能力:支持 `SelectGroup` / `SelectLabel` / `SelectSeparator` 组合出分组下拉,`size`(sm / default / lg)可调,默认带键盘导航与文本检索。',
22
22
  },
23
23
  },
24
24
  },
@@ -101,7 +101,7 @@ const SelectContent = React.forwardRef<
101
101
  <SelectPrimitive.Content
102
102
  ref={ref}
103
103
  className={cn(
104
- 'relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
104
+ 'relative z-50 max-h-96 min-w-menu overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
105
105
  position === 'popper' &&
106
106
  'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',
107
107
  className,
@@ -114,7 +114,7 @@ const SelectContent = React.forwardRef<
114
114
  className={cn(
115
115
  'p-1',
116
116
  position === 'popper' &&
117
- 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]',
117
+ 'h-radix-select-trigger w-full min-w-radix-select-trigger',
118
118
  )}
119
119
  >
120
120
  {children}
@@ -1,13 +1,14 @@
1
1
  ---
2
2
  id: separator
3
3
  name: Separator
4
+ displayName: 分隔线
4
5
  type: component
5
6
  category: foundation
6
7
  since: 0.1.0
7
- package: "@teamix-evo/ui"
8
+ package: '@teamix-evo/ui'
8
9
  ---
9
10
 
10
- # Separator
11
+ # Separator 分隔线
11
12
 
12
13
  分隔线 — Radix Separator(语义层)+ antd Divider 的 `dashed` 与中间装饰文本(`children`)。
13
14
 
@@ -27,12 +28,14 @@ package: "@teamix-evo/ui"
27
28
  > 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成。
28
29
 
29
30
  <!-- auto:props:begin -->
30
- | 名称 | 类型 | 默认值 | 必填 | 说明 |
31
- | --- | --- | --- | --- | --- |
32
- | `orientation` | `'horizontal' \| 'vertical'` | `"horizontal"` | | 分隔方向。 |
33
- | `decorative` | `boolean` | `true` | – | `true` 时不参与无障碍树(语义上仅装饰性)。 |
34
- | `dashed` | `boolean` | `false` | – | 虚线样式(antd Divider 并集)。 |
35
- | `children` | `React.ReactNode` | | – | 中间装饰文本(antd Divider 并集)。提供时改用"两端线段 + 中间文本"布局, Radix Separator 不再使用,但通过 `role="separator"` 保留无障碍语义。 |
31
+
32
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
33
+ | ------------- | ---------------------------- | -------------- | ---- | ----------------------------------------------------------------------------------------------------------------------------------------- |
34
+ | `orientation` | `'horizontal' \| 'vertical'` | `"horizontal"` | – | 分隔方向。 |
35
+ | `decorative` | `boolean` | `true` | – | `true` 时不参与无障碍树(语义上仅装饰性)。 |
36
+ | `dashed` | `boolean` | `false` | – | 虚线样式(antd Divider 并集)|
37
+ | `children` | `React.ReactNode` | – | – | 中间装饰文本(antd Divider 并集)。提供时改用"两端线段 + 中间文本"布局, Radix Separator 不再使用,但通过 `role="separator"` 保留无障碍语义。 |
38
+
36
39
  <!-- auto:props:end -->
37
40
 
38
41
  ## 依赖
@@ -40,13 +43,14 @@ package: "@teamix-evo/ui"
40
43
  > 以下表格由 `pnpm --filter @teamix-evo/ui gen:meta` 自动生成,数据源是 [`manifest.json`](../../../manifest.json)。**手工编辑 marker 之间的内容会在下次生成时被覆盖**。
41
44
 
42
45
  <!-- auto:deps:begin -->
46
+
43
47
  ### 同库依赖
44
48
 
45
49
  > `teamix-evo ui add separator` 时,以下 entry 会被自动连带安装(无需手动 add)。
46
50
 
47
- | Entry | 类型 | 描述 |
48
- | --- | --- | --- |
49
- | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
51
+ | Entry | 类型 | 描述 |
52
+ | ----- | ---- | -------------------------------------------------- |
53
+ | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
50
54
 
51
55
  ### npm 依赖
52
56
 
@@ -55,6 +59,7 @@ package: "@teamix-evo/ui"
55
59
  ```bash
56
60
  pnpm add @radix-ui/react-separator@^1.1.0
57
61
  ```
62
+
58
63
  <!-- auto:deps:end -->
59
64
 
60
65
  ## AI 生成纪律
@@ -9,7 +9,7 @@ const meta: Meta<typeof Separator> = {
9
9
  docs: {
10
10
  description: {
11
11
  component:
12
- '分隔线 — 在视觉上或语义上区隔内容。Radix Separator 实现 + antd Divider 的并集能力:支持水平 / 垂直两种 `orientation`,可传 `dashed` 虚线样式,中间可嵌入 `children` 为文字分隔(antd `Divider` 中部文字能力)。视觉走 OpenTrek semantic tokens,所有样式来自 `@teamix-evo/design`,无 mock。',
12
+ '分隔线 — 在视觉上或语义上区隔内容。Radix Separator 实现 + antd Divider 的并集能力:支持水平 / 垂直两种 `orientation`,可传 `dashed` 虚线样式,中间可嵌入 `children` 为文字分隔。',
13
13
  },
14
14
  },
15
15
  },