@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,14 +1,16 @@
1
1
  import {
2
2
  SizeProvider2
3
- } from "../../shared/components-jjw69c4c.js";
3
+ } from "../../shared/components-dcc02hs2.js";
4
4
  import {
5
- sizeMap2,
6
- typeScale2,
7
5
  useTypeScale2,
8
6
  useSizeVariant2,
9
7
  useSize2,
10
8
  useSizeContext2
11
- } from "../../shared/components-0sn7ypjw.js";
9
+ } from "../../shared/components-h83az0bz.js";
10
+ import {
11
+ sizeMap2,
12
+ typeScale2
13
+ } from "../../shared/components-34txk9rj.js";
12
14
  export {
13
15
  SizeProvider2 as SizeProvider,
14
16
  SizeProvider2 as default,
@@ -0,0 +1,35 @@
1
+ import { ComponentPropsWithoutRef } from "react";
2
+ type SizeVariant = "default" | "compact";
3
+ import { ForwardRefExoticComponent as ForwardRefExoticComponent_tcubfn } from "react";
4
+ import { RefAttributes as RefAttributes_miuf56 } from "react";
5
+ interface SkeletonProps extends Omit<ComponentPropsWithoutRef<"div">, "children"> {
6
+ /** Renders a stack of this many row placeholders, each one control tall and 4px apart, for a list or table still loading. Omitted, the skeleton is one block you size with `className`. */
7
+ rows?: number;
8
+ /** Frames the rows in a hairline container, like an outlined Card.Group. Only with `rows`. Defaults to `false`. */
9
+ bordered?: boolean;
10
+ /** Pins the rows to one step of the size ladder (36px default, 28px compact). Defaults to the surrounding SizeProvider. */
11
+ size?: SizeVariant;
12
+ /** Classes for the block (its width, height and radius) or, with `rows`, for the stack. */
13
+ className?: string;
14
+ }
15
+ /**
16
+ * A placeholder that holds the place of content still loading, so nothing
17
+ * jumps when it arrives.
18
+ *
19
+ * One block by default: give it the size of what it stands for through
20
+ * `className` (`h-4 w-40` for a line of text, `size-9 rounded-full` for an
21
+ * avatar). With `rows` it becomes a stack of rows one control tall (36px,
22
+ * 28px compact), the height of a list or menu row, 4px apart; `bordered`
23
+ * frames them like an outlined group (the row corners nest inside the
24
+ * frame's). It stands in for a table too, though a table's rows sit at their
25
+ * own pitch (a control plus a 1px hairline), so the stack is a close match,
26
+ * not a line-for-line one. The fill is a light mix of the foreground, so it
27
+ * reads on any surface level in light and dark, and every placeholder pulses
28
+ * in step, in opacity only: a fade, so it stays under reduced motion too.
29
+ * Placeholders are hidden from assistive tech: mark the region that is
30
+ * loading with `aria-busy`.
31
+ *
32
+ * @example {@include ./examples.mdx}
33
+ */
34
+ declare const Skeleton: ForwardRefExoticComponent_tcubfn<SkeletonProps & RefAttributes_miuf56<HTMLDivElement>>;
35
+ export { Skeleton, SkeletonProps, Skeleton as default };
@@ -0,0 +1,12 @@
1
+ import {
2
+ Skeleton2,
3
+ skeleton_default
4
+ } from "../../shared/components-wktrrb4m.js";
5
+ import"../../shared/components-h83az0bz.js";
6
+ import"../../shared/components-34txk9rj.js";
7
+ import"../../shared/components-78x40gee.js";
8
+ import"../../shared/components-jcnjay5g.js";
9
+ export {
10
+ Skeleton2 as Skeleton,
11
+ skeleton_default as default
12
+ };
@@ -1,13 +1,15 @@
1
1
  import {
2
2
  Elevated2,
3
3
  surface_default
4
- } from "../../shared/components-vc7vq5nz.js";
4
+ } from "../../shared/components-9as3rf68.js";
5
+ import {
6
+ surfaceClasses2
7
+ } from "../../shared/components-vf45j12c.js";
5
8
  import {
6
- surfaceClasses2,
7
9
  useSurface2,
8
10
  SurfaceProvider2
9
- } from "../../shared/components-zx6b6yby.js";
10
- import"../../shared/components-ezxhrmer.js";
11
+ } from "../../shared/components-dhgk6mbt.js";
12
+ import"../../shared/components-jcnjay5g.js";
11
13
  export {
12
14
  Elevated2 as Elevated,
13
15
  SurfaceProvider2 as SurfaceProvider,
@@ -1,27 +1,30 @@
1
+ "use client";
1
2
  import {
2
- MorphSurface
3
- } from "./components-0q0sqfh4.js";
4
- import {
5
- opensInPlace,
6
- inPlaceOffset,
7
- useMorphOrigin,
8
- useMorph
9
- } from "./components-hqeq3w9q.js";
3
+ opensInPlace2,
4
+ inPlaceOffset2,
5
+ useMorphOrigin2,
6
+ useMorph2
7
+ } from "./components-awra5sff.js";
10
8
  import {
11
9
  cn2
12
- } from "./components-ezxhrmer.js";
10
+ } from "./components-jcnjay5g.js";
11
+ import {
12
+ MorphSurface2
13
+ } from "./components-4y816hwp.js";
14
+ import {
15
+ useShape2
16
+ } from "./components-78x40gee.js";
13
17
  import {
14
- useShape
15
- } from "./components-cv16mryv.js";
18
+ SURFACE_BG2,
19
+ SURFACE_SHADOW2
20
+ } from "./components-vf45j12c.js";
16
21
  import {
17
- SURFACE_BG,
18
- SURFACE_SHADOW,
19
22
  useSurface2,
20
23
  SurfaceProvider2
21
- } from "./components-zx6b6yby.js";
24
+ } from "./components-dhgk6mbt.js";
22
25
  import {
23
- useControllableState
24
- } from "./components-n7mjr357.js";
26
+ useControllableState2
27
+ } from "./components-tz1fv35x.js";
25
28
 
