@justanarthur/modo-ui 0.5.0 → 0.6.0-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (461) hide show
  1. package/DESIGN.md +608 -0
  2. package/README.md +61 -39
  3. package/blocks/sidebar-app/examples.mdx +33 -0
  4. package/blocks/sidebar-app/index.tsx +218 -0
  5. package/blocks/sidebar-app/inset-topbar.tsx +25 -0
  6. package/blocks/sidebar-app/menu-grid.ts +26 -0
  7. package/blocks/sidebar-app/nav-data.ts +36 -0
  8. package/blocks/sidebar-app/search-field.tsx +48 -0
  9. package/blocks/sidebar-app/user-footer.tsx +67 -0
  10. package/blocks/sidebar-app/workspace-header.tsx +129 -0
  11. package/components/AI/input-message/examples.mdx +124 -0
  12. package/components/AI/input-message/file-thumbnail.tsx +173 -0
  13. package/components/AI/input-message/index.tsx +1383 -0
  14. package/components/AI/thinking-indicator/examples.mdx +27 -0
  15. package/components/AI/thinking-indicator/index.tsx +210 -0
  16. package/components/accordion/examples.mdx +148 -0
  17. package/components/accordion/index.tsx +1034 -0
  18. package/components/avatar/examples.mdx +95 -0
  19. package/components/avatar/index.tsx +129 -0
  20. package/components/badge/change-demo.tsx +29 -0
  21. package/components/badge/examples.mdx +120 -0
  22. package/components/badge/index.tsx +225 -0
  23. package/components/badge/variants.ts +73 -0
  24. package/components/button/examples.mdx +164 -0
  25. package/components/button/index.tsx +416 -0
  26. package/components/button/loading-demo.tsx +25 -0
  27. package/components/button/variants.ts +166 -0
  28. package/components/card/examples.mdx +212 -0
  29. package/components/card/index.tsx +1037 -0
  30. package/components/copy/examples.mdx +87 -0
  31. package/components/copy/index.tsx +482 -0
  32. package/components/inputs/checkbox/examples.mdx +83 -0
  33. package/components/inputs/checkbox/index.tsx +611 -0
  34. package/components/inputs/checkbox/select-all-demo.tsx +48 -0
  35. package/components/inputs/color-picker/examples.mdx +72 -0
  36. package/components/inputs/color-picker/index.tsx +1955 -0
  37. package/components/inputs/color-picker/variants.ts +401 -0
  38. package/components/inputs/combobox/examples.mdx +273 -0
  39. package/components/inputs/combobox/index.tsx +1436 -0
  40. package/components/inputs/combobox/remote-demo.tsx +101 -0
  41. package/components/inputs/date-time/calendar/examples.mdx +34 -0
  42. package/components/inputs/date-time/calendar/index.tsx +351 -0
  43. package/components/inputs/date-time/calendar/use-month-window.ts +163 -0
  44. package/components/inputs/date-time/date-picker/examples.mdx +166 -0
  45. package/components/inputs/date-time/date-picker/index.tsx +385 -0
  46. package/components/inputs/date-time/date-picker/masked-date-input.tsx +336 -0
  47. package/components/inputs/date-time/date-range-picker/examples.mdx +29 -0
  48. package/components/inputs/date-time/date-range-picker/index.tsx +217 -0
  49. package/components/inputs/date-time/duration-picker/examples.mdx +16 -0
  50. package/components/inputs/date-time/duration-picker/index.tsx +189 -0
  51. package/components/inputs/date-time/month-picker/examples.mdx +16 -0
  52. package/components/inputs/date-time/month-picker/index.tsx +190 -0
  53. package/components/inputs/date-time/picker-shell.tsx +395 -0
  54. package/components/inputs/date-time/time-columns.tsx +91 -0
  55. package/components/inputs/date-time/time-picker/examples.mdx +26 -0
  56. package/components/inputs/date-time/time-picker/index.tsx +166 -0
  57. package/components/inputs/field/examples.mdx +113 -0
  58. package/components/inputs/field/index.tsx +267 -0
  59. package/components/inputs/file-dropzone/examples.mdx +73 -0
  60. package/components/inputs/file-dropzone/file-row.tsx +201 -0
  61. package/components/inputs/file-dropzone/index.tsx +296 -0
  62. package/components/inputs/file-dropzone/upload-demo.tsx +67 -0
  63. package/components/inputs/file-dropzone/variants.ts +94 -0
  64. package/components/inputs/input/examples.mdx +135 -0
  65. package/components/inputs/input/index.tsx +494 -0
  66. package/components/inputs/input/password-demo.tsx +30 -0
  67. package/components/inputs/label/examples.mdx +67 -0
  68. package/components/inputs/label/index.tsx +85 -0
  69. package/components/inputs/number-input/examples.mdx +56 -0
  70. package/components/inputs/number-input/index.tsx +214 -0
  71. package/components/inputs/radio/examples.mdx +77 -0
  72. package/components/inputs/radio/index.tsx +636 -0
  73. package/components/inputs/search/examples.mdx +74 -0
  74. package/components/inputs/search/index.tsx +333 -0
  75. package/components/inputs/select/examples.mdx +218 -0
  76. package/components/inputs/select/index.tsx +862 -0
  77. package/components/inputs/select/variants.ts +32 -0
  78. package/components/inputs/slider/examples.mdx +127 -0
  79. package/components/inputs/slider/index.tsx +1725 -0
  80. package/components/inputs/switch/examples.mdx +94 -0
  81. package/components/inputs/switch/index.tsx +504 -0
  82. package/components/inputs/textarea/examples.mdx +88 -0
  83. package/components/inputs/textarea/index.tsx +161 -0
  84. package/components/navigation/navigation-menu/examples.mdx +109 -0
  85. package/components/navigation/navigation-menu/index.tsx +613 -0
  86. package/components/navigation/pagination/examples.mdx +64 -0
  87. package/components/navigation/pagination/index.tsx +395 -0
  88. package/components/navigation/sidebar/examples.mdx +319 -0
  89. package/components/navigation/sidebar/index.tsx +453 -0
  90. package/components/navigation/sidebar/sidebar-core.tsx +1408 -0
  91. package/components/navigation/sidebar/sidebar-menu.tsx +1495 -0
  92. package/components/navigation/sidebar/sidebar.css +74 -0
  93. package/components/navigation/sidebar/variants.ts +55 -0
  94. package/components/navigation/tabs/examples.mdx +89 -0
  95. package/components/navigation/tabs/index.tsx +494 -0
  96. package/components/navigation/tabs-subtle/examples.mdx +49 -0
  97. package/components/navigation/tabs-subtle/index.tsx +512 -0
  98. package/components/overlays/alert-dialog/examples.mdx +123 -0
  99. package/components/overlays/alert-dialog/index.tsx +258 -0
  100. package/components/overlays/alert-dialog/pending-demo.tsx +36 -0
  101. package/components/overlays/command/examples.mdx +113 -0
  102. package/components/overlays/command/index.tsx +416 -0
  103. package/components/overlays/context-menu/examples.mdx +56 -0
  104. package/components/overlays/context-menu/index.tsx +279 -0
  105. package/components/overlays/dialog/examples.mdx +144 -0
  106. package/components/overlays/dialog/index.tsx +366 -0
  107. package/components/overlays/dropdown/dropdown-search.tsx +395 -0
  108. package/components/overlays/dropdown/examples.mdx +294 -0
  109. package/components/overlays/dropdown/index.tsx +1168 -0
  110. package/components/overlays/dropdown/menu-item.tsx +464 -0
  111. package/components/overlays/dropdown/menu-parts.tsx +660 -0
  112. package/components/overlays/popover/anchored-demo.tsx +59 -0
  113. package/components/overlays/popover/examples.mdx +180 -0
  114. package/components/overlays/popover/index.tsx +315 -0
  115. package/components/overlays/preview-card/examples.mdx +61 -0
  116. package/components/overlays/preview-card/index.tsx +204 -0
  117. package/components/overlays/sheet/examples.mdx +89 -0
  118. package/components/overlays/sheet/index.tsx +247 -0
  119. package/components/overlays/toast/examples.mdx +68 -0
  120. package/components/overlays/toast/global-demo.tsx +72 -0
  121. package/components/overlays/toast/index.tsx +474 -0
  122. package/components/overlays/toast/manager.ts +193 -0
  123. package/components/overlays/tooltip/examples.mdx +106 -0
  124. package/components/overlays/tooltip/index.tsx +519 -0
  125. package/components/progress/examples.mdx +59 -0
  126. package/components/progress/index.tsx +174 -0
  127. package/components/progress/progress.css +49 -0
  128. package/components/progress/step-demo.tsx +27 -0
  129. package/components/table/examples.mdx +184 -0
  130. package/components/table/index.tsx +510 -0
  131. package/components/table/sort-demo.tsx +61 -0
  132. package/dist/base.css +100 -0
  133. package/dist/blocks/sidebar-app/index.js +39 -26
  134. package/dist/components/AI/input-message/index.js +22 -16
  135. package/dist/components/AI/thinking-indicator/index.js +9 -6
  136. package/dist/components/accordion/index.js +16 -13
  137. package/dist/components/avatar/index.d.ts +46 -0
  138. package/dist/components/avatar/index.js +18 -0
  139. package/dist/components/badge/index.d.ts +18 -11
  140. package/dist/components/badge/index.js +11 -7
  141. package/dist/components/badge/variants.d.ts +33 -0
  142. package/dist/components/badge/variants.js +10 -0
  143. package/dist/components/button/index.d.ts +53 -17
  144. package/dist/components/button/index.js +10 -6
  145. package/dist/components/button/variants.d.ts +39 -0
  146. package/dist/components/button/variants.js +8 -0
  147. package/dist/components/card/index.d.ts +16 -3
  148. package/dist/components/card/index.js +16 -11
  149. package/dist/components/copy/index.js +13 -9
  150. package/dist/components/inputs/checkbox/index.d.ts +28 -9
  151. package/dist/components/inputs/checkbox/index.js +17 -13
  152. package/dist/components/inputs/color-picker/index.d.ts +13 -13
  153. package/dist/components/inputs/color-picker/index.js +25 -18
  154. package/dist/components/inputs/color-picker/variants.d.ts +61 -0
  155. package/dist/components/inputs/color-picker/variants.js +28 -0
  156. package/dist/components/inputs/combobox/index.d.ts +60 -17
  157. package/dist/components/inputs/combobox/index.js +26 -18
  158. package/dist/components/inputs/date-time/calendar/index.js +14 -11
  159. package/dist/components/inputs/date-time/date-picker/index.d.ts +53 -11
  160. package/dist/components/inputs/date-time/date-picker/index.js +33 -25
  161. package/dist/components/inputs/date-time/date-range-picker/index.d.ts +3 -3
  162. package/dist/components/inputs/date-time/date-range-picker/index.js +32 -24
  163. package/dist/components/inputs/date-time/duration-picker/index.d.ts +3 -3
  164. package/dist/components/inputs/date-time/duration-picker/index.js +32 -24
  165. package/dist/components/inputs/date-time/month-picker/index.d.ts +3 -3
  166. package/dist/components/inputs/date-time/month-picker/index.js +31 -23
  167. package/dist/components/inputs/date-time/time-picker/index.d.ts +3 -3
  168. package/dist/components/inputs/date-time/time-picker/index.js +32 -24
  169. package/dist/components/inputs/field/index.d.ts +116 -0
  170. package/dist/components/inputs/field/index.js +28 -0
  171. package/dist/components/inputs/file-dropzone/index.d.ts +165 -0
  172. package/dist/components/inputs/file-dropzone/index.js +32 -0
  173. package/dist/components/inputs/file-dropzone/variants.d.ts +35 -0
  174. package/dist/components/inputs/file-dropzone/variants.js +12 -0
  175. package/dist/components/inputs/input/index.d.ts +95 -13
  176. package/dist/components/inputs/input/index.js +17 -9
  177. package/dist/components/inputs/label/index.d.ts +32 -0
  178. package/dist/components/inputs/label/index.js +11 -0
  179. package/dist/components/inputs/number-input/index.d.ts +84 -0
  180. package/dist/components/inputs/number-input/index.js +20 -0
  181. package/dist/components/inputs/radio/index.d.ts +20 -5
  182. package/dist/components/inputs/radio/index.js +15 -12
  183. package/dist/components/inputs/search/index.js +25 -18
  184. package/dist/components/inputs/select/index.d.ts +41 -11
  185. package/dist/components/inputs/select/index.js +27 -14
  186. package/dist/components/inputs/select/variants.d.ts +5 -0
  187. package/dist/components/inputs/select/variants.js +6 -0
  188. package/dist/components/inputs/slider/index.js +7 -5
  189. package/dist/components/inputs/switch/index.d.ts +8 -2
  190. package/dist/components/inputs/switch/index.js +14 -12
  191. package/dist/components/inputs/textarea/index.d.ts +4 -0
  192. package/dist/components/inputs/textarea/index.js +8 -6
  193. package/dist/components/navigation/navigation-menu/index.d.ts +114 -0
  194. package/dist/components/navigation/navigation-menu/index.js +40 -0
  195. package/dist/components/navigation/pagination/index.d.ts +73 -0
  196. package/dist/components/navigation/pagination/index.js +39 -0
  197. package/dist/components/navigation/sidebar/index.d.ts +44 -21
  198. package/dist/components/navigation/sidebar/index.js +41 -31
  199. package/dist/components/navigation/sidebar/variants.d.ts +25 -0
  200. package/dist/components/navigation/sidebar/variants.js +28 -0
  201. package/dist/components/navigation/tabs/index.d.ts +8 -2
  202. package/dist/components/navigation/tabs/index.js +14 -10
  203. package/dist/components/navigation/tabs-subtle/index.js +12 -10
  204. package/dist/components/overlays/alert-dialog/index.d.ts +121 -15
  205. package/dist/components/overlays/alert-dialog/index.js +22 -13
  206. package/dist/components/overlays/command/index.js +24 -17
  207. package/dist/components/overlays/context-menu/index.d.ts +33 -17
  208. package/dist/components/overlays/context-menu/index.js +27 -18
  209. package/dist/components/overlays/dialog/index.js +17 -12
  210. package/dist/components/overlays/dropdown/index.d.ts +257 -31
  211. package/dist/components/overlays/dropdown/index.js +42 -17
  212. package/dist/components/overlays/popover/index.d.ts +31 -9
  213. package/dist/components/overlays/popover/index.js +12 -9
  214. package/dist/components/overlays/preview-card/index.js +11 -8
  215. package/dist/components/overlays/sheet/index.js +18 -13
  216. package/dist/components/overlays/toast/index.d.ts +123 -47
  217. package/dist/components/overlays/toast/index.js +18 -10
  218. package/dist/components/overlays/tooltip/index.d.ts +113 -21
  219. package/dist/components/overlays/tooltip/index.js +15 -6
  220. package/dist/components/progress/index.d.ts +56 -0
  221. package/dist/components/progress/index.js +15 -0
  222. package/dist/components/table/index.d.ts +63 -8
  223. package/dist/components/table/index.js +19 -9
  224. package/dist/index.d.ts +2201 -736
  225. package/dist/index.js +223 -82
  226. package/dist/lib/date-locale.d.ts +14 -0
  227. package/dist/lib/date-locale.js +16 -0
  228. package/dist/lib/field-classes.d.ts +144 -0
  229. package/dist/lib/field-classes.js +40 -0
  230. package/dist/lib/field-variants.d.ts +47 -0
  231. package/dist/lib/field-variants.js +26 -0
  232. package/dist/lib/fluid-hover-highlight.d.ts +112 -0
  233. package/dist/lib/fluid-hover-highlight.js +17 -0
  234. package/dist/lib/focus-ring.d.ts +18 -0
  235. package/dist/lib/focus-ring.js +10 -0
  236. package/dist/lib/goo-indicator.d.ts +46 -0
  237. package/dist/lib/goo-indicator.js +14 -0
  238. package/dist/lib/icon-context.d.ts +30 -0
  239. package/dist/lib/icon-context.js +12 -0
  240. package/dist/lib/inert.d.ts +9 -0
  241. package/dist/lib/inert.js +8 -0
  242. package/dist/lib/morph-layers.d.ts +93 -0
  243. package/dist/lib/morph-layers.js +13 -0
  244. package/dist/lib/morph-part.d.ts +21 -0
  245. package/dist/lib/morph-part.js +12 -0
  246. package/dist/lib/popup.d.ts +20 -0
  247. package/dist/lib/popup.js +12 -0
  248. package/dist/lib/reduced-motion.d.ts +9 -0
  249. package/dist/lib/reduced-motion.js +6 -0
  250. package/dist/lib/row-index.d.ts +10 -0
  251. package/dist/lib/row-index.js +8 -0
  252. package/dist/lib/row-order.d.ts +28 -0
  253. package/dist/lib/row-order.js +10 -0
  254. package/dist/lib/scroll-column.d.ts +27 -0
  255. package/dist/lib/scroll-column.js +18 -0
  256. package/dist/lib/shape-context.d.ts +30 -0
  257. package/dist/lib/shape-context.js +12 -0
  258. package/dist/lib/size-context.d.ts +94 -0
  259. package/dist/lib/size-context.js +20 -0
  260. package/dist/lib/size-scale.d.ts +79 -0
  261. package/dist/lib/size-scale.js +8 -0
  262. package/dist/lib/slot.d.ts +12 -0
  263. package/dist/lib/slot.js +6 -0
  264. package/dist/lib/springs.d.ts +44 -0
  265. package/dist/lib/springs.js +8 -0
  266. package/dist/lib/surface-classes.d.ts +19 -0
  267. package/dist/lib/surface-classes.js +10 -0
  268. package/dist/lib/surface-context.d.ts +9 -0
  269. package/dist/lib/surface-context.js +8 -0
  270. package/dist/lib/use-controllable-state.d.ts +2 -0
  271. package/dist/lib/use-controllable-state.js +6 -0
  272. package/dist/lib/use-fluid-hover.d.ts +138 -0
  273. package/dist/lib/use-fluid-hover.js +14 -0
  274. package/dist/lib/use-is-mobile.d.ts +2 -0
  275. package/dist/lib/use-is-mobile.js +6 -0
  276. package/dist/lib/use-keyboard-nav-gate.d.ts +20 -0
  277. package/dist/lib/use-keyboard-nav-gate.js +7 -0
  278. package/dist/lib/use-merge-split.d.ts +47 -0
  279. package/dist/lib/use-merge-split.js +15 -0
  280. package/dist/lib/use-morph.d.ts +101 -0
  281. package/dist/lib/use-morph.js +20 -0
  282. package/dist/lib/use-touch-primary.d.ts +2 -0
  283. package/dist/lib/use-touch-primary.js +6 -0
  284. package/dist/lib/utils.d.ts +3 -0
  285. package/dist/lib/utils.js +6 -0
  286. package/dist/preset.d.ts +17 -0
  287. package/dist/preset.js +22 -2
  288. package/dist/primitives/code/index.js +7 -5
  289. package/dist/primitives/craft/index.js +9 -6
  290. package/dist/primitives/fluid-hover/index.js +9 -8
  291. package/dist/primitives/morph/index.js +15 -10
  292. package/dist/primitives/motion/index.js +10 -8
  293. package/dist/primitives/scroll-area/index.js +4 -3
  294. package/dist/primitives/separator/index.d.ts +25 -0
  295. package/dist/primitives/separator/index.js +9 -0
  296. package/dist/primitives/sizes/index.js +6 -4
  297. package/dist/primitives/skeleton/index.d.ts +35 -0
  298. package/dist/primitives/skeleton/index.js +12 -0
  299. package/dist/primitives/surface/index.js +6 -4
  300. package/dist/shared/{components-3mkepka5.js → components-0jmqhx2k.js} +28 -25
  301. package/dist/shared/components-124epb7f.js +53 -0
  302. package/dist/shared/{components-gz8zf3ec.js → components-1k0wv53d.js} +15 -43
  303. package/dist/shared/components-26snnbs9.js +322 -0
  304. package/dist/shared/{components-2dxkv6zm.js → components-2c0qcfx4.js} +8 -7
  305. package/dist/shared/{components-473g814w.js → components-2mt9te6d.js} +243 -137
  306. package/dist/shared/{components-hawvy2qz.js → components-2z48g4fp.js} +9 -30
  307. package/dist/shared/components-34txk9rj.js +35 -0
  308. package/dist/shared/components-3h92d94m.js +23 -0
  309. package/dist/shared/{components-zfnmn5d4.js → components-3sp623ae.js} +36 -31
  310. package/dist/shared/{components-jwst3vtj.js → components-3wxkjgqn.js} +186 -76
  311. package/dist/shared/{components-s2bz1xpk.js → components-49bsynbw.js} +8 -5
  312. package/dist/shared/components-4bwsd46w.js +71 -0
  313. package/dist/shared/components-4n4f5m3e.js +297 -0
  314. package/dist/shared/{components-0q0sqfh4.js → components-4y816hwp.js} +27 -49
  315. package/dist/shared/components-52ngsgca.js +399 -0
  316. package/dist/shared/{components-y9y0g8er.js → components-52r5763g.js} +22 -19
  317. package/dist/shared/components-559tf7yb.js +28 -0
  318. package/dist/shared/components-5mkga9hj.js +440 -0
  319. package/dist/shared/{components-kwa6mrf9.js → components-5s0nfqvw.js} +14 -9
  320. package/dist/shared/{components-dk0gjr5a.js → components-60atskhp.js} +19 -18
  321. package/dist/shared/{components-rr7a6ja9.js → components-658b26nb.js} +21 -18
  322. package/dist/shared/{components-xxvdw7k1.js → components-65vwfjs6.js} +37 -34
  323. package/dist/shared/{components-frw34b65.js → components-6j2fh74k.js} +114 -123
  324. package/dist/shared/components-6zg1yft7.js +167 -0
  325. package/dist/shared/components-6zng858q.js +53 -0
  326. package/dist/shared/components-72w4ge68.js +64 -0
  327. package/dist/shared/{components-cv16mryv.js → components-78x40gee.js} +13 -7
  328. package/dist/shared/{components-b2wyq2cq.js → components-7d4r7hh1.js} +39 -57
  329. package/dist/shared/components-7ntvvegr.js +316 -0
  330. package/dist/shared/components-8nwsqjn8.js +34 -0
  331. package/dist/shared/{components-5xc2j8jz.js → components-8tt3xbb5.js} +19 -18
  332. package/dist/shared/{components-vc7vq5nz.js → components-9as3rf68.js} +6 -3
  333. package/dist/shared/components-9mys9jna.js +255 -0
  334. package/dist/shared/components-adkarj8n.js +35 -0
  335. package/dist/shared/{components-b3c5et5b.js → components-ae9fncz4.js} +32 -31
  336. package/dist/shared/{components-hqeq3w9q.js → components-awra5sff.js} +24 -16
  337. package/dist/shared/components-b1e239g3.js +28 -0
  338. package/dist/shared/{components-q5xj5c16.js → components-b1f2bjf1.js} +9 -8
  339. package/dist/shared/{components-qmmjx1qw.js → components-bn42vq6d.js} +71 -72
  340. package/dist/shared/components-c96g82th.js +1444 -0
  341. package/dist/shared/components-c9yr4ed1.js +44 -0
  342. package/dist/shared/components-d3shbwqq.js +95 -0
  343. package/dist/shared/{components-jjw69c4c.js → components-dcc02hs2.js} +7 -4
  344. package/dist/shared/{components-men63rwj.js → components-de99ykt7.js} +3 -2
  345. package/dist/shared/components-dhgk6mbt.js +16 -0
  346. package/dist/shared/components-drxrtnp2.js +25 -0
  347. package/dist/shared/{components-6p8tfcd6.js → components-ds9fqat9.js} +21 -18
  348. package/dist/shared/{components-mjthm1kf.js → components-egy4tyjt.js} +11 -8
  349. package/dist/shared/components-f0xfpkhh.js +82 -0
  350. package/dist/shared/components-f7h57m6t.js +59 -0
  351. package/dist/shared/{components-d6xtjht3.js → components-fjkpbg6n.js} +33 -30
  352. package/dist/shared/{components-gc5vtq2f.js → components-gh0qeey3.js} +63 -29
  353. package/dist/shared/{components-39jq9va1.js → components-gvbapfen.js} +29 -24
  354. package/dist/shared/{components-5vgpnxgy.js → components-gzesg7hy.js} +19 -16
  355. package/dist/shared/components-h6p86be3.js +19 -0
  356. package/dist/shared/components-h83az0bz.js +33 -0
  357. package/dist/shared/components-jjrj6ymn.js +104 -0
  358. package/dist/shared/{components-wvp1m52g.js → components-jp5v0m0f.js} +15 -14
  359. package/dist/shared/{components-zrkzcayz.js → components-jqpefjsn.js} +54 -6
  360. package/dist/shared/{components-1z6tdadk.js → components-k74j4hwh.js} +20 -17
  361. package/dist/shared/components-kswxnm3h.js +24 -0
  362. package/dist/shared/{components-jbbmdr74.js → components-mkkbbgb7.js} +36 -17
  363. package/dist/shared/{components-pbmqctfa.js → components-mpw667rb.js} +169 -65
  364. package/dist/shared/{components-s5ngg32c.js → components-paa08427.js} +121 -47
  365. package/dist/shared/{components-vfbhxf5r.js → components-pd42emw3.js} +6 -5
  366. package/dist/shared/{components-hw9yk32z.js → components-pmfszv7a.js} +35 -23
  367. package/dist/shared/{components-chacnk61.js → components-pw06rbxq.js} +19 -19
  368. package/dist/shared/components-q03cktx8.js +246 -0
  369. package/dist/shared/{components-kvr7f9hy.js → components-qdm3yh26.js} +19 -10
  370. package/dist/shared/{components-27nnvrwe.js → components-qs4rkqsj.js} +15 -14
  371. package/dist/shared/{components-s083f38z.js → components-r6gbmkew.js} +22 -21
  372. package/dist/shared/{components-ta7shw28.js → components-r8eqs7gz.js} +4 -4
  373. package/dist/shared/{components-sn1rxx1d.js → components-rm02h9nt.js} +12 -11
  374. package/dist/shared/{components-c6s6b43g.js → components-rrbpmfx4.js} +3 -2
  375. package/dist/shared/{components-n7mjr357.js → components-tz1fv35x.js} +3 -2
  376. package/dist/shared/components-tz4gaf1v.js +23 -0
  377. package/dist/shared/{components-zx6b6yby.js → components-vf45j12c.js} +4 -18
  378. package/dist/shared/{components-3ky44908.js → components-vfjc9jzz.js} +2 -3
  379. package/dist/shared/{components-39vmfq9s.js → components-vsa625vk.js} +21 -20
  380. package/dist/shared/components-wawnmkph.js +500 -0
  381. package/dist/shared/components-wktrrb4m.js +38 -0
  382. package/dist/shared/{components-8snj490h.js → components-wwd363me.js} +78 -32
  383. package/dist/shared/{components-5pnw8183.js → components-xcwvgcrd.js} +23 -22
  384. package/dist/shared/components-xdqmt6ed.js +20 -0
  385. package/dist/shared/{components-h2ajmhwn.js → components-y1w3a6wx.js} +107 -35
  386. package/dist/shared/{components-ar66gnt0.js → components-y6578b8h.js} +37 -34
  387. package/dist/shared/{components-59efxjd9.js → components-yhgq0qxx.js} +13 -12
  388. package/dist/shared/{components-jthe1pwb.js → components-yz84gpkq.js} +101 -404
  389. package/dist/shared/components-z3v0n0de.js +11 -0
  390. package/dist/shared/{components-7r3etddy.js → components-z9n19fyk.js} +19 -54
  391. package/dist/shared/components-zbvjzh1p.js +141 -0
  392. package/dist/styles.css +241 -16
  393. package/dist/tailwind.css +13 -0
  394. package/dist/tokens.css +34 -0
  395. package/index.ts +60 -0
  396. package/lib/date-locale.ts +50 -0
  397. package/lib/field-classes.ts +115 -0
  398. package/lib/field-variants.ts +117 -0
  399. package/lib/fluid-hover-highlight.tsx +139 -0
  400. package/lib/focus-ring.tsx +46 -0
  401. package/lib/goo-indicator.tsx +261 -0
  402. package/lib/icon-context.tsx +310 -0
  403. package/lib/inert.ts +22 -0
  404. package/lib/morph-layers.tsx +102 -0
  405. package/lib/morph-part.tsx +49 -0
  406. package/lib/popup.ts +52 -0
  407. package/lib/reduced-motion.ts +19 -0
  408. package/lib/row-index.tsx +29 -0
  409. package/lib/row-order.tsx +115 -0
  410. package/lib/scroll-column.tsx +244 -0
  411. package/lib/shape-context.tsx +124 -0
  412. package/lib/size-context.tsx +66 -0
  413. package/lib/size-scale.ts +115 -0
  414. package/lib/slot.ts +25 -0
  415. package/lib/springs.ts +62 -0
  416. package/lib/surface-classes.ts +58 -0
  417. package/lib/surface-context.tsx +21 -0
  418. package/lib/use-controllable-state.ts +44 -0
  419. package/lib/use-fluid-hover.ts +541 -0
  420. package/lib/use-is-mobile.ts +25 -0
  421. package/lib/use-keyboard-nav-gate.ts +45 -0
  422. package/lib/use-merge-split.tsx +209 -0
  423. package/lib/use-morph.ts +557 -0
  424. package/lib/use-touch-primary.tsx +43 -0
  425. package/lib/utils.ts +37 -0
  426. package/package.json +177 -4
  427. package/preset.ts +196 -0
  428. package/primitives/code/examples.mdx +27 -0
  429. package/primitives/code/index.tsx +80 -0
  430. package/primitives/craft/demos.tsx +173 -0
  431. package/primitives/craft/examples.mdx +138 -0
  432. package/primitives/craft/index.tsx +76 -0
  433. package/primitives/fluid-hover/examples.mdx +84 -0
  434. package/primitives/fluid-hover/index.tsx +316 -0
  435. package/primitives/morph/examples.mdx +135 -0
  436. package/primitives/morph/index.tsx +192 -0
  437. package/primitives/motion/examples.mdx +100 -0
  438. package/primitives/motion/index.tsx +160 -0
  439. package/primitives/scroll-area/examples.mdx +58 -0
  440. package/primitives/scroll-area/index.tsx +200 -0
  441. package/primitives/separator/examples.mdx +30 -0
  442. package/primitives/separator/index.tsx +53 -0
  443. package/primitives/sizes/examples.mdx +167 -0
  444. package/primitives/sizes/index.tsx +89 -0
  445. package/primitives/skeleton/examples.mdx +51 -0
  446. package/primitives/skeleton/index.tsx +72 -0
  447. package/primitives/skeleton/skeleton.css +15 -0
  448. package/primitives/surface/examples.mdx +173 -0
  449. package/primitives/surface/index.tsx +109 -0
  450. package/primitives/surface/surface.css +176 -0
  451. package/dist/shared/components-0sn7ypjw.js +0 -61
  452. package/dist/shared/components-1434p1mh.js +0 -123
  453. package/dist/shared/components-a86dytt0.js +0 -986
  454. package/dist/shared/components-gf5s6ap9.js +0 -42
  455. package/dist/shared/components-hyq23phv.js +0 -310
  456. package/dist/shared/components-ng72k97e.js +0 -128
  457. package/dist/shared/components-raknhppb.js +0 -64
  458. package/dist/shared/components-vynjtrk6.js +0 -19
  459. package/dist/shared/components-wy9jpqny.js +0 -146
  460. /package/dist/shared/{components-1v7rxytx.js → components-3ey0hzpb.js} +0 -0
  461. /package/dist/shared/{components-ezxhrmer.js → components-jcnjay5g.js} +0 -0
