@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
@@ -1,535 +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/default/table.tsx` @ b3587bdbd83fc66c2a6aae3817ffb856cb09260b
5
- * MIT License © 2026 Micka Touillaud — fluidfunctionalism.com (notice: LICENSE.fluid-functionalism)
6
- * Local modifications:
7
- * - `"use client"` directive dropped (no RSC here).
8
- * - `@/lib/*`, `@/hooks/*` and `@/components/ui/fluid-hover-highlight`
9
- * imports rewritten to relative `../../lib/*` paths, except `SizeProvider`
10
- * → `../../primitives/sizes`.
11
- * - Compound API: the parts hang off the root as statics (`Table.Header`,
12
- * `Table.Body`, `Table.Row`, `Table.Head`, `Table.Cell`) via
13
- * `Object.assign`; the root is cast to `TableComponent` so TS consumers see
14
- * the statics. The upstream named exports are kept.
15
- * - `TableProps` members carry the FF docs API-table descriptions, so modo's
16
- * parser lists them.
17
- * - `TableProps` / `TableRowProps` type exports added.
18
- * - TSDoc with the FF docs page's examples added above the root;
19
- * `export default Table` added.
20
- * - Styling reads DS tokens (AGENTS.md styling): inline
21
- * `fontVariationSettings` → `weight-*`; `duration-80|120|160` and
22
- * tier-length JS durations → `duration-<tier>` / `spring.*`.
23
- * - Local additions (additive; existing props unchanged):
24
- * - `Table.Footer` (`<tfoot>`, its rows stay out of the hover and keep their
25
- * border), `Table.Caption` (`<caption>` below the table) and `Table.Empty`
26
- * (one row across every column for an empty or loading state).
27
- * - Footer rows keep their border when the first body row is lit (an
28
- * unindexed row elsewhere still hides it, as upstream).
29
- * - Sortable heads: `Table.Head` `sortDirection` / `defaultSortDirection` /
30
- * `onSort` renders a button with `aria-sort` whose arrow crossfades
31
- * between up-down, up and down (the icon swap recipe in the skill's
32
- * motion.md); the arrows come from the icon context.
33
- * - `stacked` on `Table`: below the `md` breakpoint the header hides and
34
- * every row becomes a two-column grid of its cells, each led by its
35
- * `Table.Cell` `label`; `stacked={false}` on a `Table.Header` or
36
- * `Table.Row` keeps that part tabular.
37
- * - `containerClassName` for the hover container around the `<table>`
38
- * (e.g. `overflow-x-auto`).
39
- * - Body rows without an `index` are numbered in document order
40
- * (`lib/row-order`, as in Dropdown): the table numbers them across its
41
- * bodies, `Table.Header` / `Table.Footer` rows stay out, and an explicit
42
- * `index` still wins. So a wrapper rendering rows needs no counter.
43
- * - Stacked cells align their content to the start (`items-start`), so a
44
- * value keeps its own width instead of stretching across the card.
45
- * - A row's weight follows its section (body rows regular, header and footer
46
- * rows semibold), not whether it has an index yet: unindexed rows get theirs
47
- * in the server HTML, so nothing changes weight on hydration.
48
- * - Only header rows give up their border to a lit first row; any other row
49
- * without an index keeps it.
50
- * - Stacked values read in the primary text colour (labels stay muted); the
51
- * tabular layout from `md` up is unchanged.
52
- */
53
-
54
- import { motion } from 'motion/react'
55
- import {
56
- createContext,
57
- type ForwardRefExoticComponent,
58
- forwardRef,
59
- type HTMLAttributes,
60
- type ReactNode,
61
- type RefAttributes,
62
- type TdHTMLAttributes,
63
- type ThHTMLAttributes,
64
- useContext,
65
- useMemo,
66
- useRef,
67
- } from 'react'
68
- import { FluidHoverHighlight } from '../../lib/fluid-hover-highlight'
69
- import { type IconName, useIcon } from '../../lib/icon-context'
70
- import { useReduceMotion } from '../../lib/reduced-motion'
71
- import { RowOrderContext, useRowOrder, useRowSlot } from '../../lib/row-order'
72
- import { type SizeVariant, useSize } from '../../lib/size-context'
73
- import { spring } from '../../lib/springs'
74
- import { useControllableState } from '../../lib/use-controllable-state'
75
- import { useFluidHover, useRegisterFluidHoverItem } from '../../lib/use-fluid-hover'
76
- import { cn } from '../../lib/utils'
77
- import { SizeProvider } from '../../primitives/sizes'
78
-
79
- // ── Context ──────────────────────────────────────────────
80
-
81
- interface TableContextValue {
82
- registerItem: (index: number, element: HTMLElement | null) => void
83
- activeIndex: number | null
84
- stacked: boolean
85
- }
86
-
87
- const TableContext = createContext<TableContextValue | null>(null)
88
-
89
- // Local: which section a row sits in, so footer rows stay out of the hover's border logic.
90
- type TableSection = 'header' | 'body' | 'footer'
91
-
92
- const TableSectionContext = createContext<TableSection>('body')
93
-
94
- // Local: whether the surrounding part stacks on small screens (`stacked={false}` opts a part out).
95
- const StackedContext = createContext<boolean | null>(null)
96
-
97
- function useStacked(own?: boolean) {
98
- const table = useContext(TableContext)?.stacked ?? false
99
- const part = useContext(StackedContext)
100
- return table && (own ?? part ?? true)
101
- }
102
-
103
- // ── Table ────────────────────────────────────────────────
104
-
105
- interface TableProps extends HTMLAttributes<HTMLTableElement> {
106
- /** `Table.Header` and `Table.Body` children. */
107
- children: ReactNode
108
- /** Pins the table's rows to one step of the size ladder (default 36px, compact 28px — see Sizes). Defaults to the surrounding SizeProvider, else `"default"`. */
109
- size?: SizeVariant
110
- /** Below the `md` breakpoint, hide the header and lay each row out as a two-column grid of its cells, each led by its `label`. `stacked={false}` on a `Table.Header` or `Table.Row` keeps that part tabular. Defaults to `false`. */
111
- stacked?: boolean
112
- /** Classes for the hover container around the `<table>`, e.g. `overflow-x-auto` for wide tables. */
113
- containerClassName?: string
114
- }
115
-
116
- /** The root plus its compound parts, typed so `<Table.Row>` type-checks. */
117
- type TableComponent = ForwardRefExoticComponent<TableProps & RefAttributes<HTMLTableElement>> & {
118
- Header: typeof TableHeader
119
- Body: typeof TableBody
120
- Row: typeof TableRow
121
- Head: typeof TableHead
122
- Cell: typeof TableCell
123
- Footer: typeof TableFooter
124
- Caption: typeof TableCaption
125
- Empty: typeof TableEmpty
126
- }
127
-
128
- /**
129
- * Data table with row hover effects and semantic markup.
130
- *
131
- * A plain `<table>` whose body rows share one fluid hover highlight: the
132
- * background glides from row to row under the pointer, the row borders next
133
- * to the lit row fade out so it reads as one pill, and the lit row's cells
134
- * brighten from muted to foreground. Header cells render semibold, body
135
- * cells regular, with the weight change width-compensated. `size` pins every
136
- * row to one step of the size ladder; otherwise the table follows the
137
- * surrounding SizeProvider.
138
- *
139
- * A head with `sortDirection` (or `defaultSortDirection`, or `onSort`)
140
- * becomes a sort button: a press cycles ascending, descending and unsorted,
141
- * reporting the next direction through `onSort`, and its arrow crossfades
142
- * into the new one. `stacked` turns rows into two-column cards on small
143
- * screens, each cell led by its `label`.
144
- *
145
- * Statics:
146
- * - `Table.Header` — `<thead>`; `stacked={false}` keeps it visible on small
147
- * screens.
148
- * - `Table.Body` — `<tbody>`.
149
- * - `Table.Footer` — `<tfoot>`, for totals: its rows render semibold and stay
150
- * out of the hover.
151
- * - `Table.Row` — `<tr>`: body rows join the hover highlight, numbered in
152
- * document order (an explicit `index`, from 0, still wins); header and
153
- * footer rows stay out. `stacked={false}` keeps the row tabular.
154
- * - `Table.Head` — `<th>`: `sortDirection` (`'asc'`, `'desc'` or `false`),
155
- * `defaultSortDirection`, `onSort`.
156
- * - `Table.Cell` — `<td>`: `label`, shown above the value while stacked.
157
- * - `Table.Caption` — `<caption>`, a muted line below the table.
158
- * - `Table.Empty` — one row across `colSpan` columns, for an empty or loading
159
- * state.
160
- *
161
- * Each forwards its ref and native attributes.
162
- *
163
- * @example {@include ./examples.mdx}
164
- */
165
- const Table = forwardRef<HTMLTableElement, TableProps>(
166
- ({ children, size, stacked = false, containerClassName, className, ...props }, ref) => {
167
- const containerRef = useRef<HTMLDivElement>(null)
168
- const sizeClasses = useSize(size)
169
-
170
- const hover = useFluidHover(containerRef)
171
- const { activeIndex, handlers, registerItem } = hover
172
- // Local: body rows without an `index` take their place in document order.
173
- const rowOrder = useRowOrder()
174
-
175
- const contextValue = useMemo(() => ({ registerItem, activeIndex, stacked }), [registerItem, activeIndex, stacked])
176
-
177
- const table = (
178
- <TableContext.Provider value={contextValue}>
179
- <div
180
- ref={containerRef}
181
- className={cn('relative', containerClassName)}
182
- onMouseEnter={handlers.onMouseEnter}
183
- onMouseMove={handlers.onMouseMove}
184
- onMouseLeave={handlers.onMouseLeave}
185
- onClick={handlers.onClick}
186
- >
187
- {/* Hover background */}
188
- <FluidHoverHighlight hover={hover} />
189
-
190
- <table ref={ref} className={cn('w-full border-collapse', sizeClasses.text, className)} {...props}>
191
- <RowOrderContext.Provider value={rowOrder}>{children}</RowOrderContext.Provider>
192
- </table>
193
- </div>
194
- </TableContext.Provider>
195
- )
196
-
197
- // A size prop pins every cell to one ladder step (cells read the context).
198
- return size ? <SizeProvider size={size}>{table}</SizeProvider> : table
199
- },
200
- ) as TableComponent
201
-
202
- Table.displayName = 'Table'
203
-
204
- // ── TableHeader ──────────────────────────────────────────
205
-
206
- interface TableHeaderProps extends HTMLAttributes<HTMLTableSectionElement> {
207
- /** `false` keeps the header showing on small screens in a `stacked` table. Defaults to the table's `stacked`. */
208
- stacked?: boolean
209
- }
210
-
211
- const TableHeader = forwardRef<HTMLTableSectionElement, TableHeaderProps>(
212
- ({ stacked: own, className, ...props }, ref) => {
213
- const stacked = useStacked(own)
214
- return (
215
- <TableSectionContext.Provider value="header">
216
- <RowOrderContext.Provider value={null}>
217
- <StackedContext.Provider value={own ?? null}>
218
- <thead ref={ref} className={cn(stacked && 'hidden md:table-header-group', className)} {...props} />
219
- </StackedContext.Provider>
220
- </RowOrderContext.Provider>
221
- </TableSectionContext.Provider>
222
- )
223
- },
224
- )
225
-
226
- TableHeader.displayName = 'TableHeader'
227
-
228
- // ── TableBody ────────────────────────────────────────────
229
-
230
- const TableBody = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(
231
- ({ className, ...props }, ref) => <tbody ref={ref} className={cn('', className)} {...props} />,
232
- )
233
-
234
- TableBody.displayName = 'TableBody'
235
-
236
- // ── TableFooter (local) ──────────────────────────────────
237
-
238
- const TableFooter = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(
239
- ({ className, ...props }, ref) => (
240
- <TableSectionContext.Provider value="footer">
241
- <RowOrderContext.Provider value={null}>
242
- <tfoot ref={ref} className={cn('[&_td]:text-foreground', className)} {...props} />
243
- </RowOrderContext.Provider>
244
- </TableSectionContext.Provider>
245
- ),
246
- )
247
-
248
- TableFooter.displayName = 'TableFooter'
249
-
250
- // ── TableCaption (local) ─────────────────────────────────
251
-
252
- const TableCaption = forwardRef<HTMLTableCaptionElement, HTMLAttributes<HTMLTableCaptionElement>>(
253
- ({ className, ...props }, ref) => {
254
- const sizeClasses = useSize()
255
- return (
256
- <caption
257
- ref={ref}
258
- className={cn(
259
- 'caption-bottom pt-3 text-left text-muted-foreground',
260
- sizeClasses.variant === 'compact' ? 'text-caption-compact px-2.5' : 'text-caption px-3',
261
- className,
262
- )}
263
- {...props}
264
- />
265
- )
266
- },
267
- )
268
-
269
- TableCaption.displayName = 'TableCaption'
270
-
271
- // ── TableRow ─────────────────────────────────────────────
272
-
273
- interface TableRowProps extends HTMLAttributes<HTMLTableRowElement> {
274
- /** Position among the body rows, from 0. Body rows are numbered in document order without it; set it only to pin a row's place. Header and footer rows never join the hover. */
275
- index?: number
276
- /** `false` keeps this row tabular on small screens in a `stacked` table. Defaults to the table's `stacked`. */
277
- stacked?: boolean
278
- }
279
-
280
- const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(
281
- ({ index: indexProp, stacked: own, className, style, ...props }, ref) => {
282
- const internalRef = useRef<HTMLTableRowElement>(null)
283
- const ctx = useContext(TableContext)
284
- const section = useContext(TableSectionContext)
285
- const stacked = useStacked(own)
286
- // Local: an unindexed body row takes its document-order place; header and footer reset the order to none.
287
- const { index } = useRowSlot(internalRef, indexProp)
288
-
289
- useRegisterFluidHoverItem(ctx?.registerItem, index, internalRef)
290
-
291
- const isBodyRow = index !== undefined
292
- const activeIdx = ctx?.activeIndex ?? null
293
- // The header's last border runs along row 0, so it melts into the lit pill; no other unindexed row does.
294
- const hideBorder =
295
- activeIdx !== null &&
296
- ((isBodyRow && (index === activeIdx || index === activeIdx - 1)) ||
297
- (!isBodyRow && section === 'header' && activeIdx === 0))
298
-
299
- const row = (
300
- <tr
301
- ref={node => {
302
- ;(internalRef as React.MutableRefObject<HTMLTableRowElement | null>).current = node
303
- if (typeof ref === 'function') ref(node)
304
- else if (ref) (ref as React.MutableRefObject<HTMLTableRowElement | null>).current = node
305
- }}
306
- data-fluid-hover-index={index}
307
- className={cn(
308
- 'group/row relative z-10 border-b transition-[border-color] duration-fast',
309
- hideBorder ? 'border-transparent' : 'border-accent/40',
310
- isBodyRow && activeIdx === index && 'is-active',
311
- // By section: an unindexed body row has no index until the first layout pass, after the server HTML.
312
- section === 'body' || isBodyRow ? 'weight-normal' : 'weight-semibold',
313
- stacked && 'grid grid-cols-2 md:table-row',
314
- className,
315
- )}
316
- style={style}
317
- {...props}
318
- />
319
- )
320
-
321
- // A row's own `stacked` reaches its cells.
322
- return own === undefined ? row : <StackedContext.Provider value={own}>{row}</StackedContext.Provider>
323
- },
324
- )
325
-
326
- TableRow.displayName = 'TableRow'
327
-
328
- // ── TableHead ────────────────────────────────────────────
329
-
330
- // Local: the sortable head's arrow, one glyph per direction crossfading in one icon cell.
331
- type SortDirection = 'asc' | 'desc' | false
332
-
333
- const SORT_ICONS: [SortDirection, IconName][] = [
334
- [false, 'arrow-up-down'],
335
- ['asc', 'arrow-up'],
336
- ['desc', 'arrow-down'],
337
- ]
338
-
339
- const NEXT_SORT: Record<'asc' | 'desc' | 'none', SortDirection> = { none: 'asc', asc: 'desc', desc: false }
340
-
341
- const ARIA_SORT = { asc: 'ascending', desc: 'descending', none: 'none' } as const
342
-
343
- const SHOWN = { opacity: 1, scale: 1, filter: 'blur(0px)' }
344
- const HIDDEN = { opacity: 0, scale: 0.6, filter: 'blur(4px)' }
345
- const enter = { type: 'tween' as const, duration: spring.fast.duration, ease: 'easeOut' as const }
346
- const leave = { type: 'tween' as const, ...spring.fast.exit, ease: 'easeIn' as const }
347
-
348
- function SortGlyph({
349
- direction,
350
- glyph,
351
- current,
352
- size,
353
- }: {
354
- direction: SortDirection
355
- glyph: IconName
356
- current: SortDirection
357
- size: number
358
- }) {
359
- const Icon = useIcon(glyph)
360
- const reduced = useReduceMotion()
361
- const shown = direction === current
362
- return (
363
- <motion.span
364
- className="col-start-1 row-start-1 flex"
365
- initial={false}
366
- animate={shown ? SHOWN : reduced ? { opacity: 0 } : HIDDEN}
367
- transition={shown ? enter : leave}
368
- >
369
- <Icon
370
- size={size}
371
- strokeWidth={1.5}
372
- className={cn('transition-[stroke-width] duration-fast group-hover/sort:stroke-2', current && 'stroke-2')}
373
- />
374
- </motion.span>
375
- )
376
- }
377
-
378
- interface TableHeadProps extends ThHTMLAttributes<HTMLTableCellElement> {
379
- /** Controlled sort direction of this column: `'asc'`, `'desc'` or `false` (unsorted). Setting it makes the head a sort button. Pair with `onSort`. */
380
- sortDirection?: SortDirection
381
- /** Initial sort direction, for a head that keeps its own; setting it makes the head a sort button. */
382
- defaultSortDirection?: SortDirection
383
- /** Called with the next direction when the head is pressed: unsorted → `'asc'` → `'desc'` → `false`. Setting it makes the head a sort button. */
384
- onSort?: (direction: SortDirection) => void
385
- }
386
-
387
- const TableHead = forwardRef<HTMLTableCellElement, TableHeadProps>(
388
- ({ sortDirection, defaultSortDirection, onSort, className, children, ...props }, ref) => {
389
- const sizeClasses = useSize()
390
- const [direction, setDirection] = useControllableState(sortDirection, defaultSortDirection ?? false, onSort)
391
- const sortable = sortDirection !== undefined || defaultSortDirection !== undefined || onSort !== undefined
392
-
393
- return (
394
- <th
395
- ref={ref}
396
- aria-sort={sortable ? ARIA_SORT[direction || 'none'] : undefined}
397
- className={cn(
398
- 'text-left text-foreground',
399
- // py + line box lands the row on the ladder (36px / 28px).
400
- sizeClasses.variant === 'compact' ? 'px-2.5 py-[5px]' : 'px-3 py-2',
401
- className,
402
- )}
403
- {...props}
404
- >
405
- {sortable ? (
406
- <button
407
- type="button"
408
- onClick={() => setDirection(NEXT_SORT[direction || 'none'])}
409
- className={cn(
410
- 'group/sort -mx-1 inline-flex cursor-pointer items-center rounded-glyph px-1 text-inherit outline-none focus-visible:ring-1 focus-visible:ring-focus-ring',
411
- sizeClasses.gap,
412
- )}
413
- >
414
- {children}
415
- <span
416
- aria-hidden="true"
417
- className={cn(
418
- 'grid shrink-0 transition-[color] duration-fast group-hover/sort:text-foreground',
419
- direction ? 'text-foreground' : 'text-muted-foreground',
420
- )}
421
- >
422
- {SORT_ICONS.map(([glyphDirection, glyph]) => (
423
- <SortGlyph
424
- key={glyph}
425
- direction={glyphDirection}
426
- glyph={glyph}
427
- current={direction}
428
- size={sizeClasses.icon}
429
- />
430
- ))}
431
- </span>
432
- </button>
433
- ) : (
434
- children
435
- )}
436
- </th>
437
- )
438
- },
439
- )
440
-
441
- TableHead.displayName = 'TableHead'
442
-
443
- // ── TableCell ────────────────────────────────────────────
444
-
445
- interface TableCellProps extends TdHTMLAttributes<HTMLTableCellElement> {
446
- /** The column's name, shown above the value while a `stacked` table lays its rows out as cards. */
447
- label?: ReactNode
448
- }
449
-
450
- const TableCell = forwardRef<HTMLTableCellElement, TableCellProps>(({ label, className, children, ...props }, ref) => {
451
- const sizeClasses = useSize()
452
- const stacked = useStacked()
453
- return (
454
- <td
455
- ref={ref}
456
- className={cn(
457
- 'text-muted-foreground transition-colors duration-fast group-[.is-active]/row:text-foreground',
458
- sizeClasses.variant === 'compact' ? 'px-2.5 py-[5px]' : 'px-3 py-2',
459
- // Stacked, the label is the muted line and the value leads; from md the row is tabular again.
460
- stacked && 'flex flex-col items-start text-foreground md:table-cell md:text-muted-foreground',
461
- className,
462
- )}
463
- {...props}
464
- >
465
- {stacked && label != null && (
466
- <span
467
- className={cn(
468
- 'text-muted-foreground weight-normal md:hidden',
469
- sizeClasses.variant === 'compact' ? 'text-caption-compact' : 'text-caption',
470
- )}
471
- >
472
- {label}
473
- </span>
474
- )}
475
- {children}
476
- </td>
477
- )
478
- })
479
-
480
- TableCell.displayName = 'TableCell'
481
-
482
- // ── TableEmpty (local) ───────────────────────────────────
483
-
484
- interface TableEmptyProps extends HTMLAttributes<HTMLTableRowElement> {
485
- /** Number of columns the row spans: the table's column count. */
486
- colSpan: number
487
- /** What to say, or a loading indicator. */
488
- children?: ReactNode
489
- }
490
-
491
- const TableEmpty = forwardRef<HTMLTableRowElement, TableEmptyProps>(
492
- ({ colSpan, className, children, ...props }, ref) => {
493
- const sizeClasses = useSize()
494
- return (
495
- <tr ref={ref} className={cn('relative z-10', className)} {...props}>
496
- <td
497
- colSpan={colSpan}
498
- className={cn('h-24 px-3 text-center align-middle text-muted-foreground', sizeClasses.text)}
499
- >
500
- {children}
501
- </td>
502
- </tr>
503
- )
504
- },
505
- )
506
-
507
- TableEmpty.displayName = 'TableEmpty'
508
-
509
- // ── Compound parts ───────────────────────────────────────
510
-
511
- Object.assign(Table, {
512
- Header: TableHeader,
513
- Body: TableBody,
514
- Row: TableRow,
515
- Head: TableHead,
516
- Cell: TableCell,
517
- Footer: TableFooter,
518
- Caption: TableCaption,
519
- Empty: TableEmpty,
520
- })
521
-
522
- // ── Exports ──────────────────────────────────────────────
523
-
524
- export type {
525
- SortDirection,
526
- TableCellProps,
527
- TableEmptyProps,
528
- TableHeaderProps,
529
- TableHeadProps,
530
- TableProps,
531
- TableRowProps,
532
- }
533
- export { Table, TableBody, TableCaption, TableCell, TableEmpty, TableFooter, TableHead, TableHeader, TableRow }
534
-
535
- export default Table
@@ -1,61 +0,0 @@
1
- /*
2
- * Local addition (not part of Fluid Functionalism): a docs stage for the
3
- * sortable heads. Examples run no hooks, so the sorting lives here; a real
4
- * table sorts its data the same way (or hands the direction to TanStack).
5
- */
6
-
7
- import { useState } from 'react'
8
- import Table, { type SortDirection } from './index'
9
-
10
- const PEOPLE = [
11
- { name: 'Alice', role: 'Engineer', joined: 2019 },
12
- { name: 'Bob', role: 'Designer', joined: 2022 },
13
- { name: 'Carol', role: 'Manager', joined: 2017 },
14
- { name: 'Dan', role: 'Researcher', joined: 2021 },
15
- ]
16
-
17
- type Column = 'name' | 'role' | 'joined'
18
-
19
- const COLUMNS: { key: Column; label: string }[] = [
20
- { key: 'name', label: 'Name' },
21
- { key: 'role', label: 'Role' },
22
- { key: 'joined', label: 'Joined' },
23
- ]
24
-
25
- /** A table whose heads sort its rows: one column at a time, unsorted → ascending → descending → unsorted. */
26
- export default function SortDemo() {
27
- const [sort, setSort] = useState<{ column: Column; direction: SortDirection }>({ column: 'name', direction: 'asc' })
28
-
29
- const rows = [...PEOPLE]
30
- if (sort.direction) {
31
- const sign = sort.direction === 'asc' ? 1 : -1
32
- rows.sort((a, b) => (a[sort.column] > b[sort.column] ? sign : -sign))
33
- }
34
-
35
- return (
36
- <Table>
37
- <Table.Header>
38
- <Table.Row>
39
- {COLUMNS.map(({ key, label }) => (
40
- <Table.Head
41
- key={key}
42
- sortDirection={sort.column === key ? sort.direction : false}
43
- onSort={direction => setSort({ column: key, direction })}
44
- >
45
- {label}
46
- </Table.Head>
47
- ))}
48
- </Table.Row>
49
- </Table.Header>
50
- <Table.Body>
51
- {rows.map((person, i) => (
52
- <Table.Row key={person.name} index={i}>
53
- <Table.Cell>{person.name}</Table.Cell>
54
- <Table.Cell>{person.role}</Table.Cell>
55
- <Table.Cell>{person.joined}</Table.Cell>
56
- </Table.Row>
57
- ))}
58
- </Table.Body>
59
- </Table>
60
- )
61
- }
@@ -1,46 +0,0 @@
1
- import { Avatar as AvatarPrimitive } from "@base-ui/react/avatar";
2
- import { ComponentPropsWithoutRef, ForwardRefExoticComponent, ReactNode, RefAttributes } from "react";
3
- type SizeVariant = "default" | "compact";
4
- import { AvatarImageProps as AvatarImageProps_lpttqq } from "@base-ui/react";
5
- import { AvatarFallbackProps as AvatarFallbackProps_weg9cb } from "@base-ui/react";
6
- type AvatarImageProps = ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>;
7
- /** The picture. It fades in once loaded; until then, or if it fails, the fallback shows. */
8
- declare const AvatarImage: ForwardRefExoticComponent<Omit<Omit<AvatarImageProps_lpttqq, "ref"> & RefAttributes<HTMLImageElement>, "ref"> & RefAttributes<HTMLImageElement>>;
9
- type AvatarFallbackProps = ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>;
10
- /** Initials or an icon, shown while the image loads or when there is none. Empty, it shows a person glyph. */
11
- declare const AvatarFallback: ForwardRefExoticComponent<Omit<Omit<AvatarFallbackProps_weg9cb, "ref"> & RefAttributes<HTMLSpanElement>, "ref"> & RefAttributes<HTMLSpanElement>>;
12
- interface AvatarProps extends ComponentPropsWithoutRef<"span"> {
13
- /** Pins the avatar to one step of the size ladder (36px default, 28px compact). Defaults to the surrounding SizeProvider. */
14
- size?: SizeVariant;
15
- /** A circle for people; a square for teams, organizations and things, which takes the shape's item radius (rounded or pill). Defaults to `"circle"`. */
16
- shape?: "circle" | "square";
17
- /** Classes for the root: a size off the ladder (`size-5` in a dense row), a ground. */
18
- className?: string;
19
- /** `Avatar.Image` and `Avatar.Fallback`. */
20
- children?: ReactNode;
21
- }
22
- type AvatarComponent = ForwardRefExoticComponent<AvatarProps & RefAttributes<HTMLSpanElement>> & {
23
- Image: typeof AvatarImage;
24
- Fallback: typeof AvatarFallback;
25
- };
26
- /**
27
- * A picture of a person or a team, with initials or an icon when there is
28
- * none.
29
- *
30
- * The avatar is one control tall (36px, 28px compact), so it lines up with
31
- * the rows and buttons beside it, and follows the surrounding SizeProvider.
32
- * Base UI's Avatar tracks the image: until it has loaded, or when it fails,
33
- * the fallback shows on a neutral ground (the gray badge's accent); once it
34
- * lands it fades in over the fallback. A 1px inset edge keeps a pale picture from dissolving into the
35
- * surface. People are circles; `shape="square"` takes the shape context's
36
- * item radius for teams and things.
37
- *
38
- * Statics:
39
- * - `Avatar.Image` — the picture: `src`, `alt`, `onLoadingStatusChange`.
40
- * - `Avatar.Fallback` — initials or an icon; empty, a person glyph. `delay`
41
- * (ms) holds it back so a fast image never flashes it.
42
- *
43
- * @example {@include ./examples.mdx}
44
- */
45
- declare const Avatar: AvatarComponent;
46
- export { Avatar, AvatarFallback, AvatarFallbackProps, AvatarImage, AvatarImageProps, AvatarProps, Avatar as default };
@@ -1,19 +0,0 @@
1
- import {
2
- AvatarImage2,
3
- AvatarFallback2,
4
- Avatar2,
5
- avatar_default
6
- } from "../../shared/components-rtadhd9j.js";
7
- import"../../shared/components-jqpefjsn.js";
8
- import"../../shared/components-dcc02hs2.js";
9
- import"../../shared/components-h83az0bz.js";
10
- import"../../shared/components-34txk9rj.js";
11
- import"../../shared/components-71nbt03m.js";
12
- import"../../shared/components-gx4h5rbb.js";
13
- import"../../shared/components-jcnjay5g.js";
14
- export {
15
- Avatar2 as Avatar,
16
- AvatarFallback2 as AvatarFallback,
17
- AvatarImage2 as AvatarImage,
18
- avatar_default as default
19
- };