@zentauri-ui/zentauri-components 1.4.6 → 1.4.7

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 (682) hide show
  1. package/README.md +136 -90
  2. package/cli/index.mjs +45 -26
  3. package/cli/registry.json +9 -1
  4. package/cli/rewrite-imports.mjs +8 -3
  5. package/dist/charts/area/Area.d.ts +6 -0
  6. package/dist/charts/area/Area.d.ts.map +1 -0
  7. package/dist/charts/area/index.d.ts +4 -0
  8. package/dist/charts/area/index.d.ts.map +1 -0
  9. package/dist/charts/area.js +119 -0
  10. package/dist/charts/area.js.map +1 -0
  11. package/dist/charts/area.mjs +106 -0
  12. package/dist/charts/area.mjs.map +1 -0
  13. package/dist/charts/bar/Bar.d.ts +6 -0
  14. package/dist/charts/bar/Bar.d.ts.map +1 -0
  15. package/dist/charts/bar/index.d.ts +4 -0
  16. package/dist/charts/bar/index.d.ts.map +1 -0
  17. package/dist/charts/bar.js +110 -0
  18. package/dist/charts/bar.js.map +1 -0
  19. package/dist/charts/bar.mjs +97 -0
  20. package/dist/charts/bar.mjs.map +1 -0
  21. package/dist/charts/bubble/Bubble.d.ts +6 -0
  22. package/dist/charts/bubble/Bubble.d.ts.map +1 -0
  23. package/dist/charts/bubble/index.d.ts +4 -0
  24. package/dist/charts/bubble/index.d.ts.map +1 -0
  25. package/dist/charts/bubble.js +122 -0
  26. package/dist/charts/bubble.js.map +1 -0
  27. package/dist/charts/bubble.mjs +109 -0
  28. package/dist/charts/bubble.mjs.map +1 -0
  29. package/dist/charts/line/Line.d.ts +6 -0
  30. package/dist/charts/line/Line.d.ts.map +1 -0
  31. package/dist/charts/line/index.d.ts +4 -0
  32. package/dist/charts/line/index.d.ts.map +1 -0
  33. package/dist/charts/line.js +113 -0
  34. package/dist/charts/line.js.map +1 -0
  35. package/dist/charts/line.mjs +100 -0
  36. package/dist/charts/line.mjs.map +1 -0
  37. package/dist/charts/shared/chart-frame.d.ts +32 -0
  38. package/dist/charts/shared/chart-frame.d.ts.map +1 -0
  39. package/dist/charts/shared/colors.d.ts +43 -0
  40. package/dist/charts/shared/colors.d.ts.map +1 -0
  41. package/dist/charts/shared/types.d.ts +43 -0
  42. package/dist/charts/shared/types.d.ts.map +1 -0
  43. package/dist/charts/shared/variants.d.ts +93 -0
  44. package/dist/charts/shared/variants.d.ts.map +1 -0
  45. package/dist/{chunk-IXDJ3IPG.mjs → chunk-2BAMNRAL.mjs} +40 -32
  46. package/dist/chunk-2BAMNRAL.mjs.map +1 -0
  47. package/dist/{chunk-JE3PD5ZA.js → chunk-2VUMVDR3.js} +8 -8
  48. package/dist/{chunk-JE3PD5ZA.js.map → chunk-2VUMVDR3.js.map} +1 -1
  49. package/dist/{chunk-DFEZH7TC.mjs → chunk-4D54YOL6.mjs} +2 -2
  50. package/dist/{chunk-DFEZH7TC.mjs.map → chunk-4D54YOL6.mjs.map} +1 -1
  51. package/dist/{chunk-BORK3BJO.mjs → chunk-5TV7EL3H.mjs} +19 -19
  52. package/dist/chunk-5TV7EL3H.mjs.map +1 -0
  53. package/dist/{chunk-BSWYZTYK.js → chunk-7DCFVPWN.js} +2 -2
  54. package/dist/chunk-7DCFVPWN.js.map +1 -0
  55. package/dist/{chunk-5QB2KNZQ.js → chunk-7TLKLMBM.js} +11 -9
  56. package/dist/chunk-7TLKLMBM.js.map +1 -0
  57. package/dist/{chunk-2P3UU2J3.mjs → chunk-A6KMZ5ZS.mjs} +12 -12
  58. package/dist/chunk-A6KMZ5ZS.mjs.map +1 -0
  59. package/dist/{chunk-U4YQCAXW.js → chunk-AD2LA3XN.js} +18 -18
  60. package/dist/chunk-AD2LA3XN.js.map +1 -0
  61. package/dist/{chunk-XLAFQ24R.js → chunk-AUGLZ3AN.js} +49 -41
  62. package/dist/chunk-AUGLZ3AN.js.map +1 -0
  63. package/dist/{chunk-OJ67PZ6N.js → chunk-BCZIYH53.js} +8 -8
  64. package/dist/{chunk-OJ67PZ6N.js.map → chunk-BCZIYH53.js.map} +1 -1
  65. package/dist/{chunk-UBFKTC2P.mjs → chunk-C5L465FW.mjs} +12 -12
  66. package/dist/chunk-C5L465FW.mjs.map +1 -0
  67. package/dist/chunk-CIN5JDN4.js +174 -0
  68. package/dist/chunk-CIN5JDN4.js.map +1 -0
  69. package/dist/{chunk-3OR47XMY.js → chunk-E4FZY7O2.js} +52 -33
  70. package/dist/chunk-E4FZY7O2.js.map +1 -0
  71. package/dist/{chunk-LVUPECBT.mjs → chunk-FQBMIZH2.mjs} +12 -12
  72. package/dist/chunk-FQBMIZH2.mjs.map +1 -0
  73. package/dist/{chunk-RDSPHBHK.mjs → chunk-G3LEYBRV.mjs} +50 -7
  74. package/dist/chunk-G3LEYBRV.mjs.map +1 -0
  75. package/dist/chunk-GBWGVNDA.js +160 -0
  76. package/dist/chunk-GBWGVNDA.js.map +1 -0
  77. package/dist/{chunk-XWM2S6VV.mjs → chunk-I6GR234Z.mjs} +22 -20
  78. package/dist/chunk-I6GR234Z.mjs.map +1 -0
  79. package/dist/{chunk-UXGHUBNJ.mjs → chunk-INMNX3HQ.mjs} +13 -13
  80. package/dist/{chunk-UXGHUBNJ.mjs.map → chunk-INMNX3HQ.mjs.map} +1 -1
  81. package/dist/chunk-IQZROQNJ.mjs +165 -0
  82. package/dist/chunk-IQZROQNJ.mjs.map +1 -0
  83. package/dist/{chunk-PGH27VTL.mjs → chunk-JBAUEGYD.mjs} +40 -32
  84. package/dist/chunk-JBAUEGYD.mjs.map +1 -0
  85. package/dist/{chunk-WZKGRU3U.js → chunk-JUDMPOCI.js} +103 -38
  86. package/dist/chunk-JUDMPOCI.js.map +1 -0
  87. package/dist/chunk-K6YI4FJO.mjs +158 -0
  88. package/dist/chunk-K6YI4FJO.mjs.map +1 -0
  89. package/dist/{chunk-WP7GYBRI.js → chunk-KC5LEZ6J.js} +2 -2
  90. package/dist/chunk-KC5LEZ6J.js.map +1 -0
  91. package/dist/{chunk-BVXTOEBI.mjs → chunk-LN77JJTY.mjs} +45 -26
  92. package/dist/chunk-LN77JJTY.mjs.map +1 -0
  93. package/dist/{chunk-E3DZNJAD.js → chunk-MCOQHXRW.js} +23 -21
  94. package/dist/chunk-MCOQHXRW.js.map +1 -0
  95. package/dist/{chunk-FLILFCQE.mjs → chunk-MTLLJFUI.mjs} +7 -8
  96. package/dist/chunk-MTLLJFUI.mjs.map +1 -0
  97. package/dist/{chunk-6I7X5BF2.js → chunk-N2OAI2HN.js} +18 -18
  98. package/dist/chunk-N2OAI2HN.js.map +1 -0
  99. package/dist/{chunk-BITDSQMR.js → chunk-OB4KJZK2.js} +19 -19
  100. package/dist/chunk-OB4KJZK2.js.map +1 -0
  101. package/dist/{chunk-PCK6LX3K.js → chunk-OLEMP2HL.js} +19 -19
  102. package/dist/{chunk-PCK6LX3K.js.map → chunk-OLEMP2HL.js.map} +1 -1
  103. package/dist/{chunk-2PQEXQVR.js → chunk-PWL5WD34.js} +76 -27
  104. package/dist/chunk-PWL5WD34.js.map +1 -0
  105. package/dist/{chunk-N4NO3SYL.js → chunk-Q5B44QW7.js} +48 -40
  106. package/dist/chunk-Q5B44QW7.js.map +1 -0
  107. package/dist/{chunk-FT2LMA66.mjs → chunk-QADZK5R7.mjs} +2 -2
  108. package/dist/chunk-QADZK5R7.mjs.map +1 -0
  109. package/dist/{chunk-WDCIZHXY.mjs → chunk-QZTEFGZF.mjs} +6 -4
  110. package/dist/chunk-QZTEFGZF.mjs.map +1 -0
  111. package/dist/{chunk-UOFTZKMM.js → chunk-S7WKFNPT.js} +18 -18
  112. package/dist/chunk-S7WKFNPT.js.map +1 -0
  113. package/dist/{chunk-XIXF7UVM.mjs → chunk-TINHLHCN.mjs} +12 -12
  114. package/dist/chunk-TINHLHCN.mjs.map +1 -0
  115. package/dist/{chunk-7HL3A4YF.mjs → chunk-TJUNN2PT.mjs} +73 -24
  116. package/dist/chunk-TJUNN2PT.mjs.map +1 -0
  117. package/dist/{chunk-4B7KGBQB.js → chunk-UWA23DUC.js} +12 -13
  118. package/dist/chunk-UWA23DUC.js.map +1 -0
  119. package/dist/{chunk-CY5BQKRZ.mjs → chunk-VXDEPZKH.mjs} +2 -2
  120. package/dist/chunk-VXDEPZKH.mjs.map +1 -0
  121. package/dist/{chunk-C2FCPQTO.js → chunk-Y745GQR2.js} +16 -16
  122. package/dist/chunk-Y745GQR2.js.map +1 -0
  123. package/dist/{chunk-TZ2JVWTZ.mjs → chunk-YNBJAFI2.mjs} +3 -3
  124. package/dist/{chunk-TZ2JVWTZ.mjs.map → chunk-YNBJAFI2.mjs.map} +1 -1
  125. package/dist/{chunk-P5HUBXUX.js → chunk-YTRGRHEB.js} +55 -12
  126. package/dist/chunk-YTRGRHEB.js.map +1 -0
  127. package/dist/{chunk-YNCD6TKE.mjs → chunk-ZBBFOMSJ.mjs} +103 -38
  128. package/dist/chunk-ZBBFOMSJ.mjs.map +1 -0
  129. package/dist/{chunk-UOZYPWDZ.js → chunk-ZS5756ZC.js} +2 -2
  130. package/dist/{chunk-UOZYPWDZ.js.map → chunk-ZS5756ZC.js.map} +1 -1
  131. package/dist/{chunk-W6PRMYUC.mjs → chunk-ZYZJ74XB.mjs} +3 -3
  132. package/dist/{chunk-W6PRMYUC.mjs.map → chunk-ZYZJ74XB.mjs.map} +1 -1
  133. package/dist/hooks/index.d.ts +2 -2
  134. package/dist/hooks/index.d.ts.map +1 -1
  135. package/dist/hooks/useClickOutside/useClickOutside.d.ts.map +1 -1
  136. package/dist/hooks/useClickOutside.js +2 -2
  137. package/dist/hooks/useClickOutside.mjs +1 -1
  138. package/dist/hooks/useClipboard/useClipboard.d.ts.map +1 -1
  139. package/dist/hooks/useClipboard.js.map +1 -1
  140. package/dist/hooks/useClipboard.mjs.map +1 -1
  141. package/dist/hooks/useFocusManagement/useFocusManagement.d.ts +5 -14
  142. package/dist/hooks/useFocusManagement/useFocusManagement.d.ts.map +1 -1
  143. package/dist/hooks/useFocusManagement.js +2 -2
  144. package/dist/hooks/useFocusManagement.mjs +1 -1
  145. package/dist/hooks/useLocalStorage/index.d.ts +1 -1
  146. package/dist/hooks/useLocalStorage/index.d.ts.map +1 -1
  147. package/dist/hooks/useLocalStorage.js +1 -3
  148. package/dist/hooks/useLocalStorage.js.map +1 -1
  149. package/dist/hooks/useLocalStorage.mjs +1 -3
  150. package/dist/hooks/useLocalStorage.mjs.map +1 -1
  151. package/dist/hooks/useMediaQuery/useMediaQuery.d.ts.map +1 -1
  152. package/dist/hooks/useMediaQuery.js +2 -2
  153. package/dist/hooks/useMediaQuery.mjs +1 -1
  154. package/dist/hooks/usePagination.js +4 -4
  155. package/dist/hooks/usePagination.mjs +2 -2
  156. package/dist/hooks/usePrefersColorScheme.js +2 -2
  157. package/dist/hooks/usePrefersColorScheme.mjs +1 -1
  158. package/dist/hooks/usePrefersReducedMotion.js +2 -2
  159. package/dist/hooks/usePrefersReducedMotion.mjs +1 -1
  160. package/dist/hooks/useResizeObserver/index.d.ts +1 -1
  161. package/dist/hooks/useResizeObserver/index.d.ts.map +1 -1
  162. package/dist/hooks/useSessionStorage/useSessionStorage.d.ts.map +1 -1
  163. package/dist/hooks/useSessionStorage.js.map +1 -1
  164. package/dist/hooks/useSessionStorage.mjs.map +1 -1
  165. package/dist/hooks/useThrottledCallback/useThrottledCallback.d.ts.map +1 -1
  166. package/dist/hooks/useThrottledCallback.js.map +1 -1
  167. package/dist/hooks/useThrottledCallback.mjs.map +1 -1
  168. package/dist/hooks/useWindowSize/useWindowSize.d.ts.map +1 -1
  169. package/dist/hooks/useWindowSize.js +4 -1
  170. package/dist/hooks/useWindowSize.js.map +1 -1
  171. package/dist/hooks/useWindowSize.mjs +4 -1
  172. package/dist/hooks/useWindowSize.mjs.map +1 -1
  173. package/dist/hooks/utils.js +5 -5
  174. package/dist/hooks/utils.mjs +1 -1
  175. package/dist/lib/utils.d.ts.map +1 -1
  176. package/dist/ui/accordion/accordion.d.ts.map +1 -1
  177. package/dist/ui/accordion/animated/accordion-content-animated.d.ts.map +1 -1
  178. package/dist/ui/accordion/animated/index.d.ts +1 -1
  179. package/dist/ui/accordion/animated/index.d.ts.map +1 -1
  180. package/dist/ui/accordion/animated/types.d.ts.map +1 -1
  181. package/dist/ui/accordion/animated.js +8 -11
  182. package/dist/ui/accordion/animated.js.map +1 -1
  183. package/dist/ui/accordion/animated.mjs +4 -7
  184. package/dist/ui/accordion/animated.mjs.map +1 -1
  185. package/dist/ui/accordion/variants.d.ts +2 -2
  186. package/dist/ui/accordion.js +10 -10
  187. package/dist/ui/accordion.js.map +1 -1
  188. package/dist/ui/accordion.mjs +3 -3
  189. package/dist/ui/accordion.mjs.map +1 -1
  190. package/dist/ui/alert/alert-base.d.ts.map +1 -1
  191. package/dist/ui/alert/alert.d.ts.map +1 -1
  192. package/dist/ui/alert/animated/index.d.ts.map +1 -1
  193. package/dist/ui/alert/animated.js +3 -3
  194. package/dist/ui/alert/animated.mjs +2 -2
  195. package/dist/ui/alert/types.d.ts.map +1 -1
  196. package/dist/ui/alert/variants.d.ts +1 -1
  197. package/dist/ui/alert.js +11 -11
  198. package/dist/ui/alert.js.map +1 -1
  199. package/dist/ui/alert.mjs +3 -3
  200. package/dist/ui/alert.mjs.map +1 -1
  201. package/dist/ui/avatar/animated/index.d.ts +1 -1
  202. package/dist/ui/avatar/animated/index.d.ts.map +1 -1
  203. package/dist/ui/avatar/animated.js +6 -6
  204. package/dist/ui/avatar/animated.mjs +3 -3
  205. package/dist/ui/avatar/avatar-base.d.ts.map +1 -1
  206. package/dist/ui/avatar/avatar.d.ts.map +1 -1
  207. package/dist/ui/avatar/variants.d.ts +1 -1
  208. package/dist/ui/avatar/variants.d.ts.map +1 -1
  209. package/dist/ui/avatar.js +10 -10
  210. package/dist/ui/avatar.js.map +1 -1
  211. package/dist/ui/avatar.mjs +3 -3
  212. package/dist/ui/avatar.mjs.map +1 -1
  213. package/dist/ui/badge/animated/index.d.ts +1 -1
  214. package/dist/ui/badge/animated/index.d.ts.map +1 -1
  215. package/dist/ui/badge/animated/types.d.ts.map +1 -1
  216. package/dist/ui/badge/animated.js +3 -3
  217. package/dist/ui/badge/animated.mjs +2 -2
  218. package/dist/ui/badge/badge-base.d.ts +1 -1
  219. package/dist/ui/badge/badge-base.d.ts.map +1 -1
  220. package/dist/ui/badge/types.d.ts +1 -0
  221. package/dist/ui/badge/types.d.ts.map +1 -1
  222. package/dist/ui/badge/variants.d.ts +18 -18
  223. package/dist/ui/badge/variants.d.ts.map +1 -1
  224. package/dist/ui/badge.js +5 -5
  225. package/dist/ui/badge.mjs +3 -3
  226. package/dist/ui/breadcrumb/breadcrumb.d.ts.map +1 -1
  227. package/dist/ui/breadcrumb/types.d.ts.map +1 -1
  228. package/dist/ui/breadcrumb/variants.d.ts +1 -1
  229. package/dist/ui/breadcrumb/variants.d.ts.map +1 -1
  230. package/dist/ui/breadcrumb.js +47 -43
  231. package/dist/ui/breadcrumb.js.map +1 -1
  232. package/dist/ui/breadcrumb.mjs +43 -39
  233. package/dist/ui/breadcrumb.mjs.map +1 -1
  234. package/dist/ui/buttons/animated/index.d.ts +1 -1
  235. package/dist/ui/buttons/animated/index.d.ts.map +1 -1
  236. package/dist/ui/buttons/animated/types.d.ts.map +1 -1
  237. package/dist/ui/buttons/animated.js +4 -4
  238. package/dist/ui/buttons/animated.mjs +2 -2
  239. package/dist/ui/buttons/types.d.ts.map +1 -1
  240. package/dist/ui/buttons/variants.d.ts +2 -2
  241. package/dist/ui/buttons.js +5 -5
  242. package/dist/ui/buttons.mjs +3 -3
  243. package/dist/ui/card/animated.js +8 -8
  244. package/dist/ui/card/animated.mjs +3 -3
  245. package/dist/ui/card/card-base.d.ts.map +1 -1
  246. package/dist/ui/card/card.d.ts.map +1 -1
  247. package/dist/ui/card/index.d.ts +2 -2
  248. package/dist/ui/card/index.d.ts.map +1 -1
  249. package/dist/ui/card/variants.d.ts +1 -1
  250. package/dist/ui/card.js +13 -13
  251. package/dist/ui/card.js.map +1 -1
  252. package/dist/ui/card.mjs +3 -3
  253. package/dist/ui/card.mjs.map +1 -1
  254. package/dist/ui/divider/animated/index.d.ts +1 -1
  255. package/dist/ui/divider/animated/index.d.ts.map +1 -1
  256. package/dist/ui/divider/animated/types.d.ts.map +1 -1
  257. package/dist/ui/divider/animated.js +3 -3
  258. package/dist/ui/divider/animated.mjs +2 -2
  259. package/dist/ui/divider/divider-base.d.ts.map +1 -1
  260. package/dist/ui/divider/variants.d.ts +2 -2
  261. package/dist/ui/divider.js +7 -7
  262. package/dist/ui/divider.mjs +3 -3
  263. package/dist/ui/drawer/animated/drawer-content-animated.d.ts.map +1 -1
  264. package/dist/ui/drawer/animated/index.d.ts +1 -1
  265. package/dist/ui/drawer/animated/index.d.ts.map +1 -1
  266. package/dist/ui/drawer/animated.js +19 -20
  267. package/dist/ui/drawer/animated.js.map +1 -1
  268. package/dist/ui/drawer/animated.mjs +9 -10
  269. package/dist/ui/drawer/animated.mjs.map +1 -1
  270. package/dist/ui/drawer/drawer-base.d.ts +1 -1
  271. package/dist/ui/drawer/drawer-base.d.ts.map +1 -1
  272. package/dist/ui/drawer/types.d.ts +1 -0
  273. package/dist/ui/drawer/types.d.ts.map +1 -1
  274. package/dist/ui/drawer/variants.d.ts +3 -3
  275. package/dist/ui/drawer.js +13 -13
  276. package/dist/ui/drawer.mjs +3 -3
  277. package/dist/ui/dropdown/dropdown.d.ts +1 -1
  278. package/dist/ui/dropdown/dropdown.d.ts.map +1 -1
  279. package/dist/ui/dropdown/types.d.ts +1 -0
  280. package/dist/ui/dropdown/types.d.ts.map +1 -1
  281. package/dist/ui/dropdown/variants.d.ts +4 -4
  282. package/dist/ui/dropdown.js +49 -31
  283. package/dist/ui/dropdown.js.map +1 -1
  284. package/dist/ui/dropdown.mjs +46 -28
  285. package/dist/ui/dropdown.mjs.map +1 -1
  286. package/dist/ui/empty-state/animated/empty-state-animated.d.ts.map +1 -1
  287. package/dist/ui/empty-state/animated/index.d.ts +2 -2
  288. package/dist/ui/empty-state/animated/index.d.ts.map +1 -1
  289. package/dist/ui/empty-state/animated.js +3 -3
  290. package/dist/ui/empty-state/animated.js.map +1 -1
  291. package/dist/ui/empty-state/animated.mjs +2 -2
  292. package/dist/ui/empty-state/animated.mjs.map +1 -1
  293. package/dist/ui/empty-state/empty-state-base.d.ts.map +1 -1
  294. package/dist/ui/empty-state/index.d.ts +1 -1
  295. package/dist/ui/empty-state/index.d.ts.map +1 -1
  296. package/dist/ui/empty-state/types.d.ts +1 -0
  297. package/dist/ui/empty-state/types.d.ts.map +1 -1
  298. package/dist/ui/empty-state.js +11 -11
  299. package/dist/ui/empty-state.mjs +3 -3
  300. package/dist/ui/file-upload/file-upload.d.ts.map +1 -1
  301. package/dist/ui/file-upload/variants.d.ts +1 -1
  302. package/dist/ui/file-upload/variants.d.ts.map +1 -1
  303. package/dist/ui/file-upload.js +4 -6
  304. package/dist/ui/file-upload.js.map +1 -1
  305. package/dist/ui/file-upload.mjs +2 -4
  306. package/dist/ui/file-upload.mjs.map +1 -1
  307. package/dist/ui/inputs/animated/index.d.ts +1 -1
  308. package/dist/ui/inputs/animated/index.d.ts.map +1 -1
  309. package/dist/ui/inputs/animated.js +3 -3
  310. package/dist/ui/inputs/animated.mjs +1 -1
  311. package/dist/ui/inputs/input-base.d.ts.map +1 -1
  312. package/dist/ui/inputs/types.d.ts +3 -1
  313. package/dist/ui/inputs/types.d.ts.map +1 -1
  314. package/dist/ui/inputs/variants.d.ts +2 -2
  315. package/dist/ui/inputs.js +49 -5
  316. package/dist/ui/inputs.js.map +1 -1
  317. package/dist/ui/inputs.mjs +47 -3
  318. package/dist/ui/inputs.mjs.map +1 -1
  319. package/dist/ui/modal/animated/index.d.ts +1 -1
  320. package/dist/ui/modal/animated/index.d.ts.map +1 -1
  321. package/dist/ui/modal/animated/modal-content-animated.d.ts.map +1 -1
  322. package/dist/ui/modal/animated.js +12 -13
  323. package/dist/ui/modal/animated.js.map +1 -1
  324. package/dist/ui/modal/animated.mjs +8 -9
  325. package/dist/ui/modal/animated.mjs.map +1 -1
  326. package/dist/ui/modal/index.d.ts +1 -1
  327. package/dist/ui/modal/index.d.ts.map +1 -1
  328. package/dist/ui/modal/modal-base.d.ts +4 -2
  329. package/dist/ui/modal/modal-base.d.ts.map +1 -1
  330. package/dist/ui/modal/types.d.ts.map +1 -1
  331. package/dist/ui/modal/variants.d.ts +2 -2
  332. package/dist/ui/modal.js +14 -14
  333. package/dist/ui/modal.js.map +1 -1
  334. package/dist/ui/modal.mjs +4 -4
  335. package/dist/ui/modal.mjs.map +1 -1
  336. package/dist/ui/pagination/pagination.d.ts +2 -2
  337. package/dist/ui/pagination/variants.d.ts +3 -3
  338. package/dist/ui/pagination.js +25 -25
  339. package/dist/ui/pagination.js.map +1 -1
  340. package/dist/ui/pagination.mjs +15 -15
  341. package/dist/ui/pagination.mjs.map +1 -1
  342. package/dist/ui/progress/animated/progress-animated.d.ts.map +1 -1
  343. package/dist/ui/progress/animated.js +52 -14
  344. package/dist/ui/progress/animated.js.map +1 -1
  345. package/dist/ui/progress/animated.mjs +45 -7
  346. package/dist/ui/progress/animated.mjs.map +1 -1
  347. package/dist/ui/progress/index.d.ts +2 -2
  348. package/dist/ui/progress/index.d.ts.map +1 -1
  349. package/dist/ui/progress/progress-base.d.ts.map +1 -1
  350. package/dist/ui/progress/progress.d.ts.map +1 -1
  351. package/dist/ui/progress/types.d.ts +3 -0
  352. package/dist/ui/progress/types.d.ts.map +1 -1
  353. package/dist/ui/progress/variants.d.ts +1 -1
  354. package/dist/ui/progress.js +10 -15
  355. package/dist/ui/progress.js.map +1 -1
  356. package/dist/ui/progress.mjs +4 -9
  357. package/dist/ui/progress.mjs.map +1 -1
  358. package/dist/ui/search/search-bar.d.ts +1 -1
  359. package/dist/ui/search/search-bar.d.ts.map +1 -1
  360. package/dist/ui/search/search-suggestion-list.d.ts.map +1 -1
  361. package/dist/ui/search/search-suggestion-utils.d.ts.map +1 -1
  362. package/dist/ui/search.js +15 -7
  363. package/dist/ui/search.js.map +1 -1
  364. package/dist/ui/search.mjs +11 -3
  365. package/dist/ui/search.mjs.map +1 -1
  366. package/dist/ui/select/select.d.ts +1 -1
  367. package/dist/ui/select/select.d.ts.map +1 -1
  368. package/dist/ui/select/types.d.ts +1 -0
  369. package/dist/ui/select/types.d.ts.map +1 -1
  370. package/dist/ui/select/variants.d.ts +4 -4
  371. package/dist/ui/select/variants.d.ts.map +1 -1
  372. package/dist/ui/select.js +145 -63
  373. package/dist/ui/select.js.map +1 -1
  374. package/dist/ui/select.mjs +141 -59
  375. package/dist/ui/select.mjs.map +1 -1
  376. package/dist/ui/skeleton/animated/skeleton-animated.d.ts.map +1 -1
  377. package/dist/ui/skeleton/animated/types.d.ts.map +1 -1
  378. package/dist/ui/skeleton/animated.js +34 -10
  379. package/dist/ui/skeleton/animated.js.map +1 -1
  380. package/dist/ui/skeleton/animated.mjs +29 -5
  381. package/dist/ui/skeleton/animated.mjs.map +1 -1
  382. package/dist/ui/skeleton/variants.d.ts +3 -3
  383. package/dist/ui/skeleton.js +10 -10
  384. package/dist/ui/skeleton.mjs +2 -2
  385. package/dist/ui/slider/slider.d.ts.map +1 -1
  386. package/dist/ui/slider/types.d.ts +8 -2
  387. package/dist/ui/slider/types.d.ts.map +1 -1
  388. package/dist/ui/slider/variants.d.ts +1 -1
  389. package/dist/ui/slider.js +53 -17
  390. package/dist/ui/slider.js.map +1 -1
  391. package/dist/ui/slider.mjs +45 -9
  392. package/dist/ui/slider.mjs.map +1 -1
  393. package/dist/ui/spinner/animated/spinner.d.ts.map +1 -1
  394. package/dist/ui/spinner/animated/variants.d.ts +1 -1
  395. package/dist/ui/spinner/animated.js +68 -56
  396. package/dist/ui/spinner/animated.js.map +1 -1
  397. package/dist/ui/spinner/animated.mjs +64 -52
  398. package/dist/ui/spinner/animated.mjs.map +1 -1
  399. package/dist/ui/stepper/stepper.d.ts +2 -7
  400. package/dist/ui/stepper/stepper.d.ts.map +1 -1
  401. package/dist/ui/stepper/types.d.ts +3 -3
  402. package/dist/ui/stepper/types.d.ts.map +1 -1
  403. package/dist/ui/stepper/variants.d.ts +1 -1
  404. package/dist/ui/stepper/variants.d.ts.map +1 -1
  405. package/dist/ui/stepper.js +12 -13
  406. package/dist/ui/stepper.js.map +1 -1
  407. package/dist/ui/stepper.mjs +9 -10
  408. package/dist/ui/stepper.mjs.map +1 -1
  409. package/dist/ui/table/animated/index.d.ts +2 -2
  410. package/dist/ui/table/animated/index.d.ts.map +1 -1
  411. package/dist/ui/table/animated.js +9 -9
  412. package/dist/ui/table/animated.mjs +3 -3
  413. package/dist/ui/table/table-base.d.ts +1 -1
  414. package/dist/ui/table/table-base.d.ts.map +1 -1
  415. package/dist/ui/table/types.d.ts +5 -1
  416. package/dist/ui/table/types.d.ts.map +1 -1
  417. package/dist/ui/table/variants.d.ts +3 -3
  418. package/dist/ui/table.js +15 -15
  419. package/dist/ui/table.mjs +2 -2
  420. package/dist/ui/tabs/animated/animations.d.ts.map +1 -1
  421. package/dist/ui/tabs/animated/index.d.ts +1 -1
  422. package/dist/ui/tabs/animated/index.d.ts.map +1 -1
  423. package/dist/ui/tabs/animated/types.d.ts.map +1 -1
  424. package/dist/ui/tabs/animated.js +4 -4
  425. package/dist/ui/tabs/animated.js.map +1 -1
  426. package/dist/ui/tabs/animated.mjs +2 -2
  427. package/dist/ui/tabs/animated.mjs.map +1 -1
  428. package/dist/ui/tabs/index.d.ts +1 -1
  429. package/dist/ui/tabs/index.d.ts.map +1 -1
  430. package/dist/ui/tabs/tabs-base.d.ts.map +1 -1
  431. package/dist/ui/tabs/tabs.d.ts +1 -1
  432. package/dist/ui/tabs/tabs.d.ts.map +1 -1
  433. package/dist/ui/tabs/types.d.ts +2 -1
  434. package/dist/ui/tabs/types.d.ts.map +1 -1
  435. package/dist/ui/tabs/variants.d.ts +1 -1
  436. package/dist/ui/tabs.js +10 -10
  437. package/dist/ui/tabs.mjs +2 -2
  438. package/dist/ui/toast/animated/toast-animated.d.ts.map +1 -1
  439. package/dist/ui/toast/animated.js +12 -10
  440. package/dist/ui/toast/animated.js.map +1 -1
  441. package/dist/ui/toast/animated.mjs +5 -3
  442. package/dist/ui/toast/animated.mjs.map +1 -1
  443. package/dist/ui/toast/types.d.ts.map +1 -1
  444. package/dist/ui/toast/variants.d.ts +1 -1
  445. package/dist/ui/toast.js +13 -13
  446. package/dist/ui/toast.mjs +2 -2
  447. package/dist/ui/toggle/animated/index.d.ts +2 -2
  448. package/dist/ui/toggle/animated/index.d.ts.map +1 -1
  449. package/dist/ui/toggle/animated/types.d.ts.map +1 -1
  450. package/dist/ui/toggle/animated.js +3 -3
  451. package/dist/ui/toggle/animated.mjs +1 -1
  452. package/dist/ui/toggle/index.d.ts +1 -1
  453. package/dist/ui/toggle/index.d.ts.map +1 -1
  454. package/dist/ui/toggle/toggle-base.d.ts.map +1 -1
  455. package/dist/ui/toggle/variants.d.ts +1 -1
  456. package/dist/ui/toggle.js +31 -6
  457. package/dist/ui/toggle.js.map +1 -1
  458. package/dist/ui/toggle.mjs +30 -5
  459. package/dist/ui/toggle.mjs.map +1 -1
  460. package/dist/ui/tooltip/animated/animations.d.ts.map +1 -1
  461. package/dist/ui/tooltip/animated/types.d.ts.map +1 -1
  462. package/dist/ui/tooltip/animated.js +5 -5
  463. package/dist/ui/tooltip/animated.js.map +1 -1
  464. package/dist/ui/tooltip/animated.mjs +2 -2
  465. package/dist/ui/tooltip/animated.mjs.map +1 -1
  466. package/dist/ui/tooltip/tooltip-base.d.ts.map +1 -1
  467. package/dist/ui/tooltip/types.d.ts +1 -0
  468. package/dist/ui/tooltip/types.d.ts.map +1 -1
  469. package/dist/ui/tooltip/variants.d.ts +1 -1
  470. package/dist/ui/tooltip/variants.d.ts.map +1 -1
  471. package/dist/ui/tooltip.js +8 -8
  472. package/dist/ui/tooltip.mjs +2 -2
  473. package/dist/ui/typography/blockquote-base.d.ts.map +1 -1
  474. package/dist/ui/typography/code-block-base.d.ts.map +1 -1
  475. package/dist/ui/typography/heading-base.d.ts.map +1 -1
  476. package/dist/ui/typography/list-base.d.ts.map +1 -1
  477. package/dist/ui/typography/types.d.ts.map +1 -1
  478. package/dist/ui/typography/variants.d.ts +3 -3
  479. package/dist/ui/typography/variants.d.ts.map +1 -1
  480. package/dist/ui/typography.js +21 -43
  481. package/dist/ui/typography.js.map +1 -1
  482. package/dist/ui/typography.mjs +13 -35
  483. package/dist/ui/typography.mjs.map +1 -1
  484. package/package.json +32 -12
  485. package/src/charts/area/Area.tsx +103 -0
  486. package/src/charts/area/index.ts +9 -0
  487. package/src/charts/bar/Bar.tsx +94 -0
  488. package/src/charts/bar/index.ts +9 -0
  489. package/src/charts/bubble/Bubble.tsx +113 -0
  490. package/src/charts/bubble/index.ts +9 -0
  491. package/src/charts/line/Line.tsx +97 -0
  492. package/src/charts/line/index.ts +9 -0
  493. package/src/charts/shared/chart-frame.tsx +107 -0
  494. package/src/charts/shared/colors.ts +31 -0
  495. package/src/charts/shared/types.ts +60 -0
  496. package/src/charts/shared/variants.ts +87 -0
  497. package/src/hooks/index.ts +8 -2
  498. package/src/hooks/useClickOutside/useClickOutside.ts +1 -4
  499. package/src/hooks/useClipboard/useClipboard.test.ts +3 -1
  500. package/src/hooks/useClipboard/useClipboard.ts +1 -2
  501. package/src/hooks/useDisclosure/useDisclosure.test.ts +1 -2
  502. package/src/hooks/useDocumentTitle/useDocumentTitle.test.ts +1 -3
  503. package/src/hooks/useFocusManagement/useFocusManagement.test.tsx +8 -0
  504. package/src/hooks/useFocusManagement/useFocusManagement.ts +162 -34
  505. package/src/hooks/useInView/useInView.test.ts +6 -1
  506. package/src/hooks/useLocalStorage/index.ts +1 -4
  507. package/src/hooks/useLocalStorage/useLocalStorage.test.ts +8 -20
  508. package/src/hooks/useLocalStorage/useLocalStorage.ts +4 -4
  509. package/src/hooks/useMediaQuery/useMediaQuery.ts +1 -4
  510. package/src/hooks/usePrefersReducedMotion/usePrefersReducedMotion.test.ts +3 -1
  511. package/src/hooks/useResizeObserver/index.ts +1 -4
  512. package/src/hooks/useSessionStorage/useSessionStorage.test.ts +2 -6
  513. package/src/hooks/useSessionStorage/useSessionStorage.ts +4 -2
  514. package/src/hooks/useThrottledCallback/useThrottledCallback.ts +4 -3
  515. package/src/hooks/useWindowSize/useWindowSize.ts +4 -1
  516. package/src/lib/utils.ts +3 -3
  517. package/src/ui/accordion/accordion.tsx +6 -1
  518. package/src/ui/accordion/animated/accordion-content-animated.tsx +1 -4
  519. package/src/ui/accordion/animated/index.ts +4 -1
  520. package/src/ui/accordion/animated/types.ts +6 -2
  521. package/src/ui/accordion/variants.ts +9 -9
  522. package/src/ui/alert/alert-base.tsx +6 -1
  523. package/src/ui/alert/alert.tsx +2 -2
  524. package/src/ui/alert/animated/index.ts +2 -2
  525. package/src/ui/alert/animated/types.ts +1 -1
  526. package/src/ui/alert/types.ts +1 -3
  527. package/src/ui/alert/variants.ts +9 -9
  528. package/src/ui/avatar/animated/index.ts +6 -2
  529. package/src/ui/avatar/avatar-base.tsx +2 -7
  530. package/src/ui/avatar/avatar.tsx +6 -1
  531. package/src/ui/avatar/variants.ts +23 -11
  532. package/src/ui/badge/animated/index.ts +6 -2
  533. package/src/ui/badge/animated/types.ts +1 -2
  534. package/src/ui/badge/badge-base.tsx +4 -1
  535. package/src/ui/badge/types.ts +1 -0
  536. package/src/ui/badge/variants.ts +16 -18
  537. package/src/ui/breadcrumb/breadcrumb.tsx +10 -2
  538. package/src/ui/breadcrumb/types.ts +20 -9
  539. package/src/ui/breadcrumb/variants.ts +34 -38
  540. package/src/ui/buttons/animated/index.ts +7 -1
  541. package/src/ui/buttons/animated/types.ts +0 -1
  542. package/src/ui/buttons/button.test.tsx +2 -2
  543. package/src/ui/buttons/types.ts +4 -5
  544. package/src/ui/buttons/variants.ts +17 -17
  545. package/src/ui/card/animated/types.ts +0 -1
  546. package/src/ui/card/card-base.tsx +1 -6
  547. package/src/ui/card/card.test.tsx +7 -3
  548. package/src/ui/card/card.tsx +1 -3
  549. package/src/ui/card/index.ts +7 -3
  550. package/src/ui/card/types.ts +1 -1
  551. package/src/ui/card/variants.ts +9 -9
  552. package/src/ui/divider/animated/index.ts +5 -1
  553. package/src/ui/divider/animated/types.ts +4 -2
  554. package/src/ui/divider/divider-base.tsx +0 -1
  555. package/src/ui/drawer/animated/drawer-content-animated.tsx +6 -11
  556. package/src/ui/drawer/animated/index.ts +6 -1
  557. package/src/ui/drawer/drawer-base.tsx +16 -8
  558. package/src/ui/drawer/types.ts +12 -3
  559. package/src/ui/drawer/variants.ts +18 -18
  560. package/src/ui/dropdown/dropdown.test.tsx +1 -3
  561. package/src/ui/dropdown/dropdown.tsx +30 -5
  562. package/src/ui/dropdown/types.ts +1 -0
  563. package/src/ui/dropdown/variants.ts +20 -20
  564. package/src/ui/empty-state/animated/empty-state-animated.tsx +2 -4
  565. package/src/ui/empty-state/animated/index.ts +8 -5
  566. package/src/ui/empty-state/empty-state-base.tsx +14 -2
  567. package/src/ui/empty-state/index.ts +7 -1
  568. package/src/ui/empty-state/types.ts +1 -0
  569. package/src/ui/file-upload/file-upload.tsx +3 -9
  570. package/src/ui/file-upload/variants.ts +18 -9
  571. package/src/ui/inputs/animated/index.ts +7 -1
  572. package/src/ui/inputs/input-base.tsx +60 -6
  573. package/src/ui/inputs/input.test.tsx +5 -1
  574. package/src/ui/inputs/types.ts +7 -2
  575. package/src/ui/modal/animated/index.ts +6 -1
  576. package/src/ui/modal/animated/modal-content-animated.tsx +4 -5
  577. package/src/ui/modal/index.ts +1 -1
  578. package/src/ui/modal/modal-base.tsx +19 -10
  579. package/src/ui/modal/modal.test.tsx +44 -4
  580. package/src/ui/modal/modal.tsx +1 -1
  581. package/src/ui/modal/types.ts +10 -2
  582. package/src/ui/modal/variants.ts +18 -18
  583. package/src/ui/pagination/pagination.tsx +2 -2
  584. package/src/ui/pagination/variants.ts +9 -9
  585. package/src/ui/progress/animated/progress-animated.tsx +43 -5
  586. package/src/ui/progress/animated/types.ts +1 -1
  587. package/src/ui/progress/index.ts +12 -2
  588. package/src/ui/progress/progress-base.tsx +61 -5
  589. package/src/ui/progress/progress.test.tsx +1 -3
  590. package/src/ui/progress/progress.tsx +2 -6
  591. package/src/ui/progress/types.ts +3 -0
  592. package/src/ui/search/filter-search-suggestions.test.ts +46 -12
  593. package/src/ui/search/filter-search-suggestions.ts +3 -3
  594. package/src/ui/search/search-bar.tsx +22 -22
  595. package/src/ui/search/search-suggestion-list.tsx +14 -5
  596. package/src/ui/search/search-suggestion-utils.ts +4 -1
  597. package/src/ui/select/select.tsx +96 -6
  598. package/src/ui/select/types.ts +1 -0
  599. package/src/ui/select/variants.ts +71 -68
  600. package/src/ui/skeleton/animated/skeleton-animated.tsx +25 -4
  601. package/src/ui/skeleton/animated/types.ts +0 -1
  602. package/src/ui/skeleton/skeleton-base.tsx +3 -3
  603. package/src/ui/skeleton/variants.ts +9 -9
  604. package/src/ui/slider/slider.test.tsx +23 -9
  605. package/src/ui/slider/slider.tsx +45 -4
  606. package/src/ui/slider/types.ts +9 -3
  607. package/src/ui/slider/variants.ts +1 -1
  608. package/src/ui/spinner/animated/spinner.tsx +6 -3
  609. package/src/ui/stepper/stepper.test.tsx +5 -6
  610. package/src/ui/stepper/stepper.tsx +12 -16
  611. package/src/ui/stepper/types.ts +11 -5
  612. package/src/ui/stepper/variants.ts +30 -15
  613. package/src/ui/table/animated/index.ts +6 -4
  614. package/src/ui/table/table-base.tsx +32 -11
  615. package/src/ui/table/types.ts +8 -1
  616. package/src/ui/tabs/animated/animations.ts +5 -1
  617. package/src/ui/tabs/animated/index.ts +7 -1
  618. package/src/ui/tabs/animated/types.ts +3 -3
  619. package/src/ui/tabs/index.ts +8 -1
  620. package/src/ui/tabs/tabs-base.tsx +71 -10
  621. package/src/ui/tabs/tabs.tsx +8 -1
  622. package/src/ui/tabs/types.ts +2 -1
  623. package/src/ui/tabs/variants.ts +10 -10
  624. package/src/ui/toast/animated/toast-animated.tsx +3 -1
  625. package/src/ui/toast/animated/types.ts +1 -1
  626. package/src/ui/toast/toast-base.tsx +1 -1
  627. package/src/ui/toast/types.ts +3 -1
  628. package/src/ui/toast/variants.ts +9 -9
  629. package/src/ui/toggle/animated/index.ts +7 -4
  630. package/src/ui/toggle/animated/types.ts +4 -2
  631. package/src/ui/toggle/index.ts +5 -1
  632. package/src/ui/toggle/toggle-base.tsx +36 -4
  633. package/src/ui/tooltip/animated/animations.ts +0 -1
  634. package/src/ui/tooltip/animated/types.ts +0 -1
  635. package/src/ui/tooltip/tooltip-base.tsx +118 -22
  636. package/src/ui/tooltip/types.ts +1 -0
  637. package/src/ui/tooltip/variants.ts +11 -13
  638. package/src/ui/typography/blockquote-base.tsx +1 -8
  639. package/src/ui/typography/code-block-base.tsx +19 -24
  640. package/src/ui/typography/heading-base.tsx +35 -38
  641. package/src/ui/typography/inline-code-base.tsx +15 -15
  642. package/src/ui/typography/list-base.tsx +1 -9
  643. package/src/ui/typography/text-base.tsx +32 -32
  644. package/src/ui/typography/types.ts +4 -17
  645. package/src/ui/typography/typography.test.tsx +3 -1
  646. package/src/ui/typography/variants.ts +16 -8
  647. package/dist/chunk-2P3UU2J3.mjs.map +0 -1
  648. package/dist/chunk-2PQEXQVR.js.map +0 -1
  649. package/dist/chunk-3OR47XMY.js.map +0 -1
  650. package/dist/chunk-4B7KGBQB.js.map +0 -1
  651. package/dist/chunk-5QB2KNZQ.js.map +0 -1
  652. package/dist/chunk-6I7X5BF2.js.map +0 -1
  653. package/dist/chunk-7HL3A4YF.mjs.map +0 -1
  654. package/dist/chunk-BITDSQMR.js.map +0 -1
  655. package/dist/chunk-BORK3BJO.mjs.map +0 -1
  656. package/dist/chunk-BSWYZTYK.js.map +0 -1
  657. package/dist/chunk-BVXTOEBI.mjs.map +0 -1
  658. package/dist/chunk-C2FCPQTO.js.map +0 -1
  659. package/dist/chunk-CY5BQKRZ.mjs.map +0 -1
  660. package/dist/chunk-E3DZNJAD.js.map +0 -1
  661. package/dist/chunk-FLILFCQE.mjs.map +0 -1
  662. package/dist/chunk-FT2LMA66.mjs.map +0 -1
  663. package/dist/chunk-IXDJ3IPG.mjs.map +0 -1
  664. package/dist/chunk-LVUPECBT.mjs.map +0 -1
  665. package/dist/chunk-N4NO3SYL.js.map +0 -1
  666. package/dist/chunk-P5HUBXUX.js.map +0 -1
  667. package/dist/chunk-PGH27VTL.mjs.map +0 -1
  668. package/dist/chunk-RDSPHBHK.mjs.map +0 -1
  669. package/dist/chunk-U4YQCAXW.js.map +0 -1
  670. package/dist/chunk-UBFKTC2P.mjs.map +0 -1
  671. package/dist/chunk-UOFTZKMM.js.map +0 -1
  672. package/dist/chunk-WDCIZHXY.mjs.map +0 -1
  673. package/dist/chunk-WL5I7RVS.mjs +0 -54
  674. package/dist/chunk-WL5I7RVS.mjs.map +0 -1
  675. package/dist/chunk-WP7GYBRI.js.map +0 -1
  676. package/dist/chunk-WZKGRU3U.js.map +0 -1
  677. package/dist/chunk-XIXF7UVM.mjs.map +0 -1
  678. package/dist/chunk-XLAFQ24R.js.map +0 -1
  679. package/dist/chunk-XWM2S6VV.mjs.map +0 -1
  680. package/dist/chunk-YNCD6TKE.mjs.map +0 -1
  681. package/dist/chunk-YPLVTUYL.js +0 -56
  682. package/dist/chunk-YPLVTUYL.js.map +0 -1
