@justanarthur/modo-ui 0.6.0-canary.8 → 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-4y816hwp.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-t2a3qmy9.js → components-1z6tdadk.js} +24 -40
  91. package/dist/shared/{components-qs4rkqsj.js → components-27nnvrwe.js} +14 -15
  92. package/dist/shared/{components-av5t26rc.js → components-2dxkv6zm.js} +7 -8
  93. package/dist/shared/{components-wqrvqq5p.js → components-2ecg8svx.js} +152 -234
  94. package/dist/shared/{components-3ydr2fqe.js → components-2ph6t61s.js} +34 -37
  95. package/dist/shared/{components-6gk118w3.js → components-39jq9va1.js} +24 -29
  96. package/dist/shared/components-3ky44908.js +9 -0
  97. package/dist/shared/{components-y1qvbawa.js → components-3mkepka5.js} +25 -28
  98. package/dist/shared/{components-xqszvkj4.js → components-4700p9kz.js} +22 -24
  99. package/dist/shared/{components-yhgq0qxx.js → components-59efxjd9.js} +12 -13
  100. package/dist/shared/{components-9j9abkct.js → components-5vgpnxgy.js} +27 -51
  101. package/dist/shared/{components-8tt3xbb5.js → components-5xc2j8jz.js} +18 -19
  102. package/dist/shared/{components-jymmaevv.js → components-6p8tfcd6.js} +29 -57
  103. package/dist/shared/{components-4nck8acq.js → components-7r3etddy.js} +54 -19
  104. package/dist/shared/{components-skfd7kff.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-vkwq2k96.js → components-b3c5et5b.js} +38 -49
  108. package/dist/shared/{components-rrbpmfx4.js → components-c6s6b43g.js} +2 -3
  109. package/dist/shared/{components-pw06rbxq.js → components-chacnk61.js} +19 -19
  110. package/dist/shared/{components-71nbt03m.js → components-cv16mryv.js} +7 -26
  111. package/dist/shared/{components-eqze3y30.js → components-d6xtjht3.js} +30 -35
  112. package/dist/shared/{components-5y5shqfd.js → components-dk0gjr5a.js} +18 -19
  113. package/dist/shared/{components-khspp26b.js → components-fzrq6tr3.js} +34 -37
  114. package/dist/shared/{components-km7fhgbk.js → components-gc5vtq2f.js} +30 -66
  115. package/dist/shared/components-gf5s6ap9.js +42 -0
  116. package/dist/shared/{components-qqcmtrbv.js → components-gz8zf3ec.js} +55 -56
  117. package/dist/shared/{components-mattt5jp.js → components-h2ajmhwn.js} +35 -107
  118. package/dist/shared/{components-awra5sff.js → components-hqeq3w9q.js} +16 -24
  119. package/dist/shared/{components-5tzhqbcw.js → components-hw9yk32z.js} +24 -36
  120. package/dist/shared/components-hyq23phv.js +310 -0
  121. package/dist/shared/{components-8mt5bsv6.js → components-jbbmdr74.js} +22 -41
  122. package/dist/shared/{components-dcc02hs2.js → components-jjw69c4c.js} +4 -7
  123. package/dist/shared/{components-2syq4mwc.js → components-jthe1pwb.js} +420 -139
  124. package/dist/shared/{components-r7q1zm7r.js → components-jwst3vtj.js} +76 -224
  125. package/dist/shared/{components-qdm3yh26.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-6b0zb8z3.js → components-mjthm1kf.js} +9 -13
  129. package/dist/shared/{components-2c64r8c9.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-dyae0y7h.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-8rb25gbe.js → components-rr7a6ja9.js} +27 -59
  136. package/dist/shared/{components-5012r6gr.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-w0xq6q9k.js → components-w1r67ag9.js} +149 -294
  144. package/dist/shared/{components-z0bqtvcp.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-5sxjeh6h.js → components-y9y0g8er.js} +28 -52
  148. package/dist/shared/components-ypp01w3p.js +986 -0
  149. package/dist/shared/{components-t50hrswb.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-124epb7f.js +0 -53
  385. package/dist/shared/components-1kab3j44.js +0 -337
  386. package/dist/shared/components-26snnbs9.js +0 -322
  387. package/dist/shared/components-34txk9rj.js +0 -35
  388. package/dist/shared/components-3h92d94m.js +0 -23
  389. package/dist/shared/components-4vfm04wq.js +0 -82
  390. package/dist/shared/components-54nq988h.js +0 -123
  391. package/dist/shared/components-7s7pykk5.js +0 -281
  392. package/dist/shared/components-7zkhz3r8.js +0 -399
  393. package/dist/shared/components-8v644a0s.js +0 -298
  394. package/dist/shared/components-a4evvq8h.js +0 -271
  395. package/dist/shared/components-adkarj8n.js +0 -35
  396. package/dist/shared/components-b1e239g3.js +0 -28
  397. package/dist/shared/components-b94t6qtj.js +0 -143
  398. package/dist/shared/components-c9yr4ed1.js +0 -44
  399. package/dist/shared/components-cwg1d0w6.js +0 -254
  400. package/dist/shared/components-d3shbwqq.js +0 -95
  401. package/dist/shared/components-dhgk6mbt.js +0 -16
  402. package/dist/shared/components-drxrtnp2.js +0 -25
  403. package/dist/shared/components-ej4r7wmj.js +0 -482
  404. package/dist/shared/components-f7h57m6t.js +0 -59
  405. package/dist/shared/components-fejdzvqc.js +0 -448
  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-mpa2y6x8.js +0 -277
  414. package/dist/shared/components-mrbaxt8q.js +0 -62
  415. package/dist/shared/components-pt5ftm4p.js +0 -38
  416. package/dist/shared/components-rpw4md2b.js +0 -179
  417. package/dist/shared/components-rtadhd9j.js +0 -64
  418. package/dist/shared/components-tz4gaf1v.js +0 -23
  419. package/dist/shared/components-wbbckbw8.js +0 -34
  420. package/dist/shared/components-xdqmt6ed.js +0 -20
  421. package/dist/shared/components-xjkdvnbg.js +0 -107
  422. package/dist/shared/components-z3v0n0de.js +0 -11
  423. package/dist/shared/components-z6dfqtyt.js +0 -1545
  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 -557
  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
package/lib/size-scale.ts DELETED
@@ -1,115 +0,0 @@
1
- /*
2
- * Vendored from Fluid Functionalism — `registry/default/lib/size-context.tsx` at
3
- * github.com/mickadesign/fluid-functionalism@b3587bdbd83fc66c2a6aae3817ffb856cb09260b
4
- * (fluidfunctionalism.com). MIT License © 2026 Micka Touillaud — see
5
- * LICENSE.fluid-functionalism in this package.
6
- *
7
- * Local modifications:
8
- * - The ladder's plain data (`sizeMap`, `typeScale` and their types), split out
9
- * of `lib/size-context.tsx` so server code can read it: no JSX, hooks or
10
- * contexts here. `size-context.tsx` re-exports all of it.
11
- * - `sizeMap` text classes read DS tokens (AGENTS.md styling): `text-[13px]` /
12
- * `text-[12px]` → `text-body` / `text-body-compact`.
13
- */
14
-
15
- type SizeVariant = 'default' | 'compact'
16
-
17
- interface SizeClasses {
18
- /** The variant these classes belong to — handy for conditionals. */
19
- variant: SizeVariant
20
- /** Bounded control height — buttons, inputs, select triggers, subtle tabs —
21
- * AND list/menu rows (select options, dropdown, checkbox and radio rows).
22
- * One token by design: a popup row lines up with the trigger that opened
23
- * it because they share this height. */
24
- control: string
25
- /** `control` as a number, for consumers that need raw pixels. */
26
- controlHeight: number
27
- /** Tab trigger height inside a padded segmented list. Sized so
28
- * `segmentPad` + `segmentItem` adds back up to the control height —
29
- * the segmented control's outer box stays on the same ladder. */
30
- segmentItem: string
31
- /** Padding of the segmented list around its tabs. */
32
- segmentPad: string
33
- /** Body text inside controls. */
34
- text: string
35
- /** Horizontal padding of bounded controls (select trigger, inputs). */
36
- px: string
37
- /** Horizontal padding of list/menu rows, which sit inside a padded popup
38
- * or group and need less inset than a bounded control. */
39
- itemPx: string
40
- /** Gap between an icon / control glyph and its label, and between
41
- * neighbouring controls in a row (toolbars, filter bars, button
42
- * clusters). Density is spacing as much as control height, so the
43
- * compact step halves it. */
44
- gap: string
45
- /** Glyph size in px: leading/trailing icons inside controls, and the
46
- * checkbox square / radio circle. */
47
- icon: number
48
- }
49
-
50
- const sizeMap: Record<SizeVariant, SizeClasses> = {
51
- // 36px — the default control height. Matches a 13px label with comfortable
52
- // breathing room and keeps controls a workable pointer target.
53
- default: {
54
- variant: 'default',
55
- control: 'h-9',
56
- controlHeight: 36,
57
- segmentItem: 'h-7',
58
- segmentPad: 'p-1',
59
- text: 'text-body',
60
- px: 'px-3',
61
- itemPx: 'px-2',
62
- gap: 'gap-2',
63
- icon: 16,
64
- },
65
- // 28px — the compact height for dense surfaces: filter bars, toolbars,
66
- // table headers, sidebars. One step down in text (12px) and icon (14px)
67
- // so the whole control shrinks together, not just its box.
68
- compact: {
69
- variant: 'compact',
70
- control: 'h-7',
71
- controlHeight: 28,
72
- segmentItem: 'h-6',
73
- segmentPad: 'p-0.5',
74
- text: 'text-body-compact',
75
- px: 'px-2.5',
76
- itemPx: 'px-1.5',
77
- gap: 'gap-1',
78
- icon: 14,
79
- },
80
- }
81
-
82
- /** One role of the type scale: px per ladder step. */
83
- interface TypeScaleStep {
84
- default: number
85
- compact: number
86
- }
87
-
88
- /**
89
- * Role-based type scale, per ladder step (px values).
90
- *
91
- * The default column is the system as shipped; the compact column steps each
92
- * role down one notch so dense regions read as a smaller sibling of the same
93
- * hierarchy, not a squeezed copy. `body`, `caption`, and `subtitle` are what
94
- * the sized components already render through `SizeClasses.text` and their
95
- * compact conditionals; `display` and `title` are the page-level roles
96
- * for consumers composing their own screens.
97
- */
98
- const typeScale = {
99
- /** Page titles. */
100
- display: { default: 28, compact: 24 },
101
- /** Section headings, dialog titles. */
102
- title: { default: 16, compact: 15 },
103
- /** Card titles, chat bubbles, emphasized rows. */
104
- subtitle: { default: 14, compact: 13 },
105
- /** Control labels and body copy — `SizeClasses.text`. */
106
- body: { default: 13, compact: 12 },
107
- /** Secondary text: descriptions, meta rows, errors, eyebrows and group
108
- * labels (the former overline role — an uppercase or muted caption). */
109
- caption: { default: 12, compact: 11 },
110
- } as const satisfies Record<string, TypeScaleStep>
111
-
112
- type TypeScaleRole = keyof typeof typeScale
113
-
114
- export type { SizeClasses, SizeVariant, TypeScaleRole, TypeScaleStep }
115
- export { sizeMap, typeScale }
package/lib/slot.ts DELETED
@@ -1,115 +0,0 @@
1
- /*
2
- * Local addition (not part of Fluid Functionalism): the trigger / close slot
3
- * shape FF's Dialog uses, shared by every overlay part that wraps a control.
4
- * Both spellings compose: `render={<Button/>}` (Base UI's composition API) or
5
- * Radix-style `asChild` with a single child element. `cloneSlot` / `mergeSlotProps` /
6
- * `composeRefs` are the other half: a wrapper clones its single child with its own props
7
- * merged in, as Radix's Slot does (the child's props win, handlers chain, `className`
8
- * joins, `style` merges, refs compose). `slotId` hands a slot element's `id` to the Base UI part
9
- * that wraps it, so the part registers that id rather than a generated one.
10
- */
11
-
12
- import {
13
- type ButtonHTMLAttributes,
14
- type CSSProperties,
15
- cloneElement,
16
- isValidElement,
17
- type MutableRefObject,
18
- type ReactElement,
19
- type ReactNode,
20
- type Ref,
21
- version,
22
- } from 'react'
23
-
24
- interface SlotProps extends ButtonHTMLAttributes<HTMLButtonElement> {
25
- /** The element that becomes the control, e.g. a Button. Children fill it when it has none of its own. */
26
- render?: ReactElement
27
- /** Compose onto the single child instead. Both spellings work in both flavors. Defaults to `false`. */
28
- asChild?: boolean
29
- /** Control content when there is no render element, or the content of a render element that has none of its own. */
30
- children?: ReactNode
31
- /** Whether the render element is a native `<button>`: pass `false` for a `<div>` or a link, so Base UI adds the button role and keyboard handling itself. Parts not built on a Base UI button ignore it. Defaults to `true`. */
32
- nativeButton?: boolean
33
- }
34
-
35
- /**
36
- * The element a slot part renders: `render`, or the single child with `asChild`, or undefined for the
37
- * part's own button. Base UI semantics: `children` fill a render element that has no children of its own
38
- * (`render={<div/>}` + children → the div gets them); a render element's own children win.
39
- */
40
- function slotRender(render: ReactElement | undefined, asChild: boolean | undefined, children: ReactNode) {
41
- if (render) {
42
- const own = (render.props as { children?: ReactNode }).children
43
- return children === undefined || own !== undefined ? render : cloneElement(render, undefined, children)
44
- }
45
- return asChild && isValidElement(children) ? children : undefined
46
- }
47
-
48
- /**
49
- * The `id` a Base UI part should register: the slot element's own `id` when it has one, else the part's.
50
- * Base UI merges a render element's props over its own, so an element `id` lands on the DOM node
51
- * regardless; passing it to the part as well makes Base UI track that same id (a trigger's id is how its
52
- * menu or popup finds it) instead of a generated one that no element carries.
53
- */
54
- function slotId(element: unknown, id?: string): string | undefined {
55
- const own = isValidElement(element) ? (element.props as { id?: unknown }).id : undefined
56
- return typeof own === 'string' ? own : id
57
- }
58
-
59
- /** Calls every ref: callback refs with the node, object refs by assigning it. */
60
- function composeRefs<T>(...refs: (Ref<T> | undefined | null)[]): (node: T | null) => void {
61
- return node => {
62
- for (const ref of refs) {
63
- if (typeof ref === 'function') ref(node)
64
- else if (ref) (ref as MutableRefObject<T | null>).current = node
65
- }
66
- }
67
- }
68
-
69
- /** A child's ref: React 19 keeps it in `props.ref`, React 18 on the element; each warns when read the other way. */
70
- const REACT_19 = parseInt(version, 10) >= 19
71
-
72
- function elementRef(element: ReactElement): Ref<unknown> | undefined {
73
- if (REACT_19) return (element.props as { ref?: Ref<unknown> }).ref
74
- return (element as { ref?: Ref<unknown> }).ref
75
- }
76
-
77
- /**
78
- * Props for a slotted child, with Radix Slot semantics: the child's props win,
79
- * `on*` handlers are chained (the child's first), `className` is joined and
80
- * `style` is merged (the child's declarations win).
81
- */
82
- function mergeSlotProps(slotProps: Record<string, unknown>, childProps: Record<string, unknown>) {
83
- const merged: Record<string, unknown> = { ...slotProps, ...childProps }
84
- for (const key of Object.keys(childProps)) {
85
- const own = childProps[key]
86
- const given = slotProps[key]
87
- if (/^on[A-Z]/.test(key)) {
88
- if (typeof given !== 'function') continue
89
- if (typeof own === 'function') {
90
- merged[key] = (...args: unknown[]) => {
91
- own(...args)
92
- given(...args)
93
- }
94
- } else merged[key] = given
95
- } else if (key === 'style') {
96
- merged[key] = { ...(given as CSSProperties | undefined), ...(own as CSSProperties | undefined) }
97
- } else if (key === 'className') {
98
- merged[key] = [given, own].filter(Boolean).join(' ')
99
- }
100
- }
101
- return merged
102
- }
103
-
104
- /**
105
- * Clones `child` with the slot's props merged in (see `mergeSlotProps`) and the slot's ref composed
106
- * with the child's own, the way Radix's `Slot` composes onto its single child.
107
- */
108
- function cloneSlot(child: ReactElement, slotProps: Record<string, unknown> = {}, slotRef?: Ref<unknown>) {
109
- const own = elementRef(child)
110
- const props = mergeSlotProps(slotProps, child.props as Record<string, unknown>)
111
- return cloneElement(child, slotRef || own ? { ...props, ref: composeRefs(slotRef, own) } : props)
112
- }
113
-
114
- export type { SlotProps }
115
- export { cloneSlot, composeRefs, mergeSlotProps, slotId, slotRender }
package/lib/springs.ts DELETED
@@ -1,62 +0,0 @@
1
- /*
2
- * Vendored from Fluid Functionalism — `registry/default/lib/springs.ts` at
3
- * github.com/mickadesign/fluid-functionalism@b3587bdbd83fc66c2a6aae3817ffb856cb09260b
4
- * (fluidfunctionalism.com). MIT License © 2026 Micka Touillaud — see
5
- * LICENSE.fluid-functionalism in this package.
6
- *
7
- * Local modifications:
8
- * - `goo`: the morph engine's own tier (lib/use-morph.ts) for the goo effect,
9
- * slower than `slow` so the liquid neck stays on screen long enough to read.
10
- * It lands in about 200ms with a little bounce and closes on a spring, not
11
- * a tween, so the neck reforms on the way back.
12
- * - `exitFallbackMs` also reads a spring exit's `visualDuration`.
13
- */
14
-
15
- // Motion tokens. Each tier's value is the ENTER transition — a critically
16
- // damped spring, except the largest tier which keeps a little bounce. Its
17
- // `.exit` is the matching EXIT transition — a plain tween, no bounce, one tier
18
- // quicker — so a dismissal reads as crisp and final rather than replaying the
19
- // entrance in reverse.
20
- //
21
- // transition={spring.fast} // enter
22
- // exit={{ opacity: 0, transition: spring.fast.exit }} // leave
23
- //
24
- // The bigger the thing that moves, the slower the spring. Never hand-write a
25
- // duration — always reach for a tier.
26
- export const spring = {
27
- fast: {
28
- type: 'spring' as const,
29
- duration: 0.08,
30
- bounce: 0,
31
- exit: { duration: 0.06 },
32
- },
33
- // Critically damped: same perceived speed as a bouncier tier, but lands
34
- // exactly with no overshoot — for short travel and panels/sheets that must
35
- // settle precisely (dropdowns, tabs, drawers, merged selection backgrounds).
36
- moderate: {
37
- type: 'spring' as const,
38
- duration: 0.16,
39
- bounce: 0,
40
- exit: { duration: 0.12 },
41
- },
42
- slow: {
43
- type: 'spring' as const,
44
- duration: 0.24,
45
- bounce: 0.12,
46
- exit: { duration: 0.16 },
47
- },
48
- goo: {
49
- type: 'spring' as const,
50
- visualDuration: 0.25,
51
- bounce: 0.15,
52
- exit: { type: 'spring' as const, visualDuration: 0.2, bounce: 0 },
53
- },
54
- } as const
55
-
56
- // Fallback delay (ms) for deferred-unmount timers that guard an exit tween:
57
- // popups keep their portal mounted until onAnimationComplete fires, but a
58
- // throttled/background tab can stall the animation, so a timer force-unmounts
59
- // after the tier's exit duration plus a safety buffer. Deriving it here keeps
60
- // the timers in step with the tokens above.
61
- export const exitFallbackMs = (tier: { exit: { duration: number } | { visualDuration: number } }) =>
62
- Math.round(('duration' in tier.exit ? tier.exit.duration : tier.exit.visualDuration) * 1000) + 100
@@ -1,58 +0,0 @@
1
- /*
2
- * Vendored from Fluid Functionalism — `registry/default/lib/surface-classes.ts` at
3
- * github.com/mickadesign/fluid-functionalism@b3587bdbd83fc66c2a6aae3817ffb856cb09260b
4
- * (fluidfunctionalism.com). MIT License © 2026 Micka Touillaud — see
5
- * LICENSE.fluid-functionalism in this package.
6
- *
7
- * Local modifications:
8
- * - `SURFACE_HOVER_BG`, `SURFACE_HOVER_SHADOW` and `surfaceHoverClasses`
9
- * dropped — only the omitted Sidebar used them.
10
- * - The literal-lookup rationale below applies to UnoCSS unchanged: its
11
- * extractor also only sees whole class names in source.
12
- */
13
-
14
- /**
15
- * Static lookup tables for surface tokens.
16
- *
17
- * Tailwind v4's static scanner only generates utility classes for literal
18
- * strings it sees in source. Template-literal class names like
19
- * `bg-surface-${level}` are invisible to the scanner, so the matching
20
- * utility never gets generated and the background renders transparent.
21
- *
22
- * Use these maps when picking a surface level at runtime:
23
- *
24
- * <div className={surfaceClasses(level)} />
25
- *
26
- * Each entry below contains the literal class name, which is enough for
27
- * Tailwind to detect and emit the utility.
28
- */
29
-
30
- export const SURFACE_BG: Record<number, string> = {
31
- 1: 'bg-surface-1',
32
- 2: 'bg-surface-2',
33
- 3: 'bg-surface-3',
34
- 4: 'bg-surface-4',
35
- 5: 'bg-surface-5',
36
- 6: 'bg-surface-6',
37
- 7: 'bg-surface-7',
38
- 8: 'bg-surface-8',
39
- }
40
-
41
- export const SURFACE_SHADOW: Record<number, string> = {
42
- 1: 'shadow-surface-1',
43
- 2: 'shadow-surface-2',
44
- 3: 'shadow-surface-3',
45
- 4: 'shadow-surface-4',
46
- 5: 'shadow-surface-5',
47
- 6: 'shadow-surface-6',
48
- 7: 'shadow-surface-7',
49
- 8: 'shadow-surface-8',
50
- }
51
-
52
- export function surfaceClasses(bgLevel: number, shadowLevel: number = bgLevel): string {
53
- // Round after clamping so a fractional level can't index out of the lookup
54
- // tables (which would render "undefined undefined").
55
- const bg = Math.round(Math.max(1, Math.min(8, bgLevel)))
56
- const shadow = Math.round(Math.max(1, Math.min(8, shadowLevel)))
57
- return `${SURFACE_BG[bg]} ${SURFACE_SHADOW[shadow]}`
58
- }
@@ -1,21 +0,0 @@
1
- /*
2
- * Vendored from Fluid Functionalism — `registry/default/lib/surface-context.tsx` at
3
- * github.com/mickadesign/fluid-functionalism@b3587bdbd83fc66c2a6aae3817ffb856cb09260b
4
- * (fluidfunctionalism.com). MIT License © 2026 Micka Touillaud — see
5
- * LICENSE.fluid-functionalism in this package.
6
- *
7
- * Local modifications:
8
- * - `"use client"` directive dropped (no RSC here).
9
- */
10
-
11
- import { createContext, type ReactNode, useContext } from 'react'
12
-
13
- const SurfaceContext = createContext<number>(1)
14
-
15
- export function useSurface(): number {
16
- return useContext(SurfaceContext)
17
- }
18
-
19
- export function SurfaceProvider({ value, children }: { value: number; children: ReactNode }) {
20
- return <SurfaceContext.Provider value={Math.max(1, Math.min(8, value))}>{children}</SurfaceContext.Provider>
21
- }
@@ -1,44 +0,0 @@
1
- import { useCallback, useRef, useState } from 'react'
2
-
3
- /*
4
- * Local addition (not part of Fluid Functionalism): controlled + uncontrolled
5
- * state the way Base UI components take it. Several FF wrappers are
6
- * controlled-only (`checked`, `value`, `selectedIndex`, …); each gains a
7
- * `default*` counterpart backed by this hook, so a component works with no
8
- * state of its own in the caller.
9
- *
10
- * The component is controlled while `value !== undefined`: it renders
11
- * `value` and only reports changes through `onChange`. Otherwise it keeps its
12
- * own state, seeded from `defaultValue` (read once, like `useState`), and
13
- * still reports every change. The setter is stable, accepts an updater
14
- * function, and skips no-op updates (`Object.is`).
15
- */
16
- export function useControllableState<T>(
17
- value: T | undefined,
18
- defaultValue: T,
19
- onChange?: (value: T) => void,
20
- ): [T, (next: T | ((prev: T) => T)) => void] {
21
- const [internal, setInternal] = useState<T>(defaultValue)
22
- const controlled = value !== undefined
23
- const current = controlled ? (value as T) : internal
24
-
25
- // Latest render's values, so the stable setter never reads a stale closure
26
- // and back-to-back updater calls chain off each other.
27
- const currentRef = useRef(current)
28
- currentRef.current = current
29
- const controlledRef = useRef(controlled)
30
- controlledRef.current = controlled
31
- const onChangeRef = useRef(onChange)
32
- onChangeRef.current = onChange
33
-
34
- const setValue = useCallback((next: T | ((prev: T) => T)) => {
35
- const prev = currentRef.current
36
- const resolved = typeof next === 'function' ? (next as (prev: T) => T)(prev) : next
37
- if (Object.is(resolved, prev)) return
38
- currentRef.current = resolved
39
- if (!controlledRef.current) setInternal(resolved)
40
- onChangeRef.current?.(resolved)
41
- }, [])
42
-
43
- return [current, setValue]
44
- }