@arolariu/components 0.5.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (972) hide show
  1. package/{changelog.md → CHANGELOG.md} +82 -0
  2. package/CONTRIBUTING.md +344 -265
  3. package/DEBUGGING.md +185 -103
  4. package/EXAMPLES.md +2976 -341
  5. package/{readme.md → README.md} +306 -203
  6. package/dist/components/ui/accordion.d.ts +157 -5
  7. package/dist/components/ui/accordion.d.ts.map +1 -1
  8. package/dist/components/ui/accordion.js +100 -22
  9. package/dist/components/ui/accordion.js.map +1 -1
  10. package/dist/components/ui/accordion.module.js +12 -0
  11. package/dist/components/ui/accordion.module.js.map +1 -0
  12. package/dist/components/ui/accordion_module.css +72 -0
  13. package/dist/components/ui/accordion_module.css.map +1 -0
  14. package/dist/components/ui/alert-dialog.d.ts +309 -18
  15. package/dist/components/ui/alert-dialog.d.ts.map +1 -1
  16. package/dist/components/ui/alert-dialog.js +149 -52
  17. package/dist/components/ui/alert-dialog.js.map +1 -1
  18. package/dist/components/ui/alert-dialog.module.js +13 -0
  19. package/dist/components/ui/alert-dialog.module.js.map +1 -0
  20. package/dist/components/ui/alert-dialog_module.css +89 -0
  21. package/dist/components/ui/alert-dialog_module.css.map +1 -0
  22. package/dist/components/ui/alert.d.ts +109 -6
  23. package/dist/components/ui/alert.d.ts.map +1 -1
  24. package/dist/components/ui/alert.js +12 -21
  25. package/dist/components/ui/alert.js.map +1 -1
  26. package/dist/components/ui/alert.module.js +11 -0
  27. package/dist/components/ui/alert.module.js.map +1 -0
  28. package/dist/components/ui/alert_module.css +59 -0
  29. package/dist/components/ui/alert_module.css.map +1 -0
  30. package/dist/components/ui/aspect-ratio.d.ts +24 -2
  31. package/dist/components/ui/aspect-ratio.d.ts.map +1 -1
  32. package/dist/components/ui/aspect-ratio.js +14 -3
  33. package/dist/components/ui/aspect-ratio.js.map +1 -1
  34. package/dist/components/ui/aspect-ratio.module.js +7 -0
  35. package/dist/components/ui/aspect-ratio.module.js.map +1 -0
  36. package/dist/components/ui/aspect-ratio_module.css +10 -0
  37. package/dist/components/ui/aspect-ratio_module.css.map +1 -0
  38. package/dist/components/ui/async-boundary.js +17 -0
  39. package/dist/components/ui/async-boundary.js.map +1 -0
  40. package/dist/components/ui/avatar.d.ts +88 -4
  41. package/dist/components/ui/avatar.d.ts.map +1 -1
  42. package/dist/components/ui/avatar.js +52 -20
  43. package/dist/components/ui/avatar.js.map +1 -1
  44. package/dist/components/ui/avatar.module.js +9 -0
  45. package/dist/components/ui/avatar.module.js.map +1 -0
  46. package/dist/components/ui/avatar_module.css +35 -0
  47. package/dist/components/ui/avatar_module.css.map +1 -0
  48. package/dist/components/ui/background-beams.d.ts +21 -3
  49. package/dist/components/ui/background-beams.d.ts.map +1 -1
  50. package/dist/components/ui/background-beams.js +22 -11
  51. package/dist/components/ui/background-beams.js.map +1 -1
  52. package/dist/components/ui/background-beams.module.js +8 -0
  53. package/dist/components/ui/background-beams.module.js.map +1 -0
  54. package/dist/components/ui/background-beams_module.css +22 -0
  55. package/dist/components/ui/background-beams_module.css.map +1 -0
  56. package/dist/components/ui/badge.d.ts +79 -6
  57. package/dist/components/ui/badge.d.ts.map +1 -1
  58. package/dist/components/ui/badge.js +19 -23
  59. package/dist/components/ui/badge.js.map +1 -1
  60. package/dist/components/ui/badge.module.js +11 -0
  61. package/dist/components/ui/badge.module.js.map +1 -0
  62. package/dist/components/ui/badge_module.css +63 -0
  63. package/dist/components/ui/badge_module.css.map +1 -0
  64. package/dist/components/ui/breadcrumb.d.ts +158 -13
  65. package/dist/components/ui/breadcrumb.d.ts.map +1 -1
  66. package/dist/components/ui/breadcrumb.js +39 -30
  67. package/dist/components/ui/breadcrumb.js.map +1 -1
  68. package/dist/components/ui/breadcrumb.module.js +14 -0
  69. package/dist/components/ui/breadcrumb.module.js.map +1 -0
  70. package/dist/components/ui/breadcrumb_module.css +90 -0
  71. package/dist/components/ui/breadcrumb_module.css.map +1 -0
  72. package/dist/components/ui/bubble-background.d.ts +38 -10
  73. package/dist/components/ui/bubble-background.d.ts.map +1 -1
  74. package/dist/components/ui/bubble-background.js +33 -35
  75. package/dist/components/ui/bubble-background.js.map +1 -1
  76. package/dist/components/ui/bubble-background.module.js +20 -0
  77. package/dist/components/ui/bubble-background.module.js.map +1 -0
  78. package/dist/components/ui/bubble-background_module.css +99 -0
  79. package/dist/components/ui/bubble-background_module.css.map +1 -0
  80. package/dist/components/ui/button-group.d.ts +88 -8
  81. package/dist/components/ui/button-group.d.ts.map +1 -1
  82. package/dist/components/ui/button-group.js +35 -32
  83. package/dist/components/ui/button-group.js.map +1 -1
  84. package/dist/components/ui/button-group.module.js +11 -0
  85. package/dist/components/ui/button-group.module.js.map +1 -0
  86. package/dist/components/ui/button-group_module.css +79 -0
  87. package/dist/components/ui/button-group_module.css.map +1 -0
  88. package/dist/components/ui/button.d.ts +82 -7
  89. package/dist/components/ui/button.d.ts.map +1 -1
  90. package/dist/components/ui/button.js +69 -34
  91. package/dist/components/ui/button.js.map +1 -1
  92. package/dist/components/ui/button.module.js +17 -0
  93. package/dist/components/ui/button.module.js.map +1 -0
  94. package/dist/components/ui/button_module.css +137 -0
  95. package/dist/components/ui/button_module.css.map +1 -0
  96. package/dist/components/ui/calendar.d.ts +36 -5
  97. package/dist/components/ui/calendar.d.ts.map +1 -1
  98. package/dist/components/ui/calendar.js +75 -64
  99. package/dist/components/ui/calendar.js.map +1 -1
  100. package/dist/components/ui/calendar.module.js +35 -0
  101. package/dist/components/ui/calendar.module.js.map +1 -0
  102. package/dist/components/ui/calendar_module.css +245 -0
  103. package/dist/components/ui/calendar_module.css.map +1 -0
  104. package/dist/components/ui/card-skeleton.js +41 -0
  105. package/dist/components/ui/card-skeleton.js.map +1 -0
  106. package/dist/components/ui/card-skeleton.module.js +15 -0
  107. package/dist/components/ui/card-skeleton.module.js.map +1 -0
  108. package/dist/components/ui/card-skeleton_module.css +54 -0
  109. package/dist/components/ui/card-skeleton_module.css.map +1 -0
  110. package/dist/components/ui/card.d.ts +162 -7
  111. package/dist/components/ui/card.d.ts.map +1 -1
  112. package/dist/components/ui/card.js +13 -13
  113. package/dist/components/ui/card.js.map +1 -1
  114. package/dist/components/ui/card.module.js +13 -0
  115. package/dist/components/ui/card.module.js.map +1 -0
  116. package/dist/components/ui/card_module.css +43 -0
  117. package/dist/components/ui/card_module.css.map +1 -0
  118. package/dist/components/ui/carousel.d.ts +127 -3
  119. package/dist/components/ui/carousel.d.ts.map +1 -1
  120. package/dist/components/ui/carousel.js +63 -36
  121. package/dist/components/ui/carousel.js.map +1 -1
  122. package/dist/components/ui/carousel.module.js +17 -0
  123. package/dist/components/ui/carousel.module.js.map +1 -0
  124. package/dist/components/ui/carousel_module.css +82 -0
  125. package/dist/components/ui/carousel_module.css.map +1 -0
  126. package/dist/components/ui/chart.d.ts +323 -13
  127. package/dist/components/ui/chart.d.ts.map +1 -1
  128. package/dist/components/ui/chart.js +224 -53
  129. package/dist/components/ui/chart.js.map +1 -1
  130. package/dist/components/ui/chart.module.js +27 -0
  131. package/dist/components/ui/chart.module.js.map +1 -0
  132. package/dist/components/ui/chart_module.css +159 -0
  133. package/dist/components/ui/chart_module.css.map +1 -0
  134. package/dist/components/ui/checkbox-group.d.ts +27 -0
  135. package/dist/components/ui/checkbox-group.d.ts.map +1 -0
  136. package/dist/components/ui/checkbox-group.js +26 -0
  137. package/dist/components/ui/checkbox-group.js.map +1 -0
  138. package/dist/components/ui/checkbox-group.module.js +7 -0
  139. package/dist/components/ui/checkbox-group.module.js.map +1 -0
  140. package/dist/components/ui/checkbox-group_module.css +11 -0
  141. package/dist/components/ui/checkbox-group_module.css.map +1 -0
  142. package/dist/components/ui/checkbox.d.ts +35 -2
  143. package/dist/components/ui/checkbox.d.ts.map +1 -1
  144. package/dist/components/ui/checkbox.js +40 -12
  145. package/dist/components/ui/checkbox.js.map +1 -1
  146. package/dist/components/ui/checkbox.module.js +8 -0
  147. package/dist/components/ui/checkbox.module.js.map +1 -0
  148. package/dist/components/ui/checkbox_module.css +45 -0
  149. package/dist/components/ui/checkbox_module.css.map +1 -0
  150. package/dist/components/ui/collapsible.d.ts +87 -3
  151. package/dist/components/ui/collapsible.d.ts.map +1 -1
  152. package/dist/components/ui/collapsible.js +46 -32
  153. package/dist/components/ui/collapsible.js.map +1 -1
  154. package/dist/components/ui/collapsible.module.js +8 -0
  155. package/dist/components/ui/collapsible.module.js.map +1 -0
  156. package/dist/components/ui/collapsible_module.css +26 -0
  157. package/dist/components/ui/collapsible_module.css.map +1 -0
  158. package/dist/components/ui/combobox.d.ts +335 -0
  159. package/dist/components/ui/combobox.d.ts.map +1 -0
  160. package/dist/components/ui/combobox.js +206 -0
  161. package/dist/components/ui/combobox.js.map +1 -0
  162. package/dist/components/ui/combobox.module.js +23 -0
  163. package/dist/components/ui/combobox.module.js.map +1 -0
  164. package/dist/components/ui/combobox_module.css +142 -0
  165. package/dist/components/ui/combobox_module.css.map +1 -0
  166. package/dist/components/ui/command.d.ts +284 -51
  167. package/dist/components/ui/command.d.ts.map +1 -1
  168. package/dist/components/ui/command.js +396 -51
  169. package/dist/components/ui/command.js.map +1 -1
  170. package/dist/components/ui/command.module.js +20 -0
  171. package/dist/components/ui/command.module.js.map +1 -0
  172. package/dist/components/ui/command_module.css +194 -0
  173. package/dist/components/ui/command_module.css.map +1 -0
  174. package/dist/components/ui/context-menu.d.ts +414 -21
  175. package/dist/components/ui/context-menu.d.ts.map +1 -1
  176. package/dist/components/ui/context-menu.js +190 -68
  177. package/dist/components/ui/context-menu.js.map +1 -1
  178. package/dist/components/ui/context-menu.module.js +19 -0
  179. package/dist/components/ui/context-menu.module.js.map +1 -0
  180. package/dist/components/ui/context-menu_module.css +114 -0
  181. package/dist/components/ui/context-menu_module.css.map +1 -0
  182. package/dist/components/ui/copy-button.d.ts +41 -0
  183. package/dist/components/ui/copy-button.d.ts.map +1 -0
  184. package/dist/components/ui/copy-button.js +51 -0
  185. package/dist/components/ui/copy-button.js.map +1 -0
  186. package/dist/components/ui/copy-button.module.js +8 -0
  187. package/dist/components/ui/copy-button.module.js.map +1 -0
  188. package/dist/components/ui/copy-button_module.css +37 -0
  189. package/dist/components/ui/copy-button_module.css.map +1 -0
  190. package/dist/components/ui/counting-number.d.ts +28 -2
  191. package/dist/components/ui/counting-number.d.ts.map +1 -1
  192. package/dist/components/ui/counting-number.js +31 -27
  193. package/dist/components/ui/counting-number.js.map +1 -1
  194. package/dist/components/ui/counting-number.module.js +7 -0
  195. package/dist/components/ui/counting-number.module.js.map +1 -0
  196. package/dist/components/ui/counting-number_module.css +7 -0
  197. package/dist/components/ui/counting-number_module.css.map +1 -0
  198. package/dist/components/ui/dialog.d.ts +287 -17
  199. package/dist/components/ui/dialog.d.ts.map +1 -1
  200. package/dist/components/ui/dialog.js +129 -52
  201. package/dist/components/ui/dialog.js.map +1 -1
  202. package/dist/components/ui/dialog.module.js +13 -0
  203. package/dist/components/ui/dialog.module.js.map +1 -0
  204. package/dist/components/ui/dialog_module.css +114 -0
  205. package/dist/components/ui/dialog_module.css.map +1 -0
  206. package/dist/components/ui/dot-background.d.ts +25 -35
  207. package/dist/components/ui/dot-background.d.ts.map +1 -1
  208. package/dist/components/ui/dot-background.js +31 -22
  209. package/dist/components/ui/dot-background.js.map +1 -1
  210. package/dist/components/ui/dot-background.module.js +8 -0
  211. package/dist/components/ui/dot-background.module.js.map +1 -0
  212. package/dist/components/ui/dot-background_module.css +15 -0
  213. package/dist/components/ui/dot-background_module.css.map +1 -0
  214. package/dist/components/ui/drawer.d.ts +287 -18
  215. package/dist/components/ui/drawer.d.ts.map +1 -1
  216. package/dist/components/ui/drawer.js +117 -40
  217. package/dist/components/ui/drawer.js.map +1 -1
  218. package/dist/components/ui/drawer.module.js +14 -0
  219. package/dist/components/ui/drawer.module.js.map +1 -0
  220. package/dist/components/ui/drawer_module.css +86 -0
  221. package/dist/components/ui/drawer_module.css.map +1 -0
  222. package/dist/components/ui/dropdown-menu.d.ts +414 -21
  223. package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
  224. package/dist/components/ui/dropdown-menu.js +189 -68
  225. package/dist/components/ui/dropdown-menu.js.map +1 -1
  226. package/dist/components/ui/dropdown-menu.module.js +19 -0
  227. package/dist/components/ui/dropdown-menu.module.js.map +1 -0
  228. package/dist/components/ui/dropdown-menu_module.css +114 -0
  229. package/dist/components/ui/dropdown-menu_module.css.map +1 -0
  230. package/dist/components/ui/dropdrawer.d.ts +307 -17
  231. package/dist/components/ui/dropdrawer.d.ts.map +1 -1
  232. package/dist/components/ui/dropdrawer.js +438 -166
  233. package/dist/components/ui/dropdrawer.js.map +1 -1
  234. package/dist/components/ui/dropdrawer.module.js +43 -0
  235. package/dist/components/ui/dropdrawer.module.js.map +1 -0
  236. package/dist/components/ui/dropdrawer_module.css +307 -0
  237. package/dist/components/ui/dropdrawer_module.css.map +1 -0
  238. package/dist/components/ui/empty.d.ts +129 -10
  239. package/dist/components/ui/empty.d.ts.map +1 -1
  240. package/dist/components/ui/empty.js +32 -47
  241. package/dist/components/ui/empty.js.map +1 -1
  242. package/dist/components/ui/empty.module.js +13 -0
  243. package/dist/components/ui/empty.module.js.map +1 -0
  244. package/dist/components/ui/empty_module.css +85 -0
  245. package/dist/components/ui/empty_module.css.map +1 -0
  246. package/dist/components/ui/error-boundary.js +61 -0
  247. package/dist/components/ui/error-boundary.js.map +1 -0
  248. package/dist/components/ui/error-boundary.module.js +10 -0
  249. package/dist/components/ui/error-boundary.module.js.map +1 -0
  250. package/dist/components/ui/error-boundary_module.css +41 -0
  251. package/dist/components/ui/error-boundary_module.css.map +1 -0
  252. package/dist/components/ui/field.d.ts +222 -23
  253. package/dist/components/ui/field.d.ts.map +1 -1
  254. package/dist/components/ui/field.js +76 -86
  255. package/dist/components/ui/field.js.map +1 -1
  256. package/dist/components/ui/field.module.js +24 -0
  257. package/dist/components/ui/field.module.js.map +1 -0
  258. package/dist/components/ui/field_module.css +185 -0
  259. package/dist/components/ui/field_module.css.map +1 -0
  260. package/dist/components/ui/fireworks-background.d.ts +27 -3
  261. package/dist/components/ui/fireworks-background.d.ts.map +1 -1
  262. package/dist/components/ui/fireworks-background.js +36 -35
  263. package/dist/components/ui/fireworks-background.js.map +1 -1
  264. package/dist/components/ui/fireworks-background.module.js +8 -0
  265. package/dist/components/ui/fireworks-background.module.js.map +1 -0
  266. package/dist/components/ui/fireworks-background_module.css +17 -0
  267. package/dist/components/ui/fireworks-background_module.css.map +1 -0
  268. package/dist/components/ui/flip-button.d.ts +27 -3
  269. package/dist/components/ui/flip-button.d.ts.map +1 -1
  270. package/dist/components/ui/flip-button.js +27 -17
  271. package/dist/components/ui/flip-button.js.map +1 -1
  272. package/dist/components/ui/flip-button.module.js +11 -0
  273. package/dist/components/ui/flip-button.module.js.map +1 -0
  274. package/dist/components/ui/flip-button_module.css +47 -0
  275. package/dist/components/ui/flip-button_module.css.map +1 -0
  276. package/dist/components/ui/focus-scope.js +70 -0
  277. package/dist/components/ui/focus-scope.js.map +1 -0
  278. package/dist/components/ui/focus-scope.module.js +7 -0
  279. package/dist/components/ui/focus-scope.module.js.map +1 -0
  280. package/dist/components/ui/focus-scope_module.css +6 -0
  281. package/dist/components/ui/focus-scope_module.css.map +1 -0
  282. package/dist/components/ui/form-skeleton.js +32 -0
  283. package/dist/components/ui/form-skeleton.js.map +1 -0
  284. package/dist/components/ui/form-skeleton.module.js +11 -0
  285. package/dist/components/ui/form-skeleton.module.js.map +1 -0
  286. package/dist/components/ui/form-skeleton_module.css +30 -0
  287. package/dist/components/ui/form-skeleton_module.css.map +1 -0
  288. package/dist/components/ui/form.d.ts +143 -13
  289. package/dist/components/ui/form.d.ts.map +1 -1
  290. package/dist/components/ui/form.js +55 -21
  291. package/dist/components/ui/form.js.map +1 -1
  292. package/dist/components/ui/form.module.js +10 -0
  293. package/dist/components/ui/form.module.js.map +1 -0
  294. package/dist/components/ui/form_module.css +22 -0
  295. package/dist/components/ui/form_module.css.map +1 -0
  296. package/dist/components/ui/gradient-background.d.ts +21 -3
  297. package/dist/components/ui/gradient-background.d.ts.map +1 -1
  298. package/dist/components/ui/gradient-background.js +8 -4
  299. package/dist/components/ui/gradient-background.js.map +1 -1
  300. package/dist/components/ui/gradient-background.module.js +7 -0
  301. package/dist/components/ui/gradient-background.module.js.map +1 -0
  302. package/dist/components/ui/gradient-background_module.css +9 -0
  303. package/dist/components/ui/gradient-background_module.css.map +1 -0
  304. package/dist/components/ui/gradient-text.d.ts +23 -2
  305. package/dist/components/ui/gradient-text.d.ts.map +1 -1
  306. package/dist/components/ui/gradient-text.js +8 -6
  307. package/dist/components/ui/gradient-text.js.map +1 -1
  308. package/dist/components/ui/gradient-text.module.js +9 -0
  309. package/dist/components/ui/gradient-text.module.js.map +1 -0
  310. package/dist/components/ui/gradient-text_module.css +24 -0
  311. package/dist/components/ui/gradient-text_module.css.map +1 -0
  312. package/dist/components/ui/highlight-text.d.ts +24 -2
  313. package/dist/components/ui/highlight-text.d.ts.map +1 -1
  314. package/dist/components/ui/highlight-text.js +7 -10
  315. package/dist/components/ui/highlight-text.js.map +1 -1
  316. package/dist/components/ui/highlight-text.module.js +7 -0
  317. package/dist/components/ui/highlight-text.module.js.map +1 -0
  318. package/dist/components/ui/highlight-text_module.css +16 -0
  319. package/dist/components/ui/highlight-text_module.css.map +1 -0
  320. package/dist/components/ui/hole-background.d.ts +23 -2
  321. package/dist/components/ui/hole-background.d.ts.map +1 -1
  322. package/dist/components/ui/hole-background.js +155 -118
  323. package/dist/components/ui/hole-background.js.map +1 -1
  324. package/dist/components/ui/hole-background.module.js +10 -0
  325. package/dist/components/ui/hole-background.module.js.map +1 -0
  326. package/dist/components/ui/hole-background_module.css +85 -0
  327. package/dist/components/ui/hole-background_module.css.map +1 -0
  328. package/dist/components/ui/hover-card.d.ts +85 -4
  329. package/dist/components/ui/hover-card.d.ts.map +1 -1
  330. package/dist/components/ui/hover-card.js +52 -10
  331. package/dist/components/ui/hover-card.js.map +1 -1
  332. package/dist/components/ui/hover-card.module.js +8 -0
  333. package/dist/components/ui/hover-card.module.js.map +1 -0
  334. package/dist/components/ui/hover-card_module.css +23 -0
  335. package/dist/components/ui/hover-card_module.css.map +1 -0
  336. package/dist/components/ui/input-group.d.ts +132 -13
  337. package/dist/components/ui/input-group.d.ts.map +1 -1
  338. package/dist/components/ui/input-group.js +62 -66
  339. package/dist/components/ui/input-group.js.map +1 -1
  340. package/dist/components/ui/input-group.module.js +20 -0
  341. package/dist/components/ui/input-group.module.js.map +1 -0
  342. package/dist/components/ui/input-group_module.css +150 -0
  343. package/dist/components/ui/input-group_module.css.map +1 -0
  344. package/dist/components/ui/input-otp.d.ts +110 -30
  345. package/dist/components/ui/input-otp.d.ts.map +1 -1
  346. package/dist/components/ui/input-otp.js +24 -15
  347. package/dist/components/ui/input-otp.js.map +1 -1
  348. package/dist/components/ui/input-otp.module.js +17 -0
  349. package/dist/components/ui/input-otp.module.js.map +1 -0
  350. package/dist/components/ui/input-otp_module.css +89 -0
  351. package/dist/components/ui/input-otp_module.css.map +1 -0
  352. package/dist/components/ui/input.d.ts +31 -1
  353. package/dist/components/ui/input.d.ts.map +1 -1
  354. package/dist/components/ui/input.js +21 -8
  355. package/dist/components/ui/input.js.map +1 -1
  356. package/dist/components/ui/input.module.js +7 -0
  357. package/dist/components/ui/input.module.js.map +1 -0
  358. package/dist/components/ui/input_module.css +40 -0
  359. package/dist/components/ui/input_module.css.map +1 -0
  360. package/dist/components/ui/item.d.ts +221 -19
  361. package/dist/components/ui/item.d.ts.map +1 -1
  362. package/dist/components/ui/item.js +66 -90
  363. package/dist/components/ui/item.js.map +1 -1
  364. package/dist/components/ui/item.module.js +22 -0
  365. package/dist/components/ui/item.module.js.map +1 -0
  366. package/dist/components/ui/item_module.css +143 -0
  367. package/dist/components/ui/item_module.css.map +1 -0
  368. package/dist/components/ui/kbd.d.ts +43 -2
  369. package/dist/components/ui/kbd.d.ts.map +1 -1
  370. package/dist/components/ui/kbd.js +12 -12
  371. package/dist/components/ui/kbd.js.map +1 -1
  372. package/dist/components/ui/kbd.module.js +8 -0
  373. package/dist/components/ui/kbd.module.js.map +1 -0
  374. package/dist/components/ui/kbd_module.css +35 -0
  375. package/dist/components/ui/kbd_module.css.map +1 -0
  376. package/dist/components/ui/label.d.ts +30 -3
  377. package/dist/components/ui/label.d.ts.map +1 -1
  378. package/dist/components/ui/label.js +7 -8
  379. package/dist/components/ui/label.js.map +1 -1
  380. package/dist/components/ui/label.module.js +7 -0
  381. package/dist/components/ui/label.module.js.map +1 -0
  382. package/dist/components/ui/label_module.css +17 -0
  383. package/dist/components/ui/label_module.css.map +1 -0
  384. package/dist/components/ui/list-skeleton.js +35 -0
  385. package/dist/components/ui/list-skeleton.js.map +1 -0
  386. package/dist/components/ui/list-skeleton.module.js +12 -0
  387. package/dist/components/ui/list-skeleton.module.js.map +1 -0
  388. package/dist/components/ui/list-skeleton_module.css +39 -0
  389. package/dist/components/ui/list-skeleton_module.css.map +1 -0
  390. package/dist/components/ui/loading-overlay.js +21 -0
  391. package/dist/components/ui/loading-overlay.js.map +1 -0
  392. package/dist/components/ui/loading-overlay.module.js +9 -0
  393. package/dist/components/ui/loading-overlay.module.js.map +1 -0
  394. package/dist/components/ui/loading-overlay_module.css +22 -0
  395. package/dist/components/ui/loading-overlay_module.css.map +1 -0
  396. package/dist/components/ui/menubar.d.ts +420 -22
  397. package/dist/components/ui/menubar.d.ts.map +1 -1
  398. package/dist/components/ui/menubar.js +199 -100
  399. package/dist/components/ui/menubar.js.map +1 -1
  400. package/dist/components/ui/menubar.module.js +21 -0
  401. package/dist/components/ui/menubar.module.js.map +1 -0
  402. package/dist/components/ui/menubar_module.css +145 -0
  403. package/dist/components/ui/menubar_module.css.map +1 -0
  404. package/dist/components/ui/meter.d.ts +85 -0
  405. package/dist/components/ui/meter.d.ts.map +1 -0
  406. package/dist/components/ui/meter.js +75 -0
  407. package/dist/components/ui/meter.js.map +1 -0
  408. package/dist/components/ui/meter.module.js +10 -0
  409. package/dist/components/ui/meter.module.js.map +1 -0
  410. package/dist/components/ui/meter_module.css +31 -0
  411. package/dist/components/ui/meter_module.css.map +1 -0
  412. package/dist/components/ui/navigation-menu.d.ts +233 -11
  413. package/dist/components/ui/navigation-menu.d.ts.map +1 -1
  414. package/dist/components/ui/navigation-menu.js +138 -49
  415. package/dist/components/ui/navigation-menu.js.map +1 -1
  416. package/dist/components/ui/navigation-menu.module.js +18 -0
  417. package/dist/components/ui/navigation-menu.module.js.map +1 -0
  418. package/dist/components/ui/navigation-menu_module.css +112 -0
  419. package/dist/components/ui/navigation-menu_module.css.map +1 -0
  420. package/dist/components/ui/number-field.d.ts +138 -0
  421. package/dist/components/ui/number-field.d.ts.map +1 -0
  422. package/dist/components/ui/number-field.js +111 -0
  423. package/dist/components/ui/number-field.js.map +1 -0
  424. package/dist/components/ui/number-field.module.js +15 -0
  425. package/dist/components/ui/number-field.module.js.map +1 -0
  426. package/dist/components/ui/number-field_module.css +125 -0
  427. package/dist/components/ui/number-field_module.css.map +1 -0
  428. package/dist/components/ui/pagination.d.ts +150 -24
  429. package/dist/components/ui/pagination.d.ts.map +1 -1
  430. package/dist/components/ui/pagination.js +41 -38
  431. package/dist/components/ui/pagination.js.map +1 -1
  432. package/dist/components/ui/pagination.module.js +14 -0
  433. package/dist/components/ui/pagination.module.js.map +1 -0
  434. package/dist/components/ui/pagination_module.css +66 -0
  435. package/dist/components/ui/pagination_module.css.map +1 -0
  436. package/dist/components/ui/popover.d.ts +133 -5
  437. package/dist/components/ui/popover.d.ts.map +1 -1
  438. package/dist/components/ui/popover.js +68 -14
  439. package/dist/components/ui/popover.js.map +1 -1
  440. package/dist/components/ui/popover.module.js +9 -0
  441. package/dist/components/ui/popover.module.js.map +1 -0
  442. package/dist/components/ui/popover_module.css +28 -0
  443. package/dist/components/ui/popover_module.css.map +1 -0
  444. package/dist/components/ui/progress.d.ts +31 -2
  445. package/dist/components/ui/progress.d.ts.map +1 -1
  446. package/dist/components/ui/progress.js +22 -13
  447. package/dist/components/ui/progress.js.map +1 -1
  448. package/dist/components/ui/progress.module.js +8 -0
  449. package/dist/components/ui/progress.module.js.map +1 -0
  450. package/dist/components/ui/progress_module.css +20 -0
  451. package/dist/components/ui/progress_module.css.map +1 -0
  452. package/dist/components/ui/radio-group.d.ts +42 -3
  453. package/dist/components/ui/radio-group.d.ts.map +1 -1
  454. package/dist/components/ui/radio-group.js +38 -16
  455. package/dist/components/ui/radio-group.js.map +1 -1
  456. package/dist/components/ui/radio-group.module.js +10 -0
  457. package/dist/components/ui/radio-group.module.js.map +1 -0
  458. package/dist/components/ui/radio-group_module.css +44 -0
  459. package/dist/components/ui/radio-group_module.css.map +1 -0
  460. package/dist/components/ui/resizable.d.ts +78 -5
  461. package/dist/components/ui/resizable.d.ts.map +1 -1
  462. package/dist/components/ui/resizable.js +23 -13
  463. package/dist/components/ui/resizable.js.map +1 -1
  464. package/dist/components/ui/resizable.module.js +10 -0
  465. package/dist/components/ui/resizable.module.js.map +1 -0
  466. package/dist/components/ui/resizable_module.css +70 -0
  467. package/dist/components/ui/resizable_module.css.map +1 -0
  468. package/dist/components/ui/ripple-button.d.ts +23 -2
  469. package/dist/components/ui/ripple-button.d.ts.map +1 -1
  470. package/dist/components/ui/ripple-button.js +26 -11
  471. package/dist/components/ui/ripple-button.js.map +1 -1
  472. package/dist/components/ui/ripple-button.module.js +9 -0
  473. package/dist/components/ui/ripple-button.module.js.map +1 -0
  474. package/dist/components/ui/ripple-button_module.css +38 -0
  475. package/dist/components/ui/ripple-button_module.css.map +1 -0
  476. package/dist/components/ui/scratcher.d.ts +26 -3
  477. package/dist/components/ui/scratcher.d.ts.map +1 -1
  478. package/dist/components/ui/scratcher.js +89 -90
  479. package/dist/components/ui/scratcher.js.map +1 -1
  480. package/dist/components/ui/scratcher.module.js +8 -0
  481. package/dist/components/ui/scratcher.module.js.map +1 -0
  482. package/dist/components/ui/scratcher_module.css +13 -0
  483. package/dist/components/ui/scratcher_module.css.map +1 -0
  484. package/dist/components/ui/scroll-area.d.ts +44 -3
  485. package/dist/components/ui/scroll-area.d.ts.map +1 -1
  486. package/dist/components/ui/scroll-area.js +44 -19
  487. package/dist/components/ui/scroll-area.js.map +1 -1
  488. package/dist/components/ui/scroll-area.module.js +14 -0
  489. package/dist/components/ui/scroll-area.module.js.map +1 -0
  490. package/dist/components/ui/scroll-area_module.css +51 -0
  491. package/dist/components/ui/scroll-area_module.css.map +1 -0
  492. package/dist/components/ui/select.d.ts +269 -11
  493. package/dist/components/ui/select.d.ts.map +1 -1
  494. package/dist/components/ui/select.js +152 -67
  495. package/dist/components/ui/select.js.map +1 -1
  496. package/dist/components/ui/select.module.js +20 -0
  497. package/dist/components/ui/select.module.js.map +1 -0
  498. package/dist/components/ui/select_module.css +134 -0
  499. package/dist/components/ui/select_module.css.map +1 -0
  500. package/dist/components/ui/separator.d.ts +33 -2
  501. package/dist/components/ui/separator.d.ts.map +1 -1
  502. package/dist/components/ui/separator.js +20 -9
  503. package/dist/components/ui/separator.js.map +1 -1
  504. package/dist/components/ui/separator.module.js +9 -0
  505. package/dist/components/ui/separator.module.js.map +1 -0
  506. package/dist/components/ui/separator_module.css +17 -0
  507. package/dist/components/ui/separator_module.css.map +1 -0
  508. package/dist/components/ui/sheet.d.ts +297 -23
  509. package/dist/components/ui/sheet.d.ts.map +1 -1
  510. package/dist/components/ui/sheet.js +121 -63
  511. package/dist/components/ui/sheet.js.map +1 -1
  512. package/dist/components/ui/sheet.module.js +18 -0
  513. package/dist/components/ui/sheet.module.js.map +1 -0
  514. package/dist/components/ui/sheet_module.css +136 -0
  515. package/dist/components/ui/sheet_module.css.map +1 -0
  516. package/dist/components/ui/sidebar.d.ts +491 -23
  517. package/dist/components/ui/sidebar.d.ts.map +1 -1
  518. package/dist/components/ui/sidebar.js +214 -143
  519. package/dist/components/ui/sidebar.js.map +1 -1
  520. package/dist/components/ui/sidebar.module.js +50 -0
  521. package/dist/components/ui/sidebar.module.js.map +1 -0
  522. package/dist/components/ui/sidebar_module.css +569 -0
  523. package/dist/components/ui/sidebar_module.css.map +1 -0
  524. package/dist/components/ui/skeleton.d.ts +30 -1
  525. package/dist/components/ui/skeleton.d.ts.map +1 -1
  526. package/dist/components/ui/skeleton.js +7 -7
  527. package/dist/components/ui/skeleton.js.map +1 -1
  528. package/dist/components/ui/skeleton.module.js +8 -0
  529. package/dist/components/ui/skeleton.module.js.map +1 -0
  530. package/dist/components/ui/skeleton_module.css +18 -0
  531. package/dist/components/ui/skeleton_module.css.map +1 -0
  532. package/dist/components/ui/slider.d.ts +48 -2
  533. package/dist/components/ui/slider.d.ts.map +1 -1
  534. package/dist/components/ui/slider.js +44 -17
  535. package/dist/components/ui/slider.js.map +1 -1
  536. package/dist/components/ui/slider.module.js +11 -0
  537. package/dist/components/ui/slider.module.js.map +1 -0
  538. package/dist/components/ui/slider_module.css +55 -0
  539. package/dist/components/ui/slider_module.css.map +1 -0
  540. package/dist/components/ui/sonner.d.ts +138 -4
  541. package/dist/components/ui/sonner.d.ts.map +1 -1
  542. package/dist/components/ui/sonner.js +450 -17
  543. package/dist/components/ui/sonner.js.map +1 -1
  544. package/dist/components/ui/sonner.module.js +34 -0
  545. package/dist/components/ui/sonner.module.js.map +1 -0
  546. package/dist/components/ui/sonner_module.css +233 -0
  547. package/dist/components/ui/sonner_module.css.map +1 -0
  548. package/dist/components/ui/spinner.d.ts +20 -1
  549. package/dist/components/ui/spinner.d.ts.map +1 -1
  550. package/dist/components/ui/spinner.js +29 -11
  551. package/dist/components/ui/spinner.js.map +1 -1
  552. package/dist/components/ui/spinner.module.js +10 -0
  553. package/dist/components/ui/spinner.module.js.map +1 -0
  554. package/dist/components/ui/spinner_module.css +28 -0
  555. package/dist/components/ui/spinner_module.css.map +1 -0
  556. package/dist/components/ui/stepper.d.ts +48 -0
  557. package/dist/components/ui/stepper.d.ts.map +1 -0
  558. package/dist/components/ui/stepper.js +41 -0
  559. package/dist/components/ui/stepper.js.map +1 -0
  560. package/dist/components/ui/stepper.module.js +12 -0
  561. package/dist/components/ui/stepper.module.js.map +1 -0
  562. package/dist/components/ui/stepper_module.css +75 -0
  563. package/dist/components/ui/stepper_module.css.map +1 -0
  564. package/dist/components/ui/switch.d.ts +29 -2
  565. package/dist/components/ui/switch.d.ts.map +1 -1
  566. package/dist/components/ui/switch.js +21 -9
  567. package/dist/components/ui/switch.js.map +1 -1
  568. package/dist/components/ui/switch.module.js +8 -0
  569. package/dist/components/ui/switch.module.js.map +1 -0
  570. package/dist/components/ui/switch_module.css +45 -0
  571. package/dist/components/ui/switch_module.css.map +1 -0
  572. package/dist/components/ui/table-skeleton.js +34 -0
  573. package/dist/components/ui/table-skeleton.js.map +1 -0
  574. package/dist/components/ui/table-skeleton.module.js +11 -0
  575. package/dist/components/ui/table-skeleton.module.js.map +1 -0
  576. package/dist/components/ui/table-skeleton_module.css +32 -0
  577. package/dist/components/ui/table-skeleton_module.css.map +1 -0
  578. package/dist/components/ui/table.d.ts +170 -8
  579. package/dist/components/ui/table.d.ts.map +1 -1
  580. package/dist/components/ui/table.js +17 -17
  581. package/dist/components/ui/table.js.map +1 -1
  582. package/dist/components/ui/table.module.js +15 -0
  583. package/dist/components/ui/table.module.js.map +1 -0
  584. package/dist/components/ui/table_module.css +71 -0
  585. package/dist/components/ui/table_module.css.map +1 -0
  586. package/dist/components/ui/tabs.d.ts +114 -5
  587. package/dist/components/ui/tabs.d.ts.map +1 -1
  588. package/dist/components/ui/tabs.js +71 -20
  589. package/dist/components/ui/tabs.js.map +1 -1
  590. package/dist/components/ui/tabs.module.js +10 -0
  591. package/dist/components/ui/tabs.module.js.map +1 -0
  592. package/dist/components/ui/tabs_module.css +89 -0
  593. package/dist/components/ui/tabs_module.css.map +1 -0
  594. package/dist/components/ui/textarea.d.ts +24 -1
  595. package/dist/components/ui/textarea.d.ts.map +1 -1
  596. package/dist/components/ui/textarea.js +2 -2
  597. package/dist/components/ui/textarea.js.map +1 -1
  598. package/dist/components/ui/textarea.module.js +7 -0
  599. package/dist/components/ui/textarea.module.js.map +1 -0
  600. package/dist/components/ui/textarea_module.css +33 -0
  601. package/dist/components/ui/textarea_module.css.map +1 -0
  602. package/dist/components/ui/timeline.d.ts +111 -0
  603. package/dist/components/ui/timeline.d.ts.map +1 -0
  604. package/dist/components/ui/timeline.js +34 -0
  605. package/dist/components/ui/timeline.js.map +1 -0
  606. package/dist/components/ui/timeline.module.js +10 -0
  607. package/dist/components/ui/timeline.module.js.map +1 -0
  608. package/dist/components/ui/timeline_module.css +47 -0
  609. package/dist/components/ui/timeline_module.css.map +1 -0
  610. package/dist/components/ui/toggle-group.d.ts +75 -10
  611. package/dist/components/ui/toggle-group.d.ts.map +1 -1
  612. package/dist/components/ui/toggle-group.js +32 -21
  613. package/dist/components/ui/toggle-group.js.map +1 -1
  614. package/dist/components/ui/toggle-group.module.js +7 -0
  615. package/dist/components/ui/toggle-group.module.js.map +1 -0
  616. package/dist/components/ui/toggle-group_module.css +8 -0
  617. package/dist/components/ui/toggle-group_module.css.map +1 -0
  618. package/dist/components/ui/toggle.d.ts +60 -11
  619. package/dist/components/ui/toggle.d.ts.map +1 -1
  620. package/dist/components/ui/toggle.js +29 -29
  621. package/dist/components/ui/toggle.js.map +1 -1
  622. package/dist/components/ui/toggle.module.js +12 -0
  623. package/dist/components/ui/toggle.module.js.map +1 -0
  624. package/dist/components/ui/toggle_module.css +62 -0
  625. package/dist/components/ui/toggle_module.css.map +1 -0
  626. package/dist/components/ui/toolbar.d.ts +107 -0
  627. package/dist/components/ui/toolbar.d.ts.map +1 -0
  628. package/dist/components/ui/toolbar.js +90 -0
  629. package/dist/components/ui/toolbar.js.map +1 -0
  630. package/dist/components/ui/toolbar.module.js +12 -0
  631. package/dist/components/ui/toolbar.module.js.map +1 -0
  632. package/dist/components/ui/toolbar_module.css +115 -0
  633. package/dist/components/ui/toolbar_module.css.map +1 -0
  634. package/dist/components/ui/tooltip.d.ts +119 -5
  635. package/dist/components/ui/tooltip.d.ts.map +1 -1
  636. package/dist/components/ui/tooltip.js +48 -13
  637. package/dist/components/ui/tooltip.js.map +1 -1
  638. package/dist/components/ui/tooltip.module.js +9 -0
  639. package/dist/components/ui/tooltip.module.js.map +1 -0
  640. package/dist/components/ui/tooltip_module.css +35 -0
  641. package/dist/components/ui/tooltip_module.css.map +1 -0
  642. package/dist/components/ui/typewriter.d.ts +48 -13
  643. package/dist/components/ui/typewriter.d.ts.map +1 -1
  644. package/dist/components/ui/typewriter.js +46 -49
  645. package/dist/components/ui/typewriter.js.map +1 -1
  646. package/dist/components/ui/typewriter.module.js +16 -0
  647. package/dist/components/ui/typewriter.module.js.map +1 -0
  648. package/dist/components/ui/typewriter_module.css +102 -0
  649. package/dist/components/ui/typewriter_module.css.map +1 -0
  650. package/dist/components/ui/visually-hidden.d.ts +38 -0
  651. package/dist/components/ui/visually-hidden.d.ts.map +1 -0
  652. package/dist/components/ui/visually-hidden.js +13 -0
  653. package/dist/components/ui/visually-hidden.js.map +1 -0
  654. package/dist/components/ui/visually-hidden.module.js +7 -0
  655. package/dist/components/ui/visually-hidden.module.js.map +1 -0
  656. package/dist/components/ui/visually-hidden_module.css +14 -0
  657. package/dist/components/ui/visually-hidden_module.css.map +1 -0
  658. package/dist/hooks/useAnnounce.js +46 -0
  659. package/dist/hooks/useAnnounce.js.map +1 -0
  660. package/dist/hooks/useBreakpoint.d.ts +17 -0
  661. package/dist/hooks/useBreakpoint.d.ts.map +1 -0
  662. package/dist/hooks/useBreakpoint.js +16 -0
  663. package/dist/hooks/useBreakpoint.js.map +1 -0
  664. package/dist/hooks/useClipboard.d.ts +77 -0
  665. package/dist/hooks/useClipboard.d.ts.map +1 -0
  666. package/dist/hooks/useClipboard.js +42 -0
  667. package/dist/hooks/useClipboard.js.map +1 -0
  668. package/dist/hooks/useColorScheme.d.ts +14 -0
  669. package/dist/hooks/useColorScheme.d.ts.map +1 -0
  670. package/dist/hooks/useColorScheme.js +9 -0
  671. package/dist/hooks/useColorScheme.js.map +1 -0
  672. package/dist/hooks/useControllableState.d.ts +54 -0
  673. package/dist/hooks/useControllableState.d.ts.map +1 -0
  674. package/dist/hooks/useControllableState.js +29 -0
  675. package/dist/hooks/useControllableState.js.map +1 -0
  676. package/dist/hooks/useDebounce.d.ts +33 -0
  677. package/dist/hooks/useDebounce.d.ts.map +1 -0
  678. package/dist/hooks/useDebounce.js +20 -0
  679. package/dist/hooks/useDebounce.js.map +1 -0
  680. package/dist/hooks/useEventCallback.d.ts +34 -0
  681. package/dist/hooks/useEventCallback.d.ts.map +1 -0
  682. package/dist/hooks/useEventCallback.js +12 -0
  683. package/dist/hooks/useEventCallback.js.map +1 -0
  684. package/dist/hooks/useFocusManager.js +51 -0
  685. package/dist/hooks/useFocusManager.js.map +1 -0
  686. package/dist/hooks/useFocusVisible.d.ts +50 -0
  687. package/dist/hooks/useFocusVisible.d.ts.map +1 -0
  688. package/dist/hooks/useFocusVisible.js +35 -0
  689. package/dist/hooks/useFocusVisible.js.map +1 -0
  690. package/dist/hooks/useId.d.ts +30 -0
  691. package/dist/hooks/useId.d.ts.map +1 -0
  692. package/dist/hooks/useId.js +9 -0
  693. package/dist/hooks/useId.js.map +1 -0
  694. package/dist/hooks/useIntersectionObserver.d.ts +51 -0
  695. package/dist/hooks/useIntersectionObserver.d.ts.map +1 -0
  696. package/dist/hooks/useIntersectionObserver.js +25 -0
  697. package/dist/hooks/useIntersectionObserver.js.map +1 -0
  698. package/dist/hooks/useInterval.d.ts +55 -0
  699. package/dist/hooks/useInterval.d.ts.map +1 -0
  700. package/dist/hooks/useInterval.js +24 -0
  701. package/dist/hooks/useInterval.js.map +1 -0
  702. package/dist/hooks/useIsMobile.d.ts +5 -11
  703. package/dist/hooks/useIsMobile.d.ts.map +1 -1
  704. package/dist/hooks/useIsMobile.js +2 -13
  705. package/dist/hooks/useIsMobile.js.map +1 -1
  706. package/dist/hooks/useLocalStorage.d.ts +43 -0
  707. package/dist/hooks/useLocalStorage.d.ts.map +1 -0
  708. package/dist/hooks/useLocalStorage.js +53 -0
  709. package/dist/hooks/useLocalStorage.js.map +1 -0
  710. package/dist/hooks/useMediaQuery.d.ts +14 -0
  711. package/dist/hooks/useMediaQuery.d.ts.map +1 -0
  712. package/dist/hooks/useMediaQuery.js +20 -0
  713. package/dist/hooks/useMediaQuery.js.map +1 -0
  714. package/dist/hooks/useMergedRefs.d.ts +27 -0
  715. package/dist/hooks/useMergedRefs.d.ts.map +1 -0
  716. package/dist/hooks/useMergedRefs.js +11 -0
  717. package/dist/hooks/useMergedRefs.js.map +1 -0
  718. package/dist/hooks/useOnClickOutside.d.ts +32 -0
  719. package/dist/hooks/useOnClickOutside.d.ts.map +1 -0
  720. package/dist/hooks/useOnClickOutside.js +23 -0
  721. package/dist/hooks/useOnClickOutside.js.map +1 -0
  722. package/dist/hooks/usePrefersContrast.d.ts +19 -0
  723. package/dist/hooks/usePrefersContrast.d.ts.map +1 -0
  724. package/dist/hooks/usePrefersContrast.js +8 -0
  725. package/dist/hooks/usePrefersContrast.js.map +1 -0
  726. package/dist/hooks/usePrevious.d.ts +33 -0
  727. package/dist/hooks/usePrevious.d.ts.map +1 -0
  728. package/dist/hooks/usePrevious.js +14 -0
  729. package/dist/hooks/usePrevious.js.map +1 -0
  730. package/dist/hooks/useReducedMotion.d.ts +19 -0
  731. package/dist/hooks/useReducedMotion.d.ts.map +1 -0
  732. package/dist/hooks/useReducedMotion.js +2 -0
  733. package/dist/hooks/useThrottle.d.ts +37 -0
  734. package/dist/hooks/useThrottle.d.ts.map +1 -0
  735. package/dist/hooks/useThrottle.js +34 -0
  736. package/dist/hooks/useThrottle.js.map +1 -0
  737. package/dist/hooks/useTimeout.d.ts +28 -0
  738. package/dist/hooks/useTimeout.d.ts.map +1 -0
  739. package/dist/hooks/useTimeout.js +24 -0
  740. package/dist/hooks/useTimeout.js.map +1 -0
  741. package/dist/index.css +104 -5363
  742. package/dist/index.css.map +1 -1
  743. package/dist/index.d.ts +52 -8
  744. package/dist/index.d.ts.map +1 -1
  745. package/dist/index.js +103 -72
  746. package/dist/lib/utilities.d.ts +5 -5
  747. package/dist/lib/utilities.d.ts.map +1 -1
  748. package/dist/lib/utilities.js +1 -2
  749. package/dist/lib/utilities.js.map +1 -1
  750. package/dist/motion/Collapse.js +19 -0
  751. package/dist/motion/Collapse.js.map +1 -0
  752. package/dist/motion/Collapse.module.js +8 -0
  753. package/dist/motion/Collapse.module.js.map +1 -0
  754. package/dist/motion/Collapse_module.css +25 -0
  755. package/dist/motion/Collapse_module.css.map +1 -0
  756. package/dist/motion/Presence.js +14 -0
  757. package/dist/motion/Presence.js.map +1 -0
  758. package/dist/motion/index.js +5 -0
  759. package/dist/motion/presets.js +117 -0
  760. package/dist/motion/presets.js.map +1 -0
  761. package/dist/motion/tokens.js +41 -0
  762. package/dist/motion/tokens.js.map +1 -0
  763. package/dist/rslib-runtime.js +39 -0
  764. package/dist/rslib-runtime.js.map +1 -0
  765. package/package.json +233 -67
  766. package/src/components/ui/accordion.module.css +70 -0
  767. package/src/components/ui/accordion.tsx +278 -44
  768. package/src/components/ui/alert-dialog.module.css +87 -0
  769. package/src/components/ui/alert-dialog.tsx +481 -99
  770. package/src/components/ui/alert.module.css +57 -0
  771. package/src/components/ui/alert.tsx +136 -43
  772. package/src/components/ui/aspect-ratio.module.css +7 -0
  773. package/src/components/ui/aspect-ratio.tsx +38 -3
  774. package/src/components/ui/async-boundary.tsx +56 -0
  775. package/src/components/ui/avatar.module.css +31 -0
  776. package/src/components/ui/avatar.tsx +149 -36
  777. package/src/components/ui/background-beams.module.css +20 -0
  778. package/src/components/ui/background-beams.tsx +173 -134
  779. package/src/components/ui/badge.module.css +60 -0
  780. package/src/components/ui/badge.tsx +100 -32
  781. package/src/components/ui/breadcrumb.module.css +87 -0
  782. package/src/components/ui/breadcrumb.tsx +256 -74
  783. package/src/components/ui/bubble-background.module.css +97 -0
  784. package/src/components/ui/bubble-background.tsx +92 -52
  785. package/src/components/ui/button-group.module.css +76 -0
  786. package/src/components/ui/button-group.tsx +135 -46
  787. package/src/components/ui/button.module.css +138 -0
  788. package/src/components/ui/button.tsx +159 -41
  789. package/src/components/ui/calendar.module.css +250 -0
  790. package/src/components/ui/calendar.tsx +135 -111
  791. package/src/components/ui/card-skeleton.module.css +50 -0
  792. package/src/components/ui/card-skeleton.tsx +69 -0
  793. package/src/components/ui/card.module.css +41 -0
  794. package/src/components/ui/card.tsx +175 -22
  795. package/src/components/ui/carousel.module.css +80 -0
  796. package/src/components/ui/carousel.tsx +186 -43
  797. package/src/components/ui/chart.module.css +164 -0
  798. package/src/components/ui/chart.tsx +447 -102
  799. package/src/components/ui/checkbox-group.module.css +8 -0
  800. package/src/components/ui/checkbox-group.tsx +53 -0
  801. package/src/components/ui/checkbox.module.css +43 -0
  802. package/src/components/ui/checkbox.tsx +81 -19
  803. package/src/components/ui/collapsible.module.css +24 -0
  804. package/src/components/ui/collapsible.tsx +140 -3
  805. package/src/components/ui/combobox.module.css +158 -0
  806. package/src/components/ui/combobox.tsx +569 -0
  807. package/src/components/ui/command.module.css +193 -0
  808. package/src/components/ui/command.tsx +893 -114
  809. package/src/components/ui/context-menu.module.css +113 -0
  810. package/src/components/ui/context-menu.tsx +619 -157
  811. package/src/components/ui/copy-button.module.css +34 -0
  812. package/src/components/ui/copy-button.tsx +116 -0
  813. package/src/components/ui/counting-number.module.css +4 -0
  814. package/src/components/ui/counting-number.tsx +69 -31
  815. package/src/components/ui/dialog.module.css +113 -0
  816. package/src/components/ui/dialog.tsx +427 -81
  817. package/src/components/ui/dot-background.module.css +12 -0
  818. package/src/components/ui/dot-background.tsx +134 -126
  819. package/src/components/ui/drawer.module.css +85 -0
  820. package/src/components/ui/drawer.tsx +410 -80
  821. package/src/components/ui/dropdown-menu.module.css +113 -0
  822. package/src/components/ui/dropdown-menu.tsx +619 -159
  823. package/src/components/ui/dropdrawer.module.css +322 -0
  824. package/src/components/ui/dropdrawer.tsx +870 -400
  825. package/src/components/ui/empty.module.css +84 -0
  826. package/src/components/ui/empty.tsx +176 -52
  827. package/src/components/ui/error-boundary.module.css +36 -0
  828. package/src/components/ui/error-boundary.tsx +127 -0
  829. package/src/components/ui/field.module.css +179 -0
  830. package/src/components/ui/field.tsx +345 -139
  831. package/src/components/ui/fireworks-background.module.css +13 -0
  832. package/src/components/ui/fireworks-background.tsx +89 -51
  833. package/src/components/ui/flip-button.module.css +44 -0
  834. package/src/components/ui/flip-button.tsx +59 -28
  835. package/src/components/ui/focus-scope.module.css +3 -0
  836. package/src/components/ui/focus-scope.tsx +160 -0
  837. package/src/components/ui/form-skeleton.module.css +28 -0
  838. package/src/components/ui/form-skeleton.tsx +62 -0
  839. package/src/components/ui/form.module.css +20 -0
  840. package/src/components/ui/form.tsx +244 -33
  841. package/src/components/ui/gradient-background.module.css +6 -0
  842. package/src/components/ui/gradient-background.tsx +27 -5
  843. package/src/components/ui/gradient-text.module.css +23 -0
  844. package/src/components/ui/gradient-text.tsx +36 -9
  845. package/src/components/ui/highlight-text.module.css +14 -0
  846. package/src/components/ui/highlight-text.tsx +37 -15
  847. package/src/components/ui/hole-background.module.css +84 -0
  848. package/src/components/ui/hole-background.tsx +290 -162
  849. package/src/components/ui/hover-card.module.css +21 -0
  850. package/src/components/ui/hover-card.tsx +142 -21
  851. package/src/components/ui/input-group.module.css +148 -0
  852. package/src/components/ui/input-group.tsx +222 -98
  853. package/src/components/ui/input-otp.module.css +92 -0
  854. package/src/components/ui/input-otp.tsx +159 -33
  855. package/src/components/ui/input.module.css +37 -0
  856. package/src/components/ui/input.tsx +56 -14
  857. package/src/components/ui/item.module.css +143 -0
  858. package/src/components/ui/item.tsx +331 -104
  859. package/src/components/ui/kbd.module.css +31 -0
  860. package/src/components/ui/kbd.tsx +60 -17
  861. package/src/components/ui/label.module.css +13 -0
  862. package/src/components/ui/label.tsx +38 -14
  863. package/src/components/ui/list-skeleton.module.css +35 -0
  864. package/src/components/ui/list-skeleton.tsx +70 -0
  865. package/src/components/ui/loading-overlay.module.css +19 -0
  866. package/src/components/ui/loading-overlay.tsx +72 -0
  867. package/src/components/ui/menubar.module.css +144 -0
  868. package/src/components/ui/menubar.tsx +604 -192
  869. package/src/components/ui/meter.module.css +32 -0
  870. package/src/components/ui/meter.tsx +169 -0
  871. package/src/components/ui/navigation-menu.module.css +110 -0
  872. package/src/components/ui/navigation-menu.tsx +381 -99
  873. package/src/components/ui/number-field.module.css +126 -0
  874. package/src/components/ui/number-field.tsx +247 -0
  875. package/src/components/ui/pagination.module.css +64 -0
  876. package/src/components/ui/pagination.tsx +250 -72
  877. package/src/components/ui/popover.module.css +26 -0
  878. package/src/components/ui/popover.tsx +207 -25
  879. package/src/components/ui/progress.module.css +15 -0
  880. package/src/components/ui/progress.tsx +54 -16
  881. package/src/components/ui/radio-group.module.css +41 -0
  882. package/src/components/ui/radio-group.tsx +88 -34
  883. package/src/components/ui/resizable.module.css +67 -0
  884. package/src/components/ui/resizable.tsx +106 -26
  885. package/src/components/ui/ripple-button.module.css +35 -0
  886. package/src/components/ui/ripple-button.tsx +55 -21
  887. package/src/components/ui/scratcher.module.css +9 -0
  888. package/src/components/ui/scratcher.tsx +134 -108
  889. package/src/components/ui/scroll-area.module.css +47 -0
  890. package/src/components/ui/scroll-area.tsx +93 -34
  891. package/src/components/ui/select.module.css +131 -0
  892. package/src/components/ui/select.tsx +435 -124
  893. package/src/components/ui/separator.module.css +14 -0
  894. package/src/components/ui/separator.tsx +60 -18
  895. package/src/components/ui/sheet.module.css +138 -0
  896. package/src/components/ui/sheet.tsx +427 -95
  897. package/src/components/ui/sidebar.module.css +594 -0
  898. package/src/components/ui/sidebar.tsx +900 -425
  899. package/src/components/ui/skeleton.module.css +14 -0
  900. package/src/components/ui/skeleton.tsx +39 -9
  901. package/src/components/ui/slider.module.css +48 -0
  902. package/src/components/ui/slider.tsx +89 -16
  903. package/src/components/ui/sonner.module.css +246 -0
  904. package/src/components/ui/sonner.tsx +777 -25
  905. package/src/components/ui/spinner.module.css +25 -0
  906. package/src/components/ui/spinner.tsx +51 -12
  907. package/src/components/ui/stepper.module.css +72 -0
  908. package/src/components/ui/stepper.tsx +95 -0
  909. package/src/components/ui/switch.module.css +42 -0
  910. package/src/components/ui/switch.tsx +53 -20
  911. package/src/components/ui/table-skeleton.module.css +29 -0
  912. package/src/components/ui/table-skeleton.tsx +79 -0
  913. package/src/components/ui/table.module.css +66 -0
  914. package/src/components/ui/table.tsx +235 -61
  915. package/src/components/ui/tabs.module.css +89 -0
  916. package/src/components/ui/tabs.tsx +192 -45
  917. package/src/components/ui/textarea.module.css +30 -0
  918. package/src/components/ui/textarea.tsx +30 -10
  919. package/src/components/ui/timeline.module.css +43 -0
  920. package/src/components/ui/timeline.tsx +153 -0
  921. package/src/components/ui/toggle-group.module.css +5 -0
  922. package/src/components/ui/toggle-group.tsx +115 -32
  923. package/src/components/ui/toggle.module.css +57 -0
  924. package/src/components/ui/toggle.tsx +89 -33
  925. package/src/components/ui/toolbar.module.css +112 -0
  926. package/src/components/ui/toolbar.tsx +209 -0
  927. package/src/components/ui/tooltip.module.css +39 -0
  928. package/src/components/ui/tooltip.tsx +181 -24
  929. package/src/components/ui/typewriter.module.css +101 -0
  930. package/src/components/ui/typewriter.tsx +130 -128
  931. package/src/components/ui/visually-hidden.module.css +11 -0
  932. package/src/components/ui/visually-hidden.tsx +50 -0
  933. package/src/css-modules.d.ts +9 -0
  934. package/src/hooks/useAnnounce.tsx +73 -0
  935. package/src/hooks/useBreakpoint.tsx +41 -0
  936. package/src/hooks/useClipboard.tsx +137 -0
  937. package/src/hooks/useColorScheme.tsx +23 -0
  938. package/src/hooks/useControllableState.tsx +81 -0
  939. package/src/hooks/useDebounce.tsx +50 -0
  940. package/src/hooks/useEventCallback.tsx +47 -0
  941. package/src/hooks/useFocusManager.tsx +89 -0
  942. package/src/hooks/useFocusVisible.tsx +88 -0
  943. package/src/hooks/useId.tsx +36 -0
  944. package/src/hooks/useIntersectionObserver.tsx +81 -0
  945. package/src/hooks/useInterval.tsx +80 -0
  946. package/src/hooks/useIsMobile.tsx +7 -28
  947. package/src/hooks/useLocalStorage.tsx +111 -0
  948. package/src/hooks/useMediaQuery.tsx +34 -0
  949. package/src/hooks/useMergedRefs.tsx +48 -0
  950. package/src/hooks/useOnClickOutside.tsx +55 -0
  951. package/src/hooks/usePrefersContrast.tsx +24 -0
  952. package/src/hooks/usePrevious.tsx +44 -0
  953. package/src/hooks/useReducedMotion.tsx +20 -0
  954. package/src/hooks/useThrottle.tsx +78 -0
  955. package/src/hooks/useTimeout.tsx +51 -0
  956. package/src/index.css +127 -65
  957. package/src/index.ts +219 -18
  958. package/src/lib/utilities.ts +8 -7
  959. package/src/motion/Collapse.module.css +22 -0
  960. package/src/motion/Collapse.tsx +52 -0
  961. package/src/motion/Presence.tsx +44 -0
  962. package/src/motion/index.ts +13 -0
  963. package/src/motion/presets.ts +77 -0
  964. package/src/motion/tokens.ts +37 -0
  965. package/src/stories/DesignPrinciples.mdx +48 -0
  966. package/src/stories/GettingStarted.mdx +92 -0
  967. package/src/stories/Welcome.mdx +44 -0
  968. package/src/hooks/useIsMobile.test.tsx +0 -96
  969. package/src/hooks/useWindowSize.test.tsx +0 -57
  970. package/src/index.test.ts +0 -537
  971. package/src/lib/color-conversion-utilities.test.ts +0 -225
  972. package/src/lib/utilities.test.ts +0 -37
