@zentauri-ui/zentauri-components 1.4.5 → 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 +196 -88
- package/cli/index.mjs +45 -26
- package/cli/registry.json +11 -2
- 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 +25 -13
- package/dist/ui/search.js.map +1 -1
- package/dist/ui/search.mjs +21 -9
- 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 +6 -0
- package/dist/ui/typography/blockquote-base.d.ts.map +1 -0
- package/dist/ui/typography/blockquote.d.ts +6 -0
- package/dist/ui/typography/blockquote.d.ts.map +1 -0
- package/dist/ui/typography/code-block-base.d.ts +6 -0
- package/dist/ui/typography/code-block-base.d.ts.map +1 -0
- package/dist/ui/typography/code-block.d.ts +6 -0
- package/dist/ui/typography/code-block.d.ts.map +1 -0
- package/dist/ui/typography/heading-base.d.ts +6 -0
- package/dist/ui/typography/heading-base.d.ts.map +1 -0
- package/dist/ui/typography/heading.d.ts +6 -0
- package/dist/ui/typography/heading.d.ts.map +1 -0
- package/dist/ui/typography/index.d.ts +9 -0
- package/dist/ui/typography/index.d.ts.map +1 -0
- package/dist/ui/typography/inline-code-base.d.ts +6 -0
- package/dist/ui/typography/inline-code-base.d.ts.map +1 -0
- package/dist/ui/typography/inline-code.d.ts +6 -0
- package/dist/ui/typography/inline-code.d.ts.map +1 -0
- package/dist/ui/typography/list-base.d.ts +10 -0
- package/dist/ui/typography/list-base.d.ts.map +1 -0
- package/dist/ui/typography/list.d.ts +12 -0
- package/dist/ui/typography/list.d.ts.map +1 -0
- package/dist/ui/typography/text-base.d.ts +6 -0
- package/dist/ui/typography/text-base.d.ts.map +1 -0
- package/dist/ui/typography/text.d.ts +6 -0
- package/dist/ui/typography/text.d.ts.map +1 -0
- package/dist/ui/typography/types.d.ts +56 -0
- package/dist/ui/typography/types.d.ts.map +1 -0
- package/dist/ui/typography/variants.d.ts +16 -0
- package/dist/ui/typography/variants.d.ts.map +1 -0
- package/dist/ui/typography.js +312 -0
- package/dist/ui/typography.js.map +1 -0
- package/dist/ui/typography.mjs +299 -0
- package/dist/ui/typography.mjs.map +1 -0
- 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 +23 -23
- package/src/ui/search/search-suggestion-list.tsx +28 -11
- 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 +32 -0
- package/src/ui/typography/blockquote.tsx +8 -0
- package/src/ui/typography/code-block-base.tsx +32 -0
- package/src/ui/typography/code-block.tsx +8 -0
- package/src/ui/typography/heading-base.tsx +56 -0
- package/src/ui/typography/heading.tsx +8 -0
- package/src/ui/typography/index.ts +28 -0
- package/src/ui/typography/inline-code-base.tsx +27 -0
- package/src/ui/typography/inline-code.tsx +8 -0
- package/src/ui/typography/list-base.tsx +80 -0
- package/src/ui/typography/list.tsx +15 -0
- package/src/ui/typography/text-base.tsx +43 -0
- package/src/ui/typography/text.tsx +8 -0
- package/src/ui/typography/types.ts +77 -0
- package/src/ui/typography/typography.test.tsx +82 -0
- package/src/ui/typography/variants.ts +80 -0
- 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
|
@@ -7,6 +7,18 @@ import { cn } from "../../lib/utils";
|
|
|
7
7
|
import type { InputProps } from "./types";
|
|
8
8
|
import { inputVariants } from "./variants";
|
|
9
9
|
|
|
10
|
+
function mergeDescribedByIds(
|
|
11
|
+
user: string | undefined,
|
|
12
|
+
...generated: (string | undefined)[]
|
|
13
|
+
): string | undefined {
|
|
14
|
+
const ids = [
|
|
15
|
+
...(user ?? "").split(/\s+/).filter(Boolean),
|
|
16
|
+
...generated.filter((id): id is string => Boolean(id)),
|
|
17
|
+
];
|
|
18
|
+
const unique = [...new Set(ids)];
|
|
19
|
+
return unique.length > 0 ? unique.join(" ") : undefined;
|
|
20
|
+
}
|
|
21
|
+
|
|
10
22
|
export const InputBase = (props: InputProps) => {
|
|
11
23
|
const generatedId = useId();
|
|
12
24
|
|
|
@@ -19,13 +31,17 @@ export const InputBase = (props: InputProps) => {
|
|
|
19
31
|
ref,
|
|
20
32
|
"aria-invalid": ariaInvalidProp,
|
|
21
33
|
errorMessage,
|
|
34
|
+
hint,
|
|
35
|
+
label,
|
|
22
36
|
id,
|
|
23
37
|
as,
|
|
38
|
+
"aria-describedby": ariaDescribedByUser,
|
|
24
39
|
...rest
|
|
25
40
|
} = props;
|
|
26
41
|
|
|
27
42
|
const controlId = id ?? generatedId;
|
|
28
43
|
const errorId = `${controlId}-error`;
|
|
44
|
+
const hintId = `${controlId}-hint`;
|
|
29
45
|
const ariaInvalid =
|
|
30
46
|
ariaInvalidProp !== undefined
|
|
31
47
|
? ariaInvalidProp
|
|
@@ -33,8 +49,27 @@ export const InputBase = (props: InputProps) => {
|
|
|
33
49
|
? true
|
|
34
50
|
: undefined;
|
|
35
51
|
|
|
52
|
+
const describedBy = mergeDescribedByIds(
|
|
53
|
+
ariaDescribedByUser,
|
|
54
|
+
hint !== undefined ? hintId : undefined,
|
|
55
|
+
errorMessage && appearance === "error" ? errorId : undefined,
|
|
56
|
+
);
|
|
57
|
+
|
|
36
58
|
return (
|
|
37
59
|
<>
|
|
60
|
+
{label !== undefined && (
|
|
61
|
+
<label
|
|
62
|
+
htmlFor={controlId}
|
|
63
|
+
className="mb-1 block text-sm font-medium text-slate-200"
|
|
64
|
+
>
|
|
65
|
+
{label}
|
|
66
|
+
</label>
|
|
67
|
+
)}
|
|
68
|
+
{hint !== undefined && (
|
|
69
|
+
<p id={hintId} className="mb-1 text-xs text-slate-400">
|
|
70
|
+
{hint}
|
|
71
|
+
</p>
|
|
72
|
+
)}
|
|
38
73
|
<textarea
|
|
39
74
|
ref={ref}
|
|
40
75
|
id={controlId}
|
|
@@ -44,9 +79,7 @@ export const InputBase = (props: InputProps) => {
|
|
|
44
79
|
className,
|
|
45
80
|
)}
|
|
46
81
|
aria-invalid={ariaInvalid}
|
|
47
|
-
aria-describedby={
|
|
48
|
-
errorMessage && appearance === "error" ? errorId : undefined
|
|
49
|
-
}
|
|
82
|
+
aria-describedby={describedBy}
|
|
50
83
|
{...rest}
|
|
51
84
|
/>
|
|
52
85
|
{errorMessage && appearance === "error" && (
|
|
@@ -69,13 +102,17 @@ export const InputBase = (props: InputProps) => {
|
|
|
69
102
|
ref,
|
|
70
103
|
"aria-invalid": ariaInvalidProp,
|
|
71
104
|
errorMessage,
|
|
105
|
+
hint,
|
|
106
|
+
label,
|
|
72
107
|
id,
|
|
73
108
|
as,
|
|
109
|
+
"aria-describedby": ariaDescribedByUser,
|
|
74
110
|
...rest
|
|
75
111
|
} = props;
|
|
76
112
|
|
|
77
113
|
const controlId = id ?? generatedId;
|
|
78
114
|
const errorId = `${controlId}-error`;
|
|
115
|
+
const hintId = `${controlId}-hint`;
|
|
79
116
|
const ariaInvalid =
|
|
80
117
|
ariaInvalidProp !== undefined
|
|
81
118
|
? ariaInvalidProp
|
|
@@ -83,8 +120,27 @@ export const InputBase = (props: InputProps) => {
|
|
|
83
120
|
? true
|
|
84
121
|
: undefined;
|
|
85
122
|
|
|
123
|
+
const describedBy = mergeDescribedByIds(
|
|
124
|
+
ariaDescribedByUser,
|
|
125
|
+
hint !== undefined ? hintId : undefined,
|
|
126
|
+
errorMessage && appearance === "error" ? errorId : undefined,
|
|
127
|
+
);
|
|
128
|
+
|
|
86
129
|
return (
|
|
87
130
|
<>
|
|
131
|
+
{label !== undefined && (
|
|
132
|
+
<label
|
|
133
|
+
htmlFor={controlId}
|
|
134
|
+
className="mb-1 block text-sm font-medium text-slate-200"
|
|
135
|
+
>
|
|
136
|
+
{label}
|
|
137
|
+
</label>
|
|
138
|
+
)}
|
|
139
|
+
{hint !== undefined && (
|
|
140
|
+
<p id={hintId} className="mb-1 text-xs text-slate-400">
|
|
141
|
+
{hint}
|
|
142
|
+
</p>
|
|
143
|
+
)}
|
|
88
144
|
<input
|
|
89
145
|
ref={ref}
|
|
90
146
|
id={controlId}
|
|
@@ -94,9 +150,7 @@ export const InputBase = (props: InputProps) => {
|
|
|
94
150
|
className,
|
|
95
151
|
)}
|
|
96
152
|
aria-invalid={ariaInvalid}
|
|
97
|
-
aria-describedby={
|
|
98
|
-
errorMessage && appearance === "error" ? errorId : undefined
|
|
99
|
-
}
|
|
153
|
+
aria-describedby={describedBy}
|
|
100
154
|
{...rest}
|
|
101
155
|
/>
|
|
102
156
|
{errorMessage && appearance === "error" && (
|
|
@@ -381,7 +381,11 @@ describe("Input (component library)", () => {
|
|
|
381
381
|
"should render without throwing when animation=%s",
|
|
382
382
|
(animation) => {
|
|
383
383
|
const { unmount } = render(
|
|
384
|
-
<InputAnimated
|
|
384
|
+
<InputAnimated
|
|
385
|
+
animation={animation}
|
|
386
|
+
placeholder="x"
|
|
387
|
+
aria-label="Anim"
|
|
388
|
+
/>,
|
|
385
389
|
);
|
|
386
390
|
expect(
|
|
387
391
|
getInputSlot(),
|
package/src/ui/inputs/types.ts
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import type { VariantProps } from "class-variance-authority";
|
|
2
|
-
import type { ComponentPropsWithRef } from "react";
|
|
2
|
+
import type { ComponentPropsWithRef, ReactNode } from "react";
|
|
3
3
|
|
|
4
4
|
import type { inputVariants } from "./variants";
|
|
5
5
|
|
|
6
|
-
export type InputSharedProps = Omit<
|
|
6
|
+
export type InputSharedProps = Omit<
|
|
7
|
+
VariantProps<typeof inputVariants>,
|
|
8
|
+
"as"
|
|
9
|
+
> & {
|
|
7
10
|
errorMessage?: string;
|
|
11
|
+
hint?: ReactNode;
|
|
12
|
+
label?: ReactNode;
|
|
8
13
|
};
|
|
9
14
|
|
|
10
15
|
export type InputProps =
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
export { ModalContentAnimated } from "./modal-content-animated";
|
|
4
|
-
export type {
|
|
4
|
+
export type {
|
|
5
|
+
ModalContentAnimatedProps,
|
|
6
|
+
ModalAnimation,
|
|
7
|
+
ModalAnimationPresets,
|
|
8
|
+
ModalPresetMotionProps,
|
|
9
|
+
} from "./types";
|
|
5
10
|
export { modalOverlayAnimationPresets } from "./animations";
|
|
@@ -22,7 +22,7 @@ export function ModalContentAnimated({
|
|
|
22
22
|
id,
|
|
23
23
|
style,
|
|
24
24
|
}: ModalContentAnimatedProps) {
|
|
25
|
-
const { open, setOpen, titleId, descriptionId, contentRef } =
|
|
25
|
+
const { open, setOpen, titleId, descriptionId, contentRef, triggerRef } =
|
|
26
26
|
useModalContext("ModalContent");
|
|
27
27
|
const reduceMotion = useReducedMotion();
|
|
28
28
|
const overlayMotion =
|
|
@@ -34,6 +34,7 @@ export function ModalContentAnimated({
|
|
|
34
34
|
open,
|
|
35
35
|
setOpen,
|
|
36
36
|
contentRef,
|
|
37
|
+
triggerRef,
|
|
37
38
|
});
|
|
38
39
|
|
|
39
40
|
const portalTarget = typeof document !== "undefined" ? document.body : null;
|
|
@@ -46,10 +47,8 @@ export function ModalContentAnimated({
|
|
|
46
47
|
<AnimatePresence>
|
|
47
48
|
{open ? (
|
|
48
49
|
<div className="fixed inset-0 z-50" data-slot="modal-portal">
|
|
49
|
-
<motion.
|
|
50
|
-
|
|
51
|
-
aria-hidden
|
|
52
|
-
tabIndex={-1}
|
|
50
|
+
<motion.div
|
|
51
|
+
role="presentation"
|
|
53
52
|
data-slot="modal-overlay"
|
|
54
53
|
className={modalOverlayVariants()}
|
|
55
54
|
onClick={() => setOpen(false)}
|
package/src/ui/modal/index.ts
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
useMemo,
|
|
9
9
|
useRef,
|
|
10
10
|
useState,
|
|
11
|
+
type RefObject,
|
|
11
12
|
} from "react";
|
|
12
13
|
import { createPortal } from "react-dom";
|
|
13
14
|
|
|
@@ -31,7 +32,8 @@ type ModalCtx = {
|
|
|
31
32
|
setOpen: (next: boolean) => void;
|
|
32
33
|
titleId: string;
|
|
33
34
|
descriptionId: string;
|
|
34
|
-
contentRef:
|
|
35
|
+
contentRef: RefObject<HTMLDivElement | null>;
|
|
36
|
+
triggerRef: RefObject<HTMLElement | null>;
|
|
35
37
|
};
|
|
36
38
|
|
|
37
39
|
const ModalContext = createContext<ModalCtx | null>(null);
|
|
@@ -68,6 +70,7 @@ export function Modal({
|
|
|
68
70
|
const titleId = `${baseId}-title`;
|
|
69
71
|
const descriptionId = `${baseId}-description`;
|
|
70
72
|
const contentRef = useRef<HTMLDivElement | null>(null);
|
|
73
|
+
const triggerRef = useRef<HTMLElement | null>(null);
|
|
71
74
|
|
|
72
75
|
const ctx = useMemo(
|
|
73
76
|
() => ({
|
|
@@ -76,6 +79,7 @@ export function Modal({
|
|
|
76
79
|
titleId,
|
|
77
80
|
descriptionId,
|
|
78
81
|
contentRef,
|
|
82
|
+
triggerRef,
|
|
79
83
|
}),
|
|
80
84
|
[descriptionId, resolvedOpen, setOpen, titleId],
|
|
81
85
|
);
|
|
@@ -90,13 +94,20 @@ export function ModalTrigger({
|
|
|
90
94
|
children,
|
|
91
95
|
appearance,
|
|
92
96
|
onClick,
|
|
93
|
-
ref,
|
|
97
|
+
ref: refProp,
|
|
94
98
|
...rest
|
|
95
99
|
}: ModalTriggerProps) {
|
|
96
|
-
const { setOpen } = useModalContext("ModalTrigger");
|
|
100
|
+
const { setOpen, triggerRef } = useModalContext("ModalTrigger");
|
|
97
101
|
return (
|
|
98
102
|
<button
|
|
99
|
-
ref={
|
|
103
|
+
ref={(node) => {
|
|
104
|
+
triggerRef.current = node;
|
|
105
|
+
if (typeof refProp === "function") {
|
|
106
|
+
refProp(node);
|
|
107
|
+
} else if (refProp) {
|
|
108
|
+
(refProp as RefObject<HTMLButtonElement | null>).current = node;
|
|
109
|
+
}
|
|
110
|
+
}}
|
|
100
111
|
type="button"
|
|
101
112
|
data-slot="modal-trigger"
|
|
102
113
|
className={cn(modalTriggerVariants({ appearance }), className)}
|
|
@@ -115,7 +126,6 @@ export function ModalTrigger({
|
|
|
115
126
|
|
|
116
127
|
ModalTrigger.displayName = "ModalTrigger";
|
|
117
128
|
|
|
118
|
-
|
|
119
129
|
export function ModalContent({
|
|
120
130
|
className,
|
|
121
131
|
size,
|
|
@@ -126,13 +136,14 @@ export function ModalContent({
|
|
|
126
136
|
id,
|
|
127
137
|
style,
|
|
128
138
|
}: ModalContentProps) {
|
|
129
|
-
const { open, setOpen, titleId, descriptionId, contentRef } =
|
|
139
|
+
const { open, setOpen, titleId, descriptionId, contentRef, triggerRef } =
|
|
130
140
|
useModalContext("ModalContent");
|
|
131
141
|
|
|
132
142
|
useFocusManagement({
|
|
133
143
|
open,
|
|
134
144
|
setOpen,
|
|
135
145
|
contentRef,
|
|
146
|
+
triggerRef,
|
|
136
147
|
});
|
|
137
148
|
|
|
138
149
|
const portalTarget = typeof document !== "undefined" ? document.body : null;
|
|
@@ -144,10 +155,8 @@ export function ModalContent({
|
|
|
144
155
|
return createPortal(
|
|
145
156
|
open ? (
|
|
146
157
|
<div className="fixed inset-0 z-50" data-slot="modal-portal">
|
|
147
|
-
<
|
|
148
|
-
|
|
149
|
-
aria-hidden
|
|
150
|
-
tabIndex={-1}
|
|
158
|
+
<div
|
|
159
|
+
role="presentation"
|
|
151
160
|
data-slot="modal-overlay"
|
|
152
161
|
className={modalOverlayVariants()}
|
|
153
162
|
onClick={() => setOpen(false)}
|
|
@@ -2,11 +2,15 @@ import { render, screen, waitFor } from "@testing-library/react";
|
|
|
2
2
|
import userEvent from "@testing-library/user-event";
|
|
3
3
|
import { describe, expect, it, vi } from "vitest";
|
|
4
4
|
|
|
5
|
+
import { Modal } from "./modal";
|
|
5
6
|
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
ModalTrigger,
|
|
8
|
+
ModalContent,
|
|
9
|
+
ModalTitle,
|
|
10
|
+
ModalBody,
|
|
11
|
+
ModalDescription,
|
|
12
|
+
ModalClose,
|
|
13
|
+
} from "./modal-base";
|
|
10
14
|
|
|
11
15
|
describe("Modal", () => {
|
|
12
16
|
it("should expose displayName on exported parts", () => {
|
|
@@ -77,6 +81,21 @@ describe("Modal", () => {
|
|
|
77
81
|
});
|
|
78
82
|
});
|
|
79
83
|
|
|
84
|
+
it("should render overlay as non-focusable presentation surface", async () => {
|
|
85
|
+
render(
|
|
86
|
+
<Modal defaultOpen>
|
|
87
|
+
<ModalContent>
|
|
88
|
+
<ModalTitle>T</ModalTitle>
|
|
89
|
+
</ModalContent>
|
|
90
|
+
</Modal>,
|
|
91
|
+
);
|
|
92
|
+
await waitFor(() => expect(screen.getByRole("dialog")).toBeInTheDocument());
|
|
93
|
+
const overlay = document.querySelector('[data-slot="modal-overlay"]');
|
|
94
|
+
expect(overlay?.tagName.toLowerCase()).toBe("div");
|
|
95
|
+
expect(overlay).toHaveAttribute("role", "presentation");
|
|
96
|
+
expect((overlay as HTMLElement).tabIndex).toBe(-1);
|
|
97
|
+
});
|
|
98
|
+
|
|
80
99
|
it("should close when Escape is pressed", async () => {
|
|
81
100
|
const user = userEvent.setup();
|
|
82
101
|
render(
|
|
@@ -126,4 +145,25 @@ describe("Modal", () => {
|
|
|
126
145
|
await user.keyboard("{Escape}");
|
|
127
146
|
await waitFor(() => expect(handleChange).toHaveBeenLastCalledWith(false));
|
|
128
147
|
});
|
|
148
|
+
|
|
149
|
+
it("should restore focus to the trigger after the dialog closes", async () => {
|
|
150
|
+
const user = userEvent.setup();
|
|
151
|
+
render(
|
|
152
|
+
<Modal>
|
|
153
|
+
<ModalTrigger>Open</ModalTrigger>
|
|
154
|
+
<ModalContent>
|
|
155
|
+
<ModalTitle>T</ModalTitle>
|
|
156
|
+
</ModalContent>
|
|
157
|
+
</Modal>,
|
|
158
|
+
);
|
|
159
|
+
const trigger = screen.getByRole("button", { name: "Open" });
|
|
160
|
+
trigger.focus();
|
|
161
|
+
await user.click(trigger);
|
|
162
|
+
await waitFor(() => expect(screen.getByRole("dialog")).toBeInTheDocument());
|
|
163
|
+
await user.keyboard("{Escape}");
|
|
164
|
+
await waitFor(() =>
|
|
165
|
+
expect(screen.queryByRole("dialog")).not.toBeInTheDocument(),
|
|
166
|
+
);
|
|
167
|
+
expect(trigger).toHaveFocus();
|
|
168
|
+
});
|
|
129
169
|
});
|
package/src/ui/modal/modal.tsx
CHANGED
package/src/ui/modal/types.ts
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
import type { VariantProps } from "class-variance-authority";
|
|
2
|
-
import type {
|
|
2
|
+
import type {
|
|
3
|
+
CSSProperties,
|
|
4
|
+
ElementType,
|
|
5
|
+
HTMLAttributes,
|
|
6
|
+
ReactNode,
|
|
7
|
+
Ref,
|
|
8
|
+
} from "react";
|
|
3
9
|
|
|
4
10
|
import type { modalContentVariants, modalTriggerVariants } from "./variants";
|
|
5
11
|
|
|
6
|
-
export type ModalContentVariantProps = VariantProps<
|
|
12
|
+
export type ModalContentVariantProps = VariantProps<
|
|
13
|
+
typeof modalContentVariants
|
|
14
|
+
>;
|
|
7
15
|
|
|
8
16
|
export type ModalProps = {
|
|
9
17
|
open?: boolean;
|
package/src/ui/modal/variants.ts
CHANGED
|
@@ -24,23 +24,23 @@ export const modalTriggerVariants = cva(
|
|
|
24
24
|
amber: "border-amber-600 bg-amber-950/70 backdrop-blur-xl",
|
|
25
25
|
violet: "border-violet-600 bg-violet-950/70 backdrop-blur-xl",
|
|
26
26
|
"gradient-blue":
|
|
27
|
-
"border-
|
|
27
|
+
"border-blue-600 bg-linear-to-r from-blue-950/70 to-purple-950/70 backdrop-blur-xl",
|
|
28
28
|
"gradient-green":
|
|
29
|
-
"border-
|
|
29
|
+
"border-green-600 bg-linear-to-r from-green-950/70 to-lime-950/70 backdrop-blur-xl",
|
|
30
30
|
"gradient-red":
|
|
31
|
-
"border-
|
|
31
|
+
"border-red-600 bg-linear-to-r from-red-950/70 to-pink-950/70 backdrop-blur-xl",
|
|
32
32
|
"gradient-yellow":
|
|
33
|
-
"border-
|
|
33
|
+
"border-yellow-600 bg-linear-to-r from-yellow-950/70 to-orange-950/70 backdrop-blur-xl",
|
|
34
34
|
"gradient-purple":
|
|
35
|
-
"border-
|
|
35
|
+
"border-purple-600 bg-linear-to-r from-purple-950/70 to-pink-950/70 backdrop-blur-xl",
|
|
36
36
|
"gradient-teal":
|
|
37
|
-
"border-
|
|
37
|
+
"border-teal-600 bg-linear-to-r from-teal-950/70 to-cyan-950/70 backdrop-blur-xl",
|
|
38
38
|
"gradient-indigo":
|
|
39
|
-
"border-
|
|
39
|
+
"border-indigo-600 bg-linear-to-r from-indigo-950/70 to-purple-950/70 backdrop-blur-xl",
|
|
40
40
|
"gradient-pink":
|
|
41
|
-
"border-
|
|
41
|
+
"border-pink-600 bg-linear-to-r from-pink-950/70 to-rose-950/70 backdrop-blur-xl",
|
|
42
42
|
"gradient-orange":
|
|
43
|
-
"border-
|
|
43
|
+
"border-orange-600 bg-linear-to-r from-orange-950/70 to-red-950/70 backdrop-blur-xl",
|
|
44
44
|
},
|
|
45
45
|
},
|
|
46
46
|
defaultVariants: {
|
|
@@ -81,23 +81,23 @@ export const modalContentVariants = cva(
|
|
|
81
81
|
amber: "border-amber-600 bg-amber-950/70 backdrop-blur-xl",
|
|
82
82
|
violet: "border-violet-600 bg-violet-950/70 backdrop-blur-xl",
|
|
83
83
|
"gradient-blue":
|
|
84
|
-
"border-
|
|
84
|
+
"border-blue-600 bg-linear-to-r from-blue-950/70 to-purple-950/70 backdrop-blur-xl",
|
|
85
85
|
"gradient-green":
|
|
86
|
-
"border-
|
|
86
|
+
"border-green-600 bg-linear-to-r from-green-950/70 to-lime-950/70 backdrop-blur-xl",
|
|
87
87
|
"gradient-red":
|
|
88
|
-
"border-
|
|
88
|
+
"border-red-600 bg-linear-to-r from-red-950/70 to-pink-950/70 backdrop-blur-xl",
|
|
89
89
|
"gradient-yellow":
|
|
90
|
-
"border-
|
|
90
|
+
"border-yellow-600 bg-linear-to-r from-yellow-950/70 to-orange-950/70 backdrop-blur-xl",
|
|
91
91
|
"gradient-purple":
|
|
92
|
-
"border-
|
|
92
|
+
"border-purple-600 bg-linear-to-r from-purple-950/70 to-pink-950/70 backdrop-blur-xl",
|
|
93
93
|
"gradient-teal":
|
|
94
|
-
"border-
|
|
94
|
+
"border-teal-600 bg-linear-to-r from-teal-950/70 to-cyan-950/70 backdrop-blur-xl",
|
|
95
95
|
"gradient-indigo":
|
|
96
|
-
"border-
|
|
96
|
+
"border-indigo-600 bg-linear-to-r from-indigo-950/70 to-purple-950/70 backdrop-blur-xl",
|
|
97
97
|
"gradient-pink":
|
|
98
|
-
"border-
|
|
98
|
+
"border-pink-600 bg-linear-to-r from-pink-950/70 to-rose-950/70 backdrop-blur-xl",
|
|
99
99
|
"gradient-orange":
|
|
100
|
-
"border-
|
|
100
|
+
"border-orange-600 bg-linear-to-r from-orange-950/70 to-red-950/70 backdrop-blur-xl",
|
|
101
101
|
},
|
|
102
102
|
},
|
|
103
103
|
defaultVariants: {
|
|
@@ -192,9 +192,9 @@ export const Pagination = forwardRef<HTMLElement, PaginationProps>(
|
|
|
192
192
|
{item.type === "ellipsis" ? (
|
|
193
193
|
<span
|
|
194
194
|
data-slot="pagination-ellipsis"
|
|
195
|
-
aria-hidden="true"
|
|
196
|
-
title={ellipsisLabel}
|
|
197
195
|
className={paginationEllipsisVariants({ size })}
|
|
196
|
+
role="img"
|
|
197
|
+
aria-label={ellipsisLabel}
|
|
198
198
|
>
|
|
199
199
|
…
|
|
200
200
|
</span>
|
|
@@ -29,23 +29,23 @@ export const paginationListVariants = cva(
|
|
|
29
29
|
amber: "border-amber-500/25 bg-amber-950/20",
|
|
30
30
|
violet: "border-violet-500/25 bg-violet-950/20",
|
|
31
31
|
"gradient-blue":
|
|
32
|
-
"border-blue-500/30 bg-
|
|
32
|
+
"border-blue-500/30 bg-linear-to-r from-blue-950/30 to-purple-950/30",
|
|
33
33
|
"gradient-green":
|
|
34
|
-
"border-lime-500/30 bg-
|
|
34
|
+
"border-lime-500/30 bg-linear-to-r from-green-950/30 to-lime-950/30",
|
|
35
35
|
"gradient-red":
|
|
36
|
-
"border-pink-500/30 bg-
|
|
36
|
+
"border-pink-500/30 bg-linear-to-r from-red-950/30 to-pink-950/30",
|
|
37
37
|
"gradient-yellow":
|
|
38
|
-
"border-orange-500/30 bg-
|
|
38
|
+
"border-orange-500/30 bg-linear-to-r from-yellow-950/30 to-orange-950/30",
|
|
39
39
|
"gradient-purple":
|
|
40
|
-
"border-pink-500/30 bg-
|
|
40
|
+
"border-pink-500/30 bg-linear-to-r from-purple-950/30 to-pink-950/30",
|
|
41
41
|
"gradient-teal":
|
|
42
|
-
"border-cyan-500/30 bg-
|
|
42
|
+
"border-cyan-500/30 bg-linear-to-r from-teal-950/30 to-cyan-950/30",
|
|
43
43
|
"gradient-indigo":
|
|
44
|
-
"border-purple-500/30 bg-
|
|
44
|
+
"border-purple-500/30 bg-linear-to-r from-indigo-950/30 to-purple-950/30",
|
|
45
45
|
"gradient-pink":
|
|
46
|
-
"border-rose-500/30 bg-
|
|
46
|
+
"border-rose-500/30 bg-linear-to-r from-pink-950/30 to-rose-950/30",
|
|
47
47
|
"gradient-orange":
|
|
48
|
-
"border-orange-500/30 bg-
|
|
48
|
+
"border-orange-500/30 bg-linear-to-r from-orange-950/30 to-red-950/30",
|
|
49
49
|
},
|
|
50
50
|
size: {
|
|
51
51
|
sm: "gap-0.5",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useMemo } from "react";
|
|
3
|
+
import { useCallback, useId, useMemo, useRef, useState } from "react";
|
|
4
4
|
import { motion } from "framer-motion";
|
|
5
5
|
|
|
6
6
|
import { cn, clamp } from "../../../lib/utils";
|
|
@@ -39,6 +39,32 @@ export function ProgressAnimated({
|
|
|
39
39
|
}: ProgressAnimatedProps) {
|
|
40
40
|
const clamped = clamp(value, min, max);
|
|
41
41
|
const percent = max === min ? 0 : ((clamped - min) / (max - min)) * 100;
|
|
42
|
+
const labelSlotId = `${useId()}-progress-label`;
|
|
43
|
+
const labelSlotCountRef = useRef(0);
|
|
44
|
+
const [labelSlotMounted, setLabelSlotMounted] = useState(false);
|
|
45
|
+
const registerProgressLabel = useCallback(() => {
|
|
46
|
+
labelSlotCountRef.current += 1;
|
|
47
|
+
if (labelSlotCountRef.current === 1) {
|
|
48
|
+
setLabelSlotMounted(true);
|
|
49
|
+
}
|
|
50
|
+
return () => {
|
|
51
|
+
labelSlotCountRef.current -= 1;
|
|
52
|
+
if (labelSlotCountRef.current === 0) {
|
|
53
|
+
setLabelSlotMounted(false);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}, []);
|
|
57
|
+
const hasInlineLabelProp = Boolean(label?.trim().length);
|
|
58
|
+
|
|
59
|
+
const labelingProps = useMemo(() => {
|
|
60
|
+
if (hasInlineLabelProp) {
|
|
61
|
+
return { "aria-label": label?.trim() ?? "Progress" };
|
|
62
|
+
}
|
|
63
|
+
if (labelSlotMounted) {
|
|
64
|
+
return { "aria-labelledby": labelSlotId };
|
|
65
|
+
}
|
|
66
|
+
return { "aria-label": "Progress" };
|
|
67
|
+
}, [hasInlineLabelProp, label, labelSlotId, labelSlotMounted]);
|
|
42
68
|
|
|
43
69
|
const ctx = useMemo<ProgressCtx>(
|
|
44
70
|
() => ({
|
|
@@ -50,8 +76,21 @@ export function ProgressAnimated({
|
|
|
50
76
|
striped: Boolean(striped),
|
|
51
77
|
animated: Boolean(animated),
|
|
52
78
|
appearance: appearance ?? "default",
|
|
79
|
+
labelSlotId,
|
|
80
|
+
registerProgressLabel,
|
|
53
81
|
}),
|
|
54
|
-
[
|
|
82
|
+
[
|
|
83
|
+
animated,
|
|
84
|
+
appearance,
|
|
85
|
+
clamped,
|
|
86
|
+
labelSlotId,
|
|
87
|
+
max,
|
|
88
|
+
min,
|
|
89
|
+
registerProgressLabel,
|
|
90
|
+
shape,
|
|
91
|
+
size,
|
|
92
|
+
striped,
|
|
93
|
+
],
|
|
55
94
|
);
|
|
56
95
|
|
|
57
96
|
const motionProps = progressAnimationPresets[animation];
|
|
@@ -65,8 +104,8 @@ export function ProgressAnimated({
|
|
|
65
104
|
aria-valuemin={min}
|
|
66
105
|
aria-valuemax={max}
|
|
67
106
|
aria-valuenow={clamped}
|
|
68
|
-
aria-label={label}
|
|
69
107
|
aria-busy={busy ? true : undefined}
|
|
108
|
+
{...labelingProps}
|
|
70
109
|
className={cn(
|
|
71
110
|
progressVariants({ appearance, size, shape, striped, animated }),
|
|
72
111
|
className,
|
|
@@ -98,8 +137,7 @@ export function ProgressBarAnimated({
|
|
|
98
137
|
style?: React.CSSProperties;
|
|
99
138
|
ref?: React.Ref<HTMLDivElement>;
|
|
100
139
|
}) {
|
|
101
|
-
const { size, shape, striped, animated } =
|
|
102
|
-
useProgressContext("ProgressBar");
|
|
140
|
+
const { size, shape, striped, animated } = useProgressContext("ProgressBar");
|
|
103
141
|
|
|
104
142
|
return (
|
|
105
143
|
<div
|
package/src/ui/progress/index.ts
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
export { Progress } from "./progress";
|
|
4
|
-
export {
|
|
5
|
-
|
|
4
|
+
export {
|
|
5
|
+
ProgressBar,
|
|
6
|
+
ProgressLabel,
|
|
7
|
+
ProgressValue,
|
|
8
|
+
ProgressBase,
|
|
9
|
+
} from "./progress-base";
|
|
10
|
+
export type {
|
|
11
|
+
ProgressProps,
|
|
12
|
+
ProgressSectionProps,
|
|
13
|
+
ProgressCtx,
|
|
14
|
+
ProgressVariantProps,
|
|
15
|
+
} from "./types";
|
|
6
16
|
export {
|
|
7
17
|
progressVariants,
|
|
8
18
|
progressTrackVariants,
|