26
29
  // components/overlays/preview-card/index.tsx
27
30
  import { PreviewCard as PreviewCardPrimitive } from "@base-ui/react/preview-card";
@@ -55,17 +58,17 @@ var PreviewCardContent2 = forwardRef(({
55
58
  ...props
56
59
  }, ref) => {
57
60
  const { open, origin } = useContext(PreviewCardContext);
58
- const morph = useMorph(open, origin, { from, effect, hideSource, tier });
59
- const inPlace = opensInPlace({ effect, hideSource });
61
+ const morph = useMorph2(open, origin, { from, effect, hideSource, tier });
62
+ const inPlace = opensInPlace2({ effect, hideSource });
60
63
  useImperativeHandle(ref, () => morph.popup, [morph.popup]);
61
- const shape = useShape();
64
+ const shape = useShape2();
62
65
  const level = Math.min(useSurface2() + 2, 8);
63
66
  return /* @__PURE__ */ jsx(PreviewCardPrimitive.Portal, {
64
67
  container: container ?? undefined,
65
68
  children: /* @__PURE__ */ jsx(PreviewCardPrimitive.Positioner, {
66
69
  side,
67
70
  align: align ?? (inPlace ? "start" : "center"),
68
- sideOffset: inPlace ? inPlaceOffset : sideOffset,
71
+ sideOffset: inPlace ? inPlaceOffset2 : sideOffset,
69
72
  className: "z-50 outline-none",
70
73
  children: /* @__PURE__ */ jsx(PreviewCardPrimitive.Popup, {
71
74
  ref: morph.popupRef,
@@ -73,10 +76,10 @@ var PreviewCardContent2 = forwardRef(({
73
76
  ...props,
74
77
  children: /* @__PURE__ */ jsx(SurfaceProvider2, {
75
78
  value: level,
76
- children: /* @__PURE__ */ jsx(MorphSurface, {
79
+ children: /* @__PURE__ */ jsx(MorphSurface2, {
77
80
  morph,
78
- bg: SURFACE_BG[level],
79
- shadow: SURFACE_SHADOW[3],
81
+ bg: SURFACE_BG2[level],
82
+ shadow: SURFACE_SHADOW2[3],
80
83
  radius: shape.container,
81
84
  className: cn2("flex w-max max-w-[min(92vw,20rem)] flex-col gap-3 p-4", className),
82
85
  children
@@ -88,8 +91,8 @@ var PreviewCardContent2 = forwardRef(({
88
91
  });
89
92
  PreviewCardContent2.displayName = "PreviewCardContent";
90
93
  function PreviewCard2({ open, defaultOpen = false, onOpenChange, children }) {
91
- const [current, setCurrent] = useControllableState(open, defaultOpen, onOpenChange);
92
- const { origin, capture } = useMorphOrigin();
94
+ const [current, setCurrent] = useControllableState2(open, defaultOpen, onOpenChange);
95
+ const { origin, capture } = useMorphOrigin2();
93
96
  const ctx = useMemo(() => ({ open: current, origin }), [current, origin]);
94
97
  return /* @__PURE__ */ jsx(PreviewCardContext.Provider, {
95
98
  value: ctx,
@@ -0,0 +1,53 @@
1
+ // lib/field-variants.ts
2
+ import { cva } from "class-variance-authority";
3
+ var fieldVariants2 = cva([
4
+ "group/field ring-1 cursor-text transition-[background-color,box-shadow,opacity] duration-fast",
5
+ "hover:bg-muted/50 hover:ring-border data-[active]:bg-muted/50 data-[active]:ring-border",
6
+ "focus-within:!bg-card focus-within:ring-border",
7
+ "data-[invalid]:!ring-destructive/50 data-[invalid]:hover:bg-destructive-light/60 data-[invalid]:data-[active]:bg-destructive-light/60",
8
+ "data-[disabled]:ring-border data-[disabled]:opacity-50 data-[disabled]:pointer-events-none",
9
+ "data-[readonly]:cursor-default data-[readonly]:hover:!bg-transparent data-[readonly]:data-[active]:!bg-transparent data-[readonly]:focus-within:!bg-transparent"
10
+ ], {
11
+ variants: {
12
+ variant: {
13
+ borderless: "bg-transparent ring-transparent",
14
+ bordered: "bg-transparent ring-border"
15
+ }
16
+ },
17
+ defaultVariants: {
18
+ variant: "borderless"
19
+ }
20
+ });
21
+ var fieldIconClasses2 = "shrink-0 text-muted-foreground transition-[color,stroke-width] duration-fast group-hover/field:text-foreground group-hover/field:stroke-[2] group-data-[active]/field:text-foreground group-data-[active]/field:stroke-[2] group-focus-within/field:text-foreground group-focus-within/field:stroke-[2]";
22
+ var fieldAdornmentClasses2 = "flex shrink-0 items-center whitespace-nowrap text-muted-foreground transition-[color] duration-fast group-hover/field:text-foreground group-data-[active]/field:text-foreground group-focus-within/field:text-foreground";
23
+ var FIELD_ADORNMENT_ICON2 = {
24
+ default: "[&_svg]:size-4",
25
+ compact: "[&_svg]:size-3.5"
26
+ };
27
+ var FIELD_ACTION2 = {
28
+ default: "size-7 -mx-1.5 [&_svg]:size-4",
29
+ compact: "size-5 -mx-1 [&_svg]:size-3.5"
30
+ };
31
+ var FIELD_ACTION_BOX2 = {
32
+ default: "size-7 [&_svg]:size-4",
33
+ compact: "size-5 [&_svg]:size-3.5"
34
+ };
35
+ var FIELD_ACTION_END2 = {
36
+ default: "-mr-1.5",
37
+ compact: "-mr-1"
38
+ };
39
+ var FIELD_ACTION_RADIUS2 = {
40
+ rounded: "rounded-sm",
41
+ pill: "rounded-full"
42
+ };
43
+ var fieldActionClasses2 = "relative inline-flex shrink-0 cursor-pointer items-center justify-center text-muted-foreground outline-none transition-[color,background-color,opacity] duration-fast hover:bg-hover hover:text-foreground active:bg-active focus-visible:ring-1 focus-visible:ring-focus-ring disabled:pointer-events-none disabled:opacity-50 data-[disabled]:pointer-events-none data-[disabled]:opacity-50";
44
+ var FIELD_PX2 = {
45
+ default: "px-2.5",
46
+ compact: "px-2"
47
+ };
48
+ var FIELD_TEXT_INSET2 = {
49
+ default: "pl-2.5",
50
+ compact: "pl-2"
51
+ };
52
+
53
+ export { fieldVariants2, fieldIconClasses2, fieldAdornmentClasses2, FIELD_ADORNMENT_ICON2, FIELD_ACTION2, FIELD_ACTION_BOX2, FIELD_ACTION_END2, FIELD_ACTION_RADIUS2, fieldActionClasses2, FIELD_PX2, FIELD_TEXT_INSET2 };
@@ -1,50 +1,23 @@
1
+ "use client";
1
2
  import {
2
- useReduceMotion
3
- } from "./components-men63rwj.js";
3
+ useReduceMotion2
4
+ } from "./components-de99ykt7.js";
4
5
  import {
5
6
  cn2
6
- } from "./components-ezxhrmer.js";
7
+ } from "./components-jcnjay5g.js";
7
8
  import {
8
9
  FluidHoverHighlight2
9
- } from "./components-kvr7f9hy.js";
10
+ } from "./components-qdm3yh26.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
-
21
- // lib/date-locale.ts
22
- import { isValid, parse } from "date-fns";
23
- import { enUS } from "react-day-picker/locale";
24
- var defaultLocale = enUS;
25
- function hourCycleOf(locale) {
26
- return new Intl.DateTimeFormat(locale.code, { hour: "numeric" }).resolvedOptions().hourCycle ?? "h23";
27
- }
28
- function parseWith(text, patterns, locale, reference) {
29
- for (const pattern of patterns) {
30
- const date = parse(text.trim(), pattern, reference, { locale });
31
- if (isValid(date) && date.getFullYear() >= 1000)
32
- return date;
33
- }
34
- return null;
35
- }
36
- function parseDateText(text, locale, reference = new Date) {
37
- return parseWith(text, ["P", "PP", "PPP", "PPPP"], locale, reference);
38
- }
39
- function parseTimeText(text, locale, reference = new Date) {
40
- return parseWith(text, ["p", "HH:mm", "H:mm"], locale, reference);
41
- }
42
- function parseMonthText(text, locale, reference = new Date) {
43
- return parseWith(text, ["LLLL y", "LLL y", "MM/y", "M/y", "MM.y"], locale, reference);
44
- }
45
- function fieldLabel(locale, field) {
46
- return new Intl.DisplayNames(locale.code, { type: "dateTimeField" }).of(field) ?? field;
47
- }
20
+ } from "./components-yhgq0qxx.js";
48
21
 
49
22
  // lib/scroll-column.tsx
50
23
  import { useEffect, useRef } from "react";
@@ -60,9 +33,9 @@ function centre(list, item, behavior) {
60
33
  behavior
61
34
  });
62
35
  }
63
- var dividedColumns = "flex [&>*+*]:border-s [&>*]:border-border";
36
+ var dividedColumns2 = "flex [&>*+*]:border-s [&>*]:border-border";
64
37
  var STEP = { ArrowDown: 1, ArrowRight: 1, ArrowUp: -1, ArrowLeft: -1 };
65
- function ScrollColumn({
38
+ function ScrollColumn2({
66
39
  label,
67
40
  options,
68
41
  value,
@@ -76,10 +49,10 @@ function ScrollColumn({
76
49
  const containerRef = useRef(null);
77
50
  const pointerInside = useRef(false);
78
51
  const centred = useRef(false);
79
- const reduceMotion = useReduceMotion();
52
+ const reduceMotion = useReduceMotion2();
80
53
  const horizontal = orientation === "horizontal";
81
54
  const hover = useFluidHover2(containerRef, { axis: horizontal ? "x" : "y" });
82
- const shape = useShape();
55
+ const shape = useShape2();
83
56
  const axis = useRef(horizontal);
84
57
  useEffect(() => {
85
58
  const list = listRef.current;
@@ -172,7 +145,7 @@ function ScrollColumnItem({
172
145
  }) {
173
146
  const ref = useRef(null);
174
147
  useRegisterFluidHoverItem2(registerItem, index, ref);
175
- const shape = useShape();
148
+ const shape = useShape2();
176
149
  const sizeClasses = useSize2();
177
150
  return /* @__PURE__ */ jsxs("button", {
178
151
  ref,
@@ -194,5 +167,4 @@ function ScrollColumnItem({
194
167
  ]
195
168
  });
196
169
  }
197
-
198
- export { defaultLocale, hourCycleOf, parseDateText, parseTimeText, parseMonthText, fieldLabel, dividedColumns, ScrollColumn };
170
+ export { dividedColumns2, ScrollColumn2 };
@@ -0,0 +1,322 @@
1
+ // components/inputs/color-picker/variants.ts
2
+ function clamp012(n) {
3
+ return Math.max(0, Math.min(1, n));
4
+ }
5
+ function clamp255(n) {
6
+ return Math.max(0, Math.min(255, n));
7
+ }
8
+ function hsvToRgb2(h, s, v) {
9
+ const c = v * s;
10
+ const hh = (h % 360 + 360) % 360 / 60;
11
+ const x = c * (1 - Math.abs(hh % 2 - 1));
12
+ let r = 0, g = 0, b = 0;
13
+ if (hh < 1) {
14
+ r = c;
15
+ g = x;
16
+ b = 0;
17
+ } else if (hh < 2) {
18
+ r = x;
19
+ g = c;
20
+ b = 0;
21
+ } else if (hh < 3) {
22
+ r = 0;
23
+ g = c;
24
+ b = x;
25
+ } else if (hh < 4) {
26
+ r = 0;
27
+ g = x;
28
+ b = c;
29
+ } else if (hh < 5) {
30
+ r = x;
31
+ g = 0;
32
+ b = c;
33
+ } else {
34
+ r = c;
35
+ g = 0;
36
+ b = x;
37
+ }
38
+ const m = v - c;
39
+ return { r: (r + m) * 255, g: (g + m) * 255, b: (b + m) * 255 };
40
+ }
41
+ function rgbToHsv2(r, g, b) {
42
+ r /= 255;
43
+ g /= 255;
44
+ b /= 255;
45
+ const max = Math.max(r, g, b);
46
+ const min = Math.min(r, g, b);
47
+ const v = max;
48
+ const d = max - min;
49
+ const s = max === 0 ? 0 : d / max;
50
+ let h = 0;
51
+ if (d > 0) {
52
+ if (max === r)
53
+ h = (g - b) / d % 6;
54
+ else if (max === g)
55
+ h = (b - r) / d + 2;
56
+ else
57
+ h = (r - g) / d + 4;
58
+ h *= 60;
59
+ if (h < 0)
60
+ h += 360;
61
+ }
62
+ return { h, s, v };
63
+ }
64
+ function rgbToHsl2(r, g, b) {
65
+ r /= 255;
66
+ g /= 255;
67
+ b /= 255;
68
+ const max = Math.max(r, g, b);
69
+ const min = Math.min(r, g, b);
70
+ const l = (max + min) / 2;
71
+ const d = max - min;
72
+ let h = 0, s = 0;
73
+ if (d > 0) {
74
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
75
+ if (max === r)
76
+ h = (g - b) / d % 6;
77
+ else if (max === g)
78
+ h = (b - r) / d + 2;
79
+ else
80
+ h = (r - g) / d + 4;
81
+ h *= 60;
82
+ if (h < 0)
83
+ h += 360;
84
+ }
85
+ return { h, s, l };
86
+ }
87
+ function hslToRgb2(h, s, l) {
88
+ const c = (1 - Math.abs(2 * l - 1)) * s;
89
+ const hh = (h % 360 + 360) % 360 / 60;
90
+ const x = c * (1 - Math.abs(hh % 2 - 1));
91
+ let r = 0, g = 0, b = 0;
92
+ if (hh < 1) {
93
+ r = c;
94
+ g = x;
95
+ } else if (hh < 2) {
96
+ r = x;
97
+ g = c;
98
+ } else if (hh < 3) {
99
+ g = c;
100
+ b = x;
101
+ } else if (hh < 4) {
102
+ g = x;
103
+ b = c;
104
+ } else if (hh < 5) {
105
+ r = x;
106
+ b = c;
107
+ } else {
108
+ r = c;
109
+ b = x;
110
+ }
111
+ const m = l - c / 2;
112
+ return { r: (r + m) * 255, g: (g + m) * 255, b: (b + m) * 255 };
113
+ }
114
+ function srgbToLinear(c) {
115
+ c = c / 255;
116
+ return c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
117
+ }
118
+ function linearToSrgb(c) {
119
+ const v = c <= 0.0031308 ? 12.92 * c : 1.055 * c ** (1 / 2.4) - 0.055;
120
+ return clamp012(v) * 255;
121
+ }
122
+ function linearRgbToOklab(r, g, b) {
123
+ const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;
124
+ const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;
125
+ const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;
126
+ const l_ = Math.cbrt(l);
127
+ const m_ = Math.cbrt(m);
128
+ const s_ = Math.cbrt(s);
129
+ return {
130
+ L: 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_,
131
+ a: 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_,
132
+ b: 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_
133
+ };
134
+ }
135
+ function oklabToLinearRgb(L, a, b) {
136
+ const l_ = L + 0.3963377774 * a + 0.2158037573 * b;
137
+ const m_ = L - 0.1055613458 * a - 0.0638541728 * b;
138
+ const s_ = L - 0.0894841775 * a - 1.291485548 * b;
139
+ const l = l_ * l_ * l_;
140
+ const m = m_ * m_ * m_;
141
+ const s = s_ * s_ * s_;
142
+ return {
143
+ r: 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,
144
+ g: -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,
145
+ b: -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s
146
+ };
147
+ }
148
+ function rgbToOklch2(r, g, b) {
149
+ const lr = srgbToLinear(r);
150
+ const lg = srgbToLinear(g);
151
+ const lb = srgbToLinear(b);
152
+ const lab = linearRgbToOklab(lr, lg, lb);
153
+ const C = Math.sqrt(lab.a * lab.a + lab.b * lab.b);
154
+ let H = Math.atan2(lab.b, lab.a) * 180 / Math.PI;
155
+ if (H < 0)
156
+ H += 360;
157
+ return { L: lab.L, C, H };
158
+ }
159
+ function oklchToRgb2(L, C, H) {
160
+ const a = C * Math.cos(H * Math.PI / 180);
161
+ const b = C * Math.sin(H * Math.PI / 180);
162
+ const lin = oklabToLinearRgb(L, a, b);
163
+ return {
164
+ r: clamp255(linearToSrgb(lin.r)),
165
+ g: clamp255(linearToSrgb(lin.g)),
166
+ b: clamp255(linearToSrgb(lin.b))
167
+ };
168
+ }
169
+ function to2hex(n) {
170
+ return Math.round(clamp255(n)).toString(16).padStart(2, "0");
171
+ }
172
+ function rgbToHexStr2(r, g, b, a) {
173
+ if (a >= 1)
174
+ return `#${to2hex(r)}${to2hex(g)}${to2hex(b)}`;
175
+ return `#${to2hex(r)}${to2hex(g)}${to2hex(b)}${to2hex(a * 255)}`;
176
+ }
177
+ function expandShortHex(h) {
178
+ if (h.length === 3)
179
+ return h.split("").map((c) => c + c).join("");
180
+ if (h.length === 4)
181
+ return h.split("").map((c) => c + c).join("");
182
+ return h;
183
+ }
184
+ function parseHex(input) {
185
+ const m = input.trim().match(/^#?([0-9a-fA-F]{3,8})$/);
186
+ if (!m)
187
+ return null;
188
+ let h = m[1];
189
+ if (h.length === 3 || h.length === 4)
190
+ h = expandShortHex(h);
191
+ if (h.length === 6) {
192
+ return {
193
+ r: parseInt(h.slice(0, 2), 16),
194
+ g: parseInt(h.slice(2, 4), 16),
195
+ b: parseInt(h.slice(4, 6), 16),
196
+ a: 1
197
+ };
198
+ }
199
+ if (h.length === 8) {
200
+ return {
201
+ r: parseInt(h.slice(0, 2), 16),
202
+ g: parseInt(h.slice(2, 4), 16),
203
+ b: parseInt(h.slice(4, 6), 16),
204
+ a: parseInt(h.slice(6, 8), 16) / 255
205
+ };
206
+ }
207
+ return null;
208
+ }
209
+ function parseAlphaPart(part) {
210
+ if (part === undefined)
211
+ return 1;
212
+ return part.endsWith("%") ? parseFloat(part) / 100 : parseFloat(part);
213
+ }
214
+ function parseColor2(input) {
215
+ const s = input.trim();
216
+ if (!s)
217
+ return null;
218
+ if (s.startsWith("#") || /^[0-9a-fA-F]{3,8}$/.test(s)) {
219
+ return parseHex(s);
220
+ }
221
+ const rgbM = s.match(/^rgba?\(\s*([^)]+)\)$/i);
222
+ if (rgbM) {
223
+ const parts = rgbM[1].split(/[\s,/]+/).filter(Boolean);
224
+ if (parts.length < 3)
225
+ return null;
226
+ const r = parseFloat(parts[0]);
227
+ const g = parseFloat(parts[1]);
228
+ const b = parseFloat(parts[2]);
229
+ const a = parseAlphaPart(parts[3]);
230
+ if ([r, g, b, a].some(Number.isNaN))
231
+ return null;
232
+ return { r: clamp255(r), g: clamp255(g), b: clamp255(b), a: clamp012(a) };
233
+ }
234
+ const hslM = s.match(/^hsla?\(\s*([^)]+)\)$/i);
235
+ if (hslM) {
236
+ const parts = hslM[1].split(/[\s,/]+/).filter(Boolean);
237
+ if (parts.length < 3)
238
+ return null;
239
+ const h = parseFloat(parts[0]);
240
+ const sat = parts[1].endsWith("%") ? parseFloat(parts[1]) / 100 : parseFloat(parts[1]);
241
+ const l = parts[2].endsWith("%") ? parseFloat(parts[2]) / 100 : parseFloat(parts[2]);
242
+ const a = parseAlphaPart(parts[3]);
243
+ if ([h, sat, l, a].some(Number.isNaN))
244
+ return null;
245
+ const rgb = hslToRgb2(h, clamp012(sat), clamp012(l));
246
+ return { r: clamp255(rgb.r), g: clamp255(rgb.g), b: clamp255(rgb.b), a: clamp012(a) };
247
+ }
248
+ const oklchM = s.match(/^oklch\(\s*([^)]+)\)$/i);
249
+ if (oklchM) {
250
+ const parts = oklchM[1].split(/[\s,/]+/).filter(Boolean);
251
+ if (parts.length < 3)
252
+ return null;
253
+ const L = parts[0].endsWith("%") ? parseFloat(parts[0]) / 100 : parseFloat(parts[0]);
254
+ const C = parseFloat(parts[1]);
255
+ const H = parseFloat(parts[2]);
256
+ const a = parseAlphaPart(parts[3]);
257
+ if ([L, C, H, a].some(Number.isNaN))
258
+ return null;
259
+ const rgb = oklchToRgb2(clamp012(L), Math.max(0, C), H);
260
+ return { r: clamp255(rgb.r), g: clamp255(rgb.g), b: clamp255(rgb.b), a: clamp012(a) };
261
+ }
262
+ return null;
263
+ }
264
+ var cssColorCtx = null;
265
+ function resolveCssColor2(input) {
266
+ const direct = parseColor2(input);
267
+ if (direct)
268
+ return direct;
269
+ const s = input.trim();
270
+ if (!s || typeof document === "undefined")
271
+ return null;
272
+ if (!cssColorCtx) {
273
+ cssColorCtx = document.createElement("canvas").getContext("2d");
274
+ if (!cssColorCtx)
275
+ return null;
276
+ }
277
+ const ctx = cssColorCtx;
278
+ ctx.fillStyle = "#000000";
279
+ ctx.fillStyle = s;
280
+ const first = String(ctx.fillStyle);
281
+ ctx.fillStyle = "#ffffff";
282
+ ctx.fillStyle = s;
283
+ const second = String(ctx.fillStyle);
284
+ if (first !== second)
285
+ return null;
286
+ return parseColor2(first);
287
+ }
288
+ function buildParsed2(h, s, v, a) {
289
+ const { r, g, b } = hsvToRgb2(h, s, v);
290
+ const hsl = rgbToHsl2(r, g, b);
291
+ const oklch = rgbToOklch2(r, g, b);
292
+ const hex = rgbToHexStr2(r, g, b, a);
293
+ const rgbStr = a >= 1 ? `rgb(${Math.round(r)}, ${Math.round(g)}, ${Math.round(b)})` : `rgba(${Math.round(r)}, ${Math.round(g)}, ${Math.round(b)}, ${Number(a.toFixed(3))})`;
294
+ const hslStr = a >= 1 ? `hsl(${Math.round(hsl.h)}, ${Math.round(hsl.s * 100)}%, ${Math.round(hsl.l * 100)}%)` : `hsla(${Math.round(hsl.h)}, ${Math.round(hsl.s * 100)}%, ${Math.round(hsl.l * 100)}%, ${Number(a.toFixed(3))})`;
295
+ const oklchStr = a >= 1 ? `oklch(${(oklch.L * 100).toFixed(1)}% ${oklch.C.toFixed(3)} ${oklch.H.toFixed(1)})` : `oklch(${(oklch.L * 100).toFixed(1)}% ${oklch.C.toFixed(3)} ${oklch.H.toFixed(1)} / ${Number(a.toFixed(3))})`;
296
+ return {
297
+ h,
298
+ s,
299
+ v,
300
+ a,
301
+ r: Math.round(r),
302
+ g: Math.round(g),
303
+ b: Math.round(b),
304
+ hex,
305
+ rgb: rgbStr,
306
+ hsl: hslStr,
307
+ oklch: oklchStr
308
+ };
309
+ }
310
+ function formatValueByFormat2(parsed, fmt) {
311
+ switch (fmt) {
312
+ case "hex":
313
+ return parsed.hex;
314
+ case "rgb":
315
+ return parsed.rgb;
316
+ case "hsl":
317
+ return parsed.hsl;
318
+ case "oklch":
319
+ return parsed.oklch;
320
+ }
321
+ }
322
+ export { clamp012, hsvToRgb2, rgbToHsv2, rgbToHsl2, hslToRgb2, rgbToOklch2, oklchToRgb2, rgbToHexStr2, parseColor2, resolveCssColor2, buildParsed2, formatValueByFormat2 };