erp-pro-ui 0.1.1 → 0.1.2
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 +512 -288
- package/dist/accordion.cjs +1 -1
- package/dist/accordion.mjs +1 -1
- package/dist/alert.cjs +1 -1
- package/dist/alert.mjs +1 -1
- package/dist/ascii-text.cjs +1 -1
- package/dist/ascii-text.mjs +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.mjs +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.mjs +1 -1
- package/dist/carousel.cjs +1 -1
- package/dist/carousel.mjs +1 -1
- package/dist/catalog.cjs +6 -0
- package/dist/catalog.cjs.map +1 -1
- package/dist/catalog.d.ts +11 -1
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.mjs +6 -0
- package/dist/catalog.mjs.map +1 -1
- package/dist/charts.cjs +4 -1
- package/dist/charts.mjs +2 -2
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.mjs +1 -1
- package/dist/chip.cjs +1 -1
- package/dist/chip.mjs +1 -1
- package/dist/chroma-grid.cjs +1 -1
- package/dist/chroma-grid.mjs +1 -1
- package/dist/chunks/{accordion-C_0oGZkZ.mjs → accordion-Cbt-SJhj.mjs} +4 -4
- package/dist/chunks/accordion-Cbt-SJhj.mjs.map +1 -0
- package/dist/chunks/{accordion-BZ5hyz0_.cjs → accordion-pfJR8YYA.cjs} +4 -4
- package/dist/chunks/accordion-pfJR8YYA.cjs.map +1 -0
- package/dist/chunks/{alert-DeVa-NR1.mjs → alert-CtdLy4Hv.mjs} +6 -6
- package/dist/chunks/alert-CtdLy4Hv.mjs.map +1 -0
- package/dist/chunks/{alert-BdBDWqBN.cjs → alert-Dvz1GoL5.cjs} +6 -6
- package/dist/chunks/alert-Dvz1GoL5.cjs.map +1 -0
- package/dist/chunks/{ascii-text-BzQCLfya.mjs → ascii-text-C5tyNsR3.mjs} +32 -5
- package/dist/chunks/ascii-text-C5tyNsR3.mjs.map +1 -0
- package/dist/chunks/{ascii-text-D6lVHWph.cjs → ascii-text-DlmArZXh.cjs} +32 -5
- package/dist/chunks/ascii-text-DlmArZXh.cjs.map +1 -0
- package/dist/chunks/background-gradient-animation-BL-lnrJe.mjs.map +1 -1
- package/dist/chunks/background-gradient-animation-CXV9GDH8.cjs.map +1 -1
- package/dist/chunks/{button-CmNEMp_O.mjs → button-B0Lhj0AS.mjs} +3 -3
- package/dist/chunks/button-B0Lhj0AS.mjs.map +1 -0
- package/dist/chunks/{button-BH1eUjae.cjs → button-CZL6kFzT.cjs} +3 -3
- package/dist/chunks/button-CZL6kFzT.cjs.map +1 -0
- package/dist/chunks/{card-CzstAQYy.mjs → card-CcIF6z2H.mjs} +2 -2
- package/dist/chunks/card-CcIF6z2H.mjs.map +1 -0
- package/dist/chunks/{card-DZGM4zLx.cjs → card-gt-HZh0h.cjs} +2 -2
- package/dist/chunks/card-gt-HZh0h.cjs.map +1 -0
- package/dist/chunks/{carousel-47Eiyzwg.cjs → carousel-Cq5uwqQt.cjs} +3 -3
- package/dist/chunks/{carousel-BJ3nm2bw.mjs.map → carousel-Cq5uwqQt.cjs.map} +1 -1
- package/dist/chunks/{carousel-BJ3nm2bw.mjs → carousel-DJdqBVRK.mjs} +3 -3
- package/dist/chunks/{carousel-47Eiyzwg.cjs.map → carousel-DJdqBVRK.mjs.map} +1 -1
- package/dist/chunks/charts-BpElnsoR.cjs +687 -0
- package/dist/chunks/charts-BpElnsoR.cjs.map +1 -0
- package/dist/chunks/charts-DugYWvEf.mjs +632 -0
- package/dist/chunks/charts-DugYWvEf.mjs.map +1 -0
- package/dist/chunks/{checkbox-B3eIojWs.mjs → checkbox-DvwlGwWe.mjs} +8 -8
- package/dist/chunks/checkbox-DvwlGwWe.mjs.map +1 -0
- package/dist/chunks/{checkbox-DQmZwRTt.cjs → checkbox-yHuSw-hV.cjs} +8 -8
- package/dist/chunks/checkbox-yHuSw-hV.cjs.map +1 -0
- package/dist/chunks/{chip-cZ7-HmWw.mjs → chip-BGSUmnlO.mjs} +12 -12
- package/dist/chunks/chip-BGSUmnlO.mjs.map +1 -0
- package/dist/chunks/{chip-BH6wzwat.cjs → chip-DcBji__g.cjs} +12 -12
- package/dist/chunks/chip-DcBji__g.cjs.map +1 -0
- package/dist/chunks/{chroma-grid-DtsqM4LW.cjs → chroma-grid-9E9j1s9I.cjs} +10 -10
- package/dist/chunks/chroma-grid-9E9j1s9I.cjs.map +1 -0
- package/dist/chunks/{chroma-grid-CC_fFzxO.mjs → chroma-grid-Cdeql_2C.mjs} +10 -10
- package/dist/chunks/chroma-grid-Cdeql_2C.mjs.map +1 -0
- package/dist/chunks/color-palette-BLvDnCOD.cjs +754 -0
- package/dist/chunks/color-palette-BLvDnCOD.cjs.map +1 -0
- package/dist/chunks/color-palette-CXlCDiZz.mjs +748 -0
- package/dist/chunks/color-palette-CXlCDiZz.mjs.map +1 -0
- package/dist/chunks/{combobox-mAvOcg-E.cjs → combobox-BXu3s0dt.cjs} +56 -32
- package/dist/chunks/combobox-BXu3s0dt.cjs.map +1 -0
- package/dist/chunks/combobox-CjK-qG4k.mjs +132 -0
- package/dist/chunks/combobox-CjK-qG4k.mjs.map +1 -0
- package/dist/chunks/{data-table-BRcGhJDf.cjs → data-table-9HELVsYR.cjs} +197 -292
- package/dist/chunks/data-table-9HELVsYR.cjs.map +1 -0
- package/dist/chunks/{data-table-Dp0t_I_z.mjs → data-table-DyEQn9Yj.mjs} +197 -292
- package/dist/chunks/data-table-DyEQn9Yj.mjs.map +1 -0
- package/dist/chunks/{date-picker-BWBkr6LG.mjs → date-picker-D8gaaMlJ.mjs} +39 -16
- package/dist/chunks/date-picker-D8gaaMlJ.mjs.map +1 -0
- package/dist/chunks/{date-picker-DooielHi.cjs → date-picker-W9om1j7A.cjs} +39 -16
- package/dist/chunks/date-picker-W9om1j7A.cjs.map +1 -0
- package/dist/chunks/{dialog-Cbuf8V0g.cjs → dialog-CYFiWN8M.cjs} +20 -20
- package/dist/chunks/dialog-CYFiWN8M.cjs.map +1 -0
- package/dist/chunks/{dialog-C6nxSfIl.mjs → dialog-DUWnV9tN.mjs} +20 -20
- package/dist/chunks/dialog-DUWnV9tN.mjs.map +1 -0
- package/dist/chunks/{drawer-Dn0u8Sck.cjs → drawer-CLjsYdxN.cjs} +39 -22
- package/dist/chunks/drawer-CLjsYdxN.cjs.map +1 -0
- package/dist/chunks/drawer-D82Jz6KO.mjs +122 -0
- package/dist/chunks/drawer-D82Jz6KO.mjs.map +1 -0
- package/dist/chunks/{form-TwlDrshv.mjs → form-B2vcaHwh.mjs} +4 -4
- package/dist/chunks/form-B2vcaHwh.mjs.map +1 -0
- package/dist/chunks/{form-DcEuk721.cjs → form-CzH9GQc6.cjs} +4 -4
- package/dist/chunks/form-CzH9GQc6.cjs.map +1 -0
- package/dist/chunks/{gradual-blur-2jVhPcND.cjs → gradual-blur-B9GoY8o1.cjs} +1 -1
- package/dist/chunks/{gradual-blur-2jVhPcND.cjs.map → gradual-blur-B9GoY8o1.cjs.map} +1 -1
- package/dist/chunks/{gradual-blur-jTzKCmAV.mjs → gradual-blur-Bl3dOMEz.mjs} +1 -1
- package/dist/chunks/{gradual-blur-jTzKCmAV.mjs.map → gradual-blur-Bl3dOMEz.mjs.map} +1 -1
- package/dist/chunks/{hover-card-KjWMnvt_.cjs → hover-card-v0QwmVBU.cjs} +9 -4
- package/dist/chunks/hover-card-v0QwmVBU.cjs.map +1 -0
- package/dist/chunks/{hover-card-DwTVfjgN.mjs → hover-card-xqwpmZNm.mjs} +9 -4
- package/dist/chunks/{hover-card-KjWMnvt_.cjs.map → hover-card-xqwpmZNm.mjs.map} +1 -1
- package/dist/chunks/{icons-DYkpqWYG.cjs → icons-BxIzP2jd.cjs} +131 -8
- package/dist/chunks/icons-BxIzP2jd.cjs.map +1 -0
- package/dist/chunks/{icons-CrM6pFkv.mjs → icons-DuumN7z-.mjs} +108 -9
- package/dist/chunks/icons-DuumN7z-.mjs.map +1 -0
- package/dist/chunks/{input-CoRHoZkB.cjs → input-D9qZNqXV.cjs} +8 -8
- package/dist/chunks/input-D9qZNqXV.cjs.map +1 -0
- package/dist/chunks/{input-ChhwdNGk.mjs → input-wNqevfQ4.mjs} +8 -8
- package/dist/chunks/input-wNqevfQ4.mjs.map +1 -0
- package/dist/chunks/{label-EciNc4hO.cjs → label-BWPEGVam.cjs} +1 -1
- package/dist/chunks/{label-EciNc4hO.cjs.map → label-BWPEGVam.cjs.map} +1 -1
- package/dist/chunks/{label-JZn7PmtR.mjs → label-KPA-yYOF.mjs} +1 -1
- package/dist/chunks/{label-JZn7PmtR.mjs.map → label-KPA-yYOF.mjs.map} +1 -1
- package/dist/chunks/{loading-DPNa_X3c.mjs → loading-S1TdIrbB.mjs} +2 -2
- package/dist/chunks/{loading-DPNa_X3c.mjs.map → loading-S1TdIrbB.mjs.map} +1 -1
- package/dist/chunks/{loading-Cqgps3nf.cjs → loading-q7IEg56I.cjs} +2 -2
- package/dist/chunks/{loading-Cqgps3nf.cjs.map → loading-q7IEg56I.cjs.map} +1 -1
- package/dist/chunks/multi-select-combobox-ELSH_Xr4.mjs +132 -0
- package/dist/chunks/multi-select-combobox-ELSH_Xr4.mjs.map +1 -0
- package/dist/chunks/multi-select-combobox-UW0X15W7.cjs +139 -0
- package/dist/chunks/multi-select-combobox-UW0X15W7.cjs.map +1 -0
- package/dist/chunks/{otp-input-DaQDfI9C.cjs → otp-input-B6zzOEqw.cjs} +13 -14
- package/dist/chunks/otp-input-B6zzOEqw.cjs.map +1 -0
- package/dist/chunks/{otp-input-CNungc1j.mjs → otp-input-Bg4nQG6x.mjs} +13 -14
- package/dist/chunks/otp-input-Bg4nQG6x.mjs.map +1 -0
- package/dist/chunks/{overlay-BfUR77DT.cjs → overlay-DWNTyQzK.cjs} +1 -1
- package/dist/chunks/{overlay-BfUR77DT.cjs.map → overlay-DWNTyQzK.cjs.map} +1 -1
- package/dist/chunks/{overlay-CpdakhXI.mjs → overlay-TycCIFOu.mjs} +1 -1
- package/dist/chunks/{overlay-CpdakhXI.mjs.map → overlay-TycCIFOu.mjs.map} +1 -1
- package/dist/chunks/{password-strength-meter-xtMqhhFg.mjs → password-strength-meter-CbNSBuh_.mjs} +10 -10
- package/dist/chunks/password-strength-meter-CbNSBuh_.mjs.map +1 -0
- package/dist/chunks/{password-strength-meter-u4YI00zE.cjs → password-strength-meter-DxMV6GAs.cjs} +10 -10
- package/dist/chunks/password-strength-meter-DxMV6GAs.cjs.map +1 -0
- package/dist/chunks/progress-bar-C1OvQ-NI.cjs +96 -0
- package/dist/chunks/progress-bar-C1OvQ-NI.cjs.map +1 -0
- package/dist/chunks/progress-bar-C9FZDrju.mjs +89 -0
- package/dist/chunks/progress-bar-C9FZDrju.mjs.map +1 -0
- package/dist/chunks/{radio-C-fPZgSY.mjs → radio-C9w_CoiY.mjs} +9 -9
- package/dist/chunks/radio-C9w_CoiY.mjs.map +1 -0
- package/dist/chunks/{radio-mCgvEhOR.cjs → radio-jMHDvaMY.cjs} +9 -9
- package/dist/chunks/radio-jMHDvaMY.cjs.map +1 -0
- package/dist/chunks/select-D71tk6-I.mjs +152 -0
- package/dist/chunks/select-D71tk6-I.mjs.map +1 -0
- package/dist/chunks/select-WC_kPqUP.cjs +158 -0
- package/dist/chunks/select-WC_kPqUP.cjs.map +1 -0
- package/dist/chunks/{skeleton-D1S4RyeL.mjs → skeleton-BhYWOp0Q.mjs} +1 -1
- package/dist/chunks/{skeleton-D1S4RyeL.mjs.map → skeleton-BhYWOp0Q.mjs.map} +1 -1
- package/dist/chunks/{skeleton-C-NHrM-w.cjs → skeleton-DTXpHYYB.cjs} +1 -1
- package/dist/chunks/{skeleton-C-NHrM-w.cjs.map → skeleton-DTXpHYYB.cjs.map} +1 -1
- package/dist/chunks/{spinners-hf553hP9.mjs → spinners-BBCWD2gw.mjs} +2 -2
- package/dist/chunks/{spinners-hf553hP9.mjs.map → spinners-BBCWD2gw.mjs.map} +1 -1
- package/dist/chunks/{spinners-CU3bLaoo.cjs → spinners-BL4ERCCw.cjs} +2 -2
- package/dist/chunks/{spinners-CU3bLaoo.cjs.map → spinners-BL4ERCCw.cjs.map} +1 -1
- package/dist/chunks/{splash-cursor-Dpzl_YXx.cjs → splash-cursor-BVSmbcIX.cjs} +9 -8
- package/dist/chunks/splash-cursor-BVSmbcIX.cjs.map +1 -0
- package/dist/chunks/{splash-cursor-9BsoQZl0.mjs → splash-cursor-rSrTnawZ.mjs} +9 -8
- package/dist/chunks/splash-cursor-rSrTnawZ.mjs.map +1 -0
- package/dist/chunks/{spotlight-card-Bl0aXnT4.mjs → spotlight-card-BpZLMOp6.mjs} +1 -1
- package/dist/chunks/{spotlight-card-Bl0aXnT4.mjs.map → spotlight-card-BpZLMOp6.mjs.map} +1 -1
- package/dist/chunks/{spotlight-card-SUhrgstF.cjs → spotlight-card-DS1dy1W3.cjs} +1 -1
- package/dist/chunks/{spotlight-card-SUhrgstF.cjs.map → spotlight-card-DS1dy1W3.cjs.map} +1 -1
- package/dist/chunks/{stepper-uz8iRzlY.mjs → stepper-D4yQsQB0.mjs} +14 -14
- package/dist/chunks/stepper-D4yQsQB0.mjs.map +1 -0
- package/dist/chunks/{stepper-BDz6PkjV.cjs → stepper-fY-Sx72k.cjs} +14 -14
- package/dist/chunks/stepper-fY-Sx72k.cjs.map +1 -0
- package/dist/chunks/{sun-to-moon-button-3E6qah0o.mjs → sun-to-moon-button-B2Aje05o.mjs} +3 -3
- package/dist/chunks/{sun-to-moon-button-3E6qah0o.mjs.map → sun-to-moon-button-B2Aje05o.mjs.map} +1 -1
- package/dist/chunks/{sun-to-moon-button-B__3FWnK.cjs → sun-to-moon-button-BmFwRBye.cjs} +3 -3
- package/dist/chunks/{sun-to-moon-button-B__3FWnK.cjs.map → sun-to-moon-button-BmFwRBye.cjs.map} +1 -1
- package/dist/chunks/{switch-y8oWcyLp.cjs → switch-C5otDb4c.cjs} +3 -3
- package/dist/chunks/switch-C5otDb4c.cjs.map +1 -0
- package/dist/chunks/{switch-DYLavKgf.mjs → switch-DOVl_i_s.mjs} +3 -3
- package/dist/chunks/switch-DOVl_i_s.mjs.map +1 -0
- package/dist/chunks/textarea-CAUsyu4-.cjs +63 -0
- package/dist/chunks/textarea-CAUsyu4-.cjs.map +1 -0
- package/dist/chunks/textarea-CU5C-Zw9.mjs +57 -0
- package/dist/chunks/textarea-CU5C-Zw9.mjs.map +1 -0
- package/dist/chunks/{theme-CBtWIFMT.cjs → theme-7DWLxJK_.cjs} +4 -2
- package/dist/chunks/theme-7DWLxJK_.cjs.map +1 -0
- package/dist/chunks/{theme-Bwu0HKqZ.mjs → theme-BceKeYhw.mjs} +4 -2
- package/dist/chunks/theme-BceKeYhw.mjs.map +1 -0
- package/dist/chunks/{toast-C8JRhbSo.mjs → toast-CvfP7PUP.mjs} +20 -20
- package/dist/chunks/toast-CvfP7PUP.mjs.map +1 -0
- package/dist/chunks/{toast-DWOwpD2F.cjs → toast-Ds7_19Ap.cjs} +20 -20
- package/dist/chunks/toast-Ds7_19Ap.cjs.map +1 -0
- package/dist/chunks/{tooltip-YtA_66_1.mjs → tooltip-efHETBo1.mjs} +1 -1
- package/dist/chunks/{tooltip-YtA_66_1.mjs.map → tooltip-efHETBo1.mjs.map} +1 -1
- package/dist/chunks/{tooltip-BHXNmXsa.cjs → tooltip-nkIqViGk.cjs} +1 -1
- package/dist/chunks/{tooltip-BHXNmXsa.cjs.map → tooltip-nkIqViGk.cjs.map} +1 -1
- package/dist/chunks/{typography-BzprBnQc.mjs → typography-CLu6Hx9j.mjs} +7 -3
- package/dist/chunks/{typography-BzprBnQc.mjs.map → typography-CLu6Hx9j.mjs.map} +1 -1
- package/dist/chunks/{typography-3wSx67DZ.cjs → typography-DaLu9tty.cjs} +7 -3
- package/dist/chunks/{typography-3wSx67DZ.cjs.map → typography-DaLu9tty.cjs.map} +1 -1
- package/dist/color-palette.cjs +1 -1
- package/dist/color-palette.mjs +1 -1
- package/dist/colors.css +121 -186
- package/dist/combobox.cjs +1 -1
- package/dist/combobox.mjs +1 -1
- package/dist/components/data-display/charts/AreaChart.d.ts.map +1 -1
- package/dist/components/data-display/charts/BarChart.d.ts.map +1 -1
- package/dist/components/data-display/charts/NeonLineChart.d.ts.map +1 -1
- package/dist/components/data-display/charts/PieChart.d.ts.map +1 -1
- package/dist/components/data-display/charts/StackedBarChart.d.ts.map +1 -1
- package/dist/components/data-display/charts/ThinBreakdownBar.d.ts.map +1 -1
- package/dist/components/data-display/charts/chartPalette.d.ts +10 -0
- package/dist/components/data-display/charts/chartPalette.d.ts.map +1 -0
- package/dist/components/data-display/charts/index.d.ts +2 -0
- package/dist/components/data-display/charts/index.d.ts.map +1 -1
- package/dist/components/data-display/chip/Chip.d.ts.map +1 -1
- package/dist/components/data-display/color-palette/ColorPalette.d.ts.map +1 -1
- package/dist/components/data-display/data-table/DataTable.d.ts +17 -10
- package/dist/components/data-display/data-table/DataTable.d.ts.map +1 -1
- package/dist/components/data-display/data-table/index.d.ts +1 -1
- package/dist/components/data-display/data-table/index.d.ts.map +1 -1
- package/dist/components/data-display/index.d.ts +1 -0
- package/dist/components/data-display/index.d.ts.map +1 -1
- package/dist/components/data-display/progress-bar/ProgressBar.d.ts +18 -0
- package/dist/components/data-display/progress-bar/ProgressBar.d.ts.map +1 -0
- package/dist/components/data-display/progress-bar/index.d.ts +3 -0
- package/dist/components/data-display/progress-bar/index.d.ts.map +1 -0
- package/dist/components/effects/ascii-text/ASCIIText.d.ts.map +1 -1
- package/dist/components/effects/border-beam/BorderBeam.d.ts.map +1 -1
- package/dist/components/effects/chroma-grid/ChromaGrid.d.ts.map +1 -1
- package/dist/components/effects/splash-cursor/SplashCursor.d.ts.map +1 -1
- package/dist/components/forms/combobox/Combobox.d.ts.map +1 -1
- package/dist/components/forms/date-picker/DatePicker.d.ts.map +1 -1
- package/dist/components/forms/input/Input.d.ts.map +1 -1
- package/dist/components/forms/multi-select-combobox/MultiSelectCombobox.d.ts.map +1 -1
- package/dist/components/forms/otp-input/OTPInput.d.ts.map +1 -1
- package/dist/components/forms/password-strength-meter/PasswordCriteria.d.ts.map +1 -1
- package/dist/components/forms/select/Select.d.ts.map +1 -1
- package/dist/components/forms/select/types.d.ts +2 -0
- package/dist/components/forms/select/types.d.ts.map +1 -1
- package/dist/components/forms/textarea/Textarea.d.ts.map +1 -1
- package/dist/components/icons/ColumnsIcon.d.ts +9 -0
- package/dist/components/icons/ColumnsIcon.d.ts.map +1 -0
- package/dist/components/icons/MailIcon.d.ts +9 -0
- package/dist/components/icons/MailIcon.d.ts.map +1 -0
- package/dist/components/icons/PlayIcon.d.ts +9 -0
- package/dist/components/icons/PlayIcon.d.ts.map +1 -0
- package/dist/components/icons/ZapIcon.d.ts +9 -0
- package/dist/components/icons/ZapIcon.d.ts.map +1 -0
- package/dist/components/icons/index.d.ts +4 -0
- package/dist/components/icons/index.d.ts.map +1 -1
- package/dist/components/navigation/accordion/Accordion.d.ts.map +1 -1
- package/dist/components/overlays/drawer/Drawer.d.ts.map +1 -1
- package/dist/components/overlays/hover-card/HoverCard.d.ts.map +1 -1
- package/dist/components/typography/Typography.d.ts.map +1 -1
- package/dist/data-table.cjs +1 -1
- package/dist/data-table.mjs +1 -1
- package/dist/date-picker.cjs +1 -1
- package/dist/date-picker.mjs +1 -1
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.mjs +1 -1
- package/dist/docs.cjs +50 -4
- package/dist/docs.cjs.map +1 -1
- package/dist/docs.d.ts +59 -9
- package/dist/docs.d.ts.map +1 -1
- package/dist/docs.mjs +50 -4
- package/dist/docs.mjs.map +1 -1
- package/dist/drawer.cjs +1 -1
- package/dist/drawer.mjs +1 -1
- package/dist/fonts.css +5 -0
- package/dist/form.cjs +1 -1
- package/dist/form.mjs +1 -1
- package/dist/foundation.css +3 -3
- package/dist/foundations/theme/ThemeProvider.d.ts +1 -0
- package/dist/foundations/theme/ThemeProvider.d.ts.map +1 -1
- package/dist/gradual-blur.cjs +1 -1
- package/dist/gradual-blur.mjs +1 -1
- package/dist/hover-card.cjs +1 -1
- package/dist/hover-card.mjs +1 -1
- package/dist/icons.cjs +5 -1
- package/dist/icons.mjs +2 -2
- package/dist/index.cjs +50 -41
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +43 -42
- package/dist/index.mjs.map +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.mjs +1 -1
- package/dist/label.cjs +1 -1
- package/dist/label.mjs +1 -1
- package/dist/loading.cjs +1 -1
- package/dist/loading.mjs +1 -1
- package/dist/multi-select-combobox.cjs +1 -1
- package/dist/multi-select-combobox.mjs +1 -1
- package/dist/otp-input.cjs +1 -1
- package/dist/otp-input.mjs +1 -1
- package/dist/password-strength-meter.cjs +1 -1
- package/dist/password-strength-meter.mjs +1 -1
- package/dist/progress-bar.cjs +3 -0
- package/dist/progress-bar.d.ts +2 -0
- package/dist/progress-bar.mjs +2 -0
- package/dist/radio.cjs +1 -1
- package/dist/radio.mjs +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.mjs +1 -1
- package/dist/skeleton.cjs +1 -1
- package/dist/skeleton.mjs +1 -1
- package/dist/spinners.cjs +1 -1
- package/dist/spinners.mjs +1 -1
- package/dist/splash-cursor.cjs +1 -1
- package/dist/splash-cursor.mjs +1 -1
- package/dist/spotlight-card.cjs +1 -1
- package/dist/spotlight-card.mjs +1 -1
- package/dist/stepper.cjs +1 -1
- package/dist/stepper.mjs +1 -1
- package/dist/sun-to-moon-button.cjs +1 -1
- package/dist/sun-to-moon-button.mjs +1 -1
- package/dist/switch.cjs +1 -1
- package/dist/switch.mjs +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.mjs +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/theme.mjs +1 -1
- package/dist/toast.cjs +1 -1
- package/dist/toast.mjs +1 -1
- package/dist/tokens.css +592 -0
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.mjs +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.mjs +1 -1
- package/package.json +19 -5
- package/dist/chunks/accordion-BZ5hyz0_.cjs.map +0 -1
- package/dist/chunks/accordion-C_0oGZkZ.mjs.map +0 -1
- package/dist/chunks/alert-BdBDWqBN.cjs.map +0 -1
- package/dist/chunks/alert-DeVa-NR1.mjs.map +0 -1
- package/dist/chunks/ascii-text-BzQCLfya.mjs.map +0 -1
- package/dist/chunks/ascii-text-D6lVHWph.cjs.map +0 -1
- package/dist/chunks/button-BH1eUjae.cjs.map +0 -1
- package/dist/chunks/button-CmNEMp_O.mjs.map +0 -1
- package/dist/chunks/card-CzstAQYy.mjs.map +0 -1
- package/dist/chunks/card-DZGM4zLx.cjs.map +0 -1
- package/dist/chunks/charts-Bynf6x07.mjs +0 -448
- package/dist/chunks/charts-Bynf6x07.mjs.map +0 -1
- package/dist/chunks/charts-UYl7Ecqv.cjs +0 -485
- package/dist/chunks/charts-UYl7Ecqv.cjs.map +0 -1
- package/dist/chunks/checkbox-B3eIojWs.mjs.map +0 -1
- package/dist/chunks/checkbox-DQmZwRTt.cjs.map +0 -1
- package/dist/chunks/chip-BH6wzwat.cjs.map +0 -1
- package/dist/chunks/chip-cZ7-HmWw.mjs.map +0 -1
- package/dist/chunks/chroma-grid-CC_fFzxO.mjs.map +0 -1
- package/dist/chunks/chroma-grid-DtsqM4LW.cjs.map +0 -1
- package/dist/chunks/color-palette-Cz7vqbil.cjs +0 -1156
- package/dist/chunks/color-palette-Cz7vqbil.cjs.map +0 -1
- package/dist/chunks/color-palette-yadpDCUw.mjs +0 -1150
- package/dist/chunks/color-palette-yadpDCUw.mjs.map +0 -1
- package/dist/chunks/combobox-B9Nzlhu3.mjs +0 -108
- package/dist/chunks/combobox-B9Nzlhu3.mjs.map +0 -1
- package/dist/chunks/combobox-mAvOcg-E.cjs.map +0 -1
- package/dist/chunks/data-table-BRcGhJDf.cjs.map +0 -1
- package/dist/chunks/data-table-Dp0t_I_z.mjs.map +0 -1
- package/dist/chunks/date-picker-BWBkr6LG.mjs.map +0 -1
- package/dist/chunks/date-picker-DooielHi.cjs.map +0 -1
- package/dist/chunks/dialog-C6nxSfIl.mjs.map +0 -1
- package/dist/chunks/dialog-Cbuf8V0g.cjs.map +0 -1
- package/dist/chunks/drawer-DIuvgqTA.mjs +0 -105
- package/dist/chunks/drawer-DIuvgqTA.mjs.map +0 -1
- package/dist/chunks/drawer-Dn0u8Sck.cjs.map +0 -1
- package/dist/chunks/form-DcEuk721.cjs.map +0 -1
- package/dist/chunks/form-TwlDrshv.mjs.map +0 -1
- package/dist/chunks/hover-card-DwTVfjgN.mjs.map +0 -1
- package/dist/chunks/icons-CrM6pFkv.mjs.map +0 -1
- package/dist/chunks/icons-DYkpqWYG.cjs.map +0 -1
- package/dist/chunks/input-ChhwdNGk.mjs.map +0 -1
- package/dist/chunks/input-CoRHoZkB.cjs.map +0 -1
- package/dist/chunks/multi-select-combobox-BPRTZVF6.mjs +0 -108
- package/dist/chunks/multi-select-combobox-BPRTZVF6.mjs.map +0 -1
- package/dist/chunks/multi-select-combobox-DiMwJxj_.cjs +0 -115
- package/dist/chunks/multi-select-combobox-DiMwJxj_.cjs.map +0 -1
- package/dist/chunks/otp-input-CNungc1j.mjs.map +0 -1
- package/dist/chunks/otp-input-DaQDfI9C.cjs.map +0 -1
- package/dist/chunks/password-strength-meter-u4YI00zE.cjs.map +0 -1
- package/dist/chunks/password-strength-meter-xtMqhhFg.mjs.map +0 -1
- package/dist/chunks/radio-C-fPZgSY.mjs.map +0 -1
- package/dist/chunks/radio-mCgvEhOR.cjs.map +0 -1
- package/dist/chunks/select-BB-pOzI2.mjs +0 -116
- package/dist/chunks/select-BB-pOzI2.mjs.map +0 -1
- package/dist/chunks/select-BwelAQc1.cjs +0 -122
- package/dist/chunks/select-BwelAQc1.cjs.map +0 -1
- package/dist/chunks/splash-cursor-9BsoQZl0.mjs.map +0 -1
- package/dist/chunks/splash-cursor-Dpzl_YXx.cjs.map +0 -1
- package/dist/chunks/stepper-BDz6PkjV.cjs.map +0 -1
- package/dist/chunks/stepper-uz8iRzlY.mjs.map +0 -1
- package/dist/chunks/switch-DYLavKgf.mjs.map +0 -1
- package/dist/chunks/switch-y8oWcyLp.cjs.map +0 -1
- package/dist/chunks/textarea-BWkUVpm3.cjs +0 -66
- package/dist/chunks/textarea-BWkUVpm3.cjs.map +0 -1
- package/dist/chunks/textarea-Bxqe70TW.mjs +0 -60
- package/dist/chunks/textarea-Bxqe70TW.mjs.map +0 -1
- package/dist/chunks/theme-Bwu0HKqZ.mjs.map +0 -1
- package/dist/chunks/theme-CBtWIFMT.cjs.map +0 -1
- package/dist/chunks/toast-C8JRhbSo.mjs.map +0 -1
- package/dist/chunks/toast-DWOwpD2F.cjs.map +0 -1
|
@@ -8,19 +8,19 @@ var sizeStyles = {
|
|
|
8
8
|
};
|
|
9
9
|
var variantStyles = {
|
|
10
10
|
outlined: {
|
|
11
|
-
base: "border border-
|
|
12
|
-
focus: "focus:border-
|
|
13
|
-
error: "border-
|
|
11
|
+
base: "border border-input bg-background-secondary rounded-lg shadow-input text-foreground",
|
|
12
|
+
focus: "focus:border-accent focus:ring-2 focus:ring-accent",
|
|
13
|
+
error: "border-destructive"
|
|
14
14
|
},
|
|
15
15
|
filled: {
|
|
16
|
-
base: "border border-transparent bg-
|
|
17
|
-
focus: "focus:border-
|
|
18
|
-
error: "bg-
|
|
16
|
+
base: "border border-transparent bg-accent-subtle rounded-lg text-foreground",
|
|
17
|
+
focus: "focus:border-accent focus:bg-background-secondary focus:ring-2 focus:ring-accent",
|
|
18
|
+
error: "bg-danger-subtle border-danger-border"
|
|
19
19
|
},
|
|
20
20
|
underlined: {
|
|
21
|
-
base: "border-b-2 border-
|
|
22
|
-
focus: "focus:border-
|
|
23
|
-
error: "border-
|
|
21
|
+
base: "border-b-2 border-border-strong bg-transparent rounded-none text-foreground",
|
|
22
|
+
focus: "focus:border-accent",
|
|
23
|
+
error: "border-destructive"
|
|
24
24
|
}
|
|
25
25
|
};
|
|
26
26
|
var OTPInput = forwardRef(({ length = 6, onChange, onComplete, value: controlledValue, defaultValue = "", size = "md", variant = "outlined", disabled = false, error = false, errorMessage, placeholder = "", mask = false, autoFocus = false, type = "number", className = "", inputClassName = "", separator = /* @__PURE__ */ jsx("span", {
|
|
@@ -147,13 +147,12 @@ var OTPInput = forwardRef(({ length = 6, onChange, onComplete, value: controlled
|
|
|
147
147
|
"aria-label": `${ariaLabel} digit ${i + 1}`,
|
|
148
148
|
className: `
|
|
149
149
|
text-center font-semibold outline-none transition-all
|
|
150
|
-
text-
|
|
151
|
-
placeholder:text-neutral-300 dark:placeholder:text-neutral-600
|
|
150
|
+
placeholder:text-muted-foreground
|
|
152
151
|
${sizeStyles[size]}
|
|
153
152
|
${variantStyles[variant].base}
|
|
154
153
|
${!error ? variantStyles[variant].focus : ""}
|
|
155
154
|
${error ? variantStyles[variant].error : ""}
|
|
156
|
-
${disabled ? "opacity-50 cursor-not-allowed bg-
|
|
155
|
+
${disabled ? "opacity-50 cursor-not-allowed bg-muted" : ""}
|
|
157
156
|
${inputClassName}
|
|
158
157
|
`
|
|
159
158
|
}, i));
|
|
@@ -169,7 +168,7 @@ var OTPInput = forwardRef(({ length = 6, onChange, onComplete, value: controlled
|
|
|
169
168
|
"aria-label": ariaLabel,
|
|
170
169
|
children: renderInputs()
|
|
171
170
|
}), error && errorMessage && /* @__PURE__ */ jsx("span", {
|
|
172
|
-
className: "text-sm text-
|
|
171
|
+
className: "text-sm text-destructive",
|
|
173
172
|
children: errorMessage
|
|
174
173
|
})]
|
|
175
174
|
});
|
|
@@ -178,4 +177,4 @@ OTPInput.displayName = "OTPInput";
|
|
|
178
177
|
//#endregion
|
|
179
178
|
export { OTPInput as t };
|
|
180
179
|
|
|
181
|
-
//# sourceMappingURL=otp-input-
|
|
180
|
+
//# sourceMappingURL=otp-input-Bg4nQG6x.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otp-input-Bg4nQG6x.mjs","names":[],"sources":["../../src/components/forms/otp-input/OTPInput.tsx"],"sourcesContent":["import {\n forwardRef,\n useState,\n useRef,\n useCallback,\n useEffect,\n type KeyboardEvent,\n type ClipboardEvent,\n type ChangeEvent,\n} from \"react\";\n\nexport type OTPInputSize = \"sm\" | \"md\" | \"lg\";\nexport type OTPInputVariant = \"outlined\" | \"filled\" | \"underlined\";\n\nexport interface OTPInputProps {\n /** Number of OTP digits */\n length?: number;\n /** Callback when OTP value changes */\n onChange?: (value: string) => void;\n /** Callback when all digits are filled */\n onComplete?: (value: string) => void;\n /** The current value (controlled) */\n value?: string;\n /** Default value (uncontrolled) */\n defaultValue?: string;\n /** Size of the input boxes */\n size?: OTPInputSize;\n /** Visual variant */\n variant?: OTPInputVariant;\n /** Whether the input is disabled */\n disabled?: boolean;\n /** Whether there's an error */\n error?: boolean;\n /** Error message to display */\n errorMessage?: string;\n /** Placeholder character */\n placeholder?: string;\n /** Whether to mask the input (like password) */\n mask?: boolean;\n /** Whether to auto-focus the first input */\n autoFocus?: boolean;\n /** Input type - number only or alphanumeric */\n type?: \"number\" | \"text\";\n /** Custom className for the container */\n className?: string;\n /** Custom className for each input box */\n inputClassName?: string;\n /** Separator to show between groups of digits */\n separator?: React.ReactNode;\n /** Position(s) to show separator (e.g., [3] means after 3rd digit) */\n separatorPositions?: number[];\n /** Accessible label */\n \"aria-label\"?: string;\n}\n\nconst sizeStyles: Record<OTPInputSize, string> = {\n sm: \"w-9 h-10 text-base\",\n md: \"w-12 h-14 text-xl\",\n lg: \"w-14 h-16 text-2xl\",\n};\n\nconst variantStyles: Record<\n OTPInputVariant,\n { base: string; focus: string; error: string }\n> = {\n outlined: {\n base: \"border border-input bg-background-secondary rounded-lg shadow-input text-foreground\",\n focus: \"focus:border-accent focus:ring-2 focus:ring-accent\",\n error: \"border-destructive\",\n },\n filled: {\n base: \"border border-transparent bg-accent-subtle rounded-lg text-foreground\",\n focus:\n \"focus:border-accent focus:bg-background-secondary focus:ring-2 focus:ring-accent\",\n error: \"bg-danger-subtle border-danger-border\",\n },\n underlined: {\n base: \"border-b-2 border-border-strong bg-transparent rounded-none text-foreground\",\n focus: \"focus:border-accent\",\n error: \"border-destructive\",\n },\n};\n\nconst OTPInput = forwardRef<HTMLDivElement, OTPInputProps>(\n (\n {\n length = 6,\n onChange,\n onComplete,\n value: controlledValue,\n defaultValue = \"\",\n size = \"md\",\n variant = \"outlined\",\n disabled = false,\n error = false,\n errorMessage,\n placeholder = \"\",\n mask = false,\n autoFocus = false,\n type = \"number\",\n className = \"\",\n inputClassName = \"\",\n separator = <span className=\"text-neutral-400 text-2xl mx-2\">—</span>,\n separatorPositions = [],\n \"aria-label\": ariaLabel = \"One-time password\",\n },\n ref,\n ) => {\n const [values, setValues] = useState<string[]>(() => {\n const initial = controlledValue ?? defaultValue;\n return initial\n .split(\"\")\n .slice(0, length)\n .concat(Array(length).fill(\"\"))\n .slice(0, length);\n });\n\n const inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n\n // Sync with controlled value\n useEffect(() => {\n if (controlledValue !== undefined) {\n const newValues = controlledValue\n .split(\"\")\n .slice(0, length)\n .concat(Array(length).fill(\"\"))\n .slice(0, length);\n setValues(newValues);\n }\n }, [controlledValue, length]);\n\n // Auto-focus first input\n useEffect(() => {\n if (autoFocus && inputRefs.current[0]) {\n inputRefs.current[0].focus();\n }\n }, [autoFocus]);\n\n const focusInput = useCallback(\n (index: number) => {\n if (index >= 0 && index < length && inputRefs.current[index]) {\n inputRefs.current[index]?.focus();\n inputRefs.current[index]?.select();\n }\n },\n [length],\n );\n\n const handleChange = useCallback(\n (index: number, e: ChangeEvent<HTMLInputElement>) => {\n const inputValue = e.target.value;\n const char = inputValue.slice(-1);\n\n // Validate input based on type\n if (type === \"number\" && char && !/^\\d$/.test(char)) {\n return;\n }\n\n const newValues = [...values];\n newValues[index] = char;\n setValues(newValues);\n\n const otpValue = newValues.join(\"\");\n onChange?.(otpValue);\n\n // Move to next input if value entered\n if (char && index < length - 1) {\n focusInput(index + 1);\n }\n\n // Check if complete\n if (newValues.every((v) => v !== \"\") && newValues.length === length) {\n onComplete?.(otpValue);\n }\n },\n [values, onChange, onComplete, length, type, focusInput],\n );\n\n const handleKeyDown = useCallback(\n (index: number, e: KeyboardEvent<HTMLInputElement>) => {\n switch (e.key) {\n case \"Backspace\":\n e.preventDefault();\n const newValues = [...values];\n if (values[index]) {\n // Clear current value\n newValues[index] = \"\";\n setValues(newValues);\n onChange?.(newValues.join(\"\"));\n } else if (index > 0) {\n // Move to previous and clear\n newValues[index - 1] = \"\";\n setValues(newValues);\n onChange?.(newValues.join(\"\"));\n focusInput(index - 1);\n }\n break;\n case \"ArrowLeft\":\n e.preventDefault();\n focusInput(index - 1);\n break;\n case \"ArrowRight\":\n e.preventDefault();\n focusInput(index + 1);\n break;\n case \"Delete\":\n e.preventDefault();\n const deleteValues = [...values];\n deleteValues[index] = \"\";\n setValues(deleteValues);\n onChange?.(deleteValues.join(\"\"));\n break;\n }\n },\n [values, onChange, focusInput],\n );\n\n const handlePaste = useCallback(\n (e: ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault();\n const pastedData = e.clipboardData.getData(\"text\").slice(0, length);\n\n // Validate pasted content\n if (type === \"number\" && !/^\\d*$/.test(pastedData)) {\n return;\n }\n\n const newValues = pastedData\n .split(\"\")\n .slice(0, length)\n .concat(Array(length).fill(\"\"))\n .slice(0, length);\n\n setValues(newValues);\n const otpValue = newValues.join(\"\");\n onChange?.(otpValue);\n\n // Focus last filled input or last input\n const lastFilledIndex = newValues.findLastIndex((v) => v !== \"\");\n focusInput(Math.min(lastFilledIndex + 1, length - 1));\n\n // Check if complete\n if (newValues.every((v) => v !== \"\") && pastedData.length >= length) {\n onComplete?.(otpValue);\n }\n },\n [length, type, onChange, onComplete, focusInput],\n );\n\n const handleFocus = useCallback((e: React.FocusEvent<HTMLInputElement>) => {\n e.target.select();\n }, []);\n\n const renderInputs = () => {\n const inputs: React.ReactNode[] = [];\n\n for (let i = 0; i < length; i++) {\n // Add separator if needed\n if (separatorPositions.includes(i) && i > 0) {\n inputs.push(\n <div key={`separator-${i}`} className=\"flex items-center\">\n {separator}\n </div>,\n );\n }\n\n inputs.push(\n <input\n key={i}\n ref={(el) => {\n inputRefs.current[i] = el;\n // React 19: Return cleanup function\n return () => {\n inputRefs.current[i] = null;\n };\n }}\n type={mask ? \"password\" : \"text\"}\n inputMode={type === \"number\" ? \"numeric\" : \"text\"}\n pattern={type === \"number\" ? \"\\\\d*\" : undefined}\n maxLength={1}\n value={values[i] || \"\"}\n placeholder={placeholder}\n disabled={disabled}\n onChange={(e) => handleChange(i, e)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onPaste={handlePaste}\n onFocus={handleFocus}\n aria-label={`${ariaLabel} digit ${i + 1}`}\n className={`\n text-center font-semibold outline-none transition-all\n placeholder:text-muted-foreground\n ${sizeStyles[size]}\n ${variantStyles[variant].base}\n ${!error ? variantStyles[variant].focus : \"\"}\n ${error ? variantStyles[variant].error : \"\"}\n ${disabled ? \"opacity-50 cursor-not-allowed bg-muted\" : \"\"}\n ${inputClassName}\n `}\n />,\n );\n }\n\n return inputs;\n };\n\n return (\n <div ref={ref} className={`flex flex-col gap-2 ${className}`}>\n <div\n className=\"flex items-center gap-2\"\n role=\"group\"\n aria-label={ariaLabel}\n >\n {renderInputs()}\n </div>\n {error && errorMessage && (\n <span className=\"text-sm text-destructive\">{errorMessage}</span>\n )}\n </div>\n );\n },\n);\n\nOTPInput.displayName = \"OTPInput\";\n\nexport default OTPInput;\nexport { OTPInput };\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlay-
|
|
1
|
+
{"version":3,"file":"overlay-DWNTyQzK.cjs","names":[],"sources":["../../src/components/shared/overlay.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type { RefObject } from \"react\";\n\nconst focusableSelectors = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"textarea:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n '[tabindex]:not([tabindex=\"-1\"])',\n];\n\nconst scheduleMicrotask = (callback: () => void) => {\n if (typeof queueMicrotask === \"function\") {\n queueMicrotask(callback);\n return;\n }\n Promise.resolve()\n .then(callback)\n .catch(() => {\n callback();\n });\n};\n\nexport const useBodyScrollLock = (active: boolean) => {\n useEffect(() => {\n if (!active || typeof window === \"undefined\") return;\n const { overflow } = document.body.style;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = overflow;\n };\n }, [active]);\n};\n\nexport const useFocusTrap = (\n containerRef: RefObject<HTMLElement | null>,\n active: boolean,\n) => {\n useEffect(() => {\n if (!active || typeof window === \"undefined\") return;\n const container = containerRef.current;\n if (!container) return;\n\n const getFocusable = () =>\n Array.from(\n container.querySelectorAll<HTMLElement>(focusableSelectors.join(\",\")),\n ).filter(\n (el) => !el.hasAttribute(\"disabled\") && !el.getAttribute(\"aria-hidden\"),\n );\n\n const focusable = getFocusable();\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n first?.focus();\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Tab\" || focusable.length === 0) return;\n if (event.shiftKey) {\n if (document.activeElement === first) {\n event.preventDefault();\n (last || first)?.focus();\n }\n } else if (document.activeElement === last) {\n event.preventDefault();\n (first || last)?.focus();\n }\n };\n\n container.addEventListener(\"keydown\", handleKeyDown);\n return () => container.removeEventListener(\"keydown\", handleKeyDown);\n }, [containerRef, active]);\n};\n\nexport const useOverlayEffects = (\n containerRef: RefObject<HTMLElement | null>,\n active: boolean,\n) => {\n useBodyScrollLock(active);\n useFocusTrap(containerRef, active);\n};\n\nexport const useOverlayTransition = (open: boolean, duration = 200) => {\n const [closing, setClosing] = useState(false);\n\n useEffect(() => {\n if (open) {\n return undefined;\n }\n\n scheduleMicrotask(() => setClosing(true));\n const timer = setTimeout(() => setClosing(false), duration);\n\n return () => {\n clearTimeout(timer);\n scheduleMicrotask(() => setClosing(false));\n };\n }, [open, duration]);\n\n const shouldRender = open || closing;\n const transitionState: \"open\" | \"closing\" | \"closed\" = open\n ? \"open\"\n : closing\n ? \"closing\"\n : \"closed\";\n\n return { shouldRender, transitionState };\n};\n"],"mappings":";;;AAGA,IAAM,qBAAqB;CACzB;CACA;CACA;CACA;CACA;CACA;CACD;AAcD,IAAa,qBAAqB,WAAoB;AACpD,EAAA,GAAA,MAAA,iBAAgB;AACd,MAAI,CAAC,UAAU,OAAO,WAAW,YAAa;EAC9C,MAAM,EAAE,aAAa,SAAS,KAAK;AACnC,WAAS,KAAK,MAAM,WAAW;AAC/B,eAAa;AACX,YAAS,KAAK,MAAM,WAAW;;IAEhC,CAAC,OAAO,CAAC;;AAGd,IAAa,gBACX,cACA,WACG;AACH,EAAA,GAAA,MAAA,iBAAgB;AACd,MAAI,CAAC,UAAU,OAAO,WAAW,YAAa;EAC9C,MAAM,YAAY,aAAa;AAC/B,MAAI,CAAC,UAAW;EAEhB,MAAM,qBACJ,MAAM,KACJ,UAAU,iBAA8B,mBAAmB,KAAK,IAAI,CAAC,CACtE,CAAC,QACC,OAAO,CAAC,GAAG,aAAa,WAAW,IAAI,CAAC,GAAG,aAAa,cAAc,CACxE;EAEH,MAAM,YAAY,cAAc;EAChC,MAAM,QAAQ,UAAU;EACxB,MAAM,OAAO,UAAU,UAAU,SAAS;AAC1C,SAAO,OAAO;EAEd,MAAM,iBAAiB,UAAyB;AAC9C,OAAI,MAAM,QAAQ,SAAS,UAAU,WAAW,EAAG;AACnD,OAAI,MAAM;QACJ,SAAS,kBAAkB,OAAO;AACpC,WAAM,gBAAgB;AACtB,MAAC,QAAQ,QAAQ,OAAO;;cAEjB,SAAS,kBAAkB,MAAM;AAC1C,UAAM,gBAAgB;AACtB,KAAC,SAAS,OAAO,OAAO;;;AAI5B,YAAU,iBAAiB,WAAW,cAAc;AACpD,eAAa,UAAU,oBAAoB,WAAW,cAAc;IACnE,CAAC,cAAc,OAAO,CAAC;;AAG5B,IAAa,qBACX,cACA,WACG;AACH,mBAAkB,OAAO;AACzB,cAAa,cAAc,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlay-
|
|
1
|
+
{"version":3,"file":"overlay-TycCIFOu.mjs","names":[],"sources":["../../src/components/shared/overlay.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport type { RefObject } from \"react\";\n\nconst focusableSelectors = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"textarea:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n '[tabindex]:not([tabindex=\"-1\"])',\n];\n\nconst scheduleMicrotask = (callback: () => void) => {\n if (typeof queueMicrotask === \"function\") {\n queueMicrotask(callback);\n return;\n }\n Promise.resolve()\n .then(callback)\n .catch(() => {\n callback();\n });\n};\n\nexport const useBodyScrollLock = (active: boolean) => {\n useEffect(() => {\n if (!active || typeof window === \"undefined\") return;\n const { overflow } = document.body.style;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = overflow;\n };\n }, [active]);\n};\n\nexport const useFocusTrap = (\n containerRef: RefObject<HTMLElement | null>,\n active: boolean,\n) => {\n useEffect(() => {\n if (!active || typeof window === \"undefined\") return;\n const container = containerRef.current;\n if (!container) return;\n\n const getFocusable = () =>\n Array.from(\n container.querySelectorAll<HTMLElement>(focusableSelectors.join(\",\")),\n ).filter(\n (el) => !el.hasAttribute(\"disabled\") && !el.getAttribute(\"aria-hidden\"),\n );\n\n const focusable = getFocusable();\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n first?.focus();\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Tab\" || focusable.length === 0) return;\n if (event.shiftKey) {\n if (document.activeElement === first) {\n event.preventDefault();\n (last || first)?.focus();\n }\n } else if (document.activeElement === last) {\n event.preventDefault();\n (first || last)?.focus();\n }\n };\n\n container.addEventListener(\"keydown\", handleKeyDown);\n return () => container.removeEventListener(\"keydown\", handleKeyDown);\n }, [containerRef, active]);\n};\n\nexport const useOverlayEffects = (\n containerRef: RefObject<HTMLElement | null>,\n active: boolean,\n) => {\n useBodyScrollLock(active);\n useFocusTrap(containerRef, active);\n};\n\nexport const useOverlayTransition = (open: boolean, duration = 200) => {\n const [closing, setClosing] = useState(false);\n\n useEffect(() => {\n if (open) {\n return undefined;\n }\n\n scheduleMicrotask(() => setClosing(true));\n const timer = setTimeout(() => setClosing(false), duration);\n\n return () => {\n clearTimeout(timer);\n scheduleMicrotask(() => setClosing(false));\n };\n }, [open, duration]);\n\n const shouldRender = open || closing;\n const transitionState: \"open\" | \"closing\" | \"closed\" = open\n ? \"open\"\n : closing\n ? \"closing\"\n : \"closed\";\n\n return { shouldRender, transitionState };\n};\n"],"mappings":";;AAGA,IAAM,qBAAqB;CACzB;CACA;CACA;CACA;CACA;CACA;CACD;AAcD,IAAa,qBAAqB,WAAoB;AACpD,iBAAgB;AACd,MAAI,CAAC,UAAU,OAAO,WAAW,YAAa;EAC9C,MAAM,EAAE,aAAa,SAAS,KAAK;AACnC,WAAS,KAAK,MAAM,WAAW;AAC/B,eAAa;AACX,YAAS,KAAK,MAAM,WAAW;;IAEhC,CAAC,OAAO,CAAC;;AAGd,IAAa,gBACX,cACA,WACG;AACH,iBAAgB;AACd,MAAI,CAAC,UAAU,OAAO,WAAW,YAAa;EAC9C,MAAM,YAAY,aAAa;AAC/B,MAAI,CAAC,UAAW;EAEhB,MAAM,qBACJ,MAAM,KACJ,UAAU,iBAA8B,mBAAmB,KAAK,IAAI,CAAC,CACtE,CAAC,QACC,OAAO,CAAC,GAAG,aAAa,WAAW,IAAI,CAAC,GAAG,aAAa,cAAc,CACxE;EAEH,MAAM,YAAY,cAAc;EAChC,MAAM,QAAQ,UAAU;EACxB,MAAM,OAAO,UAAU,UAAU,SAAS;AAC1C,SAAO,OAAO;EAEd,MAAM,iBAAiB,UAAyB;AAC9C,OAAI,MAAM,QAAQ,SAAS,UAAU,WAAW,EAAG;AACnD,OAAI,MAAM;QACJ,SAAS,kBAAkB,OAAO;AACpC,WAAM,gBAAgB;AACtB,MAAC,QAAQ,QAAQ,OAAO;;cAEjB,SAAS,kBAAkB,MAAM;AAC1C,UAAM,gBAAgB;AACtB,KAAC,SAAS,OAAO,OAAO;;;AAI5B,YAAU,iBAAiB,WAAW,cAAc;AACpD,eAAa,UAAU,oBAAoB,WAAW,cAAc;IACnE,CAAC,cAAc,OAAO,CAAC;;AAG5B,IAAa,qBACX,cACA,WACG;AACH,mBAAkB,OAAO;AACzB,cAAa,cAAc,OAAO"}
|
package/dist/chunks/{password-strength-meter-xtMqhhFg.mjs → password-strength-meter-CbNSBuh_.mjs}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { J as CheckIcon, q as CloseIcon } from "./icons-DuumN7z-.mjs";
|
|
2
2
|
import { useMemo } from "react";
|
|
3
3
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
4
|
//#region src/components/forms/password-strength-meter/PasswordCriteria.tsx
|
|
@@ -29,13 +29,13 @@ var PasswordCriteria = ({ password }) => {
|
|
|
29
29
|
].map((item) => /* @__PURE__ */ jsxs("div", {
|
|
30
30
|
className: "flex items-center text-xs",
|
|
31
31
|
children: [item.met ? /* @__PURE__ */ jsx(CheckIcon, {
|
|
32
|
-
className: "mr-2 size-4 text-
|
|
32
|
+
className: "mr-2 size-4 text-success",
|
|
33
33
|
title: "CheckIcon"
|
|
34
34
|
}) : /* @__PURE__ */ jsx(CloseIcon, {
|
|
35
35
|
className: "mr-2 size-4 text-neutral-400 dark:text-neutral-500",
|
|
36
36
|
title: "CloseIcon"
|
|
37
37
|
}), /* @__PURE__ */ jsx("span", {
|
|
38
|
-
className: item.met ? "text-
|
|
38
|
+
className: item.met ? "text-success" : "text-neutral-500 dark:text-neutral-400",
|
|
39
39
|
children: item.label
|
|
40
40
|
})]
|
|
41
41
|
}, item.label))
|
|
@@ -56,12 +56,12 @@ function PasswordStrengthMeter({ password }) {
|
|
|
56
56
|
const strength = useMemo(() => getStrength(password), [password]);
|
|
57
57
|
const getColor = (strength) => {
|
|
58
58
|
return [
|
|
59
|
-
"bg-
|
|
60
|
-
"bg-
|
|
61
|
-
"bg-
|
|
62
|
-
"bg-
|
|
63
|
-
"bg-
|
|
64
|
-
][strength] || "bg-
|
|
59
|
+
"bg-danger",
|
|
60
|
+
"bg-danger",
|
|
61
|
+
"bg-warning",
|
|
62
|
+
"bg-warning",
|
|
63
|
+
"bg-success"
|
|
64
|
+
][strength] || "bg-neutral-600";
|
|
65
65
|
};
|
|
66
66
|
const getStrengthText = (strength) => {
|
|
67
67
|
return [
|
|
@@ -96,4 +96,4 @@ function PasswordStrengthMeter({ password }) {
|
|
|
96
96
|
//#endregion
|
|
97
97
|
export { PasswordStrengthMeter as t };
|
|
98
98
|
|
|
99
|
-
//# sourceMappingURL=password-strength-meter-
|
|
99
|
+
//# sourceMappingURL=password-strength-meter-CbNSBuh_.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-strength-meter-CbNSBuh_.mjs","names":[],"sources":["../../src/components/forms/password-strength-meter/PasswordCriteria.tsx","../../src/components/forms/password-strength-meter/PasswordStrengthMeter.tsx"],"sourcesContent":["import { CheckIcon, CloseIcon } from \"../../icons\";\n\ninterface PasswordCriteriaProps {\n password: string;\n}\n\nexport const PasswordCriteria = ({ password }: PasswordCriteriaProps) => {\n const criteria = [\n { label: \"At least 6 characters\", met: password.length >= 6 },\n { label: \"Contains uppercase letter\", met: /[A-Z]/.test(password) },\n { label: \"Contains lowercase letter\", met: /[a-z]/.test(password) },\n { label: \"Contains a number\", met: /\\d/.test(password) },\n { label: \"Contains special character\", met: /[^A-Za-z0-9]/.test(password) },\n ];\n\n return (\n <div className=\"mt-2 space-y-1\">\n {criteria.map((item) => (\n <div key={item.label} className=\"flex items-center text-xs\">\n {item.met ? (\n <CheckIcon className=\"mr-2 size-4 text-success\" title=\"CheckIcon\" />\n ) : (\n <CloseIcon\n className=\"mr-2 size-4 text-neutral-400 dark:text-neutral-500\"\n title=\"CloseIcon\"\n />\n )}\n <span\n className={\n item.met\n ? \"text-success\"\n : \"text-neutral-500 dark:text-neutral-400\"\n }\n >\n {item.label}\n </span>\n </div>\n ))}\n </div>\n );\n};\n","import { useMemo } from \"react\";\n\nimport { PasswordCriteria } from \"./PasswordCriteria\";\n\nexport interface PasswordStrengthMeterProps {\n password: string;\n}\n\nexport function PasswordStrengthMeter({\n password,\n}: PasswordStrengthMeterProps) {\n // Calculate password strength using an object mapping approach\n const getStrength = (pass: string): number => {\n const criteria = {\n minLength: pass.length >= 6,\n hasMixedCase: /[a-z]/.test(pass) && /[A-Z]/.test(pass),\n hasNumber: /\\d/.test(pass),\n hasSpecialChar: /[^a-zA-Z\\d]/.test(pass),\n };\n\n // Count the number of criteria that pass\n return Object.values(criteria).filter(Boolean).length;\n };\n\n // Memoize the strength calculation to avoid unnecessary recalculations\n const strength = useMemo(() => getStrength(password), [password]);\n\n // Determine strength color based on the calculated strength\n const getColor = (strength: number): string => {\n const colors = [\n \"bg-danger\",\n \"bg-danger\",\n \"bg-warning\",\n \"bg-warning\",\n \"bg-success\",\n ];\n return colors[strength] || \"bg-neutral-600\";\n };\n\n // Get a text label corresponding to the password strength\n const getStrengthText = (strength: number): string => {\n const strengthLevels = [\"Very Weak\", \"Weak\", \"Fair\", \"Good\", \"Strong\"];\n return strengthLevels[strength] || \"Very Weak\";\n };\n\n return (\n <div className=\"mt-2\">\n {/* Strength Label */}\n <div className=\"mb-1 flex items-center justify-between\">\n <span className=\"text-xs text-neutral-500 dark:text-neutral-400\">\n Password strength\n </span>\n <span className=\"text-xs text-neutral-500 dark:text-neutral-400\">\n {getStrengthText(strength)}\n </span>\n </div>\n\n {/* Strength Meter */}\n <div className=\"flex space-x-1\">\n {Array.from({ length: 4 }, (_, index) => (\n <div\n key={index}\n className={`h-1 w-1/4 rounded-full transition-colors duration-300 ${\n index < strength\n ? getColor(strength)\n : \"bg-neutral-300 dark:bg-neutral-600\"\n }`}\n />\n ))}\n </div>\n\n <PasswordCriteria password={password} />\n </div>\n );\n}\n"],"mappings":";;;;AAMA,IAAa,oBAAoB,EAAE,eAAsC;AASvE,QACE,oBAAC,OAAD;EAAK,WAAU;YATA;GACf;IAAE,OAAO;IAAyB,KAAK,SAAS,UAAU;IAAG;GAC7D;IAAE,OAAO;IAA6B,KAAK,QAAQ,KAAK,SAAS;IAAE;GACnE;IAAE,OAAO;IAA6B,KAAK,QAAQ,KAAK,SAAS;IAAE;GACnE;IAAE,OAAO;IAAqB,KAAK,KAAK,KAAK,SAAS;IAAE;GACxD;IAAE,OAAO;IAA8B,KAAK,eAAe,KAAK,SAAS;IAAE;GAC5E,CAIa,KAAK,SACb,qBAAC,OAAD;GAAsB,WAAU;aAAhC,CACG,KAAK,MACJ,oBAAC,WAAD;IAAW,WAAU;IAA2B,OAAM;IAAc,CAAA,GAEpE,oBAAC,WAAD;IACE,WAAU;IACV,OAAM;IACN,CAAA,EAEJ,oBAAC,QAAD;IACE,WACE,KAAK,MACD,iBACA;cAGL,KAAK;IACD,CAAA,CACH;KAlBI,KAAK,MAkBT,CACN;EACE,CAAA;;;;AC9BV,SAAgB,sBAAsB,EACpC,YAC6B;CAE7B,MAAM,eAAe,SAAyB;EAC5C,MAAM,WAAW;GACf,WAAW,KAAK,UAAU;GAC1B,cAAc,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,KAAK;GACtD,WAAW,KAAK,KAAK,KAAK;GAC1B,gBAAgB,cAAc,KAAK,KAAK;GACzC;AAGD,SAAO,OAAO,OAAO,SAAS,CAAC,OAAO,QAAQ,CAAC;;CAIjD,MAAM,WAAW,cAAc,YAAY,SAAS,EAAE,CAAC,SAAS,CAAC;CAGjE,MAAM,YAAY,aAA6B;AAQ7C,SAPe;GACb;GACA;GACA;GACA;GACA;GACD,CACa,aAAa;;CAI7B,MAAM,mBAAmB,aAA6B;AAEpD,SADuB;GAAC;GAAa;GAAQ;GAAQ;GAAQ;GAAS,CAChD,aAAa;;AAGrC,QACE,qBAAC,OAAD;EAAK,WAAU;YAAf;GAEE,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,QAAD;KAAM,WAAU;eAAiD;KAE1D,CAAA,EACP,oBAAC,QAAD;KAAM,WAAU;eACb,gBAAgB,SAAS;KACrB,CAAA,CACH;;GAGN,oBAAC,OAAD;IAAK,WAAU;cACZ,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,GAAG,UAC7B,oBAAC,OAAD,EAEE,WAAW,yDACT,QAAQ,WACJ,SAAS,SAAS,GAClB,wCAEN,EANK,MAML,CACF;IACE,CAAA;GAEN,oBAAC,kBAAD,EAA4B,UAAY,CAAA;GACpC"}
|
package/dist/chunks/{password-strength-meter-u4YI00zE.cjs → password-strength-meter-DxMV6GAs.cjs}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
require("./chunk-B_GkZjkl.cjs");
|
|
2
|
-
const require_icons = require("./icons-
|
|
2
|
+
const require_icons = require("./icons-BxIzP2jd.cjs");
|
|
3
3
|
let react = require("react");
|
|
4
4
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
5
5
|
//#region src/components/forms/password-strength-meter/PasswordCriteria.tsx
|
|
@@ -30,13 +30,13 @@ var PasswordCriteria = ({ password }) => {
|
|
|
30
30
|
].map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
31
31
|
className: "flex items-center text-xs",
|
|
32
32
|
children: [item.met ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons.CheckIcon, {
|
|
33
|
-
className: "mr-2 size-4 text-
|
|
33
|
+
className: "mr-2 size-4 text-success",
|
|
34
34
|
title: "CheckIcon"
|
|
35
35
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons.CloseIcon, {
|
|
36
36
|
className: "mr-2 size-4 text-neutral-400 dark:text-neutral-500",
|
|
37
37
|
title: "CloseIcon"
|
|
38
38
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
39
|
-
className: item.met ? "text-
|
|
39
|
+
className: item.met ? "text-success" : "text-neutral-500 dark:text-neutral-400",
|
|
40
40
|
children: item.label
|
|
41
41
|
})]
|
|
42
42
|
}, item.label))
|
|
@@ -57,12 +57,12 @@ function PasswordStrengthMeter({ password }) {
|
|
|
57
57
|
const strength = (0, react.useMemo)(() => getStrength(password), [password]);
|
|
58
58
|
const getColor = (strength) => {
|
|
59
59
|
return [
|
|
60
|
-
"bg-
|
|
61
|
-
"bg-
|
|
62
|
-
"bg-
|
|
63
|
-
"bg-
|
|
64
|
-
"bg-
|
|
65
|
-
][strength] || "bg-
|
|
60
|
+
"bg-danger",
|
|
61
|
+
"bg-danger",
|
|
62
|
+
"bg-warning",
|
|
63
|
+
"bg-warning",
|
|
64
|
+
"bg-success"
|
|
65
|
+
][strength] || "bg-neutral-600";
|
|
66
66
|
};
|
|
67
67
|
const getStrengthText = (strength) => {
|
|
68
68
|
return [
|
|
@@ -102,4 +102,4 @@ Object.defineProperty(exports, "PasswordStrengthMeter", {
|
|
|
102
102
|
}
|
|
103
103
|
});
|
|
104
104
|
|
|
105
|
-
//# sourceMappingURL=password-strength-meter-
|
|
105
|
+
//# sourceMappingURL=password-strength-meter-DxMV6GAs.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-strength-meter-DxMV6GAs.cjs","names":[],"sources":["../../src/components/forms/password-strength-meter/PasswordCriteria.tsx","../../src/components/forms/password-strength-meter/PasswordStrengthMeter.tsx"],"sourcesContent":["import { CheckIcon, CloseIcon } from \"../../icons\";\n\ninterface PasswordCriteriaProps {\n password: string;\n}\n\nexport const PasswordCriteria = ({ password }: PasswordCriteriaProps) => {\n const criteria = [\n { label: \"At least 6 characters\", met: password.length >= 6 },\n { label: \"Contains uppercase letter\", met: /[A-Z]/.test(password) },\n { label: \"Contains lowercase letter\", met: /[a-z]/.test(password) },\n { label: \"Contains a number\", met: /\\d/.test(password) },\n { label: \"Contains special character\", met: /[^A-Za-z0-9]/.test(password) },\n ];\n\n return (\n <div className=\"mt-2 space-y-1\">\n {criteria.map((item) => (\n <div key={item.label} className=\"flex items-center text-xs\">\n {item.met ? (\n <CheckIcon className=\"mr-2 size-4 text-success\" title=\"CheckIcon\" />\n ) : (\n <CloseIcon\n className=\"mr-2 size-4 text-neutral-400 dark:text-neutral-500\"\n title=\"CloseIcon\"\n />\n )}\n <span\n className={\n item.met\n ? \"text-success\"\n : \"text-neutral-500 dark:text-neutral-400\"\n }\n >\n {item.label}\n </span>\n </div>\n ))}\n </div>\n );\n};\n","import { useMemo } from \"react\";\n\nimport { PasswordCriteria } from \"./PasswordCriteria\";\n\nexport interface PasswordStrengthMeterProps {\n password: string;\n}\n\nexport function PasswordStrengthMeter({\n password,\n}: PasswordStrengthMeterProps) {\n // Calculate password strength using an object mapping approach\n const getStrength = (pass: string): number => {\n const criteria = {\n minLength: pass.length >= 6,\n hasMixedCase: /[a-z]/.test(pass) && /[A-Z]/.test(pass),\n hasNumber: /\\d/.test(pass),\n hasSpecialChar: /[^a-zA-Z\\d]/.test(pass),\n };\n\n // Count the number of criteria that pass\n return Object.values(criteria).filter(Boolean).length;\n };\n\n // Memoize the strength calculation to avoid unnecessary recalculations\n const strength = useMemo(() => getStrength(password), [password]);\n\n // Determine strength color based on the calculated strength\n const getColor = (strength: number): string => {\n const colors = [\n \"bg-danger\",\n \"bg-danger\",\n \"bg-warning\",\n \"bg-warning\",\n \"bg-success\",\n ];\n return colors[strength] || \"bg-neutral-600\";\n };\n\n // Get a text label corresponding to the password strength\n const getStrengthText = (strength: number): string => {\n const strengthLevels = [\"Very Weak\", \"Weak\", \"Fair\", \"Good\", \"Strong\"];\n return strengthLevels[strength] || \"Very Weak\";\n };\n\n return (\n <div className=\"mt-2\">\n {/* Strength Label */}\n <div className=\"mb-1 flex items-center justify-between\">\n <span className=\"text-xs text-neutral-500 dark:text-neutral-400\">\n Password strength\n </span>\n <span className=\"text-xs text-neutral-500 dark:text-neutral-400\">\n {getStrengthText(strength)}\n </span>\n </div>\n\n {/* Strength Meter */}\n <div className=\"flex space-x-1\">\n {Array.from({ length: 4 }, (_, index) => (\n <div\n key={index}\n className={`h-1 w-1/4 rounded-full transition-colors duration-300 ${\n index < strength\n ? getColor(strength)\n : \"bg-neutral-300 dark:bg-neutral-600\"\n }`}\n />\n ))}\n </div>\n\n <PasswordCriteria password={password} />\n </div>\n );\n}\n"],"mappings":";;;;;AAMA,IAAa,oBAAoB,EAAE,eAAsC;AASvE,QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,WAAU;YATA;GACf;IAAE,OAAO;IAAyB,KAAK,SAAS,UAAU;IAAG;GAC7D;IAAE,OAAO;IAA6B,KAAK,QAAQ,KAAK,SAAS;IAAE;GACnE;IAAE,OAAO;IAA6B,KAAK,QAAQ,KAAK,SAAS;IAAE;GACnE;IAAE,OAAO;IAAqB,KAAK,KAAK,KAAK,SAAS;IAAE;GACxD;IAAE,OAAO;IAA8B,KAAK,eAAe,KAAK,SAAS;IAAE;GAC5E,CAIa,KAAK,SACb,iBAAA,GAAA,kBAAA,MAAC,OAAD;GAAsB,WAAU;aAAhC,CACG,KAAK,MACJ,iBAAA,GAAA,kBAAA,KAAC,cAAA,WAAD;IAAW,WAAU;IAA2B,OAAM;IAAc,CAAA,GAEpE,iBAAA,GAAA,kBAAA,KAAC,cAAA,WAAD;IACE,WAAU;IACV,OAAM;IACN,CAAA,EAEJ,iBAAA,GAAA,kBAAA,KAAC,QAAD;IACE,WACE,KAAK,MACD,iBACA;cAGL,KAAK;IACD,CAAA,CACH;KAlBI,KAAK,MAkBT,CACN;EACE,CAAA;;;;AC9BV,SAAgB,sBAAsB,EACpC,YAC6B;CAE7B,MAAM,eAAe,SAAyB;EAC5C,MAAM,WAAW;GACf,WAAW,KAAK,UAAU;GAC1B,cAAc,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,KAAK;GACtD,WAAW,KAAK,KAAK,KAAK;GAC1B,gBAAgB,cAAc,KAAK,KAAK;GACzC;AAGD,SAAO,OAAO,OAAO,SAAS,CAAC,OAAO,QAAQ,CAAC;;CAIjD,MAAM,YAAA,GAAA,MAAA,eAAyB,YAAY,SAAS,EAAE,CAAC,SAAS,CAAC;CAGjE,MAAM,YAAY,aAA6B;AAQ7C,SAPe;GACb;GACA;GACA;GACA;GACA;GACD,CACa,aAAa;;CAI7B,MAAM,mBAAmB,aAA6B;AAEpD,SADuB;GAAC;GAAa;GAAQ;GAAQ;GAAQ;GAAS,CAChD,aAAa;;AAGrC,QACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,WAAU;YAAf;GAEE,iBAAA,GAAA,kBAAA,MAAC,OAAD;IAAK,WAAU;cAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;KAAM,WAAU;eAAiD;KAE1D,CAAA,EACP,iBAAA,GAAA,kBAAA,KAAC,QAAD;KAAM,WAAU;eACb,gBAAgB,SAAS;KACrB,CAAA,CACH;;GAGN,iBAAA,GAAA,kBAAA,KAAC,OAAD;IAAK,WAAU;cACZ,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,GAAG,UAC7B,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAEE,WAAW,yDACT,QAAQ,WACJ,SAAS,SAAS,GAClB,wCAEN,EANK,MAML,CACF;IACE,CAAA;GAEN,iBAAA,GAAA,kBAAA,KAAC,kBAAD,EAA4B,UAAY,CAAA;GACpC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
const require_chunk = require("./chunk-B_GkZjkl.cjs");
|
|
2
|
+
let react = require("react");
|
|
3
|
+
react = require_chunk.__toESM(react);
|
|
4
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
5
|
+
//#region src/components/data-display/progress-bar/ProgressBar.tsx
|
|
6
|
+
var sizeStyles = {
|
|
7
|
+
sm: {
|
|
8
|
+
track: "h-1.5",
|
|
9
|
+
label: "text-xs",
|
|
10
|
+
percentage: "text-xs"
|
|
11
|
+
},
|
|
12
|
+
md: {
|
|
13
|
+
track: "h-2.5",
|
|
14
|
+
label: "text-sm",
|
|
15
|
+
percentage: "text-sm"
|
|
16
|
+
},
|
|
17
|
+
lg: {
|
|
18
|
+
track: "h-3.5",
|
|
19
|
+
label: "text-base",
|
|
20
|
+
percentage: "text-base"
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
var toneStyles = {
|
|
24
|
+
default: {
|
|
25
|
+
color: "var(--ds-chart-1)",
|
|
26
|
+
trackBackground: "linear-gradient(90deg, rgba(15, 23, 42, 0.08) 0%, rgba(30, 41, 59, 0.14) 100%)"
|
|
27
|
+
},
|
|
28
|
+
success: {
|
|
29
|
+
color: "var(--ds-chart-3)",
|
|
30
|
+
trackBackground: "linear-gradient(90deg, rgba(20, 83, 45, 0.12) 0%, rgba(34, 197, 94, 0.18) 100%)"
|
|
31
|
+
},
|
|
32
|
+
warning: {
|
|
33
|
+
color: "var(--ds-chart-4)",
|
|
34
|
+
trackBackground: "linear-gradient(90deg, rgba(120, 53, 15, 0.12) 0%, rgba(245, 158, 11, 0.18) 100%)"
|
|
35
|
+
},
|
|
36
|
+
danger: {
|
|
37
|
+
color: "var(--ds-chart-5)",
|
|
38
|
+
trackBackground: "linear-gradient(90deg, rgba(127, 29, 29, 0.12) 0%, rgba(239, 68, 68, 0.18) 100%)"
|
|
39
|
+
},
|
|
40
|
+
info: {
|
|
41
|
+
color: "var(--ds-chart-2)",
|
|
42
|
+
trackBackground: "linear-gradient(90deg, rgba(30, 64, 175, 0.12) 0%, rgba(59, 130, 246, 0.18) 100%)"
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
function clampValue(value, max) {
|
|
46
|
+
if (!Number.isFinite(value)) return 0;
|
|
47
|
+
return Math.min(Math.max(value, 0), max);
|
|
48
|
+
}
|
|
49
|
+
function ProgressBar({ value, max = 100, label, percentageLabel, showPercentage = true, size = "md", tone = "default", className = "", trackClassName = "", fillClassName = "", ariaLabel = "Progress" }) {
|
|
50
|
+
const safeMax = Number.isFinite(max) && max > 0 ? max : 100;
|
|
51
|
+
const clampedValue = clampValue(value, safeMax);
|
|
52
|
+
const percentage = clampedValue / safeMax * 100;
|
|
53
|
+
const roundedPercentage = Math.round(percentage);
|
|
54
|
+
const toneStyle = toneStyles[tone];
|
|
55
|
+
const resolvedPercentageLabel = percentageLabel ?? `${roundedPercentage}%`;
|
|
56
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
57
|
+
className: `w-full space-y-3 ${className}`,
|
|
58
|
+
children: [(label || showPercentage) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
59
|
+
className: "flex items-center justify-between gap-4",
|
|
60
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
61
|
+
className: `font-mono font-semibold tracking-[0.08em] text-foreground ${sizeStyles[size].label}`,
|
|
62
|
+
children: label
|
|
63
|
+
}), showPercentage && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
64
|
+
className: `font-mono font-medium tracking-[0.08em] text-muted-foreground ${sizeStyles[size].percentage}`,
|
|
65
|
+
children: resolvedPercentageLabel
|
|
66
|
+
})]
|
|
67
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
68
|
+
role: "progressbar",
|
|
69
|
+
"aria-label": ariaLabel,
|
|
70
|
+
"aria-valuemin": 0,
|
|
71
|
+
"aria-valuemax": safeMax,
|
|
72
|
+
"aria-valuenow": Math.round(clampedValue),
|
|
73
|
+
"aria-valuetext": `${roundedPercentage}%`,
|
|
74
|
+
className: `relative overflow-hidden rounded-full border border-white/12 bg-background-tertiary/80 shadow-[inset_0_1px_1px_rgba(255,255,255,0.2)] dark:border-white/6 ${sizeStyles[size].track} ${trackClassName}`,
|
|
75
|
+
style: { background: toneStyle.trackBackground },
|
|
76
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
77
|
+
className: `h-full rounded-full transition-[width,filter,box-shadow] duration-500 ease-out ${fillClassName}`,
|
|
78
|
+
style: {
|
|
79
|
+
width: `${percentage}%`,
|
|
80
|
+
background: `linear-gradient(90deg, color-mix(in srgb, ${toneStyle.color} 68%, white 32%) 0%, ${toneStyle.color} 100%)`,
|
|
81
|
+
boxShadow: `inset 0 1px 0 rgba(255,255,255,0.4), 0 0 14px color-mix(in srgb, ${toneStyle.color} 32%, transparent)`,
|
|
82
|
+
filter: percentage > 0 ? "saturate(1.05) brightness(1.02)" : "none"
|
|
83
|
+
}
|
|
84
|
+
})
|
|
85
|
+
})]
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
//#endregion
|
|
89
|
+
Object.defineProperty(exports, "ProgressBar", {
|
|
90
|
+
enumerable: true,
|
|
91
|
+
get: function() {
|
|
92
|
+
return ProgressBar;
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
//# sourceMappingURL=progress-bar-C1OvQ-NI.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-bar-C1OvQ-NI.cjs","names":[],"sources":["../../src/components/data-display/progress-bar/ProgressBar.tsx"],"sourcesContent":["import React from \"react\";\n\nexport type ProgressBarSize = \"sm\" | \"md\" | \"lg\";\nexport type ProgressBarTone =\n | \"default\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\";\n\nexport interface ProgressBarProps {\n value: number;\n max?: number;\n label?: React.ReactNode;\n percentageLabel?: React.ReactNode;\n showPercentage?: boolean;\n size?: ProgressBarSize;\n tone?: ProgressBarTone;\n className?: string;\n trackClassName?: string;\n fillClassName?: string;\n ariaLabel?: string;\n}\n\nconst sizeStyles: Record<\n ProgressBarSize,\n {\n track: string;\n label: string;\n percentage: string;\n }\n> = {\n sm: {\n track: \"h-1.5\",\n label: \"text-xs\",\n percentage: \"text-xs\",\n },\n md: {\n track: \"h-2.5\",\n label: \"text-sm\",\n percentage: \"text-sm\",\n },\n lg: {\n track: \"h-3.5\",\n label: \"text-base\",\n percentage: \"text-base\",\n },\n};\n\nconst toneStyles: Record<\n ProgressBarTone,\n {\n color: string;\n trackBackground: string;\n }\n> = {\n default: {\n color: \"var(--ds-chart-1)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(15, 23, 42, 0.08) 0%, rgba(30, 41, 59, 0.14) 100%)\",\n },\n success: {\n color: \"var(--ds-chart-3)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(20, 83, 45, 0.12) 0%, rgba(34, 197, 94, 0.18) 100%)\",\n },\n warning: {\n color: \"var(--ds-chart-4)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(120, 53, 15, 0.12) 0%, rgba(245, 158, 11, 0.18) 100%)\",\n },\n danger: {\n color: \"var(--ds-chart-5)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(127, 29, 29, 0.12) 0%, rgba(239, 68, 68, 0.18) 100%)\",\n },\n info: {\n color: \"var(--ds-chart-2)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(30, 64, 175, 0.12) 0%, rgba(59, 130, 246, 0.18) 100%)\",\n },\n};\n\nfunction clampValue(value: number, max: number): number {\n if (!Number.isFinite(value)) {\n return 0;\n }\n\n return Math.min(Math.max(value, 0), max);\n}\n\nexport default function ProgressBar({\n value,\n max = 100,\n label,\n percentageLabel,\n showPercentage = true,\n size = \"md\",\n tone = \"default\",\n className = \"\",\n trackClassName = \"\",\n fillClassName = \"\",\n ariaLabel = \"Progress\",\n}: ProgressBarProps) {\n const safeMax = Number.isFinite(max) && max > 0 ? max : 100;\n const clampedValue = clampValue(value, safeMax);\n const percentage = (clampedValue / safeMax) * 100;\n const roundedPercentage = Math.round(percentage);\n const toneStyle = toneStyles[tone];\n const resolvedPercentageLabel = percentageLabel ?? `${roundedPercentage}%`;\n\n return (\n <div className={`w-full space-y-3 ${className}`}>\n {(label || showPercentage) && (\n <div className=\"flex items-center justify-between gap-4\">\n <div\n className={`font-mono font-semibold tracking-[0.08em] text-foreground ${sizeStyles[size].label}`}\n >\n {label}\n </div>\n {showPercentage && (\n <div\n className={`font-mono font-medium tracking-[0.08em] text-muted-foreground ${sizeStyles[size].percentage}`}\n >\n {resolvedPercentageLabel}\n </div>\n )}\n </div>\n )}\n\n <div\n role=\"progressbar\"\n aria-label={ariaLabel}\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={Math.round(clampedValue)}\n aria-valuetext={`${roundedPercentage}%`}\n className={`relative overflow-hidden rounded-full border border-white/12 bg-background-tertiary/80 shadow-[inset_0_1px_1px_rgba(255,255,255,0.2)] dark:border-white/6 ${sizeStyles[size].track} ${trackClassName}`}\n style={{ background: toneStyle.trackBackground }}\n >\n <div\n className={`h-full rounded-full transition-[width,filter,box-shadow] duration-500 ease-out ${fillClassName}`}\n style={{\n width: `${percentage}%`,\n background: `linear-gradient(90deg, color-mix(in srgb, ${toneStyle.color} 68%, white 32%) 0%, ${toneStyle.color} 100%)`,\n boxShadow: `inset 0 1px 0 rgba(255,255,255,0.4), 0 0 14px color-mix(in srgb, ${toneStyle.color} 32%, transparent)`,\n filter: percentage > 0 ? \"saturate(1.05) brightness(1.02)\" : \"none\",\n }}\n />\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;AAwBA,IAAM,aAOF;CACF,IAAI;EACF,OAAO;EACP,OAAO;EACP,YAAY;EACb;CACD,IAAI;EACF,OAAO;EACP,OAAO;EACP,YAAY;EACb;CACD,IAAI;EACF,OAAO;EACP,OAAO;EACP,YAAY;EACb;CACF;AAED,IAAM,aAMF;CACF,SAAS;EACP,OAAO;EACP,iBACE;EACH;CACD,SAAS;EACP,OAAO;EACP,iBACE;EACH;CACD,SAAS;EACP,OAAO;EACP,iBACE;EACH;CACD,QAAQ;EACN,OAAO;EACP,iBACE;EACH;CACD,MAAM;EACJ,OAAO;EACP,iBACE;EACH;CACF;AAED,SAAS,WAAW,OAAe,KAAqB;AACtD,KAAI,CAAC,OAAO,SAAS,MAAM,CACzB,QAAO;AAGT,QAAO,KAAK,IAAI,KAAK,IAAI,OAAO,EAAE,EAAE,IAAI;;AAG1C,SAAwB,YAAY,EAClC,OACA,MAAM,KACN,OACA,iBACA,iBAAiB,MACjB,OAAO,MACP,OAAO,WACP,YAAY,IACZ,iBAAiB,IACjB,gBAAgB,IAChB,YAAY,cACO;CACnB,MAAM,UAAU,OAAO,SAAS,IAAI,IAAI,MAAM,IAAI,MAAM;CACxD,MAAM,eAAe,WAAW,OAAO,QAAQ;CAC/C,MAAM,aAAc,eAAe,UAAW;CAC9C,MAAM,oBAAoB,KAAK,MAAM,WAAW;CAChD,MAAM,YAAY,WAAW;CAC7B,MAAM,0BAA0B,mBAAmB,GAAG,kBAAkB;AAExE,QACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,WAAW,oBAAoB;YAApC,EACI,SAAS,mBACT,iBAAA,GAAA,kBAAA,MAAC,OAAD;GAAK,WAAU;aAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;IACE,WAAW,6DAA6D,WAAW,MAAM;cAExF;IACG,CAAA,EACL,kBACC,iBAAA,GAAA,kBAAA,KAAC,OAAD;IACE,WAAW,iEAAiE,WAAW,MAAM;cAE5F;IACG,CAAA,CAEJ;MAGR,iBAAA,GAAA,kBAAA,KAAC,OAAD;GACE,MAAK;GACL,cAAY;GACZ,iBAAe;GACf,iBAAe;GACf,iBAAe,KAAK,MAAM,aAAa;GACvC,kBAAgB,GAAG,kBAAkB;GACrC,WAAW,6JAA6J,WAAW,MAAM,MAAM,GAAG;GAClM,OAAO,EAAE,YAAY,UAAU,iBAAiB;aAEhD,iBAAA,GAAA,kBAAA,KAAC,OAAD;IACE,WAAW,kFAAkF;IAC7F,OAAO;KACL,OAAO,GAAG,WAAW;KACrB,YAAY,6CAA6C,UAAU,MAAM,uBAAuB,UAAU,MAAM;KAChH,WAAW,oEAAoE,UAAU,MAAM;KAC/F,QAAQ,aAAa,IAAI,oCAAoC;KAC9D;IACD,CAAA;GACE,CAAA,CACF"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import "react";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
//#region src/components/data-display/progress-bar/ProgressBar.tsx
|
|
4
|
+
var sizeStyles = {
|
|
5
|
+
sm: {
|
|
6
|
+
track: "h-1.5",
|
|
7
|
+
label: "text-xs",
|
|
8
|
+
percentage: "text-xs"
|
|
9
|
+
},
|
|
10
|
+
md: {
|
|
11
|
+
track: "h-2.5",
|
|
12
|
+
label: "text-sm",
|
|
13
|
+
percentage: "text-sm"
|
|
14
|
+
},
|
|
15
|
+
lg: {
|
|
16
|
+
track: "h-3.5",
|
|
17
|
+
label: "text-base",
|
|
18
|
+
percentage: "text-base"
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
var toneStyles = {
|
|
22
|
+
default: {
|
|
23
|
+
color: "var(--ds-chart-1)",
|
|
24
|
+
trackBackground: "linear-gradient(90deg, rgba(15, 23, 42, 0.08) 0%, rgba(30, 41, 59, 0.14) 100%)"
|
|
25
|
+
},
|
|
26
|
+
success: {
|
|
27
|
+
color: "var(--ds-chart-3)",
|
|
28
|
+
trackBackground: "linear-gradient(90deg, rgba(20, 83, 45, 0.12) 0%, rgba(34, 197, 94, 0.18) 100%)"
|
|
29
|
+
},
|
|
30
|
+
warning: {
|
|
31
|
+
color: "var(--ds-chart-4)",
|
|
32
|
+
trackBackground: "linear-gradient(90deg, rgba(120, 53, 15, 0.12) 0%, rgba(245, 158, 11, 0.18) 100%)"
|
|
33
|
+
},
|
|
34
|
+
danger: {
|
|
35
|
+
color: "var(--ds-chart-5)",
|
|
36
|
+
trackBackground: "linear-gradient(90deg, rgba(127, 29, 29, 0.12) 0%, rgba(239, 68, 68, 0.18) 100%)"
|
|
37
|
+
},
|
|
38
|
+
info: {
|
|
39
|
+
color: "var(--ds-chart-2)",
|
|
40
|
+
trackBackground: "linear-gradient(90deg, rgba(30, 64, 175, 0.12) 0%, rgba(59, 130, 246, 0.18) 100%)"
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
function clampValue(value, max) {
|
|
44
|
+
if (!Number.isFinite(value)) return 0;
|
|
45
|
+
return Math.min(Math.max(value, 0), max);
|
|
46
|
+
}
|
|
47
|
+
function ProgressBar({ value, max = 100, label, percentageLabel, showPercentage = true, size = "md", tone = "default", className = "", trackClassName = "", fillClassName = "", ariaLabel = "Progress" }) {
|
|
48
|
+
const safeMax = Number.isFinite(max) && max > 0 ? max : 100;
|
|
49
|
+
const clampedValue = clampValue(value, safeMax);
|
|
50
|
+
const percentage = clampedValue / safeMax * 100;
|
|
51
|
+
const roundedPercentage = Math.round(percentage);
|
|
52
|
+
const toneStyle = toneStyles[tone];
|
|
53
|
+
const resolvedPercentageLabel = percentageLabel ?? `${roundedPercentage}%`;
|
|
54
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
55
|
+
className: `w-full space-y-3 ${className}`,
|
|
56
|
+
children: [(label || showPercentage) && /* @__PURE__ */ jsxs("div", {
|
|
57
|
+
className: "flex items-center justify-between gap-4",
|
|
58
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
59
|
+
className: `font-mono font-semibold tracking-[0.08em] text-foreground ${sizeStyles[size].label}`,
|
|
60
|
+
children: label
|
|
61
|
+
}), showPercentage && /* @__PURE__ */ jsx("div", {
|
|
62
|
+
className: `font-mono font-medium tracking-[0.08em] text-muted-foreground ${sizeStyles[size].percentage}`,
|
|
63
|
+
children: resolvedPercentageLabel
|
|
64
|
+
})]
|
|
65
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
66
|
+
role: "progressbar",
|
|
67
|
+
"aria-label": ariaLabel,
|
|
68
|
+
"aria-valuemin": 0,
|
|
69
|
+
"aria-valuemax": safeMax,
|
|
70
|
+
"aria-valuenow": Math.round(clampedValue),
|
|
71
|
+
"aria-valuetext": `${roundedPercentage}%`,
|
|
72
|
+
className: `relative overflow-hidden rounded-full border border-white/12 bg-background-tertiary/80 shadow-[inset_0_1px_1px_rgba(255,255,255,0.2)] dark:border-white/6 ${sizeStyles[size].track} ${trackClassName}`,
|
|
73
|
+
style: { background: toneStyle.trackBackground },
|
|
74
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
75
|
+
className: `h-full rounded-full transition-[width,filter,box-shadow] duration-500 ease-out ${fillClassName}`,
|
|
76
|
+
style: {
|
|
77
|
+
width: `${percentage}%`,
|
|
78
|
+
background: `linear-gradient(90deg, color-mix(in srgb, ${toneStyle.color} 68%, white 32%) 0%, ${toneStyle.color} 100%)`,
|
|
79
|
+
boxShadow: `inset 0 1px 0 rgba(255,255,255,0.4), 0 0 14px color-mix(in srgb, ${toneStyle.color} 32%, transparent)`,
|
|
80
|
+
filter: percentage > 0 ? "saturate(1.05) brightness(1.02)" : "none"
|
|
81
|
+
}
|
|
82
|
+
})
|
|
83
|
+
})]
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
//#endregion
|
|
87
|
+
export { ProgressBar as t };
|
|
88
|
+
|
|
89
|
+
//# sourceMappingURL=progress-bar-C9FZDrju.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-bar-C9FZDrju.mjs","names":[],"sources":["../../src/components/data-display/progress-bar/ProgressBar.tsx"],"sourcesContent":["import React from \"react\";\n\nexport type ProgressBarSize = \"sm\" | \"md\" | \"lg\";\nexport type ProgressBarTone =\n | \"default\"\n | \"success\"\n | \"warning\"\n | \"danger\"\n | \"info\";\n\nexport interface ProgressBarProps {\n value: number;\n max?: number;\n label?: React.ReactNode;\n percentageLabel?: React.ReactNode;\n showPercentage?: boolean;\n size?: ProgressBarSize;\n tone?: ProgressBarTone;\n className?: string;\n trackClassName?: string;\n fillClassName?: string;\n ariaLabel?: string;\n}\n\nconst sizeStyles: Record<\n ProgressBarSize,\n {\n track: string;\n label: string;\n percentage: string;\n }\n> = {\n sm: {\n track: \"h-1.5\",\n label: \"text-xs\",\n percentage: \"text-xs\",\n },\n md: {\n track: \"h-2.5\",\n label: \"text-sm\",\n percentage: \"text-sm\",\n },\n lg: {\n track: \"h-3.5\",\n label: \"text-base\",\n percentage: \"text-base\",\n },\n};\n\nconst toneStyles: Record<\n ProgressBarTone,\n {\n color: string;\n trackBackground: string;\n }\n> = {\n default: {\n color: \"var(--ds-chart-1)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(15, 23, 42, 0.08) 0%, rgba(30, 41, 59, 0.14) 100%)\",\n },\n success: {\n color: \"var(--ds-chart-3)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(20, 83, 45, 0.12) 0%, rgba(34, 197, 94, 0.18) 100%)\",\n },\n warning: {\n color: \"var(--ds-chart-4)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(120, 53, 15, 0.12) 0%, rgba(245, 158, 11, 0.18) 100%)\",\n },\n danger: {\n color: \"var(--ds-chart-5)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(127, 29, 29, 0.12) 0%, rgba(239, 68, 68, 0.18) 100%)\",\n },\n info: {\n color: \"var(--ds-chart-2)\",\n trackBackground:\n \"linear-gradient(90deg, rgba(30, 64, 175, 0.12) 0%, rgba(59, 130, 246, 0.18) 100%)\",\n },\n};\n\nfunction clampValue(value: number, max: number): number {\n if (!Number.isFinite(value)) {\n return 0;\n }\n\n return Math.min(Math.max(value, 0), max);\n}\n\nexport default function ProgressBar({\n value,\n max = 100,\n label,\n percentageLabel,\n showPercentage = true,\n size = \"md\",\n tone = \"default\",\n className = \"\",\n trackClassName = \"\",\n fillClassName = \"\",\n ariaLabel = \"Progress\",\n}: ProgressBarProps) {\n const safeMax = Number.isFinite(max) && max > 0 ? max : 100;\n const clampedValue = clampValue(value, safeMax);\n const percentage = (clampedValue / safeMax) * 100;\n const roundedPercentage = Math.round(percentage);\n const toneStyle = toneStyles[tone];\n const resolvedPercentageLabel = percentageLabel ?? `${roundedPercentage}%`;\n\n return (\n <div className={`w-full space-y-3 ${className}`}>\n {(label || showPercentage) && (\n <div className=\"flex items-center justify-between gap-4\">\n <div\n className={`font-mono font-semibold tracking-[0.08em] text-foreground ${sizeStyles[size].label}`}\n >\n {label}\n </div>\n {showPercentage && (\n <div\n className={`font-mono font-medium tracking-[0.08em] text-muted-foreground ${sizeStyles[size].percentage}`}\n >\n {resolvedPercentageLabel}\n </div>\n )}\n </div>\n )}\n\n <div\n role=\"progressbar\"\n aria-label={ariaLabel}\n aria-valuemin={0}\n aria-valuemax={safeMax}\n aria-valuenow={Math.round(clampedValue)}\n aria-valuetext={`${roundedPercentage}%`}\n className={`relative overflow-hidden rounded-full border border-white/12 bg-background-tertiary/80 shadow-[inset_0_1px_1px_rgba(255,255,255,0.2)] dark:border-white/6 ${sizeStyles[size].track} ${trackClassName}`}\n style={{ background: toneStyle.trackBackground }}\n >\n <div\n className={`h-full rounded-full transition-[width,filter,box-shadow] duration-500 ease-out ${fillClassName}`}\n style={{\n width: `${percentage}%`,\n background: `linear-gradient(90deg, color-mix(in srgb, ${toneStyle.color} 68%, white 32%) 0%, ${toneStyle.color} 100%)`,\n boxShadow: `inset 0 1px 0 rgba(255,255,255,0.4), 0 0 14px color-mix(in srgb, ${toneStyle.color} 32%, transparent)`,\n filter: percentage > 0 ? \"saturate(1.05) brightness(1.02)\" : \"none\",\n }}\n />\n </div>\n </div>\n );\n}\n"],"mappings":";;;AAwBA,IAAM,aAOF;CACF,IAAI;EACF,OAAO;EACP,OAAO;EACP,YAAY;EACb;CACD,IAAI;EACF,OAAO;EACP,OAAO;EACP,YAAY;EACb;CACD,IAAI;EACF,OAAO;EACP,OAAO;EACP,YAAY;EACb;CACF;AAED,IAAM,aAMF;CACF,SAAS;EACP,OAAO;EACP,iBACE;EACH;CACD,SAAS;EACP,OAAO;EACP,iBACE;EACH;CACD,SAAS;EACP,OAAO;EACP,iBACE;EACH;CACD,QAAQ;EACN,OAAO;EACP,iBACE;EACH;CACD,MAAM;EACJ,OAAO;EACP,iBACE;EACH;CACF;AAED,SAAS,WAAW,OAAe,KAAqB;AACtD,KAAI,CAAC,OAAO,SAAS,MAAM,CACzB,QAAO;AAGT,QAAO,KAAK,IAAI,KAAK,IAAI,OAAO,EAAE,EAAE,IAAI;;AAG1C,SAAwB,YAAY,EAClC,OACA,MAAM,KACN,OACA,iBACA,iBAAiB,MACjB,OAAO,MACP,OAAO,WACP,YAAY,IACZ,iBAAiB,IACjB,gBAAgB,IAChB,YAAY,cACO;CACnB,MAAM,UAAU,OAAO,SAAS,IAAI,IAAI,MAAM,IAAI,MAAM;CACxD,MAAM,eAAe,WAAW,OAAO,QAAQ;CAC/C,MAAM,aAAc,eAAe,UAAW;CAC9C,MAAM,oBAAoB,KAAK,MAAM,WAAW;CAChD,MAAM,YAAY,WAAW;CAC7B,MAAM,0BAA0B,mBAAmB,GAAG,kBAAkB;AAExE,QACE,qBAAC,OAAD;EAAK,WAAW,oBAAoB;YAApC,EACI,SAAS,mBACT,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,oBAAC,OAAD;IACE,WAAW,6DAA6D,WAAW,MAAM;cAExF;IACG,CAAA,EACL,kBACC,oBAAC,OAAD;IACE,WAAW,iEAAiE,WAAW,MAAM;cAE5F;IACG,CAAA,CAEJ;MAGR,oBAAC,OAAD;GACE,MAAK;GACL,cAAY;GACZ,iBAAe;GACf,iBAAe;GACf,iBAAe,KAAK,MAAM,aAAa;GACvC,kBAAgB,GAAG,kBAAkB;GACrC,WAAW,6JAA6J,WAAW,MAAM,MAAM,GAAG;GAClM,OAAO,EAAE,YAAY,UAAU,iBAAiB;aAEhD,oBAAC,OAAD;IACE,WAAW,kFAAkF;IAC7F,OAAO;KACL,OAAO,GAAG,WAAW;KACrB,YAAY,6CAA6C,UAAU,MAAM,uBAAuB,UAAU,MAAM;KAChH,WAAW,oEAAoE,UAAU,MAAM;KAC/F,QAAQ,aAAa,IAAI,oCAAoC;KAC9D;IACD,CAAA;GACE,CAAA,CACF"}
|
|
@@ -4,14 +4,14 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
4
4
|
//#region src/components/forms/radio/Radio.tsx
|
|
5
5
|
var sanitizeId = (value) => value.replace(/[^a-zA-Z0-9_-]/g, "-");
|
|
6
6
|
var colorValues = {
|
|
7
|
-
red: "
|
|
8
|
-
blue: "
|
|
9
|
-
green: "
|
|
10
|
-
yellow: "
|
|
11
|
-
teal: "
|
|
12
|
-
primary: "var(--color-
|
|
7
|
+
red: "var(--ds-color-danger)",
|
|
8
|
+
blue: "var(--ds-color-info)",
|
|
9
|
+
green: "var(--ds-color-success)",
|
|
10
|
+
yellow: "var(--ds-color-warning)",
|
|
11
|
+
teal: "var(--ds-brand-teal)",
|
|
12
|
+
primary: "var(--ds-color-accent)"
|
|
13
13
|
};
|
|
14
|
-
var Radio = forwardRef(({ className = "", label, error, id, color = "
|
|
14
|
+
var Radio = forwardRef(({ className = "", label, error, id, color = "primary", bgClassName = "", ...props }, ref) => {
|
|
15
15
|
const generatedId = useId();
|
|
16
16
|
const radioId = id || `radio-${sanitizeId(generatedId)}`;
|
|
17
17
|
return /* @__PURE__ */ jsxs("div", {
|
|
@@ -31,7 +31,7 @@ var Radio = forwardRef(({ className = "", label, error, id, color = "blue", bgCl
|
|
|
31
31
|
children: label
|
|
32
32
|
}),
|
|
33
33
|
error && /* @__PURE__ */ jsx("p", {
|
|
34
|
-
className: "text-sm font-medium text-
|
|
34
|
+
className: "mt-1 text-sm font-medium text-destructive",
|
|
35
35
|
children: error
|
|
36
36
|
})
|
|
37
37
|
]
|
|
@@ -41,4 +41,4 @@ Radio.displayName = "Radio";
|
|
|
41
41
|
//#endregion
|
|
42
42
|
export { Radio as t };
|
|
43
43
|
|
|
44
|
-
//# sourceMappingURL=radio-
|
|
44
|
+
//# sourceMappingURL=radio-C9w_CoiY.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio-C9w_CoiY.mjs","names":[],"sources":["../../src/components/forms/radio/Radio.tsx"],"sourcesContent":["import type { RadioProps, RadioColor } from \"./types\";\nimport { forwardRef, useId } from \"react\";\n\nimport { mergeClassNames } from \"../../../utils\";\n\nconst sanitizeId = (value: string) => value.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n\nconst colorValues: Record<RadioColor, string> = {\n red: \"var(--ds-color-danger)\",\n blue: \"var(--ds-color-info)\",\n green: \"var(--ds-color-success)\",\n yellow: \"var(--ds-color-warning)\",\n teal: \"var(--ds-brand-teal)\",\n primary: \"var(--ds-color-accent)\",\n};\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n (\n {\n className = \"\",\n label,\n error,\n id,\n color = \"primary\",\n bgClassName = \"\",\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const radioId = id || `radio-${sanitizeId(generatedId)}`;\n\n return (\n <div className=\"flex items-center space-x-2\">\n <input\n ref={ref}\n type=\"radio\"\n id={radioId}\n style={{ accentColor: colorValues[color] }}\n className={mergeClassNames(\n \"h-5 w-5 cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\",\n bgClassName,\n className,\n )}\n {...props}\n />\n {label && (\n <label\n htmlFor={radioId}\n className=\"text-sm font-medium leading-none cursor-pointer text-neutral-900 dark:text-white\"\n >\n {label}\n </label>\n )}\n {error && (\n <p className=\"mt-1 text-sm font-medium text-destructive\">{error}</p>\n )}\n </div>\n );\n },\n);\n\nRadio.displayName = \"Radio\";\n"],"mappings":";;;;AAKA,IAAM,cAAc,UAAkB,MAAM,QAAQ,mBAAmB,IAAI;AAE3E,IAAM,cAA0C;CAC9C,KAAK;CACL,MAAM;CACN,OAAO;CACP,QAAQ;CACR,MAAM;CACN,SAAS;CACV;AAED,IAAa,QAAQ,YAEjB,EACE,YAAY,IACZ,OACA,OACA,IACA,QAAQ,WACR,cAAc,IACd,GAAG,SAEL,QACG;CACH,MAAM,cAAc,OAAO;CAC3B,MAAM,UAAU,MAAM,SAAS,WAAW,YAAY;AAEtD,QACE,qBAAC,OAAD;EAAK,WAAU;YAAf;GACE,oBAAC,SAAD;IACO;IACL,MAAK;IACL,IAAI;IACJ,OAAO,EAAE,aAAa,YAAY,QAAQ;IAC1C,WAAW,gBACT,0EACA,aACA,UACD;IACD,GAAI;IACJ,CAAA;GACD,SACC,oBAAC,SAAD;IACE,SAAS;IACT,WAAU;cAET;IACK,CAAA;GAET,SACC,oBAAC,KAAD;IAAG,WAAU;cAA6C;IAAU,CAAA;GAElE;;EAGX;AAED,MAAM,cAAc"}
|
|
@@ -5,14 +5,14 @@ let react_jsx_runtime = require("react/jsx-runtime");
|
|
|
5
5
|
//#region src/components/forms/radio/Radio.tsx
|
|
6
6
|
var sanitizeId = (value) => value.replace(/[^a-zA-Z0-9_-]/g, "-");
|
|
7
7
|
var colorValues = {
|
|
8
|
-
red: "
|
|
9
|
-
blue: "
|
|
10
|
-
green: "
|
|
11
|
-
yellow: "
|
|
12
|
-
teal: "
|
|
13
|
-
primary: "var(--color-
|
|
8
|
+
red: "var(--ds-color-danger)",
|
|
9
|
+
blue: "var(--ds-color-info)",
|
|
10
|
+
green: "var(--ds-color-success)",
|
|
11
|
+
yellow: "var(--ds-color-warning)",
|
|
12
|
+
teal: "var(--ds-brand-teal)",
|
|
13
|
+
primary: "var(--ds-color-accent)"
|
|
14
14
|
};
|
|
15
|
-
var Radio = (0, react.forwardRef)(({ className = "", label, error, id, color = "
|
|
15
|
+
var Radio = (0, react.forwardRef)(({ className = "", label, error, id, color = "primary", bgClassName = "", ...props }, ref) => {
|
|
16
16
|
const generatedId = (0, react.useId)();
|
|
17
17
|
const radioId = id || `radio-${sanitizeId(generatedId)}`;
|
|
18
18
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -32,7 +32,7 @@ var Radio = (0, react.forwardRef)(({ className = "", label, error, id, color = "
|
|
|
32
32
|
children: label
|
|
33
33
|
}),
|
|
34
34
|
error && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
35
|
-
className: "text-sm font-medium text-
|
|
35
|
+
className: "mt-1 text-sm font-medium text-destructive",
|
|
36
36
|
children: error
|
|
37
37
|
})
|
|
38
38
|
]
|
|
@@ -47,4 +47,4 @@ Object.defineProperty(exports, "Radio", {
|
|
|
47
47
|
}
|
|
48
48
|
});
|
|
49
49
|
|
|
50
|
-
//# sourceMappingURL=radio-
|
|
50
|
+
//# sourceMappingURL=radio-jMHDvaMY.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radio-jMHDvaMY.cjs","names":[],"sources":["../../src/components/forms/radio/Radio.tsx"],"sourcesContent":["import type { RadioProps, RadioColor } from \"./types\";\nimport { forwardRef, useId } from \"react\";\n\nimport { mergeClassNames } from \"../../../utils\";\n\nconst sanitizeId = (value: string) => value.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n\nconst colorValues: Record<RadioColor, string> = {\n red: \"var(--ds-color-danger)\",\n blue: \"var(--ds-color-info)\",\n green: \"var(--ds-color-success)\",\n yellow: \"var(--ds-color-warning)\",\n teal: \"var(--ds-brand-teal)\",\n primary: \"var(--ds-color-accent)\",\n};\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n (\n {\n className = \"\",\n label,\n error,\n id,\n color = \"primary\",\n bgClassName = \"\",\n ...props\n },\n ref,\n ) => {\n const generatedId = useId();\n const radioId = id || `radio-${sanitizeId(generatedId)}`;\n\n return (\n <div className=\"flex items-center space-x-2\">\n <input\n ref={ref}\n type=\"radio\"\n id={radioId}\n style={{ accentColor: colorValues[color] }}\n className={mergeClassNames(\n \"h-5 w-5 cursor-pointer disabled:cursor-not-allowed disabled:opacity-50\",\n bgClassName,\n className,\n )}\n {...props}\n />\n {label && (\n <label\n htmlFor={radioId}\n className=\"text-sm font-medium leading-none cursor-pointer text-neutral-900 dark:text-white\"\n >\n {label}\n </label>\n )}\n {error && (\n <p className=\"mt-1 text-sm font-medium text-destructive\">{error}</p>\n )}\n </div>\n );\n },\n);\n\nRadio.displayName = \"Radio\";\n"],"mappings":";;;;;AAKA,IAAM,cAAc,UAAkB,MAAM,QAAQ,mBAAmB,IAAI;AAE3E,IAAM,cAA0C;CAC9C,KAAK;CACL,MAAM;CACN,OAAO;CACP,QAAQ;CACR,MAAM;CACN,SAAS;CACV;AAED,IAAa,SAAA,GAAA,MAAA,aAET,EACE,YAAY,IACZ,OACA,OACA,IACA,QAAQ,WACR,cAAc,IACd,GAAG,SAEL,QACG;CACH,MAAM,eAAA,GAAA,MAAA,QAAqB;CAC3B,MAAM,UAAU,MAAM,SAAS,WAAW,YAAY;AAEtD,QACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,WAAU;YAAf;GACE,iBAAA,GAAA,kBAAA,KAAC,SAAD;IACO;IACL,MAAK;IACL,IAAI;IACJ,OAAO,EAAE,aAAa,YAAY,QAAQ;IAC1C,WAAW,cAAA,gBACT,0EACA,aACA,UACD;IACD,GAAI;IACJ,CAAA;GACD,SACC,iBAAA,GAAA,kBAAA,KAAC,SAAD;IACE,SAAS;IACT,WAAU;cAET;IACK,CAAA;GAET,SACC,iBAAA,GAAA,kBAAA,KAAC,KAAD;IAAG,WAAU;cAA6C;IAAU,CAAA;GAElE;;EAGX;AAED,MAAM,cAAc"}
|