@@ -0,0 +1,87 @@
1
+ import { cva } from "class-variance-authority";
2
+
3
+ export const chartVariants = cva(
4
+ [
5
+ "relative w-full min-w-0 overflow-hidden rounded-xl",
6
+ "h-[var(--chart-height)] min-h-64 sm:min-h-72 md:min-h-80",
7
+ "[&_.recharts-default-tooltip]:rounded-lg [&_.recharts-default-tooltip]:border [&_.recharts-default-tooltip]:border-slate-200",
8
+ "[&_.recharts-default-tooltip]:bg-white/95 [&_.recharts-default-tooltip]:shadow-lg",
9
+ "[&_.recharts-default-tooltip]:text-slate-900",
10
+ ],
11
+ {
12
+ variants: {
13
+ appearance: {
14
+ default:
15
+ "bg-white text-slate-600 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900",
16
+ muted:
17
+ "bg-slate-50 text-slate-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900",
18
+ outline:
19
+ "border border-slate-200 bg-white text-slate-600 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900",
20
+ glass:
21
+ "border border-white/15 bg-white/10 text-slate-100 backdrop-blur-md [&_.recharts-cartesian-axis-tick-value]:fill-white",
22
+ sky: "bg-sky-50 text-sky-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900",
23
+ emerald:
24
+ "bg-emerald-50 text-emerald-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900",
25
+ violet:
26
+ "bg-violet-50 text-violet-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900",
27
+ amber:
28
+ "bg-amber-50 text-amber-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900",
29
+ rose: "bg-rose-50 text-rose-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900",
30
+ slate:
31
+ "bg-slate-50 text-slate-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900",
32
+ gray: "bg-gray-50 text-gray-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900",
33
+ indigo:
34
+ "bg-indigo-50 text-indigo-500 [&_.recharts-cartesian-axis-tick-value]:fill-slate-900",
35
+ "gradient-cyan-violet":
36
+ "bg-gradient-to-r from-cyan-500 to-violet-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white",
37
+ "gradient-emerald-violet":
38
+ "bg-gradient-to-r from-emerald-500 to-violet-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white",
39
+ "gradient-amber-rose":
40
+ "bg-gradient-to-r from-amber-500 to-rose-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white",
41
+ "gradient-slate-gray":
42
+ "bg-gradient-to-r from-slate-500 to-gray-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white",
43
+ "gradient-indigo-purple":
44
+ "bg-gradient-to-r from-indigo-500 to-purple-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white",
45
+ "gradient-cyan-blue":
46
+ "bg-gradient-to-r from-cyan-500 to-blue-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white",
47
+ "gradient-emerald-blue":
48
+ "bg-gradient-to-r from-emerald-500 to-blue-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white",
49
+ "gradient-amber-blue":
50
+ "bg-gradient-to-r from-amber-500 to-blue-500 text-white [&_.recharts-cartesian-axis-tick-value]:fill-white",
51
+ },
52
+ density: {
53
+ compact: "p-2 sm:p-3",
54
+ comfortable: "p-3 sm:p-4",
55
+ spacious: "p-4 sm:p-5 md:p-6",
56
+ },
57
+ },
58
+ defaultVariants: {
59
+ appearance: "default",
60
+ density: "comfortable",
61
+ },
62
+ },
63
+ );
64
+
65
+ export const chartPalette = {
66
+ cyan: { stroke: "#0891b2", fill: "#67e8f9", textColor: "#0891b2" },
67
+ emerald: { stroke: "#059669", fill: "#6ee7b7", textColor: "#059669" },
68
+ violet: { stroke: "#7c3aed", fill: "#c4b5fd", textColor: "#7c3aed" },
69
+ amber: { stroke: "#d97706", fill: "#fcd34d", textColor: "#d97706" },
70
+ rose: { stroke: "#e11d48", fill: "#fda4af", textColor: "#e11d48" },
71
+ slate: { stroke: "#475569", fill: "#cbd5e1", textColor: "#475569" },
72
+ gray: { stroke: "#6b7280", fill: "#d1d5db", textColor: "#6b7280" },
73
+ white: { stroke: "#ffffff", fill: "#ffffff", textColor: "#ffffff" },
74
+ indigo: { stroke: "#6366f1", fill: "#c7d2fe", textColor: "#6366f1" },
75
+ "gradient-cyan-violet": { stroke: "#0891b2", fill: "#67e8f9", textColor: "#0891b2" },
76
+ "gradient-emerald-violet": { stroke: "#059669", fill: "#6ee7b7", textColor: "#059669" },
77
+ "gradient-amber-rose": { stroke: "#d97706", fill: "#fcd34d", textColor: "#d97706" },
78
+ "gradient-slate-gray": { stroke: "#475569", fill: "#cbd5e1", textColor: "#475569" },
79
+ "gradient-indigo-purple": { stroke: "#6366f1", fill: "#c7d2fe", textColor: "#6366f1" },
80
+ "gradient-cyan-blue": { stroke: "#0891b2", fill: "#67e8f9", textColor: "#0891b2" },
81
+ "gradient-emerald-blue": { stroke: "#059669", fill: "#6ee7b7", textColor: "#059669" },
82
+ "gradient-amber-blue": { stroke: "#d97706", fill: "#fcd34d", textColor: "#d97706" },
83
+ } as const;
84
+
85
+ export const chartColorValues = Object.keys(chartPalette) as Array<
86
+ keyof typeof chartPalette
87
+ >;
@@ -23,7 +23,10 @@ export {
23
23
  type UseDisclosureParams,
24
24
  type UseDisclosureResult,
25
25
  } from "./useDisclosure";
