@justanarthur/modo-ui 0.5.0 → 0.6.0-canary.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 (461) hide show
  1. package/DESIGN.md +608 -0
  2. package/README.md +61 -39
  3. package/blocks/sidebar-app/examples.mdx +33 -0
  4. package/blocks/sidebar-app/index.tsx +218 -0
  5. package/blocks/sidebar-app/inset-topbar.tsx +25 -0
  6. package/blocks/sidebar-app/menu-grid.ts +26 -0
  7. package/blocks/sidebar-app/nav-data.ts +36 -0
  8. package/blocks/sidebar-app/search-field.tsx +48 -0
  9. package/blocks/sidebar-app/user-footer.tsx +67 -0
  10. package/blocks/sidebar-app/workspace-header.tsx +129 -0
  11. package/components/AI/input-message/examples.mdx +124 -0
  12. package/components/AI/input-message/file-thumbnail.tsx +173 -0
  13. package/components/AI/input-message/index.tsx +1383 -0
  14. package/components/AI/thinking-indicator/examples.mdx +27 -0
  15. package/components/AI/thinking-indicator/index.tsx +210 -0
  16. package/components/accordion/examples.mdx +148 -0
  17. package/components/accordion/index.tsx +1034 -0
  18. package/components/avatar/examples.mdx +95 -0
  19. package/components/avatar/index.tsx +129 -0
  20. package/components/badge/change-demo.tsx +29 -0
  21. package/components/badge/examples.mdx +120 -0
  22. package/components/badge/index.tsx +225 -0
  23. package/components/badge/variants.ts +73 -0
  24. package/components/button/examples.mdx +164 -0
  25. package/components/button/index.tsx +416 -0
  26. package/components/button/loading-demo.tsx +25 -0
  27. package/components/button/variants.ts +166 -0
  28. package/components/card/examples.mdx +212 -0
  29. package/components/card/index.tsx +1037 -0
  30. package/components/copy/examples.mdx +87 -0
  31. package/components/copy/index.tsx +482 -0
  32. package/components/inputs/checkbox/examples.mdx +83 -0
  33. package/components/inputs/checkbox/index.tsx +611 -0
  34. package/components/inputs/checkbox/select-all-demo.tsx +48 -0
  35. package/components/inputs/color-picker/examples.mdx +72 -0
  36. package/components/inputs/color-picker/index.tsx +1955 -0
  37. package/components/inputs/color-picker/variants.ts +401 -0
  38. package/components/inputs/combobox/examples.mdx +273 -0
  39. package/components/inputs/combobox/index.tsx +1436 -0
  40. package/components/inputs/combobox/remote-demo.tsx +101 -0
  41. package/components/inputs/date-time/calendar/examples.mdx +34 -0
  42. package/components/inputs/date-time/calendar/index.tsx +351 -0
  43. package/components/inputs/date-time/calendar/use-month-window.ts +163 -0
  44. package/components/inputs/date-time/date-picker/examples.mdx +166 -0
  45. package/components/inputs/date-time/date-picker/index.tsx +385 -0
  46. package/components/inputs/date-time/date-picker/masked-date-input.tsx +336 -0
  47. package/components/inputs/date-time/date-range-picker/examples.mdx +29 -0
  48. package/components/inputs/date-time/date-range-picker/index.tsx +217 -0
  49. package/components/inputs/date-time/duration-picker/examples.mdx +16 -0
  50. package/components/inputs/date-time/duration-picker/index.tsx +189 -0
  51. package/components/inputs/date-time/month-picker/examples.mdx +16 -0
  52. package/components/inputs/date-time/month-picker/index.tsx +190 -0
  53. package/components/inputs/date-time/picker-shell.tsx +395 -0
  54. package/components/inputs/date-time/time-columns.tsx +91 -0
  55. package/components/inputs/date-time/time-picker/examples.mdx +26 -0
  56. package/components/inputs/date-time/time-picker/index.tsx +166 -0
  57. package/components/inputs/field/examples.mdx +113 -0
  58. package/components/inputs/field/index.tsx +267 -0
  59. package/components/inputs/file-dropzone/examples.mdx +73 -0
  60. package/components/inputs/file-dropzone/file-row.tsx +201 -0
  61. package/components/inputs/file-dropzone/index.tsx +296 -0
  62. package/components/inputs/file-dropzone/upload-demo.tsx +67 -0
  63. package/components/inputs/file-dropzone/variants.ts +94 -0
  64. package/components/inputs/input/examples.mdx +135 -0
  65. package/components/inputs/input/index.tsx +494 -0
  66. package/components/inputs/input/password-demo.tsx +30 -0
  67. package/components/inputs/label/examples.mdx +67 -0
  68. package/components/inputs/label/index.tsx +85 -0
  69. package/components/inputs/number-input/examples.mdx +56 -0
  70. package/components/inputs/number-input/index.tsx +214 -0
  71. package/components/inputs/radio/examples.mdx +77 -0
  72. package/components/inputs/radio/index.tsx +636 -0
  73. package/components/inputs/search/examples.mdx +74 -0
  74. package/components/inputs/search/index.tsx +333 -0
  75. package/components/inputs/select/examples.mdx +218 -0
  76. package/components/inputs/select/index.tsx +862 -0
  77. package/components/inputs/select/variants.ts +32 -0
  78. package/components/inputs/slider/examples.mdx +127 -0
  79. package/components/inputs/slider/index.tsx +1725 -0
  80. package/components/inputs/switch/examples.mdx +94 -0
  81. package/components/inputs/switch/index.tsx +504 -0
  82. package/components/inputs/textarea/examples.mdx +88 -0
  83. package/components/inputs/textarea/index.tsx +161 -0
  84. package/components/navigation/navigation-menu/examples.mdx +109 -0
  85. package/components/navigation/navigation-menu/index.tsx +613 -0
  86. package/components/navigation/pagination/examples.mdx +64 -0
  87. package/components/navigation/pagination/index.tsx +395 -0
  88. package/components/navigation/sidebar/examples.mdx +319 -0
  89. package/components/navigation/sidebar/index.tsx +453 -0
  90. package/components/navigation/sidebar/sidebar-core.tsx +1408 -0
  91. package/components/navigation/sidebar/sidebar-menu.tsx +1495 -0
  92. package/components/navigation/sidebar/sidebar.css +74 -0
  93. package/components/navigation/sidebar/variants.ts +55 -0
  94. package/components/navigation/tabs/examples.mdx +89 -0
  95. package/components/navigation/tabs/index.tsx +494 -0
  96. package/components/navigation/tabs-subtle/examples.mdx +49 -0
  97. package/components/navigation/tabs-subtle/index.tsx +512 -0
  98. package/components/overlays/alert-dialog/examples.mdx +123 -0
  99. package/components/overlays/alert-dialog/index.tsx +258 -0
  100. package/components/overlays/alert-dialog/pending-demo.tsx +36 -0
  101. package/components/overlays/command/examples.mdx +113 -0
  102. package/components/overlays/command/index.tsx +416 -0
  103. package/components/overlays/context-menu/examples.mdx +56 -0
  104. package/components/overlays/context-menu/index.tsx +279 -0
  105. package/components/overlays/dialog/examples.mdx +144 -0
  106. package/components/overlays/dialog/index.tsx +366 -0
  107. package/components/overlays/dropdown/dropdown-search.tsx +395 -0
  108. package/components/overlays/dropdown/examples.mdx +294 -0
  109. package/components/overlays/dropdown/index.tsx +1168 -0
  110. package/components/overlays/dropdown/menu-item.tsx +464 -0
  111. package/components/overlays/dropdown/menu-parts.tsx +660 -0
  112. package/components/overlays/popover/anchored-demo.tsx +59 -0
  113. package/components/overlays/popover/examples.mdx +180 -0
  114. package/components/overlays/popover/index.tsx +315 -0
  115. package/components/overlays/preview-card/examples.mdx +61 -0
  116. package/components/overlays/preview-card/index.tsx +204 -0
  117. package/components/overlays/sheet/examples.mdx +89 -0
  118. package/components/overlays/sheet/index.tsx +247 -0
  119. package/components/overlays/toast/examples.mdx +68 -0
  120. package/components/overlays/toast/global-demo.tsx +72 -0
  121. package/components/overlays/toast/index.tsx +474 -0
  122. package/components/overlays/toast/manager.ts +193 -0
  123. package/components/overlays/tooltip/examples.mdx +106 -0
  124. package/components/overlays/tooltip/index.tsx +519 -0
  125. package/components/progress/examples.mdx +59 -0
  126. package/components/progress/index.tsx +174 -0
  127. package/components/progress/progress.css +49 -0
  128. package/components/progress/step-demo.tsx +27 -0
  129. package/components/table/examples.mdx +184 -0
  130. package/components/table/index.tsx +510 -0
  131. package/components/table/sort-demo.tsx +61 -0
  132. package/dist/base.css +100 -0
  133. package/dist/blocks/sidebar-app/index.js +39 -26
  134. package/dist/components/AI/input-message/index.js +22 -16
  135. package/dist/components/AI/thinking-indicator/index.js +9 -6
  136. package/dist/components/accordion/index.js +16 -13
  137. package/dist/components/avatar/index.d.ts +46 -0
  138. package/dist/components/avatar/index.js +18 -0
  139. package/dist/components/badge/index.d.ts +18 -11
  140. package/dist/components/badge/index.js +11 -7
  141. package/dist/components/badge/variants.d.ts +33 -0
  142. package/dist/components/badge/variants.js +10 -0
  143. package/dist/components/button/index.d.ts +53 -17
  144. package/dist/components/button/index.js +10 -6
  145. package/dist/components/button/variants.d.ts +39 -0
  146. package/dist/components/button/variants.js +8 -0
  147. package/dist/components/card/index.d.ts +16 -3
  148. package/dist/components/card/index.js +16 -11
  149. package/dist/components/copy/index.js +13 -9
  150. package/dist/components/inputs/checkbox/index.d.ts +28 -9
  151. package/dist/components/inputs/checkbox/index.js +17 -13
  152. package/dist/components/inputs/color-picker/index.d.ts +13 -13
  153. package/dist/components/inputs/color-picker/index.js +25 -18
  154. package/dist/components/inputs/color-picker/variants.d.ts +61 -0
  155. package/dist/components/inputs/color-picker/variants.js +28 -0
  156. package/dist/components/inputs/combobox/index.d.ts +60 -17
  157. package/dist/components/inputs/combobox/index.js +26 -18
  158. package/dist/components/inputs/date-time/calendar/index.js +14 -11
  159. package/dist/components/inputs/date-time/date-picker/index.d.ts +53 -11
  160. package/dist/components/inputs/date-time/date-picker/index.js +33 -25
  161. package/dist/components/inputs/date-time/date-range-picker/index.d.ts +3 -3
  162. package/dist/components/inputs/date-time/date-range-picker/index.js +32 -24
  163. package/dist/components/inputs/date-time/duration-picker/index.d.ts +3 -3
  164. package/dist/components/inputs/date-time/duration-picker/index.js +32 -24
  165. package/dist/components/inputs/date-time/month-picker/index.d.ts +3 -3
  166. package/dist/components/inputs/date-time/month-picker/index.js +31 -23
  167. package/dist/components/inputs/date-time/time-picker/index.d.ts +3 -3
  168. package/dist/components/inputs/date-time/time-picker/index.js +32 -24
  169. package/dist/components/inputs/field/index.d.ts +116 -0
  170. package/dist/components/inputs/field/index.js +28 -0
  171. package/dist/components/inputs/file-dropzone/index.d.ts +165 -0
  172. package/dist/components/inputs/file-dropzone/index.js +32 -0
  173. package/dist/components/inputs/file-dropzone/variants.d.ts +35 -0
  174. package/dist/components/inputs/file-dropzone/variants.js +12 -0
  175. package/dist/components/inputs/input/index.d.ts +95 -13
  176. package/dist/components/inputs/input/index.js +17 -9
  177. package/dist/components/inputs/label/index.d.ts +32 -0
  178. package/dist/components/inputs/label/index.js +11 -0
  179. package/dist/components/inputs/number-input/index.d.ts +84 -0
  180. package/dist/components/inputs/number-input/index.js +20 -0
  181. package/dist/components/inputs/radio/index.d.ts +20 -5
  182. package/dist/components/inputs/radio/index.js +15 -12
  183. package/dist/components/inputs/search/index.js +25 -18
  184. package/dist/components/inputs/select/index.d.ts +41 -11
  185. package/dist/components/inputs/select/index.js +27 -14
  186. package/dist/components/inputs/select/variants.d.ts +5 -0
  187. package/dist/components/inputs/select/variants.js +6 -0
  188. package/dist/components/inputs/slider/index.js +7 -5
  189. package/dist/components/inputs/switch/index.d.ts +8 -2
  190. package/dist/components/inputs/switch/index.js +14 -12
  191. package/dist/components/inputs/textarea/index.d.ts +4 -0
  192. package/dist/components/inputs/textarea/index.js +8 -6
  193. package/dist/components/navigation/navigation-menu/index.d.ts +114 -0
  194. package/dist/components/navigation/navigation-menu/index.js +40 -0
  195. package/dist/components/navigation/pagination/index.d.ts +73 -0
  196. package/dist/components/navigation/pagination/index.js +39 -0
  197. package/dist/components/navigation/sidebar/index.d.ts +44 -21
  198. package/dist/components/navigation/sidebar/index.js +41 -31
  199. package/dist/components/navigation/sidebar/variants.d.ts +25 -0
  200. package/dist/components/navigation/sidebar/variants.js +28 -0
  201. package/dist/components/navigation/tabs/index.d.ts +8 -2
  202. package/dist/components/navigation/tabs/index.js +14 -10
  203. package/dist/components/navigation/tabs-subtle/index.js +12 -10
  204. package/dist/components/overlays/alert-dialog/index.d.ts +121 -15
  205. package/dist/components/overlays/alert-dialog/index.js +22 -13
  206. package/dist/components/overlays/command/index.js +24 -17
  207. package/dist/components/overlays/context-menu/index.d.ts +33 -17
  208. package/dist/components/overlays/context-menu/index.js +27 -18
  209. package/dist/components/overlays/dialog/index.js +17 -12
  210. package/dist/components/overlays/dropdown/index.d.ts +257 -31
  211. package/dist/components/overlays/dropdown/index.js +42 -17
  212. package/dist/components/overlays/popover/index.d.ts +31 -9
  213. package/dist/components/overlays/popover/index.js +12 -9
  214. package/dist/components/overlays/preview-card/index.js +11 -8
  215. package/dist/components/overlays/sheet/index.js +18 -13
  216. package/dist/components/overlays/toast/index.d.ts +123 -47
  217. package/dist/components/overlays/toast/index.js +18 -10
  218. package/dist/components/overlays/tooltip/index.d.ts +113 -21
  219. package/dist/components/overlays/tooltip/index.js +15 -6
  220. package/dist/components/progress/index.d.ts +56 -0
  221. package/dist/components/progress/index.js +15 -0
  222. package/dist/components/table/index.d.ts +63 -8
  223. package/dist/components/table/index.js +19 -9
  224. package/dist/index.d.ts +2201 -736
  225. package/dist/index.js +223 -82
  226. package/dist/lib/date-locale.d.ts +14 -0
  227. package/dist/lib/date-locale.js +16 -0
  228. package/dist/lib/field-classes.d.ts +144 -0
  229. package/dist/lib/field-classes.js +40 -0
  230. package/dist/lib/field-variants.d.ts +47 -0
  231. package/dist/lib/field-variants.js +26 -0
  232. package/dist/lib/fluid-hover-highlight.d.ts +112 -0
  233. package/dist/lib/fluid-hover-highlight.js +17 -0
  234. package/dist/lib/focus-ring.d.ts +18 -0
  235. package/dist/lib/focus-ring.js +10 -0
  236. package/dist/lib/goo-indicator.d.ts +46 -0
  237. package/dist/lib/goo-indicator.js +14 -0
  238. package/dist/lib/icon-context.d.ts +30 -0
  239. package/dist/lib/icon-context.js +12 -0
  240. package/dist/lib/inert.d.ts +9 -0
  241. package/dist/lib/inert.js +8 -0
  242. package/dist/lib/morph-layers.d.ts +93 -0
  243. package/dist/lib/morph-layers.js +13 -0
  244. package/dist/lib/morph-part.d.ts +21 -0
  245. package/dist/lib/morph-part.js +12 -0
  246. package/dist/lib/popup.d.ts +20 -0
  247. package/dist/lib/popup.js +12 -0
  248. package/dist/lib/reduced-motion.d.ts +9 -0
  249. package/dist/lib/reduced-motion.js +6 -0
  250. package/dist/lib/row-index.d.ts +10 -0
  251. package/dist/lib/row-index.js +8 -0
  252. package/dist/lib/row-order.d.ts +28 -0
  253. package/dist/lib/row-order.js +10 -0
  254. package/dist/lib/scroll-column.d.ts +27 -0
  255. package/dist/lib/scroll-column.js +18 -0
  256. package/dist/lib/shape-context.d.ts +30 -0
  257. package/dist/lib/shape-context.js +12 -0
  258. package/dist/lib/size-context.d.ts +94 -0
  259. package/dist/lib/size-context.js +20 -0
  260. package/dist/lib/size-scale.d.ts +79 -0
  261. package/dist/lib/size-scale.js +8 -0
  262. package/dist/lib/slot.d.ts +12 -0
  263. package/dist/lib/slot.js +6 -0
  264. package/dist/lib/springs.d.ts +44 -0
  265. package/dist/lib/springs.js +8 -0
  266. package/dist/lib/surface-classes.d.ts +19 -0
  267. package/dist/lib/surface-classes.js +10 -0
  268. package/dist/lib/surface-context.d.ts +9 -0
  269. package/dist/lib/surface-context.js +8 -0
  270. package/dist/lib/use-controllable-state.d.ts +2 -0
  271. package/dist/lib/use-controllable-state.js +6 -0
  272. package/dist/lib/use-fluid-hover.d.ts +138 -0
  273. package/dist/lib/use-fluid-hover.js +14 -0
  274. package/dist/lib/use-is-mobile.d.ts +2 -0
  275. package/dist/lib/use-is-mobile.js +6 -0
  276. package/dist/lib/use-keyboard-nav-gate.d.ts +20 -0
  277. package/dist/lib/use-keyboard-nav-gate.js +7 -0
  278. package/dist/lib/use-merge-split.d.ts +47 -0
  279. package/dist/lib/use-merge-split.js +15 -0
  280. package/dist/lib/use-morph.d.ts +101 -0
  281. package/dist/lib/use-morph.js +20 -0
  282. package/dist/lib/use-touch-primary.d.ts +2 -0
  283. package/dist/lib/use-touch-primary.js +6 -0
  284. package/dist/lib/utils.d.ts +3 -0
  285. package/dist/lib/utils.js +6 -0
  286. package/dist/preset.d.ts +17 -0
  287. package/dist/preset.js +22 -2
  288. package/dist/primitives/code/index.js +7 -5
  289. package/dist/primitives/craft/index.js +9 -6
  290. package/dist/primitives/fluid-hover/index.js +9 -8
  291. package/dist/primitives/morph/index.js +15 -10
  292. package/dist/primitives/motion/index.js +10 -8
  293. package/dist/primitives/scroll-area/index.js +4 -3
  294. package/dist/primitives/separator/index.d.ts +25 -0
  295. package/dist/primitives/separator/index.js +9 -0
  296. package/dist/primitives/sizes/index.js +6 -4
  297. package/dist/primitives/skeleton/index.d.ts +35 -0
  298. package/dist/primitives/skeleton/index.js +12 -0
  299. package/dist/primitives/surface/index.js +6 -4
  300. package/dist/shared/{components-3mkepka5.js → components-0jmqhx2k.js} +28 -25
  301. package/dist/shared/components-124epb7f.js +53 -0
  302. package/dist/shared/{components-gz8zf3ec.js → components-1k0wv53d.js} +15 -43
  303. package/dist/shared/components-26snnbs9.js +322 -0
  304. package/dist/shared/{components-2dxkv6zm.js → components-2c0qcfx4.js} +8 -7
  305. package/dist/shared/{components-473g814w.js → components-2mt9te6d.js} +243 -137
  306. package/dist/shared/{components-hawvy2qz.js → components-2z48g4fp.js} +9 -30
  307. package/dist/shared/components-34txk9rj.js +35 -0
  308. package/dist/shared/components-3h92d94m.js +23 -0
  309. package/dist/shared/{components-zfnmn5d4.js → components-3sp623ae.js} +36 -31
  310. package/dist/shared/{components-jwst3vtj.js → components-3wxkjgqn.js} +186 -76
  311. package/dist/shared/{components-s2bz1xpk.js → components-49bsynbw.js} +8 -5
  312. package/dist/shared/components-4bwsd46w.js +71 -0
  313. package/dist/shared/components-4n4f5m3e.js +297 -0
  314. package/dist/shared/{components-0q0sqfh4.js → components-4y816hwp.js} +27 -49
  315. package/dist/shared/components-52ngsgca.js +399 -0
  316. package/dist/shared/{components-y9y0g8er.js → components-52r5763g.js} +22 -19
  317. package/dist/shared/components-559tf7yb.js +28 -0
  318. package/dist/shared/components-5mkga9hj.js +440 -0
  319. package/dist/shared/{components-kwa6mrf9.js → components-5s0nfqvw.js} +14 -9
  320. package/dist/shared/{components-dk0gjr5a.js → components-60atskhp.js} +19 -18
  321. package/dist/shared/{components-rr7a6ja9.js → components-658b26nb.js} +21 -18
  322. package/dist/shared/{components-xxvdw7k1.js → components-65vwfjs6.js} +37 -34
  323. package/dist/shared/{components-frw34b65.js → components-6j2fh74k.js} +114 -123
  324. package/dist/shared/components-6zg1yft7.js +167 -0
  325. package/dist/shared/components-6zng858q.js +53 -0
  326. package/dist/shared/components-72w4ge68.js +64 -0
  327. package/dist/shared/{components-cv16mryv.js → components-78x40gee.js} +13 -7
  328. package/dist/shared/{components-b2wyq2cq.js → components-7d4r7hh1.js} +39 -57
  329. package/dist/shared/components-7ntvvegr.js +316 -0
  330. package/dist/shared/components-8nwsqjn8.js +34 -0
  331. package/dist/shared/{components-5xc2j8jz.js → components-8tt3xbb5.js} +19 -18
  332. package/dist/shared/{components-vc7vq5nz.js → components-9as3rf68.js} +6 -3
  333. package/dist/shared/components-9mys9jna.js +255 -0
  334. package/dist/shared/components-adkarj8n.js +35 -0
  335. package/dist/shared/{components-b3c5et5b.js → components-ae9fncz4.js} +32 -31
  336. package/dist/shared/{components-hqeq3w9q.js → components-awra5sff.js} +24 -16
  337. package/dist/shared/components-b1e239g3.js +28 -0
  338. package/dist/shared/{components-q5xj5c16.js → components-b1f2bjf1.js} +9 -8
  339. package/dist/shared/{components-qmmjx1qw.js → components-bn42vq6d.js} +71 -72
  340. package/dist/shared/components-c96g82th.js +1444 -0
  341. package/dist/shared/components-c9yr4ed1.js +44 -0
  342. package/dist/shared/components-d3shbwqq.js +95 -0
  343. package/dist/shared/{components-jjw69c4c.js → components-dcc02hs2.js} +7 -4
  344. package/dist/shared/{components-men63rwj.js → components-de99ykt7.js} +3 -2
  345. package/dist/shared/components-dhgk6mbt.js +16 -0
  346. package/dist/shared/components-drxrtnp2.js +25 -0
  347. package/dist/shared/{components-6p8tfcd6.js → components-ds9fqat9.js} +21 -18
  348. package/dist/shared/{components-mjthm1kf.js → components-egy4tyjt.js} +11 -8
  349. package/dist/shared/components-f0xfpkhh.js +82 -0
  350. package/dist/shared/components-f7h57m6t.js +59 -0
  351. package/dist/shared/{components-d6xtjht3.js → components-fjkpbg6n.js} +33 -30
  352. package/dist/shared/{components-gc5vtq2f.js → components-gh0qeey3.js} +63 -29
  353. package/dist/shared/{components-39jq9va1.js → components-gvbapfen.js} +29 -24
  354. package/dist/shared/{components-5vgpnxgy.js → components-gzesg7hy.js} +19 -16
  355. package/dist/shared/components-h6p86be3.js +19 -0
  356. package/dist/shared/components-h83az0bz.js +33 -0
  357. package/dist/shared/components-jjrj6ymn.js +104 -0
  358. package/dist/shared/{components-wvp1m52g.js → components-jp5v0m0f.js} +15 -14
  359. package/dist/shared/{components-zrkzcayz.js → components-jqpefjsn.js} +54 -6
  360. package/dist/shared/{components-1z6tdadk.js → components-k74j4hwh.js} +20 -17
  361. package/dist/shared/components-kswxnm3h.js +24 -0
  362. package/dist/shared/{components-jbbmdr74.js → components-mkkbbgb7.js} +36 -17
  363. package/dist/shared/{components-pbmqctfa.js → components-mpw667rb.js} +169 -65
  364. package/dist/shared/{components-s5ngg32c.js → components-paa08427.js} +121 -47
  365. package/dist/shared/{components-vfbhxf5r.js → components-pd42emw3.js} +6 -5
  366. package/dist/shared/{components-hw9yk32z.js → components-pmfszv7a.js} +35 -23
  367. package/dist/shared/{components-chacnk61.js → components-pw06rbxq.js} +19 -19
  368. package/dist/shared/components-q03cktx8.js +246 -0
  369. package/dist/shared/{components-kvr7f9hy.js → components-qdm3yh26.js} +19 -10
  370. package/dist/shared/{components-27nnvrwe.js → components-qs4rkqsj.js} +15 -14
  371. package/dist/shared/{components-s083f38z.js → components-r6gbmkew.js} +22 -21
  372. package/dist/shared/{components-ta7shw28.js → components-r8eqs7gz.js} +4 -4
  373. package/dist/shared/{components-sn1rxx1d.js → components-rm02h9nt.js} +12 -11
  374. package/dist/shared/{components-c6s6b43g.js → components-rrbpmfx4.js} +3 -2
  375. package/dist/shared/{components-n7mjr357.js → components-tz1fv35x.js} +3 -2
  376. package/dist/shared/components-tz4gaf1v.js +23 -0
  377. package/dist/shared/{components-zx6b6yby.js → components-vf45j12c.js} +4 -18
  378. package/dist/shared/{components-3ky44908.js → components-vfjc9jzz.js} +2 -3
  379. package/dist/shared/{components-39vmfq9s.js → components-vsa625vk.js} +21 -20
  380. package/dist/shared/components-wawnmkph.js +500 -0
  381. package/dist/shared/components-wktrrb4m.js +38 -0
  382. package/dist/shared/{components-8snj490h.js → components-wwd363me.js} +78 -32
  383. package/dist/shared/{components-5pnw8183.js → components-xcwvgcrd.js} +23 -22
  384. package/dist/shared/components-xdqmt6ed.js +20 -0
  385. package/dist/shared/{components-h2ajmhwn.js → components-y1w3a6wx.js} +107 -35
  386. package/dist/shared/{components-ar66gnt0.js → components-y6578b8h.js} +37 -34
  387. package/dist/shared/{components-59efxjd9.js → components-yhgq0qxx.js} +13 -12
  388. package/dist/shared/{components-jthe1pwb.js → components-yz84gpkq.js} +101 -404
  389. package/dist/shared/components-z3v0n0de.js +11 -0
  390. package/dist/shared/{components-7r3etddy.js → components-z9n19fyk.js} +19 -54
  391. package/dist/shared/components-zbvjzh1p.js +141 -0
  392. package/dist/styles.css +241 -16
  393. package/dist/tailwind.css +13 -0
  394. package/dist/tokens.css +34 -0
  395. package/index.ts +60 -0
  396. package/lib/date-locale.ts +50 -0
  397. package/lib/field-classes.ts +115 -0
  398. package/lib/field-variants.ts +117 -0
  399. package/lib/fluid-hover-highlight.tsx +139 -0
  400. package/lib/focus-ring.tsx +46 -0
  401. package/lib/goo-indicator.tsx +261 -0
  402. package/lib/icon-context.tsx +310 -0
  403. package/lib/inert.ts +22 -0
  404. package/lib/morph-layers.tsx +102 -0
  405. package/lib/morph-part.tsx +49 -0
  406. package/lib/popup.ts +52 -0
  407. package/lib/reduced-motion.ts +19 -0
  408. package/lib/row-index.tsx +29 -0
  409. package/lib/row-order.tsx +115 -0
  410. package/lib/scroll-column.tsx +244 -0
  411. package/lib/shape-context.tsx +124 -0
  412. package/lib/size-context.tsx +66 -0
  413. package/lib/size-scale.ts +115 -0
  414. package/lib/slot.ts +25 -0
  415. package/lib/springs.ts +62 -0
  416. package/lib/surface-classes.ts +58 -0
  417. package/lib/surface-context.tsx +21 -0
  418. package/lib/use-controllable-state.ts +44 -0
  419. package/lib/use-fluid-hover.ts +541 -0
  420. package/lib/use-is-mobile.ts +25 -0
  421. package/lib/use-keyboard-nav-gate.ts +45 -0
  422. package/lib/use-merge-split.tsx +209 -0
  423. package/lib/use-morph.ts +557 -0
  424. package/lib/use-touch-primary.tsx +43 -0
  425. package/lib/utils.ts +37 -0
  426. package/package.json +177 -4
  427. package/preset.ts +196 -0
  428. package/primitives/code/examples.mdx +27 -0
  429. package/primitives/code/index.tsx +80 -0
  430. package/primitives/craft/demos.tsx +173 -0
  431. package/primitives/craft/examples.mdx +138 -0
  432. package/primitives/craft/index.tsx +76 -0
  433. package/primitives/fluid-hover/examples.mdx +84 -0
  434. package/primitives/fluid-hover/index.tsx +316 -0
  435. package/primitives/morph/examples.mdx +135 -0
  436. package/primitives/morph/index.tsx +192 -0
  437. package/primitives/motion/examples.mdx +100 -0
  438. package/primitives/motion/index.tsx +160 -0
  439. package/primitives/scroll-area/examples.mdx +58 -0
  440. package/primitives/scroll-area/index.tsx +200 -0
  441. package/primitives/separator/examples.mdx +30 -0
  442. package/primitives/separator/index.tsx +53 -0
  443. package/primitives/sizes/examples.mdx +167 -0
  444. package/primitives/sizes/index.tsx +89 -0
  445. package/primitives/skeleton/examples.mdx +51 -0
  446. package/primitives/skeleton/index.tsx +72 -0
  447. package/primitives/skeleton/skeleton.css +15 -0
  448. package/primitives/surface/examples.mdx +173 -0
  449. package/primitives/surface/index.tsx +109 -0
  450. package/primitives/surface/surface.css +176 -0
  451. package/dist/shared/components-0sn7ypjw.js +0 -61
  452. package/dist/shared/components-1434p1mh.js +0 -123
  453. package/dist/shared/components-a86dytt0.js +0 -986
  454. package/dist/shared/components-gf5s6ap9.js +0 -42
  455. package/dist/shared/components-hyq23phv.js +0 -310
  456. package/dist/shared/components-ng72k97e.js +0 -128
  457. package/dist/shared/components-raknhppb.js +0 -64
  458. package/dist/shared/components-vynjtrk6.js +0 -19
  459. package/dist/shared/components-wy9jpqny.js +0 -146
  460. /package/dist/shared/{components-1v7rxytx.js → components-3ey0hzpb.js} +0 -0
  461. /package/dist/shared/{components-ezxhrmer.js → components-jcnjay5g.js} +0 -0
