@zentauri-ui/zentauri-components 1.5.22 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +136 -70
- package/cli/registry.json +2 -0
- package/dist/charts/area.js.map +1 -1
- package/dist/charts/area.mjs.map +1 -1
- package/dist/charts/bubble/Bubble.d.ts.map +1 -1
- package/dist/charts/bubble.js.map +1 -1
- package/dist/charts/bubble.mjs.map +1 -1
- package/dist/charts/pie/Pie.d.ts.map +1 -1
- package/dist/charts/pie.js +20 -2
- package/dist/charts/pie.js.map +1 -1
- package/dist/charts/pie.mjs +20 -2
- package/dist/charts/pie.mjs.map +1 -1
- package/dist/charts/shared/types.d.ts.map +1 -1
- package/dist/{chunk-G3LEYBRV.mjs → chunk-25EAVVGS.mjs} +61 -58
- package/dist/chunk-25EAVVGS.mjs.map +1 -0
- package/dist/{chunk-BCZIYH53.js → chunk-3OXIZ4ZO.js} +28 -28
- package/dist/chunk-3OXIZ4ZO.js.map +1 -0
- package/dist/chunk-3PC7XLJX.js +102 -0
- package/dist/chunk-3PC7XLJX.js.map +1 -0
- package/dist/chunk-4ECCMHAX.mjs +323 -0
- package/dist/chunk-4ECCMHAX.mjs.map +1 -0
- package/dist/chunk-4MPNRGUA.mjs +65 -0
- package/dist/chunk-4MPNRGUA.mjs.map +1 -0
- package/dist/{chunk-Y745GQR2.js → chunk-4PZIDDC6.js} +45 -45
- package/dist/chunk-4PZIDDC6.js.map +1 -0
- package/dist/{chunk-PWL5WD34.js → chunk-662PJBZD.js} +27 -26
- package/dist/chunk-662PJBZD.js.map +1 -0
- package/dist/{chunk-TINHLHCN.mjs → chunk-73RHHGIA.mjs} +39 -36
- package/dist/chunk-73RHHGIA.mjs.map +1 -0
- package/dist/{chunk-OLEMP2HL.js → chunk-746CV3AN.js} +29 -36
- package/dist/chunk-746CV3AN.js.map +1 -0
- package/dist/{chunk-AUGLZ3AN.js → chunk-BMFPUQZC.js} +50 -50
- package/dist/chunk-BMFPUQZC.js.map +1 -0
- package/dist/chunk-CFTDAGKD.js +130 -0
- package/dist/chunk-CFTDAGKD.js.map +1 -0
- package/dist/{chunk-N2OAI2HN.js → chunk-D55YIHBN.js} +15 -15
- package/dist/chunk-D55YIHBN.js.map +1 -0
- package/dist/chunk-DO2LEXUY.js +62 -0
- package/dist/chunk-DO2LEXUY.js.map +1 -0
- package/dist/chunk-EU63V22F.mjs +126 -0
- package/dist/chunk-EU63V22F.mjs.map +1 -0
- package/dist/chunk-EZS47EZW.mjs +70 -0
- package/dist/chunk-EZS47EZW.mjs.map +1 -0
- package/dist/{chunk-E4FZY7O2.js → chunk-GHJN3Z3V.js} +48 -48
- package/dist/chunk-GHJN3Z3V.js.map +1 -0
- package/dist/{chunk-MTLLJFUI.mjs → chunk-GIC3J6HR.mjs} +28 -28
- package/dist/chunk-GIC3J6HR.mjs.map +1 -0
- package/dist/{chunk-C5L465FW.mjs → chunk-HARD4NMB.mjs} +45 -45
- package/dist/chunk-HARD4NMB.mjs.map +1 -0
- package/dist/{chunk-2VQJ6OIL.js → chunk-HPN7H5ZM.js} +2 -2
- package/dist/{chunk-2VQJ6OIL.js.map → chunk-HPN7H5ZM.js.map} +1 -1
- package/dist/{chunk-YTRGRHEB.js → chunk-HV7LVRK3.js} +61 -58
- package/dist/chunk-HV7LVRK3.js.map +1 -0
- package/dist/{chunk-Q5B44QW7.js → chunk-J4LG43O2.js} +51 -51
- package/dist/chunk-J4LG43O2.js.map +1 -0
- package/dist/{chunk-ZYZJ74XB.mjs → chunk-J5QJEKY2.mjs} +28 -28
- package/dist/chunk-J5QJEKY2.mjs.map +1 -0
- package/dist/{chunk-7TLKLMBM.js → chunk-JOMSI4WH.js} +18 -15
- package/dist/chunk-JOMSI4WH.js.map +1 -0
- package/dist/{chunk-ZBBFOMSJ.mjs → chunk-M6FS7X54.mjs} +22 -22
- package/dist/chunk-M6FS7X54.mjs.map +1 -0
- package/dist/{chunk-JUDMPOCI.js → chunk-MM3P52WS.js} +22 -22
- package/dist/chunk-MM3P52WS.js.map +1 -0
- package/dist/chunk-N6B35KWW.mjs +3 -0
- package/dist/chunk-N6B35KWW.mjs.map +1 -0
- package/dist/{chunk-73VCO5TE.mjs → chunk-NWOE2TZN.mjs} +2 -2
- package/dist/{chunk-73VCO5TE.mjs.map → chunk-NWOE2TZN.mjs.map} +1 -1
- package/dist/{chunk-UWA23DUC.js → chunk-OB6TYS5Q.js} +28 -28
- package/dist/chunk-OB6TYS5Q.js.map +1 -0
- package/dist/{chunk-QZTEFGZF.mjs → chunk-OVTWPGMW.mjs} +18 -15
- package/dist/chunk-OVTWPGMW.mjs.map +1 -0
- package/dist/chunk-PPVJ4INP.mjs +60 -0
- package/dist/chunk-PPVJ4INP.mjs.map +1 -0
- package/dist/{chunk-LN77JJTY.mjs → chunk-PSIAOIXJ.mjs} +48 -48
- package/dist/chunk-PSIAOIXJ.mjs.map +1 -0
- package/dist/chunk-QNF4JPFP.js +339 -0
- package/dist/chunk-QNF4JPFP.js.map +1 -0
- package/dist/{chunk-A6KMZ5ZS.mjs → chunk-QSIJKHC5.mjs} +15 -15
- package/dist/chunk-QSIJKHC5.mjs.map +1 -0
- package/dist/chunk-RFFGQYDQ.mjs +337 -0
- package/dist/chunk-RFFGQYDQ.mjs.map +1 -0
- package/dist/chunk-RGOMHX4G.js +4 -0
- package/dist/chunk-RGOMHX4G.js.map +1 -0
- package/dist/{chunk-INMNX3HQ.mjs → chunk-S5H2OMTZ.mjs} +29 -36
- package/dist/chunk-S5H2OMTZ.mjs.map +1 -0
- package/dist/{chunk-JBAUEGYD.mjs → chunk-TFWKF3DR.mjs} +51 -51
- package/dist/chunk-TFWKF3DR.mjs.map +1 -0
- package/dist/chunk-VGWA26BN.js +72 -0
- package/dist/chunk-VGWA26BN.js.map +1 -0
- package/dist/chunk-VMCOX3Z2.js +67 -0
- package/dist/chunk-VMCOX3Z2.js.map +1 -0
- package/dist/chunk-Y3AHRRNM.mjs +99 -0
- package/dist/chunk-Y3AHRRNM.mjs.map +1 -0
- package/dist/{chunk-TJUNN2PT.mjs → chunk-YD3LVW7V.mjs} +27 -26
- package/dist/chunk-YD3LVW7V.mjs.map +1 -0
- package/dist/{chunk-AD2LA3XN.js → chunk-YIO7DFUA.js} +39 -36
- package/dist/chunk-YIO7DFUA.js.map +1 -0
- package/dist/chunk-YRTGORVB.js +232 -0
- package/dist/chunk-YRTGORVB.js.map +1 -0
- package/dist/chunk-Z7QK472J.mjs +220 -0
- package/dist/chunk-Z7QK472J.mjs.map +1 -0
- package/dist/hooks/useControllableState.js +3 -2
- package/dist/hooks/useControllableState.mjs +2 -1
- package/dist/hooks/useDisclosure.js +3 -2
- package/dist/hooks/useDisclosure.js.map +1 -1
- package/dist/hooks/useDisclosure.mjs +2 -1
- package/dist/hooks/useDisclosure.mjs.map +1 -1
- package/dist/hooks/useDynamicStepper/index.d.ts +2 -0
- package/dist/hooks/useDynamicStepper/index.d.ts.map +1 -0
- package/dist/hooks/useDynamicStepper/useDynamicStepper.d.ts +9 -0
- package/dist/hooks/useDynamicStepper/useDynamicStepper.d.ts.map +1 -0
- package/dist/hooks/useDynamicStepper.js +14 -0
- package/dist/hooks/useDynamicStepper.js.map +1 -0
- package/dist/hooks/useDynamicStepper.mjs +5 -0
- package/dist/hooks/useDynamicStepper.mjs.map +1 -0
- package/dist/ui/accordion/animated.js +7 -7
- package/dist/ui/accordion/animated.mjs +2 -2
- package/dist/ui/accordion/variants.d.ts.map +1 -1
- package/dist/ui/accordion.js +9 -9
- package/dist/ui/accordion.mjs +2 -2
- package/dist/ui/alert/animated.js +2 -2
- package/dist/ui/alert/animated.mjs +1 -1
- package/dist/ui/alert/variants.d.ts.map +1 -1
- package/dist/ui/alert.js +10 -10
- package/dist/ui/alert.mjs +2 -2
- package/dist/ui/avatar/animated.js +5 -5
- package/dist/ui/avatar/animated.mjs +2 -2
- package/dist/ui/avatar/variants.d.ts.map +1 -1
- package/dist/ui/avatar.js +9 -9
- package/dist/ui/avatar.mjs +2 -2
- package/dist/ui/badge/animated.js +2 -2
- package/dist/ui/badge/animated.mjs +1 -1
- package/dist/ui/badge/variants.d.ts +24 -24
- package/dist/ui/badge/variants.d.ts.map +1 -1
- package/dist/ui/badge.js +4 -4
- package/dist/ui/badge.mjs +2 -2
- package/dist/ui/breadcrumb/variants.d.ts.map +1 -1
- package/dist/ui/breadcrumb.js +30 -25
- package/dist/ui/breadcrumb.js.map +1 -1
- package/dist/ui/breadcrumb.mjs +30 -25
- package/dist/ui/breadcrumb.mjs.map +1 -1
- package/dist/ui/buttons/animated.js +3 -3
- package/dist/ui/buttons/animated.mjs +1 -1
- package/dist/ui/buttons/variants.d.ts.map +1 -1
- package/dist/ui/buttons.js +9 -57
- package/dist/ui/buttons.js.map +1 -1
- package/dist/ui/buttons.mjs +3 -59
- package/dist/ui/buttons.mjs.map +1 -1
- package/dist/ui/card/animated.js +7 -7
- package/dist/ui/card/animated.mjs +2 -2
- package/dist/ui/card/variants.d.ts.map +1 -1
- package/dist/ui/card.js +12 -12
- package/dist/ui/card.mjs +2 -2
- package/dist/ui/divider/animated.js +2 -2
- package/dist/ui/divider/animated.mjs +1 -1
- package/dist/ui/divider.js +6 -6
- package/dist/ui/divider.mjs +2 -2
- package/dist/ui/drawer/animated.js +11 -11
- package/dist/ui/drawer/animated.mjs +2 -2
- package/dist/ui/drawer/variants.d.ts.map +1 -1
- package/dist/ui/drawer.js +11 -11
- package/dist/ui/drawer.mjs +1 -1
- package/dist/ui/dropdown/variants.d.ts.map +1 -1
- package/dist/ui/dropdown.js +52 -52
- package/dist/ui/dropdown.js.map +1 -1
- package/dist/ui/dropdown.mjs +52 -52
- package/dist/ui/dropdown.mjs.map +1 -1
- package/dist/ui/dynamic-stepper/dynamic-stepper.d.ts +6 -0
- package/dist/ui/dynamic-stepper/dynamic-stepper.d.ts.map +1 -0
- package/dist/ui/dynamic-stepper/index.d.ts +5 -0
- package/dist/ui/dynamic-stepper/index.d.ts.map +1 -0
- package/dist/ui/dynamic-stepper/types.d.ts +61 -0
- package/dist/ui/dynamic-stepper/types.d.ts.map +1 -0
- package/dist/ui/dynamic-stepper/variants.d.ts +21 -0
- package/dist/ui/dynamic-stepper/variants.d.ts.map +1 -0
- package/dist/ui/dynamic-stepper.js +315 -0
- package/dist/ui/dynamic-stepper.js.map +1 -0
- package/dist/ui/dynamic-stepper.mjs +308 -0
- package/dist/ui/dynamic-stepper.mjs.map +1 -0
- package/dist/ui/empty-state/animated.js +2 -2
- package/dist/ui/empty-state/animated.mjs +1 -1
- package/dist/ui/empty-state/variants.d.ts.map +1 -1
- package/dist/ui/empty-state.js +10 -10
- package/dist/ui/empty-state.mjs +2 -2
- package/dist/ui/file-upload/file-upload.d.ts.map +1 -1
- package/dist/ui/file-upload/variants.d.ts.map +1 -1
- package/dist/ui/file-upload.js +18 -18
- package/dist/ui/file-upload.js.map +1 -1
- package/dist/ui/file-upload.mjs +18 -18
- package/dist/ui/file-upload.mjs.map +1 -1
- package/dist/ui/inputs/animated.js +3 -3
- package/dist/ui/inputs/animated.mjs +1 -1
- package/dist/ui/inputs/types.d.ts +1 -1
- package/dist/ui/inputs/types.d.ts.map +1 -1
- package/dist/ui/inputs/variants.d.ts +1 -1
- package/dist/ui/inputs/variants.d.ts.map +1 -1
- package/dist/ui/inputs.js +4 -4
- package/dist/ui/inputs.mjs +2 -2
- package/dist/ui/modal/animated.js +4 -4
- package/dist/ui/modal/animated.mjs +1 -1
- package/dist/ui/modal/variants.d.ts.map +1 -1
- package/dist/ui/modal.js +12 -12
- package/dist/ui/modal.mjs +2 -2
- package/dist/ui/pagination/pagination.d.ts +5 -16
- package/dist/ui/pagination/pagination.d.ts.map +1 -1
- package/dist/ui/pagination/types.d.ts +2 -2
- package/dist/ui/pagination/types.d.ts.map +1 -1
- package/dist/ui/pagination/variants.d.ts.map +1 -1
- package/dist/ui/pagination.js +200 -209
- package/dist/ui/pagination.js.map +1 -1
- package/dist/ui/pagination.mjs +201 -210
- package/dist/ui/pagination.mjs.map +1 -1
- package/dist/ui/progress/animated.js +8 -8
- package/dist/ui/progress/animated.mjs +2 -2
- package/dist/ui/progress/variants.d.ts.map +1 -1
- package/dist/ui/progress.js +9 -9
- package/dist/ui/progress.mjs +2 -2
- 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.js +10 -9
- package/dist/ui/search.js.map +1 -1
- package/dist/ui/search.mjs +9 -8
- package/dist/ui/search.mjs.map +1 -1
- package/dist/ui/select/variants.d.ts.map +1 -1
- package/dist/ui/select.js +66 -66
- package/dist/ui/select.js.map +1 -1
- package/dist/ui/select.mjs +66 -66
- package/dist/ui/select.mjs.map +1 -1
- package/dist/ui/skeleton/animated.js +8 -8
- package/dist/ui/skeleton/animated.mjs +1 -1
- package/dist/ui/skeleton/variants.d.ts.map +1 -1
- package/dist/ui/skeleton.js +9 -9
- package/dist/ui/skeleton.mjs +1 -1
- package/dist/ui/slider.js +25 -25
- package/dist/ui/slider.js.map +1 -1
- package/dist/ui/slider.mjs +25 -25
- package/dist/ui/slider.mjs.map +1 -1
- package/dist/ui/spinner/animated.js +22 -22
- package/dist/ui/spinner/animated.js.map +1 -1
- package/dist/ui/spinner/animated.mjs +22 -22
- package/dist/ui/spinner/animated.mjs.map +1 -1
- package/dist/ui/stepper/stepper.d.ts.map +1 -1
- package/dist/ui/stepper/variants.d.ts.map +1 -1
- package/dist/ui/stepper.js +29 -26
- package/dist/ui/stepper.js.map +1 -1
- package/dist/ui/stepper.mjs +29 -26
- package/dist/ui/stepper.mjs.map +1 -1
- package/dist/ui/table/animated.js +8 -8
- package/dist/ui/table/animated.mjs +2 -2
- package/dist/ui/table/variants.d.ts.map +1 -1
- package/dist/ui/table.js +14 -14
- package/dist/ui/table.mjs +1 -1
- package/dist/ui/tabs/animated.js +2 -2
- package/dist/ui/tabs/animated.mjs +1 -1
- package/dist/ui/tabs/variants.d.ts.map +1 -1
- package/dist/ui/tabs.js +9 -9
- package/dist/ui/tabs.mjs +1 -1
- package/dist/ui/toast/animated.js +7 -7
- package/dist/ui/toast/animated.mjs +1 -1
- package/dist/ui/toast/toast-base.d.ts.map +1 -1
- package/dist/ui/toast/variants.d.ts.map +1 -1
- package/dist/ui/toast.js +12 -12
- package/dist/ui/toast.mjs +1 -1
- package/dist/ui/toggle/animated/toggle-animated.d.ts.map +1 -1
- package/dist/ui/toggle/animated.js +5 -4
- package/dist/ui/toggle/animated.js.map +1 -1
- package/dist/ui/toggle/animated.mjs +4 -3
- package/dist/ui/toggle/animated.mjs.map +1 -1
- package/dist/ui/toggle/toggle-base.d.ts.map +1 -1
- package/dist/ui/toggle/variants.d.ts +1 -0
- package/dist/ui/toggle/variants.d.ts.map +1 -1
- package/dist/ui/toggle.js +8 -7
- package/dist/ui/toggle.js.map +1 -1
- package/dist/ui/toggle.mjs +6 -5
- package/dist/ui/toggle.mjs.map +1 -1
- package/dist/ui/tooltip/animated.js +3 -3
- package/dist/ui/tooltip/animated.mjs +1 -1
- package/dist/ui/tooltip/variants.d.ts.map +1 -1
- package/dist/ui/tooltip.js +7 -7
- package/dist/ui/tooltip.mjs +1 -1
- 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/inline-code-base.d.ts.map +1 -1
- package/dist/ui/typography/variants.d.ts.map +1 -1
- package/dist/ui/typography.js +19 -19
- package/dist/ui/typography.js.map +1 -1
- package/dist/ui/typography.mjs +19 -19
- package/dist/ui/typography.mjs.map +1 -1
- package/package.json +4 -3
- package/src/charts/area/Area.tsx +1 -1
- package/src/charts/bubble/Bubble.tsx +10 -2
- package/src/charts/pie/Pie.tsx +22 -3
- package/src/charts/shared/types.ts +1 -1
- package/src/hooks/useDynamicStepper/index.ts +1 -0
- package/src/hooks/useDynamicStepper/useDynamicStepper.test.ts +107 -0
- package/src/hooks/useDynamicStepper/useDynamicStepper.ts +85 -0
- package/src/ui/accordion/variants.ts +55 -43
- package/src/ui/alert/variants.ts +45 -32
- package/src/ui/avatar/variants.ts +34 -26
- package/src/ui/badge/variants.ts +42 -29
- package/src/ui/breadcrumb/variants.ts +30 -25
- package/src/ui/buttons/variants.ts +40 -30
- package/src/ui/card/variants.ts +49 -39
- package/src/ui/divider/variants.ts +26 -26
- package/src/ui/drawer/drawer-base.tsx +1 -1
- package/src/ui/drawer/variants.ts +64 -48
- package/src/ui/dropdown/dropdown.tsx +1 -1
- package/src/ui/dropdown/variants.ts +63 -52
- package/src/ui/dynamic-stepper/dynamic-stepper.test.tsx +113 -0
- package/src/ui/dynamic-stepper/dynamic-stepper.tsx +173 -0
- package/src/ui/dynamic-stepper/index.ts +22 -0
- package/src/ui/dynamic-stepper/types.ts +85 -0
- package/src/ui/dynamic-stepper/variants.ts +247 -0
- package/src/ui/empty-state/variants.ts +14 -11
- package/src/ui/file-upload/file-upload.tsx +5 -3
- package/src/ui/file-upload/variants.ts +16 -15
- package/src/ui/inputs/types.ts +1 -1
- package/src/ui/inputs/variants.ts +106 -47
- package/src/ui/modal/modal-base.tsx +1 -1
- package/src/ui/modal/variants.ts +64 -47
- package/src/ui/pagination/pagination.tsx +186 -197
- package/src/ui/pagination/types.ts +2 -5
- package/src/ui/pagination/variants.ts +31 -28
- package/src/ui/progress/variants.ts +79 -65
- package/src/ui/search/search-bar.tsx +2 -1
- package/src/ui/search/search-suggestion-list.tsx +7 -5
- package/src/ui/select/variants.ts +72 -66
- package/src/ui/skeleton/variants.ts +22 -13
- package/src/ui/slider/variants.ts +25 -25
- package/src/ui/spinner/animated/variants.ts +22 -22
- package/src/ui/stepper/stepper.tsx +5 -2
- package/src/ui/stepper/variants.ts +25 -24
- package/src/ui/table/table-base.tsx +1 -1
- package/src/ui/table/variants.ts +53 -45
- package/src/ui/tabs/variants.ts +38 -23
- package/src/ui/toast/toast-base.tsx +1 -4
- package/src/ui/toast/variants.ts +33 -26
- package/src/ui/toggle/animated/toggle-animated.tsx +3 -2
- package/src/ui/toggle/toggle-base.tsx +4 -3
- package/src/ui/toggle/variants.ts +60 -28
- package/src/ui/tooltip/variants.ts +21 -20
- package/src/ui/typography/blockquote-base.tsx +0 -2
- package/src/ui/typography/code-block-base.tsx +1 -3
- package/src/ui/typography/heading-base.tsx +0 -2
- package/src/ui/typography/inline-code-base.tsx +0 -2
- package/src/ui/typography/variants.ts +21 -18
- package/dist/chunk-2BAMNRAL.mjs +0 -323
- package/dist/chunk-2BAMNRAL.mjs.map +0 -1
- package/dist/chunk-5TV7EL3H.mjs +0 -70
- package/dist/chunk-5TV7EL3H.mjs.map +0 -1
- package/dist/chunk-7TLKLMBM.js.map +0 -1
- package/dist/chunk-A6KMZ5ZS.mjs.map +0 -1
- package/dist/chunk-AD2LA3XN.js.map +0 -1
- package/dist/chunk-AOEI4V3W.mjs +0 -286
- package/dist/chunk-AOEI4V3W.mjs.map +0 -1
- package/dist/chunk-AUGLZ3AN.js.map +0 -1
- package/dist/chunk-BCZIYH53.js.map +0 -1
- package/dist/chunk-C5L465FW.mjs.map +0 -1
- package/dist/chunk-E4FZY7O2.js.map +0 -1
- package/dist/chunk-FQBMIZH2.mjs +0 -217
- package/dist/chunk-FQBMIZH2.mjs.map +0 -1
- package/dist/chunk-G3LEYBRV.mjs.map +0 -1
- package/dist/chunk-I6GR234Z.mjs +0 -126
- package/dist/chunk-I6GR234Z.mjs.map +0 -1
- package/dist/chunk-INMNX3HQ.mjs.map +0 -1
- package/dist/chunk-JBAUEGYD.mjs.map +0 -1
- package/dist/chunk-JQ5TIJ4F.mjs +0 -68
- package/dist/chunk-JQ5TIJ4F.mjs.map +0 -1
- package/dist/chunk-JUDMPOCI.js.map +0 -1
- package/dist/chunk-LN77JJTY.mjs.map +0 -1
- package/dist/chunk-MCOQHXRW.js +0 -130
- package/dist/chunk-MCOQHXRW.js.map +0 -1
- package/dist/chunk-MTLLJFUI.mjs.map +0 -1
- package/dist/chunk-N2OAI2HN.js.map +0 -1
- package/dist/chunk-OB4KJZK2.js +0 -72
- package/dist/chunk-OB4KJZK2.js.map +0 -1
- package/dist/chunk-OLEMP2HL.js.map +0 -1
- package/dist/chunk-PWL5WD34.js.map +0 -1
- package/dist/chunk-Q5B44QW7.js.map +0 -1
- package/dist/chunk-QZKMFSH5.js +0 -288
- package/dist/chunk-QZKMFSH5.js.map +0 -1
- package/dist/chunk-QZTEFGZF.mjs.map +0 -1
- package/dist/chunk-S7WKFNPT.js +0 -229
- package/dist/chunk-S7WKFNPT.js.map +0 -1
- package/dist/chunk-TINHLHCN.mjs.map +0 -1
- package/dist/chunk-TJUNN2PT.mjs.map +0 -1
- package/dist/chunk-UWA23DUC.js.map +0 -1
- package/dist/chunk-X22LLJL6.js +0 -71
- package/dist/chunk-X22LLJL6.js.map +0 -1
- package/dist/chunk-Y745GQR2.js.map +0 -1
- package/dist/chunk-YTRGRHEB.js.map +0 -1
- package/dist/chunk-ZBBFOMSJ.mjs.map +0 -1
- package/dist/chunk-ZYZJ74XB.mjs.map +0 -1
|
@@ -5,41 +5,49 @@ export const triggerVariants = cva(
|
|
|
5
5
|
{
|
|
6
6
|
variants: {
|
|
7
7
|
variant: {
|
|
8
|
-
default: "bg-gray-900 text-white",
|
|
9
|
-
outline:
|
|
10
|
-
|
|
8
|
+
default: "bg-gray-200 dark:bg-gray-900 text-slate-900 dark:text-white",
|
|
9
|
+
outline:
|
|
10
|
+
"border border-gray-700 dark:border-gray-300 text-gray-900 dark:text-gray-100",
|
|
11
|
+
ghost: "bg-transparent text-gray-900 dark:text-gray-100",
|
|
11
12
|
white: "bg-white text-gray-900",
|
|
12
13
|
black: "bg-black text-white",
|
|
13
|
-
sky: "border border-sky-600 text-sky-600",
|
|
14
|
-
rose: "border border-rose-600 text-rose-600",
|
|
15
|
-
purple:
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
14
|
+
sky: "border border-sky-800 dark:border-sky-600 text-sky-800 dark:text-sky-600",
|
|
15
|
+
rose: "border border-rose-800 dark:border-rose-600 text-rose-800 dark:text-rose-600",
|
|
16
|
+
purple:
|
|
17
|
+
"border border-purple-800 dark:border-purple-600 text-purple-800 dark:text-purple-600",
|
|
18
|
+
pink: "border border-pink-800 dark:border-pink-600 text-pink-800 dark:text-pink-600",
|
|
19
|
+
orange:
|
|
20
|
+
"border border-orange-800 dark:border-orange-600 text-orange-800 dark:text-orange-600",
|
|
21
|
+
yellow:
|
|
22
|
+
"border border-yellow-800 dark:border-yellow-600 text-yellow-800 dark:text-yellow-600",
|
|
23
|
+
teal: "border border-teal-800 dark:border-teal-600 text-teal-800 dark:text-teal-600",
|
|
24
|
+
indigo:
|
|
25
|
+
"border border-indigo-800 dark:border-indigo-600 text-indigo-800 dark:text-indigo-600",
|
|
26
|
+
emerald:
|
|
27
|
+
"border border-emerald-800 dark:border-emerald-600 text-emerald-800 dark:text-emerald-600",
|
|
28
|
+
gray: "border border-gray-800 dark:border-gray-600 text-gray-800 dark:text-gray-600",
|
|
29
|
+
amber:
|
|
30
|
+
"border border-amber-800 dark:border-amber-600 text-amber-800 dark:text-amber-600",
|
|
31
|
+
violet:
|
|
32
|
+
"border border-violet-800 dark:border-violet-600 text-violet-800 dark:text-violet-600",
|
|
25
33
|
"gradient-blue":
|
|
26
|
-
"bg-linear-to-r from-blue-600 to-purple-600 text-blue-200",
|
|
34
|
+
"bg-linear-to-r from-blue-800 dark:from-blue-600 to-purple-800 dark:to-purple-600 text-blue-200",
|
|
27
35
|
"gradient-green":
|
|
28
|
-
"bg-linear-to-r from-green-600 to-lime-600 text-green-200",
|
|
36
|
+
"bg-linear-to-r from-green-800 dark:from-green-600 to-lime-800 dark:to-lime-600 text-green-200",
|
|
29
37
|
"gradient-red":
|
|
30
|
-
"bg-linear-to-r from-red-600 to-pink-600 text-red-200",
|
|
38
|
+
"bg-linear-to-r from-red-800 dark:from-red-600 to-pink-800 dark:to-pink-600 text-red-200",
|
|
31
39
|
"gradient-yellow":
|
|
32
|
-
"bg-linear-to-r from-yellow-600 to-orange-600 text-yellow-200",
|
|
40
|
+
"bg-linear-to-r from-yellow-800 dark:from-yellow-600 to-orange-800 dark:to-orange-600 text-yellow-200",
|
|
33
41
|
"gradient-purple":
|
|
34
|
-
"bg-linear-to-r from-purple-600 to-pink-600 text-purple-200",
|
|
42
|
+
"bg-linear-to-r from-purple-800 dark:from-purple-600 to-pink-800 dark:to-pink-600 text-purple-200",
|
|
35
43
|
"gradient-teal":
|
|
36
|
-
"bg-linear-to-r from-teal-600 to-cyan-600 text-teal-200",
|
|
44
|
+
"bg-linear-to-r from-teal-800 dark:from-teal-600 to-cyan-800 dark:to-cyan-600 text-teal-200",
|
|
37
45
|
"gradient-indigo":
|
|
38
|
-
"bg-linear-to-r from-indigo-600 to-purple-600 text-indigo-200",
|
|
46
|
+
"bg-linear-to-r from-indigo-800 dark:from-indigo-600 to-purple-800 dark:to-purple-600 text-indigo-200",
|
|
39
47
|
"gradient-pink":
|
|
40
|
-
"bg-linear-to-r from-pink-600 to-rose-600 text-pink-200",
|
|
48
|
+
"bg-linear-to-r from-pink-800 dark:from-pink-600 to-rose-800 dark:to-rose-600 text-pink-200",
|
|
41
49
|
"gradient-orange":
|
|
42
|
-
"bg-linear-to-r from-orange-600 to-red-600 text-orange-200",
|
|
50
|
+
"bg-linear-to-r from-orange-800 dark:from-orange-600 to-red-800 dark:to-red-600 text-orange-200",
|
|
43
51
|
},
|
|
44
52
|
size: {
|
|
45
53
|
sm: "px-2 py-1 text-sm",
|
|
@@ -55,7 +63,7 @@ export const triggerVariants = cva(
|
|
|
55
63
|
);
|
|
56
64
|
|
|
57
65
|
export const contentVariants = cva(
|
|
58
|
-
"absolute min-w-[200px] rounded-md p-2 shadow-md z-50 border",
|
|
66
|
+
"absolute min-w-[200px] rounded-md p-2 shadow-md z-50 border border-slate-900/10 dark:border-white/10 bg-slate-100 dark:bg-slate-900 text-slate-900 dark:text-slate-100 shadow-lg rounded-lg",
|
|
59
67
|
{
|
|
60
68
|
variants: {
|
|
61
69
|
placement: {
|
|
@@ -81,54 +89,57 @@ export const contentVariants = cva(
|
|
|
81
89
|
);
|
|
82
90
|
|
|
83
91
|
export const itemVariants = cva(
|
|
84
|
-
"flex items-center justify-between px-3 py-2 text-sm cursor-pointer rounded-md transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gray-500/60",
|
|
92
|
+
"flex items-center justify-between px-3 py-2 text-sm cursor-pointer rounded-md transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-gray-500/60 font-semibold",
|
|
85
93
|
{
|
|
86
94
|
variants: {
|
|
87
95
|
variant: {
|
|
88
|
-
default:
|
|
96
|
+
default:
|
|
97
|
+
"hover:bg-gray-100 hover:text-gray-500 dark:hover:text-gray-900 text-gray-900 dark:text-gray-100",
|
|
89
98
|
outline:
|
|
90
|
-
"hover:bg-gray-100 hover:text-gray-900 border border-white text-gray-100",
|
|
99
|
+
"hover:bg-gray-100 hover:text-gray-500 dark:hover:text-gray-900 border border-black dark:border-white text-gray-900 dark:text-gray-100",
|
|
91
100
|
ghost:
|
|
92
|
-
"hover:bg-gray-100 hover:text-gray-900 bg-transparent text-gray-100",
|
|
93
|
-
white:
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
101
|
+
"hover:bg-gray-100 hover:text-gray-500 dark:hover:text-gray-900 bg-transparent text-gray-900 dark:text-gray-100",
|
|
102
|
+
white:
|
|
103
|
+
"hover:bg-gray-100 hover:text-gray-500 dark:hover:text-gray-900 bg-white dark:bg-black text-gray-900 dark:text-white",
|
|
104
|
+
black:
|
|
105
|
+
"hover:bg-gray-100 hover:text-gray-500 dark:hover:text-gray-900 bg-black dark:bg-white text-white dark:text-gray-900",
|
|
106
|
+
sky: "hover:bg-sky-100 hover:text-sky-800 dark:hover:text-sky-600 bg-sky-200 text-sky-900 dark:text-sky-800",
|
|
107
|
+
rose: "hover:bg-rose-100 hover:text-rose-800 dark:hover:text-rose-600 bg-rose-200 text-rose-900 dark:text-rose-800",
|
|
97
108
|
purple:
|
|
98
|
-
"hover:bg-purple-100 hover:text-purple-600 bg-purple-200 text-purple-800",
|
|
99
|
-
pink: "hover:bg-pink-100 hover:text-pink-600 bg-pink-200 text-pink-800",
|
|
109
|
+
"hover:bg-purple-100 hover:text-purple-800 dark:hover:text-purple-600 bg-purple-200 text-purple-900 dark:text-purple-800",
|
|
110
|
+
pink: "hover:bg-pink-100 hover:text-pink-800 dark:hover:text-pink-600 bg-pink-200 text-pink-900 dark:text-pink-800",
|
|
100
111
|
orange:
|
|
101
|
-
"hover:bg-orange-100 hover:text-orange-600 bg-orange-200 text-orange-800",
|
|
112
|
+
"hover:bg-orange-100 hover:text-orange-800 dark:hover:text-orange-600 bg-orange-200 text-orange-900 dark:text-orange-800",
|
|
102
113
|
yellow:
|
|
103
|
-
"hover:bg-yellow-100 hover:text-yellow-600 bg-yellow-200 text-yellow-800",
|
|
104
|
-
teal: "hover:bg-teal-100 hover:text-teal-600 bg-teal-200 text-teal-800",
|
|
114
|
+
"hover:bg-yellow-100 hover:text-yellow-800 dark:hover:text-yellow-600 bg-yellow-200 text-yellow-900 dark:text-yellow-800",
|
|
115
|
+
teal: "hover:bg-teal-100 hover:text-teal-800 dark:hover:text-teal-600 bg-teal-200 text-teal-900 dark:text-teal-800",
|
|
105
116
|
indigo:
|
|
106
|
-
"hover:bg-indigo-100 hover:text-indigo-600 bg-indigo-200 text-indigo-800",
|
|
117
|
+
"hover:bg-indigo-100 hover:text-indigo-800 dark:hover:text-indigo-600 bg-indigo-200 text-indigo-900 dark:text-indigo-800",
|
|
107
118
|
emerald:
|
|
108
|
-
"hover:bg-emerald-100 hover:text-emerald-600 bg-emerald-200 text-emerald-800",
|
|
109
|
-
gray: "hover:bg-gray-100 hover:text-gray-900 bg-gray-200 text-gray-800",
|
|
119
|
+
"hover:bg-emerald-100 hover:text-emerald-800 dark:hover:text-emerald-600 bg-emerald-200 text-emerald-900 dark:text-emerald-800",
|
|
120
|
+
gray: "hover:bg-gray-100 hover:text-gray-500 dark:hover:text-gray-900 bg-gray-200 text-gray-500 dark:text-gray-800",
|
|
110
121
|
amber:
|
|
111
|
-
"hover:bg-amber-100 hover:text-amber-600 bg-amber-200 text-amber-800",
|
|
122
|
+
"hover:bg-amber-100 hover:text-amber-800 dark:hover:text-amber-600 bg-amber-200 text-amber-900 dark:text-amber-800",
|
|
112
123
|
violet:
|
|
113
|
-
"hover:bg-violet-100 hover:text-violet-600 bg-violet-200 text-violet-800",
|
|
124
|
+
"hover:bg-violet-100 hover:text-violet-800 dark:hover:text-violet-600 bg-violet-200 text-violet-900 dark:text-violet-800",
|
|
114
125
|
"gradient-blue":
|
|
115
|
-
"hover:bg-linear-to-r from-blue-600 to-purple-600 hover:text-blue-900 bg-linear-to-r from-blue-200 to-purple-200 text-blue-
|
|
126
|
+
"hover:bg-linear-to-r from-blue-800 dark:from-blue-600 to-purple-800 dark:to-purple-600 hover:text-blue-500 dark:hover:text-blue-900 bg-linear-to-r from-blue-200 to-purple-200 text-blue-900 dark:text-blue-200",
|
|
116
127
|
"gradient-green":
|
|
117
|
-
"hover:bg-linear-to-r from-green-600 to-lime-600 hover:text-green-900 bg-linear-to-r from-green-200 to-lime-200 text-green-
|
|
128
|
+
"hover:bg-linear-to-r from-green-800 dark:from-green-600 to-lime-800 dark:to-lime-600 hover:text-green-500 dark:hover:text-green-900 bg-linear-to-r from-green-200 to-lime-200 text-green-900 dark:text-green-200",
|
|
118
129
|
"gradient-red":
|
|
119
|
-
"hover:bg-linear-to-r from-red-600 to-pink-600 hover:text-red-900 bg-linear-to-r from-red-200 to-pink-200 text-red-
|
|
130
|
+
"hover:bg-linear-to-r from-red-800 dark:from-red-600 to-pink-800 dark:to-pink-600 hover:text-red-500 dark:hover:text-red-900 bg-linear-to-r from-red-200 to-pink-200 text-red-900 dark:text-red-200",
|
|
120
131
|
"gradient-yellow":
|
|
121
|
-
"hover:bg-linear-to-r from-yellow-600 to-orange-600 hover:text-yellow-900 bg-linear-to-r from-yellow-200 to-orange-200 text-yellow-
|
|
132
|
+
"hover:bg-linear-to-r from-yellow-800 dark:from-yellow-600 to-orange-800 dark:to-orange-600 hover:text-yellow-500 dark:hover:text-yellow-900 bg-linear-to-r from-yellow-200 to-orange-200 text-yellow-900 dark:text-yellow-200",
|
|
122
133
|
"gradient-purple":
|
|
123
|
-
"hover:bg-linear-to-r from-purple-600 to-pink-600 hover:text-purple-900 bg-linear-to-r from-purple-200 to-pink-200 text-purple-
|
|
134
|
+
"hover:bg-linear-to-r from-purple-800 dark:from-purple-600 to-pink-800 dark:to-pink-600 hover:text-purple-500 dark:hover:text-purple-900 bg-linear-to-r from-purple-200 to-pink-200 text-purple-900 dark:text-purple-200",
|
|
124
135
|
"gradient-teal":
|
|
125
|
-
"hover:bg-linear-to-r from-teal-600 to-cyan-600 hover:text-teal-900 bg-linear-to-r from-teal-200 to-cyan-200 text-teal-
|
|
136
|
+
"hover:bg-linear-to-r from-teal-800 dark:from-teal-600 to-cyan-800 dark:to-cyan-600 hover:text-teal-500 dark:hover:text-teal-900 bg-linear-to-r from-teal-200 to-cyan-200 text-teal-900 dark:text-teal-200",
|
|
126
137
|
"gradient-indigo":
|
|
127
|
-
"hover:bg-linear-to-r from-indigo-600 to-purple-600 hover:text-indigo-900 bg-linear-to-r from-indigo-200 to-purple-200 text-indigo-
|
|
138
|
+
"hover:bg-linear-to-r from-indigo-800 dark:from-indigo-600 to-purple-800 dark:to-purple-600 hover:text-indigo-500 dark:hover:text-indigo-900 bg-linear-to-r from-indigo-200 to-purple-200 text-indigo-900 dark:text-indigo-200",
|
|
128
139
|
"gradient-pink":
|
|
129
|
-
"hover:bg-linear-to-r from-pink-600 to-rose-600 hover:text-pink-900 bg-linear-to-r from-pink-200 to-rose-200 text-pink-
|
|
140
|
+
"hover:bg-linear-to-r from-pink-800 dark:from-pink-600 to-rose-800 dark:to-rose-600 hover:text-pink-500 dark:hover:text-pink-900 bg-linear-to-r from-pink-200 to-rose-200 text-pink-900 dark:text-pink-200",
|
|
130
141
|
"gradient-orange":
|
|
131
|
-
"hover:bg-linear-to-r from-orange-600 to-red-600 hover:text-orange-900 bg-linear-to-r from-orange-200 to-red-200 text-orange-
|
|
142
|
+
"hover:bg-linear-to-r from-orange-800 dark:from-orange-600 to-red-800 dark:to-red-600 hover:text-orange-500 dark:hover:text-orange-900 bg-linear-to-r from-orange-200 to-red-200 text-orange-900 dark:text-orange-200",
|
|
132
143
|
},
|
|
133
144
|
},
|
|
134
145
|
defaultVariants: {
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { createRef } from "react";
|
|
2
|
+
import { render, screen } from "@testing-library/react";
|
|
3
|
+
import userEvent from "@testing-library/user-event";
|
|
4
|
+
import { describe, expect, it, vi } from "vitest";
|
|
5
|
+
|
|
6
|
+
import { DynamicStepper } from "./dynamic-stepper";
|
|
7
|
+
|
|
8
|
+
const sampleSteps = [
|
|
9
|
+
{ id: "a", title: "One", description: "First" },
|
|
10
|
+
{ id: "b", title: "Two", description: "Second" },
|
|
11
|
+
{ id: "c", title: "Three", description: "Third" },
|
|
12
|
+
];
|
|
13
|
+
|
|
14
|
+
describe("DynamicStepper", () => {
|
|
15
|
+
it("should expose displayName", () => {
|
|
16
|
+
expect(DynamicStepper.displayName).toBe("DynamicStepper");
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it("should render null when steps is empty", () => {
|
|
20
|
+
const { container } = render(<DynamicStepper steps={[]} />);
|
|
21
|
+
expect(container.firstChild).toBeNull();
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it("should stamp mapper ol and button ids with suffixes", () => {
|
|
25
|
+
render(<DynamicStepper steps={sampleSteps} />);
|
|
26
|
+
const mapper = document.querySelector(
|
|
27
|
+
'[data-slot="dynamic-stepper-mapper"]',
|
|
28
|
+
);
|
|
29
|
+
expect(mapper?.tagName).toBe("OL");
|
|
30
|
+
expect(mapper?.id.endsWith("-mapper")).toBe(true);
|
|
31
|
+
|
|
32
|
+
const prev = document.querySelector(
|
|
33
|
+
'[data-slot="dynamic-stepper-previous"]',
|
|
34
|
+
);
|
|
35
|
+
const next = document.querySelector('[data-slot="dynamic-stepper-next"]');
|
|
36
|
+
expect(prev?.id.endsWith("-previous")).toBe(true);
|
|
37
|
+
expect(next?.id.endsWith("-next")).toBe(true);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it("should navigate uncontrolled with next and previous", async () => {
|
|
41
|
+
const user = userEvent.setup();
|
|
42
|
+
render(<DynamicStepper steps={sampleSteps} defaultActiveStep={0} />);
|
|
43
|
+
|
|
44
|
+
expect(screen.getByText("One")).toBeInTheDocument();
|
|
45
|
+
const indicators = document.querySelectorAll(
|
|
46
|
+
'[data-slot="dynamic-stepper-indicator"]',
|
|
47
|
+
);
|
|
48
|
+
expect(indicators[0]?.className).toMatch(/violet/);
|
|
49
|
+
|
|
50
|
+
await user.click(screen.getByRole("button", { name: "Next" }));
|
|
51
|
+
expect(indicators[1]?.className).toMatch(/violet/);
|
|
52
|
+
|
|
53
|
+
await user.click(screen.getByRole("button", { name: "Previous" }));
|
|
54
|
+
expect(indicators[0]?.className).toMatch(/violet/);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it("should disable previous on first step and next on last step", () => {
|
|
58
|
+
render(<DynamicStepper steps={sampleSteps} defaultActiveStep={0} />);
|
|
59
|
+
expect(screen.getByRole("button", { name: "Previous" })).toBeDisabled();
|
|
60
|
+
expect(screen.getByRole("button", { name: "Next" })).not.toBeDisabled();
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it("should respect controlled activeStep", async () => {
|
|
64
|
+
const user = userEvent.setup();
|
|
65
|
+
const onActiveStepChange = vi.fn();
|
|
66
|
+
const { rerender } = render(
|
|
67
|
+
<DynamicStepper
|
|
68
|
+
steps={sampleSteps}
|
|
69
|
+
activeStep={0}
|
|
70
|
+
onActiveStepChange={onActiveStepChange}
|
|
71
|
+
/>,
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
await user.click(screen.getByRole("button", { name: "Next" }));
|
|
75
|
+
expect(onActiveStepChange).toHaveBeenCalledWith(1);
|
|
76
|
+
|
|
77
|
+
rerender(
|
|
78
|
+
<DynamicStepper
|
|
79
|
+
steps={sampleSteps}
|
|
80
|
+
activeStep={1}
|
|
81
|
+
onActiveStepChange={onActiveStepChange}
|
|
82
|
+
/>,
|
|
83
|
+
);
|
|
84
|
+
const indicators = document.querySelectorAll(
|
|
85
|
+
'[data-slot="dynamic-stepper-indicator"]',
|
|
86
|
+
);
|
|
87
|
+
expect(indicators[1]?.className).toMatch(/violet/);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it("should forward ref to root", () => {
|
|
91
|
+
const ref = createRef<HTMLDivElement>();
|
|
92
|
+
render(<DynamicStepper ref={ref} steps={sampleSteps} />);
|
|
93
|
+
expect(ref.current?.getAttribute("data-slot")).toBe("dynamic-stepper");
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
it("should apply indicator tone props to semantic states", () => {
|
|
97
|
+
const { container } = render(
|
|
98
|
+
<DynamicStepper
|
|
99
|
+
steps={sampleSteps}
|
|
100
|
+
defaultActiveStep={1}
|
|
101
|
+
indicatorCompleteAppearance="sky"
|
|
102
|
+
indicatorCurrentAppearance="rose"
|
|
103
|
+
indicatorUpcomingAppearance="amber"
|
|
104
|
+
/>,
|
|
105
|
+
);
|
|
106
|
+
const indicators = container.querySelectorAll(
|
|
107
|
+
'[data-slot="dynamic-stepper-indicator"]',
|
|
108
|
+
);
|
|
109
|
+
expect(indicators[0]?.className).toMatch(/sky-/);
|
|
110
|
+
expect(indicators[1]?.className).toMatch(/rose-/);
|
|
111
|
+
expect(indicators[2]?.className).toMatch(/amber-/);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useId } from "react";
|
|
4
|
+
|
|
5
|
+
import { useDynamicStepper } from "../../hooks/useDynamicStepper/useDynamicStepper";
|
|
6
|
+
import { cn } from "../../lib/utils";
|
|
7
|
+
import { Button } from "../buttons/button";
|
|
8
|
+
|
|
9
|
+
import type { DynamicStepperProps } from "./types";
|
|
10
|
+
import {
|
|
11
|
+
dynamicStepperIndicatorToneClass,
|
|
12
|
+
dynamicStepperIndicatorVariants,
|
|
13
|
+
dynamicStepperItemVariants,
|
|
14
|
+
dynamicStepperMapperVariants,
|
|
15
|
+
dynamicStepperRootVariants,
|
|
16
|
+
} from "./variants";
|
|
17
|
+
|
|
18
|
+
export const DynamicStepper = ({
|
|
19
|
+
steps,
|
|
20
|
+
orientation = "horizontal",
|
|
21
|
+
buttonAppearance = "outline",
|
|
22
|
+
buttonSize = "md",
|
|
23
|
+
indicatorSize = "md",
|
|
24
|
+
indicatorCompleteAppearance = "emerald",
|
|
25
|
+
indicatorCurrentAppearance = "violet",
|
|
26
|
+
indicatorUpcomingAppearance = "outline",
|
|
27
|
+
activeStep: activeStepProp,
|
|
28
|
+
defaultActiveStep,
|
|
29
|
+
onActiveStepChange,
|
|
30
|
+
onPrevious,
|
|
31
|
+
onNext,
|
|
32
|
+
prevLabel = "Previous",
|
|
33
|
+
nextLabel = "Next",
|
|
34
|
+
className,
|
|
35
|
+
ref,
|
|
36
|
+
...rest
|
|
37
|
+
}: DynamicStepperProps) => {
|
|
38
|
+
const baseId = useId();
|
|
39
|
+
const previousId = `${baseId}-previous`;
|
|
40
|
+
const nextId = `${baseId}-next`;
|
|
41
|
+
const mapperId = `${baseId}-mapper`;
|
|
42
|
+
|
|
43
|
+
const { activeStep, goPrevious, goNext, canGoPrevious, canGoNext } =
|
|
44
|
+
useDynamicStepper({
|
|
45
|
+
stepCount: steps.length,
|
|
46
|
+
activeStep: activeStepProp,
|
|
47
|
+
defaultActiveStep,
|
|
48
|
+
onActiveStepChange,
|
|
49
|
+
onPrevious,
|
|
50
|
+
onNext,
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
if (steps.length === 0) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const itemOrientation =
|
|
58
|
+
orientation === "vertical" ? "vertical" : "horizontal";
|
|
59
|
+
|
|
60
|
+
return (
|
|
61
|
+
<div
|
|
62
|
+
ref={ref}
|
|
63
|
+
role="navigation"
|
|
64
|
+
data-slot="dynamic-stepper"
|
|
65
|
+
className={cn(dynamicStepperRootVariants({ orientation }), className)}
|
|
66
|
+
{...rest}
|
|
67
|
+
>
|
|
68
|
+
<Button
|
|
69
|
+
id={previousId}
|
|
70
|
+
data-slot="dynamic-stepper-previous"
|
|
71
|
+
type="button"
|
|
72
|
+
appearance={buttonAppearance}
|
|
73
|
+
size={buttonSize}
|
|
74
|
+
disabled={!canGoPrevious}
|
|
75
|
+
onClick={goPrevious}
|
|
76
|
+
className={
|
|
77
|
+
orientation === "vertical" ? "shrink-0 self-start" : "shrink-0"
|
|
78
|
+
}
|
|
79
|
+
>
|
|
80
|
+
{prevLabel}
|
|
81
|
+
</Button>
|
|
82
|
+
|
|
83
|
+
<ol
|
|
84
|
+
id={mapperId}
|
|
85
|
+
aria-label="Steps"
|
|
86
|
+
data-slot="dynamic-stepper-mapper"
|
|
87
|
+
className={dynamicStepperMapperVariants({ orientation })}
|
|
88
|
+
>
|
|
89
|
+
{steps.map((step, index) => {
|
|
90
|
+
const key = step.id ?? `dynamic-stepper-step-${index}`;
|
|
91
|
+
const isCurrent = index === activeStep;
|
|
92
|
+
const semanticState =
|
|
93
|
+
index < activeStep
|
|
94
|
+
? "complete"
|
|
95
|
+
: isCurrent
|
|
96
|
+
? "current"
|
|
97
|
+
: "upcoming";
|
|
98
|
+
const indicatorTone =
|
|
99
|
+
semanticState === "complete"
|
|
100
|
+
? indicatorCompleteAppearance
|
|
101
|
+
: semanticState === "current"
|
|
102
|
+
? indicatorCurrentAppearance
|
|
103
|
+
: indicatorUpcomingAppearance;
|
|
104
|
+
|
|
105
|
+
const isVertical = orientation === "vertical";
|
|
106
|
+
|
|
107
|
+
return (
|
|
108
|
+
<li
|
|
109
|
+
key={key}
|
|
110
|
+
data-slot="dynamic-stepper-item"
|
|
111
|
+
aria-current={isCurrent ? "step" : undefined}
|
|
112
|
+
className={dynamicStepperItemVariants({
|
|
113
|
+
orientation: itemOrientation,
|
|
114
|
+
})}
|
|
115
|
+
>
|
|
116
|
+
<div
|
|
117
|
+
data-slot="dynamic-stepper-indicator"
|
|
118
|
+
className={cn(
|
|
119
|
+
dynamicStepperIndicatorVariants({ size: indicatorSize }),
|
|
120
|
+
dynamicStepperIndicatorToneClass(
|
|
121
|
+
semanticState,
|
|
122
|
+
indicatorTone,
|
|
123
|
+
),
|
|
124
|
+
)}
|
|
125
|
+
>
|
|
126
|
+
{step.indicator ?? index + 1}
|
|
127
|
+
</div>
|
|
128
|
+
<div
|
|
129
|
+
className={cn(
|
|
130
|
+
"min-w-0",
|
|
131
|
+
!isVertical && "flex flex-col items-center",
|
|
132
|
+
)}
|
|
133
|
+
>
|
|
134
|
+
{step.title != null && (
|
|
135
|
+
<div
|
|
136
|
+
className={cn(
|
|
137
|
+
"text-sm font-semibold dark:text-white text-slate-900",
|
|
138
|
+
!isVertical && "mt-3",
|
|
139
|
+
)}
|
|
140
|
+
>
|
|
141
|
+
{step.title}
|
|
142
|
+
</div>
|
|
143
|
+
)}
|
|
144
|
+
{step.description != null && (
|
|
145
|
+
<p className="mt-1 text-xs text-slate-900 dark:text-slate-400">
|
|
146
|
+
{step.description}
|
|
147
|
+
</p>
|
|
148
|
+
)}
|
|
149
|
+
</div>
|
|
150
|
+
</li>
|
|
151
|
+
);
|
|
152
|
+
})}
|
|
153
|
+
</ol>
|
|
154
|
+
|
|
155
|
+
<Button
|
|
156
|
+
id={nextId}
|
|
157
|
+
data-slot="dynamic-stepper-next"
|
|
158
|
+
type="button"
|
|
159
|
+
appearance={buttonAppearance}
|
|
160
|
+
size={buttonSize}
|
|
161
|
+
disabled={!canGoNext}
|
|
162
|
+
onClick={goNext}
|
|
163
|
+
className={
|
|
164
|
+
orientation === "vertical" ? "shrink-0 self-start" : "shrink-0"
|
|
165
|
+
}
|
|
166
|
+
>
|
|
167
|
+
{nextLabel}
|
|
168
|
+
</Button>
|
|
169
|
+
</div>
|
|
170
|
+
);
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
DynamicStepper.displayName = "DynamicStepper";
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
export { DynamicStepper } from "./dynamic-stepper";
|
|
4
|
+
export type {
|
|
5
|
+
DynamicStepperButtonAppearance,
|
|
6
|
+
DynamicStepperButtonSize,
|
|
7
|
+
DynamicStepperIndicatorSize,
|
|
8
|
+
DynamicStepperIndicatorToneAppearance,
|
|
9
|
+
DynamicStepperOrientation,
|
|
10
|
+
DynamicStepperProps,
|
|
11
|
+
DynamicStepperStep,
|
|
12
|
+
UseDynamicStepperParams,
|
|
13
|
+
UseDynamicStepperResult,
|
|
14
|
+
} from "./types";
|
|
15
|
+
export {
|
|
16
|
+
dynamicStepperIndicatorToneClass,
|
|
17
|
+
dynamicStepperIndicatorVariants,
|
|
18
|
+
dynamicStepperItemVariants,
|
|
19
|
+
dynamicStepperMapperVariants,
|
|
20
|
+
dynamicStepperRootVariants,
|
|
21
|
+
} from "./variants";
|
|
22
|
+
export type { DynamicStepperIndicatorSemanticState } from "./variants";
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { VariantProps } from "class-variance-authority";
|
|
2
|
+
import type { ComponentPropsWithRef, ReactNode } from "react";
|
|
3
|
+
|
|
4
|
+
import type { buttonVariants } from "../buttons/variants";
|
|
5
|
+
import type {
|
|
6
|
+
DynamicStepperIndicatorToneAppearance,
|
|
7
|
+
dynamicStepperIndicatorVariants,
|
|
8
|
+
dynamicStepperRootVariants,
|
|
9
|
+
} from "./variants";
|
|
10
|
+
|
|
11
|
+
export type DynamicStepperOrientation = NonNullable<
|
|
12
|
+
VariantProps<typeof dynamicStepperRootVariants>["orientation"]
|
|
13
|
+
>;
|
|
14
|
+
|
|
15
|
+
export type DynamicStepperIndicatorSize = NonNullable<
|
|
16
|
+
VariantProps<typeof dynamicStepperIndicatorVariants>["size"]
|
|
17
|
+
>;
|
|
18
|
+
|
|
19
|
+
export type { DynamicStepperIndicatorToneAppearance };
|
|
20
|
+
|
|
21
|
+
export type DynamicStepperStep = {
|
|
22
|
+
id?: string;
|
|
23
|
+
title?: ReactNode;
|
|
24
|
+
description?: ReactNode;
|
|
25
|
+
indicator?: ReactNode;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export type DynamicStepperButtonAppearance = NonNullable<
|
|
29
|
+
VariantProps<typeof buttonVariants>["appearance"]
|
|
30
|
+
>;
|
|
31
|
+
|
|
32
|
+
export type DynamicStepperButtonSize = NonNullable<
|
|
33
|
+
VariantProps<typeof buttonVariants>["size"]
|
|
34
|
+
>;
|
|
35
|
+
|
|
36
|
+
export type UseDynamicStepperParams = {
|
|
37
|
+
stepCount: number;
|
|
38
|
+
/** Controlled active step index (0-based). */
|
|
39
|
+
activeStep?: number;
|
|
40
|
+
/** Initial step when uncontrolled. Clamped to `[0, stepCount - 1]`. */
|
|
41
|
+
defaultActiveStep?: number;
|
|
42
|
+
onActiveStepChange?: (step: number) => void;
|
|
43
|
+
/** Fires after a successful move from the previous button with the new index. */
|
|
44
|
+
onPrevious?: (nextStep: number) => void;
|
|
45
|
+
/** Fires after a successful move from the next button with the new index. */
|
|
46
|
+
onNext?: (nextStep: number) => void;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export type UseDynamicStepperResult = {
|
|
50
|
+
/** Active step index (0-based), clamped to valid range. */
|
|
51
|
+
activeStep: number;
|
|
52
|
+
setActiveStep: (next: number | ((prev: number) => number)) => void;
|
|
53
|
+
goPrevious: () => void;
|
|
54
|
+
goNext: () => void;
|
|
55
|
+
canGoPrevious: boolean;
|
|
56
|
+
canGoNext: boolean;
|
|
57
|
+
stepCount: number;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export type DynamicStepperProps = Omit<
|
|
61
|
+
ComponentPropsWithRef<"div">,
|
|
62
|
+
"children"
|
|
63
|
+
> & {
|
|
64
|
+
steps: DynamicStepperStep[];
|
|
65
|
+
orientation?: DynamicStepperOrientation;
|
|
66
|
+
/** Passed to Previous / Next `Button` components. */
|
|
67
|
+
buttonAppearance?: DynamicStepperButtonAppearance;
|
|
68
|
+
/** Passed to Previous / Next `Button` components. */
|
|
69
|
+
buttonSize?: DynamicStepperButtonSize;
|
|
70
|
+
/** Indicator + text scale inside the mapper. */
|
|
71
|
+
indicatorSize?: DynamicStepperIndicatorSize;
|
|
72
|
+
/** Tone for completed steps (non-gradient button palette). @defaultValue emerald */
|
|
73
|
+
indicatorCompleteAppearance?: DynamicStepperIndicatorToneAppearance;
|
|
74
|
+
/** Tone for the active step. @defaultValue violet */
|
|
75
|
+
indicatorCurrentAppearance?: DynamicStepperIndicatorToneAppearance;
|
|
76
|
+
/** Tone for upcoming steps. @defaultValue outline */
|
|
77
|
+
indicatorUpcomingAppearance?: DynamicStepperIndicatorToneAppearance;
|
|
78
|
+
activeStep?: number;
|
|
79
|
+
defaultActiveStep?: number;
|
|
80
|
+
onActiveStepChange?: (step: number) => void;
|
|
81
|
+
onPrevious?: (nextStep: number) => void;
|
|
82
|
+
onNext?: (nextStep: number) => void;
|
|
83
|
+
prevLabel?: ReactNode;
|
|
84
|
+
nextLabel?: ReactNode;
|
|
85
|
+
};
|