@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,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import type { Meta, StoryObj } from '@storybook/react';
3
3
  import {
4
4
  BookOpen,
5
5
  Bot,
@@ -17,10 +17,10 @@ import {
17
17
  } from 'lucide-react';
18
18
 
19
19
  import {
20
- InputGroup,
21
- InputGroupAddon,
22
- InputGroupInput,
23
- } from '@/components/input-group/input-group';
20
+ Collapsible,
21
+ CollapsibleContent,
22
+ CollapsibleTrigger,
23
+ } from '@/components/collapsible';
24
24
 
25
25
  import {
26
26
  Sidebar,
@@ -28,6 +28,7 @@ import {
28
28
  SidebarFooter,
29
29
  SidebarGroup,
30
30
  SidebarGroupAction,
31
+ SidebarGroupContent,
31
32
  SidebarGroupLabel,
32
33
  SidebarHeader,
33
34
  SidebarInput,
@@ -45,15 +46,10 @@ import {
45
46
  SidebarRail,
46
47
  SidebarSeparator,
47
48
  SidebarTrigger,
48
- } from './sidebar';
49
- import {
50
- Collapsible,
51
- CollapsibleContent,
52
- CollapsibleTrigger,
53
- } from '@/components/collapsible/collapsible';
49
+ } from './index';
54
50
 
55
51
  const meta: Meta<typeof Sidebar> = {
56
- title: '布局 · Layout/Sidebar',
52
+ title: '导航 · Navigation/Sidebar 侧边栏',
57
53
  component: Sidebar,
58
54
  tags: ['autodocs'],
59
55
  parameters: {
@@ -61,15 +57,12 @@ const meta: Meta<typeof Sidebar> = {
61
57
  docs: {
62
58
  description: {
63
59
  component:
64
- 'Sidebarshadcn 完整版 25 primitives 复合,等价 antd Layout.Sider + Menu + 移动端 Drawer。\n\n**核心能力**:Provider(open 受控/cookie 持久化/Cmd+B 快捷键/mobile 自动切 Sheet)、`variant=sidebar|floating|inset` × `collapsible=offcanvas|icon|none`、Menu 二级(Sub)+ 徽标(Badge)+ 操作(Action)+ 骨架(Skeleton)+ Rail 拖拽收合、Input 顶部搜索、GroupAction 头部操作槽、折叠态自动 Tooltip。',
60
+ '侧边栏可折叠的应用侧边导航。支持 `variant=sidebar|floating|inset` × `collapsible=offcanvas|icon|none`、二级菜单(Sub)+ 徽标(Badge)+ 操作(Action)+ 骨架(Skeleton)+ Rail 拖拽收合、折叠态自动 Tooltip。收起 Trigger 在 Sidebar 内部。',
65
61
  },
66
62
  },
67
63
  },
68
64
  argTypes: {
69
- side: {
70
- control: 'inline-radio',
71
- options: ['left', 'right'],
72
- },
65
+ side: { control: 'inline-radio', options: ['left', 'right'] },
73
66
  variant: {
74
67
  control: 'inline-radio',
75
68
  options: ['sidebar', 'floating', 'inset'],
@@ -85,11 +78,11 @@ const meta: Meta<typeof Sidebar> = {
85
78
  export default meta;
86
79
  type Story = StoryObj<typeof Sidebar>;
87
80
 
88
- // ─── 复用数据 + 内部小工具 ──────────────────────────────────────────────────
81
+ // ─── 公共数据 ──────────────────────────────────────────────────────────────
89
82
 
90
83
  const navItems = [
91
84
  { title: '首页', url: '#home', icon: Home },
92
- { title: '收件箱', url: '#inbox', icon: Inbox, badge: 5 },
85
+ { title: '收件箱', url: '#inbox', icon: Inbox },
93
86
  { title: '团队', url: '#team', icon: Users },
94
87
  { title: '设置', url: '#settings', icon: Settings },
95
88
  ];
@@ -106,117 +99,217 @@ const favoriteItems = [
106
99
  { title: '故障排查', url: '#fav-debug' },
107
100
  ];
108
101
 
102
+ // ─── 公共主内容 ─────────────────────────────────────────────────────────────
103
+
109
104
  function MainContent({ children }: { children?: React.ReactNode }) {
110
105
  return (
111
106
  <SidebarInset>
112
107
  <header className="flex h-12 shrink-0 items-center gap-2 border-b border-border bg-background px-4">
113
- <SidebarTrigger />
114
108
  <h2 className="text-sm font-medium">主内容区</h2>
115
109
  <span className="ml-auto text-xs text-muted-foreground">
116
110
  按 ⌘ + B 切换 Sidebar
117
111
  </span>
118
112
  </header>
119
113
  <div className="flex-1 overflow-auto p-6 text-sm text-muted-foreground">
120
- {children ?? '点击左上角图标可折叠 / 展开 Sidebar。'}
114
+ {children ?? '点击 Sidebar 底部 Trigger 按钮或按 ⌘B 折叠 / 展开。'}
121
115
  </div>
122
116
  </SidebarInset>
123
117
  );
124
118
  }
125
119
 
126
- // ─── Story 1: Default — 基础导航 + 折叠 ──────────────────────────────────
120
+ // ─── Story 1: Default — 综合示例 ────────────────────────────────────────────
127
121
 
122
+ /** 综合示例 — 品牌头 + 多分组 + 二级菜单 + 徽标 + 行操作 + 用户区 + 内部 Trigger */
128
123
  export const Default: Story = {
129
- parameters: {
130
- docs: {
131
- description: {
132
- story:
133
- '基础形态:Provider + Header + Content/Group/Menu + Footer + Trigger + Inset。点击左上角 Trigger 或按 `Cmd+B` 切换折叠;`isActive` 由消费方根据路由计算传入。',
134
- },
135
- },
136
- },
137
124
  render: (args) => (
138
125
  <SidebarProvider>
139
126
  <Sidebar {...args}>
140
127
  <SidebarHeader>
141
- <h1 className="px-2 text-sm font-semibold">Teamix Evo</h1>
128
+ <div className="flex items-center gap-2 px-2 py-1.5 group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:px-0">
129
+ <div className="flex size-8 shrink-0 items-center justify-center rounded-md bg-sidebar-primary text-sidebar-primary-foreground group-data-[collapsible=icon]:hidden">
130
+ <Bot className="size-4" />
131
+ </div>
132
+ <div className="flex flex-1 flex-col leading-tight group-data-[collapsible=icon]:hidden">
133
+ <span className="truncate text-sm font-semibold">Teamix Evo</span>
134
+ <span className="truncate text-xs text-sidebar-foreground/70">
135
+ v0.4 · OpenTrek
136
+ </span>
137
+ </div>
138
+ <SidebarTrigger />
139
+ </div>
142
140
  </SidebarHeader>
141
+
143
142
  <SidebarContent>
144
143
  <SidebarGroup>
145
144
  <SidebarGroupLabel>导航</SidebarGroupLabel>
146
145
  <SidebarMenu>
147
- {navItems.map((it) => (
148
- <SidebarMenuItem key={it.title}>
149
- <SidebarMenuButton
150
- asChild
151
- tooltip={it.title}
152
- isActive={it.url === '#home'}
153
- >
154
- <a href={it.url} onClick={(e) => e.preventDefault()}>
155
- <it.icon />
156
- <span>{it.title}</span>
157
- </a>
158
- </SidebarMenuButton>
146
+ <SidebarMenuItem>
147
+ <SidebarMenuButton asChild tooltip="首页" isActive>
148
+ <a href="#home" onClick={(e) => e.preventDefault()}>
149
+ <Home />
150
+ <span>首页</span>
151
+ </a>
152
+ </SidebarMenuButton>
153
+ </SidebarMenuItem>
154
+
155
+ <Collapsible defaultOpen asChild className="group/collapsible">
156
+ <SidebarMenuItem>
157
+ <CollapsibleTrigger asChild>
158
+ <SidebarMenuButton tooltip="知识库">
159
+ <BookOpen />
160
+ <span>知识库</span>
161
+ <ChevronRight className="ml-auto transition-transform group-data-[state=open]/collapsible:rotate-90" />
162
+ </SidebarMenuButton>
163
+ </CollapsibleTrigger>
164
+ <CollapsibleContent>
165
+ <SidebarMenuSub>
166
+ {kbSubItems.map((s) => (
167
+ <SidebarMenuSubItem key={s.title}>
168
+ <SidebarMenuSubButton
169
+ href={s.url}
170
+ isActive={s.url === '#kb-team'}
171
+ onClick={(e) => e.preventDefault()}
172
+ >
173
+ <span>{s.title}</span>
174
+ </SidebarMenuSubButton>
175
+ </SidebarMenuSubItem>
176
+ ))}
177
+ </SidebarMenuSub>
178
+ </CollapsibleContent>
159
179
  </SidebarMenuItem>
160
- ))}
180
+ </Collapsible>
181
+
182
+ <SidebarMenuItem>
183
+ <SidebarMenuButton asChild tooltip="收件箱">
184
+ <a href="#inbox" onClick={(e) => e.preventDefault()}>
185
+ <Inbox />
186
+ <span>收件箱</span>
187
+ </a>
188
+ </SidebarMenuButton>
189
+ <SidebarMenuBadge>5</SidebarMenuBadge>
190
+ </SidebarMenuItem>
191
+
192
+ <SidebarMenuItem>
193
+ <SidebarMenuButton asChild tooltip="评论">
194
+ <a href="#comments" onClick={(e) => e.preventDefault()}>
195
+ <MessageSquare />
196
+ <span>评论</span>
197
+ </a>
198
+ </SidebarMenuButton>
199
+ <SidebarMenuAction
200
+ showOnHover
201
+ aria-label="评论设置"
202
+ onClick={(e) => e.preventDefault()}
203
+ >
204
+ <MoreHorizontal />
205
+ </SidebarMenuAction>
206
+ </SidebarMenuItem>
207
+ </SidebarMenu>
208
+ </SidebarGroup>
209
+
210
+ <SidebarGroup>
211
+ <SidebarGroupLabel>项目</SidebarGroupLabel>
212
+ <SidebarGroupAction
213
+ aria-label="新建项目"
214
+ onClick={(e) => e.preventDefault()}
215
+ >
216
+ <FileText />
217
+ </SidebarGroupAction>
218
+ <SidebarMenu>
219
+ <SidebarMenuItem>
220
+ <SidebarMenuButton asChild tooltip="移动端" size="sm">
221
+ <a href="#proj-1" onClick={(e) => e.preventDefault()}>
222
+ <Folder />
223
+ <span>移动端 App</span>
224
+ </a>
225
+ </SidebarMenuButton>
226
+ </SidebarMenuItem>
227
+ <SidebarMenuItem>
228
+ <SidebarMenuButton asChild tooltip="后台" size="sm">
229
+ <a href="#proj-2" onClick={(e) => e.preventDefault()}>
230
+ <Folder />
231
+ <span>管理后台</span>
232
+ </a>
233
+ </SidebarMenuButton>
234
+ </SidebarMenuItem>
161
235
  </SidebarMenu>
162
236
  </SidebarGroup>
163
237
  </SidebarContent>
238
+
164
239
  <SidebarFooter>
165
- <p className="px-2 text-xs text-muted-foreground">v0.4.0</p>
240
+ <div className="flex items-center gap-2 px-2 py-1.5 group-data-[collapsible=icon]:justify-center group-data-[collapsible=icon]:px-0">
241
+ <div className="flex size-7 shrink-0 items-center justify-center rounded-full bg-sidebar-accent text-xs font-medium text-sidebar-accent-foreground">
242
+ U
243
+ </div>
244
+ <div className="flex min-w-0 flex-1 flex-col leading-tight group-data-[collapsible=icon]:hidden">
245
+ <span className="truncate text-sm font-medium">张三</span>
246
+ <span className="truncate text-xs text-sidebar-foreground/70">
247
+ zhangsan@example.com
248
+ </span>
249
+ </div>
250
+ </div>
166
251
  </SidebarFooter>
167
252
  </Sidebar>
168
- <MainContent />
253
+
254
+ <MainContent>
255
+ <p>折叠后所有 Tooltip / Badge / SubMenu 自动收起,展开后完整呈现。</p>
256
+ <p className="mt-2">
257
+ 按{' '}
258
+ <kbd className="rounded-sm border border-border bg-muted px-1 text-xs">
259
+ ⌘B
260
+ </kbd>{' '}
261
+ 切换折叠;窗口缩小到 768px 以下自动切换为 Sheet 抽屉形态。
262
+ </p>
263
+ </MainContent>
169
264
  </SidebarProvider>
170
265
  ),
171
266
  };
172
267
 
173
- // ─── Story 2: CollapsibleIcon — 折叠态自动 Tooltip ─────────────────────────
268
+ // ─── Story 2: CollapsibleIcon — 折叠态自动 Tooltip ──────────────────────────
174
269
 
270
+ /** 折叠态 + 自动 Tooltip:默认收起,hover icon 弹出文字 */
175
271
  export const CollapsibleIcon: Story = {
176
272
  name: '折叠态 + 自动 Tooltip',
177
273
  args: { collapsible: 'icon' },
178
- parameters: {
179
- docs: {
180
- description: {
181
- story:
182
- '`collapsible="icon"` + `<SidebarMenuButton tooltip="文字" />`:折叠后只剩 icon 列(3rem),hover icon 自动弹 Tooltip 显示文字,折叠态导航不丢失语义。点击 Trigger 或 `Cmd+B` 切换折叠演示。',
183
- },
184
- },
185
- },
186
274
  render: (args) => {
187
275
  const [collapsed, setCollapsed] = React.useState(true);
188
276
  return (
189
277
  <SidebarProvider open={!collapsed} onOpenChange={(o) => setCollapsed(!o)}>
190
278
  <Sidebar {...args}>
191
279
  <SidebarHeader>
192
- <h1 className="px-2 text-sm font-semibold group-data-[collapsible=icon]:hidden">
193
- Teamix Evo
194
- </h1>
280
+ <div className="flex items-center group-data-[collapsible=icon]:justify-center">
281
+ <h1 className="flex-1 px-2 text-sm font-semibold group-data-[collapsible=icon]:hidden">
282
+ Teamix Evo
283
+ </h1>
284
+ <SidebarTrigger />
285
+ </div>
195
286
  </SidebarHeader>
196
287
  <SidebarContent>
197
288
  <SidebarGroup>
198
289
  <SidebarGroupLabel>导航</SidebarGroupLabel>
199
- <SidebarMenu>
200
- {navItems.map((it) => (
201
- <SidebarMenuItem key={it.title}>
202
- <SidebarMenuButton asChild tooltip={it.title}>
203
- <a href={it.url} onClick={(e) => e.preventDefault()}>
204
- <it.icon />
205
- <span>{it.title}</span>
206
- </a>
207
- </SidebarMenuButton>
208
- </SidebarMenuItem>
209
- ))}
210
- </SidebarMenu>
290
+ <SidebarGroupContent>
291
+ <SidebarMenu>
292
+ {navItems.map((it) => (
293
+ <SidebarMenuItem key={it.title}>
294
+ <SidebarMenuButton asChild tooltip={it.title}>
295
+ <a href={it.url} onClick={(e) => e.preventDefault()}>
296
+ <it.icon />
297
+ <span>{it.title}</span>
298
+ </a>
299
+ </SidebarMenuButton>
300
+ </SidebarMenuItem>
301
+ ))}
302
+ </SidebarMenu>
303
+ </SidebarGroupContent>
211
304
  </SidebarGroup>
212
305
  </SidebarContent>
213
306
  </Sidebar>
214
307
  <MainContent>
215
308
  <p>
216
- 当前折叠状态:<strong>{collapsed ? '已折叠' : '已展开'}</strong>
309
+ 当前折叠状态:<strong>{collapsed ? '已折叠' : '已展开'}</strong>
217
310
  </p>
218
311
  <p className="mt-2">
219
- 折叠后将鼠标 hover 到任一 icon 上,会看到 Tooltip 弹出对应文字。
312
+ 折叠后 hover 任一 icon,会看到 Tooltip 弹出对应文字。
220
313
  </p>
221
314
  </MainContent>
222
315
  </SidebarProvider>
@@ -224,23 +317,22 @@ export const CollapsibleIcon: Story = {
224
317
  },
225
318
  };
226
319
 
227
- // ─── Story 3: WithSubMenus — 二级菜单(MenuSub) ─────────────────────────────
320
+ // ─── Story 3: WithSubMenus — 二级菜单 ──────────────────────────────────────
228
321
 
322
+ /** 二级菜单:配合 Collapsible 实现展开/收起,折叠态自动隐藏 */
229
323
  export const WithSubMenus: Story = {
230
- name: '二级菜单 SubMenus',
231
- parameters: {
232
- docs: {
233
- description: {
234
- story:
235
- '`SidebarMenuSub / SubItem / SubButton` + `Collapsible` 实现二级展开收起。折叠态(`collapsible="icon"`)下二级自动隐藏。常用于知识库 / 多模块工作台。',
236
- },
237
- },
238
- },
324
+ name: '二级菜单',
325
+ args: { collapsible: 'icon' },
239
326
  render: (args) => (
240
327
  <SidebarProvider>
241
328
  <Sidebar {...args}>
242
329
  <SidebarHeader>
243
- <h1 className="px-2 text-sm font-semibold">Teamix Evo</h1>
330
+ <div className="flex items-center group-data-[collapsible=icon]:justify-center">
331
+ <h1 className="flex-1 px-2 text-sm font-semibold group-data-[collapsible=icon]:hidden">
332
+ Teamix Evo
333
+ </h1>
334
+ <SidebarTrigger />
335
+ </div>
244
336
  </SidebarHeader>
245
337
  <SidebarContent>
246
338
  <SidebarGroup>
@@ -294,29 +386,28 @@ export const WithSubMenus: Story = {
294
386
  </SidebarContent>
295
387
  </Sidebar>
296
388
  <MainContent>
297
- 知识库展开后,折叠 Sidebar 试试 — 二级菜单会自动隐藏。
389
+ 知识库展开后,折叠 Sidebar — 二级菜单会自动隐藏。
298
390
  </MainContent>
299
391
  </SidebarProvider>
300
392
  ),
301
393
  };
302
394
 
303
- // ─── Story 4: WithBadgeAndAction — 徽标 + 行操作 ─────────────────────────────
395
+ // ─── Story 4: WithBadgeAndAction — 徽标 + 行操作 ────────────────────────────
304
396
 
397
+ /** 徽标 + hover 操作:MenuBadge 显示数字,MenuAction 仅 hover 浮现 */
305
398
  export const WithBadgeAndAction: Story = {
306
399
  name: '徽标 + 行操作',
307
- parameters: {
308
- docs: {
309
- description: {
310
- story:
311
- '`SidebarMenuBadge` 展示未读数 / 状态(Tailwind tabular-nums 等宽);`SidebarMenuAction` 是行内操作槽(`showOnHover` 控制是否仅 hover 时显示)。两者位置在 MenuButton 右侧。',
312
- },
313
- },
314
- },
400
+ args: { collapsible: 'icon' },
315
401
  render: (args) => (
316
402
  <SidebarProvider>
317
403
  <Sidebar {...args}>
318
404
  <SidebarHeader>
319
- <h1 className="px-2 text-sm font-semibold">Teamix Evo</h1>
405
+ <div className="flex items-center group-data-[collapsible=icon]:justify-center">
406
+ <h1 className="flex-1 px-2 text-sm font-semibold group-data-[collapsible=icon]:hidden">
407
+ Teamix Evo
408
+ </h1>
409
+ <SidebarTrigger />
410
+ </div>
320
411
  </SidebarHeader>
321
412
  <SidebarContent>
322
413
  <SidebarGroup>
@@ -330,9 +421,9 @@ export const WithBadgeAndAction: Story = {
330
421
  <span>{it.title}</span>
331
422
  </a>
332
423
  </SidebarMenuButton>
333
- {it.badge ? (
334
- <SidebarMenuBadge>{it.badge}</SidebarMenuBadge>
335
- ) : null}
424
+ {it.title === '收件箱' && (
425
+ <SidebarMenuBadge>5</SidebarMenuBadge>
426
+ )}
336
427
  <SidebarMenuAction
337
428
  showOnHover
338
429
  aria-label="更多"
@@ -347,30 +438,28 @@ export const WithBadgeAndAction: Story = {
347
438
  </SidebarContent>
348
439
  </Sidebar>
349
440
  <MainContent>
350
- 把鼠标移到任一菜单项上右侧会浮现「⋯」操作按钮。
441
+ 鼠标移到菜单项右侧浮现「⋯」操作按钮;收件箱有未读徽标。
351
442
  </MainContent>
352
443
  </SidebarProvider>
353
444
  ),
354
445
  };
355
446
 
356
- // ─── Story 5: VariantFloating — 浮起圆角 ─────────────────────────────────────
447
+ // ─── Story 5: VariantFloating — 浮起圆角 ────────────────────────────────────
357
448
 
449
+ /** 浮起变体:Sidebar 脱离边缘,带圆角和阴影 */
358
450
  export const VariantFloating: Story = {
359
- name: 'variant=floating(浮起圆角)',
360
- args: { variant: 'floating' },
361
- parameters: {
362
- docs: {
363
- description: {
364
- story:
365
- '`variant="floating"`:Sidebar 与边缘留 8px 间距,带圆角 + 阴影 + 边框。视觉更轻盈,适合 dashboard / 营销后台。',
366
- },
367
- },
368
- },
451
+ name: '浮起变体 (floating)',
452
+ args: { variant: 'floating', collapsible: 'icon' },
369
453
  render: (args) => (
370
454
  <SidebarProvider>
371
455
  <Sidebar {...args}>
372
456
  <SidebarHeader>
373
- <h1 className="px-2 text-sm font-semibold">Teamix Evo</h1>
457
+ <div className="flex items-center group-data-[collapsible=icon]:justify-center">
458
+ <h1 className="flex-1 px-2 text-sm font-semibold group-data-[collapsible=icon]:hidden">
459
+ Teamix Evo
460
+ </h1>
461
+ <SidebarTrigger />
462
+ </div>
374
463
  </SidebarHeader>
375
464
  <SidebarContent>
376
465
  <SidebarGroup>
@@ -390,29 +479,29 @@ export const VariantFloating: Story = {
390
479
  </SidebarGroup>
391
480
  </SidebarContent>
392
481
  </Sidebar>
393
- <MainContent />
482
+ <MainContent>
483
+ variant=&quot;floating&quot; — 浮起、圆角、阴影。
484
+ </MainContent>
394
485
  </SidebarProvider>
395
486
  ),
396
487
  };
397
488
 
398
- // ─── Story 6: VariantInset — 主内容区圆角内嵌 ────────────────────────────────
489
+ // ─── Story 6: VariantInset — 内嵌圆角 ───────────────────────────────────────
399
490
 
491
+ /** 内嵌变体:主内容区圆角内缩 */
400
492
  export const VariantInset: Story = {
401
- name: 'variant=inset(主区圆角)',
402
- args: { variant: 'inset' },
403
- parameters: {
404
- docs: {
405
- description: {
406
- story:
407
- '`variant="inset"`:主内容区 SidebarInset 加圆角 + 阴影 + 留白,Sidebar 退到背景。视觉上"内容卡片化",适合内容密集的工作台。',
408
- },
409
- },
410
- },
493
+ name: '内嵌变体 (inset)',
494
+ args: { variant: 'inset', collapsible: 'icon' },
411
495
  render: (args) => (
412
496
  <SidebarProvider>
413
497
  <Sidebar {...args}>
414
498
  <SidebarHeader>
415
- <h1 className="px-2 text-sm font-semibold">Teamix Evo</h1>
499
+ <div className="flex items-center group-data-[collapsible=icon]:justify-center">
500
+ <h1 className="flex-1 px-2 text-sm font-semibold group-data-[collapsible=icon]:hidden">
501
+ Teamix Evo
502
+ </h1>
503
+ <SidebarTrigger />
504
+ </div>
416
505
  </SidebarHeader>
417
506
  <SidebarContent>
418
507
  <SidebarGroup>
@@ -432,28 +521,29 @@ export const VariantInset: Story = {
432
521
  </SidebarGroup>
433
522
  </SidebarContent>
434
523
  </Sidebar>
435
- <MainContent />
524
+ <MainContent>
525
+ variant=&quot;inset&quot; — 主内容区域圆角内嵌。
526
+ </MainContent>
436
527
  </SidebarProvider>
437
528
  ),
438
529
  };
439
530
 
440
- // ─── Story 7: WithRail — 拖拽收合区 ──────────────────────────────────────────
531
+ // ─── Story 7: WithRail — 拖拽收合 ───────────────────────────────────────────
441
532
 
533
+ /** Rail 拖拽收合:Sidebar 右边缘 hover 出线条,点击切换 */
442
534
  export const WithRail: Story = {
443
535
  name: 'Rail 拖拽收合',
444
- parameters: {
445
- docs: {
446
- description: {
447
- story:
448
- '`SidebarRail` 替代显式 Trigger 按钮 — 在 Sidebar 右边缘提供窄拖拽区,点击/双击触发折叠。`<SidebarRail />` 放在 `<Sidebar>` 内任意位置即可。',
449
- },
450
- },
451
- },
536
+ args: { collapsible: 'icon' },
452
537
  render: (args) => (
453
538
  <SidebarProvider>
454
539
  <Sidebar {...args}>
455
540
  <SidebarHeader>
456
- <h1 className="px-2 text-sm font-semibold">Teamix Evo</h1>
541
+ <div className="flex items-center group-data-[collapsible=icon]:justify-center">
542
+ <h1 className="flex-1 px-2 text-sm font-semibold group-data-[collapsible=icon]:hidden">
543
+ Teamix Evo
544
+ </h1>
545
+ <SidebarTrigger />
546
+ </div>
457
547
  </SidebarHeader>
458
548
  <SidebarContent>
459
549
  <SidebarGroup>
@@ -475,39 +565,29 @@ export const WithRail: Story = {
475
565
  <SidebarRail />
476
566
  </Sidebar>
477
567
  <MainContent>
478
- 把鼠标移到 Sidebar 右边缘 — 会出现窄拖拽柄,点击切换折叠。
568
+ 鼠标移到 Sidebar 右边缘 — 出现窄拖拽柄,点击切换折叠。
479
569
  </MainContent>
480
570
  </SidebarProvider>
481
571
  ),
482
572
  };
483
573
 
484
- // ─── Story 8: WithInputAndGroupAction — 顶部搜索 + 分组操作 ──────────────────
574
+ // ─── Story 8: WithInputAndGroupAction — 搜索 + 分组操作 ─────────────────────
485
575
 
576
+ /** 搜索输入 + 分组操作:SidebarInput + GroupAction */
486
577
  export const WithInputAndGroupAction: Story = {
487
- name: '顶部搜索 + 分组操作',
488
- parameters: {
489
- docs: {
490
- description: {
491
- story:
492
- '`SidebarInput` 提供顶部搜索框(常配合 cmdk 做命令面板触发);`SidebarGroupAction` 是分组头右侧操作槽(添加 / 编辑 / 设置)。两者组合常见于"项目列表"等需要管理的分组。',
493
- },
494
- },
495
- },
578
+ name: '搜索 + 分组操作',
579
+ args: { collapsible: 'icon' },
496
580
  render: (args) => (
497
581
  <SidebarProvider>
498
582
  <Sidebar {...args}>
499
583
  <SidebarHeader>
500
- <div className="flex items-center gap-2 px-2 py-1.5">
501
- <h1 className="text-sm font-semibold">Teamix Evo</h1>
502
- </div>
503
- <div className="px-2 pb-1">
504
- <InputGroup>
505
- <InputGroupAddon position="before" variant="icon">
506
- <Search className="size-4" />
507
- </InputGroupAddon>
508
- <InputGroupInput placeholder="搜索…" />
509
- </InputGroup>
584
+ <div className="flex items-center group-data-[collapsible=icon]:justify-center">
585
+ <h1 className="flex-1 px-2 text-sm font-semibold group-data-[collapsible=icon]:hidden">
586
+ Teamix Evo
587
+ </h1>
588
+ <SidebarTrigger />
510
589
  </div>
590
+ <SidebarInput placeholder="搜索…" />
511
591
  </SidebarHeader>
512
592
  <SidebarContent>
513
593
  <SidebarGroup>
@@ -551,32 +631,33 @@ export const WithInputAndGroupAction: Story = {
551
631
  </SidebarGroup>
552
632
  </SidebarContent>
553
633
  </Sidebar>
554
- <MainContent>顶部 Input 搜索 + 收藏分组头部「⋯」管理操作。</MainContent>
634
+ <MainContent>
635
+ 顶部 SidebarInput 搜索 + 收藏分组头部「⋯」管理操作。
636
+ </MainContent>
555
637
  </SidebarProvider>
556
638
  ),
557
639
  };
558
640
 
559
- // ─── Story 9: LoadingSkeleton — 异步加载占位 ─────────────────────────────────
641
+ // ─── Story 9: LoadingSkeleton — 加载骨架 ────────────────────────────────────
560
642
 
643
+ /** 加载骨架:异步数据 ready 前的占位 */
561
644
  export const LoadingSkeleton: Story = {
562
- name: '加载骨架 MenuSkeleton',
563
- parameters: {
564
- docs: {
565
- description: {
566
- story:
567
- '`SidebarMenuSkeleton` 用于异步导航的占位 — 自带随机宽度变化避免视觉死板,`showIcon` 控制是否显示左侧 icon 骨架。',
568
- },
569
- },
570
- },
645
+ name: '加载骨架',
646
+ args: { collapsible: 'icon' },
571
647
  render: (args) => (
572
648
  <SidebarProvider>
573
649
  <Sidebar {...args}>
574
650
  <SidebarHeader>
575
- <h1 className="px-2 text-sm font-semibold">Teamix Evo</h1>
651
+ <div className="flex items-center group-data-[collapsible=icon]:justify-center">
652
+ <h1 className="flex-1 px-2 text-sm font-semibold group-data-[collapsible=icon]:hidden">
653
+ Teamix Evo
654
+ </h1>
655
+ <SidebarTrigger />
656
+ </div>
576
657
  </SidebarHeader>
577
658
  <SidebarContent>
578
659
  <SidebarGroup>
579
- <SidebarGroupLabel>导航(加载中)</SidebarGroupLabel>
660
+ <SidebarGroupLabel>导航(加载中)</SidebarGroupLabel>
580
661
  <SidebarMenu>
581
662
  {Array.from({ length: 5 }).map((_, i) => (
582
663
  <SidebarMenuItem key={i}>
@@ -587,168 +668,7 @@ export const LoadingSkeleton: Story = {
587
668
  </SidebarGroup>
588
669
  </SidebarContent>
589
670
  </Sidebar>
590
- <MainContent>
591
- 真实业务里这层骨架会在数据 ready 后切换为 Menu。
592
- </MainContent>
593
- </SidebarProvider>
594
- ),
595
- };
596
-
597
- // ─── Story 10: FullStack — 综合演示(品牌头 + 多分组 + 二级 + 徽标 + 用户区) ───
598
-
599
- export const FullStack: Story = {
600
- name: '综合 — 品牌头 + 多分组 + 二级 + 徽标 + 用户区',
601
- args: { collapsible: 'icon' },
602
- parameters: {
603
- docs: {
604
- description: {
605
- story:
606
- '把 Header(品牌)+ 多 Group(导航 / KB 二级 / 收藏)+ Badge / Action + Footer(用户区)拼起来,接近真实后台 layout。注意所有需要在折叠态保留语义的菜单项都传了 `tooltip` prop。',
607
- },
608
- },
609
- },
610
- render: (args) => (
611
- <SidebarProvider>
612
- <Sidebar {...args}>
613
- <SidebarHeader>
614
- <div className="flex items-center gap-2 px-2 py-1.5">
615
- <div className="flex size-8 shrink-0 items-center justify-center rounded-md bg-sidebar-primary text-sidebar-primary-foreground">
616
- <Bot className="size-4" />
617
- </div>
618
- <div className="flex flex-1 flex-col leading-tight group-data-[collapsible=icon]:hidden">
619
- <span className="truncate text-sm font-semibold">Teamix Evo</span>
620
- <span className="truncate text-xs text-sidebar-foreground/70">
621
- v0.4 · OpenTrek
622
- </span>
623
- </div>
624
- </div>
625
- </SidebarHeader>
626
-
627
- <SidebarContent>
628
- <SidebarGroup>
629
- <SidebarGroupLabel>导航</SidebarGroupLabel>
630
- <SidebarMenu>
631
- <SidebarMenuItem>
632
- <SidebarMenuButton asChild tooltip="首页" isActive>
633
- <a href="#home" onClick={(e) => e.preventDefault()}>
634
- <Home />
635
- <span>首页</span>
636
- </a>
637
- </SidebarMenuButton>
638
- </SidebarMenuItem>
639
-
640
- <Collapsible defaultOpen asChild className="group/collapsible">
641
- <SidebarMenuItem>
642
- <CollapsibleTrigger asChild>
643
- <SidebarMenuButton tooltip="知识库">
644
- <BookOpen />
645
- <span>知识库</span>
646
- <ChevronRight className="ml-auto transition-transform group-data-[state=open]/collapsible:rotate-90" />
647
- </SidebarMenuButton>
648
- </CollapsibleTrigger>
649
- <CollapsibleContent>
650
- <SidebarMenuSub>
651
- {kbSubItems.map((s) => (
652
- <SidebarMenuSubItem key={s.title}>
653
- <SidebarMenuSubButton
654
- href={s.url}
655
- isActive={s.url === '#kb-team'}
656
- onClick={(e) => e.preventDefault()}
657
- >
658
- <span>{s.title}</span>
659
- </SidebarMenuSubButton>
660
- </SidebarMenuSubItem>
661
- ))}
662
- </SidebarMenuSub>
663
- </CollapsibleContent>
664
- </SidebarMenuItem>
665
- </Collapsible>
666
-
667
- <SidebarMenuItem>
668
- <SidebarMenuButton asChild tooltip="收件箱">
669
- <a href="#inbox" onClick={(e) => e.preventDefault()}>
670
- <Inbox />
671
- <span>收件箱</span>
672
- </a>
673
- </SidebarMenuButton>
674
- <SidebarMenuBadge>5</SidebarMenuBadge>
675
- </SidebarMenuItem>
676
-
677
- <SidebarMenuItem>
678
- <SidebarMenuButton asChild tooltip="评论">
679
- <a href="#comments" onClick={(e) => e.preventDefault()}>
680
- <MessageSquare />
681
- <span>评论</span>
682
- </a>
683
- </SidebarMenuButton>
684
- <SidebarMenuAction
685
- showOnHover
686
- aria-label="评论设置"
687
- onClick={(e) => e.preventDefault()}
688
- >
689
- <MoreHorizontal />
690
- </SidebarMenuAction>
691
- </SidebarMenuItem>
692
- </SidebarMenu>
693
- </SidebarGroup>
694
-
695
- <SidebarGroup>
696
- <SidebarGroupLabel>项目</SidebarGroupLabel>
697
- <SidebarGroupAction
698
- aria-label="新建项目"
699
- onClick={(e) => e.preventDefault()}
700
- >
701
- <FileText />
702
- </SidebarGroupAction>
703
- <SidebarMenu>
704
- <SidebarMenuItem>
705
- <SidebarMenuButton asChild tooltip="移动端" size="sm">
706
- <a href="#proj-1" onClick={(e) => e.preventDefault()}>
707
- <Folder />
708
- <span>移动端 App</span>
709
- </a>
710
- </SidebarMenuButton>
711
- </SidebarMenuItem>
712
- <SidebarMenuItem>
713
- <SidebarMenuButton asChild tooltip="后台" size="sm">
714
- <a href="#proj-2" onClick={(e) => e.preventDefault()}>
715
- <Folder />
716
- <span>管理后台</span>
717
- </a>
718
- </SidebarMenuButton>
719
- </SidebarMenuItem>
720
- </SidebarMenu>
721
- </SidebarGroup>
722
- </SidebarContent>
723
-
724
- <SidebarFooter>
725
- <div className="flex items-center gap-2 px-2 py-1.5">
726
- <div className="flex size-7 shrink-0 items-center justify-center rounded-full bg-sidebar-accent text-xs font-medium text-sidebar-accent-foreground">
727
- U
728
- </div>
729
- <div className="flex min-w-0 flex-1 flex-col leading-tight group-data-[collapsible=icon]:hidden">
730
- <span className="truncate text-sm font-medium">张三</span>
731
- <span className="truncate text-xs text-sidebar-foreground/70">
732
- zhangsan@example.com
733
- </span>
734
- </div>
735
- </div>
736
- </SidebarFooter>
737
- </Sidebar>
738
-
739
- <MainContent>
740
- <p>
741
- 真实工作台合成:折叠后所有 Tooltip / Badge / SubMenu
742
- 自动收起,展开后完整呈现。
743
- </p>
744
- <p className="mt-2">
745
- 按{' '}
746
- <kbd className="rounded-sm border border-border bg-muted px-1 text-xxs">
747
- ⌘B
748
- </kbd>{' '}
749
- 切换折叠;窗口缩小到 768px 以下会自动切换为 Sheet 抽屉形态。
750
- </p>
751
- </MainContent>
671
+ <MainContent>真实业务中骨架会在数据 ready 后切换为 Menu。</MainContent>
752
672
  </SidebarProvider>
753
673
  ),
754
674
  };