@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.
- package/README.md +136 -90
- package/cli/index.mjs +45 -26
- package/cli/registry.json +9 -1
- package/cli/rewrite-imports.mjs +8 -3
- package/dist/charts/area/Area.d.ts +6 -0
- package/dist/charts/area/Area.d.ts.map +1 -0
- package/dist/charts/area/index.d.ts +4 -0
- package/dist/charts/area/index.d.ts.map +1 -0
- package/dist/charts/area.js +119 -0
- package/dist/charts/area.js.map +1 -0
- package/dist/charts/area.mjs +106 -0
- package/dist/charts/area.mjs.map +1 -0
- package/dist/charts/bar/Bar.d.ts +6 -0
- package/dist/charts/bar/Bar.d.ts.map +1 -0
- package/dist/charts/bar/index.d.ts +4 -0
- package/dist/charts/bar/index.d.ts.map +1 -0
- package/dist/charts/bar.js +110 -0
- package/dist/charts/bar.js.map +1 -0
- package/dist/charts/bar.mjs +97 -0
- package/dist/charts/bar.mjs.map +1 -0
- package/dist/charts/bubble/Bubble.d.ts +6 -0
- package/dist/charts/bubble/Bubble.d.ts.map +1 -0
- package/dist/charts/bubble/index.d.ts +4 -0
- package/dist/charts/bubble/index.d.ts.map +1 -0
- package/dist/charts/bubble.js +122 -0
- package/dist/charts/bubble.js.map +1 -0
- package/dist/charts/bubble.mjs +109 -0
- package/dist/charts/bubble.mjs.map +1 -0
- package/dist/charts/line/Line.d.ts +6 -0
- package/dist/charts/line/Line.d.ts.map +1 -0
- package/dist/charts/line/index.d.ts +4 -0
- package/dist/charts/line/index.d.ts.map +1 -0
- package/dist/charts/line.js +113 -0
- package/dist/charts/line.js.map +1 -0
- package/dist/charts/line.mjs +100 -0
- package/dist/charts/line.mjs.map +1 -0
- package/dist/charts/shared/chart-frame.d.ts +32 -0
- package/dist/charts/shared/chart-frame.d.ts.map +1 -0
- package/dist/charts/shared/colors.d.ts +43 -0
- package/dist/charts/shared/colors.d.ts.map +1 -0
- package/dist/charts/shared/types.d.ts +43 -0
- package/dist/charts/shared/types.d.ts.map +1 -0
- package/dist/charts/shared/variants.d.ts +93 -0
- package/dist/charts/shared/variants.d.ts.map +1 -0
- package/dist/{chunk-IXDJ3IPG.mjs → chunk-2BAMNRAL.mjs} +40 -32
- package/dist/chunk-2BAMNRAL.mjs.map +1 -0
- package/dist/{chunk-JE3PD5ZA.js → chunk-2VUMVDR3.js} +8 -8
- package/dist/{chunk-JE3PD5ZA.js.map → chunk-2VUMVDR3.js.map} +1 -1
- package/dist/{chunk-DFEZH7TC.mjs → chunk-4D54YOL6.mjs} +2 -2
- package/dist/{chunk-DFEZH7TC.mjs.map → chunk-4D54YOL6.mjs.map} +1 -1
- package/dist/{chunk-BORK3BJO.mjs → chunk-5TV7EL3H.mjs} +19 -19
- package/dist/chunk-5TV7EL3H.mjs.map +1 -0
- package/dist/{chunk-BSWYZTYK.js → chunk-7DCFVPWN.js} +2 -2
- package/dist/chunk-7DCFVPWN.js.map +1 -0
- package/dist/{chunk-5QB2KNZQ.js → chunk-7TLKLMBM.js} +11 -9
- package/dist/chunk-7TLKLMBM.js.map +1 -0
- package/dist/{chunk-2P3UU2J3.mjs → chunk-A6KMZ5ZS.mjs} +12 -12
- package/dist/chunk-A6KMZ5ZS.mjs.map +1 -0
- package/dist/{chunk-U4YQCAXW.js → chunk-AD2LA3XN.js} +18 -18
- package/dist/chunk-AD2LA3XN.js.map +1 -0
- package/dist/{chunk-XLAFQ24R.js → chunk-AUGLZ3AN.js} +49 -41
- package/dist/chunk-AUGLZ3AN.js.map +1 -0
- package/dist/{chunk-OJ67PZ6N.js → chunk-BCZIYH53.js} +8 -8
- package/dist/{chunk-OJ67PZ6N.js.map → chunk-BCZIYH53.js.map} +1 -1
- package/dist/{chunk-UBFKTC2P.mjs → chunk-C5L465FW.mjs} +12 -12
- package/dist/chunk-C5L465FW.mjs.map +1 -0
- package/dist/chunk-CIN5JDN4.js +174 -0
- package/dist/chunk-CIN5JDN4.js.map +1 -0
- package/dist/{chunk-3OR47XMY.js → chunk-E4FZY7O2.js} +52 -33
- package/dist/chunk-E4FZY7O2.js.map +1 -0
- package/dist/{chunk-LVUPECBT.mjs → chunk-FQBMIZH2.mjs} +12 -12
- package/dist/chunk-FQBMIZH2.mjs.map +1 -0
- package/dist/{chunk-RDSPHBHK.mjs → chunk-G3LEYBRV.mjs} +50 -7
- package/dist/chunk-G3LEYBRV.mjs.map +1 -0
- package/dist/chunk-GBWGVNDA.js +160 -0
- package/dist/chunk-GBWGVNDA.js.map +1 -0
- package/dist/{chunk-XWM2S6VV.mjs → chunk-I6GR234Z.mjs} +22 -20
- package/dist/chunk-I6GR234Z.mjs.map +1 -0
- package/dist/{chunk-UXGHUBNJ.mjs → chunk-INMNX3HQ.mjs} +13 -13
- package/dist/{chunk-UXGHUBNJ.mjs.map → chunk-INMNX3HQ.mjs.map} +1 -1
- package/dist/chunk-IQZROQNJ.mjs +165 -0
- package/dist/chunk-IQZROQNJ.mjs.map +1 -0
- package/dist/{chunk-PGH27VTL.mjs → chunk-JBAUEGYD.mjs} +40 -32
- package/dist/chunk-JBAUEGYD.mjs.map +1 -0
- package/dist/{chunk-WZKGRU3U.js → chunk-JUDMPOCI.js} +103 -38
- package/dist/chunk-JUDMPOCI.js.map +1 -0
- package/dist/chunk-K6YI4FJO.mjs +158 -0
- package/dist/chunk-K6YI4FJO.mjs.map +1 -0
- package/dist/{chunk-WP7GYBRI.js → chunk-KC5LEZ6J.js} +2 -2
- package/dist/chunk-KC5LEZ6J.js.map +1 -0
- package/dist/{chunk-BVXTOEBI.mjs → chunk-LN77JJTY.mjs} +45 -26
- package/dist/chunk-LN77JJTY.mjs.map +1 -0
- package/dist/{chunk-E3DZNJAD.js → chunk-MCOQHXRW.js} +23 -21
- package/dist/chunk-MCOQHXRW.js.map +1 -0
- package/dist/{chunk-FLILFCQE.mjs → chunk-MTLLJFUI.mjs} +7 -8
- package/dist/chunk-MTLLJFUI.mjs.map +1 -0
- package/dist/{chunk-6I7X5BF2.js → chunk-N2OAI2HN.js} +18 -18
- package/dist/chunk-N2OAI2HN.js.map +1 -0
- package/dist/{chunk-BITDSQMR.js → chunk-OB4KJZK2.js} +19 -19
- package/dist/chunk-OB4KJZK2.js.map +1 -0
- package/dist/{chunk-PCK6LX3K.js → chunk-OLEMP2HL.js} +19 -19
- package/dist/{chunk-PCK6LX3K.js.map → chunk-OLEMP2HL.js.map} +1 -1
- package/dist/{chunk-2PQEXQVR.js → chunk-PWL5WD34.js} +76 -27
- package/dist/chunk-PWL5WD34.js.map +1 -0
- package/dist/{chunk-N4NO3SYL.js → chunk-Q5B44QW7.js} +48 -40
- package/dist/chunk-Q5B44QW7.js.map +1 -0
- package/dist/{chunk-FT2LMA66.mjs → chunk-QADZK5R7.mjs} +2 -2
- package/dist/chunk-QADZK5R7.mjs.map +1 -0
- package/dist/{chunk-WDCIZHXY.mjs → chunk-QZTEFGZF.mjs} +6 -4
- package/dist/chunk-QZTEFGZF.mjs.map +1 -0
- package/dist/{chunk-UOFTZKMM.js → chunk-S7WKFNPT.js} +18 -18
- package/dist/chunk-S7WKFNPT.js.map +1 -0
- package/dist/{chunk-XIXF7UVM.mjs → chunk-TINHLHCN.mjs} +12 -12
- package/dist/chunk-TINHLHCN.mjs.map +1 -0
- package/dist/{chunk-7HL3A4YF.mjs → chunk-TJUNN2PT.mjs} +73 -24
- package/dist/chunk-TJUNN2PT.mjs.map +1 -0
- package/dist/{chunk-4B7KGBQB.js → chunk-UWA23DUC.js} +12 -13
- package/dist/chunk-UWA23DUC.js.map +1 -0
- package/dist/{chunk-CY5BQKRZ.mjs → chunk-VXDEPZKH.mjs} +2 -2
- package/dist/chunk-VXDEPZKH.mjs.map +1 -0
- package/dist/{chunk-C2FCPQTO.js → chunk-Y745GQR2.js} +16 -16
- package/dist/chunk-Y745GQR2.js.map +1 -0
- package/dist/{chunk-TZ2JVWTZ.mjs → chunk-YNBJAFI2.mjs} +3 -3
- package/dist/{chunk-TZ2JVWTZ.mjs.map → chunk-YNBJAFI2.mjs.map} +1 -1
- package/dist/{chunk-P5HUBXUX.js → chunk-YTRGRHEB.js} +55 -12
- package/dist/chunk-YTRGRHEB.js.map +1 -0
- package/dist/{chunk-YNCD6TKE.mjs → chunk-ZBBFOMSJ.mjs} +103 -38
- package/dist/chunk-ZBBFOMSJ.mjs.map +1 -0
- package/dist/{chunk-UOZYPWDZ.js → chunk-ZS5756ZC.js} +2 -2
- package/dist/{chunk-UOZYPWDZ.js.map → chunk-ZS5756ZC.js.map} +1 -1
- package/dist/{chunk-W6PRMYUC.mjs → chunk-ZYZJ74XB.mjs} +3 -3
- package/dist/{chunk-W6PRMYUC.mjs.map → chunk-ZYZJ74XB.mjs.map} +1 -1
- package/dist/hooks/index.d.ts +2 -2
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/useClickOutside/useClickOutside.d.ts.map +1 -1
- package/dist/hooks/useClickOutside.js +2 -2
- package/dist/hooks/useClickOutside.mjs +1 -1
- package/dist/hooks/useClipboard/useClipboard.d.ts.map +1 -1
- package/dist/hooks/useClipboard.js.map +1 -1
- package/dist/hooks/useClipboard.mjs.map +1 -1
- package/dist/hooks/useFocusManagement/useFocusManagement.d.ts +5 -14
- package/dist/hooks/useFocusManagement/useFocusManagement.d.ts.map +1 -1
- package/dist/hooks/useFocusManagement.js +2 -2
- package/dist/hooks/useFocusManagement.mjs +1 -1
- package/dist/hooks/useLocalStorage/index.d.ts +1 -1
- package/dist/hooks/useLocalStorage/index.d.ts.map +1 -1
- package/dist/hooks/useLocalStorage.js +1 -3
- package/dist/hooks/useLocalStorage.js.map +1 -1
- package/dist/hooks/useLocalStorage.mjs +1 -3
- package/dist/hooks/useLocalStorage.mjs.map +1 -1
- package/dist/hooks/useMediaQuery/useMediaQuery.d.ts.map +1 -1
- package/dist/hooks/useMediaQuery.js +2 -2
- package/dist/hooks/useMediaQuery.mjs +1 -1
- package/dist/hooks/usePagination.js +4 -4
- package/dist/hooks/usePagination.mjs +2 -2
- package/dist/hooks/usePrefersColorScheme.js +2 -2
- package/dist/hooks/usePrefersColorScheme.mjs +1 -1
- package/dist/hooks/usePrefersReducedMotion.js +2 -2
- package/dist/hooks/usePrefersReducedMotion.mjs +1 -1
- package/dist/hooks/useResizeObserver/index.d.ts +1 -1
- package/dist/hooks/useResizeObserver/index.d.ts.map +1 -1
- package/dist/hooks/useSessionStorage/useSessionStorage.d.ts.map +1 -1
- package/dist/hooks/useSessionStorage.js.map +1 -1
- package/dist/hooks/useSessionStorage.mjs.map +1 -1
- package/dist/hooks/useThrottledCallback/useThrottledCallback.d.ts.map +1 -1
- package/dist/hooks/useThrottledCallback.js.map +1 -1
- package/dist/hooks/useThrottledCallback.mjs.map +1 -1
- package/dist/hooks/useWindowSize/useWindowSize.d.ts.map +1 -1
- package/dist/hooks/useWindowSize.js +4 -1
- package/dist/hooks/useWindowSize.js.map +1 -1
- package/dist/hooks/useWindowSize.mjs +4 -1
- package/dist/hooks/useWindowSize.mjs.map +1 -1
- package/dist/hooks/utils.js +5 -5
- package/dist/hooks/utils.mjs +1 -1
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/ui/accordion/accordion.d.ts.map +1 -1
- package/dist/ui/accordion/animated/accordion-content-animated.d.ts.map +1 -1
- package/dist/ui/accordion/animated/index.d.ts +1 -1
- package/dist/ui/accordion/animated/index.d.ts.map +1 -1
- package/dist/ui/accordion/animated/types.d.ts.map +1 -1
- package/dist/ui/accordion/animated.js +8 -11
- package/dist/ui/accordion/animated.js.map +1 -1
- package/dist/ui/accordion/animated.mjs +4 -7
- package/dist/ui/accordion/animated.mjs.map +1 -1
- package/dist/ui/accordion/variants.d.ts +2 -2
- package/dist/ui/accordion.js +10 -10
- package/dist/ui/accordion.js.map +1 -1
- package/dist/ui/accordion.mjs +3 -3
- package/dist/ui/accordion.mjs.map +1 -1
- package/dist/ui/alert/alert-base.d.ts.map +1 -1
- package/dist/ui/alert/alert.d.ts.map +1 -1
- package/dist/ui/alert/animated/index.d.ts.map +1 -1
- package/dist/ui/alert/animated.js +3 -3
- package/dist/ui/alert/animated.mjs +2 -2
- package/dist/ui/alert/types.d.ts.map +1 -1
- package/dist/ui/alert/variants.d.ts +1 -1
- package/dist/ui/alert.js +11 -11
- package/dist/ui/alert.js.map +1 -1
- package/dist/ui/alert.mjs +3 -3
- package/dist/ui/alert.mjs.map +1 -1
- package/dist/ui/avatar/animated/index.d.ts +1 -1
- package/dist/ui/avatar/animated/index.d.ts.map +1 -1
- package/dist/ui/avatar/animated.js +6 -6
- package/dist/ui/avatar/animated.mjs +3 -3
- package/dist/ui/avatar/avatar-base.d.ts.map +1 -1
- package/dist/ui/avatar/avatar.d.ts.map +1 -1
- package/dist/ui/avatar/variants.d.ts +1 -1
- package/dist/ui/avatar/variants.d.ts.map +1 -1
- package/dist/ui/avatar.js +10 -10
- package/dist/ui/avatar.js.map +1 -1
- package/dist/ui/avatar.mjs +3 -3
- package/dist/ui/avatar.mjs.map +1 -1
- package/dist/ui/badge/animated/index.d.ts +1 -1
- package/dist/ui/badge/animated/index.d.ts.map +1 -1
- package/dist/ui/badge/animated/types.d.ts.map +1 -1
- package/dist/ui/badge/animated.js +3 -3
- package/dist/ui/badge/animated.mjs +2 -2
- package/dist/ui/badge/badge-base.d.ts +1 -1
- package/dist/ui/badge/badge-base.d.ts.map +1 -1
- package/dist/ui/badge/types.d.ts +1 -0
- package/dist/ui/badge/types.d.ts.map +1 -1
- package/dist/ui/badge/variants.d.ts +18 -18
- package/dist/ui/badge/variants.d.ts.map +1 -1
- package/dist/ui/badge.js +5 -5
- package/dist/ui/badge.mjs +3 -3
- package/dist/ui/breadcrumb/breadcrumb.d.ts.map +1 -1
- package/dist/ui/breadcrumb/types.d.ts.map +1 -1
- package/dist/ui/breadcrumb/variants.d.ts +1 -1
- package/dist/ui/breadcrumb/variants.d.ts.map +1 -1
- package/dist/ui/breadcrumb.js +47 -43
- package/dist/ui/breadcrumb.js.map +1 -1
- package/dist/ui/breadcrumb.mjs +43 -39
- package/dist/ui/breadcrumb.mjs.map +1 -1
- package/dist/ui/buttons/animated/index.d.ts +1 -1
- package/dist/ui/buttons/animated/index.d.ts.map +1 -1
- package/dist/ui/buttons/animated/types.d.ts.map +1 -1
- package/dist/ui/buttons/animated.js +4 -4
- package/dist/ui/buttons/animated.mjs +2 -2
- package/dist/ui/buttons/types.d.ts.map +1 -1
- package/dist/ui/buttons/variants.d.ts +2 -2
- package/dist/ui/buttons.js +5 -5
- package/dist/ui/buttons.mjs +3 -3
- package/dist/ui/card/animated.js +8 -8
- package/dist/ui/card/animated.mjs +3 -3
- package/dist/ui/card/card-base.d.ts.map +1 -1
- package/dist/ui/card/card.d.ts.map +1 -1
- package/dist/ui/card/index.d.ts +2 -2
- package/dist/ui/card/index.d.ts.map +1 -1
- package/dist/ui/card/variants.d.ts +1 -1
- package/dist/ui/card.js +13 -13
- package/dist/ui/card.js.map +1 -1
- package/dist/ui/card.mjs +3 -3
- package/dist/ui/card.mjs.map +1 -1
- package/dist/ui/divider/animated/index.d.ts +1 -1
- package/dist/ui/divider/animated/index.d.ts.map +1 -1
- package/dist/ui/divider/animated/types.d.ts.map +1 -1
- package/dist/ui/divider/animated.js +3 -3
- package/dist/ui/divider/animated.mjs +2 -2
- package/dist/ui/divider/divider-base.d.ts.map +1 -1
- package/dist/ui/divider/variants.d.ts +2 -2
- package/dist/ui/divider.js +7 -7
- package/dist/ui/divider.mjs +3 -3
- package/dist/ui/drawer/animated/drawer-content-animated.d.ts.map +1 -1
- package/dist/ui/drawer/animated/index.d.ts +1 -1
- package/dist/ui/drawer/animated/index.d.ts.map +1 -1
- package/dist/ui/drawer/animated.js +19 -20
- package/dist/ui/drawer/animated.js.map +1 -1
- package/dist/ui/drawer/animated.mjs +9 -10
- package/dist/ui/drawer/animated.mjs.map +1 -1
- package/dist/ui/drawer/drawer-base.d.ts +1 -1
- package/dist/ui/drawer/drawer-base.d.ts.map +1 -1
- package/dist/ui/drawer/types.d.ts +1 -0
- package/dist/ui/drawer/types.d.ts.map +1 -1
- package/dist/ui/drawer/variants.d.ts +3 -3
- package/dist/ui/drawer.js +13 -13
- package/dist/ui/drawer.mjs +3 -3
- package/dist/ui/dropdown/dropdown.d.ts +1 -1
- package/dist/ui/dropdown/dropdown.d.ts.map +1 -1
- package/dist/ui/dropdown/types.d.ts +1 -0
- package/dist/ui/dropdown/types.d.ts.map +1 -1
- package/dist/ui/dropdown/variants.d.ts +4 -4
- package/dist/ui/dropdown.js +49 -31
- package/dist/ui/dropdown.js.map +1 -1
- package/dist/ui/dropdown.mjs +46 -28
- package/dist/ui/dropdown.mjs.map +1 -1
- package/dist/ui/empty-state/animated/empty-state-animated.d.ts.map +1 -1
- package/dist/ui/empty-state/animated/index.d.ts +2 -2
- package/dist/ui/empty-state/animated/index.d.ts.map +1 -1
- package/dist/ui/empty-state/animated.js +3 -3
- package/dist/ui/empty-state/animated.js.map +1 -1
- package/dist/ui/empty-state/animated.mjs +2 -2
- package/dist/ui/empty-state/animated.mjs.map +1 -1
- package/dist/ui/empty-state/empty-state-base.d.ts.map +1 -1
- package/dist/ui/empty-state/index.d.ts +1 -1
- package/dist/ui/empty-state/index.d.ts.map +1 -1
- package/dist/ui/empty-state/types.d.ts +1 -0
- package/dist/ui/empty-state/types.d.ts.map +1 -1
- package/dist/ui/empty-state.js +11 -11
- package/dist/ui/empty-state.mjs +3 -3
- package/dist/ui/file-upload/file-upload.d.ts.map +1 -1
- package/dist/ui/file-upload/variants.d.ts +1 -1
- package/dist/ui/file-upload/variants.d.ts.map +1 -1
- package/dist/ui/file-upload.js +4 -6
- package/dist/ui/file-upload.js.map +1 -1
- package/dist/ui/file-upload.mjs +2 -4
- package/dist/ui/file-upload.mjs.map +1 -1
- package/dist/ui/inputs/animated/index.d.ts +1 -1
- package/dist/ui/inputs/animated/index.d.ts.map +1 -1
- package/dist/ui/inputs/animated.js +3 -3
- package/dist/ui/inputs/animated.mjs +1 -1
- package/dist/ui/inputs/input-base.d.ts.map +1 -1
- package/dist/ui/inputs/types.d.ts +3 -1
- package/dist/ui/inputs/types.d.ts.map +1 -1
- package/dist/ui/inputs/variants.d.ts +2 -2
- package/dist/ui/inputs.js +49 -5
- package/dist/ui/inputs.js.map +1 -1
- package/dist/ui/inputs.mjs +47 -3
- package/dist/ui/inputs.mjs.map +1 -1
- package/dist/ui/modal/animated/index.d.ts +1 -1
- package/dist/ui/modal/animated/index.d.ts.map +1 -1
- package/dist/ui/modal/animated/modal-content-animated.d.ts.map +1 -1
- package/dist/ui/modal/animated.js +12 -13
- package/dist/ui/modal/animated.js.map +1 -1
- package/dist/ui/modal/animated.mjs +8 -9
- package/dist/ui/modal/animated.mjs.map +1 -1
- package/dist/ui/modal/index.d.ts +1 -1
- package/dist/ui/modal/index.d.ts.map +1 -1
- package/dist/ui/modal/modal-base.d.ts +4 -2
- package/dist/ui/modal/modal-base.d.ts.map +1 -1
- package/dist/ui/modal/types.d.ts.map +1 -1
- package/dist/ui/modal/variants.d.ts +2 -2
- package/dist/ui/modal.js +14 -14
- package/dist/ui/modal.js.map +1 -1
- package/dist/ui/modal.mjs +4 -4
- package/dist/ui/modal.mjs.map +1 -1
- package/dist/ui/pagination/pagination.d.ts +2 -2
- package/dist/ui/pagination/variants.d.ts +3 -3
- package/dist/ui/pagination.js +25 -25
- package/dist/ui/pagination.js.map +1 -1
- package/dist/ui/pagination.mjs +15 -15
- package/dist/ui/pagination.mjs.map +1 -1
- package/dist/ui/progress/animated/progress-animated.d.ts.map +1 -1
- package/dist/ui/progress/animated.js +52 -14
- package/dist/ui/progress/animated.js.map +1 -1
- package/dist/ui/progress/animated.mjs +45 -7
- package/dist/ui/progress/animated.mjs.map +1 -1
- package/dist/ui/progress/index.d.ts +2 -2
- package/dist/ui/progress/index.d.ts.map +1 -1
- package/dist/ui/progress/progress-base.d.ts.map +1 -1
- package/dist/ui/progress/progress.d.ts.map +1 -1
- package/dist/ui/progress/types.d.ts +3 -0
- package/dist/ui/progress/types.d.ts.map +1 -1
- package/dist/ui/progress/variants.d.ts +1 -1
- package/dist/ui/progress.js +10 -15
- package/dist/ui/progress.js.map +1 -1
- package/dist/ui/progress.mjs +4 -9
- package/dist/ui/progress.mjs.map +1 -1
- package/dist/ui/search/search-bar.d.ts +1 -1
- package/dist/ui/search/search-bar.d.ts.map +1 -1
- package/dist/ui/search/search-suggestion-list.d.ts.map +1 -1
- package/dist/ui/search/search-suggestion-utils.d.ts.map +1 -1
- package/dist/ui/search.js +15 -7
- package/dist/ui/search.js.map +1 -1
- package/dist/ui/search.mjs +11 -3
- package/dist/ui/search.mjs.map +1 -1
- package/dist/ui/select/select.d.ts +1 -1
- package/dist/ui/select/select.d.ts.map +1 -1
- package/dist/ui/select/types.d.ts +1 -0
- package/dist/ui/select/types.d.ts.map +1 -1
- package/dist/ui/select/variants.d.ts +4 -4
- package/dist/ui/select/variants.d.ts.map +1 -1
- package/dist/ui/select.js +145 -63
- package/dist/ui/select.js.map +1 -1
- package/dist/ui/select.mjs +141 -59
- package/dist/ui/select.mjs.map +1 -1
- package/dist/ui/skeleton/animated/skeleton-animated.d.ts.map +1 -1
- package/dist/ui/skeleton/animated/types.d.ts.map +1 -1
- package/dist/ui/skeleton/animated.js +34 -10
- package/dist/ui/skeleton/animated.js.map +1 -1
- package/dist/ui/skeleton/animated.mjs +29 -5
- package/dist/ui/skeleton/animated.mjs.map +1 -1
- package/dist/ui/skeleton/variants.d.ts +3 -3
- package/dist/ui/skeleton.js +10 -10
- package/dist/ui/skeleton.mjs +2 -2
- package/dist/ui/slider/slider.d.ts.map +1 -1
- package/dist/ui/slider/types.d.ts +8 -2
- package/dist/ui/slider/types.d.ts.map +1 -1
- package/dist/ui/slider/variants.d.ts +1 -1
- package/dist/ui/slider.js +53 -17
- package/dist/ui/slider.js.map +1 -1
- package/dist/ui/slider.mjs +45 -9
- package/dist/ui/slider.mjs.map +1 -1
- package/dist/ui/spinner/animated/spinner.d.ts.map +1 -1
- package/dist/ui/spinner/animated/variants.d.ts +1 -1
- package/dist/ui/spinner/animated.js +68 -56
- package/dist/ui/spinner/animated.js.map +1 -1
- package/dist/ui/spinner/animated.mjs +64 -52
- package/dist/ui/spinner/animated.mjs.map +1 -1
- package/dist/ui/stepper/stepper.d.ts +2 -7
- package/dist/ui/stepper/stepper.d.ts.map +1 -1
- package/dist/ui/stepper/types.d.ts +3 -3
- package/dist/ui/stepper/types.d.ts.map +1 -1
- package/dist/ui/stepper/variants.d.ts +1 -1
- package/dist/ui/stepper/variants.d.ts.map +1 -1
- package/dist/ui/stepper.js +12 -13
- package/dist/ui/stepper.js.map +1 -1
- package/dist/ui/stepper.mjs +9 -10
- package/dist/ui/stepper.mjs.map +1 -1
- package/dist/ui/table/animated/index.d.ts +2 -2
- package/dist/ui/table/animated/index.d.ts.map +1 -1
- package/dist/ui/table/animated.js +9 -9
- package/dist/ui/table/animated.mjs +3 -3
- package/dist/ui/table/table-base.d.ts +1 -1
- package/dist/ui/table/table-base.d.ts.map +1 -1
- package/dist/ui/table/types.d.ts +5 -1
- package/dist/ui/table/types.d.ts.map +1 -1
- package/dist/ui/table/variants.d.ts +3 -3
- package/dist/ui/table.js +15 -15
- package/dist/ui/table.mjs +2 -2
- package/dist/ui/tabs/animated/animations.d.ts.map +1 -1
- package/dist/ui/tabs/animated/index.d.ts +1 -1
- package/dist/ui/tabs/animated/index.d.ts.map +1 -1
- package/dist/ui/tabs/animated/types.d.ts.map +1 -1
- package/dist/ui/tabs/animated.js +4 -4
- package/dist/ui/tabs/animated.js.map +1 -1
- package/dist/ui/tabs/animated.mjs +2 -2
- package/dist/ui/tabs/animated.mjs.map +1 -1
- package/dist/ui/tabs/index.d.ts +1 -1
- package/dist/ui/tabs/index.d.ts.map +1 -1
- package/dist/ui/tabs/tabs-base.d.ts.map +1 -1
- package/dist/ui/tabs/tabs.d.ts +1 -1
- package/dist/ui/tabs/tabs.d.ts.map +1 -1
- package/dist/ui/tabs/types.d.ts +2 -1
- package/dist/ui/tabs/types.d.ts.map +1 -1
- package/dist/ui/tabs/variants.d.ts +1 -1
- package/dist/ui/tabs.js +10 -10
- package/dist/ui/tabs.mjs +2 -2
- package/dist/ui/toast/animated/toast-animated.d.ts.map +1 -1
- package/dist/ui/toast/animated.js +12 -10
- package/dist/ui/toast/animated.js.map +1 -1
- package/dist/ui/toast/animated.mjs +5 -3
- package/dist/ui/toast/animated.mjs.map +1 -1
- package/dist/ui/toast/types.d.ts.map +1 -1
- package/dist/ui/toast/variants.d.ts +1 -1
- package/dist/ui/toast.js +13 -13
- package/dist/ui/toast.mjs +2 -2
- package/dist/ui/toggle/animated/index.d.ts +2 -2
- package/dist/ui/toggle/animated/index.d.ts.map +1 -1
- package/dist/ui/toggle/animated/types.d.ts.map +1 -1
- package/dist/ui/toggle/animated.js +3 -3
- package/dist/ui/toggle/animated.mjs +1 -1
- package/dist/ui/toggle/index.d.ts +1 -1
- package/dist/ui/toggle/index.d.ts.map +1 -1
- package/dist/ui/toggle/toggle-base.d.ts.map +1 -1
- package/dist/ui/toggle/variants.d.ts +1 -1
- package/dist/ui/toggle.js +31 -6
- package/dist/ui/toggle.js.map +1 -1
- package/dist/ui/toggle.mjs +30 -5
- package/dist/ui/toggle.mjs.map +1 -1
- package/dist/ui/tooltip/animated/animations.d.ts.map +1 -1
- package/dist/ui/tooltip/animated/types.d.ts.map +1 -1
- package/dist/ui/tooltip/animated.js +5 -5
- package/dist/ui/tooltip/animated.js.map +1 -1
- package/dist/ui/tooltip/animated.mjs +2 -2
- package/dist/ui/tooltip/animated.mjs.map +1 -1
- package/dist/ui/tooltip/tooltip-base.d.ts.map +1 -1
- package/dist/ui/tooltip/types.d.ts +1 -0
- package/dist/ui/tooltip/types.d.ts.map +1 -1
- package/dist/ui/tooltip/variants.d.ts +1 -1
- package/dist/ui/tooltip/variants.d.ts.map +1 -1
- package/dist/ui/tooltip.js +8 -8
- package/dist/ui/tooltip.mjs +2 -2
- package/dist/ui/typography/blockquote-base.d.ts.map +1 -1
- package/dist/ui/typography/code-block-base.d.ts.map +1 -1
- package/dist/ui/typography/heading-base.d.ts.map +1 -1
- package/dist/ui/typography/list-base.d.ts.map +1 -1
- package/dist/ui/typography/types.d.ts.map +1 -1
- package/dist/ui/typography/variants.d.ts +3 -3
- package/dist/ui/typography/variants.d.ts.map +1 -1
- package/dist/ui/typography.js +21 -43
- package/dist/ui/typography.js.map +1 -1
- package/dist/ui/typography.mjs +13 -35
- package/dist/ui/typography.mjs.map +1 -1
- package/package.json +32 -12
- package/src/charts/area/Area.tsx +103 -0
- package/src/charts/area/index.ts +9 -0
- package/src/charts/bar/Bar.tsx +94 -0
- package/src/charts/bar/index.ts +9 -0
- package/src/charts/bubble/Bubble.tsx +113 -0
- package/src/charts/bubble/index.ts +9 -0
- package/src/charts/line/Line.tsx +97 -0
- package/src/charts/line/index.ts +9 -0
- package/src/charts/shared/chart-frame.tsx +107 -0
- package/src/charts/shared/colors.ts +31 -0
- package/src/charts/shared/types.ts +60 -0
- package/src/charts/shared/variants.ts +87 -0
- package/src/hooks/index.ts +8 -2
- package/src/hooks/useClickOutside/useClickOutside.ts +1 -4
- package/src/hooks/useClipboard/useClipboard.test.ts +3 -1
- package/src/hooks/useClipboard/useClipboard.ts +1 -2
- package/src/hooks/useDisclosure/useDisclosure.test.ts +1 -2
- package/src/hooks/useDocumentTitle/useDocumentTitle.test.ts +1 -3
- package/src/hooks/useFocusManagement/useFocusManagement.test.tsx +8 -0
- package/src/hooks/useFocusManagement/useFocusManagement.ts +162 -34
- package/src/hooks/useInView/useInView.test.ts +6 -1
- package/src/hooks/useLocalStorage/index.ts +1 -4
- package/src/hooks/useLocalStorage/useLocalStorage.test.ts +8 -20
- package/src/hooks/useLocalStorage/useLocalStorage.ts +4 -4
- package/src/hooks/useMediaQuery/useMediaQuery.ts +1 -4
- package/src/hooks/usePrefersReducedMotion/usePrefersReducedMotion.test.ts +3 -1
- package/src/hooks/useResizeObserver/index.ts +1 -4
- package/src/hooks/useSessionStorage/useSessionStorage.test.ts +2 -6
- package/src/hooks/useSessionStorage/useSessionStorage.ts +4 -2
- package/src/hooks/useThrottledCallback/useThrottledCallback.ts +4 -3
- package/src/hooks/useWindowSize/useWindowSize.ts +4 -1
- package/src/lib/utils.ts +3 -3
- package/src/ui/accordion/accordion.tsx +6 -1
- package/src/ui/accordion/animated/accordion-content-animated.tsx +1 -4
- package/src/ui/accordion/animated/index.ts +4 -1
- package/src/ui/accordion/animated/types.ts +6 -2
- package/src/ui/accordion/variants.ts +9 -9
- package/src/ui/alert/alert-base.tsx +6 -1
- package/src/ui/alert/alert.tsx +2 -2
- package/src/ui/alert/animated/index.ts +2 -2
- package/src/ui/alert/animated/types.ts +1 -1
- package/src/ui/alert/types.ts +1 -3
- package/src/ui/alert/variants.ts +9 -9
- package/src/ui/avatar/animated/index.ts +6 -2
- package/src/ui/avatar/avatar-base.tsx +2 -7
- package/src/ui/avatar/avatar.tsx +6 -1
- package/src/ui/avatar/variants.ts +23 -11
- package/src/ui/badge/animated/index.ts +6 -2
- package/src/ui/badge/animated/types.ts +1 -2
- package/src/ui/badge/badge-base.tsx +4 -1
- package/src/ui/badge/types.ts +1 -0
- package/src/ui/badge/variants.ts +16 -18
- package/src/ui/breadcrumb/breadcrumb.tsx +10 -2
- package/src/ui/breadcrumb/types.ts +20 -9
- package/src/ui/breadcrumb/variants.ts +34 -38
- package/src/ui/buttons/animated/index.ts +7 -1
- package/src/ui/buttons/animated/types.ts +0 -1
- package/src/ui/buttons/button.test.tsx +2 -2
- package/src/ui/buttons/types.ts +4 -5
- package/src/ui/buttons/variants.ts +17 -17
- package/src/ui/card/animated/types.ts +0 -1
- package/src/ui/card/card-base.tsx +1 -6
- package/src/ui/card/card.test.tsx +7 -3
- package/src/ui/card/card.tsx +1 -3
- package/src/ui/card/index.ts +7 -3
- package/src/ui/card/types.ts +1 -1
- package/src/ui/card/variants.ts +9 -9
- package/src/ui/divider/animated/index.ts +5 -1
- package/src/ui/divider/animated/types.ts +4 -2
- package/src/ui/divider/divider-base.tsx +0 -1
- package/src/ui/drawer/animated/drawer-content-animated.tsx +6 -11
- package/src/ui/drawer/animated/index.ts +6 -1
- package/src/ui/drawer/drawer-base.tsx +16 -8
- package/src/ui/drawer/types.ts +12 -3
- package/src/ui/drawer/variants.ts +18 -18
- package/src/ui/dropdown/dropdown.test.tsx +1 -3
- package/src/ui/dropdown/dropdown.tsx +30 -5
- package/src/ui/dropdown/types.ts +1 -0
- package/src/ui/dropdown/variants.ts +20 -20
- package/src/ui/empty-state/animated/empty-state-animated.tsx +2 -4
- package/src/ui/empty-state/animated/index.ts +8 -5
- package/src/ui/empty-state/empty-state-base.tsx +14 -2
- package/src/ui/empty-state/index.ts +7 -1
- package/src/ui/empty-state/types.ts +1 -0
- package/src/ui/file-upload/file-upload.tsx +3 -9
- package/src/ui/file-upload/variants.ts +18 -9
- package/src/ui/inputs/animated/index.ts +7 -1
- package/src/ui/inputs/input-base.tsx +60 -6
- package/src/ui/inputs/input.test.tsx +5 -1
- package/src/ui/inputs/types.ts +7 -2
- package/src/ui/modal/animated/index.ts +6 -1
- package/src/ui/modal/animated/modal-content-animated.tsx +4 -5
- package/src/ui/modal/index.ts +1 -1
- package/src/ui/modal/modal-base.tsx +19 -10
- package/src/ui/modal/modal.test.tsx +44 -4
- package/src/ui/modal/modal.tsx +1 -1
- package/src/ui/modal/types.ts +10 -2
- package/src/ui/modal/variants.ts +18 -18
- package/src/ui/pagination/pagination.tsx +2 -2
- package/src/ui/pagination/variants.ts +9 -9
- package/src/ui/progress/animated/progress-animated.tsx +43 -5
- package/src/ui/progress/animated/types.ts +1 -1
- package/src/ui/progress/index.ts +12 -2
- package/src/ui/progress/progress-base.tsx +61 -5
- package/src/ui/progress/progress.test.tsx +1 -3
- package/src/ui/progress/progress.tsx +2 -6
- package/src/ui/progress/types.ts +3 -0
- package/src/ui/search/filter-search-suggestions.test.ts +46 -12
- package/src/ui/search/filter-search-suggestions.ts +3 -3
- package/src/ui/search/search-bar.tsx +22 -22
- package/src/ui/search/search-suggestion-list.tsx +14 -5
- package/src/ui/search/search-suggestion-utils.ts +4 -1
- package/src/ui/select/select.tsx +96 -6
- package/src/ui/select/types.ts +1 -0
- package/src/ui/select/variants.ts +71 -68
- package/src/ui/skeleton/animated/skeleton-animated.tsx +25 -4
- package/src/ui/skeleton/animated/types.ts +0 -1
- package/src/ui/skeleton/skeleton-base.tsx +3 -3
- package/src/ui/skeleton/variants.ts +9 -9
- package/src/ui/slider/slider.test.tsx +23 -9
- package/src/ui/slider/slider.tsx +45 -4
- package/src/ui/slider/types.ts +9 -3
- package/src/ui/slider/variants.ts +1 -1
- package/src/ui/spinner/animated/spinner.tsx +6 -3
- package/src/ui/stepper/stepper.test.tsx +5 -6
- package/src/ui/stepper/stepper.tsx +12 -16
- package/src/ui/stepper/types.ts +11 -5
- package/src/ui/stepper/variants.ts +30 -15
- package/src/ui/table/animated/index.ts +6 -4
- package/src/ui/table/table-base.tsx +32 -11
- package/src/ui/table/types.ts +8 -1
- package/src/ui/tabs/animated/animations.ts +5 -1
- package/src/ui/tabs/animated/index.ts +7 -1
- package/src/ui/tabs/animated/types.ts +3 -3
- package/src/ui/tabs/index.ts +8 -1
- package/src/ui/tabs/tabs-base.tsx +71 -10
- package/src/ui/tabs/tabs.tsx +8 -1
- package/src/ui/tabs/types.ts +2 -1
- package/src/ui/tabs/variants.ts +10 -10
- package/src/ui/toast/animated/toast-animated.tsx +3 -1
- package/src/ui/toast/animated/types.ts +1 -1
- package/src/ui/toast/toast-base.tsx +1 -1
- package/src/ui/toast/types.ts +3 -1
- package/src/ui/toast/variants.ts +9 -9
- package/src/ui/toggle/animated/index.ts +7 -4
- package/src/ui/toggle/animated/types.ts +4 -2
- package/src/ui/toggle/index.ts +5 -1
- package/src/ui/toggle/toggle-base.tsx +36 -4
- package/src/ui/tooltip/animated/animations.ts +0 -1
- package/src/ui/tooltip/animated/types.ts +0 -1
- package/src/ui/tooltip/tooltip-base.tsx +118 -22
- package/src/ui/tooltip/types.ts +1 -0
- package/src/ui/tooltip/variants.ts +11 -13
- package/src/ui/typography/blockquote-base.tsx +1 -8
- package/src/ui/typography/code-block-base.tsx +19 -24
- package/src/ui/typography/heading-base.tsx +35 -38
- package/src/ui/typography/inline-code-base.tsx +15 -15
- package/src/ui/typography/list-base.tsx +1 -9
- package/src/ui/typography/text-base.tsx +32 -32
- package/src/ui/typography/types.ts +4 -17
- package/src/ui/typography/typography.test.tsx +3 -1
- package/src/ui/typography/variants.ts +16 -8
- package/dist/chunk-2P3UU2J3.mjs.map +0 -1
- package/dist/chunk-2PQEXQVR.js.map +0 -1
- package/dist/chunk-3OR47XMY.js.map +0 -1
- package/dist/chunk-4B7KGBQB.js.map +0 -1
- package/dist/chunk-5QB2KNZQ.js.map +0 -1
- package/dist/chunk-6I7X5BF2.js.map +0 -1
- package/dist/chunk-7HL3A4YF.mjs.map +0 -1
- package/dist/chunk-BITDSQMR.js.map +0 -1
- package/dist/chunk-BORK3BJO.mjs.map +0 -1
- package/dist/chunk-BSWYZTYK.js.map +0 -1
- package/dist/chunk-BVXTOEBI.mjs.map +0 -1
- package/dist/chunk-C2FCPQTO.js.map +0 -1
- package/dist/chunk-CY5BQKRZ.mjs.map +0 -1
- package/dist/chunk-E3DZNJAD.js.map +0 -1
- package/dist/chunk-FLILFCQE.mjs.map +0 -1
- package/dist/chunk-FT2LMA66.mjs.map +0 -1
- package/dist/chunk-IXDJ3IPG.mjs.map +0 -1
- package/dist/chunk-LVUPECBT.mjs.map +0 -1
- package/dist/chunk-N4NO3SYL.js.map +0 -1
- package/dist/chunk-P5HUBXUX.js.map +0 -1
- package/dist/chunk-PGH27VTL.mjs.map +0 -1
- package/dist/chunk-RDSPHBHK.mjs.map +0 -1
- package/dist/chunk-U4YQCAXW.js.map +0 -1
- package/dist/chunk-UBFKTC2P.mjs.map +0 -1
- package/dist/chunk-UOFTZKMM.js.map +0 -1
- package/dist/chunk-WDCIZHXY.mjs.map +0 -1
- package/dist/chunk-WL5I7RVS.mjs +0 -54
- package/dist/chunk-WL5I7RVS.mjs.map +0 -1
- package/dist/chunk-WP7GYBRI.js.map +0 -1
- package/dist/chunk-WZKGRU3U.js.map +0 -1
- package/dist/chunk-XIXF7UVM.mjs.map +0 -1
- package/dist/chunk-XLAFQ24R.js.map +0 -1
- package/dist/chunk-XWM2S6VV.mjs.map +0 -1
- package/dist/chunk-YNCD6TKE.mjs.map +0 -1
- package/dist/chunk-YPLVTUYL.js +0 -56
- 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
|
+
>;
|
package/src/hooks/index.ts
CHANGED
|
@@ -23,7 +23,10 @@ export {
|
|
|
23
23
|
type UseDisclosureParams,
|
|
24
24
|
type UseDisclosureResult,
|
|
25
25
|
} from "./useDisclosure";
|
|
26
|
-
export {
|
|
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 {
|
|
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(
|
|
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
|
-
|
|
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
|
|
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<
|
|
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
|
-
|
|
71
|
+
useLayoutEffect(() => {
|
|
51
72
|
if (!open) {
|
|
52
73
|
return;
|
|
53
74
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
|
|
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
|
-
|
|
74
|
-
|
|
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,
|
|
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
|
-
[
|
|
37
|
+
[
|
|
38
|
+
{
|
|
39
|
+
isIntersecting: true,
|
|
40
|
+
target: el,
|
|
41
|
+
} as unknown as IntersectionObserverEntry,
|
|
42
|
+
],
|
|
38
43
|
{} as IntersectionObserver,
|
|
39
44
|
);
|
|
40
45
|
});
|
|
@@ -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"
|
|
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(
|
|
24
|
+
expect(matchMediaSpy).toHaveBeenCalledWith(
|
|
25
|
+
"(prefers-reduced-motion: reduce)",
|
|
26
|
+
);
|
|
25
27
|
expect(result.current).toBe(true);
|
|
26
28
|
});
|
|
27
29
|
});
|
|
@@ -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"
|
|
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
|
-
|
|
18
|
-
|
|
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({
|
|
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
|
+
};
|