@justanarthur/modo-ui 0.6.0-canary.9 → 0.6.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 (490) hide show
  1. package/README.md +66 -164
  2. package/dist/base.css +4 -141
  3. package/dist/blocks/sidebar-app/index.js +26 -40
  4. package/dist/components/AI/input-message/index.js +16 -23
  5. package/dist/components/AI/thinking-indicator/index.js +6 -9
  6. package/dist/components/accordion/index.d.ts +11 -39
  7. package/dist/components/accordion/index.js +13 -18
  8. package/dist/components/badge/index.d.ts +11 -18
  9. package/dist/components/badge/index.js +7 -12
  10. package/dist/components/button/index.d.ts +17 -53
  11. package/dist/components/button/index.js +6 -11
  12. package/dist/components/card/index.d.ts +9 -32
  13. package/dist/components/card/index.js +11 -17
  14. package/dist/components/copy/index.d.ts +8 -41
  15. package/dist/components/copy/index.js +9 -15
  16. package/dist/components/inputs/checkbox/index.d.ts +9 -28
  17. package/dist/components/inputs/checkbox/index.js +13 -18
  18. package/dist/components/inputs/color-picker/index.d.ts +14 -22
  19. package/dist/components/inputs/color-picker/index.js +18 -26
  20. package/dist/components/inputs/combobox/index.d.ts +20 -85
  21. package/dist/components/inputs/combobox/index.js +18 -27
  22. package/dist/components/inputs/date-time/calendar/index.d.ts +18 -24
  23. package/dist/components/inputs/date-time/calendar/index.js +11 -15
  24. package/dist/components/inputs/date-time/date-picker/index.d.ts +16 -105
  25. package/dist/components/inputs/date-time/date-picker/index.js +25 -35
  26. package/dist/components/inputs/date-time/date-range-picker/index.d.ts +12 -106
  27. package/dist/components/inputs/date-time/date-range-picker/index.js +24 -35
  28. package/dist/components/inputs/date-time/duration-picker/index.d.ts +13 -66
  29. package/dist/components/inputs/date-time/duration-picker/index.js +24 -33
  30. package/dist/components/inputs/date-time/month-picker/index.d.ts +10 -60
  31. package/dist/components/inputs/date-time/month-picker/index.js +23 -32
  32. package/dist/components/inputs/date-time/time-picker/index.d.ts +10 -58
  33. package/dist/components/inputs/date-time/time-picker/index.js +24 -33
  34. package/dist/components/inputs/input/index.d.ts +13 -95
  35. package/dist/components/inputs/input/index.js +9 -18
  36. package/dist/components/inputs/radio/index.d.ts +5 -20
  37. package/dist/components/inputs/radio/index.js +12 -16
  38. package/dist/components/inputs/search/index.d.ts +3 -3
  39. package/dist/components/inputs/search/index.js +18 -26
  40. package/dist/components/inputs/select/index.d.ts +23 -99
  41. package/dist/components/inputs/select/index.js +14 -29
  42. package/dist/components/inputs/slider/index.d.ts +0 -9
  43. package/dist/components/inputs/slider/index.js +5 -8
  44. package/dist/components/inputs/switch/index.d.ts +2 -8
  45. package/dist/components/inputs/switch/index.js +12 -15
  46. package/dist/components/inputs/textarea/index.d.ts +1 -20
  47. package/dist/components/inputs/textarea/index.js +6 -9
  48. package/dist/components/navigation/sidebar/index.d.ts +21 -44
  49. package/dist/components/navigation/sidebar/index.js +31 -42
  50. package/dist/components/navigation/tabs/index.d.ts +2 -8
  51. package/dist/components/navigation/tabs/index.js +10 -15
  52. package/dist/components/navigation/tabs-subtle/index.js +10 -13
  53. package/dist/components/overlays/alert-dialog/index.d.ts +16 -135
  54. package/dist/components/overlays/alert-dialog/index.js +13 -23
  55. package/dist/components/overlays/command/index.d.ts +20 -25
  56. package/dist/components/overlays/command/index.js +17 -25
  57. package/dist/components/overlays/context-menu/index.d.ts +17 -39
  58. package/dist/components/overlays/context-menu/index.js +18 -29
  59. package/dist/components/overlays/dialog/index.d.ts +16 -42
  60. package/dist/components/overlays/dialog/index.js +12 -20
  61. package/dist/components/overlays/dropdown/index.d.ts +34 -304
  62. package/dist/components/overlays/dropdown/index.js +17 -44
  63. package/dist/components/overlays/popover/index.d.ts +12 -38
  64. package/dist/components/overlays/popover/index.js +9 -13
  65. package/dist/components/overlays/preview-card/index.js +8 -12
  66. package/dist/components/overlays/sheet/index.d.ts +8 -25
  67. package/dist/components/overlays/sheet/index.js +13 -19
  68. package/dist/components/overlays/toast/index.d.ts +50 -209
  69. package/dist/components/overlays/toast/index.js +10 -23
  70. package/dist/components/overlays/tooltip/index.d.ts +21 -123
  71. package/dist/components/overlays/tooltip/index.js +6 -16
  72. package/dist/components/table/index.d.ts +8 -63
  73. package/dist/components/table/index.js +9 -20
  74. package/dist/index.d.ts +1048 -2999
  75. package/dist/index.js +82 -231
  76. package/dist/preset.d.ts +0 -22
  77. package/dist/preset.js +2 -24
  78. package/dist/primitives/code/index.js +5 -8
  79. package/dist/primitives/craft/index.js +6 -10
  80. package/dist/primitives/fluid-hover/index.js +8 -10
  81. package/dist/primitives/morph/index.js +10 -16
  82. package/dist/primitives/motion/index.js +8 -11
  83. package/dist/primitives/scroll-area/index.js +3 -5
  84. package/dist/primitives/sizes/index.js +4 -6
  85. package/dist/primitives/surface/index.js +4 -6
  86. package/dist/shared/{components-c7rwx0ap.js → components-0q0sqfh4.js} +49 -27
  87. package/dist/shared/components-0sn7ypjw.js +61 -0
  88. package/dist/shared/{components-vc864c51.js → components-11da9ajg.js} +5 -8
  89. package/dist/shared/components-1434p1mh.js +123 -0
  90. package/dist/shared/{components-c74gf16d.js → components-1z6tdadk.js} +24 -40
  91. package/dist/shared/{components-bae8sbjx.js → components-27nnvrwe.js} +14 -15
  92. package/dist/shared/{components-qh1cvj6p.js → components-2dxkv6zm.js} +7 -8
  93. package/dist/shared/{components-y0kfy2g4.js → components-2ecg8svx.js} +152 -234
  94. package/dist/shared/{components-c5w5zk0s.js → components-2ph6t61s.js} +34 -37
  95. package/dist/shared/{components-4j3t39dd.js → components-39jq9va1.js} +24 -29
  96. package/dist/shared/components-3ky44908.js +9 -0
  97. package/dist/shared/{components-syynwm1r.js → components-3mkepka5.js} +25 -28
  98. package/dist/shared/{components-wgtjt2af.js → components-4700p9kz.js} +22 -24
  99. package/dist/shared/{components-yhgq0qxx.js → components-59efxjd9.js} +12 -13
  100. package/dist/shared/{components-91zw3d9f.js → components-5vgpnxgy.js} +27 -51
  101. package/dist/shared/{components-kz5q11pp.js → components-5xc2j8jz.js} +18 -19
  102. package/dist/shared/{components-zkk3fmw8.js → components-6p8tfcd6.js} +29 -57
  103. package/dist/shared/{components-4nck8acq.js → components-7r3etddy.js} +54 -19
  104. package/dist/shared/{components-svkt577j.js → components-8snj490h.js} +32 -78
  105. package/dist/shared/{components-ctqmge8t.js → components-b0eac83j.js} +30 -9
  106. package/dist/shared/{components-9sttq78t.js → components-b2wyq2cq.js} +59 -41
  107. package/dist/shared/{components-pv1dyrtn.js → components-b3c5et5b.js} +38 -49
  108. package/dist/shared/{components-rrbpmfx4.js → components-c6s6b43g.js} +2 -3
  109. package/dist/shared/{components-pwayrkw9.js → components-chacnk61.js} +19 -19
  110. package/dist/shared/{components-71nbt03m.js → components-cv16mryv.js} +7 -26
  111. package/dist/shared/{components-hgv6tygd.js → components-d6xtjht3.js} +30 -35
  112. package/dist/shared/{components-z8fedth5.js → components-dk0gjr5a.js} +18 -19
  113. package/dist/shared/{components-cet3jpa0.js → components-fzrq6tr3.js} +34 -37
  114. package/dist/shared/{components-cnead5qm.js → components-gc5vtq2f.js} +30 -66
  115. package/dist/shared/components-gf5s6ap9.js +42 -0
  116. package/dist/shared/{components-0h78g3b5.js → components-gz8zf3ec.js} +55 -56
  117. package/dist/shared/{components-mattt5jp.js → components-h2ajmhwn.js} +35 -107
  118. package/dist/shared/{components-m06yq8wk.js → components-hqeq3w9q.js} +23 -38
  119. package/dist/shared/{components-7qx17na9.js → components-hw9yk32z.js} +24 -36
  120. package/dist/shared/components-hyq23phv.js +310 -0
  121. package/dist/shared/{components-9jmjnkqd.js → components-jbbmdr74.js} +22 -41
  122. package/dist/shared/{components-dcc02hs2.js → components-jjw69c4c.js} +4 -7
  123. package/dist/shared/{components-303jf96s.js → components-jthe1pwb.js} +420 -139
  124. package/dist/shared/{components-dtca4s6b.js → components-jwst3vtj.js} +76 -224
  125. package/dist/shared/{components-dc5q749x.js → components-kvr7f9hy.js} +10 -19
  126. package/dist/shared/{components-s8yqk2dc.js → components-kwa6mrf9.js} +11 -46
  127. package/dist/shared/{components-de99ykt7.js → components-men63rwj.js} +2 -3
  128. package/dist/shared/{components-qx27excf.js → components-mjthm1kf.js} +9 -13
  129. package/dist/shared/{components-1e64t8aj.js → components-n42c79bz.js} +22 -23
  130. package/dist/shared/{components-tz1fv35x.js → components-n7mjr357.js} +2 -3
  131. package/dist/shared/components-ng72k97e.js +128 -0
  132. package/dist/shared/{components-w2jqa6hx.js → components-pbmqctfa.js} +65 -169
  133. package/dist/shared/{components-px2zm7dc.js → components-q5xj5c16.js} +8 -9
  134. package/dist/shared/components-raknhppb.js +64 -0
  135. package/dist/shared/{components-2a7hcand.js → components-rr7a6ja9.js} +27 -59
  136. package/dist/shared/{components-005jt2nz.js → components-s083f38z.js} +34 -164
  137. package/dist/shared/components-s5ngg32c.js +267 -0
  138. package/dist/shared/components-sn1rxx1d.js +143 -0
  139. package/dist/shared/{components-r8eqs7gz.js → components-ta7shw28.js} +4 -4
  140. package/dist/shared/{components-9as3rf68.js → components-vc7vq5nz.js} +3 -6
  141. package/dist/shared/{components-ft3zdc79.js → components-vfbhxf5r.js} +5 -6
  142. package/dist/shared/components-vynjtrk6.js +19 -0
  143. package/dist/shared/{components-p0fm0bab.js → components-w1r67ag9.js} +149 -294
  144. package/dist/shared/{components-xd3emmy4.js → components-w90endve.js} +72 -71
  145. package/dist/shared/{components-t5pk5nmc.js → components-wvp1m52g.js} +102 -149
  146. package/dist/shared/components-wy9jpqny.js +146 -0
  147. package/dist/shared/{components-yxmxn2jp.js → components-y9y0g8er.js} +28 -52
  148. package/dist/shared/components-ypp01w3p.js +986 -0
  149. package/dist/shared/{components-czdvj1a8.js → components-zfnmn5d4.js} +36 -82
  150. package/dist/shared/{components-jqpefjsn.js → components-zrkzcayz.js} +6 -54
  151. package/dist/shared/{components-vf45j12c.js → components-zx6b6yby.js} +18 -4
  152. package/dist/styles.css +32 -320
  153. package/dist/tailwind.css +0 -16
  154. package/dist/tokens.css +0 -67
  155. package/package.json +4 -227
  156. package/DESIGN.md +0 -623
  157. package/blocks/sidebar-app/examples.mdx +0 -33
  158. package/blocks/sidebar-app/index.tsx +0 -218
  159. package/blocks/sidebar-app/inset-topbar.tsx +0 -25
  160. package/blocks/sidebar-app/menu-grid.ts +0 -26
  161. package/blocks/sidebar-app/nav-data.ts +0 -36
  162. package/blocks/sidebar-app/search-field.tsx +0 -48
  163. package/blocks/sidebar-app/user-footer.tsx +0 -67
  164. package/blocks/sidebar-app/workspace-header.tsx +0 -129
  165. package/components/AI/input-message/examples.mdx +0 -130
  166. package/components/AI/input-message/file-thumbnail.tsx +0 -173
  167. package/components/AI/input-message/index.tsx +0 -1385
  168. package/components/AI/thinking-indicator/examples.mdx +0 -27
  169. package/components/AI/thinking-indicator/index.tsx +0 -210
  170. package/components/accordion/examples.mdx +0 -233
  171. package/components/accordion/index.tsx +0 -1071
  172. package/components/avatar/examples.mdx +0 -95
  173. package/components/avatar/index.tsx +0 -129
  174. package/components/badge/change-demo.tsx +0 -29
  175. package/components/badge/examples.mdx +0 -124
  176. package/components/badge/index.tsx +0 -225
  177. package/components/badge/variants.ts +0 -73
  178. package/components/button/examples.mdx +0 -168
  179. package/components/button/index.tsx +0 -424
  180. package/components/button/loading-demo.tsx +0 -25
  181. package/components/button/variants.ts +0 -168
  182. package/components/card/examples.mdx +0 -251
  183. package/components/card/index.tsx +0 -1070
  184. package/components/copy/examples.mdx +0 -125
  185. package/components/copy/index.tsx +0 -662
  186. package/components/inputs/checkbox/examples.mdx +0 -87
  187. package/components/inputs/checkbox/index.tsx +0 -611
  188. package/components/inputs/checkbox/select-all-demo.tsx +0 -48
  189. package/components/inputs/color-picker/examples.mdx +0 -111
  190. package/components/inputs/color-picker/index.tsx +0 -1981
  191. package/components/inputs/color-picker/variants.ts +0 -401
  192. package/components/inputs/combobox/examples.mdx +0 -366
  193. package/components/inputs/combobox/index.tsx +0 -1527
  194. package/components/inputs/combobox/remote-demo.tsx +0 -105
  195. package/components/inputs/date-time/calendar/examples.mdx +0 -45
  196. package/components/inputs/date-time/calendar/index.tsx +0 -370
  197. package/components/inputs/date-time/calendar/use-month-window.ts +0 -173
  198. package/components/inputs/date-time/date-picker/examples.mdx +0 -243
  199. package/components/inputs/date-time/date-picker/index.tsx +0 -476
  200. package/components/inputs/date-time/date-picker/masked-date-input.tsx +0 -348
  201. package/components/inputs/date-time/date-range-picker/examples.mdx +0 -93
  202. package/components/inputs/date-time/date-range-picker/index.tsx +0 -525
  203. package/components/inputs/date-time/duration-picker/examples.mdx +0 -40
  204. package/components/inputs/date-time/duration-picker/index.tsx +0 -253
  205. package/components/inputs/date-time/month-picker/examples.mdx +0 -45
  206. package/components/inputs/date-time/month-picker/index.tsx +0 -254
  207. package/components/inputs/date-time/picker-shell.tsx +0 -581
  208. package/components/inputs/date-time/time-columns.tsx +0 -94
  209. package/components/inputs/date-time/time-picker/examples.mdx +0 -57
  210. package/components/inputs/date-time/time-picker/index.tsx +0 -227
  211. package/components/inputs/field/examples.mdx +0 -117
  212. package/components/inputs/field/index.tsx +0 -268
  213. package/components/inputs/file-dropzone/examples.mdx +0 -83
  214. package/components/inputs/file-dropzone/file-row.tsx +0 -201
  215. package/components/inputs/file-dropzone/index.tsx +0 -316
  216. package/components/inputs/file-dropzone/upload-demo.tsx +0 -67
  217. package/components/inputs/file-dropzone/variants.ts +0 -94
  218. package/components/inputs/input/examples.mdx +0 -166
  219. package/components/inputs/input/index.tsx +0 -494
  220. package/components/inputs/input/password-demo.tsx +0 -30
  221. package/components/inputs/label/examples.mdx +0 -67
  222. package/components/inputs/label/index.tsx +0 -85
  223. package/components/inputs/number-input/examples.mdx +0 -69
  224. package/components/inputs/number-input/index.tsx +0 -221
  225. package/components/inputs/radio/examples.mdx +0 -77
  226. package/components/inputs/radio/index.tsx +0 -636
  227. package/components/inputs/search/examples.mdx +0 -74
  228. package/components/inputs/search/index.tsx +0 -333
  229. package/components/inputs/select/examples.mdx +0 -296
  230. package/components/inputs/select/index.tsx +0 -1044
  231. package/components/inputs/select/variants.ts +0 -32
  232. package/components/inputs/slider/examples.mdx +0 -153
  233. package/components/inputs/slider/index.tsx +0 -1867
  234. package/components/inputs/switch/examples.mdx +0 -96
  235. package/components/inputs/switch/index.tsx +0 -504
  236. package/components/inputs/textarea/examples.mdx +0 -126
  237. package/components/inputs/textarea/index.tsx +0 -207
  238. package/components/navigation/navigation-menu/examples.mdx +0 -136
  239. package/components/navigation/navigation-menu/index.tsx +0 -704
  240. package/components/navigation/pagination/examples.mdx +0 -74
  241. package/components/navigation/pagination/index.tsx +0 -401
  242. package/components/navigation/sidebar/examples.mdx +0 -325
  243. package/components/navigation/sidebar/index.tsx +0 -453
  244. package/components/navigation/sidebar/sidebar-core.tsx +0 -1408
  245. package/components/navigation/sidebar/sidebar-menu.tsx +0 -1495
  246. package/components/navigation/sidebar/sidebar.css +0 -74
  247. package/components/navigation/sidebar/variants.ts +0 -55
  248. package/components/navigation/tabs/examples.mdx +0 -89
  249. package/components/navigation/tabs/index.tsx +0 -494
  250. package/components/navigation/tabs-subtle/examples.mdx +0 -49
  251. package/components/navigation/tabs-subtle/index.tsx +0 -512
  252. package/components/overlays/alert-dialog/examples.mdx +0 -123
  253. package/components/overlays/alert-dialog/index.tsx +0 -276
  254. package/components/overlays/alert-dialog/pending-demo.tsx +0 -36
  255. package/components/overlays/command/examples.mdx +0 -113
  256. package/components/overlays/command/index.tsx +0 -425
  257. package/components/overlays/context-menu/examples.mdx +0 -56
  258. package/components/overlays/context-menu/index.tsx +0 -279
  259. package/components/overlays/dialog/examples.mdx +0 -165
  260. package/components/overlays/dialog/index.tsx +0 -451
  261. package/components/overlays/dropdown/dropdown-search.tsx +0 -395
  262. package/components/overlays/dropdown/examples.mdx +0 -444
  263. package/components/overlays/dropdown/index.tsx +0 -1241
  264. package/components/overlays/dropdown/menu-item.tsx +0 -510
  265. package/components/overlays/dropdown/menu-parts.tsx +0 -725
  266. package/components/overlays/popover/anchored-demo.tsx +0 -59
  267. package/components/overlays/popover/examples.mdx +0 -203
  268. package/components/overlays/popover/index.tsx +0 -317
  269. package/components/overlays/preview-card/examples.mdx +0 -61
  270. package/components/overlays/preview-card/index.tsx +0 -204
  271. package/components/overlays/sheet/examples.mdx +0 -101
  272. package/components/overlays/sheet/index.tsx +0 -307
  273. package/components/overlays/toast/examples.mdx +0 -85
  274. package/components/overlays/toast/global-demo.tsx +0 -72
  275. package/components/overlays/toast/index.tsx +0 -544
  276. package/components/overlays/toast/manager.ts +0 -193
  277. package/components/overlays/tooltip/examples.mdx +0 -106
  278. package/components/overlays/tooltip/index.tsx +0 -539
  279. package/components/progress/examples.mdx +0 -59
  280. package/components/progress/index.tsx +0 -174
  281. package/components/progress/progress.css +0 -49
  282. package/components/progress/step-demo.tsx +0 -27
  283. package/components/table/examples.mdx +0 -188
  284. package/components/table/index.tsx +0 -535
  285. package/components/table/sort-demo.tsx +0 -61
  286. package/dist/components/avatar/index.d.ts +0 -46
  287. package/dist/components/avatar/index.js +0 -19
  288. package/dist/components/badge/variants.d.ts +0 -33
  289. package/dist/components/badge/variants.js +0 -10
  290. package/dist/components/button/variants.d.ts +0 -39
  291. package/dist/components/button/variants.js +0 -8
  292. package/dist/components/inputs/color-picker/variants.d.ts +0 -61
  293. package/dist/components/inputs/color-picker/variants.js +0 -28
  294. package/dist/components/inputs/field/index.d.ts +0 -116
  295. package/dist/components/inputs/field/index.js +0 -29
  296. package/dist/components/inputs/file-dropzone/index.d.ts +0 -167
  297. package/dist/components/inputs/file-dropzone/index.js +0 -33
  298. package/dist/components/inputs/file-dropzone/variants.d.ts +0 -35
  299. package/dist/components/inputs/file-dropzone/variants.js +0 -12
  300. package/dist/components/inputs/label/index.d.ts +0 -32
  301. package/dist/components/inputs/label/index.js +0 -11
  302. package/dist/components/inputs/number-input/index.d.ts +0 -87
  303. package/dist/components/inputs/number-input/index.js +0 -21
  304. package/dist/components/inputs/select/variants.d.ts +0 -5
  305. package/dist/components/inputs/select/variants.js +0 -6
  306. package/dist/components/navigation/navigation-menu/index.d.ts +0 -126
  307. package/dist/components/navigation/navigation-menu/index.js +0 -41
  308. package/dist/components/navigation/pagination/index.d.ts +0 -75
  309. package/dist/components/navigation/pagination/index.js +0 -41
  310. package/dist/components/navigation/sidebar/variants.d.ts +0 -25
  311. package/dist/components/navigation/sidebar/variants.js +0 -28
  312. package/dist/components/progress/index.d.ts +0 -56
  313. package/dist/components/progress/index.js +0 -15
  314. package/dist/docs/index.d.ts +0 -83
  315. package/dist/docs/index.js +0 -288
  316. package/dist/docs/vite.d.ts +0 -31
  317. package/dist/docs/vite.js +0 -45
  318. package/dist/lib/date-locale.d.ts +0 -26
  319. package/dist/lib/date-locale.js +0 -24
  320. package/dist/lib/field-classes.d.ts +0 -149
  321. package/dist/lib/field-classes.js +0 -41
  322. package/dist/lib/field-variants.d.ts +0 -47
  323. package/dist/lib/field-variants.js +0 -26
  324. package/dist/lib/fluid-hover-highlight.d.ts +0 -112
  325. package/dist/lib/fluid-hover-highlight.js +0 -17
  326. package/dist/lib/focus-ring.d.ts +0 -18
  327. package/dist/lib/focus-ring.js +0 -11
  328. package/dist/lib/goo-indicator.d.ts +0 -46
  329. package/dist/lib/goo-indicator.js +0 -14
  330. package/dist/lib/icon-context.d.ts +0 -30
  331. package/dist/lib/icon-context.js +0 -12
  332. package/dist/lib/inert.d.ts +0 -9
  333. package/dist/lib/inert.js +0 -8
  334. package/dist/lib/morph-layers.d.ts +0 -93
  335. package/dist/lib/morph-layers.js +0 -13
  336. package/dist/lib/morph-part.d.ts +0 -21
  337. package/dist/lib/morph-part.js +0 -12
  338. package/dist/lib/popup.d.ts +0 -20
  339. package/dist/lib/popup.js +0 -12
  340. package/dist/lib/reduced-motion.d.ts +0 -9
  341. package/dist/lib/reduced-motion.js +0 -6
  342. package/dist/lib/row-index.d.ts +0 -10
  343. package/dist/lib/row-index.js +0 -8
  344. package/dist/lib/row-order.d.ts +0 -28
  345. package/dist/lib/row-order.js +0 -10
  346. package/dist/lib/scroll-column.d.ts +0 -31
  347. package/dist/lib/scroll-column.js +0 -19
  348. package/dist/lib/shape-context.d.ts +0 -30
  349. package/dist/lib/shape-context.js +0 -13
  350. package/dist/lib/shape-radius.d.ts +0 -19
  351. package/dist/lib/shape-radius.js +0 -6
  352. package/dist/lib/size-context.d.ts +0 -94
  353. package/dist/lib/size-context.js +0 -20
  354. package/dist/lib/size-scale.d.ts +0 -79
  355. package/dist/lib/size-scale.js +0 -8
  356. package/dist/lib/slot.d.ts +0 -39
  357. package/dist/lib/slot.js +0 -14
  358. package/dist/lib/springs.d.ts +0 -44
  359. package/dist/lib/springs.js +0 -8
  360. package/dist/lib/surface-classes.d.ts +0 -19
  361. package/dist/lib/surface-classes.js +0 -10
  362. package/dist/lib/surface-context.d.ts +0 -9
  363. package/dist/lib/surface-context.js +0 -8
  364. package/dist/lib/use-controllable-state.d.ts +0 -2
  365. package/dist/lib/use-controllable-state.js +0 -6
  366. package/dist/lib/use-fluid-hover.d.ts +0 -138
  367. package/dist/lib/use-fluid-hover.js +0 -14
  368. package/dist/lib/use-is-mobile.d.ts +0 -2
  369. package/dist/lib/use-is-mobile.js +0 -6
  370. package/dist/lib/use-keyboard-nav-gate.d.ts +0 -20
  371. package/dist/lib/use-keyboard-nav-gate.js +0 -7
  372. package/dist/lib/use-merge-split.d.ts +0 -47
  373. package/dist/lib/use-merge-split.js +0 -15
  374. package/dist/lib/use-morph.d.ts +0 -101
  375. package/dist/lib/use-morph.js +0 -20
  376. package/dist/lib/use-touch-primary.d.ts +0 -2
  377. package/dist/lib/use-touch-primary.js +0 -6
  378. package/dist/lib/utils.d.ts +0 -3
  379. package/dist/lib/utils.js +0 -6
  380. package/dist/primitives/separator/index.d.ts +0 -25
  381. package/dist/primitives/separator/index.js +0 -9
  382. package/dist/primitives/skeleton/index.d.ts +0 -35
  383. package/dist/primitives/skeleton/index.js +0 -13
  384. package/dist/shared/components-01w9qcfa.js +0 -277
  385. package/dist/shared/components-124epb7f.js +0 -53
  386. package/dist/shared/components-26snnbs9.js +0 -322
  387. package/dist/shared/components-2krsc300.js +0 -254
  388. package/dist/shared/components-2qbqqpgq.js +0 -1545
  389. package/dist/shared/components-34txk9rj.js +0 -35
  390. package/dist/shared/components-3h92d94m.js +0 -23
  391. package/dist/shared/components-4vfm04wq.js +0 -82
  392. package/dist/shared/components-54nq988h.js +0 -123
  393. package/dist/shared/components-7s7pykk5.js +0 -281
  394. package/dist/shared/components-868v7scv.js +0 -399
  395. package/dist/shared/components-8jrk5eye.js +0 -448
  396. package/dist/shared/components-adkarj8n.js +0 -35
  397. package/dist/shared/components-b1e239g3.js +0 -28
  398. package/dist/shared/components-b94t6qtj.js +0 -143
  399. package/dist/shared/components-bsqynhaj.js +0 -179
  400. package/dist/shared/components-c9yr4ed1.js +0 -44
  401. package/dist/shared/components-d3shbwqq.js +0 -95
  402. package/dist/shared/components-dhgk6mbt.js +0 -16
  403. package/dist/shared/components-drxrtnp2.js +0 -25
  404. package/dist/shared/components-f7h57m6t.js +0 -59
  405. package/dist/shared/components-g3eafs70.js +0 -337
  406. package/dist/shared/components-gx4h5rbb.js +0 -40
  407. package/dist/shared/components-gyt7my41.js +0 -328
  408. package/dist/shared/components-h6p86be3.js +0 -19
  409. package/dist/shared/components-h83az0bz.js +0 -33
  410. package/dist/shared/components-hdzrqqpx.js +0 -55
  411. package/dist/shared/components-krtx3m5b.js +0 -84
  412. package/dist/shared/components-kswxnm3h.js +0 -24
  413. package/dist/shared/components-mhza2wdn.js +0 -482
  414. package/dist/shared/components-mrbaxt8q.js +0 -62
  415. package/dist/shared/components-pt5ftm4p.js +0 -38
  416. package/dist/shared/components-rtadhd9j.js +0 -64
  417. package/dist/shared/components-tv7b8tet.js +0 -271
  418. package/dist/shared/components-tz4gaf1v.js +0 -23
  419. package/dist/shared/components-wbbckbw8.js +0 -34
  420. package/dist/shared/components-wknae3m4.js +0 -298
  421. package/dist/shared/components-xdqmt6ed.js +0 -20
  422. package/dist/shared/components-xjkdvnbg.js +0 -107
  423. package/dist/shared/components-z3v0n0de.js +0 -11
  424. package/dist/tokens/colors.css +0 -230
  425. package/dist/tokens/motion.css +0 -40
  426. package/dist/tokens/radius.css +0 -10
  427. package/dist/tokens/spacing.css +0 -9
  428. package/dist/tokens/typography.css +0 -119
  429. package/docs/chrome.css +0 -120
  430. package/docs/chrome.tsx +0 -283
  431. package/docs/index.ts +0 -9
  432. package/docs/vite.ts +0 -85
  433. package/index.ts +0 -60
  434. package/lib/date-locale.ts +0 -195
  435. package/lib/field-classes.ts +0 -121
  436. package/lib/field-variants.ts +0 -117
  437. package/lib/fluid-hover-highlight.tsx +0 -139
  438. package/lib/focus-ring.tsx +0 -46
  439. package/lib/goo-indicator.tsx +0 -261
  440. package/lib/icon-context.tsx +0 -310
  441. package/lib/inert.ts +0 -22
  442. package/lib/morph-layers.tsx +0 -102
  443. package/lib/morph-part.tsx +0 -49
  444. package/lib/popup.ts +0 -52
  445. package/lib/reduced-motion.ts +0 -19
  446. package/lib/row-index.tsx +0 -29
  447. package/lib/row-order.tsx +0 -126
  448. package/lib/scroll-column.tsx +0 -273
  449. package/lib/shape-context.tsx +0 -138
  450. package/lib/shape-radius.ts +0 -67
  451. package/lib/size-context.tsx +0 -66
  452. package/lib/size-scale.ts +0 -115
  453. package/lib/slot.ts +0 -115
  454. package/lib/springs.ts +0 -62
  455. package/lib/surface-classes.ts +0 -58
  456. package/lib/surface-context.tsx +0 -21
  457. package/lib/use-controllable-state.ts +0 -44
  458. package/lib/use-fluid-hover.ts +0 -541
  459. package/lib/use-is-mobile.ts +0 -25
  460. package/lib/use-keyboard-nav-gate.ts +0 -45
  461. package/lib/use-merge-split.tsx +0 -209
  462. package/lib/use-morph.ts +0 -575
  463. package/lib/use-touch-primary.tsx +0 -43
  464. package/lib/utils.ts +0 -37
  465. package/preset.ts +0 -199
  466. package/primitives/code/examples.mdx +0 -27
  467. package/primitives/code/index.tsx +0 -80
  468. package/primitives/craft/demos.tsx +0 -173
  469. package/primitives/craft/examples.mdx +0 -142
  470. package/primitives/craft/index.tsx +0 -76
  471. package/primitives/fluid-hover/examples.mdx +0 -84
  472. package/primitives/fluid-hover/index.tsx +0 -316
  473. package/primitives/morph/examples.mdx +0 -139
  474. package/primitives/morph/index.tsx +0 -192
  475. package/primitives/motion/examples.mdx +0 -100
  476. package/primitives/motion/index.tsx +0 -160
  477. package/primitives/scroll-area/examples.mdx +0 -58
  478. package/primitives/scroll-area/index.tsx +0 -204
  479. package/primitives/separator/examples.mdx +0 -30
  480. package/primitives/separator/index.tsx +0 -53
  481. package/primitives/sizes/examples.mdx +0 -167
  482. package/primitives/sizes/index.tsx +0 -89
  483. package/primitives/skeleton/examples.mdx +0 -51
  484. package/primitives/skeleton/index.tsx +0 -72
  485. package/primitives/skeleton/skeleton.css +0 -15
  486. package/primitives/surface/examples.mdx +0 -173
  487. package/primitives/surface/index.tsx +0 -109
  488. package/primitives/surface/surface.css +0 -176
  489. /package/dist/shared/{components-3ey0hzpb.js → components-1v7rxytx.js} +0 -0
  490. /package/dist/shared/{components-jcnjay5g.js → components-ezxhrmer.js} +0 -0
