@work-rjkashyap/unified-ui 0.3.4 → 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 -1957
  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-AAEWG5VR.mjs → tokens/colors.cjs} +94 -94
  372. package/dist/{z-index-DmLl6FUD.d.ts → tokens/colors.d.cts} +118 -72
  373. package/dist/{z-index-DmLl6FUD.d.cts → tokens/colors.d.ts} +118 -72
  374. package/dist/{chunk-6ZZZBOCH.cjs → tokens/colors.mjs} +47 -121
  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-A2DGHQL2.cjs +0 -21808
  428. package/dist/chunk-BJ55D5IK.mjs +0 -2433
  429. package/dist/chunk-F4JJFWWU.cjs +0 -604
  430. package/dist/chunk-FUWXGHWQ.cjs +0 -468
  431. package/dist/chunk-MBYCK2JJ.mjs +0 -37
  432. package/dist/chunk-OHEH57BV.mjs +0 -455
  433. package/dist/chunk-RUG3BW2B.cjs +0 -2471
  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 -159
  446. package/dist/theme.d.cts +0 -440
  447. package/dist/theme.d.ts +0 -440
  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,812 @@
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_exports = {};
21
+ __export(customizer_exports, {
22
+ ThemeCustomizer: () => ThemeCustomizer
23
+ });
24
+ module.exports = __toCommonJS(customizer_exports);
25
+ var import_jsx_runtime = require("react/jsx-runtime");
26
+ var import_cn = require("../utils/cn");
27
+ var import_react = require("react");
28
+ var import_customizer_store = require("./customizer-store");
29
+ var import_presets = require("./presets");
30
+ function Section({
31
+ title,
32
+ children,
33
+ className
34
+ }) {
35
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: (0, import_cn.cn)("space-y-2", className), children: [
36
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h4", { className: "text-xs font-semibold uppercase tracking-wider text-muted-foreground", children: title }),
37
+ children
38
+ ] });
39
+ }
40
+ function CheckIcon({ className }) {
41
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
42
+ "svg",
43
+ {
44
+ className: (0, import_cn.cn)("size-4 shrink-0", className),
45
+ xmlns: "http://www.w3.org/2000/svg",
46
+ viewBox: "0 0 24 24",
47
+ fill: "none",
48
+ stroke: "currentColor",
49
+ strokeWidth: "2.5",
50
+ strokeLinecap: "round",
51
+ strokeLinejoin: "round",
52
+ "aria-hidden": "true",
53
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M20 6 9 17l-5-5" })
54
+ }
55
+ );
56
+ }
57
+ function RadiusOption({
58
+ preset,
59
+ isActive,
60
+ onClick
61
+ }) {
62
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
63
+ "button",
64
+ {
65
+ type: "button",
66
+ onClick,
67
+ className: (0, import_cn.cn)(
68
+ "flex flex-col items-center justify-center gap-1 rounded-md border px-3 py-2 text-center transition-all duration-fast ease-standard",
69
+ "hover:border-border-strong hover:bg-muted/50",
70
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
71
+ isActive ? "border-primary bg-muted/60 shadow-sm" : "border-border bg-transparent"
72
+ ),
73
+ title: `${preset.name} (${preset.label})`,
74
+ children: [
75
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
76
+ "span",
77
+ {
78
+ className: "size-8 border-2 border-foreground/30 bg-muted",
79
+ style: { borderRadius: preset.value },
80
+ "aria-hidden": "true"
81
+ }
82
+ ),
83
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
84
+ "span",
85
+ {
86
+ className: (0, import_cn.cn)(
87
+ "text-[11px] font-medium leading-none",
88
+ isActive ? "text-foreground" : "text-muted-foreground"
89
+ ),
90
+ children: preset.label
91
+ }
92
+ )
93
+ ]
94
+ }
95
+ );
96
+ }
97
+ function ChevronDownIcon({ className }) {
98
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
99
+ "svg",
100
+ {
101
+ className: (0, import_cn.cn)("size-4 shrink-0", className),
102
+ xmlns: "http://www.w3.org/2000/svg",
103
+ viewBox: "0 0 24 24",
104
+ fill: "none",
105
+ stroke: "currentColor",
106
+ strokeWidth: "2",
107
+ strokeLinecap: "round",
108
+ strokeLinejoin: "round",
109
+ "aria-hidden": "true",
110
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "m6 9 6 6 6-6" })
111
+ }
112
+ );
113
+ }
114
+ function SearchIcon({ className }) {
115
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
116
+ "svg",
117
+ {
118
+ className: (0, import_cn.cn)("size-4 shrink-0", className),
119
+ xmlns: "http://www.w3.org/2000/svg",
120
+ viewBox: "0 0 24 24",
121
+ fill: "none",
122
+ stroke: "currentColor",
123
+ strokeWidth: "2",
124
+ strokeLinecap: "round",
125
+ strokeLinejoin: "round",
126
+ "aria-hidden": "true",
127
+ children: [
128
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "11", cy: "11", r: "8" }),
129
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "m21 21-4.3-4.3" })
130
+ ]
131
+ }
132
+ );
133
+ }
134
+ function FontCombobox({
135
+ presets,
136
+ activeKey,
137
+ onSelect
138
+ }) {
139
+ const [open, setOpen] = (0, import_react.useState)(false);
140
+ const [search, setSearch] = (0, import_react.useState)("");
141
+ const [highlightIndex, setHighlightIndex] = (0, import_react.useState)(-1);
142
+ const containerRef = (0, import_react.useRef)(null);
143
+ const listRef = (0, import_react.useRef)(null);
144
+ const inputRef = (0, import_react.useRef)(null);
145
+ const activePreset = (0, import_react.useMemo)(
146
+ () => presets.find((p) => p.key === activeKey) ?? presets[0],
147
+ [presets, activeKey]
148
+ );
149
+ const filtered = (0, import_react.useMemo)(() => {
150
+ if (!search.trim()) return presets;
151
+ const q = search.toLowerCase();
152
+ return presets.filter((p) => p.name.toLowerCase().includes(q));
153
+ }, [presets, search]);
154
+ (0, import_react.useEffect)(() => {
155
+ setHighlightIndex(0);
156
+ }, []);
157
+ (0, import_react.useEffect)(() => {
158
+ if (!open) return;
159
+ function handleClick(e) {
160
+ if (containerRef.current && !containerRef.current.contains(e.target)) {
161
+ setOpen(false);
162
+ }
163
+ }
164
+ document.addEventListener("mousedown", handleClick);
165
+ return () => document.removeEventListener("mousedown", handleClick);
166
+ }, [open]);
167
+ (0, import_react.useEffect)(() => {
168
+ if (!open) return;
169
+ function handleKey(e) {
170
+ if (e.key === "Escape") {
171
+ setOpen(false);
172
+ }
173
+ }
174
+ document.addEventListener("keydown", handleKey);
175
+ return () => document.removeEventListener("keydown", handleKey);
176
+ }, [open]);
177
+ (0, import_react.useEffect)(() => {
178
+ if (open) {
179
+ requestAnimationFrame(() => inputRef.current?.focus());
180
+ } else {
181
+ setSearch("");
182
+ setHighlightIndex(-1);
183
+ }
184
+ }, [open]);
185
+ (0, import_react.useEffect)(() => {
186
+ if (!open || highlightIndex < 0 || !listRef.current) return;
187
+ const items = listRef.current.querySelectorAll("[data-font-item]");
188
+ items[highlightIndex]?.scrollIntoView({ block: "nearest" });
189
+ }, [highlightIndex, open]);
190
+ const handleSelect = (0, import_react.useCallback)(
191
+ (key) => {
192
+ onSelect(key);
193
+ setOpen(false);
194
+ },
195
+ [onSelect]
196
+ );
197
+ const handleKeyDown = (0, import_react.useCallback)(
198
+ (e) => {
199
+ if (e.key === "ArrowDown") {
200
+ e.preventDefault();
201
+ setHighlightIndex((i) => Math.min(i + 1, filtered.length - 1));
202
+ } else if (e.key === "ArrowUp") {
203
+ e.preventDefault();
204
+ setHighlightIndex((i) => Math.max(i - 1, 0));
205
+ } else if (e.key === "Enter") {
206
+ e.preventDefault();
207
+ if (highlightIndex >= 0 && highlightIndex < filtered.length) {
208
+ handleSelect(filtered[highlightIndex].key);
209
+ }
210
+ }
211
+ },
212
+ [filtered, highlightIndex, handleSelect]
213
+ );
214
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { ref: containerRef, className: "relative", children: [
215
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
216
+ "button",
217
+ {
218
+ type: "button",
219
+ onClick: () => setOpen((prev) => !prev),
220
+ className: (0, import_cn.cn)(
221
+ "flex w-full items-center gap-2 rounded-md border px-3 py-2 text-left text-sm transition-all duration-fast ease-standard",
222
+ "hover:border-border-strong hover:bg-muted/50",
223
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
224
+ open ? "border-primary shadow-sm" : "border-border"
225
+ ),
226
+ "aria-haspopup": "listbox",
227
+ "aria-expanded": open,
228
+ children: [
229
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
230
+ "span",
231
+ {
232
+ className: "text-sm font-semibold leading-none text-muted-foreground",
233
+ style: { fontFamily: activePreset.value },
234
+ children: activePreset.sample
235
+ }
236
+ ),
237
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "flex-1 truncate font-medium text-foreground", children: activePreset.name }),
238
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
239
+ ChevronDownIcon,
240
+ {
241
+ className: (0, import_cn.cn)(
242
+ "text-muted-foreground transition-transform duration-fast",
243
+ open && "rotate-180"
244
+ )
245
+ }
246
+ )
247
+ ]
248
+ }
249
+ ),
250
+ open && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
251
+ "div",
252
+ {
253
+ className: (0, import_cn.cn)(
254
+ "absolute left-0 z-50 mt-1 w-full rounded-md border border-border bg-popover shadow-md",
255
+ "animate-in fade-in-0 zoom-in-95 slide-in-from-top-2"
256
+ ),
257
+ role: "dialog",
258
+ "aria-label": "Select font",
259
+ children: [
260
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2 border-b border-border px-3 py-2", children: [
261
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SearchIcon, { className: "text-muted-foreground" }),
262
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
263
+ "input",
264
+ {
265
+ ref: inputRef,
266
+ type: "text",
267
+ value: search,
268
+ onChange: (e) => setSearch(e.target.value),
269
+ onKeyDown: handleKeyDown,
270
+ placeholder: "Search fonts\u2026",
271
+ className: "flex-1 bg-transparent text-sm text-foreground placeholder:text-muted-foreground outline-none",
272
+ "aria-label": "Search fonts",
273
+ autoComplete: "off",
274
+ spellCheck: false
275
+ }
276
+ )
277
+ ] }),
278
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
279
+ "div",
280
+ {
281
+ ref: listRef,
282
+ className: "max-h-52 overflow-y-auto overscroll-contain p-1",
283
+ role: "listbox",
284
+ children: filtered.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "px-3 py-4 text-center text-sm text-muted-foreground", children: "No fonts found" }) : filtered.map((preset, index) => {
285
+ const isActive = preset.key === activeKey;
286
+ const isHighlighted = index === highlightIndex;
287
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
288
+ "button",
289
+ {
290
+ type: "button",
291
+ "data-font-item": "",
292
+ role: "option",
293
+ "aria-selected": isActive,
294
+ onClick: () => handleSelect(preset.key),
295
+ onMouseEnter: () => setHighlightIndex(index),
296
+ className: (0, import_cn.cn)(
297
+ "flex w-full items-center gap-2.5 rounded-sm px-2.5 py-1.5 text-left text-sm transition-colors",
298
+ "outline-none",
299
+ isHighlighted && "bg-muted",
300
+ isActive && "text-foreground font-medium",
301
+ !isActive && "text-muted-foreground"
302
+ ),
303
+ children: [
304
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
305
+ "span",
306
+ {
307
+ className: "w-6 text-center text-base font-semibold leading-none",
308
+ style: { fontFamily: preset.value },
309
+ "aria-hidden": "true",
310
+ children: preset.sample
311
+ }
312
+ ),
313
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "flex-1 truncate", children: preset.name }),
314
+ isActive && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CheckIcon, { className: "text-primary shrink-0" })
315
+ ]
316
+ },
317
+ preset.key
318
+ );
319
+ })
320
+ }
321
+ )
322
+ ]
323
+ }
324
+ )
325
+ ] });
326
+ }
327
+ function ColorCombobox({
328
+ presets,
329
+ activeKey,
330
+ onSelect
331
+ }) {
332
+ const [open, setOpen] = (0, import_react.useState)(false);
333
+ const [search, setSearch] = (0, import_react.useState)("");
334
+ const [highlightIndex, setHighlightIndex] = (0, import_react.useState)(-1);
335
+ const containerRef = (0, import_react.useRef)(null);
336
+ const listRef = (0, import_react.useRef)(null);
337
+ const inputRef = (0, import_react.useRef)(null);
338
+ const activePreset = (0, import_react.useMemo)(
339
+ () => presets.find((p) => p.key === activeKey) ?? presets[0],
340
+ [presets, activeKey]
341
+ );
342
+ const filtered = (0, import_react.useMemo)(() => {
343
+ if (!search.trim()) return presets;
344
+ const q = search.toLowerCase();
345
+ return presets.filter((p) => p.name.toLowerCase().includes(q));
346
+ }, [presets, search]);
347
+ (0, import_react.useEffect)(() => {
348
+ setHighlightIndex(0);
349
+ }, []);
350
+ (0, import_react.useEffect)(() => {
351
+ if (!open) return;
352
+ function handleClick(e) {
353
+ if (containerRef.current && !containerRef.current.contains(e.target)) {
354
+ setOpen(false);
355
+ }
356
+ }
357
+ document.addEventListener("mousedown", handleClick);
358
+ return () => document.removeEventListener("mousedown", handleClick);
359
+ }, [open]);
360
+ (0, import_react.useEffect)(() => {
361
+ if (!open) return;
362
+ function handleKey(e) {
363
+ if (e.key === "Escape") {
364
+ setOpen(false);
365
+ }
366
+ }
367
+ document.addEventListener("keydown", handleKey);
368
+ return () => document.removeEventListener("keydown", handleKey);
369
+ }, [open]);
370
+ (0, import_react.useEffect)(() => {
371
+ if (open) {
372
+ requestAnimationFrame(() => inputRef.current?.focus());
373
+ } else {
374
+ setSearch("");
375
+ setHighlightIndex(-1);
376
+ }
377
+ }, [open]);
378
+ (0, import_react.useEffect)(() => {
379
+ if (!open || highlightIndex < 0 || !listRef.current) return;
380
+ const items = listRef.current.querySelectorAll("[data-color-item]");
381
+ items[highlightIndex]?.scrollIntoView({ block: "nearest" });
382
+ }, [highlightIndex, open]);
383
+ const handleSelect = (0, import_react.useCallback)(
384
+ (key) => {
385
+ onSelect(key);
386
+ setOpen(false);
387
+ },
388
+ [onSelect]
389
+ );
390
+ const handleKeyDown = (0, import_react.useCallback)(
391
+ (e) => {
392
+ if (e.key === "ArrowDown") {
393
+ e.preventDefault();
394
+ setHighlightIndex((i) => Math.min(i + 1, filtered.length - 1));
395
+ } else if (e.key === "ArrowUp") {
396
+ e.preventDefault();
397
+ setHighlightIndex((i) => Math.max(i - 1, 0));
398
+ } else if (e.key === "Enter") {
399
+ e.preventDefault();
400
+ if (highlightIndex >= 0 && highlightIndex < filtered.length) {
401
+ handleSelect(filtered[highlightIndex].key);
402
+ }
403
+ }
404
+ },
405
+ [filtered, highlightIndex, handleSelect]
406
+ );
407
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { ref: containerRef, className: "relative", children: [
408
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
409
+ "button",
410
+ {
411
+ type: "button",
412
+ onClick: () => setOpen((prev) => !prev),
413
+ className: (0, import_cn.cn)(
414
+ "flex w-full items-center gap-2 rounded-md border px-3 py-2 text-left text-sm transition-all duration-fast ease-standard",
415
+ "hover:border-border-strong hover:bg-muted/50",
416
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
417
+ open ? "border-primary shadow-sm" : "border-border"
418
+ ),
419
+ "aria-haspopup": "listbox",
420
+ "aria-expanded": open,
421
+ children: [
422
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
423
+ "span",
424
+ {
425
+ className: (0, import_cn.cn)(
426
+ "size-5 shrink-0 rounded-full border shadow-xs",
427
+ "border-border"
428
+ ),
429
+ style: { backgroundColor: activePreset.swatch },
430
+ "aria-hidden": "true"
431
+ }
432
+ ),
433
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "flex-1 truncate font-medium text-foreground", children: activePreset.name }),
434
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
435
+ ChevronDownIcon,
436
+ {
437
+ className: (0, import_cn.cn)(
438
+ "text-muted-foreground transition-transform duration-fast",
439
+ open && "rotate-180"
440
+ )
441
+ }
442
+ )
443
+ ]
444
+ }
445
+ ),
446
+ open && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
447
+ "div",
448
+ {
449
+ className: (0, import_cn.cn)(
450
+ "absolute left-0 z-50 mt-1 w-full rounded-md border border-border bg-popover shadow-md",
451
+ "animate-in fade-in-0 zoom-in-95 slide-in-from-top-2"
452
+ ),
453
+ role: "dialog",
454
+ "aria-label": "Select color",
455
+ children: [
456
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2 border-b border-border px-3 py-2", children: [
457
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SearchIcon, { className: "text-muted-foreground" }),
458
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
459
+ "input",
460
+ {
461
+ ref: inputRef,
462
+ type: "text",
463
+ value: search,
464
+ onChange: (e) => setSearch(e.target.value),
465
+ onKeyDown: handleKeyDown,
466
+ placeholder: "Search colors\u2026",
467
+ className: "flex-1 bg-transparent text-sm text-foreground placeholder:text-muted-foreground outline-none",
468
+ "aria-label": "Search colors",
469
+ autoComplete: "off",
470
+ spellCheck: false
471
+ }
472
+ )
473
+ ] }),
474
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
475
+ "div",
476
+ {
477
+ ref: listRef,
478
+ className: "max-h-52 overflow-y-auto overscroll-contain p-1",
479
+ role: "listbox",
480
+ children: filtered.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "px-3 py-4 text-center text-sm text-muted-foreground", children: "No colors found" }) : filtered.map((preset, index) => {
481
+ const isActive = preset.key === activeKey;
482
+ const isHighlighted = index === highlightIndex;
483
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
484
+ "button",
485
+ {
486
+ type: "button",
487
+ "data-color-item": "",
488
+ role: "option",
489
+ "aria-selected": isActive,
490
+ onClick: () => handleSelect(preset.key),
491
+ onMouseEnter: () => setHighlightIndex(index),
492
+ className: (0, import_cn.cn)(
493
+ "flex w-full items-center gap-2.5 rounded-sm px-2.5 py-1.5 text-left text-sm transition-colors",
494
+ "outline-none",
495
+ isHighlighted && "bg-muted",
496
+ isActive && "text-foreground font-medium",
497
+ !isActive && "text-muted-foreground"
498
+ ),
499
+ children: [
500
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
501
+ "span",
502
+ {
503
+ className: (0, import_cn.cn)(
504
+ "size-4 shrink-0 rounded-full border shadow-xs",
505
+ isActive ? "border-primary/50 ring-2 ring-primary/20" : "border-border"
506
+ ),
507
+ style: { backgroundColor: preset.swatch },
508
+ "aria-hidden": "true"
509
+ }
510
+ ),
511
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "flex-1 truncate", children: preset.name }),
512
+ isActive && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CheckIcon, { className: "text-primary shrink-0" })
513
+ ]
514
+ },
515
+ preset.key
516
+ );
517
+ })
518
+ }
519
+ )
520
+ ]
521
+ }
522
+ )
523
+ ] });
524
+ }
525
+ function PillToggle({
526
+ label,
527
+ isActive,
528
+ onClick,
529
+ description
530
+ }) {
531
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
532
+ "button",
533
+ {
534
+ type: "button",
535
+ onClick,
536
+ className: (0, import_cn.cn)(
537
+ "rounded-md border px-3 py-2 text-left text-sm transition-all duration-fast ease-standard",
538
+ "hover:border-border-strong hover:bg-muted/50",
539
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
540
+ isActive ? "border-primary bg-muted/60 shadow-sm font-medium text-foreground" : "border-border bg-transparent text-muted-foreground"
541
+ ),
542
+ title: description,
543
+ children: label
544
+ }
545
+ );
546
+ }
547
+ function StyleOption({
548
+ preset,
549
+ isActive,
550
+ onClick
551
+ }) {
552
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
553
+ "button",
554
+ {
555
+ type: "button",
556
+ onClick,
557
+ className: (0, import_cn.cn)(
558
+ "flex items-start gap-3 rounded-md border px-3 py-3 text-left transition-all duration-fast ease-standard",
559
+ "hover:border-border-strong hover:bg-muted/50",
560
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
561
+ isActive ? "border-primary bg-muted/60 shadow-sm" : "border-border bg-transparent"
562
+ ),
563
+ title: preset.description,
564
+ children: [
565
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
566
+ "svg",
567
+ {
568
+ className: (0, import_cn.cn)(
569
+ "size-5 shrink-0 mt-0.5",
570
+ isActive ? "text-primary" : "text-muted-foreground"
571
+ ),
572
+ xmlns: "http://www.w3.org/2000/svg",
573
+ viewBox: "0 0 24 24",
574
+ fill: "none",
575
+ stroke: "currentColor",
576
+ strokeWidth: "1.5",
577
+ strokeLinecap: "round",
578
+ strokeLinejoin: "round",
579
+ "aria-hidden": "true",
580
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: preset.iconPath })
581
+ }
582
+ ),
583
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "min-w-0 flex-1", children: [
584
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
585
+ "div",
586
+ {
587
+ className: (0, import_cn.cn)(
588
+ "text-sm font-semibold leading-tight",
589
+ isActive ? "text-foreground" : "text-foreground"
590
+ ),
591
+ children: preset.name
592
+ }
593
+ ),
594
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
595
+ "div",
596
+ {
597
+ className: (0, import_cn.cn)(
598
+ "mt-0.5 text-xs leading-snug",
599
+ isActive ? "text-muted-foreground" : "text-muted-foreground/70"
600
+ ),
601
+ children: preset.description
602
+ }
603
+ )
604
+ ] }),
605
+ isActive && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CheckIcon, { className: "shrink-0 mt-0.5 text-primary" })
606
+ ]
607
+ }
608
+ );
609
+ }
610
+ function CopyButton({
611
+ getText,
612
+ className,
613
+ children
614
+ }) {
615
+ const [copied, setCopied] = (0, import_react.useState)(false);
616
+ const timeoutRef = (0, import_react.useRef)(null);
617
+ const handleCopy = (0, import_react.useCallback)(() => {
618
+ const text = getText();
619
+ navigator.clipboard.writeText(text).then(() => {
620
+ setCopied(true);
621
+ if (timeoutRef.current) clearTimeout(timeoutRef.current);
622
+ timeoutRef.current = setTimeout(() => setCopied(false), 2e3);
623
+ });
624
+ }, [getText]);
625
+ (0, import_react.useEffect)(() => {
626
+ return () => {
627
+ if (timeoutRef.current) clearTimeout(timeoutRef.current);
628
+ };
629
+ }, []);
630
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
631
+ "button",
632
+ {
633
+ type: "button",
634
+ onClick: handleCopy,
635
+ className: (0, import_cn.cn)(
636
+ "inline-flex items-center justify-center gap-2 rounded-md border border-border bg-secondary px-4 py-2 text-sm font-medium text-secondary-foreground transition-all duration-fast ease-standard",
637
+ "hover:bg-secondary-hover active:bg-secondary-active",
638
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
639
+ className
640
+ ),
641
+ children: copied ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
642
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CheckIcon, { className: "text-success" }),
643
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "Copied!" })
644
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
645
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
646
+ "svg",
647
+ {
648
+ className: "size-4",
649
+ xmlns: "http://www.w3.org/2000/svg",
650
+ viewBox: "0 0 24 24",
651
+ fill: "none",
652
+ stroke: "currentColor",
653
+ strokeWidth: "2",
654
+ strokeLinecap: "round",
655
+ strokeLinejoin: "round",
656
+ "aria-hidden": "true",
657
+ children: [
658
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2" }),
659
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" })
660
+ ]
661
+ }
662
+ ),
663
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: children ?? "Copy CSS" })
664
+ ] })
665
+ }
666
+ );
667
+ }
668
+ function ThemeCustomizer({
669
+ className,
670
+ showCopyButton = true,
671
+ showResetButton = true
672
+ }) {
673
+ const {
674
+ config,
675
+ setStyle,
676
+ setColorPreset,
677
+ setRadius,
678
+ setFont,
679
+ setShadow,
680
+ setSurfaceStyle,
681
+ setMenuColor,
682
+ setMenuAccent,
683
+ resetConfig,
684
+ isDefault,
685
+ generateCSS
686
+ } = (0, import_customizer_store.useThemeCustomizer)();
687
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
688
+ "div",
689
+ {
690
+ className: (0, import_cn.cn)("space-y-6", className),
691
+ "data-ds": "",
692
+ "data-ds-component": "theme-customizer",
693
+ children: [
694
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Section, { title: "Style", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "grid grid-cols-1 gap-2", children: import_presets.STYLE_PRESETS.map((preset) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
695
+ StyleOption,
696
+ {
697
+ preset,
698
+ isActive: config.style === preset.key,
699
+ onClick: () => setStyle(preset.key)
700
+ },
701
+ preset.key
702
+ )) }) }),
703
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Section, { title: "Color", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
704
+ ColorCombobox,
705
+ {
706
+ presets: import_presets.COLOR_PRESETS,
707
+ activeKey: config.colorPreset,
708
+ onSelect: setColorPreset
709
+ }
710
+ ) }),
711
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Section, { title: "Radius", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex flex-wrap gap-2", children: import_presets.RADIUS_PRESETS.map((preset) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
712
+ RadiusOption,
713
+ {
714
+ preset,
715
+ isActive: config.radius === preset.key,
716
+ onClick: () => setRadius(preset.key)
717
+ },
718
+ preset.key
719
+ )) }) }),
720
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Section, { title: "Font", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
721
+ FontCombobox,
722
+ {
723
+ presets: import_presets.FONT_PRESETS,
724
+ activeKey: config.font,
725
+ onSelect: setFont
726
+ }
727
+ ) }),
728
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Section, { title: "Shadow", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex flex-wrap gap-2", children: import_presets.SHADOW_PRESETS.map((preset) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
729
+ PillToggle,
730
+ {
731
+ label: preset.name,
732
+ isActive: config.shadow === preset.key,
733
+ onClick: () => setShadow(preset.key),
734
+ description: preset.description
735
+ },
736
+ preset.key
737
+ )) }) }),
738
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Section, { title: "Surface", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex flex-wrap gap-2", children: import_presets.SURFACE_STYLE_PRESETS.map((preset) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
739
+ PillToggle,
740
+ {
741
+ label: preset.name,
742
+ isActive: config.surfaceStyle === preset.key,
743
+ onClick: () => setSurfaceStyle(preset.key),
744
+ description: preset.description
745
+ },
746
+ preset.key
747
+ )) }) }),
748
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Section, { title: "Menu Color", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex flex-wrap gap-2", children: import_presets.MENU_COLOR_PRESETS.map((preset) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
749
+ PillToggle,
750
+ {
751
+ label: preset.name,
752
+ isActive: config.menuColor === preset.key,
753
+ onClick: () => setMenuColor(preset.key),
754
+ description: preset.description
755
+ },
756
+ preset.key
757
+ )) }) }),
758
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Section, { title: "Menu Accent", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex flex-wrap gap-2", children: import_presets.MENU_ACCENT_PRESETS.map((preset) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
759
+ PillToggle,
760
+ {
761
+ label: preset.name,
762
+ isActive: config.menuAccent === preset.key,
763
+ onClick: () => setMenuAccent(preset.key),
764
+ description: preset.description
765
+ },
766
+ preset.key
767
+ )) }) }),
768
+ (showCopyButton || showResetButton) && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2 border-t border-border pt-4", children: [
769
+ showCopyButton && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CopyButton, { getText: generateCSS, className: "flex-1" }),
770
+ showResetButton && !isDefault && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
771
+ "button",
772
+ {
773
+ type: "button",
774
+ onClick: resetConfig,
775
+ className: (0, import_cn.cn)(
776
+ "inline-flex items-center justify-center gap-2 rounded-md border border-border bg-transparent px-4 py-2 text-sm font-medium text-muted-foreground transition-all duration-fast ease-standard",
777
+ "hover:bg-muted hover:text-foreground",
778
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background"
779
+ ),
780
+ children: [
781
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
782
+ "svg",
783
+ {
784
+ className: "size-4",
785
+ xmlns: "http://www.w3.org/2000/svg",
786
+ viewBox: "0 0 24 24",
787
+ fill: "none",
788
+ stroke: "currentColor",
789
+ strokeWidth: "2",
790
+ strokeLinecap: "round",
791
+ strokeLinejoin: "round",
792
+ "aria-hidden": "true",
793
+ children: [
794
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" }),
795
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M3 3v5h5" })
796
+ ]
797
+ }
798
+ ),
799
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "Reset" })
800
+ ]
801
+ }
802
+ )
803
+ ] })
804
+ ]
805
+ }
806
+ );
807
+ }
808
+ ThemeCustomizer.displayName = "ThemeCustomizer";
809
+ // Annotate the CommonJS export names for ESM import in node:
810
+ 0 && (module.exports = {
811
+ ThemeCustomizer
812
+ });