@@ -0,0 +1,16 @@
1
+ "use client";
2
+ import { useMediaQuery } from "./useMediaQuery.js";
3
+ function useBreakpoint() {
4
+ const is2xl = useMediaQuery("(min-width: 1536px)");
5
+ const isXl = useMediaQuery("(min-width: 1280px)");
6
+ const isLg = useMediaQuery("(min-width: 1024px)");
7
+ const isMd = useMediaQuery("(min-width: 768px)");
8
+ if (is2xl) return "2xl";
9
+ if (isXl) return "xl";
10
+ if (isLg) return "lg";
11
+ if (isMd) return "md";
12
+ return "sm";
13
+ }
14
+ export { useBreakpoint };
15
+
16
+ //# sourceMappingURL=useBreakpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/useBreakpoint.js","sources":["../../src/hooks/useBreakpoint.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {useMediaQuery} from \"./useMediaQuery\";\r\n\r\nconst BREAKPOINTS = [\r\n [\"2xl\", \"(min-width: 1536px)\"],\r\n [\"xl\", \"(min-width: 1280px)\"],\r\n [\"lg\", \"(min-width: 1024px)\"],\r\n [\"md\", \"(min-width: 768px)\"],\r\n [\"sm\", \"(min-width: 640px)\"],\r\n] as const;\r\n\r\ntype Breakpoint = (typeof BREAKPOINTS)[number][0];\r\n\r\n/**\r\n * Returns the name of the current CSS breakpoint based on viewport width.\r\n * Evaluates breakpoints from largest to smallest and returns the first match.\r\n *\r\n * @returns The active breakpoint name: `\"sm\"`, `\"md\"`, `\"lg\"`, `\"xl\"`, or `\"2xl\"`.\r\n * Returns `\"sm\"` when no breakpoint matches (viewport narrower than 640px).\r\n *\r\n * @example\r\n * ```tsx\r\n * const bp = useBreakpoint(); // \"lg\" on a 1200px viewport\r\n * ```\r\n */\r\nexport function useBreakpoint(): Breakpoint {\r\n const is2xl = useMediaQuery(\"(min-width: 1536px)\");\r\n const isXl = useMediaQuery(\"(min-width: 1280px)\");\r\n const isLg = useMediaQuery(\"(min-width: 1024px)\");\r\n const isMd = useMediaQuery(\"(min-width: 768px)\");\r\n\r\n if (is2xl) return \"2xl\";\r\n if (isXl) return \"xl\";\r\n if (isLg) return \"lg\";\r\n if (isMd) return \"md\";\r\n\r\n return \"sm\";\r\n}\r\n\r\nexport type {Breakpoint};\r\n"],"names":["useBreakpoint","is2xl","useMediaQuery","isXl","isLg","isMd"],"mappings":";;AA0BO,SAASA;IACd,MAAMC,QAAQC,cAAc;IAC5B,MAAMC,OAAOD,cAAc;IAC3B,MAAME,OAAOF,cAAc;IAC3B,MAAMG,OAAOH,cAAc;IAE3B,IAAID,OAAO,OAAO;IAClB,IAAIE,MAAM,OAAO;IACjB,IAAIC,MAAM,OAAO;IACjB,IAAIC,MAAM,OAAO;IAEjB,OAAO;AACT"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Options for the `useClipboard` hook.
3
+ */
4
+ export interface UseClipboardOptions {
5
+ /**
6
+ * The duration in milliseconds after which the `copied` state resets to `false`.
7
+ *
8
+ * @defaultValue 2000
9
+ */
10
+ timeout?: number;
11
+ }
12
+ /**
13
+ * Return type for the `useClipboard` hook.
14
+ */
15
+ export interface UseClipboardReturn {
16
+ /**
17
+ * Whether the text was successfully copied to the clipboard.
18
+ */
19
+ copied: boolean;
20
+ /**
21
+ * Copies the provided text to the clipboard.
22
+ *
23
+ * @param text - The text to copy.
24
+ * @returns A promise that resolves when the copy operation completes.
25
+ */
26
+ copy: (text: string) => Promise<void>;
27
+ /**
28
+ * The error that occurred during the copy operation, or `null` if no error occurred.
29
+ */
30
+ error: Error | null;
31
+ }
32
+ /**
33
+ * Copies text to the clipboard with success/error state management.
34
+ *
35
+ * @remarks
36
+ * This hook provides a simple interface for copying text to the clipboard using
37
+ * the Clipboard API. It manages the `copied` state that automatically resets
38
+ * after a configurable timeout, and handles errors gracefully when the Clipboard
39
+ * API is unavailable or the operation fails.
40
+ *
41
+ * The hook is SSR-safe and will handle the case where `navigator.clipboard` is
42
+ * not available (e.g., in non-secure contexts or older browsers).
43
+ *
44
+ * @param options - Configuration options for the hook.
45
+ * @returns An object containing the copied state, copy function, and any error.
46
+ *
47
+ * @example
48
+ * ```tsx
49
+ * function CopyButton({textToCopy}: {textToCopy: string}) {
50
+ * const {copied, copy, error} = useClipboard({timeout: 3000});
51
+ *
52
+ * return (
53
+ * <div>
54
+ * <button onClick={() => copy(textToCopy)}>
55
+ * {copied ? "Copied!" : "Copy to clipboard"}
56
+ * </button>
57
+ * {error && <span>Failed to copy: {error.message}</span>}
58
+ * </div>
59
+ * );
60
+ * }
61
+ * ```
62
+ *
63
+ * @example
64
+ * ```tsx
65
+ * function ShareLink({url}: {url: string}) {
66
+ * const {copied, copy} = useClipboard();
67
+ *
68
+ * return (
69
+ * <button onClick={() => copy(url)} disabled={copied}>
70
+ * {copied ? "✓ Copied" : "Share link"}
71
+ * </button>
72
+ * );
73
+ * }
74
+ * ```
75
+ */
76
+ export declare function useClipboard(options?: UseClipboardOptions): UseClipboardReturn;
77
+ //# sourceMappingURL=useClipboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useClipboard.d.ts","sourceRoot":"","sources":["../../src/hooks/useClipboard.tsx"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;;;OAKG;IACH,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC;;OAEG;IACH,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,kBAAkB,CAqDlF"}
@@ -0,0 +1,42 @@
1
+ "use client";
2
+ import { useCallback, useEffect, useRef, useState } from "react";
3
+ function useClipboard(options = {}) {
4
+ const { timeout = 2000 } = options;
5
+ const [copied, setCopied] = useState(false);
6
+ const [error, setError] = useState(null);
7
+ const timeoutRef = useRef(null);
8
+ const copy = useCallback(async (text)=>{
9
+ if (null !== timeoutRef.current) {
10
+ clearTimeout(timeoutRef.current);
11
+ timeoutRef.current = null;
12
+ }
13
+ setError(null);
14
+ try {
15
+ if (void 0 === globalThis.navigator || !globalThis.navigator.clipboard) throw new Error("Clipboard API is not available");
16
+ await globalThis.navigator.clipboard.writeText(text);
17
+ setCopied(true);
18
+ timeoutRef.current = setTimeout(()=>{
19
+ setCopied(false);
20
+ timeoutRef.current = null;
21
+ }, timeout);
22
+ } catch (err) {
23
+ const errorMessage = err instanceof Error ? err : new Error("Failed to copy to clipboard");
24
+ setError(errorMessage);
25
+ setCopied(false);
26
+ console.error("Copy to clipboard failed:", errorMessage);
27
+ }
28
+ }, [
29
+ timeout
30
+ ]);
31
+ useEffect(()=>()=>{
32
+ if (null !== timeoutRef.current) clearTimeout(timeoutRef.current);
33
+ }, []);
34
+ return {
35
+ copied,
36
+ copy,
37
+ error
38
+ };
39
+ }
40
+ export { useClipboard };
41
+
42
+ //# sourceMappingURL=useClipboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/useClipboard.js","sources":["../../src/hooks/useClipboard.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\n/**\r\n * Options for the `useClipboard` hook.\r\n */\r\nexport interface UseClipboardOptions {\r\n /**\r\n * The duration in milliseconds after which the `copied` state resets to `false`.\r\n *\r\n * @defaultValue 2000\r\n */\r\n timeout?: number;\r\n}\r\n\r\n/**\r\n * Return type for the `useClipboard` hook.\r\n */\r\nexport interface UseClipboardReturn {\r\n /**\r\n * Whether the text was successfully copied to the clipboard.\r\n */\r\n copied: boolean;\r\n\r\n /**\r\n * Copies the provided text to the clipboard.\r\n *\r\n * @param text - The text to copy.\r\n * @returns A promise that resolves when the copy operation completes.\r\n */\r\n copy: (text: string) => Promise<void>;\r\n\r\n /**\r\n * The error that occurred during the copy operation, or `null` if no error occurred.\r\n */\r\n error: Error | null;\r\n}\r\n\r\n/**\r\n * Copies text to the clipboard with success/error state management.\r\n *\r\n * @remarks\r\n * This hook provides a simple interface for copying text to the clipboard using\r\n * the Clipboard API. It manages the `copied` state that automatically resets\r\n * after a configurable timeout, and handles errors gracefully when the Clipboard\r\n * API is unavailable or the operation fails.\r\n *\r\n * The hook is SSR-safe and will handle the case where `navigator.clipboard` is\r\n * not available (e.g., in non-secure contexts or older browsers).\r\n *\r\n * @param options - Configuration options for the hook.\r\n * @returns An object containing the copied state, copy function, and any error.\r\n *\r\n * @example\r\n * ```tsx\r\n * function CopyButton({textToCopy}: {textToCopy: string}) {\r\n * const {copied, copy, error} = useClipboard({timeout: 3000});\r\n *\r\n * return (\r\n * <div>\r\n * <button onClick={() => copy(textToCopy)}>\r\n * {copied ? \"Copied!\" : \"Copy to clipboard\"}\r\n * </button>\r\n * {error && <span>Failed to copy: {error.message}</span>}\r\n * </div>\r\n * );\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```tsx\r\n * function ShareLink({url}: {url: string}) {\r\n * const {copied, copy} = useClipboard();\r\n *\r\n * return (\r\n * <button onClick={() => copy(url)} disabled={copied}>\r\n * {copied ? \"✓ Copied\" : \"Share link\"}\r\n * </button>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport function useClipboard(options: UseClipboardOptions = {}): UseClipboardReturn {\r\n const {timeout = 2000} = options;\r\n\r\n const [copied, setCopied] = React.useState(false);\r\n const [error, setError] = React.useState<Error | null>(null);\r\n const timeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n const copy = React.useCallback(\r\n async (text: string): Promise<void> => {\r\n // Clear any existing timeout\r\n if (timeoutRef.current !== null) {\r\n clearTimeout(timeoutRef.current);\r\n timeoutRef.current = null;\r\n }\r\n\r\n // Reset error state\r\n setError(null);\r\n\r\n try {\r\n // Check if Clipboard API is available\r\n if (typeof globalThis.navigator === \"undefined\" || !globalThis.navigator.clipboard) {\r\n throw new Error(\"Clipboard API is not available\");\r\n }\r\n\r\n await globalThis.navigator.clipboard.writeText(text);\r\n setCopied(true);\r\n\r\n // Reset copied state after timeout\r\n timeoutRef.current = setTimeout(() => {\r\n setCopied(false);\r\n timeoutRef.current = null;\r\n }, timeout);\r\n } catch (err) {\r\n const errorMessage = err instanceof Error ? err : new Error(\"Failed to copy to clipboard\");\r\n\r\n setError(errorMessage);\r\n setCopied(false);\r\n console.error(\"Copy to clipboard failed:\", errorMessage);\r\n }\r\n },\r\n [timeout],\r\n );\r\n\r\n // Cleanup timeout on unmount\r\n React.useEffect(() => {\r\n return () => {\r\n if (timeoutRef.current !== null) {\r\n clearTimeout(timeoutRef.current);\r\n }\r\n };\r\n }, []);\r\n\r\n return {copied, copy, error};\r\n}\r\n"],"names":["useClipboard","options","timeout","copied","setCopied","React","error","setError","timeoutRef","copy","text","clearTimeout","globalThis","Error","setTimeout","err","errorMessage","console"],"mappings":";;AAmFO,SAASA,aAAaC,UAA+B,CAAC,CAAC;IAC5D,MAAM,EAACC,UAAU,IAAI,EAAC,GAAGD;IAEzB,MAAM,CAACE,QAAQC,UAAU,GAAGC,SAAe;IAC3C,MAAM,CAACC,OAAOC,SAAS,GAAGF,SAA6B;IACvD,MAAMG,aAAaH,OAAmD;IAEtE,MAAMI,OAAOJ,YACX,OAAOK;QAEL,IAAIF,AAAuB,SAAvBA,WAAW,OAAO,EAAW;YAC/BG,aAAaH,WAAW,OAAO;YAC/BA,WAAW,OAAO,GAAG;QACvB;QAGAD,SAAS;QAET,IAAI;YAEF,IAAI,AAAgC,WAAzBK,WAAW,SAAS,IAAoB,CAACA,WAAW,SAAS,CAAC,SAAS,EAChF,MAAM,IAAIC,MAAM;YAGlB,MAAMD,WAAW,SAAS,CAAC,SAAS,CAAC,SAAS,CAACF;YAC/CN,UAAU;YAGVI,WAAW,OAAO,GAAGM,WAAW;gBAC9BV,UAAU;gBACVI,WAAW,OAAO,GAAG;YACvB,GAAGN;QACL,EAAE,OAAOa,KAAK;YACZ,MAAMC,eAAeD,eAAeF,QAAQE,MAAM,IAAIF,MAAM;YAE5DN,SAASS;YACTZ,UAAU;YACVa,QAAQ,KAAK,CAAC,6BAA6BD;QAC7C;IACF,GACA;QAACd;KAAQ;IAIXG,UAAgB,IACP;YACL,IAAIG,AAAuB,SAAvBA,WAAW,OAAO,EACpBG,aAAaH,WAAW,OAAO;QAEnC,GACC,EAAE;IAEL,OAAO;QAACL;QAAQM;QAAMH;IAAK;AAC7B"}
@@ -0,0 +1,14 @@
1
+ type ColorScheme = "light" | "dark";
2
+ /**
3
+ * Returns the user's system color scheme preference.
4
+ *
5
+ * @returns `"dark"` when the system prefers dark mode, `"light"` otherwise.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * const scheme = useColorScheme(); // "dark"
10
+ * ```
11
+ */
12
+ export declare function useColorScheme(): ColorScheme;
13
+ export type { ColorScheme };
14
+ //# sourceMappingURL=useColorScheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useColorScheme.d.ts","sourceRoot":"","sources":["../../src/hooks/useColorScheme.tsx"],"names":[],"mappings":"AAIA,KAAK,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAEpC;;;;;;;;;GASG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAI5C;AAED,YAAY,EAAC,WAAW,EAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ "use client";
2
+ import { useMediaQuery } from "./useMediaQuery.js";
3
+ function useColorScheme() {
4
+ const prefersDark = useMediaQuery("(prefers-color-scheme: dark)");
5
+ return prefersDark ? "dark" : "light";
6
+ }
7
+ export { useColorScheme };
8
+
9
+ //# sourceMappingURL=useColorScheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/useColorScheme.js","sources":["../../src/hooks/useColorScheme.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {useMediaQuery} from \"./useMediaQuery\";\r\n\r\ntype ColorScheme = \"light\" | \"dark\";\r\n\r\n/**\r\n * Returns the user's system color scheme preference.\r\n *\r\n * @returns `\"dark\"` when the system prefers dark mode, `\"light\"` otherwise.\r\n *\r\n * @example\r\n * ```tsx\r\n * const scheme = useColorScheme(); // \"dark\"\r\n * ```\r\n */\r\nexport function useColorScheme(): ColorScheme {\r\n const prefersDark = useMediaQuery(\"(prefers-color-scheme: dark)\");\r\n\r\n return prefersDark ? \"dark\" : \"light\";\r\n}\r\n\r\nexport type {ColorScheme};\r\n"],"names":["useColorScheme","prefersDark","useMediaQuery"],"mappings":";;AAgBO,SAASA;IACd,MAAMC,cAAcC,cAAc;IAElC,OAAOD,cAAc,SAAS;AAChC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Options for configuring controllable state behavior.
3
+ *
4
+ * @typeParam T - The type of the state value.
5
+ */
6
+ export interface UseControllableStateOptions<T> {
7
+ /**
8
+ * The controlled value from props. When provided, the component operates in controlled mode.
9
+ */
10
+ controlled?: T;
11
+ /**
12
+ * The default value used when the component is uncontrolled.
13
+ */
14
+ defaultValue: T;
15
+ /**
16
+ * Callback fired when the internal state changes in controlled mode.
17
+ *
18
+ * @param value - The new state value.
19
+ */
20
+ onChange?: (value: T) => void;
21
+ }
22
+ /**
23
+ * Manages state that can be either controlled or uncontrolled.
24
+ *
25
+ * @remarks
26
+ * This hook enables components to support both controlled and uncontrolled patterns
27
+ * seamlessly. When a `controlled` value is provided, it takes precedence; otherwise,
28
+ * the hook manages internal state initialized with `defaultValue`.
29
+ *
30
+ * @typeParam T - The type of the state value.
31
+ * @param options - Configuration object for controllable state.
32
+ * @returns A tuple containing the current state value and a setter function.
33
+ *
34
+ * @example
35
+ * ```tsx
36
+ * function CustomInput({value, defaultValue = "", onChange}) {
37
+ * const [internalValue, setValue] = useControllableState({
38
+ * controlled: value,
39
+ * defaultValue,
40
+ * onChange,
41
+ * });
42
+ *
43
+ * return (
44
+ * <input
45
+ * type="text"
46
+ * value={internalValue}
47
+ * onChange={(e) => setValue(e.target.value)}
48
+ * />
49
+ * );
50
+ * }
51
+ * ```
52
+ */
53
+ export declare function useControllableState<T>(options: UseControllableStateOptions<T>): [T, (value: T | ((prev: T) => T)) => void];
54
+ //# sourceMappingURL=useControllableState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useControllableState.d.ts","sourceRoot":"","sources":["../../src/hooks/useControllableState.tsx"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,WAAW,2BAA2B,CAAC,CAAC;IAC5C;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,CAAC;IACf;;OAEG;IACH,YAAY,EAAE,CAAC,CAAC;IAChB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,OAAO,EAAE,2BAA2B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAuB3H"}
@@ -0,0 +1,29 @@
1
+ "use client";
2
+ import { useCallback, useState } from "react";
3
+ function useControllableState(options) {
4
+ const { controlled, defaultValue, onChange } = options;
5
+ const [uncontrolledState, setUncontrolledState] = useState(defaultValue);
6
+ const isControlled = void 0 !== controlled;
7
+ const value = isControlled ? controlled : uncontrolledState;
8
+ const setValue = useCallback((nextValue)=>{
9
+ if (isControlled) {
10
+ const resolvedValue = "function" == typeof nextValue ? nextValue(controlled) : nextValue;
11
+ onChange?.(resolvedValue);
12
+ } else setUncontrolledState((currentValue)=>{
13
+ const resolvedValue = "function" == typeof nextValue ? nextValue(currentValue) : nextValue;
14
+ onChange?.(resolvedValue);
15
+ return resolvedValue;
16
+ });
17
+ }, [
18
+ isControlled,
19
+ onChange,
20
+ controlled
21
+ ]);
22
+ return [
23
+ value,
24
+ setValue
25
+ ];
26
+ }
27
+ export { useControllableState };
28
+
29
+ //# sourceMappingURL=useControllableState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/useControllableState.js","sources":["../../src/hooks/useControllableState.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\n/**\r\n * Options for configuring controllable state behavior.\r\n *\r\n * @typeParam T - The type of the state value.\r\n */\r\nexport interface UseControllableStateOptions<T> {\r\n /**\r\n * The controlled value from props. When provided, the component operates in controlled mode.\r\n */\r\n controlled?: T;\r\n /**\r\n * The default value used when the component is uncontrolled.\r\n */\r\n defaultValue: T;\r\n /**\r\n * Callback fired when the internal state changes in controlled mode.\r\n *\r\n * @param value - The new state value.\r\n */\r\n onChange?: (value: T) => void;\r\n}\r\n\r\n/**\r\n * Manages state that can be either controlled or uncontrolled.\r\n *\r\n * @remarks\r\n * This hook enables components to support both controlled and uncontrolled patterns\r\n * seamlessly. When a `controlled` value is provided, it takes precedence; otherwise,\r\n * the hook manages internal state initialized with `defaultValue`.\r\n *\r\n * @typeParam T - The type of the state value.\r\n * @param options - Configuration object for controllable state.\r\n * @returns A tuple containing the current state value and a setter function.\r\n *\r\n * @example\r\n * ```tsx\r\n * function CustomInput({value, defaultValue = \"\", onChange}) {\r\n * const [internalValue, setValue] = useControllableState({\r\n * controlled: value,\r\n * defaultValue,\r\n * onChange,\r\n * });\r\n *\r\n * return (\r\n * <input\r\n * type=\"text\"\r\n * value={internalValue}\r\n * onChange={(e) => setValue(e.target.value)}\r\n * />\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport function useControllableState<T>(options: UseControllableStateOptions<T>): [T, (value: T | ((prev: T) => T)) => void] {\r\n const {controlled, defaultValue, onChange} = options;\r\n const [uncontrolledState, setUncontrolledState] = React.useState<T>(defaultValue);\r\n const isControlled = controlled !== undefined;\r\n const value = isControlled ? controlled : uncontrolledState;\r\n\r\n const setValue = React.useCallback(\r\n (nextValue: T | ((prev: T) => T)) => {\r\n if (!isControlled) {\r\n setUncontrolledState((currentValue) => {\r\n const resolvedValue = typeof nextValue === \"function\" ? (nextValue as (prev: T) => T)(currentValue) : nextValue;\r\n onChange?.(resolvedValue);\r\n return resolvedValue;\r\n });\r\n } else {\r\n const resolvedValue = typeof nextValue === \"function\" ? (nextValue as (prev: T) => T)(controlled as T) : nextValue;\r\n onChange?.(resolvedValue);\r\n }\r\n },\r\n [isControlled, onChange, controlled],\r\n );\r\n\r\n return [value, setValue];\r\n}\r\n"],"names":["useControllableState","options","controlled","defaultValue","onChange","uncontrolledState","setUncontrolledState","React","isControlled","undefined","value","setValue","nextValue","resolvedValue","currentValue"],"mappings":";;AAyDO,SAASA,qBAAwBC,OAAuC;IAC7E,MAAM,EAACC,UAAU,EAAEC,YAAY,EAAEC,QAAQ,EAAC,GAAGH;IAC7C,MAAM,CAACI,mBAAmBC,qBAAqB,GAAGC,SAAkBJ;IACpE,MAAMK,eAAeN,AAAeO,WAAfP;IACrB,MAAMQ,QAAQF,eAAeN,aAAaG;IAE1C,MAAMM,WAAWJ,YACf,CAACK;QACC,IAAKJ,cAME;YACL,MAAMK,gBAAgB,AAAqB,cAArB,OAAOD,YAA4BA,UAA6BV,cAAmBU;YACzGR,WAAWS;QACb,OAREP,qBAAqB,CAACQ;YACpB,MAAMD,gBAAgB,AAAqB,cAArB,OAAOD,YAA4BA,UAA6BE,gBAAgBF;YACtGR,WAAWS;YACX,OAAOA;QACT;IAKJ,GACA;QAACL;QAAcJ;QAAUF;KAAW;IAGtC,OAAO;QAACQ;QAAOC;KAAS;AAC1B"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Debounces a value, delaying updates until after the specified delay has elapsed.
3
+ *
4
+ * @remarks
5
+ * This hook returns a debounced version of the provided value that only updates
6
+ * after the value has stopped changing for the specified delay. Useful for optimizing
7
+ * performance in scenarios like search inputs, where you want to avoid triggering
8
+ * expensive operations on every keystroke.
9
+ *
10
+ * The debounce timer resets on every value change and cleans up automatically on unmount.
11
+ *
12
+ * @typeParam T - The type of the value being debounced.
13
+ * @param value - The value to debounce.
14
+ * @param delay - The delay in milliseconds before the debounced value updates.
15
+ * @returns The debounced value.
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * function SearchInput() {
20
+ * const [searchTerm, setSearchTerm] = useState("");
21
+ * const debouncedSearchTerm = useDebounce(searchTerm, 500);
22
+ *
23
+ * useEffect(() => {
24
+ * // Expensive search operation
25
+ * performSearch(debouncedSearchTerm);
26
+ * }, [debouncedSearchTerm]);
27
+ *
28
+ * return <input value={searchTerm} onChange={(e) => setSearchTerm(e.target.value)} />;
29
+ * }
30
+ * ```
31
+ */
32
+ export declare function useDebounce<T>(value: T, delay: number): T;
33
+ //# sourceMappingURL=useDebounce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDebounce.d.ts","sourceRoot":"","sources":["../../src/hooks/useDebounce.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,CAczD"}
@@ -0,0 +1,20 @@
1
+ "use client";
2
+ import { useEffect, useState } from "react";
3
+ function useDebounce(value, delay) {
4
+ const [debouncedValue, setDebouncedValue] = useState(value);
5
+ useEffect(()=>{
6
+ const timeoutId = globalThis.setTimeout(()=>{
7
+ setDebouncedValue(value);
8
+ }, delay);
9
+ return ()=>{
10
+ globalThis.clearTimeout(timeoutId);
11
+ };
12
+ }, [
13
+ value,
14
+ delay
15
+ ]);
16
+ return debouncedValue;
17
+ }
18
+ export { useDebounce };
19
+
20
+ //# sourceMappingURL=useDebounce.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/useDebounce.js","sources":["../../src/hooks/useDebounce.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\n/**\r\n * Debounces a value, delaying updates until after the specified delay has elapsed.\r\n *\r\n * @remarks\r\n * This hook returns a debounced version of the provided value that only updates\r\n * after the value has stopped changing for the specified delay. Useful for optimizing\r\n * performance in scenarios like search inputs, where you want to avoid triggering\r\n * expensive operations on every keystroke.\r\n *\r\n * The debounce timer resets on every value change and cleans up automatically on unmount.\r\n *\r\n * @typeParam T - The type of the value being debounced.\r\n * @param value - The value to debounce.\r\n * @param delay - The delay in milliseconds before the debounced value updates.\r\n * @returns The debounced value.\r\n *\r\n * @example\r\n * ```tsx\r\n * function SearchInput() {\r\n * const [searchTerm, setSearchTerm] = useState(\"\");\r\n * const debouncedSearchTerm = useDebounce(searchTerm, 500);\r\n *\r\n * useEffect(() => {\r\n * // Expensive search operation\r\n * performSearch(debouncedSearchTerm);\r\n * }, [debouncedSearchTerm]);\r\n *\r\n * return <input value={searchTerm} onChange={(e) => setSearchTerm(e.target.value)} />;\r\n * }\r\n * ```\r\n */\r\nexport function useDebounce<T>(value: T, delay: number): T {\r\n const [debouncedValue, setDebouncedValue] = React.useState<T>(value);\r\n\r\n React.useEffect(() => {\r\n const timeoutId = globalThis.setTimeout(() => {\r\n setDebouncedValue(value);\r\n }, delay);\r\n\r\n return () => {\r\n globalThis.clearTimeout(timeoutId);\r\n };\r\n }, [value, delay]);\r\n\r\n return debouncedValue;\r\n}\r\n"],"names":["useDebounce","value","delay","debouncedValue","setDebouncedValue","React","timeoutId","globalThis"],"mappings":";;AAmCO,SAASA,YAAeC,KAAQ,EAAEC,KAAa;IACpD,MAAM,CAACC,gBAAgBC,kBAAkB,GAAGC,SAAkBJ;IAE9DI,UAAgB;QACd,MAAMC,YAAYC,WAAW,UAAU,CAAC;YACtCH,kBAAkBH;QACpB,GAAGC;QAEH,OAAO;YACLK,WAAW,YAAY,CAACD;QAC1B;IACF,GAAG;QAACL;QAAOC;KAAM;IAEjB,OAAOC;AACT"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Creates a stable callback reference that always calls the latest version of the provided function.
3
+ *
4
+ * @remarks
5
+ * Unlike `useCallback`, this hook returns a stable function reference that never changes,
6
+ * but always invokes the most recent version of the callback. This is useful when you need
7
+ * to pass callbacks to optimized child components or effects without triggering re-renders
8
+ * when dependencies change.
9
+ *
10
+ * The returned function is safe to use in dependency arrays because its identity never changes.
11
+ *
12
+ * @typeParam Args - The tuple type of the callback's arguments.
13
+ * @typeParam Return - The return type of the callback.
14
+ * @param callback - The function to wrap with a stable reference.
15
+ * @returns A stable function reference that invokes the latest callback.
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * function SearchInput({onSearch}) {
20
+ * const [query, setQuery] = useState("");
21
+ * // stableOnSearch never changes identity, but always calls the latest onSearch
22
+ * const stableOnSearch = useEventCallback(onSearch);
23
+ *
24
+ * useEffect(() => {
25
+ * const timer = setTimeout(() => stableOnSearch(query), 500);
26
+ * return () => clearTimeout(timer);
27
+ * }, [query, stableOnSearch]); // Safe to include in deps
28
+ *
29
+ * return <input value={query} onChange={(e) => setQuery(e.target.value)} />;
30
+ * }
31
+ * ```
32
+ */
33
+ export declare function useEventCallback<Args extends unknown[], Return>(callback: (...args: Args) => Return): (...args: Args) => Return;
34
+ //# sourceMappingURL=useEventCallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEventCallback.d.ts","sourceRoot":"","sources":["../../src/hooks/useEventCallback.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAU/H"}
@@ -0,0 +1,12 @@
1
+ "use client";
2
+ import { useCallback, useLayoutEffect, useRef } from "react";
3
+ function useEventCallback(callback) {
4
+ const callbackRef = useRef(callback);
5
+ useLayoutEffect(()=>{
6
+ callbackRef.current = callback;
7
+ });
8
+ return useCallback((...args)=>callbackRef.current(...args), []);
9
+ }
10
+ export { useEventCallback };
11
+
12
+ //# sourceMappingURL=useEventCallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/useEventCallback.js","sources":["../../src/hooks/useEventCallback.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\n/**\r\n * Creates a stable callback reference that always calls the latest version of the provided function.\r\n *\r\n * @remarks\r\n * Unlike `useCallback`, this hook returns a stable function reference that never changes,\r\n * but always invokes the most recent version of the callback. This is useful when you need\r\n * to pass callbacks to optimized child components or effects without triggering re-renders\r\n * when dependencies change.\r\n *\r\n * The returned function is safe to use in dependency arrays because its identity never changes.\r\n *\r\n * @typeParam Args - The tuple type of the callback's arguments.\r\n * @typeParam Return - The return type of the callback.\r\n * @param callback - The function to wrap with a stable reference.\r\n * @returns A stable function reference that invokes the latest callback.\r\n *\r\n * @example\r\n * ```tsx\r\n * function SearchInput({onSearch}) {\r\n * const [query, setQuery] = useState(\"\");\r\n * // stableOnSearch never changes identity, but always calls the latest onSearch\r\n * const stableOnSearch = useEventCallback(onSearch);\r\n *\r\n * useEffect(() => {\r\n * const timer = setTimeout(() => stableOnSearch(query), 500);\r\n * return () => clearTimeout(timer);\r\n * }, [query, stableOnSearch]); // Safe to include in deps\r\n *\r\n * return <input value={query} onChange={(e) => setQuery(e.target.value)} />;\r\n * }\r\n * ```\r\n */\r\nexport function useEventCallback<Args extends unknown[], Return>(callback: (...args: Args) => Return): (...args: Args) => Return {\r\n const callbackRef = React.useRef(callback);\r\n\r\n React.useLayoutEffect(() => {\r\n callbackRef.current = callback;\r\n });\r\n\r\n return React.useCallback((...args: Args) => {\r\n return callbackRef.current(...args);\r\n }, []);\r\n}\r\n"],"names":["useEventCallback","callback","callbackRef","React","args"],"mappings":";;AAoCO,SAASA,iBAAiDC,QAAmC;IAClG,MAAMC,cAAcC,OAAaF;IAEjCE,gBAAsB;QACpBD,YAAY,OAAO,GAAGD;IACxB;IAEA,OAAOE,YAAkB,CAAC,GAAGC,OACpBF,YAAY,OAAO,IAAIE,OAC7B,EAAE;AACP"}
@@ -0,0 +1,51 @@
1
+ "use client";
2
+ import { useCallback } from "react";
3
+ const FOCUSABLE_SELECTOR = 'a[href], button:not(:disabled), input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex="-1"]), [contenteditable]';
4
+ function useFocusManager(containerRef) {
5
+ const getFocusable = useCallback(()=>{
6
+ if (!containerRef.current) return [];
7
+ return [
8
+ ...containerRef.current.querySelectorAll(FOCUSABLE_SELECTOR)
9
+ ].filter((element)=>!element.hasAttribute("disabled") && element.tabIndex >= 0);
10
+ }, [
11
+ containerRef
12
+ ]);
13
+ const focusFirst = useCallback(()=>{
14
+ getFocusable()[0]?.focus();
15
+ }, [
16
+ getFocusable
17
+ ]);
18
+ const focusLast = useCallback(()=>{
19
+ const items = getFocusable();
20
+ items.at(-1)?.focus();
21
+ }, [
22
+ getFocusable
23
+ ]);
24
+ const focusNext = useCallback(()=>{
25
+ const items = getFocusable();
26
+ const current = document.activeElement;
27
+ const index = items.indexOf(current);
28
+ const next = items[index + 1] ?? items[0];
29
+ next?.focus();
30
+ }, [
31
+ getFocusable
32
+ ]);
33
+ const focusPrevious = useCallback(()=>{
34
+ const items = getFocusable();
35
+ const current = document.activeElement;
36
+ const index = items.indexOf(current);
37
+ const previous = items[index - 1] ?? items.at(-1);
38
+ previous?.focus();
39
+ }, [
40
+ getFocusable
41
+ ]);
42
+ return {
43
+ focusFirst,
44
+ focusLast,
45
+ focusNext,
46
+ focusPrevious
47
+ };
48
+ }
49
+ export { useFocusManager };
50
+
51
+ //# sourceMappingURL=useFocusManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/useFocusManager.js","sources":["../../src/hooks/useFocusManager.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\nconst FOCUSABLE_SELECTOR = [\r\n \"a[href]\",\r\n \"button:not(:disabled)\",\r\n \"input:not(:disabled)\",\r\n \"select:not(:disabled)\",\r\n \"textarea:not(:disabled)\",\r\n '[tabindex]:not([tabindex=\"-1\"])',\r\n \"[contenteditable]\",\r\n].join(\", \");\r\n\r\n/**\r\n * Represents the focus movement helpers returned by {@link useFocusManager}.\r\n */\r\ninterface FocusManager {\r\n /**\r\n * Focuses the first focusable element in the container.\r\n */\r\n focusFirst: () => void;\r\n /**\r\n * Focuses the last focusable element in the container.\r\n */\r\n focusLast: () => void;\r\n /**\r\n * Focuses the next focusable element after the currently focused one.\r\n */\r\n focusNext: () => void;\r\n /**\r\n * Focuses the previous focusable element before the currently focused one.\r\n */\r\n focusPrevious: () => void;\r\n}\r\n\r\n/**\r\n * Provides programmatic focus movement helpers for a container element.\r\n *\r\n * @param containerRef - Ref pointing to the container whose focusable descendants should be managed.\r\n * @returns Focus helpers for moving to the first, last, next, or previous focusable descendant.\r\n *\r\n * @example\r\n * ```tsx\r\n * const containerRef = React.useRef<HTMLDivElement>(null);\r\n * const {focusNext, focusPrevious} = useFocusManager(containerRef);\r\n * ```\r\n */\r\nexport function useFocusManager(containerRef: React.RefObject<HTMLElement | null>): FocusManager {\r\n const getFocusable = React.useCallback((): HTMLElement[] => {\r\n if (!containerRef.current) {\r\n return [];\r\n }\r\n\r\n return [...containerRef.current.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)].filter(\r\n (element) => !element.hasAttribute(\"disabled\") && element.tabIndex >= 0,\r\n );\r\n }, [containerRef]);\r\n\r\n const focusFirst = React.useCallback(() => {\r\n getFocusable()[0]?.focus();\r\n }, [getFocusable]);\r\n\r\n const focusLast = React.useCallback(() => {\r\n const items = getFocusable();\r\n\r\n items.at(-1)?.focus();\r\n }, [getFocusable]);\r\n\r\n const focusNext = React.useCallback(() => {\r\n const items = getFocusable();\r\n const current = document.activeElement;\r\n const index = items.indexOf(current as HTMLElement);\r\n const next = items[index + 1] ?? items[0];\r\n\r\n next?.focus();\r\n }, [getFocusable]);\r\n\r\n const focusPrevious = React.useCallback(() => {\r\n const items = getFocusable();\r\n const current = document.activeElement;\r\n const index = items.indexOf(current as HTMLElement);\r\n const previous = items[index - 1] ?? items.at(-1);\r\n\r\n previous?.focus();\r\n }, [getFocusable]);\r\n\r\n return {focusFirst, focusLast, focusNext, focusPrevious};\r\n}\r\n"],"names":["FOCUSABLE_SELECTOR","useFocusManager","containerRef","getFocusable","React","element","focusFirst","focusLast","items","focusNext","current","document","index","next","focusPrevious","previous"],"mappings":";;AAIA,MAAMA,qBAAqB;AA4CpB,SAASC,gBAAgBC,YAAiD;IAC/E,MAAMC,eAAeC,YAAkB;QACrC,IAAI,CAACF,aAAa,OAAO,EACvB,OAAO,EAAE;QAGX,OAAO;eAAIA,aAAa,OAAO,CAAC,gBAAgB,CAAcF;SAAoB,CAAC,MAAM,CACvF,CAACK,UAAY,CAACA,QAAQ,YAAY,CAAC,eAAeA,QAAQ,QAAQ,IAAI;IAE1E,GAAG;QAACH;KAAa;IAEjB,MAAMI,aAAaF,YAAkB;QACnCD,cAAc,CAAC,EAAE,EAAE;IACrB,GAAG;QAACA;KAAa;IAEjB,MAAMI,YAAYH,YAAkB;QAClC,MAAMI,QAAQL;QAEdK,MAAM,EAAE,CAAC,KAAK;IAChB,GAAG;QAACL;KAAa;IAEjB,MAAMM,YAAYL,YAAkB;QAClC,MAAMI,QAAQL;QACd,MAAMO,UAAUC,SAAS,aAAa;QACtC,MAAMC,QAAQJ,MAAM,OAAO,CAACE;QAC5B,MAAMG,OAAOL,KAAK,CAACI,QAAQ,EAAE,IAAIJ,KAAK,CAAC,EAAE;QAEzCK,MAAM;IACR,GAAG;QAACV;KAAa;IAEjB,MAAMW,gBAAgBV,YAAkB;QACtC,MAAMI,QAAQL;QACd,MAAMO,UAAUC,SAAS,aAAa;QACtC,MAAMC,QAAQJ,MAAM,OAAO,CAACE;QAC5B,MAAMK,WAAWP,KAAK,CAACI,QAAQ,EAAE,IAAIJ,MAAM,EAAE,CAAC;QAE9CO,UAAU;IACZ,GAAG;QAACZ;KAAa;IAEjB,OAAO;QAACG;QAAYC;QAAWE;QAAWK;IAAa;AACzD"}
@@ -0,0 +1,50 @@
1
+ import * as React from "react";
2
+ /**
3
+ * Represents the focus handlers returned by {@link useFocusVisible}.
4
+ *
5
+ * @remarks
6
+ * Spread these handlers onto the interactive element that should respond to keyboard
7
+ * focus visibility. They coordinate transient focus styling without owning rendering.
8
+ */
9
+ interface FocusVisibleProps {
10
+ /**
11
+ * Called when the target receives focus.
12
+ */
13
+ onFocus: (event: React.FocusEvent) => void;
14
+ /**
15
+ * Called when the target loses focus.
16
+ */
17
+ onBlur: () => void;
18
+ }
19
+ /**
20
+ * Detects whether the current focus originated from keyboard navigation.
21
+ *
22
+ * @remarks
23
+ * Tracks global keyboard and pointer input so consumers can render focus rings only when
24
+ * users are tabbing through the interface. This mirrors the intent of `:focus-visible`
25
+ * while remaining available to JavaScript-driven components and custom states.
26
+ *
27
+ * @returns An object containing the current focus-visible state and focus handlers to spread on the target element.
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * const {isFocusVisible, focusProps} = useFocusVisible();
32
+ *
33
+ * return (
34
+ * <button
35
+ * type="button"
36
+ * {...focusProps}
37
+ * className={isFocusVisible ? "ring" : undefined}>
38
+ * Click
39
+ * </button>
40
+ * );
41
+ * ```
42
+ *
43
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible | MDN :focus-visible}
44
+ */
45
+ export declare function useFocusVisible(): {
46
+ isFocusVisible: boolean;
47
+ focusProps: FocusVisibleProps;
48
+ };
49
+ export {};
50
+ //# sourceMappingURL=useFocusVisible.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFocusVisible.d.ts","sourceRoot":"","sources":["../../src/hooks/useFocusVisible.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;;;;GAMG;AACH,UAAU,iBAAiB;IACzB;;OAEG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC3C;;OAEG;IACH,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,eAAe,IAAI;IACjC,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,iBAAiB,CAAC;CAC/B,CAoCA"}
@@ -0,0 +1,35 @@
1
+ "use client";
2
+ import { useEffect, useMemo, useRef, useState } from "react";
3
+ function useFocusVisible() {
4
+ const [isFocusVisible, setIsFocusVisible] = useState(false);
5
+ const isKeyboardRef = useRef(false);
6
+ useEffect(()=>{
7
+ const onKeyDown = ()=>{
8
+ isKeyboardRef.current = true;
9
+ };
10
+ const onPointerDown = ()=>{
11
+ isKeyboardRef.current = false;
12
+ };
13
+ globalThis.document.addEventListener("keydown", onKeyDown, true);
14
+ globalThis.document.addEventListener("pointerdown", onPointerDown, true);
15
+ return ()=>{
16
+ globalThis.document.removeEventListener("keydown", onKeyDown, true);
17
+ globalThis.document.removeEventListener("pointerdown", onPointerDown, true);
18
+ };
19
+ }, []);
20
+ const focusProps = useMemo(()=>({
21
+ onFocus: (_event)=>{
22
+ if (isKeyboardRef.current) setIsFocusVisible(true);
23
+ },
24
+ onBlur: ()=>{
25
+ setIsFocusVisible(false);
26
+ }
27
+ }), []);
28
+ return {
29
+ isFocusVisible,
30
+ focusProps
31
+ };
32
+ }
33
+ export { useFocusVisible };
34
+
35
+ //# sourceMappingURL=useFocusVisible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/useFocusVisible.js","sources":["../../src/hooks/useFocusVisible.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\n/**\r\n * Represents the focus handlers returned by {@link useFocusVisible}.\r\n *\r\n * @remarks\r\n * Spread these handlers onto the interactive element that should respond to keyboard\r\n * focus visibility. They coordinate transient focus styling without owning rendering.\r\n */\r\ninterface FocusVisibleProps {\r\n /**\r\n * Called when the target receives focus.\r\n */\r\n onFocus: (event: React.FocusEvent) => void;\r\n /**\r\n * Called when the target loses focus.\r\n */\r\n onBlur: () => void;\r\n}\r\n\r\n/**\r\n * Detects whether the current focus originated from keyboard navigation.\r\n *\r\n * @remarks\r\n * Tracks global keyboard and pointer input so consumers can render focus rings only when\r\n * users are tabbing through the interface. This mirrors the intent of `:focus-visible`\r\n * while remaining available to JavaScript-driven components and custom states.\r\n *\r\n * @returns An object containing the current focus-visible state and focus handlers to spread on the target element.\r\n *\r\n * @example\r\n * ```tsx\r\n * const {isFocusVisible, focusProps} = useFocusVisible();\r\n *\r\n * return (\r\n * <button\r\n * type=\"button\"\r\n * {...focusProps}\r\n * className={isFocusVisible ? \"ring\" : undefined}>\r\n * Click\r\n * </button>\r\n * );\r\n * ```\r\n *\r\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible | MDN :focus-visible}\r\n */\r\nexport function useFocusVisible(): {\r\n isFocusVisible: boolean;\r\n focusProps: FocusVisibleProps;\r\n} {\r\n const [isFocusVisible, setIsFocusVisible] = React.useState(false);\r\n const isKeyboardRef = React.useRef(false);\r\n\r\n React.useEffect(() => {\r\n const onKeyDown = () => {\r\n isKeyboardRef.current = true;\r\n };\r\n const onPointerDown = () => {\r\n isKeyboardRef.current = false;\r\n };\r\n\r\n globalThis.document.addEventListener(\"keydown\", onKeyDown, true);\r\n globalThis.document.addEventListener(\"pointerdown\", onPointerDown, true);\r\n\r\n return () => {\r\n globalThis.document.removeEventListener(\"keydown\", onKeyDown, true);\r\n globalThis.document.removeEventListener(\"pointerdown\", onPointerDown, true);\r\n };\r\n }, []);\r\n\r\n const focusProps = React.useMemo<FocusVisibleProps>(\r\n () => ({\r\n onFocus: (_event: React.FocusEvent) => {\r\n if (isKeyboardRef.current) {\r\n setIsFocusVisible(true);\r\n }\r\n },\r\n onBlur: () => {\r\n setIsFocusVisible(false);\r\n },\r\n }),\r\n [],\r\n );\r\n\r\n return {isFocusVisible, focusProps};\r\n}\r\n"],"names":["useFocusVisible","isFocusVisible","setIsFocusVisible","React","isKeyboardRef","onKeyDown","onPointerDown","globalThis","focusProps","_event"],"mappings":";;AAgDO,SAASA;IAId,MAAM,CAACC,gBAAgBC,kBAAkB,GAAGC,SAAe;IAC3D,MAAMC,gBAAgBD,OAAa;IAEnCA,UAAgB;QACd,MAAME,YAAY;YAChBD,cAAc,OAAO,GAAG;QAC1B;QACA,MAAME,gBAAgB;YACpBF,cAAc,OAAO,GAAG;QAC1B;QAEAG,WAAW,QAAQ,CAAC,gBAAgB,CAAC,WAAWF,WAAW;QAC3DE,WAAW,QAAQ,CAAC,gBAAgB,CAAC,eAAeD,eAAe;QAEnE,OAAO;YACLC,WAAW,QAAQ,CAAC,mBAAmB,CAAC,WAAWF,WAAW;YAC9DE,WAAW,QAAQ,CAAC,mBAAmB,CAAC,eAAeD,eAAe;QACxE;IACF,GAAG,EAAE;IAEL,MAAME,aAAaL,QACjB,IAAO;YACL,SAAS,CAACM;gBACR,IAAIL,cAAc,OAAO,EACvBF,kBAAkB;YAEtB;YACA,QAAQ;gBACNA,kBAAkB;YACpB;QACF,IACA,EAAE;IAGJ,OAAO;QAACD;QAAgBO;IAAU;AACpC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Generates a unique, stable identifier that is safe for server-side rendering.
3
+ *
4
+ * @remarks
5
+ * This hook wraps React's `useId` and optionally prepends a custom prefix.
6
+ * The generated ID remains stable across re-renders and matches between server
7
+ * and client, making it ideal for associating form labels with inputs or
8
+ * managing accessible ARIA relationships.
9
+ *
10
+ * @param prefix - Optional string to prepend to the generated ID.
11
+ * @returns A unique identifier string.
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * function FormField({label}) {
16
+ * const id = useId("field");
17
+ *
18
+ * return (
19
+ * <div>
20
+ * <label htmlFor={id}>{label}</label>
21
+ * <input id={id} type="text" />
22
+ * </div>
23
+ * );
24
+ * }
25
+ * ```
26
+ *
27
+ * @see {@link https://react.dev/reference/react/useId | React useId}
28
+ */
29
+ export declare function useId(prefix?: string): string;
30
+ //# sourceMappingURL=useId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useId.d.ts","sourceRoot":"","sources":["../../src/hooks/useId.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAG7C"}
@@ -0,0 +1,9 @@
1
+ "use client";
2
+ import { useId } from "react";
3
+ function useId_useId(prefix) {
4
+ const reactId = useId();
5
+ return prefix ? `${prefix}-${reactId}` : reactId;
6
+ }
7
+ export { useId_useId as useId };
8
+
9
+ //# sourceMappingURL=useId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/useId.js","sources":["../../src/hooks/useId.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\n/**\r\n * Generates a unique, stable identifier that is safe for server-side rendering.\r\n *\r\n * @remarks\r\n * This hook wraps React's `useId` and optionally prepends a custom prefix.\r\n * The generated ID remains stable across re-renders and matches between server\r\n * and client, making it ideal for associating form labels with inputs or\r\n * managing accessible ARIA relationships.\r\n *\r\n * @param prefix - Optional string to prepend to the generated ID.\r\n * @returns A unique identifier string.\r\n *\r\n * @example\r\n * ```tsx\r\n * function FormField({label}) {\r\n * const id = useId(\"field\");\r\n *\r\n * return (\r\n * <div>\r\n * <label htmlFor={id}>{label}</label>\r\n * <input id={id} type=\"text\" />\r\n * </div>\r\n * );\r\n * }\r\n * ```\r\n *\r\n * @see {@link https://react.dev/reference/react/useId | React useId}\r\n */\r\nexport function useId(prefix?: string): string {\r\n const reactId = React.useId();\r\n return prefix ? `${prefix}-${reactId}` : reactId;\r\n}\r\n"],"names":["useId","prefix","reactId","React"],"mappings":";;AAgCO,SAASA,YAAMC,MAAe;IACnC,MAAMC,UAAUC;IAChB,OAAOF,SAAS,GAAGA,OAAO,CAAC,EAAEC,SAAS,GAAGA;AAC3C"}