@@ -1,21 +1,24 @@
1
+ "use client";
1
2
  import {
2
- defaultLocale,
3
- fieldLabel,
4
- dividedColumns,
5
- ScrollColumn
6
- } from "./components-gz8zf3ec.js";
3
+ defaultLocale2,
4
+ fieldLabel2
5
+ } from "./components-559tf7yb.js";
7
6
  import {
8
7
  cn2
9
- } from "./components-ezxhrmer.js";
8
+ } from "./components-jcnjay5g.js";
10
9
  import {
11
- useShape
12
- } from "./components-cv16mryv.js";
10
+ useShape2
11
+ } from "./components-78x40gee.js";
13
12
  import {
14
13
  useSize2
15
- } from "./components-0sn7ypjw.js";
14
+ } from "./components-h83az0bz.js";
15
+ import {
16
+ dividedColumns2,
17
+ ScrollColumn2
18
+ } from "./components-1k0wv53d.js";
16
19
  import {
17
20
  SizeProvider2
18
- } from "./components-jjw69c4c.js";
21
+ } from "./components-dcc02hs2.js";
19
22
 
20
23
  // components/inputs/date-time/calendar/index.tsx
21
24
  import {
@@ -175,7 +178,7 @@ function DayButton({ day: _, modifiers, className, ...props }) {
175
178
  if (modifiers.focused)
176
179
  ref.current?.focus();
177
180
  }, [modifiers.focused]);
