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
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { n as mergeClassNames } from "./utils-ati1KkDb.mjs";
|
|
2
|
+
import { J as CheckIcon, N as ChevronDownIcon } from "./icons-DuumN7z-.mjs";
|
|
3
|
+
import { forwardRef, useEffect, useRef, useState } from "react";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { motion, useMotionTemplate, useMotionValue } from "framer-motion";
|
|
6
|
+
//#region src/components/forms/select/Select.tsx
|
|
7
|
+
var Select = forwardRef(({ className = "", containerClassName = "", triggerClassName = "", label, error, helperText, options, value, onChange, placeholder = "Select...", disabled, bgClassName = "bg-background-secondary", ...props }, ref) => {
|
|
8
|
+
const [open, setOpen] = useState(false);
|
|
9
|
+
const [visible, setVisible] = useState(false);
|
|
10
|
+
const containerRef = useRef(null);
|
|
11
|
+
const hiddenSelectRef = useRef(null);
|
|
12
|
+
const mouseX = useMotionValue(0);
|
|
13
|
+
const mouseY = useMotionValue(0);
|
|
14
|
+
const radius = 100;
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
if (ref && typeof ref === "function") ref(hiddenSelectRef.current);
|
|
17
|
+
else if (ref) ref.current = hiddenSelectRef.current;
|
|
18
|
+
}, [ref]);
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
const handleClick = (e) => {
|
|
21
|
+
if (containerRef.current && !containerRef.current.contains(e.target)) setOpen(false);
|
|
22
|
+
};
|
|
23
|
+
if (open) document.addEventListener("mousedown", handleClick);
|
|
24
|
+
return () => document.removeEventListener("mousedown", handleClick);
|
|
25
|
+
}, [open]);
|
|
26
|
+
const handleMouseMove = (event) => {
|
|
27
|
+
const { left, top } = event.currentTarget.getBoundingClientRect();
|
|
28
|
+
mouseX.set(event.clientX - left);
|
|
29
|
+
mouseY.set(event.clientY - top);
|
|
30
|
+
};
|
|
31
|
+
const selectedOption = options.find((opt) => opt.value === value);
|
|
32
|
+
const handleSelect = (optValue) => {
|
|
33
|
+
if (onChange && hiddenSelectRef.current) onChange({
|
|
34
|
+
target: {
|
|
35
|
+
value: optValue,
|
|
36
|
+
name: props.name
|
|
37
|
+
},
|
|
38
|
+
currentTarget: {
|
|
39
|
+
value: optValue,
|
|
40
|
+
name: props.name
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
setOpen(false);
|
|
44
|
+
};
|
|
45
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
46
|
+
className: mergeClassNames("w-full min-w-48", containerClassName),
|
|
47
|
+
children: [
|
|
48
|
+
label && /* @__PURE__ */ jsx("label", {
|
|
49
|
+
className: "mb-2 block text-sm leading-none font-medium text-foreground peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
|
|
50
|
+
children: label
|
|
51
|
+
}),
|
|
52
|
+
/* @__PURE__ */ jsxs("select", {
|
|
53
|
+
ref: hiddenSelectRef,
|
|
54
|
+
className: "sr-only",
|
|
55
|
+
value,
|
|
56
|
+
onChange,
|
|
57
|
+
disabled,
|
|
58
|
+
...props,
|
|
59
|
+
children: [/* @__PURE__ */ jsx("option", {
|
|
60
|
+
value: "",
|
|
61
|
+
children: placeholder
|
|
62
|
+
}), options.map((option) => /* @__PURE__ */ jsx("option", {
|
|
63
|
+
value: option.value,
|
|
64
|
+
children: option.label
|
|
65
|
+
}, option.value))]
|
|
66
|
+
}),
|
|
67
|
+
/* @__PURE__ */ jsxs("div", {
|
|
68
|
+
ref: containerRef,
|
|
69
|
+
className: mergeClassNames("relative w-full", className),
|
|
70
|
+
children: [/* @__PURE__ */ jsx(motion.div, {
|
|
71
|
+
style: { backgroundImage: disabled ? "none" : useMotionTemplate`
|
|
72
|
+
radial-gradient(
|
|
73
|
+
${visible ? `${radius}px` : "0px"} circle at ${mouseX}px ${mouseY}px,
|
|
74
|
+
var(--ds-color-accent),
|
|
75
|
+
transparent 90%
|
|
76
|
+
)
|
|
77
|
+
` },
|
|
78
|
+
onMouseMove: !disabled ? handleMouseMove : void 0,
|
|
79
|
+
onMouseEnter: !disabled ? () => setVisible(true) : void 0,
|
|
80
|
+
onMouseLeave: !disabled ? () => setVisible(false) : void 0,
|
|
81
|
+
className: mergeClassNames("group/select rounded-lg p-[2px] transition duration-300 hover:border-accent", disabled ? "bg-muted border-none" : error ? "border-destructive" : "border-border"),
|
|
82
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
83
|
+
className: mergeClassNames("shadow-input flex h-10 w-full cursor-pointer items-center justify-between rounded-md border border-input px-3 py-2 text-sm transition duration-400 ease-in-out group-hover/select:shadow-none", bgClassName, disabled ? "cursor-not-allowed opacity-50" : "text-foreground", error && "border-destructive text-destructive focus-visible:ring-destructive", triggerClassName),
|
|
84
|
+
onClick: () => {
|
|
85
|
+
if (!disabled) setOpen((o) => !o);
|
|
86
|
+
},
|
|
87
|
+
onKeyDown: (event) => {
|
|
88
|
+
if (disabled) return;
|
|
89
|
+
if (event.key === "Enter" || event.key === " ") {
|
|
90
|
+
event.preventDefault();
|
|
91
|
+
setOpen((current) => !current);
|
|
92
|
+
}
|
|
93
|
+
if (event.key === "Escape") setOpen(false);
|
|
94
|
+
},
|
|
95
|
+
role: "button",
|
|
96
|
+
tabIndex: disabled ? -1 : 0,
|
|
97
|
+
"aria-haspopup": "listbox",
|
|
98
|
+
"aria-expanded": open,
|
|
99
|
+
children: [selectedOption ? /* @__PURE__ */ jsx("span", {
|
|
100
|
+
className: "flex-1 truncate text-foreground",
|
|
101
|
+
children: selectedOption.label
|
|
102
|
+
}) : /* @__PURE__ */ jsx("span", {
|
|
103
|
+
className: "flex-1 text-muted-foreground",
|
|
104
|
+
children: placeholder
|
|
105
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
106
|
+
className: mergeClassNames("ml-2 text-muted-foreground transition-transform duration-300", open ? "rotate-180" : "rotate-0"),
|
|
107
|
+
children: /* @__PURE__ */ jsx(ChevronDownIcon, {
|
|
108
|
+
width: 24,
|
|
109
|
+
height: 24,
|
|
110
|
+
color: "currentColor",
|
|
111
|
+
className: "h-5 w-5"
|
|
112
|
+
})
|
|
113
|
+
})]
|
|
114
|
+
})
|
|
115
|
+
}), open && !disabled && /* @__PURE__ */ jsxs("div", {
|
|
116
|
+
className: mergeClassNames("absolute right-0 left-0 z-20 mt-1 flex max-h-60 flex-col overflow-auto rounded-lg border border-border bg-background-secondary shadow-3 backdrop-blur-xl transition"),
|
|
117
|
+
children: [options.length === 0 && /* @__PURE__ */ jsx("div", {
|
|
118
|
+
className: "px-3 py-2 text-muted-foreground",
|
|
119
|
+
children: "No options"
|
|
120
|
+
}), options.map((opt) => /* @__PURE__ */ jsxs("div", {
|
|
121
|
+
className: mergeClassNames("mx-1 my-1 flex cursor-pointer items-center gap-2 rounded-md px-3 py-2 text-sm text-foreground transition", opt.value === value ? "bg-accent-subtle text-accent font-semibold" : "", "hover:bg-accent hover:text-on-accent"),
|
|
122
|
+
onClick: () => handleSelect(opt.value),
|
|
123
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
124
|
+
className: "flex w-5 items-center justify-center",
|
|
125
|
+
children: opt.value === value && /* @__PURE__ */ jsx(CheckIcon, {
|
|
126
|
+
className: "text-accent",
|
|
127
|
+
width: 18,
|
|
128
|
+
height: 18
|
|
129
|
+
})
|
|
130
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
131
|
+
className: "min-w-0 flex-1 truncate",
|
|
132
|
+
children: opt.label
|
|
133
|
+
})]
|
|
134
|
+
}, opt.value))]
|
|
135
|
+
})]
|
|
136
|
+
}),
|
|
137
|
+
error && /* @__PURE__ */ jsx("p", {
|
|
138
|
+
className: "mt-1 text-sm font-medium text-destructive",
|
|
139
|
+
children: error
|
|
140
|
+
}),
|
|
141
|
+
helperText && !error && /* @__PURE__ */ jsx("p", {
|
|
142
|
+
className: "mt-1 text-sm text-muted-foreground",
|
|
143
|
+
children: helperText
|
|
144
|
+
})
|
|
145
|
+
]
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
Select.displayName = "Select";
|
|
149
|
+
//#endregion
|
|
150
|
+
export { Select as t };
|
|
151
|
+
|
|
152
|
+
//# sourceMappingURL=select-D71tk6-I.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-D71tk6-I.mjs","names":[],"sources":["../../src/components/forms/select/Select.tsx"],"sourcesContent":["import type { SelectProps } from \"./types\";\nimport { forwardRef, useState, useRef, useEffect } from \"react\";\nimport { motion, useMotionTemplate, useMotionValue } from \"framer-motion\";\n\nimport { CheckIcon, ChevronDownIcon } from \"../../icons\";\nimport { mergeClassNames } from \"../../../utils\";\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\n (\n {\n className = \"\",\n containerClassName = \"\",\n triggerClassName = \"\",\n label,\n error,\n helperText,\n options,\n value,\n onChange,\n placeholder = \"Select...\",\n disabled,\n bgClassName = \"bg-background-secondary\",\n ...props\n },\n ref,\n ) => {\n const [open, setOpen] = useState(false);\n const [visible, setVisible] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const hiddenSelectRef = useRef<HTMLSelectElement>(null);\n const mouseX = useMotionValue(0);\n const mouseY = useMotionValue(0);\n const radius = 100;\n\n // Combine refs\n useEffect(() => {\n if (ref && typeof ref === \"function\") {\n ref(hiddenSelectRef.current);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLSelectElement | null>).current =\n hiddenSelectRef.current;\n }\n }, [ref]);\n\n // Close dropdown on outside click\n useEffect(() => {\n const handleClick = (e: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n };\n if (open) {\n document.addEventListener(\"mousedown\", handleClick);\n }\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [open]);\n\n const handleMouseMove = (event: React.MouseEvent<HTMLDivElement>) => {\n const { left, top } = event.currentTarget.getBoundingClientRect();\n mouseX.set(event.clientX - left);\n mouseY.set(event.clientY - top);\n };\n\n const selectedOption = options.find((opt) => opt.value === value);\n\n const handleSelect = (optValue: string) => {\n // Trigger onChange with a synthetic event\n if (onChange && hiddenSelectRef.current) {\n const event = {\n target: { value: optValue, name: props.name },\n currentTarget: { value: optValue, name: props.name },\n } as React.ChangeEvent<HTMLSelectElement>;\n onChange(event);\n }\n setOpen(false);\n };\n\n return (\n <div className={mergeClassNames(\"w-full min-w-48\", containerClassName)}>\n {label && (\n <label className=\"mb-2 block text-sm leading-none font-medium text-foreground peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n {label}\n </label>\n )}\n\n {/* Hidden native select for form compatibility */}\n <select\n ref={hiddenSelectRef}\n className=\"sr-only\"\n value={value}\n onChange={onChange}\n disabled={disabled}\n {...props}\n >\n <option value=\"\">{placeholder}</option>\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n\n {/* Custom styled dropdown */}\n <div\n ref={containerRef}\n className={mergeClassNames(\"relative w-full\", className)}\n >\n <motion.div\n style={{\n backgroundImage: disabled\n ? \"none\"\n : useMotionTemplate`\n radial-gradient(\n ${\n visible ? `${radius}px` : \"0px\"\n } circle at ${mouseX}px ${mouseY}px,\n var(--ds-color-accent),\n transparent 90%\n )\n `,\n }}\n onMouseMove={!disabled ? handleMouseMove : undefined}\n onMouseEnter={!disabled ? () => setVisible(true) : undefined}\n onMouseLeave={!disabled ? () => setVisible(false) : undefined}\n className={mergeClassNames(\n \"group/select rounded-lg p-[2px] transition duration-300 hover:border-accent\",\n disabled\n ? \"bg-muted border-none\"\n : error\n ? \"border-destructive\"\n : \"border-border\",\n )}\n >\n <div\n className={mergeClassNames(\n \"shadow-input flex h-10 w-full cursor-pointer items-center justify-between rounded-md border border-input px-3 py-2 text-sm transition duration-400 ease-in-out group-hover/select:shadow-none\",\n bgClassName,\n disabled ? \"cursor-not-allowed opacity-50\" : \"text-foreground\",\n error &&\n \"border-destructive text-destructive focus-visible:ring-destructive\",\n triggerClassName,\n )}\n onClick={() => {\n if (!disabled) {\n setOpen((o) => !o);\n }\n }}\n onKeyDown={(event) => {\n if (disabled) {\n return;\n }\n\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n setOpen((current) => !current);\n }\n\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n }}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n >\n {selectedOption ? (\n <span className=\"flex-1 truncate text-foreground\">\n {selectedOption.label}\n </span>\n ) : (\n <span className=\"flex-1 text-muted-foreground\">\n {placeholder}\n </span>\n )}\n <span\n className={mergeClassNames(\n \"ml-2 text-muted-foreground transition-transform duration-300\",\n open ? \"rotate-180\" : \"rotate-0\",\n )}\n >\n <ChevronDownIcon\n width={24}\n height={24}\n color=\"currentColor\"\n className=\"h-5 w-5\"\n />\n </span>\n </div>\n </motion.div>\n\n {open && !disabled && (\n <div\n className={mergeClassNames(\n \"absolute right-0 left-0 z-20 mt-1 flex max-h-60 flex-col overflow-auto rounded-lg border border-border bg-background-secondary shadow-3 backdrop-blur-xl transition\",\n )}\n >\n {options.length === 0 && (\n <div className=\"px-3 py-2 text-muted-foreground\">\n No options\n </div>\n )}\n {options.map((opt) => (\n <div\n key={opt.value}\n className={mergeClassNames(\n \"mx-1 my-1 flex cursor-pointer items-center gap-2 rounded-md px-3 py-2 text-sm text-foreground transition\",\n opt.value === value\n ? \"bg-accent-subtle text-accent font-semibold\"\n : \"\",\n \"hover:bg-accent hover:text-on-accent\",\n )}\n onClick={() => handleSelect(opt.value)}\n >\n <span className=\"flex w-5 items-center justify-center\">\n {opt.value === value && (\n <CheckIcon\n className=\"text-accent\"\n width={18}\n height={18}\n />\n )}\n </span>\n <span className=\"min-w-0 flex-1 truncate\">{opt.label}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {error && (\n <p className=\"mt-1 text-sm font-medium text-destructive\">{error}</p>\n )}\n {helperText && !error && (\n <p className=\"mt-1 text-sm text-muted-foreground\">{helperText}</p>\n )}\n </div>\n );\n },\n);\n\nSelect.displayName = \"Select\";\n"],"mappings":"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"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
require("./chunk-B_GkZjkl.cjs");
|
|
2
|
+
const require_utils = require("./utils-B4SmmY4J.cjs");
|
|
3
|
+
const require_icons = require("./icons-BxIzP2jd.cjs");
|
|
4
|
+
let react = require("react");
|
|
5
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
6
|
+
let framer_motion = require("framer-motion");
|
|
7
|
+
//#region src/components/forms/select/Select.tsx
|
|
8
|
+
var Select = (0, react.forwardRef)(({ className = "", containerClassName = "", triggerClassName = "", label, error, helperText, options, value, onChange, placeholder = "Select...", disabled, bgClassName = "bg-background-secondary", ...props }, ref) => {
|
|
9
|
+
const [open, setOpen] = (0, react.useState)(false);
|
|
10
|
+
const [visible, setVisible] = (0, react.useState)(false);
|
|
11
|
+
const containerRef = (0, react.useRef)(null);
|
|
12
|
+
const hiddenSelectRef = (0, react.useRef)(null);
|
|
13
|
+
const mouseX = (0, framer_motion.useMotionValue)(0);
|
|
14
|
+
const mouseY = (0, framer_motion.useMotionValue)(0);
|
|
15
|
+
const radius = 100;
|
|
16
|
+
(0, react.useEffect)(() => {
|
|
17
|
+
if (ref && typeof ref === "function") ref(hiddenSelectRef.current);
|
|
18
|
+
else if (ref) ref.current = hiddenSelectRef.current;
|
|
19
|
+
}, [ref]);
|
|
20
|
+
(0, react.useEffect)(() => {
|
|
21
|
+
const handleClick = (e) => {
|
|
22
|
+
if (containerRef.current && !containerRef.current.contains(e.target)) setOpen(false);
|
|
23
|
+
};
|
|
24
|
+
if (open) document.addEventListener("mousedown", handleClick);
|
|
25
|
+
return () => document.removeEventListener("mousedown", handleClick);
|
|
26
|
+
}, [open]);
|
|
27
|
+
const handleMouseMove = (event) => {
|
|
28
|
+
const { left, top } = event.currentTarget.getBoundingClientRect();
|
|
29
|
+
mouseX.set(event.clientX - left);
|
|
30
|
+
mouseY.set(event.clientY - top);
|
|
31
|
+
};
|
|
32
|
+
const selectedOption = options.find((opt) => opt.value === value);
|
|
33
|
+
const handleSelect = (optValue) => {
|
|
34
|
+
if (onChange && hiddenSelectRef.current) onChange({
|
|
35
|
+
target: {
|
|
36
|
+
value: optValue,
|
|
37
|
+
name: props.name
|
|
38
|
+
},
|
|
39
|
+
currentTarget: {
|
|
40
|
+
value: optValue,
|
|
41
|
+
name: props.name
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
setOpen(false);
|
|
45
|
+
};
|
|
46
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
47
|
+
className: require_utils.mergeClassNames("w-full min-w-48", containerClassName),
|
|
48
|
+
children: [
|
|
49
|
+
label && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
|
|
50
|
+
className: "mb-2 block text-sm leading-none font-medium text-foreground peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
|
|
51
|
+
children: label
|
|
52
|
+
}),
|
|
53
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
|
|
54
|
+
ref: hiddenSelectRef,
|
|
55
|
+
className: "sr-only",
|
|
56
|
+
value,
|
|
57
|
+
onChange,
|
|
58
|
+
disabled,
|
|
59
|
+
...props,
|
|
60
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
61
|
+
value: "",
|
|
62
|
+
children: placeholder
|
|
63
|
+
}), options.map((option) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
|
|
64
|
+
value: option.value,
|
|
65
|
+
children: option.label
|
|
66
|
+
}, option.value))]
|
|
67
|
+
}),
|
|
68
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
69
|
+
ref: containerRef,
|
|
70
|
+
className: require_utils.mergeClassNames("relative w-full", className),
|
|
71
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(framer_motion.motion.div, {
|
|
72
|
+
style: { backgroundImage: disabled ? "none" : framer_motion.useMotionTemplate`
|
|
73
|
+
radial-gradient(
|
|
74
|
+
${visible ? `${radius}px` : "0px"} circle at ${mouseX}px ${mouseY}px,
|
|
75
|
+
var(--ds-color-accent),
|
|
76
|
+
transparent 90%
|
|
77
|
+
)
|
|
78
|
+
` },
|
|
79
|
+
onMouseMove: !disabled ? handleMouseMove : void 0,
|
|
80
|
+
onMouseEnter: !disabled ? () => setVisible(true) : void 0,
|
|
81
|
+
onMouseLeave: !disabled ? () => setVisible(false) : void 0,
|
|
82
|
+
className: require_utils.mergeClassNames("group/select rounded-lg p-[2px] transition duration-300 hover:border-accent", disabled ? "bg-muted border-none" : error ? "border-destructive" : "border-border"),
|
|
83
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
84
|
+
className: require_utils.mergeClassNames("shadow-input flex h-10 w-full cursor-pointer items-center justify-between rounded-md border border-input px-3 py-2 text-sm transition duration-400 ease-in-out group-hover/select:shadow-none", bgClassName, disabled ? "cursor-not-allowed opacity-50" : "text-foreground", error && "border-destructive text-destructive focus-visible:ring-destructive", triggerClassName),
|
|
85
|
+
onClick: () => {
|
|
86
|
+
if (!disabled) setOpen((o) => !o);
|
|
87
|
+
},
|
|
88
|
+
onKeyDown: (event) => {
|
|
89
|
+
if (disabled) return;
|
|
90
|
+
if (event.key === "Enter" || event.key === " ") {
|
|
91
|
+
event.preventDefault();
|
|
92
|
+
setOpen((current) => !current);
|
|
93
|
+
}
|
|
94
|
+
if (event.key === "Escape") setOpen(false);
|
|
95
|
+
},
|
|
96
|
+
role: "button",
|
|
97
|
+
tabIndex: disabled ? -1 : 0,
|
|
98
|
+
"aria-haspopup": "listbox",
|
|
99
|
+
"aria-expanded": open,
|
|
100
|
+
children: [selectedOption ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
101
|
+
className: "flex-1 truncate text-foreground",
|
|
102
|
+
children: selectedOption.label
|
|
103
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
104
|
+
className: "flex-1 text-muted-foreground",
|
|
105
|
+
children: placeholder
|
|
106
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
107
|
+
className: require_utils.mergeClassNames("ml-2 text-muted-foreground transition-transform duration-300", open ? "rotate-180" : "rotate-0"),
|
|
108
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons.ChevronDownIcon, {
|
|
109
|
+
width: 24,
|
|
110
|
+
height: 24,
|
|
111
|
+
color: "currentColor",
|
|
112
|
+
className: "h-5 w-5"
|
|
113
|
+
})
|
|
114
|
+
})]
|
|
115
|
+
})
|
|
116
|
+
}), open && !disabled && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
117
|
+
className: require_utils.mergeClassNames("absolute right-0 left-0 z-20 mt-1 flex max-h-60 flex-col overflow-auto rounded-lg border border-border bg-background-secondary shadow-3 backdrop-blur-xl transition"),
|
|
118
|
+
children: [options.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
119
|
+
className: "px-3 py-2 text-muted-foreground",
|
|
120
|
+
children: "No options"
|
|
121
|
+
}), options.map((opt) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
122
|
+
className: require_utils.mergeClassNames("mx-1 my-1 flex cursor-pointer items-center gap-2 rounded-md px-3 py-2 text-sm text-foreground transition", opt.value === value ? "bg-accent-subtle text-accent font-semibold" : "", "hover:bg-accent hover:text-on-accent"),
|
|
123
|
+
onClick: () => handleSelect(opt.value),
|
|
124
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
125
|
+
className: "flex w-5 items-center justify-center",
|
|
126
|
+
children: opt.value === value && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons.CheckIcon, {
|
|
127
|
+
className: "text-accent",
|
|
128
|
+
width: 18,
|
|
129
|
+
height: 18
|
|
130
|
+
})
|
|
131
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
132
|
+
className: "min-w-0 flex-1 truncate",
|
|
133
|
+
children: opt.label
|
|
134
|
+
})]
|
|
135
|
+
}, opt.value))]
|
|
136
|
+
})]
|
|
137
|
+
}),
|
|
138
|
+
error && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
139
|
+
className: "mt-1 text-sm font-medium text-destructive",
|
|
140
|
+
children: error
|
|
141
|
+
}),
|
|
142
|
+
helperText && !error && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
143
|
+
className: "mt-1 text-sm text-muted-foreground",
|
|
144
|
+
children: helperText
|
|
145
|
+
})
|
|
146
|
+
]
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
Select.displayName = "Select";
|
|
150
|
+
//#endregion
|
|
151
|
+
Object.defineProperty(exports, "Select", {
|
|
152
|
+
enumerable: true,
|
|
153
|
+
get: function() {
|
|
154
|
+
return Select;
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
//# sourceMappingURL=select-WC_kPqUP.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-WC_kPqUP.cjs","names":[],"sources":["../../src/components/forms/select/Select.tsx"],"sourcesContent":["import type { SelectProps } from \"./types\";\nimport { forwardRef, useState, useRef, useEffect } from \"react\";\nimport { motion, useMotionTemplate, useMotionValue } from \"framer-motion\";\n\nimport { CheckIcon, ChevronDownIcon } from \"../../icons\";\nimport { mergeClassNames } from \"../../../utils\";\n\nexport const Select = forwardRef<HTMLSelectElement, SelectProps>(\n (\n {\n className = \"\",\n containerClassName = \"\",\n triggerClassName = \"\",\n label,\n error,\n helperText,\n options,\n value,\n onChange,\n placeholder = \"Select...\",\n disabled,\n bgClassName = \"bg-background-secondary\",\n ...props\n },\n ref,\n ) => {\n const [open, setOpen] = useState(false);\n const [visible, setVisible] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const hiddenSelectRef = useRef<HTMLSelectElement>(null);\n const mouseX = useMotionValue(0);\n const mouseY = useMotionValue(0);\n const radius = 100;\n\n // Combine refs\n useEffect(() => {\n if (ref && typeof ref === \"function\") {\n ref(hiddenSelectRef.current);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLSelectElement | null>).current =\n hiddenSelectRef.current;\n }\n }, [ref]);\n\n // Close dropdown on outside click\n useEffect(() => {\n const handleClick = (e: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n };\n if (open) {\n document.addEventListener(\"mousedown\", handleClick);\n }\n return () => document.removeEventListener(\"mousedown\", handleClick);\n }, [open]);\n\n const handleMouseMove = (event: React.MouseEvent<HTMLDivElement>) => {\n const { left, top } = event.currentTarget.getBoundingClientRect();\n mouseX.set(event.clientX - left);\n mouseY.set(event.clientY - top);\n };\n\n const selectedOption = options.find((opt) => opt.value === value);\n\n const handleSelect = (optValue: string) => {\n // Trigger onChange with a synthetic event\n if (onChange && hiddenSelectRef.current) {\n const event = {\n target: { value: optValue, name: props.name },\n currentTarget: { value: optValue, name: props.name },\n } as React.ChangeEvent<HTMLSelectElement>;\n onChange(event);\n }\n setOpen(false);\n };\n\n return (\n <div className={mergeClassNames(\"w-full min-w-48\", containerClassName)}>\n {label && (\n <label className=\"mb-2 block text-sm leading-none font-medium text-foreground peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n {label}\n </label>\n )}\n\n {/* Hidden native select for form compatibility */}\n <select\n ref={hiddenSelectRef}\n className=\"sr-only\"\n value={value}\n onChange={onChange}\n disabled={disabled}\n {...props}\n >\n <option value=\"\">{placeholder}</option>\n {options.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n\n {/* Custom styled dropdown */}\n <div\n ref={containerRef}\n className={mergeClassNames(\"relative w-full\", className)}\n >\n <motion.div\n style={{\n backgroundImage: disabled\n ? \"none\"\n : useMotionTemplate`\n radial-gradient(\n ${\n visible ? `${radius}px` : \"0px\"\n } circle at ${mouseX}px ${mouseY}px,\n var(--ds-color-accent),\n transparent 90%\n )\n `,\n }}\n onMouseMove={!disabled ? handleMouseMove : undefined}\n onMouseEnter={!disabled ? () => setVisible(true) : undefined}\n onMouseLeave={!disabled ? () => setVisible(false) : undefined}\n className={mergeClassNames(\n \"group/select rounded-lg p-[2px] transition duration-300 hover:border-accent\",\n disabled\n ? \"bg-muted border-none\"\n : error\n ? \"border-destructive\"\n : \"border-border\",\n )}\n >\n <div\n className={mergeClassNames(\n \"shadow-input flex h-10 w-full cursor-pointer items-center justify-between rounded-md border border-input px-3 py-2 text-sm transition duration-400 ease-in-out group-hover/select:shadow-none\",\n bgClassName,\n disabled ? \"cursor-not-allowed opacity-50\" : \"text-foreground\",\n error &&\n \"border-destructive text-destructive focus-visible:ring-destructive\",\n triggerClassName,\n )}\n onClick={() => {\n if (!disabled) {\n setOpen((o) => !o);\n }\n }}\n onKeyDown={(event) => {\n if (disabled) {\n return;\n }\n\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n setOpen((current) => !current);\n }\n\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n }}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n >\n {selectedOption ? (\n <span className=\"flex-1 truncate text-foreground\">\n {selectedOption.label}\n </span>\n ) : (\n <span className=\"flex-1 text-muted-foreground\">\n {placeholder}\n </span>\n )}\n <span\n className={mergeClassNames(\n \"ml-2 text-muted-foreground transition-transform duration-300\",\n open ? \"rotate-180\" : \"rotate-0\",\n )}\n >\n <ChevronDownIcon\n width={24}\n height={24}\n color=\"currentColor\"\n className=\"h-5 w-5\"\n />\n </span>\n </div>\n </motion.div>\n\n {open && !disabled && (\n <div\n className={mergeClassNames(\n \"absolute right-0 left-0 z-20 mt-1 flex max-h-60 flex-col overflow-auto rounded-lg border border-border bg-background-secondary shadow-3 backdrop-blur-xl transition\",\n )}\n >\n {options.length === 0 && (\n <div className=\"px-3 py-2 text-muted-foreground\">\n No options\n </div>\n )}\n {options.map((opt) => (\n <div\n key={opt.value}\n className={mergeClassNames(\n \"mx-1 my-1 flex cursor-pointer items-center gap-2 rounded-md px-3 py-2 text-sm text-foreground transition\",\n opt.value === value\n ? \"bg-accent-subtle text-accent font-semibold\"\n : \"\",\n \"hover:bg-accent hover:text-on-accent\",\n )}\n onClick={() => handleSelect(opt.value)}\n >\n <span className=\"flex w-5 items-center justify-center\">\n {opt.value === value && (\n <CheckIcon\n className=\"text-accent\"\n width={18}\n height={18}\n />\n )}\n </span>\n <span className=\"min-w-0 flex-1 truncate\">{opt.label}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n\n {error && (\n <p className=\"mt-1 text-sm font-medium text-destructive\">{error}</p>\n )}\n {helperText && !error && (\n <p className=\"mt-1 text-sm text-muted-foreground\">{helperText}</p>\n )}\n </div>\n );\n },\n);\n\nSelect.displayName = \"Select\";\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skeleton-D1S4RyeL.mjs","names":[],"sources":["../../src/components/data-display/skeleton/Skeleton.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\n\nexport type SkeletonVariant = \"text\" | \"circular\" | \"rectangular\" | \"rounded\";\nexport type SkeletonAnimation = \"pulse\" | \"wave\" | \"none\";\n\nexport interface SkeletonProps {\n /** The variant shape of the skeleton */\n variant?: SkeletonVariant;\n /** The animation type */\n animation?: SkeletonAnimation;\n /** Width of the skeleton */\n width?: number | string;\n /** Height of the skeleton */\n height?: number | string;\n /** Border radius for rounded variant */\n borderRadius?: number | string;\n /** Custom className */\n className?: string;\n /** Number of lines for text variant */\n lines?: number;\n /** Gap between lines */\n lineGap?: number | string;\n /** Whether the last line should be shorter */\n lastLineWidth?: number | string;\n}\n\nexport interface SkeletonTextProps extends Omit<SkeletonProps, \"variant\"> {\n /** Number of text lines */\n lines?: number;\n}\n\nexport interface SkeletonAvatarProps extends Omit<\n SkeletonProps,\n \"variant\" | \"width\" | \"height\"\n> {\n /** Size of the avatar */\n size?: number | string;\n}\n\nexport interface SkeletonCardProps {\n /** Whether to show image placeholder */\n showImage?: boolean;\n /** Image height */\n imageHeight?: number | string;\n /** Number of text lines */\n lines?: number;\n /** Whether to show avatar */\n showAvatar?: boolean;\n /** Whether to show action buttons */\n showActions?: boolean;\n /** Custom className */\n className?: string;\n /** Animation type */\n animation?: SkeletonAnimation;\n}\n\nconst animationStyles: Record<SkeletonAnimation, string> = {\n pulse: \"animate-pulse\",\n wave: \"animate-shimmer bg-gradient-to-r from-neutral-200 via-neutral-100 to-neutral-200 dark:from-neutral-700 dark:via-neutral-600 dark:to-neutral-700 bg-[length:200%_100%]\",\n none: \"\",\n};\n\nconst variantStyles: Record<SkeletonVariant, string> = {\n text: \"rounded\",\n circular: \"rounded-full\",\n rectangular: \"rounded-none\",\n rounded: \"rounded-lg\",\n};\n\n// Base Skeleton Component\nconst Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n (\n {\n variant = \"text\",\n animation = \"pulse\",\n width,\n height,\n borderRadius,\n className = \"\",\n lines = 1,\n lineGap = 8,\n lastLineWidth = \"80%\",\n },\n ref,\n ) => {\n const baseStyles = `\n bg-neutral-200 dark:bg-neutral-700\n ${animation !== \"wave\" ? animationStyles[animation] : \"\"}\n ${animation === \"wave\" ? animationStyles.wave : \"\"}\n ${variantStyles[variant]}\n `;\n\n const getSize = () => {\n const style: React.CSSProperties = {};\n\n if (width) {\n style.width = typeof width === \"number\" ? `${width}px` : width;\n } else if (variant === \"text\") {\n style.width = \"100%\";\n }\n\n if (height) {\n style.height = typeof height === \"number\" ? `${height}px` : height;\n } else if (variant === \"text\") {\n style.height = \"1em\";\n } else if (variant === \"circular\") {\n style.width = style.width || \"40px\";\n style.height = style.width;\n }\n\n if (borderRadius) {\n style.borderRadius =\n typeof borderRadius === \"number\" ? `${borderRadius}px` : borderRadius;\n }\n\n return style;\n };\n\n // Render multiple lines for text variant\n if (variant === \"text\" && lines > 1) {\n return (\n <div\n ref={ref}\n className={`flex flex-col ${className}`}\n style={{\n gap: typeof lineGap === \"number\" ? `${lineGap}px` : lineGap,\n }}\n >\n {Array.from({ length: lines }).map((_, index) => (\n <div\n key={index}\n className={baseStyles}\n style={{\n ...getSize(),\n width: index === lines - 1 ? lastLineWidth : width || \"100%\",\n }}\n />\n ))}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={`${baseStyles} ${className}`}\n style={getSize()}\n />\n );\n },\n);\n\nSkeleton.displayName = \"Skeleton\";\n\n// Skeleton Text Component\nconst SkeletonText = forwardRef<HTMLDivElement, SkeletonTextProps>(\n ({ lines = 3, ...props }, ref) => {\n return <Skeleton ref={ref} variant=\"text\" lines={lines} {...props} />;\n },\n);\n\nSkeletonText.displayName = \"SkeletonText\";\n\n// Skeleton Avatar Component\nconst SkeletonAvatar = forwardRef<HTMLDivElement, SkeletonAvatarProps>(\n ({ size = 40, animation = \"pulse\", className = \"\", ...props }, ref) => {\n const sizeValue = typeof size === \"number\" ? `${size}px` : size;\n\n return (\n <Skeleton\n ref={ref}\n variant=\"circular\"\n width={sizeValue}\n height={sizeValue}\n animation={animation}\n className={className}\n {...props}\n />\n );\n },\n);\n\nSkeletonAvatar.displayName = \"SkeletonAvatar\";\n\n// Skeleton Button Component\nconst SkeletonButton = forwardRef<\n HTMLDivElement,\n Omit<SkeletonProps, \"variant\"> & { size?: \"sm\" | \"md\" | \"lg\" }\n>(({ size = \"md\", animation = \"pulse\", className = \"\", ...props }, ref) => {\n const sizeStyles = {\n sm: { width: 80, height: 32 },\n md: { width: 100, height: 40 },\n lg: { width: 120, height: 48 },\n };\n\n return (\n <Skeleton\n ref={ref}\n variant=\"rounded\"\n width={sizeStyles[size].width}\n height={sizeStyles[size].height}\n animation={animation}\n className={className}\n {...props}\n />\n );\n});\n\nSkeletonButton.displayName = \"SkeletonButton\";\n\n// Skeleton Image Component\nconst SkeletonImage = forwardRef<\n HTMLDivElement,\n Omit<SkeletonProps, \"variant\">\n>(\n (\n {\n width = \"100%\",\n height = 200,\n animation = \"pulse\",\n className = \"\",\n ...props\n },\n ref,\n ) => {\n return (\n <Skeleton\n ref={ref}\n variant=\"rounded\"\n width={width}\n height={height}\n animation={animation}\n className={className}\n {...props}\n />\n );\n },\n);\n\nSkeletonImage.displayName = \"SkeletonImage\";\n\n// Skeleton Card Component\nconst SkeletonCard = forwardRef<HTMLDivElement, SkeletonCardProps>(\n (\n {\n showImage = true,\n imageHeight = 200,\n lines = 3,\n showAvatar = false,\n showActions = false,\n className = \"\",\n animation = \"pulse\",\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={`bg-white dark:bg-neutral-800 rounded-xl overflow-hidden shadow-sm border border-neutral-200 dark:border-neutral-700 ${className}`}\n >\n {showImage && (\n <SkeletonImage\n height={imageHeight}\n animation={animation}\n borderRadius={0}\n />\n )}\n\n <div className=\"p-4 flex flex-col gap-4\">\n {showAvatar && (\n <div className=\"flex items-center gap-3\">\n <SkeletonAvatar size={40} animation={animation} />\n <div className=\"flex-1\">\n <Skeleton\n variant=\"text\"\n width=\"60%\"\n height={14}\n animation={animation}\n />\n <Skeleton\n variant=\"text\"\n width=\"40%\"\n height={12}\n animation={animation}\n className=\"mt-2\"\n />\n </div>\n </div>\n )}\n\n <SkeletonText\n lines={lines}\n animation={animation}\n height={14}\n lineGap={10}\n />\n\n {showActions && (\n <div className=\"flex gap-3 mt-2\">\n <SkeletonButton size=\"sm\" animation={animation} />\n <SkeletonButton size=\"sm\" animation={animation} />\n </div>\n )}\n </div>\n </div>\n );\n },\n);\n\nSkeletonCard.displayName = \"SkeletonCard\";\n\n// Skeleton Table Row Component\nconst SkeletonTableRow = forwardRef<\n HTMLDivElement,\n { columns?: number; animation?: SkeletonAnimation; className?: string }\n>(({ columns = 4, animation = \"pulse\", className = \"\" }, ref) => {\n return (\n <div ref={ref} className={`flex items-center gap-4 py-3 ${className}`}>\n {Array.from({ length: columns }).map((_, index) => (\n <Skeleton\n key={index}\n variant=\"text\"\n width={index === 0 ? \"20%\" : `${Math.floor(80 / (columns - 1))}%`}\n height={16}\n animation={animation}\n />\n ))}\n </div>\n );\n});\n\nSkeletonTableRow.displayName = \"SkeletonTableRow\";\n\n// Skeleton List Item Component\nconst SkeletonListItem = forwardRef<\n HTMLDivElement,\n {\n showAvatar?: boolean;\n showSecondaryText?: boolean;\n showAction?: boolean;\n animation?: SkeletonAnimation;\n className?: string;\n }\n>(\n (\n {\n showAvatar = true,\n showSecondaryText = true,\n showAction = false,\n animation = \"pulse\",\n className = \"\",\n },\n ref,\n ) => {\n return (\n <div ref={ref} className={`flex items-center gap-3 py-3 ${className}`}>\n {showAvatar && <SkeletonAvatar size={48} animation={animation} />}\n <div className=\"flex-1\">\n <Skeleton\n variant=\"text\"\n width=\"70%\"\n height={16}\n animation={animation}\n />\n {showSecondaryText && (\n <Skeleton\n variant=\"text\"\n width=\"50%\"\n height={14}\n animation={animation}\n className=\"mt-2\"\n />\n )}\n </div>\n {showAction && <SkeletonButton size=\"sm\" animation={animation} />}\n </div>\n );\n },\n);\n\nSkeletonListItem.displayName = \"SkeletonListItem\";\n\nexport default Skeleton;\nexport {\n Skeleton,\n SkeletonText,\n SkeletonAvatar,\n SkeletonButton,\n SkeletonImage,\n SkeletonCard,\n SkeletonTableRow,\n SkeletonListItem,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skeleton-BhYWOp0Q.mjs","names":[],"sources":["../../src/components/data-display/skeleton/Skeleton.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\n\nexport type SkeletonVariant = \"text\" | \"circular\" | \"rectangular\" | \"rounded\";\nexport type SkeletonAnimation = \"pulse\" | \"wave\" | \"none\";\n\nexport interface SkeletonProps {\n /** The variant shape of the skeleton */\n variant?: SkeletonVariant;\n /** The animation type */\n animation?: SkeletonAnimation;\n /** Width of the skeleton */\n width?: number | string;\n /** Height of the skeleton */\n height?: number | string;\n /** Border radius for rounded variant */\n borderRadius?: number | string;\n /** Custom className */\n className?: string;\n /** Number of lines for text variant */\n lines?: number;\n /** Gap between lines */\n lineGap?: number | string;\n /** Whether the last line should be shorter */\n lastLineWidth?: number | string;\n}\n\nexport interface SkeletonTextProps extends Omit<SkeletonProps, \"variant\"> {\n /** Number of text lines */\n lines?: number;\n}\n\nexport interface SkeletonAvatarProps extends Omit<\n SkeletonProps,\n \"variant\" | \"width\" | \"height\"\n> {\n /** Size of the avatar */\n size?: number | string;\n}\n\nexport interface SkeletonCardProps {\n /** Whether to show image placeholder */\n showImage?: boolean;\n /** Image height */\n imageHeight?: number | string;\n /** Number of text lines */\n lines?: number;\n /** Whether to show avatar */\n showAvatar?: boolean;\n /** Whether to show action buttons */\n showActions?: boolean;\n /** Custom className */\n className?: string;\n /** Animation type */\n animation?: SkeletonAnimation;\n}\n\nconst animationStyles: Record<SkeletonAnimation, string> = {\n pulse: \"animate-pulse\",\n wave: \"animate-shimmer bg-gradient-to-r from-neutral-200 via-neutral-100 to-neutral-200 dark:from-neutral-700 dark:via-neutral-600 dark:to-neutral-700 bg-[length:200%_100%]\",\n none: \"\",\n};\n\nconst variantStyles: Record<SkeletonVariant, string> = {\n text: \"rounded\",\n circular: \"rounded-full\",\n rectangular: \"rounded-none\",\n rounded: \"rounded-lg\",\n};\n\n// Base Skeleton Component\nconst Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n (\n {\n variant = \"text\",\n animation = \"pulse\",\n width,\n height,\n borderRadius,\n className = \"\",\n lines = 1,\n lineGap = 8,\n lastLineWidth = \"80%\",\n },\n ref,\n ) => {\n const baseStyles = `\n bg-neutral-200 dark:bg-neutral-700\n ${animation !== \"wave\" ? animationStyles[animation] : \"\"}\n ${animation === \"wave\" ? animationStyles.wave : \"\"}\n ${variantStyles[variant]}\n `;\n\n const getSize = () => {\n const style: React.CSSProperties = {};\n\n if (width) {\n style.width = typeof width === \"number\" ? `${width}px` : width;\n } else if (variant === \"text\") {\n style.width = \"100%\";\n }\n\n if (height) {\n style.height = typeof height === \"number\" ? `${height}px` : height;\n } else if (variant === \"text\") {\n style.height = \"1em\";\n } else if (variant === \"circular\") {\n style.width = style.width || \"40px\";\n style.height = style.width;\n }\n\n if (borderRadius) {\n style.borderRadius =\n typeof borderRadius === \"number\" ? `${borderRadius}px` : borderRadius;\n }\n\n return style;\n };\n\n // Render multiple lines for text variant\n if (variant === \"text\" && lines > 1) {\n return (\n <div\n ref={ref}\n className={`flex flex-col ${className}`}\n style={{\n gap: typeof lineGap === \"number\" ? `${lineGap}px` : lineGap,\n }}\n >\n {Array.from({ length: lines }).map((_, index) => (\n <div\n key={index}\n className={baseStyles}\n style={{\n ...getSize(),\n width: index === lines - 1 ? lastLineWidth : width || \"100%\",\n }}\n />\n ))}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={`${baseStyles} ${className}`}\n style={getSize()}\n />\n );\n },\n);\n\nSkeleton.displayName = \"Skeleton\";\n\n// Skeleton Text Component\nconst SkeletonText = forwardRef<HTMLDivElement, SkeletonTextProps>(\n ({ lines = 3, ...props }, ref) => {\n return <Skeleton ref={ref} variant=\"text\" lines={lines} {...props} />;\n },\n);\n\nSkeletonText.displayName = \"SkeletonText\";\n\n// Skeleton Avatar Component\nconst SkeletonAvatar = forwardRef<HTMLDivElement, SkeletonAvatarProps>(\n ({ size = 40, animation = \"pulse\", className = \"\", ...props }, ref) => {\n const sizeValue = typeof size === \"number\" ? `${size}px` : size;\n\n return (\n <Skeleton\n ref={ref}\n variant=\"circular\"\n width={sizeValue}\n height={sizeValue}\n animation={animation}\n className={className}\n {...props}\n />\n );\n },\n);\n\nSkeletonAvatar.displayName = \"SkeletonAvatar\";\n\n// Skeleton Button Component\nconst SkeletonButton = forwardRef<\n HTMLDivElement,\n Omit<SkeletonProps, \"variant\"> & { size?: \"sm\" | \"md\" | \"lg\" }\n>(({ size = \"md\", animation = \"pulse\", className = \"\", ...props }, ref) => {\n const sizeStyles = {\n sm: { width: 80, height: 32 },\n md: { width: 100, height: 40 },\n lg: { width: 120, height: 48 },\n };\n\n return (\n <Skeleton\n ref={ref}\n variant=\"rounded\"\n width={sizeStyles[size].width}\n height={sizeStyles[size].height}\n animation={animation}\n className={className}\n {...props}\n />\n );\n});\n\nSkeletonButton.displayName = \"SkeletonButton\";\n\n// Skeleton Image Component\nconst SkeletonImage = forwardRef<\n HTMLDivElement,\n Omit<SkeletonProps, \"variant\">\n>(\n (\n {\n width = \"100%\",\n height = 200,\n animation = \"pulse\",\n className = \"\",\n ...props\n },\n ref,\n ) => {\n return (\n <Skeleton\n ref={ref}\n variant=\"rounded\"\n width={width}\n height={height}\n animation={animation}\n className={className}\n {...props}\n />\n );\n },\n);\n\nSkeletonImage.displayName = \"SkeletonImage\";\n\n// Skeleton Card Component\nconst SkeletonCard = forwardRef<HTMLDivElement, SkeletonCardProps>(\n (\n {\n showImage = true,\n imageHeight = 200,\n lines = 3,\n showAvatar = false,\n showActions = false,\n className = \"\",\n animation = \"pulse\",\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={`bg-white dark:bg-neutral-800 rounded-xl overflow-hidden shadow-sm border border-neutral-200 dark:border-neutral-700 ${className}`}\n >\n {showImage && (\n <SkeletonImage\n height={imageHeight}\n animation={animation}\n borderRadius={0}\n />\n )}\n\n <div className=\"p-4 flex flex-col gap-4\">\n {showAvatar && (\n <div className=\"flex items-center gap-3\">\n <SkeletonAvatar size={40} animation={animation} />\n <div className=\"flex-1\">\n <Skeleton\n variant=\"text\"\n width=\"60%\"\n height={14}\n animation={animation}\n />\n <Skeleton\n variant=\"text\"\n width=\"40%\"\n height={12}\n animation={animation}\n className=\"mt-2\"\n />\n </div>\n </div>\n )}\n\n <SkeletonText\n lines={lines}\n animation={animation}\n height={14}\n lineGap={10}\n />\n\n {showActions && (\n <div className=\"flex gap-3 mt-2\">\n <SkeletonButton size=\"sm\" animation={animation} />\n <SkeletonButton size=\"sm\" animation={animation} />\n </div>\n )}\n </div>\n </div>\n );\n },\n);\n\nSkeletonCard.displayName = \"SkeletonCard\";\n\n// Skeleton Table Row Component\nconst SkeletonTableRow = forwardRef<\n HTMLDivElement,\n { columns?: number; animation?: SkeletonAnimation; className?: string }\n>(({ columns = 4, animation = \"pulse\", className = \"\" }, ref) => {\n return (\n <div ref={ref} className={`flex items-center gap-4 py-3 ${className}`}>\n {Array.from({ length: columns }).map((_, index) => (\n <Skeleton\n key={index}\n variant=\"text\"\n width={index === 0 ? \"20%\" : `${Math.floor(80 / (columns - 1))}%`}\n height={16}\n animation={animation}\n />\n ))}\n </div>\n );\n});\n\nSkeletonTableRow.displayName = \"SkeletonTableRow\";\n\n// Skeleton List Item Component\nconst SkeletonListItem = forwardRef<\n HTMLDivElement,\n {\n showAvatar?: boolean;\n showSecondaryText?: boolean;\n showAction?: boolean;\n animation?: SkeletonAnimation;\n className?: string;\n }\n>(\n (\n {\n showAvatar = true,\n showSecondaryText = true,\n showAction = false,\n animation = \"pulse\",\n className = \"\",\n },\n ref,\n ) => {\n return (\n <div ref={ref} className={`flex items-center gap-3 py-3 ${className}`}>\n {showAvatar && <SkeletonAvatar size={48} animation={animation} />}\n <div className=\"flex-1\">\n <Skeleton\n variant=\"text\"\n width=\"70%\"\n height={16}\n animation={animation}\n />\n {showSecondaryText && (\n <Skeleton\n variant=\"text\"\n width=\"50%\"\n height={14}\n animation={animation}\n className=\"mt-2\"\n />\n )}\n </div>\n {showAction && <SkeletonButton size=\"sm\" animation={animation} />}\n </div>\n );\n },\n);\n\nSkeletonListItem.displayName = \"SkeletonListItem\";\n\nexport default Skeleton;\nexport {\n Skeleton,\n SkeletonText,\n SkeletonAvatar,\n SkeletonButton,\n SkeletonImage,\n SkeletonCard,\n SkeletonTableRow,\n SkeletonListItem,\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skeleton-C-NHrM-w.cjs","names":[],"sources":["../../src/components/data-display/skeleton/Skeleton.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\n\nexport type SkeletonVariant = \"text\" | \"circular\" | \"rectangular\" | \"rounded\";\nexport type SkeletonAnimation = \"pulse\" | \"wave\" | \"none\";\n\nexport interface SkeletonProps {\n /** The variant shape of the skeleton */\n variant?: SkeletonVariant;\n /** The animation type */\n animation?: SkeletonAnimation;\n /** Width of the skeleton */\n width?: number | string;\n /** Height of the skeleton */\n height?: number | string;\n /** Border radius for rounded variant */\n borderRadius?: number | string;\n /** Custom className */\n className?: string;\n /** Number of lines for text variant */\n lines?: number;\n /** Gap between lines */\n lineGap?: number | string;\n /** Whether the last line should be shorter */\n lastLineWidth?: number | string;\n}\n\nexport interface SkeletonTextProps extends Omit<SkeletonProps, \"variant\"> {\n /** Number of text lines */\n lines?: number;\n}\n\nexport interface SkeletonAvatarProps extends Omit<\n SkeletonProps,\n \"variant\" | \"width\" | \"height\"\n> {\n /** Size of the avatar */\n size?: number | string;\n}\n\nexport interface SkeletonCardProps {\n /** Whether to show image placeholder */\n showImage?: boolean;\n /** Image height */\n imageHeight?: number | string;\n /** Number of text lines */\n lines?: number;\n /** Whether to show avatar */\n showAvatar?: boolean;\n /** Whether to show action buttons */\n showActions?: boolean;\n /** Custom className */\n className?: string;\n /** Animation type */\n animation?: SkeletonAnimation;\n}\n\nconst animationStyles: Record<SkeletonAnimation, string> = {\n pulse: \"animate-pulse\",\n wave: \"animate-shimmer bg-gradient-to-r from-neutral-200 via-neutral-100 to-neutral-200 dark:from-neutral-700 dark:via-neutral-600 dark:to-neutral-700 bg-[length:200%_100%]\",\n none: \"\",\n};\n\nconst variantStyles: Record<SkeletonVariant, string> = {\n text: \"rounded\",\n circular: \"rounded-full\",\n rectangular: \"rounded-none\",\n rounded: \"rounded-lg\",\n};\n\n// Base Skeleton Component\nconst Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n (\n {\n variant = \"text\",\n animation = \"pulse\",\n width,\n height,\n borderRadius,\n className = \"\",\n lines = 1,\n lineGap = 8,\n lastLineWidth = \"80%\",\n },\n ref,\n ) => {\n const baseStyles = `\n bg-neutral-200 dark:bg-neutral-700\n ${animation !== \"wave\" ? animationStyles[animation] : \"\"}\n ${animation === \"wave\" ? animationStyles.wave : \"\"}\n ${variantStyles[variant]}\n `;\n\n const getSize = () => {\n const style: React.CSSProperties = {};\n\n if (width) {\n style.width = typeof width === \"number\" ? `${width}px` : width;\n } else if (variant === \"text\") {\n style.width = \"100%\";\n }\n\n if (height) {\n style.height = typeof height === \"number\" ? `${height}px` : height;\n } else if (variant === \"text\") {\n style.height = \"1em\";\n } else if (variant === \"circular\") {\n style.width = style.width || \"40px\";\n style.height = style.width;\n }\n\n if (borderRadius) {\n style.borderRadius =\n typeof borderRadius === \"number\" ? `${borderRadius}px` : borderRadius;\n }\n\n return style;\n };\n\n // Render multiple lines for text variant\n if (variant === \"text\" && lines > 1) {\n return (\n <div\n ref={ref}\n className={`flex flex-col ${className}`}\n style={{\n gap: typeof lineGap === \"number\" ? `${lineGap}px` : lineGap,\n }}\n >\n {Array.from({ length: lines }).map((_, index) => (\n <div\n key={index}\n className={baseStyles}\n style={{\n ...getSize(),\n width: index === lines - 1 ? lastLineWidth : width || \"100%\",\n }}\n />\n ))}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={`${baseStyles} ${className}`}\n style={getSize()}\n />\n );\n },\n);\n\nSkeleton.displayName = \"Skeleton\";\n\n// Skeleton Text Component\nconst SkeletonText = forwardRef<HTMLDivElement, SkeletonTextProps>(\n ({ lines = 3, ...props }, ref) => {\n return <Skeleton ref={ref} variant=\"text\" lines={lines} {...props} />;\n },\n);\n\nSkeletonText.displayName = \"SkeletonText\";\n\n// Skeleton Avatar Component\nconst SkeletonAvatar = forwardRef<HTMLDivElement, SkeletonAvatarProps>(\n ({ size = 40, animation = \"pulse\", className = \"\", ...props }, ref) => {\n const sizeValue = typeof size === \"number\" ? `${size}px` : size;\n\n return (\n <Skeleton\n ref={ref}\n variant=\"circular\"\n width={sizeValue}\n height={sizeValue}\n animation={animation}\n className={className}\n {...props}\n />\n );\n },\n);\n\nSkeletonAvatar.displayName = \"SkeletonAvatar\";\n\n// Skeleton Button Component\nconst SkeletonButton = forwardRef<\n HTMLDivElement,\n Omit<SkeletonProps, \"variant\"> & { size?: \"sm\" | \"md\" | \"lg\" }\n>(({ size = \"md\", animation = \"pulse\", className = \"\", ...props }, ref) => {\n const sizeStyles = {\n sm: { width: 80, height: 32 },\n md: { width: 100, height: 40 },\n lg: { width: 120, height: 48 },\n };\n\n return (\n <Skeleton\n ref={ref}\n variant=\"rounded\"\n width={sizeStyles[size].width}\n height={sizeStyles[size].height}\n animation={animation}\n className={className}\n {...props}\n />\n );\n});\n\nSkeletonButton.displayName = \"SkeletonButton\";\n\n// Skeleton Image Component\nconst SkeletonImage = forwardRef<\n HTMLDivElement,\n Omit<SkeletonProps, \"variant\">\n>(\n (\n {\n width = \"100%\",\n height = 200,\n animation = \"pulse\",\n className = \"\",\n ...props\n },\n ref,\n ) => {\n return (\n <Skeleton\n ref={ref}\n variant=\"rounded\"\n width={width}\n height={height}\n animation={animation}\n className={className}\n {...props}\n />\n );\n },\n);\n\nSkeletonImage.displayName = \"SkeletonImage\";\n\n// Skeleton Card Component\nconst SkeletonCard = forwardRef<HTMLDivElement, SkeletonCardProps>(\n (\n {\n showImage = true,\n imageHeight = 200,\n lines = 3,\n showAvatar = false,\n showActions = false,\n className = \"\",\n animation = \"pulse\",\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={`bg-white dark:bg-neutral-800 rounded-xl overflow-hidden shadow-sm border border-neutral-200 dark:border-neutral-700 ${className}`}\n >\n {showImage && (\n <SkeletonImage\n height={imageHeight}\n animation={animation}\n borderRadius={0}\n />\n )}\n\n <div className=\"p-4 flex flex-col gap-4\">\n {showAvatar && (\n <div className=\"flex items-center gap-3\">\n <SkeletonAvatar size={40} animation={animation} />\n <div className=\"flex-1\">\n <Skeleton\n variant=\"text\"\n width=\"60%\"\n height={14}\n animation={animation}\n />\n <Skeleton\n variant=\"text\"\n width=\"40%\"\n height={12}\n animation={animation}\n className=\"mt-2\"\n />\n </div>\n </div>\n )}\n\n <SkeletonText\n lines={lines}\n animation={animation}\n height={14}\n lineGap={10}\n />\n\n {showActions && (\n <div className=\"flex gap-3 mt-2\">\n <SkeletonButton size=\"sm\" animation={animation} />\n <SkeletonButton size=\"sm\" animation={animation} />\n </div>\n )}\n </div>\n </div>\n );\n },\n);\n\nSkeletonCard.displayName = \"SkeletonCard\";\n\n// Skeleton Table Row Component\nconst SkeletonTableRow = forwardRef<\n HTMLDivElement,\n { columns?: number; animation?: SkeletonAnimation; className?: string }\n>(({ columns = 4, animation = \"pulse\", className = \"\" }, ref) => {\n return (\n <div ref={ref} className={`flex items-center gap-4 py-3 ${className}`}>\n {Array.from({ length: columns }).map((_, index) => (\n <Skeleton\n key={index}\n variant=\"text\"\n width={index === 0 ? \"20%\" : `${Math.floor(80 / (columns - 1))}%`}\n height={16}\n animation={animation}\n />\n ))}\n </div>\n );\n});\n\nSkeletonTableRow.displayName = \"SkeletonTableRow\";\n\n// Skeleton List Item Component\nconst SkeletonListItem = forwardRef<\n HTMLDivElement,\n {\n showAvatar?: boolean;\n showSecondaryText?: boolean;\n showAction?: boolean;\n animation?: SkeletonAnimation;\n className?: string;\n }\n>(\n (\n {\n showAvatar = true,\n showSecondaryText = true,\n showAction = false,\n animation = \"pulse\",\n className = \"\",\n },\n ref,\n ) => {\n return (\n <div ref={ref} className={`flex items-center gap-3 py-3 ${className}`}>\n {showAvatar && <SkeletonAvatar size={48} animation={animation} />}\n <div className=\"flex-1\">\n <Skeleton\n variant=\"text\"\n width=\"70%\"\n height={16}\n animation={animation}\n />\n {showSecondaryText && (\n <Skeleton\n variant=\"text\"\n width=\"50%\"\n height={14}\n animation={animation}\n className=\"mt-2\"\n />\n )}\n </div>\n {showAction && <SkeletonButton size=\"sm\" animation={animation} />}\n </div>\n );\n },\n);\n\nSkeletonListItem.displayName = \"SkeletonListItem\";\n\nexport default Skeleton;\nexport {\n Skeleton,\n SkeletonText,\n SkeletonAvatar,\n SkeletonButton,\n SkeletonImage,\n SkeletonCard,\n SkeletonTableRow,\n SkeletonListItem,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skeleton-DTXpHYYB.cjs","names":[],"sources":["../../src/components/data-display/skeleton/Skeleton.tsx"],"sourcesContent":["import { forwardRef } from \"react\";\n\nexport type SkeletonVariant = \"text\" | \"circular\" | \"rectangular\" | \"rounded\";\nexport type SkeletonAnimation = \"pulse\" | \"wave\" | \"none\";\n\nexport interface SkeletonProps {\n /** The variant shape of the skeleton */\n variant?: SkeletonVariant;\n /** The animation type */\n animation?: SkeletonAnimation;\n /** Width of the skeleton */\n width?: number | string;\n /** Height of the skeleton */\n height?: number | string;\n /** Border radius for rounded variant */\n borderRadius?: number | string;\n /** Custom className */\n className?: string;\n /** Number of lines for text variant */\n lines?: number;\n /** Gap between lines */\n lineGap?: number | string;\n /** Whether the last line should be shorter */\n lastLineWidth?: number | string;\n}\n\nexport interface SkeletonTextProps extends Omit<SkeletonProps, \"variant\"> {\n /** Number of text lines */\n lines?: number;\n}\n\nexport interface SkeletonAvatarProps extends Omit<\n SkeletonProps,\n \"variant\" | \"width\" | \"height\"\n> {\n /** Size of the avatar */\n size?: number | string;\n}\n\nexport interface SkeletonCardProps {\n /** Whether to show image placeholder */\n showImage?: boolean;\n /** Image height */\n imageHeight?: number | string;\n /** Number of text lines */\n lines?: number;\n /** Whether to show avatar */\n showAvatar?: boolean;\n /** Whether to show action buttons */\n showActions?: boolean;\n /** Custom className */\n className?: string;\n /** Animation type */\n animation?: SkeletonAnimation;\n}\n\nconst animationStyles: Record<SkeletonAnimation, string> = {\n pulse: \"animate-pulse\",\n wave: \"animate-shimmer bg-gradient-to-r from-neutral-200 via-neutral-100 to-neutral-200 dark:from-neutral-700 dark:via-neutral-600 dark:to-neutral-700 bg-[length:200%_100%]\",\n none: \"\",\n};\n\nconst variantStyles: Record<SkeletonVariant, string> = {\n text: \"rounded\",\n circular: \"rounded-full\",\n rectangular: \"rounded-none\",\n rounded: \"rounded-lg\",\n};\n\n// Base Skeleton Component\nconst Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n (\n {\n variant = \"text\",\n animation = \"pulse\",\n width,\n height,\n borderRadius,\n className = \"\",\n lines = 1,\n lineGap = 8,\n lastLineWidth = \"80%\",\n },\n ref,\n ) => {\n const baseStyles = `\n bg-neutral-200 dark:bg-neutral-700\n ${animation !== \"wave\" ? animationStyles[animation] : \"\"}\n ${animation === \"wave\" ? animationStyles.wave : \"\"}\n ${variantStyles[variant]}\n `;\n\n const getSize = () => {\n const style: React.CSSProperties = {};\n\n if (width) {\n style.width = typeof width === \"number\" ? `${width}px` : width;\n } else if (variant === \"text\") {\n style.width = \"100%\";\n }\n\n if (height) {\n style.height = typeof height === \"number\" ? `${height}px` : height;\n } else if (variant === \"text\") {\n style.height = \"1em\";\n } else if (variant === \"circular\") {\n style.width = style.width || \"40px\";\n style.height = style.width;\n }\n\n if (borderRadius) {\n style.borderRadius =\n typeof borderRadius === \"number\" ? `${borderRadius}px` : borderRadius;\n }\n\n return style;\n };\n\n // Render multiple lines for text variant\n if (variant === \"text\" && lines > 1) {\n return (\n <div\n ref={ref}\n className={`flex flex-col ${className}`}\n style={{\n gap: typeof lineGap === \"number\" ? `${lineGap}px` : lineGap,\n }}\n >\n {Array.from({ length: lines }).map((_, index) => (\n <div\n key={index}\n className={baseStyles}\n style={{\n ...getSize(),\n width: index === lines - 1 ? lastLineWidth : width || \"100%\",\n }}\n />\n ))}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={`${baseStyles} ${className}`}\n style={getSize()}\n />\n );\n },\n);\n\nSkeleton.displayName = \"Skeleton\";\n\n// Skeleton Text Component\nconst SkeletonText = forwardRef<HTMLDivElement, SkeletonTextProps>(\n ({ lines = 3, ...props }, ref) => {\n return <Skeleton ref={ref} variant=\"text\" lines={lines} {...props} />;\n },\n);\n\nSkeletonText.displayName = \"SkeletonText\";\n\n// Skeleton Avatar Component\nconst SkeletonAvatar = forwardRef<HTMLDivElement, SkeletonAvatarProps>(\n ({ size = 40, animation = \"pulse\", className = \"\", ...props }, ref) => {\n const sizeValue = typeof size === \"number\" ? `${size}px` : size;\n\n return (\n <Skeleton\n ref={ref}\n variant=\"circular\"\n width={sizeValue}\n height={sizeValue}\n animation={animation}\n className={className}\n {...props}\n />\n );\n },\n);\n\nSkeletonAvatar.displayName = \"SkeletonAvatar\";\n\n// Skeleton Button Component\nconst SkeletonButton = forwardRef<\n HTMLDivElement,\n Omit<SkeletonProps, \"variant\"> & { size?: \"sm\" | \"md\" | \"lg\" }\n>(({ size = \"md\", animation = \"pulse\", className = \"\", ...props }, ref) => {\n const sizeStyles = {\n sm: { width: 80, height: 32 },\n md: { width: 100, height: 40 },\n lg: { width: 120, height: 48 },\n };\n\n return (\n <Skeleton\n ref={ref}\n variant=\"rounded\"\n width={sizeStyles[size].width}\n height={sizeStyles[size].height}\n animation={animation}\n className={className}\n {...props}\n />\n );\n});\n\nSkeletonButton.displayName = \"SkeletonButton\";\n\n// Skeleton Image Component\nconst SkeletonImage = forwardRef<\n HTMLDivElement,\n Omit<SkeletonProps, \"variant\">\n>(\n (\n {\n width = \"100%\",\n height = 200,\n animation = \"pulse\",\n className = \"\",\n ...props\n },\n ref,\n ) => {\n return (\n <Skeleton\n ref={ref}\n variant=\"rounded\"\n width={width}\n height={height}\n animation={animation}\n className={className}\n {...props}\n />\n );\n },\n);\n\nSkeletonImage.displayName = \"SkeletonImage\";\n\n// Skeleton Card Component\nconst SkeletonCard = forwardRef<HTMLDivElement, SkeletonCardProps>(\n (\n {\n showImage = true,\n imageHeight = 200,\n lines = 3,\n showAvatar = false,\n showActions = false,\n className = \"\",\n animation = \"pulse\",\n },\n ref,\n ) => {\n return (\n <div\n ref={ref}\n className={`bg-white dark:bg-neutral-800 rounded-xl overflow-hidden shadow-sm border border-neutral-200 dark:border-neutral-700 ${className}`}\n >\n {showImage && (\n <SkeletonImage\n height={imageHeight}\n animation={animation}\n borderRadius={0}\n />\n )}\n\n <div className=\"p-4 flex flex-col gap-4\">\n {showAvatar && (\n <div className=\"flex items-center gap-3\">\n <SkeletonAvatar size={40} animation={animation} />\n <div className=\"flex-1\">\n <Skeleton\n variant=\"text\"\n width=\"60%\"\n height={14}\n animation={animation}\n />\n <Skeleton\n variant=\"text\"\n width=\"40%\"\n height={12}\n animation={animation}\n className=\"mt-2\"\n />\n </div>\n </div>\n )}\n\n <SkeletonText\n lines={lines}\n animation={animation}\n height={14}\n lineGap={10}\n />\n\n {showActions && (\n <div className=\"flex gap-3 mt-2\">\n <SkeletonButton size=\"sm\" animation={animation} />\n <SkeletonButton size=\"sm\" animation={animation} />\n </div>\n )}\n </div>\n </div>\n );\n },\n);\n\nSkeletonCard.displayName = \"SkeletonCard\";\n\n// Skeleton Table Row Component\nconst SkeletonTableRow = forwardRef<\n HTMLDivElement,\n { columns?: number; animation?: SkeletonAnimation; className?: string }\n>(({ columns = 4, animation = \"pulse\", className = \"\" }, ref) => {\n return (\n <div ref={ref} className={`flex items-center gap-4 py-3 ${className}`}>\n {Array.from({ length: columns }).map((_, index) => (\n <Skeleton\n key={index}\n variant=\"text\"\n width={index === 0 ? \"20%\" : `${Math.floor(80 / (columns - 1))}%`}\n height={16}\n animation={animation}\n />\n ))}\n </div>\n );\n});\n\nSkeletonTableRow.displayName = \"SkeletonTableRow\";\n\n// Skeleton List Item Component\nconst SkeletonListItem = forwardRef<\n HTMLDivElement,\n {\n showAvatar?: boolean;\n showSecondaryText?: boolean;\n showAction?: boolean;\n animation?: SkeletonAnimation;\n className?: string;\n }\n>(\n (\n {\n showAvatar = true,\n showSecondaryText = true,\n showAction = false,\n animation = \"pulse\",\n className = \"\",\n },\n ref,\n ) => {\n return (\n <div ref={ref} className={`flex items-center gap-3 py-3 ${className}`}>\n {showAvatar && <SkeletonAvatar size={48} animation={animation} />}\n <div className=\"flex-1\">\n <Skeleton\n variant=\"text\"\n width=\"70%\"\n height={16}\n animation={animation}\n />\n {showSecondaryText && (\n <Skeleton\n variant=\"text\"\n width=\"50%\"\n height={14}\n animation={animation}\n className=\"mt-2\"\n />\n )}\n </div>\n {showAction && <SkeletonButton size=\"sm\" animation={animation} />}\n </div>\n );\n },\n);\n\nSkeletonListItem.displayName = \"SkeletonListItem\";\n\nexport default Skeleton;\nexport {\n Skeleton,\n SkeletonText,\n SkeletonAvatar,\n SkeletonButton,\n SkeletonImage,\n SkeletonCard,\n SkeletonTableRow,\n SkeletonListItem,\n};\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { g as AudioWaveIcon } from "./icons-DuumN7z-.mjs";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
//#region src/components/spinners/Audio.tsx
|
|
4
4
|
var Audio = ({ className = void 0, ...props }) => /* @__PURE__ */ jsx(AudioWaveIcon, {
|
|
@@ -8,4 +8,4 @@ var Audio = ({ className = void 0, ...props }) => /* @__PURE__ */ jsx(AudioWaveI
|
|
|
8
8
|
//#endregion
|
|
9
9
|
export { Audio as t };
|
|
10
10
|
|
|
11
|
-
//# sourceMappingURL=spinners-
|
|
11
|
+
//# sourceMappingURL=spinners-BBCWD2gw.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spinners-
|
|
1
|
+
{"version":3,"file":"spinners-BBCWD2gw.mjs","names":[],"sources":["../../src/components/spinners/Audio.tsx"],"sourcesContent":["import { AudioWaveIcon } from \"../icons\";\n\nconst Audio = ({\n className = undefined, // String\n ...props\n}) => (\n <AudioWaveIcon\n className={`svg-loaders-svg${className ? ` ${className}` : \"\"}`}\n {...props}\n />\n);\n\nexport { Audio };\n"],"mappings":";;;AAEA,IAAM,SAAS,EACb,YAAY,KAAA,GACZ,GAAG,YAEH,oBAAC,eAAD;CACE,WAAW,kBAAkB,YAAY,IAAI,cAAc;CAC3D,GAAI;CACJ,CAAA"}
|
|
@@ -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_jsx_runtime = require("react/jsx-runtime");
|
|
4
4
|
//#region src/components/spinners/Audio.tsx
|
|
5
5
|
var Audio = ({ className = void 0, ...props }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_icons.AudioWaveIcon, {
|
|
@@ -14,4 +14,4 @@ Object.defineProperty(exports, "Audio", {
|
|
|
14
14
|
}
|
|
15
15
|
});
|
|
16
16
|
|
|
17
|
-
//# sourceMappingURL=spinners-
|
|
17
|
+
//# sourceMappingURL=spinners-BL4ERCCw.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spinners-
|
|
1
|
+
{"version":3,"file":"spinners-BL4ERCCw.cjs","names":[],"sources":["../../src/components/spinners/Audio.tsx"],"sourcesContent":["import { AudioWaveIcon } from \"../icons\";\n\nconst Audio = ({\n className = undefined, // String\n ...props\n}) => (\n <AudioWaveIcon\n className={`svg-loaders-svg${className ? ` ${className}` : \"\"}`}\n {...props}\n />\n);\n\nexport { Audio };\n"],"mappings":";;;;AAEA,IAAM,SAAS,EACb,YAAY,KAAA,GACZ,GAAG,YAEH,iBAAA,GAAA,kBAAA,KAAC,cAAA,eAAD;CACE,WAAW,kBAAkB,YAAY,IAAI,cAAc;CAC3D,GAAI;CACJ,CAAA"}
|
|
@@ -23,12 +23,12 @@ var sizeConfig = {
|
|
|
23
23
|
}
|
|
24
24
|
};
|
|
25
25
|
var defaultColors = [
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
26
|
+
"var(--ds-color-accent)",
|
|
27
|
+
"var(--ds-color-accent-hover)",
|
|
28
|
+
"var(--ds-color-info)",
|
|
29
|
+
"var(--ds-color-success)",
|
|
30
|
+
"var(--ds-color-warning)",
|
|
31
|
+
"var(--ds-color-danger)"
|
|
32
32
|
];
|
|
33
33
|
var SplashCursor = ({ className, color, secondaryColor, size = "md", particleCount = 12, enabled = true, blur = 0, opacity = .6, duration = 800, smooth = true, smoothFactor = .15, style, children, variant = "splash" }) => {
|
|
34
34
|
const containerRef = (0, react.useRef)(null);
|
|
@@ -206,6 +206,7 @@ var SplashCursor = ({ className, color, secondaryColor, size = "md", particleCou
|
|
|
206
206
|
}
|
|
207
207
|
};
|
|
208
208
|
const cursorPos = smooth ? smoothPos : mousePos;
|
|
209
|
+
const glowColor = color && secondaryColor ? `color-mix(in srgb, ${color} 60%, ${secondaryColor})` : color ? `color-mix(in srgb, ${color} 35%, transparent)` : "color-mix(in srgb, var(--ds-color-accent) 35%, transparent)";
|
|
209
210
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
210
211
|
ref: containerRef,
|
|
211
212
|
className: require_utils.mergeClassNames("relative overflow-hidden", className),
|
|
@@ -223,7 +224,7 @@ var SplashCursor = ({ className, color, secondaryColor, size = "md", particleCou
|
|
|
223
224
|
width: sizeConfig[size].base * 2,
|
|
224
225
|
height: sizeConfig[size].base * 2,
|
|
225
226
|
transform: "translate(-50%, -50%)",
|
|
226
|
-
background: `radial-gradient(circle, ${
|
|
227
|
+
background: `radial-gradient(circle, ${glowColor} 0%, transparent 70%)`,
|
|
227
228
|
filter: blur ? `blur(${blur}px)` : void 0
|
|
228
229
|
},
|
|
229
230
|
initial: {
|
|
@@ -275,4 +276,4 @@ Object.defineProperty(exports, "SplashCursor", {
|
|
|
275
276
|
}
|
|
276
277
|
});
|
|
277
278
|
|
|
278
|
-
//# sourceMappingURL=splash-cursor-
|
|
279
|
+
//# sourceMappingURL=splash-cursor-BVSmbcIX.cjs.map
|