26
- export { useDocumentTitle, type UseDocumentTitleParams } from "./useDocumentTitle";
26
+ export {
27
+ useDocumentTitle,
28
+ type UseDocumentTitleParams,
29
+ } from "./useDocumentTitle";
27
30
  export { useHover } from "./useHover";
28
31
  export { useInView, type UseInViewParams } from "./useInView";
29
32
  export {
@@ -42,7 +45,10 @@ export {
42
45
  } from "./usePrefersColorScheme";
43
46
  export { usePrefersReducedMotion } from "./usePrefersReducedMotion";
44
47
  export { useResizeObserver, type ElementSize } from "./useResizeObserver";
45
- export { useSessionStorage, type UseSessionStorageResult } from "./useSessionStorage";
48
+ export {
49
+ useSessionStorage,
50
+ type UseSessionStorageResult,
51
+ } from "./useSessionStorage";
46
52
  export { useThrottledCallback } from "./useThrottledCallback";
47
53
  export { useToggle } from "./useToggle";
48
54
  export { useWindowSize, type WindowSize } from "./useWindowSize";
@@ -4,10 +4,7 @@ import type { RefObject } from "react";
4
4
  import { Dispatch, SetStateAction, useEffect } from "react";
5
5
 
6
6
  /** DOM events that can represent an “outside” press for closing overlays. */
7
- export type ClickOutsideEventType =
8
- | "mousedown"
9
- | "pointerdown"
10
- | "touchstart";
7
+ export type ClickOutsideEventType = "mousedown" | "pointerdown" | "touchstart";
11
8
 
12
9
  export type UseClickOutsideParams = {
13
10
  /** Called with `false` when a qualifying event target is outside `ref.current`. */
@@ -66,7 +66,9 @@ describe("useClipboard", () => {
66
66
  const ok = await result.current.copy("z");
67
67
  expect(ok).toBe(false);
68
68
  });
69
- expect(result.current.error?.message).toBe("Clipboard API is not available");
69
+ expect(result.current.error?.message).toBe(
70
+ "Clipboard API is not available",
71
+ );
70
72
  expect(result.current.copied).toBe(false);
71
73
  });
