@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
@@ -0,0 +1,290 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { Boxes, BookOpen, Cloud, Layers, List, LayoutGrid } from 'lucide-react';
3
+ import {
4
+ PageHeader,
5
+ PageHeaderNav,
6
+ PageHeaderContent,
7
+ PageHeaderHeading,
8
+ PageHeaderTitle,
9
+ PageHeaderDescription,
10
+ PageHeaderActions,
11
+ PageHeaderFooter,
12
+ } from './index';
13
+ import {
14
+ Breadcrumb,
15
+ BreadcrumbList,
16
+ BreadcrumbItem,
17
+ BreadcrumbLink,
18
+ BreadcrumbSeparator,
19
+ BreadcrumbPage,
20
+ } from '@/components/breadcrumb';
21
+ import { Button } from '@/components/button';
22
+ import { Tag } from '@/components/tag';
23
+ import { Statistic } from '@/components/statistic';
24
+ import {
25
+ Descriptions,
26
+ DescriptionsContent,
27
+ DescriptionsItem,
28
+ DescriptionsLabel,
29
+ } from '@/components/descriptions';
30
+ import { ToggleGroup, ToggleGroupItem } from '@/components/toggle-group';
31
+ import { Separator } from '@/components/separator';
32
+
33
+ const meta: Meta<typeof PageHeader> = {
34
+ title: '导航 · Navigation/PageHeader 页头',
35
+ component: PageHeader,
36
+ tags: ['autodocs'],
37
+ };
38
+ export default meta;
39
+
40
+ type Story = StoryObj<typeof meta>;
41
+
42
+ /** 完整版页头:面包屑 + 帮助链接 + 返回 + 主图标 + 标题(含 ⓘ) + 描述 + 多操作 + 底部信息。 */
43
+ export const Default: Story = {
44
+ render: () => (
45
+ <PageHeader>
46
+ <PageHeaderNav>
47
+ <Breadcrumb>
48
+ <BreadcrumbList>
49
+ <BreadcrumbItem>
50
+ <BreadcrumbLink href="#">首页</BreadcrumbLink>
51
+ </BreadcrumbItem>
52
+ <BreadcrumbSeparator />
53
+ <BreadcrumbItem>
54
+ <BreadcrumbLink href="#">实例列表</BreadcrumbLink>
55
+ </BreadcrumbItem>
56
+ <BreadcrumbSeparator />
57
+ <BreadcrumbItem>
58
+ <BreadcrumbPage>实例详情</BreadcrumbPage>
59
+ </BreadcrumbItem>
60
+ </BreadcrumbList>
61
+ </Breadcrumb>
62
+ <div className="flex items-center gap-4">
63
+ <a
64
+ href="#"
65
+ className="inline-flex items-center gap-1 text-muted-foreground hover:text-foreground"
66
+ >
67
+ <BookOpen className="size-3.5" aria-hidden="true" />
68
+ 帮助文档
69
+ </a>
70
+ <a href="#" className="text-muted-foreground hover:text-foreground">
71
+ 切换实例
72
+ </a>
73
+ </div>
74
+ </PageHeaderNav>
75
+ <PageHeaderContent>
76
+ <div className="flex flex-col">
77
+ <PageHeaderHeading goBack onBack={() => alert('返回')}>
78
+ <span
79
+ aria-hidden="true"
80
+ className="flex size-8 shrink-0 items-center justify-center rounded-md bg-primary text-primary-foreground"
81
+ >
82
+ <Boxes className="size-5" />
83
+ </span>
84
+ <PageHeaderTitle tooltip="该实例为生产环境,建议谨慎操作。">
85
+ 页面标题
86
+ </PageHeaderTitle>
87
+ <Tag variant="solid" color="success" size="lg">
88
+ 标签一
89
+ </Tag>
90
+ <Tag variant="solid" color="primary" size="lg">
91
+ 标签二
92
+ </Tag>
93
+ <Tag variant="solid" color="destructive" size="lg">
94
+ 标签三
95
+ </Tag>
96
+ </PageHeaderHeading>
97
+ <PageHeaderDescription>
98
+ 页面描述页面描述页面描述页面描述页面描述页面描述页面描述
99
+ </PageHeaderDescription>
100
+ </div>
101
+ <PageHeaderActions>
102
+ <Button variant="outline">普通按钮</Button>
103
+ <Button>主要按钮</Button>
104
+ </PageHeaderActions>
105
+ </PageHeaderContent>
106
+ </PageHeader>
107
+ ),
108
+ };
109
+
110
+ /** 带数据概览:右侧使用 Statistic 组件展示 KPI 指标。 */
111
+ export const WithStatistic: Story = {
112
+ render: () => (
113
+ <PageHeader>
114
+ <PageHeaderContent>
115
+ <div className="flex flex-col">
116
+ <PageHeaderHeading>
117
+ <PageHeaderTitle>页面标题</PageHeaderTitle>
118
+ </PageHeaderHeading>
119
+ <PageHeaderDescription>
120
+ 页面描述页面描述页面描述页面描述页面描述页面描述页面描述
121
+ </PageHeaderDescription>
122
+ </div>
123
+ <div className="flex items-center gap-6">
124
+ <Statistic title="总数" value={456} valueClassName="text-base" />
125
+ <Statistic title="运行中" value={324} valueClassName="text-base" />
126
+ <Statistic title="已暂停" value={46} valueClassName="text-base" />
127
+ <Statistic
128
+ title="停止"
129
+ value={14}
130
+ valueClassName="text-base text-destructive"
131
+ />
132
+ <Statistic title="回收站" value={8} valueClassName="text-base" />
133
+ </div>
134
+ </PageHeaderContent>
135
+ </PageHeader>
136
+ ),
137
+ };
138
+
139
+ /** 带描述列表:底部使用 Descriptions 组件展示项目详细信息。 */
140
+ export const WithDescriptions: Story = {
141
+ render: () => (
142
+ <PageHeader>
143
+ <PageHeaderContent>
144
+ <div className="flex flex-col">
145
+ <PageHeaderHeading>
146
+ <PageHeaderTitle>项目详情</PageHeaderTitle>
147
+ </PageHeaderHeading>
148
+ <PageHeaderDescription>
149
+ 查看项目完整信息与最新状态。
150
+ </PageHeaderDescription>
151
+ </div>
152
+ <PageHeaderActions>
153
+ <Button variant="outline">普通按钮</Button>
154
+ <Button>主要按钮</Button>
155
+ </PageHeaderActions>
156
+ </PageHeaderContent>
157
+ <PageHeaderFooter>
158
+ <Descriptions column={3}>
159
+ <DescriptionsItem>
160
+ <DescriptionsLabel>项目名称</DescriptionsLabel>
161
+ <DescriptionsContent>Teamix Evo</DescriptionsContent>
162
+ </DescriptionsItem>
163
+ <DescriptionsItem>
164
+ <DescriptionsLabel>负责人</DescriptionsLabel>
165
+ <DescriptionsContent>张三</DescriptionsContent>
166
+ </DescriptionsItem>
167
+ <DescriptionsItem>
168
+ <DescriptionsLabel>状态</DescriptionsLabel>
169
+ <DescriptionsContent>进行中</DescriptionsContent>
170
+ </DescriptionsItem>
171
+ <DescriptionsItem>
172
+ <DescriptionsLabel>创建时间</DescriptionsLabel>
173
+ <DescriptionsContent>2024-01-01</DescriptionsContent>
174
+ </DescriptionsItem>
175
+ <DescriptionsItem>
176
+ <DescriptionsLabel>更新时间</DescriptionsLabel>
177
+ <DescriptionsContent>2024-06-01</DescriptionsContent>
178
+ </DescriptionsItem>
179
+ <DescriptionsItem>
180
+ <DescriptionsLabel>描述</DescriptionsLabel>
181
+ <DescriptionsContent>面向 AI Coding 的研发套件</DescriptionsContent>
182
+ </DescriptionsItem>
183
+ </Descriptions>
184
+ </PageHeaderFooter>
185
+ </PageHeader>
186
+ ),
187
+ };
188
+
189
+ /** 带视图切换:标题旁使用 ToggleGroup 切换视图模式。 */
190
+ export const WithViewToggle: Story = {
191
+ render: () => (
192
+ <PageHeader>
193
+ <PageHeaderNav>
194
+ <Breadcrumb>
195
+ <BreadcrumbList>
196
+ <BreadcrumbItem>
197
+ <BreadcrumbLink href="#">首页</BreadcrumbLink>
198
+ </BreadcrumbItem>
199
+ <BreadcrumbSeparator />
200
+ <BreadcrumbItem>
201
+ <BreadcrumbLink href="#">二级标题</BreadcrumbLink>
202
+ </BreadcrumbItem>
203
+ <BreadcrumbSeparator />
204
+ <BreadcrumbItem>
205
+ <BreadcrumbLink href="#">三级标题</BreadcrumbLink>
206
+ </BreadcrumbItem>
207
+ <BreadcrumbSeparator />
208
+ <BreadcrumbItem>
209
+ <BreadcrumbPage>当前</BreadcrumbPage>
210
+ </BreadcrumbItem>
211
+ </BreadcrumbList>
212
+ </Breadcrumb>
213
+ </PageHeaderNav>
214
+ <PageHeaderContent>
215
+ <PageHeaderHeading goBack onBack={() => alert('返回')}>
216
+ <PageHeaderTitle>页面标题</PageHeaderTitle>
217
+ <ToggleGroup type="single" defaultValue="list" spacing={0}>
218
+ <ToggleGroupItem value="card" aria-label="卡片视图">
219
+ <Layers className="size-4" />
220
+ </ToggleGroupItem>
221
+ <ToggleGroupItem value="list" aria-label="列表视图">
222
+ <List className="size-4" />
223
+ </ToggleGroupItem>
224
+ <ToggleGroupItem value="grid" aria-label="网格视图">
225
+ <LayoutGrid className="size-4" />
226
+ </ToggleGroupItem>
227
+ </ToggleGroup>
228
+ </PageHeaderHeading>
229
+ </PageHeaderContent>
230
+ </PageHeader>
231
+ ),
232
+ };
233
+
234
+ /** 右侧装饰图版本:无操作按钮,右侧用 lucide icon(Cloud)放大 + 半透明作背景插画。 */
235
+ export const WithBackgroundIllustration: Story = {
236
+ render: () => (
237
+ <PageHeader>
238
+ <Cloud
239
+ aria-hidden="true"
240
+ className="pointer-events-none absolute top-0 right-0 size-24 text-primary/10"
241
+ />
242
+ <PageHeaderNav>
243
+ <Breadcrumb>
244
+ <BreadcrumbList>
245
+ <BreadcrumbItem>
246
+ <BreadcrumbLink href="#">首页</BreadcrumbLink>
247
+ </BreadcrumbItem>
248
+ <BreadcrumbSeparator />
249
+ <BreadcrumbItem>
250
+ <BreadcrumbPage>云服务概览</BreadcrumbPage>
251
+ </BreadcrumbItem>
252
+ </BreadcrumbList>
253
+ </Breadcrumb>
254
+ </PageHeaderNav>
255
+ <PageHeaderContent>
256
+ <div className="flex flex-col">
257
+ <PageHeaderHeading>
258
+ <span
259
+ aria-hidden="true"
260
+ className="flex size-8 shrink-0 items-center justify-center rounded-md bg-primary text-primary-foreground"
261
+ >
262
+ <Boxes className="size-5" />
263
+ </span>
264
+ <PageHeaderTitle>云服务概览</PageHeaderTitle>
265
+ </PageHeaderHeading>
266
+ <PageHeaderDescription>
267
+ 管理您的云资源、查看实例运行状态与计费明细。
268
+ </PageHeaderDescription>
269
+ </div>
270
+ </PageHeaderContent>
271
+ </PageHeader>
272
+ ),
273
+ };
274
+
275
+ /** 带返回按钮的详情页头。 */
276
+ export const WithGoBack: Story = {
277
+ render: () => (
278
+ <PageHeader>
279
+ <PageHeaderContent>
280
+ <PageHeaderHeading goBack onBack={() => alert('返回')}>
281
+ <PageHeaderTitle>详情页标题</PageHeaderTitle>
282
+ </PageHeaderHeading>
283
+ <PageHeaderActions>
284
+ <Button>操作</Button>
285
+ </PageHeaderActions>
286
+ </PageHeaderContent>
287
+ <PageHeaderDescription>补充描述信息。</PageHeaderDescription>
288
+ </PageHeader>
289
+ ),
290
+ };
@@ -0,0 +1,119 @@
1
+ /**
2
+ * 页面骨架 PageShell
3
+ *
4
+ * 页面级布局壳,组合 header + sidebar + 主区三个 slot,
5
+ * 覆盖全屏、仅顶部、仅左导、顶部+左导四种页面形态。
6
+ *
7
+ * @when
8
+ * - 搭建应用级页面布局(管理后台、控制台)
9
+ * - 需要 header + sidebar + content 三栏组合
10
+ * - 需要可切换的页面背景色
11
+ *
12
+ * 组合结构:PageShell > header(slot) + sidebar(slot) + children
13
+ */
14
+ 'use client';
15
+
16
+ import * as React from 'react';
17
+
18
+ import { cn } from '@/lib/utils';
19
+ import { SidebarInset, SidebarProvider } from '@/components/sidebar';
20
+
21
+ export type PageShellBackground =
22
+ | 'background'
23
+ | 'muted'
24
+ | 'card'
25
+ | 'sidebar'
26
+ | 'accent';
27
+
28
+ const BG_CLASS: Record<PageShellBackground, string> = {
29
+ background: 'bg-background',
30
+ muted: 'bg-muted',
31
+ card: 'bg-card',
32
+ sidebar: 'bg-sidebar',
33
+ accent: 'bg-accent',
34
+ };
35
+
36
+ export interface PageShellProps extends React.ComponentProps<'div'> {
37
+ /** 顶部条 slot — 通常是 Navbar / TopBar,不传则不渲染顶部 */
38
+ header?: React.ReactNode;
39
+ /** 左侧 slot — 通常是 Sidebar 组件,不传则不渲染侧边栏 */
40
+ sidebar?: React.ReactNode;
41
+ /** 主区内容 */
42
+ children: React.ReactNode;
43
+ /**
44
+ * 主区背景,走 shadcn 语义槽枚举
45
+ * @default "background"
46
+ */
47
+ background?: PageShellBackground;
48
+ /**
49
+ * sidebar 宽度,透传 SidebarProvider 的 --sidebar-width
50
+ * @default "14rem"
51
+ */
52
+ sidebarWidth?: string;
53
+ }
54
+
55
+ function PageShell({
56
+ header,
57
+ sidebar,
58
+ children,
59
+ background = 'background',
60
+ sidebarWidth = '14rem',
61
+ className,
62
+ style,
63
+ ...props
64
+ }: PageShellProps) {
65
+ const bgClass = BG_CLASS[background];
66
+
67
+ if (!sidebar) {
68
+ return (
69
+ <div
70
+ data-slot="page-shell"
71
+ className={cn('flex min-h-svh w-full flex-col', className)}
72
+ style={style}
73
+ {...props}
74
+ >
75
+ {header}
76
+ <main
77
+ data-slot="page-shell-content"
78
+ className={cn('flex-1 overflow-y-auto', bgClass)}
79
+ >
80
+ {children}
81
+ </main>
82
+ </div>
83
+ );
84
+ }
85
+
86
+ return (
87
+ <SidebarProvider
88
+ data-slot="page-shell"
89
+ // SidebarProvider 默认 wrapper 是 `flex min-h-svh`(row);
90
+ // PageShell 需要 column 排列(header 在上,sidebar+主区在下),故 `!flex-col` 覆盖。
91
+ // 高度策略:保留 SidebarProvider 默认 `min-h-svh` 让 wrapper 真实页面下撑满 viewport,
92
+ // 这样 OpPageContainer 等内嵌容器的 `flex-1` 链路能拿到稳定高度全高渲染。
93
+ // 受限容器(如 storybook `LayoutSandbox`)通过外级注入 `min-height: 0; height: 100%` 重置。
94
+ // 说明:传入的 sidebar 如果是默认 collapsible="offcanvas",其内部使用 `position: fixed`、
95
+ // 高度 100svh,适用于全屏页面;在受限容器中需使用 `collapsible="none"` 退出 fixed 布局。
96
+ className={cn('!flex-col', className)}
97
+ style={
98
+ {
99
+ '--sidebar-width': sidebarWidth,
100
+ ...style,
101
+ } as React.CSSProperties
102
+ }
103
+ {...props}
104
+ >
105
+ {header}
106
+ <div className="flex w-full flex-1 min-h-0">
107
+ {sidebar}
108
+ <SidebarInset
109
+ data-slot="page-shell-content"
110
+ className={cn('!min-h-0 overflow-y-auto', bgClass)}
111
+ >
112
+ {children}
113
+ </SidebarInset>
114
+ </div>
115
+ </SidebarProvider>
116
+ );
117
+ }
118
+
119
+ export { PageShell };
@@ -0,0 +1,115 @@
1
+ # PageShell
2
+
3
+ > 本文件由 `pnpm gen:meta` 自动生成,**请勿手动编辑**。
4
+
5
+ ## 描述
6
+
7
+ 页面骨架 PageShell
8
+ 页面级布局壳,组合 header + sidebar + 主区三个 slot,
9
+ 覆盖全屏、仅顶部、仅左导、顶部+左导四种页面形态。
10
+
11
+ ## 使用场景
12
+
13
+ - 搭建应用级页面布局(管理后台、控制台)
14
+ - 需要 header + sidebar + content 三栏组合
15
+ - 需要可切换的页面背景色
16
+ - 组合结构:PageShell > header(slot) + sidebar(slot) + children
17
+
18
+ ## Props
19
+
20
+ | 名称 | 类型 | 默认值 | 必填 | 说明 |
21
+ | --- | --- | --- | --- | --- |
22
+ | `header` | `React.ReactNode` | – | – | 顶部条 slot — 通常是 Navbar / TopBar,不传则不渲染顶部 |
23
+ | `sidebar` | `React.ReactNode` | – | – | 左侧 slot — 通常是 Sidebar 组件,不传则不渲染侧边栏 |
24
+ | `children` | `React.ReactNode` | – | ✓ | 主区内容 |
25
+ | `background` | `PageShellBackground` | `"background"` | – | 主区背景,走 shadcn 语义槽枚举 |
26
+ | `sidebarWidth` | `string` | `"14rem"` | – | sidebar 宽度,透传 SidebarProvider 的 --sidebar-width |
27
+
28
+ ## 示例
29
+
30
+ ### HeaderOnly
31
+
32
+ 仅顶部条 + 主区。
33
+
34
+ ```tsx
35
+ <PageShell
36
+ header={
37
+ <div className="flex h-12 items-center border-b border-border px-4">
38
+ <span className="text-xs text-muted-foreground">Header</span>
39
+ </div>
40
+ }
41
+ className="h-64 rounded-md border border-border"
42
+ >
43
+ <div className="p-4">
44
+ <span className="text-xs text-muted-foreground">主区内容</span>
45
+ </div>
46
+ </PageShell>
47
+ ```
48
+
49
+ ### Fullscreen
50
+
51
+ 全屏模式(无 header 无 sidebar)。
52
+
53
+ ```tsx
54
+ <PageShell className="h-64 rounded-md border border-border">
55
+ <div className="flex h-full items-center justify-center">
56
+ <span className="text-xs text-muted-foreground">全屏内容</span>
57
+ </div>
58
+ </PageShell>
59
+ ```
60
+
61
+ ### MutedBackground
62
+
63
+ 使用 muted 背景色。
64
+
65
+ ```tsx
66
+ <PageShell
67
+ background="muted"
68
+ header={
69
+ <div className="flex h-12 items-center border-b border-border bg-background px-4">
70
+ <span className="text-xs text-muted-foreground">Header</span>
71
+ </div>
72
+ }
73
+ className="h-64 rounded-md border border-border"
74
+ >
75
+ <div className="p-4">
76
+ <span className="text-xs text-muted-foreground">muted 背景主区</span>
77
+ </div>
78
+ </PageShell>
79
+ ```
80
+
81
+ ### WithSidebar
82
+
83
+ 带左侧 Sidebar 的页面骨架。 Storybook 受限容器内使用 `collapsible="none"` 的内联 Sidebar; 真实业务页面建议用全屏布局 + 默认 offcanvas 折叠形态。
84
+
85
+ ```tsx
86
+ <PageShell
87
+ sidebar={<SidebarNav />}
88
+ className="h-96 rounded-md border border-border overflow-hidden"
89
+ >
90
+ <div className="p-4">
91
+ <span className="text-xs text-muted-foreground">主区内容</span>
92
+ </div>
93
+ </PageShell>
94
+ ```
95
+
96
+ ### HeaderWithSidebar
97
+
98
+ 顶部 Header + 左侧 Sidebar 的组合形态。
99
+
100
+ ```tsx
101
+ <PageShell
102
+ header={
103
+ <div className="flex h-12 shrink-0 items-center border-b border-border bg-background px-4">
104
+ <span className="text-xs text-muted-foreground">Header</span>
105
+ </div>
106
+ }
107
+ sidebar={<SidebarNav />}
108
+ background="muted"
109
+ className="h-96 rounded-md border border-border overflow-hidden"
110
+ >
111
+ <div className="p-4">
112
+ <span className="text-xs text-muted-foreground">主区内容</span>
113
+ </div>
114
+ </PageShell>
115
+ ```
@@ -0,0 +1,154 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import {
3
+ HomeIcon,
4
+ InboxIcon,
5
+ CalendarIcon,
6
+ SearchIcon,
7
+ SettingsIcon,
8
+ } from 'lucide-react';
9
+ import {
10
+ Sidebar,
11
+ SidebarContent,
12
+ SidebarGroup,
13
+ SidebarGroupContent,
14
+ SidebarGroupLabel,
15
+ SidebarHeader,
16
+ SidebarMenu,
17
+ SidebarMenuButton,
18
+ SidebarMenuItem,
19
+ } from '@/components/sidebar';
20
+ import { PageShell } from './index';
21
+
22
+ const meta: Meta<typeof PageShell> = {
23
+ title: '布局 · Layout/PageShell 页面骨架',
24
+ component: PageShell,
25
+ tags: ['autodocs'],
26
+ };
27
+ export default meta;
28
+
29
+ type Story = StoryObj<typeof meta>;
30
+
31
+ /** 仅顶部条 + 主区。 */
32
+ export const HeaderOnly: Story = {
33
+ render: () => (
34
+ <PageShell
35
+ header={
36
+ <div className="flex h-12 items-center border-b border-border px-4">
37
+ <span className="text-xs text-muted-foreground">Header</span>
38
+ </div>
39
+ }
40
+ className="h-64 rounded-md border border-border"
41
+ >
42
+ <div className="p-4">
43
+ <span className="text-xs text-muted-foreground">主区内容</span>
44
+ </div>
45
+ </PageShell>
46
+ ),
47
+ };
48
+
49
+ /** 全屏模式(无 header 无 sidebar)。 */
50
+ export const Fullscreen: Story = {
51
+ render: () => (
52
+ <PageShell className="h-64 rounded-md border border-border">
53
+ <div className="flex h-full items-center justify-center">
54
+ <span className="text-xs text-muted-foreground">全屏内容</span>
55
+ </div>
56
+ </PageShell>
57
+ ),
58
+ };
59
+
60
+ /** 使用 muted 背景色。 */
61
+ export const MutedBackground: Story = {
62
+ render: () => (
63
+ <PageShell
64
+ background="muted"
65
+ header={
66
+ <div className="flex h-12 items-center border-b border-border bg-background px-4">
67
+ <span className="text-xs text-muted-foreground">Header</span>
68
+ </div>
69
+ }
70
+ className="h-64 rounded-md border border-border"
71
+ >
72
+ <div className="p-4">
73
+ <span className="text-xs text-muted-foreground">muted 背景主区</span>
74
+ </div>
75
+ </PageShell>
76
+ ),
77
+ };
78
+
79
+ const navItems = [
80
+ { title: '首页', icon: HomeIcon },
81
+ { title: '收件箱', icon: InboxIcon },
82
+ { title: '日历', icon: CalendarIcon },
83
+ { title: '搜索', icon: SearchIcon },
84
+ { title: '设置', icon: SettingsIcon },
85
+ ];
86
+
87
+ function SidebarNav() {
88
+ return (
89
+ <Sidebar
90
+ collapsible="none"
91
+ className="h-full border-r border-sidebar-border"
92
+ >
93
+ <SidebarHeader>
94
+ <span className="px-2 text-sm font-medium">应用名称</span>
95
+ </SidebarHeader>
96
+ <SidebarContent>
97
+ <SidebarGroup>
98
+ <SidebarGroupLabel>导航</SidebarGroupLabel>
99
+ <SidebarGroupContent>
100
+ <SidebarMenu>
101
+ {navItems.map((item) => (
102
+ <SidebarMenuItem key={item.title}>
103
+ <SidebarMenuButton>
104
+ <item.icon />
105
+ <span>{item.title}</span>
106
+ </SidebarMenuButton>
107
+ </SidebarMenuItem>
108
+ ))}
109
+ </SidebarMenu>
110
+ </SidebarGroupContent>
111
+ </SidebarGroup>
112
+ </SidebarContent>
113
+ </Sidebar>
114
+ );
115
+ }
116
+
117
+ /**
118
+ * 带左侧 Sidebar 的页面骨架。
119
+ *
120
+ * Storybook 受限容器内使用 `collapsible="none"` 的内联 Sidebar;
121
+ * 真实业务页面建议用全屏布局 + 默认 offcanvas 折叠形态。
122
+ */
123
+ export const WithSidebar: Story = {
124
+ render: () => (
125
+ <PageShell
126
+ sidebar={<SidebarNav />}
127
+ className="h-96 rounded-md border border-border overflow-hidden"
128
+ >
129
+ <div className="p-4">
130
+ <span className="text-xs text-muted-foreground">主区内容</span>
131
+ </div>
132
+ </PageShell>
133
+ ),
134
+ };
135
+
136
+ /** 顶部 Header + 左侧 Sidebar 的组合形态。 */
137
+ export const HeaderWithSidebar: Story = {
138
+ render: () => (
139
+ <PageShell
140
+ header={
141
+ <div className="flex h-12 shrink-0 items-center border-b border-border bg-background px-4">
142
+ <span className="text-xs text-muted-foreground">Header</span>
143
+ </div>
144
+ }
145
+ sidebar={<SidebarNav />}
146
+ background="muted"
147
+ className="h-96 rounded-md border border-border overflow-hidden"
148
+ >
149
+ <div className="p-4">
150
+ <span className="text-xs text-muted-foreground">主区内容</span>
151
+ </div>
152
+ </PageShell>
153
+ ),
154
+ };