@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,51 @@
1
+ import * as React from "react";
2
+ /**
3
+ * Observes element visibility using the Intersection Observer API.
4
+ *
5
+ * @remarks
6
+ * This hook creates an IntersectionObserver that watches the provided element
7
+ * reference and returns the latest `IntersectionObserverEntry`. It's useful
8
+ * for implementing lazy loading, infinite scroll, animations on scroll, and
9
+ * tracking element visibility.
10
+ *
11
+ * The observer automatically disconnects when the component unmounts or when
12
+ * the element reference changes. The hook is SSR-safe and returns `null` when
13
+ * running on the server or when the observer is not yet initialized.
14
+ *
15
+ * @param ref - A React ref object pointing to the element to observe.
16
+ * @param options - Optional IntersectionObserver configuration (threshold, root, rootMargin).
17
+ * @returns The latest IntersectionObserverEntry or null if not intersecting yet.
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * function LazyImage({src, alt}: {src: string; alt: string}) {
22
+ * const imageRef = useRef<HTMLImageElement>(null);
23
+ * const entry = useIntersectionObserver(imageRef, {threshold: 0.1});
24
+ *
25
+ * return (
26
+ * <img
27
+ * ref={imageRef}
28
+ * src={entry?.isIntersecting ? src : undefined}
29
+ * alt={alt}
30
+ * />
31
+ * );
32
+ * }
33
+ * ```
34
+ *
35
+ * @example
36
+ * ```tsx
37
+ * function AnimateOnScroll({children}: {children: React.ReactNode}) {
38
+ * const ref = useRef<HTMLDivElement>(null);
39
+ * const entry = useIntersectionObserver(ref, {threshold: 0.5});
40
+ * const isVisible = entry?.isIntersecting ?? false;
41
+ *
42
+ * return (
43
+ * <div ref={ref} className={isVisible ? "fade-in" : "hidden"}>
44
+ * {children}
45
+ * </div>
46
+ * );
47
+ * }
48
+ * ```
49
+ */
50
+ export declare function useIntersectionObserver(ref: React.RefObject<Element | null>, options?: IntersectionObserverInit): IntersectionObserverEntry | null;
51
+ //# sourceMappingURL=useIntersectionObserver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useIntersectionObserver.d.ts","sourceRoot":"","sources":["../../src/hooks/useIntersectionObserver.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,EACpC,OAAO,CAAC,EAAE,wBAAwB,GACjC,yBAAyB,GAAG,IAAI,CAyBlC"}
@@ -0,0 +1,25 @@
1
+ "use client";
2
+ import { useEffect, useState } from "react";
3
+ function useIntersectionObserver(ref, options) {
4
+ const [entry, setEntry] = useState(null);
5
+ useEffect(()=>{
6
+ const element = ref.current;
7
+ if (void 0 === globalThis.IntersectionObserver || !element) return;
8
+ const observer = new globalThis.IntersectionObserver(([observerEntry])=>{
9
+ if (observerEntry) setEntry(observerEntry);
10
+ }, options);
11
+ observer.observe(element);
12
+ return ()=>{
13
+ observer.disconnect();
14
+ };
15
+ }, [
16
+ ref,
17
+ options?.threshold,
18
+ options?.root,
19
+ options?.rootMargin
20
+ ]);
21
+ return entry;
22
+ }
23
+ export { useIntersectionObserver };
24
+
25
+ //# sourceMappingURL=useIntersectionObserver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/useIntersectionObserver.js","sources":["../../src/hooks/useIntersectionObserver.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\n/**\r\n * Observes element visibility using the Intersection Observer API.\r\n *\r\n * @remarks\r\n * This hook creates an IntersectionObserver that watches the provided element\r\n * reference and returns the latest `IntersectionObserverEntry`. It's useful\r\n * for implementing lazy loading, infinite scroll, animations on scroll, and\r\n * tracking element visibility.\r\n *\r\n * The observer automatically disconnects when the component unmounts or when\r\n * the element reference changes. The hook is SSR-safe and returns `null` when\r\n * running on the server or when the observer is not yet initialized.\r\n *\r\n * @param ref - A React ref object pointing to the element to observe.\r\n * @param options - Optional IntersectionObserver configuration (threshold, root, rootMargin).\r\n * @returns The latest IntersectionObserverEntry or null if not intersecting yet.\r\n *\r\n * @example\r\n * ```tsx\r\n * function LazyImage({src, alt}: {src: string; alt: string}) {\r\n * const imageRef = useRef<HTMLImageElement>(null);\r\n * const entry = useIntersectionObserver(imageRef, {threshold: 0.1});\r\n *\r\n * return (\r\n * <img\r\n * ref={imageRef}\r\n * src={entry?.isIntersecting ? src : undefined}\r\n * alt={alt}\r\n * />\r\n * );\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```tsx\r\n * function AnimateOnScroll({children}: {children: React.ReactNode}) {\r\n * const ref = useRef<HTMLDivElement>(null);\r\n * const entry = useIntersectionObserver(ref, {threshold: 0.5});\r\n * const isVisible = entry?.isIntersecting ?? false;\r\n *\r\n * return (\r\n * <div ref={ref} className={isVisible ? \"fade-in\" : \"hidden\"}>\r\n * {children}\r\n * </div>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport function useIntersectionObserver(\r\n ref: React.RefObject<Element | null>,\r\n options?: IntersectionObserverInit,\r\n): IntersectionObserverEntry | null {\r\n const [entry, setEntry] = React.useState<IntersectionObserverEntry | null>(null);\r\n\r\n React.useEffect(() => {\r\n const element = ref.current;\r\n\r\n // SSR safety: IntersectionObserver is not available on server\r\n if (typeof globalThis.IntersectionObserver === \"undefined\" || !element) {\r\n return;\r\n }\r\n\r\n const observer = new globalThis.IntersectionObserver(([observerEntry]) => {\r\n if (observerEntry) {\r\n setEntry(observerEntry);\r\n }\r\n }, options);\r\n\r\n observer.observe(element);\r\n\r\n return () => {\r\n observer.disconnect();\r\n };\r\n }, [ref, options?.threshold, options?.root, options?.rootMargin]);\r\n\r\n return entry;\r\n}\r\n"],"names":["useIntersectionObserver","ref","options","entry","setEntry","React","element","globalThis","observer","observerEntry"],"mappings":";;AAoDO,SAASA,wBACdC,GAAoC,EACpCC,OAAkC;IAElC,MAAM,CAACC,OAAOC,SAAS,GAAGC,SAAiD;IAE3EA,UAAgB;QACd,MAAMC,UAAUL,IAAI,OAAO;QAG3B,IAAI,AAA2C,WAApCM,WAAW,oBAAoB,IAAoB,CAACD,SAC7D;QAGF,MAAME,WAAW,IAAID,WAAW,oBAAoB,CAAC,CAAC,CAACE,cAAc;YACnE,IAAIA,eACFL,SAASK;QAEb,GAAGP;QAEHM,SAAS,OAAO,CAACF;QAEjB,OAAO;YACLE,SAAS,UAAU;QACrB;IACF,GAAG;QAACP;QAAKC,SAAS;QAAWA,SAAS;QAAMA,SAAS;KAAW;IAEhE,OAAOC;AACT"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Executes a callback function at specified intervals with automatic cleanup.
3
+ *
4
+ * @remarks
5
+ * This hook provides a declarative interface for `setInterval` that automatically
6
+ * handles cleanup on unmount and ensures the latest callback is always invoked
7
+ * (preventing stale closures). Setting the delay to `null` pauses the interval,
8
+ * which is useful for implementing play/pause functionality.
9
+ *
10
+ * Unlike raw `setInterval`, this hook guarantees that the interval is cleared
11
+ * when the component unmounts or when the delay changes, preventing memory leaks
12
+ * and unexpected behavior.
13
+ *
14
+ * @param callback - The function to execute at each interval.
15
+ * @param delay - The interval delay in milliseconds, or `null` to pause the interval.
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * function Timer() {
20
+ * const [count, setCount] = useState(0);
21
+ *
22
+ * useInterval(() => {
23
+ * setCount((c) => c + 1);
24
+ * }, 1000);
25
+ *
26
+ * return <div>Count: {count}</div>;
27
+ * }
28
+ * ```
29
+ *
30
+ * @example
31
+ * ```tsx
32
+ * function PausableTimer() {
33
+ * const [count, setCount] = useState(0);
34
+ * const [isRunning, setIsRunning] = useState(true);
35
+ *
36
+ * useInterval(
37
+ * () => {
38
+ * setCount((c) => c + 1);
39
+ * },
40
+ * isRunning ? 1000 : null,
41
+ * );
42
+ *
43
+ * return (
44
+ * <div>
45
+ * <div>Count: {count}</div>
46
+ * <button onClick={() => setIsRunning(!isRunning)}>
47
+ * {isRunning ? "Pause" : "Resume"}
48
+ * </button>
49
+ * </div>
50
+ * );
51
+ * }
52
+ * ```
53
+ */
54
+ export declare function useInterval(callback: () => void, delay: number | null): void;
55
+ //# sourceMappingURL=useInterval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInterval.d.ts","sourceRoot":"","sources":["../../src/hooks/useInterval.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAsB5E"}
@@ -0,0 +1,24 @@
1
+ "use client";
2
+ import { useEffect, useRef } from "react";
3
+ function useInterval(callback, delay) {
4
+ const savedCallback = useRef(callback);
5
+ useEffect(()=>{
6
+ savedCallback.current = callback;
7
+ }, [
8
+ callback
9
+ ]);
10
+ useEffect(()=>{
11
+ if (null === delay) return;
12
+ const intervalId = globalThis.setInterval(()=>{
13
+ savedCallback.current();
14
+ }, delay);
15
+ return ()=>{
16
+ globalThis.clearInterval(intervalId);
17
+ };
18
+ }, [
19
+ delay
20
+ ]);
21
+ }
22
+ export { useInterval };
23
+
24
+ //# sourceMappingURL=useInterval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/useInterval.js","sources":["../../src/hooks/useInterval.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\n/**\r\n * Executes a callback function at specified intervals with automatic cleanup.\r\n *\r\n * @remarks\r\n * This hook provides a declarative interface for `setInterval` that automatically\r\n * handles cleanup on unmount and ensures the latest callback is always invoked\r\n * (preventing stale closures). Setting the delay to `null` pauses the interval,\r\n * which is useful for implementing play/pause functionality.\r\n *\r\n * Unlike raw `setInterval`, this hook guarantees that the interval is cleared\r\n * when the component unmounts or when the delay changes, preventing memory leaks\r\n * and unexpected behavior.\r\n *\r\n * @param callback - The function to execute at each interval.\r\n * @param delay - The interval delay in milliseconds, or `null` to pause the interval.\r\n *\r\n * @example\r\n * ```tsx\r\n * function Timer() {\r\n * const [count, setCount] = useState(0);\r\n *\r\n * useInterval(() => {\r\n * setCount((c) => c + 1);\r\n * }, 1000);\r\n *\r\n * return <div>Count: {count}</div>;\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```tsx\r\n * function PausableTimer() {\r\n * const [count, setCount] = useState(0);\r\n * const [isRunning, setIsRunning] = useState(true);\r\n *\r\n * useInterval(\r\n * () => {\r\n * setCount((c) => c + 1);\r\n * },\r\n * isRunning ? 1000 : null,\r\n * );\r\n *\r\n * return (\r\n * <div>\r\n * <div>Count: {count}</div>\r\n * <button onClick={() => setIsRunning(!isRunning)}>\r\n * {isRunning ? \"Pause\" : \"Resume\"}\r\n * </button>\r\n * </div>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport function useInterval(callback: () => void, delay: number | null): void {\r\n const savedCallback = React.useRef(callback);\r\n\r\n // Update ref to latest callback on every render to avoid stale closures\r\n React.useEffect(() => {\r\n savedCallback.current = callback;\r\n }, [callback]);\r\n\r\n React.useEffect(() => {\r\n // Don't schedule if delay is null\r\n if (delay === null) {\r\n return;\r\n }\r\n\r\n const intervalId = globalThis.setInterval(() => {\r\n savedCallback.current();\r\n }, delay);\r\n\r\n return () => {\r\n globalThis.clearInterval(intervalId);\r\n };\r\n }, [delay]);\r\n}\r\n"],"names":["useInterval","callback","delay","savedCallback","React","intervalId","globalThis"],"mappings":";;AAyDO,SAASA,YAAYC,QAAoB,EAAEC,KAAoB;IACpE,MAAMC,gBAAgBC,OAAaH;IAGnCG,UAAgB;QACdD,cAAc,OAAO,GAAGF;IAC1B,GAAG;QAACA;KAAS;IAEbG,UAAgB;QAEd,IAAIF,AAAU,SAAVA,OACF;QAGF,MAAMG,aAAaC,WAAW,WAAW,CAAC;YACxCH,cAAc,OAAO;QACvB,GAAGD;QAEH,OAAO;YACLI,WAAW,aAAa,CAACD;QAC3B;IACF,GAAG;QAACH;KAAM;AACZ"}
@@ -1,20 +1,14 @@
1
1
  /**
2
2
  * A custom React hook that detects whether the current device is a mobile device
3
- * based on the screen width.
4
- * This hook uses a media query to check if the viewport width is less than the defined
5
- * mobile breakpoint (768px). It updates the state when the window size changes.
6
- * @returns Returns true if the viewport width is less than the mobile breakpoint,
7
- * false otherwise.
3
+ * based on the screen width (viewport < 768px).
4
+ *
5
+ * @returns `true` if the viewport width is less than 768px, `false` otherwise.
6
+ *
8
7
  * @example
9
8
  * ```tsx
10
9
  * function MyComponent() {
11
10
  * const isMobile = useIsMobile();
12
- *
13
- * return (
14
- * <div>
15
- * {isMobile ? 'Mobile View' : 'Desktop View'}
16
- * </div>
17
- * );
11
+ * return <div>{isMobile ? 'Mobile View' : 'Desktop View'}</div>;
18
12
  * }
19
13
  * ```
20
14
  */
@@ -1 +1 @@
1
- {"version":3,"file":"useIsMobile.d.ts","sourceRoot":"","sources":["../../src/hooks/useIsMobile.tsx"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAgBrC"}
1
+ {"version":3,"file":"useIsMobile.d.ts","sourceRoot":"","sources":["../../src/hooks/useIsMobile.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAErC"}
@@ -1,18 +1,7 @@
1
1
  "use client";
2
- import { useEffect, useState } from "react";
3
- const MOBILE_BREAKPOINT = 768;
2
+ import { useMediaQuery } from "./useMediaQuery.js";
4
3
  function useIsMobile() {
5
- const [isMobile, setIsMobile] = useState(null);
6
- useEffect(()=>{
7
- const mql = globalThis.window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
8
- const onChange = ()=>{
9
- setIsMobile(globalThis.window.innerWidth < MOBILE_BREAKPOINT);
10
- };
11
- mql.addEventListener("change", onChange);
12
- setIsMobile(globalThis.window.innerWidth < MOBILE_BREAKPOINT);
13
- return ()=>mql.removeEventListener("change", onChange);
14
- }, []);
15
- return Boolean(isMobile);
4
+ return useMediaQuery("(max-width: 767px)");
16
5
  }
17
6
  export { useIsMobile };
18
7
 
@@ -1 +1 @@
1
- {"version":3,"file":"hooks/useIsMobile.js","sources":["../../src/hooks/useIsMobile.tsx"],"sourcesContent":["\"use client\";\r\nimport * as React from \"react\";\r\n\r\nconst MOBILE_BREAKPOINT = 768;\r\n\r\n/**\r\n * A custom React hook that detects whether the current device is a mobile device\r\n * based on the screen width.\r\n * This hook uses a media query to check if the viewport width is less than the defined\r\n * mobile breakpoint (768px). It updates the state when the window size changes.\r\n * @returns Returns true if the viewport width is less than the mobile breakpoint,\r\n * false otherwise.\r\n * @example\r\n * ```tsx\r\n * function MyComponent() {\r\n * const isMobile = useIsMobile();\r\n *\r\n * return (\r\n * <div>\r\n * {isMobile ? 'Mobile View' : 'Desktop View'}\r\n * </div>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport function useIsMobile(): boolean {\r\n const [isMobile, setIsMobile] = React.useState<boolean | null>(null);\r\n\r\n React.useEffect(() => {\r\n const mql = globalThis.window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\r\n const onChange = () => {\r\n // eslint-disable-next-line react-hooks-extra/no-direct-set-state-in-use-effect\r\n setIsMobile(globalThis.window.innerWidth < MOBILE_BREAKPOINT);\r\n };\r\n mql.addEventListener(\"change\", onChange);\r\n // eslint-disable-next-line react-hooks-extra/no-direct-set-state-in-use-effect\r\n setIsMobile(globalThis.window.innerWidth < MOBILE_BREAKPOINT);\r\n return () => mql.removeEventListener(\"change\", onChange);\r\n }, []);\r\n\r\n return Boolean(isMobile);\r\n}\r\n"],"names":["MOBILE_BREAKPOINT","useIsMobile","isMobile","setIsMobile","React","mql","globalThis","onChange","Boolean"],"mappings":";;AAGA,MAAMA,oBAAoB;AAsBnB,SAASC;IACd,MAAM,CAACC,UAAUC,YAAY,GAAGC,SAA+B;IAE/DA,UAAgB;QACd,MAAMC,MAAMC,WAAW,MAAM,CAAC,UAAU,CAAC,CAAC,YAAY,EAAEN,oBAAoB,EAAE,GAAG,CAAC;QAClF,MAAMO,WAAW;YAEfJ,YAAYG,WAAW,MAAM,CAAC,UAAU,GAAGN;QAC7C;QACAK,IAAI,gBAAgB,CAAC,UAAUE;QAE/BJ,YAAYG,WAAW,MAAM,CAAC,UAAU,GAAGN;QAC3C,OAAO,IAAMK,IAAI,mBAAmB,CAAC,UAAUE;IACjD,GAAG,EAAE;IAEL,OAAOC,QAAQN;AACjB"}
1
+ {"version":3,"file":"hooks/useIsMobile.js","sources":["../../src/hooks/useIsMobile.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {useMediaQuery} from \"./useMediaQuery\";\r\n\r\n/**\r\n * A custom React hook that detects whether the current device is a mobile device\r\n * based on the screen width (viewport < 768px).\r\n *\r\n * @returns `true` if the viewport width is less than 768px, `false` otherwise.\r\n *\r\n * @example\r\n * ```tsx\r\n * function MyComponent() {\r\n * const isMobile = useIsMobile();\r\n * return <div>{isMobile ? 'Mobile View' : 'Desktop View'}</div>;\r\n * }\r\n * ```\r\n */\r\nexport function useIsMobile(): boolean {\r\n return useMediaQuery(\"(max-width: 767px)\");\r\n}\r\n"],"names":["useIsMobile","useMediaQuery"],"mappings":";;AAkBO,SAASA;IACd,OAAOC,cAAc;AACvB"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Persists state to localStorage with SSR safety and JSON serialization.
3
+ *
4
+ * @remarks
5
+ * This hook synchronizes state with localStorage, allowing data to persist
6
+ * across page refreshes and browser sessions. It is SSR-safe and returns the
7
+ * initial value on the server until hydration completes. The hook also syncs
8
+ * state across tabs/windows via the `storage` event and handles JSON parse
9
+ * errors gracefully by falling back to the initial value.
10
+ *
11
+ * @typeParam T - The type of the value being stored.
12
+ * @param key - The localStorage key to store the value under.
13
+ * @param initialValue - The default value to use if no value is found in localStorage.
14
+ * @returns A tuple containing the current value and a setter function.
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * function UserSettings() {
19
+ * const [theme, setTheme] = useLocalStorage("theme", "light");
20
+ *
21
+ * return (
22
+ * <button onClick={() => setTheme(theme === "light" ? "dark" : "light")}>
23
+ * Toggle theme (current: {theme})
24
+ * </button>
25
+ * );
26
+ * }
27
+ * ```
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * function ShoppingCart() {
32
+ * const [cart, setCart] = useLocalStorage<Product[]>("cart", []);
33
+ *
34
+ * return (
35
+ * <button onClick={() => setCart((prev) => [...prev, newProduct])}>
36
+ * Add to cart ({cart.length} items)
37
+ * </button>
38
+ * );
39
+ * }
40
+ * ```
41
+ */
42
+ export declare function useLocalStorage<T>(key: string, initialValue: T): [T, (value: T | ((prev: T) => T)) => void];
43
+ //# sourceMappingURL=useLocalStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLocalStorage.d.ts","sourceRoot":"","sources":["../../src/hooks/useLocalStorage.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAiE3G"}
@@ -0,0 +1,53 @@
1
+ "use client";
2
+ import { useCallback, useEffect, useState } from "react";
3
+ function useLocalStorage(key, initialValue) {
4
+ const [storedValue, setStoredValue] = useState(()=>{
5
+ if (void 0 === globalThis.window) return initialValue;
6
+ try {
7
+ const item = globalThis.window.localStorage.getItem(key);
8
+ return null !== item ? JSON.parse(item) : initialValue;
9
+ } catch (error) {
10
+ console.error(`Error reading localStorage key "${key}":`, error);
11
+ return initialValue;
12
+ }
13
+ });
14
+ const setValue = useCallback((value)=>{
15
+ try {
16
+ setStoredValue((currentValue)=>{
17
+ const valueToStore = value instanceof Function ? value(currentValue) : value;
18
+ if (void 0 !== globalThis.window) globalThis.window.localStorage.setItem(key, JSON.stringify(valueToStore));
19
+ return valueToStore;
20
+ });
21
+ } catch (error) {
22
+ console.error(`Error setting localStorage key "${key}":`, error);
23
+ }
24
+ }, [
25
+ key
26
+ ]);
27
+ useEffect(()=>{
28
+ if (void 0 === globalThis.window) return;
29
+ const handleStorageChange = (event)=>{
30
+ if (event.key !== key || event.storageArea !== globalThis.window.localStorage) return;
31
+ try {
32
+ const newValue = null !== event.newValue ? JSON.parse(event.newValue) : initialValue;
33
+ setStoredValue(newValue);
34
+ } catch (error) {
35
+ console.error(`Error parsing storage event for key "${key}":`, error);
36
+ }
37
+ };
38
+ globalThis.window.addEventListener("storage", handleStorageChange);
39
+ return ()=>{
40
+ globalThis.window.removeEventListener("storage", handleStorageChange);
41
+ };
42
+ }, [
43
+ key,
44
+ initialValue
45
+ ]);
46
+ return [
47
+ storedValue,
48
+ setValue
49
+ ];
50
+ }
51
+ export { useLocalStorage };
52
+
53
+ //# sourceMappingURL=useLocalStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/useLocalStorage.js","sources":["../../src/hooks/useLocalStorage.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\n/**\r\n * Persists state to localStorage with SSR safety and JSON serialization.\r\n *\r\n * @remarks\r\n * This hook synchronizes state with localStorage, allowing data to persist\r\n * across page refreshes and browser sessions. It is SSR-safe and returns the\r\n * initial value on the server until hydration completes. The hook also syncs\r\n * state across tabs/windows via the `storage` event and handles JSON parse\r\n * errors gracefully by falling back to the initial value.\r\n *\r\n * @typeParam T - The type of the value being stored.\r\n * @param key - The localStorage key to store the value under.\r\n * @param initialValue - The default value to use if no value is found in localStorage.\r\n * @returns A tuple containing the current value and a setter function.\r\n *\r\n * @example\r\n * ```tsx\r\n * function UserSettings() {\r\n * const [theme, setTheme] = useLocalStorage(\"theme\", \"light\");\r\n *\r\n * return (\r\n * <button onClick={() => setTheme(theme === \"light\" ? \"dark\" : \"light\")}>\r\n * Toggle theme (current: {theme})\r\n * </button>\r\n * );\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```tsx\r\n * function ShoppingCart() {\r\n * const [cart, setCart] = useLocalStorage<Product[]>(\"cart\", []);\r\n *\r\n * return (\r\n * <button onClick={() => setCart((prev) => [...prev, newProduct])}>\r\n * Add to cart ({cart.length} items)\r\n * </button>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport function useLocalStorage<T>(key: string, initialValue: T): [T, (value: T | ((prev: T) => T)) => void] {\r\n const [storedValue, setStoredValue] = React.useState<T>(() => {\r\n // SSR safety: return initial value on server\r\n if (typeof globalThis.window === \"undefined\") {\r\n return initialValue;\r\n }\r\n\r\n try {\r\n const item = globalThis.window.localStorage.getItem(key);\r\n\r\n return item !== null ? (JSON.parse(item) as T) : initialValue;\r\n } catch (error) {\r\n console.error(`Error reading localStorage key \"${key}\":`, error);\r\n\r\n return initialValue;\r\n }\r\n });\r\n\r\n const setValue = React.useCallback(\r\n (value: T | ((prev: T) => T)) => {\r\n try {\r\n setStoredValue((currentValue) => {\r\n const valueToStore = value instanceof Function ? value(currentValue) : value;\r\n\r\n if (typeof globalThis.window !== \"undefined\") {\r\n globalThis.window.localStorage.setItem(key, JSON.stringify(valueToStore));\r\n }\r\n\r\n return valueToStore;\r\n });\r\n } catch (error) {\r\n console.error(`Error setting localStorage key \"${key}\":`, error);\r\n }\r\n },\r\n [key],\r\n );\r\n\r\n React.useEffect(() => {\r\n // SSR safety: window is not available on server\r\n if (typeof globalThis.window === \"undefined\") {\r\n return;\r\n }\r\n\r\n const handleStorageChange = (event: StorageEvent) => {\r\n if (event.key !== key || event.storageArea !== globalThis.window.localStorage) {\r\n return;\r\n }\r\n\r\n try {\r\n const newValue = event.newValue !== null ? (JSON.parse(event.newValue) as T) : initialValue;\r\n\r\n setStoredValue(newValue);\r\n } catch (error) {\r\n console.error(`Error parsing storage event for key \"${key}\":`, error);\r\n }\r\n };\r\n\r\n globalThis.window.addEventListener(\"storage\", handleStorageChange);\r\n\r\n return () => {\r\n globalThis.window.removeEventListener(\"storage\", handleStorageChange);\r\n };\r\n }, [key, initialValue]);\r\n\r\n return [storedValue, setValue];\r\n}\r\n"],"names":["useLocalStorage","key","initialValue","storedValue","setStoredValue","React","globalThis","item","JSON","error","console","setValue","value","currentValue","valueToStore","Function","handleStorageChange","event","newValue"],"mappings":";;AA6CO,SAASA,gBAAmBC,GAAW,EAAEC,YAAe;IAC7D,MAAM,CAACC,aAAaC,eAAe,GAAGC,SAAkB;QAEtD,IAAI,AAA6B,WAAtBC,WAAW,MAAM,EAC1B,OAAOJ;QAGT,IAAI;YACF,MAAMK,OAAOD,WAAW,MAAM,CAAC,YAAY,CAAC,OAAO,CAACL;YAEpD,OAAOM,AAAS,SAATA,OAAiBC,KAAK,KAAK,CAACD,QAAcL;QACnD,EAAE,OAAOO,OAAO;YACdC,QAAQ,KAAK,CAAC,CAAC,gCAAgC,EAAET,IAAI,EAAE,CAAC,EAAEQ;YAE1D,OAAOP;QACT;IACF;IAEA,MAAMS,WAAWN,YACf,CAACO;QACC,IAAI;YACFR,eAAe,CAACS;gBACd,MAAMC,eAAeF,iBAAiBG,WAAWH,MAAMC,gBAAgBD;gBAEvE,IAAI,AAA6B,WAAtBN,WAAW,MAAM,EAC1BA,WAAW,MAAM,CAAC,YAAY,CAAC,OAAO,CAACL,KAAKO,KAAK,SAAS,CAACM;gBAG7D,OAAOA;YACT;QACF,EAAE,OAAOL,OAAO;YACdC,QAAQ,KAAK,CAAC,CAAC,gCAAgC,EAAET,IAAI,EAAE,CAAC,EAAEQ;QAC5D;IACF,GACA;QAACR;KAAI;IAGPI,UAAgB;QAEd,IAAI,AAA6B,WAAtBC,WAAW,MAAM,EAC1B;QAGF,MAAMU,sBAAsB,CAACC;YAC3B,IAAIA,MAAM,GAAG,KAAKhB,OAAOgB,MAAM,WAAW,KAAKX,WAAW,MAAM,CAAC,YAAY,EAC3E;YAGF,IAAI;gBACF,MAAMY,WAAWD,AAAmB,SAAnBA,MAAM,QAAQ,GAAaT,KAAK,KAAK,CAACS,MAAM,QAAQ,IAAUf;gBAE/EE,eAAec;YACjB,EAAE,OAAOT,OAAO;gBACdC,QAAQ,KAAK,CAAC,CAAC,qCAAqC,EAAET,IAAI,EAAE,CAAC,EAAEQ;YACjE;QACF;QAEAH,WAAW,MAAM,CAAC,gBAAgB,CAAC,WAAWU;QAE9C,OAAO;YACLV,WAAW,MAAM,CAAC,mBAAmB,CAAC,WAAWU;QACnD;IACF,GAAG;QAACf;QAAKC;KAAa;IAEtB,OAAO;QAACC;QAAaQ;KAAS;AAChC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Subscribes to a CSS media query and returns whether it currently matches.
3
+ * SSR-safe — returns `false` on the server until hydration.
4
+ *
5
+ * @param query - A valid CSS media query string (e.g. `"(min-width: 768px)"`).
6
+ * @returns `true` when the media query matches, `false` otherwise.
7
+ *
8
+ * @example
9
+ * ```tsx
10
+ * const isWide = useMediaQuery("(min-width: 1024px)");
11
+ * ```
12
+ */
13
+ export declare function useMediaQuery(query: string): boolean;
14
+ //# sourceMappingURL=useMediaQuery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMediaQuery.d.ts","sourceRoot":"","sources":["../../src/hooks/useMediaQuery.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAiBpD"}
@@ -0,0 +1,20 @@
1
+ "use client";
2
+ import { useEffect, useState } from "react";
3
+ function useMediaQuery(query) {
4
+ const [matches, setMatches] = useState(false);
5
+ useEffect(()=>{
6
+ const mql = globalThis.window.matchMedia(query);
7
+ const onChange = (event)=>{
8
+ setMatches(event.matches);
9
+ };
10
+ setMatches(mql.matches);
11
+ mql.addEventListener("change", onChange);
12
+ return ()=>mql.removeEventListener("change", onChange);
13
+ }, [
14
+ query
15
+ ]);
16
+ return matches;
17
+ }
18
+ export { useMediaQuery };
19
+
20
+ //# sourceMappingURL=useMediaQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/useMediaQuery.js","sources":["../../src/hooks/useMediaQuery.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\n/**\r\n * Subscribes to a CSS media query and returns whether it currently matches.\r\n * SSR-safe — returns `false` on the server until hydration.\r\n *\r\n * @param query - A valid CSS media query string (e.g. `\"(min-width: 768px)\"`).\r\n * @returns `true` when the media query matches, `false` otherwise.\r\n *\r\n * @example\r\n * ```tsx\r\n * const isWide = useMediaQuery(\"(min-width: 1024px)\");\r\n * ```\r\n */\r\nexport function useMediaQuery(query: string): boolean {\r\n const [matches, setMatches] = React.useState(false);\r\n\r\n React.useEffect(() => {\r\n const mql = globalThis.window.matchMedia(query);\r\n const onChange = (event: MediaQueryListEvent) => {\r\n setMatches(event.matches);\r\n };\r\n\r\n // eslint-disable-next-line react-hooks-extra/no-direct-set-state-in-use-effect\r\n setMatches(mql.matches);\r\n mql.addEventListener(\"change\", onChange);\r\n\r\n return () => mql.removeEventListener(\"change\", onChange);\r\n }, [query]);\r\n\r\n return matches;\r\n}\r\n"],"names":["useMediaQuery","query","matches","setMatches","React","mql","globalThis","onChange","event"],"mappings":";;AAgBO,SAASA,cAAcC,KAAa;IACzC,MAAM,CAACC,SAASC,WAAW,GAAGC,SAAe;IAE7CA,UAAgB;QACd,MAAMC,MAAMC,WAAW,MAAM,CAAC,UAAU,CAACL;QACzC,MAAMM,WAAW,CAACC;YAChBL,WAAWK,MAAM,OAAO;QAC1B;QAGAL,WAAWE,IAAI,OAAO;QACtBA,IAAI,gBAAgB,CAAC,UAAUE;QAE/B,OAAO,IAAMF,IAAI,mBAAmB,CAAC,UAAUE;IACjD,GAAG;QAACN;KAAM;IAEV,OAAOC;AACT"}
@@ -0,0 +1,27 @@
1
+ import * as React from "react";
2
+ /**
3
+ * Merges multiple refs into a single callback ref.
4
+ *
5
+ * @remarks
6
+ * This hook is essential when you need to attach multiple refs to the same element,
7
+ * such as combining a forwarded ref with an internal ref for measurements or
8
+ * imperative operations. All provided refs will receive the same element instance.
9
+ *
10
+ * Supports all ref types: callback refs, mutable ref objects, and `null`/`undefined`.
11
+ *
12
+ * @typeParam T - The type of the element being referenced.
13
+ * @param refs - An array of refs to merge. Can include callback refs, ref objects, or undefined.
14
+ * @returns A callback ref that updates all provided refs.
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * const MyComponent = React.forwardRef<HTMLDivElement, Props>((props, forwardedRef) => {
19
+ * const internalRef = useRef<HTMLDivElement>(null);
20
+ * const mergedRef = useMergedRefs(forwardedRef, internalRef);
21
+ *
22
+ * return <div ref={mergedRef}>Content</div>;
23
+ * });
24
+ * ```
25
+ */
26
+ export declare function useMergedRefs<T>(...refs: Array<React.Ref<T> | undefined>): React.RefCallback<T>;
27
+ //# sourceMappingURL=useMergedRefs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMergedRefs.d.ts","sourceRoot":"","sources":["../../src/hooks/useMergedRefs.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAmB/F"}
@@ -0,0 +1,11 @@
1
+ "use client";
2
+ import { useCallback } from "react";
3
+ function useMergedRefs(...refs) {
4
+ return useCallback((element)=>{
5
+ for (const ref of refs)if (ref) if ("function" == typeof ref) ref(element);
6
+ else ref.current = element;
7
+ }, refs);
8
+ }
9
+ export { useMergedRefs };
10
+
11
+ //# sourceMappingURL=useMergedRefs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/useMergedRefs.js","sources":["../../src/hooks/useMergedRefs.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\n/**\r\n * Merges multiple refs into a single callback ref.\r\n *\r\n * @remarks\r\n * This hook is essential when you need to attach multiple refs to the same element,\r\n * such as combining a forwarded ref with an internal ref for measurements or\r\n * imperative operations. All provided refs will receive the same element instance.\r\n *\r\n * Supports all ref types: callback refs, mutable ref objects, and `null`/`undefined`.\r\n *\r\n * @typeParam T - The type of the element being referenced.\r\n * @param refs - An array of refs to merge. Can include callback refs, ref objects, or undefined.\r\n * @returns A callback ref that updates all provided refs.\r\n *\r\n * @example\r\n * ```tsx\r\n * const MyComponent = React.forwardRef<HTMLDivElement, Props>((props, forwardedRef) => {\r\n * const internalRef = useRef<HTMLDivElement>(null);\r\n * const mergedRef = useMergedRefs(forwardedRef, internalRef);\r\n *\r\n * return <div ref={mergedRef}>Content</div>;\r\n * });\r\n * ```\r\n */\r\nexport function useMergedRefs<T>(...refs: Array<React.Ref<T> | undefined>): React.RefCallback<T> {\r\n return React.useCallback(\r\n (element: T | null) => {\r\n for (const ref of refs) {\r\n if (!ref) {\r\n continue;\r\n }\r\n\r\n if (typeof ref === \"function\") {\r\n ref(element);\r\n } else {\r\n // Mutable ref object\r\n (ref as React.MutableRefObject<T | null>).current = element;\r\n }\r\n }\r\n },\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n refs,\r\n );\r\n}\r\n"],"names":["useMergedRefs","refs","React","element","ref"],"mappings":";;AA4BO,SAASA,cAAiB,GAAGC,IAAqC;IACvE,OAAOC,YACL,CAACC;QACC,KAAK,MAAMC,OAAOH,KAChB,IAAKG,KAIL,IAAI,AAAe,cAAf,OAAOA,KACTA,IAAID;aAGHC,IAAyC,OAAO,GAAGD;IAG1D,GAEAF;AAEJ"}
@@ -0,0 +1,32 @@
1
+ import * as React from "react";
2
+ /**
3
+ * Detects clicks or touch events outside a referenced element.
4
+ *
5
+ * @remarks
6
+ * This hook is commonly used for implementing dropdown menus, modals, and popovers
7
+ * that should close when the user interacts outside their boundaries. It listens
8
+ * to both mouse and touch events to ensure broad device compatibility.
9
+ *
10
+ * The event listeners are automatically cleaned up when the component unmounts.
11
+ *
12
+ * @param ref - A ref object pointing to the element to monitor.
13
+ * @param handler - Callback invoked when a click or touch occurs outside the element.
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * function Dropdown() {
18
+ * const [isOpen, setIsOpen] = useState(false);
19
+ * const dropdownRef = useRef<HTMLDivElement>(null);
20
+ *
21
+ * useOnClickOutside(dropdownRef, () => setIsOpen(false));
22
+ *
23
+ * return (
24
+ * <div ref={dropdownRef}>
25
+ * {isOpen && <DropdownMenu />}
26
+ * </div>
27
+ * );
28
+ * }
29
+ * ```
30
+ */
31
+ export declare function useOnClickOutside(ref: React.RefObject<HTMLElement | null>, handler: (event: MouseEvent | TouchEvent) => void): void;
32
+ //# sourceMappingURL=useOnClickOutside.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOnClickOutside.d.ts","sourceRoot":"","sources":["../../src/hooks/useOnClickOutside.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,KAAK,IAAI,GAAG,IAAI,CAqBnI"}
@@ -0,0 +1,23 @@
1
+ "use client";
2
+ import { useEffect } from "react";
3
+ function useOnClickOutside(ref, handler) {
4
+ useEffect(()=>{
5
+ const listener = (event)=>{
6
+ const element = ref.current;
7
+ if (!element || element.contains(event.target)) return;
8
+ handler(event);
9
+ };
10
+ globalThis.document.addEventListener("mousedown", listener);
11
+ globalThis.document.addEventListener("touchstart", listener);
12
+ return ()=>{
13
+ globalThis.document.removeEventListener("mousedown", listener);
14
+ globalThis.document.removeEventListener("touchstart", listener);
15
+ };
16
+ }, [
17
+ ref,
18
+ handler
19
+ ]);
20
+ }
21
+ export { useOnClickOutside };
22
+
23
+ //# sourceMappingURL=useOnClickOutside.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/useOnClickOutside.js","sources":["../../src/hooks/useOnClickOutside.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\n/**\r\n * Detects clicks or touch events outside a referenced element.\r\n *\r\n * @remarks\r\n * This hook is commonly used for implementing dropdown menus, modals, and popovers\r\n * that should close when the user interacts outside their boundaries. It listens\r\n * to both mouse and touch events to ensure broad device compatibility.\r\n *\r\n * The event listeners are automatically cleaned up when the component unmounts.\r\n *\r\n * @param ref - A ref object pointing to the element to monitor.\r\n * @param handler - Callback invoked when a click or touch occurs outside the element.\r\n *\r\n * @example\r\n * ```tsx\r\n * function Dropdown() {\r\n * const [isOpen, setIsOpen] = useState(false);\r\n * const dropdownRef = useRef<HTMLDivElement>(null);\r\n *\r\n * useOnClickOutside(dropdownRef, () => setIsOpen(false));\r\n *\r\n * return (\r\n * <div ref={dropdownRef}>\r\n * {isOpen && <DropdownMenu />}\r\n * </div>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport function useOnClickOutside(ref: React.RefObject<HTMLElement | null>, handler: (event: MouseEvent | TouchEvent) => void): void {\r\n React.useEffect(() => {\r\n const listener = (event: MouseEvent | TouchEvent) => {\r\n const element = ref.current;\r\n\r\n // Do nothing if clicking ref's element or descendent elements\r\n if (!element || element.contains(event.target as Node)) {\r\n return;\r\n }\r\n\r\n handler(event);\r\n };\r\n\r\n globalThis.document.addEventListener(\"mousedown\", listener);\r\n globalThis.document.addEventListener(\"touchstart\", listener);\r\n\r\n return () => {\r\n globalThis.document.removeEventListener(\"mousedown\", listener);\r\n globalThis.document.removeEventListener(\"touchstart\", listener);\r\n };\r\n }, [ref, handler]);\r\n}\r\n"],"names":["useOnClickOutside","ref","handler","React","listener","event","element","globalThis"],"mappings":";;AAiCO,SAASA,kBAAkBC,GAAwC,EAAEC,OAAiD;IAC3HC,UAAgB;QACd,MAAMC,WAAW,CAACC;YAChB,MAAMC,UAAUL,IAAI,OAAO;YAG3B,IAAI,CAACK,WAAWA,QAAQ,QAAQ,CAACD,MAAM,MAAM,GAC3C;YAGFH,QAAQG;QACV;QAEAE,WAAW,QAAQ,CAAC,gBAAgB,CAAC,aAAaH;QAClDG,WAAW,QAAQ,CAAC,gBAAgB,CAAC,cAAcH;QAEnD,OAAO;YACLG,WAAW,QAAQ,CAAC,mBAAmB,CAAC,aAAaH;YACrDG,WAAW,QAAQ,CAAC,mBAAmB,CAAC,cAAcH;QACxD;IACF,GAAG;QAACH;QAAKC;KAAQ;AACnB"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Returns whether the user prefers higher contrast.
3
+ *
4
+ * @remarks
5
+ * Wraps a `prefers-contrast` media query in a semantic accessibility hook so components
6
+ * can adapt borders, focus states, and surface styling without repeating query strings.
7
+ *
8
+ * @returns `true` when `prefers-contrast: more` is active.
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * const highContrast = usePrefersContrast();
13
+ * ```
14
+ *
15
+ * @see {@link useMediaQuery} — Shared media-query subscription hook.
16
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-contrast | MDN prefers-contrast}
17
+ */
18
+ export declare function usePrefersContrast(): boolean;
19
+ //# sourceMappingURL=usePrefersContrast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePrefersContrast.d.ts","sourceRoot":"","sources":["../../src/hooks/usePrefersContrast.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C"}
@@ -0,0 +1,8 @@
1
+ "use client";
2
+ import { useMediaQuery } from "./useMediaQuery.js";
3
+ function usePrefersContrast() {
4
+ return useMediaQuery("(prefers-contrast: more)");
5
+ }
6
+ export { usePrefersContrast };
7
+
8
+ //# sourceMappingURL=usePrefersContrast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/usePrefersContrast.js","sources":["../../src/hooks/usePrefersContrast.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {useMediaQuery} from \"./useMediaQuery\";\r\n\r\n/**\r\n * Returns whether the user prefers higher contrast.\r\n *\r\n * @remarks\r\n * Wraps a `prefers-contrast` media query in a semantic accessibility hook so components\r\n * can adapt borders, focus states, and surface styling without repeating query strings.\r\n *\r\n * @returns `true` when `prefers-contrast: more` is active.\r\n *\r\n * @example\r\n * ```tsx\r\n * const highContrast = usePrefersContrast();\r\n * ```\r\n *\r\n * @see {@link useMediaQuery} — Shared media-query subscription hook.\r\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-contrast | MDN prefers-contrast}\r\n */\r\nexport function usePrefersContrast(): boolean {\r\n return useMediaQuery(\"(prefers-contrast: more)\");\r\n}\r\n"],"names":["usePrefersContrast","useMediaQuery"],"mappings":";;AAqBO,SAASA;IACd,OAAOC,cAAc;AACvB"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Tracks and returns the previous value of a state or prop.
3
+ *
4
+ * @remarks
5
+ * This hook stores the value from the previous render cycle, allowing you to compare
6
+ * current and previous values. On the initial render, it returns `undefined` since
7
+ * there is no previous value yet.
8
+ *
9
+ * Useful for detecting changes, implementing undo functionality, or creating
10
+ * animations based on value transitions.
11
+ *
12
+ * @typeParam T - The type of the value being tracked.
13
+ * @param value - The current value to track.
14
+ * @returns The value from the previous render, or `undefined` on the first render.
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * function Counter() {
19
+ * const [count, setCount] = useState(0);
20
+ * const previousCount = usePrevious(count);
21
+ *
22
+ * return (
23
+ * <div>
24
+ * <p>Current: {count}</p>
25
+ * <p>Previous: {previousCount ?? "N/A"}</p>
26
+ * <button onClick={() => setCount(count + 1)}>Increment</button>
27
+ * </div>
28
+ * );
29
+ * }
30
+ * ```
31
+ */
32
+ export declare function usePrevious<T>(value: T): T | undefined;
33
+ //# sourceMappingURL=usePrevious.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePrevious.d.ts","sourceRoot":"","sources":["../../src/hooks/usePrevious.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAQtD"}
@@ -0,0 +1,14 @@
1
+ "use client";
2
+ import { useEffect, useRef } from "react";
3
+ function usePrevious(value) {
4
+ const ref = useRef(void 0);
5
+ useEffect(()=>{
6
+ ref.current = value;
7
+ }, [
8
+ value
9
+ ]);
10
+ return ref.current;
11
+ }
12
+ export { usePrevious };
13
+
14
+ //# sourceMappingURL=usePrevious.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/usePrevious.js","sources":["../../src/hooks/usePrevious.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\n/**\r\n * Tracks and returns the previous value of a state or prop.\r\n *\r\n * @remarks\r\n * This hook stores the value from the previous render cycle, allowing you to compare\r\n * current and previous values. On the initial render, it returns `undefined` since\r\n * there is no previous value yet.\r\n *\r\n * Useful for detecting changes, implementing undo functionality, or creating\r\n * animations based on value transitions.\r\n *\r\n * @typeParam T - The type of the value being tracked.\r\n * @param value - The current value to track.\r\n * @returns The value from the previous render, or `undefined` on the first render.\r\n *\r\n * @example\r\n * ```tsx\r\n * function Counter() {\r\n * const [count, setCount] = useState(0);\r\n * const previousCount = usePrevious(count);\r\n *\r\n * return (\r\n * <div>\r\n * <p>Current: {count}</p>\r\n * <p>Previous: {previousCount ?? \"N/A\"}</p>\r\n * <button onClick={() => setCount(count + 1)}>Increment</button>\r\n * </div>\r\n * );\r\n * }\r\n * ```\r\n */\r\nexport function usePrevious<T>(value: T): T | undefined {\r\n const ref = React.useRef<T | undefined>(undefined);\r\n\r\n React.useEffect(() => {\r\n ref.current = value;\r\n }, [value]);\r\n\r\n return ref.current;\r\n}\r\n"],"names":["usePrevious","value","ref","React","undefined"],"mappings":";;AAmCO,SAASA,YAAeC,KAAQ;IACrC,MAAMC,MAAMC,OAA4BC;IAExCD,UAAgB;QACdD,IAAI,OAAO,GAAGD;IAChB,GAAG;QAACA;KAAM;IAEV,OAAOC,IAAI,OAAO;AACpB"}