@@ -0,0 +1,453 @@
1
+ // biome-ignore-all lint: vendored upstream code keeps its own patterns (see the header)
2
+ /*
3
+ * Ported from Fluid Functionalism — github.com/mickadesign/fluid-functionalism
4
+ * `registry/base/sidebar.tsx` @ b3587bdbd83fc66c2a6aae3817ffb856cb09260b
5
+ * MIT License © 2026 Micka Touillaud — fluidfunctionalism.com (notice: LICENSE.fluid-functionalism)
6
+ * Local modifications:
7
+ * - `"use client"` dropped; `framer-motion` → `motion/react`; `@/lib/*`
8
+ * imports rewritten to `../../../lib/*`, `@/components/ui/scroll-area` →
9
+ * `../../../primitives/scroll-area`, `@/components/ui/sidebar-{core,menu}` →
10
+ * the siblings `./sidebar-core` / `./sidebar-menu`.
11
+ * - The mobile sheet is the DS's `Sheet` (Base UI Drawer through the morph
12
+ * layer): it grows out of its edge with the goo neck on `spring.goo`
13
+ * and swipes away, replacing upstream's Dialog with a framer slide, its
14
+ * held-open exit and its `bg-black` scrim.
15
+ * - `SidebarProps` re-declared one member per line with the FF docs text;
16
+ * `value` / `defaultValue` / `onValueChange` added: the sidebar holds the
17
+ * selection its menu buttons' `value`s read (`SidebarSelection`), so rows
18
+ * select without state of their own.
19
+ * - The parts hang off `Sidebar` as statics (`Sidebar.Provider`,
20
+ * `Sidebar.Menu`, …), typed through a `SidebarComponent` cast; upstream's
21
+ * named re-exports are kept.
22
+ * - Upstream's `.scroll-divider` (app/globals.css) ships beside it as
23
+ * `sidebar.css`.
24
+ */
25
+
26
+ import {
27
+ type CSSProperties,
28
+ type ForwardRefExoticComponent,
29
+ forwardRef,
30
+ type HTMLAttributes,
31
+ type ReactNode,
32
+ type RefAttributes,
33
+ useEffect,
34
+ useMemo,
35
+ } from 'react'
36
+ import { useControllableState } from '../../../lib/use-controllable-state'
37
+ import { cn } from '../../../lib/utils'
38
+ import { ScrollArea } from '../../../primitives/scroll-area'
39
+ import { Sheet } from '../../overlays/sheet'
40
+ import {
41
+ SidebarFooter,
42
+ SidebarGroup,
43
+ SidebarGroupAction,
44
+ SidebarGroupActions,
45
+ SidebarGroupContent,
46
+ SidebarGroupLabel,
47
+ SidebarHeader,
48
+ SidebarInput,
49
+ SidebarInset,
50
+ SidebarProvider,
51
+ SidebarRail,
52
+ SidebarSeparator,
53
+ SidebarShell,
54
+ type SidebarSide,
55
+ SidebarTrigger,
56
+ useSidebar,
57
+ } from './sidebar-core'
58
+ import {
59
+ SidebarMenu,
60
+ SidebarMenuAction,
61
+ SidebarMenuActions,
62
+ SidebarMenuBadge,
63
+ SidebarMenuButton,
64
+ SidebarMenuItem,
65
+ SidebarMenuSkeleton,
66
+ SidebarMenuSub,
67
+ SidebarMenuSubButton,
68
+ SidebarMenuSubItem,
69
+ SidebarSelection,
70
+ } from './sidebar-menu'
71
+
72
+ function SidebarSheet({ side, children }: { side: SidebarSide; children: ReactNode }) {
73
+ const { openMobile, setOpenMobile, widthMobile } = useSidebar()
74
+ return (
75
+ <Sheet side={side} open={openMobile} onOpenChange={setOpenMobile}>
76
+ <Sheet.Content
77
+ aria-label="Sidebar"
78
+ data-sidebar="sidebar"
79
+ data-mobile="true"
80
+ data-side={side}
81
+ tier="moderate"
82
+ className="gap-0 overflow-hidden p-0"
83
+ style={{ width: widthMobile }}
84
+ >
85
+ {children}
86
+ </Sheet.Content>
87
+ </Sheet>
88
+ )
89
+ }
90
+
91
+ // ─── Sidebar ─────────────────────────────────────────────────────────────────
92
+
93
+ interface SidebarProps
94
+ extends Omit<
95
+ HTMLAttributes<HTMLDivElement>,
96
+ | 'defaultValue'
97
+ | 'onDrag'
98
+ | 'onDragStart'
99
+ | 'onDragEnd'
100
+ | 'onAnimationStart'
101
+ | 'onAnimationEnd'
102
+ | 'onAnimationIteration'
103
+ > {
104
+ /** The edge it sits on; the shortcut key and the rail mirror it. Defaults to `'left'`. */
105
+ side?: 'left' | 'right'
106
+ /** `'sidebar'` sits flush with an inner border, `'floating'` lifts it onto its own card one surface level up, `'inset'` makes the main region the card. Defaults to `'sidebar'`. */
107
+ variant?: 'sidebar' | 'floating' | 'inset'
108
+ /** `'offcanvas'` collapses it away (rail, trigger, shortcut, open on hover, mobile drawer); `'none'` pins it open, with no rail or drawer — for a sidebar inside a dialog. Defaults to `'offcanvas'`. */
109
+ collapsible?: 'offcanvas' | 'none'
110
+ /** The `sidebar` variant's inner-edge border. Defaults to `true`. */
111
+ bordered?: boolean
112
+ /** Render the built-in resize/collapse rail on the inner edge. Defaults to `true`. */
113
+ rail?: boolean
114
+ /** Pin the rail's tooltip open (`true`) or closed (`false`); left out, it shows on hover. Dragging always hides it. */
115
+ railTooltipOpen?: boolean
116
+ /** Controlled selection: the menu button or sub-button whose `value` matches is the active row. */
117
+ value?: string
118
+ /** Initial selection, for an uncontrolled sidebar. */
119
+ defaultValue?: string
120
+ /** Called with the `value` of the row that was pressed. */
121
+ onValueChange?: (value: string) => void
122
+ /** Extra classes for the sidebar column (`h-full` pins it to a bounded frame). */
123
+ className?: string
124
+ /** The sidebar's parts: `Sidebar.Header`, `Sidebar.Content`, `Sidebar.Footer`. */
125
+ children?: ReactNode
126
+ }
127
+
128
+ type SidebarComponent = ForwardRefExoticComponent<SidebarProps & RefAttributes<HTMLDivElement>> & {
129
+ Provider: typeof SidebarProvider
130
+ Trigger: typeof SidebarTrigger
131
+ Rail: typeof SidebarRail
132
+ Inset: typeof SidebarInset
133
+ Input: typeof SidebarInput
134
+ Header: typeof SidebarHeader
135
+ Content: typeof SidebarContent
136
+ Footer: typeof SidebarFooter
137
+ Separator: typeof SidebarSeparator
138
+ Group: typeof SidebarGroup
139
+ GroupLabel: typeof SidebarGroupLabel
140
+ GroupAction: typeof SidebarGroupAction
141
+ GroupActions: typeof SidebarGroupActions
142
+ GroupContent: typeof SidebarGroupContent
143
+ Menu: typeof SidebarMenu
144
+ MenuItem: typeof SidebarMenuItem
145
+ MenuButton: typeof SidebarMenuButton
146
+ MenuAction: typeof SidebarMenuAction
147
+ MenuActions: typeof SidebarMenuActions
148
+ MenuBadge: typeof SidebarMenuBadge
149
+ MenuSkeleton: typeof SidebarMenuSkeleton
150
+ MenuSub: typeof SidebarMenuSub
151
+ MenuSubItem: typeof SidebarMenuSubItem
152
+ MenuSubButton: typeof SidebarMenuSubButton
153
+ }
154
+
155
+ /**
156
+ * A sidebar built from composable parts. Drag its edge to resize, collapse it
157
+ * away, and on mobile it becomes a drawer.
158
+ *
159
+ * Everything that moves here moves in the morph style (see Morph). The
160
+ * active row and the hover highlight are liquid: a new selection melts
161
+ * across from the old one, and the highlight drips from row to row, into a
162
+ * row's sub-menu too. On mobile it is a `Sheet` growing out of its edge
163
+ * that you swipe away. The menus in the header, the footer and on each row
164
+ * are Dropdowns, and the tooltips are Tooltips, so they grow out of their
165
+ * triggers too.
166
+ *
167
+ * Wrap the page in `Sidebar.Provider`, then put the `Sidebar` and a
168
+ * `Sidebar.Inset` (the main region) inside it. The provider holds the open
169
+ * state (`open` / `defaultOpen` / `onOpenChange`, kept in the `sidebar_state`
170
+ * cookie unless `persist={false}`), the `width` and `widthMobile`, the
171
+ * `mobileBreakpoint` under which it becomes a drawer, `openOnHover` (below)
172
+ * and the bare `shortcut` key (`[` for a left sidebar,
173
+ * `]` for a right one; `null` turns it off). It fills the viewport; pass
174
+ * `className="h-full min-h-0"` to fill a bounded frame instead.
175
+ *
176
+ * Drag the rail on the inner edge to resize the sidebar (160–360px); throw
177
+ * it at the edge to collapse, or click it. There is no icon-only rail on
178
+ * purpose: a collapsed sidebar opens whole on hover instead.
179
+ *
180
+ * With `openOnHover`, collapsing leaves the sidebar on hover: it opens, in
181
+ * flow, while the pointer is between its edge and the far side of a
182
+ * `Sidebar.Trigger` beside it (or a thin strip at the edge), and closes a
183
+ * beat after the pointer leaves. `open` is then whether it is kept open: the
184
+ * trigger switches between the two and draws a dashed glyph while on hover,
185
+ * and the rail collapses or resizes the hover without keeping it open.
186
+ *
187
+ * ## Rows
188
+ *
189
+ * - Two levels: `Sidebar.MenuButton` rows, each folding a
190
+ * `Sidebar.MenuSub` of `Sidebar.MenuSubButton` rows. A
191
+ * `Sidebar.MenuItem collapsible` toggles its sub-menu from its own button
192
+ * and draws the chevron.
193
+ * - Give a button a `value` and the sidebar's `value` / `defaultValue` picks
194
+ * the active row; pressing a row selects it. `isActive` still forces a row
195
+ * active.
196
+ * - `icon` puts a glyph in the leading slot; `status` (`'active'`,
197
+ * `'unread'`, `'idle'`) a thread's dot instead.
198
+ * - `Sidebar.MenuBadge` keeps the rightmost slot; up to three
199
+ * `Sidebar.MenuAction`s (in a `Sidebar.MenuActions` cluster) sit beside
200
+ * it, `showOnHover` so the label keeps the room at rest.
201
+ * - The rows share one fluid hover, one keyboard roving focus (arrows,
202
+ * Home, End) and one focus ring across both levels.
203
+ *
204
+ * ## Sections
205
+ *
206
+ * `Sidebar.Group` with a `Sidebar.GroupLabel` is a section; `collapsible`
207
+ * makes the label fold everything under it. `Sidebar.GroupActions` holds
208
+ * its `Sidebar.GroupAction` buttons over the label's right edge.
209
+ *
210
+ * Statics:
211
+ * - `Sidebar.Provider`, `Sidebar.Inset`, `Sidebar.Trigger` (the ghost icon
212
+ * button with the shortcut in its tooltip), `Sidebar.Rail`.
213
+ * - `Sidebar.Header`, `Sidebar.Content` (the scrolling region),
214
+ * `Sidebar.Footer`, `Sidebar.Separator`, `Sidebar.Input`.
215
+ * - `Sidebar.Group`, `Sidebar.GroupLabel`, `Sidebar.GroupAction`,
216
+ * `Sidebar.GroupActions`, `Sidebar.GroupContent`.
217
+ * - `Sidebar.Menu`, `Sidebar.MenuItem`, `Sidebar.MenuButton`,
218
+ * `Sidebar.MenuAction`, `Sidebar.MenuActions`, `Sidebar.MenuBadge`,
219
+ * `Sidebar.MenuSkeleton`, `Sidebar.MenuSub`, `Sidebar.MenuSubItem`,
220
+ * `Sidebar.MenuSubButton`.
221
+ * - `useSidebar()` (named export) reads the provider's state.
222
+ *
223
+ * @example {@include ./examples.mdx}
224
+ */
225
+ const Sidebar = forwardRef<HTMLDivElement, SidebarProps>(
226
+ (
227
+ {
228
+ side = 'left',
229
+ variant = 'sidebar',
230
+ collapsible = 'offcanvas',
231
+ bordered = true,
232
+ rail = true,
233
+ railTooltipOpen,
234
+ value: valueProp,
235
+ defaultValue,
236
+ onValueChange,
237
+ className,
238
+ style,
239
+ children: parts,
240
+ ...props
241
+ },
242
+ ref,
243
+ ) => {
244
+ const { isMobile, width, registerSide } = useSidebar()
245
+ const [value, setValue] = useControllableState<string | undefined>(
246
+ valueProp,
247
+ defaultValue,
248
+ onValueChange as ((value: string | undefined) => void) | undefined,
249
+ )
250
+ const selection = useMemo(() => ({ value, select: setValue }), [value, setValue])
251
+ const children = <SidebarSelection.Provider value={selection}>{parts}</SidebarSelection.Provider>
252
+
253
+ // The provider mirrors the side into the default shortcut ("[" / "]")
254
+ // and the rail handle.
255
+ useEffect(() => registerSide(side), [side, registerSide])
256
+
257
+ if (collapsible === 'none') {
258
+ return (
259
+ <div
260
+ ref={ref}
261
+ data-slot="sidebar"
262
+ data-variant={variant}
263
+ data-side={side}
264
+ className={cn('peer sticky top-0 flex h-svh shrink-0 flex-col', side === 'right' && 'order-last', className)}
265
+ style={{ width, ...style } as CSSProperties}
266
+ {...props}
267
+ >
268
+ <div
269
+ data-sidebar="sidebar"
270
+ className={cn(
271
+ 'flex h-full w-full min-h-0 flex-col',
272
+ bordered &&
273
+ variant === 'sidebar' &&
274
+ (side === 'left' ? 'border-r border-border' : 'border-l border-border'),
275
+ )}
276
+ >
277
+ {children}
278
+ </div>
279
+ </div>
280
+ )
281
+ }
282
+
283
+ // The desktop shell stays MOUNTED across the drawer breakpoint — its
284
+ // breakpoint classes fade it out (opacity + display, allow-discrete)
285
+ // instead of this component unmounting it, which snapped the rail away
286
+ // the instant the window shrank. The sheet mounts alongside it below the
287
+ // breakpoint; the hidden shell costs nothing visible (display: none).
288
+ return (
289
+ <>
290
+ {isMobile && <SidebarSheet side={side}>{children}</SidebarSheet>}
291
+ <SidebarShell
292
+ ref={ref}
293
+ side={side}
294
+ variant={variant}
295
+ bordered={bordered}
296
+ rail={rail}
297
+ railTooltipOpen={railTooltipOpen}
298
+ className={className}
299
+ style={style}
300
+ {...props}
301
+ >
302
+ {children}
303
+ </SidebarShell>
304
+ </>
305
+ )
306
+ },
307
+ ) as SidebarComponent
308
+ Sidebar.displayName = 'Sidebar'
309
+
310
+ // ─── SidebarContent ──────────────────────────────────────────────────────────
311
+
312
+ export interface SidebarContentProps extends HTMLAttributes<HTMLDivElement> {
313
+ viewportClassName?: string
314
+ }
315
+
316
+ const SidebarContent = forwardRef<HTMLDivElement, SidebarContentProps>(
317
+ ({ className, viewportClassName, children, ...props }, ref) => {
318
+ const { isMobile } = useSidebar()
319
+
320
+ // Inside the mobile sheet, the sheet's flex column owns layout and this
321
+ // region scrolls natively — a nested ScrollArea would double-scroll. The
322
+ // boundary hairline still needs a frame to ride: scroll-divider can't sit
323
+ // on the scroller itself (its own fade mask would erase the line), so the
324
+ // region is wrapped the way ScrollArea wraps its viewport on desktop.
325
+ if (isMobile) {
326
+ return (
327
+ <div className="scroll-divider [--scroll-divider-inset:8px] flex min-h-0 w-full flex-1 flex-col">
328
+ <div
329
+ ref={ref}
330
+ data-sidebar="content"
331
+ className={cn('scroll-fade flex min-h-0 w-full flex-1 flex-col overflow-y-auto', className)}
332
+ {...props}
333
+ >
334
+ {children}
335
+ </div>
336
+ </div>
337
+ )
338
+ }
339
+
340
+ // The scroll primitive wraps children in an inline-styled sizer that
341
+ // sizes to content — rows would stop shrinking near the min width
342
+ // instead of truncating, so the viewport's direct child is forced back
343
+ // to a plain shrinkable block.
344
+ return (
345
+ <ScrollArea
346
+ className={cn('scroll-divider min-h-0 w-full flex-1', className)}
347
+ viewportClassName={cn('scroll-fade [&>div]:!block [&>div]:!min-w-0', viewportClassName)}
348
+ >
349
+ <div ref={ref} data-sidebar="content" className="flex w-full min-w-0 flex-col" {...props}>
350
+ {children}
351
+ </div>
352
+ </ScrollArea>
353
+ )
354
+ },
355
+ )
356
+ SidebarContent.displayName = 'SidebarContent'
357
+
358
+ Object.assign(Sidebar, {
359
+ Provider: SidebarProvider,
360
+ Trigger: SidebarTrigger,
361
+ Rail: SidebarRail,
362
+ Inset: SidebarInset,
363
+ Input: SidebarInput,
364
+ Header: SidebarHeader,
365
+ Content: SidebarContent,
366
+ Footer: SidebarFooter,
367
+ Separator: SidebarSeparator,
368
+ Group: SidebarGroup,
369
+ GroupLabel: SidebarGroupLabel,
370
+ GroupAction: SidebarGroupAction,
371
+ GroupActions: SidebarGroupActions,
372
+ GroupContent: SidebarGroupContent,
373
+ Menu: SidebarMenu,
374
+ MenuItem: SidebarMenuItem,
375
+ MenuButton: SidebarMenuButton,
376
+ MenuAction: SidebarMenuAction,
377
+ MenuActions: SidebarMenuActions,
378
+ MenuBadge: SidebarMenuBadge,
379
+ MenuSkeleton: SidebarMenuSkeleton,
380
+ MenuSub: SidebarMenuSub,
381
+ MenuSubItem: SidebarMenuSubItem,
382
+ MenuSubButton: SidebarMenuSubButton,
383
+ })
384
+
385
+ export type {
386
+ SidebarCollapsible,
387
+ SidebarContextValue,
388
+ SidebarGroupActionProps,
389
+ SidebarGroupLabelProps,
390
+ SidebarInputProps,
391
+ SidebarInsetProps,
392
+ SidebarProviderProps,
393
+ SidebarRailProps,
394
+ SidebarSectionProps,
395
+ SidebarSide,
396
+ SidebarTriggerProps,
397
+ SidebarVariant,
398
+ } from './sidebar-core'
399
+ // Re-export the flavor-neutral parts so `sidebar` is a one-stop import.
400
+ export {
401
+ SIDEBAR_COOKIE_MAX_AGE,
402
+ SIDEBAR_COOKIE_NAME,
403
+ SIDEBAR_KEYBOARD_SHORTCUT,
404
+ SIDEBAR_KEYBOARD_SHORTCUT_RIGHT,
405
+ SIDEBAR_MAX_WIDTH,
406
+ SIDEBAR_MIN_WIDTH,
407
+ SIDEBAR_WIDTH,
408
+ SIDEBAR_WIDTH_MOBILE,
409
+ SidebarFooter,
410
+ SidebarGroup,
411
+ SidebarGroupAction,
412
+ SidebarGroupActions,
413
+ SidebarGroupContent,
414
+ SidebarGroupLabel,
415
+ SidebarHeader,
416
+ SidebarInput,
417
+ SidebarInset,
418
+ SidebarProvider,
419
+ SidebarRail,
420
+ SidebarSeparator,
421
+ SidebarTrigger,
422
+ useSidebar,
423
+ } from './sidebar-core'
424
+ export type {
425
+ SidebarMenuActionProps,
426
+ SidebarMenuBadgeProps,
427
+ SidebarMenuButtonProps,
428
+ SidebarMenuItemProps,
429
+ SidebarMenuProps,
430
+ SidebarMenuSkeletonProps,
431
+ SidebarMenuSubButtonProps,
432
+ SidebarMenuSubItemProps,
433
+ SidebarMenuSubProps,
434
+ SidebarSelectionValue,
435
+ } from './sidebar-menu'
436
+ export {
437
+ SidebarMenu,
438
+ SidebarMenuAction,
439
+ SidebarMenuActions,
440
+ SidebarMenuBadge,
441
+ SidebarMenuButton,
442
+ SidebarMenuItem,
443
+ SidebarMenuSkeleton,
444
+ SidebarMenuSub,
445
+ SidebarMenuSubButton,
446
+ SidebarMenuSubItem,
447
+ SidebarSelection,
448
+ sidebarMenuButtonVariants,
449
+ } from './sidebar-menu'
450
+ export type { SidebarProps }
451
+ export { Sidebar, SidebarContent }
452
+
453
+ export default Sidebar