178
- const shape = useShape();
181
+ const shape = useShape2();
179
182
  const sizeClasses = useSize2();
180
183
  const pill = modifiers.selected && !modifiers.range_middle;
181
184
  return /* @__PURE__ */ jsx("button", {
@@ -185,7 +188,7 @@ function DayButton({ day: _, modifiers, className, ...props }) {
185
188
  });
186
189
  }
187
190
  function Calendar2({
188
- locale = defaultLocale,
191
+ locale = defaultLocale2,
189
192
  size,
190
193
  columnsSide = "end",
191
194
  extraColumns,
@@ -260,8 +263,8 @@ function Calendar2({
260
263
  const jumpToYear = useCallback2((year) => jumpTo(new Date(year, monthInView, 1)), [jumpTo, monthInView]);
261
264
  const orientation = wide ? "vertical" : "horizontal";
262
265
  const column = wide ? "w-16 shrink-0" : "w-full";
263
- const monthColumn = /* @__PURE__ */ jsx(ScrollColumn, {
264
- label: fieldLabel(locale, "month"),
266
+ const monthColumn = /* @__PURE__ */ jsx(ScrollColumn2, {
267
+ label: fieldLabel2(locale, "month"),
265
268
  options: months,
266
269
  value: picked && isSameYear(picked, new Date(yearInView, 0, 1)) ? picked.getMonth() : null,
267
270
  follow: monthInView,
@@ -270,8 +273,8 @@ function Calendar2({
270
273
  orientation,
271
274
  className: column
272
275
  }, "month");
273
- const yearColumn = /* @__PURE__ */ jsx(ScrollColumn, {
274
- label: fieldLabel(locale, "year"),
276
+ const yearColumn = /* @__PURE__ */ jsx(ScrollColumn2, {
277
+ label: fieldLabel2(locale, "year"),
275
278
  options: years,
276
279
  value: picked?.getFullYear() ?? null,
277
280
  follow: yearInView,
@@ -283,7 +286,7 @@ function Calendar2({
283
286
  const extras = extraColumns?.(orientation);
284
287
  const before = [extraColumnsSide === "start" && extras, columnsSide === "start" && [yearColumn, monthColumn]];
285
288
  const after = [columnsSide === "end" && [monthColumn, yearColumn], extraColumnsSide === "end" && extras];
286
- const side = (place) => wide ? cn2(dividedColumns, "h-full shrink-0 border-border", place === "start" ? "border-e" : "border-s") : "order-first flex w-full flex-col [&>*]:border-b [&>*]:border-border";
289
+ const side = (place) => wide ? cn2(dividedColumns2, "h-full shrink-0 border-border", place === "start" ? "border-e" : "border-s") : "order-first flex w-full flex-col [&>*]:border-b [&>*]:border-border";
287
290
  const grid = /* @__PURE__ */ jsxs("div", {
288
291
  className: cn2("flex min-h-0 shrink-0 flex-col", wide ? "h-full" : "flex-1 self-center"),
289
292
  children: [
@@ -0,0 +1,24 @@
1
+ // components/navigation/sidebar/variants.ts
2
+ import { cva } from "class-variance-authority";
3
+ var sidebarMenuButtonVariants2 = cva("peer/menu-button relative z-10 flex w-full cursor-pointer select-none items-center gap-2 pl-2 text-left outline-none disabled:opacity-50 disabled:pointer-events-none transition-[padding] duration-fast pr-[var(--row-gutter)] group-hover/menu-item:pr-[var(--row-gutter-hover)] group-focus-within/menu-item:pr-[var(--row-gutter-hover)] group-hover/menu-sub-item:pr-[var(--row-gutter-hover)] group-focus-within/menu-sub-item:pr-[var(--row-gutter-hover)] group-has-[[data-sidebar=menu-action]:is([data-state=open],[data-popup-open],[aria-expanded=true])]/menu-item:pr-[var(--row-gutter-hover)] group-has-[[data-sidebar=menu-action]:is([data-state=open],[data-popup-open],[aria-expanded=true])]/menu-sub-item:pr-[var(--row-gutter-hover)]", {
4
+ variants: {
5
+ variant: {
6
+ default: "",
7
+ outline: "border border-border bg-background"
8
+ }
9
+ },
10
+ defaultVariants: { variant: "default" }
11
+ });
12
+ var SIDEBAR_COOKIE_NAME2 = "sidebar_state";
13
+ var SIDEBAR_COOKIE_MAX_AGE2 = 60 * 60 * 24 * 7;
14
+ var SIDEBAR_WIDTH2 = "16rem";
15
+ var SIDEBAR_WIDTH_MOBILE2 = "18rem";
16
+ var SIDEBAR_KEYBOARD_SHORTCUT2 = "[";
17
+ var SIDEBAR_KEYBOARD_SHORTCUT_RIGHT2 = "]";
18
+ var SIDEBAR_MIN_WIDTH2 = 160;
19
+ var SIDEBAR_MAX_WIDTH2 = 360;
20
+ var SIDEBAR_COLLAPSE_SLOP2 = 56;
21
+ var SIDEBAR_HOVER_STRIP2 = 12;
22
+ var SIDEBAR_HOVER_TRIGGER_GAP2 = 24;
23
+
24
+ export { sidebarMenuButtonVariants2, SIDEBAR_COOKIE_NAME2, SIDEBAR_COOKIE_MAX_AGE2, SIDEBAR_WIDTH2, SIDEBAR_WIDTH_MOBILE2, SIDEBAR_KEYBOARD_SHORTCUT2, SIDEBAR_KEYBOARD_SHORTCUT_RIGHT2, SIDEBAR_MIN_WIDTH2, SIDEBAR_MAX_WIDTH2, SIDEBAR_COLLAPSE_SLOP2, SIDEBAR_HOVER_STRIP2, SIDEBAR_HOVER_TRIGGER_GAP2 };
@@ -1,25 +1,29 @@
1
+ "use client";
1
2
  import {
2
3
  cn2
3
- } from "./components-ezxhrmer.js";
4
+ } from "./components-jcnjay5g.js";
4
5
  import {
5
6
  FluidHoverHighlight2
6
- } from "./components-kvr7f9hy.js";
7
+ } from "./components-qdm3yh26.js";
7
8
  import {
8
- useIcon
9
- } from "./components-zrkzcayz.js";
9
+ useIcon2
10
+ } from "./components-jqpefjsn.js";
10
11
  import {
11
- useShape
12
- } from "./components-cv16mryv.js";
12
+ useShape2
13
+ } from "./components-78x40gee.js";
13
14
  import {
14
15
  useSize2
15
- } from "./components-0sn7ypjw.js";
16
+ } from "./components-h83az0bz.js";
16
17
  import {
17
18
  useFluidHover2,
18
19
  useRegisterFluidHoverItem2
19
- } from "./components-59efxjd9.js";
20
+ } from "./components-yhgq0qxx.js";
21
+ import {
22
+ separator_default
23
+ } from "./components-3h92d94m.js";
20
24
  import {
21
25
  SizeProvider2
22
- } from "./components-jjw69c4c.js";
26
+ } from "./components-dcc02hs2.js";
23
27
 
24
28
  // components/card/index.tsx
25
29
  import {
@@ -51,7 +55,7 @@ var CardGroup2 = forwardRef(({
51
55
  ...props
52
56
  }, ref) => {
53
57
  const containerRef = useRef(null);
54
- const shape = useShape();
58
+ const shape = useShape2();
55
59
  const axis = columns > 1 ? "xy" : "y";
56
60
  const hover = useFluidHover2(containerRef, { axis, gapClick: { maxDistance: 16 } });
57
61
  const { activeIndex, handlers, registerItem } = hover;
@@ -116,17 +120,18 @@ var Card2 = forwardRef(({
116
120
  dismissOnHover = true,
117
121
  onDismiss,
118
122
  size,
123
+ border = "none",
119
124
  index,
120
125
  className,
121
126
  children,
122
127
  ...props
123
128
  }, ref) => {
124
129
  const internalRef = useRef(null);
125
- const shape = useShape();
130
+ const shape = useShape2();
126
131
  const sizeClasses = useSize2(size);
127
132
  const compact = sizeClasses.variant === "compact";
128
133
  const group = useContext(CardGroupContext);
129
- const XIcon = useIcon("x");
134
+ const XIcon = useIcon2("x");
130
135
  const orientation = group?.orientation ?? "card";
131
136
  const columns = group?.columns ?? 1;
132
137
  const count = group?.count ?? 1;
@@ -151,7 +156,7 @@ var Card2 = forwardRef(({
151
156
  const inlineImage = isInline && hasImage;
152
157
  const clickable = !!href || !!onClick;
153
158
  const emphasized = selected;
154
- const tileShape = !group ? cn2(shape.container, "overflow-hidden") : separated && outlined ? cn2(shape.container, "overflow-hidden border border-border/60") : "";
159
+ const tileShape = !group ? cn2(shape.container, "overflow-hidden", border === "outlined" && "border border-border/60") : separated && outlined ? cn2(shape.container, "overflow-hidden border border-border/60") : "";
155
160
  const overlay = clickable && !disabled ? href ? /* @__PURE__ */ jsx("a", {
156
161
  href,
157
162
  onClick,
@@ -313,9 +318,22 @@ var CardFooter2 = forwardRef(({ className, ...props }, ref) => {
313
318
  });
314
319
  });
315
320
  CardFooter2.displayName = "CardFooter";
321
+ var CardDivider2 = forwardRef(({ className, orientation, ...props }, ref) => {
322
+ const { orientation: cardOrientation } = useContext(CardContext);
323
+ const compact = useSize2().variant === "compact";
324
+ const vertical = (orientation ?? (cardOrientation === "inline" ? "vertical" : "horizontal")) === "vertical";
325
+ return /* @__PURE__ */ jsx(separator_default, {
326
+ ref,
327
+ "data-slot": "card-divider",
328
+ ...props,
329
+ orientation: vertical ? "vertical" : "horizontal",
330
+ className: cn2("bg-border/60", vertical ? compact ? "my-2.5" : "my-3.5" : compact ? "mt-2.5" : "mt-3", className)
331
+ });
332
+ });
333
+ CardDivider2.displayName = "CardDivider";
316
334
  function CardMedia2({ logo, logoAlt, icon: Icon, size = 22, className }) {
317
335
  const { orientation } = useContext(CardContext);
318
- const shape = useShape();
336
+ const shape = useShape2();
319
337
  const sizeClasses = useSize2();
320
338
  const compact = sizeClasses.variant === "compact";
321
339
  const wrap = cn2(orientation === "inline" ? "" : "mb-2", className);
@@ -420,8 +438,8 @@ function CardButton2({
420
438
  external = false,
421
439
  disabled = false
422
440
  }) {
423
- const shape = useShape();
424
- const ArrowRight = useIcon("arrow-right");
441
+ const shape = useShape2();
442
+ const ArrowRight = useIcon2("arrow-right");
425
443
  const sizeClasses = useSize2();
426
444
  const compact = sizeClasses.variant === "compact";
427
445
  const position = iconPosition ?? (external ? "end" : "start");
@@ -473,6 +491,7 @@ Object.assign(Card2, {
473
491
  Action: CardAction2,
474
492
  Content: CardContent2,
475
493
  Footer: CardFooter2,
494
+ Divider: CardDivider2,
476
495
  Media: CardMedia2,
477
496
  Image: CardImage2,
478
497
  Eyebrow: CardEyebrow2,
@@ -481,4 +500,4 @@ Object.assign(Card2, {
481
500
  });
482
501
  var card_default = Card2;
483
502
 
484
- export { CardGroup2, Card2, CardHeader2, CardTitle2, CardDescription2, CardAction2, CardContent2, CardFooter2, CardMedia2, CardImage2, CardEyebrow2, CardFeature2, CardButton2, card_default };
503
+ export { CardGroup2, Card2, CardHeader2, CardTitle2, CardDescription2, CardAction2, CardContent2, CardFooter2, CardDivider2, CardMedia2, CardImage2, CardEyebrow2, CardFeature2, CardButton2, card_default };
@@ -1,35 +1,39 @@
1
+ "use client";
2
+ import {
3
+ spring2
4
+ } from "./components-3ey0hzpb.js";
1
5
  import {
2
6
  cn2
3
- } from "./components-ezxhrmer.js";
7
+ } from "./components-jcnjay5g.js";
4
8
  import {
5
- GooIndicator
6
- } from "./components-chacnk61.js";
9
+ GooIndicator2
10
+ } from "./components-pw06rbxq.js";
7
11
  import {
8
12
  FluidHoverHighlight2
9
- } from "./components-kvr7f9hy.js";
13
+ } from "./components-qdm3yh26.js";
14
+ import {
15
+ isDisabledRow2
16
+ } from "./components-h6p86be3.js";
10
17
  import {
11
- IndexedRows,
12
- useRowIndex
13
- } from "./components-ta7shw28.js";
18
+ IndexedRows2,
19
+ useRowIndex2
20
+ } from "./components-r8eqs7gz.js";
14
21
  import {
15
- useShape
16
- } from "./components-cv16mryv.js";
22
+ useShape2
23
+ } from "./components-78x40gee.js";
17
24
  import {
18
25
  useSize2
19
- } from "./components-0sn7ypjw.js";
26
+ } from "./components-h83az0bz.js";
20
27
  import {
21
- useControllableState
22
- } from "./components-n7mjr357.js";
28
+ useControllableState2
29
+ } from "./components-tz1fv35x.js";
23
30
  import {
24
31
  useFluidHover2,
25
32
  useRegisterFluidHoverItem2
26
- } from "./components-59efxjd9.js";
33
+ } from "./components-yhgq0qxx.js";
27
34
  import {
28
35
  SizeProvider2
29
- } from "./components-jjw69c4c.js";
30
- import {
31
- spring2
32
- } from "./components-1v7rxytx.js";
36
+ } from "./components-dcc02hs2.js";
33
37
 
34
38
  // components/inputs/radio/index.tsx
35
39
  import { Radio as RadioPrimitive } from "@base-ui/react/radio";
@@ -42,10 +46,11 @@ import {
42
46
  isValidElement,
43
47
  useContext,
44
48
  useEffect,
49
+ useId,
45
50
  useRef,
46
51
  useState
47
52
  } from "react";
48
- import { jsx, jsxs } from "react/jsx-runtime";
53
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
49
54
  var RadioGroupContext = createContext(null);
50
55
  function useRadioGroupContext() {
51
56
  const ctx = useContext(RadioGroupContext);
@@ -61,22 +66,62 @@ var RadioGroup2 = forwardRef(({
61
66
  value: valueProp,
62
67
  defaultValue,
63
68
  onValueChange: onValueChangeProp,
69
+ disabled = false,
70
+ name,
71
+ required,
64
72
  size,
65
73
  className,
66
74
  ...props
67
75
  }, ref) => {
68
- const [selectedIndex, selectIndex] = useControllableState(selectedIndexProp, defaultSelectedIndex, onSelectedIndexChange);
69
- const [value, onValueChange] = useControllableState(valueProp, defaultValue, onValueChangeProp);
76
+ const [selectedIndex, selectIndex] = useControllableState2(selectedIndexProp, defaultSelectedIndex, onSelectedIndexChange);
77
+ const [value, onValueChange] = useControllableState2(valueProp, defaultValue, onValueChangeProp);
70
78
  const containerRef = useRef(null);
71
79
  const childValues = Children.toArray(children).filter(isValidElement).map((child) => child.props.value);
72
- const hover = useFluidHover2(containerRef);
80
+ const hover = useFluidHover2(containerRef, { isItemDisabled: isDisabledRow2 });
73
81
  const { activeIndex, setActiveIndex, itemRects, handlers, registerItem } = hover;
74
82
  const [focusedIndex, setFocusedIndex] = useState(null);
75
83
  const resolvedSelectedIndex = value !== undefined ? childValues.findIndex((childValue) => childValue === value) : selectedIndex ?? -1;
76
84
  const hasSelection = resolvedSelectedIndex >= 0 || Children.toArray(children).filter(isValidElement).some((child) => child.props.selected === true);
77
85
  const focusRect = focusedIndex !== null ? itemRects[focusedIndex] : null;
78
86
  const selectedRect = resolvedSelectedIndex >= 0 ? itemRects[resolvedSelectedIndex] : null;
79
- const shape = useShape();
87
+ const shape = useShape2();
88
+ const hasRows = Children.toArray(children).some((child) => isValidElement(child) && child.props.label !== undefined);
89
+ const setRef = (node) => {
90
+ containerRef.current = node;
91
+ if (typeof ref === "function")
92
+ ref(node);
93
+ else if (ref)
94
+ ref.current = node;
95
+ };
96
+ if (!hasRows) {
97
+ const bare = /* @__PURE__ */ jsx(RadioGroupContext.Provider, {
98
+ value: {
99
+ registerItem,
100
+ activeIndex,
101
+ selectedIndex: null,
102
+ selectedValue: value,
103
+ onValueChange,
104
+ hasSelection,
105
+ selectIndex,
106
+ disabled
107
+ },
108
+ children: /* @__PURE__ */ jsx(RadioGroupPrimitive, {
109
+ ref: setRef,
110
+ value: value ?? null,
111
+ onValueChange: (v) => onValueChange(v),
112
+ disabled,
113
+ name,
114
+ required,
115
+ className: cn2("relative flex flex-col gap-2", className),
116
+ ...props,
117
+ children
118
+ })
119
+ });
120
+ return size ? /* @__PURE__ */ jsx(SizeProvider2, {
121
+ size,
122
+ children: bare
123
+ }) : bare;
124
+ }
80
125
  const content = /* @__PURE__ */ jsxs("div", {
81
126
  ref: (node) => {
82
127
  containerRef.current = node;
@@ -104,7 +149,7 @@ var RadioGroup2 = forwardRef(({
104
149
  setActiveIndex(null);
105
150
  },
106
151
  onKeyDown: (e) => {
107
- const items = Array.from(containerRef.current?.querySelectorAll("[data-fluid-hover-index]") ?? []);
152
+ const items = Array.from(containerRef.current?.querySelectorAll('[data-fluid-hover-index]:not([aria-disabled="true"])') ?? []);
108
153
  const currentIdx = items.indexOf(e.target);
109
154
  if (currentIdx === -1)
110
155
  return;
@@ -128,10 +173,11 @@ var RadioGroup2 = forwardRef(({
128
173
  }
129
174
  },
130
175
  role: "radiogroup",
131
- className: cn2("relative flex flex-col w-72 max-w-full select-none", className),
176
+ "aria-disabled": disabled || undefined,
177
+ className: cn2("relative flex flex-col w-72 max-w-full select-none transition-[opacity] duration-fast", disabled && "opacity-50 pointer-events-none", className),
132
178
  ...props,
133
179
  children: [
134
- selectedRect && /* @__PURE__ */ jsx(GooIndicator, {
180
+ selectedRect && /* @__PURE__ */ jsx(GooIndicator2, {
135
181
  rect: selectedRect,
136
182
  className: cn2("bg-active", shape.bg)
137
183
  }),
@@ -156,7 +202,7 @@ var RadioGroup2 = forwardRef(({
156
202
  }
157
203
  })
158
204
  }),
159
- /* @__PURE__ */ jsx(IndexedRows, {
205
+ /* @__PURE__ */ jsx(IndexedRows2, {
160
206
  children
161
207
  })
162
208
  ]
@@ -174,11 +220,15 @@ var RadioGroup2 = forwardRef(({
174
220
  selectedValue: value,
175
221
  onValueChange,
176
222
  hasSelection,
177
- selectIndex
223
+ selectIndex,
224
+ disabled
178
225
  },
179
226
  children: /* @__PURE__ */ jsx(RadioGroupPrimitive, {
180
227
  value,
181
228
  onValueChange: (v) => onValueChange(v),
229
+ disabled,
230
+ name,
231
+ required,
182
232
  render: content
183
233
  })
184
234
  }));
@@ -189,47 +239,118 @@ var RadioGroup2 = forwardRef(({
189
239
  activeIndex,
190
240
  selectedIndex: selectedIndex ?? null,
191
241
  hasSelection,
192
- selectIndex
242
+ selectIndex,
243
+ disabled
193
244
  },
194
245
  children: content
195
246
  }));
196
247
  });
197
248
  RadioGroup2.displayName = "RadioGroup";
198
- var Radio2 = forwardRef(({ label, index: indexProp, selected, onSelect, value, className, ...props }, ref) => {
249
+ function RadioCircle({ selected, active, compact, skipAnimation, bare }) {
250
+ return /* @__PURE__ */ jsxs(Fragment, {
251
+ children: [
252
+ /* @__PURE__ */ jsx("div", {
253
+ className: cn2("absolute inset-0 rounded-full border-solid transition-all duration-fast", selected ? bare ? "border-[1.5px] border-control" : "border-[1.5px] border-transparent" : active ? "border-[1.5px] border-control" : "border-[1.5px] border-border")
254
+ }),
255
+ /* @__PURE__ */ jsx(AnimatePresence, {
256
+ children: selected && /* @__PURE__ */ jsx(motion.div, {
257
+ className: "absolute inset-0 flex items-center justify-center",
258
+ initial: {
259
+ opacity: skipAnimation ? 1 : 0,
260
+ scale: skipAnimation ? 1 : 0.3
261
+ },
262
+ animate: { opacity: 1, scale: 1 },
263
+ exit: { opacity: 0, scale: 0.3, transition: { duration: 0.04 } },
264
+ transition: spring2.fast,
265
+ children: /* @__PURE__ */ jsx("div", {
266
+ className: cn2("rounded-full bg-foreground", compact ? "w-[7px] h-[7px]" : "w-[8px] h-[8px]")
267
+ })
268
+ })
269
+ })
270
+ ]
271
+ });
272
+ }
273
+ var Radio2 = forwardRef(({ label, index: indexProp, selected, onSelect, value, disabled: disabledProp, className, ...props }, ref) => {
199
274
  const internalRef = useRef(null);
200
275
  const hasMounted = useRef(false);
201
- const { registerItem, activeIndex, selectedIndex, selectedValue, onValueChange, hasSelection, selectIndex } = useRadioGroupContext();
202
- const index = useRowIndex(indexProp);
203
- useRegisterFluidHoverItem2(registerItem, index, internalRef);
276
+ const {
277
+ registerItem,
278
+ activeIndex,
279
+ selectedIndex,
280
+ selectedValue,
281
+ onValueChange,
282
+ hasSelection,
283
+ selectIndex,
284
+ disabled: groupDisabled
285
+ } = useRadioGroupContext();
286
+ const index = useRowIndex2(indexProp);
287
+ const labelId = useId();
288
+ const [hovered, setHovered] = useState(false);
289
+ const bare = label === undefined;
290
+ const disabled = disabledProp ?? groupDisabled;
291
+ useRegisterFluidHoverItem2(bare ? undefined : registerItem, index, internalRef);
204
292
  useEffect(() => {
205
293
  hasMounted.current = true;
206
294
  }, []);
207
- const isActive = activeIndex === index;
295
+ const isActive = bare ? hovered : activeIndex === index;
208
296
  const skipAnimation = !hasMounted.current;
209
- const shape = useShape();
297
+ const shape = useShape2();
210
298
  const sizeClasses = useSize2();
211
299
  const compact = sizeClasses.variant === "compact";
212
300
  const isSelected = value !== undefined && selectedValue !== undefined ? selectedValue === value : selected ?? selectedIndex === index;
213
301
  const handleSelect = () => {
302
+ if (disabled)
303
+ return;
214
304
  if (value !== undefined) {
215
305
  onValueChange?.(value);
216
306
  }
217
307
  onSelect?.();
218
308
  selectIndex(index);
219
309
  };
310
+ const setRef = (node) => {
311
+ internalRef.current = node;
312
+ if (typeof ref === "function")
313
+ ref(node);
314
+ else if (ref)
315
+ ref.current = node;
316
+ };
317
+ const circle = /* @__PURE__ */ jsx(RadioCircle, {
318
+ selected: isSelected,
319
+ active: isActive,
320
+ compact,
321
+ skipAnimation,
322
+ bare
323
+ });
324
+ if (bare) {
325
+ return /* @__PURE__ */ jsx(RadioPrimitive.Root, {
326
+ ref: setRef,
327
+ render: /* @__PURE__ */ jsx("div", {}),
328
+ value,
329
+ disabled,
330
+ onClick: () => {
331
+ if (!disabled)
332
+ onSelect?.();
333
+ },
334
+ onPointerEnter: (e) => {
335
+ if (e.pointerType === "mouse")
336
+ setHovered(true);
337
+ },
338
+ onPointerLeave: () => setHovered(false),
339
+ className: cn2("relative inline-flex shrink-0 cursor-pointer rounded-full outline-none transition-[opacity] duration-fast", "focus-visible:ring-1 focus-visible:ring-focus-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background", compact ? "size-3.5" : "size-4", disabled && "opacity-50 pointer-events-none", className),
340
+ ...props,
341
+ children: circle
342
+ });
343
+ }
220
344
  return /* @__PURE__ */ jsxs("div", {
221
- ref: (node) => {
222
- internalRef.current = node;
223
- if (typeof ref === "function")
224
- ref(node);
225
- else if (ref)
226
- ref.current = node;
227
- },
345
+ ref: setRef,
228
346
  "data-fluid-hover-index": index,
229
- tabIndex: isSelected ? 0 : !hasSelection && index === 0 ? 0 : -1,
347
+ "data-disabled": disabled || undefined,
348
+ tabIndex: disabled ? -1 : isSelected ? 0 : !hasSelection && index === 0 ? 0 : -1,
230
349
  role: "radio",
231
350
  "aria-checked": isSelected,
232
- "aria-label": label,
351
+ "aria-disabled": disabled || undefined,
352
+ "aria-label": typeof label === "string" ? label : undefined,
353
+ "aria-labelledby": typeof label !== "string" ? labelId : undefined,
233
354
  onClick: handleSelect,
234
355
  onMouseDown: (e) => {
235
356
  const interactive = e.target.closest('button:not([tabindex="-1"]), a[href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
@@ -244,31 +365,12 @@ var Radio2 = forwardRef(({ label, index: indexProp, selected, onSelect, value, c
244
365
  handleSelect();
245
366
  }
246
367
  },
247
- className: cn2(`relative z-10 flex ${sizeClasses.control} items-center ${sizeClasses.gap} ${shape.item} ${sizeClasses.px} cursor-pointer outline-none`, className),
368
+ className: cn2(`relative z-10 flex ${sizeClasses.control} items-center ${sizeClasses.gap} ${shape.item} ${sizeClasses.px} cursor-pointer outline-none transition-[opacity] duration-fast`, disabled && "pointer-events-none", disabled && !groupDisabled && "opacity-50", className),
248
369
  ...props,
249
370
  children: [
250
- /* @__PURE__ */ jsxs("div", {
371
+ /* @__PURE__ */ jsx("div", {
251
372
  className: cn2("relative shrink-0", compact ? "w-[14px] h-[14px]" : "w-[16px] h-[16px]"),
252
- children: [
253
- /* @__PURE__ */ jsx("div", {
254
- className: cn2("absolute inset-0 rounded-full border-solid transition-all duration-fast", isSelected ? "border-[1.5px] border-transparent" : isActive ? "border-[1.5px] border-control" : "border-[1.5px] border-border")
255
- }),
256
- /* @__PURE__ */ jsx(AnimatePresence, {
257
- children: isSelected && /* @__PURE__ */ jsx(motion.div, {
258
- className: "absolute inset-0 flex items-center justify-center",
259
- initial: {
260
- opacity: skipAnimation ? 1 : 0,
261
- scale: skipAnimation ? 1 : 0.3
262
- },
263
- animate: { opacity: 1, scale: 1 },
264
- exit: { opacity: 0, scale: 0.3, transition: { duration: 0.04 } },
265
- transition: spring2.fast,
266
- children: /* @__PURE__ */ jsx("div", {
267
- className: cn2("rounded-full bg-foreground", compact ? "w-[7px] h-[7px]" : "w-[8px] h-[8px]")
268
- })
269
- })
270
- })
271
- ]
373
+ children: circle
272
374
  }),
273
375
  /* @__PURE__ */ jsxs("span", {
274
376
  className: cn2("inline-grid", sizeClasses.text),
@@ -279,6 +381,7 @@ var Radio2 = forwardRef(({ label, index: indexProp, selected, onSelect, value, c
279
381
  children: label
280
382
  }),
281
383
  /* @__PURE__ */ jsx("span", {
384
+ id: labelId,
282
385
  className: cn2("col-start-1 row-start-1 transition-[color,font-variation-settings] duration-fast [text-box:trim-both_cap_alphabetic]", isSelected || isActive ? "text-foreground" : "text-muted-foreground", isSelected ? "weight-semibold" : "weight-normal"),
283
386
  children: label
284
387
  })
@@ -286,6 +389,7 @@ var Radio2 = forwardRef(({ label, index: indexProp, selected, onSelect, value, c
286
389
  }),
287
390
  value !== undefined && /* @__PURE__ */ jsx(RadioPrimitive.Root, {
288
391
  value,
392
+ disabled,
289
393
  className: "sr-only",
290
394
  tabIndex: -1,
291
395
  "aria-hidden": true