@teamix-evo/ui 0.3.0 → 0.5.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 (520) hide show
  1. package/README.md +46 -50
  2. package/manifest.json +420 -647
  3. package/package.json +15 -34
  4. package/src/_design-system/theme-tokens/stories.tsx +1474 -0
  5. package/src/components/accordion/index.tsx +139 -0
  6. package/src/components/accordion/meta.md +162 -0
  7. package/src/components/accordion/stories.tsx +145 -0
  8. package/src/components/affix/index.tsx +149 -0
  9. package/src/components/affix/meta.md +23 -0
  10. package/src/components/affix/stories.tsx +70 -0
  11. package/src/components/alert/index.tsx +220 -0
  12. package/src/components/alert/meta.md +133 -0
  13. package/src/components/alert/stories.tsx +126 -0
  14. package/src/components/alert-dialog/index.tsx +282 -0
  15. package/src/components/alert-dialog/meta.md +86 -0
  16. package/src/components/alert-dialog/stories.tsx +163 -0
  17. package/src/components/avatar/index.tsx +159 -0
  18. package/src/components/avatar/meta.md +242 -0
  19. package/src/components/avatar/stories.tsx +241 -0
  20. package/src/components/badge/index.tsx +299 -0
  21. package/src/components/badge/meta.md +237 -0
  22. package/src/components/badge/stories.tsx +275 -0
  23. package/src/components/breadcrumb/index.tsx +137 -0
  24. package/src/components/breadcrumb/meta.md +64 -0
  25. package/src/components/breadcrumb/stories.tsx +86 -0
  26. package/src/components/button/index.tsx +202 -0
  27. package/src/components/button/meta.md +209 -0
  28. package/src/components/button/stories.tsx +215 -0
  29. package/src/components/button-group/index.tsx +211 -0
  30. package/src/components/button-group/meta.md +190 -0
  31. package/src/components/button-group/stories.tsx +182 -0
  32. package/src/components/calendar/index.tsx +240 -0
  33. package/src/components/calendar/meta.md +36 -0
  34. package/src/components/calendar/stories.tsx +36 -0
  35. package/src/components/card/index.tsx +262 -0
  36. package/src/components/card/meta.md +194 -0
  37. package/src/components/card/stories.tsx +202 -0
  38. package/src/components/carousel/index.tsx +481 -0
  39. package/src/components/carousel/meta.md +208 -0
  40. package/src/components/carousel/stories.tsx +271 -0
  41. package/src/components/cascader-select/index.tsx +308 -0
  42. package/src/components/cascader-select/meta.md +28 -0
  43. package/src/components/cascader-select/stories.tsx +118 -0
  44. package/src/components/checkbox/index.tsx +208 -0
  45. package/src/components/checkbox/meta.md +166 -0
  46. package/src/components/checkbox/stories.tsx +206 -0
  47. package/src/components/collapsible/index.tsx +72 -0
  48. package/src/components/collapsible/meta.md +87 -0
  49. package/src/components/collapsible/stories.tsx +97 -0
  50. package/src/components/color-picker/index.tsx +677 -0
  51. package/src/components/color-picker/meta.md +83 -0
  52. package/src/components/color-picker/stories.tsx +172 -0
  53. package/src/components/combobox/index.tsx +687 -0
  54. package/src/components/combobox/meta.md +83 -0
  55. package/src/components/combobox/stories.tsx +179 -0
  56. package/src/components/command/index.tsx +238 -0
  57. package/src/components/command/meta.md +48 -0
  58. package/src/components/command/stories.tsx +83 -0
  59. package/src/components/data-table/index.tsx +1537 -0
  60. package/src/components/data-table/meta.md +107 -0
  61. package/src/components/data-table/stories.tsx +1234 -0
  62. package/src/components/date-picker/index.tsx +1492 -0
  63. package/src/components/date-picker/meta.md +103 -0
  64. package/src/components/date-picker/stories.tsx +125 -0
  65. package/src/components/descriptions/index.tsx +535 -0
  66. package/src/components/descriptions/meta.md +104 -0
  67. package/src/components/descriptions/stories.tsx +389 -0
  68. package/src/components/dialog/index.tsx +255 -0
  69. package/src/components/dialog/meta.md +244 -0
  70. package/src/components/dialog/stories.tsx +330 -0
  71. package/src/components/dropdown-menu/index.tsx +301 -0
  72. package/src/components/dropdown-menu/meta.md +93 -0
  73. package/src/components/dropdown-menu/stories.tsx +124 -0
  74. package/src/components/empty/index.tsx +431 -0
  75. package/src/components/empty/meta.md +274 -0
  76. package/src/components/empty/stories.tsx +278 -0
  77. package/src/components/field/index.tsx +374 -0
  78. package/src/components/field/meta.md +283 -0
  79. package/src/components/field/stories.tsx +327 -0
  80. package/src/components/filter-bar/index.tsx +976 -0
  81. package/src/components/filter-bar/meta.md +57 -0
  82. package/src/components/filter-bar/stories.tsx +496 -0
  83. package/src/components/float-button/index.tsx +163 -0
  84. package/src/components/float-button/meta.md +73 -0
  85. package/src/components/float-button/stories.tsx +68 -0
  86. package/src/components/form/index.tsx +218 -0
  87. package/src/components/form/meta.md +16 -0
  88. package/src/components/form/stories.tsx +301 -0
  89. package/src/components/hover-card/index.tsx +103 -0
  90. package/src/components/hover-card/meta.md +71 -0
  91. package/src/components/hover-card/stories.tsx +107 -0
  92. package/src/components/icon/index.tsx +225 -0
  93. package/src/components/icon/meta.md +102 -0
  94. package/src/components/icon/stories.tsx +127 -0
  95. package/src/components/image/index.tsx +147 -0
  96. package/src/components/image/meta.md +55 -0
  97. package/src/components/image/stories.tsx +48 -0
  98. package/src/components/input/index.tsx +63 -0
  99. package/src/components/input/meta.md +57 -0
  100. package/src/components/input/stories.tsx +66 -0
  101. package/src/components/input-group/index.tsx +292 -0
  102. package/src/components/input-group/meta.md +108 -0
  103. package/src/components/input-group/stories.tsx +258 -0
  104. package/src/components/input-ip/index.tsx +288 -0
  105. package/src/components/input-ip/meta.md +48 -0
  106. package/src/components/input-ip/stories.tsx +69 -0
  107. package/src/components/input-number/index.tsx +360 -0
  108. package/src/components/input-number/meta.md +156 -0
  109. package/src/components/input-number/stories.tsx +187 -0
  110. package/src/components/item/index.tsx +368 -0
  111. package/src/components/item/meta.md +395 -0
  112. package/src/components/item/stories.tsx +432 -0
  113. package/src/components/label/index.tsx +44 -0
  114. package/src/components/label/meta.md +68 -0
  115. package/src/components/label/stories.tsx +64 -0
  116. package/src/components/mentions/index.tsx +369 -0
  117. package/src/components/mentions/meta.md +118 -0
  118. package/src/components/mentions/stories.tsx +153 -0
  119. package/src/components/menubar/index.tsx +313 -0
  120. package/src/components/menubar/meta.md +52 -0
  121. package/src/components/menubar/stories.tsx +99 -0
  122. package/src/components/navigation-menu/index.tsx +216 -0
  123. package/src/components/navigation-menu/meta.md +66 -0
  124. package/src/components/navigation-menu/stories.tsx +137 -0
  125. package/src/components/page-header/index.tsx +218 -0
  126. package/src/components/page-header/meta.md +211 -0
  127. package/src/components/page-header/stories.tsx +290 -0
  128. package/src/components/page-shell/index.tsx +119 -0
  129. package/src/components/page-shell/meta.md +115 -0
  130. package/src/components/page-shell/stories.tsx +154 -0
  131. package/src/components/pagination/index.tsx +580 -0
  132. package/src/components/pagination/meta.md +39 -0
  133. package/src/components/pagination/stories.tsx +319 -0
  134. package/src/components/popconfirm/index.tsx +477 -0
  135. package/src/components/popconfirm/meta.md +164 -0
  136. package/src/components/popconfirm/stories.tsx +231 -0
  137. package/src/components/popover/index.tsx +181 -0
  138. package/src/components/popover/meta.md +97 -0
  139. package/src/components/popover/stories.tsx +169 -0
  140. package/src/components/progress/index.tsx +176 -0
  141. package/src/components/progress/meta.md +95 -0
  142. package/src/components/progress/stories.tsx +115 -0
  143. package/src/components/radio-group/index.tsx +78 -0
  144. package/src/components/radio-group/meta.md +137 -0
  145. package/src/components/radio-group/stories.tsx +285 -0
  146. package/src/components/rate/index.tsx +284 -0
  147. package/src/components/rate/meta.md +63 -0
  148. package/src/components/rate/stories.tsx +107 -0
  149. package/src/components/resizable/index.tsx +122 -0
  150. package/src/components/resizable/meta.md +142 -0
  151. package/src/components/resizable/stories.tsx +105 -0
  152. package/src/components/scroll-area/index.tsx +83 -0
  153. package/src/components/scroll-area/meta.md +85 -0
  154. package/src/components/scroll-area/stories.tsx +82 -0
  155. package/src/components/select/index.tsx +325 -0
  156. package/src/components/select/meta.md +183 -0
  157. package/src/components/select/stories.tsx +210 -0
  158. package/src/components/separator/index.tsx +51 -0
  159. package/src/components/separator/meta.md +68 -0
  160. package/src/components/separator/stories.tsx +53 -0
  161. package/src/components/sheet/index.tsx +293 -0
  162. package/src/components/sheet/meta.md +226 -0
  163. package/src/components/sheet/stories.tsx +405 -0
  164. package/src/components/sidebar/index.tsx +715 -0
  165. package/src/components/sidebar/meta.md +14 -0
  166. package/src/components/sidebar/{sidebar.stories.tsx → stories.tsx} +250 -330
  167. package/src/components/skeleton/index.tsx +415 -0
  168. package/src/components/skeleton/meta.md +210 -0
  169. package/src/components/skeleton/stories.tsx +197 -0
  170. package/src/components/slider/index.tsx +222 -0
  171. package/src/components/slider/meta.md +125 -0
  172. package/src/components/slider/stories.tsx +109 -0
  173. package/src/components/sonner/index.tsx +149 -0
  174. package/src/components/sonner/meta.md +156 -0
  175. package/src/components/sonner/stories.tsx +285 -0
  176. package/src/components/spinner/index.tsx +335 -0
  177. package/src/components/spinner/meta.md +172 -0
  178. package/src/components/spinner/stories.tsx +197 -0
  179. package/src/components/statistic/{statistic.tsx → index.tsx} +25 -26
  180. package/src/components/statistic/meta.md +94 -0
  181. package/src/components/statistic/stories.tsx +85 -0
  182. package/src/components/steps/index.tsx +500 -0
  183. package/src/components/steps/meta.md +245 -0
  184. package/src/components/steps/stories.tsx +287 -0
  185. package/src/components/switch/index.tsx +175 -0
  186. package/src/components/switch/meta.md +107 -0
  187. package/src/components/switch/stories.tsx +154 -0
  188. package/src/components/table/index.tsx +350 -0
  189. package/src/components/table/meta.md +148 -0
  190. package/src/components/table/stories.tsx +189 -0
  191. package/src/components/tabs/index.tsx +379 -0
  192. package/src/components/tabs/meta.md +244 -0
  193. package/src/components/tabs/stories.tsx +312 -0
  194. package/src/components/tag/index.tsx +774 -0
  195. package/src/components/tag/meta.md +256 -0
  196. package/src/components/tag/stories.tsx +431 -0
  197. package/src/components/textarea/index.tsx +62 -0
  198. package/src/components/textarea/meta.md +77 -0
  199. package/src/components/textarea/stories.tsx +112 -0
  200. package/src/components/time-picker/index.tsx +887 -0
  201. package/src/components/time-picker/meta.md +102 -0
  202. package/src/components/time-picker/stories.tsx +125 -0
  203. package/src/components/timeline/index.tsx +422 -0
  204. package/src/components/timeline/meta.md +352 -0
  205. package/src/components/timeline/stories.tsx +369 -0
  206. package/src/components/toggle/index.tsx +74 -0
  207. package/src/components/toggle/meta.md +76 -0
  208. package/src/components/toggle/stories.tsx +66 -0
  209. package/src/components/toggle-group/index.tsx +167 -0
  210. package/src/components/toggle-group/meta.md +141 -0
  211. package/src/components/toggle-group/stories.tsx +124 -0
  212. package/src/components/tooltip/index.tsx +144 -0
  213. package/src/components/tooltip/meta.md +186 -0
  214. package/src/components/tooltip/stories.tsx +212 -0
  215. package/src/components/transfer/index.tsx +639 -0
  216. package/src/components/transfer/meta.md +76 -0
  217. package/src/components/transfer/stories.tsx +221 -0
  218. package/src/components/tree/index.tsx +764 -0
  219. package/src/components/tree/meta.md +96 -0
  220. package/src/components/tree/stories.tsx +385 -0
  221. package/src/components/tree/utils.ts +269 -0
  222. package/src/components/tree-select/index.tsx +400 -0
  223. package/src/components/tree-select/meta.md +78 -0
  224. package/src/components/tree-select/stories.tsx +234 -0
  225. package/src/components/typography/index.tsx +290 -0
  226. package/src/components/typography/meta.md +151 -0
  227. package/src/components/typography/stories.tsx +151 -0
  228. package/src/components/upload/index.tsx +858 -0
  229. package/src/components/upload/meta.md +122 -0
  230. package/src/components/upload/stories.tsx +261 -0
  231. package/src/components/watermark/index.tsx +152 -0
  232. package/src/components/watermark/meta.md +67 -0
  233. package/src/components/watermark/stories.tsx +59 -0
  234. package/src/hooks/use-mobile.ts +9 -11
  235. package/src/lib/color.ts +243 -0
  236. package/src/{utils/cn.ts → lib/utils.ts} +1 -1
  237. package/src/components/accordion/accordion.meta.md +0 -88
  238. package/src/components/accordion/accordion.stories.tsx +0 -72
  239. package/src/components/accordion/accordion.tsx +0 -154
  240. package/src/components/affix/affix.meta.md +0 -98
  241. package/src/components/affix/affix.stories.tsx +0 -134
  242. package/src/components/affix/affix.tsx +0 -167
  243. package/src/components/alert/alert.meta.md +0 -132
  244. package/src/components/alert/alert.stories.tsx +0 -138
  245. package/src/components/alert/alert.tsx +0 -179
  246. package/src/components/alert-dialog/alert-dialog.meta.md +0 -152
  247. package/src/components/alert-dialog/alert-dialog.stories.tsx +0 -223
  248. package/src/components/alert-dialog/alert-dialog.tsx +0 -183
  249. package/src/components/anchor/anchor.meta.md +0 -92
  250. package/src/components/anchor/anchor.stories.tsx +0 -74
  251. package/src/components/anchor/anchor.tsx +0 -130
  252. package/src/components/app/app.meta.md +0 -91
  253. package/src/components/app/app.stories.tsx +0 -64
  254. package/src/components/app/app.tsx +0 -58
  255. package/src/components/aspect-ratio/aspect-ratio.meta.md +0 -82
  256. package/src/components/aspect-ratio/aspect-ratio.stories.tsx +0 -59
  257. package/src/components/aspect-ratio/aspect-ratio.tsx +0 -22
  258. package/src/components/auto-complete/auto-complete.meta.md +0 -110
  259. package/src/components/auto-complete/auto-complete.stories.tsx +0 -136
  260. package/src/components/auto-complete/auto-complete.tsx +0 -253
  261. package/src/components/avatar/avatar.meta.md +0 -93
  262. package/src/components/avatar/avatar.stories.tsx +0 -98
  263. package/src/components/avatar/avatar.tsx +0 -127
  264. package/src/components/badge/badge.meta.md +0 -120
  265. package/src/components/badge/badge.stories.tsx +0 -153
  266. package/src/components/badge/badge.tsx +0 -204
  267. package/src/components/breadcrumb/breadcrumb.meta.md +0 -127
  268. package/src/components/breadcrumb/breadcrumb.stories.tsx +0 -207
  269. package/src/components/breadcrumb/breadcrumb.tsx +0 -136
  270. package/src/components/button/button.meta.md +0 -335
  271. package/src/components/button/button.stories.tsx +0 -743
  272. package/src/components/button/button.tsx +0 -462
  273. package/src/components/button/demo/as-child.tsx +0 -24
  274. package/src/components/button/demo/basic.tsx +0 -8
  275. package/src/components/button/demo/block.tsx +0 -16
  276. package/src/components/button/demo/loading.tsx +0 -19
  277. package/src/components/button/demo/shapes.tsx +0 -18
  278. package/src/components/button/demo/sizes.tsx +0 -19
  279. package/src/components/button/demo/variants.tsx +0 -19
  280. package/src/components/button/demo/with-icon.tsx +0 -20
  281. package/src/components/calendar/calendar.meta.md +0 -128
  282. package/src/components/calendar/calendar.stories.tsx +0 -68
  283. package/src/components/calendar/calendar.tsx +0 -172
  284. package/src/components/card/card.meta.md +0 -139
  285. package/src/components/card/card.stories.tsx +0 -151
  286. package/src/components/card/card.tsx +0 -305
  287. package/src/components/carousel/carousel.meta.md +0 -118
  288. package/src/components/carousel/carousel.stories.tsx +0 -89
  289. package/src/components/carousel/carousel.tsx +0 -224
  290. package/src/components/cascader/cascader.meta.md +0 -140
  291. package/src/components/cascader/cascader.stories.tsx +0 -120
  292. package/src/components/cascader/cascader.tsx +0 -541
  293. package/src/components/checkbox/checkbox.meta.md +0 -167
  294. package/src/components/checkbox/checkbox.stories.tsx +0 -288
  295. package/src/components/checkbox/checkbox.tsx +0 -193
  296. package/src/components/collapsible/collapsible.meta.md +0 -88
  297. package/src/components/collapsible/collapsible.stories.tsx +0 -43
  298. package/src/components/collapsible/collapsible.tsx +0 -105
  299. package/src/components/color-picker/color-picker.meta.md +0 -89
  300. package/src/components/color-picker/color-picker.stories.tsx +0 -159
  301. package/src/components/color-picker/color-picker.tsx +0 -171
  302. package/src/components/command/command.meta.md +0 -120
  303. package/src/components/command/command.stories.tsx +0 -59
  304. package/src/components/command/command.tsx +0 -158
  305. package/src/components/context-menu/context-menu.meta.md +0 -93
  306. package/src/components/context-menu/context-menu.stories.tsx +0 -54
  307. package/src/components/context-menu/context-menu.tsx +0 -204
  308. package/src/components/data-table/data-table.meta.md +0 -150
  309. package/src/components/data-table/data-table.stories.tsx +0 -132
  310. package/src/components/data-table/data-table.tsx +0 -185
  311. package/src/components/date-picker/date-picker.meta.md +0 -175
  312. package/src/components/date-picker/date-picker.stories.tsx +0 -108
  313. package/src/components/date-picker/date-picker.tsx +0 -1554
  314. package/src/components/descriptions/descriptions.meta.md +0 -83
  315. package/src/components/descriptions/descriptions.stories.tsx +0 -60
  316. package/src/components/descriptions/descriptions.tsx +0 -137
  317. package/src/components/dialog/dialog.meta.md +0 -168
  318. package/src/components/dialog/dialog.stories.tsx +0 -255
  319. package/src/components/dialog/dialog.tsx +0 -180
  320. package/src/components/dialog/imperative.tsx +0 -252
  321. package/src/components/drawer/drawer.meta.md +0 -95
  322. package/src/components/drawer/drawer.stories.tsx +0 -71
  323. package/src/components/drawer/drawer.tsx +0 -23
  324. package/src/components/dropdown-menu/dropdown-menu.meta.md +0 -171
  325. package/src/components/dropdown-menu/dropdown-menu.stories.tsx +0 -198
  326. package/src/components/dropdown-menu/dropdown-menu.tsx +0 -209
  327. package/src/components/ellipsis/ellipsis.meta.md +0 -87
  328. package/src/components/ellipsis/ellipsis.stories.tsx +0 -72
  329. package/src/components/ellipsis/ellipsis.tsx +0 -153
  330. package/src/components/empty/empty.meta.md +0 -86
  331. package/src/components/empty/empty.stories.tsx +0 -46
  332. package/src/components/empty/empty.tsx +0 -54
  333. package/src/components/field/field.meta.md +0 -154
  334. package/src/components/field/field.stories.tsx +0 -497
  335. package/src/components/field/field.tsx +0 -392
  336. package/src/components/filter-bar/filter-bar.meta.md +0 -92
  337. package/src/components/filter-bar/filter-bar.stories.tsx +0 -1083
  338. package/src/components/filter-bar/filter-bar.tsx +0 -568
  339. package/src/components/flex/flex.meta.md +0 -142
  340. package/src/components/flex/flex.stories.tsx +0 -199
  341. package/src/components/flex/flex.tsx +0 -145
  342. package/src/components/float-button/float-button.meta.md +0 -92
  343. package/src/components/float-button/float-button.stories.tsx +0 -80
  344. package/src/components/float-button/float-button.tsx +0 -143
  345. package/src/components/form/form.meta.md +0 -153
  346. package/src/components/form/form.stories.tsx +0 -469
  347. package/src/components/form/form.tsx +0 -260
  348. package/src/components/grid/grid.meta.md +0 -92
  349. package/src/components/grid/grid.stories.tsx +0 -101
  350. package/src/components/grid/grid.tsx +0 -130
  351. package/src/components/hover-card/hover-card.meta.md +0 -103
  352. package/src/components/hover-card/hover-card.stories.tsx +0 -97
  353. package/src/components/hover-card/hover-card.tsx +0 -67
  354. package/src/components/icon/DEVELOPMENT.md +0 -809
  355. package/src/components/icon/icon.meta.md +0 -170
  356. package/src/components/icon/icon.stories.tsx +0 -344
  357. package/src/components/icon/icon.tsx +0 -248
  358. package/src/components/image/image.meta.md +0 -99
  359. package/src/components/image/image.stories.tsx +0 -55
  360. package/src/components/image/image.tsx +0 -140
  361. package/src/components/input/demo/basic.tsx +0 -12
  362. package/src/components/input/demo/clearable.tsx +0 -21
  363. package/src/components/input/demo/show-count.tsx +0 -18
  364. package/src/components/input/demo/sizes.tsx +0 -15
  365. package/src/components/input/input.meta.md +0 -115
  366. package/src/components/input/input.stories.tsx +0 -144
  367. package/src/components/input/input.tsx +0 -212
  368. package/src/components/input-group/input-group.meta.md +0 -124
  369. package/src/components/input-group/input-group.stories.tsx +0 -121
  370. package/src/components/input-group/input-group.tsx +0 -143
  371. package/src/components/input-number/input-number.meta.md +0 -148
  372. package/src/components/input-number/input-number.stories.tsx +0 -125
  373. package/src/components/input-number/input-number.tsx +0 -283
  374. package/src/components/input-otp/input-otp.meta.md +0 -106
  375. package/src/components/input-otp/input-otp.stories.tsx +0 -65
  376. package/src/components/input-otp/input-otp.tsx +0 -97
  377. package/src/components/item/item.meta.md +0 -121
  378. package/src/components/item/item.stories.tsx +0 -116
  379. package/src/components/item/item.tsx +0 -172
  380. package/src/components/kbd/kbd.meta.md +0 -94
  381. package/src/components/kbd/kbd.stories.tsx +0 -70
  382. package/src/components/kbd/kbd.tsx +0 -86
  383. package/src/components/label/label.meta.md +0 -99
  384. package/src/components/label/label.stories.tsx +0 -145
  385. package/src/components/label/label.tsx +0 -138
  386. package/src/components/masonry/masonry.meta.md +0 -90
  387. package/src/components/masonry/masonry.stories.tsx +0 -68
  388. package/src/components/masonry/masonry.tsx +0 -60
  389. package/src/components/mentions/mentions.meta.md +0 -119
  390. package/src/components/mentions/mentions.stories.tsx +0 -189
  391. package/src/components/mentions/mentions.tsx +0 -243
  392. package/src/components/menubar/menubar.meta.md +0 -118
  393. package/src/components/menubar/menubar.stories.tsx +0 -141
  394. package/src/components/menubar/menubar.tsx +0 -232
  395. package/src/components/native-select/native-select.meta.md +0 -93
  396. package/src/components/native-select/native-select.stories.tsx +0 -83
  397. package/src/components/native-select/native-select.tsx +0 -54
  398. package/src/components/navigation-menu/navigation-menu.meta.md +0 -118
  399. package/src/components/navigation-menu/navigation-menu.stories.tsx +0 -215
  400. package/src/components/navigation-menu/navigation-menu.tsx +0 -129
  401. package/src/components/notification/notification.meta.md +0 -133
  402. package/src/components/notification/notification.stories.tsx +0 -98
  403. package/src/components/notification/notification.tsx +0 -99
  404. package/src/components/page-header/DEVELOPMENT.md +0 -842
  405. package/src/components/page-header/page-header.meta.md +0 -208
  406. package/src/components/page-header/page-header.stories.tsx +0 -421
  407. package/src/components/page-header/page-header.tsx +0 -281
  408. package/src/components/pagination/pagination.meta.md +0 -230
  409. package/src/components/pagination/pagination.stories.tsx +0 -284
  410. package/src/components/pagination/pagination.tsx +0 -577
  411. package/src/components/popconfirm/popconfirm.meta.md +0 -114
  412. package/src/components/popconfirm/popconfirm.stories.tsx +0 -75
  413. package/src/components/popconfirm/popconfirm.tsx +0 -134
  414. package/src/components/popover/popover.meta.md +0 -154
  415. package/src/components/popover/popover.stories.tsx +0 -158
  416. package/src/components/popover/popover.tsx +0 -104
  417. package/src/components/progress/progress.meta.md +0 -118
  418. package/src/components/progress/progress.stories.tsx +0 -75
  419. package/src/components/progress/progress.tsx +0 -203
  420. package/src/components/radio-group/radio-group.meta.md +0 -175
  421. package/src/components/radio-group/radio-group.stories.tsx +0 -113
  422. package/src/components/radio-group/radio-group.tsx +0 -209
  423. package/src/components/rate/rate.meta.md +0 -118
  424. package/src/components/rate/rate.stories.tsx +0 -89
  425. package/src/components/rate/rate.tsx +0 -180
  426. package/src/components/resizable/resizable.meta.md +0 -95
  427. package/src/components/resizable/resizable.stories.tsx +0 -104
  428. package/src/components/resizable/resizable.tsx +0 -56
  429. package/src/components/result/result.meta.md +0 -95
  430. package/src/components/result/result.stories.tsx +0 -67
  431. package/src/components/result/result.tsx +0 -100
  432. package/src/components/scroll-area/scroll-area.meta.md +0 -85
  433. package/src/components/scroll-area/scroll-area.stories.tsx +0 -49
  434. package/src/components/scroll-area/scroll-area.tsx +0 -51
  435. package/src/components/segmented/segmented.meta.md +0 -106
  436. package/src/components/segmented/segmented.stories.tsx +0 -130
  437. package/src/components/segmented/segmented.tsx +0 -146
  438. package/src/components/select/select.meta.md +0 -255
  439. package/src/components/select/select.stories.tsx +0 -275
  440. package/src/components/select/select.tsx +0 -735
  441. package/src/components/separator/separator.meta.md +0 -75
  442. package/src/components/separator/separator.stories.tsx +0 -71
  443. package/src/components/separator/separator.tsx +0 -100
  444. package/src/components/sheet/sheet.meta.md +0 -113
  445. package/src/components/sheet/sheet.stories.tsx +0 -188
  446. package/src/components/sheet/sheet.tsx +0 -226
  447. package/src/components/sidebar/sidebar.meta.md +0 -150
  448. package/src/components/sidebar/sidebar.tsx +0 -824
  449. package/src/components/skeleton/skeleton.meta.md +0 -94
  450. package/src/components/skeleton/skeleton.stories.tsx +0 -79
  451. package/src/components/skeleton/skeleton.tsx +0 -144
  452. package/src/components/slider/slider.meta.md +0 -146
  453. package/src/components/slider/slider.stories.tsx +0 -121
  454. package/src/components/slider/slider.tsx +0 -227
  455. package/src/components/sonner/sonner.meta.md +0 -147
  456. package/src/components/sonner/sonner.stories.tsx +0 -164
  457. package/src/components/sonner/sonner.tsx +0 -169
  458. package/src/components/spinner/spinner.meta.md +0 -125
  459. package/src/components/spinner/spinner.stories.tsx +0 -123
  460. package/src/components/spinner/spinner.tsx +0 -166
  461. package/src/components/statistic/statistic.meta.md +0 -104
  462. package/src/components/statistic/statistic.stories.tsx +0 -67
  463. package/src/components/steps/steps.meta.md +0 -116
  464. package/src/components/steps/steps.stories.tsx +0 -115
  465. package/src/components/steps/steps.tsx +0 -173
  466. package/src/components/switch/switch.meta.md +0 -138
  467. package/src/components/switch/switch.stories.tsx +0 -75
  468. package/src/components/switch/switch.tsx +0 -169
  469. package/src/components/table/table.meta.md +0 -106
  470. package/src/components/table/table.stories.tsx +0 -80
  471. package/src/components/table/table.tsx +0 -122
  472. package/src/components/tabs/tabs.meta.md +0 -111
  473. package/src/components/tabs/tabs.stories.tsx +0 -156
  474. package/src/components/tabs/tabs.tsx +0 -190
  475. package/src/components/tag/tag.meta.md +0 -159
  476. package/src/components/tag/tag.stories.tsx +0 -250
  477. package/src/components/tag/tag.tsx +0 -386
  478. package/src/components/textarea/textarea.meta.md +0 -99
  479. package/src/components/textarea/textarea.stories.tsx +0 -89
  480. package/src/components/textarea/textarea.tsx +0 -137
  481. package/src/components/time-picker/time-picker.meta.md +0 -175
  482. package/src/components/time-picker/time-picker.stories.tsx +0 -129
  483. package/src/components/time-picker/time-picker.tsx +0 -946
  484. package/src/components/timeline/timeline.meta.md +0 -110
  485. package/src/components/timeline/timeline.stories.tsx +0 -134
  486. package/src/components/timeline/timeline.tsx +0 -168
  487. package/src/components/toggle/toggle.meta.md +0 -89
  488. package/src/components/toggle/toggle.stories.tsx +0 -66
  489. package/src/components/toggle/toggle.tsx +0 -54
  490. package/src/components/toggle-group/toggle-group.meta.md +0 -91
  491. package/src/components/toggle-group/toggle-group.stories.tsx +0 -83
  492. package/src/components/toggle-group/toggle-group.tsx +0 -78
  493. package/src/components/tooltip/tooltip.meta.md +0 -149
  494. package/src/components/tooltip/tooltip.stories.tsx +0 -108
  495. package/src/components/tooltip/tooltip.tsx +0 -153
  496. package/src/components/tour/tour.meta.md +0 -121
  497. package/src/components/tour/tour.stories.tsx +0 -66
  498. package/src/components/tour/tour.tsx +0 -242
  499. package/src/components/transfer/transfer.meta.md +0 -95
  500. package/src/components/transfer/transfer.stories.tsx +0 -64
  501. package/src/components/transfer/transfer.tsx +0 -258
  502. package/src/components/tree/tree.meta.md +0 -169
  503. package/src/components/tree/tree.stories.tsx +0 -128
  504. package/src/components/tree/tree.tsx +0 -368
  505. package/src/components/tree-select/tree-select.meta.md +0 -151
  506. package/src/components/tree-select/tree-select.stories.tsx +0 -80
  507. package/src/components/tree-select/tree-select.tsx +0 -206
  508. package/src/components/typography/typography.meta.md +0 -149
  509. package/src/components/typography/typography.stories.tsx +0 -116
  510. package/src/components/typography/typography.tsx +0 -260
  511. package/src/components/upload/upload.meta.md +0 -156
  512. package/src/components/upload/upload.stories.tsx +0 -135
  513. package/src/components/upload/upload.tsx +0 -398
  514. package/src/components/watermark/watermark.meta.md +0 -100
  515. package/src/components/watermark/watermark.stories.tsx +0 -170
  516. package/src/components/watermark/watermark.tsx +0 -166
  517. package/src/hooks/use-breakpoint.ts +0 -117
  518. package/src/hooks/use-debounce-callback.ts +0 -52
  519. package/src/stories/theme-tokens.stories.tsx +0 -747
  520. package/src/utils/trigger-input.ts +0 -53
