@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,112 @@
1
+ import * as react from 'react';
2
+ import * as class_variance_authority_types from 'class-variance-authority/types';
3
+ import { VariantProps } from 'class-variance-authority';
4
+
5
+ declare const textareaVariants: (props?: ({
6
+ variant?: "success" | "default" | "error" | null | undefined;
7
+ size?: "sm" | "md" | "lg" | null | undefined;
8
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
9
+ type TextareaVariant = "default" | "error" | "success";
10
+ type TextareaSize = "sm" | "md" | "lg";
11
+ interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, "size">, VariantProps<typeof textareaVariants> {
12
+ /**
13
+ * Visual variant of the textarea.
14
+ * @default "default"
15
+ */
16
+ variant?: TextareaVariant;
17
+ /**
18
+ * Size of the textarea.
19
+ * @default "md"
20
+ */
21
+ size?: TextareaSize;
22
+ /**
23
+ * Whether the textarea should automatically resize to fit its content.
24
+ * When enabled, the native resize handle is hidden and the textarea
25
+ * grows vertically as the user types.
26
+ * @default false
27
+ */
28
+ autoResize?: boolean;
29
+ /**
30
+ * Maximum height (in pixels) for the textarea when `autoResize` is enabled.
31
+ * After reaching this height, the textarea will scroll instead of growing.
32
+ * Only applies when `autoResize` is true.
33
+ * @default undefined (no max height constraint)
34
+ */
35
+ maxHeight?: number;
36
+ /**
37
+ * Minimum number of rows to display.
38
+ * This sets the initial height of the textarea.
39
+ * @default 3
40
+ */
41
+ minRows?: number;
42
+ /**
43
+ * Whether to show the character count below the textarea.
44
+ * When `maxLength` is also set, displays "current / max".
45
+ * Otherwise, displays just the current count.
46
+ * @default false
47
+ */
48
+ showCount?: boolean;
49
+ /**
50
+ * Additional CSS classes for the outer wrapper element.
51
+ * Use this when you need to control the width/margin of the textarea group.
52
+ */
53
+ wrapperClassName?: string;
54
+ /**
55
+ * Additional CSS classes for the character count text.
56
+ */
57
+ countClassName?: string;
58
+ /** Additional CSS classes to merge on the textarea element. */
59
+ className?: string;
60
+ }
61
+ /**
62
+ * Textarea — a multi-line text input for capturing longer user content.
63
+ *
64
+ * Built on the design system's token layer with CVA for variant composition.
65
+ * Shares the same visual language as the Input component for consistency.
66
+ * All colors, radii, spacing, and transitions come from CSS custom properties
67
+ * defined in design-system.css.
68
+ *
69
+ * Accessibility:
70
+ * - Focus ring visible on keyboard navigation (focus-visible)
71
+ * - Disabled state uses both `disabled` attribute and `aria-disabled`
72
+ * - Error variant sets `aria-invalid="true"` automatically
73
+ * - Supports `aria-describedby` for linking to error/helper messages
74
+ * - Character count uses `aria-live="polite"` for screen reader updates
75
+ *
76
+ * @example
77
+ * ```tsx
78
+ * // Basic usage
79
+ * <Textarea placeholder="Write something..." />
80
+ *
81
+ * // With variant
82
+ * <Textarea variant="error" aria-describedby="desc-error" />
83
+ * <Textarea variant="success" />
84
+ *
85
+ * // Auto-resize
86
+ * <Textarea autoResize placeholder="This will grow as you type..." />
87
+ * <Textarea autoResize maxHeight={200} placeholder="Grows up to 200px" />
88
+ *
89
+ * // Character count
90
+ * <Textarea showCount placeholder="With counter" />
91
+ * <Textarea showCount maxLength={500} placeholder="Max 500 chars" />
92
+ *
93
+ * // Sizes
94
+ * <Textarea size="sm" placeholder="Small" />
95
+ * <Textarea size="md" placeholder="Medium" />
96
+ * <Textarea size="lg" placeholder="Large" />
97
+ *
98
+ * // Controlled with min rows
99
+ * <Textarea
100
+ * minRows={5}
101
+ * value={text}
102
+ * onChange={(e) => setText(e.target.value)}
103
+ * />
104
+ *
105
+ * // Disabled / Read-only
106
+ * <Textarea disabled placeholder="Disabled" />
107
+ * <Textarea readOnly value="Read-only value" />
108
+ * ```
109
+ */
110
+ declare const Textarea: react.ForwardRefExoticComponent<TextareaProps & react.RefAttributes<HTMLTextAreaElement>>;
111
+
112
+ export { Textarea, type TextareaProps, type TextareaSize, type TextareaVariant, textareaVariants };
@@ -0,0 +1,233 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { cn, composeRefs } from "../utils/cn";
4
+ import { focusRingClasses } from "../utils/focus-ring";
5
+ import { cva } from "class-variance-authority";
6
+ import { forwardRef, useCallback, useEffect, useRef, useState } from "react";
7
+ const textareaVariants = cva(
8
+ // Base styles — shared across all variants and sizes
9
+ [
10
+ // Layout
11
+ "flex w-full min-h-[60px]",
12
+ // Typography
13
+ "text-sm leading-5",
14
+ // Shape
15
+ "rounded-md",
16
+ // Border
17
+ "border",
18
+ // Colors
19
+ "bg-background text-input-foreground",
20
+ "placeholder:text-input-placeholder",
21
+ // Transition
22
+ "transition-[color,background-color,border-color,box-shadow,opacity]",
23
+ "duration-fast ease-standard",
24
+ // Focus ring — WCAG AA compliant, visible on keyboard navigation only
25
+ focusRingClasses,
26
+ // Disabled
27
+ "disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed disabled:bg-disabled disabled:text-disabled-foreground",
28
+ // Read-only
29
+ "read-only:bg-muted read-only:cursor-default",
30
+ // Resize handle
31
+ "resize-vertical"
32
+ ],
33
+ {
34
+ variants: {
35
+ // -----------------------------------------------------------------
36
+ // Visual Variants
37
+ // -----------------------------------------------------------------
38
+ variant: {
39
+ /**
40
+ * Default — standard textarea with muted border.
41
+ */
42
+ default: [
43
+ "border-input",
44
+ "hover:border-border-strong",
45
+ "focus-visible:border-border-strong"
46
+ ],
47
+ /**
48
+ * Error — validation failed. Uses danger color.
49
+ */
50
+ error: [
51
+ "border-danger",
52
+ "text-foreground",
53
+ "focus-visible:border-danger",
54
+ "placeholder:text-input-placeholder"
55
+ ],
56
+ /**
57
+ * Success — validation passed. Uses success color.
58
+ */
59
+ success: [
60
+ "border-success",
61
+ "text-foreground",
62
+ "focus-visible:border-success",
63
+ "placeholder:text-input-placeholder"
64
+ ]
65
+ },
66
+ // -----------------------------------------------------------------
67
+ // Size Variants
68
+ // -----------------------------------------------------------------
69
+ size: {
70
+ /**
71
+ * Small — compact for dense UIs.
72
+ * Padding and font match Input sm.
73
+ */
74
+ sm: "px-2.5 py-1.5 text-xs",
75
+ /**
76
+ * Medium — default size for most textareas.
77
+ * Padding and font match Input md.
78
+ */
79
+ md: "px-3 py-2 text-sm",
80
+ /**
81
+ * Large — prominent textareas for long-form content.
82
+ * Padding and font match Input lg.
83
+ */
84
+ lg: "px-3.5 py-2.5 text-sm"
85
+ }
86
+ },
87
+ defaultVariants: {
88
+ variant: "default",
89
+ size: "md"
90
+ }
91
+ }
92
+ );
93
+ function useAutoResize(textareaRef, autoResize, maxHeight) {
94
+ const adjustHeight = useCallback(() => {
95
+ const textarea = textareaRef.current;
96
+ if (!textarea || !autoResize) return;
97
+ textarea.style.height = "auto";
98
+ const newHeight = textarea.scrollHeight;
99
+ if (maxHeight && newHeight > maxHeight) {
100
+ textarea.style.height = `${maxHeight}px`;
101
+ textarea.style.overflowY = "auto";
102
+ } else {
103
+ textarea.style.height = `${newHeight}px`;
104
+ textarea.style.overflowY = "hidden";
105
+ }
106
+ }, [textareaRef, autoResize, maxHeight]);
107
+ useEffect(() => {
108
+ adjustHeight();
109
+ }, [adjustHeight]);
110
+ return adjustHeight;
111
+ }
112
+ function CharacterCount({
113
+ current,
114
+ max,
115
+ variant,
116
+ className
117
+ }) {
118
+ const isOverLimit = max !== void 0 && current > max;
119
+ const isNearLimit = max !== void 0 && current >= max * 0.9;
120
+ return /* @__PURE__ */ jsx(
121
+ "span",
122
+ {
123
+ className: cn(
124
+ "text-xs leading-4 tabular-nums select-none",
125
+ // Default muted text
126
+ "text-muted-foreground",
127
+ // Near limit warning
128
+ isNearLimit && !isOverLimit && "text-warning",
129
+ // Over limit or error variant
130
+ (isOverLimit || variant === "error") && "text-danger",
131
+ className
132
+ ),
133
+ "aria-live": "polite",
134
+ "aria-atomic": "true",
135
+ children: max !== void 0 ? `${current} / ${max}` : current
136
+ }
137
+ );
138
+ }
139
+ const Textarea = forwardRef(
140
+ function Textarea2({
141
+ variant = "default",
142
+ size = "md",
143
+ autoResize = false,
144
+ maxHeight,
145
+ minRows = 3,
146
+ showCount = false,
147
+ wrapperClassName,
148
+ countClassName,
149
+ className,
150
+ disabled,
151
+ readOnly,
152
+ value,
153
+ defaultValue,
154
+ maxLength,
155
+ onChange,
156
+ "aria-invalid": ariaInvalid,
157
+ ...rest
158
+ }, ref) {
159
+ const internalRef = useRef(null);
160
+ const [uncontrolledCharCount, setUncontrolledCharCount] = useState(
161
+ () => {
162
+ if (defaultValue !== void 0) return String(defaultValue).length;
163
+ return 0;
164
+ }
165
+ );
166
+ const charCount = value !== void 0 ? String(value).length : uncontrolledCharCount;
167
+ const adjustHeight = useAutoResize(internalRef, autoResize, maxHeight);
168
+ const handleChange = useCallback(
169
+ (e) => {
170
+ setUncontrolledCharCount(e.target.value.length);
171
+ adjustHeight();
172
+ onChange?.(e);
173
+ },
174
+ [onChange, adjustHeight]
175
+ );
176
+ const resolvedAriaInvalid = ariaInvalid !== void 0 ? ariaInvalid : variant === "error" ? true : void 0;
177
+ const textareaClasses = cn(
178
+ textareaVariants({ variant, size }),
179
+ autoResize && "resize-none overflow-hidden",
180
+ className
181
+ );
182
+ const textareaElement = /* @__PURE__ */ jsx(
183
+ "textarea",
184
+ {
185
+ ref: composeRefs(internalRef, ref),
186
+ rows: minRows,
187
+ disabled,
188
+ readOnly,
189
+ value,
190
+ defaultValue,
191
+ maxLength,
192
+ onChange: handleChange,
193
+ "aria-invalid": resolvedAriaInvalid,
194
+ "aria-disabled": disabled || void 0,
195
+ className: textareaClasses,
196
+ "data-ds": "",
197
+ "data-ds-component": "textarea",
198
+ "data-ds-variant": variant,
199
+ "data-ds-size": size,
200
+ ...autoResize ? { "data-ds-auto-resize": "" } : {},
201
+ ...rest
202
+ }
203
+ );
204
+ if (!showCount) {
205
+ return textareaElement;
206
+ }
207
+ return /* @__PURE__ */ jsxs(
208
+ "div",
209
+ {
210
+ className: cn("flex flex-col gap-1.5 w-full", wrapperClassName),
211
+ "data-ds": "",
212
+ "data-ds-component": "textarea-wrapper",
213
+ children: [
214
+ textareaElement,
215
+ /* @__PURE__ */ jsx("div", { className: "flex justify-end px-0.5", children: /* @__PURE__ */ jsx(
216
+ CharacterCount,
217
+ {
218
+ current: charCount,
219
+ max: maxLength,
220
+ variant,
221
+ className: countClassName
222
+ }
223
+ ) })
224
+ ]
225
+ }
226
+ );
227
+ }
228
+ );
229
+ Textarea.displayName = "Textarea";
230
+ export {
231
+ Textarea,
232
+ textareaVariants
233
+ };
@@ -0,0 +1,282 @@
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 theme_toggle_exports = {};
21
+ __export(theme_toggle_exports, {
22
+ ThemeToggle: () => ThemeToggle
23
+ });
24
+ module.exports = __toCommonJS(theme_toggle_exports);
25
+ var import_jsx_runtime = require("react/jsx-runtime");
26
+ var import_cn = require("../utils/cn");
27
+ var import_focus_ring = require("../utils/focus-ring");
28
+ var import_class_variance_authority = require("class-variance-authority");
29
+ var import_react = require("react");
30
+ function SunIcon({ className }) {
31
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
32
+ "svg",
33
+ {
34
+ xmlns: "http://www.w3.org/2000/svg",
35
+ viewBox: "0 0 24 24",
36
+ fill: "none",
37
+ stroke: "currentColor",
38
+ strokeWidth: "2",
39
+ strokeLinecap: "round",
40
+ strokeLinejoin: "round",
41
+ className,
42
+ "aria-hidden": "true",
43
+ children: [
44
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", { cx: "12", cy: "12", r: "5" }),
45
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", y1: "1", x2: "12", y2: "3" }),
46
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", y1: "21", x2: "12", y2: "23" }),
47
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "4.22", y1: "4.22", x2: "5.64", y2: "5.64" }),
48
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "18.36", y1: "18.36", x2: "19.78", y2: "19.78" }),
49
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "1", y1: "12", x2: "3", y2: "12" }),
50
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "21", y1: "12", x2: "23", y2: "12" }),
51
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "18.36", y1: "5.64", x2: "19.78", y2: "4.22" }),
52
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "4.22", y1: "19.78", x2: "5.64", y2: "18.36" })
53
+ ]
54
+ }
55
+ );
56
+ }
57
+ function MoonIcon({ className }) {
58
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
59
+ "svg",
60
+ {
61
+ xmlns: "http://www.w3.org/2000/svg",
62
+ viewBox: "0 0 24 24",
63
+ fill: "none",
64
+ stroke: "currentColor",
65
+ strokeWidth: "2",
66
+ strokeLinecap: "round",
67
+ strokeLinejoin: "round",
68
+ className,
69
+ "aria-hidden": "true",
70
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" })
71
+ }
72
+ );
73
+ }
74
+ function MonitorIcon({ className }) {
75
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
76
+ "svg",
77
+ {
78
+ xmlns: "http://www.w3.org/2000/svg",
79
+ viewBox: "0 0 24 24",
80
+ fill: "none",
81
+ stroke: "currentColor",
82
+ strokeWidth: "2",
83
+ strokeLinecap: "round",
84
+ strokeLinejoin: "round",
85
+ className,
86
+ "aria-hidden": "true",
87
+ children: [
88
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("rect", { x: "2", y: "3", width: "20", height: "14", rx: "2", ry: "2" }),
89
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "8", y1: "21", x2: "16", y2: "21" }),
90
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", { x1: "12", y1: "17", x2: "12", y2: "21" })
91
+ ]
92
+ }
93
+ );
94
+ }
95
+ const iconButtonVariants = (0, import_class_variance_authority.cva)(
96
+ [
97
+ "inline-flex items-center justify-center",
98
+ "rounded-md",
99
+ "border border-border",
100
+ "bg-secondary text-secondary-foreground",
101
+ "transition-[color,background-color,border-color,box-shadow,opacity,transform]",
102
+ "duration-fast ease-standard",
103
+ "hover:bg-secondary-hover hover:text-foreground",
104
+ "active:scale-[0.97]",
105
+ import_focus_ring.focusRingClasses,
106
+ "cursor-pointer",
107
+ "select-none"
108
+ ],
109
+ {
110
+ variants: {
111
+ size: {
112
+ sm: "size-7 [&>svg]:size-3.5",
113
+ md: "size-9 [&>svg]:size-4",
114
+ lg: "size-10 [&>svg]:size-5"
115
+ }
116
+ },
117
+ defaultVariants: {
118
+ size: "md"
119
+ }
120
+ }
121
+ );
122
+ const segmentedContainerVariants = (0, import_class_variance_authority.cva)(
123
+ [
124
+ "inline-flex items-center",
125
+ "rounded-md",
126
+ "border border-border",
127
+ "bg-muted",
128
+ "p-0.5",
129
+ "gap-0.5"
130
+ ],
131
+ {
132
+ variants: {
133
+ size: {
134
+ sm: "[&>button]:size-6 [&>button>svg]:size-3",
135
+ md: "[&>button]:size-7 [&>button>svg]:size-3.5",
136
+ lg: "[&>button]:size-8 [&>button>svg]:size-4"
137
+ }
138
+ },
139
+ defaultVariants: {
140
+ size: "md"
141
+ }
142
+ }
143
+ );
144
+ const ICON_MAP = {
145
+ light: SunIcon,
146
+ dark: MoonIcon,
147
+ system: MonitorIcon
148
+ };
149
+ const LABEL_MAP = {
150
+ light: "Light mode",
151
+ dark: "Dark mode",
152
+ system: "System theme"
153
+ };
154
+ function getNextTheme(current, mode) {
155
+ if (mode === "light-dark") {
156
+ return current === "light" ? "dark" : "light";
157
+ }
158
+ const order = ["light", "dark", "system"];
159
+ const idx = order.indexOf(current);
160
+ return order[(idx + 1) % order.length];
161
+ }
162
+ const ThemeToggleIcon = (0, import_react.forwardRef)(
163
+ function ThemeToggleIcon2({ value, onChange, mode = "light-dark", size = "md", className, ...rest }, ref) {
164
+ const handleClick = (0, import_react.useCallback)(() => {
165
+ onChange(getNextTheme(value, mode));
166
+ }, [value, mode, onChange]);
167
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
168
+ "button",
169
+ {
170
+ ref,
171
+ type: "button",
172
+ onClick: handleClick,
173
+ className: (0, import_cn.cn)(iconButtonVariants({ size }), className),
174
+ "aria-label": `Switch to ${LABEL_MAP[getNextTheme(value, mode)] ?? "next theme"}`,
175
+ "data-ds": "",
176
+ "data-ds-component": "theme-toggle",
177
+ "data-ds-variant": "icon",
178
+ "data-ds-size": size,
179
+ "data-ds-theme-value": value,
180
+ ...rest,
181
+ children: [
182
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
183
+ SunIcon,
184
+ {
185
+ className: (0, import_cn.cn)(
186
+ "absolute transition-all duration-300",
187
+ value !== "light" && "scale-0 rotate-90 opacity-0"
188
+ )
189
+ }
190
+ ),
191
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
192
+ MoonIcon,
193
+ {
194
+ className: (0, import_cn.cn)(
195
+ "absolute transition-all duration-300",
196
+ value !== "dark" && "scale-0 -rotate-90 opacity-0"
197
+ )
198
+ }
199
+ ),
200
+ mode === "light-dark-system" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
201
+ MonitorIcon,
202
+ {
203
+ className: (0, import_cn.cn)(
204
+ "absolute transition-all duration-300",
205
+ value !== "system" && "scale-0 rotate-90 opacity-0"
206
+ )
207
+ }
208
+ )
209
+ ]
210
+ }
211
+ );
212
+ }
213
+ );
214
+ ThemeToggleIcon.displayName = "ThemeToggleIcon";
215
+ const ThemeToggleSegmented = (0, import_react.forwardRef)(
216
+ function ThemeToggleSegmented2({ value, onChange, mode = "light-dark", size = "md", className }, ref) {
217
+ const options = mode === "light-dark-system" ? ["light", "dark", "system"] : ["light", "dark"];
218
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
219
+ "div",
220
+ {
221
+ ref,
222
+ role: "radiogroup",
223
+ "aria-label": "Theme selection",
224
+ className: (0, import_cn.cn)(segmentedContainerVariants({ size }), className),
225
+ "data-ds": "",
226
+ "data-ds-component": "theme-toggle",
227
+ "data-ds-variant": "segmented",
228
+ "data-ds-size": size,
229
+ "data-ds-theme-value": value,
230
+ children: options.map((option) => {
231
+ const Icon = ICON_MAP[option];
232
+ const isActive = value === option;
233
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
234
+ "button",
235
+ {
236
+ type: "button",
237
+ role: "radio",
238
+ "aria-checked": isActive,
239
+ "aria-label": LABEL_MAP[option],
240
+ onClick: () => onChange(option),
241
+ className: (0, import_cn.cn)(
242
+ "inline-flex items-center justify-center rounded-sm transition-all duration-fast ease-standard",
243
+ import_focus_ring.focusRingClasses,
244
+ isActive ? "bg-background text-foreground shadow-sm" : "text-muted-foreground hover:text-foreground"
245
+ ),
246
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Icon, {})
247
+ },
248
+ option
249
+ );
250
+ })
251
+ }
252
+ );
253
+ }
254
+ );
255
+ ThemeToggleSegmented.displayName = "ThemeToggleSegmented";
256
+ const ThemeToggle = (0, import_react.forwardRef)(
257
+ function ThemeToggle2({ variant = "icon", ...rest }, ref) {
258
+ if (variant === "segmented") {
259
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
260
+ ThemeToggleSegmented,
261
+ {
262
+ ref,
263
+ variant,
264
+ ...rest
265
+ }
266
+ );
267
+ }
268
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
269
+ ThemeToggleIcon,
270
+ {
271
+ ref,
272
+ variant,
273
+ ...rest
274
+ }
275
+ );
276
+ }
277
+ );
278
+ ThemeToggle.displayName = "ThemeToggle";
279
+ // Annotate the CommonJS export names for ESM import in node:
280
+ 0 && (module.exports = {
281
+ ThemeToggle
282
+ });
@@ -0,0 +1,58 @@
1
+ import * as react from 'react';
2
+
3
+ type ThemeToggleMode = "light-dark" | "light-dark-system";
4
+ type ThemeToggleVariant = "icon" | "segmented";
5
+ type ThemeToggleSize = "sm" | "md" | "lg";
6
+ type ThemeValue = "light" | "dark" | "system";
7
+ interface ThemeToggleProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "onChange"> {
8
+ /** Current theme value. */
9
+ value: ThemeValue;
10
+ /** Callback when the theme changes. */
11
+ onChange: (value: ThemeValue) => void;
12
+ /**
13
+ * Toggle mode.
14
+ * - "light-dark": cycles between light and dark only
15
+ * - "light-dark-system": cycles through light, dark, and system
16
+ * @default "light-dark"
17
+ */
18
+ mode?: ThemeToggleMode;
19
+ /**
20
+ * Visual variant.
21
+ * - "icon": single button that cycles on click
22
+ * - "segmented": inline pill group with one button per option
23
+ * @default "icon"
24
+ */
25
+ variant?: ThemeToggleVariant;
26
+ /**
27
+ * Size of the toggle.
28
+ * @default "md"
29
+ */
30
+ size?: ThemeToggleSize;
31
+ /** Additional CSS classes. */
32
+ className?: string;
33
+ }
34
+ /**
35
+ * ThemeToggle — a light/dark/system mode switcher.
36
+ *
37
+ * This is a headless, controlled component: you provide `value` and
38
+ * `onChange`. It works with any theme provider (next-themes, custom
39
+ * context, etc.).
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * // With next-themes
44
+ * const { theme, setTheme } = useTheme();
45
+ * <ThemeToggle value={theme as ThemeValue} onChange={setTheme} />
46
+ *
47
+ * // Segmented variant with system option
48
+ * <ThemeToggle
49
+ * value={theme as ThemeValue}
50
+ * onChange={setTheme}
51
+ * variant="segmented"
52
+ * mode="light-dark-system"
53
+ * />
54
+ * ```
55
+ */
56
+ declare const ThemeToggle: react.ForwardRefExoticComponent<ThemeToggleProps & react.RefAttributes<HTMLElement>>;
57
+
58
+ export { ThemeToggle, type ThemeToggleMode, type ThemeToggleProps, type ThemeToggleSize, type ThemeToggleVariant, type ThemeValue };