72
74
 
@@ -56,8 +56,7 @@ export function useClipboard(resetDelay = 2000): UseClipboardResult {
56
56
  }
57
57
  return true;
58
58
  } catch (cause) {
59
- const err =
60
- cause instanceof Error ? cause : new Error(String(cause));
59
+ const err = cause instanceof Error ? cause : new Error(String(cause));
61
60
  setError(err);
62
61
  return false;
63
62
  }
@@ -48,8 +48,7 @@ describe("useDisclosure", () => {
48
48
  it("should be controlled when open prop is defined", () => {
49
49
  const onOpenChange = vi.fn();
50
50
  const { result, rerender } = renderHook(
51
- ({ open }: { open: boolean }) =>
52
- useDisclosure({ open, onOpenChange }),
51
+ ({ open }: { open: boolean }) => useDisclosure({ open, onOpenChange }),
53
52
  { initialProps: { open: false } },
54
53
  );
55
54
  expect(result.current.isOpen).toBe(false);
@@ -6,9 +6,7 @@ import { useDocumentTitle } from "./useDocumentTitle";
6
6
  describe("useDocumentTitle", () => {
7
7
  it("should set document title from title prop", () => {
8
8
  document.title = "Original";
9
- const { unmount } = renderHook(() =>
10
- useDocumentTitle({ title: "Page A" }),
11
- );
9
+ const { unmount } = renderHook(() => useDocumentTitle({ title: "Page A" }));
12
10
  expect(document.title).toBe("Page A");
13
11
  unmount();
14
12
  expect(document.title).toBe("Original");
@@ -42,4 +42,12 @@ describe("useFocusManagement", () => {
42
42
  fireEvent.keyDown(window, { key: "Escape" });
43
43
  expect(screen.queryByTestId("dialog")).not.toBeInTheDocument();
44
44
  });
45
+
46
+ it("should return focus inside the overlay when focus moves outside without Tab", () => {
47
+ render(<Modal initialOpen />);
48
+ const outsideButton = screen.getByTestId("after");
49
+ outsideButton.focus();
50
+ expect(outsideButton).not.toHaveFocus();
51
+ expect(screen.getByRole("button", { name: "first" })).toHaveFocus();
52
+ });
45
53
  });
@@ -1,39 +1,60 @@
1
1
  "use client";
2
2
 
3
3
  import type { RefObject } from "react";
4
- import { useEffect } from "react";
4
+ import { useEffect, useLayoutEffect, useRef } from "react";
5
5
  import { useBodyScrollLock } from "../useBodyScrollLock";
6
6
 
7
- const FOCUSABLE_SELECTOR =
8
- 'a[href], button:not([disabled]), textarea, input, select, [tabindex]:not([tabindex="-1"])';
7
+ const FOCUSABLE_SELECTOR = [
8
+ "a[href]",
9
+ "button:not([disabled])",
10
+ "textarea:not([disabled])",
11
+ "input:not([disabled])",
12
+ "select:not([disabled])",
13
+ '[tabindex]:not([tabindex="-1"])',
14
+ ].join(", ");
15
+
16
+ function getFocusableElements(
17
+ root: HTMLElement,
18
+ focusableSelector: string,
19
+ ): HTMLElement[] {
20
+ return Array.from(
21
+ root.querySelectorAll<HTMLElement>(focusableSelector),
22
+ ).filter((element) => {
23
+ if (element.getAttribute("aria-hidden") === "true") {
24
+ return false;
25
+ }
26
+ if (typeof window === "undefined") {
27
+ return true;
28
+ }
29
+ const style = getComputedStyle(element);
30
+ if (style.visibility === "hidden" || style.display === "none") {
31
+ return false;
32
+ }
33
+ return true;
34
+ });
35
+ }
9
36
 
10
37
  /**
11
- * Composes modal-like behavior for an open overlay: body scroll lock, Escape to close, and focus trapping.
12
- *
13
- * - Delegates scroll locking to {@link useBodyScrollLock} while `open` is true.
14
- * - Listens for `Escape` on `window` and calls `setOpen(false)`.
15
- * - When `open` becomes true, focuses the first visible focusable inside `contentRef`, or the container itself.
16
- * - Traps focus within `contentRef` via a capturing `focusin` listener on `document` that redirects focus back inside.
17
- * - On close/unmount of the open effect, restores focus to the element that was focused before the trap ran.
18
- *
19
- * @param params.open - Whether the overlay is visible.
20
- * @param params.setOpen - Setter used for Escape and cleanup paths.
21
- * @param params.contentRef - Root of the dialog/drawer content (must point at a focusable container or include focusables).
22
- * @param params.focusableSelector - Query selector for tabbable elements; defaults to a common interactive set.
38
+ * Composes modal-like behavior for an open overlay: body scroll lock, Escape to close, focus trapping with circular Tab cycling, and restoring focus after close.
23
39
  */
24
40
  export const useFocusManagement = ({
25
41
  open,
26
42
  setOpen,
27
43
  contentRef,
44
+ triggerRef,
28
45
  focusableSelector = FOCUSABLE_SELECTOR,
29
46
  }: {
30
47
  open: boolean;
31
48
  setOpen: (open: boolean) => void;
32
- contentRef: RefObject<HTMLDivElement | null>;
49
+ contentRef: RefObject<HTMLElement | null>;
50
+ /** Last modal trigger control; used when focus cannot be inferred at open time. */
51
+ triggerRef?: RefObject<HTMLElement | null>;
33
52
  focusableSelector?: string;
34
53
  }) => {
35
54
  useBodyScrollLock(open);
36
55
 
56
+ const previousFocusRef = useRef<HTMLElement | null>(null);
57
+
37
58
  useEffect(() => {
38
59
  if (!open) {
39
60
  return;
@@ -47,31 +68,138 @@ export const useFocusManagement = ({
47
68
  return () => window.removeEventListener("keydown", handleKeyDown);
48
69
  }, [open, setOpen]);
49
70
 
50
- useEffect(() => {
71
+ useLayoutEffect(() => {
51
72
  if (!open) {
52
73
  return;
53
74
  }
54
- const node = contentRef.current;
55
- if (!node) {
56
- return;
57
- }
58
- const focusables = Array.from(
59
- node.querySelectorAll<HTMLElement>(focusableSelector),
60
- ).filter((element) => element.offsetParent !== null || element === node);
61
- const target = focusables[0] ?? node;
62
- const previouslyFocused = document.activeElement as HTMLElement | null;
63
- target.focus();
75
+
76
+ let cancelled = false;
77
+ let rafId = 0;
78
+ let trapInstalled = false;
79
+
80
+ const detachTrap = () => {
81
+ if (!trapInstalled) {
82
+ return;
83
+ }
84
+ trapInstalled = false;
85
+ document.removeEventListener("focusin", handleFocusIn, true);
86
+ document.removeEventListener("keydown", handleTabKeyDown, true);
87
+ };
88
+
89
+ let trapRoot: HTMLElement | null = null;
64
90
 
65
91
  const handleFocusIn = (event: FocusEvent) => {
66
- if (!node.contains(event.target as Node)) {
67
- event.stopPropagation();
68
- target.focus();
92
+ const node = trapRoot;
93
+ if (!node) {
94
+ return;
95
+ }
96
+ const focused = event.target;
97
+ if (!(focused instanceof Node)) {
98
+ return;
69
99
  }
100
+ if (node.contains(focused)) {
101
+ return;
102
+ }
103
+ const list = getFocusableElements(node, focusableSelector);
104
+ const redirectTarget = list[0] ?? node;
105
+ redirectTarget.focus({ preventScroll: true });
70
106
  };
71
- document.addEventListener("focusin", handleFocusIn);
107
+
108
+ const handleTabKeyDown = (event: KeyboardEvent) => {
109
+ const node = trapRoot;
110
+ if (!node) {
111
+ return;
112
+ }
113
+ if (event.key !== "Tab") {
114
+ return;
115
+ }
116
+ const list = getFocusableElements(node, focusableSelector);
117
+ if (list.length === 0) {
118
+ event.preventDefault();
119
+ node.focus({ preventScroll: true });
120
+ return;
121
+ }
122
+ const first = list[0];
123
+ const last = list[list.length - 1];
124
+ if (!first || !last) {
125
+ return;
126
+ }
127
+ const activeElement = document.activeElement as HTMLElement | undefined;
128
+
129
+ if (!activeElement || !node.contains(activeElement)) {
130
+ event.preventDefault();
131
+ (event.shiftKey ? last : first).focus({ preventScroll: true });
132
+ return;
133
+ }
134
+
135
+ if (event.shiftKey && activeElement === first) {
136
+ event.preventDefault();
137
+ last.focus({ preventScroll: true });
138
+ return;
139
+ }
140
+ if (!event.shiftKey && activeElement === last) {
141
+ event.preventDefault();
142
+ first.focus({ preventScroll: true });
143
+ }
144
+ };
145
+
146
+ const installTrap = () => {
147
+ if (cancelled) {
148
+ return;
149
+ }
150
+ const node = contentRef.current;
151
+ if (!node) {
152
+ rafId = requestAnimationFrame(installTrap);
153
+ return;
154
+ }
155
+
156
+ trapRoot = node;
157
+
158
+ const active = document.activeElement;
159
+ if (
160
+ active instanceof HTMLElement &&
161
+ active !== document.body &&
162
+ !node.contains(active)
163
+ ) {
164
+ previousFocusRef.current = active;
165
+ } else {
166
+ previousFocusRef.current = triggerRef?.current ?? null;
167
+ }
168
+
169
+ const focusables = getFocusableElements(node, focusableSelector);
170
+ const initialFocus = focusables[0] ?? node;
171
+ initialFocus.focus({ preventScroll: true });
172
+
173
+ document.addEventListener("focusin", handleFocusIn, true);
174
+ document.addEventListener("keydown", handleTabKeyDown, true);
175
+ trapInstalled = true;
176
+ };
177
+
178
+ installTrap();
179
+
72
180
  return () => {
73
- document.removeEventListener("focusin", handleFocusIn);
74
- previouslyFocused?.focus?.();
181
+ cancelled = true;
182
+ cancelAnimationFrame(rafId);
183
+ detachTrap();
184
+ trapRoot = null;
185
+
186
+ const fallbackTrigger =
187
+ triggerRef?.current &&
188
+ document.body.contains(triggerRef.current) &&
189
+ typeof triggerRef.current.focus === "function"
190
+ ? triggerRef.current
191
+ : null;
192
+
193
+ const toRestore = previousFocusRef.current ?? fallbackTrigger;
194
+ previousFocusRef.current = null;
195
+
196
+ if (
197
+ toRestore &&
198
+ typeof toRestore.focus === "function" &&
199
+ document.body.contains(toRestore)
200
+ ) {
201
+ toRestore.focus({ preventScroll: true });
202
+ }
75
203
  };
76
- }, [contentRef, open]);
204
+ }, [open, contentRef, triggerRef, focusableSelector]);
77
205
  };
@@ -34,7 +34,12 @@ describe("useInView", () => {
34
34
  expect(result.current[1]).toBe(false);
35
35
  act(() => {
36
36
  lastCallback?.(
37
- [{ isIntersecting: true, target: el } as unknown as IntersectionObserverEntry],
37
+ [
38
+ {
39
+ isIntersecting: true,
40
+ target: el,
41
+ } as unknown as IntersectionObserverEntry,
42
+ ],
38
43
  {} as IntersectionObserver,
39
44
  );
40
45
  });
@@ -1,4 +1 @@
1
- export {
2
- useLocalStorage,
3
- type UseLocalStorageResult,
4
- } from "./useLocalStorage";
1
+ export { useLocalStorage, type UseLocalStorageResult } from "./useLocalStorage";
@@ -14,27 +14,21 @@ describe("useLocalStorage", () => {
14
14
  it("should read existing JSON value on mount", () => {
15
15
  const key = `${keyPrefix}-read`;
16
16
  localStorage.setItem(key, JSON.stringify({ count: 2 }));
17
- const { result } = renderHook(() =>
18
- useLocalStorage(key, { count: 0 }),
19
- );
17
+ const { result } = renderHook(() => useLocalStorage(key, { count: 0 }));
20
18
  const value = result.current[0];
21
19
  expect(value).toEqual({ count: 2 });
22
20
  });
23
21
 
24
22
  it("should fall back to initialValue when key missing", () => {
25
23
  const key = `${keyPrefix}-missing`;
26
- const { result } = renderHook(() =>
27
- useLocalStorage(key, { count: 0 }),
28
- );
24
+ const { result } = renderHook(() => useLocalStorage(key, { count: 0 }));
29
25
  const value = result.current[0];
30
26
  expect(value).toEqual({ count: 0 });
31
27
  });
32
28
 
33
29
  it("should persist setValue and support functional updates", () => {
34
30
  const key = `${keyPrefix}-set`;
35
- const { result } = renderHook(() =>
36
- useLocalStorage(key, { count: 0 }),
37
- );
31
+ const { result } = renderHook(() => useLocalStorage(key, { count: 0 }));
38
32
  act(() => {
39
33
  result.current[1]({ count: 5 });
40
34
  });
@@ -49,9 +43,7 @@ describe("useLocalStorage", () => {
49
43
  it("should remove key and reset to initialValue", () => {
50
44
  const key = `${keyPrefix}-remove`;
51
45
  localStorage.setItem(key, JSON.stringify({ ok: true }));
52
- const { result } = renderHook(() =>
53
- useLocalStorage(key, { ok: false }),
54
- );
46
+ const { result } = renderHook(() => useLocalStorage(key, { ok: false }));
55
47
  const remove = result.current[2];
56
48
  act(() => {
57
49
  remove();
@@ -62,9 +54,7 @@ describe("useLocalStorage", () => {
62
54
 
63
55
  it("should reconcile when storage event fires for same key", () => {
64
56
  const key = `${keyPrefix}-storage`;
65
- const { result } = renderHook(() =>
66
- useLocalStorage(key, { v: 0 }),
67
- );
57
+ const { result } = renderHook(() => useLocalStorage(key, { v: 0 }));
68
58
  act(() => {
69
59
  window.dispatchEvent(
70
60
  new StorageEvent("storage", {
@@ -74,16 +64,14 @@ describe("useLocalStorage", () => {
74
64
  }),
75
65
  );
76
66
  });
77
- const value= result.current[0];
67
+ const value = result.current[0];
78
68
  expect(value).toEqual({ v: 99 });
79
69
  });
80
70
 
81
71
  it("should reset to initial when storage event clears key", () => {
82
72
  const key = `${keyPrefix}-cleared`;
83
73
  localStorage.setItem(key, JSON.stringify({ v: 1 }));
84
- const { result } = renderHook(() =>
85
- useLocalStorage(key, { v: 0 }),
86
- );
74
+ const { result } = renderHook(() => useLocalStorage(key, { v: 0 }));
87
75
  act(() => {
88
76
  window.dispatchEvent(
89
77
  new StorageEvent("storage", {
@@ -93,7 +81,7 @@ describe("useLocalStorage", () => {
93
81
  }),
94
82
  );
95
83
  });
96
- const value= result.current[0];
84
+ const value = result.current[0];
97
85
  expect(value).toEqual({ v: 0 });
98
86
  });
99
87
  });
@@ -41,15 +41,15 @@ export function useLocalStorage<T>(
41
41
  key: string,
42
42
  initialValue: T,
43
43
  ): UseLocalStorageResult<T> {
44
- const [stored, setStored] = useState<T>(() =>
45
- readValue(key, initialValue),
46
- );
44
+ const [stored, setStored] = useState<T>(() => readValue(key, initialValue));
47
45
 
48
46
  const setValue = useCallback(
49
47
  (value: T | ((previous: T) => T)) => {
50
48
  setStored((previous) => {
51
49
  const next =
52
- typeof value === "function" ? (value as (p: T) => T)(previous) : value;
50
+ typeof value === "function"
51
+ ? (value as (p: T) => T)(previous)
52
+ : value;
53
53
  try {
54
54
  if (typeof window !== "undefined") {
55
55
  window.localStorage.setItem(key, JSON.stringify(next));
@@ -12,10 +12,7 @@ import { useEffect, useState } from "react";
12
12
  * @param defaultValue - Value to use before hydration or when `matchMedia` is unavailable (default `false`).
13
13
  * @returns Current `matches` boolean for the query.
14
14
  */
15
- export function useMediaQuery(
16
- query: string,
17
- defaultValue = false,
18
- ): boolean {
15
+ export function useMediaQuery(query: string, defaultValue = false): boolean {
19
16
  const [matches, setMatches] = useState(defaultValue);
20
17
 
21
18
  useEffect(() => {
@@ -21,7 +21,9 @@ describe("usePrefersReducedMotion", () => {
21
21
  }) as unknown as MediaQueryList,
22
22
  );
23
23
  const { result } = renderHook(() => usePrefersReducedMotion());
24
- expect(matchMediaSpy).toHaveBeenCalledWith("(prefers-reduced-motion: reduce)");
24
+ expect(matchMediaSpy).toHaveBeenCalledWith(
25
+ "(prefers-reduced-motion: reduce)",
26
+ );
25
27
  expect(result.current).toBe(true);
26
28
  });
27
29
  });
@@ -1,4 +1 @@
1
- export {
2
- useResizeObserver,
3
- type ElementSize,
4
- } from "./useResizeObserver";
1
+ export { useResizeObserver, type ElementSize } from "./useResizeObserver";
@@ -19,18 +19,14 @@ describe("useSessionStorage", () => {
19
19
  it("should apply stored value from sessionStorage after mount", async () => {
20
20
  const key = `${keyPrefix}-hydrate`;
21
21
  sessionStorage.setItem(key, JSON.stringify("stored"));
22
- const { result } = renderHook(() =>
23
- useSessionStorage(key, "initial"),
24
- );
22
+ const { result } = renderHook(() => useSessionStorage(key, "initial"));
25
23
  await flushEffects();
26
24
  expect(result.current[0]).toBe("stored");
27
25
  });
28
26
 
29
27
  it("should persist setValue to sessionStorage", async () => {
30
28
  const key = `${keyPrefix}-persist`;
31
- const { result } = renderHook(() =>
32
- useSessionStorage(key, { n: 0 }),
33
- );
29
+ const { result } = renderHook(() => useSessionStorage(key, { n: 0 }));
34
30
  await flushEffects();
35
31
  act(() => {
36
32
  result.current[1]({ n: 3 });
@@ -47,7 +47,9 @@ export function useSessionStorage<T>(
47
47
  (value: T | ((previous: T) => T)) => {
48
48
  setStored((previous) => {
49
49
  const next =
50
- typeof value === "function" ? (value as (p: T) => T)(previous) : value;
50
+ typeof value === "function"
51
+ ? (value as (p: T) => T)(previous)
52
+ : value;
51
53
  try {
52
54
  if (typeof window !== "undefined") {
53
55
  window.sessionStorage.setItem(key, JSON.stringify(next));
@@ -74,7 +76,7 @@ export function useSessionStorage<T>(
74
76
 
75
77
  useEffect(() => {
76
78
  const next = readValue(key, initialValue);
77
-
79
+
78
80
  setStored((prev) => {
79
81
  return JSON.stringify(prev) === JSON.stringify(next) ? prev : next;
80
82
  });
@@ -13,9 +13,10 @@ import { useCallback, useEffect, useRef } from "react";
13
13
  * @param intervalMs - Minimum milliseconds between invocations.
14
14
  * @returns Throttled function with the same call signature as `callback`.
15
15
  */
16
- export function useThrottledCallback<
17
- T extends (...args: any[]) => void,
18
- >(callback: T, intervalMs: number): T {
16
+ export function useThrottledCallback<T extends (...args: any[]) => void>(
17
+ callback: T,
18
+ intervalMs: number,
19
+ ): T {
19
20
  const callbackRef = useRef(callback);
20
21
  const lastRunRef = useRef(0);
21
22
 
@@ -26,7 +26,10 @@ export function useWindowSize(): WindowSize {
26
26
 
27
27
  useEffect(() => {
28
28
  const onResize = () => {
29
- setSize({ width: window.innerWidth || 0, height: window.innerHeight || 0 });
29
+ setSize({
30
+ width: window.innerWidth || 0,
31
+ height: window.innerHeight || 0,
32
+ });
30
33
  };
31
34
  onResize();
32
35
  window.addEventListener("resize", onResize);
package/src/lib/utils.ts CHANGED
@@ -10,7 +10,7 @@ export const clampPage = (page: number, pageCount: number): number => {
10
10
  return 1;
11
11
  }
12
12
  return Math.min(pageCount, Math.max(1, Math.floor(page)));
13
- }
13
+ };
14
14
 
15
15
  export const range = (from: number, to: number): number[] => {
16
16
  const out: number[] = [];
@@ -18,8 +18,8 @@ export const range = (from: number, to: number): number[] => {
18
18
  out.push(i);
19
19
  }
20
20
  return out;
21
- }
21
+ };
22
22
 
23
23
  export const clamp = (value: number, min: number, max: number) => {
24
24
  return Math.min(max, Math.max(min, value));
25
- }
25
+ };