@teamix-evo/ui 0.4.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 (511) hide show
  1. package/README.md +46 -50
  2. package/manifest.json +406 -653
  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 -466
  273. package/src/components/calendar/calendar.meta.md +0 -128
  274. package/src/components/calendar/calendar.stories.tsx +0 -68
  275. package/src/components/calendar/calendar.tsx +0 -172
  276. package/src/components/card/card.meta.md +0 -139
  277. package/src/components/card/card.stories.tsx +0 -151
  278. package/src/components/card/card.tsx +0 -306
  279. package/src/components/carousel/carousel.meta.md +0 -118
  280. package/src/components/carousel/carousel.stories.tsx +0 -89
  281. package/src/components/carousel/carousel.tsx +0 -224
  282. package/src/components/cascader/cascader.meta.md +0 -140
  283. package/src/components/cascader/cascader.stories.tsx +0 -120
  284. package/src/components/cascader/cascader.tsx +0 -548
  285. package/src/components/checkbox/checkbox.meta.md +0 -167
  286. package/src/components/checkbox/checkbox.stories.tsx +0 -288
  287. package/src/components/checkbox/checkbox.tsx +0 -195
  288. package/src/components/collapsible/collapsible.meta.md +0 -88
  289. package/src/components/collapsible/collapsible.stories.tsx +0 -43
  290. package/src/components/collapsible/collapsible.tsx +0 -105
  291. package/src/components/color-picker/color-picker.meta.md +0 -89
  292. package/src/components/color-picker/color-picker.stories.tsx +0 -159
  293. package/src/components/color-picker/color-picker.tsx +0 -171
  294. package/src/components/command/command.meta.md +0 -120
  295. package/src/components/command/command.stories.tsx +0 -59
  296. package/src/components/command/command.tsx +0 -158
  297. package/src/components/context-menu/context-menu.meta.md +0 -93
  298. package/src/components/context-menu/context-menu.stories.tsx +0 -54
  299. package/src/components/context-menu/context-menu.tsx +0 -204
  300. package/src/components/data-table/data-table.meta.md +0 -150
  301. package/src/components/data-table/data-table.stories.tsx +0 -132
  302. package/src/components/data-table/data-table.tsx +0 -185
  303. package/src/components/date-picker/date-picker.meta.md +0 -175
  304. package/src/components/date-picker/date-picker.stories.tsx +0 -108
  305. package/src/components/date-picker/date-picker.tsx +0 -1554
  306. package/src/components/descriptions/descriptions.meta.md +0 -83
  307. package/src/components/descriptions/descriptions.stories.tsx +0 -60
  308. package/src/components/descriptions/descriptions.tsx +0 -137
  309. package/src/components/dialog/dialog.meta.md +0 -168
  310. package/src/components/dialog/dialog.stories.tsx +0 -255
  311. package/src/components/dialog/dialog.tsx +0 -180
  312. package/src/components/dialog/imperative.tsx +0 -252
  313. package/src/components/drawer/drawer.meta.md +0 -95
  314. package/src/components/drawer/drawer.stories.tsx +0 -71
  315. package/src/components/drawer/drawer.tsx +0 -23
  316. package/src/components/dropdown-menu/dropdown-menu.meta.md +0 -171
  317. package/src/components/dropdown-menu/dropdown-menu.stories.tsx +0 -198
  318. package/src/components/dropdown-menu/dropdown-menu.tsx +0 -209
  319. package/src/components/ellipsis/ellipsis.meta.md +0 -87
  320. package/src/components/ellipsis/ellipsis.stories.tsx +0 -72
  321. package/src/components/ellipsis/ellipsis.tsx +0 -153
  322. package/src/components/empty/empty.meta.md +0 -86
  323. package/src/components/empty/empty.stories.tsx +0 -46
  324. package/src/components/empty/empty.tsx +0 -54
  325. package/src/components/field/field.meta.md +0 -154
  326. package/src/components/field/field.stories.tsx +0 -497
  327. package/src/components/field/field.tsx +0 -392
  328. package/src/components/filter-bar/filter-bar.meta.md +0 -92
  329. package/src/components/filter-bar/filter-bar.stories.tsx +0 -1086
  330. package/src/components/filter-bar/filter-bar.tsx +0 -568
  331. package/src/components/flex/flex.meta.md +0 -142
  332. package/src/components/flex/flex.stories.tsx +0 -199
  333. package/src/components/flex/flex.tsx +0 -145
  334. package/src/components/float-button/float-button.meta.md +0 -92
  335. package/src/components/float-button/float-button.stories.tsx +0 -80
  336. package/src/components/float-button/float-button.tsx +0 -143
  337. package/src/components/form/form.meta.md +0 -153
  338. package/src/components/form/form.stories.tsx +0 -472
  339. package/src/components/form/form.tsx +0 -260
  340. package/src/components/grid/grid.meta.md +0 -92
  341. package/src/components/grid/grid.stories.tsx +0 -101
  342. package/src/components/grid/grid.tsx +0 -130
  343. package/src/components/hover-card/hover-card.meta.md +0 -103
  344. package/src/components/hover-card/hover-card.stories.tsx +0 -97
  345. package/src/components/hover-card/hover-card.tsx +0 -67
  346. package/src/components/icon/DEVELOPMENT.md +0 -809
  347. package/src/components/icon/icon.meta.md +0 -170
  348. package/src/components/icon/icon.stories.tsx +0 -344
  349. package/src/components/icon/icon.tsx +0 -248
  350. package/src/components/image/image.meta.md +0 -99
  351. package/src/components/image/image.stories.tsx +0 -55
  352. package/src/components/image/image.tsx +0 -140
  353. package/src/components/input/input.meta.md +0 -115
  354. package/src/components/input/input.stories.tsx +0 -144
  355. package/src/components/input/input.tsx +0 -212
  356. package/src/components/input-group/input-group.meta.md +0 -124
  357. package/src/components/input-group/input-group.stories.tsx +0 -121
  358. package/src/components/input-group/input-group.tsx +0 -143
  359. package/src/components/input-number/input-number.meta.md +0 -148
  360. package/src/components/input-number/input-number.stories.tsx +0 -125
  361. package/src/components/input-number/input-number.tsx +0 -283
  362. package/src/components/input-otp/input-otp.meta.md +0 -106
  363. package/src/components/input-otp/input-otp.stories.tsx +0 -65
  364. package/src/components/input-otp/input-otp.tsx +0 -97
  365. package/src/components/item/item.meta.md +0 -121
  366. package/src/components/item/item.stories.tsx +0 -116
  367. package/src/components/item/item.tsx +0 -172
  368. package/src/components/kbd/kbd.meta.md +0 -94
  369. package/src/components/kbd/kbd.stories.tsx +0 -70
  370. package/src/components/kbd/kbd.tsx +0 -86
  371. package/src/components/label/label.meta.md +0 -99
  372. package/src/components/label/label.stories.tsx +0 -145
  373. package/src/components/label/label.tsx +0 -138
  374. package/src/components/masonry/masonry.meta.md +0 -90
  375. package/src/components/masonry/masonry.stories.tsx +0 -68
  376. package/src/components/masonry/masonry.tsx +0 -60
  377. package/src/components/mentions/mentions.meta.md +0 -119
  378. package/src/components/mentions/mentions.stories.tsx +0 -189
  379. package/src/components/mentions/mentions.tsx +0 -243
  380. package/src/components/menubar/menubar.meta.md +0 -118
  381. package/src/components/menubar/menubar.stories.tsx +0 -141
  382. package/src/components/menubar/menubar.tsx +0 -232
  383. package/src/components/native-select/native-select.meta.md +0 -93
  384. package/src/components/native-select/native-select.stories.tsx +0 -83
  385. package/src/components/native-select/native-select.tsx +0 -54
  386. package/src/components/navigation-menu/navigation-menu.meta.md +0 -118
  387. package/src/components/navigation-menu/navigation-menu.stories.tsx +0 -215
  388. package/src/components/navigation-menu/navigation-menu.tsx +0 -129
  389. package/src/components/notification/notification.meta.md +0 -133
  390. package/src/components/notification/notification.stories.tsx +0 -98
  391. package/src/components/notification/notification.tsx +0 -99
  392. package/src/components/page-header/DEVELOPMENT.md +0 -842
  393. package/src/components/page-header/page-header.meta.md +0 -210
  394. package/src/components/page-header/page-header.stories.tsx +0 -428
  395. package/src/components/page-header/page-header.tsx +0 -284
  396. package/src/components/page-shell/page-shell.meta.md +0 -116
  397. package/src/components/page-shell/page-shell.stories.tsx +0 -149
  398. package/src/components/page-shell/page-shell.tsx +0 -115
  399. package/src/components/pagination/pagination.meta.md +0 -230
  400. package/src/components/pagination/pagination.stories.tsx +0 -284
  401. package/src/components/pagination/pagination.tsx +0 -567
  402. package/src/components/popconfirm/popconfirm.meta.md +0 -114
  403. package/src/components/popconfirm/popconfirm.stories.tsx +0 -75
  404. package/src/components/popconfirm/popconfirm.tsx +0 -134
  405. package/src/components/popover/popover.meta.md +0 -154
  406. package/src/components/popover/popover.stories.tsx +0 -158
  407. package/src/components/popover/popover.tsx +0 -104
  408. package/src/components/progress/progress.meta.md +0 -118
  409. package/src/components/progress/progress.stories.tsx +0 -75
  410. package/src/components/progress/progress.tsx +0 -203
  411. package/src/components/radio-group/radio-group.meta.md +0 -175
  412. package/src/components/radio-group/radio-group.stories.tsx +0 -113
  413. package/src/components/radio-group/radio-group.tsx +0 -209
  414. package/src/components/rate/rate.meta.md +0 -118
  415. package/src/components/rate/rate.stories.tsx +0 -89
  416. package/src/components/rate/rate.tsx +0 -180
  417. package/src/components/resizable/resizable.meta.md +0 -95
  418. package/src/components/resizable/resizable.stories.tsx +0 -104
  419. package/src/components/resizable/resizable.tsx +0 -56
  420. package/src/components/result/result.meta.md +0 -95
  421. package/src/components/result/result.stories.tsx +0 -67
  422. package/src/components/result/result.tsx +0 -100
  423. package/src/components/scroll-area/scroll-area.meta.md +0 -85
  424. package/src/components/scroll-area/scroll-area.stories.tsx +0 -49
  425. package/src/components/scroll-area/scroll-area.tsx +0 -51
  426. package/src/components/segmented/segmented.meta.md +0 -106
  427. package/src/components/segmented/segmented.stories.tsx +0 -130
  428. package/src/components/segmented/segmented.tsx +0 -146
  429. package/src/components/select/select.meta.md +0 -255
  430. package/src/components/select/select.stories.tsx +0 -275
  431. package/src/components/select/select.tsx +0 -735
  432. package/src/components/separator/separator.meta.md +0 -75
  433. package/src/components/separator/separator.stories.tsx +0 -71
  434. package/src/components/separator/separator.tsx +0 -100
  435. package/src/components/sheet/sheet.meta.md +0 -113
  436. package/src/components/sheet/sheet.stories.tsx +0 -188
  437. package/src/components/sheet/sheet.tsx +0 -226
  438. package/src/components/sidebar/sidebar.meta.md +0 -151
  439. package/src/components/sidebar/sidebar.tsx +0 -853
  440. package/src/components/skeleton/skeleton.meta.md +0 -94
  441. package/src/components/skeleton/skeleton.stories.tsx +0 -79
  442. package/src/components/skeleton/skeleton.tsx +0 -144
  443. package/src/components/slider/slider.meta.md +0 -146
  444. package/src/components/slider/slider.stories.tsx +0 -121
  445. package/src/components/slider/slider.tsx +0 -227
  446. package/src/components/sonner/sonner.meta.md +0 -147
  447. package/src/components/sonner/sonner.stories.tsx +0 -164
  448. package/src/components/sonner/sonner.tsx +0 -169
  449. package/src/components/spinner/spinner.meta.md +0 -125
  450. package/src/components/spinner/spinner.stories.tsx +0 -123
  451. package/src/components/spinner/spinner.tsx +0 -166
  452. package/src/components/statistic/statistic.meta.md +0 -104
  453. package/src/components/statistic/statistic.stories.tsx +0 -67
  454. package/src/components/steps/steps.meta.md +0 -116
  455. package/src/components/steps/steps.stories.tsx +0 -115
  456. package/src/components/steps/steps.tsx +0 -173
  457. package/src/components/switch/switch.meta.md +0 -138
  458. package/src/components/switch/switch.stories.tsx +0 -75
  459. package/src/components/switch/switch.tsx +0 -169
  460. package/src/components/table/table.meta.md +0 -106
  461. package/src/components/table/table.stories.tsx +0 -80
  462. package/src/components/table/table.tsx +0 -124
  463. package/src/components/tabs/tabs.meta.md +0 -111
  464. package/src/components/tabs/tabs.stories.tsx +0 -156
  465. package/src/components/tabs/tabs.tsx +0 -190
  466. package/src/components/tag/tag.meta.md +0 -159
  467. package/src/components/tag/tag.stories.tsx +0 -250
  468. package/src/components/tag/tag.tsx +0 -386
  469. package/src/components/textarea/textarea.meta.md +0 -99
  470. package/src/components/textarea/textarea.stories.tsx +0 -89
  471. package/src/components/textarea/textarea.tsx +0 -137
  472. package/src/components/time-picker/time-picker.meta.md +0 -175
  473. package/src/components/time-picker/time-picker.stories.tsx +0 -129
  474. package/src/components/time-picker/time-picker.tsx +0 -946
  475. package/src/components/timeline/timeline.meta.md +0 -110
  476. package/src/components/timeline/timeline.stories.tsx +0 -134
  477. package/src/components/timeline/timeline.tsx +0 -168
  478. package/src/components/toggle/toggle.meta.md +0 -89
  479. package/src/components/toggle/toggle.stories.tsx +0 -66
  480. package/src/components/toggle/toggle.tsx +0 -54
  481. package/src/components/toggle-group/toggle-group.meta.md +0 -91
  482. package/src/components/toggle-group/toggle-group.stories.tsx +0 -83
  483. package/src/components/toggle-group/toggle-group.tsx +0 -78
  484. package/src/components/tooltip/tooltip.meta.md +0 -149
  485. package/src/components/tooltip/tooltip.stories.tsx +0 -108
  486. package/src/components/tooltip/tooltip.tsx +0 -153
  487. package/src/components/tour/tour.meta.md +0 -121
  488. package/src/components/tour/tour.stories.tsx +0 -66
  489. package/src/components/tour/tour.tsx +0 -242
  490. package/src/components/transfer/transfer.meta.md +0 -95
  491. package/src/components/transfer/transfer.stories.tsx +0 -64
  492. package/src/components/transfer/transfer.tsx +0 -258
  493. package/src/components/tree/tree.meta.md +0 -169
  494. package/src/components/tree/tree.stories.tsx +0 -128
  495. package/src/components/tree/tree.tsx +0 -368
  496. package/src/components/tree-select/tree-select.meta.md +0 -151
  497. package/src/components/tree-select/tree-select.stories.tsx +0 -80
  498. package/src/components/tree-select/tree-select.tsx +0 -206
  499. package/src/components/typography/typography.meta.md +0 -149
  500. package/src/components/typography/typography.stories.tsx +0 -116
  501. package/src/components/typography/typography.tsx +0 -260
  502. package/src/components/upload/upload.meta.md +0 -156
  503. package/src/components/upload/upload.stories.tsx +0 -135
  504. package/src/components/upload/upload.tsx +0 -398
  505. package/src/components/watermark/watermark.meta.md +0 -100
  506. package/src/components/watermark/watermark.stories.tsx +0 -170
  507. package/src/components/watermark/watermark.tsx +0 -166
  508. package/src/hooks/use-breakpoint.ts +0 -117
  509. package/src/hooks/use-debounce-callback.ts +0 -52
  510. package/src/stories/theme-tokens.stories.tsx +0 -747
  511. package/src/utils/trigger-input.ts +0 -57
@@ -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
- };