@mhmo91/schmancy 0.10.42 → 0.10.43
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/custom-elements.json +264 -79
- package/dist/SchmancyElement-CeKrBW2j.cjs +2 -0
- package/dist/SchmancyElement-CeKrBW2j.cjs.map +1 -0
- package/dist/SchmancyElement-Ob9yGkiG.js +286 -0
- package/dist/SchmancyElement-Ob9yGkiG.js.map +1 -0
- package/dist/agent/schmancy.agent.js +4031 -3891
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/agent/schmancy.manifest.json +215 -58
- package/dist/animation-CCOIW4wJ.cjs.map +1 -1
- package/dist/animation-DCznELuT.js.map +1 -1
- package/dist/area-CbajcnmJ.cjs +21 -0
- package/dist/area-CbajcnmJ.cjs.map +1 -0
- package/dist/{area-DtCNCb8w.js → area-MxLAyWgV.js} +22 -22
- package/dist/area-MxLAyWgV.js.map +1 -0
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{audio-DdN76ikW.js → audio-B_0PGwYC.js} +1 -1
- package/dist/audio-B_0PGwYC.js.map +1 -0
- package/dist/{audio-B924fI5N.cjs → audio-CpwrIaw-.cjs} +1 -1
- package/dist/audio-CpwrIaw-.cjs.map +1 -0
- package/dist/audio.cjs +1 -1
- package/dist/audio.js +2 -2
- package/dist/autocomplete-CILzaDB7.cjs +115 -0
- package/dist/autocomplete-CILzaDB7.cjs.map +1 -0
- package/dist/{autocomplete-UNOknYUz.js → autocomplete-DV9RxCun.js} +113 -113
- package/dist/autocomplete-DV9RxCun.js.map +1 -0
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/avatar.cjs +1 -1
- package/dist/avatar.cjs.map +1 -1
- package/dist/avatar.js +4 -4
- package/dist/avatar.js.map +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-BZah1Sf9.js → boat-DoZGgQ0P.js} +5 -5
- package/dist/{boat-BZah1Sf9.js.map → boat-DoZGgQ0P.js.map} +1 -1
- package/dist/{boat-D3bEjxf8.cjs → boat-sg0cWO8a.cjs} +2 -2
- package/dist/{boat-D3bEjxf8.cjs.map → boat-sg0cWO8a.cjs.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/breadcrumb.cjs +32 -31
- package/dist/breadcrumb.cjs.map +1 -1
- package/dist/breadcrumb.js +33 -32
- package/dist/breadcrumb.js.map +1 -1
- package/dist/busy-Brs-TDh9.cjs +133 -0
- package/dist/busy-Brs-TDh9.cjs.map +1 -0
- package/dist/busy-g4LoQmhB.js +172 -0
- package/dist/busy-g4LoQmhB.js.map +1 -0
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/{button-CTvS5YX4.cjs → button-Cml67Y_d.cjs} +41 -32
- package/dist/button-Cml67Y_d.cjs.map +1 -0
- package/dist/{button-DgoDfcJx.js → button-DWANpZfD.js} +43 -34
- package/dist/button-DWANpZfD.js.map +1 -0
- package/dist/button.cjs +40 -33
- package/dist/button.cjs.map +1 -1
- package/dist/button.js +42 -35
- package/dist/button.js.map +1 -1
- package/dist/calendar-2dJrw9pR.cjs +58 -0
- package/dist/calendar-2dJrw9pR.cjs.map +1 -0
- package/dist/calendar-kCe5LaBa.js +434 -0
- package/dist/calendar-kCe5LaBa.js.map +1 -0
- package/dist/calendar.cjs +1 -0
- package/dist/calendar.js +2 -0
- package/dist/{card-C6ijJZpF.js → card-CS_hYJbz.js} +136 -136
- package/dist/card-CS_hYJbz.js.map +1 -0
- package/dist/card-d0KhTnx5.cjs +177 -0
- package/dist/card-d0KhTnx5.cjs.map +1 -0
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-7vEPZuGC.js → checkbox-Bjp7kWuE.js} +2 -2
- package/dist/{checkbox-7vEPZuGC.js.map → checkbox-Bjp7kWuE.js.map} +1 -1
- package/dist/{checkbox-DXKdxkXE.cjs → checkbox-DZ2Wrz7Y.cjs} +1 -1
- package/dist/{checkbox-DXKdxkXE.cjs.map → checkbox-DZ2Wrz7Y.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-9eG-96_D.cjs → chips-BHBVkxsa.cjs} +142 -153
- package/dist/chips-BHBVkxsa.cjs.map +1 -0
- package/dist/{chips-DF7akwz7.js → chips-DACeW7YL.js} +127 -138
- package/dist/chips-DACeW7YL.js.map +1 -0
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/connectivity.cjs +53 -35
- package/dist/connectivity.cjs.map +1 -1
- package/dist/connectivity.js +55 -37
- package/dist/connectivity.js.map +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/cursor-glow-Ah7VXSj7.js.map +1 -1
- package/dist/cursor-glow-Bulq-38P.cjs.map +1 -1
- package/dist/date-range-CVAWMdar.cjs +138 -0
- package/dist/date-range-CVAWMdar.cjs.map +1 -0
- package/dist/date-range-D2NZU5Yg.js +433 -0
- package/dist/date-range-D2NZU5Yg.js.map +1 -0
- package/dist/{date-range-inline-DV2c_gWM.cjs → date-range-inline-CGM0SPK9.cjs} +2 -4
- package/dist/date-range-inline-CGM0SPK9.cjs.map +1 -0
- package/dist/{date-range-inline-BnOD-ddB.js → date-range-inline-D6Ozerzw.js} +3 -5
- package/dist/date-range-inline-D6Ozerzw.js.map +1 -0
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +2 -2
- package/dist/dayjs.min-CvRZTfam.cjs +1 -0
- package/dist/dayjs.min-CvRZTfam.cjs.map +1 -0
- package/dist/dayjs.min-DnELezPs.js +296 -0
- package/dist/dayjs.min-DnELezPs.js.map +1 -0
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +3 -3
- package/dist/{details-ByF66CyY.js → details-Ct1_GwKr.js} +104 -93
- package/dist/details-Ct1_GwKr.js.map +1 -0
- package/dist/{details-B2-jECBh.cjs → details-D4fVOaj4.cjs} +109 -98
- package/dist/details-D4fVOaj4.cjs.map +1 -0
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{directives-DCb_LA9R.cjs → directives-B2VxfwRL.cjs} +1 -1
- package/dist/directives-B2VxfwRL.cjs.map +1 -0
- package/dist/{directives-BL7mzVsA.js → directives-Dj8jlv-Q.js} +3 -3
- package/dist/directives-Dj8jlv-Q.js.map +1 -0
- package/dist/directives.cjs +1 -1
- package/dist/directives.js +2 -2
- package/dist/discovery.service-CIa3Eeuk.cjs.map +1 -1
- package/dist/discovery.service-DZFxtRwW.js.map +1 -1
- package/dist/divider-B3v33OnX.cjs +57 -0
- package/dist/divider-B3v33OnX.cjs.map +1 -0
- package/dist/divider-BJHW3q11.js +89 -0
- package/dist/divider-BJHW3q11.js.map +1 -0
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/dropdown.cjs +40 -40
- package/dist/dropdown.cjs.map +1 -1
- package/dist/dropdown.js +41 -41
- package/dist/dropdown.js.map +1 -1
- package/dist/{expand-cZ8rfCWP.js → expand-BT8mOu8Q.js} +103 -97
- package/dist/expand-BT8mOu8Q.js.map +1 -0
- package/dist/expand-D0YdR9nR.cjs +147 -0
- package/dist/expand-D0YdR9nR.cjs.map +1 -0
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/fab.cjs +1 -1
- package/dist/fab.cjs.map +1 -1
- package/dist/fab.js +2 -2
- package/dist/fab.js.map +1 -1
- package/dist/{float-DkGyWSWy.cjs → float-BPQlDyai.cjs} +1 -1
- package/dist/{float-DkGyWSWy.cjs.map → float-BPQlDyai.cjs.map} +1 -1
- package/dist/{float-zn3DgXBT.js → float-BQcxj3i_.js} +2 -2
- package/dist/{float-zn3DgXBT.js.map → float-BQcxj3i_.js.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{form-DowzVsgI.cjs → form-CoWFnClb.cjs} +8 -13
- package/dist/form-CoWFnClb.cjs.map +1 -0
- package/dist/{form-tG7LwDm4.js → form-hC2LvCHX.js} +10 -15
- package/dist/form-hC2LvCHX.js.map +1 -0
- package/dist/form.cjs +12 -13
- package/dist/form.cjs.map +1 -1
- package/dist/form.js +23 -24
- package/dist/form.js.map +1 -1
- package/dist/gravity-6pL6CfIr.cjs.map +1 -1
- package/dist/gravity-sVK3zGBF.js.map +1 -1
- package/dist/handover/agent-runtime-followups.md +1 -1
- package/dist/handover/agent-runtime-v1.md +3 -3
- package/dist/{hashContent-iRZJJWtE.cjs.map → hashContent--s09Ed_g.cjs.map} +1 -1
- package/dist/{hashContent-BqU6v1Xr.js.map → hashContent-CAvrQ56N.js.map} +1 -1
- package/dist/icons-BeGKDZ-k.cjs +22 -0
- package/dist/icons-BeGKDZ-k.cjs.map +1 -0
- package/dist/{icons-Dup5skuk.js → icons-DEJnIxml.js} +20 -22
- package/dist/icons-DEJnIxml.js.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-CDJjnNmo.cjs → iframe-BkSukM9C.cjs} +9 -9
- package/dist/iframe-BkSukM9C.cjs.map +1 -0
- package/dist/{iframe-Xc3EPMZT.js → iframe-V3S-bwEY.js} +10 -10
- package/dist/iframe-V3S-bwEY.js.map +1 -0
- package/dist/iframe.cjs +1 -1
- package/dist/iframe.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +61 -60
- package/dist/{input-cTyDxW9L.js → input-CPFCSQld.js} +3 -10
- package/dist/input-CPFCSQld.js.map +1 -0
- package/dist/{input-DnmC6J1T.cjs → input-DSfwfhhj.cjs} +2 -9
- package/dist/input-DSfwfhhj.cjs.map +1 -0
- package/dist/input-chip-BUuFJUky.cjs +129 -0
- package/dist/input-chip-BUuFJUky.cjs.map +1 -0
- package/dist/{input-chip-CYI17YOq.js → input-chip-C3a1fwKB.js} +87 -104
- package/dist/input-chip-C3a1fwKB.js.map +1 -0
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/json.cjs +5 -1
- package/dist/json.cjs.map +1 -1
- package/dist/json.js +8 -4
- package/dist/json.js.map +1 -1
- package/dist/kbd.cjs +28 -28
- package/dist/kbd.cjs.map +1 -1
- package/dist/kbd.js +29 -29
- package/dist/kbd.js.map +1 -1
- package/dist/{layout-CNlZSJFU.cjs → layout-CdyHy_oX.cjs} +1 -1
- package/dist/layout-CdyHy_oX.cjs.map +1 -0
- package/dist/{layout-DDxw0EwL.js → layout-k6fOkpif.js} +1 -1
- package/dist/layout-k6fOkpif.js.map +1 -0
- package/dist/layout.cjs +26 -26
- package/dist/layout.cjs.map +1 -1
- package/dist/layout.js +27 -27
- package/dist/layout.js.map +1 -1
- package/dist/lazy-BaAiIUru.js.map +1 -1
- package/dist/lazy-C-7a4FAe.cjs.map +1 -1
- package/dist/{lightbox-CH-y3rYB.js → lightbox-DIG0VLOK.js} +8 -14
- package/dist/lightbox-DIG0VLOK.js.map +1 -0
- package/dist/{lightbox-CvtqoInF.cjs → lightbox-E5rgd-hu.cjs} +7 -13
- package/dist/lightbox-E5rgd-hu.cjs.map +1 -0
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/list-BRz0rDSH.cjs +47 -0
- package/dist/list-BRz0rDSH.cjs.map +1 -0
- package/dist/{list-DrsawQ5R.js → list-NrOYDPBo.js} +42 -35
- package/dist/list-NrOYDPBo.js.map +1 -0
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/magnetic-DKtc4umC.cjs.map +1 -1
- package/dist/magnetic-DaOOv5Dz.js.map +1 -1
- package/dist/{menu-CsY5lMqY.js → menu-B1Ei9SVj.js} +12 -12
- package/dist/menu-B1Ei9SVj.js.map +1 -0
- package/dist/{menu-BFRcTe3o.cjs → menu-Duvl66Nl.cjs} +10 -10
- package/dist/menu-Duvl66Nl.cjs.map +1 -0
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/{mixins-BoMURWag.cjs → mixins-Cjn20BQH.cjs} +42 -100
- package/dist/mixins-Cjn20BQH.cjs.map +1 -0
- package/dist/{mixins-bCEXbwJV.js → mixins-q4KAL8Xr.js} +42 -100
- package/dist/mixins-q4KAL8Xr.js.map +1 -0
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.js +2 -2
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/navigation-bar.cjs +1 -1
- package/dist/navigation-bar.js +1 -1
- package/dist/navigation-rail.cjs +2 -4
- package/dist/navigation-rail.cjs.map +1 -1
- package/dist/navigation-rail.js +3 -5
- package/dist/navigation-rail.js.map +1 -1
- package/dist/{notification-DFKRMmSq.js → notification-COhUhUCr.js} +5 -7
- package/dist/notification-COhUhUCr.js.map +1 -0
- package/dist/{notification-FBf3Mb2e.cjs → notification-DsdA_MJe.cjs} +2 -4
- package/dist/notification-DsdA_MJe.cjs.map +1 -0
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-Ct0lGdH3.js → option-BIzgTbXz.js} +20 -20
- package/dist/option-BIzgTbXz.js.map +1 -0
- package/dist/option-C5hhqR2z.cjs +43 -0
- package/dist/option-C5hhqR2z.cjs.map +1 -0
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{overlay-sRXiMkjn.cjs → overlay-BzgF8P7i.cjs} +48 -41
- package/dist/overlay-BzgF8P7i.cjs.map +1 -0
- package/dist/{overlay-Bh8Q_R01.js → overlay-LoRRemny.js} +52 -45
- package/dist/overlay-LoRRemny.js.map +1 -0
- package/dist/overlay-stack-Bdr9lOqi.cjs.map +1 -1
- package/dist/overlay-stack-D2rgxQLh.js.map +1 -1
- package/dist/overlay.cjs +1 -1
- package/dist/{overlay.confirm-body-CQihsR20.js → overlay.confirm-body-D0b1MoCw.js} +30 -45
- package/dist/overlay.confirm-body-D0b1MoCw.js.map +1 -0
- package/dist/{overlay.confirm-body-Jc1EuMGs.cjs → overlay.confirm-body-DCneq73Z.cjs} +22 -37
- package/dist/overlay.confirm-body-DCneq73Z.cjs.map +1 -0
- package/dist/overlay.js +3 -3
- package/dist/{overlay.service-BXPgS7ay.js → overlay.service-BuUeti6X.js} +2 -2
- package/dist/overlay.service-BuUeti6X.js.map +1 -0
- package/dist/{overlay.service-9Dp3g7ot.cjs → overlay.service-MMTiW2T3.cjs} +1 -1
- package/dist/overlay.service-MMTiW2T3.cjs.map +1 -0
- package/dist/{progress-CYLshdo2.js → progress-D7n3SKAO.js} +50 -50
- package/dist/progress-D7n3SKAO.js.map +1 -0
- package/dist/progress-DsCnFsH5.cjs +51 -0
- package/dist/progress-DsCnFsH5.cjs.map +1 -0
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-group-6kCgOgBL.cjs → radio-group-CaAjg9UV.cjs} +1 -1
- package/dist/radio-group-CaAjg9UV.cjs.map +1 -0
- package/dist/{radio-group-bZtZHOj_.js → radio-group-Drpl6Pl8.js} +2 -2
- package/dist/radio-group-Drpl6Pl8.js.map +1 -0
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/range.cjs +4 -2
- package/dist/range.cjs.map +1 -1
- package/dist/range.js +5 -3
- package/dist/range.js.map +1 -1
- package/dist/reduced-motion-D-L12p7G.js.map +1 -1
- package/dist/reduced-motion-Ds-HjMzn.cjs.map +1 -1
- package/dist/{rxjs-utils-Csnks202.cjs.map → rxjs-utils-4P2v57ke.cjs.map} +1 -1
- package/dist/{rxjs-utils-d-ivVN84.js.map → rxjs-utils-JMFdgQSl.js.map} +1 -1
- package/dist/rxjs-utils.cjs +1 -1
- package/dist/rxjs-utils.js +1 -1
- package/dist/search-DPKoC-dT.cjs.map +1 -1
- package/dist/search-MvIBA93K.js.map +1 -1
- package/dist/{select-CU3X-PIa.js → select-CTXkrrVZ.js} +13 -13
- package/dist/select-CTXkrrVZ.js.map +1 -0
- package/dist/select-DcLcpPCh.cjs +56 -0
- package/dist/select-DcLcpPCh.cjs.map +1 -0
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/skeleton.cjs +37 -33
- package/dist/skeleton.cjs.map +1 -1
- package/dist/skeleton.js +38 -34
- package/dist/skeleton.js.map +1 -1
- package/dist/skills/schmancy/surface.md +38 -22
- package/dist/skills/surface.md +38 -22
- package/dist/slider.cjs +31 -31
- package/dist/slider.cjs.map +1 -1
- package/dist/slider.js +32 -32
- package/dist/slider.js.map +1 -1
- package/dist/{sound.service-B4ZmXpH9.js → sound.service-AJwuk3yr.js} +1 -1
- package/dist/sound.service-AJwuk3yr.js.map +1 -0
- package/dist/{sound.service-DjlMvicQ.cjs → sound.service-CVsxhQkX.cjs} +1 -1
- package/dist/sound.service-CVsxhQkX.cjs.map +1 -0
- package/dist/{splash-screen-emCLYoVl.js → splash-screen-DANfqvlo.js} +23 -26
- package/dist/splash-screen-DANfqvlo.js.map +1 -0
- package/dist/splash-screen-K74cgU6S.cjs +38 -0
- package/dist/splash-screen-K74cgU6S.cjs.map +1 -0
- package/dist/splash-screen.cjs +1 -1
- package/dist/splash-screen.js +1 -1
- package/dist/{src-DGDTkOvC.js → src-DAtcPmCb.js} +173 -175
- package/dist/src-DAtcPmCb.js.map +1 -0
- package/dist/src-DuRvYagm.cjs +237 -0
- package/dist/src-DuRvYagm.cjs.map +1 -0
- package/dist/{state-CumAEPQH.cjs → state-BWQiqN6I.cjs} +1 -1
- package/dist/state-BWQiqN6I.cjs.map +1 -0
- package/dist/{state-DMd_FUeA.js → state-DBA_gzJO.js} +1 -1
- package/dist/state-DBA_gzJO.js.map +1 -0
- package/dist/state.cjs +1 -1
- package/dist/state.js +2 -2
- package/dist/steps.cjs +20 -12
- package/dist/steps.cjs.map +1 -1
- package/dist/steps.js +21 -13
- package/dist/steps.js.map +1 -1
- package/dist/surface-COBvWWFb.cjs +7 -0
- package/dist/surface-COBvWWFb.cjs.map +1 -0
- package/dist/{surface-DNiYigsX.js → surface-DXk1X1tL.js} +9 -9
- package/dist/{surface-DNiYigsX.js.map → surface-DXk1X1tL.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/switch.cjs +13 -4
- package/dist/switch.cjs.map +1 -1
- package/dist/switch.js +14 -5
- package/dist/switch.js.map +1 -1
- package/dist/table.cjs +4 -10
- package/dist/table.cjs.map +1 -1
- package/dist/table.js +5 -11
- package/dist/table.js.map +1 -1
- package/dist/{tabs-4T_4kCf-.js → tabs-BYhFWnsx.js} +7 -7
- package/dist/tabs-BYhFWnsx.js.map +1 -0
- package/dist/{tabs-Byxxt-AH.cjs → tabs-CJwB0fr0.cjs} +6 -6
- package/dist/tabs-CJwB0fr0.cjs.map +1 -0
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-kkYNk1ET.js → textarea-BjDx1w2g.js} +37 -41
- package/dist/textarea-BjDx1w2g.js.map +1 -0
- package/dist/{textarea-BwYwH9fu.cjs → textarea-CGgznhd6.cjs} +36 -40
- package/dist/textarea-CGgznhd6.cjs.map +1 -0
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-BG0EnzYP.cjs → theme-BVul7lHS.cjs} +6 -6
- package/dist/{theme-BG0EnzYP.cjs.map → theme-BVul7lHS.cjs.map} +1 -1
- package/dist/{theme-DwQBl6sr.js → theme-Dvm5J8nh.js} +11 -11
- package/dist/{theme-DwQBl6sr.js.map → theme-Dvm5J8nh.js.map} +1 -1
- package/dist/{theme-button-BD8anzsZ.js → theme-button-Bko5ohFP.js} +2 -2
- package/dist/{theme-button-BD8anzsZ.js.map → theme-button-Bko5ohFP.js.map} +1 -1
- package/dist/{theme-button-DlrNoCMA.cjs → theme-button-YLY7zR1c.cjs} +1 -1
- package/dist/{theme-button-DlrNoCMA.cjs.map → theme-button-YLY7zR1c.cjs.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/{theme.interface-CSt7JUBD.cjs.map → theme.interface-B-qxDsZQ.cjs.map} +1 -1
- package/dist/{theme.interface-odQEpZZH.js.map → theme.interface-B7caS5cg.js.map} +1 -1
- package/dist/theme.js +4 -4
- package/dist/{theme.service-Dv_55nfE.js → theme.service-D94nm7Bf.js} +1 -1
- package/dist/theme.service-D94nm7Bf.js.map +1 -0
- package/dist/{theme.service-pjkTM209.cjs → theme.service-h2fXQq7x.cjs} +1 -1
- package/dist/theme.service-h2fXQq7x.cjs.map +1 -0
- package/dist/tooltip.cjs.map +1 -1
- package/dist/tooltip.js.map +1 -1
- package/dist/tree.cjs +14 -14
- package/dist/tree.cjs.map +1 -1
- package/dist/tree.js +15 -15
- package/dist/tree.js.map +1 -1
- package/dist/types.cjs +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.js +19 -2
- package/dist/types.js.map +1 -1
- package/dist/typewriter.cjs.map +1 -1
- package/dist/typewriter.js.map +1 -1
- package/dist/typography-ByF2k5yW.js +358 -0
- package/dist/typography-ByF2k5yW.js.map +1 -0
- package/dist/typography-Cfav17it.cjs +282 -0
- package/dist/typography-Cfav17it.cjs.map +1 -0
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/dist/utils-DIXndz6Q.cjs.map +1 -0
- package/dist/utils-dSPH7Oh9.js.map +1 -0
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +1 -1
- package/dist/visually-hidden.cjs +13 -13
- package/dist/visually-hidden.cjs.map +1 -1
- package/dist/visually-hidden.js +14 -14
- package/dist/visually-hidden.js.map +1 -1
- package/dist/window-Br1OmpL-.cjs +67 -0
- package/dist/window-Br1OmpL-.cjs.map +1 -0
- package/dist/{window-C76zstbV.js → window-CCmN4but.js} +24 -15
- package/dist/window-CCmN4but.js.map +1 -0
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/package.json +1 -1
- package/skills/schmancy/surface.md +38 -22
- package/src/area/area.component.ts +249 -163
- package/src/area/area.service.test.ts +994 -1006
- package/src/area/area.service.ts +76 -72
- package/src/area/index.ts +7 -7
- package/src/area/lazy.ts +39 -42
- package/src/area/route.component.ts +54 -52
- package/src/area/router.types.ts +7 -7
- package/src/audio/emotional-sounds.ts +880 -801
- package/src/audio/sound.service.ts +26 -5
- package/src/avatar/avatar.ts +4 -4
- package/src/badge/badge.ts +15 -12
- package/src/badge/index.ts +1 -1
- package/src/boat/boat.ts +1 -1
- package/src/breadcrumb/breadcrumb.ts +37 -32
- package/src/busy/busy.ts +15 -12
- package/src/busy/index.ts +2 -2
- package/src/busy/spinner.ts +132 -119
- package/src/button/button.test.ts +5 -1
- package/src/button/button.ts +113 -72
- package/src/button/icon-button.ts +64 -46
- package/src/button/index.ts +2 -2
- package/src/calendar/calendar.test.ts +504 -0
- package/src/calendar/calendar.ts +587 -0
- package/src/calendar/index.ts +2 -0
- package/src/card/actions.ts +11 -9
- package/src/card/card.ts +79 -77
- package/src/card/content.ts +8 -6
- package/src/card/index.ts +4 -4
- package/src/card/media.ts +50 -50
- package/src/chips/assist-chip.ts +1 -1
- package/src/chips/chips.ts +1 -1
- package/src/chips/filter-chip.ts +1 -1
- package/src/chips/index.ts +1 -1
- package/src/chips/input-chip.ts +1 -1
- package/src/chips/suggestion-chip.ts +1 -1
- package/src/connectivity/connectivity-status.ts +90 -62
- package/src/content-drawer/drawer.service.ts +47 -36
- package/src/content-drawer/drawer.ts +31 -18
- package/src/content-drawer/index.ts +5 -5
- package/src/content-drawer/main.ts +9 -7
- package/src/content-drawer/sheet.ts +8 -6
- package/src/date-range-inline/date-range-inline.ts +523 -522
- package/src/date-range-inline/index.ts +2 -2
- package/src/delay/index.ts +1 -1
- package/src/details/details.ts +119 -105
- package/src/details/index.ts +1 -1
- package/src/directives/ai-badge.ts +1 -5
- package/src/directives/animate-text.ts +43 -31
- package/src/directives/art/effects/howl.ts +1 -4
- package/src/directives/art/effects/samwa.ts +11 -5
- package/src/directives/art/effects/snow.ts +1 -2
- package/src/directives/battery.ts +21 -12
- package/src/directives/confirm-click.ts +9 -17
- package/src/directives/cursor-glow.ts +1 -1
- package/src/directives/cycle-text.ts +7 -21
- package/src/directives/drag.ts +50 -45
- package/src/directives/fyi.ts +1 -6
- package/src/directives/gravity.ts +10 -8
- package/src/directives/hummingbird.ts +256 -107
- package/src/directives/index.ts +29 -29
- package/src/directives/intersect.ts +11 -11
- package/src/directives/layout.ts +25 -36
- package/src/directives/liquid.ts +4 -10
- package/src/directives/living-border.ts +7 -5
- package/src/directives/long-press.ts +2 -1
- package/src/directives/magnetic.ts +7 -6
- package/src/directives/nebula.ts +34 -28
- package/src/directives/overflow-within.ts +18 -20
- package/src/directives/reduced-motion.ts +9 -9
- package/src/directives/reveal.ts +193 -195
- package/src/directives/ripple.ts +9 -7
- package/src/directives/urgent.ts +3 -1
- package/src/directives/working-snake.ts +1 -1
- package/src/discovery/discovery.service.ts +198 -210
- package/src/discovery/index.ts +1 -1
- package/src/divider/divider.ts +49 -47
- package/src/divider/index.ts +1 -1
- package/src/dropdown/dropdown-content.ts +42 -40
- package/src/dropdown/index.ts +2 -2
- package/src/expand/expand-root.component.ts +70 -61
- package/src/expand/expand.component.ts +48 -43
- package/src/fab/fab.test.ts +1 -2
- package/src/fab/fab.ts +2 -4
- package/src/form/fields/autocomplete/autocomplete.scss +6 -2
- package/src/form/fields/autocomplete/autocomplete.ts +712 -724
- package/src/form/fields/autocomplete/index.ts +1 -1
- package/src/form/fields/checkbox/checkbox.ts +1 -4
- package/src/form/fields/chips/assist-chip.ts +69 -72
- package/src/form/fields/chips/chips.ts +14 -15
- package/src/form/fields/chips/filter-chip.ts +36 -32
- package/src/form/fields/chips/index.ts +5 -5
- package/src/form/fields/chips/input-chip.ts +130 -142
- package/src/form/fields/chips/suggestion-chip.ts +69 -72
- package/src/form/fields/date-range/date-range-dialog.ts +141 -194
- package/src/form/fields/date-range/date-range-helpers.ts +63 -64
- package/src/form/fields/date-range/date-range.test.ts +359 -122
- package/src/form/fields/date-range/date-range.ts +319 -395
- package/src/form/fields/date-range/index.ts +2 -2
- package/src/form/fields/input/index.ts +8 -8
- package/src/form/fields/input/input.scss +30 -26
- package/src/form/fields/input/input.test.ts +4 -1
- package/src/form/fields/input/input.ts +4 -20
- package/src/form/fields/radio-group/index.ts +2 -2
- package/src/form/fields/radio-group/radio-button.ts +8 -8
- package/src/form/fields/radio-group/radio-group.ts +4 -1
- package/src/form/fields/range/range.ts +3 -1
- package/src/form/fields/select/index.ts +2 -2
- package/src/form/fields/select/select.ts +51 -45
- package/src/form/fields/switch/switch.ts +13 -7
- package/src/form/fields/textarea/index.ts +1 -1
- package/src/form/fields/textarea/textarea.ts +44 -49
- package/src/form/form-summary.ts +15 -14
- package/src/form/form.test.ts +0 -1
- package/src/form/form.ts +11 -23
- package/src/icons/icon.ts +25 -25
- package/src/icons/index.ts +1 -1
- package/src/iframe/iframe.ts +11 -9
- package/src/index.ts +1 -0
- package/src/json/json.ts +9 -2
- package/src/kbd/kbd.ts +30 -28
- package/src/layout/scroll/index.ts +1 -1
- package/src/layout/scroll/scroll.ts +54 -54
- package/src/lightbox/lightbox-service.ts +27 -18
- package/src/lightbox/lightbox.directive.ts +2 -1
- package/src/lightbox/lightbox.ts +21 -38
- package/src/list/index.ts +3 -3
- package/src/list/list-item.ts +32 -26
- package/src/list/list.ts +13 -8
- package/src/menu/index.ts +2 -2
- package/src/menu/menu-item.ts +7 -5
- package/src/menu/menu.ts +8 -6
- package/src/nav-drawer/appbar.ts +9 -7
- package/src/nav-drawer/content.ts +10 -8
- package/src/nav-drawer/drawer.ts +29 -25
- package/src/nav-drawer/index.ts +6 -6
- package/src/navigation-bar/index.ts +2 -2
- package/src/navigation-bar/navigation-bar-item.ts +127 -118
- package/src/navigation-bar/navigation-bar.ts +103 -91
- package/src/navigation-rail/index.ts +2 -2
- package/src/navigation-rail/navigation-rail.ts +21 -22
- package/src/notification/index.ts +6 -6
- package/src/notification/notification-service.ts +1 -2
- package/src/notification/notification.scss +5 -1
- package/src/notification/notification.ts +1 -3
- package/src/notification/notify.ts +204 -207
- package/src/option/index.ts +1 -1
- package/src/option/option.ts +26 -25
- package/src/overlay/overlay.animations.ts +4 -14
- package/src/overlay/overlay.component.ts +110 -131
- package/src/overlay/overlay.confirm-body.ts +26 -48
- package/src/overlay/overlay.gestures.ts +8 -10
- package/src/overlay/overlay.layout.ts +1 -4
- package/src/overlay/overlay.positioning.ts +4 -15
- package/src/overlay/overlay.service.ts +9 -24
- package/src/overlay/overlay.stack.test.ts +4 -1
- package/src/overlay/overlay.stack.ts +4 -4
- package/src/overlay/overlay.types.ts +11 -20
- package/src/progress/index.ts +1 -1
- package/src/progress/progress.ts +135 -133
- package/src/rxjs-utils/index.ts +6 -6
- package/src/rxjs-utils/waitForElement.ts +20 -20
- package/src/rxjs-utils/waitForElementAll.ts +21 -21
- package/src/rxjs-utils/waitForElements.ts +27 -27
- package/src/rxjs-utils/waitForElementsAll.ts +27 -29
- package/src/rxjs-utils/waitUntil.ts +7 -12
- package/src/skeleton/skeleton.ts +39 -33
- package/src/slider/index.ts +2 -2
- package/src/slider/slide.ts +14 -12
- package/src/slider/slider.ts +24 -22
- package/src/splash-screen/index.ts +1 -1
- package/src/splash-screen/splash-screen.ts +26 -27
- package/src/state/active-host.ts +4 -5
- package/src/state/index.ts +34 -53
- package/src/state/persist.ts +14 -11
- package/src/state/schmancy-context.ts +88 -88
- package/src/state/state.test-d.ts +3 -13
- package/src/state/state.test.ts +1 -4
- package/src/steps/index.ts +3 -3
- package/src/steps/schmancy-step.ts +41 -31
- package/src/steps/schmancy-steps.ts +7 -5
- package/src/surface/index.ts +1 -1
- package/src/surface/surface.styles.ts +53 -104
- package/src/surface/surface.ts +10 -8
- package/src/table/index.ts +2 -2
- package/src/table/row.ts +1 -4
- package/src/table/table.ts +2 -5
- package/src/tabs/index.ts +2 -2
- package/src/tabs/tabs-group.ts +8 -6
- package/src/teleport/index.ts +2 -2
- package/src/test-utils/a11y.ts +1 -3
- package/src/theme/index.ts +17 -17
- package/src/theme/theme-audio-player.ts +18 -16
- package/src/theme/theme-controller-boat.ts +1 -1
- package/src/theme/theme-controller.ts +36 -32
- package/src/theme/theme.component.ts +5 -9
- package/src/theme/theme.events.ts +1 -1
- package/src/theme/theme.format.ts +7 -7
- package/src/theme/theme.service.ts +453 -468
- package/src/theme/theme.style.css +78 -23
- package/src/theme-button/index.ts +1 -1
- package/src/tooltip/tooltip.directive.ts +1 -1
- package/src/tree/index.ts +1 -1
- package/src/tree/tree.ts +24 -16
- package/src/types/surface.ts +38 -44
- package/src/typewriter/typewriter.directive.ts +30 -39
- package/src/typography/typography.ts +289 -269
- package/src/utils/animation.ts +2 -8
- package/src/utils/index.ts +6 -6
- package/src/utils/number.ts +480 -517
- package/src/utils/overlay-stack.ts +1 -3
- package/src/utils/search.ts +5 -9
- package/src/visually-hidden/visually-hidden.ts +15 -13
- package/src/window/window-manager.ts +6 -1
- package/src/window/window-position.ts +7 -5
- package/src/window/window.ts +143 -108
- package/types/src/calendar/calendar.d.ts +108 -0
- package/types/src/calendar/calendar.test.d.ts +1 -0
- package/types/src/calendar/index.d.ts +2 -0
- package/types/src/directives/cursor-glow.d.ts +1 -1
- package/types/src/directives/hummingbird.d.ts +3 -3
- package/types/src/form/fields/date-range/date-range-dialog.d.ts +24 -28
- package/types/src/form/fields/date-range/date-range.d.ts +35 -66
- package/types/src/form/fields/date-range/date-range.test.d.ts +1 -0
- package/types/src/form/fields/date-range/index.d.ts +1 -1
- package/types/src/index.d.ts +1 -0
- package/types/src/surface/surface.styles.d.ts +13 -6
- package/types/src/types/surface.d.ts +17 -22
- package/types/src/utils/number.d.ts +1 -1
- package/dist/SchmancyElement-OG71FtNv.js +0 -286
- package/dist/SchmancyElement-OG71FtNv.js.map +0 -1
- package/dist/SchmancyElement-PS1u0j1B.cjs +0 -2
- package/dist/SchmancyElement-PS1u0j1B.cjs.map +0 -1
- package/dist/area-CaEI33G0.cjs +0 -21
- package/dist/area-CaEI33G0.cjs.map +0 -1
- package/dist/area-DtCNCb8w.js.map +0 -1
- package/dist/audio-B924fI5N.cjs.map +0 -1
- package/dist/audio-DdN76ikW.js.map +0 -1
- package/dist/autocomplete-Dq3BkitV.cjs +0 -115
- package/dist/autocomplete-Dq3BkitV.cjs.map +0 -1
- package/dist/autocomplete-UNOknYUz.js.map +0 -1
- package/dist/busy--WqiXKnl.cjs +0 -134
- package/dist/busy--WqiXKnl.cjs.map +0 -1
- package/dist/busy-DzXyO0z6.js +0 -173
- package/dist/busy-DzXyO0z6.js.map +0 -1
- package/dist/button-CTvS5YX4.cjs.map +0 -1
- package/dist/button-DgoDfcJx.js.map +0 -1
- package/dist/card-C6ijJZpF.js.map +0 -1
- package/dist/card-Ci3_9Dd4.cjs +0 -177
- package/dist/card-Ci3_9Dd4.cjs.map +0 -1
- package/dist/chips-9eG-96_D.cjs.map +0 -1
- package/dist/chips-DF7akwz7.js.map +0 -1
- package/dist/date-range-C13_R3OA.js +0 -966
- package/dist/date-range-C13_R3OA.js.map +0 -1
- package/dist/date-range-Q2xj5Syc.cjs +0 -142
- package/dist/date-range-Q2xj5Syc.cjs.map +0 -1
- package/dist/date-range-inline-BnOD-ddB.js.map +0 -1
- package/dist/date-range-inline-DV2c_gWM.cjs.map +0 -1
- package/dist/details-B2-jECBh.cjs.map +0 -1
- package/dist/details-ByF66CyY.js.map +0 -1
- package/dist/directives-BL7mzVsA.js.map +0 -1
- package/dist/directives-DCb_LA9R.cjs.map +0 -1
- package/dist/divider-Bv2QiOZL.cjs +0 -57
- package/dist/divider-Bv2QiOZL.cjs.map +0 -1
- package/dist/divider-gYuz0zDU.js +0 -89
- package/dist/divider-gYuz0zDU.js.map +0 -1
- package/dist/expand-B9IUGVtc.cjs +0 -141
- package/dist/expand-B9IUGVtc.cjs.map +0 -1
- package/dist/expand-cZ8rfCWP.js.map +0 -1
- package/dist/form-DowzVsgI.cjs.map +0 -1
- package/dist/form-tG7LwDm4.js.map +0 -1
- package/dist/icons-BZeCloP9.cjs +0 -24
- package/dist/icons-BZeCloP9.cjs.map +0 -1
- package/dist/icons-Dup5skuk.js.map +0 -1
- package/dist/iframe-CDJjnNmo.cjs.map +0 -1
- package/dist/iframe-Xc3EPMZT.js.map +0 -1
- package/dist/input-DnmC6J1T.cjs.map +0 -1
- package/dist/input-cTyDxW9L.js.map +0 -1
- package/dist/input-chip-CV91URyU.cjs +0 -146
- package/dist/input-chip-CV91URyU.cjs.map +0 -1
- package/dist/input-chip-CYI17YOq.js.map +0 -1
- package/dist/layout-CNlZSJFU.cjs.map +0 -1
- package/dist/layout-DDxw0EwL.js.map +0 -1
- package/dist/lightbox-CH-y3rYB.js.map +0 -1
- package/dist/lightbox-CvtqoInF.cjs.map +0 -1
- package/dist/list-Dl8KfxrF.cjs +0 -40
- package/dist/list-Dl8KfxrF.cjs.map +0 -1
- package/dist/list-DrsawQ5R.js.map +0 -1
- package/dist/menu-BFRcTe3o.cjs.map +0 -1
- package/dist/menu-CsY5lMqY.js.map +0 -1
- package/dist/mixins-BoMURWag.cjs.map +0 -1
- package/dist/mixins-bCEXbwJV.js.map +0 -1
- package/dist/notification-DFKRMmSq.js.map +0 -1
- package/dist/notification-FBf3Mb2e.cjs.map +0 -1
- package/dist/option-Ct0lGdH3.js.map +0 -1
- package/dist/option-Il1KpU8M.cjs +0 -43
- package/dist/option-Il1KpU8M.cjs.map +0 -1
- package/dist/overlay-Bh8Q_R01.js.map +0 -1
- package/dist/overlay-sRXiMkjn.cjs.map +0 -1
- package/dist/overlay.confirm-body-CQihsR20.js.map +0 -1
- package/dist/overlay.confirm-body-Jc1EuMGs.cjs.map +0 -1
- package/dist/overlay.service-9Dp3g7ot.cjs.map +0 -1
- package/dist/overlay.service-BXPgS7ay.js.map +0 -1
- package/dist/progress-CWC5XYZ_.cjs +0 -51
- package/dist/progress-CWC5XYZ_.cjs.map +0 -1
- package/dist/progress-CYLshdo2.js.map +0 -1
- package/dist/radio-group-6kCgOgBL.cjs.map +0 -1
- package/dist/radio-group-bZtZHOj_.js.map +0 -1
- package/dist/select-CU3X-PIa.js.map +0 -1
- package/dist/select-MXsF8KsU.cjs +0 -56
- package/dist/select-MXsF8KsU.cjs.map +0 -1
- package/dist/sound.service-B4ZmXpH9.js.map +0 -1
- package/dist/sound.service-DjlMvicQ.cjs.map +0 -1
- package/dist/splash-screen-CN9dZcqC.cjs +0 -41
- package/dist/splash-screen-CN9dZcqC.cjs.map +0 -1
- package/dist/splash-screen-emCLYoVl.js.map +0 -1
- package/dist/src-DGDTkOvC.js.map +0 -1
- package/dist/src-DK3111z_.cjs +0 -240
- package/dist/src-DK3111z_.cjs.map +0 -1
- package/dist/state-CumAEPQH.cjs.map +0 -1
- package/dist/state-DMd_FUeA.js.map +0 -1
- package/dist/surface-DGI-FBoi.cjs +0 -7
- package/dist/surface-DGI-FBoi.cjs.map +0 -1
- package/dist/tabs-4T_4kCf-.js.map +0 -1
- package/dist/tabs-Byxxt-AH.cjs.map +0 -1
- package/dist/textarea-BwYwH9fu.cjs.map +0 -1
- package/dist/textarea-kkYNk1ET.js.map +0 -1
- package/dist/theme.service-Dv_55nfE.js.map +0 -1
- package/dist/theme.service-pjkTM209.cjs.map +0 -1
- package/dist/typography-BVkU11_q.js +0 -358
- package/dist/typography-BVkU11_q.js.map +0 -1
- package/dist/typography-aaQaIcNc.cjs +0 -282
- package/dist/typography-aaQaIcNc.cjs.map +0 -1
- package/dist/utils-DTa3QHxk.cjs.map +0 -1
- package/dist/utils-H8wNknWC.js.map +0 -1
- package/dist/window-C76zstbV.js.map +0 -1
- package/dist/window-CmB9XZzT.cjs +0 -58
- package/dist/window-CmB9XZzT.cjs.map +0 -1
- package/src/form/fields/date-range/date-range-presets.ts +0 -220
- package/src/form/fields/date-range/date-utils.ts +0 -58
- package/types/src/form/fields/date-range/date-range-presets.d.ts +0 -18
- package/types/src/form/fields/date-range/date-utils.d.ts +0 -15
- /package/dist/{hashContent-iRZJJWtE.cjs → hashContent--s09Ed_g.cjs} +0 -0
- /package/dist/{hashContent-BqU6v1Xr.js → hashContent-CAvrQ56N.js} +0 -0
- /package/dist/{rxjs-utils-Csnks202.cjs → rxjs-utils-4P2v57ke.cjs} +0 -0
- /package/dist/{rxjs-utils-d-ivVN84.js → rxjs-utils-JMFdgQSl.js} +0 -0
- /package/dist/{theme.interface-CSt7JUBD.cjs → theme.interface-B-qxDsZQ.cjs} +0 -0
- /package/dist/{theme.interface-odQEpZZH.js → theme.interface-B7caS5cg.js} +0 -0
- /package/dist/{utils-DTa3QHxk.cjs → utils-DIXndz6Q.cjs} +0 -0
- /package/dist/{utils-H8wNknWC.js → utils-dSPH7Oh9.js} +0 -0
package/dist/button.cjs
CHANGED
|
@@ -1,30 +1,37 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-CeKrBW2j.cjs`);require(`./mixins-Cjn20BQH.cjs`);const t=require(`./magnetic-DKtc4umC.cjs`),n=require(`./button-Cml67Y_d.cjs`);let r=require(`lit/decorators.js`),i=require(`lit`),a=require(`lit/directives/if-defined.js`),o=require(`lit/directives/when.js`);var s=class extends e.t{constructor(...e){super(...e),this.size=`md`,this.variant=`text`,this.width=`auto`,this.type=`button`,this.disabled=!1,this.text=!1}static{this.styles=[i.css`
|
|
2
|
+
:host {
|
|
3
|
+
display: inline-flex;
|
|
4
|
+
flex-shrink: 0;
|
|
5
|
+
border-radius: 9999px;
|
|
6
|
+
transition:
|
|
7
|
+
box-shadow 300ms cubic-bezier(0.34, 1.56, 0.64, 1),
|
|
8
|
+
transform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
9
|
+
}
|
|
10
|
+
:host([width='full']) {
|
|
11
|
+
display: flex;
|
|
12
|
+
width: 100%;
|
|
13
|
+
}
|
|
14
|
+
:host(:hover:not([disabled])) {
|
|
15
|
+
box-shadow: 0 2px 12px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 18%, transparent);
|
|
16
|
+
}
|
|
17
|
+
:host(:active:not([disabled])) {
|
|
18
|
+
transform: scale(0.92);
|
|
19
|
+
box-shadow: none;
|
|
20
|
+
transition-duration: 100ms;
|
|
21
|
+
}
|
|
22
|
+
@media (prefers-reduced-motion: reduce) {
|
|
23
|
+
:host {
|
|
24
|
+
transition: none;
|
|
25
|
+
}
|
|
26
|
+
:host(:hover:not([disabled])) {
|
|
27
|
+
box-shadow: none;
|
|
28
|
+
}
|
|
29
|
+
:host(:active:not([disabled])) {
|
|
30
|
+
transform: none;
|
|
31
|
+
box-shadow: none;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
`]}static{this.shadowRootOptions={...i.LitElement.shadowRootOptions,mode:`open`,delegatesFocus:!0}}#e;connectedCallback(){super.connectedCallback(),this.captureIcon(),this.observer=new MutationObserver(()=>this.captureIcon()),this.observer.observe(this,{childList:!0,characterData:!0,subtree:!0})}disconnectedCallback(){super.disconnectedCallback(),this.observer?.disconnect()}captureIcon(){this.icon||this.text||(this.capturedIcon=this.textContent?.trim()||void 0)}set ariaLabel(e){let t=this.#e;this.#e=e,this.hasAttribute(`aria-label`)&&this.removeAttribute(`aria-label`),this.requestUpdate(`ariaLabel`,t)}get ariaLabel(){return this.#e}focus(e){this.nativeElement.focus(e)}blur(){this.nativeElement.blur()}click(){this.dispatchEvent(new Event(`click`,{bubbles:!0,composed:!0}))}preventDefault(e){e.preventDefault(),e.stopPropagation()}firstUpdated(){}render(){let e=this.variant===`tonal`?`filled tonal`:this.variant,n={"z-0 h-full transition-all duration-200 relative rounded-full inline-flex justify-center items-center gap-[8px] outline-secondary-default focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 outline-hidden":!0,"opacity-[0.38]":this.disabled,"cursor-pointer":!this.disabled,"hover:shadow-xs":!this.disabled&&(e===`outlined`||e===`text`||e===`filled`||e===`filled tonal`),"hover:shadow-sm":!this.disabled&&e===`elevated`,"flex-1 text-center":this.width===`full`,"bg-surface-low text-primary-default shadow-xs":e===`elevated`,"bg-transparent text-primary-default border-1 border-outline":e===`outlined`,"bg-primary-default text-primary-on":e===`filled`,"bg-secondary-container text-secondary-onContainer":e===`filled tonal`,"text-primary-default":e===`text`,"p-1.5":this.size===`xxs`,"p-2":this.size===`xs`,"p-2.5":this.size===`sm`,"p-3":this.size===`md`,"p-4":this.size===`lg`,"p-5":this.size===`xl`},r={"hover:opacity-[0.08] rounded-full z-0":!0,"hover:bg-primary-on":e===`filled`,"hover:bg-primary-default":e===`outlined`||e===`elevated`||e===`text`,"hover:bg-secondary-container":e===`filled tonal`},s=this.size===`xxs`?`text-xs`:this.size===`xs`?`text-base`:this.size===`sm`?`text-xl`:this.size===`md`||this.size===`lg`?`text-2xl`:`text-4xl`;return this.href?i.html`
|
|
28
35
|
<a
|
|
29
36
|
${t.t({strength:3,radius:50})}
|
|
30
37
|
part="base"
|
|
@@ -37,9 +44,9 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./ch
|
|
|
37
44
|
>
|
|
38
45
|
${(0,o.when)(!this.disabled,()=>i.html`<div class="absolute inset-0 ${this.classMap(r)}"></div>`)}
|
|
39
46
|
${this.text?i.html`<slot></slot>`:i.html`
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
47
|
+
<slot style="display:none"></slot>
|
|
48
|
+
<schmancy-icon class=${s}>${this.icon||this.capturedIcon}</schmancy-icon>
|
|
49
|
+
`}
|
|
43
50
|
</a>
|
|
44
51
|
`:i.html`
|
|
45
52
|
<button
|
|
@@ -53,8 +60,8 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./ch
|
|
|
53
60
|
>
|
|
54
61
|
${(0,o.when)(!this.disabled,()=>i.html`<div class="absolute inset-0 ${this.classMap(r)}"></div>`)}
|
|
55
62
|
${this.text?i.html`<slot></slot>`:i.html`
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
63
|
+
<slot style="display:none"></slot>
|
|
64
|
+
<schmancy-icon class=${s}>${this.icon||this.capturedIcon}</schmancy-icon>
|
|
65
|
+
`}
|
|
59
66
|
</button>
|
|
60
67
|
`}};e.u([(0,r.query)(`[part="base"]`,!0)],s.prototype,`nativeElement`,void 0),e.u([(0,r.property)({type:String})],s.prototype,`size`,void 0),e.u([(0,r.property)({reflect:!0,type:String})],s.prototype,`variant`,void 0),e.u([(0,r.property)({reflect:!0})],s.prototype,`width`,void 0),e.u([(0,r.property)({reflect:!0,type:String})],s.prototype,`type`,void 0),e.u([(0,r.property)()],s.prototype,`href`,void 0),e.u([(0,r.property)({type:Boolean,reflect:!0})],s.prototype,`disabled`,void 0),e.u([(0,r.property)({type:Boolean,reflect:!0})],s.prototype,`text`,void 0),e.u([(0,r.property)({type:String})],s.prototype,`icon`,void 0),e.u([(0,r.state)()],s.prototype,`capturedIcon`,void 0),e.u([(0,r.property)({attribute:`aria-label`})],s.prototype,`ariaLabel`,null),s=e.u([(0,r.customElement)(`schmancy-icon-button`)],s),Object.defineProperty(exports,`SchmancyButton`,{enumerable:!0,get:function(){return n.t}}),Object.defineProperty(exports,`SchmnacyIconButton`,{enumerable:!0,get:function(){return s}});
|
package/dist/button.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.cjs","names":["#ariaLabel"],"sources":["../src/button/icon-button.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { when } from 'lit/directives/when.js'\nimport { magnetic } from '../directives/magnetic'\nimport { ButtonVariant } from './button'\n\n/**\n * An icon button component.\n * @element schmancy-icon-button\n * @slot - The default slot (usually an icon or glyph).\n * @csspart base - The underlying native `<button>` (or `<a>` when `href` is set).\n */\n@customElement('schmancy-icon-button')\nexport class SchmnacyIconButton extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: inline-flex;\n\t\tflex-shrink: 0;\n\t\tborder-radius: 9999px;\n\t\ttransition:\n\t\t\tbox-shadow 300ms cubic-bezier(0.34, 1.56, 0.64, 1),\n\t\t\ttransform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t}\n\t:host([width=\"full\"]) {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t}\n\t:host(:hover:not([disabled])) {\n\t\tbox-shadow: 0 2px 12px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 18%, transparent);\n\t}\n\t:host(:active:not([disabled])) {\n\t\ttransform: scale(0.92);\n\t\tbox-shadow: none;\n\t\ttransition-duration: 100ms;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t:host { transition: none; }\n\t\t:host(:hover:not([disabled])) { box-shadow: none; }\n\t\t:host(:active:not([disabled])) { transform: none; box-shadow: none; }\n\t}\n`]\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: true,\n\t}\n\n\t@query('[part=\"base\"]', true)\n\tprivate nativeElement!: HTMLElement\n\n\t#ariaLabel!: string\n\n\t/**\n\t * The size of the icon.\n\t * @attr\n\t * @default 'md'\n\t */\n\t@property({ type: String })\n\tpublic size: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'md'\n\n\t/**\n\t * The variant of the button.\n\t * @attr\n\t * @default 'text'\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic variant: ButtonVariant = 'text'\n\n\t/**\n\t * The width of the button.\n\t * @attr\n\t * @type {'full' | 'auto'}\n\t * @default 'auto'\n\t */\n\t@property({ reflect: true })\n\tpublic width: 'full' | 'auto' = 'auto'\n\n\t/**\n\t * The type of the button.\n\t * Defaults to 'button' (preventing accidental form submissions).\n\t * @attr\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic type: 'button' | 'reset' | 'submit' = 'button'\n\n\t/**\n\t * The URL the button points to.\n\t * If provided, the component will render as an anchor element.\n\t * @attr\n\t */\n\t@property()\n\tpublic href?: string\n\n\t/**\n\t * Determines whether the button is disabled.\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tpublic disabled = false\n\n\t/**\n\t * Render slot content as text instead of wrapping in schmancy-icon.\n\t * Use this when you want to display text labels in the button.\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tpublic text = false\n\n\t/**\n\t * Icon name - use this instead of slot content to prevent translation breaking icons.\n\t * Example: <schmancy-icon-button icon=\"add\"></schmancy-icon-button>\n\t * @attr\n\t */\n\t@property({ type: String })\n\tpublic icon?: string\n\n\t// Reactively captured icon name from slot content (translation-proof).\n\t// Mirrors <schmancy-icon>: a MutationObserver on the light DOM keeps this\n\t// in sync no matter how the consumer passes the name — a plain text node,\n\t// a dynamic ${...} binding (Lit mutates the text node's data in place, so\n\t// no slotchange ever fires), or a nested <schmancy-icon> element.\n\t// `textContent` flattens through all three.\n\t@state()\n\tprivate capturedIcon?: string\n\n\tprivate observer?: MutationObserver\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tthis.captureIcon()\n\t\tthis.observer = new MutationObserver(() => this.captureIcon())\n\t\tthis.observer.observe(this, { childList: true, characterData: true, subtree: true })\n\t}\n\n\tdisconnectedCallback(): void {\n\t\tsuper.disconnectedCallback()\n\t\tthis.observer?.disconnect()\n\t}\n\n\tprivate captureIcon(): void {\n\t\tif (this.icon || this.text) return\n\t\tthis.capturedIcon = this.textContent?.trim() || undefined\n\t}\n\n\t// Manage aria-label manually so that we can always use our internal property.\n\tpublic override set ariaLabel(value: string) {\n\t\tconst oldVal = this.#ariaLabel\n\t\tthis.#ariaLabel = value\n\n\t\tif (this.hasAttribute('aria-label')) {\n\t\t\tthis.removeAttribute('aria-label')\n\t\t}\n\t\tthis.requestUpdate('ariaLabel', oldVal)\n\t}\n\n\t@property({ attribute: 'aria-label' })\n\tpublic override get ariaLabel() {\n\t\treturn this.#ariaLabel\n\t}\n\n\t/** Sets focus in the button. */\n\tpublic override focus(options?: FocusOptions) {\n\t\tthis.nativeElement.focus(options)\n\t}\n\n\t/** Removes focus from the button. */\n\tpublic override blur() {\n\t\tthis.nativeElement.blur()\n\t}\n\n\tclick(): void {\n\t\tthis.dispatchEvent(new Event('click', { bubbles: true, composed: true }))\n\t}\n\n\t// Prevent default behavior when the component is disabled.\n\tprivate preventDefault(event: Event) {\n\t\tevent.preventDefault()\n\t\tevent.stopPropagation()\n\t}\n\n\tprotected firstUpdated(): void {\n\t\t// Add any first-update logic here if needed.\n\t}\n\n\trender() {\n\t\t// Map 'tonal' variant to 'filled tonal' for backwards compatibility\n\t\tconst effectiveVariant = this.variant === 'tonal' ? 'filled tonal' : this.variant;\n\n\t\t// Compute classes for the interactive element.\n\t\tconst classes = {\n\t\t\t'z-0 h-full transition-all duration-200 relative rounded-full inline-flex justify-center items-center gap-[8px] outline-secondary-default focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 outline-hidden':\n\t\t\t\ttrue,\n\t\t\t'opacity-[0.38]': this.disabled,\n\t\t\t'cursor-pointer': !this.disabled,\n\t\t\t'hover:shadow-xs':\n\t\t\t\t!this.disabled &&\n\t\t\t\t(effectiveVariant === 'outlined' ||\n\t\t\t\t\teffectiveVariant === 'text' ||\n\t\t\t\t\teffectiveVariant === 'filled' ||\n\t\t\t\t\teffectiveVariant === 'filled tonal'),\n\t\t\t'hover:shadow-sm': !this.disabled && effectiveVariant === 'elevated',\n\t\t\t'flex-1 text-center': this.width === 'full',\n\t\t\t'bg-surface-low text-primary-default shadow-xs': effectiveVariant === 'elevated',\n\t\t\t'bg-transparent text-primary-default border-1 border-outline': effectiveVariant === 'outlined',\n\t\t\t'bg-primary-default text-primary-on': effectiveVariant === 'filled',\n\t\t\t'bg-secondary-container text-secondary-onContainer': effectiveVariant === 'filled tonal',\n\t\t\t'text-primary-default': effectiveVariant === 'text',\n\t\t\t// M3 spec: 24dp (xxs) → 32dp (dense) → 40dp (default) → 48dp (standard) → 56dp (large)\n\t\t\t'p-1.5': this.size === 'xxs', // 6px padding = 24px total (12px icon) - Ultra-compact\n\t\t\t'p-2': this.size === 'xs', // 8px padding = 32px total (16px icon) - M3 dense\n\t\t\t'p-2.5': this.size === 'sm', // 10px padding = 40px total (20px icon) - M3 default\n\t\t\t'p-3': this.size === 'md', // 12px padding = 48px total (24px icon) - M3 standard\n\t\t\t'p-4': this.size === 'lg', // 16px padding = 56px total (24px icon) - M3 large\n\t\t\t'p-5': this.size === 'xl', // 20px padding = 80px total (40px icon) - custom XL\n\t\t}\n\n\t\tconst stateLayerClasses = {\n\t\t\t'hover:opacity-[0.08] rounded-full z-0': true,\n\t\t\t'hover:bg-primary-on': effectiveVariant === 'filled',\n\t\t\t'hover:bg-primary-default': effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text',\n\t\t\t'hover:bg-secondary-container': effectiveVariant === 'filled tonal',\n\t\t}\n\n\t\tconst iconSizeClass = this.size === 'xxs' ? 'text-xs' : this.size === 'xs' ? 'text-base' : this.size === 'sm' ? 'text-xl' : this.size === 'md' ? 'text-2xl' : this.size === 'lg' ? 'text-2xl' : 'text-4xl';\n\n\t\t// If href is provided, render an anchor element.\n\t\tif (this.href) {\n\t\t\treturn html`\n\t\t\t\t<a\n\t\t\t\t\t${magnetic({ strength: 3, radius: 50 })}\n\t\t\t\t\tpart=\"base\"\n\t\t\t\t\thref=${ifDefined(this.disabled ? undefined : this.href)}\n\t\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\t\ttabindex=${this.disabled ? '-1' : '0'}\n\t\t\t\t\taria-disabled=${this.disabled}\n\t\t\t\t\t@click=${this.disabled ? this.preventDefault : undefined}\n\t\t\t\t>\n\t\t\t\t\t${when(!this.disabled, () => html`<div class=\"absolute inset-0 ${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t\t${this.text\n\t\t\t\t\t\t? html`<slot></slot>`\n\t\t\t\t\t\t: html`\n\t\t\t\t\t\t\t<slot style=\"display:none\"></slot>\n\t\t\t\t\t\t\t<schmancy-icon class=${iconSizeClass}>${this.icon || this.capturedIcon}</schmancy-icon>\n\t\t\t\t\t\t`\n\t\t\t\t\t}\n\t\t\t\t</a>\n\t\t\t`\n\t\t}\n\n\t\t// Otherwise, render a native button element.\n\t\treturn html`\n\t\t\t<button\n\t\t\t\t${magnetic({ strength: 3, radius: 50 })}\n\t\t\t\tpart=\"base\"\n\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t?disabled=${this.disabled}\n\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\ttype=${ifDefined(this.type)}\n\t\t\t\ttabindex=${ifDefined(this.disabled ? '-1' : undefined)}\n\t\t\t>\n\t\t\t\t${when(!this.disabled, () => html`<div class=\"absolute inset-0 ${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t${this.text\n\t\t\t\t\t? html`<slot></slot>`\n\t\t\t\t\t: html`\n\t\t\t\t\t\t<slot style=\"display:none\"></slot>\n\t\t\t\t\t\t<schmancy-icon class=${iconSizeClass}>${this.icon || this.capturedIcon}</schmancy-icon>\n\t\t\t\t\t`\n\t\t\t\t}\n\t\t\t</button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-icon-button': SchmnacyIconButton\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"button.cjs","names":["#ariaLabel"],"sources":["../src/button/icon-button.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { when } from 'lit/directives/when.js'\nimport { magnetic } from '../directives/magnetic'\nimport { ButtonVariant } from './button'\n\n/**\n * An icon button component.\n * @element schmancy-icon-button\n * @slot - The default slot (usually an icon or glyph).\n * @csspart base - The underlying native `<button>` (or `<a>` when `href` is set).\n */\n@customElement('schmancy-icon-button')\nexport class SchmnacyIconButton extends SchmancyElement {\n\tstatic styles = [\n\t\tcss`\n\t\t\t:host {\n\t\t\t\tdisplay: inline-flex;\n\t\t\t\tflex-shrink: 0;\n\t\t\t\tborder-radius: 9999px;\n\t\t\t\ttransition:\n\t\t\t\t\tbox-shadow 300ms cubic-bezier(0.34, 1.56, 0.64, 1),\n\t\t\t\t\ttransform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t\t\t}\n\t\t\t:host([width='full']) {\n\t\t\t\tdisplay: flex;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t\t:host(:hover:not([disabled])) {\n\t\t\t\tbox-shadow: 0 2px 12px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 18%, transparent);\n\t\t\t}\n\t\t\t:host(:active:not([disabled])) {\n\t\t\t\ttransform: scale(0.92);\n\t\t\t\tbox-shadow: none;\n\t\t\t\ttransition-duration: 100ms;\n\t\t\t}\n\t\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\t\t:host {\n\t\t\t\t\ttransition: none;\n\t\t\t\t}\n\t\t\t\t:host(:hover:not([disabled])) {\n\t\t\t\t\tbox-shadow: none;\n\t\t\t\t}\n\t\t\t\t:host(:active:not([disabled])) {\n\t\t\t\t\ttransform: none;\n\t\t\t\t\tbox-shadow: none;\n\t\t\t\t}\n\t\t\t}\n\t\t`,\n\t]\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: true,\n\t}\n\n\t@query('[part=\"base\"]', true)\n\tprivate nativeElement!: HTMLElement\n\n\t#ariaLabel!: string\n\n\t/**\n\t * The size of the icon.\n\t * @attr\n\t * @default 'md'\n\t */\n\t@property({ type: String })\n\tpublic size: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'md'\n\n\t/**\n\t * The variant of the button.\n\t * @attr\n\t * @default 'text'\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic variant: ButtonVariant = 'text'\n\n\t/**\n\t * The width of the button.\n\t * @attr\n\t * @type {'full' | 'auto'}\n\t * @default 'auto'\n\t */\n\t@property({ reflect: true })\n\tpublic width: 'full' | 'auto' = 'auto'\n\n\t/**\n\t * The type of the button.\n\t * Defaults to 'button' (preventing accidental form submissions).\n\t * @attr\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic type: 'button' | 'reset' | 'submit' = 'button'\n\n\t/**\n\t * The URL the button points to.\n\t * If provided, the component will render as an anchor element.\n\t * @attr\n\t */\n\t@property()\n\tpublic href?: string\n\n\t/**\n\t * Determines whether the button is disabled.\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tpublic disabled = false\n\n\t/**\n\t * Render slot content as text instead of wrapping in schmancy-icon.\n\t * Use this when you want to display text labels in the button.\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tpublic text = false\n\n\t/**\n\t * Icon name - use this instead of slot content to prevent translation breaking icons.\n\t * Example: <schmancy-icon-button icon=\"add\"></schmancy-icon-button>\n\t * @attr\n\t */\n\t@property({ type: String })\n\tpublic icon?: string\n\n\t// Reactively captured icon name from slot content (translation-proof).\n\t// Mirrors <schmancy-icon>: a MutationObserver on the light DOM keeps this\n\t// in sync no matter how the consumer passes the name — a plain text node,\n\t// a dynamic ${...} binding (Lit mutates the text node's data in place, so\n\t// no slotchange ever fires), or a nested <schmancy-icon> element.\n\t// `textContent` flattens through all three.\n\t@state()\n\tprivate capturedIcon?: string\n\n\tprivate observer?: MutationObserver\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tthis.captureIcon()\n\t\tthis.observer = new MutationObserver(() => this.captureIcon())\n\t\tthis.observer.observe(this, { childList: true, characterData: true, subtree: true })\n\t}\n\n\tdisconnectedCallback(): void {\n\t\tsuper.disconnectedCallback()\n\t\tthis.observer?.disconnect()\n\t}\n\n\tprivate captureIcon(): void {\n\t\tif (this.icon || this.text) return\n\t\tthis.capturedIcon = this.textContent?.trim() || undefined\n\t}\n\n\t// Manage aria-label manually so that we can always use our internal property.\n\tpublic override set ariaLabel(value: string) {\n\t\tconst oldVal = this.#ariaLabel\n\t\tthis.#ariaLabel = value\n\n\t\tif (this.hasAttribute('aria-label')) {\n\t\t\tthis.removeAttribute('aria-label')\n\t\t}\n\t\tthis.requestUpdate('ariaLabel', oldVal)\n\t}\n\n\t@property({ attribute: 'aria-label' })\n\tpublic override get ariaLabel() {\n\t\treturn this.#ariaLabel\n\t}\n\n\t/** Sets focus in the button. */\n\tpublic override focus(options?: FocusOptions) {\n\t\tthis.nativeElement.focus(options)\n\t}\n\n\t/** Removes focus from the button. */\n\tpublic override blur() {\n\t\tthis.nativeElement.blur()\n\t}\n\n\tclick(): void {\n\t\tthis.dispatchEvent(new Event('click', { bubbles: true, composed: true }))\n\t}\n\n\t// Prevent default behavior when the component is disabled.\n\tprivate preventDefault(event: Event) {\n\t\tevent.preventDefault()\n\t\tevent.stopPropagation()\n\t}\n\n\tprotected firstUpdated(): void {\n\t\t// Add any first-update logic here if needed.\n\t}\n\n\trender() {\n\t\t// Map 'tonal' variant to 'filled tonal' for backwards compatibility\n\t\tconst effectiveVariant = this.variant === 'tonal' ? 'filled tonal' : this.variant\n\n\t\t// Compute classes for the interactive element.\n\t\tconst classes = {\n\t\t\t'z-0 h-full transition-all duration-200 relative rounded-full inline-flex justify-center items-center gap-[8px] outline-secondary-default focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 outline-hidden': true,\n\t\t\t'opacity-[0.38]': this.disabled,\n\t\t\t'cursor-pointer': !this.disabled,\n\t\t\t'hover:shadow-xs':\n\t\t\t\t!this.disabled &&\n\t\t\t\t(effectiveVariant === 'outlined' ||\n\t\t\t\t\teffectiveVariant === 'text' ||\n\t\t\t\t\teffectiveVariant === 'filled' ||\n\t\t\t\t\teffectiveVariant === 'filled tonal'),\n\t\t\t'hover:shadow-sm': !this.disabled && effectiveVariant === 'elevated',\n\t\t\t'flex-1 text-center': this.width === 'full',\n\t\t\t'bg-surface-low text-primary-default shadow-xs': effectiveVariant === 'elevated',\n\t\t\t'bg-transparent text-primary-default border-1 border-outline': effectiveVariant === 'outlined',\n\t\t\t'bg-primary-default text-primary-on': effectiveVariant === 'filled',\n\t\t\t'bg-secondary-container text-secondary-onContainer': effectiveVariant === 'filled tonal',\n\t\t\t'text-primary-default': effectiveVariant === 'text',\n\t\t\t// M3 spec: 24dp (xxs) → 32dp (dense) → 40dp (default) → 48dp (standard) → 56dp (large)\n\t\t\t'p-1.5': this.size === 'xxs', // 6px padding = 24px total (12px icon) - Ultra-compact\n\t\t\t'p-2': this.size === 'xs', // 8px padding = 32px total (16px icon) - M3 dense\n\t\t\t'p-2.5': this.size === 'sm', // 10px padding = 40px total (20px icon) - M3 default\n\t\t\t'p-3': this.size === 'md', // 12px padding = 48px total (24px icon) - M3 standard\n\t\t\t'p-4': this.size === 'lg', // 16px padding = 56px total (24px icon) - M3 large\n\t\t\t'p-5': this.size === 'xl', // 20px padding = 80px total (40px icon) - custom XL\n\t\t}\n\n\t\tconst stateLayerClasses = {\n\t\t\t'hover:opacity-[0.08] rounded-full z-0': true,\n\t\t\t'hover:bg-primary-on': effectiveVariant === 'filled',\n\t\t\t'hover:bg-primary-default':\n\t\t\t\teffectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text',\n\t\t\t'hover:bg-secondary-container': effectiveVariant === 'filled tonal',\n\t\t}\n\n\t\tconst iconSizeClass =\n\t\t\tthis.size === 'xxs'\n\t\t\t\t? 'text-xs'\n\t\t\t\t: this.size === 'xs'\n\t\t\t\t\t? 'text-base'\n\t\t\t\t\t: this.size === 'sm'\n\t\t\t\t\t\t? 'text-xl'\n\t\t\t\t\t\t: this.size === 'md'\n\t\t\t\t\t\t\t? 'text-2xl'\n\t\t\t\t\t\t\t: this.size === 'lg'\n\t\t\t\t\t\t\t\t? 'text-2xl'\n\t\t\t\t\t\t\t\t: 'text-4xl'\n\n\t\t// If href is provided, render an anchor element.\n\t\tif (this.href) {\n\t\t\treturn html`\n\t\t\t\t<a\n\t\t\t\t\t${magnetic({ strength: 3, radius: 50 })}\n\t\t\t\t\tpart=\"base\"\n\t\t\t\t\thref=${ifDefined(this.disabled ? undefined : this.href)}\n\t\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\t\ttabindex=${this.disabled ? '-1' : '0'}\n\t\t\t\t\taria-disabled=${this.disabled}\n\t\t\t\t\t@click=${this.disabled ? this.preventDefault : undefined}\n\t\t\t\t>\n\t\t\t\t\t${when(!this.disabled, () => html`<div class=\"absolute inset-0 ${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t\t${this.text\n\t\t\t\t\t\t? html`<slot></slot>`\n\t\t\t\t\t\t: html`\n\t\t\t\t\t\t\t\t<slot style=\"display:none\"></slot>\n\t\t\t\t\t\t\t\t<schmancy-icon class=${iconSizeClass}>${this.icon || this.capturedIcon}</schmancy-icon>\n\t\t\t\t\t\t\t`}\n\t\t\t\t</a>\n\t\t\t`\n\t\t}\n\n\t\t// Otherwise, render a native button element.\n\t\treturn html`\n\t\t\t<button\n\t\t\t\t${magnetic({ strength: 3, radius: 50 })}\n\t\t\t\tpart=\"base\"\n\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t?disabled=${this.disabled}\n\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\ttype=${ifDefined(this.type)}\n\t\t\t\ttabindex=${ifDefined(this.disabled ? '-1' : undefined)}\n\t\t\t>\n\t\t\t\t${when(!this.disabled, () => html`<div class=\"absolute inset-0 ${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t${this.text\n\t\t\t\t\t? html`<slot></slot>`\n\t\t\t\t\t: html`\n\t\t\t\t\t\t\t<slot style=\"display:none\"></slot>\n\t\t\t\t\t\t\t<schmancy-icon class=${iconSizeClass}>${this.icon || this.capturedIcon}</schmancy-icon>\n\t\t\t\t\t\t`}\n\t\t\t</button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-icon-button': SchmnacyIconButton\n\t}\n}\n"],"mappings":"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"}
|
package/dist/button.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { t as e, u as t } from "./SchmancyElement-
|
|
2
|
-
import "./mixins-
|
|
1
|
+
import { t as e, u as t } from "./SchmancyElement-Ob9yGkiG.js";
|
|
2
|
+
import "./mixins-q4KAL8Xr.js";
|
|
3
3
|
import { t as n } from "./magnetic-DaOOv5Dz.js";
|
|
4
|
-
import { t as r } from "./button-
|
|
4
|
+
import { t as r } from "./button-DWANpZfD.js";
|
|
5
5
|
import { customElement as i, property as a, query as o, state as s } from "lit/decorators.js";
|
|
6
6
|
import { LitElement as c, css as l, html as u } from "lit";
|
|
7
7
|
import { ifDefined as d } from "lit/directives/if-defined.js";
|
|
@@ -12,32 +12,39 @@ var p = class extends e {
|
|
|
12
12
|
}
|
|
13
13
|
static {
|
|
14
14
|
this.styles = [l`
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
15
|
+
:host {
|
|
16
|
+
display: inline-flex;
|
|
17
|
+
flex-shrink: 0;
|
|
18
|
+
border-radius: 9999px;
|
|
19
|
+
transition:
|
|
20
|
+
box-shadow 300ms cubic-bezier(0.34, 1.56, 0.64, 1),
|
|
21
|
+
transform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
22
|
+
}
|
|
23
|
+
:host([width='full']) {
|
|
24
|
+
display: flex;
|
|
25
|
+
width: 100%;
|
|
26
|
+
}
|
|
27
|
+
:host(:hover:not([disabled])) {
|
|
28
|
+
box-shadow: 0 2px 12px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 18%, transparent);
|
|
29
|
+
}
|
|
30
|
+
:host(:active:not([disabled])) {
|
|
31
|
+
transform: scale(0.92);
|
|
32
|
+
box-shadow: none;
|
|
33
|
+
transition-duration: 100ms;
|
|
34
|
+
}
|
|
35
|
+
@media (prefers-reduced-motion: reduce) {
|
|
36
|
+
:host {
|
|
37
|
+
transition: none;
|
|
38
|
+
}
|
|
39
|
+
:host(:hover:not([disabled])) {
|
|
40
|
+
box-shadow: none;
|
|
41
|
+
}
|
|
42
|
+
:host(:active:not([disabled])) {
|
|
43
|
+
transform: none;
|
|
44
|
+
box-shadow: none;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
`];
|
|
41
48
|
}
|
|
42
49
|
static {
|
|
43
50
|
this.shadowRootOptions = {
|
|
@@ -124,9 +131,9 @@ var p = class extends e {
|
|
|
124
131
|
>
|
|
125
132
|
${f(!this.disabled, () => u`<div class="absolute inset-0 ${this.classMap(r)}"></div>`)}
|
|
126
133
|
${this.text ? u`<slot></slot>` : u`
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
134
|
+
<slot style="display:none"></slot>
|
|
135
|
+
<schmancy-icon class=${i}>${this.icon || this.capturedIcon}</schmancy-icon>
|
|
136
|
+
`}
|
|
130
137
|
</a>
|
|
131
138
|
` : u`
|
|
132
139
|
<button
|
|
@@ -143,9 +150,9 @@ var p = class extends e {
|
|
|
143
150
|
>
|
|
144
151
|
${f(!this.disabled, () => u`<div class="absolute inset-0 ${this.classMap(r)}"></div>`)}
|
|
145
152
|
${this.text ? u`<slot></slot>` : u`
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
153
|
+
<slot style="display:none"></slot>
|
|
154
|
+
<schmancy-icon class=${i}>${this.icon || this.capturedIcon}</schmancy-icon>
|
|
155
|
+
`}
|
|
149
156
|
</button>
|
|
150
157
|
`;
|
|
151
158
|
}
|
package/dist/button.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.js","names":["#ariaLabel"],"sources":["../src/button/icon-button.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { when } from 'lit/directives/when.js'\nimport { magnetic } from '../directives/magnetic'\nimport { ButtonVariant } from './button'\n\n/**\n * An icon button component.\n * @element schmancy-icon-button\n * @slot - The default slot (usually an icon or glyph).\n * @csspart base - The underlying native `<button>` (or `<a>` when `href` is set).\n */\n@customElement('schmancy-icon-button')\nexport class SchmnacyIconButton extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: inline-flex;\n\t\tflex-shrink: 0;\n\t\tborder-radius: 9999px;\n\t\ttransition:\n\t\t\tbox-shadow 300ms cubic-bezier(0.34, 1.56, 0.64, 1),\n\t\t\ttransform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t}\n\t:host([width=\"full\"]) {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t}\n\t:host(:hover:not([disabled])) {\n\t\tbox-shadow: 0 2px 12px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 18%, transparent);\n\t}\n\t:host(:active:not([disabled])) {\n\t\ttransform: scale(0.92);\n\t\tbox-shadow: none;\n\t\ttransition-duration: 100ms;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t:host { transition: none; }\n\t\t:host(:hover:not([disabled])) { box-shadow: none; }\n\t\t:host(:active:not([disabled])) { transform: none; box-shadow: none; }\n\t}\n`]\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: true,\n\t}\n\n\t@query('[part=\"base\"]', true)\n\tprivate nativeElement!: HTMLElement\n\n\t#ariaLabel!: string\n\n\t/**\n\t * The size of the icon.\n\t * @attr\n\t * @default 'md'\n\t */\n\t@property({ type: String })\n\tpublic size: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'md'\n\n\t/**\n\t * The variant of the button.\n\t * @attr\n\t * @default 'text'\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic variant: ButtonVariant = 'text'\n\n\t/**\n\t * The width of the button.\n\t * @attr\n\t * @type {'full' | 'auto'}\n\t * @default 'auto'\n\t */\n\t@property({ reflect: true })\n\tpublic width: 'full' | 'auto' = 'auto'\n\n\t/**\n\t * The type of the button.\n\t * Defaults to 'button' (preventing accidental form submissions).\n\t * @attr\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic type: 'button' | 'reset' | 'submit' = 'button'\n\n\t/**\n\t * The URL the button points to.\n\t * If provided, the component will render as an anchor element.\n\t * @attr\n\t */\n\t@property()\n\tpublic href?: string\n\n\t/**\n\t * Determines whether the button is disabled.\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tpublic disabled = false\n\n\t/**\n\t * Render slot content as text instead of wrapping in schmancy-icon.\n\t * Use this when you want to display text labels in the button.\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tpublic text = false\n\n\t/**\n\t * Icon name - use this instead of slot content to prevent translation breaking icons.\n\t * Example: <schmancy-icon-button icon=\"add\"></schmancy-icon-button>\n\t * @attr\n\t */\n\t@property({ type: String })\n\tpublic icon?: string\n\n\t// Reactively captured icon name from slot content (translation-proof).\n\t// Mirrors <schmancy-icon>: a MutationObserver on the light DOM keeps this\n\t// in sync no matter how the consumer passes the name — a plain text node,\n\t// a dynamic ${...} binding (Lit mutates the text node's data in place, so\n\t// no slotchange ever fires), or a nested <schmancy-icon> element.\n\t// `textContent` flattens through all three.\n\t@state()\n\tprivate capturedIcon?: string\n\n\tprivate observer?: MutationObserver\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tthis.captureIcon()\n\t\tthis.observer = new MutationObserver(() => this.captureIcon())\n\t\tthis.observer.observe(this, { childList: true, characterData: true, subtree: true })\n\t}\n\n\tdisconnectedCallback(): void {\n\t\tsuper.disconnectedCallback()\n\t\tthis.observer?.disconnect()\n\t}\n\n\tprivate captureIcon(): void {\n\t\tif (this.icon || this.text) return\n\t\tthis.capturedIcon = this.textContent?.trim() || undefined\n\t}\n\n\t// Manage aria-label manually so that we can always use our internal property.\n\tpublic override set ariaLabel(value: string) {\n\t\tconst oldVal = this.#ariaLabel\n\t\tthis.#ariaLabel = value\n\n\t\tif (this.hasAttribute('aria-label')) {\n\t\t\tthis.removeAttribute('aria-label')\n\t\t}\n\t\tthis.requestUpdate('ariaLabel', oldVal)\n\t}\n\n\t@property({ attribute: 'aria-label' })\n\tpublic override get ariaLabel() {\n\t\treturn this.#ariaLabel\n\t}\n\n\t/** Sets focus in the button. */\n\tpublic override focus(options?: FocusOptions) {\n\t\tthis.nativeElement.focus(options)\n\t}\n\n\t/** Removes focus from the button. */\n\tpublic override blur() {\n\t\tthis.nativeElement.blur()\n\t}\n\n\tclick(): void {\n\t\tthis.dispatchEvent(new Event('click', { bubbles: true, composed: true }))\n\t}\n\n\t// Prevent default behavior when the component is disabled.\n\tprivate preventDefault(event: Event) {\n\t\tevent.preventDefault()\n\t\tevent.stopPropagation()\n\t}\n\n\tprotected firstUpdated(): void {\n\t\t// Add any first-update logic here if needed.\n\t}\n\n\trender() {\n\t\t// Map 'tonal' variant to 'filled tonal' for backwards compatibility\n\t\tconst effectiveVariant = this.variant === 'tonal' ? 'filled tonal' : this.variant;\n\n\t\t// Compute classes for the interactive element.\n\t\tconst classes = {\n\t\t\t'z-0 h-full transition-all duration-200 relative rounded-full inline-flex justify-center items-center gap-[8px] outline-secondary-default focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 outline-hidden':\n\t\t\t\ttrue,\n\t\t\t'opacity-[0.38]': this.disabled,\n\t\t\t'cursor-pointer': !this.disabled,\n\t\t\t'hover:shadow-xs':\n\t\t\t\t!this.disabled &&\n\t\t\t\t(effectiveVariant === 'outlined' ||\n\t\t\t\t\teffectiveVariant === 'text' ||\n\t\t\t\t\teffectiveVariant === 'filled' ||\n\t\t\t\t\teffectiveVariant === 'filled tonal'),\n\t\t\t'hover:shadow-sm': !this.disabled && effectiveVariant === 'elevated',\n\t\t\t'flex-1 text-center': this.width === 'full',\n\t\t\t'bg-surface-low text-primary-default shadow-xs': effectiveVariant === 'elevated',\n\t\t\t'bg-transparent text-primary-default border-1 border-outline': effectiveVariant === 'outlined',\n\t\t\t'bg-primary-default text-primary-on': effectiveVariant === 'filled',\n\t\t\t'bg-secondary-container text-secondary-onContainer': effectiveVariant === 'filled tonal',\n\t\t\t'text-primary-default': effectiveVariant === 'text',\n\t\t\t// M3 spec: 24dp (xxs) → 32dp (dense) → 40dp (default) → 48dp (standard) → 56dp (large)\n\t\t\t'p-1.5': this.size === 'xxs', // 6px padding = 24px total (12px icon) - Ultra-compact\n\t\t\t'p-2': this.size === 'xs', // 8px padding = 32px total (16px icon) - M3 dense\n\t\t\t'p-2.5': this.size === 'sm', // 10px padding = 40px total (20px icon) - M3 default\n\t\t\t'p-3': this.size === 'md', // 12px padding = 48px total (24px icon) - M3 standard\n\t\t\t'p-4': this.size === 'lg', // 16px padding = 56px total (24px icon) - M3 large\n\t\t\t'p-5': this.size === 'xl', // 20px padding = 80px total (40px icon) - custom XL\n\t\t}\n\n\t\tconst stateLayerClasses = {\n\t\t\t'hover:opacity-[0.08] rounded-full z-0': true,\n\t\t\t'hover:bg-primary-on': effectiveVariant === 'filled',\n\t\t\t'hover:bg-primary-default': effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text',\n\t\t\t'hover:bg-secondary-container': effectiveVariant === 'filled tonal',\n\t\t}\n\n\t\tconst iconSizeClass = this.size === 'xxs' ? 'text-xs' : this.size === 'xs' ? 'text-base' : this.size === 'sm' ? 'text-xl' : this.size === 'md' ? 'text-2xl' : this.size === 'lg' ? 'text-2xl' : 'text-4xl';\n\n\t\t// If href is provided, render an anchor element.\n\t\tif (this.href) {\n\t\t\treturn html`\n\t\t\t\t<a\n\t\t\t\t\t${magnetic({ strength: 3, radius: 50 })}\n\t\t\t\t\tpart=\"base\"\n\t\t\t\t\thref=${ifDefined(this.disabled ? undefined : this.href)}\n\t\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\t\ttabindex=${this.disabled ? '-1' : '0'}\n\t\t\t\t\taria-disabled=${this.disabled}\n\t\t\t\t\t@click=${this.disabled ? this.preventDefault : undefined}\n\t\t\t\t>\n\t\t\t\t\t${when(!this.disabled, () => html`<div class=\"absolute inset-0 ${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t\t${this.text\n\t\t\t\t\t\t? html`<slot></slot>`\n\t\t\t\t\t\t: html`\n\t\t\t\t\t\t\t<slot style=\"display:none\"></slot>\n\t\t\t\t\t\t\t<schmancy-icon class=${iconSizeClass}>${this.icon || this.capturedIcon}</schmancy-icon>\n\t\t\t\t\t\t`\n\t\t\t\t\t}\n\t\t\t\t</a>\n\t\t\t`\n\t\t}\n\n\t\t// Otherwise, render a native button element.\n\t\treturn html`\n\t\t\t<button\n\t\t\t\t${magnetic({ strength: 3, radius: 50 })}\n\t\t\t\tpart=\"base\"\n\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t?disabled=${this.disabled}\n\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\ttype=${ifDefined(this.type)}\n\t\t\t\ttabindex=${ifDefined(this.disabled ? '-1' : undefined)}\n\t\t\t>\n\t\t\t\t${when(!this.disabled, () => html`<div class=\"absolute inset-0 ${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t${this.text\n\t\t\t\t\t? html`<slot></slot>`\n\t\t\t\t\t: html`\n\t\t\t\t\t\t<slot style=\"display:none\"></slot>\n\t\t\t\t\t\t<schmancy-icon class=${iconSizeClass}>${this.icon || this.capturedIcon}</schmancy-icon>\n\t\t\t\t\t`\n\t\t\t\t}\n\t\t\t</button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-icon-button': SchmnacyIconButton\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"button.js","names":["#ariaLabel"],"sources":["../src/button/icon-button.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { when } from 'lit/directives/when.js'\nimport { magnetic } from '../directives/magnetic'\nimport { ButtonVariant } from './button'\n\n/**\n * An icon button component.\n * @element schmancy-icon-button\n * @slot - The default slot (usually an icon or glyph).\n * @csspart base - The underlying native `<button>` (or `<a>` when `href` is set).\n */\n@customElement('schmancy-icon-button')\nexport class SchmnacyIconButton extends SchmancyElement {\n\tstatic styles = [\n\t\tcss`\n\t\t\t:host {\n\t\t\t\tdisplay: inline-flex;\n\t\t\t\tflex-shrink: 0;\n\t\t\t\tborder-radius: 9999px;\n\t\t\t\ttransition:\n\t\t\t\t\tbox-shadow 300ms cubic-bezier(0.34, 1.56, 0.64, 1),\n\t\t\t\t\ttransform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t\t\t}\n\t\t\t:host([width='full']) {\n\t\t\t\tdisplay: flex;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t\t:host(:hover:not([disabled])) {\n\t\t\t\tbox-shadow: 0 2px 12px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 18%, transparent);\n\t\t\t}\n\t\t\t:host(:active:not([disabled])) {\n\t\t\t\ttransform: scale(0.92);\n\t\t\t\tbox-shadow: none;\n\t\t\t\ttransition-duration: 100ms;\n\t\t\t}\n\t\t\t@media (prefers-reduced-motion: reduce) {\n\t\t\t\t:host {\n\t\t\t\t\ttransition: none;\n\t\t\t\t}\n\t\t\t\t:host(:hover:not([disabled])) {\n\t\t\t\t\tbox-shadow: none;\n\t\t\t\t}\n\t\t\t\t:host(:active:not([disabled])) {\n\t\t\t\t\ttransform: none;\n\t\t\t\t\tbox-shadow: none;\n\t\t\t\t}\n\t\t\t}\n\t\t`,\n\t]\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: true,\n\t}\n\n\t@query('[part=\"base\"]', true)\n\tprivate nativeElement!: HTMLElement\n\n\t#ariaLabel!: string\n\n\t/**\n\t * The size of the icon.\n\t * @attr\n\t * @default 'md'\n\t */\n\t@property({ type: String })\n\tpublic size: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'md'\n\n\t/**\n\t * The variant of the button.\n\t * @attr\n\t * @default 'text'\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic variant: ButtonVariant = 'text'\n\n\t/**\n\t * The width of the button.\n\t * @attr\n\t * @type {'full' | 'auto'}\n\t * @default 'auto'\n\t */\n\t@property({ reflect: true })\n\tpublic width: 'full' | 'auto' = 'auto'\n\n\t/**\n\t * The type of the button.\n\t * Defaults to 'button' (preventing accidental form submissions).\n\t * @attr\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic type: 'button' | 'reset' | 'submit' = 'button'\n\n\t/**\n\t * The URL the button points to.\n\t * If provided, the component will render as an anchor element.\n\t * @attr\n\t */\n\t@property()\n\tpublic href?: string\n\n\t/**\n\t * Determines whether the button is disabled.\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tpublic disabled = false\n\n\t/**\n\t * Render slot content as text instead of wrapping in schmancy-icon.\n\t * Use this when you want to display text labels in the button.\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tpublic text = false\n\n\t/**\n\t * Icon name - use this instead of slot content to prevent translation breaking icons.\n\t * Example: <schmancy-icon-button icon=\"add\"></schmancy-icon-button>\n\t * @attr\n\t */\n\t@property({ type: String })\n\tpublic icon?: string\n\n\t// Reactively captured icon name from slot content (translation-proof).\n\t// Mirrors <schmancy-icon>: a MutationObserver on the light DOM keeps this\n\t// in sync no matter how the consumer passes the name — a plain text node,\n\t// a dynamic ${...} binding (Lit mutates the text node's data in place, so\n\t// no slotchange ever fires), or a nested <schmancy-icon> element.\n\t// `textContent` flattens through all three.\n\t@state()\n\tprivate capturedIcon?: string\n\n\tprivate observer?: MutationObserver\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\tthis.captureIcon()\n\t\tthis.observer = new MutationObserver(() => this.captureIcon())\n\t\tthis.observer.observe(this, { childList: true, characterData: true, subtree: true })\n\t}\n\n\tdisconnectedCallback(): void {\n\t\tsuper.disconnectedCallback()\n\t\tthis.observer?.disconnect()\n\t}\n\n\tprivate captureIcon(): void {\n\t\tif (this.icon || this.text) return\n\t\tthis.capturedIcon = this.textContent?.trim() || undefined\n\t}\n\n\t// Manage aria-label manually so that we can always use our internal property.\n\tpublic override set ariaLabel(value: string) {\n\t\tconst oldVal = this.#ariaLabel\n\t\tthis.#ariaLabel = value\n\n\t\tif (this.hasAttribute('aria-label')) {\n\t\t\tthis.removeAttribute('aria-label')\n\t\t}\n\t\tthis.requestUpdate('ariaLabel', oldVal)\n\t}\n\n\t@property({ attribute: 'aria-label' })\n\tpublic override get ariaLabel() {\n\t\treturn this.#ariaLabel\n\t}\n\n\t/** Sets focus in the button. */\n\tpublic override focus(options?: FocusOptions) {\n\t\tthis.nativeElement.focus(options)\n\t}\n\n\t/** Removes focus from the button. */\n\tpublic override blur() {\n\t\tthis.nativeElement.blur()\n\t}\n\n\tclick(): void {\n\t\tthis.dispatchEvent(new Event('click', { bubbles: true, composed: true }))\n\t}\n\n\t// Prevent default behavior when the component is disabled.\n\tprivate preventDefault(event: Event) {\n\t\tevent.preventDefault()\n\t\tevent.stopPropagation()\n\t}\n\n\tprotected firstUpdated(): void {\n\t\t// Add any first-update logic here if needed.\n\t}\n\n\trender() {\n\t\t// Map 'tonal' variant to 'filled tonal' for backwards compatibility\n\t\tconst effectiveVariant = this.variant === 'tonal' ? 'filled tonal' : this.variant\n\n\t\t// Compute classes for the interactive element.\n\t\tconst classes = {\n\t\t\t'z-0 h-full transition-all duration-200 relative rounded-full inline-flex justify-center items-center gap-[8px] outline-secondary-default focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 outline-hidden': true,\n\t\t\t'opacity-[0.38]': this.disabled,\n\t\t\t'cursor-pointer': !this.disabled,\n\t\t\t'hover:shadow-xs':\n\t\t\t\t!this.disabled &&\n\t\t\t\t(effectiveVariant === 'outlined' ||\n\t\t\t\t\teffectiveVariant === 'text' ||\n\t\t\t\t\teffectiveVariant === 'filled' ||\n\t\t\t\t\teffectiveVariant === 'filled tonal'),\n\t\t\t'hover:shadow-sm': !this.disabled && effectiveVariant === 'elevated',\n\t\t\t'flex-1 text-center': this.width === 'full',\n\t\t\t'bg-surface-low text-primary-default shadow-xs': effectiveVariant === 'elevated',\n\t\t\t'bg-transparent text-primary-default border-1 border-outline': effectiveVariant === 'outlined',\n\t\t\t'bg-primary-default text-primary-on': effectiveVariant === 'filled',\n\t\t\t'bg-secondary-container text-secondary-onContainer': effectiveVariant === 'filled tonal',\n\t\t\t'text-primary-default': effectiveVariant === 'text',\n\t\t\t// M3 spec: 24dp (xxs) → 32dp (dense) → 40dp (default) → 48dp (standard) → 56dp (large)\n\t\t\t'p-1.5': this.size === 'xxs', // 6px padding = 24px total (12px icon) - Ultra-compact\n\t\t\t'p-2': this.size === 'xs', // 8px padding = 32px total (16px icon) - M3 dense\n\t\t\t'p-2.5': this.size === 'sm', // 10px padding = 40px total (20px icon) - M3 default\n\t\t\t'p-3': this.size === 'md', // 12px padding = 48px total (24px icon) - M3 standard\n\t\t\t'p-4': this.size === 'lg', // 16px padding = 56px total (24px icon) - M3 large\n\t\t\t'p-5': this.size === 'xl', // 20px padding = 80px total (40px icon) - custom XL\n\t\t}\n\n\t\tconst stateLayerClasses = {\n\t\t\t'hover:opacity-[0.08] rounded-full z-0': true,\n\t\t\t'hover:bg-primary-on': effectiveVariant === 'filled',\n\t\t\t'hover:bg-primary-default':\n\t\t\t\teffectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text',\n\t\t\t'hover:bg-secondary-container': effectiveVariant === 'filled tonal',\n\t\t}\n\n\t\tconst iconSizeClass =\n\t\t\tthis.size === 'xxs'\n\t\t\t\t? 'text-xs'\n\t\t\t\t: this.size === 'xs'\n\t\t\t\t\t? 'text-base'\n\t\t\t\t\t: this.size === 'sm'\n\t\t\t\t\t\t? 'text-xl'\n\t\t\t\t\t\t: this.size === 'md'\n\t\t\t\t\t\t\t? 'text-2xl'\n\t\t\t\t\t\t\t: this.size === 'lg'\n\t\t\t\t\t\t\t\t? 'text-2xl'\n\t\t\t\t\t\t\t\t: 'text-4xl'\n\n\t\t// If href is provided, render an anchor element.\n\t\tif (this.href) {\n\t\t\treturn html`\n\t\t\t\t<a\n\t\t\t\t\t${magnetic({ strength: 3, radius: 50 })}\n\t\t\t\t\tpart=\"base\"\n\t\t\t\t\thref=${ifDefined(this.disabled ? undefined : this.href)}\n\t\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\t\ttabindex=${this.disabled ? '-1' : '0'}\n\t\t\t\t\taria-disabled=${this.disabled}\n\t\t\t\t\t@click=${this.disabled ? this.preventDefault : undefined}\n\t\t\t\t>\n\t\t\t\t\t${when(!this.disabled, () => html`<div class=\"absolute inset-0 ${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t\t${this.text\n\t\t\t\t\t\t? html`<slot></slot>`\n\t\t\t\t\t\t: html`\n\t\t\t\t\t\t\t\t<slot style=\"display:none\"></slot>\n\t\t\t\t\t\t\t\t<schmancy-icon class=${iconSizeClass}>${this.icon || this.capturedIcon}</schmancy-icon>\n\t\t\t\t\t\t\t`}\n\t\t\t\t</a>\n\t\t\t`\n\t\t}\n\n\t\t// Otherwise, render a native button element.\n\t\treturn html`\n\t\t\t<button\n\t\t\t\t${magnetic({ strength: 3, radius: 50 })}\n\t\t\t\tpart=\"base\"\n\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t?disabled=${this.disabled}\n\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\ttype=${ifDefined(this.type)}\n\t\t\t\ttabindex=${ifDefined(this.disabled ? '-1' : undefined)}\n\t\t\t>\n\t\t\t\t${when(!this.disabled, () => html`<div class=\"absolute inset-0 ${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t${this.text\n\t\t\t\t\t? html`<slot></slot>`\n\t\t\t\t\t: html`\n\t\t\t\t\t\t\t<slot style=\"display:none\"></slot>\n\t\t\t\t\t\t\t<schmancy-icon class=${iconSizeClass}>${this.icon || this.capturedIcon}</schmancy-icon>\n\t\t\t\t\t\t`}\n\t\t\t</button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-icon-button': SchmnacyIconButton\n\t}\n}\n"],"mappings":";;;;;;;;AAeO,IAAA,IAAA,cAAiC,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,CAAA,GAAA,KAAA,OAuDiB,MAAA,KAAA,UAQxB,QAAA,KAAA,QASA,QAAA,KAAA,OAQa,UAAA,KAAA,WAAA,CAe3B,GAAA,KAAA,OAAA,CAQJ;CAAA;CAAA;EAAA,KAAA,SAtGE,CACf,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAoCiC;GAAA,GACjC,EAAW;GACd,MAAM;GACN,gBAAA,CAAgB;EAAA;CAAA;CAMjB;CA6EA,oBAAA;EACC,MAAM,kBAAA,GACN,KAAK,YAAA,GACL,KAAK,WAAW,IAAI,uBAAuB,KAAK,YAAA,CAAA,GAChD,KAAK,SAAS,QAAQ,MAAM;GAAE,WAAA,CAAW;GAAM,eAAA,CAAe;GAAM,SAAA,CAAS;EAAA,CAAA;CAC9E;CAEA,uBAAA;EACC,MAAM,qBAAA,GACN,KAAK,UAAU,WAAA;CAChB;CAEA,cAAA;EACK,KAAK,QAAQ,KAAK,SACtB,KAAK,eAAe,KAAK,aAAa,KAAA,KAAA,KAAU;CACjD;CAGA,IAAA,UAA8B,GAAA;EAC7B,IAAM,IAAS,KAAA;EACf,KAAA,KAAkB,GAEd,KAAK,aAAa,YAAA,KACrB,KAAK,gBAAgB,YAAA,GAEtB,KAAK,cAAc,aAAa,CAAA;CACjC;CAEA,IAAA,YACoB;EACnB,OAAO,KAAA;CACR;CAGA,MAAsB,GAAA;EACrB,KAAK,cAAc,MAAM,CAAA;CAC1B;CAGA,OAAA;EACC,KAAK,cAAc,KAAA;CACpB;CAEA,QAAA;EACC,KAAK,cAAc,IAAI,MAAM,SAAS;GAAE,SAAA,CAAS;GAAM,UAAA,CAAU;EAAA,CAAA,CAAA;CAClE;CAGA,eAAuB,GAAA;EACtB,EAAM,eAAA,GACN,EAAM,gBAAA;CACP;CAEA,eAAA,CAEA;CAEA,SAAA;EAEC,IAAM,IAAmB,KAAK,YAAY,UAAU,iBAAiB,KAAK,SAGpE,IAAU;GACf,8OAAA,CAA8O;GAC9O,kBAAkB,KAAK;GACvB,kBAAA,CAAmB,KAAK;GACxB,mBAAA,CACE,KAAK,aACL,MAAqB,cACrB,MAAqB,UACrB,MAAqB,YACrB,MAAqB;GACvB,mBAAA,CAAoB,KAAK,YAAY,MAAqB;GAC1D,sBAAsB,KAAK,UAAU;GACrC,iDAAiD,MAAqB;GACtE,+DAA+D,MAAqB;GACpF,sCAAsC,MAAqB;GAC3D,qDAAqD,MAAqB;GAC1E,wBAAwB,MAAqB;GAE7C,SAAS,KAAK,SAAS;GACvB,OAAO,KAAK,SAAS;GACrB,SAAS,KAAK,SAAS;GACvB,OAAO,KAAK,SAAS;GACrB,OAAO,KAAK,SAAS;GACrB,OAAO,KAAK,SAAS;EAAT,GAGP,IAAoB;GACzB,yCAAA,CAAyC;GACzC,uBAAuB,MAAqB;GAC5C,4BACC,MAAqB,cAAc,MAAqB,cAAc,MAAqB;GAC5F,gCAAgC,MAAqB;EAArB,GAG3B,IACL,KAAK,SAAS,QACX,YACA,KAAK,SAAS,OACb,cACA,KAAK,SAAS,OACb,YACA,KAAK,SAAS,QAEb,KAAK,SAAS,OADd,aAGC;EAGR,OAAI,KAAK,OACD,CAAI;;OAEP,EAAS;GAAE,UAAU;GAAG,QAAQ;EAAA,CAAA,EAAA;;YAE3B,EAAU,KAAK,WAAA,KAAW,IAAY,KAAK,IAAA,EAAA;kBACrC,EAAU,KAAK,SAAA,EAAA;cACnB,KAAK,SAAS,CAAA,EAAA;gBACZ,KAAK,WAAW,OAAO,IAAA;qBAClB,KAAK,SAAA;cACZ,KAAK,WAAW,KAAK,iBAAA,KAAiB,EAAA;;OAE7C,EAAA,CAAM,KAAK,gBAAgB,CAAI,gCAAgC,KAAK,SAAS,CAAA,EAAA,SAAA,EAAA;OAC7E,KAAK,OACJ,CAAI,kBACJ,CAAI;;+BAEmB,EAAA,GAAiB,KAAK,QAAQ,KAAK,aAAA;;;OAOzD,CAAI;;MAEP,EAAS;GAAE,UAAU;GAAG,QAAQ;EAAA,CAAA,EAAA;;iBAErB,EAAU,KAAK,SAAA,EAAA;gBAChB,KAAK,SAAA;aACR,KAAK,SAAS,CAAA,EAAA;WAChB,EAAU,KAAK,IAAA,EAAA;eACX,EAAU,KAAK,WAAW,OAAA,KAAO,CAAA,EAAA;;MAE1C,EAAA,CAAM,KAAK,gBAAgB,CAAI,gCAAgC,KAAK,SAAS,CAAA,EAAA,SAAA,EAAA;MAC7E,KAAK,OACJ,CAAI,kBACJ,CAAI;;8BAEmB,EAAA,GAAiB,KAAK,QAAQ,KAAK,aAAA;;;;CAIhE;AAAA;AAAA,EAAA,CAzOC,EAAM,mBAAA,CAAiB,CAAA,CAAA,GAAI,EAAA,WAAA,iBAAA,KAAA,CAAA,GAAA,EAAA,CAU3B,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,QAAA,KAAA,CAAA,GAAA,EAAA,CAQzB,EAAS;CAAE,SAAA,CAAS;CAAM,MAAM;AAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,WAAA,KAAA,CAAA,GAAA,EAAA,CASxC,EAAS,EAAE,SAAA,CAAS,EAAA,CAAA,CAAA,GAAM,EAAA,WAAA,SAAA,KAAA,CAAA,GAAA,EAAA,CAQ1B,EAAS;CAAE,SAAA,CAAS;CAAM,MAAM;AAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,QAAA,KAAA,CAAA,GAAA,EAAA,CAQxC,EAAA,CAAA,GAAS,EAAA,WAAA,QAAA,KAAA,CAAA,GAAA,EAAA,CAOT,EAAS;CAAE,MAAM;CAAS,SAAA,CAAS;AAAA,CAAA,CAAA,GAAM,EAAA,WAAA,YAAA,KAAA,CAAA,GAAA,EAAA,CAQzC,EAAS;CAAE,MAAM;CAAS,SAAA,CAAS;AAAA,CAAA,CAAA,GAAM,EAAA,WAAA,QAAA,KAAA,CAAA,GAAA,EAAA,CAQzC,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,QAAA,KAAA,CAAA,GAAA,EAAA,CASzB,EAAA,CAAA,GAAM,EAAA,WAAA,gBAAA,KAAA,CAAA,GAAA,EAAA,CAiCN,EAAS,EAAE,WAAW,aAAA,CAAA,CAAA,GAAc,EAAA,WAAA,aAAA,IAAA,GAAA,IAAA,EAAA,CAzJrC,EAAc,sBAAA,CAAA,GAAsB,CAAA;AAAA,SAAA,KAAA,gBAAA,KAAA"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
const e=require(`./chunk-CncqDLb2.cjs`),t=require(`./SchmancyElement-CeKrBW2j.cjs`);require(`./mixins-Cjn20BQH.cjs`);const n=require(`./dayjs.min-CvRZTfam.cjs`);let r=require(`rxjs`),i=require(`rxjs/operators`),a=require(`lit/directives/class-map.js`),o=require(`lit/decorators.js`),s=require(`lit`),c=require(`lit/directives/repeat.js`);var l=e.t((e,t)=>{var n=e,r=function(){"use strict";return function(e,t,n){var r=t.prototype,i=function(e){return e&&(e.indexOf?e:e.s)},a=function(e,t,n,r,a){var o=e.name?e:e.$locale(),s=i(o[t]),c=i(o[n]),l=s||c.map(function(e){return e.slice(0,r)});if(!a)return l;var u=o.weekStart;return l.map(function(e,t){return l[(t+(u||0))%7]})},o=function(){return n.Ls[n.locale()]},s=function(e,t){return e.formats[t]||function(e){return e.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(e,t,n){return t||n.slice(1)})}(e.formats[t.toUpperCase()])},c=function(){var e=this;return{months:function(t){return t?t.format(`MMMM`):a(e,`months`)},monthsShort:function(t){return t?t.format(`MMM`):a(e,`monthsShort`,`months`,3)},firstDayOfWeek:function(){return e.$locale().weekStart||0},weekdays:function(t){return t?t.format(`dddd`):a(e,`weekdays`)},weekdaysMin:function(t){return t?t.format(`dd`):a(e,`weekdaysMin`,`weekdays`,2)},weekdaysShort:function(t){return t?t.format(`ddd`):a(e,`weekdaysShort`,`weekdays`,3)},longDateFormat:function(t){return s(e.$locale(),t)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};r.localeData=function(){return c.bind(this)()},n.localeData=function(){var e=o();return{firstDayOfWeek:function(){return e.weekStart||0},weekdays:function(){return n.weekdays()},weekdaysShort:function(){return n.weekdaysShort()},weekdaysMin:function(){return n.weekdaysMin()},months:function(){return n.months()},monthsShort:function(){return n.monthsShort()},longDateFormat:function(t){return s(e,t)},meridiem:e.meridiem,ordinal:e.ordinal}},n.months=function(){return a(o(),`months`)},n.monthsShort=function(){return a(o(),`monthsShort`,`months`,3)},n.weekdays=function(e){return a(o(),`weekdays`,null,null,e)},n.weekdaysShort=function(e){return a(o(),`weekdaysShort`,`weekdays`,3,e)},n.weekdaysMin=function(e){return a(o(),`weekdaysMin`,`weekdays`,2,e)}}};typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs_plugin_localeData=r()}),u=e.t((e,t)=>{var n=e,r=function(){"use strict";return function(e,t){t.prototype.weekday=function(e){var t=this.$locale().weekStart||0,n=this.$W,r=(n<t?n+7:n)-t;return this.$utils().u(e)?r:this.subtract(r,`day`).add(e,`day`)}}};typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs_plugin_weekday=r()}),d=e.t((e,t)=>{var n=e,r=function(){"use strict";return function(e,t,n){t.prototype.isBetween=function(e,t,r,i){var a=n(e),o=n(t),s=(i||=`()`)[0]===`(`,c=i[1]===`)`;return(s?this.isAfter(a,r):!this.isBefore(a,r))&&(c?this.isBefore(o,r):!this.isAfter(o,r))||(s?this.isBefore(a,r):!this.isAfter(a,r))&&(c?this.isAfter(o,r):!this.isBefore(o,r))}}};typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs_plugin_isBetween=r()}),f=e.r(n.t(),1),p=e.r(l(),1),m=e.r(u(),1),h=e.r(d(),1);function g(e){let[t,n]=e.split(`-`).map(Number);return{year:t,month:n}}function _(e){return e.format(`YYYY-MM`)}function v(e,t){let{year:n,month:r}=g(e);return _((0,f.default)(new Date(n,r-1,1)).add(t,`month`))}function y(e){if(!e)return 0;try{let t=new Intl.Locale(e).weekInfo;return t?.firstDay==null||t.firstDay===7?0:t.firstDay}catch{return 0}}f.default.extend(p.default),f.default.extend(m.default),f.default.extend(h.default);var b=class extends t.t{constructor(...e){super(...e),this.mode=`single`,this.type=`date`,this.disabled=!1,this.readonly=!1,this.anchorMonth=_((0,f.default)()),this.pendingStart=null,this.hoverDate=null,this.scroll$=new r.Subject,this.scrollerReady$=new r.Subject,this.scrollerAttached=!1}static{this.styles=[s.css`
|
|
2
|
+
:host {
|
|
3
|
+
display: block;
|
|
4
|
+
}
|
|
5
|
+
[part~='scroll'] {
|
|
6
|
+
scroll-behavior: smooth;
|
|
7
|
+
}
|
|
8
|
+
`]}connectedCallback(){super.connectedCallback(),this.month?this.anchorMonth=this.month:this.mode===`range`?this.start?this.anchorMonth=_((0,f.default)(this.start)):this.end?this.anchorMonth=_((0,f.default)(this.end)):this.anchorMonth=_((0,f.default)()):this.anchorMonth=this.value?_((0,f.default)(this.value)):_((0,f.default)()),(0,r.merge)(this.scroll$,this.scrollerReady$.pipe((0,i.switchMap)(e=>(0,r.fromEvent)(e,`scroll`).pipe((0,i.map)(()=>this.dominantMonth(e)))))).pipe((0,i.distinctUntilChanged)(),(0,i.debounceTime)(50),(0,r.takeUntil)(this.disconnecting)).subscribe(e=>{this.dispatchEvent(new CustomEvent(`navigate`,{detail:{month:e},bubbles:!0,composed:!0}))})}updated(e){if(super.updated(e),e.has(`month`)&&this.month&&this.month!==this.anchorMonth&&(this.anchorMonth=this.month,this.scrollToMonth(this.month)),!this.scrollerAttached){let e=this.shadowRoot?.querySelector(`[part="scroll"]`);e&&(this.scrollerAttached=!0,this.scrollerReady$.next(e))}}windowStart(){return this.min?_((0,f.default)(this.min).startOf(`month`)):v(this.resolveAnchor(),-3)}windowEnd(){return this.max?_((0,f.default)(this.max).endOf(`month`)):v(this.resolveAnchor(),9)}resolveAnchor(){if(this.month)return this.month;if(this.mode===`range`){if(this.start)return _((0,f.default)(this.start));if(this.end)return _((0,f.default)(this.end))}else if(this.value)return _((0,f.default)(this.value));return _((0,f.default)())}months(){let e=this.windowStart(),t=function(e,t){let n=g(e),r=g(t);return 12*(r.year-n.year)+(r.month-n.month)+1}(e,this.windowEnd());return Array.from({length:t},(t,n)=>v(e,n))}weekdayHeaders(){let e=[`Su`,`Mo`,`Tu`,`We`,`Th`,`Fr`,`Sa`],t=y(this.calLocale);return[...e.slice(t),...e.slice(0,t)]}dominantMonth(e){let t=e.querySelectorAll(`[data-month]`),n=e.scrollTop+e.clientHeight/2,r=this.anchorMonth,i=1/0;for(let e of t){let t=e.offsetTop+e.offsetHeight/2,a=Math.abs(t-n);a<i&&(i=a,r=e.dataset.month)}return r}scrollToMonth(e){requestAnimationFrame(()=>{let t=this.shadowRoot?.querySelector(`[part="scroll"]`);if(!t)return;let n=t.querySelector(`[data-month="${e}"]`);n&&n.scrollIntoView({behavior:`smooth`,block:`start`})})}isSelected(e){return this.mode===`single`?e===this.value:e===this.start||e===this.end}isRangeStart(e){return this.mode===`range`&&e===this.start}isRangeEnd(e){return this.mode===`range`&&e===this.end}isInRange(e){if(this.mode!==`range`||!this.start||!this.end)return!1;let t=(0,f.default)(e),n=(0,f.default)(this.start),r=(0,f.default)(this.end),[i,a]=n.isBefore(r)?[n,r]:[r,n];return t.isAfter(i)&&t.isBefore(a)}isInPreview(e){if(this.mode!==`range`||!this.pendingStart||!this.hoverDate)return!1;let t=(0,f.default)(e),n=(0,f.default)(this.pendingStart),r=(0,f.default)(this.hoverDate),[i,a]=n.isBefore(r)?[n,r]:[r,n];return t.isAfter(i)&&t.isBefore(a)||t.isSame(i)||t.isSame(a)}isToday(e){return e===(0,f.default)().format(`YYYY-MM-DD`)}isDisabled(e){return!!this.disabled||!!(this.min&&e<this.min)||!!(this.max&&e>this.max)}handleDayClick(e){if(!this.isDisabled(e)&&!this.readonly){if(this.mode===`single`)return this.value=e,void this.emit(`change`,{value:e,start:null,end:null});if(this.pendingStart===null)this.pendingStart=e,this.hoverDate=e,this.emit(`input`,{value:null,start:e,end:null});else{let[t,n]=this.pendingStart<=e?[this.pendingStart,e]:[e,this.pendingStart];this.pendingStart=null,this.hoverDate=null,this.start=t,this.end=n,this.emit(`change`,{value:null,start:t,end:n})}}}handleDayHover(e){if(this.mode!==`range`||this.pendingStart===null)return;this.hoverDate=e;let[t,n]=this.pendingStart<=e?[this.pendingStart,e]:[e,this.pendingStart];this.emit(`input`,{value:null,start:t,end:n})}handleKeyDown(e,t){e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),this.handleDayClick(t))}emit(e,t){this.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0,composed:!0}))}render(){let e=this.months(),t=this.weekdayHeaders();return s.html`
|
|
9
|
+
<div
|
|
10
|
+
part="scroll"
|
|
11
|
+
class="overflow-y-auto h-full"
|
|
12
|
+
role="grid"
|
|
13
|
+
aria-label="Calendar"
|
|
14
|
+
aria-multiselectable="${this.mode===`range`?`true`:`false`}"
|
|
15
|
+
>
|
|
16
|
+
${(0,c.repeat)(e,e=>e,e=>this.renderMonth(e,t))}
|
|
17
|
+
</div>
|
|
18
|
+
<div id="live-status" role="status" aria-live="polite" class="sr-only"></div>
|
|
19
|
+
`}renderMonth(e,t){let{year:n,month:r}=g(e),i=(0,f.default)(new Date(n,r-1,1)),a=i.daysInMonth(),o=y(this.calLocale),l=(i.day()-o+7)%7,u=i.format(`MMMM YYYY`),d=[];for(let e=0;e<l;e++)d.push({iso:null,day:null});for(let e=1;e<=a;e++)d.push({iso:`${n}-${String(r).padStart(2,`0`)}-${String(e).padStart(2,`0`)}`,day:e});for(;d.length%7!=0;)d.push({iso:null,day:null});let p=[];for(let e=0;e<d.length;e+=7)p.push(d.slice(e,e+7));return s.html`
|
|
20
|
+
<div data-month="${e}" class="flex flex-col">
|
|
21
|
+
<!-- Sticky month label -->
|
|
22
|
+
<div
|
|
23
|
+
part="month-label"
|
|
24
|
+
class="sticky top-0 z-10 bg-surface-default px-3 py-2 font-medium text-sm text-on-surface"
|
|
25
|
+
>
|
|
26
|
+
<slot name="month-label">${u}</slot>
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
<!-- Weekday header row -->
|
|
30
|
+
<div role="row" part="weekday" class="grid grid-cols-7 gap-0 px-3">
|
|
31
|
+
${t.map(e=>s.html`<div role="columnheader" class="text-center text-xs text-on-surface-variant py-1">${e}</div>`)}
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
<!-- Day grid — each week is a row for ARIA grid conformance -->
|
|
35
|
+
<div part="grid" class="flex flex-col px-3 pb-4">
|
|
36
|
+
${(0,c.repeat)(p,(t,n)=>`${e}-row-${n}`,(t,n)=>s.html`
|
|
37
|
+
<div role="row" class="grid grid-cols-7">
|
|
38
|
+
${(0,c.repeat)(t,(t,r)=>`${e}-${7*n+r}`,e=>e.iso?this.renderDay(e.iso,e.day):s.html`<div role="gridcell" aria-hidden="true" class="h-9"></div>`)}
|
|
39
|
+
</div>
|
|
40
|
+
`)}
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
`}renderDay(e,t){let n=this.isDisabled(e),r=this.isSelected(e),i=this.isRangeStart(e),o=this.isRangeEnd(e),c=this.isInRange(e),l=this.isInPreview(e),u=this.isToday(e),d=i||o;return s.html`
|
|
44
|
+
<div
|
|
45
|
+
part="${[`day`,r?`day-selected`:``,i?`day-range-start`:``,o?`day-range-end`:``,c?`day-in-range`:``,l?`day-preview`:``,u?`day-today`:``,n?`day-disabled`:``].filter(Boolean).join(` `)}"
|
|
46
|
+
class="${(0,a.classMap)({"h-9":!0,"w-full":!0,flex:!0,"items-center":!0,"justify-center":!0,"text-sm":!0,"rounded-full":!0,"cursor-pointer":!0,"select-none":!0,"bg-primary-default":r||d,"text-on-primary":r||d,"bg-primary-container":c,"text-on-primary-container":c,"rounded-none":c||l&&!r,"bg-primary-container/50":l&&!r&&!d,"text-on-surface":l&&!r&&!d,"font-semibold":u&&!r,"ring-1":u&&!r,"ring-primary-default":u&&!r,"opacity-30":n,"cursor-not-allowed":n,"pointer-events-none":n,"hover:bg-surface-variant":!(n||r||d||c||l)})}"
|
|
47
|
+
role="gridcell"
|
|
48
|
+
aria-label="${e}"
|
|
49
|
+
aria-selected="${r||d||c?`true`:`false`}"
|
|
50
|
+
aria-disabled="${n?`true`:`false`}"
|
|
51
|
+
tabindex="${n?`-1`:`0`}"
|
|
52
|
+
@click="${()=>this.handleDayClick(e)}"
|
|
53
|
+
@mouseenter="${()=>this.handleDayHover(e)}"
|
|
54
|
+
@keydown="${t=>this.handleKeyDown(t,e)}"
|
|
55
|
+
>
|
|
56
|
+
${t}
|
|
57
|
+
</div>
|
|
58
|
+
`}};t.u([(0,o.property)({reflect:!0})],b.prototype,`mode`,void 0),t.u([(0,o.property)()],b.prototype,`type`,void 0),t.u([(0,o.property)()],b.prototype,`value`,void 0),t.u([(0,o.property)()],b.prototype,`start`,void 0),t.u([(0,o.property)()],b.prototype,`end`,void 0),t.u([(0,o.property)()],b.prototype,`min`,void 0),t.u([(0,o.property)()],b.prototype,`max`,void 0),t.u([(0,o.property)()],b.prototype,`month`,void 0),t.u([(0,o.property)({attribute:`locale`})],b.prototype,`calLocale`,void 0),t.u([(0,o.property)({type:Boolean,reflect:!0})],b.prototype,`disabled`,void 0),t.u([(0,o.property)({type:Boolean,reflect:!0})],b.prototype,`readonly`,void 0),t.u([(0,o.state)()],b.prototype,`anchorMonth`,void 0),t.u([(0,o.state)()],b.prototype,`pendingStart`,void 0),t.u([(0,o.state)()],b.prototype,`hoverDate`,void 0),b=t.u([(0,o.customElement)(`schmancy-calendar`)],b),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return b}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar-2dJrw9pR.cjs","names":[],"sources":["../node_modules/dayjs/plugin/localeData.js","../node_modules/dayjs/plugin/weekday.js","../node_modules/dayjs/plugin/isBetween.js","../src/calendar/calendar.ts"],"sourcesContent":["!function(n,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(n=\"undefined\"!=typeof globalThis?globalThis:n||self).dayjs_plugin_localeData=e()}(this,(function(){\"use strict\";return function(n,e,t){var r=e.prototype,o=function(n){return n&&(n.indexOf?n:n.s)},u=function(n,e,t,r,u){var i=n.name?n:n.$locale(),a=o(i[e]),s=o(i[t]),f=a||s.map((function(n){return n.slice(0,r)}));if(!u)return f;var d=i.weekStart;return f.map((function(n,e){return f[(e+(d||0))%7]}))},i=function(){return t.Ls[t.locale()]},a=function(n,e){return n.formats[e]||function(n){return n.replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(n,e,t){return e||t.slice(1)}))}(n.formats[e.toUpperCase()])},s=function(){var n=this;return{months:function(e){return e?e.format(\"MMMM\"):u(n,\"months\")},monthsShort:function(e){return e?e.format(\"MMM\"):u(n,\"monthsShort\",\"months\",3)},firstDayOfWeek:function(){return n.$locale().weekStart||0},weekdays:function(e){return e?e.format(\"dddd\"):u(n,\"weekdays\")},weekdaysMin:function(e){return e?e.format(\"dd\"):u(n,\"weekdaysMin\",\"weekdays\",2)},weekdaysShort:function(e){return e?e.format(\"ddd\"):u(n,\"weekdaysShort\",\"weekdays\",3)},longDateFormat:function(e){return a(n.$locale(),e)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};r.localeData=function(){return s.bind(this)()},t.localeData=function(){var n=i();return{firstDayOfWeek:function(){return n.weekStart||0},weekdays:function(){return t.weekdays()},weekdaysShort:function(){return t.weekdaysShort()},weekdaysMin:function(){return t.weekdaysMin()},months:function(){return t.months()},monthsShort:function(){return t.monthsShort()},longDateFormat:function(e){return a(n,e)},meridiem:n.meridiem,ordinal:n.ordinal}},t.months=function(){return u(i(),\"months\")},t.monthsShort=function(){return u(i(),\"monthsShort\",\"months\",3)},t.weekdays=function(n){return u(i(),\"weekdays\",null,null,n)},t.weekdaysShort=function(n){return u(i(),\"weekdaysShort\",\"weekdays\",3,n)},t.weekdaysMin=function(n){return u(i(),\"weekdaysMin\",\"weekdays\",2,n)}}}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_weekday=t()}(this,(function(){\"use strict\";return function(e,t){t.prototype.weekday=function(e){var t=this.$locale().weekStart||0,i=this.$W,n=(i<t?i+7:i)-t;return this.$utils().u(e)?n:this.subtract(n,\"day\").add(e,\"day\")}}}));","!function(e,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_isBetween=i()}(this,(function(){\"use strict\";return function(e,i,t){i.prototype.isBetween=function(e,i,s,f){var n=t(e),o=t(i),r=\"(\"===(f=f||\"()\")[0],u=\")\"===f[1];return(r?this.isAfter(n,s):!this.isBefore(n,s))&&(u?this.isBefore(o,s):!this.isAfter(o,s))||(r?this.isBefore(n,s):!this.isAfter(n,s))&&(u?this.isAfter(o,s):!this.isBefore(o,s))}}}));","import dayjs from 'dayjs'\nimport localeData from 'dayjs/plugin/localeData'\nimport weekday from 'dayjs/plugin/weekday'\nimport isBetween from 'dayjs/plugin/isBetween'\nimport { css, html, PropertyValues } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { fromEvent, merge, Subject, takeUntil } from 'rxjs'\nimport { debounceTime, distinctUntilChanged, map, switchMap } from 'rxjs/operators'\nimport { SchmancyElement } from '@mixins/index'\n\ndayjs.extend(localeData)\ndayjs.extend(weekday)\ndayjs.extend(isBetween)\n\n// ---------------------------------------------------------------------------\n// Event detail types\n// ---------------------------------------------------------------------------\n\n/** Fired on every provisional change (including range hover-preview). */\nexport type SchmancyCalendarInputEvent = CustomEvent<{\n\tvalue: string | null\n\tstart: string | null\n\tend: string | null\n}>\n\n/** Fired on a committed change: single click | second range endpoint | clear. */\nexport type SchmancyCalendarChangeEvent = CustomEvent<{\n\tvalue: string | null\n\tstart: string | null\n\tend: string | null\n}>\n\n/** Fired as the dominant in-view month changes while scrolling. */\nexport type SchmancyCalendarNavigateEvent = CustomEvent<{\n\tmonth: string\n}>\n\n// ---------------------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------------------\n\n/** Parse a 'YYYY-MM' string into { year, month } (1-based month). */\nfunction parseYM(ym: string): { year: number; month: number } {\n\tconst [y, m] = ym.split('-').map(Number)\n\treturn { year: y, month: m }\n}\n\n/** Format a dayjs instance as 'YYYY-MM'. */\nfunction toYM(d: dayjs.Dayjs): string {\n\treturn d.format('YYYY-MM')\n}\n\n/** Format a dayjs instance as 'YYYY-MM-DD'. */\nfunction toYMD(d: dayjs.Dayjs): string {\n\treturn d.format('YYYY-MM-DD')\n}\n\n/** Number of months between two 'YYYY-MM' strings (inclusive). */\nfunction monthsBetween(from: string, to: string): number {\n\tconst f = parseYM(from)\n\tconst t = parseYM(to)\n\treturn (t.year - f.year) * 12 + (t.month - f.month) + 1\n}\n\n/** Add `n` months to a 'YYYY-MM' string. */\nfunction addMonths(ym: string, n: number): string {\n\tconst { year, month } = parseYM(ym)\n\tconst d = dayjs(new Date(year, month - 1, 1)).add(n, 'month')\n\treturn toYM(d)\n}\n\n/**\n * Derive the first day of the week (0=Sun … 6=Sat) from a BCP-47 locale tag.\n * `Intl.Locale.weekInfo.firstDay` uses 1=Mon … 7=Sun; we convert to 0-based Sun.\n * Falls back to 0 (Sunday) when the API is unsupported or the locale is absent.\n */\nfunction firstDayOfWeek(locale: string | undefined): number {\n\tif (!locale) return 0\n\ttry {\n\t\tconst info = (new Intl.Locale(locale) as { weekInfo?: { firstDay?: number } }).weekInfo\n\t\tif (info?.firstDay == null) return 0\n\t\t// Intl spec: 1=Mon … 7=Sun → convert to 0-based (0=Sun … 6=Sat)\n\t\treturn info.firstDay === 7 ? 0 : info.firstDay\n\t} catch {\n\t\treturn 0\n\t}\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n/**\n * A presentational calendar primitive with continuous vertical month-scroll.\n * Supports single-date and date-range selection. No form-association.\n *\n * @element schmancy-calendar\n * @fires input - Every provisional change (incl. range hover-preview)\n * @fires change - Committed change: single click | second range endpoint | clear\n * @fires navigate - Dominant in-view month changed while scrolling\n *\n * @csspart scroll - The scrollable container\n * @csspart month-label - Sticky month/year label\n * @csspart weekday - Weekday header cell\n * @csspart grid - Day grid for a month\n * @csspart day - Individual day cell\n * @csspart day-selected - A selected day (single mode, or both endpoints)\n * @csspart day-range-start - Range start day\n * @csspart day-range-end - Range end day\n * @csspart day-in-range - Day inside the selected range (exclusive of endpoints)\n * @csspart day-preview - Day inside the hover-preview range\n * @csspart day-today - Today's date\n * @csspart day-disabled - Disabled (out-of-bounds) day\n */\n@customElement('schmancy-calendar')\nexport class SchmancyCalendar extends SchmancyElement {\n\tstatic styles = [\n\t\tcss`\n\t\t\t:host {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\t\t\t[part~='scroll'] {\n\t\t\t\tscroll-behavior: smooth;\n\t\t\t}\n\t\t`,\n\t]\n\n\t// -------------------------------------------------------------------------\n\t// Public properties (per the plan contract)\n\t// -------------------------------------------------------------------------\n\n\t@property({ reflect: true }) mode: 'single' | 'range' = 'single'\n\t@property() type: 'date' | 'datetime-local' = 'date'\n\t@property() value?: string | null\n\t@property() start?: string | null\n\t@property() end?: string | null\n\t@property() min?: string\n\t@property() max?: string\n\t@property() month?: string\n\t/** BCP-47 locale tag; week-start derived from it. Stored as `calLocale` to avoid conflicting with the base-class `locale` getter. */\n\t@property({ attribute: 'locale' }) calLocale?: string\n\t@property({ type: Boolean, reflect: true }) disabled = false\n\t@property({ type: Boolean, reflect: true }) readonly = false\n\n\t// -------------------------------------------------------------------------\n\t// Internal state\n\t// -------------------------------------------------------------------------\n\n\t/** The month the scroller is currently anchored to ('YYYY-MM'). */\n\t@state() private anchorMonth: string = toYM(dayjs())\n\n\t/** In range mode: the first click (pending second endpoint). */\n\t@state() private pendingStart: string | null = null\n\n\t/** In range mode: day the pointer is hovering over (for preview). */\n\t@state() private hoverDate: string | null = null\n\n\t// -------------------------------------------------------------------------\n\t// Internal subjects\n\t// -------------------------------------------------------------------------\n\n\t/**\n\t * Emits the dominant month string whenever a scroll event occurs.\n\t * Fed by both the DOM scroller's fromEvent (via scrollerReady$) and any\n\t * future direct pushes. Merging both into a single debounced pipeline\n\t * satisfies ONE_PIPELINE_ONE_SUBSCRIBE.\n\t */\n\tprivate readonly scroll$ = new Subject<string>()\n\n\t/**\n\t * Emits the scroller HTMLElement once it is available in the DOM\n\t * (from updated()). switchMap converts it into the fromEvent stream,\n\t * which feeds scroll$ — all inside the single connectedCallback pipeline.\n\t */\n\tprivate readonly scrollerReady$ = new Subject<HTMLElement>()\n\n\t// -------------------------------------------------------------------------\n\t// Lifecycle\n\t// -------------------------------------------------------------------------\n\n\toverride connectedCallback(): void {\n\t\tsuper.connectedCallback()\n\n\t\t// Resolve initial anchor from current props.\n\t\tif (this.month) {\n\t\t\tthis.anchorMonth = this.month\n\t\t} else if (this.mode === 'range') {\n\t\t\tif (this.start) this.anchorMonth = toYM(dayjs(this.start))\n\t\t\telse if (this.end) this.anchorMonth = toYM(dayjs(this.end))\n\t\t\telse this.anchorMonth = toYM(dayjs())\n\t\t} else {\n\t\t\tthis.anchorMonth = this.value ? toYM(dayjs(this.value)) : toYM(dayjs())\n\t\t}\n\n\t\t// Single pipeline. Three merged sources → debounce → navigate event.\n\t\t// 1. scroll$ — direct pushes (future programmatic use)\n\t\t// 2. scrollerReady$ switchMapped to fromEvent(scroller, 'scroll')\n\t\t// — DOM scroll events once the scroller is in the shadow DOM\n\t\tmerge(\n\t\t\tthis.scroll$,\n\t\t\tthis.scrollerReady$.pipe(\n\t\t\t\tswitchMap(scroller =>\n\t\t\t\t\tfromEvent(scroller, 'scroll').pipe(map(() => this.dominantMonth(scroller))),\n\t\t\t\t),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(distinctUntilChanged(), debounceTime(50), takeUntil(this.disconnecting))\n\t\t\t.subscribe(month => {\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent<SchmancyCalendarNavigateEvent['detail']>('navigate', {\n\t\t\t\t\t\tdetail: { month },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t})\n\t}\n\n\toverride updated(changed: PropertyValues): void {\n\t\tsuper.updated(changed)\n\t\t// If the `month` prop changes externally, scroll to that month.\n\t\tif (changed.has('month') && this.month && this.month !== this.anchorMonth) {\n\t\t\tthis.anchorMonth = this.month\n\t\t\tthis.scrollToMonth(this.month)\n\t\t}\n\t\t// Push the scroller element into the pipeline once it is in the DOM.\n\t\tif (!this.scrollerAttached) {\n\t\t\tconst scroller = this.shadowRoot?.querySelector('[part=\"scroll\"]') as HTMLElement | null\n\t\t\tif (scroller) {\n\t\t\t\tthis.scrollerAttached = true\n\t\t\t\tthis.scrollerReady$.next(scroller)\n\t\t\t}\n\t\t}\n\t}\n\n\t// -------------------------------------------------------------------------\n\t// Scroll listener gate (ensures scrollerReady$ fires exactly once)\n\t// -------------------------------------------------------------------------\n\n\tprivate scrollerAttached = false\n\n\t// -------------------------------------------------------------------------\n\t// Date-math helpers\n\t// -------------------------------------------------------------------------\n\n\t/** The scroll window start month. */\n\tprivate windowStart(): string {\n\t\tif (this.min) return toYM(dayjs(this.min).startOf('month'))\n\t\treturn addMonths(this.resolveAnchor(), -3)\n\t}\n\n\t/** The scroll window end month. */\n\tprivate windowEnd(): string {\n\t\tif (this.max) return toYM(dayjs(this.max).endOf('month'))\n\t\treturn addMonths(this.resolveAnchor(), 9)\n\t}\n\n\t/** Resolve the best anchor month from current props. */\n\tprivate resolveAnchor(): string {\n\t\tif (this.month) return this.month\n\t\tif (this.mode === 'range') {\n\t\t\tif (this.start) return toYM(dayjs(this.start))\n\t\t\tif (this.end) return toYM(dayjs(this.end))\n\t\t} else {\n\t\t\tif (this.value) return toYM(dayjs(this.value))\n\t\t}\n\t\treturn toYM(dayjs())\n\t}\n\n\t/** All months in the scroll window as 'YYYY-MM' strings. */\n\tprivate months(): string[] {\n\t\tconst start = this.windowStart()\n\t\tconst end = this.windowEnd()\n\t\tconst count = monthsBetween(start, end)\n\t\treturn Array.from({ length: count }, (_, i) => addMonths(start, i))\n\t}\n\n\t/** Days of the week starting from the locale's first day (BCP-47 derived). */\n\tprivate weekdayHeaders(): string[] {\n\t\tconst allDays = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\n\t\tconst firstDay = firstDayOfWeek(this.calLocale)\n\t\treturn [...allDays.slice(firstDay), ...allDays.slice(0, firstDay)]\n\t}\n\n\t// -------------------------------------------------------------------------\n\t// Dominant-month detection (for navigate events)\n\t// -------------------------------------------------------------------------\n\n\tprivate dominantMonth(scroller: HTMLElement): string {\n\t\tconst monthEls = scroller.querySelectorAll<HTMLElement>('[data-month]')\n\t\tconst scrollMid = scroller.scrollTop + scroller.clientHeight / 2\n\t\tlet best: string = this.anchorMonth\n\t\tlet bestDist = Infinity\n\t\tfor (const el of monthEls) {\n\t\t\tconst elMid = el.offsetTop + el.offsetHeight / 2\n\t\t\tconst dist = Math.abs(elMid - scrollMid)\n\t\t\tif (dist < bestDist) {\n\t\t\t\tbestDist = dist\n\t\t\t\tbest = el.dataset.month!\n\t\t\t}\n\t\t}\n\t\treturn best\n\t}\n\n\tprivate scrollToMonth(ym: string): void {\n\t\trequestAnimationFrame(() => {\n\t\t\tconst scroller = this.shadowRoot?.querySelector('[part=\"scroll\"]') as HTMLElement | null\n\t\t\tif (!scroller) return\n\t\t\tconst el = scroller.querySelector<HTMLElement>(`[data-month=\"${ym}\"]`)\n\t\t\tif (el) el.scrollIntoView({ behavior: 'smooth', block: 'start' })\n\t\t})\n\t}\n\n\t// -------------------------------------------------------------------------\n\t// Day-state helpers\n\t// -------------------------------------------------------------------------\n\n\tprivate isSelected(iso: string): boolean {\n\t\tif (this.mode === 'single') return iso === this.value\n\t\treturn iso === this.start || iso === this.end\n\t}\n\n\tprivate isRangeStart(iso: string): boolean {\n\t\treturn this.mode === 'range' && iso === this.start\n\t}\n\n\tprivate isRangeEnd(iso: string): boolean {\n\t\treturn this.mode === 'range' && iso === this.end\n\t}\n\n\tprivate isInRange(iso: string): boolean {\n\t\tif (this.mode !== 'range' || !this.start || !this.end) return false\n\t\tconst d = dayjs(iso)\n\t\tconst s = dayjs(this.start)\n\t\tconst e = dayjs(this.end)\n\t\tconst [lo, hi] = s.isBefore(e) ? [s, e] : [e, s]\n\t\treturn d.isAfter(lo) && d.isBefore(hi)\n\t}\n\n\tprivate isInPreview(iso: string): boolean {\n\t\tif (this.mode !== 'range' || !this.pendingStart || !this.hoverDate) return false\n\t\tconst d = dayjs(iso)\n\t\tconst s = dayjs(this.pendingStart)\n\t\tconst h = dayjs(this.hoverDate)\n\t\tconst [lo, hi] = s.isBefore(h) ? [s, h] : [h, s]\n\t\treturn (d.isAfter(lo) && d.isBefore(hi)) || d.isSame(lo) || d.isSame(hi)\n\t}\n\n\tprivate isToday(iso: string): boolean {\n\t\treturn iso === toYMD(dayjs())\n\t}\n\n\tprivate isDisabled(iso: string): boolean {\n\t\tif (this.disabled) return true\n\t\tif (this.min && iso < this.min) return true\n\t\tif (this.max && iso > this.max) return true\n\t\treturn false\n\t}\n\n\t// -------------------------------------------------------------------------\n\t// Click / hover / keyboard handlers\n\t// -------------------------------------------------------------------------\n\n\tprivate handleDayClick(iso: string): void {\n\t\tif (this.isDisabled(iso) || this.readonly) return\n\n\t\tif (this.mode === 'single') {\n\t\t\tthis.value = iso\n\t\t\tthis.emit('change', { value: iso, start: null, end: null })\n\t\t\treturn\n\t\t}\n\n\t\t// Range mode\n\t\tif (this.pendingStart === null) {\n\t\t\t// First click — set pending start, emit `input`\n\t\t\tthis.pendingStart = iso\n\t\t\tthis.hoverDate = iso\n\t\t\tthis.emit('input', { value: null, start: iso, end: null })\n\t\t} else {\n\t\t\t// Second click — commit range\n\t\t\tconst [s, e] = this.pendingStart <= iso ? [this.pendingStart, iso] : [iso, this.pendingStart]\n\t\t\tthis.pendingStart = null\n\t\t\tthis.hoverDate = null\n\t\t\tthis.start = s\n\t\t\tthis.end = e\n\t\t\tthis.emit('change', { value: null, start: s, end: e })\n\t\t}\n\t}\n\n\tprivate handleDayHover(iso: string): void {\n\t\tif (this.mode !== 'range' || this.pendingStart === null) return\n\t\tthis.hoverDate = iso\n\t\tconst [s, e] = this.pendingStart <= iso ? [this.pendingStart, iso] : [iso, this.pendingStart]\n\t\tthis.emit('input', { value: null, start: s, end: e })\n\t}\n\n\tprivate handleKeyDown(e: KeyboardEvent, iso: string): void {\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault()\n\t\t\tthis.handleDayClick(iso)\n\t\t}\n\t}\n\n\t// -------------------------------------------------------------------------\n\t// Event emission helper\n\t// -------------------------------------------------------------------------\n\n\tprivate emit(\n\t\teventName: 'input' | 'change',\n\t\tdetail: { value: string | null; start: string | null; end: string | null },\n\t): void {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent(eventName, {\n\t\t\t\tdetail,\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\t// -------------------------------------------------------------------------\n\t// Render\n\t// -------------------------------------------------------------------------\n\n\trender() {\n\t\tconst months = this.months()\n\t\tconst weekdays = this.weekdayHeaders()\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tpart=\"scroll\"\n\t\t\t\tclass=\"overflow-y-auto h-full\"\n\t\t\t\trole=\"grid\"\n\t\t\t\taria-label=\"Calendar\"\n\t\t\t\taria-multiselectable=\"${this.mode === 'range' ? 'true' : 'false'}\"\n\t\t\t>\n\t\t\t\t${repeat(\n\t\t\t\t\tmonths,\n\t\t\t\t\tym => ym,\n\t\t\t\t\tym => this.renderMonth(ym, weekdays),\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<div id=\"live-status\" role=\"status\" aria-live=\"polite\" class=\"sr-only\"></div>\n\t\t`\n\t}\n\n\tprivate renderMonth(ym: string, weekdays: string[]) {\n\t\tconst { year, month } = parseYM(ym)\n\t\tconst firstDay = dayjs(new Date(year, month - 1, 1))\n\t\tconst daysInMonth = firstDay.daysInMonth()\n\n\t\t// Offset relative to the locale's first day of week.\n\t\tconst localeFirstDay = firstDayOfWeek(this.calLocale)\n\t\t// firstDay.day() returns 0=Sun … 6=Sat; adjust for locale offset\n\t\tconst startOffset = (firstDay.day() - localeFirstDay + 7) % 7\n\n\t\tconst monthLabel = firstDay.format('MMMM YYYY')\n\n\t\t// Build flat cell array: leading empties + actual days\n\t\tconst cells: Array<{ iso: string | null; day: number | null }> = []\n\t\tfor (let i = 0; i < startOffset; i++) cells.push({ iso: null, day: null })\n\t\tfor (let d = 1; d <= daysInMonth; d++) {\n\t\t\tcells.push({ iso: `${year}-${String(month).padStart(2, '0')}-${String(d).padStart(2, '0')}`, day: d })\n\t\t}\n\t\t// Pad to a full last week\n\t\twhile (cells.length % 7 !== 0) cells.push({ iso: null, day: null })\n\n\t\t// Group into 7-day rows for proper ARIA grid structure\n\t\tconst rows: Array<typeof cells> = []\n\t\tfor (let r = 0; r < cells.length; r += 7) rows.push(cells.slice(r, r + 7))\n\n\t\treturn html`\n\t\t\t<div data-month=\"${ym}\" class=\"flex flex-col\">\n\t\t\t\t<!-- Sticky month label -->\n\t\t\t\t<div\n\t\t\t\t\tpart=\"month-label\"\n\t\t\t\t\tclass=\"sticky top-0 z-10 bg-surface-default px-3 py-2 font-medium text-sm text-on-surface\"\n\t\t\t\t>\n\t\t\t\t\t<slot name=\"month-label\">${monthLabel}</slot>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Weekday header row -->\n\t\t\t\t<div role=\"row\" part=\"weekday\" class=\"grid grid-cols-7 gap-0 px-3\">\n\t\t\t\t\t${weekdays.map(\n\t\t\t\t\t\td => html`<div role=\"columnheader\" class=\"text-center text-xs text-on-surface-variant py-1\">${d}</div>`,\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Day grid — each week is a row for ARIA grid conformance -->\n\t\t\t\t<div part=\"grid\" class=\"flex flex-col px-3 pb-4\">\n\t\t\t\t\t${repeat(\n\t\t\t\t\t\trows,\n\t\t\t\t\t\t(_, i) => `${ym}-row-${i}`,\n\t\t\t\t\t\t(row, ri) => html`\n\t\t\t\t\t\t\t<div role=\"row\" class=\"grid grid-cols-7\">\n\t\t\t\t\t\t\t\t${repeat(\n\t\t\t\t\t\t\t\t\trow,\n\t\t\t\t\t\t\t\t\t(_, ci) => `${ym}-${ri * 7 + ci}`,\n\t\t\t\t\t\t\t\t\tcell => {\n\t\t\t\t\t\t\t\t\t\tif (!cell.iso) return html`<div role=\"gridcell\" aria-hidden=\"true\" class=\"h-9\"></div>`\n\t\t\t\t\t\t\t\t\t\treturn this.renderDay(cell.iso, cell.day!)\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`,\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n\n\tprivate renderDay(iso: string, day: number) {\n\t\tconst disabled = this.isDisabled(iso)\n\t\tconst selected = this.isSelected(iso)\n\t\tconst rangeStart = this.isRangeStart(iso)\n\t\tconst rangeEnd = this.isRangeEnd(iso)\n\t\tconst inRange = this.isInRange(iso)\n\t\tconst inPreview = this.isInPreview(iso)\n\t\tconst isToday = this.isToday(iso)\n\t\tconst isEndpoint = rangeStart || rangeEnd\n\n\t\tconst parts = [\n\t\t\t'day',\n\t\t\tselected ? 'day-selected' : '',\n\t\t\trangeStart ? 'day-range-start' : '',\n\t\t\trangeEnd ? 'day-range-end' : '',\n\t\t\tinRange ? 'day-in-range' : '',\n\t\t\tinPreview ? 'day-preview' : '',\n\t\t\tisToday ? 'day-today' : '',\n\t\t\tdisabled ? 'day-disabled' : '',\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' ')\n\n\t\t// classMap keys must be single CSS class tokens (no spaces).\n\t\tconst classes = classMap({\n\t\t\t'h-9': true,\n\t\t\t'w-full': true,\n\t\t\tflex: true,\n\t\t\t'items-center': true,\n\t\t\t'justify-center': true,\n\t\t\t'text-sm': true,\n\t\t\t'rounded-full': true,\n\t\t\t'cursor-pointer': true,\n\t\t\t'select-none': true,\n\t\t\t'bg-primary-default': selected || isEndpoint,\n\t\t\t'text-on-primary': selected || isEndpoint,\n\t\t\t'bg-primary-container': inRange,\n\t\t\t'text-on-primary-container': inRange,\n\t\t\t'rounded-none': inRange || (inPreview && !selected),\n\t\t\t'bg-primary-container/50': inPreview && !selected && !isEndpoint,\n\t\t\t'text-on-surface': inPreview && !selected && !isEndpoint,\n\t\t\t'font-semibold': isToday && !selected,\n\t\t\t'ring-1': isToday && !selected,\n\t\t\t'ring-primary-default': isToday && !selected,\n\t\t\t'opacity-30': disabled,\n\t\t\t'cursor-not-allowed': disabled,\n\t\t\t'pointer-events-none': disabled,\n\t\t\t'hover:bg-surface-variant': !disabled && !selected && !isEndpoint && !inRange && !inPreview,\n\t\t})\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tpart=\"${parts}\"\n\t\t\t\tclass=\"${classes}\"\n\t\t\t\trole=\"gridcell\"\n\t\t\t\taria-label=\"${iso}\"\n\t\t\t\taria-selected=\"${selected || isEndpoint || inRange ? 'true' : 'false'}\"\n\t\t\t\taria-disabled=\"${disabled ? 'true' : 'false'}\"\n\t\t\t\ttabindex=\"${disabled ? '-1' : '0'}\"\n\t\t\t\t@click=\"${() => this.handleDayClick(iso)}\"\n\t\t\t\t@mouseenter=\"${() => this.handleDayHover(iso)}\"\n\t\t\t\t@keydown=\"${(e: KeyboardEvent) => this.handleKeyDown(e, iso)}\"\n\t\t\t>\n\t\t\t\t${day}\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-calendar': SchmancyCalendar\n\t}\n}\n"],"x_google_ignoreList":[0,1,2],"mappings":"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"}
|