@@ -1,121 +0,0 @@
1
- ---
2
- id: tour
3
- name: Tour
4
- type: component
5
- category: deprecated
6
- since: 0.1.0
7
- package: '@teamix-evo/ui'
8
- displayName: 新手引导
9
- ---
10
-
11
- # Tour 新手引导
12
-
13
- 新手引导 — antd 独有补足。**等价 antd `Tour`**(v5.0+)。多步骤引导(spotlight + 卡片 + 步进按钮 + 可关闭),帮助新用户首次进入页面时了解关键功能位置。
14
-
15
- ## When to use
16
-
17
- - 首次进入新功能页(关键功能位置说明)
18
- - 重大改版后的迁移引导(指出新位置)
19
- - 工具型应用的快速入门(画板 / 编辑器)
20
-
21
- ## When NOT to use
22
-
23
- - 静态帮助文档 → 用 Anchor + 长文档
24
- - 单一提示 → `Tooltip` / `Popover`
25
- - 表单字段说明 → `FieldDescription`
26
- - 错误反馈 → `Alert` / `notification`
27
-
28
- ## Props
29
-
30
- <!-- auto:props:begin -->
31
- | 名称 | 类型 | 默认值 | 必填 | 说明 |
32
- | --- | --- | --- | --- | --- |
33
- | `steps` | `TourStep[]` | – | ✓ | 步骤列表(antd `steps` 并集)。 |
34
- | `open` | `boolean` | – | – | 受控 open 状态。 |
35
- | `defaultOpen` | `boolean` | `false` | – | uncontrolled 初值。 |
36
- | `onOpenChange` | `(open: boolean) => void` | – | – | open 变化回调。 |
37
- | `current` | `number` | – | – | 当前步骤索引(受控)。 |
38
- | `onChange` | `(current: number) => void` | – | – | 步骤变化回调。 |
39
- | `onFinish` | `() => void` | – | – | 完成时回调(走到最后一步且点击"完成")。 |
40
- | `onClose` | `() => void` | – | – | 关闭回调(任意时刻点 X / mask)。 |
41
- | `mask` | `boolean` | `true` | – | 是否显示遮罩(antd `mask` 并集)。 |
42
- <!-- auto:props:end -->
43
-
44
- ## 依赖
45
-
46
- <!-- auto:deps:begin -->
47
- ### 同库依赖
48
-
49
- > `teamix-evo ui add tour` 时,以下 entry 会被自动连带安装(无需手动 add)。
50
-
51
- | Entry | 类型 | 描述 |
52
- | --- | --- | --- |
53
- | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
54
- | `button` | component | 通用按钮 — shadcn 实现 + cloud-design 能力并集(loading / icon / shape / block / dashed variant / color 语义双 prop / disabledTooltip)。同文件合一导出 ButtonGroup + ButtonGroupText(等价 antd Space.Compact + cd SplitButton)。 |
55
-
56
- ### npm 依赖
57
-
58
- > 业务侧需要先 `pnpm add` / `npm install` 这些包。CLI 在 `ui add` 完成后会列出此提示。
59
-
60
- ```bash
61
- pnpm add lucide-react@^0.460.0
62
- ```
63
- <!-- auto:deps:end -->
64
-
65
- ## AI 生成纪律
66
-
67
- - **业务侧自管"是否首次访问"** — 通常配 localStorage `tour:onboarding` 标记;**不要**期望本组件持久化
68
- - **`target` 必须是已挂载的元素**:用 `useRef` 绑定到 DOM 节点;Tour 用 `getBoundingClientRect()` 定位 spotlight
69
- - **`target` 不传 = 居中无 spotlight 模式**:用于"欢迎语" / "总结结束语"等无指向步骤
70
- - **步骤 ≤ 5**:再多用户会跳过 — 太长的引导改用文档 / 视频
71
- - **`onFinish` 应同时 set localStorage** 标记完成,避免再次弹出
72
- - **不要在 Tour 内放复杂表单 / 长文本** — 它是定位提示,不是阅读容器
73
- - **`mask=false`** 仅在用户需要边引导边操作时关闭;默认遮罩聚焦更强
74
-
75
- ## Examples
76
-
77
- ```tsx
78
- import { Tour } from '@/components/ui/tour';
79
- import * as React from 'react';
80
-
81
- function Page() {
82
- const newBtnRef = React.useRef<HTMLButtonElement>(null);
83
- const settingsRef = React.useRef<HTMLDivElement>(null);
84
- const [open, setOpen] = React.useState(false);
85
-
86
- React.useEffect(() => {
87
- if (!localStorage.getItem('tour:v1')) setOpen(true);
88
- }, []);
89
-
90
- return (
91
- <>
92
- <button ref={newBtnRef}>新建</button>
93
- <div ref={settingsRef}>设置</div>
94
-
95
- <Tour
96
- open={open}
97
- onOpenChange={setOpen}
98
- onFinish={() => localStorage.setItem('tour:v1', '1')}
99
- steps={[
100
- {
101
- target: newBtnRef,
102
- title: '从这里新建',
103
- description: '点击「新建」按钮即可创建新的项目',
104
- placement: 'bottom',
105
- },
106
- {
107
- target: settingsRef,
108
- title: '个性化设置',
109
- description: '在此处调整主题 / 通知偏好',
110
- placement: 'left',
111
- },
112
- {
113
- title: '完成!',
114
- description: '开始使用吧 🎉',
115
- },
116
- ]}
117
- />
118
- </>
119
- );
120
- }
121
- ```
@@ -1,66 +0,0 @@
1
- import * as React from 'react';
2
- import type { Meta, StoryObj } from '@storybook/react-vite';
3
- import { Tour } from './tour';
4
- import { Button } from '@/components/button/button';
5
-
6
- const meta: Meta<typeof Tour> = {
7
- title: '废弃 · Deprecated/Tour',
8
- component: Tour,
9
- tags: ['autodocs'],
10
- parameters: {
11
- docs: {
12
- description: {
13
- component:
14
- '⚠️ **已废弃** — 仅 Storybook 留档,不通过 manifest 对外发布。\n\n新手引导 — 多步骤 spotlight + 卡片 + 步进按钮。帮助新用户首次进入页面时了解关键功能位置。等价 antd `Tour`(v5.0+)。业务侧自管“是否首次访问”。',
15
- },
16
- },
17
- },
18
- };
19
-
20
- export default meta;
21
- type Story = StoryObj<typeof Tour>;
22
-
23
- export const Playground: Story = {
24
- parameters: { controls: { disable: true } },
25
- render: () => {
26
- const a = React.useRef<HTMLButtonElement>(null);
27
- const b = React.useRef<HTMLButtonElement>(null);
28
- const [open, setOpen] = React.useState(false);
29
-
30
- return (
31
- <div className="flex flex-col gap-4">
32
- <Button onClick={() => setOpen(true)}>启动引导</Button>
33
- <div className="flex gap-2">
34
- <Button ref={a} variant="outline">
35
- 新建
36
- </Button>
37
- <Button ref={b} variant="outline">
38
- 设置
39
- </Button>
40
- </div>
41
- <Tour
42
- open={open}
43
- onOpenChange={setOpen}
44
- steps={[
45
- {
46
- target: a,
47
- title: '从这里新建',
48
- description: '点击「新建」按钮创建一个新项目',
49
- placement: 'bottom',
50
- },
51
- {
52
- target: b,
53
- title: '个性化设置',
54
- description: '在此调整主题、通知等偏好',
55
- placement: 'top',
56
- },
57
- {
58
- title: '完成!',
59
- description: '开始使用吧 🎉',
60
- },
61
- ]}
62
- />
63
- </div>
64
- );
65
- },
66
- };
@@ -1,242 +0,0 @@
1
- import * as React from 'react';
2
- import { X } from 'lucide-react';
3
-
4
- import { cn } from '@/utils/cn';
5
- import { Button } from '@/components/button/button';
6
-
7
- export interface TourStep {
8
- /**
9
- * 目标元素引用 — 可以是 React ref `RefObject` 或返回 element 的函数。
10
- * 不传则居中显示(无 spotlight)。
11
- */
12
- target?: React.RefObject<HTMLElement | null> | (() => HTMLElement | null);
13
- /** 步骤标题。 */
14
- title: React.ReactNode;
15
- /** 步骤描述。 */
16
- description?: React.ReactNode;
17
- /**
18
- * 弹层相对目标的位置。
19
- * @default "bottom"
20
- */
21
- placement?: 'top' | 'bottom' | 'left' | 'right';
22
- }
23
-
24
- export interface TourProps {
25
- /** 步骤列表(antd `steps` 并集)。 */
26
- steps: TourStep[];
27
- /** 受控 open 状态。 */
28
- open?: boolean;
29
- /** uncontrolled 初值。 @default false */
30
- defaultOpen?: boolean;
31
- /** open 变化回调。 */
32
- onOpenChange?: (open: boolean) => void;
33
- /** 当前步骤索引(受控)。 */
34
- current?: number;
35
- /** 步骤变化回调。 */
36
- onChange?: (current: number) => void;
37
- /** 完成时回调(走到最后一步且点击"完成")。 */
38
- onFinish?: () => void;
39
- /** 关闭回调(任意时刻点 X / mask)。 */
40
- onClose?: () => void;
41
- /** 是否显示遮罩(antd `mask` 并集)。 @default true */
42
- mask?: boolean;
43
- }
44
-
45
- const SPOTLIGHT_PADDING = 8;
46
-
47
- /**
48
- * 新手引导 — antd 独有补足。**等价 antd `Tour`**(v5.0+)。多步骤引导(spotlight + 卡片 + 步进按钮),
49
- * 帮助新用户首次进入页面时了解关键功能位置。
50
- *
51
- * **关键约束**:
52
- * - 目标元素必须**已在 DOM 中**才能定位 spotlight(组件用 `getBoundingClientRect()`)
53
- * - 不内置首次访问检测 — 由业务侧自行管理"是否第一次"(常配 localStorage)
54
- */
55
- const Tour: React.FC<TourProps> = ({
56
- steps,
57
- open,
58
- defaultOpen = false,
59
- onOpenChange,
60
- current,
61
- onChange,
62
- onFinish,
63
- onClose,
64
- mask = true,
65
- }) => {
66
- const isControlledOpen = open !== undefined;
67
- const [internalOpen, setInternalOpen] = React.useState(defaultOpen);
68
- const isOpen = isControlledOpen ? open! : internalOpen;
69
-
70
- const isControlledStep = current !== undefined;
71
- const [internalStep, setInternalStep] = React.useState(0);
72
- const step = isControlledStep ? current! : internalStep;
73
-
74
- const setOpen = (next: boolean) => {
75
- if (!isControlledOpen) setInternalOpen(next);
76
- onOpenChange?.(next);
77
- };
78
-
79
- const setStep = (next: number) => {
80
- if (!isControlledStep) setInternalStep(next);
81
- onChange?.(next);
82
- };
83
-
84
- const [, force] = React.useReducer((x: number) => x + 1, 0);
85
- React.useEffect(() => {
86
- if (!isOpen) return;
87
- const onResize = () => force();
88
- window.addEventListener('resize', onResize);
89
- window.addEventListener('scroll', onResize, { passive: true });
90
- return () => {
91
- window.removeEventListener('resize', onResize);
92
- window.removeEventListener('scroll', onResize);
93
- };
94
- }, [isOpen]);
95
-
96
- if (!isOpen) return null;
97
- const cur = steps[step];
98
- if (!cur) return null;
99
-
100
- const target =
101
- typeof cur.target === 'function'
102
- ? cur.target()
103
- : cur.target?.current ?? null;
104
-
105
- const rect = target?.getBoundingClientRect();
106
-
107
- const close = () => {
108
- setOpen(false);
109
- onClose?.();
110
- };
111
-
112
- const finish = () => {
113
- setOpen(false);
114
- onFinish?.();
115
- };
116
-
117
- const placement = cur.placement ?? 'bottom';
118
- const cardStyle: React.CSSProperties = rect
119
- ? (() => {
120
- const offset = 12;
121
- switch (placement) {
122
- case 'top':
123
- return {
124
- top: rect.top - offset,
125
- left: rect.left + rect.width / 2,
126
- transform: 'translate(-50%, -100%)',
127
- };
128
- case 'left':
129
- return {
130
- top: rect.top + rect.height / 2,
131
- left: rect.left - offset,
132
- transform: 'translate(-100%, -50%)',
133
- };
134
- case 'right':
135
- return {
136
- top: rect.top + rect.height / 2,
137
- left: rect.right + offset,
138
- transform: 'translate(0, -50%)',
139
- };
140
- case 'bottom':
141
- default:
142
- return {
143
- top: rect.bottom + offset,
144
- left: rect.left + rect.width / 2,
145
- transform: 'translate(-50%, 0)',
146
- };
147
- }
148
- })()
149
- : {
150
- top: '50%',
151
- left: '50%',
152
- transform: 'translate(-50%, -50%)',
153
- };
154
-
155
- return (
156
- <div className="fixed inset-0 z-50">
157
- {mask ? (
158
- rect ? (
159
- <svg
160
- className="pointer-events-none absolute inset-0 size-full"
161
- xmlns="http://www.w3.org/2000/svg"
162
- >
163
- <defs>
164
- <mask id="tour-mask">
165
- <rect width="100%" height="100%" fill="white" />
166
- <rect
167
- x={rect.left - SPOTLIGHT_PADDING}
168
- y={rect.top - SPOTLIGHT_PADDING}
169
- width={rect.width + SPOTLIGHT_PADDING * 2}
170
- height={rect.height + SPOTLIGHT_PADDING * 2}
171
- rx="6"
172
- fill="black"
173
- />
174
- </mask>
175
- </defs>
176
- <rect
177
- width="100%"
178
- height="100%"
179
- fill="var(--overlay-scrim)"
180
- mask="url(#tour-mask)"
181
- />
182
- </svg>
183
- ) : (
184
- <div className="absolute inset-0 bg-black/50" onClick={close} />
185
- )
186
- ) : null}
187
-
188
- <div
189
- role="dialog"
190
- className={cn(
191
- 'absolute w-80 rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-xl',
192
- )}
193
- style={cardStyle}
194
- >
195
- <div className="flex items-start justify-between gap-2">
196
- <div className="font-semibold">{cur.title}</div>
197
- <button
198
- type="button"
199
- aria-label="关闭"
200
- onClick={close}
201
- className="cursor-pointer text-muted-foreground transition-colors hover:text-foreground"
202
- >
203
- <X className="size-4" />
204
- </button>
205
- </div>
206
- {cur.description ? (
207
- <div className="mt-2 text-xs text-muted-foreground">
208
- {cur.description}
209
- </div>
210
- ) : null}
211
- <div className="mt-4 flex items-center justify-between">
212
- <span className="text-xs tabular-nums text-muted-foreground">
213
- {step + 1} / {steps.length}
214
- </span>
215
- <div className="flex gap-2">
216
- {step > 0 ? (
217
- <Button
218
- variant="outline"
219
- size="sm"
220
- onClick={() => setStep(step - 1)}
221
- >
222
- 上一步
223
- </Button>
224
- ) : null}
225
- {step < steps.length - 1 ? (
226
- <Button size="sm" onClick={() => setStep(step + 1)}>
227
- 下一步
228
- </Button>
229
- ) : (
230
- <Button size="sm" onClick={finish}>
231
- 完成
232
- </Button>
233
- )}
234
- </div>
235
- </div>
236
- </div>
237
- </div>
238
- );
239
- };
240
- Tour.displayName = 'Tour';
241
-
242
- export { Tour };
@@ -1,95 +0,0 @@
1
- ---
2
- id: transfer
3
- name: Transfer
4
- displayName: 穿梭框
5
- type: component
6
- category: data-entry
7
- since: 0.1.0
8
- package: '@teamix-evo/ui'
9
- ---
10
-
11
- # Transfer 穿梭框
12
-
13
- 穿梭框 — antd 独有补足。**双侧勾选 + 移动**的批量分配交互(权限分配、字段映射、收件人选择)。受控 `targetKeys` + `onChange` 单一真值,内置全选 / 半选 / 可选搜索 / 禁用项。
14
-
15
- ## When to use
16
-
17
- - 从大集合中挑选若干成员进入小集合(成员授权、邮件收件人)
18
- - 字段映射:左侧未映射字段 → 右侧已映射字段
19
- - 类目选择,可选 + 可移除并存
20
-
21
- ## When NOT to use
22
-
23
- - 单纯多选 → `Select multiple` / `CheckboxGroup`(轻量)
24
- - 选项 > 500 — 本组件未做虚拟化,建议改用 `Table` + 行选 + bulk action 模式
25
-
26
- ## Props
27
-
28
- <!-- auto:props:begin -->
29
- | 名称 | 类型 | 默认值 | 必填 | 说明 |
30
- | --- | --- | --- | --- | --- |
31
- | `dataSource` | `TransferItem[]` | – | ✓ | 全部数据源(左+右合集)。 |
32
- | `targetKeys` | `string[]` | – | ✓ | 受控:已"穿梭到右侧"的 key 集合(antd `targetKeys` 并集)。 |
33
- | `onChange` | `(next: string[]) => void` | – | – | 右侧集合变化回调。 |
34
- | `titles` | `[React.ReactNode, React.ReactNode]` | `["源", "目标"]` | – | 两侧标题(antd `titles` 并集) — `[左, 右]`。 |
35
- | `showSearch` | `boolean` | `false` | – | 启用搜索(antd `showSearch` 并集) — 两侧各一个输入框。 |
36
- | `render` | `(item: TransferItem) => React.ReactNode` | – | – | 自定义渲染单项(antd `render` 并集) — 默认渲染 `item.title`。 |
37
- | `disabled` | `boolean` | – | – | 整体禁用。 |
38
- | `listHeight` | `number` | `280` | – | 单侧高度(像素)。 |
39
- | `className` | `string` | – | – | – |
40
- <!-- auto:props:end -->
41
-
42
- ## 依赖
43
-
44
- <!-- auto:deps:begin -->
45
- ### 同库依赖
46
-
47
- > `teamix-evo ui add transfer` 时,以下 entry 会被自动连带安装(无需手动 add)。
48
-
49
- | Entry | 类型 | 描述 |
50
- | --- | --- | --- |
51
- | `cn` | util | Tailwind className 合并工具(clsx + tailwind-merge) |
52
- | `button` | component | 通用按钮 — shadcn 实现 + cloud-design 能力并集(loading / icon / shape / block / dashed variant / color 语义双 prop / disabledTooltip)。同文件合一导出 ButtonGroup + ButtonGroupText(等价 antd Space.Compact + cd SplitButton)。 |
53
- | `checkbox` | component | 复选框 — Radix Checkbox(原生 indeterminate)+ antd Checkbox.Group(options 数组驱动) |
54
- | `input` | component | 单行文本输入 — clearable / showCount / size(sm 24 / md 32 / lg 36,与 Button 同档)/ error 四档内建能力。前缀/后缀/addon 等复合形态已拆出独立 InputGroup;多行已拆出独立 Textarea |
55
-
56
- ### npm 依赖
57
-
58
- > 业务侧需要先 `pnpm add` / `npm install` 这些包。CLI 在 `ui add` 完成后会列出此提示。
59
-
60
- ```bash
61
- pnpm add lucide-react@^0.460.0
62
- ```
63
- <!-- auto:deps:end -->
64
-
65
- ## AI 生成纪律
66
-
67
- - **`targetKeys` 是单一真值**:左侧 = `dataSource \ targetKeys`,右侧 = `targetKeys`;**不要**自己维护两个数组
68
- - **禁用项不可被移动**:即使被勾选也会被 batch move 跳过(对齐 antd)
69
- - **搜索仅做客户端字符串匹配**:`title` 为 string 时按子串匹配;ReactNode 时不过滤(消费方请保证 title 是 string 或在 `dataSource` 上做 server-side filter)
70
- - **不要在 `onChange` 里改 `dataSource`**:dataSource 应稳定,只改 targetKeys
71
- - **`titles` 必为长度 2 的数组**:`['可选', '已选']` / `['全部成员', '已授权']` 之类语义
72
- - **大数据量(> 200 项)**:建议改用 `Table` + 行选择 + 批量操作,Transfer 更适合 < 200 项的小集合穿梭
73
-
74
- ## Examples
75
-
76
- ```tsx
77
- import { Transfer, type TransferItem } from '@/components/ui/transfer';
78
- import * as React from 'react';
79
-
80
- const data: TransferItem[] = Array.from({ length: 12 }, (_, i) => ({
81
- key: String(i),
82
- title: `成员 ${i + 1}`,
83
- disabled: i === 0,
84
- }));
85
-
86
- const [target, setTarget] = React.useState<string[]>(['2', '4']);
87
-
88
- <Transfer
89
- dataSource={data}
90
- targetKeys={target}
91
- onChange={setTarget}
92
- titles={['全部成员', '已授权']}
93
- showSearch
94
- />;
95
- ```
@@ -1,64 +0,0 @@
1
- import * as React from 'react';
2
- import type { Meta, StoryObj } from '@storybook/react-vite';
3
- import { Transfer, type TransferItem } from './transfer';
4
-
5
- const meta: Meta<typeof Transfer> = {
6
- title: '数据录入 · Data Entry/Transfer',
7
- component: Transfer,
8
- tags: ['autodocs'],
9
- parameters: {
10
- docs: {
11
- description: {
12
- component:
13
- '穿梭框 — 双侧勾选 + 移动的批量分配交互(权限分配、字段映射、收件人选择)。受控 targetKeys 单一真值,内置全选 / 半选 / 可选搜索 / 禁用项跳过。等价 antd `Transfer`。',
14
- },
15
- },
16
- },
17
- };
18
-
19
- export default meta;
20
- type Story = StoryObj<typeof Transfer>;
21
-
22
- const data: TransferItem[] = Array.from({ length: 12 }, (_, i) => ({
23
- key: String(i),
24
- title: `成员 ${i + 1}`,
25
- disabled: i === 0,
26
- }));
27
-
28
- export const Playground: Story = {
29
- parameters: { controls: { disable: true } },
30
- render: () => {
31
- const [target, setTarget] = React.useState<string[]>(['2', '4']);
32
- return (
33
- <Transfer dataSource={data} targetKeys={target} onChange={setTarget} />
34
- );
35
- },
36
- };
37
-
38
- export const WithSearch: Story = {
39
- parameters: { controls: { disable: true } },
40
- render: () => {
41
- const [target, setTarget] = React.useState<string[]>([]);
42
- return (
43
- <Transfer
44
- dataSource={data}
45
- targetKeys={target}
46
- onChange={setTarget}
47
- titles={['全部成员', '已授权']}
48
- showSearch
49
- />
50
- );
51
- },
52
- };
53
-
54
- export const Disabled: Story = {
55
- parameters: { controls: { disable: true } },
56
- render: () => (
57
- <Transfer
58
- dataSource={data}
59
- targetKeys={['1', '3']}
60
- titles={['只读·左', '只读·右']}
61
- disabled
62
- />
63
- ),
64
- };