@@ -1,218 +0,0 @@
1
- /*
2
- * Fluid Functionalism's sidebar app shell as the preset `sa1FQfCxH6`
3
- * (fluidfunctionalism.com/docs/sidebar?preset=sa1FQfCxH6) configures it: the
4
- * inset layout starting collapsed, a workspace switcher, search and a "New"
5
- * row in the header, two collapsible thread sections, a row menu on every
6
- * thread and a user row with two buttons in the footer. The composition is
7
- * the app-sidebar.tsx and page.tsx that FF's preset generator emits for it
8
- * (github.com/mickadesign/fluid-functionalism `lib/preset/sidebar-install.ts`
9
- * @ c367a0d066bc10e663b3d269bc40539ea8417b25), over the sidebar-app,
10
- * sidebar-workspace-header and sidebar-user-footer blocks ported beside it —
11
- * MIT License © 2026 Micka Touillaud (notice: LICENSE.fluid-functionalism).
12
- *
13
- * Local changes: the selected thread rides the Sidebar's `value` (the rows
14
- * carry `value`s) and the topbar shows it; the switcher keeps its own pick
15
- * (`defaultCheckedIndex`); the footer's icon buttons are the DS's ghost
16
- * `Button`; `variant`, `side`, `openOnHover` and `contained` are props.
17
- */
18
-
19
- import { useState } from 'react'
20
- import Button from '../../components/button'
21
- import Sidebar from '../../components/navigation/sidebar'
22
- import { DropdownContent, DropdownMenu, DropdownTrigger, MenuItem } from '../../components/overlays/dropdown'
23
- import Tooltip from '../../components/overlays/tooltip'
24
- import { useIcon } from '../../lib/icon-context'
25
- import { cn } from '../../lib/utils'
26
- import { SidebarInsetTopbar } from './inset-topbar'
27
- import { NAV_SECTIONS } from './nav-data'
28
- import { SidebarSearchField } from './search-field'
29
- import { SidebarUserFooter } from './user-footer'
30
- import { SidebarWorkspaceHeader, WorkspaceTile } from './workspace-header'
31
-
32
- interface SidebarAppProps {
33
- /** Start with the sidebar open; the preset starts it collapsed. Defaults to `false`. */
34
- defaultOpen?: boolean
35
- /** The sidebar's layout (see Sidebar). Defaults to `'inset'`. */
36
- variant?: 'sidebar' | 'floating' | 'inset'
37
- /** The edge it sits on. Defaults to `'left'`. */
38
- side?: 'left' | 'right'
39
- /** Open the collapsed sidebar while the pointer is at its edge or on the topbar's trigger (see Sidebar). Defaults to `false`. */
40
- openOnHover?: boolean
41
- /** Fill the parent box instead of the viewport, as the examples do. Defaults to `false`. */
42
- contained?: boolean
43
- }
44
-
45
- interface AppSidebarProps {
46
- variant: 'sidebar' | 'floating' | 'inset'
47
- side: 'left' | 'right'
48
- className?: string
49
- value: string
50
- onValueChange: (value: string) => void
51
- }
52
-
53
- function AppSidebar({ variant, side, className, value, onValueChange }: AppSidebarProps) {
54
- const PlusIcon = useIcon('plus')
55
- const PencilIcon = useIcon('pencil')
56
- const MoreVerticalIcon = useIcon('more-vertical')
57
- const LinkIcon = useIcon('link')
58
- const UserIcon = useIcon('user')
59
- const SettingsIcon = useIcon('settings')
60
- const ArrowLeftIcon = useIcon('arrow-left')
61
- const MoonIcon = useIcon('moon')
62
-
63
- return (
64
- <Sidebar variant={variant} side={side} className={className} value={value} onValueChange={onValueChange}>
65
- <Sidebar.Header>
66
- <SidebarWorkspaceHeader
67
- name="Acme Inc"
68
- tile={<WorkspaceTile>A</WorkspaceTile>}
69
- defaultCheckedIndex={0}
70
- menu={
71
- <>
72
- <MenuItem index={0} label="Acme Inc" />
73
- <MenuItem index={1} label="Personal" />
74
- <MenuItem index={2} icon={PlusIcon} label="New workspace" />
75
- </>
76
- }
77
- />
78
- {/* Search and the action rows are one block on the menu rows' rhythm. */}
79
- <div className="flex flex-col gap-0.5">
80
- <SidebarSearchField />
81
- <Sidebar.Menu>
82
- <Sidebar.MenuItem>
83
- <Sidebar.MenuButton icon={PlusIcon}>
84
- New
85
- <span className="ml-auto inline-flex opacity-0 transition-opacity duration-fast group-hover/menu-item:opacity-100 group-focus-within/menu-item:opacity-100">
86
- <kbd className="font-sans text-micro text-muted-foreground">⇧⌘O</kbd>
87
- </span>
88
- </Sidebar.MenuButton>
89
- </Sidebar.MenuItem>
90
- </Sidebar.Menu>
91
- </div>
92
- </Sidebar.Header>
93
-
94
- <Sidebar.Content>
95
- {NAV_SECTIONS.map(section => (
96
- <Sidebar.Group key={section.label} collapsible>
97
- <Sidebar.GroupLabel>{section.label}</Sidebar.GroupLabel>
98
- <Sidebar.GroupActions>
99
- <Tooltip content="Add item" side="top">
100
- <Sidebar.GroupAction aria-label="Add item">
101
- <PlusIcon />
102
- </Sidebar.GroupAction>
103
- </Tooltip>
104
- </Sidebar.GroupActions>
105
- <Sidebar.Menu>
106
- {section.items.map(item => (
107
- <Sidebar.MenuItem key={item.label}>
108
- {/* The status draws the dot and the screen-reader "unread"; the value selects. */}
109
- <Sidebar.MenuButton status={item.status} value={item.label}>
110
- {item.label}
111
- </Sidebar.MenuButton>
112
- <DropdownMenu>
113
- <DropdownTrigger
114
- render={
115
- <Sidebar.MenuAction showOnHover aria-label="More options">
116
- <MoreVerticalIcon />
117
- </Sidebar.MenuAction>
118
- }
119
- />
120
- {/* 240px, the header and footer triggers' width. */}
121
- <DropdownContent className="min-w-0 w-[240px]" align="start" sideOffset={4}>
122
- <MenuItem index={0} icon={PencilIcon} label="Rename" />
123
- <MenuItem index={1} icon={LinkIcon} label="Share" />
124
- </DropdownContent>
125
- </DropdownMenu>
126
- </Sidebar.MenuItem>
127
- ))}
128
- </Sidebar.Menu>
129
- </Sidebar.Group>
130
- ))}
131
- </Sidebar.Content>
132
-
133
- <Sidebar.Footer>
134
- <div className="flex items-center gap-1 pr-1.5">
135
- <SidebarUserFooter
136
- name="Jane Doe"
137
- avatar={
138
- <span className="flex size-5 items-center justify-center rounded-full bg-muted-foreground text-micro-compact text-background">
139
- J
140
- </span>
141
- }
142
- className="min-w-0 flex-1"
143
- menu={
144
- <>
145
- <MenuItem index={0} icon={UserIcon} label="Profile" />
146
- <MenuItem index={1} icon={SettingsIcon} label="Settings" />
147
- <MenuItem index={2} icon={ArrowLeftIcon} label="Log out" />
148
- </>
149
- }
150
- />
151
- <Tooltip content="Settings" side="top">
152
- <Button variant="ghost" size="icon-compact" aria-label="Settings" className="size-6 shrink-0">
153
- <SettingsIcon />
154
- </Button>
155
- </Tooltip>
156
- <Tooltip content="Theme" side="top">
157
- <Button variant="ghost" size="icon-compact" aria-label="Theme" className="size-6 shrink-0">
158
- <MoonIcon />
159
- </Button>
160
- </Tooltip>
161
- </div>
162
- </Sidebar.Footer>
163
- </Sidebar>
164
- )
165
- }
166
-
167
- /**
168
- * An app shell around the Sidebar, as Fluid Functionalism's playground preset
169
- * `sa1FQfCxH6` builds it: the inset layout, starting collapsed.
170
- *
171
- * Press the trigger in the topbar (or `[`) to bring the sidebar in. The
172
- * header holds a workspace switcher, a search field and a "New" row; two
173
- * thread sections fold from their labels and carry an "Add item" action;
174
- * every thread shows its status dot and, on hover, a "More options" menu;
175
- * the footer anchors the user row and two buttons. Pick a thread and the
176
- * active row melts over to it while the topbar follows.
177
- *
178
- * Every overlay grows out of what opened it: the switcher, the user menu
179
- * and the row menus are Dropdowns, the labels on the buttons are Tooltips,
180
- * a collapsed sidebar with `openOnHover` slides open from its edge, and below
181
- * the `md` breakpoint the sidebar is a Sheet growing out of the left edge.
182
- *
183
- * @example {@include ./examples.mdx}
184
- */
185
- export default function SidebarApp({
186
- defaultOpen = false,
187
- variant = 'inset',
188
- side = 'left',
189
- openOnHover = false,
190
- contained = false,
191
- }: SidebarAppProps) {
192
- const [thread, setThread] = useState(NAV_SECTIONS[0]?.items[0]?.label ?? '')
193
-
194
- return (
195
- <Sidebar.Provider
196
- defaultOpen={defaultOpen}
197
- openOnHover={openOnHover}
198
- className={contained ? 'h-full min-h-0' : undefined}
199
- >
200
- <AppSidebar
201
- variant={variant}
202
- side={side}
203
- className={contained ? 'h-full' : undefined}
204
- value={thread}
205
- onValueChange={setThread}
206
- />
207
- {/* The floating card sits in a p-2 gutter: the topbar drops to line up with it. */}
208
- <Sidebar.Inset className={cn(contained && 'min-h-0', variant === 'floating' && 'pt-2')}>
209
- <SidebarInsetTopbar>
210
- <span className="truncate text-body text-muted-foreground">{thread}</span>
211
- </SidebarInsetTopbar>
212
- <main className="flex flex-1 flex-col gap-4 p-4" />
213
- </Sidebar.Inset>
214
- </Sidebar.Provider>
215
- )
216
- }
217
-
218
- export type { SidebarAppProps }
@@ -1,25 +0,0 @@
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/blocks/sidebar-app/inset-topbar.tsx` @ b3587bdbd83fc66c2a6aae3817ffb856cb09260b
5
- * MIT License © 2026 Micka Touillaud — fluidfunctionalism.com (notice: LICENSE.fluid-functionalism)
6
- * Local modifications:
7
- * - `"use client"` dropped; `@/components/ui/{sidebar,dropdown}` → `../../components/*`,
8
- * `@/lib/sidebar-menu-grid` → `./menu-grid`, `@/lib/*` → `../../lib/*`.
9
- * - No peek to hide behind: the sidebar opens on hover in flow (the
10
- * provider's `openOnHover`), so the trigger stays, riding the inset's edge.
11
- */
12
-
13
- import { type ReactNode } from 'react'
14
- import { SidebarTrigger } from '../../components/navigation/sidebar'
15
- import { cn } from '../../lib/utils'
16
-
17
- // The main region's topbar, its trigger first.
18
- export function SidebarInsetTopbar({ children, className }: { children?: ReactNode; className?: string }) {
19
- return (
20
- <header className={cn('flex h-12 shrink-0 items-center gap-2 px-1.5', className)}>
21
- <SidebarTrigger />
22
- {children}
23
- </header>
24
- )
25
- }
@@ -1,26 +0,0 @@
1
- /*
2
- * Ported from Fluid Functionalism — github.com/mickadesign/fluid-functionalism
3
- * `registry/default/lib/sidebar-menu-grid.ts` @ b3587bdbd83fc66c2a6aae3817ffb856cb09260b
4
- * MIT License © 2026 Micka Touillaud — fluidfunctionalism.com (notice: LICENSE.fluid-functionalism)
5
- * Local modifications:
6
- * - The width reads Base UI's `--anchor-width` only (the Radix fallback goes).
7
- * - The `-ml-1` shift is dropped: the class lands on the morph surface's
8
- * content, which would slide off its own background.
9
- */
10
-
11
- /**
12
- * Shared geometry for sidebar-anchored dropdown menus (the workspace switcher
13
- * in the header, the user menu in the footer).
14
- *
15
- * The popup is trigger-width plus 10px, so that:
16
- * - the leading icon slot's centre lands on the sidebar rows' 16px leading
17
- * axis (pl-2, with a 20px letter-tile overhanging the 16px slot by 2px a
18
- * side),
19
- * - gap-2 lands the label on the rows' 32px text axis, and
20
- * - pr-1.5 puts a trailing glyph (the check) on the trigger chevron's
21
- * vertical axis.
22
- */
23
- export const SIDEBAR_MENU_GRID =
24
- '[&_[role=menuitem]]:pl-2 [&_[role=menuitem]]:pr-1.5 [&_[role=menuitem]]:gap-2 [&_[role=menuitemradio]]:pl-2 [&_[role=menuitemradio]]:pr-1.5 [&_[role=menuitemradio]]:gap-2'
25
-
26
- export const SIDEBAR_MENU_POPUP = `min-w-[240px] w-[calc(var(--anchor-width)_+_10px)] ${SIDEBAR_MENU_GRID}`
@@ -1,36 +0,0 @@
1
- /*
2
- * Ported from Fluid Functionalism — the seed navigation that
3
- * github.com/mickadesign/fluid-functionalism `lib/preset/sidebar-install.ts`
4
- * (@ c367a0d066bc10e663b3d269bc40539ea8417b25) generates for the sidebar
5
- * preset `sa1FQfCxH6` (threads, two sections). MIT License © 2026 Micka
6
- * Touillaud — fluidfunctionalism.com (notice: LICENSE.fluid-functionalism).
7
- */
8
-
9
- export interface NavItem {
10
- label: string
11
- /** Semantic status: drives the leading dot and screen-reader text. */
12
- status: 'active' | 'unread' | 'idle'
13
- }
14
-
15
- export interface NavSection {
16
- label: string
17
- items: NavItem[]
18
- }
19
-
20
- export const NAV_SECTIONS: NavSection[] = [
21
- {
22
- label: 'fluid-functionalism',
23
- items: [
24
- { label: 'New pricing page exploration', status: 'active' },
25
- { label: 'Component library audit', status: 'idle' },
26
- { label: 'Dark mode token pass', status: 'unread' },
27
- ],
28
- },
29
- {
30
- label: 'portfolio-site',
31
- items: [
32
- { label: 'Scrollbar fade regression', status: 'idle' },
33
- { label: 'Registry deploy pipeline', status: 'unread' },
34
- ],
35
- },
36
- ]
@@ -1,48 +0,0 @@
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/blocks/sidebar-app/search-field.tsx` @ b3587bdbd83fc66c2a6aae3817ffb856cb09260b
5
- * MIT License © 2026 Micka Touillaud — fluidfunctionalism.com (notice: LICENSE.fluid-functionalism)
6
- * Local modifications:
7
- * - `"use client"` dropped; `@/components/ui/{sidebar,dropdown}` → `../../components/*`,
8
- * `@/lib/sidebar-menu-grid` → `./menu-grid`, `@/lib/*` → `../../lib/*`.
9
- * - Styling reads DS tokens (AGENTS.md styling): `text-[11px]` → `text-micro`;
10
- * `duration-80` → `duration-fast`.
11
- */
12
-
13
- import { type ComponentProps } from 'react'
14
- import { SidebarInput } from '../../components/navigation/sidebar'
15
- import { useIcon } from '../../lib/icon-context'
16
- import { useSize } from '../../lib/size-context'
17
-
18
- // ---------------------------------------------------------------------------
19
- // The header's search field, on the menu rows' own rhythm. The leading icon
20
- // sits on the rows' 16px leading axis; pl-8 starts the text on the rows'
21
- // 32px text axis; and the shortcut chip waits at the trailing edge, revealed
22
- // on hover/focus — the placeholder owns the field at rest.
23
- // ---------------------------------------------------------------------------
24
-
25
- export interface SidebarSearchFieldProps extends Omit<ComponentProps<typeof SidebarInput>, 'className'> {
26
- /** Keystroke shown in the trailing chip. Pass null to drop the chip. */
27
- shortcut?: string | null
28
- }
29
-
30
- export function SidebarSearchField({ placeholder = 'Search…', shortcut = '⌘K', ...props }: SidebarSearchFieldProps) {
31
- const iconSize = useSize().icon
32
- const SearchIcon = useIcon('search')
33
- return (
34
- <div className="group/search relative">
35
- <SearchIcon
36
- size={iconSize}
37
- strokeWidth={1.5}
38
- className="pointer-events-none absolute left-2 top-1/2 -translate-y-1/2 text-muted-foreground"
39
- />
40
- <SidebarInput placeholder={placeholder} aria-label="Search" className="pl-8 pr-12" {...props} />
41
- {shortcut && (
42
- <kbd className="pointer-events-none absolute right-2 top-1/2 -translate-y-1/2 font-sans text-micro text-muted-foreground opacity-0 transition-opacity duration-fast group-hover/search:opacity-100 group-focus-within/search:opacity-100">
43
- {shortcut}
44
- </kbd>
45
- )}
46
- </div>
47
- )
48
- }
@@ -1,67 +0,0 @@
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/blocks/sidebar-user-footer.tsx` @ b3587bdbd83fc66c2a6aae3817ffb856cb09260b
5
- * MIT License © 2026 Micka Touillaud — fluidfunctionalism.com (notice: LICENSE.fluid-functionalism)
6
- * Local modifications:
7
- * - `"use client"` dropped; `@/components/ui/{sidebar,dropdown}` → `../../components/*`,
8
- * `@/lib/sidebar-menu-grid` → `./menu-grid`, `@/lib/*` → `../../lib/*`.
9
- * - Styling reads DS tokens (AGENTS.md styling): `text-[13px]` → `text-body`.
10
- */
11
-
12
- import { type ReactNode } from 'react'
13
- import { SidebarMenu, SidebarMenuButton, SidebarMenuItem } from '../../components/navigation/sidebar'
14
- import { DropdownContent, DropdownMenu, DropdownTrigger } from '../../components/overlays/dropdown'
15
- import { useIcon } from '../../lib/icon-context'
16
- import { useSize } from '../../lib/size-context'
17
- import { cn } from '../../lib/utils'
18
- import { SIDEBAR_MENU_POPUP } from './menu-grid'
19
-
20
- // ---------------------------------------------------------------------------
21
- // Footer user row: identity anchors the sidebar's outer edge. The 20px
22
- // avatar pulls -ml-0.5 to centre on the rows' leading icon axis; the
23
- // chevron rides a 24px slot pulled -mr-0.5 onto the trailing action axis —
24
- // the same axes every other sidebar row uses. Its menu opens upward on the
25
- // shared sidebar menu grid, so labels and trailing glyphs line up with the
26
- // trigger row exactly.
27
- // ---------------------------------------------------------------------------
28
-
29
- export interface SidebarUserFooterProps {
30
- /** Display name shown in the row. */
31
- name: ReactNode
32
- /** 20px avatar — e.g. <img className="size-5 rounded-full" …/>. The row
33
- * positions it on the leading icon axis; the element owns its look. */
34
- avatar: ReactNode
35
- /** Dropdown content (MenuItem rows). */
36
- menu: ReactNode
37
- /** Extra classes for the wrapping SidebarMenu — pass "min-w-0 flex-1" when
38
- * the row shares a horizontal footer line with icon buttons. */
39
- className?: string
40
- }
41
-
42
- export function SidebarUserFooter({ name, avatar, menu, className }: SidebarUserFooterProps) {
43
- const iconSize = useSize().icon
44
- const ChevronsUpDown = useIcon('chevrons-up-down')
45
- return (
46
- <SidebarMenu aria-label="User" className={cn(className)}>
47
- <SidebarMenuItem>
48
- <DropdownMenu>
49
- <DropdownTrigger
50
- render={
51
- <SidebarMenuButton aria-label="Open user menu">
52
- <span className="-ml-0.5 -mr-0.5 flex size-5 shrink-0 items-center justify-center">{avatar}</span>
53
- <span className="min-w-0 truncate text-body text-foreground">{name}</span>
54
- <span className="ml-auto -mr-0.5 flex size-6 shrink-0 items-center justify-center">
55
- <ChevronsUpDown size={iconSize} strokeWidth={1.5} className="text-muted-foreground" />
56
- </span>
57
- </SidebarMenuButton>
58
- }
59
- />
60
- <DropdownContent className={SIDEBAR_MENU_POPUP} side="top" align="start" sideOffset={6}>
61
- {menu}
62
- </DropdownContent>
63
- </DropdownMenu>
64
- </SidebarMenuItem>
65
- </SidebarMenu>
66
- )
67
- }
@@ -1,129 +0,0 @@
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/blocks/sidebar-workspace-header.tsx` @ b3587bdbd83fc66c2a6aae3817ffb856cb09260b
5
- * MIT License © 2026 Micka Touillaud — fluidfunctionalism.com (notice: LICENSE.fluid-functionalism)
6
- * Local modifications:
7
- * - `"use client"` dropped; `@/components/ui/{sidebar,dropdown}` → `../../components/*`,
8
- * `@/lib/sidebar-menu-grid` → `./menu-grid`, `@/lib/*` → `../../lib/*`.
9
- * - Styling reads DS tokens (AGENTS.md styling): inline
10
- * `fontVariationSettings` → `weight-semibold`; `text-[13px]` / `text-[10px]`
11
- * → `text-body` / `text-micro-compact`; `duration-80` → `duration-fast`.
12
- * - `defaultCheckedIndex` passed through to the menu, so a switcher keeps its
13
- * own pick (the Dropdown's uncontrolled selection).
14
- * - No peek trigger: the sidebar opens on hover in flow (the provider's
15
- * `openOnHover`), the topbar's trigger stays beside it, so the tile no
16
- * longer cross-fades with a trigger over the row.
17
- */
18
-
19
- import { type ReactNode } from 'react'
20
- import { SidebarMenu, SidebarMenuButton, SidebarMenuItem } from '../../components/navigation/sidebar'
21
- import { DropdownContent, DropdownMenu, DropdownTrigger } from '../../components/overlays/dropdown'
22
- import { useIcon } from '../../lib/icon-context'
23
- import { useShape } from '../../lib/shape-context'
24
- import { useSize } from '../../lib/size-context'
25
- import { cn } from '../../lib/utils'
26
- import { SIDEBAR_MENU_POPUP } from './menu-grid'
27
-
28
- // ---------------------------------------------------------------------------
29
- // Workspace brand row for a sidebar header. The row's pl-8 keeps the name on
30
- // the rows' 32px text axis, the tile in the leading slot.
31
- // ---------------------------------------------------------------------------
32
-
33
- export interface SidebarWorkspaceHeaderProps {
34
- /** Workspace or product name shown in the row. */
35
- name: ReactNode
36
- /** 20px mark for the leading slot — a letter tile (see WorkspaceTile), a
37
- * logo, an avatar. The header positions and cross-fades it; the mark owns
38
- * its own colors and rounding. */
39
- tile: ReactNode
40
- /** Dropdown content (MenuItem rows). Omit to render a non-interactive logo
41
- * lockup instead of a workspace switcher. */
42
- menu?: ReactNode
43
- /** Index of the checked menu row, forwarded to DropdownContent. */
44
- checkedIndex?: number
45
- /** Initially checked menu row, for a switcher that keeps its own pick. */
46
- defaultCheckedIndex?: number
47
- }
48
-
49
- export function SidebarWorkspaceHeader({
50
- name,
51
- tile,
52
- menu,
53
- checkedIndex,
54
- defaultCheckedIndex,
55
- }: SidebarWorkspaceHeaderProps) {
56
- const iconSize = useSize().icon
57
- const ChevronDown = useIcon('chevron-down')
58
-
59
- // The tile sits absolutely in the row's leading slot — 20px at left-1.5
60
- // centres it on the rows' 16px leading icon axis.
61
- const tileSlot = (
62
- <span aria-hidden className="pointer-events-none absolute left-1.5 top-1/2 -translate-y-1/2">
63
- {tile}
64
- </span>
65
- )
66
- const nameSpan = <span className="min-w-0 truncate text-body weight-semibold text-foreground">{name}</span>
67
-
68
- if (!menu) {
69
- // Not interactive, so it renders outside SidebarMenu — a menu row would
70
- // track the traveling hover background.
71
- return (
72
- <div className="relative flex h-8 items-center pl-8 pr-2">
73
- {tileSlot}
74
- {nameSpan}
75
- </div>
76
- )
77
- }
78
- return (
79
- // @container: the row hides its dropdown chevron once it gets too narrow
80
- // to show a useful slice of the name (squeezed by trailing header actions
81
- // or a mid-drag width) — the text keeps whatever room is left.
82
- <SidebarMenu aria-label="Workspace" className="@container">
83
- <SidebarMenuItem>
84
- <DropdownMenu>
85
- <DropdownTrigger
86
- render={
87
- <SidebarMenuButton aria-label="Switch workspace" className="pl-8">
88
- {tileSlot}
89
- {nameSpan}
90
- <span className="ml-auto inline-flex @max-[7rem]:hidden">
91
- <ChevronDown size={iconSize} strokeWidth={1.5} className="text-muted-foreground" />
92
- </span>
93
- </SidebarMenuButton>
94
- }
95
- />
96
- {/* Trigger-width popup on the shared sidebar menu grid: items start
97
- at the row's edge, icon slots land on the leading axis, and the
98
- check sits on the chevron's vertical axis. */}
99
- <DropdownContent
100
- className={SIDEBAR_MENU_POPUP}
101
- align="start"
102
- sideOffset={4}
103
- checkedIndex={checkedIndex}
104
- defaultCheckedIndex={defaultCheckedIndex}
105
- >
106
- {menu}
107
- </DropdownContent>
108
- </DropdownMenu>
109
- </SidebarMenuItem>
110
- </SidebarMenu>
111
- )
112
- }
113
-
114
- /** The 20px letter-tile treatment the switcher's trigger and its menu rows
115
- * share — squared to the shape system, semibold 10px glyph. */
116
- export function WorkspaceTile({ children, className }: { children: ReactNode; className?: string }) {
117
- const shape = useShape()
118
- return (
119
- <span
120
- className={cn(
121
- 'flex size-5 shrink-0 items-center justify-center bg-foreground text-micro-compact weight-semibold text-background',
122
- shape.bgRadius >= 20 ? 'rounded-full' : 'rounded-md',
123
- className,
124
- )}
125
- >
126
- {children}
127
- </span>
128
- )
129
- }