@mhmo91/schmancy 0.10.41 → 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 +291 -179
- 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 +4057 -4082
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/agent/schmancy.manifest.json +225 -94
- 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-BiM7V2ns.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-CxO_j__6.js → audio-B_0PGwYC.js} +1 -1
- package/dist/audio-B_0PGwYC.js.map +1 -0
- package/dist/{audio-xXFfMPCS.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-DUBY9RtH.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-ScvAima3.js → boat-DoZGgQ0P.js} +6 -8
- package/dist/{boat-ScvAima3.js.map → boat-DoZGgQ0P.js.map} +1 -1
- package/dist/{boat-BIYaPAHp.cjs → boat-sg0cWO8a.cjs} +3 -5
- package/dist/{boat-BIYaPAHp.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-BTpxQ1Kd.cjs → button-Cml67Y_d.cjs} +41 -32
- package/dist/button-Cml67Y_d.cjs.map +1 -0
- package/dist/{button-D7QHfYf4.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-DCdtJ5Dy.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-DVtyPk7l.js → checkbox-Bjp7kWuE.js} +2 -2
- package/dist/{checkbox-DVtyPk7l.js.map → checkbox-Bjp7kWuE.js.map} +1 -1
- package/dist/{checkbox-CYGOVPP-.cjs → checkbox-DZ2Wrz7Y.cjs} +1 -1
- package/dist/{checkbox-CYGOVPP-.cjs.map → checkbox-DZ2Wrz7Y.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-DVes-BSz.cjs → chips-BHBVkxsa.cjs} +142 -153
- package/dist/chips-BHBVkxsa.cjs.map +1 -0
- package/dist/{chips-C5bpgWyf.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 +54 -38
- package/dist/connectivity.cjs.map +1 -1
- package/dist/connectivity.js +56 -40
- 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-Dx4Reboo.cjs → date-range-inline-CGM0SPK9.cjs} +2 -4
- package/dist/date-range-inline-CGM0SPK9.cjs.map +1 -0
- package/dist/{date-range-inline-DPqY9YYf.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-BnleHmYe.js → details-Ct1_GwKr.js} +104 -92
- package/dist/details-Ct1_GwKr.js.map +1 -0
- package/dist/{details-Bx2jSJxG.cjs → details-D4fVOaj4.cjs} +109 -97
- package/dist/details-D4fVOaj4.cjs.map +1 -0
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{directives-CYf2fAdA.cjs → directives-B2VxfwRL.cjs} +1 -1
- package/dist/directives-B2VxfwRL.cjs.map +1 -0
- package/dist/{directives-d1rEbW1A.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-DNrWuG_-.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-V7VQKTb8.cjs → float-BPQlDyai.cjs} +1 -1
- package/dist/{float-V7VQKTb8.cjs.map → float-BPQlDyai.cjs.map} +1 -1
- package/dist/{float-C_CMle0q.js → float-BQcxj3i_.js} +2 -2
- package/dist/{float-C_CMle0q.js.map → float-BQcxj3i_.js.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{form-DaaAQd2A.cjs → form-CoWFnClb.cjs} +8 -13
- package/dist/form-CoWFnClb.cjs.map +1 -0
- package/dist/{form-CMgYSZ3y.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-mbpHO_73.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-88SN5JPu.cjs → iframe-BkSukM9C.cjs} +9 -9
- package/dist/iframe-BkSukM9C.cjs.map +1 -0
- package/dist/{iframe-U3P1DnQv.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-CPWvGjE4.js → input-CPFCSQld.js} +3 -10
- package/dist/input-CPFCSQld.js.map +1 -0
- package/dist/{input-BY4Korc5.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-CCZ3i3Sf.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-BhfC26Ks.cjs → layout-CdyHy_oX.cjs} +1 -1
- package/dist/layout-CdyHy_oX.cjs.map +1 -0
- package/dist/{layout-DC0Npqu7.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-BSwWvDQc.js → lightbox-DIG0VLOK.js} +8 -14
- package/dist/lightbox-DIG0VLOK.js.map +1 -0
- package/dist/{lightbox-KrZQH9w9.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-BwGtAAfi.js → list-NrOYDPBo.js} +48 -34
- 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-DX8d96x-.js → menu-B1Ei9SVj.js} +12 -12
- package/dist/menu-B1Ei9SVj.js.map +1 -0
- package/dist/{menu-jT_yAk5V.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-XGVIOvKt.cjs → mixins-Cjn20BQH.cjs} +42 -170
- package/dist/mixins-Cjn20BQH.cjs.map +1 -0
- package/dist/{mixins-COeG4DiX.js → mixins-q4KAL8Xr.js} +43 -177
- 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-CAJVpLne.js → notification-COhUhUCr.js} +5 -7
- package/dist/notification-COhUhUCr.js.map +1 -0
- package/dist/{notification-DO3VXceY.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-JISY0wZJ.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-B1jVf-ge.cjs → overlay-BzgF8P7i.cjs} +48 -41
- package/dist/overlay-BzgF8P7i.cjs.map +1 -0
- package/dist/{overlay-CT-tMHDX.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-Dn-Zgogx.js → overlay.confirm-body-D0b1MoCw.js} +30 -45
- package/dist/overlay.confirm-body-D0b1MoCw.js.map +1 -0
- package/dist/{overlay.confirm-body-mYDYoJL8.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-yqTOyLlr.js → overlay.service-BuUeti6X.js} +2 -2
- package/dist/overlay.service-BuUeti6X.js.map +1 -0
- package/dist/{overlay.service-BQmva9GY.cjs → overlay.service-MMTiW2T3.cjs} +1 -1
- package/dist/overlay.service-MMTiW2T3.cjs.map +1 -0
- package/dist/{progress-CGWozq_n.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-DoSX5D2V.cjs → radio-group-CaAjg9UV.cjs} +1 -1
- package/dist/radio-group-CaAjg9UV.cjs.map +1 -0
- package/dist/{radio-group-CXkq6qAF.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-CU90i50_.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 +79 -39
- package/dist/skills/surface.md +79 -39
- 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-m8WjOhjn.js → sound.service-AJwuk3yr.js} +1 -1
- package/dist/sound.service-AJwuk3yr.js.map +1 -0
- package/dist/{sound.service-Qhr8nCeG.cjs → sound.service-CVsxhQkX.cjs} +1 -1
- package/dist/sound.service-CVsxhQkX.cjs.map +1 -0
- package/dist/{splash-screen-Cs3dbPN3.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-CCVbLLgC.js → src-DAtcPmCb.js} +295 -389
- 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--x58-AuK.cjs → state-BWQiqN6I.cjs} +1 -1
- package/dist/state-BWQiqN6I.cjs.map +1 -0
- package/dist/{state-QSwQ61sA.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-cqMsHJHM.js → surface-DXk1X1tL.js} +9 -9
- package/dist/surface-DXk1X1tL.js.map +1 -0
- 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-Ib0Mh__1.js → tabs-BYhFWnsx.js} +7 -7
- package/dist/tabs-BYhFWnsx.js.map +1 -0
- package/dist/{tabs-Dk9UDWpq.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-CcRsw08B.js → textarea-BjDx1w2g.js} +37 -41
- package/dist/textarea-BjDx1w2g.js.map +1 -0
- package/dist/{textarea-Cntd9tfV.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-wwFbvp5e.cjs → theme-BVul7lHS.cjs} +6 -6
- package/dist/{theme-wwFbvp5e.cjs.map → theme-BVul7lHS.cjs.map} +1 -1
- package/dist/{theme-CKYXG0le.js → theme-Dvm5J8nh.js} +11 -11
- package/dist/{theme-CKYXG0le.js.map → theme-Dvm5J8nh.js.map} +1 -1
- package/dist/{theme-button-iLqT56KA.js → theme-button-Bko5ohFP.js} +2 -2
- package/dist/{theme-button-iLqT56KA.js.map → theme-button-Bko5ohFP.js.map} +1 -1
- package/dist/{theme-button-DE9Lrl7m.cjs → theme-button-YLY7zR1c.cjs} +1 -1
- package/dist/{theme-button-DE9Lrl7m.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-5RjyR7Sy.js → theme.service-D94nm7Bf.js} +1 -1
- package/dist/theme.service-D94nm7Bf.js.map +1 -0
- package/dist/{theme.service-DA6KY52G.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-Db5ZYY6t.js → window-CCmN4but.js} +28 -20
- 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 +79 -39
- 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 +60 -209
- package/src/badge/index.ts +1 -1
- package/src/boat/boat.ts +2 -4
- 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 +91 -65
- 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 +55 -191
- package/src/surface/surface.ts +18 -16
- 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 +146 -114
- package/types/mixins/surface.mixin.d.ts +8 -14
- package/types/src/badge/badge.d.ts +15 -48
- 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.d.ts +9 -7
- package/types/src/surface/surface.styles.d.ts +15 -20
- package/types/src/types/surface.d.ts +17 -22
- package/types/src/utils/number.d.ts +1 -1
- package/types/src/window/window.d.ts +0 -1
- package/dist/SchmancyElement-D9WA9FP9.cjs +0 -2
- package/dist/SchmancyElement-D9WA9FP9.cjs.map +0 -1
- package/dist/SchmancyElement-OWgz9ePG.js +0 -286
- package/dist/SchmancyElement-OWgz9ePG.js.map +0 -1
- package/dist/area-BiM7V2ns.js.map +0 -1
- package/dist/area-C7XjCoet.cjs +0 -21
- package/dist/area-C7XjCoet.cjs.map +0 -1
- package/dist/audio-CxO_j__6.js.map +0 -1
- package/dist/audio-xXFfMPCS.cjs.map +0 -1
- package/dist/autocomplete-DD7Hd59N.cjs +0 -115
- package/dist/autocomplete-DD7Hd59N.cjs.map +0 -1
- package/dist/autocomplete-DUBY9RtH.js.map +0 -1
- package/dist/busy-BjsO3y2A.js +0 -173
- package/dist/busy-BjsO3y2A.js.map +0 -1
- package/dist/busy-UbCGkTAi.cjs +0 -134
- package/dist/busy-UbCGkTAi.cjs.map +0 -1
- package/dist/button-BTpxQ1Kd.cjs.map +0 -1
- package/dist/button-D7QHfYf4.js.map +0 -1
- package/dist/card-DCdtJ5Dy.js.map +0 -1
- package/dist/card-rprhCYIC.cjs +0 -177
- package/dist/card-rprhCYIC.cjs.map +0 -1
- package/dist/chips-C5bpgWyf.js.map +0 -1
- package/dist/chips-DVes-BSz.cjs.map +0 -1
- package/dist/date-range-DDUuBlJ6.cjs +0 -142
- package/dist/date-range-DDUuBlJ6.cjs.map +0 -1
- package/dist/date-range-IPlbrhwW.js +0 -966
- package/dist/date-range-IPlbrhwW.js.map +0 -1
- package/dist/date-range-inline-DPqY9YYf.js.map +0 -1
- package/dist/date-range-inline-Dx4Reboo.cjs.map +0 -1
- package/dist/details-BnleHmYe.js.map +0 -1
- package/dist/details-Bx2jSJxG.cjs.map +0 -1
- package/dist/directives-CYf2fAdA.cjs.map +0 -1
- package/dist/directives-d1rEbW1A.js.map +0 -1
- package/dist/divider-CimQJVr3.cjs +0 -57
- package/dist/divider-CimQJVr3.cjs.map +0 -1
- package/dist/divider-Cr-rx3vA.js +0 -89
- package/dist/divider-Cr-rx3vA.js.map +0 -1
- package/dist/expand-DNrWuG_-.js.map +0 -1
- package/dist/expand-_cp8oBjp.cjs +0 -141
- package/dist/expand-_cp8oBjp.cjs.map +0 -1
- package/dist/form-CMgYSZ3y.js.map +0 -1
- package/dist/form-DaaAQd2A.cjs.map +0 -1
- package/dist/icons-C2RkSXjP.cjs +0 -24
- package/dist/icons-C2RkSXjP.cjs.map +0 -1
- package/dist/icons-mbpHO_73.js.map +0 -1
- package/dist/iframe-88SN5JPu.cjs.map +0 -1
- package/dist/iframe-U3P1DnQv.js.map +0 -1
- package/dist/input-BY4Korc5.cjs.map +0 -1
- package/dist/input-CPWvGjE4.js.map +0 -1
- package/dist/input-chip-CCZ3i3Sf.js.map +0 -1
- package/dist/input-chip-kytMdbaM.cjs +0 -146
- package/dist/input-chip-kytMdbaM.cjs.map +0 -1
- package/dist/layout-BhfC26Ks.cjs.map +0 -1
- package/dist/layout-DC0Npqu7.js.map +0 -1
- package/dist/lightbox-BSwWvDQc.js.map +0 -1
- package/dist/lightbox-KrZQH9w9.cjs.map +0 -1
- package/dist/list-BwGtAAfi.js.map +0 -1
- package/dist/list-DIs02A3d.cjs +0 -40
- package/dist/list-DIs02A3d.cjs.map +0 -1
- package/dist/menu-DX8d96x-.js.map +0 -1
- package/dist/menu-jT_yAk5V.cjs.map +0 -1
- package/dist/mixins-COeG4DiX.js.map +0 -1
- package/dist/mixins-XGVIOvKt.cjs.map +0 -1
- package/dist/notification-CAJVpLne.js.map +0 -1
- package/dist/notification-DO3VXceY.cjs.map +0 -1
- package/dist/option-BNo1Zs-l.cjs +0 -43
- package/dist/option-BNo1Zs-l.cjs.map +0 -1
- package/dist/option-JISY0wZJ.js.map +0 -1
- package/dist/overlay-B1jVf-ge.cjs.map +0 -1
- package/dist/overlay-CT-tMHDX.js.map +0 -1
- package/dist/overlay.confirm-body-Dn-Zgogx.js.map +0 -1
- package/dist/overlay.confirm-body-mYDYoJL8.cjs.map +0 -1
- package/dist/overlay.service-BQmva9GY.cjs.map +0 -1
- package/dist/overlay.service-yqTOyLlr.js.map +0 -1
- package/dist/progress-CGWozq_n.js.map +0 -1
- package/dist/progress-DOVJhsR0.cjs +0 -51
- package/dist/progress-DOVJhsR0.cjs.map +0 -1
- package/dist/radio-group-CXkq6qAF.js.map +0 -1
- package/dist/radio-group-DoSX5D2V.cjs.map +0 -1
- package/dist/select-CObZenqg.cjs +0 -56
- package/dist/select-CObZenqg.cjs.map +0 -1
- package/dist/select-CU90i50_.js.map +0 -1
- package/dist/sound.service-Qhr8nCeG.cjs.map +0 -1
- package/dist/sound.service-m8WjOhjn.js.map +0 -1
- package/dist/splash-screen-Ca6Ew8p6.cjs +0 -41
- package/dist/splash-screen-Ca6Ew8p6.cjs.map +0 -1
- package/dist/splash-screen-Cs3dbPN3.js.map +0 -1
- package/dist/src-CCVbLLgC.js.map +0 -1
- package/dist/src-CpftzdZV.cjs +0 -264
- package/dist/src-CpftzdZV.cjs.map +0 -1
- package/dist/state--x58-AuK.cjs.map +0 -1
- package/dist/state-QSwQ61sA.js.map +0 -1
- package/dist/surface-bTjOiq8n.cjs +0 -7
- package/dist/surface-bTjOiq8n.cjs.map +0 -1
- package/dist/surface-cqMsHJHM.js.map +0 -1
- package/dist/tabs-Dk9UDWpq.cjs.map +0 -1
- package/dist/tabs-Ib0Mh__1.js.map +0 -1
- package/dist/textarea-CcRsw08B.js.map +0 -1
- package/dist/textarea-Cntd9tfV.cjs.map +0 -1
- package/dist/theme.service-5RjyR7Sy.js.map +0 -1
- package/dist/theme.service-DA6KY52G.cjs.map +0 -1
- package/dist/typography-DeEYdMhW.js +0 -358
- package/dist/typography-DeEYdMhW.js.map +0 -1
- package/dist/typography-Tm7wSaB2.cjs +0 -282
- package/dist/typography-Tm7wSaB2.cjs.map +0 -1
- package/dist/utils-DTa3QHxk.cjs.map +0 -1
- package/dist/utils-H8wNknWC.js.map +0 -1
- package/dist/window-Db5ZYY6t.js.map +0 -1
- package/dist/window-oQqx5xqQ.cjs +0 -59
- package/dist/window-oQqx5xqQ.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
|
@@ -14,33 +14,42 @@ import { ButtonVariant } from './button'
|
|
|
14
14
|
*/
|
|
15
15
|
@customElement('schmancy-icon-button')
|
|
16
16
|
export class SchmnacyIconButton extends SchmancyElement {
|
|
17
|
-
static styles = [
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
17
|
+
static styles = [
|
|
18
|
+
css`
|
|
19
|
+
:host {
|
|
20
|
+
display: inline-flex;
|
|
21
|
+
flex-shrink: 0;
|
|
22
|
+
border-radius: 9999px;
|
|
23
|
+
transition:
|
|
24
|
+
box-shadow 300ms cubic-bezier(0.34, 1.56, 0.64, 1),
|
|
25
|
+
transform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
26
|
+
}
|
|
27
|
+
:host([width='full']) {
|
|
28
|
+
display: flex;
|
|
29
|
+
width: 100%;
|
|
30
|
+
}
|
|
31
|
+
:host(:hover:not([disabled])) {
|
|
32
|
+
box-shadow: 0 2px 12px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 18%, transparent);
|
|
33
|
+
}
|
|
34
|
+
:host(:active:not([disabled])) {
|
|
35
|
+
transform: scale(0.92);
|
|
36
|
+
box-shadow: none;
|
|
37
|
+
transition-duration: 100ms;
|
|
38
|
+
}
|
|
39
|
+
@media (prefers-reduced-motion: reduce) {
|
|
40
|
+
:host {
|
|
41
|
+
transition: none;
|
|
42
|
+
}
|
|
43
|
+
:host(:hover:not([disabled])) {
|
|
44
|
+
box-shadow: none;
|
|
45
|
+
}
|
|
46
|
+
:host(:active:not([disabled])) {
|
|
47
|
+
transform: none;
|
|
48
|
+
box-shadow: none;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
`,
|
|
52
|
+
]
|
|
44
53
|
|
|
45
54
|
protected static shadowRootOptions = {
|
|
46
55
|
...LitElement.shadowRootOptions,
|
|
@@ -187,12 +196,11 @@ export class SchmnacyIconButton extends SchmancyElement {
|
|
|
187
196
|
|
|
188
197
|
render() {
|
|
189
198
|
// Map 'tonal' variant to 'filled tonal' for backwards compatibility
|
|
190
|
-
const effectiveVariant = this.variant === 'tonal' ? 'filled tonal' : this.variant
|
|
199
|
+
const effectiveVariant = this.variant === 'tonal' ? 'filled tonal' : this.variant
|
|
191
200
|
|
|
192
201
|
// Compute classes for the interactive element.
|
|
193
202
|
const classes = {
|
|
194
|
-
'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':
|
|
195
|
-
true,
|
|
203
|
+
'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,
|
|
196
204
|
'opacity-[0.38]': this.disabled,
|
|
197
205
|
'cursor-pointer': !this.disabled,
|
|
198
206
|
'hover:shadow-xs':
|
|
@@ -209,22 +217,34 @@ export class SchmnacyIconButton extends SchmancyElement {
|
|
|
209
217
|
'bg-secondary-container text-secondary-onContainer': effectiveVariant === 'filled tonal',
|
|
210
218
|
'text-primary-default': effectiveVariant === 'text',
|
|
211
219
|
// M3 spec: 24dp (xxs) → 32dp (dense) → 40dp (default) → 48dp (standard) → 56dp (large)
|
|
212
|
-
'p-1.5': this.size === 'xxs',
|
|
213
|
-
'p-2': this.size === 'xs',
|
|
214
|
-
'p-2.5': this.size === 'sm',
|
|
215
|
-
'p-3': this.size === 'md',
|
|
216
|
-
'p-4': this.size === 'lg',
|
|
217
|
-
'p-5': this.size === 'xl',
|
|
220
|
+
'p-1.5': this.size === 'xxs', // 6px padding = 24px total (12px icon) - Ultra-compact
|
|
221
|
+
'p-2': this.size === 'xs', // 8px padding = 32px total (16px icon) - M3 dense
|
|
222
|
+
'p-2.5': this.size === 'sm', // 10px padding = 40px total (20px icon) - M3 default
|
|
223
|
+
'p-3': this.size === 'md', // 12px padding = 48px total (24px icon) - M3 standard
|
|
224
|
+
'p-4': this.size === 'lg', // 16px padding = 56px total (24px icon) - M3 large
|
|
225
|
+
'p-5': this.size === 'xl', // 20px padding = 80px total (40px icon) - custom XL
|
|
218
226
|
}
|
|
219
227
|
|
|
220
228
|
const stateLayerClasses = {
|
|
221
229
|
'hover:opacity-[0.08] rounded-full z-0': true,
|
|
222
230
|
'hover:bg-primary-on': effectiveVariant === 'filled',
|
|
223
|
-
'hover:bg-primary-default':
|
|
231
|
+
'hover:bg-primary-default':
|
|
232
|
+
effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text',
|
|
224
233
|
'hover:bg-secondary-container': effectiveVariant === 'filled tonal',
|
|
225
234
|
}
|
|
226
235
|
|
|
227
|
-
const iconSizeClass =
|
|
236
|
+
const iconSizeClass =
|
|
237
|
+
this.size === 'xxs'
|
|
238
|
+
? 'text-xs'
|
|
239
|
+
: this.size === 'xs'
|
|
240
|
+
? 'text-base'
|
|
241
|
+
: this.size === 'sm'
|
|
242
|
+
? 'text-xl'
|
|
243
|
+
: this.size === 'md'
|
|
244
|
+
? 'text-2xl'
|
|
245
|
+
: this.size === 'lg'
|
|
246
|
+
? 'text-2xl'
|
|
247
|
+
: 'text-4xl'
|
|
228
248
|
|
|
229
249
|
// If href is provided, render an anchor element.
|
|
230
250
|
if (this.href) {
|
|
@@ -243,10 +263,9 @@ export class SchmnacyIconButton extends SchmancyElement {
|
|
|
243
263
|
${this.text
|
|
244
264
|
? html`<slot></slot>`
|
|
245
265
|
: html`
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
}
|
|
266
|
+
<slot style="display:none"></slot>
|
|
267
|
+
<schmancy-icon class=${iconSizeClass}>${this.icon || this.capturedIcon}</schmancy-icon>
|
|
268
|
+
`}
|
|
250
269
|
</a>
|
|
251
270
|
`
|
|
252
271
|
}
|
|
@@ -266,10 +285,9 @@ export class SchmnacyIconButton extends SchmancyElement {
|
|
|
266
285
|
${this.text
|
|
267
286
|
? html`<slot></slot>`
|
|
268
287
|
: html`
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
}
|
|
288
|
+
<slot style="display:none"></slot>
|
|
289
|
+
<schmancy-icon class=${iconSizeClass}>${this.icon || this.capturedIcon}</schmancy-icon>
|
|
290
|
+
`}
|
|
273
291
|
</button>
|
|
274
292
|
`
|
|
275
293
|
}
|
package/src/button/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './button'
|
|
2
|
-
export * from './icon-button'
|
|
1
|
+
export * from './button'
|
|
2
|
+
export * from './icon-button'
|
|
@@ -0,0 +1,504 @@
|
|
|
1
|
+
import { afterEach, describe, expect, it } from 'vitest'
|
|
2
|
+
import { expectNoA11yViolations } from '../test-utils/a11y'
|
|
3
|
+
import type { SchmancyCalendar } from './calendar'
|
|
4
|
+
import './calendar'
|
|
5
|
+
|
|
6
|
+
const nextUpdate = () => new Promise(r => requestAnimationFrame(() => r(null)))
|
|
7
|
+
|
|
8
|
+
const mount = async (attrs = ''): Promise<SchmancyCalendar> => {
|
|
9
|
+
const host = document.createElement('div')
|
|
10
|
+
host.innerHTML = `<schmancy-calendar ${attrs}></schmancy-calendar>`
|
|
11
|
+
document.body.appendChild(host)
|
|
12
|
+
const el = host.querySelector('schmancy-calendar') as SchmancyCalendar
|
|
13
|
+
await nextUpdate()
|
|
14
|
+
await nextUpdate()
|
|
15
|
+
return el
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const cleanup = () => {
|
|
19
|
+
document.querySelectorAll('div[data-calendar-test]').forEach(el => el.remove())
|
|
20
|
+
// Remove all test hosts appended to body
|
|
21
|
+
document.body.querySelectorAll(':scope > div:not([id])').forEach(el => el.remove())
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Helper: click a specific day cell by ISO date string
|
|
25
|
+
async function clickDay(el: SchmancyCalendar, iso: string) {
|
|
26
|
+
const cell = el.shadowRoot!.querySelector<HTMLElement>(`[aria-label="${iso}"]`)
|
|
27
|
+
expect(cell, `day cell for ${iso} not found`).toBeTruthy()
|
|
28
|
+
cell!.click()
|
|
29
|
+
await nextUpdate()
|
|
30
|
+
await nextUpdate()
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Helper: hover a specific day cell
|
|
34
|
+
async function hoverDay(el: SchmancyCalendar, iso: string) {
|
|
35
|
+
const cell = el.shadowRoot!.querySelector<HTMLElement>(`[aria-label="${iso}"]`)
|
|
36
|
+
expect(cell, `day cell for ${iso} not found`).toBeTruthy()
|
|
37
|
+
cell!.dispatchEvent(new MouseEvent('mouseenter', { bubbles: true, composed: true }))
|
|
38
|
+
await nextUpdate()
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
// Collect events off the element
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
|
|
45
|
+
function captureEvent<T = unknown>(el: EventTarget, eventName: string): { events: CustomEvent<T>[]; stop: () => void } {
|
|
46
|
+
const events: CustomEvent<T>[] = []
|
|
47
|
+
const handler = (e: Event) => events.push(e as CustomEvent<T>)
|
|
48
|
+
el.addEventListener(eventName, handler)
|
|
49
|
+
return {
|
|
50
|
+
events,
|
|
51
|
+
stop: () => el.removeEventListener(eventName, handler),
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
// Tests
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
|
|
59
|
+
describe('schmancy-calendar', () => {
|
|
60
|
+
afterEach(() => cleanup())
|
|
61
|
+
|
|
62
|
+
// -----------------------------------------------------------------------
|
|
63
|
+
// Phase rendering (props-in)
|
|
64
|
+
// -----------------------------------------------------------------------
|
|
65
|
+
describe('phase rendering', () => {
|
|
66
|
+
it('renders the current month by default', async () => {
|
|
67
|
+
const el = await mount()
|
|
68
|
+
const shadow = el.shadowRoot!
|
|
69
|
+
const monthLabel = shadow.querySelector('[part="month-label"]')
|
|
70
|
+
expect(monthLabel).toBeTruthy()
|
|
71
|
+
// Should show at least one month label
|
|
72
|
+
expect(shadow.querySelectorAll('[data-month]').length).toBeGreaterThan(0)
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
it('renders multiple months in the scroll window', async () => {
|
|
76
|
+
const el = await mount()
|
|
77
|
+
const months = el.shadowRoot!.querySelectorAll('[data-month]')
|
|
78
|
+
// Default window is 3 months before + anchor + 9 months after = 13+
|
|
79
|
+
expect(months.length).toBeGreaterThanOrEqual(10)
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
it('renders weekday headers', async () => {
|
|
83
|
+
const el = await mount()
|
|
84
|
+
const weekdays = el.shadowRoot!.querySelectorAll('[part="weekday"]')
|
|
85
|
+
expect(weekdays.length).toBeGreaterThan(0)
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
it('marks today with day-today part', async () => {
|
|
89
|
+
const el = await mount()
|
|
90
|
+
await nextUpdate()
|
|
91
|
+
const today = el.shadowRoot!.querySelector('[part~="day-today"]')
|
|
92
|
+
expect(today).toBeTruthy()
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
it('single mode: marks the value date as selected', async () => {
|
|
96
|
+
const el = await mount()
|
|
97
|
+
el.mode = 'single'
|
|
98
|
+
el.value = '2026-05-15'
|
|
99
|
+
await nextUpdate()
|
|
100
|
+
await nextUpdate()
|
|
101
|
+
const selected = el.shadowRoot!.querySelector('[part~="day-selected"]')
|
|
102
|
+
expect(selected).toBeTruthy()
|
|
103
|
+
expect(selected!.getAttribute('aria-label')).toBe('2026-05-15')
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
it('range mode: marks start/end dates and in-range days', async () => {
|
|
107
|
+
const el = await mount()
|
|
108
|
+
el.mode = 'range'
|
|
109
|
+
el.start = '2026-05-10'
|
|
110
|
+
el.end = '2026-05-15'
|
|
111
|
+
await nextUpdate()
|
|
112
|
+
await nextUpdate()
|
|
113
|
+
const rangeStart = el.shadowRoot!.querySelector('[part~="day-range-start"]')
|
|
114
|
+
const rangeEnd = el.shadowRoot!.querySelector('[part~="day-range-end"]')
|
|
115
|
+
const inRange = el.shadowRoot!.querySelectorAll('[part~="day-in-range"]')
|
|
116
|
+
expect(rangeStart).toBeTruthy()
|
|
117
|
+
expect(rangeEnd).toBeTruthy()
|
|
118
|
+
// 2026-05-11 through 2026-05-14 = 4 days in-range
|
|
119
|
+
expect(inRange.length).toBe(4)
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
it('marks disabled days when min/max are set', async () => {
|
|
123
|
+
const el = await mount()
|
|
124
|
+
el.min = '2026-05-10'
|
|
125
|
+
el.max = '2026-05-20'
|
|
126
|
+
await nextUpdate()
|
|
127
|
+
await nextUpdate()
|
|
128
|
+
const disabled = el.shadowRoot!.querySelectorAll('[part~="day-disabled"]')
|
|
129
|
+
expect(disabled.length).toBeGreaterThan(0)
|
|
130
|
+
})
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
// -----------------------------------------------------------------------
|
|
134
|
+
// CTA wiring (event system works)
|
|
135
|
+
// -----------------------------------------------------------------------
|
|
136
|
+
describe('CTA wiring', () => {
|
|
137
|
+
it('a day cell is focusable and has a gridcell role', async () => {
|
|
138
|
+
const el = await mount()
|
|
139
|
+
const cell = el.shadowRoot!.querySelector('[role="gridcell"]')
|
|
140
|
+
expect(cell).toBeTruthy()
|
|
141
|
+
expect(cell!.getAttribute('tabindex')).toBe('0')
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
it('clicking an enabled day dispatches events', async () => {
|
|
145
|
+
const el = await mount()
|
|
146
|
+
el.mode = 'single'
|
|
147
|
+
await nextUpdate()
|
|
148
|
+
const { events, stop } = captureEvent<{ value: string | null; start: string | null; end: string | null }>(
|
|
149
|
+
el,
|
|
150
|
+
'change',
|
|
151
|
+
)
|
|
152
|
+
// Click any non-disabled day
|
|
153
|
+
const cell = el.shadowRoot!.querySelector<HTMLElement>('[role="gridcell"]:not([aria-disabled="true"])')
|
|
154
|
+
expect(cell).toBeTruthy()
|
|
155
|
+
cell!.click()
|
|
156
|
+
await nextUpdate()
|
|
157
|
+
expect(events.length).toBe(1)
|
|
158
|
+
stop()
|
|
159
|
+
})
|
|
160
|
+
|
|
161
|
+
it('disabled days do not dispatch events', async () => {
|
|
162
|
+
const el = await mount()
|
|
163
|
+
el.disabled = true
|
|
164
|
+
await nextUpdate()
|
|
165
|
+
const { events, stop } = captureEvent(el, 'change')
|
|
166
|
+
const cell = el.shadowRoot!.querySelector<HTMLElement>('[role="gridcell"]')
|
|
167
|
+
if (cell) cell.click()
|
|
168
|
+
await nextUpdate()
|
|
169
|
+
expect(events.length).toBe(0)
|
|
170
|
+
stop()
|
|
171
|
+
})
|
|
172
|
+
})
|
|
173
|
+
|
|
174
|
+
// -----------------------------------------------------------------------
|
|
175
|
+
// Single mode: input → change state machine
|
|
176
|
+
// -----------------------------------------------------------------------
|
|
177
|
+
describe('emits change (single mode)', () => {
|
|
178
|
+
it('click commits the date via change event', async () => {
|
|
179
|
+
const el = await mount()
|
|
180
|
+
el.mode = 'single'
|
|
181
|
+
await nextUpdate()
|
|
182
|
+
await nextUpdate()
|
|
183
|
+
|
|
184
|
+
const { events: changeEvents, stop: stopChange } = captureEvent<{
|
|
185
|
+
value: string | null
|
|
186
|
+
start: string | null
|
|
187
|
+
end: string | null
|
|
188
|
+
}>(el, 'change')
|
|
189
|
+
|
|
190
|
+
await clickDay(el, '2026-05-19')
|
|
191
|
+
expect(changeEvents.length).toBe(1)
|
|
192
|
+
expect(changeEvents[0].detail.value).toBe('2026-05-19')
|
|
193
|
+
expect(changeEvents[0].detail.start).toBeNull()
|
|
194
|
+
expect(changeEvents[0].detail.end).toBeNull()
|
|
195
|
+
stopChange()
|
|
196
|
+
})
|
|
197
|
+
|
|
198
|
+
it('change event bubbles and is composed', async () => {
|
|
199
|
+
const el = await mount()
|
|
200
|
+
el.mode = 'single'
|
|
201
|
+
await nextUpdate()
|
|
202
|
+
await nextUpdate()
|
|
203
|
+
|
|
204
|
+
let bubbled = false
|
|
205
|
+
document.body.addEventListener(
|
|
206
|
+
'change',
|
|
207
|
+
() => {
|
|
208
|
+
bubbled = true
|
|
209
|
+
},
|
|
210
|
+
{ once: true },
|
|
211
|
+
)
|
|
212
|
+
await clickDay(el, '2026-05-19')
|
|
213
|
+
expect(bubbled).toBe(true)
|
|
214
|
+
})
|
|
215
|
+
})
|
|
216
|
+
|
|
217
|
+
// -----------------------------------------------------------------------
|
|
218
|
+
// Range mode: input → change state machine
|
|
219
|
+
// -----------------------------------------------------------------------
|
|
220
|
+
describe('range state machine (input → change)', () => {
|
|
221
|
+
it('first click emits input with start set and end null', async () => {
|
|
222
|
+
const el = await mount()
|
|
223
|
+
el.mode = 'range'
|
|
224
|
+
await nextUpdate()
|
|
225
|
+
await nextUpdate()
|
|
226
|
+
|
|
227
|
+
const { events: inputEvents, stop } = captureEvent<{
|
|
228
|
+
value: string | null
|
|
229
|
+
start: string | null
|
|
230
|
+
end: string | null
|
|
231
|
+
}>(el, 'input')
|
|
232
|
+
|
|
233
|
+
await clickDay(el, '2026-05-10')
|
|
234
|
+
expect(inputEvents.length).toBeGreaterThanOrEqual(1)
|
|
235
|
+
const first = inputEvents[0]
|
|
236
|
+
expect(first.detail.start).toBe('2026-05-10')
|
|
237
|
+
expect(first.detail.end).toBeNull()
|
|
238
|
+
stop()
|
|
239
|
+
})
|
|
240
|
+
|
|
241
|
+
it('second click emits change with both start and end', async () => {
|
|
242
|
+
const el = await mount()
|
|
243
|
+
el.mode = 'range'
|
|
244
|
+
await nextUpdate()
|
|
245
|
+
await nextUpdate()
|
|
246
|
+
|
|
247
|
+
const { events: changeEvents, stop } = captureEvent<{
|
|
248
|
+
value: string | null
|
|
249
|
+
start: string | null
|
|
250
|
+
end: string | null
|
|
251
|
+
}>(el, 'change')
|
|
252
|
+
|
|
253
|
+
await clickDay(el, '2026-05-10')
|
|
254
|
+
await clickDay(el, '2026-05-15')
|
|
255
|
+
|
|
256
|
+
expect(changeEvents.length).toBe(1)
|
|
257
|
+
expect(changeEvents[0].detail.start).toBe('2026-05-10')
|
|
258
|
+
expect(changeEvents[0].detail.end).toBe('2026-05-15')
|
|
259
|
+
stop()
|
|
260
|
+
})
|
|
261
|
+
|
|
262
|
+
it('second click before first emits correctly ordered range', async () => {
|
|
263
|
+
const el = await mount()
|
|
264
|
+
el.mode = 'range'
|
|
265
|
+
await nextUpdate()
|
|
266
|
+
await nextUpdate()
|
|
267
|
+
|
|
268
|
+
const { events: changeEvents, stop } = captureEvent<{
|
|
269
|
+
value: string | null
|
|
270
|
+
start: string | null
|
|
271
|
+
end: string | null
|
|
272
|
+
}>(el, 'change')
|
|
273
|
+
|
|
274
|
+
// Click end before start — should swap
|
|
275
|
+
await clickDay(el, '2026-05-20')
|
|
276
|
+
await clickDay(el, '2026-05-10')
|
|
277
|
+
|
|
278
|
+
expect(changeEvents.length).toBe(1)
|
|
279
|
+
// Regardless of click order, start < end
|
|
280
|
+
expect(changeEvents[0].detail.start).toBe('2026-05-10')
|
|
281
|
+
expect(changeEvents[0].detail.end).toBe('2026-05-20')
|
|
282
|
+
stop()
|
|
283
|
+
})
|
|
284
|
+
|
|
285
|
+
it('hover between first click and second click emits input for preview', async () => {
|
|
286
|
+
const el = await mount()
|
|
287
|
+
el.mode = 'range'
|
|
288
|
+
await nextUpdate()
|
|
289
|
+
await nextUpdate()
|
|
290
|
+
|
|
291
|
+
await clickDay(el, '2026-05-10')
|
|
292
|
+
|
|
293
|
+
const { events: inputEvents, stop } = captureEvent<{
|
|
294
|
+
value: string | null
|
|
295
|
+
start: string | null
|
|
296
|
+
end: string | null
|
|
297
|
+
}>(el, 'input')
|
|
298
|
+
|
|
299
|
+
await hoverDay(el, '2026-05-15')
|
|
300
|
+
expect(inputEvents.length).toBeGreaterThanOrEqual(1)
|
|
301
|
+
// The latest input event should cover the preview span
|
|
302
|
+
const last = inputEvents[inputEvents.length - 1]
|
|
303
|
+
expect(last.detail.start).toBe('2026-05-10')
|
|
304
|
+
expect(last.detail.end).toBe('2026-05-15')
|
|
305
|
+
stop()
|
|
306
|
+
})
|
|
307
|
+
})
|
|
308
|
+
|
|
309
|
+
// -----------------------------------------------------------------------
|
|
310
|
+
// Range across a month boundary (the continuous-scroll case)
|
|
311
|
+
// -----------------------------------------------------------------------
|
|
312
|
+
describe('range across a month boundary', () => {
|
|
313
|
+
it('emits a correctly ordered change spanning two months', async () => {
|
|
314
|
+
const el = await mount()
|
|
315
|
+
el.mode = 'range'
|
|
316
|
+
await nextUpdate()
|
|
317
|
+
await nextUpdate()
|
|
318
|
+
|
|
319
|
+
const { events: changeEvents, stop } = captureEvent<{
|
|
320
|
+
value: string | null
|
|
321
|
+
start: string | null
|
|
322
|
+
end: string | null
|
|
323
|
+
}>(el, 'change')
|
|
324
|
+
|
|
325
|
+
// Click on the last day of April then the first day of June
|
|
326
|
+
await clickDay(el, '2026-04-30')
|
|
327
|
+
await clickDay(el, '2026-06-01')
|
|
328
|
+
|
|
329
|
+
expect(changeEvents.length).toBe(1)
|
|
330
|
+
expect(changeEvents[0].detail.start).toBe('2026-04-30')
|
|
331
|
+
expect(changeEvents[0].detail.end).toBe('2026-06-01')
|
|
332
|
+
stop()
|
|
333
|
+
})
|
|
334
|
+
|
|
335
|
+
it('in-range part spans across month boundaries after props are set', async () => {
|
|
336
|
+
const el = await mount()
|
|
337
|
+
el.mode = 'range'
|
|
338
|
+
el.start = '2026-04-28'
|
|
339
|
+
el.end = '2026-05-03'
|
|
340
|
+
await nextUpdate()
|
|
341
|
+
await nextUpdate()
|
|
342
|
+
|
|
343
|
+
const inRangeDays = el.shadowRoot!.querySelectorAll('[part~="day-in-range"]')
|
|
344
|
+
// 2026-04-29, 2026-04-30, 2026-05-01, 2026-05-02 = 4 days
|
|
345
|
+
expect(inRangeDays.length).toBe(4)
|
|
346
|
+
})
|
|
347
|
+
})
|
|
348
|
+
|
|
349
|
+
// -----------------------------------------------------------------------
|
|
350
|
+
// Scroll-driven `navigate` event
|
|
351
|
+
// -----------------------------------------------------------------------
|
|
352
|
+
describe('scroll-driven navigate', () => {
|
|
353
|
+
it('exposes a scroll container with part="scroll"', async () => {
|
|
354
|
+
const el = await mount()
|
|
355
|
+
const scroller = el.shadowRoot!.querySelector('[part="scroll"]')
|
|
356
|
+
expect(scroller).toBeTruthy()
|
|
357
|
+
})
|
|
358
|
+
|
|
359
|
+
it('navigate event fires when the scroller dispatches a scroll event', async () => {
|
|
360
|
+
const el = await mount()
|
|
361
|
+
await nextUpdate()
|
|
362
|
+
await nextUpdate()
|
|
363
|
+
|
|
364
|
+
const navigateEvents: Array<CustomEvent<{ month: string }>> = []
|
|
365
|
+
el.addEventListener('navigate', e => navigateEvents.push(e as CustomEvent<{ month: string }>))
|
|
366
|
+
|
|
367
|
+
// Dispatch a real scroll event on the public scroller element.
|
|
368
|
+
// This exercises the fromEvent(scroller, 'scroll') → dominantMonth → navigate path.
|
|
369
|
+
const scroller = el.shadowRoot!.querySelector<HTMLElement>('[part="scroll"]')
|
|
370
|
+
expect(scroller, 'scroller element must be present').toBeTruthy()
|
|
371
|
+
|
|
372
|
+
scroller!.dispatchEvent(new Event('scroll', { bubbles: false }))
|
|
373
|
+
|
|
374
|
+
// Wait for the debounce (50 ms) + animation frame + microtask
|
|
375
|
+
await new Promise<void>(r => setTimeout(r, 100))
|
|
376
|
+
|
|
377
|
+
// The navigate event must have fired with a valid YYYY-MM month string.
|
|
378
|
+
expect(navigateEvents.length).toBeGreaterThanOrEqual(1)
|
|
379
|
+
expect(navigateEvents[0].detail.month).toMatch(/^\d{4}-\d{2}$/)
|
|
380
|
+
})
|
|
381
|
+
})
|
|
382
|
+
|
|
383
|
+
// -----------------------------------------------------------------------
|
|
384
|
+
// Keyboard month traversal
|
|
385
|
+
// -----------------------------------------------------------------------
|
|
386
|
+
describe('keyboard month traversal', () => {
|
|
387
|
+
it('Enter on a day cell triggers the same action as a click (single mode)', async () => {
|
|
388
|
+
const el = await mount()
|
|
389
|
+
el.mode = 'single'
|
|
390
|
+
await nextUpdate()
|
|
391
|
+
await nextUpdate()
|
|
392
|
+
|
|
393
|
+
const { events: changeEvents, stop } = captureEvent<{
|
|
394
|
+
value: string | null
|
|
395
|
+
start: string | null
|
|
396
|
+
end: string | null
|
|
397
|
+
}>(el, 'change')
|
|
398
|
+
|
|
399
|
+
const cell = el.shadowRoot!.querySelector<HTMLElement>(`[aria-label="2026-05-19"]:not([aria-disabled="true"])`)
|
|
400
|
+
if (cell) {
|
|
401
|
+
cell.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', bubbles: true, composed: true }))
|
|
402
|
+
await nextUpdate()
|
|
403
|
+
await nextUpdate()
|
|
404
|
+
expect(changeEvents.length).toBe(1)
|
|
405
|
+
expect(changeEvents[0].detail.value).toBe('2026-05-19')
|
|
406
|
+
}
|
|
407
|
+
stop()
|
|
408
|
+
})
|
|
409
|
+
|
|
410
|
+
it('Space on a day cell triggers click (single mode)', async () => {
|
|
411
|
+
const el = await mount()
|
|
412
|
+
el.mode = 'single'
|
|
413
|
+
await nextUpdate()
|
|
414
|
+
await nextUpdate()
|
|
415
|
+
|
|
416
|
+
const { events: changeEvents, stop } = captureEvent<{
|
|
417
|
+
value: string | null
|
|
418
|
+
start: string | null
|
|
419
|
+
end: string | null
|
|
420
|
+
}>(el, 'change')
|
|
421
|
+
|
|
422
|
+
const cell = el.shadowRoot!.querySelector<HTMLElement>(`[aria-label="2026-05-19"]:not([aria-disabled="true"])`)
|
|
423
|
+
if (cell) {
|
|
424
|
+
cell.dispatchEvent(new KeyboardEvent('keydown', { key: ' ', bubbles: true, composed: true }))
|
|
425
|
+
await nextUpdate()
|
|
426
|
+
await nextUpdate()
|
|
427
|
+
expect(changeEvents.length).toBe(1)
|
|
428
|
+
}
|
|
429
|
+
stop()
|
|
430
|
+
})
|
|
431
|
+
})
|
|
432
|
+
|
|
433
|
+
// -----------------------------------------------------------------------
|
|
434
|
+
// Teardown
|
|
435
|
+
// -----------------------------------------------------------------------
|
|
436
|
+
describe('teardown', () => {
|
|
437
|
+
it('disconnecting completes the pipeline (no errors thrown on remove)', async () => {
|
|
438
|
+
const el = await mount()
|
|
439
|
+
await nextUpdate()
|
|
440
|
+
expect(() => el.parentElement?.removeChild(el)).not.toThrow()
|
|
441
|
+
})
|
|
442
|
+
})
|
|
443
|
+
|
|
444
|
+
// -----------------------------------------------------------------------
|
|
445
|
+
// Failure / edge cases
|
|
446
|
+
// -----------------------------------------------------------------------
|
|
447
|
+
describe('failure and edge cases', () => {
|
|
448
|
+
it('disabled=true disables all day cells', async () => {
|
|
449
|
+
const el = await mount()
|
|
450
|
+
el.disabled = true
|
|
451
|
+
await nextUpdate()
|
|
452
|
+
await nextUpdate()
|
|
453
|
+
const enabled = el.shadowRoot!.querySelectorAll('[role="gridcell"][tabindex="0"]')
|
|
454
|
+
expect(enabled.length).toBe(0)
|
|
455
|
+
})
|
|
456
|
+
|
|
457
|
+
it('readonly=true prevents click events from firing change', async () => {
|
|
458
|
+
const el = await mount()
|
|
459
|
+
el.mode = 'single'
|
|
460
|
+
el.readonly = true
|
|
461
|
+
await nextUpdate()
|
|
462
|
+
await nextUpdate()
|
|
463
|
+
const { events, stop } = captureEvent(el, 'change')
|
|
464
|
+
const cell = el.shadowRoot!.querySelector<HTMLElement>('[role="gridcell"]')
|
|
465
|
+
if (cell) cell.click()
|
|
466
|
+
await nextUpdate()
|
|
467
|
+
expect(events.length).toBe(0)
|
|
468
|
+
stop()
|
|
469
|
+
})
|
|
470
|
+
|
|
471
|
+
it('scroll container renders when min and max bound the window', async () => {
|
|
472
|
+
const el = await mount()
|
|
473
|
+
el.min = '2026-05-01'
|
|
474
|
+
el.max = '2026-05-31'
|
|
475
|
+
await nextUpdate()
|
|
476
|
+
await nextUpdate()
|
|
477
|
+
const months = el.shadowRoot!.querySelectorAll('[data-month]')
|
|
478
|
+
// Only one month in window
|
|
479
|
+
expect(months.length).toBe(1)
|
|
480
|
+
})
|
|
481
|
+
})
|
|
482
|
+
|
|
483
|
+
// -----------------------------------------------------------------------
|
|
484
|
+
// Accessibility
|
|
485
|
+
// -----------------------------------------------------------------------
|
|
486
|
+
describe('accessibility', () => {
|
|
487
|
+
it('has no axe-core violations in single mode (idle)', async () => {
|
|
488
|
+
const el = await mount()
|
|
489
|
+
await nextUpdate()
|
|
490
|
+
await nextUpdate()
|
|
491
|
+
await expectNoA11yViolations(el.parentElement!)
|
|
492
|
+
})
|
|
493
|
+
|
|
494
|
+
it('has no axe-core violations in range mode with a selection', async () => {
|
|
495
|
+
const el = await mount()
|
|
496
|
+
el.mode = 'range'
|
|
497
|
+
el.start = '2026-05-10'
|
|
498
|
+
el.end = '2026-05-15'
|
|
499
|
+
await nextUpdate()
|
|
500
|
+
await nextUpdate()
|
|
501
|
+
await expectNoA11yViolations(el.parentElement!)
|
|
502
|
+
})
|
|
503
|
+
})
|
|
504
|
+
})
|