@work-rjkashyap/unified-ui 0.3.3 → 0.3.5

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 (456) hide show
  1. package/CHANGELOG.md +105 -0
  2. package/LICENSE +21 -0
  3. package/dist/components/accordion.cjs +225 -0
  4. package/dist/components/accordion.d.cts +157 -0
  5. package/dist/components/accordion.d.ts +157 -0
  6. package/dist/components/accordion.mjs +199 -0
  7. package/dist/components/alert-dialog.cjs +246 -0
  8. package/dist/components/alert-dialog.d.cts +61 -0
  9. package/dist/components/alert-dialog.d.ts +61 -0
  10. package/dist/components/alert-dialog.mjs +218 -0
  11. package/dist/components/alert.cjs +401 -0
  12. package/dist/components/alert.d.cts +217 -0
  13. package/dist/components/alert.d.ts +217 -0
  14. package/dist/components/alert.mjs +374 -0
  15. package/dist/components/aspect-ratio.cjs +45 -0
  16. package/dist/components/aspect-ratio.d.cts +10 -0
  17. package/dist/components/aspect-ratio.d.ts +10 -0
  18. package/dist/components/aspect-ratio.mjs +23 -0
  19. package/dist/components/avatar.cjs +348 -0
  20. package/dist/components/avatar.d.cts +198 -0
  21. package/dist/components/avatar.d.ts +198 -0
  22. package/dist/components/avatar.mjs +329 -0
  23. package/dist/components/badge.cjs +325 -0
  24. package/dist/components/badge.d.cts +259 -0
  25. package/dist/components/badge.d.ts +259 -0
  26. package/dist/components/badge.mjs +298 -0
  27. package/dist/components/banner.cjs +147 -0
  28. package/dist/components/banner.d.cts +31 -0
  29. package/dist/components/banner.d.ts +31 -0
  30. package/dist/components/banner.mjs +122 -0
  31. package/dist/components/breadcrumb.cjs +266 -0
  32. package/dist/components/breadcrumb.d.cts +159 -0
  33. package/dist/components/breadcrumb.d.ts +159 -0
  34. package/dist/components/breadcrumb.mjs +235 -0
  35. package/dist/components/button.cjs +254 -0
  36. package/dist/components/button.d.cts +126 -0
  37. package/dist/components/button.d.ts +126 -0
  38. package/dist/components/button.mjs +229 -0
  39. package/dist/components/calendar.cjs +511 -0
  40. package/dist/components/calendar.d.cts +94 -0
  41. package/dist/components/calendar.d.ts +94 -0
  42. package/dist/components/calendar.mjs +492 -0
  43. package/dist/components/card.cjs +234 -0
  44. package/dist/components/card.d.cts +190 -0
  45. package/dist/components/card.d.ts +190 -0
  46. package/dist/components/card.mjs +210 -0
  47. package/dist/components/carousel.cjs +234 -0
  48. package/dist/components/carousel.d.cts +30 -0
  49. package/dist/components/carousel.d.ts +30 -0
  50. package/dist/components/carousel.mjs +217 -0
  51. package/dist/components/chart.cjs +122 -0
  52. package/dist/components/chart.d.cts +103 -0
  53. package/dist/components/chart.d.ts +103 -0
  54. package/dist/components/chart.mjs +96 -0
  55. package/dist/components/checkbox.cjs +318 -0
  56. package/dist/components/checkbox.d.cts +182 -0
  57. package/dist/components/checkbox.d.ts +182 -0
  58. package/dist/components/checkbox.mjs +296 -0
  59. package/dist/components/code-highlight.cjs +335 -0
  60. package/dist/components/code-highlight.d.cts +18 -0
  61. package/dist/components/code-highlight.d.ts +18 -0
  62. package/dist/components/code-highlight.mjs +308 -0
  63. package/dist/components/code.cjs +265 -0
  64. package/dist/components/code.d.cts +40 -0
  65. package/dist/components/code.d.ts +40 -0
  66. package/dist/components/code.mjs +243 -0
  67. package/dist/components/collapsible.cjs +143 -0
  68. package/dist/components/collapsible.d.cts +159 -0
  69. package/dist/components/collapsible.d.ts +159 -0
  70. package/dist/components/collapsible.mjs +123 -0
  71. package/dist/components/color-picker.cjs +348 -0
  72. package/dist/components/color-picker.d.cts +35 -0
  73. package/dist/components/color-picker.d.ts +35 -0
  74. package/dist/components/color-picker.mjs +331 -0
  75. package/dist/components/combobox.cjs +584 -0
  76. package/dist/components/combobox.d.cts +183 -0
  77. package/dist/components/combobox.d.ts +183 -0
  78. package/dist/components/combobox.mjs +571 -0
  79. package/dist/components/command.cjs +329 -0
  80. package/dist/components/command.d.cts +97 -0
  81. package/dist/components/command.d.ts +97 -0
  82. package/dist/components/command.mjs +311 -0
  83. package/dist/components/confirm-dialog.cjs +100 -0
  84. package/dist/components/confirm-dialog.d.cts +25 -0
  85. package/dist/components/confirm-dialog.d.ts +25 -0
  86. package/dist/components/confirm-dialog.mjs +86 -0
  87. package/dist/components/context-menu.cjs +325 -0
  88. package/dist/components/context-menu.d.cts +259 -0
  89. package/dist/components/context-menu.d.ts +259 -0
  90. package/dist/components/context-menu.mjs +290 -0
  91. package/dist/components/copy-button.cjs +203 -0
  92. package/dist/components/copy-button.d.cts +22 -0
  93. package/dist/components/copy-button.d.ts +22 -0
  94. package/dist/components/copy-button.mjs +178 -0
  95. package/dist/components/data-list.cjs +140 -0
  96. package/dist/components/data-list.d.cts +36 -0
  97. package/dist/components/data-list.d.ts +36 -0
  98. package/dist/components/data-list.mjs +113 -0
  99. package/dist/components/data-table-toolbar.cjs +338 -0
  100. package/dist/components/data-table-toolbar.d.cts +84 -0
  101. package/dist/components/data-table-toolbar.d.ts +84 -0
  102. package/dist/components/data-table-toolbar.mjs +320 -0
  103. package/dist/components/data-table.cjs +1324 -0
  104. package/dist/components/data-table.d.cts +349 -0
  105. package/dist/components/data-table.d.ts +349 -0
  106. package/dist/components/data-table.mjs +1323 -0
  107. package/dist/components/date-picker.cjs +282 -0
  108. package/dist/components/date-picker.d.cts +97 -0
  109. package/dist/components/date-picker.d.ts +97 -0
  110. package/dist/components/date-picker.mjs +258 -0
  111. package/dist/components/dialog.cjs +319 -0
  112. package/dist/components/dialog.d.cts +74 -0
  113. package/dist/components/dialog.d.ts +74 -0
  114. package/dist/components/dialog.mjs +292 -0
  115. package/dist/components/drawer.cjs +262 -0
  116. package/dist/components/drawer.d.cts +113 -0
  117. package/dist/components/drawer.d.ts +113 -0
  118. package/dist/components/drawer.mjs +230 -0
  119. package/dist/components/dropdown-menu.cjs +328 -0
  120. package/dist/components/dropdown-menu.d.cts +95 -0
  121. package/dist/components/dropdown-menu.d.ts +95 -0
  122. package/dist/components/dropdown-menu.mjs +293 -0
  123. package/dist/components/empty-state.cjs +123 -0
  124. package/dist/components/empty-state.d.cts +15 -0
  125. package/dist/components/empty-state.d.ts +15 -0
  126. package/dist/components/empty-state.mjs +99 -0
  127. package/dist/components/file-upload.cjs +442 -0
  128. package/dist/components/file-upload.d.cts +35 -0
  129. package/dist/components/file-upload.d.ts +35 -0
  130. package/dist/components/file-upload.mjs +423 -0
  131. package/dist/components/form-field.cjs +191 -0
  132. package/dist/components/form-field.d.cts +163 -0
  133. package/dist/components/form-field.d.ts +163 -0
  134. package/dist/components/form-field.mjs +167 -0
  135. package/dist/components/hover-card.cjs +99 -0
  136. package/dist/components/hover-card.d.cts +28 -0
  137. package/dist/components/hover-card.d.ts +28 -0
  138. package/dist/components/hover-card.mjs +75 -0
  139. package/dist/components/image-gallery.cjs +359 -0
  140. package/dist/components/image-gallery.d.cts +46 -0
  141. package/dist/components/image-gallery.d.ts +46 -0
  142. package/dist/components/image-gallery.mjs +340 -0
  143. package/dist/components/index.cjs +719 -0
  144. package/dist/components/index.d.cts +84 -0
  145. package/dist/components/index.d.ts +84 -0
  146. package/dist/components/index.mjs +771 -0
  147. package/dist/components/infinite-scroll.cjs +95 -0
  148. package/dist/components/infinite-scroll.d.cts +54 -0
  149. package/dist/components/infinite-scroll.d.ts +54 -0
  150. package/dist/components/infinite-scroll.mjs +71 -0
  151. package/dist/components/input-group.cjs +202 -0
  152. package/dist/components/input-group.d.cts +22 -0
  153. package/dist/components/input-group.d.ts +22 -0
  154. package/dist/components/input-group.mjs +178 -0
  155. package/dist/components/input.cjs +318 -0
  156. package/dist/components/input.d.cts +99 -0
  157. package/dist/components/input.d.ts +99 -0
  158. package/dist/components/input.mjs +296 -0
  159. package/dist/components/kbd.cjs +69 -0
  160. package/dist/components/kbd.d.cts +25 -0
  161. package/dist/components/kbd.d.ts +25 -0
  162. package/dist/components/kbd.mjs +44 -0
  163. package/dist/components/label.cjs +138 -0
  164. package/dist/components/label.d.cts +91 -0
  165. package/dist/components/label.d.ts +91 -0
  166. package/dist/components/label.mjs +113 -0
  167. package/dist/components/markdown.cjs +179 -0
  168. package/dist/components/markdown.d.cts +41 -0
  169. package/dist/components/markdown.d.ts +41 -0
  170. package/dist/components/markdown.mjs +155 -0
  171. package/dist/components/menubar.cjs +365 -0
  172. package/dist/components/menubar.d.cts +88 -0
  173. package/dist/components/menubar.d.ts +88 -0
  174. package/dist/components/menubar.mjs +329 -0
  175. package/dist/components/navigation-menu.cjs +280 -0
  176. package/dist/components/navigation-menu.d.cts +123 -0
  177. package/dist/components/navigation-menu.d.ts +123 -0
  178. package/dist/components/navigation-menu.mjs +250 -0
  179. package/dist/components/number-input.cjs +419 -0
  180. package/dist/components/number-input.d.cts +111 -0
  181. package/dist/components/number-input.d.ts +111 -0
  182. package/dist/components/number-input.mjs +400 -0
  183. package/dist/components/pagination.cjs +322 -0
  184. package/dist/components/pagination.d.cts +119 -0
  185. package/dist/components/pagination.d.ts +119 -0
  186. package/dist/components/pagination.mjs +297 -0
  187. package/dist/components/pin-input.cjs +321 -0
  188. package/dist/components/pin-input.d.cts +112 -0
  189. package/dist/components/pin-input.d.ts +112 -0
  190. package/dist/components/pin-input.mjs +303 -0
  191. package/dist/components/popover.cjs +194 -0
  192. package/dist/components/popover.d.cts +108 -0
  193. package/dist/components/popover.d.ts +108 -0
  194. package/dist/components/popover.mjs +168 -0
  195. package/dist/components/progress.cjs +237 -0
  196. package/dist/components/progress.d.cts +137 -0
  197. package/dist/components/progress.d.ts +137 -0
  198. package/dist/components/progress.mjs +211 -0
  199. package/dist/components/radio.cjs +344 -0
  200. package/dist/components/radio.d.cts +145 -0
  201. package/dist/components/radio.d.ts +145 -0
  202. package/dist/components/radio.mjs +320 -0
  203. package/dist/components/resizable.cjs +121 -0
  204. package/dist/components/resizable.d.cts +23 -0
  205. package/dist/components/resizable.d.ts +23 -0
  206. package/dist/components/resizable.mjs +99 -0
  207. package/dist/components/scroll-area.cjs +168 -0
  208. package/dist/components/scroll-area.d.cts +131 -0
  209. package/dist/components/scroll-area.d.ts +131 -0
  210. package/dist/components/scroll-area.mjs +143 -0
  211. package/dist/components/search-input.cjs +261 -0
  212. package/dist/components/search-input.d.cts +26 -0
  213. package/dist/components/search-input.d.ts +26 -0
  214. package/dist/components/search-input.mjs +243 -0
  215. package/dist/components/select.cjs +320 -0
  216. package/dist/components/select.d.cts +55 -0
  217. package/dist/components/select.d.ts +55 -0
  218. package/dist/components/select.mjs +288 -0
  219. package/dist/components/separator.cjs +193 -0
  220. package/dist/components/separator.d.cts +92 -0
  221. package/dist/components/separator.d.ts +92 -0
  222. package/dist/components/separator.mjs +170 -0
  223. package/dist/components/sheet.cjs +399 -0
  224. package/dist/components/sheet.d.cts +219 -0
  225. package/dist/components/sheet.d.ts +219 -0
  226. package/dist/components/sheet.mjs +379 -0
  227. package/dist/components/sidebar.cjs +1077 -0
  228. package/dist/components/sidebar.d.cts +733 -0
  229. package/dist/components/sidebar.d.ts +733 -0
  230. package/dist/components/sidebar.mjs +1033 -0
  231. package/dist/components/skeleton.cjs +210 -0
  232. package/dist/components/skeleton.d.cts +202 -0
  233. package/dist/components/skeleton.d.ts +202 -0
  234. package/dist/components/skeleton.mjs +182 -0
  235. package/dist/components/slider.cjs +319 -0
  236. package/dist/components/slider.d.cts +82 -0
  237. package/dist/components/slider.d.ts +82 -0
  238. package/dist/components/slider.mjs +296 -0
  239. package/dist/components/sonner.cjs +119 -0
  240. package/dist/components/sonner.d.cts +60 -0
  241. package/dist/components/sonner.d.ts +60 -0
  242. package/dist/components/sonner.mjs +94 -0
  243. package/dist/components/spinner.cjs +238 -0
  244. package/dist/components/spinner.d.cts +101 -0
  245. package/dist/components/spinner.d.ts +101 -0
  246. package/dist/components/spinner.mjs +213 -0
  247. package/dist/components/stat.cjs +180 -0
  248. package/dist/components/stat.d.cts +21 -0
  249. package/dist/components/stat.d.ts +21 -0
  250. package/dist/components/stat.mjs +161 -0
  251. package/dist/components/steps.cjs +228 -0
  252. package/dist/components/steps.d.cts +76 -0
  253. package/dist/components/steps.d.ts +76 -0
  254. package/dist/components/steps.mjs +207 -0
  255. package/dist/components/switch.cjs +243 -0
  256. package/dist/components/switch.d.cts +90 -0
  257. package/dist/components/switch.d.ts +90 -0
  258. package/dist/components/switch.mjs +228 -0
  259. package/dist/components/table.cjs +381 -0
  260. package/dist/components/table.d.cts +181 -0
  261. package/dist/components/table.d.ts +181 -0
  262. package/dist/components/table.mjs +349 -0
  263. package/dist/components/tabs.cjs +326 -0
  264. package/dist/components/tabs.d.cts +154 -0
  265. package/dist/components/tabs.d.ts +154 -0
  266. package/dist/components/tabs.mjs +304 -0
  267. package/dist/components/textarea.cjs +258 -0
  268. package/dist/components/textarea.d.cts +112 -0
  269. package/dist/components/textarea.d.ts +112 -0
  270. package/dist/components/textarea.mjs +233 -0
  271. package/dist/components/theme-toggle.cjs +282 -0
  272. package/dist/components/theme-toggle.d.cts +58 -0
  273. package/dist/components/theme-toggle.d.ts +58 -0
  274. package/dist/components/theme-toggle.mjs +258 -0
  275. package/dist/components/timeline.cjs +178 -0
  276. package/dist/components/timeline.d.cts +41 -0
  277. package/dist/components/timeline.d.ts +41 -0
  278. package/dist/components/timeline.mjs +157 -0
  279. package/dist/components/toast.cjs +546 -0
  280. package/dist/components/toast.d.cts +169 -0
  281. package/dist/components/toast.d.ts +169 -0
  282. package/dist/components/toast.mjs +528 -0
  283. package/dist/components/toggle-group.cjs +204 -0
  284. package/dist/components/toggle-group.d.cts +215 -0
  285. package/dist/components/toggle-group.d.ts +215 -0
  286. package/dist/components/toggle-group.mjs +180 -0
  287. package/dist/components/toggle.cjs +155 -0
  288. package/dist/components/toggle.d.cts +100 -0
  289. package/dist/components/toggle.d.ts +100 -0
  290. package/dist/components/toggle.mjs +130 -0
  291. package/dist/components/tooltip.cjs +155 -0
  292. package/dist/components/tooltip.d.cts +129 -0
  293. package/dist/components/tooltip.d.ts +129 -0
  294. package/dist/components/tooltip.mjs +132 -0
  295. package/dist/components/tree-view.cjs +450 -0
  296. package/dist/components/tree-view.d.cts +67 -0
  297. package/dist/components/tree-view.d.ts +67 -0
  298. package/dist/components/tree-view.mjs +433 -0
  299. package/dist/components/video-player.cjs +344 -0
  300. package/dist/components/video-player.d.cts +34 -0
  301. package/dist/components/video-player.d.ts +34 -0
  302. package/dist/components/video-player.mjs +320 -0
  303. package/dist/components/virtual-list.cjs +153 -0
  304. package/dist/components/virtual-list.d.cts +53 -0
  305. package/dist/components/virtual-list.d.ts +53 -0
  306. package/dist/components/virtual-list.mjs +136 -0
  307. package/dist/components/visually-hidden.cjs +43 -0
  308. package/dist/components/visually-hidden.d.cts +9 -0
  309. package/dist/components/visually-hidden.d.ts +9 -0
  310. package/dist/components/visually-hidden.mjs +21 -0
  311. package/dist/index.cjs +1081 -1933
  312. package/dist/index.d.cts +99 -11
  313. package/dist/index.d.ts +99 -11
  314. package/dist/index.mjs +1138 -16
  315. package/dist/motion/hooks.cjs +98 -0
  316. package/dist/motion/hooks.d.cts +32 -0
  317. package/dist/motion/hooks.d.ts +32 -0
  318. package/dist/motion/hooks.mjs +70 -0
  319. package/dist/motion/index.cjs +157 -0
  320. package/dist/motion/index.d.cts +5 -0
  321. package/dist/motion/index.d.ts +5 -0
  322. package/dist/motion/index.mjs +137 -0
  323. package/dist/motion/presets.cjs +609 -0
  324. package/dist/{motion.d.ts → motion/presets.d.cts} +1 -30
  325. package/dist/{motion.d.cts → motion/presets.d.ts} +1 -30
  326. package/dist/{chunk-PLRSH37T.mjs → motion/presets.mjs} +119 -126
  327. package/dist/primitives/container.cjs +88 -0
  328. package/dist/primitives/container.d.cts +82 -0
  329. package/dist/primitives/container.d.ts +82 -0
  330. package/dist/primitives/container.mjs +64 -0
  331. package/dist/primitives/divider.cjs +74 -0
  332. package/dist/primitives/divider.d.cts +30 -0
  333. package/dist/primitives/divider.d.ts +30 -0
  334. package/dist/primitives/divider.mjs +50 -0
  335. package/dist/primitives/index.cjs +54 -0
  336. package/dist/primitives/index.d.cts +6 -0
  337. package/dist/primitives/index.d.ts +6 -0
  338. package/dist/primitives/index.mjs +33 -0
  339. package/dist/primitives/stack.cjs +167 -0
  340. package/dist/primitives/stack.d.cts +132 -0
  341. package/dist/primitives/stack.d.ts +132 -0
  342. package/dist/primitives/stack.mjs +142 -0
  343. package/dist/primitives/typography.cjs +260 -0
  344. package/dist/primitives/typography.d.cts +157 -0
  345. package/dist/primitives/typography.d.ts +157 -0
  346. package/dist/primitives/typography.mjs +229 -0
  347. package/dist/theme/contract.cjs +246 -0
  348. package/dist/theme/contract.d.cts +76 -0
  349. package/dist/theme/contract.d.ts +76 -0
  350. package/dist/theme/contract.mjs +221 -0
  351. package/dist/theme/customizer-store.cjs +266 -0
  352. package/dist/theme/customizer-store.d.cts +76 -0
  353. package/dist/theme/customizer-store.d.ts +76 -0
  354. package/dist/theme/customizer-store.mjs +261 -0
  355. package/dist/theme/customizer.cjs +812 -0
  356. package/dist/theme/customizer.d.cts +13 -0
  357. package/dist/theme/customizer.d.ts +13 -0
  358. package/dist/theme/customizer.mjs +803 -0
  359. package/dist/theme/index.cjs +105 -0
  360. package/dist/theme/index.d.cts +13 -0
  361. package/dist/theme/index.d.ts +13 -0
  362. package/dist/theme/index.mjs +87 -0
  363. package/dist/theme/presets.cjs +1205 -0
  364. package/dist/theme/presets.d.cts +232 -0
  365. package/dist/theme/presets.d.ts +232 -0
  366. package/dist/theme/presets.mjs +1175 -0
  367. package/dist/theme/provider.cjs +122 -0
  368. package/dist/theme/provider.d.cts +57 -0
  369. package/dist/theme/provider.d.ts +57 -0
  370. package/dist/theme/provider.mjs +104 -0
  371. package/dist/{chunk-IVZAB7BV.mjs → tokens/colors.cjs} +212 -86
  372. package/dist/{z-index-Dd8IllRx.d.cts → tokens/colors.d.cts} +235 -72
  373. package/dist/{z-index-Dd8IllRx.d.ts → tokens/colors.d.ts} +235 -72
  374. package/dist/{chunk-ZBGR7MUW.cjs → tokens/colors.mjs} +165 -104
  375. package/dist/tokens/index.cjs +96 -0
  376. package/dist/tokens/index.d.cts +7 -0
  377. package/dist/tokens/index.d.ts +7 -0
  378. package/dist/tokens/index.mjs +71 -0
  379. package/dist/{chunk-XCKK6P46.cjs → tokens/motion.cjs} +46 -18
  380. package/dist/{motion-D9wQbcKL.d.cts → tokens/motion.d.cts} +1 -1
  381. package/dist/{motion-D9wQbcKL.d.ts → tokens/motion.d.ts} +1 -1
  382. package/dist/{chunk-EZ2L3XPS.mjs → tokens/motion.mjs} +16 -10
  383. package/dist/tokens/radius.cjs +41 -0
  384. package/dist/tokens/radius.d.cts +18 -0
  385. package/dist/tokens/radius.d.ts +18 -0
  386. package/dist/tokens/radius.mjs +17 -0
  387. package/dist/tokens/shadows.cjs +57 -0
  388. package/dist/tokens/shadows.d.cts +32 -0
  389. package/dist/tokens/shadows.d.ts +32 -0
  390. package/dist/tokens/shadows.mjs +32 -0
  391. package/dist/tokens/spacing.cjs +51 -0
  392. package/dist/tokens/spacing.d.cts +26 -0
  393. package/dist/tokens/spacing.d.ts +26 -0
  394. package/dist/{chunk-NMPHV6ZD.mjs → tokens/spacing.mjs} +4 -4
  395. package/dist/{chunk-ECIGDEAH.cjs → tokens/typography.cjs} +43 -16
  396. package/dist/{typography-DlvVjEdE.d.ts → tokens/typography.d.cts} +1 -1
  397. package/dist/{typography-DlvVjEdE.d.cts → tokens/typography.d.ts} +1 -1
  398. package/dist/{chunk-ITBG42M5.mjs → tokens/typography.mjs} +14 -9
  399. package/dist/tokens/z-index.cjs +47 -0
  400. package/dist/tokens/z-index.d.cts +24 -0
  401. package/dist/tokens/z-index.d.ts +24 -0
  402. package/dist/tokens/z-index.mjs +23 -0
  403. package/dist/utils/cn.cjs +102 -0
  404. package/dist/utils/cn.d.cts +84 -0
  405. package/dist/utils/cn.d.ts +84 -0
  406. package/dist/{chunk-ZT3PCXDF.mjs → utils/cn.mjs} +14 -7
  407. package/dist/{chunk-33QEKXRQ.cjs → utils/contrast.cjs} +68 -38
  408. package/dist/utils/contrast.d.cts +209 -0
  409. package/dist/utils/contrast.d.ts +209 -0
  410. package/dist/{chunk-5NZDQWRV.mjs → utils/contrast.mjs} +27 -18
  411. package/dist/utils/focus-ring.cjs +81 -0
  412. package/dist/utils/focus-ring.d.cts +80 -0
  413. package/dist/utils/focus-ring.d.ts +80 -0
  414. package/dist/utils/focus-ring.mjs +47 -0
  415. package/dist/utils/index.cjs +107 -0
  416. package/dist/utils/index.d.cts +6 -0
  417. package/dist/utils/index.d.ts +6 -0
  418. package/dist/utils/index.mjs +88 -0
  419. package/dist/utils/types.cjs +38 -0
  420. package/dist/utils/types.d.cts +187 -0
  421. package/dist/utils/types.d.ts +187 -0
  422. package/dist/utils/types.mjs +13 -0
  423. package/package.json +191 -191
  424. package/dist/chunk-2JFREULQ.cjs +0 -29
  425. package/dist/chunk-3EHT6IOA.cjs +0 -49
  426. package/dist/chunk-4ON3M3OM.cjs +0 -73
  427. package/dist/chunk-5TP7J7T4.cjs +0 -1766
  428. package/dist/chunk-A2DGHQL2.cjs +0 -21808
  429. package/dist/chunk-EQWESXRH.mjs +0 -1735
  430. package/dist/chunk-F4JJFWWU.cjs +0 -604
  431. package/dist/chunk-FUWXGHWQ.cjs +0 -468
  432. package/dist/chunk-MBYCK2JJ.mjs +0 -37
  433. package/dist/chunk-OHEH57BV.mjs +0 -455
  434. package/dist/chunk-XAIUX2YS.mjs +0 -21477
  435. package/dist/components.cjs +0 -1247
  436. package/dist/components.d.cts +0 -7881
  437. package/dist/components.d.ts +0 -7881
  438. package/dist/components.mjs +0 -6
  439. package/dist/motion.cjs +0 -264
  440. package/dist/motion.mjs +0 -3
  441. package/dist/primitives.cjs +0 -57
  442. package/dist/primitives.d.cts +0 -390
  443. package/dist/primitives.d.ts +0 -390
  444. package/dist/primitives.mjs +0 -4
  445. package/dist/theme.cjs +0 -131
  446. package/dist/theme.d.cts +0 -414
  447. package/dist/theme.d.ts +0 -414
  448. package/dist/theme.mjs +0 -6
  449. package/dist/tokens.cjs +0 -137
  450. package/dist/tokens.d.cts +0 -30
  451. package/dist/tokens.d.ts +0 -30
  452. package/dist/tokens.mjs +0 -4
  453. package/dist/utils.cjs +0 -164
  454. package/dist/utils.d.cts +0 -525
  455. package/dist/utils.d.ts +0 -525
  456. package/dist/utils.mjs +0 -3
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ "use client";
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var customizer_store_exports = {};
21
+ __export(customizer_store_exports, {
22
+ ThemeCustomizerContext: () => ThemeCustomizerContext,
23
+ ThemeCustomizerProvider: () => ThemeCustomizerProvider,
24
+ useThemeCustomizer: () => useThemeCustomizer
25
+ });
26
+ module.exports = __toCommonJS(customizer_store_exports);
27
+ var import_jsx_runtime = require("react/jsx-runtime");
28
+ var import_react = require("react");
29
+ var import_presets = require("./presets");
30
+ const STORAGE_KEY = "ds-theme-customizer";
31
+ const STYLE_ELEMENT_ID = "ds-theme-customizer";
32
+ const ThemeCustomizerContext = (0, import_react.createContext)(null);
33
+ function useThemeCustomizer() {
34
+ const ctx = (0, import_react.useContext)(ThemeCustomizerContext);
35
+ if (!ctx) {
36
+ throw new Error(
37
+ "useThemeCustomizer must be used within a <ThemeCustomizerProvider>. Wrap your application (or layout) with <ThemeCustomizerProvider>."
38
+ );
39
+ }
40
+ return ctx;
41
+ }
42
+ function loadConfig() {
43
+ if (typeof window === "undefined") return import_presets.DEFAULT_THEME_CONFIG;
44
+ try {
45
+ const raw = localStorage.getItem(STORAGE_KEY);
46
+ if (!raw) return import_presets.DEFAULT_THEME_CONFIG;
47
+ const parsed = JSON.parse(raw);
48
+ return {
49
+ style: import_presets.STYLE_PRESETS.some((s) => s.key === parsed.style) ? parsed.style : import_presets.DEFAULT_THEME_CONFIG.style,
50
+ colorPreset: import_presets.COLOR_PRESET_KEYS.includes(parsed.colorPreset ?? "") ? parsed.colorPreset : import_presets.DEFAULT_THEME_CONFIG.colorPreset,
51
+ radius: import_presets.RADIUS_PRESETS.some((r) => r.key === parsed.radius) ? parsed.radius : import_presets.DEFAULT_THEME_CONFIG.radius,
52
+ font: import_presets.FONT_PRESETS.some((f) => f.key === parsed.font) ? parsed.font : import_presets.DEFAULT_THEME_CONFIG.font,
53
+ shadow: import_presets.SHADOW_PRESETS.some((s) => s.key === parsed.shadow) ? parsed.shadow : import_presets.DEFAULT_THEME_CONFIG.shadow,
54
+ surfaceStyle: import_presets.SURFACE_STYLE_PRESETS.some(
55
+ (s) => s.key === parsed.surfaceStyle
56
+ ) ? parsed.surfaceStyle : import_presets.DEFAULT_THEME_CONFIG.surfaceStyle,
57
+ menuColor: import_presets.MENU_COLOR_PRESETS.some((p) => p.key === parsed.menuColor) ? parsed.menuColor : import_presets.DEFAULT_THEME_CONFIG.menuColor,
58
+ menuAccent: import_presets.MENU_ACCENT_PRESETS.some((p) => p.key === parsed.menuAccent) ? parsed.menuAccent : import_presets.DEFAULT_THEME_CONFIG.menuAccent
59
+ };
60
+ } catch {
61
+ return import_presets.DEFAULT_THEME_CONFIG;
62
+ }
63
+ }
64
+ function saveConfig(config) {
65
+ if (typeof window === "undefined") return;
66
+ try {
67
+ localStorage.setItem(STORAGE_KEY, JSON.stringify(config));
68
+ } catch {
69
+ }
70
+ }
71
+ function getResolvedMode() {
72
+ if (typeof document === "undefined") return "light";
73
+ return document.documentElement.classList.contains("dark") ? "dark" : "light";
74
+ }
75
+ function injectStyles(config) {
76
+ if (typeof document === "undefined") return;
77
+ let styleEl = document.getElementById(
78
+ STYLE_ELEMENT_ID
79
+ );
80
+ if (!styleEl) {
81
+ styleEl = document.createElement("style");
82
+ styleEl.id = STYLE_ELEMENT_ID;
83
+ styleEl.setAttribute("data-ds-customizer", "");
84
+ document.head.appendChild(styleEl);
85
+ }
86
+ const lightVars = (0, import_presets.buildThemeOverrides)(config, "light");
87
+ const darkVars = (0, import_presets.buildThemeOverrides)(config, "dark");
88
+ const formatVars = (vars) => Object.entries(vars).map(([prop, value]) => `${prop}:${value}`).join(";");
89
+ styleEl.textContent = [
90
+ `:root:root{${formatVars(lightVars)}}`,
91
+ `.dark:root{${formatVars(darkVars)}}`
92
+ ].join("\n");
93
+ }
94
+ function removeStyles() {
95
+ if (typeof document === "undefined") return;
96
+ const styleEl = document.getElementById(STYLE_ELEMENT_ID);
97
+ if (styleEl) {
98
+ styleEl.remove();
99
+ }
100
+ }
101
+ function configsEqual(a, b) {
102
+ return a.style === b.style && a.colorPreset === b.colorPreset && a.radius === b.radius && a.font === b.font && a.shadow === b.shadow && a.surfaceStyle === b.surfaceStyle && a.menuColor === b.menuColor && a.menuAccent === b.menuAccent;
103
+ }
104
+ function ThemeCustomizerProvider({
105
+ children,
106
+ defaultConfig,
107
+ applyStyles = true
108
+ }) {
109
+ const [config, setConfigState] = (0, import_react.useState)(
110
+ () => defaultConfig ?? loadConfig()
111
+ );
112
+ const [_resolvedMode, setResolvedMode] = (0, import_react.useState)("light");
113
+ const configRef = (0, import_react.useRef)(config);
114
+ configRef.current = config;
115
+ (0, import_react.useEffect)(() => {
116
+ setResolvedMode(getResolvedMode());
117
+ const observer = new MutationObserver(() => {
118
+ const newMode = getResolvedMode();
119
+ setResolvedMode((prev) => {
120
+ if (prev !== newMode) return newMode;
121
+ return prev;
122
+ });
123
+ });
124
+ observer.observe(document.documentElement, {
125
+ attributes: true,
126
+ attributeFilter: ["class"]
127
+ });
128
+ return () => observer.disconnect();
129
+ }, []);
130
+ (0, import_react.useEffect)(() => {
131
+ if (applyStyles) {
132
+ injectStyles(config);
133
+ }
134
+ }, [config, applyStyles]);
135
+ (0, import_react.useEffect)(() => {
136
+ saveConfig(config);
137
+ }, [config]);
138
+ (0, import_react.useEffect)(() => {
139
+ return () => {
140
+ if (applyStyles) {
141
+ removeStyles();
142
+ }
143
+ };
144
+ }, [applyStyles]);
145
+ (0, import_react.useEffect)(() => {
146
+ const handleStorage = (e) => {
147
+ if (e.key === STORAGE_KEY && e.newValue) {
148
+ try {
149
+ const parsed = JSON.parse(e.newValue);
150
+ setConfigState((prev) => {
151
+ if (configsEqual(prev, parsed)) return prev;
152
+ return parsed;
153
+ });
154
+ } catch {
155
+ }
156
+ }
157
+ };
158
+ window.addEventListener("storage", handleStorage);
159
+ return () => window.removeEventListener("storage", handleStorage);
160
+ }, []);
161
+ const setConfig = (0, import_react.useCallback)((newConfig) => {
162
+ setConfigState(newConfig);
163
+ }, []);
164
+ const setStyle = (0, import_react.useCallback)((key) => {
165
+ const preset = (0, import_presets.getStylePreset)(key);
166
+ setConfigState((prev) => {
167
+ if (prev.style === key) return prev;
168
+ return {
169
+ ...prev,
170
+ style: key,
171
+ radius: preset.defaults.radius,
172
+ font: preset.defaults.font,
173
+ shadow: preset.defaults.shadow,
174
+ surfaceStyle: preset.defaults.surfaceStyle
175
+ };
176
+ });
177
+ }, []);
178
+ const setColorPreset = (0, import_react.useCallback)((key) => {
179
+ setConfigState((prev) => {
180
+ if (prev.colorPreset === key) return prev;
181
+ return { ...prev, colorPreset: key };
182
+ });
183
+ }, []);
184
+ const setRadius = (0, import_react.useCallback)((key) => {
185
+ setConfigState((prev) => {
186
+ if (prev.radius === key) return prev;
187
+ return { ...prev, radius: key };
188
+ });
189
+ }, []);
190
+ const setFont = (0, import_react.useCallback)((key) => {
191
+ setConfigState((prev) => {
192
+ if (prev.font === key) return prev;
193
+ return { ...prev, font: key };
194
+ });
195
+ }, []);
196
+ const setShadow = (0, import_react.useCallback)((key) => {
197
+ setConfigState((prev) => {
198
+ if (prev.shadow === key) return prev;
199
+ return { ...prev, shadow: key };
200
+ });
201
+ }, []);
202
+ const setSurfaceStyle = (0, import_react.useCallback)((key) => {
203
+ setConfigState((prev) => {
204
+ if (prev.surfaceStyle === key) return prev;
205
+ return { ...prev, surfaceStyle: key };
206
+ });
207
+ }, []);
208
+ const setMenuColor = (0, import_react.useCallback)((key) => {
209
+ setConfigState((prev) => {
210
+ if (prev.menuColor === key) return prev;
211
+ return { ...prev, menuColor: key };
212
+ });
213
+ }, []);
214
+ const setMenuAccent = (0, import_react.useCallback)((key) => {
215
+ setConfigState((prev) => {
216
+ if (prev.menuAccent === key) return prev;
217
+ return { ...prev, menuAccent: key };
218
+ });
219
+ }, []);
220
+ const resetConfig = (0, import_react.useCallback)(() => {
221
+ setConfigState(import_presets.DEFAULT_THEME_CONFIG);
222
+ }, []);
223
+ const isDefault = configsEqual(config, import_presets.DEFAULT_THEME_CONFIG);
224
+ const generateCSSFn = (0, import_react.useCallback)(() => {
225
+ return (0, import_presets.generateThemeCSS)(config);
226
+ }, [config]);
227
+ const value = (0, import_react.useMemo)(
228
+ () => ({
229
+ config,
230
+ setConfig,
231
+ setStyle,
232
+ setColorPreset,
233
+ setRadius,
234
+ setFont,
235
+ setShadow,
236
+ setSurfaceStyle,
237
+ setMenuColor,
238
+ setMenuAccent,
239
+ resetConfig,
240
+ isDefault,
241
+ generateCSS: generateCSSFn
242
+ }),
243
+ [
244
+ config,
245
+ setConfig,
246
+ setStyle,
247
+ setColorPreset,
248
+ setRadius,
249
+ setFont,
250
+ setShadow,
251
+ setSurfaceStyle,
252
+ setMenuColor,
253
+ setMenuAccent,
254
+ resetConfig,
255
+ isDefault,
256
+ generateCSSFn
257
+ ]
258
+ );
259
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ThemeCustomizerContext.Provider, { value, children });
260
+ }
261
+ // Annotate the CommonJS export names for ESM import in node:
262
+ 0 && (module.exports = {
263
+ ThemeCustomizerContext,
264
+ ThemeCustomizerProvider,
265
+ useThemeCustomizer
266
+ });
@@ -0,0 +1,76 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as react from 'react';
3
+ import { ReactNode } from 'react';
4
+ import { ThemeConfig } from './presets.cjs';
5
+
6
+ interface ThemeCustomizerContextValue {
7
+ /** The current full theme configuration */
8
+ config: ThemeConfig;
9
+ /** Replace the entire theme config at once */
10
+ setConfig: (config: ThemeConfig) => void;
11
+ /** Set the style preset (e.g. "vega", "nova", "maia", "lyra", "mira") and apply its defaults */
12
+ setStyle: (key: string) => void;
13
+ /** Set just the color preset (e.g. "zinc", "blue", "rose") */
14
+ setColorPreset: (key: string) => void;
15
+ /** Set just the radius preset (e.g. "0.5", "0.625") */
16
+ setRadius: (key: string) => void;
17
+ /** Set just the font preset (e.g. "outfit", "inter", "system") */
18
+ setFont: (key: string) => void;
19
+ /** Set just the shadow mode (e.g. "none", "subtle", "default", "heavy") */
20
+ setShadow: (key: string) => void;
21
+ /** Set just the surface style (e.g. "bordered", "elevated", "mixed") */
22
+ setSurfaceStyle: (key: string) => void;
23
+ /** Set just the menu color (e.g. "default", "muted", "inverted", "primary") */
24
+ setMenuColor: (key: string) => void;
25
+ /** Set just the menu accent (e.g. "none", "subtle", "bold") */
26
+ setMenuAccent: (key: string) => void;
27
+ /** Reset to the default theme configuration */
28
+ resetConfig: () => void;
29
+ /** Whether the current config matches the default config */
30
+ isDefault: boolean;
31
+ /** Generate a copyable CSS string for the current config */
32
+ generateCSS: () => string;
33
+ }
34
+ declare const ThemeCustomizerContext: react.Context<ThemeCustomizerContextValue | null>;
35
+ /**
36
+ * Access the theme customizer store.
37
+ *
38
+ * Must be used within a `<ThemeCustomizerProvider>`. Throws if used outside.
39
+ *
40
+ * @example
41
+ * ```tsx
42
+ * const { config, setColorPreset, setRadius, resetConfig } = useThemeCustomizer();
43
+ * ```
44
+ */
45
+ declare function useThemeCustomizer(): ThemeCustomizerContextValue;
46
+ interface ThemeCustomizerProviderProps {
47
+ children: ReactNode;
48
+ /** Override the initial config (useful for SSR or testing) */
49
+ defaultConfig?: ThemeConfig;
50
+ /**
51
+ * If false, the provider will not inject <style> overrides into the DOM.
52
+ * Useful if you only want to read the config without applying it.
53
+ * @default true
54
+ */
55
+ applyStyles?: boolean;
56
+ }
57
+ /**
58
+ * Theme customizer provider.
59
+ *
60
+ * Manages the active theme configuration, persists it to localStorage,
61
+ * and injects CSS custom property overrides into the document head.
62
+ *
63
+ * Place this inside your theme/root provider but outside your main content:
64
+ *
65
+ * @example
66
+ * ```tsx
67
+ * <RootProvider>
68
+ * <ThemeCustomizerProvider>
69
+ * {children}
70
+ * </ThemeCustomizerProvider>
71
+ * </RootProvider>
72
+ * ```
73
+ */
74
+ declare function ThemeCustomizerProvider({ children, defaultConfig, applyStyles, }: ThemeCustomizerProviderProps): react_jsx_runtime.JSX.Element;
75
+
76
+ export { ThemeCustomizerContext, type ThemeCustomizerContextValue, ThemeCustomizerProvider, type ThemeCustomizerProviderProps, useThemeCustomizer };
@@ -0,0 +1,76 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as react from 'react';
3
+ import { ReactNode } from 'react';
4
+ import { ThemeConfig } from './presets.js';
5
+
6
+ interface ThemeCustomizerContextValue {
7
+ /** The current full theme configuration */
8
+ config: ThemeConfig;
9
+ /** Replace the entire theme config at once */
10
+ setConfig: (config: ThemeConfig) => void;
11
+ /** Set the style preset (e.g. "vega", "nova", "maia", "lyra", "mira") and apply its defaults */
12
+ setStyle: (key: string) => void;
13
+ /** Set just the color preset (e.g. "zinc", "blue", "rose") */
14
+ setColorPreset: (key: string) => void;
15
+ /** Set just the radius preset (e.g. "0.5", "0.625") */
16
+ setRadius: (key: string) => void;
17
+ /** Set just the font preset (e.g. "outfit", "inter", "system") */
18
+ setFont: (key: string) => void;
19
+ /** Set just the shadow mode (e.g. "none", "subtle", "default", "heavy") */
20
+ setShadow: (key: string) => void;
21
+ /** Set just the surface style (e.g. "bordered", "elevated", "mixed") */
22
+ setSurfaceStyle: (key: string) => void;
23
+ /** Set just the menu color (e.g. "default", "muted", "inverted", "primary") */
24
+ setMenuColor: (key: string) => void;
25
+ /** Set just the menu accent (e.g. "none", "subtle", "bold") */
26
+ setMenuAccent: (key: string) => void;
27
+ /** Reset to the default theme configuration */
28
+ resetConfig: () => void;
29
+ /** Whether the current config matches the default config */
30
+ isDefault: boolean;
31
+ /** Generate a copyable CSS string for the current config */
32
+ generateCSS: () => string;
33
+ }
34
+ declare const ThemeCustomizerContext: react.Context<ThemeCustomizerContextValue | null>;
35
+ /**
36
+ * Access the theme customizer store.
37
+ *
38
+ * Must be used within a `<ThemeCustomizerProvider>`. Throws if used outside.
39
+ *
40
+ * @example
41
+ * ```tsx
42
+ * const { config, setColorPreset, setRadius, resetConfig } = useThemeCustomizer();
43
+ * ```
44
+ */
45
+ declare function useThemeCustomizer(): ThemeCustomizerContextValue;
46
+ interface ThemeCustomizerProviderProps {
47
+ children: ReactNode;
48
+ /** Override the initial config (useful for SSR or testing) */
49
+ defaultConfig?: ThemeConfig;
50
+ /**
51
+ * If false, the provider will not inject <style> overrides into the DOM.
52
+ * Useful if you only want to read the config without applying it.
53
+ * @default true
54
+ */
55
+ applyStyles?: boolean;
56
+ }
57
+ /**
58
+ * Theme customizer provider.
59
+ *
60
+ * Manages the active theme configuration, persists it to localStorage,
61
+ * and injects CSS custom property overrides into the document head.
62
+ *
63
+ * Place this inside your theme/root provider but outside your main content:
64
+ *
65
+ * @example
66
+ * ```tsx
67
+ * <RootProvider>
68
+ * <ThemeCustomizerProvider>
69
+ * {children}
70
+ * </ThemeCustomizerProvider>
71
+ * </RootProvider>
72
+ * ```
73
+ */
74
+ declare function ThemeCustomizerProvider({ children, defaultConfig, applyStyles, }: ThemeCustomizerProviderProps): react_jsx_runtime.JSX.Element;
75
+
76
+ export { ThemeCustomizerContext, type ThemeCustomizerContextValue, ThemeCustomizerProvider, type ThemeCustomizerProviderProps, useThemeCustomizer };
@@ -0,0 +1,261 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import {
4
+ createContext,
5
+ useCallback,
6
+ useContext,
7
+ useEffect,
8
+ useMemo,
9
+ useRef,
10
+ useState
11
+ } from "react";
12
+ import {
13
+ buildThemeOverrides,
14
+ COLOR_PRESET_KEYS,
15
+ DEFAULT_THEME_CONFIG,
16
+ FONT_PRESETS,
17
+ generateThemeCSS,
18
+ getStylePreset,
19
+ MENU_ACCENT_PRESETS,
20
+ MENU_COLOR_PRESETS,
21
+ RADIUS_PRESETS,
22
+ SHADOW_PRESETS,
23
+ STYLE_PRESETS,
24
+ SURFACE_STYLE_PRESETS
25
+ } from "./presets";
26
+ const STORAGE_KEY = "ds-theme-customizer";
27
+ const STYLE_ELEMENT_ID = "ds-theme-customizer";
28
+ const ThemeCustomizerContext = createContext(null);
29
+ function useThemeCustomizer() {
30
+ const ctx = useContext(ThemeCustomizerContext);
31
+ if (!ctx) {
32
+ throw new Error(
33
+ "useThemeCustomizer must be used within a <ThemeCustomizerProvider>. Wrap your application (or layout) with <ThemeCustomizerProvider>."
34
+ );
35
+ }
36
+ return ctx;
37
+ }
38
+ function loadConfig() {
39
+ if (typeof window === "undefined") return DEFAULT_THEME_CONFIG;
40
+ try {
41
+ const raw = localStorage.getItem(STORAGE_KEY);
42
+ if (!raw) return DEFAULT_THEME_CONFIG;
43
+ const parsed = JSON.parse(raw);
44
+ return {
45
+ style: STYLE_PRESETS.some((s) => s.key === parsed.style) ? parsed.style : DEFAULT_THEME_CONFIG.style,
46
+ colorPreset: COLOR_PRESET_KEYS.includes(parsed.colorPreset ?? "") ? parsed.colorPreset : DEFAULT_THEME_CONFIG.colorPreset,
47
+ radius: RADIUS_PRESETS.some((r) => r.key === parsed.radius) ? parsed.radius : DEFAULT_THEME_CONFIG.radius,
48
+ font: FONT_PRESETS.some((f) => f.key === parsed.font) ? parsed.font : DEFAULT_THEME_CONFIG.font,
49
+ shadow: SHADOW_PRESETS.some((s) => s.key === parsed.shadow) ? parsed.shadow : DEFAULT_THEME_CONFIG.shadow,
50
+ surfaceStyle: SURFACE_STYLE_PRESETS.some(
51
+ (s) => s.key === parsed.surfaceStyle
52
+ ) ? parsed.surfaceStyle : DEFAULT_THEME_CONFIG.surfaceStyle,
53
+ menuColor: MENU_COLOR_PRESETS.some((p) => p.key === parsed.menuColor) ? parsed.menuColor : DEFAULT_THEME_CONFIG.menuColor,
54
+ menuAccent: MENU_ACCENT_PRESETS.some((p) => p.key === parsed.menuAccent) ? parsed.menuAccent : DEFAULT_THEME_CONFIG.menuAccent
55
+ };
56
+ } catch {
57
+ return DEFAULT_THEME_CONFIG;
58
+ }
59
+ }
60
+ function saveConfig(config) {
61
+ if (typeof window === "undefined") return;
62
+ try {
63
+ localStorage.setItem(STORAGE_KEY, JSON.stringify(config));
64
+ } catch {
65
+ }
66
+ }
67
+ function getResolvedMode() {
68
+ if (typeof document === "undefined") return "light";
69
+ return document.documentElement.classList.contains("dark") ? "dark" : "light";
70
+ }
71
+ function injectStyles(config) {
72
+ if (typeof document === "undefined") return;
73
+ let styleEl = document.getElementById(
74
+ STYLE_ELEMENT_ID
75
+ );
76
+ if (!styleEl) {
77
+ styleEl = document.createElement("style");
78
+ styleEl.id = STYLE_ELEMENT_ID;
79
+ styleEl.setAttribute("data-ds-customizer", "");
80
+ document.head.appendChild(styleEl);
81
+ }
82
+ const lightVars = buildThemeOverrides(config, "light");
83
+ const darkVars = buildThemeOverrides(config, "dark");
84
+ const formatVars = (vars) => Object.entries(vars).map(([prop, value]) => `${prop}:${value}`).join(";");
85
+ styleEl.textContent = [
86
+ `:root:root{${formatVars(lightVars)}}`,
87
+ `.dark:root{${formatVars(darkVars)}}`
88
+ ].join("\n");
89
+ }
90
+ function removeStyles() {
91
+ if (typeof document === "undefined") return;
92
+ const styleEl = document.getElementById(STYLE_ELEMENT_ID);
93
+ if (styleEl) {
94
+ styleEl.remove();
95
+ }
96
+ }
97
+ function configsEqual(a, b) {
98
+ return a.style === b.style && a.colorPreset === b.colorPreset && a.radius === b.radius && a.font === b.font && a.shadow === b.shadow && a.surfaceStyle === b.surfaceStyle && a.menuColor === b.menuColor && a.menuAccent === b.menuAccent;
99
+ }
100
+ function ThemeCustomizerProvider({
101
+ children,
102
+ defaultConfig,
103
+ applyStyles = true
104
+ }) {
105
+ const [config, setConfigState] = useState(
106
+ () => defaultConfig ?? loadConfig()
107
+ );
108
+ const [_resolvedMode, setResolvedMode] = useState("light");
109
+ const configRef = useRef(config);
110
+ configRef.current = config;
111
+ useEffect(() => {
112
+ setResolvedMode(getResolvedMode());
113
+ const observer = new MutationObserver(() => {
114
+ const newMode = getResolvedMode();
115
+ setResolvedMode((prev) => {
116
+ if (prev !== newMode) return newMode;
117
+ return prev;
118
+ });
119
+ });
120
+ observer.observe(document.documentElement, {
121
+ attributes: true,
122
+ attributeFilter: ["class"]
123
+ });
124
+ return () => observer.disconnect();
125
+ }, []);
126
+ useEffect(() => {
127
+ if (applyStyles) {
128
+ injectStyles(config);
129
+ }
130
+ }, [config, applyStyles]);
131
+ useEffect(() => {
132
+ saveConfig(config);
133
+ }, [config]);
134
+ useEffect(() => {
135
+ return () => {
136
+ if (applyStyles) {
137
+ removeStyles();
138
+ }
139
+ };
140
+ }, [applyStyles]);
141
+ useEffect(() => {
142
+ const handleStorage = (e) => {
143
+ if (e.key === STORAGE_KEY && e.newValue) {
144
+ try {
145
+ const parsed = JSON.parse(e.newValue);
146
+ setConfigState((prev) => {
147
+ if (configsEqual(prev, parsed)) return prev;
148
+ return parsed;
149
+ });
150
+ } catch {
151
+ }
152
+ }
153
+ };
154
+ window.addEventListener("storage", handleStorage);
155
+ return () => window.removeEventListener("storage", handleStorage);
156
+ }, []);
157
+ const setConfig = useCallback((newConfig) => {
158
+ setConfigState(newConfig);
159
+ }, []);
160
+ const setStyle = useCallback((key) => {
161
+ const preset = getStylePreset(key);
162
+ setConfigState((prev) => {
163
+ if (prev.style === key) return prev;
164
+ return {
165
+ ...prev,
166
+ style: key,
167
+ radius: preset.defaults.radius,
168
+ font: preset.defaults.font,
169
+ shadow: preset.defaults.shadow,
170
+ surfaceStyle: preset.defaults.surfaceStyle
171
+ };
172
+ });
173
+ }, []);
174
+ const setColorPreset = useCallback((key) => {
175
+ setConfigState((prev) => {
176
+ if (prev.colorPreset === key) return prev;
177
+ return { ...prev, colorPreset: key };
178
+ });
179
+ }, []);
180
+ const setRadius = useCallback((key) => {
181
+ setConfigState((prev) => {
182
+ if (prev.radius === key) return prev;
183
+ return { ...prev, radius: key };
184
+ });
185
+ }, []);
186
+ const setFont = useCallback((key) => {
187
+ setConfigState((prev) => {
188
+ if (prev.font === key) return prev;
189
+ return { ...prev, font: key };
190
+ });
191
+ }, []);
192
+ const setShadow = useCallback((key) => {
193
+ setConfigState((prev) => {
194
+ if (prev.shadow === key) return prev;
195
+ return { ...prev, shadow: key };
196
+ });
197
+ }, []);
198
+ const setSurfaceStyle = useCallback((key) => {
199
+ setConfigState((prev) => {
200
+ if (prev.surfaceStyle === key) return prev;
201
+ return { ...prev, surfaceStyle: key };
202
+ });
203
+ }, []);
204
+ const setMenuColor = useCallback((key) => {
205
+ setConfigState((prev) => {
206
+ if (prev.menuColor === key) return prev;
207
+ return { ...prev, menuColor: key };
208
+ });
209
+ }, []);
210
+ const setMenuAccent = useCallback((key) => {
211
+ setConfigState((prev) => {
212
+ if (prev.menuAccent === key) return prev;
213
+ return { ...prev, menuAccent: key };
214
+ });
215
+ }, []);
216
+ const resetConfig = useCallback(() => {
217
+ setConfigState(DEFAULT_THEME_CONFIG);
218
+ }, []);
219
+ const isDefault = configsEqual(config, DEFAULT_THEME_CONFIG);
220
+ const generateCSSFn = useCallback(() => {
221
+ return generateThemeCSS(config);
222
+ }, [config]);
223
+ const value = useMemo(
224
+ () => ({
225
+ config,
226
+ setConfig,
227
+ setStyle,
228
+ setColorPreset,
229
+ setRadius,
230
+ setFont,
231
+ setShadow,
232
+ setSurfaceStyle,
233
+ setMenuColor,
234
+ setMenuAccent,
235
+ resetConfig,
236
+ isDefault,
237
+ generateCSS: generateCSSFn
238
+ }),
239
+ [
240
+ config,
241
+ setConfig,
242
+ setStyle,
243
+ setColorPreset,
244
+ setRadius,
245
+ setFont,
246
+ setShadow,
247
+ setSurfaceStyle,
248
+ setMenuColor,
249
+ setMenuAccent,
250
+ resetConfig,
251
+ isDefault,
252
+ generateCSSFn
253
+ ]
254
+ );
255
+ return /* @__PURE__ */ jsx(ThemeCustomizerContext.Provider, { value, children });
256
+ }
257
+ export {
258
+ ThemeCustomizerContext,
259
+ ThemeCustomizerProvider,
260
+ useThemeCustomizer
261
+ };