@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
package/dist/dropdown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown.js","names":[],"sources":["../src/dropdown/dropdown-component.ts","../src/dropdown/dropdown-content.ts"],"sourcesContent":["import { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom'\nimport { SchmancyElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { filter, fromEvent, takeUntil, Subscription } from 'rxjs'\n\n/**\n * A dropdown component that displays content when triggered.\n *\n * @element schmancy-dropdown\n * @slot trigger - The element that triggers the dropdown\n * @slot - Default slot for the dropdown content\n */\n@customElement('schmancy-dropdown')\nexport class SchmancyDropdown extends SchmancyElement {\n\t/**\n\t * Whether the dropdown is currently open\n\t */\n\t@property({ type: Boolean, reflect: true })\n\topen = false\n\n\t/**\n\t * Placement of the dropdown relative to the trigger\n\t */\n\t@property({ type: String })\n\tplacement:\n\t\t| 'top'\n\t\t| 'top-start'\n\t\t| 'top-end'\n\t\t| 'right'\n\t\t| 'right-start'\n\t\t| 'right-end'\n\t\t| 'bottom'\n\t\t| 'bottom-start'\n\t\t| 'bottom-end'\n\t\t| 'left'\n\t\t| 'left-start'\n\t\t| 'left-end' = 'bottom-start'\n\n\t/**\n\t * Offset distance in pixels\n\t */\n\t@property({ type: Number })\n\tdistance = 8\n\n\t@query('.trigger-container') triggerContainer!: HTMLElement\n\t@query('.dropdown-content-container') contentContainer!: HTMLElement\n\t@queryAssignedElements({ flatten: true }) contentElements!: HTMLElement[]\n\t@state() private portal: HTMLElement | null = null\n\n\t@queryAssignedElements({ slot: 'trigger', flatten: true })\n\ttriggerElements!: Array<HTMLElement>\n\n\tprivate cleanupPositioner?: () => void\n\tprivate portalSubscriptions: Subscription[] = []\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Create portal container for teleporting content to document body\n\t\tthis.setupPortal()\n\n\t\t// Listen for document clicks to close dropdown when clicking outside\n\t\tfromEvent<MouseEvent>(document, 'click')\n\t\t\t.pipe(\n\t\t\t\tfilter(event => this.open && !this.isEventFromSelf(event)),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.open = false\n\t\t\t})\n\n\t\t// Listen for escape key to close dropdown\n\t\tfromEvent<KeyboardEvent>(document, 'keydown')\n\t\t\t.pipe(\n\t\t\t\tfilter(event => this.open && event.key === 'Escape'),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.open = false\n\t\t\t})\n\t}\n\n\t/**\n\t * Set up the portal element for teleporting content\n\t */\n\tprivate setupPortal() {\n\t\t// Check if portal container exists\n\t\tlet portalContainer = document.getElementById('schmancy-portal-container')\n\n\t\t// Create portal container if it doesn't exist\n\t\tif (!portalContainer) {\n\t\t\tportalContainer = document.createElement('div')\n\t\t\tportalContainer.id = 'schmancy-portal-container'\n\t\t\tportalContainer.style.position = 'fixed'\n\t\t\tportalContainer.style.zIndex = '10000'\n\t\t\tportalContainer.style.top = '0'\n\t\t\tportalContainer.style.left = '0'\n\t\t\tportalContainer.style.pointerEvents = 'none'\n\t\t\tdocument.body.appendChild(portalContainer)\n\t\t}\n\n\t\t// Create portal for this specific dropdown\n\t\tconst portal = document.createElement('div')\n\t\tportal.className = 'schmancy-dropdown-portal'\n\t\tportal.style.position = 'absolute'\n\t\tportal.style.pointerEvents = 'auto'\n\t\tportal.style.display = 'none'\n\t\tportalContainer.appendChild(portal)\n\n\t\tthis.portal = portal\n\t}\n\n\t/**\n\t * Check if an event originated from within this component\n\t */\n\tprivate isEventFromSelf(event: Event): boolean {\n\t\treturn event.composedPath().some(el => el === this)\n\t}\n\n\tdisconnectedCallback() {\n\t\tthis.cleanupPositioner?.()\n\n\t\t// Clean up portal subscriptions\n\t\tthis.portalSubscriptions.forEach(subscription => subscription.unsubscribe())\n\t\tthis.portalSubscriptions = []\n\n\t\t// Remove portal when component is disconnected\n\t\tif (this.portal) {\n\t\t\tthis.portal.remove()\n\t\t\tthis.portal = null\n\t\t}\n\n\t\tsuper.disconnectedCallback()\n\t}\n\n\t/**\n\t * Toggle the dropdown open state\n\t */\n\ttoggle() {\n\t\tthis.open = !this.open\n\t}\n\n\tupdated(changedProps: Map<string, unknown>) {\n\t\tsuper.updated(changedProps)\n\n\t\tif (changedProps.has('open')) {\n\t\t\tif (this.open) {\n\t\t\t\tthis.setupPositioner()\n\t\t\t} else {\n\t\t\t\tthis.cleanupPositioner?.()\n\n\t\t\t\t// Hide portal when dropdown is closed\n\t\t\t\tif (this.portal) {\n\t\t\t\t\tthis.portal.style.display = 'none'\n\t\t\t\t\tthis.portal.innerHTML = ''\n\t\t\t\t\t// Clean up subscriptions when content is cleared\n\t\t\t\t\tthis.portalSubscriptions.forEach(subscription => subscription.unsubscribe())\n\t\t\t\t\tthis.portalSubscriptions = []\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Setup floating UI positioning with teleportation\n\t */\n\tprivate setupPositioner() {\n\t\tif (!this.triggerContainer || !this.portal) return\n\n\t\t// Show the portal\n\t\tthis.portal.style.display = 'block'\n\n\t\t// Move content to portal\n\t\tthis.teleportContentToPortal()\n\n\t\t// Setup positioning\n\t\tthis.cleanupPositioner = autoUpdate(this.triggerContainer, this.portal, () => {\n\t\t\tcomputePosition(this.triggerContainer, this.portal, {\n\t\t\t\tplacement: this.placement,\n\t\t\t\tmiddleware: [\n\t\t\t\t\toffset(this.distance),\n\t\t\t\t\tflip({\n\t\t\t\t\t\tfallbackPlacements: ['top-start', 'bottom-start'],\n\t\t\t\t\t}),\n\t\t\t\t\tshift({ padding: 0 }),\n\t\t\t\t],\n\t\t\t}).then(({ x, y }) => {\n\t\t\t\t// Update portal position\n\t\t\t\tObject.assign(this.portal.style, {\n\t\t\t\t\tleft: `${x}px`,\n\t\t\t\t\ttop: `${y - 8}px`,\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t})\n\t\t})\n\t}\n\n\t/**\n\t * Move slotted content to the portal\n\t */\n\tprivate teleportContentToPortal() {\n\t\tif (!this.portal) return\n\n\t\t// Clean up existing subscriptions\n\t\tthis.portalSubscriptions.forEach(subscription => subscription.unsubscribe())\n\t\tthis.portalSubscriptions = []\n\n\t\t// Clear existing content\n\t\tthis.portal.innerHTML = ''\n\n\t\t// Clone and move slotted content to portal\n\t\tthis.contentElements.forEach(element => {\n\t\t\t// Get computed styles to ensure portal content matches original styling\n\t\t\tconst clonedElement = element.cloneNode(true) as HTMLElement\n\n\t\t\t// Ensure dropdown-content elements maintain their styles when teleported\n\t\t\tif (element.tagName.toLowerCase() === 'schmancy-dropdown-content') {\n\t\t\t\tconst subscription = fromEvent(clonedElement, 'slotchange').subscribe(() => {\n\t\t\t\t\t// Propagate any slot changes to class changes on children\n\t\t\t\t\tconst contentDiv = clonedElement.shadowRoot?.querySelector('[part=\"content\"]')\n\t\t\t\t\tif (contentDiv) {\n\t\t\t\t\t\tcontentDiv.classList.add('schmancy-dropdown-content')\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tthis.portalSubscriptions.push(subscription)\n\t\t\t}\n\n\t\t\tthis.portal?.appendChild(clonedElement)\n\t\t})\n\t}\n\n\t/**\n\t * Handle trigger click to toggle dropdown\n\t */\n\tprivate handleTriggerClick(e: Event) {\n\t\te.stopPropagation()\n\t\tthis.toggle()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"trigger-container\" @click=${this.handleTriggerClick}>\n\t\t\t\t<slot name=\"trigger\"></slot>\n\t\t\t</div>\n\n\t\t\t<div class=\"dropdown-content-container\" ?hidden=${!this.open}>\n\t\t\t\t<slot\n\t\t\t\t\t@slotchange=${() => {\n\t\t\t\t\t\tif (this.open) {\n\t\t\t\t\t\t\tthis.teleportContentToPortal()\n\t\t\t\t\t\t\tthis.setupPositioner()\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t></slot>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-dropdown': SchmancyDropdown\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n/**\n * Content container for the schmancy-dropdown component.\n *\n * @element schmancy-dropdown-content\n * @slot - Default slot for dropdown content.\n * @csspart content - The inner wrapper element; style to override panel\n * backgrounds, shadows, padding, or borders without shadow-root piercing.\n */\n@customElement('schmancy-dropdown-content')\nexport class SchmancyDropdownContent extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\tz-index: 1000;\n\t\tmin-width: 10rem;\n\t\tmargin: 0;\n\t\ttext-align: left;\n\t\tlist-style: none;\n\t\tbackground-color: var(--schmancy-sys-color-surface-container);\n\t\tbackground-clip: padding-box;\n\t\tborder-radius: 0.375rem;\n\t\tbox-shadow: var(--schmancy-sys-elevation-3);\n\t\twill-change: transform;\n\t\ttransform-origin: top left;\n\t\tanimation: dropdownAnimation 0.1s ease-out forwards;\n\t}\n\n\t:host([hidden]) {\n\t\tdisplay: none;\n\t}\n\n\t@keyframes dropdownAnimation {\n\t\tfrom {\n\t\t\topacity: 0;\n\t\t\ttransform: scale(0.95);\n\t\t}\n\t\tto {\n\t\t\topacity: 1;\n\t\t\ttransform: scale(1);\n\t\t}\n\t}\n\n\t/* Apply styles to content both in the component and when teleported to the portal */\n\t.schmancy-dropdown-content {\n\t\tbackground-color: var(--schmancy-sys-color-surface-container);\n\t\tborder-radius: 0.375rem;\n\t\tbox-shadow: var(--schmancy-sys-elevation-3);\n\t\twill-change: transform;\n\t\ttransform-origin: top left;\n\t\tanimation: dropdownAnimation 0.1s ease-out forwards;\n\t}\n`];\n\t/**\n\t * Width of the dropdown content\n\t */\n\t@property({ type: String })\n\twidth: string = 'auto'\n\n\t/**\n\t * Maximum height of the dropdown content\n\t */\n\t@property({ type: String })\n\tmaxHeight: string = '80vh'\n\n\t/**\n\t * Whether to render with a shadow\n\t */\n\t@property({ type: Boolean })\n\tshadow: boolean = true\n\n\t/**\n\t * Border radius style\n\t */\n\t@property({ type: String })\n\tradius: 'none' | 'sm' | 'md' | 'lg' | 'full' = 'md'\n\n\trender() {\n\t\tconst classes = {\n\t\t\t'schmancy-dropdown-content': true,\n\t\t\t'overflow-auto': true,\n\t\t\t'shadow-none': !this.shadow,\n\t\t\t'rounded-none': this.radius === 'none',\n\t\t\t'rounded-sm': this.radius === 'sm',\n\t\t\t'rounded-md': this.radius === 'md',\n\t\t\t'rounded-lg': this.radius === 'lg',\n\t\t\t'rounded-full': this.radius === 'full',\n\t\t}\n\n\t\tconst styles = {\n\t\t\twidth: this.width,\n\t\t\tmaxHeight: this.maxHeight,\n\t\t}\n\n\t\treturn html`\n\t\t\t<div class=${this.classMap(classes)} style=${this.styleMap(styles)} part=\"content\">\n\t\t\t\t<slot></slot>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-dropdown-content': SchmancyDropdownContent\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dropdown.js","names":[],"sources":["../src/dropdown/dropdown-component.ts","../src/dropdown/dropdown-content.ts"],"sourcesContent":["import { autoUpdate, computePosition, flip, offset, shift } from '@floating-ui/dom'\nimport { SchmancyElement } from '@mixins/index'\nimport { html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { filter, fromEvent, takeUntil, Subscription } from 'rxjs'\n\n/**\n * A dropdown component that displays content when triggered.\n *\n * @element schmancy-dropdown\n * @slot trigger - The element that triggers the dropdown\n * @slot - Default slot for the dropdown content\n */\n@customElement('schmancy-dropdown')\nexport class SchmancyDropdown extends SchmancyElement {\n\t/**\n\t * Whether the dropdown is currently open\n\t */\n\t@property({ type: Boolean, reflect: true })\n\topen = false\n\n\t/**\n\t * Placement of the dropdown relative to the trigger\n\t */\n\t@property({ type: String })\n\tplacement:\n\t\t| 'top'\n\t\t| 'top-start'\n\t\t| 'top-end'\n\t\t| 'right'\n\t\t| 'right-start'\n\t\t| 'right-end'\n\t\t| 'bottom'\n\t\t| 'bottom-start'\n\t\t| 'bottom-end'\n\t\t| 'left'\n\t\t| 'left-start'\n\t\t| 'left-end' = 'bottom-start'\n\n\t/**\n\t * Offset distance in pixels\n\t */\n\t@property({ type: Number })\n\tdistance = 8\n\n\t@query('.trigger-container') triggerContainer!: HTMLElement\n\t@query('.dropdown-content-container') contentContainer!: HTMLElement\n\t@queryAssignedElements({ flatten: true }) contentElements!: HTMLElement[]\n\t@state() private portal: HTMLElement | null = null\n\n\t@queryAssignedElements({ slot: 'trigger', flatten: true })\n\ttriggerElements!: Array<HTMLElement>\n\n\tprivate cleanupPositioner?: () => void\n\tprivate portalSubscriptions: Subscription[] = []\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Create portal container for teleporting content to document body\n\t\tthis.setupPortal()\n\n\t\t// Listen for document clicks to close dropdown when clicking outside\n\t\tfromEvent<MouseEvent>(document, 'click')\n\t\t\t.pipe(\n\t\t\t\tfilter(event => this.open && !this.isEventFromSelf(event)),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.open = false\n\t\t\t})\n\n\t\t// Listen for escape key to close dropdown\n\t\tfromEvent<KeyboardEvent>(document, 'keydown')\n\t\t\t.pipe(\n\t\t\t\tfilter(event => this.open && event.key === 'Escape'),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.open = false\n\t\t\t})\n\t}\n\n\t/**\n\t * Set up the portal element for teleporting content\n\t */\n\tprivate setupPortal() {\n\t\t// Check if portal container exists\n\t\tlet portalContainer = document.getElementById('schmancy-portal-container')\n\n\t\t// Create portal container if it doesn't exist\n\t\tif (!portalContainer) {\n\t\t\tportalContainer = document.createElement('div')\n\t\t\tportalContainer.id = 'schmancy-portal-container'\n\t\t\tportalContainer.style.position = 'fixed'\n\t\t\tportalContainer.style.zIndex = '10000'\n\t\t\tportalContainer.style.top = '0'\n\t\t\tportalContainer.style.left = '0'\n\t\t\tportalContainer.style.pointerEvents = 'none'\n\t\t\tdocument.body.appendChild(portalContainer)\n\t\t}\n\n\t\t// Create portal for this specific dropdown\n\t\tconst portal = document.createElement('div')\n\t\tportal.className = 'schmancy-dropdown-portal'\n\t\tportal.style.position = 'absolute'\n\t\tportal.style.pointerEvents = 'auto'\n\t\tportal.style.display = 'none'\n\t\tportalContainer.appendChild(portal)\n\n\t\tthis.portal = portal\n\t}\n\n\t/**\n\t * Check if an event originated from within this component\n\t */\n\tprivate isEventFromSelf(event: Event): boolean {\n\t\treturn event.composedPath().some(el => el === this)\n\t}\n\n\tdisconnectedCallback() {\n\t\tthis.cleanupPositioner?.()\n\n\t\t// Clean up portal subscriptions\n\t\tthis.portalSubscriptions.forEach(subscription => subscription.unsubscribe())\n\t\tthis.portalSubscriptions = []\n\n\t\t// Remove portal when component is disconnected\n\t\tif (this.portal) {\n\t\t\tthis.portal.remove()\n\t\t\tthis.portal = null\n\t\t}\n\n\t\tsuper.disconnectedCallback()\n\t}\n\n\t/**\n\t * Toggle the dropdown open state\n\t */\n\ttoggle() {\n\t\tthis.open = !this.open\n\t}\n\n\tupdated(changedProps: Map<string, unknown>) {\n\t\tsuper.updated(changedProps)\n\n\t\tif (changedProps.has('open')) {\n\t\t\tif (this.open) {\n\t\t\t\tthis.setupPositioner()\n\t\t\t} else {\n\t\t\t\tthis.cleanupPositioner?.()\n\n\t\t\t\t// Hide portal when dropdown is closed\n\t\t\t\tif (this.portal) {\n\t\t\t\t\tthis.portal.style.display = 'none'\n\t\t\t\t\tthis.portal.innerHTML = ''\n\t\t\t\t\t// Clean up subscriptions when content is cleared\n\t\t\t\t\tthis.portalSubscriptions.forEach(subscription => subscription.unsubscribe())\n\t\t\t\t\tthis.portalSubscriptions = []\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Setup floating UI positioning with teleportation\n\t */\n\tprivate setupPositioner() {\n\t\tif (!this.triggerContainer || !this.portal) return\n\n\t\t// Show the portal\n\t\tthis.portal.style.display = 'block'\n\n\t\t// Move content to portal\n\t\tthis.teleportContentToPortal()\n\n\t\t// Setup positioning\n\t\tthis.cleanupPositioner = autoUpdate(this.triggerContainer, this.portal, () => {\n\t\t\tcomputePosition(this.triggerContainer, this.portal, {\n\t\t\t\tplacement: this.placement,\n\t\t\t\tmiddleware: [\n\t\t\t\t\toffset(this.distance),\n\t\t\t\t\tflip({\n\t\t\t\t\t\tfallbackPlacements: ['top-start', 'bottom-start'],\n\t\t\t\t\t}),\n\t\t\t\t\tshift({ padding: 0 }),\n\t\t\t\t],\n\t\t\t}).then(({ x, y }) => {\n\t\t\t\t// Update portal position\n\t\t\t\tObject.assign(this.portal.style, {\n\t\t\t\t\tleft: `${x}px`,\n\t\t\t\t\ttop: `${y - 8}px`,\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t})\n\t\t})\n\t}\n\n\t/**\n\t * Move slotted content to the portal\n\t */\n\tprivate teleportContentToPortal() {\n\t\tif (!this.portal) return\n\n\t\t// Clean up existing subscriptions\n\t\tthis.portalSubscriptions.forEach(subscription => subscription.unsubscribe())\n\t\tthis.portalSubscriptions = []\n\n\t\t// Clear existing content\n\t\tthis.portal.innerHTML = ''\n\n\t\t// Clone and move slotted content to portal\n\t\tthis.contentElements.forEach(element => {\n\t\t\t// Get computed styles to ensure portal content matches original styling\n\t\t\tconst clonedElement = element.cloneNode(true) as HTMLElement\n\n\t\t\t// Ensure dropdown-content elements maintain their styles when teleported\n\t\t\tif (element.tagName.toLowerCase() === 'schmancy-dropdown-content') {\n\t\t\t\tconst subscription = fromEvent(clonedElement, 'slotchange').subscribe(() => {\n\t\t\t\t\t// Propagate any slot changes to class changes on children\n\t\t\t\t\tconst contentDiv = clonedElement.shadowRoot?.querySelector('[part=\"content\"]')\n\t\t\t\t\tif (contentDiv) {\n\t\t\t\t\t\tcontentDiv.classList.add('schmancy-dropdown-content')\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tthis.portalSubscriptions.push(subscription)\n\t\t\t}\n\n\t\t\tthis.portal?.appendChild(clonedElement)\n\t\t})\n\t}\n\n\t/**\n\t * Handle trigger click to toggle dropdown\n\t */\n\tprivate handleTriggerClick(e: Event) {\n\t\te.stopPropagation()\n\t\tthis.toggle()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"trigger-container\" @click=${this.handleTriggerClick}>\n\t\t\t\t<slot name=\"trigger\"></slot>\n\t\t\t</div>\n\n\t\t\t<div class=\"dropdown-content-container\" ?hidden=${!this.open}>\n\t\t\t\t<slot\n\t\t\t\t\t@slotchange=${() => {\n\t\t\t\t\t\tif (this.open) {\n\t\t\t\t\t\t\tthis.teleportContentToPortal()\n\t\t\t\t\t\t\tthis.setupPositioner()\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t></slot>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-dropdown': SchmancyDropdown\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n/**\n * Content container for the schmancy-dropdown component.\n *\n * @element schmancy-dropdown-content\n * @slot - Default slot for dropdown content.\n * @csspart content - The inner wrapper element; style to override panel\n * backgrounds, shadows, padding, or borders without shadow-root piercing.\n */\n@customElement('schmancy-dropdown-content')\nexport class SchmancyDropdownContent extends SchmancyElement {\n\tstatic styles = [\n\t\tcss`\n\t\t\t:host {\n\t\t\t\tdisplay: block;\n\t\t\t\tposition: absolute;\n\t\t\t\tz-index: 1000;\n\t\t\t\tmin-width: 10rem;\n\t\t\t\tmargin: 0;\n\t\t\t\ttext-align: left;\n\t\t\t\tlist-style: none;\n\t\t\t\tbackground-color: var(--schmancy-sys-color-surface-container);\n\t\t\t\tbackground-clip: padding-box;\n\t\t\t\tborder-radius: 0.375rem;\n\t\t\t\tbox-shadow: var(--schmancy-sys-elevation-3);\n\t\t\t\twill-change: transform;\n\t\t\t\ttransform-origin: top left;\n\t\t\t\tanimation: dropdownAnimation 0.1s ease-out forwards;\n\t\t\t}\n\n\t\t\t:host([hidden]) {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\n\t\t\t@keyframes dropdownAnimation {\n\t\t\t\tfrom {\n\t\t\t\t\topacity: 0;\n\t\t\t\t\ttransform: scale(0.95);\n\t\t\t\t}\n\t\t\t\tto {\n\t\t\t\t\topacity: 1;\n\t\t\t\t\ttransform: scale(1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/* Apply styles to content both in the component and when teleported to the portal */\n\t\t\t.schmancy-dropdown-content {\n\t\t\t\tbackground-color: var(--schmancy-sys-color-surface-container);\n\t\t\t\tborder-radius: 0.375rem;\n\t\t\t\tbox-shadow: var(--schmancy-sys-elevation-3);\n\t\t\t\twill-change: transform;\n\t\t\t\ttransform-origin: top left;\n\t\t\t\tanimation: dropdownAnimation 0.1s ease-out forwards;\n\t\t\t}\n\t\t`,\n\t]\n\t/**\n\t * Width of the dropdown content\n\t */\n\t@property({ type: String })\n\twidth: string = 'auto'\n\n\t/**\n\t * Maximum height of the dropdown content\n\t */\n\t@property({ type: String })\n\tmaxHeight: string = '80vh'\n\n\t/**\n\t * Whether to render with a shadow\n\t */\n\t@property({ type: Boolean })\n\tshadow: boolean = true\n\n\t/**\n\t * Border radius style\n\t */\n\t@property({ type: String })\n\tradius: 'none' | 'sm' | 'md' | 'lg' | 'full' = 'md'\n\n\trender() {\n\t\tconst classes = {\n\t\t\t'schmancy-dropdown-content': true,\n\t\t\t'overflow-auto': true,\n\t\t\t'shadow-none': !this.shadow,\n\t\t\t'rounded-none': this.radius === 'none',\n\t\t\t'rounded-sm': this.radius === 'sm',\n\t\t\t'rounded-md': this.radius === 'md',\n\t\t\t'rounded-lg': this.radius === 'lg',\n\t\t\t'rounded-full': this.radius === 'full',\n\t\t}\n\n\t\tconst styles = {\n\t\t\twidth: this.width,\n\t\t\tmaxHeight: this.maxHeight,\n\t\t}\n\n\t\treturn html`\n\t\t\t<div class=${this.classMap(classes)} style=${this.styleMap(styles)} part=\"content\">\n\t\t\t\t<slot></slot>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-dropdown-content': SchmancyDropdownContent\n\t}\n}\n"],"mappings":";;;;;;AAcO,IAAA,IAAA,cAA+B,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,CAAA,GAAA,KAAA,OAAA,CAK9B,GAAA,KAAA,YAkBS,gBAAA,KAAA,WAML,GAAA,KAAA,SAKmC,MAAA,KAAA,sBAMA,CAAA;CAAA;CAE9C,oBAAA;EACC,MAAM,kBAAA,GAGN,KAAK,YAAA,GAGL,EAAsB,UAAU,OAAA,EAC9B,KACA,GAAO,MAAS,KAAK,QAAA,CAAS,KAAK,gBAAgB,CAAA,CAAA,GACnD,EAAU,KAAK,aAAA,CAAA,EAEf,gBAAA;GACA,KAAK,OAAA,CAAO;EAAA,CAAA,GAId,EAAyB,UAAU,SAAA,EACjC,KACA,GAAO,MAAS,KAAK,QAAQ,EAAM,QAAQ,QAAR,GACnC,EAAU,KAAK,aAAA,CAAA,EAEf,gBAAA;GACA,KAAK,OAAA,CAAO;EAAA,CAAA;CAEf;CAKA,cAAA;EAEC,IAAI,IAAkB,SAAS,eAAe,2BAAA;EAGzC,MACJ,IAAkB,SAAS,cAAc,KAAA,GACzC,EAAgB,KAAK,6BACrB,EAAgB,MAAM,WAAW,SACjC,EAAgB,MAAM,SAAS,SAC/B,EAAgB,MAAM,MAAM,KAC5B,EAAgB,MAAM,OAAO,KAC7B,EAAgB,MAAM,gBAAgB,QACtC,SAAS,KAAK,YAAY,CAAA;EAI3B,IAAM,IAAS,SAAS,cAAc,KAAA;EACtC,EAAO,YAAY,4BACnB,EAAO,MAAM,WAAW,YACxB,EAAO,MAAM,gBAAgB,QAC7B,EAAO,MAAM,UAAU,QACvB,EAAgB,YAAY,CAAA,GAE5B,KAAK,SAAS;CACf;CAKA,gBAAwB,GAAA;EACvB,OAAO,EAAM,aAAA,EAAe,MAAK,MAAM,MAAO,IAAA;CAC/C;CAEA,uBAAA;EACC,KAAK,oBAAA,GAGL,KAAK,oBAAoB,SAAQ,MAAgB,EAAa,YAAA,CAAA,GAC9D,KAAK,sBAAsB,CAAA,GAGvB,AAEH,KAAK,YADL,KAAK,OAAO,OAAA,GACE,OAGf,MAAM,qBAAA;CACP;CAKA,SAAA;EACC,KAAK,OAAA,CAAQ,KAAK;CACnB;CAEA,QAAQ,GAAA;EACP,MAAM,QAAQ,CAAA,GAEV,EAAa,IAAI,MAAA,MAChB,KAAK,OACR,KAAK,gBAAA,KAEL,KAAK,oBAAA,GAGD,KAAK,WACR,KAAK,OAAO,MAAM,UAAU,QAC5B,KAAK,OAAO,YAAY,IAExB,KAAK,oBAAoB,SAAQ,MAAgB,EAAa,YAAA,CAAA,GAC9D,KAAK,sBAAsB,CAAA;CAI/B;CAKA,kBAAA;EACM,KAAK,oBAAqB,KAAK,WAGpC,KAAK,OAAO,MAAM,UAAU,SAG5B,KAAK,wBAAA,GAGL,KAAK,oBAAoB,EAAW,KAAK,kBAAkB,KAAK,cAAA;GAC/D,EAAgB,KAAK,kBAAkB,KAAK,QAAQ;IACnD,WAAW,KAAK;IAChB,YAAY;KACX,EAAO,KAAK,QAAA;KACZ,EAAK,EACJ,oBAAoB,CAAC,aAAa,cAAA,EAAA,CAAA;KAEnC,EAAM,EAAE,SAAS,EAAA,CAAA;IAAA;GAAA,CAAA,EAEhB,MAAA,EAAQ,GAAA,GAAG,GAAA,QAAA;IAEb,OAAO,OAAO,KAAK,OAAO,OAAO;KAChC,MAAM,GAAG,EAAA;KACT,KAAQ,IAAI,IAAP;IAAA,CAAA;GAAA,CAAA;EAAA,CAAA;CAKT;CAKA,0BAAA;EACM,KAAK,WAGV,KAAK,oBAAoB,SAAQ,MAAgB,EAAa,YAAA,CAAA,GAC9D,KAAK,sBAAsB,CAAA,GAG3B,KAAK,OAAO,YAAY,IAGxB,KAAK,gBAAgB,SAAQ,MAAA;GAE5B,IAAM,IAAgB,EAAQ,UAAA,CAAU,CAAA;GAGxC,IAAI,EAAQ,QAAQ,YAAA,MAAkB,6BAA6B;IAClE,IAAM,IAAe,EAAU,GAAe,YAAA,EAAc,gBAAA;KAE3D,IAAM,IAAa,EAAc,YAAY,cAAc,oBAAA;KACvD,KACH,EAAW,UAAU,IAAI,2BAAA;IAAA,CAAA;IAG3B,KAAK,oBAAoB,KAAK,CAAA;GAC/B;GAEA,KAAK,QAAQ,YAAY,CAAA;EAAA,CAAA;CAE3B;CAKA,mBAA2B,GAAA;EAC1B,EAAE,gBAAA,GACF,KAAK,OAAA;CACN;CAEA,SAAA;EACC,OAAO,CAAI;2CAC8B,KAAK,mBAAA;;;;sDAIM,KAAK,KAAA;;;GAGjD,KAAK,SACR,KAAK,wBAAA,GACL,KAAK,gBAAA;EAAA,EAAA;;;;CAMX;AAAA;AAAA,EAAA,CA/OC,EAAS;CAAE,MAAM;CAAS,SAAA,CAAS;AAAA,CAAA,CAAA,GAAM,EAAA,WAAA,QAAA,KAAA,CAAA,GAAA,EAAA,CAMzC,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,aAAA,KAAA,CAAA,GAAA,EAAA,CAkBzB,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,YAAA,KAAA,CAAA,GAAA,EAAA,CAGzB,EAAM,oBAAA,CAAA,GAAoB,EAAA,WAAA,oBAAA,KAAA,CAAA,GAAA,EAAA,CAC1B,EAAM,6BAAA,CAAA,GAA6B,EAAA,WAAA,oBAAA,KAAA,CAAA,GAAA,EAAA,CACnC,EAAsB,EAAE,SAAA,CAAS,EAAA,CAAA,CAAA,GAAM,EAAA,WAAA,mBAAA,KAAA,CAAA,GAAA,EAAA,CACvC,EAAA,CAAA,GAAM,EAAA,WAAA,UAAA,KAAA,CAAA,GAAA,EAAA,CAEN,EAAsB;CAAE,MAAM;CAAW,SAAA,CAAS;AAAA,CAAA,CAAA,GAAM,EAAA,WAAA,mBAAA,KAAA,CAAA,GAAA,IAAA,EAAA,CArCzD,EAAc,mBAAA,CAAA,GAAmB,CAAA;ACA3B,IAAA,IAAA,cAAsC,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,CAAA,GAAA,KAAA,QAkD5B,QAAA,KAAA,YAMI,QAAA,KAAA,SAAA,CAMF,GAAA,KAAA,SAM6B;CAAA;CAAA;EAAA,KAAA,SAnE/B,CACf,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoEJ,SAAA;EACC,IAAM,IAAU;GACf,6BAAA,CAA6B;GAC7B,iBAAA,CAAiB;GACjB,eAAA,CAAgB,KAAK;GACrB,gBAAgB,KAAK,WAAW;GAChC,cAAc,KAAK,WAAW;GAC9B,cAAc,KAAK,WAAW;GAC9B,cAAc,KAAK,WAAW;GAC9B,gBAAgB,KAAK,WAAW;EAAX,GAGhB,IAAS;GACd,OAAO,KAAK;GACZ,WAAW,KAAK;EAAA;EAGjB,OAAO,CAAI;gBACG,KAAK,SAAS,CAAA,EAAA,SAAkB,KAAK,SAAS,CAAA,EAAA;;;;CAI7D;AAAA;AAAA,EAAA,CA3CC,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,SAAA,KAAA,CAAA,GAAA,EAAA,CAMzB,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,aAAA,KAAA,CAAA,GAAA,EAAA,CAMzB,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,GAAS,EAAA,WAAA,UAAA,KAAA,CAAA,GAAA,EAAA,CAM1B,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,UAAA,KAAA,CAAA,GAAA,IAAA,EAAA,CApE1B,EAAc,2BAAA,CAAA,GAA2B,CAAA;AAAA,SAAA,KAAA,kBAAA,KAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { t as e, u as t } from "./SchmancyElement-
|
|
2
|
-
import { t as n } from "./mixins-
|
|
1
|
+
import { t as e, u as t } from "./SchmancyElement-Ob9yGkiG.js";
|
|
2
|
+
import { t as n } from "./mixins-q4KAL8Xr.js";
|
|
3
3
|
import { d as r, f as i } from "./animation-DCznELuT.js";
|
|
4
4
|
import { t as a } from "./reduced-motion-D-L12p7G.js";
|
|
5
|
-
import "./surface-
|
|
5
|
+
import "./surface-DXk1X1tL.js";
|
|
6
6
|
import { filter as o, fromEvent as s, lastValueFrom as c } from "rxjs";
|
|
7
7
|
import { takeUntil as l, tap as u } from "rxjs/operators";
|
|
8
8
|
import { styleMap as d } from "lit/directives/style-map.js";
|
|
@@ -11,47 +11,49 @@ import { css as h, html as g, nothing as _ } from "lit";
|
|
|
11
11
|
import { createRef as v, ref as y } from "lit/directives/ref.js";
|
|
12
12
|
var b = class extends n(e) {
|
|
13
13
|
constructor(...e) {
|
|
14
|
-
super(...e), this.type = "
|
|
14
|
+
super(...e), this.type = "containerLowest", this.isOpen = !1, this.summaryRect = null, this.panelRef = v(), this.backdropRef = v(), this.btnRef = v(), this.owner = null, this.hideIndicator = !1, this.backdrop = !0;
|
|
15
15
|
}
|
|
16
16
|
static {
|
|
17
17
|
this.styles = [h`
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
:host {
|
|
19
|
+
display: contents;
|
|
20
|
+
}
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
22
|
+
.portal-panel {
|
|
23
|
+
position: fixed;
|
|
24
|
+
transform-origin: top left;
|
|
25
|
+
will-change: clip-path, opacity;
|
|
26
|
+
border-radius: 1rem;
|
|
27
|
+
box-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.5);
|
|
28
|
+
z-index: 9999;
|
|
29
|
+
}
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
31
|
+
.minimize-btn {
|
|
32
|
+
position: absolute;
|
|
33
|
+
top: 0.5rem;
|
|
34
|
+
right: 0.5rem;
|
|
35
|
+
z-index: 1;
|
|
36
|
+
display: flex;
|
|
37
|
+
align-items: center;
|
|
38
|
+
justify-content: center;
|
|
39
|
+
width: 2rem;
|
|
40
|
+
height: 2rem;
|
|
41
|
+
border-radius: 9999px;
|
|
42
|
+
border: none;
|
|
43
|
+
background: transparent;
|
|
44
|
+
cursor: pointer;
|
|
45
|
+
opacity: 0.5;
|
|
46
|
+
transition:
|
|
47
|
+
opacity 150ms,
|
|
48
|
+
background 150ms;
|
|
49
|
+
color: inherit;
|
|
50
|
+
}
|
|
49
51
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
`];
|
|
52
|
+
.minimize-btn:hover {
|
|
53
|
+
opacity: 1;
|
|
54
|
+
background: rgb(0 0 0 / 0.08);
|
|
55
|
+
}
|
|
56
|
+
`];
|
|
55
57
|
}
|
|
56
58
|
prepare(e, t, n = !1, r = !0) {
|
|
57
59
|
this.summaryRect = e, this.owner = t, this.hideIndicator = n, this.backdrop = r;
|
|
@@ -150,30 +152,31 @@ var b = class extends n(e) {
|
|
|
150
152
|
render() {
|
|
151
153
|
return this.isOpen ? g`
|
|
152
154
|
${this.backdrop ? g`
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
<schmancy-surface
|
|
160
|
-
${y(this.panelRef)}
|
|
161
|
-
class="portal-panel"
|
|
162
|
-
type=${this.type}
|
|
163
|
-
style="overflow-y: auto;"
|
|
164
|
-
>
|
|
155
|
+
<div
|
|
156
|
+
${y(this.backdropRef)}
|
|
157
|
+
class="fixed inset-0 z-9998 backdrop-blur-sm backdrop-saturate-150 backdrop-brightness-105 bg-black/[0.07] will-change-[opacity]"
|
|
158
|
+
@click=${() => this.owner?.close?.()}
|
|
159
|
+
></div>
|
|
160
|
+
` : _}
|
|
161
|
+
<schmancy-surface ${y(this.panelRef)} class="portal-panel" type=${this.type} style="overflow-y: auto;">
|
|
165
162
|
${this.hideIndicator ? _ : g`
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
163
|
+
<button
|
|
164
|
+
${y(this.btnRef)}
|
|
165
|
+
class="minimize-btn"
|
|
166
|
+
aria-label="Minimize"
|
|
167
|
+
@click=${() => this.owner?.close?.()}
|
|
168
|
+
>
|
|
169
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" aria-hidden="true">
|
|
170
|
+
<path
|
|
171
|
+
d="M19 9L12 16L5 9"
|
|
172
|
+
stroke="currentColor"
|
|
173
|
+
stroke-width="2"
|
|
174
|
+
stroke-linecap="round"
|
|
175
|
+
stroke-linejoin="round"
|
|
176
|
+
/>
|
|
177
|
+
</svg>
|
|
178
|
+
</button>
|
|
179
|
+
`}
|
|
177
180
|
<slot></slot>
|
|
178
181
|
</schmancy-surface>
|
|
179
182
|
` : _;
|
|
@@ -186,38 +189,39 @@ var x = "schmancy-expand-request-close", S = class extends e {
|
|
|
186
189
|
}
|
|
187
190
|
static {
|
|
188
191
|
this.styles = [h`
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
+
:host {
|
|
193
|
+
display: block;
|
|
194
|
+
}
|
|
192
195
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
+
summary::-webkit-details-marker {
|
|
197
|
+
display: none;
|
|
198
|
+
}
|
|
196
199
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
200
|
+
summary {
|
|
201
|
+
list-style: none;
|
|
202
|
+
color: inherit;
|
|
203
|
+
}
|
|
201
204
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
205
|
+
.inline-grid {
|
|
206
|
+
display: grid;
|
|
207
|
+
grid-template-rows: 0fr;
|
|
208
|
+
overflow: hidden;
|
|
209
|
+
transition:
|
|
210
|
+
grid-template-rows 300ms cubic-bezier(0.22, 1.25, 0.36, 1),
|
|
211
|
+
opacity 300ms cubic-bezier(0.22, 1.25, 0.36, 1);
|
|
212
|
+
opacity: 0;
|
|
213
|
+
}
|
|
210
214
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
+
.inline-grid[data-open] {
|
|
216
|
+
grid-template-rows: 1fr;
|
|
217
|
+
opacity: 1;
|
|
218
|
+
}
|
|
215
219
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
`];
|
|
220
|
+
.inline-grid > .inner {
|
|
221
|
+
min-height: 0;
|
|
222
|
+
overflow: hidden;
|
|
223
|
+
}
|
|
224
|
+
`];
|
|
221
225
|
}
|
|
222
226
|
connectedCallback() {
|
|
223
227
|
super.connectedCallback(), s(window, "keydown").pipe(o((e) => e.key === "Escape"), o(() => this.open), u(() => {
|
|
@@ -293,7 +297,9 @@ var x = "schmancy-expand-request-close", S = class extends e {
|
|
|
293
297
|
}}
|
|
294
298
|
>
|
|
295
299
|
${this.hideIndicator ? _ : g`
|
|
296
|
-
<span
|
|
300
|
+
<span
|
|
301
|
+
class="indicator flex items-center justify-center w-5 h-5 rounded-full shrink-0 opacity-70 group-hover:opacity-100 will-change-transform"
|
|
302
|
+
>
|
|
297
303
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true">
|
|
298
304
|
<path
|
|
299
305
|
d="M9 6L15 12L9 18"
|
|
@@ -314,16 +320,16 @@ var x = "schmancy-expand-request-close", S = class extends e {
|
|
|
314
320
|
</div>
|
|
315
321
|
|
|
316
322
|
${this.inline ? g`
|
|
317
|
-
|
|
318
|
-
|
|
323
|
+
<div class="inline-grid" ?data-open=${this.open}>
|
|
324
|
+
<div class="inner">
|
|
325
|
+
<slot ${y(this.contentSlotRef)}></slot>
|
|
326
|
+
</div>
|
|
327
|
+
</div>
|
|
328
|
+
` : g`
|
|
329
|
+
<div style=${d(this.open ? {} : { display: "none" })}>
|
|
319
330
|
<slot ${y(this.contentSlotRef)}></slot>
|
|
320
331
|
</div>
|
|
321
|
-
|
|
322
|
-
` : g`
|
|
323
|
-
<div style=${d(this.open ? {} : { display: "none" })}>
|
|
324
|
-
<slot ${y(this.contentSlotRef)}></slot>
|
|
325
|
-
</div>
|
|
326
|
-
`}
|
|
332
|
+
`}
|
|
327
333
|
</div>
|
|
328
334
|
`;
|
|
329
335
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expand-BT8mOu8Q.js","names":[],"sources":["../src/expand/expand-root.component.ts","../src/expand/expand.component.ts"],"sourcesContent":["import { css, html, nothing } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { SchmancyElement, SurfaceMixin } from '@mixins/index'\nimport type { TSurfaceColor } from '@schmancy/types'\nimport { SPRING_SMOOTH } from '../utils/animation.js'\nimport { reducedMotion$ } from '../directives/reduced-motion'\nimport '../surface/surface.js'\n\n@customElement('schmancy-expand-root')\nexport class SchmancyExpandRoot extends SurfaceMixin(SchmancyElement) {\n\tstatic styles = [\n\t\tcss`\n\t\t\t:host {\n\t\t\t\tdisplay: contents;\n\t\t\t}\n\n\t\t\t.portal-panel {\n\t\t\t\tposition: fixed;\n\t\t\t\ttransform-origin: top left;\n\t\t\t\twill-change: clip-path, opacity;\n\t\t\t\tborder-radius: 1rem;\n\t\t\t\tbox-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.5);\n\t\t\t\tz-index: 9999;\n\t\t\t}\n\n\t\t\t.minimize-btn {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 0.5rem;\n\t\t\t\tright: 0.5rem;\n\t\t\t\tz-index: 1;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\twidth: 2rem;\n\t\t\t\theight: 2rem;\n\t\t\t\tborder-radius: 9999px;\n\t\t\t\tborder: none;\n\t\t\t\tbackground: transparent;\n\t\t\t\tcursor: pointer;\n\t\t\t\topacity: 0.5;\n\t\t\t\ttransition:\n\t\t\t\t\topacity 150ms,\n\t\t\t\t\tbackground 150ms;\n\t\t\t\tcolor: inherit;\n\t\t\t}\n\n\t\t\t.minimize-btn:hover {\n\t\t\t\topacity: 1;\n\t\t\t\tbackground: rgb(0 0 0 / 0.08);\n\t\t\t}\n\t\t`,\n\t]\n\t@property({ reflect: true }) override type: TSurfaceColor = 'containerLowest'\n\t@state() isOpen = false\n\tprivate summaryRect: DOMRect | null = null\n\n\tprivate panelRef = createRef<HTMLElement>()\n\tprivate backdropRef = createRef<HTMLDivElement>()\n\tprivate btnRef = createRef<HTMLButtonElement>()\n\tprivate owner: (Element & { close?: () => void }) | null = null\n\tprivate hideIndicator = false\n\tprivate backdrop = true\n\n\t/** Called by schmancy-expand before nodes are moved */\n\tprepare(rect: DOMRect, owner: Element, hideIndicator = false, backdrop = true) {\n\t\tthis.summaryRect = rect\n\t\tthis.owner = owner as Element & { close?: () => void }\n\t\tthis.hideIndicator = hideIndicator\n\t\tthis.backdrop = backdrop\n\t}\n\n\t/** Called by schmancy-expand after nodes are moved in */\n\tasync triggerOpen() {\n\t\tthis.isOpen = true\n\t\tawait this.updateComplete\n\n\t\tconst panel = this.panelRef.value\n\t\tif (!panel) return\n\n\t\tconst src = this.summaryRect!\n\n\t\t// 1. Anchor at summary's top-left, measure natural content size\n\t\t// Use nearly full viewport height for measurement so content near the bottom\n\t\t// of the screen isn't artificially capped — the positioning step will move the panel up.\n\t\tObject.assign(panel.style, {\n\t\t\tvisibility: 'hidden',\n\t\t\ttop: `${src.top}px`,\n\t\t\tleft: `${src.left}px`,\n\t\t\tminWidth: `${src.width}px`,\n\t\t\twidth: 'max-content',\n\t\t\tmaxWidth: `${window.innerWidth - src.left}px`,\n\t\t\theight: 'auto',\n\t\t\tmaxHeight: `${window.innerHeight - 32}px`,\n\t\t\toverflowY: 'auto',\n\t\t})\n\n\t\tconst measured = panel.getBoundingClientRect()\n\t\tconst finalW = measured.width\n\t\tconst finalH = measured.height\n\n\t\t// 2. Adjust position so panel stays within viewport\n\t\tlet finalTop = src.top\n\t\tlet finalLeft = src.left\n\t\tif (finalTop + finalH > window.innerHeight) {\n\t\t\tfinalTop = Math.max(0, src.bottom - finalH)\n\t\t}\n\t\tif (finalLeft + finalW > window.innerWidth) {\n\t\t\tfinalLeft = Math.max(0, window.innerWidth - finalW)\n\t\t}\n\n\t\t// 3. Compute clip-path insets — summary rect expressed relative to panel final position\n\t\t// These insets shrink the visible area down to exactly the summary box\n\t\tconst insetTop = Math.max(0, src.top - finalTop)\n\t\tconst insetLeft = Math.max(0, src.left - finalLeft)\n\t\tconst insetRight = Math.max(0, finalLeft + finalW - (src.left + src.width))\n\t\tconst insetBottom = Math.max(0, finalTop + finalH - (src.top + src.height))\n\n\t\t// 4. Place panel at final size + position, masked to summary bounds (no flash)\n\t\tObject.assign(panel.style, {\n\t\t\tvisibility: '',\n\t\t\ttop: `${finalTop}px`,\n\t\t\tleft: `${finalLeft}px`,\n\t\t\tminWidth: `${src.width}px`,\n\t\t\twidth: `${finalW}px`,\n\t\t\theight: `${finalH}px`,\n\t\t\tmaxWidth: '',\n\t\t\tmaxHeight: '',\n\t\t\tclipPath: `inset(${insetTop}px ${insetRight}px ${insetBottom}px ${insetLeft}px round 0.5rem)`,\n\t\t})\n\n\t\t// 5. Animate the mask open — content revealed, not stretched\n\t\tthis.animateOpen(insetTop, insetRight, insetBottom, insetLeft, finalTop)\n\t}\n\n\t/** Animate close, return Promise resolving when done */\n\tasync triggerClose(targetRect: DOMRect): Promise<void> {\n\t\tawait this.animateClose(targetRect)\n\t\tthis.isOpen = false\n\t\tthis.summaryRect = null\n\t}\n\n\tprivate animateOpen(insetTop: number, insetRight: number, insetBottom: number, insetLeft: number, finalTop: number) {\n\t\tconst panel = this.panelRef.value\n\t\tif (!panel) return\n\n\t\tif (reducedMotion$.value) {\n\t\t\tpanel.style.clipPath = ''\n\t\t\treturn\n\t\t}\n\n\t\tconst backdrop = this.backdropRef.value\n\t\tif (backdrop) {\n\t\t\tbackdrop.animate([{ opacity: 0 }, { opacity: 1 }], {\n\t\t\t\tduration: SPRING_SMOOTH.duration,\n\t\t\t\teasing: SPRING_SMOOTH.easingFallback,\n\t\t\t\tfill: 'forwards',\n\t\t\t})\n\t\t}\n\n\t\tconst keyframes: Keyframe[] = [\n\t\t\t{\n\t\t\t\tclipPath: `inset(${insetTop}px ${insetRight}px ${insetBottom}px ${insetLeft}px round 0.5rem)`,\n\t\t\t\topacity: 0.9,\n\t\t\t},\n\t\t\t{\n\t\t\t\tclipPath: 'inset(0px 0px 0px 0px round 1rem)',\n\t\t\t\topacity: 1,\n\t\t\t},\n\t\t]\n\n\t\tconst anim = panel.animate(keyframes, {\n\t\t\tduration: SPRING_SMOOTH.duration,\n\t\t\teasing: SPRING_SMOOTH.easingFallback,\n\t\t\tfill: 'forwards',\n\t\t})\n\n\t\t// Clear clip-path and fixed dimensions after animation so content can grow naturally,\n\t\t// but cap at viewport height so overflow-y: auto can scroll\n\t\tanim.finished.then(() => {\n\t\t\tif (panel.isConnected) {\n\t\t\t\tpanel.style.clipPath = ''\n\t\t\t\tpanel.style.height = 'auto'\n\t\t\t\tpanel.style.maxHeight = `${window.innerHeight - finalTop - 16}px`\n\t\t\t}\n\t\t\treturn\n\t\t})\n\n\t\tconst btn = this.btnRef.value\n\t\tif (btn) {\n\t\t\tbtn.animate([{ transform: 'rotate(0deg)' }, { transform: 'rotate(180deg)' }], {\n\t\t\t\tduration: SPRING_SMOOTH.duration,\n\t\t\t\teasing: SPRING_SMOOTH.easingFallback,\n\t\t\t\tfill: 'forwards',\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate animateClose(targetRect: DOMRect): Promise<void> {\n\t\tconst panel = this.panelRef.value\n\t\tif (!panel) return Promise.resolve()\n\t\tif (reducedMotion$.value) return Promise.resolve()\n\n\t\t// Compute insets to mask panel back down to the summary box\n\t\tconst panelRect = panel.getBoundingClientRect()\n\t\tconst insetTop = Math.max(0, targetRect.top - panelRect.top)\n\t\tconst insetLeft = Math.max(0, targetRect.left - panelRect.left)\n\t\tconst insetRight = Math.max(0, panelRect.right - targetRect.right)\n\t\tconst insetBottom = Math.max(0, panelRect.bottom - targetRect.bottom)\n\n\t\tconst closeDuration = Math.round(SPRING_SMOOTH.duration * 0.4)\n\t\tconst closeEasing = 'cubic-bezier(0.4, 0, 1, 1)'\n\n\t\tconst closeKeyframes: Keyframe[] = [\n\t\t\t{ clipPath: 'inset(0px 0px 0px 0px round 1rem)', opacity: 1 },\n\t\t\t{\n\t\t\t\tclipPath: `inset(${insetTop}px ${insetRight}px ${insetBottom}px ${insetLeft}px round 0.5rem)`,\n\t\t\t\topacity: 0.6,\n\t\t\t},\n\t\t]\n\n\t\tconst anim = panel.animate(closeKeyframes, { duration: closeDuration, easing: closeEasing, fill: 'forwards' })\n\n\t\tconst backdrop = this.backdropRef.value\n\t\tif (backdrop) {\n\t\t\tbackdrop.animate([{ opacity: 1 }, { opacity: 0 }], {\n\t\t\t\tduration: closeDuration,\n\t\t\t\teasing: closeEasing,\n\t\t\t\tfill: 'forwards',\n\t\t\t})\n\t\t}\n\n\t\tconst btn = this.btnRef.value\n\t\tif (btn) {\n\t\t\tbtn.animate([{ transform: 'rotate(180deg)' }, { transform: 'rotate(0deg)' }], {\n\t\t\t\tduration: closeDuration,\n\t\t\t\teasing: closeEasing,\n\t\t\t\tfill: 'forwards',\n\t\t\t})\n\t\t}\n\n\t\treturn anim.finished as unknown as Promise<void>\n\t}\n\n\trender() {\n\t\tif (!this.isOpen) return nothing\n\n\t\treturn html`\n\t\t\t${this.backdrop\n\t\t\t\t? html`\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t${ref(this.backdropRef)}\n\t\t\t\t\t\t\tclass=\"fixed inset-0 z-9998 backdrop-blur-sm backdrop-saturate-150 backdrop-brightness-105 bg-black/[0.07] will-change-[opacity]\"\n\t\t\t\t\t\t\t@click=${() => this.owner?.close?.()}\n\t\t\t\t\t\t></div>\n\t\t\t\t\t`\n\t\t\t\t: nothing}\n\t\t\t<schmancy-surface ${ref(this.panelRef)} class=\"portal-panel\" type=${this.type} style=\"overflow-y: auto;\">\n\t\t\t\t${!this.hideIndicator\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t${ref(this.btnRef)}\n\t\t\t\t\t\t\t\tclass=\"minimize-btn\"\n\t\t\t\t\t\t\t\taria-label=\"Minimize\"\n\t\t\t\t\t\t\t\t@click=${() => this.owner?.close?.()}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\td=\"M19 9L12 16L5 9\"\n\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t`\n\t\t\t\t\t: nothing}\n\t\t\t\t<slot></slot>\n\t\t\t</schmancy-surface>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-expand-root': SchmancyExpandRoot\n\t}\n}\n","import { css, html, nothing } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { styleMap } from 'lit/directives/style-map.js'\nimport { filter, fromEvent, lastValueFrom } from 'rxjs'\nimport { tap, takeUntil } from 'rxjs/operators'\nimport { SchmancyElement } from '@mixins/index'\nimport { SPRING_SNAPPY } from '../utils/animation.js'\nimport { reducedMotion$ } from '../directives/reduced-motion'\nimport { SchmancyExpandRoot } from './expand-root.component.js'\n\n/** Dispatch this event on window to close whichever schmancy-expand is currently open */\nexport const SCHMANCY_EXPAND_REQUEST_CLOSE = 'schmancy-expand-request-close'\n\n@customElement('schmancy-expand')\nexport default class SchmancyExpand extends SchmancyElement {\n\tstatic styles = [\n\t\tcss`\n\t\t\t:host {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\tsummary::-webkit-details-marker {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\n\t\t\tsummary {\n\t\t\t\tlist-style: none;\n\t\t\t\tcolor: inherit;\n\t\t\t}\n\n\t\t\t.inline-grid {\n\t\t\t\tdisplay: grid;\n\t\t\t\tgrid-template-rows: 0fr;\n\t\t\t\toverflow: hidden;\n\t\t\t\ttransition:\n\t\t\t\t\tgrid-template-rows 300ms cubic-bezier(0.22, 1.25, 0.36, 1),\n\t\t\t\t\topacity 300ms cubic-bezier(0.22, 1.25, 0.36, 1);\n\t\t\t\topacity: 0;\n\t\t\t}\n\n\t\t\t.inline-grid[data-open] {\n\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\topacity: 1;\n\t\t\t}\n\n\t\t\t.inline-grid > .inner {\n\t\t\t\tmin-height: 0;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t`,\n\t]\n\t@property() summary = ''\n\n\t@property({ type: Boolean, reflect: true }) open = false\n\n\t@property({ attribute: 'summary-padding' }) summaryPadding = ''\n\n\t@property({ attribute: 'content-padding' }) contentPadding = ''\n\n\t@property({ type: Boolean, attribute: 'hide-indicator' }) hideIndicator = false\n\n\t@property({ type: Number, attribute: 'indicator-rotate' }) indicatorRotate = 90\n\n\t@property({ type: Boolean }) backdrop = true\n\n\t@property({ type: Boolean }) inline = false\n\n\tprivate summaryRef = createRef<HTMLElement>()\n\tprivate contentSlotRef = createRef<HTMLSlotElement>()\n\tprivate root: SchmancyExpandRoot | null = null\n\tprivate movedNodes: Element[] = []\n\tprivate currentIndicatorAnim: Animation | undefined\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Close on Escape key\n\t\tfromEvent<KeyboardEvent>(window, 'keydown')\n\t\t\t.pipe(\n\t\t\t\tfilter(e => e.key === 'Escape'),\n\t\t\t\tfilter(() => this.open),\n\t\t\t\ttap(() => void this.handleClose()),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\n\t\t// Close on click outside the portal panel\n\t\tfromEvent<PointerEvent>(document, 'pointerdown')\n\t\t\t.pipe(\n\t\t\t\tfilter(() => this.open),\n\t\t\t\tfilter(e => !!this.root && !e.composedPath().includes(this.root)),\n\t\t\t\ttap(() => void this.handleClose()),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tif (this.movedNodes.length > 0) {\n\t\t\tthis.movedNodes.forEach(n => this.appendChild(n))\n\t\t\tthis.movedNodes = []\n\t\t}\n\t\tif (this.root && this.root.children.length === 0) {\n\t\t\tthis.root.remove()\n\t\t\tthis.root = null\n\t\t}\n\t}\n\n\tprivate async getOrCreateRoot(): Promise<SchmancyExpandRoot> {\n\t\tconst theme = await lastValueFrom(this.discover<HTMLElement>('schmancy-theme'))\n\t\tconst container: HTMLElement = theme ?? document.querySelector('schmancy-theme') ?? document.body\n\t\tlet root = container.querySelector('schmancy-expand-root') as SchmancyExpandRoot | null\n\t\tif (!root) {\n\t\t\troot = new SchmancyExpandRoot()\n\t\t\tcontainer.appendChild(root)\n\t\t}\n\t\treturn root\n\t}\n\n\t/** Close the expand portal, animating back to the summary position. */\n\tpublic close(): void {\n\t\tvoid this.handleClose()\n\t}\n\n\t/** Programmatically open the expand portal. */\n\tpublic expand(): void {\n\t\tif (this.open) return\n\t\tvoid this.expandPortal()\n\t}\n\n\tprotected override updated(changed: Map<PropertyKey, unknown>) {\n\t\tsuper.updated(changed)\n\t\tif (changed.has('open') && this.open && !this.inline && !this.root) {\n\t\t\tvoid this.expandPortal()\n\t\t}\n\t}\n\n\tprivate toggle() {\n\t\tif (this.inline) {\n\t\t\tthis.open = !this.open\n\t\t\tthis.animateIndicator(this.open)\n\t\t} else if (!this.open) {\n\t\t\tvoid this.expandPortal()\n\t\t}\n\t}\n\n\tprivate handleSummaryClick(e: MouseEvent) {\n\t\te.preventDefault()\n\t\tthis.toggle()\n\t}\n\n\tprivate async expandPortal() {\n\t\tif (this.inline) {\n\t\t\tthis.open = true\n\t\t\tthis.animateIndicator(true)\n\t\t\treturn\n\t\t}\n\n\t\tconst root = await this.getOrCreateRoot()\n\t\tthis.root = root\n\t\tconst summary = this.summaryRef.value\n\t\tconst contentSlot = this.contentSlotRef.value\n\t\tif (!summary || !contentSlot) return\n\n\t\tconst summaryRect = summary.getBoundingClientRect()\n\t\tconst nodes = contentSlot.assignedElements({ flatten: true })\n\t\tif (nodes.length === 0) return\n\n\t\troot.prepare(summaryRect, this, this.hideIndicator, this.backdrop)\n\n\t\tthis.movedNodes = [...nodes]\n\t\tthis.movedNodes.forEach(n => root.appendChild(n))\n\n\t\troot.triggerOpen()\n\n\t\tthis.animateIndicator(true)\n\t\tthis.open = true\n\t}\n\n\tasync handleClose() {\n\t\tif (this.inline) {\n\t\t\tthis.animateIndicator(false)\n\t\t\tthis.open = false\n\t\t\treturn\n\t\t}\n\n\t\tconst root = this.root\n\t\tconst summary = this.summaryRef.value\n\t\tif (!root || !summary) return\n\n\t\tconst summaryRect = summary.getBoundingClientRect()\n\t\tthis.animateIndicator(false)\n\n\t\tawait root.triggerClose(summaryRect)\n\n\t\tthis.movedNodes.forEach(n => this.appendChild(n))\n\t\tthis.movedNodes = []\n\t\tthis.open = false\n\t}\n\n\tprivate animateIndicator(isOpen: boolean) {\n\t\tif (reducedMotion$.value) return\n\n\t\tconst indicator = this.shadowRoot?.querySelector('.indicator') as HTMLElement | null\n\t\tif (!indicator) return\n\n\t\tthis.currentIndicatorAnim?.cancel()\n\t\tthis.currentIndicatorAnim = indicator.animate(\n\t\t\t[\n\t\t\t\t{ transform: `rotate(${isOpen ? '0deg' : `${this.indicatorRotate}deg`})` },\n\t\t\t\t{ transform: `rotate(${isOpen ? `${this.indicatorRotate}deg` : '0deg'})` },\n\t\t\t],\n\t\t\t{\n\t\t\t\tduration: SPRING_SNAPPY.duration,\n\t\t\t\teasing: SPRING_SNAPPY.easingFallback,\n\t\t\t\tfill: 'forwards',\n\t\t\t},\n\t\t)\n\t}\n\n\trender() {\n\t\tconst summaryClasses = this.classMap({\n\t\t\t[this.summaryPadding]: true,\n\t\t\t'select-none relative flex items-center gap-2 rounded-xl transition-all duration-150': true,\n\t\t\t'hover:brightness-[0.92] active:brightness-[0.85] cursor-pointer group': true,\n\t\t\t'flex-row-reverse': true,\n\t\t})\n\n\t\treturn html`\n\t\t\t<div class=\"w-full rounded-xl\">\n\t\t\t\t<div\n\t\t\t\t\t${ref(this.summaryRef)}\n\t\t\t\t\tclass=${summaryClasses}\n\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\trole=\"button\"\n\t\t\t\t\t@click=${this.handleSummaryClick}\n\t\t\t\t\t@keydown=${(e: KeyboardEvent) => {\n\t\t\t\t\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\tthis.toggle()\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t${!this.hideIndicator\n\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"indicator flex items-center justify-center w-5 h-5 rounded-full shrink-0 opacity-70 group-hover:opacity-100 will-change-transform\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\td=\"M9 6L15 12L9 18\"\n\t\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t: nothing}\n\n\t\t\t\t\t<span class=\"flex-1 font-medium text-base min-w-0\">\n\t\t\t\t\t\t<slot name=\"summary\">${this.summary}</slot>\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<slot name=\"actions\"></slot>\n\t\t\t\t</div>\n\n\t\t\t\t${this.inline\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<div class=\"inline-grid\" ?data-open=${this.open}>\n\t\t\t\t\t\t\t\t<div class=\"inner\">\n\t\t\t\t\t\t\t\t\t<slot ${ref(this.contentSlotRef)}></slot>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`\n\t\t\t\t\t: html`\n\t\t\t\t\t\t\t<div style=${styleMap(this.open ? {} : { display: 'none' })}>\n\t\t\t\t\t\t\t\t<slot ${ref(this.contentSlotRef)}></slot>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`}\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-expand': SchmancyExpand\n\t}\n}\n"],"mappings":";;;;;;;;;;;AAUO,IAAA,IAAA,cAAiC,EAAa,CAAA,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,CAAA,GAAA,KAAA,OA2CQ,mBAAA,KAAA,SAAA,CAC1C,GAAA,KAAA,cACoB,MAAA,KAAA,WAEnB,EAAA,GAAA,KAAA,cACG,EAAA,GAAA,KAAA,SACL,EAAA,GAAA,KAAA,QAC0C,MAAA,KAAA,gBAAA,CACnC,GAAA,KAAA,WAAA,CACL;CAAA;CAAA;EAAA,KAAA,SAnDH,CACf,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDJ,QAAQ,GAAe,GAAgB,IAAA,CAAgB,GAAO,IAAA,CAAW,GAAA;EACxE,KAAK,cAAc,GACnB,KAAK,QAAQ,GACb,KAAK,gBAAgB,GACrB,KAAK,WAAW;CACjB;CAGA,MAAA,cAAM;EACL,KAAK,SAAA,CAAS,GAAA,MACR,KAAK;EAEX,IAAM,IAAQ,KAAK,SAAS;EAC5B,IAAA,CAAK,GAAO;EAEZ,IAAM,IAAM,KAAK;EAKjB,OAAO,OAAO,EAAM,OAAO;GAC1B,YAAY;GACZ,KAAK,GAAG,EAAI,IAAA;GACZ,MAAM,GAAG,EAAI,KAAA;GACb,UAAU,GAAG,EAAI,MAAA;GACjB,OAAO;GACP,UAAa,OAAO,aAAa,EAAI,OAA3B;GACV,QAAQ;GACR,WAAc,OAAO,cAAc,KAAxB;GACX,WAAW;EAAA,CAAA;EAGZ,IAAM,IAAW,EAAM,sBAAA,GACjB,IAAS,EAAS,OAClB,IAAS,EAAS,QAGpB,IAAW,EAAI,KACf,IAAY,EAAI;EAChB,IAAW,IAAS,OAAO,gBAC9B,IAAW,KAAK,IAAI,GAAG,EAAI,SAAS,CAAA,IAEjC,IAAY,IAAS,OAAO,eAC/B,IAAY,KAAK,IAAI,GAAG,OAAO,aAAa,CAAA;EAK7C,IAAM,IAAW,KAAK,IAAI,GAAG,EAAI,MAAM,CAAA,GACjC,IAAY,KAAK,IAAI,GAAG,EAAI,OAAO,CAAA,GACnC,IAAa,KAAK,IAAI,GAAG,IAAY,KAAU,EAAI,OAAO,EAAI,MAAA,GAC9D,IAAc,KAAK,IAAI,GAAG,IAAW,KAAU,EAAI,MAAM,EAAI,OAAA;EAGnE,OAAO,OAAO,EAAM,OAAO;GAC1B,YAAY;GACZ,KAAK,GAAG,EAAA;GACR,MAAM,GAAG,EAAA;GACT,UAAU,GAAG,EAAI,MAAA;GACjB,OAAO,GAAG,EAAA;GACV,QAAQ,GAAG,EAAA;GACX,UAAU;GACV,WAAW;GACX,UAAU,SAAS,EAAA,KAAc,EAAA,KAAgB,EAAA,KAAiB,EAAA;EAAA,CAAA,GAInE,KAAK,YAAY,GAAU,GAAY,GAAa,GAAW,CAAA;CAChE;CAGA,MAAA,aAAmB,GAAA;EAAA,MACZ,KAAK,aAAa,CAAA,GACxB,KAAK,SAAA,CAAS,GACd,KAAK,cAAc;CACpB;CAEA,YAAoB,GAAkB,GAAoB,GAAqB,GAAmB,GAAA;EACjG,IAAM,IAAQ,KAAK,SAAS;EAC5B,IAAA,CAAK,GAAO;EAEZ,IAAI,EAAe,OAElB,OAAA,MADA,EAAM,MAAM,WAAW;EAIxB,IAAM,IAAW,KAAK,YAAY;EAC9B,KACH,EAAS,QAAQ,CAAC,EAAE,SAAS,EAAA,GAAK,EAAE,SAAS,EAAA,CAAA,GAAM;GAClD,UAAU,EAAc;GACxB,QAAQ,EAAc;GACtB,MAAM;EAAA,CAAA;EAIR,IAAM,IAAwB,CAC7B;GACC,UAAU,SAAS,EAAA,KAAc,EAAA,KAAgB,EAAA,KAAiB,EAAA;GAClE,SAAS;EAAA,GAEV;GACC,UAAU;GACV,SAAS;EAAA,CAAA;EAYX,EARmB,QAAQ,GAAW;GACrC,UAAU,EAAc;GACxB,QAAQ,EAAc;GACtB,MAAM;EAAA,CAAA,EAKF,SAAS,WAAA;GACT,EAAM,gBACT,EAAM,MAAM,WAAW,IACvB,EAAM,MAAM,SAAS,QACrB,EAAM,MAAM,YAAe,OAAO,cAAc,IAAW,KAAnC;EAAA,CAAA;EAK1B,IAAM,IAAM,KAAK,OAAO;EACpB,KACH,EAAI,QAAQ,CAAC,EAAE,WAAW,eAAA,GAAkB,EAAE,WAAW,iBAAA,CAAA,GAAqB;GAC7E,UAAU,EAAc;GACxB,QAAQ,EAAc;GACtB,MAAM;EAAA,CAAA;CAGT;CAEA,aAAqB,GAAA;EACpB,IAAM,IAAQ,KAAK,SAAS;EAE5B,IADA,CAAK,KACD,EAAe,OAAO,OAAO,QAAQ,QAAA;EAGzC,IAAM,IAAY,EAAM,sBAAA,GAClB,IAAW,KAAK,IAAI,GAAG,EAAW,MAAM,EAAU,GAAA,GAClD,IAAY,KAAK,IAAI,GAAG,EAAW,OAAO,EAAU,IAAA,GACpD,IAAa,KAAK,IAAI,GAAG,EAAU,QAAQ,EAAW,KAAA,GACtD,IAAc,KAAK,IAAI,GAAG,EAAU,SAAS,EAAW,MAAA,GAExD,IAAgB,KAAK,MAA+B,KAAzB,EAAc,QAAA,GACzC,IAAc,8BAEd,IAA6B,CAClC;GAAE,UAAU;GAAqC,SAAS;EAAA,GAC1D;GACC,UAAU,SAAS,EAAA,KAAc,EAAA,KAAgB,EAAA,KAAiB,EAAA;GAClE,SAAS;EAAA,CAAA,GAIL,IAAO,EAAM,QAAQ,GAAgB;GAAE,UAAU;GAAe,QAAQ;GAAa,MAAM;EAAA,CAAA,GAE3F,IAAW,KAAK,YAAY;EAC9B,KACH,EAAS,QAAQ,CAAC,EAAE,SAAS,EAAA,GAAK,EAAE,SAAS,EAAA,CAAA,GAAM;GAClD,UAAU;GACV,QAAQ;GACR,MAAM;EAAA,CAAA;EAIR,IAAM,IAAM,KAAK,OAAO;EASxB,OARI,KACH,EAAI,QAAQ,CAAC,EAAE,WAAW,iBAAA,GAAoB,EAAE,WAAW,eAAA,CAAA,GAAmB;GAC7E,UAAU;GACV,QAAQ;GACR,MAAM;EAAA,CAAA,GAID,EAAK;CACb;CAEA,SAAA;EACC,OAAK,KAAK,SAEH,CAAI;KACR,KAAK,WACJ,CAAI;;SAED,EAAI,KAAK,WAAA,EAAA;;sBAEI,KAAK,OAAO,QAAA,EAAA;;SAG5B,EAAA;uBACiB,EAAI,KAAK,QAAA,EAAA,6BAAuC,KAAK,KAAA;MACrE,KAAK,gBAmBL,IAlBA,CAAI;;UAED,EAAI,KAAK,MAAA,EAAA;;;uBAGI,KAAK,OAAO,QAAA,EAAA;;;;;;;;;;;;;;;MAnBR;CAoC1B;AAAA;AAAA,EAAA,CApOC,EAAS,EAAE,SAAA,CAAS,EAAA,CAAA,CAAA,GAAM,EAAA,WAAA,QAAA,KAAA,CAAA,GAAA,EAAA,CAC1B,EAAA,CAAA,GAAM,EAAA,WAAA,UAAA,KAAA,CAAA,GAAA,IAAA,EAAA,CA7CP,EAAc,sBAAA,CAAA,GAAsB,CAAA;ACGrC,IAAa,IAAgC,iCAG9B,IAAA,cAA6B,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,CAAA,GAAA,KAAA,UAqCrB,IAAA,KAAA,OAAA,CAE6B,GAAA,KAAA,iBAEU,IAAA,KAAA,iBAEA,IAAA,KAAA,gBAAA,CAEa,GAAA,KAAA,kBAEG,IAAA,KAAA,WAAA,CAErC,GAAA,KAAA,SAAA,CAEF,GAAA,KAAA,aAEjB,EAAA,GAAA,KAAA,iBACI,EAAA,GAAA,KAAA,OACiB,MAAA,KAAA,aACV,CAAA;CAAA;CAAA;EAAA,KAAA,SAvDhB,CACf,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDJ,oBAAA;EACC,MAAM,kBAAA,GAGN,EAAyB,QAAQ,SAAA,EAC/B,KACA,GAAO,MAAK,EAAE,QAAQ,QAAR,GACd,QAAa,KAAK,IAAA,GAClB,QAAA;GAAe,KAAK,YAAA;EAAA,CAAA,GACpB,EAAU,KAAK,aAAA,CAAA,EAEf,UAAA,GAGF,EAAwB,UAAU,aAAA,EAChC,KACA,QAAa,KAAK,IAAA,GAClB,GAAO,MAAA,CAAA,CAAO,KAAK,QAAA,CAAS,EAAE,aAAA,EAAe,SAAS,KAAK,IAAA,CAAA,GAC3D,QAAA;GAAe,KAAK,YAAA;EAAA,CAAA,GACpB,EAAU,KAAK,aAAA,CAAA,EAEf,UAAA;CACH;CAEA,uBAAA;EACC,MAAM,qBAAA,GACF,KAAK,WAAW,SAAS,MAC5B,KAAK,WAAW,SAAQ,MAAK,KAAK,YAAY,CAAA,CAAA,GAC9C,KAAK,aAAa,CAAA,IAEf,KAAK,QAAQ,KAAK,KAAK,SAAS,WAAW,MAC9C,KAAK,KAAK,OAAA,GACV,KAAK,OAAO;CAEd;CAEA,MAAA,kBAAc;EAEb,IAAM,IAAA,MADc,EAAc,KAAK,SAAsB,gBAAA,CAAA,KACrB,SAAS,cAAc,gBAAA,KAAqB,SAAS,MACzF,IAAO,EAAU,cAAc,sBAAA;EAKnC,OAJK,MACJ,IAAO,IAAI,KACX,EAAU,YAAY,CAAA,IAEhB;CACR;CAGA,QAAA;EACC,KAAU,YAAA;CACX;CAGA,SAAA;EACK,KAAK,QACT,KAAU,aAAA;CACX;CAEA,QAA2B,GAAA;EAC1B,MAAM,QAAQ,CAAA,GACV,EAAQ,IAAI,MAAA,KAAW,KAAK,QAAA,CAAS,KAAK,UAAA,CAAW,KAAK,QAC7D,KAAU,aAAA;CAEZ;CAEA,SAAA;EACK,KAAK,UACR,KAAK,OAAA,CAAQ,KAAK,MAClB,KAAK,iBAAiB,KAAK,IAAA,KAChB,KAAK,QAChB,KAAU,aAAA;CAEZ;CAEA,mBAA2B,GAAA;EAC1B,EAAE,eAAA,GACF,KAAK,OAAA;CACN;CAEA,MAAA,eAAc;EACb,IAAI,KAAK,QAGR,OAFA,KAAK,OAAA,CAAO,GAAA,KACZ,KAAK,iBAAA,CAAiB,CAAA;EAIvB,IAAM,IAAA,MAAa,KAAK,gBAAA;EACxB,KAAK,OAAO;EACZ,IAAM,IAAU,KAAK,WAAW,OAC1B,IAAc,KAAK,eAAe;EACxC,IAAA,CAAK,KAAA,CAAY,GAAa;EAE9B,IAAM,IAAc,EAAQ,sBAAA,GACtB,IAAQ,EAAY,iBAAiB,EAAE,SAAA,CAAS,EAAA,CAAA;EACjC,AAAjB,EAAM,WAAW,MAErB,EAAK,QAAQ,GAAa,MAAM,KAAK,eAAe,KAAK,QAAA,GAEzD,KAAK,aAAa,CAAA,GAAI,CAAA,GACtB,KAAK,WAAW,SAAQ,MAAK,EAAK,YAAY,CAAA,CAAA,GAE9C,EAAK,YAAA,GAEL,KAAK,iBAAA,CAAiB,CAAA,GACtB,KAAK,OAAA,CAAO;CACb;CAEA,MAAA,cAAM;EACL,IAAI,KAAK,QAGR,OAFA,KAAK,iBAAA,CAAiB,CAAA,GAAA,MACtB,KAAK,OAAA,CAAO;EAIb,IAAM,IAAO,KAAK,MACZ,IAAU,KAAK,WAAW;EAChC,IAAA,CAAK,KAAA,CAAS,GAAS;EAEvB,IAAM,IAAc,EAAQ,sBAAA;EAC5B,KAAK,iBAAA,CAAiB,CAAA,GAAA,MAEhB,EAAK,aAAa,CAAA,GAExB,KAAK,WAAW,SAAQ,MAAK,KAAK,YAAY,CAAA,CAAA,GAC9C,KAAK,aAAa,CAAA,GAClB,KAAK,OAAA,CAAO;CACb;CAEA,iBAAyB,GAAA;EACxB,IAAI,EAAe,OAAO;EAE1B,IAAM,IAAY,KAAK,YAAY,cAAc,YAAA;EAC5C,MAEL,KAAK,sBAAsB,OAAA,GAC3B,KAAK,uBAAuB,EAAU,QACrC,CACC,EAAE,WAAW,UAAU,IAAS,SAAS,GAAG,KAAK,gBAAA,KAAA,GAAA,GACjD,EAAE,WAAW,UAAU,IAAS,GAAG,KAAK,gBAAA,OAAuB,OAAA,GAAA,CAAA,GAEhE;GACC,UAAU,EAAc;GACxB,QAAQ,EAAc;GACtB,MAAM;EAAA,CAAA;CAGT;CAEA,SAAA;EACC,IAAM,IAAiB,KAAK,SAAS;IACnC,KAAK,iBAAA,CAAiB;GACvB,uFAAA,CAAuF;GACvF,yEAAA,CAAyE;GACzE,oBAAA,CAAoB;EAAA,CAAA;EAGrB,OAAO,CAAI;;;OAGN,EAAI,KAAK,UAAA,EAAA;aACH,EAAA;;;cAGC,KAAK,mBAAA;iBACF,MAAA;GACG,AAAV,EAAE,QAAQ,WAAW,EAAE,QAAQ,QAClC,EAAE,eAAA,GACF,KAAK,OAAA;EAAA,EAAA;;OAIJ,KAAK,gBAgBL,IAfA,CAAI;;;;;;;;;;;;;;;;;6BAkBiB,KAAK,QAAA;;;;;;MAM5B,KAAK,SACJ,CAAI;6CACkC,KAAK,KAAA;;iBAEjC,EAAI,KAAK,cAAA,EAAA;;;UAInB,CAAI;oBACS,EAAS,KAAK,OAAO,CAAC,IAAI,EAAE,SAAS,OAAA,CAAA,EAAA;gBACzC,EAAI,KAAK,cAAA,EAAA;;;;;CAKxB;AAAA;AAAA,EAAA,CAzOC,EAAA,CAAA,GAAS,EAAA,WAAA,WAAA,KAAA,CAAA,GAAA,EAAA,CAET,EAAS;CAAE,MAAM;CAAS,SAAA,CAAS;AAAA,CAAA,CAAA,GAAM,EAAA,WAAA,QAAA,KAAA,CAAA,GAAA,EAAA,CAEzC,EAAS,EAAE,WAAW,kBAAA,CAAA,CAAA,GAAmB,EAAA,WAAA,kBAAA,KAAA,CAAA,GAAA,EAAA,CAEzC,EAAS,EAAE,WAAW,kBAAA,CAAA,CAAA,GAAmB,EAAA,WAAA,kBAAA,KAAA,CAAA,GAAA,EAAA,CAEzC,EAAS;CAAE,MAAM;CAAS,WAAW;AAAA,CAAA,CAAA,GAAkB,EAAA,WAAA,iBAAA,KAAA,CAAA,GAAA,EAAA,CAEvD,EAAS;CAAE,MAAM;CAAQ,WAAW;AAAA,CAAA,CAAA,GAAoB,EAAA,WAAA,mBAAA,KAAA,CAAA,GAAA,EAAA,CAExD,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,GAAS,EAAA,WAAA,YAAA,KAAA,CAAA,GAAA,EAAA,CAE1B,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,GAAS,EAAA,WAAA,UAAA,KAAA,CAAA,GAAA,IAAA,EAAA,CApD3B,EAAc,iBAAA,CAAA,GAAiB,CAAA;AAAA,SAAA,KAAA,GAAA,KAAA"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-CeKrBW2j.cjs`),t=require(`./mixins-Cjn20BQH.cjs`),n=require(`./animation-CCOIW4wJ.cjs`),r=require(`./reduced-motion-Ds-HjMzn.cjs`);require(`./surface-COBvWWFb.cjs`);let i=require(`rxjs`),a=require(`rxjs/operators`),o=require(`lit/directives/style-map.js`),s=require(`lit/decorators.js`),c=require(`lit`),l=require(`lit/directives/ref.js`);var u=class extends t.t(e.t){constructor(...e){super(...e),this.type=`containerLowest`,this.isOpen=!1,this.summaryRect=null,this.panelRef=(0,l.createRef)(),this.backdropRef=(0,l.createRef)(),this.btnRef=(0,l.createRef)(),this.owner=null,this.hideIndicator=!1,this.backdrop=!0}static{this.styles=[c.css`
|
|
2
|
+
:host {
|
|
3
|
+
display: contents;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.portal-panel {
|
|
7
|
+
position: fixed;
|
|
8
|
+
transform-origin: top left;
|
|
9
|
+
will-change: clip-path, opacity;
|
|
10
|
+
border-radius: 1rem;
|
|
11
|
+
box-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.5);
|
|
12
|
+
z-index: 9999;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.minimize-btn {
|
|
16
|
+
position: absolute;
|
|
17
|
+
top: 0.5rem;
|
|
18
|
+
right: 0.5rem;
|
|
19
|
+
z-index: 1;
|
|
20
|
+
display: flex;
|
|
21
|
+
align-items: center;
|
|
22
|
+
justify-content: center;
|
|
23
|
+
width: 2rem;
|
|
24
|
+
height: 2rem;
|
|
25
|
+
border-radius: 9999px;
|
|
26
|
+
border: none;
|
|
27
|
+
background: transparent;
|
|
28
|
+
cursor: pointer;
|
|
29
|
+
opacity: 0.5;
|
|
30
|
+
transition:
|
|
31
|
+
opacity 150ms,
|
|
32
|
+
background 150ms;
|
|
33
|
+
color: inherit;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.minimize-btn:hover {
|
|
37
|
+
opacity: 1;
|
|
38
|
+
background: rgb(0 0 0 / 0.08);
|
|
39
|
+
}
|
|
40
|
+
`]}prepare(e,t,n=!1,r=!0){this.summaryRect=e,this.owner=t,this.hideIndicator=n,this.backdrop=r}async triggerOpen(){this.isOpen=!0,await this.updateComplete;let e=this.panelRef.value;if(!e)return;let t=this.summaryRect;Object.assign(e.style,{visibility:`hidden`,top:`${t.top}px`,left:`${t.left}px`,minWidth:`${t.width}px`,width:`max-content`,maxWidth:window.innerWidth-t.left+`px`,height:`auto`,maxHeight:window.innerHeight-32+`px`,overflowY:`auto`});let n=e.getBoundingClientRect(),r=n.width,i=n.height,a=t.top,o=t.left;a+i>window.innerHeight&&(a=Math.max(0,t.bottom-i)),o+r>window.innerWidth&&(o=Math.max(0,window.innerWidth-r));let s=Math.max(0,t.top-a),c=Math.max(0,t.left-o),l=Math.max(0,o+r-(t.left+t.width)),u=Math.max(0,a+i-(t.top+t.height));Object.assign(e.style,{visibility:``,top:`${a}px`,left:`${o}px`,minWidth:`${t.width}px`,width:`${r}px`,height:`${i}px`,maxWidth:``,maxHeight:``,clipPath:`inset(${s}px ${l}px ${u}px ${c}px round 0.5rem)`}),this.animateOpen(s,l,u,c,a)}async triggerClose(e){await this.animateClose(e),this.isOpen=!1,this.summaryRect=null}animateOpen(e,t,i,a,o){let s=this.panelRef.value;if(!s)return;if(r.t.value)return void(s.style.clipPath=``);let c=this.backdropRef.value;c&&c.animate([{opacity:0},{opacity:1}],{duration:n.d.duration,easing:n.d.easingFallback,fill:`forwards`});let l=[{clipPath:`inset(${e}px ${t}px ${i}px ${a}px round 0.5rem)`,opacity:.9},{clipPath:`inset(0px 0px 0px 0px round 1rem)`,opacity:1}];s.animate(l,{duration:n.d.duration,easing:n.d.easingFallback,fill:`forwards`}).finished.then(()=>{s.isConnected&&(s.style.clipPath=``,s.style.height=`auto`,s.style.maxHeight=window.innerHeight-o-16+`px`)});let u=this.btnRef.value;u&&u.animate([{transform:`rotate(0deg)`},{transform:`rotate(180deg)`}],{duration:n.d.duration,easing:n.d.easingFallback,fill:`forwards`})}animateClose(e){let t=this.panelRef.value;if(!t||r.t.value)return Promise.resolve();let i=t.getBoundingClientRect(),a=Math.max(0,e.top-i.top),o=Math.max(0,e.left-i.left),s=Math.max(0,i.right-e.right),c=Math.max(0,i.bottom-e.bottom),l=Math.round(.4*n.d.duration),u=`cubic-bezier(0.4, 0, 1, 1)`,d=[{clipPath:`inset(0px 0px 0px 0px round 1rem)`,opacity:1},{clipPath:`inset(${a}px ${s}px ${c}px ${o}px round 0.5rem)`,opacity:.6}],f=t.animate(d,{duration:l,easing:u,fill:`forwards`}),p=this.backdropRef.value;p&&p.animate([{opacity:1},{opacity:0}],{duration:l,easing:u,fill:`forwards`});let m=this.btnRef.value;return m&&m.animate([{transform:`rotate(180deg)`},{transform:`rotate(0deg)`}],{duration:l,easing:u,fill:`forwards`}),f.finished}render(){return this.isOpen?c.html`
|
|
41
|
+
${this.backdrop?c.html`
|
|
42
|
+
<div
|
|
43
|
+
${(0,l.ref)(this.backdropRef)}
|
|
44
|
+
class="fixed inset-0 z-9998 backdrop-blur-sm backdrop-saturate-150 backdrop-brightness-105 bg-black/[0.07] will-change-[opacity]"
|
|
45
|
+
@click=${()=>this.owner?.close?.()}
|
|
46
|
+
></div>
|
|
47
|
+
`:c.nothing}
|
|
48
|
+
<schmancy-surface ${(0,l.ref)(this.panelRef)} class="portal-panel" type=${this.type} style="overflow-y: auto;">
|
|
49
|
+
${this.hideIndicator?c.nothing:c.html`
|
|
50
|
+
<button
|
|
51
|
+
${(0,l.ref)(this.btnRef)}
|
|
52
|
+
class="minimize-btn"
|
|
53
|
+
aria-label="Minimize"
|
|
54
|
+
@click=${()=>this.owner?.close?.()}
|
|
55
|
+
>
|
|
56
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" aria-hidden="true">
|
|
57
|
+
<path
|
|
58
|
+
d="M19 9L12 16L5 9"
|
|
59
|
+
stroke="currentColor"
|
|
60
|
+
stroke-width="2"
|
|
61
|
+
stroke-linecap="round"
|
|
62
|
+
stroke-linejoin="round"
|
|
63
|
+
/>
|
|
64
|
+
</svg>
|
|
65
|
+
</button>
|
|
66
|
+
`}
|
|
67
|
+
<slot></slot>
|
|
68
|
+
</schmancy-surface>
|
|
69
|
+
`:c.nothing}};e.u([(0,s.property)({reflect:!0})],u.prototype,`type`,void 0),e.u([(0,s.state)()],u.prototype,`isOpen`,void 0),u=e.u([(0,s.customElement)(`schmancy-expand-root`)],u);var d=class extends e.t{constructor(...e){super(...e),this.summary=``,this.open=!1,this.summaryPadding=``,this.contentPadding=``,this.hideIndicator=!1,this.indicatorRotate=90,this.backdrop=!0,this.inline=!1,this.summaryRef=(0,l.createRef)(),this.contentSlotRef=(0,l.createRef)(),this.root=null,this.movedNodes=[]}static{this.styles=[c.css`
|
|
70
|
+
:host {
|
|
71
|
+
display: block;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
summary::-webkit-details-marker {
|
|
75
|
+
display: none;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
summary {
|
|
79
|
+
list-style: none;
|
|
80
|
+
color: inherit;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.inline-grid {
|
|
84
|
+
display: grid;
|
|
85
|
+
grid-template-rows: 0fr;
|
|
86
|
+
overflow: hidden;
|
|
87
|
+
transition:
|
|
88
|
+
grid-template-rows 300ms cubic-bezier(0.22, 1.25, 0.36, 1),
|
|
89
|
+
opacity 300ms cubic-bezier(0.22, 1.25, 0.36, 1);
|
|
90
|
+
opacity: 0;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.inline-grid[data-open] {
|
|
94
|
+
grid-template-rows: 1fr;
|
|
95
|
+
opacity: 1;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.inline-grid > .inner {
|
|
99
|
+
min-height: 0;
|
|
100
|
+
overflow: hidden;
|
|
101
|
+
}
|
|
102
|
+
`]}connectedCallback(){super.connectedCallback(),(0,i.fromEvent)(window,`keydown`).pipe((0,i.filter)(e=>e.key===`Escape`),(0,i.filter)(()=>this.open),(0,a.tap)(()=>{this.handleClose()}),(0,a.takeUntil)(this.disconnecting)).subscribe(),(0,i.fromEvent)(document,`pointerdown`).pipe((0,i.filter)(()=>this.open),(0,i.filter)(e=>!!this.root&&!e.composedPath().includes(this.root)),(0,a.tap)(()=>{this.handleClose()}),(0,a.takeUntil)(this.disconnecting)).subscribe()}disconnectedCallback(){super.disconnectedCallback(),this.movedNodes.length>0&&(this.movedNodes.forEach(e=>this.appendChild(e)),this.movedNodes=[]),this.root&&this.root.children.length===0&&(this.root.remove(),this.root=null)}async getOrCreateRoot(){let e=await(0,i.lastValueFrom)(this.discover(`schmancy-theme`))??document.querySelector(`schmancy-theme`)??document.body,t=e.querySelector(`schmancy-expand-root`);return t||(t=new u,e.appendChild(t)),t}close(){this.handleClose()}expand(){this.open||this.expandPortal()}updated(e){super.updated(e),e.has(`open`)&&this.open&&!this.inline&&!this.root&&this.expandPortal()}toggle(){this.inline?(this.open=!this.open,this.animateIndicator(this.open)):this.open||this.expandPortal()}handleSummaryClick(e){e.preventDefault(),this.toggle()}async expandPortal(){if(this.inline)return this.open=!0,void this.animateIndicator(!0);let e=await this.getOrCreateRoot();this.root=e;let t=this.summaryRef.value,n=this.contentSlotRef.value;if(!t||!n)return;let r=t.getBoundingClientRect(),i=n.assignedElements({flatten:!0});i.length!==0&&(e.prepare(r,this,this.hideIndicator,this.backdrop),this.movedNodes=[...i],this.movedNodes.forEach(t=>e.appendChild(t)),e.triggerOpen(),this.animateIndicator(!0),this.open=!0)}async handleClose(){if(this.inline)return this.animateIndicator(!1),void(this.open=!1);let e=this.root,t=this.summaryRef.value;if(!e||!t)return;let n=t.getBoundingClientRect();this.animateIndicator(!1),await e.triggerClose(n),this.movedNodes.forEach(e=>this.appendChild(e)),this.movedNodes=[],this.open=!1}animateIndicator(e){if(r.t.value)return;let t=this.shadowRoot?.querySelector(`.indicator`);t&&(this.currentIndicatorAnim?.cancel(),this.currentIndicatorAnim=t.animate([{transform:`rotate(${e?`0deg`:`${this.indicatorRotate}deg`})`},{transform:`rotate(${e?`${this.indicatorRotate}deg`:`0deg`})`}],{duration:n.f.duration,easing:n.f.easingFallback,fill:`forwards`}))}render(){let e=this.classMap({[this.summaryPadding]:!0,"select-none relative flex items-center gap-2 rounded-xl transition-all duration-150":!0,"hover:brightness-[0.92] active:brightness-[0.85] cursor-pointer group":!0,"flex-row-reverse":!0});return c.html`
|
|
103
|
+
<div class="w-full rounded-xl">
|
|
104
|
+
<div
|
|
105
|
+
${(0,l.ref)(this.summaryRef)}
|
|
106
|
+
class=${e}
|
|
107
|
+
tabindex="0"
|
|
108
|
+
role="button"
|
|
109
|
+
@click=${this.handleSummaryClick}
|
|
110
|
+
@keydown=${e=>{e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),this.toggle())}}
|
|
111
|
+
>
|
|
112
|
+
${this.hideIndicator?c.nothing:c.html`
|
|
113
|
+
<span
|
|
114
|
+
class="indicator flex items-center justify-center w-5 h-5 rounded-full shrink-0 opacity-70 group-hover:opacity-100 will-change-transform"
|
|
115
|
+
>
|
|
116
|
+
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true">
|
|
117
|
+
<path
|
|
118
|
+
d="M9 6L15 12L9 18"
|
|
119
|
+
stroke="currentColor"
|
|
120
|
+
stroke-width="2"
|
|
121
|
+
stroke-linecap="round"
|
|
122
|
+
stroke-linejoin="round"
|
|
123
|
+
/>
|
|
124
|
+
</svg>
|
|
125
|
+
</span>
|
|
126
|
+
`}
|
|
127
|
+
|
|
128
|
+
<span class="flex-1 font-medium text-base min-w-0">
|
|
129
|
+
<slot name="summary">${this.summary}</slot>
|
|
130
|
+
</span>
|
|
131
|
+
|
|
132
|
+
<slot name="actions"></slot>
|
|
133
|
+
</div>
|
|
134
|
+
|
|
135
|
+
${this.inline?c.html`
|
|
136
|
+
<div class="inline-grid" ?data-open=${this.open}>
|
|
137
|
+
<div class="inner">
|
|
138
|
+
<slot ${(0,l.ref)(this.contentSlotRef)}></slot>
|
|
139
|
+
</div>
|
|
140
|
+
</div>
|
|
141
|
+
`:c.html`
|
|
142
|
+
<div style=${(0,o.styleMap)(this.open?{}:{display:`none`})}>
|
|
143
|
+
<slot ${(0,l.ref)(this.contentSlotRef)}></slot>
|
|
144
|
+
</div>
|
|
145
|
+
`}
|
|
146
|
+
</div>
|
|
147
|
+
`}};e.u([(0,s.property)()],d.prototype,`summary`,void 0),e.u([(0,s.property)({type:Boolean,reflect:!0})],d.prototype,`open`,void 0),e.u([(0,s.property)({attribute:`summary-padding`})],d.prototype,`summaryPadding`,void 0),e.u([(0,s.property)({attribute:`content-padding`})],d.prototype,`contentPadding`,void 0),e.u([(0,s.property)({type:Boolean,attribute:`hide-indicator`})],d.prototype,`hideIndicator`,void 0),e.u([(0,s.property)({type:Number,attribute:`indicator-rotate`})],d.prototype,`indicatorRotate`,void 0),e.u([(0,s.property)({type:Boolean})],d.prototype,`backdrop`,void 0),e.u([(0,s.property)({type:Boolean})],d.prototype,`inline`,void 0),d=e.u([(0,s.customElement)(`schmancy-expand`)],d),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return`schmancy-expand-request-close`}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expand-D0YdR9nR.cjs","names":[],"sources":["../src/expand/expand-root.component.ts","../src/expand/expand.component.ts"],"sourcesContent":["import { css, html, nothing } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { SchmancyElement, SurfaceMixin } from '@mixins/index'\nimport type { TSurfaceColor } from '@schmancy/types'\nimport { SPRING_SMOOTH } from '../utils/animation.js'\nimport { reducedMotion$ } from '../directives/reduced-motion'\nimport '../surface/surface.js'\n\n@customElement('schmancy-expand-root')\nexport class SchmancyExpandRoot extends SurfaceMixin(SchmancyElement) {\n\tstatic styles = [\n\t\tcss`\n\t\t\t:host {\n\t\t\t\tdisplay: contents;\n\t\t\t}\n\n\t\t\t.portal-panel {\n\t\t\t\tposition: fixed;\n\t\t\t\ttransform-origin: top left;\n\t\t\t\twill-change: clip-path, opacity;\n\t\t\t\tborder-radius: 1rem;\n\t\t\t\tbox-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.5);\n\t\t\t\tz-index: 9999;\n\t\t\t}\n\n\t\t\t.minimize-btn {\n\t\t\t\tposition: absolute;\n\t\t\t\ttop: 0.5rem;\n\t\t\t\tright: 0.5rem;\n\t\t\t\tz-index: 1;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\twidth: 2rem;\n\t\t\t\theight: 2rem;\n\t\t\t\tborder-radius: 9999px;\n\t\t\t\tborder: none;\n\t\t\t\tbackground: transparent;\n\t\t\t\tcursor: pointer;\n\t\t\t\topacity: 0.5;\n\t\t\t\ttransition:\n\t\t\t\t\topacity 150ms,\n\t\t\t\t\tbackground 150ms;\n\t\t\t\tcolor: inherit;\n\t\t\t}\n\n\t\t\t.minimize-btn:hover {\n\t\t\t\topacity: 1;\n\t\t\t\tbackground: rgb(0 0 0 / 0.08);\n\t\t\t}\n\t\t`,\n\t]\n\t@property({ reflect: true }) override type: TSurfaceColor = 'containerLowest'\n\t@state() isOpen = false\n\tprivate summaryRect: DOMRect | null = null\n\n\tprivate panelRef = createRef<HTMLElement>()\n\tprivate backdropRef = createRef<HTMLDivElement>()\n\tprivate btnRef = createRef<HTMLButtonElement>()\n\tprivate owner: (Element & { close?: () => void }) | null = null\n\tprivate hideIndicator = false\n\tprivate backdrop = true\n\n\t/** Called by schmancy-expand before nodes are moved */\n\tprepare(rect: DOMRect, owner: Element, hideIndicator = false, backdrop = true) {\n\t\tthis.summaryRect = rect\n\t\tthis.owner = owner as Element & { close?: () => void }\n\t\tthis.hideIndicator = hideIndicator\n\t\tthis.backdrop = backdrop\n\t}\n\n\t/** Called by schmancy-expand after nodes are moved in */\n\tasync triggerOpen() {\n\t\tthis.isOpen = true\n\t\tawait this.updateComplete\n\n\t\tconst panel = this.panelRef.value\n\t\tif (!panel) return\n\n\t\tconst src = this.summaryRect!\n\n\t\t// 1. Anchor at summary's top-left, measure natural content size\n\t\t// Use nearly full viewport height for measurement so content near the bottom\n\t\t// of the screen isn't artificially capped — the positioning step will move the panel up.\n\t\tObject.assign(panel.style, {\n\t\t\tvisibility: 'hidden',\n\t\t\ttop: `${src.top}px`,\n\t\t\tleft: `${src.left}px`,\n\t\t\tminWidth: `${src.width}px`,\n\t\t\twidth: 'max-content',\n\t\t\tmaxWidth: `${window.innerWidth - src.left}px`,\n\t\t\theight: 'auto',\n\t\t\tmaxHeight: `${window.innerHeight - 32}px`,\n\t\t\toverflowY: 'auto',\n\t\t})\n\n\t\tconst measured = panel.getBoundingClientRect()\n\t\tconst finalW = measured.width\n\t\tconst finalH = measured.height\n\n\t\t// 2. Adjust position so panel stays within viewport\n\t\tlet finalTop = src.top\n\t\tlet finalLeft = src.left\n\t\tif (finalTop + finalH > window.innerHeight) {\n\t\t\tfinalTop = Math.max(0, src.bottom - finalH)\n\t\t}\n\t\tif (finalLeft + finalW > window.innerWidth) {\n\t\t\tfinalLeft = Math.max(0, window.innerWidth - finalW)\n\t\t}\n\n\t\t// 3. Compute clip-path insets — summary rect expressed relative to panel final position\n\t\t// These insets shrink the visible area down to exactly the summary box\n\t\tconst insetTop = Math.max(0, src.top - finalTop)\n\t\tconst insetLeft = Math.max(0, src.left - finalLeft)\n\t\tconst insetRight = Math.max(0, finalLeft + finalW - (src.left + src.width))\n\t\tconst insetBottom = Math.max(0, finalTop + finalH - (src.top + src.height))\n\n\t\t// 4. Place panel at final size + position, masked to summary bounds (no flash)\n\t\tObject.assign(panel.style, {\n\t\t\tvisibility: '',\n\t\t\ttop: `${finalTop}px`,\n\t\t\tleft: `${finalLeft}px`,\n\t\t\tminWidth: `${src.width}px`,\n\t\t\twidth: `${finalW}px`,\n\t\t\theight: `${finalH}px`,\n\t\t\tmaxWidth: '',\n\t\t\tmaxHeight: '',\n\t\t\tclipPath: `inset(${insetTop}px ${insetRight}px ${insetBottom}px ${insetLeft}px round 0.5rem)`,\n\t\t})\n\n\t\t// 5. Animate the mask open — content revealed, not stretched\n\t\tthis.animateOpen(insetTop, insetRight, insetBottom, insetLeft, finalTop)\n\t}\n\n\t/** Animate close, return Promise resolving when done */\n\tasync triggerClose(targetRect: DOMRect): Promise<void> {\n\t\tawait this.animateClose(targetRect)\n\t\tthis.isOpen = false\n\t\tthis.summaryRect = null\n\t}\n\n\tprivate animateOpen(insetTop: number, insetRight: number, insetBottom: number, insetLeft: number, finalTop: number) {\n\t\tconst panel = this.panelRef.value\n\t\tif (!panel) return\n\n\t\tif (reducedMotion$.value) {\n\t\t\tpanel.style.clipPath = ''\n\t\t\treturn\n\t\t}\n\n\t\tconst backdrop = this.backdropRef.value\n\t\tif (backdrop) {\n\t\t\tbackdrop.animate([{ opacity: 0 }, { opacity: 1 }], {\n\t\t\t\tduration: SPRING_SMOOTH.duration,\n\t\t\t\teasing: SPRING_SMOOTH.easingFallback,\n\t\t\t\tfill: 'forwards',\n\t\t\t})\n\t\t}\n\n\t\tconst keyframes: Keyframe[] = [\n\t\t\t{\n\t\t\t\tclipPath: `inset(${insetTop}px ${insetRight}px ${insetBottom}px ${insetLeft}px round 0.5rem)`,\n\t\t\t\topacity: 0.9,\n\t\t\t},\n\t\t\t{\n\t\t\t\tclipPath: 'inset(0px 0px 0px 0px round 1rem)',\n\t\t\t\topacity: 1,\n\t\t\t},\n\t\t]\n\n\t\tconst anim = panel.animate(keyframes, {\n\t\t\tduration: SPRING_SMOOTH.duration,\n\t\t\teasing: SPRING_SMOOTH.easingFallback,\n\t\t\tfill: 'forwards',\n\t\t})\n\n\t\t// Clear clip-path and fixed dimensions after animation so content can grow naturally,\n\t\t// but cap at viewport height so overflow-y: auto can scroll\n\t\tanim.finished.then(() => {\n\t\t\tif (panel.isConnected) {\n\t\t\t\tpanel.style.clipPath = ''\n\t\t\t\tpanel.style.height = 'auto'\n\t\t\t\tpanel.style.maxHeight = `${window.innerHeight - finalTop - 16}px`\n\t\t\t}\n\t\t\treturn\n\t\t})\n\n\t\tconst btn = this.btnRef.value\n\t\tif (btn) {\n\t\t\tbtn.animate([{ transform: 'rotate(0deg)' }, { transform: 'rotate(180deg)' }], {\n\t\t\t\tduration: SPRING_SMOOTH.duration,\n\t\t\t\teasing: SPRING_SMOOTH.easingFallback,\n\t\t\t\tfill: 'forwards',\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate animateClose(targetRect: DOMRect): Promise<void> {\n\t\tconst panel = this.panelRef.value\n\t\tif (!panel) return Promise.resolve()\n\t\tif (reducedMotion$.value) return Promise.resolve()\n\n\t\t// Compute insets to mask panel back down to the summary box\n\t\tconst panelRect = panel.getBoundingClientRect()\n\t\tconst insetTop = Math.max(0, targetRect.top - panelRect.top)\n\t\tconst insetLeft = Math.max(0, targetRect.left - panelRect.left)\n\t\tconst insetRight = Math.max(0, panelRect.right - targetRect.right)\n\t\tconst insetBottom = Math.max(0, panelRect.bottom - targetRect.bottom)\n\n\t\tconst closeDuration = Math.round(SPRING_SMOOTH.duration * 0.4)\n\t\tconst closeEasing = 'cubic-bezier(0.4, 0, 1, 1)'\n\n\t\tconst closeKeyframes: Keyframe[] = [\n\t\t\t{ clipPath: 'inset(0px 0px 0px 0px round 1rem)', opacity: 1 },\n\t\t\t{\n\t\t\t\tclipPath: `inset(${insetTop}px ${insetRight}px ${insetBottom}px ${insetLeft}px round 0.5rem)`,\n\t\t\t\topacity: 0.6,\n\t\t\t},\n\t\t]\n\n\t\tconst anim = panel.animate(closeKeyframes, { duration: closeDuration, easing: closeEasing, fill: 'forwards' })\n\n\t\tconst backdrop = this.backdropRef.value\n\t\tif (backdrop) {\n\t\t\tbackdrop.animate([{ opacity: 1 }, { opacity: 0 }], {\n\t\t\t\tduration: closeDuration,\n\t\t\t\teasing: closeEasing,\n\t\t\t\tfill: 'forwards',\n\t\t\t})\n\t\t}\n\n\t\tconst btn = this.btnRef.value\n\t\tif (btn) {\n\t\t\tbtn.animate([{ transform: 'rotate(180deg)' }, { transform: 'rotate(0deg)' }], {\n\t\t\t\tduration: closeDuration,\n\t\t\t\teasing: closeEasing,\n\t\t\t\tfill: 'forwards',\n\t\t\t})\n\t\t}\n\n\t\treturn anim.finished as unknown as Promise<void>\n\t}\n\n\trender() {\n\t\tif (!this.isOpen) return nothing\n\n\t\treturn html`\n\t\t\t${this.backdrop\n\t\t\t\t? html`\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t${ref(this.backdropRef)}\n\t\t\t\t\t\t\tclass=\"fixed inset-0 z-9998 backdrop-blur-sm backdrop-saturate-150 backdrop-brightness-105 bg-black/[0.07] will-change-[opacity]\"\n\t\t\t\t\t\t\t@click=${() => this.owner?.close?.()}\n\t\t\t\t\t\t></div>\n\t\t\t\t\t`\n\t\t\t\t: nothing}\n\t\t\t<schmancy-surface ${ref(this.panelRef)} class=\"portal-panel\" type=${this.type} style=\"overflow-y: auto;\">\n\t\t\t\t${!this.hideIndicator\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t${ref(this.btnRef)}\n\t\t\t\t\t\t\t\tclass=\"minimize-btn\"\n\t\t\t\t\t\t\t\taria-label=\"Minimize\"\n\t\t\t\t\t\t\t\t@click=${() => this.owner?.close?.()}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\td=\"M19 9L12 16L5 9\"\n\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t`\n\t\t\t\t\t: nothing}\n\t\t\t\t<slot></slot>\n\t\t\t</schmancy-surface>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-expand-root': SchmancyExpandRoot\n\t}\n}\n","import { css, html, nothing } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { styleMap } from 'lit/directives/style-map.js'\nimport { filter, fromEvent, lastValueFrom } from 'rxjs'\nimport { tap, takeUntil } from 'rxjs/operators'\nimport { SchmancyElement } from '@mixins/index'\nimport { SPRING_SNAPPY } from '../utils/animation.js'\nimport { reducedMotion$ } from '../directives/reduced-motion'\nimport { SchmancyExpandRoot } from './expand-root.component.js'\n\n/** Dispatch this event on window to close whichever schmancy-expand is currently open */\nexport const SCHMANCY_EXPAND_REQUEST_CLOSE = 'schmancy-expand-request-close'\n\n@customElement('schmancy-expand')\nexport default class SchmancyExpand extends SchmancyElement {\n\tstatic styles = [\n\t\tcss`\n\t\t\t:host {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\tsummary::-webkit-details-marker {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\n\t\t\tsummary {\n\t\t\t\tlist-style: none;\n\t\t\t\tcolor: inherit;\n\t\t\t}\n\n\t\t\t.inline-grid {\n\t\t\t\tdisplay: grid;\n\t\t\t\tgrid-template-rows: 0fr;\n\t\t\t\toverflow: hidden;\n\t\t\t\ttransition:\n\t\t\t\t\tgrid-template-rows 300ms cubic-bezier(0.22, 1.25, 0.36, 1),\n\t\t\t\t\topacity 300ms cubic-bezier(0.22, 1.25, 0.36, 1);\n\t\t\t\topacity: 0;\n\t\t\t}\n\n\t\t\t.inline-grid[data-open] {\n\t\t\t\tgrid-template-rows: 1fr;\n\t\t\t\topacity: 1;\n\t\t\t}\n\n\t\t\t.inline-grid > .inner {\n\t\t\t\tmin-height: 0;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t`,\n\t]\n\t@property() summary = ''\n\n\t@property({ type: Boolean, reflect: true }) open = false\n\n\t@property({ attribute: 'summary-padding' }) summaryPadding = ''\n\n\t@property({ attribute: 'content-padding' }) contentPadding = ''\n\n\t@property({ type: Boolean, attribute: 'hide-indicator' }) hideIndicator = false\n\n\t@property({ type: Number, attribute: 'indicator-rotate' }) indicatorRotate = 90\n\n\t@property({ type: Boolean }) backdrop = true\n\n\t@property({ type: Boolean }) inline = false\n\n\tprivate summaryRef = createRef<HTMLElement>()\n\tprivate contentSlotRef = createRef<HTMLSlotElement>()\n\tprivate root: SchmancyExpandRoot | null = null\n\tprivate movedNodes: Element[] = []\n\tprivate currentIndicatorAnim: Animation | undefined\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Close on Escape key\n\t\tfromEvent<KeyboardEvent>(window, 'keydown')\n\t\t\t.pipe(\n\t\t\t\tfilter(e => e.key === 'Escape'),\n\t\t\t\tfilter(() => this.open),\n\t\t\t\ttap(() => void this.handleClose()),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\n\t\t// Close on click outside the portal panel\n\t\tfromEvent<PointerEvent>(document, 'pointerdown')\n\t\t\t.pipe(\n\t\t\t\tfilter(() => this.open),\n\t\t\t\tfilter(e => !!this.root && !e.composedPath().includes(this.root)),\n\t\t\t\ttap(() => void this.handleClose()),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tif (this.movedNodes.length > 0) {\n\t\t\tthis.movedNodes.forEach(n => this.appendChild(n))\n\t\t\tthis.movedNodes = []\n\t\t}\n\t\tif (this.root && this.root.children.length === 0) {\n\t\t\tthis.root.remove()\n\t\t\tthis.root = null\n\t\t}\n\t}\n\n\tprivate async getOrCreateRoot(): Promise<SchmancyExpandRoot> {\n\t\tconst theme = await lastValueFrom(this.discover<HTMLElement>('schmancy-theme'))\n\t\tconst container: HTMLElement = theme ?? document.querySelector('schmancy-theme') ?? document.body\n\t\tlet root = container.querySelector('schmancy-expand-root') as SchmancyExpandRoot | null\n\t\tif (!root) {\n\t\t\troot = new SchmancyExpandRoot()\n\t\t\tcontainer.appendChild(root)\n\t\t}\n\t\treturn root\n\t}\n\n\t/** Close the expand portal, animating back to the summary position. */\n\tpublic close(): void {\n\t\tvoid this.handleClose()\n\t}\n\n\t/** Programmatically open the expand portal. */\n\tpublic expand(): void {\n\t\tif (this.open) return\n\t\tvoid this.expandPortal()\n\t}\n\n\tprotected override updated(changed: Map<PropertyKey, unknown>) {\n\t\tsuper.updated(changed)\n\t\tif (changed.has('open') && this.open && !this.inline && !this.root) {\n\t\t\tvoid this.expandPortal()\n\t\t}\n\t}\n\n\tprivate toggle() {\n\t\tif (this.inline) {\n\t\t\tthis.open = !this.open\n\t\t\tthis.animateIndicator(this.open)\n\t\t} else if (!this.open) {\n\t\t\tvoid this.expandPortal()\n\t\t}\n\t}\n\n\tprivate handleSummaryClick(e: MouseEvent) {\n\t\te.preventDefault()\n\t\tthis.toggle()\n\t}\n\n\tprivate async expandPortal() {\n\t\tif (this.inline) {\n\t\t\tthis.open = true\n\t\t\tthis.animateIndicator(true)\n\t\t\treturn\n\t\t}\n\n\t\tconst root = await this.getOrCreateRoot()\n\t\tthis.root = root\n\t\tconst summary = this.summaryRef.value\n\t\tconst contentSlot = this.contentSlotRef.value\n\t\tif (!summary || !contentSlot) return\n\n\t\tconst summaryRect = summary.getBoundingClientRect()\n\t\tconst nodes = contentSlot.assignedElements({ flatten: true })\n\t\tif (nodes.length === 0) return\n\n\t\troot.prepare(summaryRect, this, this.hideIndicator, this.backdrop)\n\n\t\tthis.movedNodes = [...nodes]\n\t\tthis.movedNodes.forEach(n => root.appendChild(n))\n\n\t\troot.triggerOpen()\n\n\t\tthis.animateIndicator(true)\n\t\tthis.open = true\n\t}\n\n\tasync handleClose() {\n\t\tif (this.inline) {\n\t\t\tthis.animateIndicator(false)\n\t\t\tthis.open = false\n\t\t\treturn\n\t\t}\n\n\t\tconst root = this.root\n\t\tconst summary = this.summaryRef.value\n\t\tif (!root || !summary) return\n\n\t\tconst summaryRect = summary.getBoundingClientRect()\n\t\tthis.animateIndicator(false)\n\n\t\tawait root.triggerClose(summaryRect)\n\n\t\tthis.movedNodes.forEach(n => this.appendChild(n))\n\t\tthis.movedNodes = []\n\t\tthis.open = false\n\t}\n\n\tprivate animateIndicator(isOpen: boolean) {\n\t\tif (reducedMotion$.value) return\n\n\t\tconst indicator = this.shadowRoot?.querySelector('.indicator') as HTMLElement | null\n\t\tif (!indicator) return\n\n\t\tthis.currentIndicatorAnim?.cancel()\n\t\tthis.currentIndicatorAnim = indicator.animate(\n\t\t\t[\n\t\t\t\t{ transform: `rotate(${isOpen ? '0deg' : `${this.indicatorRotate}deg`})` },\n\t\t\t\t{ transform: `rotate(${isOpen ? `${this.indicatorRotate}deg` : '0deg'})` },\n\t\t\t],\n\t\t\t{\n\t\t\t\tduration: SPRING_SNAPPY.duration,\n\t\t\t\teasing: SPRING_SNAPPY.easingFallback,\n\t\t\t\tfill: 'forwards',\n\t\t\t},\n\t\t)\n\t}\n\n\trender() {\n\t\tconst summaryClasses = this.classMap({\n\t\t\t[this.summaryPadding]: true,\n\t\t\t'select-none relative flex items-center gap-2 rounded-xl transition-all duration-150': true,\n\t\t\t'hover:brightness-[0.92] active:brightness-[0.85] cursor-pointer group': true,\n\t\t\t'flex-row-reverse': true,\n\t\t})\n\n\t\treturn html`\n\t\t\t<div class=\"w-full rounded-xl\">\n\t\t\t\t<div\n\t\t\t\t\t${ref(this.summaryRef)}\n\t\t\t\t\tclass=${summaryClasses}\n\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\trole=\"button\"\n\t\t\t\t\t@click=${this.handleSummaryClick}\n\t\t\t\t\t@keydown=${(e: KeyboardEvent) => {\n\t\t\t\t\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\tthis.toggle()\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t${!this.hideIndicator\n\t\t\t\t\t\t? html`\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"indicator flex items-center justify-center w-5 h-5 rounded-full shrink-0 opacity-70 group-hover:opacity-100 will-change-transform\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\td=\"M9 6L15 12L9 18\"\n\t\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t`\n\t\t\t\t\t\t: nothing}\n\n\t\t\t\t\t<span class=\"flex-1 font-medium text-base min-w-0\">\n\t\t\t\t\t\t<slot name=\"summary\">${this.summary}</slot>\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<slot name=\"actions\"></slot>\n\t\t\t\t</div>\n\n\t\t\t\t${this.inline\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<div class=\"inline-grid\" ?data-open=${this.open}>\n\t\t\t\t\t\t\t\t<div class=\"inner\">\n\t\t\t\t\t\t\t\t\t<slot ${ref(this.contentSlotRef)}></slot>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`\n\t\t\t\t\t: html`\n\t\t\t\t\t\t\t<div style=${styleMap(this.open ? {} : { display: 'none' })}>\n\t\t\t\t\t\t\t\t<slot ${ref(this.contentSlotRef)}></slot>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`}\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-expand': SchmancyExpand\n\t}\n}\n"],"mappings":"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"}
|
package/dist/expand.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./expand-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./expand-D0YdR9nR.cjs`);exports.SCHMANCY_EXPAND_REQUEST_CLOSE=e.t,Object.defineProperty(exports,`SchmancyExpandRoot`,{enumerable:!0,get:function(){return e.n}});
|
package/dist/expand.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as e, t } from "./expand-
|
|
1
|
+
import { n as e, t } from "./expand-BT8mOu8Q.js";
|
|
2
2
|
export { t as SCHMANCY_EXPAND_REQUEST_CLOSE, e as SchmancyExpandRoot };
|
package/dist/fab.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-
|
|
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`);let n=require(`lit/decorators.js`),r=require(`lit`),i=require(`lit/directives/if-defined.js`),a=require(`lit/directives/when.js`);var o=class extends e.t{constructor(...e){super(...e),this.variant=`surface`,this.size=`medium`,this.label=``,this.extended=!1,this.lowered=!1}static{this.styles=[r.css`
|
|
2
2
|
:host {
|
|
3
3
|
/* M3 FAB (medium) — 16dp shape, 24dp icon, resting level 3 */
|
|
4
4
|
display: inline-flex;
|