@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,319 @@
1
+ import { Brain, Calendar, Check, Clock, CornerDownRight, Globe, Link, MessageCircle, MoreVertical, Pencil, Play, Plus, Search, SlidersHorizontal, SquareLibrary, Star, X } from 'lucide-react'
2
+ import Sidebar from './index'
3
+ import { DropdownContent, DropdownMenu, DropdownTrigger, MenuItem } from '../../overlays/dropdown'
4
+ import Tooltip from '../../overlays/tooltip'
5
+ import { SidebarInsetTopbar } from '../../../blocks/sidebar-app/inset-topbar'
6
+ import { SidebarSearchField } from '../../../blocks/sidebar-app/search-field'
7
+ import { SidebarUserFooter } from '../../../blocks/sidebar-app/user-footer'
8
+ import { SidebarWorkspaceHeader, WorkspaceTile } from '../../../blocks/sidebar-app/workspace-header'
9
+
10
+ # Sidebar
11
+
12
+ The default layout sits flush with an inner border. Pick a row: the active background melts across to it, and the hover highlight drips from row to row.
13
+
14
+ <div className="flex h-[480px] w-full overflow-hidden rounded-xl border border-border bg-background">
15
+ <Sidebar.Provider className="h-full min-h-0" persist={false} mobileBreakpoint={0}>
16
+ <Sidebar className="h-full" defaultValue="Chat">
17
+ <Sidebar.Content>
18
+ <Sidebar.Group collapsible>
19
+ <Sidebar.GroupLabel>Workspace</Sidebar.GroupLabel>
20
+ <Sidebar.Menu>
21
+ <Sidebar.MenuItem><Sidebar.MenuButton icon={MessageCircle} value="Chat">Chat</Sidebar.MenuButton></Sidebar.MenuItem>
22
+ <Sidebar.MenuItem><Sidebar.MenuButton icon={Brain} value="Agents">Agents</Sidebar.MenuButton></Sidebar.MenuItem>
23
+ <Sidebar.MenuItem><Sidebar.MenuButton icon={SquareLibrary} value="Knowledge">Knowledge</Sidebar.MenuButton></Sidebar.MenuItem>
24
+ <Sidebar.MenuItem><Sidebar.MenuButton icon={Play} value="Runs">Runs</Sidebar.MenuButton></Sidebar.MenuItem>
25
+ <Sidebar.MenuItem><Sidebar.MenuButton icon={Check} value="Evals">Evals</Sidebar.MenuButton></Sidebar.MenuItem>
26
+ </Sidebar.Menu>
27
+ </Sidebar.Group>
28
+ </Sidebar.Content>
29
+ </Sidebar>
30
+ <Sidebar.Inset className="min-h-0">
31
+ <SidebarInsetTopbar />
32
+ </Sidebar.Inset>
33
+ </Sidebar.Provider>
34
+ </div>
35
+
36
+ # Floating
37
+
38
+ `variant="floating"` lifts the sidebar onto its own card, one surface level up.
39
+
40
+ <div className="flex h-[480px] w-full overflow-hidden rounded-xl border border-border bg-background">
41
+ <Sidebar.Provider className="h-full min-h-0" persist={false} mobileBreakpoint={0}>
42
+ <Sidebar variant="floating" className="h-full" defaultValue="Chat">
43
+ <Sidebar.Content>
44
+ <Sidebar.Group collapsible>
45
+ <Sidebar.GroupLabel>Workspace</Sidebar.GroupLabel>
46
+ <Sidebar.Menu>
47
+ <Sidebar.MenuItem><Sidebar.MenuButton icon={MessageCircle} value="Chat">Chat</Sidebar.MenuButton></Sidebar.MenuItem>
48
+ <Sidebar.MenuItem><Sidebar.MenuButton icon={Brain} value="Agents">Agents</Sidebar.MenuButton></Sidebar.MenuItem>
49
+ <Sidebar.MenuItem><Sidebar.MenuButton icon={SquareLibrary} value="Knowledge">Knowledge</Sidebar.MenuButton></Sidebar.MenuItem>
50
+ <Sidebar.MenuItem><Sidebar.MenuButton icon={Play} value="Runs">Runs</Sidebar.MenuButton></Sidebar.MenuItem>
51
+ <Sidebar.MenuItem><Sidebar.MenuButton icon={Check} value="Evals">Evals</Sidebar.MenuButton></Sidebar.MenuItem>
52
+ </Sidebar.Menu>
53
+ </Sidebar.Group>
54
+ </Sidebar.Content>
55
+ </Sidebar>
56
+ <Sidebar.Inset className="min-h-0 pt-2">
57
+ <SidebarInsetTopbar />
58
+ </Sidebar.Inset>
59
+ </Sidebar.Provider>
60
+ </div>
61
+
62
+ # Inset
63
+
64
+ `variant="inset"` makes your content stand out: the main region becomes the card, and the sidebar sits on the page around it.
65
+
66
+ <div className="flex h-[480px] w-full overflow-hidden rounded-xl border border-border bg-background">
67
+ <Sidebar.Provider className="h-full min-h-0" persist={false} mobileBreakpoint={0}>
68
+ <Sidebar variant="inset" className="h-full" defaultValue="Chat">
69
+ <Sidebar.Content>
70
+ <Sidebar.Group collapsible>
71
+ <Sidebar.GroupLabel>Workspace</Sidebar.GroupLabel>
72
+ <Sidebar.Menu>
73
+ <Sidebar.MenuItem><Sidebar.MenuButton icon={MessageCircle} value="Chat">Chat</Sidebar.MenuButton></Sidebar.MenuItem>
74
+ <Sidebar.MenuItem><Sidebar.MenuButton icon={Brain} value="Agents">Agents</Sidebar.MenuButton></Sidebar.MenuItem>
75
+ <Sidebar.MenuItem><Sidebar.MenuButton icon={SquareLibrary} value="Knowledge">Knowledge</Sidebar.MenuButton></Sidebar.MenuItem>
76
+ <Sidebar.MenuItem><Sidebar.MenuButton icon={Play} value="Runs">Runs</Sidebar.MenuButton></Sidebar.MenuItem>
77
+ <Sidebar.MenuItem><Sidebar.MenuButton icon={Check} value="Evals">Evals</Sidebar.MenuButton></Sidebar.MenuItem>
78
+ </Sidebar.Menu>
79
+ </Sidebar.Group>
80
+ </Sidebar.Content>
81
+ </Sidebar>
82
+ <Sidebar.Inset className="min-h-0">
83
+ <SidebarInsetTopbar />
84
+ </Sidebar.Inset>
85
+ </Sidebar.Provider>
86
+ </div>
87
+
88
+ # Nesting
89
+
90
+ Two levels below the sections: a `collapsible` row folds its sub-menu, and the hover highlight flows from a parent into its children. Private starts folded to its label, Shared open with its rows closed, Recent open all the way down.
91
+
92
+ <div className="flex h-[560px] w-full overflow-hidden rounded-xl border border-border bg-background">
93
+ <Sidebar.Provider className="h-full min-h-0" persist={false} mobileBreakpoint={0}>
94
+ <Sidebar className="h-full" defaultValue="API guidelines">
95
+ <Sidebar.Content>
96
+ <Sidebar.Group collapsible defaultOpen={false}>
97
+ <Sidebar.GroupLabel>Private</Sidebar.GroupLabel>
98
+ <Sidebar.Menu>
99
+ <Sidebar.MenuItem collapsible>
100
+ <Sidebar.MenuButton icon={Pencil}>Drafts</Sidebar.MenuButton>
101
+ <Sidebar.MenuSub>
102
+ <Sidebar.MenuSubItem><Sidebar.MenuSubButton icon={Star} value="Onboarding revamp">Onboarding revamp</Sidebar.MenuSubButton></Sidebar.MenuSubItem>
103
+ <Sidebar.MenuSubItem><Sidebar.MenuSubButton icon={Search} value="Competitor teardown">Competitor teardown</Sidebar.MenuSubButton></Sidebar.MenuSubItem>
104
+ </Sidebar.MenuSub>
105
+ </Sidebar.MenuItem>
106
+ <Sidebar.MenuItem collapsible>
107
+ <Sidebar.MenuButton icon={Calendar}>Weekly notes</Sidebar.MenuButton>
108
+ <Sidebar.MenuSub>
109
+ <Sidebar.MenuSubItem><Sidebar.MenuSubButton icon={Clock} value="Week 35 — planning">Week 35 — planning</Sidebar.MenuSubButton></Sidebar.MenuSubItem>
110
+ <Sidebar.MenuSubItem><Sidebar.MenuSubButton icon={MessageCircle} value="Week 34 — retro">Week 34 — retro</Sidebar.MenuSubButton></Sidebar.MenuSubItem>
111
+ </Sidebar.MenuSub>
112
+ </Sidebar.MenuItem>
113
+ </Sidebar.Menu>
114
+ </Sidebar.Group>
115
+ <Sidebar.Group collapsible>
116
+ <Sidebar.GroupLabel>Shared</Sidebar.GroupLabel>
117
+ <Sidebar.Menu>
118
+ <Sidebar.MenuItem collapsible>
119
+ <Sidebar.MenuButton icon={Brain}>Engineering</Sidebar.MenuButton>
120
+ <Sidebar.MenuSub>
121
+ <Sidebar.MenuSubItem><Sidebar.MenuSubButton icon={Link} value="API guidelines">API guidelines</Sidebar.MenuSubButton></Sidebar.MenuSubItem>
122
+ <Sidebar.MenuSubItem><Sidebar.MenuSubButton icon={Play} value="Release process">Release process</Sidebar.MenuSubButton></Sidebar.MenuSubItem>
123
+ </Sidebar.MenuSub>
124
+ </Sidebar.MenuItem>
125
+ <Sidebar.MenuItem collapsible>
126
+ <Sidebar.MenuButton icon={Globe}>Product hub</Sidebar.MenuButton>
127
+ <Sidebar.MenuSub>
128
+ <Sidebar.MenuSubItem><Sidebar.MenuSubButton icon={MessageCircle} value="Customer interviews">Customer interviews</Sidebar.MenuSubButton></Sidebar.MenuSubItem>
129
+ <Sidebar.MenuSubItem><Sidebar.MenuSubButton icon={Star} value="Roadmap">Roadmap</Sidebar.MenuSubButton></Sidebar.MenuSubItem>
130
+ </Sidebar.MenuSub>
131
+ </Sidebar.MenuItem>
132
+ </Sidebar.Menu>
133
+ </Sidebar.Group>
134
+ <Sidebar.Group collapsible>
135
+ <Sidebar.GroupLabel>Recent</Sidebar.GroupLabel>
136
+ <Sidebar.Menu>
137
+ <Sidebar.MenuItem collapsible defaultOpen>
138
+ <Sidebar.MenuButton icon={Clock}>Today</Sidebar.MenuButton>
139
+ <Sidebar.MenuSub>
140
+ <Sidebar.MenuSubItem><Sidebar.MenuSubButton icon={Star} value="Onboarding revamp">Onboarding revamp</Sidebar.MenuSubButton></Sidebar.MenuSubItem>
141
+ <Sidebar.MenuSubItem><Sidebar.MenuSubButton icon={Link} value="API guidelines">API guidelines</Sidebar.MenuSubButton></Sidebar.MenuSubItem>
142
+ </Sidebar.MenuSub>
143
+ </Sidebar.MenuItem>
144
+ <Sidebar.MenuItem collapsible defaultOpen>
145
+ <Sidebar.MenuButton icon={Calendar}>Yesterday</Sidebar.MenuButton>
146
+ <Sidebar.MenuSub>
147
+ <Sidebar.MenuSubItem><Sidebar.MenuSubButton icon={MessageCircle} value="Customer interviews">Customer interviews</Sidebar.MenuSubButton></Sidebar.MenuSubItem>
148
+ <Sidebar.MenuSubItem><Sidebar.MenuSubButton icon={Play} value="Release process">Release process</Sidebar.MenuSubButton></Sidebar.MenuSubItem>
149
+ </Sidebar.MenuSub>
150
+ </Sidebar.MenuItem>
151
+ </Sidebar.Menu>
152
+ </Sidebar.Group>
153
+ </Sidebar.Content>
154
+ </Sidebar>
155
+ </Sidebar.Provider>
156
+ </div>
157
+
158
+ # Actions and badges
159
+
160
+ A badge and up to three actions per row. The actions show on hover, so the label keeps the room at rest; the row menu grows out of its button. Section labels carry their own actions.
161
+
162
+ <div className="flex h-[560px] w-full overflow-hidden rounded-xl border border-border bg-background">
163
+ <Sidebar.Provider className="h-full min-h-0" persist={false} mobileBreakpoint={0}>
164
+ <Sidebar className="h-full">
165
+ <Sidebar.Content>
166
+ <Sidebar.Group collapsible>
167
+ <Sidebar.GroupLabel>Threads</Sidebar.GroupLabel>
168
+ <Sidebar.GroupActions>
169
+ <Tooltip content="New thread" side="top">
170
+ <Sidebar.GroupAction aria-label="New thread"><Plus /></Sidebar.GroupAction>
171
+ </Tooltip>
172
+ <Tooltip content="Filter threads" side="top">
173
+ <Sidebar.GroupAction aria-label="Filter threads"><SlidersHorizontal /></Sidebar.GroupAction>
174
+ </Tooltip>
175
+ </Sidebar.GroupActions>
176
+ <Sidebar.Menu>
177
+ {[
178
+ ['Summarise the Q3 board deck', 'unread', '12'],
179
+ ['Migration plan for Postgres 16', 'unread', '4'],
180
+ ['Why does retrieval miss the changelog?', 'idle', '6'],
181
+ ['Rewrite the onboarding emails', 'idle', '8'],
182
+ ['Debug the eval harness timeout', 'unread', '9'],
183
+ ['Draft the launch announcement', 'idle', '5'],
184
+ ].map(([label, status, badge]) => (
185
+ <Sidebar.MenuItem key={label}>
186
+ <Sidebar.MenuButton status={status}>{label}</Sidebar.MenuButton>
187
+ <Sidebar.MenuBadge>{badge}</Sidebar.MenuBadge>
188
+ <Sidebar.MenuActions showOnHover>
189
+ <Tooltip content="Branch thread" side="top">
190
+ <Sidebar.MenuAction aria-label="Branch thread"><CornerDownRight /></Sidebar.MenuAction>
191
+ </Tooltip>
192
+ <Tooltip content="Share thread" side="top">
193
+ <Sidebar.MenuAction aria-label="Share thread"><Link /></Sidebar.MenuAction>
194
+ </Tooltip>
195
+ <DropdownMenu>
196
+ <DropdownTrigger render={<Sidebar.MenuAction aria-label="More options"><MoreVertical /></Sidebar.MenuAction>} />
197
+ <DropdownContent className="min-w-0 w-[240px]" align="start" sideOffset={4}>
198
+ <MenuItem index={0} icon={Pencil} label="Rename" />
199
+ <MenuItem index={1} icon={X} label="Delete" />
200
+ </DropdownContent>
201
+ </DropdownMenu>
202
+ </Sidebar.MenuActions>
203
+ </Sidebar.MenuItem>
204
+ ))}
205
+ </Sidebar.Menu>
206
+ </Sidebar.Group>
207
+ </Sidebar.Content>
208
+ </Sidebar>
209
+ </Sidebar.Provider>
210
+ </div>
211
+
212
+ # Header and footer
213
+
214
+ The two ends of the rail: a workspace switcher and search on top, the user row at the bottom. Both menus grow out of their rows.
215
+
216
+ <div className="flex h-[560px] w-full overflow-hidden rounded-xl border border-border bg-background">
217
+ <Sidebar.Provider className="h-full min-h-0" persist={false} mobileBreakpoint={0}>
218
+ <Sidebar className="h-full" defaultValue="Chat">
219
+ <Sidebar.Header>
220
+ <SidebarWorkspaceHeader
221
+ name="Aurora AI"
222
+ tile={<WorkspaceTile>A</WorkspaceTile>}
223
+ defaultCheckedIndex={0}
224
+ menu={
225
+ <>
226
+ <MenuItem index={0} label="Aurora AI" />
227
+ <MenuItem index={1} label="Personal" />
228
+ <MenuItem index={2} icon={Plus} label="New workspace" />
229
+ </>
230
+ }
231
+ />
232
+ <SidebarSearchField />
233
+ </Sidebar.Header>
234
+ <Sidebar.Content>
235
+ <Sidebar.Group>
236
+ <Sidebar.GroupLabel>Workspace</Sidebar.GroupLabel>
237
+ <Sidebar.Menu>
238
+ <Sidebar.MenuItem><Sidebar.MenuButton icon={MessageCircle} value="Chat">Chat</Sidebar.MenuButton></Sidebar.MenuItem>
239
+ <Sidebar.MenuItem><Sidebar.MenuButton icon={Brain} value="Agents">Agents</Sidebar.MenuButton></Sidebar.MenuItem>
240
+ <Sidebar.MenuItem><Sidebar.MenuButton icon={SquareLibrary} value="Knowledge">Knowledge</Sidebar.MenuButton></Sidebar.MenuItem>
241
+ </Sidebar.Menu>
242
+ </Sidebar.Group>
243
+ </Sidebar.Content>
244
+ <Sidebar.Footer>
245
+ <SidebarUserFooter
246
+ name="Micka Touillaud"
247
+ avatar={<span className="flex size-5 items-center justify-center rounded-full bg-muted-foreground text-micro-compact text-background">M</span>}
248
+ menu={
249
+ <>
250
+ <MenuItem index={0} label="Profile" />
251
+ <MenuItem index={1} label="Settings" />
252
+ <MenuItem index={2} label="Log out" />
253
+ </>
254
+ }
255
+ />
256
+ </Sidebar.Footer>
257
+ </Sidebar>
258
+ <Sidebar.Inset className="min-h-0">
259
+ <SidebarInsetTopbar />
260
+ </Sidebar.Inset>
261
+ </Sidebar.Provider>
262
+ </div>
263
+
264
+ # Resize, collapse and open on hover
265
+
266
+ Drag the rail on the inner edge to resize, click it or press `[` to collapse. With `openOnHover`, collapsing leaves the sidebar on hover: it opens when the pointer reaches the edge or the trigger beside it, and closes when it leaves. The trigger's dashed glyph shows the mode; press it to keep the sidebar open again.
267
+
268
+ <div className="flex h-[480px] w-full overflow-hidden rounded-xl border border-border bg-background">
269
+ <Sidebar.Provider className="h-full min-h-0" persist={false} mobileBreakpoint={0} openOnHover>
270
+ <Sidebar variant="inset" className="h-full" defaultValue="Summarise the Q3 board deck">
271
+ <Sidebar.Content>
272
+ <Sidebar.Group>
273
+ <Sidebar.GroupLabel>Threads</Sidebar.GroupLabel>
274
+ <Sidebar.Menu>
275
+ {[
276
+ ['Summarise the Q3 board deck', 'active', '12'],
277
+ ['Migration plan for Postgres 16', 'unread', '4'],
278
+ ['Why does retrieval miss the changelog?', 'idle', '6'],
279
+ ['Rewrite the onboarding emails', 'idle', '8'],
280
+ ['Debug the eval harness timeout', 'unread', '9'],
281
+ ].map(([label, status, badge]) => (
282
+ <Sidebar.MenuItem key={label}>
283
+ <Sidebar.MenuButton status={status} value={label}>{label}</Sidebar.MenuButton>
284
+ <Sidebar.MenuBadge>{badge}</Sidebar.MenuBadge>
285
+ </Sidebar.MenuItem>
286
+ ))}
287
+ </Sidebar.Menu>
288
+ </Sidebar.Group>
289
+ </Sidebar.Content>
290
+ </Sidebar>
291
+ <Sidebar.Inset className="min-h-0">
292
+ <SidebarInsetTopbar />
293
+ </Sidebar.Inset>
294
+ </Sidebar.Provider>
295
+ </div>
296
+
297
+ # Mobile drawer
298
+
299
+ Below `mobileBreakpoint` (768px by default) the sidebar is a Sheet: it grows out of the window's edge with the goo neck and swipes away. This one's breakpoint is set past any window, so the trigger always opens the drawer.
300
+
301
+ <div className="flex h-[240px] w-full overflow-hidden rounded-xl border border-border bg-background">
302
+ <Sidebar.Provider className="h-full min-h-0" persist={false} mobileBreakpoint={100000}>
303
+ <Sidebar defaultValue="Chat">
304
+ <Sidebar.Content>
305
+ <Sidebar.Group>
306
+ <Sidebar.GroupLabel>Workspace</Sidebar.GroupLabel>
307
+ <Sidebar.Menu>
308
+ <Sidebar.MenuItem><Sidebar.MenuButton icon={MessageCircle} value="Chat">Chat</Sidebar.MenuButton></Sidebar.MenuItem>
309
+ <Sidebar.MenuItem><Sidebar.MenuButton icon={Brain} value="Agents">Agents</Sidebar.MenuButton></Sidebar.MenuItem>
310
+ <Sidebar.MenuItem><Sidebar.MenuButton icon={SquareLibrary} value="Knowledge">Knowledge</Sidebar.MenuButton></Sidebar.MenuItem>
311
+ </Sidebar.Menu>
312
+ </Sidebar.Group>
313
+ </Sidebar.Content>
314
+ </Sidebar>
315
+ <Sidebar.Inset className="min-h-0">
316
+ <SidebarInsetTopbar />
317
+ </Sidebar.Inset>
318
+ </Sidebar.Provider>
319
+ </div>