erp-pro-ui 0.1.4 → 0.1.6
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 +137 -28
- 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/animated-content.cjs +1 -1
- package/dist/animated-content.mjs +1 -1
- package/dist/animations.css +2 -2
- package/dist/ascii-text.cjs +1 -1
- package/dist/ascii-text.mjs +1 -1
- package/dist/background-gradient-animation.cjs +1 -1
- package/dist/background-gradient-animation.mjs +1 -1
- package/dist/button-hover-border-gradient.cjs +1 -1
- package/dist/button-hover-border-gradient.mjs +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.mjs +1 -1
- package/dist/calendar.cjs +1 -1
- package/dist/calendar.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 +2 -1
- package/dist/charts.mjs +2 -2
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.mjs +1 -1
- package/dist/chip.cjs +3 -1
- package/dist/chip.mjs +2 -2
- package/dist/chroma-grid.cjs +1 -1
- package/dist/chroma-grid.mjs +1 -1
- package/dist/chunks/{HoverBorderGradient-Df3PKpw6.cjs → HoverBorderGradient-C5D6lGg0.cjs} +8 -8
- package/dist/chunks/HoverBorderGradient-C5D6lGg0.cjs.map +1 -0
- package/dist/chunks/{HoverBorderGradient-DVFEIXFQ.mjs → HoverBorderGradient-CduqqQgX.mjs} +8 -8
- package/dist/chunks/HoverBorderGradient-CduqqQgX.mjs.map +1 -0
- package/dist/chunks/{accordion-Cbt-SJhj.mjs → accordion-6zxJUYXr.mjs} +8 -8
- package/dist/chunks/accordion-6zxJUYXr.mjs.map +1 -0
- package/dist/chunks/{accordion-pfJR8YYA.cjs → accordion-CmB6EidC.cjs} +8 -8
- package/dist/chunks/accordion-CmB6EidC.cjs.map +1 -0
- package/dist/chunks/alert-C5KEeQqh.cjs +81 -0
- package/dist/chunks/alert-C5KEeQqh.cjs.map +1 -0
- package/dist/chunks/alert-XVmYJgds.mjs +75 -0
- package/dist/chunks/alert-XVmYJgds.mjs.map +1 -0
- package/dist/chunks/{animated-content-CttSmLWV.cjs → animated-content-CLsFnjgr.cjs} +1 -1
- package/dist/chunks/{animated-content-CttSmLWV.cjs.map → animated-content-CLsFnjgr.cjs.map} +1 -1
- package/dist/chunks/{animated-content-C1uNg1xO.mjs → animated-content-bK6xp-vc.mjs} +1 -1
- package/dist/chunks/{animated-content-C1uNg1xO.mjs.map → animated-content-bK6xp-vc.mjs.map} +1 -1
- package/dist/chunks/{ascii-text-DlmArZXh.cjs → ascii-text-BP-BBy0-.cjs} +3 -3
- package/dist/chunks/{ascii-text-DlmArZXh.cjs.map → ascii-text-BP-BBy0-.cjs.map} +1 -1
- package/dist/chunks/{ascii-text-C5tyNsR3.mjs → ascii-text-RJxX3wCC.mjs} +1 -1
- package/dist/chunks/{ascii-text-C5tyNsR3.mjs.map → ascii-text-RJxX3wCC.mjs.map} +1 -1
- package/dist/chunks/{background-gradient-animation-BL-lnrJe.mjs → background-gradient-animation-DpKJ3ecq.mjs} +3 -3
- package/dist/chunks/{background-gradient-animation-BL-lnrJe.mjs.map → background-gradient-animation-DpKJ3ecq.mjs.map} +1 -1
- package/dist/chunks/{background-gradient-animation-CXV9GDH8.cjs → background-gradient-animation-II9hdrgB.cjs} +3 -3
- package/dist/chunks/{background-gradient-animation-CXV9GDH8.cjs.map → background-gradient-animation-II9hdrgB.cjs.map} +1 -1
- package/dist/chunks/{button-B0Lhj0AS.mjs → button-DddUhuR-.mjs} +6 -5
- package/dist/chunks/button-DddUhuR-.mjs.map +1 -0
- package/dist/chunks/{button-hover-border-gradient-CvoM60wz.mjs → button-hover-border-gradient-DFppVRI4.mjs} +3 -3
- package/dist/chunks/{button-hover-border-gradient-CvoM60wz.mjs.map → button-hover-border-gradient-DFppVRI4.mjs.map} +1 -1
- package/dist/chunks/{button-hover-border-gradient-CSHXM5Cm.cjs → button-hover-border-gradient-DX2lBG5C.cjs} +3 -3
- package/dist/chunks/{button-hover-border-gradient-CSHXM5Cm.cjs.map → button-hover-border-gradient-DX2lBG5C.cjs.map} +1 -1
- package/dist/chunks/{button-CZL6kFzT.cjs → button-xqernofO.cjs} +6 -5
- package/dist/chunks/button-xqernofO.cjs.map +1 -0
- package/dist/chunks/{calendar-DrCgT_pj.mjs → calendar-Cp84V2rY.mjs} +7 -7
- package/dist/chunks/calendar-Cp84V2rY.mjs.map +1 -0
- package/dist/chunks/{calendar-Cpp_Rc7T.cjs → calendar-DuCKr6b7.cjs} +7 -7
- package/dist/chunks/calendar-DuCKr6b7.cjs.map +1 -0
- package/dist/chunks/{card-C5_tFK6Q.cjs → card-CqPDr6Tt.cjs} +4 -4
- package/dist/chunks/card-CqPDr6Tt.cjs.map +1 -0
- package/dist/chunks/{card-Dh8wNv8N.mjs → card-SpHHNB0c.mjs} +4 -4
- package/dist/chunks/card-SpHHNB0c.mjs.map +1 -0
- package/dist/chunks/{carousel-BYwqI4cA.mjs → carousel-C1skQ65z.mjs} +14 -14
- package/dist/chunks/carousel-C1skQ65z.mjs.map +1 -0
- package/dist/chunks/{carousel-C1338X8h.cjs → carousel-YlRLOGkM.cjs} +11 -11
- package/dist/chunks/carousel-YlRLOGkM.cjs.map +1 -0
- package/dist/chunks/{charts-BYvM4TMG.mjs → charts-C-Qee_JY.mjs} +118 -19
- package/dist/chunks/charts-C-Qee_JY.mjs.map +1 -0
- package/dist/chunks/{charts-DbxyHtlX.cjs → charts-CZEYcr6X.cjs} +119 -14
- package/dist/chunks/charts-CZEYcr6X.cjs.map +1 -0
- package/dist/chunks/{checkbox-Pr49U9F1.mjs → checkbox-DjGpvMyo.mjs} +12 -12
- package/dist/chunks/checkbox-DjGpvMyo.mjs.map +1 -0
- package/dist/chunks/{checkbox-CxOcjoGP.cjs → checkbox-NM_iPd6S.cjs} +10 -10
- package/dist/chunks/checkbox-NM_iPd6S.cjs.map +1 -0
- package/dist/chunks/chip-BY83_HK7.cjs +203 -0
- package/dist/chunks/chip-BY83_HK7.cjs.map +1 -0
- package/dist/chunks/chip-CbO8-1lK.mjs +185 -0
- package/dist/chunks/chip-CbO8-1lK.mjs.map +1 -0
- package/dist/chunks/{chroma-grid-BAo6V5A7.mjs → chroma-grid-CexX28VQ.mjs} +6 -6
- package/dist/chunks/chroma-grid-CexX28VQ.mjs.map +1 -0
- package/dist/chunks/{chroma-grid-CIk0dsNS.cjs → chroma-grid-DP__XtmV.cjs} +6 -6
- package/dist/chunks/chroma-grid-DP__XtmV.cjs.map +1 -0
- package/dist/chunks/{color-palette-euKQMWlV.mjs → color-palette-BU1cI6XP.mjs} +166 -132
- package/dist/chunks/color-palette-BU1cI6XP.mjs.map +1 -0
- package/dist/chunks/{color-palette-2TuEMkAn.cjs → color-palette-ThIKMhT1.cjs} +168 -133
- package/dist/chunks/color-palette-ThIKMhT1.cjs.map +1 -0
- package/dist/chunks/{combobox-CwGubKTt.cjs → combobox-B7UIcjsI.cjs} +31 -23
- package/dist/chunks/combobox-B7UIcjsI.cjs.map +1 -0
- package/dist/chunks/{combobox-DrFmkI0F.mjs → combobox-D6WnThIQ.mjs} +30 -22
- package/dist/chunks/combobox-D6WnThIQ.mjs.map +1 -0
- package/dist/chunks/data-table-KDM8AEwU.mjs +1555 -0
- package/dist/chunks/data-table-KDM8AEwU.mjs.map +1 -0
- package/dist/chunks/data-table-z-YDzi0N.cjs +1646 -0
- package/dist/chunks/data-table-z-YDzi0N.cjs.map +1 -0
- package/dist/chunks/{date-picker-CNPORxhv.mjs → date-picker-Bh6_p4bD.mjs} +39 -19
- package/dist/chunks/date-picker-Bh6_p4bD.mjs.map +1 -0
- package/dist/chunks/{date-picker-CZo68Fkl.cjs → date-picker-CfCvp6Tj.cjs} +39 -19
- package/dist/chunks/date-picker-CfCvp6Tj.cjs.map +1 -0
- package/dist/chunks/{dialog-DUWnV9tN.mjs → dialog-BibwiFLY.mjs} +33 -30
- package/dist/chunks/dialog-BibwiFLY.mjs.map +1 -0
- package/dist/chunks/{dialog-CYFiWN8M.cjs → dialog-I141I0nc.cjs} +33 -30
- package/dist/chunks/dialog-I141I0nc.cjs.map +1 -0
- package/dist/chunks/{drawer-D82Jz6KO.mjs → drawer-DsE8Pb8e.mjs} +11 -11
- package/dist/chunks/drawer-DsE8Pb8e.mjs.map +1 -0
- package/dist/chunks/{drawer-CLjsYdxN.cjs → drawer-EC9eopGX.cjs} +11 -11
- package/dist/chunks/drawer-EC9eopGX.cjs.map +1 -0
- package/dist/chunks/{form-B2vcaHwh.mjs → form-CRwpjFWu.mjs} +10 -10
- package/dist/chunks/form-CRwpjFWu.mjs.map +1 -0
- package/dist/chunks/{form-CzH9GQc6.cjs → form-DaGyqM97.cjs} +10 -10
- package/dist/chunks/form-DaGyqM97.cjs.map +1 -0
- package/dist/chunks/{gradual-blur-B9GoY8o1.cjs → gradual-blur-Di7MBs7M.cjs} +1 -1
- package/dist/chunks/{gradual-blur-B9GoY8o1.cjs.map → gradual-blur-Di7MBs7M.cjs.map} +1 -1
- package/dist/chunks/{gradual-blur-Bl3dOMEz.mjs → gradual-blur-pt0UiMEy.mjs} +1 -1
- package/dist/chunks/{gradual-blur-Bl3dOMEz.mjs.map → gradual-blur-pt0UiMEy.mjs.map} +1 -1
- package/dist/chunks/{hover-card-xqwpmZNm.mjs → hover-card-C3Xa18Ov.mjs} +7 -8
- package/dist/chunks/hover-card-C3Xa18Ov.mjs.map +1 -0
- package/dist/chunks/{hover-card-v0QwmVBU.cjs → hover-card-D78E07hk.cjs} +7 -8
- package/dist/chunks/hover-card-D78E07hk.cjs.map +1 -0
- package/dist/chunks/{icons-BxIzP2jd.cjs → icons-CRanVZB1.cjs} +8 -8
- package/dist/chunks/icons-CRanVZB1.cjs.map +1 -0
- package/dist/chunks/{icons-DuumN7z-.mjs → icons-bx3nrxNv.mjs} +8 -8
- package/dist/chunks/icons-bx3nrxNv.mjs.map +1 -0
- package/dist/chunks/{input-Bt_r_B_c.mjs → input-CpARxvFi.mjs} +14 -14
- package/dist/chunks/input-CpARxvFi.mjs.map +1 -0
- package/dist/chunks/{input-BWM6G7jq.cjs → input-DTW_8EwG.cjs} +14 -14
- package/dist/chunks/input-DTW_8EwG.cjs.map +1 -0
- package/dist/chunks/{label-KPA-yYOF.mjs → label-BVH02Yvq.mjs} +1 -1
- package/dist/chunks/{label-KPA-yYOF.mjs.map → label-BVH02Yvq.mjs.map} +1 -1
- package/dist/chunks/{label-BWPEGVam.cjs → label-DN-Bg5i8.cjs} +1 -1
- package/dist/chunks/{label-BWPEGVam.cjs.map → label-DN-Bg5i8.cjs.map} +1 -1
- package/dist/chunks/{loading-q7IEg56I.cjs → loading-B1yrR3KX.cjs} +7 -7
- package/dist/chunks/{loading-q7IEg56I.cjs.map → loading-B1yrR3KX.cjs.map} +1 -1
- package/dist/chunks/{loading-S1TdIrbB.mjs → loading-B2Ron0Fd.mjs} +7 -7
- package/dist/chunks/{loading-S1TdIrbB.mjs.map → loading-B2Ron0Fd.mjs.map} +1 -1
- package/dist/chunks/{multi-select-combobox-D46M-AN9.mjs → multi-select-combobox-CMhAXEGZ.mjs} +15 -15
- package/dist/chunks/multi-select-combobox-CMhAXEGZ.mjs.map +1 -0
- package/dist/chunks/{multi-select-combobox-dS6bJE_e.cjs → multi-select-combobox-FEbMAPEg.cjs} +16 -16
- package/dist/chunks/multi-select-combobox-FEbMAPEg.cjs.map +1 -0
- package/dist/chunks/{otp-input-DSW9Ca_D.cjs → otp-input-B6nJC-Fl.cjs} +10 -10
- package/dist/chunks/otp-input-B6nJC-Fl.cjs.map +1 -0
- package/dist/chunks/{otp-input-DeAi4nJ_.mjs → otp-input-B7DhhsMe.mjs} +10 -10
- package/dist/chunks/otp-input-B7DhhsMe.mjs.map +1 -0
- package/dist/chunks/{overlay-TycCIFOu.mjs → overlay-C58wXorc.mjs} +1 -1
- package/dist/chunks/{overlay-TycCIFOu.mjs.map → overlay-C58wXorc.mjs.map} +1 -1
- package/dist/chunks/{overlay-DWNTyQzK.cjs → overlay-DwJgjJuu.cjs} +1 -1
- package/dist/chunks/{overlay-DWNTyQzK.cjs.map → overlay-DwJgjJuu.cjs.map} +1 -1
- package/dist/chunks/{password-strength-meter-DxMV6GAs.cjs → password-strength-meter-6vNu6p19.cjs} +13 -13
- package/dist/chunks/password-strength-meter-6vNu6p19.cjs.map +1 -0
- package/dist/chunks/{password-strength-meter-CbNSBuh_.mjs → password-strength-meter-D7gmZNjp.mjs} +13 -13
- package/dist/chunks/password-strength-meter-D7gmZNjp.mjs.map +1 -0
- package/dist/chunks/{progress-bar-BdvQtpm3.cjs → progress-bar-CbsCItvv.cjs} +78 -5
- package/dist/chunks/progress-bar-CbsCItvv.cjs.map +1 -0
- package/dist/chunks/{progress-bar-B9sy7WBT.mjs → progress-bar-D6Q9Di7D.mjs} +72 -5
- package/dist/chunks/progress-bar-D6Q9Di7D.mjs.map +1 -0
- package/dist/chunks/{radio-C9w_CoiY.mjs → radio-C6Meq2iz.mjs} +2 -2
- package/dist/chunks/{radio-C9w_CoiY.mjs.map → radio-C6Meq2iz.mjs.map} +1 -1
- package/dist/chunks/{radio-jMHDvaMY.cjs → radio-DxakS7iD.cjs} +2 -2
- package/dist/chunks/{radio-jMHDvaMY.cjs.map → radio-DxakS7iD.cjs.map} +1 -1
- package/dist/chunks/{select-B8UQ6Uq5.mjs → select-1rSJeUBQ.mjs} +25 -19
- package/dist/chunks/select-1rSJeUBQ.mjs.map +1 -0
- package/dist/chunks/{select-CCUSMvfS.cjs → select-SOmIt-BD.cjs} +25 -19
- package/dist/chunks/select-SOmIt-BD.cjs.map +1 -0
- package/dist/chunks/{skeleton-CtLumdRw.mjs → skeleton-BRx-80dg.mjs} +18 -18
- package/dist/chunks/skeleton-BRx-80dg.mjs.map +1 -0
- package/dist/chunks/{skeleton-BNea1Rcp.cjs → skeleton-o7DlA5yl.cjs} +18 -18
- package/dist/chunks/skeleton-o7DlA5yl.cjs.map +1 -0
- package/dist/chunks/{spinners-BL4ERCCw.cjs → spinners-BylPf0uk.cjs} +2 -2
- package/dist/chunks/{spinners-BL4ERCCw.cjs.map → spinners-BylPf0uk.cjs.map} +1 -1
- package/dist/chunks/{spinners-BBCWD2gw.mjs → spinners-hJaI_cBH.mjs} +2 -2
- package/dist/chunks/{spinners-BBCWD2gw.mjs.map → spinners-hJaI_cBH.mjs.map} +1 -1
- package/dist/chunks/{splash-cursor-BVSmbcIX.cjs → splash-cursor-CmqkSl6m.cjs} +1 -1
- package/dist/chunks/{splash-cursor-BVSmbcIX.cjs.map → splash-cursor-CmqkSl6m.cjs.map} +1 -1
- package/dist/chunks/{splash-cursor-rSrTnawZ.mjs → splash-cursor-Cxouip_h.mjs} +1 -1
- package/dist/chunks/{splash-cursor-rSrTnawZ.mjs.map → splash-cursor-Cxouip_h.mjs.map} +1 -1
- package/dist/chunks/{spotlight-card-DS1dy1W3.cjs → spotlight-card-B3L3K21T.cjs} +8 -8
- package/dist/chunks/spotlight-card-B3L3K21T.cjs.map +1 -0
- package/dist/chunks/{spotlight-card-BpZLMOp6.mjs → spotlight-card-DIgacTxA.mjs} +8 -8
- package/dist/chunks/spotlight-card-DIgacTxA.mjs.map +1 -0
- package/dist/chunks/{stepper-D6qQbZdg.cjs → stepper-BpjKyemI.cjs} +212 -129
- package/dist/chunks/stepper-BpjKyemI.cjs.map +1 -0
- package/dist/chunks/{stepper-DUknuW2E.mjs → stepper-JD4ZHT-b.mjs} +213 -130
- package/dist/chunks/stepper-JD4ZHT-b.mjs.map +1 -0
- package/dist/chunks/sun-to-moon-button-BOx1n6nk.cjs +311 -0
- package/dist/chunks/sun-to-moon-button-BOx1n6nk.cjs.map +1 -0
- package/dist/chunks/sun-to-moon-button-CBbDar4k.mjs +299 -0
- package/dist/chunks/sun-to-moon-button-CBbDar4k.mjs.map +1 -0
- package/dist/chunks/{switch-C5otDb4c.cjs → switch-C9suGEWg.cjs} +5 -5
- package/dist/chunks/switch-C9suGEWg.cjs.map +1 -0
- package/dist/chunks/{switch-DOVl_i_s.mjs → switch-hd7zTBD_.mjs} +5 -5
- package/dist/chunks/switch-hd7zTBD_.mjs.map +1 -0
- package/dist/chunks/{textarea-Blky_fLK.mjs → textarea-Cu26uKqq.mjs} +5 -5
- package/dist/chunks/textarea-Cu26uKqq.mjs.map +1 -0
- package/dist/chunks/{textarea-ok_NlE2p.cjs → textarea-cXgKzluG.cjs} +5 -5
- package/dist/chunks/textarea-cXgKzluG.cjs.map +1 -0
- package/dist/chunks/{theme-7DWLxJK_.cjs → theme-D6B-FaoE.cjs} +28 -5
- package/dist/chunks/theme-D6B-FaoE.cjs.map +1 -0
- package/dist/chunks/{theme-BceKeYhw.mjs → theme-koPrLKQv.mjs} +28 -5
- package/dist/chunks/theme-koPrLKQv.mjs.map +1 -0
- package/dist/chunks/{toast-CvfP7PUP.mjs → toast-CpX-22n2.mjs} +26 -26
- package/dist/chunks/toast-CpX-22n2.mjs.map +1 -0
- package/dist/chunks/{toast-Ds7_19Ap.cjs → toast-REa6FRBc.cjs} +26 -26
- package/dist/chunks/toast-REa6FRBc.cjs.map +1 -0
- package/dist/chunks/{tooltip-efHETBo1.mjs → tooltip-CASvQiFQ.mjs} +6 -7
- package/dist/chunks/tooltip-CASvQiFQ.mjs.map +1 -0
- package/dist/chunks/{tooltip-nkIqViGk.cjs → tooltip-CKF78rni.cjs} +6 -7
- package/dist/chunks/tooltip-CKF78rni.cjs.map +1 -0
- package/dist/chunks/truncated-text-DTgks5yS.mjs +45 -0
- package/dist/chunks/truncated-text-DTgks5yS.mjs.map +1 -0
- package/dist/chunks/truncated-text-istgJRUq.cjs +52 -0
- package/dist/chunks/truncated-text-istgJRUq.cjs.map +1 -0
- package/dist/chunks/{typography-CLu6Hx9j.mjs → typography-KxLf6Td8.mjs} +5 -5
- package/dist/chunks/typography-KxLf6Td8.mjs.map +1 -0
- package/dist/chunks/{typography-DaLu9tty.cjs → typography-sGmh0gZ_.cjs} +6 -6
- package/dist/chunks/typography-sGmh0gZ_.cjs.map +1 -0
- package/dist/color-palette.cjs +1 -1
- package/dist/color-palette.mjs +1 -1
- package/dist/colors.css +45 -149
- package/dist/combobox.cjs +1 -1
- package/dist/combobox.mjs +1 -1
- package/dist/components/data-display/card/Card.d.ts.map +1 -1
- package/dist/components/data-display/charts/MiniNeonSparkline.d.ts +17 -0
- package/dist/components/data-display/charts/MiniNeonSparkline.d.ts.map +1 -0
- package/dist/components/data-display/charts/ThinBreakdownBar.d.ts.map +1 -1
- 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/chip/SpecialChip.d.ts +23 -0
- package/dist/components/data-display/chip/SpecialChip.d.ts.map +1 -0
- package/dist/components/data-display/chip/index.d.ts +2 -0
- package/dist/components/data-display/chip/index.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 +49 -26
- package/dist/components/data-display/data-table/DataTable.d.ts.map +1 -1
- package/dist/components/data-display/data-table/DataTableControls.d.ts +34 -0
- package/dist/components/data-display/data-table/DataTableControls.d.ts.map +1 -0
- package/dist/components/data-display/data-table/DataTableFilters.d.ts +27 -0
- package/dist/components/data-display/data-table/DataTableFilters.d.ts.map +1 -0
- package/dist/components/data-display/data-table/DataTableRows.d.ts +34 -0
- package/dist/components/data-display/data-table/DataTableRows.d.ts.map +1 -0
- package/dist/components/data-display/data-table/DataTableToolbar.d.ts +48 -0
- package/dist/components/data-display/data-table/DataTableToolbar.d.ts.map +1 -0
- package/dist/components/data-display/data-table/TablePrimitives.d.ts +11 -0
- package/dist/components/data-display/data-table/TablePrimitives.d.ts.map +1 -0
- package/dist/components/data-display/data-table/direction.d.ts +7 -0
- package/dist/components/data-display/data-table/direction.d.ts.map +1 -0
- package/dist/components/data-display/data-table/index.d.ts +2 -2
- package/dist/components/data-display/data-table/index.d.ts.map +1 -1
- package/dist/components/data-display/loading/Loading.d.ts.map +1 -1
- package/dist/components/data-display/progress-bar/CircularProgress.d.ts +17 -0
- package/dist/components/data-display/progress-bar/CircularProgress.d.ts.map +1 -0
- package/dist/components/data-display/progress-bar/index.d.ts +2 -0
- package/dist/components/data-display/progress-bar/index.d.ts.map +1 -1
- package/dist/components/effects/sun-to-moon-button/ThemeSwitcherButtons.d.ts +5 -0
- package/dist/components/effects/sun-to-moon-button/ThemeSwitcherButtons.d.ts.map +1 -0
- package/dist/components/effects/sun-to-moon-button/index.d.ts +2 -0
- package/dist/components/effects/sun-to-moon-button/index.d.ts.map +1 -1
- package/dist/components/feedback/alert/Alert.d.ts +1 -1
- package/dist/components/feedback/alert/Alert.d.ts.map +1 -1
- package/dist/components/feedback/alert/types.d.ts +11 -2
- package/dist/components/feedback/alert/types.d.ts.map +1 -1
- package/dist/components/forms/button/Button.d.ts +1 -1
- package/dist/components/forms/button/Button.d.ts.map +1 -1
- package/dist/components/forms/button/index.d.ts +1 -1
- package/dist/components/forms/button/index.d.ts.map +1 -1
- package/dist/components/forms/button/types.d.ts +4 -1
- package/dist/components/forms/button/types.d.ts.map +1 -1
- package/dist/components/forms/calendar/Calendar.d.ts.map +1 -1
- package/dist/components/forms/checkbox/Checkbox.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/form/Form.d.ts.map +1 -1
- package/dist/components/forms/input/Input.d.ts.map +1 -1
- package/dist/components/forms/input/types.d.ts +1 -1
- package/dist/components/forms/input/types.d.ts.map +1 -1
- package/dist/components/forms/password-strength-meter/PasswordCriteria.d.ts.map +1 -1
- package/dist/components/forms/password-strength-meter/PasswordStrengthMeter.d.ts.map +1 -1
- package/dist/components/forms/select/Select.d.ts.map +1 -1
- package/dist/components/navigation/accordion/Accordion.d.ts.map +1 -1
- package/dist/components/navigation/stepper/Stepper.d.ts +1 -1
- package/dist/components/navigation/stepper/Stepper.d.ts.map +1 -1
- package/dist/components/navigation/stepper/Stepper1.d.ts.map +1 -1
- package/dist/components/navigation/stepper/index.d.ts +1 -1
- package/dist/components/navigation/stepper/index.d.ts.map +1 -1
- package/dist/components/navigation/stepper/types.d.ts +3 -0
- package/dist/components/navigation/stepper/types.d.ts.map +1 -1
- package/dist/components/navigation/tabs/Tabs.d.ts +3 -0
- package/dist/components/navigation/tabs/Tabs.d.ts.map +1 -0
- package/dist/components/navigation/tabs/index.d.ts +3 -0
- package/dist/components/navigation/tabs/index.d.ts.map +1 -0
- package/dist/components/navigation/tabs/types.d.ts +21 -0
- package/dist/components/navigation/tabs/types.d.ts.map +1 -0
- package/dist/components/overlays/dialog/Dialog.d.ts.map +1 -1
- package/dist/components/overlays/dialog/types.d.ts +1 -0
- package/dist/components/overlays/dialog/types.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/overlays/toast/Toast.d.ts.map +1 -1
- package/dist/components/overlays/tooltip/Tooltip.d.ts.map +1 -1
- package/dist/components/shared/overlay.d.ts +1 -1
- package/dist/components/typography/Typography.d.ts.map +1 -1
- package/dist/components/typography/truncated-text/TruncatedText.d.ts +11 -0
- package/dist/components/typography/truncated-text/TruncatedText.d.ts.map +1 -0
- package/dist/components/typography/truncated-text/index.d.ts +3 -0
- package/dist/components/typography/truncated-text/index.d.ts.map +1 -0
- package/dist/contexts/ThemeContext.d.ts +1 -1
- package/dist/contexts/ThemeContext.d.ts.map +1 -1
- package/dist/contexts/index.d.ts +1 -1
- package/dist/contexts/index.d.ts.map +1 -1
- package/dist/data-table.cjs +11 -1
- package/dist/data-table.mjs +2 -2
- 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 +76 -26
- package/dist/docs.cjs.map +1 -1
- package/dist/docs.d.ts +10 -10
- package/dist/docs.d.ts.map +1 -1
- package/dist/docs.mjs +76 -26
- package/dist/docs.mjs.map +1 -1
- package/dist/drawer.cjs +1 -1
- package/dist/drawer.mjs +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.mjs +1 -1
- package/dist/foundation.css +54 -3
- package/dist/foundations/theme/ThemeProvider.d.ts +22 -1
- package/dist/foundations/theme/ThemeProvider.d.ts.map +1 -1
- package/dist/foundations/theme/index.d.ts +1 -1
- package/dist/foundations/theme/index.d.ts.map +1 -1
- package/dist/gradual-blur.cjs +1 -1
- package/dist/gradual-blur.mjs +1 -1
- package/dist/hover-border-gradient.cjs +1 -1
- package/dist/hover-border-gradient.mjs +1 -1
- package/dist/hover-card.cjs +1 -1
- package/dist/hover-card.mjs +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.mjs +1 -1
- package/dist/index.cjs +201 -48
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +17 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +183 -50
- 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 +2 -1
- package/dist/progress-bar.mjs +2 -2
- 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 +2 -1
- package/dist/sun-to-moon-button.mjs +2 -2
- 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 -298
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.mjs +1 -1
- package/dist/truncated-text.cjs +3 -0
- package/dist/truncated-text.d.ts +2 -0
- package/dist/truncated-text.mjs +2 -0
- package/dist/typography.cjs +1 -1
- package/dist/typography.mjs +1 -1
- package/package.json +15 -9
- package/dist/chunks/HoverBorderGradient-DVFEIXFQ.mjs.map +0 -1
- package/dist/chunks/HoverBorderGradient-Df3PKpw6.cjs.map +0 -1
- package/dist/chunks/accordion-Cbt-SJhj.mjs.map +0 -1
- package/dist/chunks/accordion-pfJR8YYA.cjs.map +0 -1
- package/dist/chunks/alert-CtdLy4Hv.mjs +0 -40
- package/dist/chunks/alert-CtdLy4Hv.mjs.map +0 -1
- package/dist/chunks/alert-Dvz1GoL5.cjs +0 -46
- package/dist/chunks/alert-Dvz1GoL5.cjs.map +0 -1
- package/dist/chunks/button-B0Lhj0AS.mjs.map +0 -1
- package/dist/chunks/button-CZL6kFzT.cjs.map +0 -1
- package/dist/chunks/calendar-Cpp_Rc7T.cjs.map +0 -1
- package/dist/chunks/calendar-DrCgT_pj.mjs.map +0 -1
- package/dist/chunks/card-C5_tFK6Q.cjs.map +0 -1
- package/dist/chunks/card-Dh8wNv8N.mjs.map +0 -1
- package/dist/chunks/carousel-BYwqI4cA.mjs.map +0 -1
- package/dist/chunks/carousel-C1338X8h.cjs.map +0 -1
- package/dist/chunks/charts-BYvM4TMG.mjs.map +0 -1
- package/dist/chunks/charts-DbxyHtlX.cjs.map +0 -1
- package/dist/chunks/checkbox-CxOcjoGP.cjs.map +0 -1
- package/dist/chunks/checkbox-Pr49U9F1.mjs.map +0 -1
- package/dist/chunks/chip-B4ol1yPk.cjs +0 -145
- package/dist/chunks/chip-B4ol1yPk.cjs.map +0 -1
- package/dist/chunks/chip-DdnBLdpl.mjs +0 -139
- package/dist/chunks/chip-DdnBLdpl.mjs.map +0 -1
- package/dist/chunks/chroma-grid-BAo6V5A7.mjs.map +0 -1
- package/dist/chunks/chroma-grid-CIk0dsNS.cjs.map +0 -1
- package/dist/chunks/color-palette-2TuEMkAn.cjs.map +0 -1
- package/dist/chunks/color-palette-euKQMWlV.mjs.map +0 -1
- package/dist/chunks/combobox-CwGubKTt.cjs.map +0 -1
- package/dist/chunks/combobox-DrFmkI0F.mjs.map +0 -1
- package/dist/chunks/data-table-Bo80m7qV.mjs +0 -1123
- package/dist/chunks/data-table-Bo80m7qV.mjs.map +0 -1
- package/dist/chunks/data-table-W1sK5tkL.cjs +0 -1154
- package/dist/chunks/data-table-W1sK5tkL.cjs.map +0 -1
- package/dist/chunks/date-picker-CNPORxhv.mjs.map +0 -1
- package/dist/chunks/date-picker-CZo68Fkl.cjs.map +0 -1
- package/dist/chunks/dialog-CYFiWN8M.cjs.map +0 -1
- package/dist/chunks/dialog-DUWnV9tN.mjs.map +0 -1
- package/dist/chunks/drawer-CLjsYdxN.cjs.map +0 -1
- package/dist/chunks/drawer-D82Jz6KO.mjs.map +0 -1
- package/dist/chunks/form-B2vcaHwh.mjs.map +0 -1
- package/dist/chunks/form-CzH9GQc6.cjs.map +0 -1
- package/dist/chunks/hover-card-v0QwmVBU.cjs.map +0 -1
- package/dist/chunks/hover-card-xqwpmZNm.mjs.map +0 -1
- package/dist/chunks/icons-BxIzP2jd.cjs.map +0 -1
- package/dist/chunks/icons-DuumN7z-.mjs.map +0 -1
- package/dist/chunks/input-BWM6G7jq.cjs.map +0 -1
- package/dist/chunks/input-Bt_r_B_c.mjs.map +0 -1
- package/dist/chunks/multi-select-combobox-D46M-AN9.mjs.map +0 -1
- package/dist/chunks/multi-select-combobox-dS6bJE_e.cjs.map +0 -1
- package/dist/chunks/otp-input-DSW9Ca_D.cjs.map +0 -1
- package/dist/chunks/otp-input-DeAi4nJ_.mjs.map +0 -1
- package/dist/chunks/password-strength-meter-CbNSBuh_.mjs.map +0 -1
- package/dist/chunks/password-strength-meter-DxMV6GAs.cjs.map +0 -1
- package/dist/chunks/progress-bar-B9sy7WBT.mjs.map +0 -1
- package/dist/chunks/progress-bar-BdvQtpm3.cjs.map +0 -1
- package/dist/chunks/select-B8UQ6Uq5.mjs.map +0 -1
- package/dist/chunks/select-CCUSMvfS.cjs.map +0 -1
- package/dist/chunks/skeleton-BNea1Rcp.cjs.map +0 -1
- package/dist/chunks/skeleton-CtLumdRw.mjs.map +0 -1
- package/dist/chunks/spotlight-card-BpZLMOp6.mjs.map +0 -1
- package/dist/chunks/spotlight-card-DS1dy1W3.cjs.map +0 -1
- package/dist/chunks/stepper-D6qQbZdg.cjs.map +0 -1
- package/dist/chunks/stepper-DUknuW2E.mjs.map +0 -1
- package/dist/chunks/sun-to-moon-button-B2Aje05o.mjs +0 -186
- package/dist/chunks/sun-to-moon-button-B2Aje05o.mjs.map +0 -1
- package/dist/chunks/sun-to-moon-button-BmFwRBye.cjs +0 -192
- package/dist/chunks/sun-to-moon-button-BmFwRBye.cjs.map +0 -1
- package/dist/chunks/switch-C5otDb4c.cjs.map +0 -1
- package/dist/chunks/switch-DOVl_i_s.mjs.map +0 -1
- package/dist/chunks/textarea-Blky_fLK.mjs.map +0 -1
- package/dist/chunks/textarea-ok_NlE2p.cjs.map +0 -1
- package/dist/chunks/theme-7DWLxJK_.cjs.map +0 -1
- package/dist/chunks/theme-BceKeYhw.mjs.map +0 -1
- package/dist/chunks/toast-CvfP7PUP.mjs.map +0 -1
- package/dist/chunks/toast-Ds7_19Ap.cjs.map +0 -1
- package/dist/chunks/tooltip-efHETBo1.mjs.map +0 -1
- package/dist/chunks/tooltip-nkIqViGk.cjs.map +0 -1
- package/dist/chunks/typography-CLu6Hx9j.mjs.map +0 -1
- package/dist/chunks/typography-DaLu9tty.cjs.map +0 -1
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
import { n as useThemeContext } from "./theme-BceKeYhw.mjs";
|
|
2
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { motion } from "framer-motion";
|
|
4
|
-
//#region src/components/effects/sun-to-moon-button/SunToMoonButton.tsx
|
|
5
|
-
function SunToMoonButton({ showLabelAndImage = true }) {
|
|
6
|
-
const { mode, toggleMode } = useThemeContext();
|
|
7
|
-
const raysVariants = {
|
|
8
|
-
hidden: {
|
|
9
|
-
strokeOpacity: 0,
|
|
10
|
-
transition: {
|
|
11
|
-
staggerChildren: .05,
|
|
12
|
-
staggerDirection: -1
|
|
13
|
-
}
|
|
14
|
-
},
|
|
15
|
-
visible: {
|
|
16
|
-
strokeOpacity: 1,
|
|
17
|
-
transition: { staggerChildren: .05 }
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
const rayVariant = {
|
|
21
|
-
hidden: {
|
|
22
|
-
pathLength: 0,
|
|
23
|
-
opacity: 0,
|
|
24
|
-
scale: 0
|
|
25
|
-
},
|
|
26
|
-
visible: {
|
|
27
|
-
pathLength: 1,
|
|
28
|
-
opacity: 1,
|
|
29
|
-
scale: 1,
|
|
30
|
-
transition: {
|
|
31
|
-
duration: .5,
|
|
32
|
-
pathLength: { duration: .3 },
|
|
33
|
-
opacity: { duration: .2 },
|
|
34
|
-
scale: { duration: .3 }
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
const shineVariant = {
|
|
39
|
-
hidden: {
|
|
40
|
-
opacity: 0,
|
|
41
|
-
scale: 2,
|
|
42
|
-
strokeDasharray: "20, 1000",
|
|
43
|
-
strokeDashoffset: 0,
|
|
44
|
-
filter: "blur(0px)"
|
|
45
|
-
},
|
|
46
|
-
visible: {
|
|
47
|
-
opacity: [
|
|
48
|
-
0,
|
|
49
|
-
1,
|
|
50
|
-
0
|
|
51
|
-
],
|
|
52
|
-
strokeDashoffset: [
|
|
53
|
-
0,
|
|
54
|
-
-50,
|
|
55
|
-
-100
|
|
56
|
-
],
|
|
57
|
-
filter: [
|
|
58
|
-
"blur(2px)",
|
|
59
|
-
"blur(2px)",
|
|
60
|
-
"blur(0px)"
|
|
61
|
-
],
|
|
62
|
-
transition: { duration: .75 }
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
const sunPath = "M70 49.5C70 60.8218 60.8218 70 49.5 70C38.1782 70 29 60.8218 29 49.5C29 38.1782 38.1782 29 49.5 29C60 29 69.5 38 70 49.5Z";
|
|
66
|
-
const moonPath = "M70 49.5C70 60.8218 60.8218 70 49.5 70C38.1782 70 29 60.8218 29 49.5C29 38.1782 38.1782 29 49.5 29C39 45 49.5 59.5 70 49.5Z";
|
|
67
|
-
const safeCurrentPath = (mode === "light" ? sunPath : moonPath) || sunPath;
|
|
68
|
-
return /* @__PURE__ */ jsxs("button", {
|
|
69
|
-
type: "button",
|
|
70
|
-
className: "flex w-full cursor-pointer flex-col items-center justify-center rounded-xl py-3 text-base font-medium transition duration-200",
|
|
71
|
-
onClick: () => toggleMode(),
|
|
72
|
-
children: [/* @__PURE__ */ jsxs("span", {
|
|
73
|
-
className: "flex items-center",
|
|
74
|
-
children: [showLabelAndImage && /* @__PURE__ */ jsx("span", {
|
|
75
|
-
className: "mr-2 text-neutral-900 dark:text-white",
|
|
76
|
-
children: mode === "light" ? "Light" : "Dark"
|
|
77
|
-
}), /* @__PURE__ */ jsxs(motion.svg, {
|
|
78
|
-
strokeWidth: "4",
|
|
79
|
-
strokeLinecap: "round",
|
|
80
|
-
width: 20,
|
|
81
|
-
height: 20,
|
|
82
|
-
viewBox: "0 0 100 100",
|
|
83
|
-
fill: "none",
|
|
84
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
85
|
-
className: "relative",
|
|
86
|
-
children: [
|
|
87
|
-
/* @__PURE__ */ jsx(motion.path, {
|
|
88
|
-
variants: shineVariant,
|
|
89
|
-
d: moonPath,
|
|
90
|
-
className: "absolute top-0 left-0 stroke-blue-100",
|
|
91
|
-
initial: "hidden",
|
|
92
|
-
animate: mode === "light" ? "hidden" : "visible"
|
|
93
|
-
}),
|
|
94
|
-
/* @__PURE__ */ jsxs(motion.g, {
|
|
95
|
-
variants: raysVariants,
|
|
96
|
-
initial: "hidden",
|
|
97
|
-
animate: mode === "dark" ? "hidden" : "visible",
|
|
98
|
-
style: {
|
|
99
|
-
strokeLinecap: "round",
|
|
100
|
-
strokeWidth: 6,
|
|
101
|
-
stroke: "var(--color-yellow-500)"
|
|
102
|
-
},
|
|
103
|
-
children: [
|
|
104
|
-
/* @__PURE__ */ jsx(motion.path, {
|
|
105
|
-
className: "origin-center",
|
|
106
|
-
variants: rayVariant,
|
|
107
|
-
d: "M50 2V11"
|
|
108
|
-
}),
|
|
109
|
-
/* @__PURE__ */ jsx(motion.path, {
|
|
110
|
-
variants: rayVariant,
|
|
111
|
-
d: "M85 15L78 22"
|
|
112
|
-
}),
|
|
113
|
-
/* @__PURE__ */ jsx(motion.path, {
|
|
114
|
-
variants: rayVariant,
|
|
115
|
-
d: "M98 50H89"
|
|
116
|
-
}),
|
|
117
|
-
/* @__PURE__ */ jsx(motion.path, {
|
|
118
|
-
variants: rayVariant,
|
|
119
|
-
d: "M85 85L78 78"
|
|
120
|
-
}),
|
|
121
|
-
/* @__PURE__ */ jsx(motion.path, {
|
|
122
|
-
variants: rayVariant,
|
|
123
|
-
d: "M50 98V89"
|
|
124
|
-
}),
|
|
125
|
-
/* @__PURE__ */ jsx(motion.path, {
|
|
126
|
-
variants: rayVariant,
|
|
127
|
-
d: "M23 78L16 84"
|
|
128
|
-
}),
|
|
129
|
-
/* @__PURE__ */ jsx(motion.path, {
|
|
130
|
-
variants: rayVariant,
|
|
131
|
-
d: "M11 50H2"
|
|
132
|
-
}),
|
|
133
|
-
/* @__PURE__ */ jsx(motion.path, {
|
|
134
|
-
variants: rayVariant,
|
|
135
|
-
d: "M23 23L16 16"
|
|
136
|
-
})
|
|
137
|
-
]
|
|
138
|
-
}),
|
|
139
|
-
/* @__PURE__ */ jsx(motion.path, {
|
|
140
|
-
d: safeCurrentPath,
|
|
141
|
-
fill: "transparent",
|
|
142
|
-
transition: {
|
|
143
|
-
duration: 1,
|
|
144
|
-
type: "spring"
|
|
145
|
-
},
|
|
146
|
-
initial: false,
|
|
147
|
-
animate: mode === "light" ? {
|
|
148
|
-
d: sunPath,
|
|
149
|
-
rotate: 0,
|
|
150
|
-
scale: 1,
|
|
151
|
-
stroke: "var(--color-yellow-500)",
|
|
152
|
-
fill: "var(--color-yellow-500)",
|
|
153
|
-
fillOpacity: .5,
|
|
154
|
-
strokeOpacity: 1
|
|
155
|
-
} : {
|
|
156
|
-
d: moonPath,
|
|
157
|
-
rotate: -360,
|
|
158
|
-
scale: 2,
|
|
159
|
-
stroke: "var(--color-blue-400)",
|
|
160
|
-
fill: "var(--color-blue-400)",
|
|
161
|
-
fillOpacity: .35,
|
|
162
|
-
strokeOpacity: 1
|
|
163
|
-
}
|
|
164
|
-
})
|
|
165
|
-
]
|
|
166
|
-
})]
|
|
167
|
-
}), showLabelAndImage && /* @__PURE__ */ jsxs("span", {
|
|
168
|
-
className: "mt-2 flex h-[90px] w-[180px] flex-col items-center justify-center rounded-md bg-neutral-100 dark:bg-neutral-800",
|
|
169
|
-
children: [/* @__PURE__ */ jsxs("span", {
|
|
170
|
-
className: "my-4 flex w-[150px] flex-col rounded-md",
|
|
171
|
-
children: [
|
|
172
|
-
/* @__PURE__ */ jsx("span", { className: "mb-1 w-[80px] rounded-full bg-neutral-300 p-1 dark:bg-neutral-600" }),
|
|
173
|
-
/* @__PURE__ */ jsx("span", { className: "mb-1 w-[100px] rounded-full bg-neutral-300 p-1 dark:bg-neutral-600" }),
|
|
174
|
-
/* @__PURE__ */ jsx("span", { className: "w-[150px] rounded-full bg-neutral-300 p-1 dark:bg-neutral-600" })
|
|
175
|
-
]
|
|
176
|
-
}), /* @__PURE__ */ jsxs("span", {
|
|
177
|
-
className: "my-1 flex w-[150px] justify-between",
|
|
178
|
-
children: [/* @__PURE__ */ jsx("span", { className: "mb-1 w-[80px] rounded-full bg-neutral-300 p-1 dark:bg-neutral-600" }), /* @__PURE__ */ jsx("span", { className: "mb-1 w-[30px] rounded-full bg-accent p-1" })]
|
|
179
|
-
})]
|
|
180
|
-
})]
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
//#endregion
|
|
184
|
-
export { SunToMoonButton as t };
|
|
185
|
-
|
|
186
|
-
//# sourceMappingURL=sun-to-moon-button-B2Aje05o.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sun-to-moon-button-B2Aje05o.mjs","names":[],"sources":["../../src/components/effects/sun-to-moon-button/SunToMoonButton.tsx"],"sourcesContent":["import { useThemeContext } from \"../../../foundations/theme\";\nimport { motion } from \"framer-motion\";\n\nexport interface SunToMoonButtonProps {\n showLabelAndImage?: boolean;\n}\n\nexport default function SunToMoonButton({\n showLabelAndImage = true,\n}: SunToMoonButtonProps) {\n const { mode, toggleMode } = useThemeContext();\n\n const raysVariants = {\n hidden: {\n strokeOpacity: 0,\n transition: {\n staggerChildren: 0.05,\n staggerDirection: -1,\n },\n },\n visible: {\n strokeOpacity: 1,\n transition: {\n staggerChildren: 0.05,\n },\n },\n };\n\n const rayVariant = {\n hidden: {\n pathLength: 0,\n opacity: 0,\n // Start from center of the circle\n scale: 0,\n },\n visible: {\n pathLength: 1,\n opacity: 1,\n scale: 1,\n transition: {\n duration: 0.5,\n pathLength: { duration: 0.3 },\n opacity: { duration: 0.2 },\n scale: { duration: 0.3 },\n },\n },\n };\n\n const shineVariant = {\n hidden: {\n opacity: 0,\n scale: 2,\n strokeDasharray: \"20, 1000\",\n strokeDashoffset: 0,\n filter: \"blur(0px)\",\n },\n visible: {\n opacity: [0, 1, 0],\n strokeDashoffset: [0, -50, -100],\n filter: [\"blur(2px)\", \"blur(2px)\", \"blur(0px)\"],\n transition: {\n duration: 0.75,\n },\n },\n };\n\n const sunPath =\n \"M70 49.5C70 60.8218 60.8218 70 49.5 70C38.1782 70 29 60.8218 29 49.5C29 38.1782 38.1782 29 49.5 29C60 29 69.5 38 70 49.5Z\";\n const moonPath =\n \"M70 49.5C70 60.8218 60.8218 70 49.5 70C38.1782 70 29 60.8218 29 49.5C29 38.1782 38.1782 29 49.5 29C39 45 49.5 59.5 70 49.5Z\";\n const fallbackPath = sunPath;\n\n // Ensure we have valid paths at all times\n // Light mode = sun, Dark mode = moon\n const currentPath = mode === \"light\" ? sunPath : moonPath;\n const safeCurrentPath = currentPath || fallbackPath;\n\n return (\n <button\n type=\"button\"\n className=\"flex w-full cursor-pointer flex-col items-center justify-center rounded-xl py-3 text-base font-medium transition duration-200\"\n onClick={() => toggleMode()}\n >\n <span className=\"flex items-center\">\n {showLabelAndImage && (\n <span className=\"mr-2 text-neutral-900 dark:text-white\">\n {mode === \"light\" ? \"Light\" : \"Dark\"}\n </span>\n )}\n\n <motion.svg\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n width={20}\n height={20}\n viewBox=\"0 0 100 100\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"relative\"\n >\n {/* Shine effect for moon in dark mode */}\n {moonPath && (\n <motion.path\n variants={shineVariant}\n d={moonPath}\n className=\"absolute top-0 left-0 stroke-blue-100\"\n initial=\"hidden\"\n animate={mode === \"light\" ? \"hidden\" : \"visible\"}\n />\n )}\n\n {/* Sun rays - visible in light mode */}\n <motion.g\n variants={raysVariants}\n initial=\"hidden\"\n animate={mode === \"dark\" ? \"hidden\" : \"visible\"}\n style={{\n strokeLinecap: \"round\",\n strokeWidth: 6,\n stroke: \"var(--color-yellow-500)\",\n }}\n >\n <motion.path\n className=\"origin-center\"\n variants={rayVariant}\n d=\"M50 2V11\"\n />\n <motion.path variants={rayVariant} d=\"M85 15L78 22\" />\n <motion.path variants={rayVariant} d=\"M98 50H89\" />\n <motion.path variants={rayVariant} d=\"M85 85L78 78\" />\n <motion.path variants={rayVariant} d=\"M50 98V89\" />\n <motion.path variants={rayVariant} d=\"M23 78L16 84\" />\n <motion.path variants={rayVariant} d=\"M11 50H2\" />\n <motion.path variants={rayVariant} d=\"M23 23L16 16\" />\n </motion.g>\n\n {/* Main path - Light=Sun(yellow), Dark=Moon(blue) */}\n <motion.path\n d={safeCurrentPath}\n fill=\"transparent\"\n transition={{ duration: 1, type: \"spring\" }}\n initial={false}\n animate={\n mode === \"light\"\n ? {\n d: sunPath || fallbackPath,\n rotate: 0,\n scale: 1,\n stroke: \"var(--color-yellow-500)\",\n fill: \"var(--color-yellow-500)\",\n fillOpacity: 0.5,\n strokeOpacity: 1,\n }\n : {\n d: moonPath || fallbackPath,\n rotate: -360,\n scale: 2,\n stroke: \"var(--color-blue-400)\",\n fill: \"var(--color-blue-400)\",\n fillOpacity: 0.35,\n strokeOpacity: 1,\n }\n }\n />\n </motion.svg>\n </span>\n {showLabelAndImage && (\n <span className=\"mt-2 flex h-[90px] w-[180px] flex-col items-center justify-center rounded-md bg-neutral-100 dark:bg-neutral-800\">\n <span className=\"my-4 flex w-[150px] flex-col rounded-md\">\n <span className=\"mb-1 w-[80px] rounded-full bg-neutral-300 p-1 dark:bg-neutral-600\"></span>\n <span className=\"mb-1 w-[100px] rounded-full bg-neutral-300 p-1 dark:bg-neutral-600\"></span>\n <span className=\"w-[150px] rounded-full bg-neutral-300 p-1 dark:bg-neutral-600\"></span>\n </span>\n <span className=\"my-1 flex w-[150px] justify-between\">\n <span className=\"mb-1 w-[80px] rounded-full bg-neutral-300 p-1 dark:bg-neutral-600\"></span>\n <span className=\"mb-1 w-[30px] rounded-full bg-accent p-1\"></span>\n </span>\n </span>\n )}\n </button>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
require("./chunk-B_GkZjkl.cjs");
|
|
2
|
-
const require_theme = require("./theme-7DWLxJK_.cjs");
|
|
3
|
-
let react_jsx_runtime = require("react/jsx-runtime");
|
|
4
|
-
let framer_motion = require("framer-motion");
|
|
5
|
-
//#region src/components/effects/sun-to-moon-button/SunToMoonButton.tsx
|
|
6
|
-
function SunToMoonButton({ showLabelAndImage = true }) {
|
|
7
|
-
const { mode, toggleMode } = require_theme.useThemeContext();
|
|
8
|
-
const raysVariants = {
|
|
9
|
-
hidden: {
|
|
10
|
-
strokeOpacity: 0,
|
|
11
|
-
transition: {
|
|
12
|
-
staggerChildren: .05,
|
|
13
|
-
staggerDirection: -1
|
|
14
|
-
}
|
|
15
|
-
},
|
|
16
|
-
visible: {
|
|
17
|
-
strokeOpacity: 1,
|
|
18
|
-
transition: { staggerChildren: .05 }
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
const rayVariant = {
|
|
22
|
-
hidden: {
|
|
23
|
-
pathLength: 0,
|
|
24
|
-
opacity: 0,
|
|
25
|
-
scale: 0
|
|
26
|
-
},
|
|
27
|
-
visible: {
|
|
28
|
-
pathLength: 1,
|
|
29
|
-
opacity: 1,
|
|
30
|
-
scale: 1,
|
|
31
|
-
transition: {
|
|
32
|
-
duration: .5,
|
|
33
|
-
pathLength: { duration: .3 },
|
|
34
|
-
opacity: { duration: .2 },
|
|
35
|
-
scale: { duration: .3 }
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
const shineVariant = {
|
|
40
|
-
hidden: {
|
|
41
|
-
opacity: 0,
|
|
42
|
-
scale: 2,
|
|
43
|
-
strokeDasharray: "20, 1000",
|
|
44
|
-
strokeDashoffset: 0,
|
|
45
|
-
filter: "blur(0px)"
|
|
46
|
-
},
|
|
47
|
-
visible: {
|
|
48
|
-
opacity: [
|
|
49
|
-
0,
|
|
50
|
-
1,
|
|
51
|
-
0
|
|
52
|
-
],
|
|
53
|
-
strokeDashoffset: [
|
|
54
|
-
0,
|
|
55
|
-
-50,
|
|
56
|
-
-100
|
|
57
|
-
],
|
|
58
|
-
filter: [
|
|
59
|
-
"blur(2px)",
|
|
60
|
-
"blur(2px)",
|
|
61
|
-
"blur(0px)"
|
|
62
|
-
],
|
|
63
|
-
transition: { duration: .75 }
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
const sunPath = "M70 49.5C70 60.8218 60.8218 70 49.5 70C38.1782 70 29 60.8218 29 49.5C29 38.1782 38.1782 29 49.5 29C60 29 69.5 38 70 49.5Z";
|
|
67
|
-
const moonPath = "M70 49.5C70 60.8218 60.8218 70 49.5 70C38.1782 70 29 60.8218 29 49.5C29 38.1782 38.1782 29 49.5 29C39 45 49.5 59.5 70 49.5Z";
|
|
68
|
-
const safeCurrentPath = (mode === "light" ? sunPath : moonPath) || sunPath;
|
|
69
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
70
|
-
type: "button",
|
|
71
|
-
className: "flex w-full cursor-pointer flex-col items-center justify-center rounded-xl py-3 text-base font-medium transition duration-200",
|
|
72
|
-
onClick: () => toggleMode(),
|
|
73
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
74
|
-
className: "flex items-center",
|
|
75
|
-
children: [showLabelAndImage && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
76
|
-
className: "mr-2 text-neutral-900 dark:text-white",
|
|
77
|
-
children: mode === "light" ? "Light" : "Dark"
|
|
78
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(framer_motion.motion.svg, {
|
|
79
|
-
strokeWidth: "4",
|
|
80
|
-
strokeLinecap: "round",
|
|
81
|
-
width: 20,
|
|
82
|
-
height: 20,
|
|
83
|
-
viewBox: "0 0 100 100",
|
|
84
|
-
fill: "none",
|
|
85
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
86
|
-
className: "relative",
|
|
87
|
-
children: [
|
|
88
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(framer_motion.motion.path, {
|
|
89
|
-
variants: shineVariant,
|
|
90
|
-
d: moonPath,
|
|
91
|
-
className: "absolute top-0 left-0 stroke-blue-100",
|
|
92
|
-
initial: "hidden",
|
|
93
|
-
animate: mode === "light" ? "hidden" : "visible"
|
|
94
|
-
}),
|
|
95
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(framer_motion.motion.g, {
|
|
96
|
-
variants: raysVariants,
|
|
97
|
-
initial: "hidden",
|
|
98
|
-
animate: mode === "dark" ? "hidden" : "visible",
|
|
99
|
-
style: {
|
|
100
|
-
strokeLinecap: "round",
|
|
101
|
-
strokeWidth: 6,
|
|
102
|
-
stroke: "var(--color-yellow-500)"
|
|
103
|
-
},
|
|
104
|
-
children: [
|
|
105
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(framer_motion.motion.path, {
|
|
106
|
-
className: "origin-center",
|
|
107
|
-
variants: rayVariant,
|
|
108
|
-
d: "M50 2V11"
|
|
109
|
-
}),
|
|
110
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(framer_motion.motion.path, {
|
|
111
|
-
variants: rayVariant,
|
|
112
|
-
d: "M85 15L78 22"
|
|
113
|
-
}),
|
|
114
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(framer_motion.motion.path, {
|
|
115
|
-
variants: rayVariant,
|
|
116
|
-
d: "M98 50H89"
|
|
117
|
-
}),
|
|
118
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(framer_motion.motion.path, {
|
|
119
|
-
variants: rayVariant,
|
|
120
|
-
d: "M85 85L78 78"
|
|
121
|
-
}),
|
|
122
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(framer_motion.motion.path, {
|
|
123
|
-
variants: rayVariant,
|
|
124
|
-
d: "M50 98V89"
|
|
125
|
-
}),
|
|
126
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(framer_motion.motion.path, {
|
|
127
|
-
variants: rayVariant,
|
|
128
|
-
d: "M23 78L16 84"
|
|
129
|
-
}),
|
|
130
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(framer_motion.motion.path, {
|
|
131
|
-
variants: rayVariant,
|
|
132
|
-
d: "M11 50H2"
|
|
133
|
-
}),
|
|
134
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(framer_motion.motion.path, {
|
|
135
|
-
variants: rayVariant,
|
|
136
|
-
d: "M23 23L16 16"
|
|
137
|
-
})
|
|
138
|
-
]
|
|
139
|
-
}),
|
|
140
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(framer_motion.motion.path, {
|
|
141
|
-
d: safeCurrentPath,
|
|
142
|
-
fill: "transparent",
|
|
143
|
-
transition: {
|
|
144
|
-
duration: 1,
|
|
145
|
-
type: "spring"
|
|
146
|
-
},
|
|
147
|
-
initial: false,
|
|
148
|
-
animate: mode === "light" ? {
|
|
149
|
-
d: sunPath,
|
|
150
|
-
rotate: 0,
|
|
151
|
-
scale: 1,
|
|
152
|
-
stroke: "var(--color-yellow-500)",
|
|
153
|
-
fill: "var(--color-yellow-500)",
|
|
154
|
-
fillOpacity: .5,
|
|
155
|
-
strokeOpacity: 1
|
|
156
|
-
} : {
|
|
157
|
-
d: moonPath,
|
|
158
|
-
rotate: -360,
|
|
159
|
-
scale: 2,
|
|
160
|
-
stroke: "var(--color-blue-400)",
|
|
161
|
-
fill: "var(--color-blue-400)",
|
|
162
|
-
fillOpacity: .35,
|
|
163
|
-
strokeOpacity: 1
|
|
164
|
-
}
|
|
165
|
-
})
|
|
166
|
-
]
|
|
167
|
-
})]
|
|
168
|
-
}), showLabelAndImage && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
169
|
-
className: "mt-2 flex h-[90px] w-[180px] flex-col items-center justify-center rounded-md bg-neutral-100 dark:bg-neutral-800",
|
|
170
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
171
|
-
className: "my-4 flex w-[150px] flex-col rounded-md",
|
|
172
|
-
children: [
|
|
173
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: "mb-1 w-[80px] rounded-full bg-neutral-300 p-1 dark:bg-neutral-600" }),
|
|
174
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: "mb-1 w-[100px] rounded-full bg-neutral-300 p-1 dark:bg-neutral-600" }),
|
|
175
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: "w-[150px] rounded-full bg-neutral-300 p-1 dark:bg-neutral-600" })
|
|
176
|
-
]
|
|
177
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
178
|
-
className: "my-1 flex w-[150px] justify-between",
|
|
179
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: "mb-1 w-[80px] rounded-full bg-neutral-300 p-1 dark:bg-neutral-600" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: "mb-1 w-[30px] rounded-full bg-accent p-1" })]
|
|
180
|
-
})]
|
|
181
|
-
})]
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
//#endregion
|
|
185
|
-
Object.defineProperty(exports, "SunToMoonButton", {
|
|
186
|
-
enumerable: true,
|
|
187
|
-
get: function() {
|
|
188
|
-
return SunToMoonButton;
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
//# sourceMappingURL=sun-to-moon-button-BmFwRBye.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sun-to-moon-button-BmFwRBye.cjs","names":[],"sources":["../../src/components/effects/sun-to-moon-button/SunToMoonButton.tsx"],"sourcesContent":["import { useThemeContext } from \"../../../foundations/theme\";\nimport { motion } from \"framer-motion\";\n\nexport interface SunToMoonButtonProps {\n showLabelAndImage?: boolean;\n}\n\nexport default function SunToMoonButton({\n showLabelAndImage = true,\n}: SunToMoonButtonProps) {\n const { mode, toggleMode } = useThemeContext();\n\n const raysVariants = {\n hidden: {\n strokeOpacity: 0,\n transition: {\n staggerChildren: 0.05,\n staggerDirection: -1,\n },\n },\n visible: {\n strokeOpacity: 1,\n transition: {\n staggerChildren: 0.05,\n },\n },\n };\n\n const rayVariant = {\n hidden: {\n pathLength: 0,\n opacity: 0,\n // Start from center of the circle\n scale: 0,\n },\n visible: {\n pathLength: 1,\n opacity: 1,\n scale: 1,\n transition: {\n duration: 0.5,\n pathLength: { duration: 0.3 },\n opacity: { duration: 0.2 },\n scale: { duration: 0.3 },\n },\n },\n };\n\n const shineVariant = {\n hidden: {\n opacity: 0,\n scale: 2,\n strokeDasharray: \"20, 1000\",\n strokeDashoffset: 0,\n filter: \"blur(0px)\",\n },\n visible: {\n opacity: [0, 1, 0],\n strokeDashoffset: [0, -50, -100],\n filter: [\"blur(2px)\", \"blur(2px)\", \"blur(0px)\"],\n transition: {\n duration: 0.75,\n },\n },\n };\n\n const sunPath =\n \"M70 49.5C70 60.8218 60.8218 70 49.5 70C38.1782 70 29 60.8218 29 49.5C29 38.1782 38.1782 29 49.5 29C60 29 69.5 38 70 49.5Z\";\n const moonPath =\n \"M70 49.5C70 60.8218 60.8218 70 49.5 70C38.1782 70 29 60.8218 29 49.5C29 38.1782 38.1782 29 49.5 29C39 45 49.5 59.5 70 49.5Z\";\n const fallbackPath = sunPath;\n\n // Ensure we have valid paths at all times\n // Light mode = sun, Dark mode = moon\n const currentPath = mode === \"light\" ? sunPath : moonPath;\n const safeCurrentPath = currentPath || fallbackPath;\n\n return (\n <button\n type=\"button\"\n className=\"flex w-full cursor-pointer flex-col items-center justify-center rounded-xl py-3 text-base font-medium transition duration-200\"\n onClick={() => toggleMode()}\n >\n <span className=\"flex items-center\">\n {showLabelAndImage && (\n <span className=\"mr-2 text-neutral-900 dark:text-white\">\n {mode === \"light\" ? \"Light\" : \"Dark\"}\n </span>\n )}\n\n <motion.svg\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n width={20}\n height={20}\n viewBox=\"0 0 100 100\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"relative\"\n >\n {/* Shine effect for moon in dark mode */}\n {moonPath && (\n <motion.path\n variants={shineVariant}\n d={moonPath}\n className=\"absolute top-0 left-0 stroke-blue-100\"\n initial=\"hidden\"\n animate={mode === \"light\" ? \"hidden\" : \"visible\"}\n />\n )}\n\n {/* Sun rays - visible in light mode */}\n <motion.g\n variants={raysVariants}\n initial=\"hidden\"\n animate={mode === \"dark\" ? \"hidden\" : \"visible\"}\n style={{\n strokeLinecap: \"round\",\n strokeWidth: 6,\n stroke: \"var(--color-yellow-500)\",\n }}\n >\n <motion.path\n className=\"origin-center\"\n variants={rayVariant}\n d=\"M50 2V11\"\n />\n <motion.path variants={rayVariant} d=\"M85 15L78 22\" />\n <motion.path variants={rayVariant} d=\"M98 50H89\" />\n <motion.path variants={rayVariant} d=\"M85 85L78 78\" />\n <motion.path variants={rayVariant} d=\"M50 98V89\" />\n <motion.path variants={rayVariant} d=\"M23 78L16 84\" />\n <motion.path variants={rayVariant} d=\"M11 50H2\" />\n <motion.path variants={rayVariant} d=\"M23 23L16 16\" />\n </motion.g>\n\n {/* Main path - Light=Sun(yellow), Dark=Moon(blue) */}\n <motion.path\n d={safeCurrentPath}\n fill=\"transparent\"\n transition={{ duration: 1, type: \"spring\" }}\n initial={false}\n animate={\n mode === \"light\"\n ? {\n d: sunPath || fallbackPath,\n rotate: 0,\n scale: 1,\n stroke: \"var(--color-yellow-500)\",\n fill: \"var(--color-yellow-500)\",\n fillOpacity: 0.5,\n strokeOpacity: 1,\n }\n : {\n d: moonPath || fallbackPath,\n rotate: -360,\n scale: 2,\n stroke: \"var(--color-blue-400)\",\n fill: \"var(--color-blue-400)\",\n fillOpacity: 0.35,\n strokeOpacity: 1,\n }\n }\n />\n </motion.svg>\n </span>\n {showLabelAndImage && (\n <span className=\"mt-2 flex h-[90px] w-[180px] flex-col items-center justify-center rounded-md bg-neutral-100 dark:bg-neutral-800\">\n <span className=\"my-4 flex w-[150px] flex-col rounded-md\">\n <span className=\"mb-1 w-[80px] rounded-full bg-neutral-300 p-1 dark:bg-neutral-600\"></span>\n <span className=\"mb-1 w-[100px] rounded-full bg-neutral-300 p-1 dark:bg-neutral-600\"></span>\n <span className=\"w-[150px] rounded-full bg-neutral-300 p-1 dark:bg-neutral-600\"></span>\n </span>\n <span className=\"my-1 flex w-[150px] justify-between\">\n <span className=\"mb-1 w-[80px] rounded-full bg-neutral-300 p-1 dark:bg-neutral-600\"></span>\n <span className=\"mb-1 w-[30px] rounded-full bg-accent p-1\"></span>\n </span>\n </span>\n )}\n </button>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"switch-C5otDb4c.cjs","names":[],"sources":["../../src/components/forms/switch/Switch.tsx"],"sourcesContent":["import { forwardRef, useId } from \"react\";\n\nimport type { SwitchProps } from \"./types\";\n\nconst sanitizeId = (value: string) => value.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(\n ({ className = \"\", label, error, id, checked, ...props }, ref) => {\n const generatedId = useId();\n const switchId = id || `switch-${sanitizeId(generatedId)}`;\n const containerClasses = `flex items-center space-x-2 ${className}`\n .trim()\n .replace(/\\s+/g, \" \");\n\n return (\n <div className={containerClasses}>\n <label\n htmlFor={switchId}\n className={`\n relative inline-flex h-6 w-11 cursor-pointer items-center rounded-full transition-colors duration-200\n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-background\n disabled:cursor-not-allowed disabled:opacity-50\n ${checked ? \"bg-accent\" : \"bg-zinc-300 dark:bg-zinc-600\"}\n `\n .trim()\n .replace(/\\s+/g, \" \")}\n >\n <input\n ref={ref}\n type=\"checkbox\"\n id={switchId}\n className=\"sr-only\"\n checked={checked}\n {...props}\n />\n <span\n className={`\n pointer-events-none\n inline-block\n h-4\n w-4\n transform\n rounded-full\n bg-white\n shadow-lg\n ring-0\n transition-transform\n duration-300\n ease-in-out\n ${checked ? \"translate-x-6\" : \"translate-x-1\"}\n `\n .trim()\n .replace(/\\s+/g, \" \")}\n />\n </label>\n {label && (\n <label\n htmlFor={switchId}\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 cursor-pointer\"\n >\n {label}\n </label>\n )}\n {error && (\n <p className=\"text-sm font-medium text-destructive mt-1\">{error}</p>\n )}\n </div>\n );\n },\n);\n\nSwitch.displayName = \"Switch\";\n"],"mappings":";;;;AAIA,IAAM,cAAc,UAAkB,MAAM,QAAQ,mBAAmB,IAAI;AAE3E,IAAa,UAAA,GAAA,MAAA,aACV,EAAE,YAAY,IAAI,OAAO,OAAO,IAAI,SAAS,GAAG,SAAS,QAAQ;CAChE,MAAM,eAAA,GAAA,MAAA,QAAqB;CAC3B,MAAM,WAAW,MAAM,UAAU,WAAW,YAAY;AAKxD,QACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,WALkB,+BAA+B,YACrD,MAAM,CACN,QAAQ,QAAQ,IAAI;YAGrB;GACE,iBAAA,GAAA,kBAAA,MAAC,SAAD;IACE,SAAS;IACT,WAAW;;;;cAIP,UAAU,cAAc,+BAA+B;YAExD,MAAM,CACN,QAAQ,QAAQ,IAAI;cATzB,CAWE,iBAAA,GAAA,kBAAA,KAAC,SAAD;KACO;KACL,MAAK;KACL,IAAI;KACJ,WAAU;KACD;KACT,GAAI;KACJ,CAAA,EACF,iBAAA,GAAA,kBAAA,KAAC,QAAD,EACE,WAAW;;;;;;;;;;;;;gBAaP,UAAU,kBAAkB,gBAAgB;cAE7C,MAAM,CACN,QAAQ,QAAQ,IAAI,EACvB,CAAA,CACI;;GACP,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,OAAO,cAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"switch-DOVl_i_s.mjs","names":[],"sources":["../../src/components/forms/switch/Switch.tsx"],"sourcesContent":["import { forwardRef, useId } from \"react\";\n\nimport type { SwitchProps } from \"./types\";\n\nconst sanitizeId = (value: string) => value.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(\n ({ className = \"\", label, error, id, checked, ...props }, ref) => {\n const generatedId = useId();\n const switchId = id || `switch-${sanitizeId(generatedId)}`;\n const containerClasses = `flex items-center space-x-2 ${className}`\n .trim()\n .replace(/\\s+/g, \" \");\n\n return (\n <div className={containerClasses}>\n <label\n htmlFor={switchId}\n className={`\n relative inline-flex h-6 w-11 cursor-pointer items-center rounded-full transition-colors duration-200\n focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-background\n disabled:cursor-not-allowed disabled:opacity-50\n ${checked ? \"bg-accent\" : \"bg-zinc-300 dark:bg-zinc-600\"}\n `\n .trim()\n .replace(/\\s+/g, \" \")}\n >\n <input\n ref={ref}\n type=\"checkbox\"\n id={switchId}\n className=\"sr-only\"\n checked={checked}\n {...props}\n />\n <span\n className={`\n pointer-events-none\n inline-block\n h-4\n w-4\n transform\n rounded-full\n bg-white\n shadow-lg\n ring-0\n transition-transform\n duration-300\n ease-in-out\n ${checked ? \"translate-x-6\" : \"translate-x-1\"}\n `\n .trim()\n .replace(/\\s+/g, \" \")}\n />\n </label>\n {label && (\n <label\n htmlFor={switchId}\n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 cursor-pointer\"\n >\n {label}\n </label>\n )}\n {error && (\n <p className=\"text-sm font-medium text-destructive mt-1\">{error}</p>\n )}\n </div>\n );\n },\n);\n\nSwitch.displayName = \"Switch\";\n"],"mappings":";;;AAIA,IAAM,cAAc,UAAkB,MAAM,QAAQ,mBAAmB,IAAI;AAE3E,IAAa,SAAS,YACnB,EAAE,YAAY,IAAI,OAAO,OAAO,IAAI,SAAS,GAAG,SAAS,QAAQ;CAChE,MAAM,cAAc,OAAO;CAC3B,MAAM,WAAW,MAAM,UAAU,WAAW,YAAY;AAKxD,QACE,qBAAC,OAAD;EAAK,WALkB,+BAA+B,YACrD,MAAM,CACN,QAAQ,QAAQ,IAAI;YAGrB;GACE,qBAAC,SAAD;IACE,SAAS;IACT,WAAW;;;;cAIP,UAAU,cAAc,+BAA+B;YAExD,MAAM,CACN,QAAQ,QAAQ,IAAI;cATzB,CAWE,oBAAC,SAAD;KACO;KACL,MAAK;KACL,IAAI;KACJ,WAAU;KACD;KACT,GAAI;KACJ,CAAA,EACF,oBAAC,QAAD,EACE,WAAW;;;;;;;;;;;;;gBAaP,UAAU,kBAAkB,gBAAgB;cAE7C,MAAM,CACN,QAAQ,QAAQ,IAAI,EACvB,CAAA,CACI;;GACP,SACC,oBAAC,SAAD;IACE,SAAS;IACT,WAAU;cAET;IACK,CAAA;GAET,SACC,oBAAC,KAAD;IAAG,WAAU;cAA6C;IAAU,CAAA;GAElE;;EAGX;AAED,OAAO,cAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"textarea-Blky_fLK.mjs","names":[],"sources":["../../src/components/forms/textarea/Textarea.tsx"],"sourcesContent":["import type { TextareaProps } from \"./types\";\nimport { forwardRef, useState } from \"react\";\nimport { motion, useMotionTemplate, useMotionValue } from \"framer-motion\";\n\nimport { mergeClassNames } from \"../../../utils\";\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className = \"\", label, error, helperText, disabled, ...props }, ref) => {\n const radius = 100;\n const [visible, setVisible] = useState(false);\n const mouseX = useMotionValue(0);\n const mouseY = useMotionValue(0);\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 return (\n <div className=\"w-full\">\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 <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/textarea rounded-lg p-[2px] transition duration-300 hover:border-accent\",\n error ? \"border-destructive\" : \"border-border\",\n )}\n >\n <textarea\n ref={ref}\n disabled={disabled}\n className={mergeClassNames(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background-secondary px-3 py-2 text-sm text-foreground transition duration-400 ease-in-out placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent disabled:cursor-not-allowed disabled:opacity-50 resize-none\",\n error &&\n \"border-destructive text-destructive placeholder:text-destructive focus-visible:ring-destructive\",\n className,\n )}\n {...props}\n />\n </motion.div>\n\n {error && (\n <p className=\"text-sm font-medium text-destructive mt-1\">{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\nTextarea.displayName = \"Textarea\";\n"],"mappings":";;;;;AAMA,IAAa,WAAW,YACrB,EAAE,YAAY,IAAI,OAAO,OAAO,YAAY,UAAU,GAAG,SAAS,QAAQ;CACzE,MAAM,SAAS;CACf,MAAM,CAAC,SAAS,cAAc,SAAS,MAAM;CAC7C,MAAM,SAAS,eAAe,EAAE;CAChC,MAAM,SAAS,eAAe,EAAE;CAEhC,MAAM,mBAAmB,UAA4C;EACnE,MAAM,EAAE,MAAM,QAAQ,MAAM,cAAc,uBAAuB;AACjE,SAAO,IAAI,MAAM,UAAU,KAAK;AAChC,SAAO,IAAI,MAAM,UAAU,IAAI;;AAGjC,QACE,qBAAC,OAAD;EAAK,WAAU;YAAf;GACG,SACC,oBAAC,SAAD;IAAO,WAAU;cACd;IACK,CAAA;GAGV,oBAAC,OAAO,KAAR;IACE,OAAO,EACL,iBAAiB,WACb,SACA,iBAAiB;;sBAGX,UAAU,GAAG,OAAO,MAAM,MAC3B,aAAa,OAAO,KAAK,OAAO;;;;mBAK1C;IACD,aAAa,CAAC,WAAW,kBAAkB,KAAA;IAC3C,cAAc,CAAC,iBAAiB,WAAW,KAAK,GAAG,KAAA;IACnD,cAAc,CAAC,iBAAiB,WAAW,MAAM,GAAG,KAAA;IACpD,WAAW,gBACT,iFACA,QAAQ,uBAAuB,gBAChC;cAED,oBAAC,YAAD;KACO;KACK;KACV,WAAW,gBACT,iUACA,SACE,mGACF,UACD;KACD,GAAI;KACJ,CAAA;IACS,CAAA;GAEZ,SACC,oBAAC,KAAD;IAAG,WAAU;cAA6C;IAAU,CAAA;GAErE,cAAc,CAAC,SACd,oBAAC,KAAD;IAAG,WAAU;cAAsC;IAAe,CAAA;GAEhE;;EAGX;AAED,SAAS,cAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"textarea-ok_NlE2p.cjs","names":[],"sources":["../../src/components/forms/textarea/Textarea.tsx"],"sourcesContent":["import type { TextareaProps } from \"./types\";\nimport { forwardRef, useState } from \"react\";\nimport { motion, useMotionTemplate, useMotionValue } from \"framer-motion\";\n\nimport { mergeClassNames } from \"../../../utils\";\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className = \"\", label, error, helperText, disabled, ...props }, ref) => {\n const radius = 100;\n const [visible, setVisible] = useState(false);\n const mouseX = useMotionValue(0);\n const mouseY = useMotionValue(0);\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 return (\n <div className=\"w-full\">\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 <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/textarea rounded-lg p-[2px] transition duration-300 hover:border-accent\",\n error ? \"border-destructive\" : \"border-border\",\n )}\n >\n <textarea\n ref={ref}\n disabled={disabled}\n className={mergeClassNames(\n \"flex min-h-[80px] w-full rounded-md border border-input bg-background-secondary px-3 py-2 text-sm text-foreground transition duration-400 ease-in-out placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent disabled:cursor-not-allowed disabled:opacity-50 resize-none\",\n error &&\n \"border-destructive text-destructive placeholder:text-destructive focus-visible:ring-destructive\",\n className,\n )}\n {...props}\n />\n </motion.div>\n\n {error && (\n <p className=\"text-sm font-medium text-destructive mt-1\">{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\nTextarea.displayName = \"Textarea\";\n"],"mappings":";;;;;;AAMA,IAAa,YAAA,GAAA,MAAA,aACV,EAAE,YAAY,IAAI,OAAO,OAAO,YAAY,UAAU,GAAG,SAAS,QAAQ;CACzE,MAAM,SAAS;CACf,MAAM,CAAC,SAAS,eAAA,GAAA,MAAA,UAAuB,MAAM;CAC7C,MAAM,UAAA,GAAA,cAAA,gBAAwB,EAAE;CAChC,MAAM,UAAA,GAAA,cAAA,gBAAwB,EAAE;CAEhC,MAAM,mBAAmB,UAA4C;EACnE,MAAM,EAAE,MAAM,QAAQ,MAAM,cAAc,uBAAuB;AACjE,SAAO,IAAI,MAAM,UAAU,KAAK;AAChC,SAAO,IAAI,MAAM,UAAU,IAAI;;AAGjC,QACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,WAAU;YAAf;GACG,SACC,iBAAA,GAAA,kBAAA,KAAC,SAAD;IAAO,WAAU;cACd;IACK,CAAA;GAGV,iBAAA,GAAA,kBAAA,KAAC,cAAA,OAAO,KAAR;IACE,OAAO,EACL,iBAAiB,WACb,SACA,cAAA,iBAAiB;;sBAGX,UAAU,GAAG,OAAO,MAAM,MAC3B,aAAa,OAAO,KAAK,OAAO;;;;mBAK1C;IACD,aAAa,CAAC,WAAW,kBAAkB,KAAA;IAC3C,cAAc,CAAC,iBAAiB,WAAW,KAAK,GAAG,KAAA;IACnD,cAAc,CAAC,iBAAiB,WAAW,MAAM,GAAG,KAAA;IACpD,WAAW,cAAA,gBACT,iFACA,QAAQ,uBAAuB,gBAChC;cAED,iBAAA,GAAA,kBAAA,KAAC,YAAD;KACO;KACK;KACV,WAAW,cAAA,gBACT,iUACA,SACE,mGACF,UACD;KACD,GAAI;KACJ,CAAA;IACS,CAAA;GAEZ,SACC,iBAAA,GAAA,kBAAA,KAAC,KAAD;IAAG,WAAU;cAA6C;IAAU,CAAA;GAErE,cAAc,CAAC,SACd,iBAAA,GAAA,kBAAA,KAAC,KAAD;IAAG,WAAU;cAAsC;IAAe,CAAA;GAEhE;;EAGX;AAED,SAAS,cAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"theme-7DWLxJK_.cjs","names":[],"sources":["../../src/foundations/theme/ThemeProvider.tsx"],"sourcesContent":["import { createContext, useContext, useLayoutEffect, useState } from \"react\";\nimport type { ReactNode } from \"react\";\n\nexport type ThemeModeType = \"light\" | \"dark\";\nexport type ThemeColorType = \"purple\" | \"teal\" | \"yellow\" | \"green\";\n\nexport interface UseThemeType {\n mode: ThemeModeType;\n theme: ThemeColorType;\n brand: ThemeColorType;\n colorScheme: `${ThemeColorType}-${ThemeModeType}`;\n setMode: (mode: ThemeModeType) => void;\n toggleMode: () => void;\n setTheme: (theme: ThemeColorType) => void;\n}\n\nconst ThemeContext = createContext<UseThemeType | null>(null);\n\nconst MODE_STORAGE_KEY = \"erp-pro-ui:mode\";\nconst THEME_STORAGE_KEY = \"erp-pro-ui:theme\";\n\nfunction getStoredMode(): ThemeModeType | null {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n const mode =\n localStorage.getItem(MODE_STORAGE_KEY) ?? localStorage.getItem(\"mode\");\n return mode === \"light\" || mode === \"dark\" ? mode : null;\n}\n\nfunction getStoredTheme(): ThemeColorType | null {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n const theme =\n localStorage.getItem(THEME_STORAGE_KEY) ?? localStorage.getItem(\"theme\");\n return theme === \"purple\" ||\n theme === \"teal\" ||\n theme === \"yellow\" ||\n theme === \"green\"\n ? theme\n : null;\n}\n\nexport function ThemeProvider({ children }: { children: ReactNode }) {\n const [mode, setMode] = useState<ThemeModeType>(\n () => getStoredMode() ?? \"dark\",\n );\n const [theme, setTheme] = useState<ThemeColorType>(\n () => getStoredTheme() ?? \"purple\",\n );\n\n useLayoutEffect(() => {\n const colorScheme = `${theme}-${mode}`;\n\n document.documentElement.setAttribute(\"data-brand\", theme);\n document.documentElement.setAttribute(\"data-mode\", mode);\n document.documentElement.setAttribute(\"data-theme\", colorScheme);\n document.documentElement.style.colorScheme = mode;\n\n localStorage.setItem(MODE_STORAGE_KEY, mode);\n localStorage.setItem(THEME_STORAGE_KEY, theme);\n localStorage.setItem(\"mode\", mode);\n localStorage.setItem(\"theme\", theme);\n\n if (mode === \"dark\") {\n document.documentElement.classList.add(\"dark\");\n } else {\n document.documentElement.classList.remove(\"dark\");\n }\n }, [mode, theme]);\n\n const toggleMode = () =>\n setMode((previousMode) => (previousMode === \"light\" ? \"dark\" : \"light\"));\n\n const value: UseThemeType = {\n mode,\n theme,\n brand: theme,\n colorScheme: `${theme}-${mode}` as const,\n setMode,\n toggleMode,\n setTheme,\n };\n\n return (\n <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\n );\n}\n\nexport function useThemeContext() {\n const context = useContext(ThemeContext);\n\n if (!context) {\n throw new Error(\"useThemeContext must be used within a ThemeProvider\");\n }\n\n return context;\n}\n"],"mappings":";;;;AAgBA,IAAM,gBAAA,GAAA,MAAA,eAAkD,KAAK;AAE7D,IAAM,mBAAmB;AACzB,IAAM,oBAAoB;AAE1B,SAAS,gBAAsC;AAC7C,KAAI,OAAO,WAAW,YACpB,QAAO;CAGT,MAAM,OACJ,aAAa,QAAQ,iBAAiB,IAAI,aAAa,QAAQ,OAAO;AACxE,QAAO,SAAS,WAAW,SAAS,SAAS,OAAO;;AAGtD,SAAS,iBAAwC;AAC/C,KAAI,OAAO,WAAW,YACpB,QAAO;CAGT,MAAM,QACJ,aAAa,QAAQ,kBAAkB,IAAI,aAAa,QAAQ,QAAQ;AAC1E,QAAO,UAAU,YACf,UAAU,UACV,UAAU,YACV,UAAU,UACR,QACA;;AAGN,SAAgB,cAAc,EAAE,YAAqC;CACnE,MAAM,CAAC,MAAM,YAAA,GAAA,MAAA,gBACL,eAAe,IAAI,OAC1B;CACD,MAAM,CAAC,OAAO,aAAA,GAAA,MAAA,gBACN,gBAAgB,IAAI,SAC3B;AAED,EAAA,GAAA,MAAA,uBAAsB;EACpB,MAAM,cAAc,GAAG,MAAM,GAAG;AAEhC,WAAS,gBAAgB,aAAa,cAAc,MAAM;AAC1D,WAAS,gBAAgB,aAAa,aAAa,KAAK;AACxD,WAAS,gBAAgB,aAAa,cAAc,YAAY;AAChE,WAAS,gBAAgB,MAAM,cAAc;AAE7C,eAAa,QAAQ,kBAAkB,KAAK;AAC5C,eAAa,QAAQ,mBAAmB,MAAM;AAC9C,eAAa,QAAQ,QAAQ,KAAK;AAClC,eAAa,QAAQ,SAAS,MAAM;AAEpC,MAAI,SAAS,OACX,UAAS,gBAAgB,UAAU,IAAI,OAAO;MAE9C,UAAS,gBAAgB,UAAU,OAAO,OAAO;IAElD,CAAC,MAAM,MAAM,CAAC;CAEjB,MAAM,mBACJ,SAAS,iBAAkB,iBAAiB,UAAU,SAAS,QAAS;CAE1E,MAAM,QAAsB;EAC1B;EACA;EACA,OAAO;EACP,aAAa,GAAG,MAAM,GAAG;EACzB;EACA;EACA;EACD;AAED,QACE,iBAAA,GAAA,kBAAA,KAAC,aAAa,UAAd;EAA8B;EAAQ;EAAiC,CAAA;;AAI3E,SAAgB,kBAAkB;CAChC,MAAM,WAAA,GAAA,MAAA,YAAqB,aAAa;AAExC,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,sDAAsD;AAGxE,QAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"theme-BceKeYhw.mjs","names":[],"sources":["../../src/foundations/theme/ThemeProvider.tsx"],"sourcesContent":["import { createContext, useContext, useLayoutEffect, useState } from \"react\";\nimport type { ReactNode } from \"react\";\n\nexport type ThemeModeType = \"light\" | \"dark\";\nexport type ThemeColorType = \"purple\" | \"teal\" | \"yellow\" | \"green\";\n\nexport interface UseThemeType {\n mode: ThemeModeType;\n theme: ThemeColorType;\n brand: ThemeColorType;\n colorScheme: `${ThemeColorType}-${ThemeModeType}`;\n setMode: (mode: ThemeModeType) => void;\n toggleMode: () => void;\n setTheme: (theme: ThemeColorType) => void;\n}\n\nconst ThemeContext = createContext<UseThemeType | null>(null);\n\nconst MODE_STORAGE_KEY = \"erp-pro-ui:mode\";\nconst THEME_STORAGE_KEY = \"erp-pro-ui:theme\";\n\nfunction getStoredMode(): ThemeModeType | null {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n const mode =\n localStorage.getItem(MODE_STORAGE_KEY) ?? localStorage.getItem(\"mode\");\n return mode === \"light\" || mode === \"dark\" ? mode : null;\n}\n\nfunction getStoredTheme(): ThemeColorType | null {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n const theme =\n localStorage.getItem(THEME_STORAGE_KEY) ?? localStorage.getItem(\"theme\");\n return theme === \"purple\" ||\n theme === \"teal\" ||\n theme === \"yellow\" ||\n theme === \"green\"\n ? theme\n : null;\n}\n\nexport function ThemeProvider({ children }: { children: ReactNode }) {\n const [mode, setMode] = useState<ThemeModeType>(\n () => getStoredMode() ?? \"dark\",\n );\n const [theme, setTheme] = useState<ThemeColorType>(\n () => getStoredTheme() ?? \"purple\",\n );\n\n useLayoutEffect(() => {\n const colorScheme = `${theme}-${mode}`;\n\n document.documentElement.setAttribute(\"data-brand\", theme);\n document.documentElement.setAttribute(\"data-mode\", mode);\n document.documentElement.setAttribute(\"data-theme\", colorScheme);\n document.documentElement.style.colorScheme = mode;\n\n localStorage.setItem(MODE_STORAGE_KEY, mode);\n localStorage.setItem(THEME_STORAGE_KEY, theme);\n localStorage.setItem(\"mode\", mode);\n localStorage.setItem(\"theme\", theme);\n\n if (mode === \"dark\") {\n document.documentElement.classList.add(\"dark\");\n } else {\n document.documentElement.classList.remove(\"dark\");\n }\n }, [mode, theme]);\n\n const toggleMode = () =>\n setMode((previousMode) => (previousMode === \"light\" ? \"dark\" : \"light\"));\n\n const value: UseThemeType = {\n mode,\n theme,\n brand: theme,\n colorScheme: `${theme}-${mode}` as const,\n setMode,\n toggleMode,\n setTheme,\n };\n\n return (\n <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>\n );\n}\n\nexport function useThemeContext() {\n const context = useContext(ThemeContext);\n\n if (!context) {\n throw new Error(\"useThemeContext must be used within a ThemeProvider\");\n }\n\n return context;\n}\n"],"mappings":";;;AAgBA,IAAM,eAAe,cAAmC,KAAK;AAE7D,IAAM,mBAAmB;AACzB,IAAM,oBAAoB;AAE1B,SAAS,gBAAsC;AAC7C,KAAI,OAAO,WAAW,YACpB,QAAO;CAGT,MAAM,OACJ,aAAa,QAAQ,iBAAiB,IAAI,aAAa,QAAQ,OAAO;AACxE,QAAO,SAAS,WAAW,SAAS,SAAS,OAAO;;AAGtD,SAAS,iBAAwC;AAC/C,KAAI,OAAO,WAAW,YACpB,QAAO;CAGT,MAAM,QACJ,aAAa,QAAQ,kBAAkB,IAAI,aAAa,QAAQ,QAAQ;AAC1E,QAAO,UAAU,YACf,UAAU,UACV,UAAU,YACV,UAAU,UACR,QACA;;AAGN,SAAgB,cAAc,EAAE,YAAqC;CACnE,MAAM,CAAC,MAAM,WAAW,eAChB,eAAe,IAAI,OAC1B;CACD,MAAM,CAAC,OAAO,YAAY,eAClB,gBAAgB,IAAI,SAC3B;AAED,uBAAsB;EACpB,MAAM,cAAc,GAAG,MAAM,GAAG;AAEhC,WAAS,gBAAgB,aAAa,cAAc,MAAM;AAC1D,WAAS,gBAAgB,aAAa,aAAa,KAAK;AACxD,WAAS,gBAAgB,aAAa,cAAc,YAAY;AAChE,WAAS,gBAAgB,MAAM,cAAc;AAE7C,eAAa,QAAQ,kBAAkB,KAAK;AAC5C,eAAa,QAAQ,mBAAmB,MAAM;AAC9C,eAAa,QAAQ,QAAQ,KAAK;AAClC,eAAa,QAAQ,SAAS,MAAM;AAEpC,MAAI,SAAS,OACX,UAAS,gBAAgB,UAAU,IAAI,OAAO;MAE9C,UAAS,gBAAgB,UAAU,OAAO,OAAO;IAElD,CAAC,MAAM,MAAM,CAAC;CAEjB,MAAM,mBACJ,SAAS,iBAAkB,iBAAiB,UAAU,SAAS,QAAS;CAE1E,MAAM,QAAsB;EAC1B;EACA;EACA,OAAO;EACP,aAAa,GAAG,MAAM,GAAG;EACzB;EACA;EACA;EACD;AAED,QACE,oBAAC,aAAa,UAAd;EAA8B;EAAQ;EAAiC,CAAA;;AAI3E,SAAgB,kBAAkB;CAChC,MAAM,UAAU,WAAW,aAAa;AAExC,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,sDAAsD;AAGxE,QAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toast-CvfP7PUP.mjs","names":[],"sources":["../../src/components/overlays/toast/Toast.tsx"],"sourcesContent":["import {\n createContext,\n useContext,\n useState,\n useCallback,\n useRef,\n useEffect,\n forwardRef,\n} from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport {\n AlertTriangleIcon,\n CheckCircleIcon,\n CloseIcon,\n InfoCircleIcon,\n LoaderIcon,\n XCircleIcon,\n} from \"../../icons\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type ToastType =\n | \"success\"\n | \"error\"\n | \"warning\"\n | \"info\"\n | \"default\"\n | \"loading\";\nexport type ToastPosition =\n | \"top-left\"\n | \"top-center\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-center\"\n | \"bottom-right\";\n\nexport interface ToastAction {\n label: string;\n onClick: () => void;\n}\n\nexport interface Toast {\n id: string;\n type: ToastType;\n title?: string;\n description?: string;\n duration?: number;\n icon?: React.ReactNode;\n action?: ToastAction;\n dismissible?: boolean;\n onDismiss?: () => void;\n onAutoClose?: () => void;\n promise?: {\n loading: string;\n success: string | ((data: unknown) => string);\n error: string | ((error: unknown) => string);\n };\n}\n\nexport interface ToastOptions {\n type?: ToastType;\n title?: string;\n description?: string;\n duration?: number;\n icon?: React.ReactNode;\n action?: ToastAction;\n dismissible?: boolean;\n onDismiss?: () => void;\n onAutoClose?: () => void;\n}\n\nexport interface ToastContextValue {\n toasts: Toast[];\n toast: (options: ToastOptions | string) => string;\n success: (options: ToastOptions | string) => string;\n error: (options: ToastOptions | string) => string;\n warning: (options: ToastOptions | string) => string;\n info: (options: ToastOptions | string) => string;\n loading: (options: ToastOptions | string) => string;\n promise: <T>(\n promise: Promise<T>,\n options: {\n loading: string;\n success: string | ((data: T) => string);\n error: string | ((error: unknown) => string);\n },\n ) => Promise<T>;\n dismiss: (id: string) => void;\n dismissAll: () => void;\n update: (id: string, options: Partial<ToastOptions>) => void;\n}\n\nexport interface ToastProviderProps {\n children: React.ReactNode;\n /** Default position for toasts */\n position?: ToastPosition;\n /** Default duration in milliseconds */\n duration?: number;\n /** Maximum number of visible toasts */\n maxToasts?: number;\n /** Gap between toasts */\n gap?: number;\n /** Whether toasts are dismissible by default */\n dismissible?: boolean;\n /** Custom className for the toast container */\n containerClassName?: string;\n}\n\nexport interface ToastItemProps {\n toast: Toast;\n onDismiss: (id: string) => void;\n position: ToastPosition;\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nexport const useToast = (): ToastContextValue => {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error(\"useToast must be used within a ToastProvider\");\n }\n return context;\n};\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst typeStyles: Record<\n ToastType,\n { bg: string; icon: string; iconBg: string }\n> = {\n success: {\n bg: \"bg-white dark:bg-neutral-800 border-success-border\",\n icon: \"text-success\",\n iconBg: \"bg-success-subtle\",\n },\n error: {\n bg: \"bg-white dark:bg-neutral-800 border-danger-border\",\n icon: \"text-danger\",\n iconBg: \"bg-danger-subtle\",\n },\n warning: {\n bg: \"bg-white dark:bg-neutral-800 border-warning-border\",\n icon: \"text-warning\",\n iconBg: \"bg-warning-subtle\",\n },\n info: {\n bg: \"bg-white dark:bg-neutral-800 border-info-border\",\n icon: \"text-info\",\n iconBg: \"bg-info-subtle\",\n },\n default: {\n bg: \"bg-white dark:bg-neutral-800 border-neutral-200 dark:border-neutral-700\",\n icon: \"text-neutral-500\",\n iconBg: \"bg-neutral-100 dark:bg-neutral-700\",\n },\n loading: {\n bg: \"bg-white dark:bg-neutral-800 border-neutral-200 dark:border-neutral-700\",\n icon: \"text-accent\",\n iconBg: \"bg-accent-subtle\",\n },\n};\n\nconst positionStyles: Record<ToastPosition, string> = {\n \"top-left\": \"top-4 left-4\",\n \"top-center\": \"top-4 left-1/2 -translate-x-1/2\",\n \"top-right\": \"top-4 right-4\",\n \"bottom-left\": \"bottom-4 left-4\",\n \"bottom-center\": \"bottom-4 left-1/2 -translate-x-1/2\",\n \"bottom-right\": \"bottom-4 right-4\",\n};\n\nconst getMotionVariants = (position: ToastPosition) => {\n const isTop = position.startsWith(\"top\");\n const isCenter = position.includes(\"center\");\n const isLeft = position.includes(\"left\");\n\n return {\n initial: {\n opacity: 0,\n y: isTop ? -20 : 20,\n x: isCenter ? 0 : isLeft ? -20 : 20,\n scale: 0.95,\n },\n animate: {\n opacity: 1,\n y: 0,\n x: 0,\n scale: 1,\n },\n exit: {\n opacity: 0,\n y: isTop ? -20 : 20,\n scale: 0.95,\n transition: { duration: 0.15 },\n },\n };\n};\n\n// ============================================================================\n// Toast Item Component\n// ============================================================================\n\nconst ToastItem = forwardRef<HTMLDivElement, ToastItemProps>(\n ({ toast, onDismiss, position }, ref) => {\n const {\n type,\n title,\n description,\n icon,\n action,\n dismissible = true,\n duration,\n } = toast;\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const [progress, setProgress] = useState(100);\n const [isPaused, setIsPaused] = useState(false);\n\n const defaultIcons: Record<ToastType, React.ReactNode> = {\n success: <CheckCircleIcon className=\"w-5 h-5\" aria-hidden=\"true\" />,\n error: <XCircleIcon className=\"w-5 h-5\" aria-hidden=\"true\" />,\n warning: <AlertTriangleIcon className=\"w-5 h-5\" aria-hidden=\"true\" />,\n info: <InfoCircleIcon className=\"w-5 h-5\" aria-hidden=\"true\" />,\n loading: (\n <LoaderIcon className=\"w-5 h-5 animate-spin\" aria-hidden=\"true\" />\n ),\n default: null,\n };\n\n // Auto-dismiss timer with progress\n useEffect(() => {\n if (duration && duration > 0 && type !== \"loading\") {\n const startTime = Date.now();\n const interval = 50;\n\n const updateProgress = () => {\n if (isPaused) return;\n\n const elapsed = Date.now() - startTime;\n const remaining = Math.max(0, 100 - (elapsed / duration) * 100);\n setProgress(remaining);\n\n if (remaining <= 0) {\n toast.onAutoClose?.();\n onDismiss(toast.id);\n }\n };\n\n timerRef.current = setInterval(updateProgress, interval);\n\n return () => {\n if (timerRef.current) {\n clearInterval(timerRef.current);\n }\n };\n }\n }, [duration, toast.id, type, isPaused, onDismiss, toast]);\n\n const handleMouseEnter = () => setIsPaused(true);\n const handleMouseLeave = () => setIsPaused(false);\n\n const styles = typeStyles[type];\n const displayIcon = icon ?? defaultIcons[type];\n const variants = getMotionVariants(position);\n\n return (\n <motion.div\n ref={ref}\n layout\n initial={variants.initial}\n animate={variants.animate}\n exit={variants.exit}\n transition={{ type: \"spring\", stiffness: 400, damping: 30 }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n className={`\n relative flex items-start gap-3 p-4 pr-10\n rounded-lg shadow-lg border min-w-[320px] max-w-[420px]\n overflow-hidden\n ${styles.bg}\n `}\n role=\"alert\"\n aria-live=\"polite\"\n >\n {/* Progress bar */}\n {duration && duration > 0 && type !== \"loading\" && (\n <div className=\"absolute bottom-0 left-0 right-0 h-1 bg-neutral-100 dark:bg-neutral-700\">\n <motion.div\n className={`h-full ${\n type === \"success\"\n ? \"bg-success\"\n : type === \"error\"\n ? \"bg-destructive\"\n : type === \"warning\"\n ? \"bg-warning\"\n : type === \"info\"\n ? \"bg-info\"\n : \"bg-neutral-400\"\n }`}\n style={{ width: `${progress}%` }}\n transition={{ duration: 0.05 }}\n />\n </div>\n )}\n\n {/* Icon */}\n {displayIcon && (\n <div\n className={`shrink-0 p-1.5 rounded-full ${styles.iconBg} ${styles.icon}`}\n >\n {displayIcon}\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n {title && (\n <p className=\"font-semibold text-neutral-900 dark:text-white text-sm\">\n {title}\n </p>\n )}\n {description && (\n <p\n className={`text-sm text-neutral-600 dark:text-neutral-300 ${\n title ? \"mt-1\" : \"\"\n }`}\n >\n {description}\n </p>\n )}\n {action && (\n <button\n onClick={() => {\n action.onClick();\n onDismiss(toast.id);\n }}\n className=\"mt-2 text-sm font-medium text-accent hover:underline\"\n >\n {action.label}\n </button>\n )}\n </div>\n\n {/* Dismiss button */}\n {dismissible && (\n <button\n onClick={() => {\n toast.onDismiss?.();\n onDismiss(toast.id);\n }}\n className=\"absolute top-3 right-3 p-1 rounded-full text-neutral-400 hover:text-neutral-600 dark:text-neutral-500 dark:hover:text-neutral-300 hover:bg-neutral-100 dark:hover:bg-neutral-700 transition-colors\"\n aria-label=\"Dismiss\"\n >\n <CloseIcon className=\"w-4 h-4\" aria-hidden=\"true\" />\n </button>\n )}\n </motion.div>\n );\n },\n);\n\nToastItem.displayName = \"ToastItem\";\n\n// ============================================================================\n// Toast Provider Component\n// ============================================================================\n\nexport const ToastProvider: React.FC<ToastProviderProps> = ({\n children,\n position = \"bottom-right\",\n duration = 5000,\n maxToasts = 5,\n gap = 12,\n dismissible = true,\n containerClassName = \"\",\n}) => {\n const [toasts, setToasts] = useState<Toast[]>([]);\n const toastIdCounter = useRef(0);\n\n const generateId = () => {\n toastIdCounter.current += 1;\n return `toast-${toastIdCounter.current}-${Date.now()}`;\n };\n\n const addToast = useCallback(\n (options: ToastOptions | string, type: ToastType = \"default\"): string => {\n const id = generateId();\n const toastOptions: ToastOptions =\n typeof options === \"string\" ? { description: options } : options;\n\n const newToast: Toast = {\n id,\n type: toastOptions.type ?? type,\n title: toastOptions.title,\n description: toastOptions.description,\n duration: toastOptions.duration ?? duration,\n icon: toastOptions.icon,\n action: toastOptions.action,\n dismissible: toastOptions.dismissible ?? dismissible,\n onDismiss: toastOptions.onDismiss,\n onAutoClose: toastOptions.onAutoClose,\n };\n\n setToasts((prev) => {\n const updated = [...prev, newToast];\n // Keep only the last maxToasts\n return updated.slice(-maxToasts);\n });\n\n return id;\n },\n [duration, dismissible, maxToasts],\n );\n\n const dismiss = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const dismissAll = useCallback(() => {\n setToasts([]);\n }, []);\n\n const update = useCallback((id: string, options: Partial<ToastOptions>) => {\n setToasts((prev) =>\n prev.map((t) =>\n t.id === id\n ? {\n ...t,\n ...options,\n type: options.type ?? t.type,\n }\n : t,\n ),\n );\n }, []);\n\n const toast = useCallback(\n (options: ToastOptions | string) => addToast(options, \"default\"),\n [addToast],\n );\n\n const success = useCallback(\n (options: ToastOptions | string) => addToast(options, \"success\"),\n [addToast],\n );\n\n const error = useCallback(\n (options: ToastOptions | string) => addToast(options, \"error\"),\n [addToast],\n );\n\n const warning = useCallback(\n (options: ToastOptions | string) => addToast(options, \"warning\"),\n [addToast],\n );\n\n const info = useCallback(\n (options: ToastOptions | string) => addToast(options, \"info\"),\n [addToast],\n );\n\n const loading = useCallback(\n (options: ToastOptions | string) => {\n const toastOptions: ToastOptions =\n typeof options === \"string\" ? { description: options } : options;\n return addToast(\n { ...toastOptions, duration: 0, dismissible: false },\n \"loading\",\n );\n },\n [addToast],\n );\n\n const promise = useCallback(\n async <T,>(\n promiseToResolve: Promise<T>,\n options: {\n loading: string;\n success: string | ((data: T) => string);\n error: string | ((error: unknown) => string);\n },\n ): Promise<T> => {\n const id = loading(options.loading);\n\n try {\n const result = await promiseToResolve;\n const successMessage =\n typeof options.success === \"function\"\n ? options.success(result)\n : options.success;\n update(id, {\n type: \"success\",\n description: successMessage,\n duration,\n dismissible: true,\n });\n return result;\n } catch (err) {\n const errorMessage =\n typeof options.error === \"function\"\n ? options.error(err)\n : options.error;\n update(id, {\n type: \"error\",\n description: errorMessage,\n duration,\n dismissible: true,\n });\n throw err;\n }\n },\n [loading, update, duration],\n );\n\n const contextValue: ToastContextValue = {\n toasts,\n toast,\n success,\n error,\n warning,\n info,\n loading,\n promise,\n dismiss,\n dismissAll,\n update,\n };\n\n const isTop = position.startsWith(\"top\");\n\n return (\n <ToastContext.Provider value={contextValue}>\n {children}\n <div\n className={`fixed z-100 flex flex-col pointer-events-none ${positionStyles[position]} ${containerClassName}`}\n style={{ gap: `${gap}px` }}\n >\n <AnimatePresence mode=\"popLayout\">\n {(isTop ? toasts : [...toasts].reverse()).map((t) => (\n <div key={t.id} className=\"pointer-events-auto\">\n <ToastItem toast={t} onDismiss={dismiss} position={position} />\n </div>\n ))}\n </AnimatePresence>\n </div>\n </ToastContext.Provider>\n );\n};\n\n// ============================================================================\n// Standalone toast function (for use without hooks)\n// ============================================================================\n\nlet globalToast: ToastContextValue | null = null;\n\nexport const setGlobalToast = (toastContext: ToastContextValue) => {\n globalToast = toastContext;\n};\n\nexport const toastStandalone = {\n show: (options: ToastOptions | string) => globalToast?.toast(options),\n success: (options: ToastOptions | string) => globalToast?.success(options),\n error: (options: ToastOptions | string) => globalToast?.error(options),\n warning: (options: ToastOptions | string) => globalToast?.warning(options),\n info: (options: ToastOptions | string) => globalToast?.info(options),\n loading: (options: ToastOptions | string) => globalToast?.loading(options),\n promise: <T,>(\n promise: Promise<T>,\n options: {\n loading: string;\n success: string | ((data: T) => string);\n error: string | ((error: unknown) => string);\n },\n ) => globalToast?.promise(promise, options),\n dismiss: (id: string) => globalToast?.dismiss(id),\n dismissAll: () => globalToast?.dismissAll(),\n};\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport default ToastProvider;\nexport { ToastItem };\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toast-Ds7_19Ap.cjs","names":[],"sources":["../../src/components/overlays/toast/Toast.tsx"],"sourcesContent":["import {\n createContext,\n useContext,\n useState,\n useCallback,\n useRef,\n useEffect,\n forwardRef,\n} from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport {\n AlertTriangleIcon,\n CheckCircleIcon,\n CloseIcon,\n InfoCircleIcon,\n LoaderIcon,\n XCircleIcon,\n} from \"../../icons\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type ToastType =\n | \"success\"\n | \"error\"\n | \"warning\"\n | \"info\"\n | \"default\"\n | \"loading\";\nexport type ToastPosition =\n | \"top-left\"\n | \"top-center\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-center\"\n | \"bottom-right\";\n\nexport interface ToastAction {\n label: string;\n onClick: () => void;\n}\n\nexport interface Toast {\n id: string;\n type: ToastType;\n title?: string;\n description?: string;\n duration?: number;\n icon?: React.ReactNode;\n action?: ToastAction;\n dismissible?: boolean;\n onDismiss?: () => void;\n onAutoClose?: () => void;\n promise?: {\n loading: string;\n success: string | ((data: unknown) => string);\n error: string | ((error: unknown) => string);\n };\n}\n\nexport interface ToastOptions {\n type?: ToastType;\n title?: string;\n description?: string;\n duration?: number;\n icon?: React.ReactNode;\n action?: ToastAction;\n dismissible?: boolean;\n onDismiss?: () => void;\n onAutoClose?: () => void;\n}\n\nexport interface ToastContextValue {\n toasts: Toast[];\n toast: (options: ToastOptions | string) => string;\n success: (options: ToastOptions | string) => string;\n error: (options: ToastOptions | string) => string;\n warning: (options: ToastOptions | string) => string;\n info: (options: ToastOptions | string) => string;\n loading: (options: ToastOptions | string) => string;\n promise: <T>(\n promise: Promise<T>,\n options: {\n loading: string;\n success: string | ((data: T) => string);\n error: string | ((error: unknown) => string);\n },\n ) => Promise<T>;\n dismiss: (id: string) => void;\n dismissAll: () => void;\n update: (id: string, options: Partial<ToastOptions>) => void;\n}\n\nexport interface ToastProviderProps {\n children: React.ReactNode;\n /** Default position for toasts */\n position?: ToastPosition;\n /** Default duration in milliseconds */\n duration?: number;\n /** Maximum number of visible toasts */\n maxToasts?: number;\n /** Gap between toasts */\n gap?: number;\n /** Whether toasts are dismissible by default */\n dismissible?: boolean;\n /** Custom className for the toast container */\n containerClassName?: string;\n}\n\nexport interface ToastItemProps {\n toast: Toast;\n onDismiss: (id: string) => void;\n position: ToastPosition;\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nexport const useToast = (): ToastContextValue => {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error(\"useToast must be used within a ToastProvider\");\n }\n return context;\n};\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst typeStyles: Record<\n ToastType,\n { bg: string; icon: string; iconBg: string }\n> = {\n success: {\n bg: \"bg-white dark:bg-neutral-800 border-success-border\",\n icon: \"text-success\",\n iconBg: \"bg-success-subtle\",\n },\n error: {\n bg: \"bg-white dark:bg-neutral-800 border-danger-border\",\n icon: \"text-danger\",\n iconBg: \"bg-danger-subtle\",\n },\n warning: {\n bg: \"bg-white dark:bg-neutral-800 border-warning-border\",\n icon: \"text-warning\",\n iconBg: \"bg-warning-subtle\",\n },\n info: {\n bg: \"bg-white dark:bg-neutral-800 border-info-border\",\n icon: \"text-info\",\n iconBg: \"bg-info-subtle\",\n },\n default: {\n bg: \"bg-white dark:bg-neutral-800 border-neutral-200 dark:border-neutral-700\",\n icon: \"text-neutral-500\",\n iconBg: \"bg-neutral-100 dark:bg-neutral-700\",\n },\n loading: {\n bg: \"bg-white dark:bg-neutral-800 border-neutral-200 dark:border-neutral-700\",\n icon: \"text-accent\",\n iconBg: \"bg-accent-subtle\",\n },\n};\n\nconst positionStyles: Record<ToastPosition, string> = {\n \"top-left\": \"top-4 left-4\",\n \"top-center\": \"top-4 left-1/2 -translate-x-1/2\",\n \"top-right\": \"top-4 right-4\",\n \"bottom-left\": \"bottom-4 left-4\",\n \"bottom-center\": \"bottom-4 left-1/2 -translate-x-1/2\",\n \"bottom-right\": \"bottom-4 right-4\",\n};\n\nconst getMotionVariants = (position: ToastPosition) => {\n const isTop = position.startsWith(\"top\");\n const isCenter = position.includes(\"center\");\n const isLeft = position.includes(\"left\");\n\n return {\n initial: {\n opacity: 0,\n y: isTop ? -20 : 20,\n x: isCenter ? 0 : isLeft ? -20 : 20,\n scale: 0.95,\n },\n animate: {\n opacity: 1,\n y: 0,\n x: 0,\n scale: 1,\n },\n exit: {\n opacity: 0,\n y: isTop ? -20 : 20,\n scale: 0.95,\n transition: { duration: 0.15 },\n },\n };\n};\n\n// ============================================================================\n// Toast Item Component\n// ============================================================================\n\nconst ToastItem = forwardRef<HTMLDivElement, ToastItemProps>(\n ({ toast, onDismiss, position }, ref) => {\n const {\n type,\n title,\n description,\n icon,\n action,\n dismissible = true,\n duration,\n } = toast;\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const [progress, setProgress] = useState(100);\n const [isPaused, setIsPaused] = useState(false);\n\n const defaultIcons: Record<ToastType, React.ReactNode> = {\n success: <CheckCircleIcon className=\"w-5 h-5\" aria-hidden=\"true\" />,\n error: <XCircleIcon className=\"w-5 h-5\" aria-hidden=\"true\" />,\n warning: <AlertTriangleIcon className=\"w-5 h-5\" aria-hidden=\"true\" />,\n info: <InfoCircleIcon className=\"w-5 h-5\" aria-hidden=\"true\" />,\n loading: (\n <LoaderIcon className=\"w-5 h-5 animate-spin\" aria-hidden=\"true\" />\n ),\n default: null,\n };\n\n // Auto-dismiss timer with progress\n useEffect(() => {\n if (duration && duration > 0 && type !== \"loading\") {\n const startTime = Date.now();\n const interval = 50;\n\n const updateProgress = () => {\n if (isPaused) return;\n\n const elapsed = Date.now() - startTime;\n const remaining = Math.max(0, 100 - (elapsed / duration) * 100);\n setProgress(remaining);\n\n if (remaining <= 0) {\n toast.onAutoClose?.();\n onDismiss(toast.id);\n }\n };\n\n timerRef.current = setInterval(updateProgress, interval);\n\n return () => {\n if (timerRef.current) {\n clearInterval(timerRef.current);\n }\n };\n }\n }, [duration, toast.id, type, isPaused, onDismiss, toast]);\n\n const handleMouseEnter = () => setIsPaused(true);\n const handleMouseLeave = () => setIsPaused(false);\n\n const styles = typeStyles[type];\n const displayIcon = icon ?? defaultIcons[type];\n const variants = getMotionVariants(position);\n\n return (\n <motion.div\n ref={ref}\n layout\n initial={variants.initial}\n animate={variants.animate}\n exit={variants.exit}\n transition={{ type: \"spring\", stiffness: 400, damping: 30 }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n className={`\n relative flex items-start gap-3 p-4 pr-10\n rounded-lg shadow-lg border min-w-[320px] max-w-[420px]\n overflow-hidden\n ${styles.bg}\n `}\n role=\"alert\"\n aria-live=\"polite\"\n >\n {/* Progress bar */}\n {duration && duration > 0 && type !== \"loading\" && (\n <div className=\"absolute bottom-0 left-0 right-0 h-1 bg-neutral-100 dark:bg-neutral-700\">\n <motion.div\n className={`h-full ${\n type === \"success\"\n ? \"bg-success\"\n : type === \"error\"\n ? \"bg-destructive\"\n : type === \"warning\"\n ? \"bg-warning\"\n : type === \"info\"\n ? \"bg-info\"\n : \"bg-neutral-400\"\n }`}\n style={{ width: `${progress}%` }}\n transition={{ duration: 0.05 }}\n />\n </div>\n )}\n\n {/* Icon */}\n {displayIcon && (\n <div\n className={`shrink-0 p-1.5 rounded-full ${styles.iconBg} ${styles.icon}`}\n >\n {displayIcon}\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n {title && (\n <p className=\"font-semibold text-neutral-900 dark:text-white text-sm\">\n {title}\n </p>\n )}\n {description && (\n <p\n className={`text-sm text-neutral-600 dark:text-neutral-300 ${\n title ? \"mt-1\" : \"\"\n }`}\n >\n {description}\n </p>\n )}\n {action && (\n <button\n onClick={() => {\n action.onClick();\n onDismiss(toast.id);\n }}\n className=\"mt-2 text-sm font-medium text-accent hover:underline\"\n >\n {action.label}\n </button>\n )}\n </div>\n\n {/* Dismiss button */}\n {dismissible && (\n <button\n onClick={() => {\n toast.onDismiss?.();\n onDismiss(toast.id);\n }}\n className=\"absolute top-3 right-3 p-1 rounded-full text-neutral-400 hover:text-neutral-600 dark:text-neutral-500 dark:hover:text-neutral-300 hover:bg-neutral-100 dark:hover:bg-neutral-700 transition-colors\"\n aria-label=\"Dismiss\"\n >\n <CloseIcon className=\"w-4 h-4\" aria-hidden=\"true\" />\n </button>\n )}\n </motion.div>\n );\n },\n);\n\nToastItem.displayName = \"ToastItem\";\n\n// ============================================================================\n// Toast Provider Component\n// ============================================================================\n\nexport const ToastProvider: React.FC<ToastProviderProps> = ({\n children,\n position = \"bottom-right\",\n duration = 5000,\n maxToasts = 5,\n gap = 12,\n dismissible = true,\n containerClassName = \"\",\n}) => {\n const [toasts, setToasts] = useState<Toast[]>([]);\n const toastIdCounter = useRef(0);\n\n const generateId = () => {\n toastIdCounter.current += 1;\n return `toast-${toastIdCounter.current}-${Date.now()}`;\n };\n\n const addToast = useCallback(\n (options: ToastOptions | string, type: ToastType = \"default\"): string => {\n const id = generateId();\n const toastOptions: ToastOptions =\n typeof options === \"string\" ? { description: options } : options;\n\n const newToast: Toast = {\n id,\n type: toastOptions.type ?? type,\n title: toastOptions.title,\n description: toastOptions.description,\n duration: toastOptions.duration ?? duration,\n icon: toastOptions.icon,\n action: toastOptions.action,\n dismissible: toastOptions.dismissible ?? dismissible,\n onDismiss: toastOptions.onDismiss,\n onAutoClose: toastOptions.onAutoClose,\n };\n\n setToasts((prev) => {\n const updated = [...prev, newToast];\n // Keep only the last maxToasts\n return updated.slice(-maxToasts);\n });\n\n return id;\n },\n [duration, dismissible, maxToasts],\n );\n\n const dismiss = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const dismissAll = useCallback(() => {\n setToasts([]);\n }, []);\n\n const update = useCallback((id: string, options: Partial<ToastOptions>) => {\n setToasts((prev) =>\n prev.map((t) =>\n t.id === id\n ? {\n ...t,\n ...options,\n type: options.type ?? t.type,\n }\n : t,\n ),\n );\n }, []);\n\n const toast = useCallback(\n (options: ToastOptions | string) => addToast(options, \"default\"),\n [addToast],\n );\n\n const success = useCallback(\n (options: ToastOptions | string) => addToast(options, \"success\"),\n [addToast],\n );\n\n const error = useCallback(\n (options: ToastOptions | string) => addToast(options, \"error\"),\n [addToast],\n );\n\n const warning = useCallback(\n (options: ToastOptions | string) => addToast(options, \"warning\"),\n [addToast],\n );\n\n const info = useCallback(\n (options: ToastOptions | string) => addToast(options, \"info\"),\n [addToast],\n );\n\n const loading = useCallback(\n (options: ToastOptions | string) => {\n const toastOptions: ToastOptions =\n typeof options === \"string\" ? { description: options } : options;\n return addToast(\n { ...toastOptions, duration: 0, dismissible: false },\n \"loading\",\n );\n },\n [addToast],\n );\n\n const promise = useCallback(\n async <T,>(\n promiseToResolve: Promise<T>,\n options: {\n loading: string;\n success: string | ((data: T) => string);\n error: string | ((error: unknown) => string);\n },\n ): Promise<T> => {\n const id = loading(options.loading);\n\n try {\n const result = await promiseToResolve;\n const successMessage =\n typeof options.success === \"function\"\n ? options.success(result)\n : options.success;\n update(id, {\n type: \"success\",\n description: successMessage,\n duration,\n dismissible: true,\n });\n return result;\n } catch (err) {\n const errorMessage =\n typeof options.error === \"function\"\n ? options.error(err)\n : options.error;\n update(id, {\n type: \"error\",\n description: errorMessage,\n duration,\n dismissible: true,\n });\n throw err;\n }\n },\n [loading, update, duration],\n );\n\n const contextValue: ToastContextValue = {\n toasts,\n toast,\n success,\n error,\n warning,\n info,\n loading,\n promise,\n dismiss,\n dismissAll,\n update,\n };\n\n const isTop = position.startsWith(\"top\");\n\n return (\n <ToastContext.Provider value={contextValue}>\n {children}\n <div\n className={`fixed z-100 flex flex-col pointer-events-none ${positionStyles[position]} ${containerClassName}`}\n style={{ gap: `${gap}px` }}\n >\n <AnimatePresence mode=\"popLayout\">\n {(isTop ? toasts : [...toasts].reverse()).map((t) => (\n <div key={t.id} className=\"pointer-events-auto\">\n <ToastItem toast={t} onDismiss={dismiss} position={position} />\n </div>\n ))}\n </AnimatePresence>\n </div>\n </ToastContext.Provider>\n );\n};\n\n// ============================================================================\n// Standalone toast function (for use without hooks)\n// ============================================================================\n\nlet globalToast: ToastContextValue | null = null;\n\nexport const setGlobalToast = (toastContext: ToastContextValue) => {\n globalToast = toastContext;\n};\n\nexport const toastStandalone = {\n show: (options: ToastOptions | string) => globalToast?.toast(options),\n success: (options: ToastOptions | string) => globalToast?.success(options),\n error: (options: ToastOptions | string) => globalToast?.error(options),\n warning: (options: ToastOptions | string) => globalToast?.warning(options),\n info: (options: ToastOptions | string) => globalToast?.info(options),\n loading: (options: ToastOptions | string) => globalToast?.loading(options),\n promise: <T,>(\n promise: Promise<T>,\n options: {\n loading: string;\n success: string | ((data: T) => string);\n error: string | ((error: unknown) => string);\n },\n ) => globalToast?.promise(promise, options),\n dismiss: (id: string) => globalToast?.dismiss(id),\n dismissAll: () => globalToast?.dismissAll(),\n};\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport default ToastProvider;\nexport { ToastItem };\n"],"mappings":"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"}
|