@mhmo91/schmancy 0.10.28 → 0.10.30
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 +7 -2
- package/dist/SchmancyElement-BQ4DFufc.js +300 -0
- package/dist/SchmancyElement-BQ4DFufc.js.map +1 -0
- package/dist/SchmancyElement-DhSiMp6Y.cjs +2 -0
- package/dist/SchmancyElement-DhSiMp6Y.cjs.map +1 -0
- package/dist/agent/{flow-3RrZM-e7.js.map → flow-CvG1fLW5.js.map} +1 -1
- package/dist/agent/schmancy.agent.js +7843 -3334
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/agent/schmancy.manifest.json +1 -2
- package/dist/agent/{vendor-material-color-33Mj762T.js.map → vendor-material-color-DcL7ZPxx.js.map} +1 -1
- package/dist/animation-CCOIW4wJ.cjs.map +1 -1
- package/dist/animation-DCznELuT.js.map +1 -1
- package/dist/{area-C_Yvjmad.js → area-BjpUWvzE.js} +7 -7
- package/dist/{area-C_Yvjmad.js.map → area-BjpUWvzE.js.map} +1 -1
- package/dist/area-CgTzkxah.cjs +21 -0
- package/dist/{area-BSVOYQDA.cjs.map → area-CgTzkxah.cjs.map} +1 -1
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{audio-CxO5a2HL.js → audio-CwBJntnB.js} +1 -1
- package/dist/{audio-CxO5a2HL.js.map → audio-CwBJntnB.js.map} +1 -1
- package/dist/{audio-Cvmemu84.cjs → audio-DISBFOaR.cjs} +1 -1
- package/dist/{audio-Cvmemu84.cjs.map → audio-DISBFOaR.cjs.map} +1 -1
- package/dist/audio.cjs +1 -1
- package/dist/audio.js +2 -2
- package/dist/{autocomplete-B50VXUzw.cjs → autocomplete-DbCUOgWU.cjs} +2 -2
- package/dist/{autocomplete-B50VXUzw.cjs.map → autocomplete-DbCUOgWU.cjs.map} +1 -1
- package/dist/{autocomplete-C6I1mfOT.js → autocomplete-Dy708jem.js} +7 -7
- package/dist/{autocomplete-C6I1mfOT.js.map → autocomplete-Dy708jem.js.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/avatar.cjs +3 -3
- package/dist/avatar.cjs.map +1 -1
- package/dist/avatar.js +5 -5
- package/dist/avatar.js.map +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-DVQBNkk5.cjs → boat-BzZN_iwp.cjs} +11 -11
- package/dist/{boat-DVQBNkk5.cjs.map → boat-BzZN_iwp.cjs.map} +1 -1
- package/dist/{boat-C94QZ4Zt.js → boat-Z4Lzl3ai.js} +8 -8
- package/dist/{boat-C94QZ4Zt.js.map → boat-Z4Lzl3ai.js.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/breadcrumb.cjs +4 -4
- package/dist/breadcrumb.cjs.map +1 -1
- package/dist/breadcrumb.js +7 -7
- package/dist/breadcrumb.js.map +1 -1
- package/dist/{busy--bNb42rM.js → busy-CRFGPkcP.js} +7 -7
- package/dist/{busy--bNb42rM.js.map → busy-CRFGPkcP.js.map} +1 -1
- package/dist/{busy-DuxFvEkY.cjs → busy-Cu-47DfN.cjs} +8 -8
- package/dist/{busy-DuxFvEkY.cjs.map → busy-Cu-47DfN.cjs.map} +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/{button-DAFZ5A4O.cjs → button-CN_JTjRd.cjs} +15 -15
- package/dist/{button-DAFZ5A4O.cjs.map → button-CN_JTjRd.cjs.map} +1 -1
- package/dist/{button-B7b9L_h5.js → button-D_USF3tt.js} +10 -10
- package/dist/{button-B7b9L_h5.js.map → button-D_USF3tt.js.map} +1 -1
- package/dist/button.cjs +19 -19
- package/dist/button.cjs.map +1 -1
- package/dist/button.js +9 -9
- package/dist/button.js.map +1 -1
- package/dist/{card-DZPd24Sn.cjs → card-D4P5_gg9.cjs} +10 -10
- package/dist/{card-DZPd24Sn.cjs.map → card-D4P5_gg9.cjs.map} +1 -1
- package/dist/{card-ixzxOW-Q.js → card-DpN5KIYc.js} +15 -15
- package/dist/{card-ixzxOW-Q.js.map → card-DpN5KIYc.js.map} +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-DdGpepTh.js → checkbox-C8ChypKf.js} +5 -5
- package/dist/{checkbox-DdGpepTh.js.map → checkbox-C8ChypKf.js.map} +1 -1
- package/dist/{checkbox-Bi_Fm2mf.cjs → checkbox-hhXVXDV1.cjs} +3 -3
- package/dist/{checkbox-Bi_Fm2mf.cjs.map → checkbox-hhXVXDV1.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-DLTynyVB.js → chips-B8R9q4yl.js} +27 -27
- package/dist/{chips-DLTynyVB.js.map → chips-B8R9q4yl.js.map} +1 -1
- package/dist/{chips-DWQMZErr.cjs → chips-BTLlO_Ow.cjs} +18 -18
- package/dist/{chips-DWQMZErr.cjs.map → chips-BTLlO_Ow.cjs.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/connectivity.cjs +7 -7
- package/dist/connectivity.cjs.map +1 -1
- package/dist/connectivity.js +5 -5
- 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-DQpmMJH-.cjs → date-range-9h6ZSkZb.cjs} +3 -3
- package/dist/{date-range-DQpmMJH-.cjs.map → date-range-9h6ZSkZb.cjs.map} +1 -1
- package/dist/{date-range-CJ6MiTpF.js → date-range-CS96dWMh.js} +7 -7
- package/dist/{date-range-CJ6MiTpF.js.map → date-range-CS96dWMh.js.map} +1 -1
- package/dist/date-range-inline-CAxnHA-l.cjs +43 -0
- package/dist/{date-range-inline-nPWIs-3C.cjs.map → date-range-inline-CAxnHA-l.cjs.map} +1 -1
- package/dist/{date-range-inline-Ho3CENTh.js → date-range-inline-DCXdGeRv.js} +5 -5
- package/dist/{date-range-inline-Ho3CENTh.js.map → date-range-inline-DCXdGeRv.js.map} +1 -1
- 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 +1 -1
- package/dist/delay.cjs +4 -4
- package/dist/delay.cjs.map +1 -1
- package/dist/delay.js +6 -6
- package/dist/delay.js.map +1 -1
- package/dist/{details-BnRWMZdt.cjs → details-BC0IObBd.cjs} +2 -2
- package/dist/{details-BnRWMZdt.cjs.map → details-BC0IObBd.cjs.map} +1 -1
- package/dist/{details-CcMTvYo7.js → details-Pgd0slKn.js} +11 -11
- package/dist/{details-CcMTvYo7.js.map → details-Pgd0slKn.js.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{directives-DgPbz0lQ.js → directives-B-RT9R2u.js} +3 -3
- package/dist/{directives-DgPbz0lQ.js.map → directives-B-RT9R2u.js.map} +1 -1
- package/dist/{directives-BkSqmLBV.cjs → directives-CFWacnWU.cjs} +1 -1
- package/dist/{directives-BkSqmLBV.cjs.map → directives-CFWacnWU.cjs.map} +1 -1
- 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-CZCj0ioH.js → divider-BMzm0lOz.js} +5 -5
- package/dist/{divider-CZCj0ioH.js.map → divider-BMzm0lOz.js.map} +1 -1
- package/dist/{divider-C6yJSL1c.cjs → divider-D1OzaRAQ.cjs} +3 -3
- package/dist/{divider-C6yJSL1c.cjs.map → divider-D1OzaRAQ.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/dropdown.cjs +4 -4
- package/dist/dropdown.cjs.map +1 -1
- package/dist/dropdown.js +8 -8
- package/dist/dropdown.js.map +1 -1
- package/dist/{expand-Cc6ogXsR.js → expand-C0Uqxfv0.js} +10 -10
- package/dist/{expand-Cc6ogXsR.js.map → expand-C0Uqxfv0.js.map} +1 -1
- package/dist/{expand-D4EhwOYh.cjs → expand-CiQkzth9.cjs} +3 -3
- package/dist/{expand-D4EhwOYh.cjs.map → expand-CiQkzth9.cjs.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/float-Bu_IfKRd.cjs +1 -0
- package/dist/{float-B8EPc_OG.cjs.map → float-Bu_IfKRd.cjs.map} +1 -1
- package/dist/{float-BvI3HTtB.js → float-DwBMXhek.js} +2 -2
- package/dist/{float-BvI3HTtB.js.map → float-DwBMXhek.js.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{form-FtYtZScl.js → form-B9Je2W_m.js} +15 -95
- package/dist/form-B9Je2W_m.js.map +1 -0
- package/dist/{form-SHg5FLsd.cjs → form-BnbAVZyf.cjs} +4 -19
- package/dist/form-BnbAVZyf.cjs.map +1 -0
- package/dist/form.cjs +18 -1
- package/dist/form.cjs.map +1 -0
- package/dist/form.js +93 -9
- package/dist/form.js.map +1 -0
- 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-BqU6v1Xr.js.map +1 -1
- package/dist/hashContent-iRZJJWtE.cjs.map +1 -1
- package/dist/{icon-CgIXAvKI.cjs → icons-BfWQl5k5.cjs} +6 -6
- package/dist/icons-BfWQl5k5.cjs.map +1 -0
- package/dist/{icon-B1eZr2ZL.js → icons-DJHPXKgR.js} +4 -4
- package/dist/{icon-CgIXAvKI.cjs.map → icons-DJHPXKgR.js.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-CmpAZc61.js → iframe-DLz8ll0s.js} +5 -5
- package/dist/{iframe-CmpAZc61.js.map → iframe-DLz8ll0s.js.map} +1 -1
- package/dist/{iframe-BO3BpRLH.cjs → iframe-UtczJypj.cjs} +5 -5
- package/dist/{iframe-BO3BpRLH.cjs.map → iframe-UtczJypj.cjs.map} +1 -1
- package/dist/iframe.cjs +1 -1
- package/dist/iframe.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +69 -69
- package/dist/{input-_Hft9vov.js → input-AQbBEj2f.js} +15 -15
- package/dist/{input-_Hft9vov.js.map → input-AQbBEj2f.js.map} +1 -1
- package/dist/{input-5YL2oUBr.cjs → input-Pp6A1m3s.cjs} +2 -2
- package/dist/{input-5YL2oUBr.cjs.map → input-Pp6A1m3s.cjs.map} +1 -1
- package/dist/{input-chip-DKMNpcED.cjs → input-chip-B5vYNuEm.cjs} +9 -9
- package/dist/{input-chip-DKMNpcED.cjs.map → input-chip-B5vYNuEm.cjs.map} +1 -1
- package/dist/{input-chip-BNTojQT6.js → input-chip-Bbs_gXOB.js} +10 -10
- package/dist/{input-chip-BNTojQT6.js.map → input-chip-Bbs_gXOB.js.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/json.cjs +3 -3
- package/dist/json.cjs.map +1 -1
- package/dist/json.js +5 -5
- package/dist/json.js.map +1 -1
- package/dist/kbd.cjs +2 -2
- package/dist/kbd.cjs.map +1 -1
- package/dist/kbd.js +5 -5
- package/dist/kbd.js.map +1 -1
- package/dist/{layout-DSAjo92m.js → layout-9K1zxhZn.js} +1 -1
- package/dist/{layout-DSAjo92m.js.map → layout-9K1zxhZn.js.map} +1 -1
- package/dist/{layout-eXb9wjDh.cjs → layout-B0dct--7.cjs} +1 -1
- package/dist/{layout-eXb9wjDh.cjs.map → layout-B0dct--7.cjs.map} +1 -1
- package/dist/layout.cjs +2 -2
- package/dist/layout.cjs.map +1 -1
- package/dist/layout.js +7 -7
- package/dist/layout.js.map +1 -1
- package/dist/lazy-CayEFyC3.cjs.map +1 -1
- package/dist/lazy-D-bO2r4m.js.map +1 -1
- package/dist/{lightbox-t4dvb8_A.cjs → lightbox-D_EizrG3.cjs} +21 -21
- package/dist/{lightbox-t4dvb8_A.cjs.map → lightbox-D_EizrG3.cjs.map} +1 -1
- package/dist/{lightbox-CKlYcnHV.js → lightbox-DmJTs2My.js} +9 -9
- package/dist/{lightbox-CKlYcnHV.js.map → lightbox-DmJTs2My.js.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-21mWtDKg.cjs → list-BSn8czyO.cjs} +5 -5
- package/dist/{list-21mWtDKg.cjs.map → list-BSn8czyO.cjs.map} +1 -1
- package/dist/{list-B6QhxgRJ.js → list-DjSSRZxF.js} +12 -12
- package/dist/{list-B6QhxgRJ.js.map → list-DjSSRZxF.js.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/magnetic-B2VKNfDu.js.map +1 -1
- package/dist/magnetic-MQ3HMHJi.cjs.map +1 -1
- package/dist/{menu-C5qcgMnw.js → menu-CCVEde6u.js} +7 -7
- package/dist/{menu-C5qcgMnw.js.map → menu-CCVEde6u.js.map} +1 -1
- package/dist/menu-DTNnq7j_.cjs +23 -0
- package/dist/{menu-Cuxt5K4Y.cjs.map → menu-DTNnq7j_.cjs.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins-BYfSDvbP.js +412 -0
- package/dist/mixins-BYfSDvbP.js.map +1 -0
- package/dist/mixins-YQI9JogS.cjs +245 -0
- package/dist/mixins-YQI9JogS.cjs.map +1 -0
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.js +3 -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 +10 -10
- package/dist/navigation-rail.cjs.map +1 -1
- package/dist/navigation-rail.js +15 -15
- package/dist/navigation-rail.js.map +1 -1
- package/dist/{notification-CDKBKh63.js → notification-BNEuu3Q2.js} +7 -7
- package/dist/{notification-CDKBKh63.js.map → notification-BNEuu3Q2.js.map} +1 -1
- package/dist/notification-RhaYvA1I.cjs +24 -0
- package/dist/{notification-CcNoBFEJ.cjs.map → notification-RhaYvA1I.cjs.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-BWfmDJvm.js → option-BLMYRy5C.js} +6 -6
- package/dist/{option-BWfmDJvm.js.map → option-BLMYRy5C.js.map} +1 -1
- package/dist/{option-DejeqOad.cjs → option-Dk7UFFlr.cjs} +5 -5
- package/dist/{option-DejeqOad.cjs.map → option-Dk7UFFlr.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/overlay-BbntqsVm.cjs +43 -0
- package/dist/overlay-BbntqsVm.cjs.map +1 -0
- package/dist/{overlay-D3c_NY18.js → overlay-CujzmLxg.js} +93 -144
- package/dist/overlay-CujzmLxg.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-CMge0LP5.cjs +70 -0
- package/dist/overlay.confirm-body-CMge0LP5.cjs.map +1 -0
- package/dist/{overlay.confirm-body-B_v0ivkn.js → overlay.confirm-body-CRk4MvKh.js} +15 -27
- package/dist/overlay.confirm-body-CRk4MvKh.js.map +1 -0
- package/dist/overlay.js +3 -3
- package/dist/{overlay.service-B3FjXCqc.js → overlay.service-DnT4SBlJ.js} +31 -27
- package/dist/{overlay.service-B3FjXCqc.js.map → overlay.service-DnT4SBlJ.js.map} +1 -1
- package/dist/overlay.service-Dq5XtSEL.cjs +1 -0
- package/dist/{overlay.service-BkSeqXIv.cjs.map → overlay.service-Dq5XtSEL.cjs.map} +1 -1
- package/dist/{progress-6_rb3Ah9.cjs → progress-Bqd4DdOQ.cjs} +7 -7
- package/dist/{progress-6_rb3Ah9.cjs.map → progress-Bqd4DdOQ.cjs.map} +1 -1
- package/dist/{progress-CFcmO0wv.js → progress-Cu_wh6Sl.js} +10 -10
- package/dist/{progress-CFcmO0wv.js.map → progress-Cu_wh6Sl.js.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/radio-group-C8rUbYL6.cjs +19 -0
- package/dist/{radio-group-_WZg8EKM.cjs.map → radio-group-C8rUbYL6.cjs.map} +1 -1
- package/dist/{radio-group-Bd8y9QpX.js → radio-group-Duzgx17I.js} +7 -7
- package/dist/{radio-group-Bd8y9QpX.js.map → radio-group-Duzgx17I.js.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/range.cjs +2 -2
- package/dist/range.cjs.map +1 -1
- package/dist/range.js +5 -5
- 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 +1 -1
- package/dist/rxjs-utils-d-ivVN84.js.map +1 -1
- package/dist/search-DPKoC-dT.cjs.map +1 -1
- package/dist/search-MvIBA93K.js.map +1 -1
- package/dist/{select-Czpl1ztD.js → select-CzCv1f1c.js} +6 -6
- package/dist/{select-Czpl1ztD.js.map → select-CzCv1f1c.js.map} +1 -1
- package/dist/{select-BaioT3yY.cjs → select-DdqEsfnG.cjs} +2 -2
- package/dist/{select-BaioT3yY.cjs.map → select-DdqEsfnG.cjs.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/skeleton.cjs +2 -2
- package/dist/skeleton.cjs.map +1 -1
- package/dist/skeleton.js +5 -5
- package/dist/skeleton.js.map +1 -1
- package/dist/skills/form.md +34 -0
- package/dist/skills/schmancy/form.md +34 -0
- package/dist/slider.cjs +7 -7
- package/dist/slider.cjs.map +1 -1
- package/dist/slider.js +6 -6
- package/dist/slider.js.map +1 -1
- package/dist/{sound.service-v_jqCkos.js → sound.service-BOWTBG16.js} +1 -1
- package/dist/{sound.service-v_jqCkos.js.map → sound.service-BOWTBG16.js.map} +1 -1
- package/dist/{sound.service-DVJZb9ox.cjs → sound.service-BwIzAFQx.cjs} +1 -1
- package/dist/{sound.service-DVJZb9ox.cjs.map → sound.service-BwIzAFQx.cjs.map} +1 -1
- package/dist/{splash-screen-YtTVkJg8.js → splash-screen-Dj-zuGuB.js} +6 -6
- package/dist/{splash-screen-YtTVkJg8.js.map → splash-screen-Dj-zuGuB.js.map} +1 -1
- package/dist/splash-screen-_KhxgneW.cjs +41 -0
- package/dist/{splash-screen-3FtgdVy3.cjs.map → splash-screen-_KhxgneW.cjs.map} +1 -1
- package/dist/splash-screen.cjs +1 -1
- package/dist/splash-screen.js +1 -1
- package/dist/src-BSjgxN07.cjs +263 -0
- package/dist/{src-AYRNg63f.cjs.map → src-BSjgxN07.cjs.map} +1 -1
- package/dist/{src-DKMEgT2z.js → src-Curgs4Yp.js} +83 -83
- package/dist/{src-DKMEgT2z.js.map → src-Curgs4Yp.js.map} +1 -1
- package/dist/state-BthYuA3T.cjs +1 -0
- package/dist/state-BthYuA3T.cjs.map +1 -0
- package/dist/{state-CHbIt2Dw.js → state-E0bVrZ7q.js} +293 -279
- package/dist/state-E0bVrZ7q.js.map +1 -0
- package/dist/state.cjs +1 -1
- package/dist/state.js +3 -3
- package/dist/steps.cjs +10 -10
- package/dist/steps.cjs.map +1 -1
- package/dist/steps.js +9 -9
- package/dist/steps.js.map +1 -1
- package/dist/{surface-CVxyQPln.js → surface-C2TIedTq.js} +4 -4
- package/dist/{surface-CVxyQPln.js.map → surface-C2TIedTq.js.map} +1 -1
- package/dist/surface-D-GqzyLn.cjs +7 -0
- package/dist/{surface-BNvxLEDN.cjs.map → surface-D-GqzyLn.cjs.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/switch.cjs +2 -2
- package/dist/switch.cjs.map +1 -1
- package/dist/switch.js +6 -6
- package/dist/switch.js.map +1 -1
- package/dist/table.cjs +11 -11
- package/dist/table.cjs.map +1 -1
- package/dist/table.js +10 -10
- package/dist/table.js.map +1 -1
- package/dist/{tabs-CnPXvZuZ.js → tabs-CLRVe23a.js} +11 -11
- package/dist/{tabs-CnPXvZuZ.js.map → tabs-CLRVe23a.js.map} +1 -1
- package/dist/{tabs-DTU7748z.cjs → tabs-C_493iod.cjs} +4 -4
- package/dist/{tabs-DTU7748z.cjs.map → tabs-C_493iod.cjs.map} +1 -1
- 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-mQPsppmd.js → textarea-BWEyOtPy.js} +9 -9
- package/dist/{textarea-mQPsppmd.js.map → textarea-BWEyOtPy.js.map} +1 -1
- package/dist/textarea-CICgd2oP.cjs +43 -0
- package/dist/{textarea-Bqth6Q8P.cjs.map → textarea-CICgd2oP.cjs.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-BJqpv4cG.js → theme-Bfg_H2AF.js} +12 -12
- package/dist/{theme-BJqpv4cG.js.map → theme-Bfg_H2AF.js.map} +1 -1
- package/dist/theme-D7zOJiyg.cjs +181 -0
- package/dist/{theme-D4HGKt7N.cjs.map → theme-D7zOJiyg.cjs.map} +1 -1
- package/dist/{theme-button-Jap7G_IH.js → theme-button-C53GdQER.js} +4 -4
- package/dist/{theme-button-Jap7G_IH.js.map → theme-button-C53GdQER.js.map} +1 -1
- package/dist/theme-button-DgeBcqFm.cjs +8 -0
- package/dist/{theme-button-LP-Dgr17.cjs.map → theme-button-DgeBcqFm.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 +1 -1
- package/dist/theme.interface-odQEpZZH.js.map +1 -1
- package/dist/theme.js +3 -3
- package/dist/{theme.service-Bh08uOSJ.js → theme.service-BqDuioYc.js} +1 -1
- package/dist/{theme.service-Bh08uOSJ.js.map → theme.service-BqDuioYc.js.map} +1 -1
- package/dist/{theme.service-Y-e8b331.cjs → theme.service-C3PoISGd.cjs} +1 -1
- package/dist/{theme.service-Y-e8b331.cjs.map → theme.service-C3PoISGd.cjs.map} +1 -1
- package/dist/tooltip.cjs.map +1 -1
- package/dist/tooltip.js.map +1 -1
- package/dist/tree.cjs +3 -3
- package/dist/tree.cjs.map +1 -1
- package/dist/tree.js +4 -4
- package/dist/tree.js.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/typewriter.cjs.map +1 -1
- package/dist/typewriter.js.map +1 -1
- package/dist/{typography-Bc4MmSal.cjs → typography-B19fJ5YT.cjs} +4 -4
- package/dist/{typography-Bc4MmSal.cjs.map → typography-B19fJ5YT.cjs.map} +1 -1
- package/dist/{typography-BJMm6b0b.js → typography-CzbQv-X0.js} +10 -10
- package/dist/{typography-BJMm6b0b.js.map → typography-CzbQv-X0.js.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/dist/utils-DTa3QHxk.cjs.map +1 -1
- package/dist/utils-H8wNknWC.js.map +1 -1
- package/dist/visually-hidden.cjs +2 -2
- package/dist/visually-hidden.cjs.map +1 -1
- package/dist/visually-hidden.js +4 -4
- package/dist/visually-hidden.js.map +1 -1
- package/dist/window-DXB53PuA.cjs +59 -0
- package/dist/{window-CNu_WnsY.cjs.map → window-DXB53PuA.cjs.map} +1 -1
- package/dist/{window-DZTjkE24.js → window-DpctMXiy.js} +9 -9
- package/dist/{window-DZTjkE24.js.map → window-DpctMXiy.js.map} +1 -1
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/package.json +1 -1
- package/skills/schmancy/form.md +34 -0
- package/src/form/form.ts +5 -1
- package/src/overlay/overlay.animations.ts +0 -29
- package/src/overlay/overlay.component.ts +30 -38
- package/src/overlay/overlay.confirm-body.ts +3 -15
- package/src/overlay/overlay.layout.ts +11 -53
- package/src/overlay/overlay.stack.test.ts +113 -0
- package/src/overlay/overlay.types.ts +17 -11
- package/src/state/active-host.ts +50 -1
- package/src/state/index.ts +50 -11
- package/src/state/schmancy-context.ts +97 -88
- package/src/surface/surface.styles.ts +14 -10
- package/types/src/form/form.d.ts +1 -0
- package/types/src/overlay/overlay.confirm-body.d.ts +1 -1
- package/types/src/overlay/overlay.layout.d.ts +10 -30
- package/types/src/overlay/overlay.stack.test.d.ts +1 -0
- package/types/src/overlay/overlay.types.d.ts +17 -11
- package/types/src/state/active-host.d.ts +3 -0
- package/types/src/state/index.d.ts +16 -2
- package/types/src/state/schmancy-context.d.ts +2 -2
- package/dist/active-host-BP0zy_Y9.js +0 -63
- package/dist/active-host-BP0zy_Y9.js.map +0 -1
- package/dist/active-host-jH3iloCR.cjs +0 -1
- package/dist/active-host-jH3iloCR.cjs.map +0 -1
- package/dist/agent/overlay.confirm-body-BZoUgkdK.js +0 -4574
- package/dist/agent/overlay.confirm-body-BZoUgkdK.js.map +0 -1
- package/dist/area-BSVOYQDA.cjs +0 -21
- package/dist/date-range-inline-nPWIs-3C.cjs +0 -43
- package/dist/float-B8EPc_OG.cjs +0 -1
- package/dist/form-FtYtZScl.js.map +0 -1
- package/dist/form-SHg5FLsd.cjs.map +0 -1
- package/dist/icon-B1eZr2ZL.js.map +0 -1
- package/dist/menu-Cuxt5K4Y.cjs +0 -23
- package/dist/mixins-8dT5j6CS.js +0 -627
- package/dist/mixins-8dT5j6CS.js.map +0 -1
- package/dist/mixins-BF3Vj8_c.cjs +0 -242
- package/dist/mixins-BF3Vj8_c.cjs.map +0 -1
- package/dist/notification-CcNoBFEJ.cjs +0 -24
- package/dist/overlay-D3c_NY18.js.map +0 -1
- package/dist/overlay-Dv2utO4C.cjs +0 -43
- package/dist/overlay-Dv2utO4C.cjs.map +0 -1
- package/dist/overlay.confirm-body-B2ntyquG.cjs +0 -79
- package/dist/overlay.confirm-body-B2ntyquG.cjs.map +0 -1
- package/dist/overlay.confirm-body-B_v0ivkn.js.map +0 -1
- package/dist/overlay.service-BkSeqXIv.cjs +0 -1
- package/dist/radio-group-_WZg8EKM.cjs +0 -19
- package/dist/splash-screen-3FtgdVy3.cjs +0 -41
- package/dist/src-AYRNg63f.cjs +0 -263
- package/dist/state-CHbIt2Dw.js.map +0 -1
- package/dist/state-DcGj-pJJ.cjs +0 -1
- package/dist/state-DcGj-pJJ.cjs.map +0 -1
- package/dist/surface-BNvxLEDN.cjs +0 -7
- package/dist/textarea-Bqth6Q8P.cjs +0 -43
- package/dist/theme-D4HGKt7N.cjs +0 -181
- package/dist/theme-button-LP-Dgr17.cjs +0 -8
- package/dist/window-CNu_WnsY.cjs +0 -59
- /package/dist/agent/{flow-3RrZM-e7.js → flow-CvG1fLW5.js} +0 -0
- /package/dist/agent/{vendor-material-color-33Mj762T.js → vendor-material-color-DcL7ZPxx.js} +0 -0
package/dist/directives.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./directives-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./directives-CFWacnWU.cjs`),t=require(`./reduced-motion-Ds-HjMzn.cjs`),n=require(`./cursor-glow-Bulq-38P.cjs`),r=require(`./layout-B0dct--7.cjs`),i=require(`./gravity-6pL6CfIr.cjs`),a=require(`./magnetic-MQ3HMHJi.cjs`);exports.DragDirective=e.h,exports.DropDirective=e.g,exports.aiBadge=e.O,exports.animateText=e.k,exports.art=e.D,exports.beta=e.C,exports.color=e.S,exports.confirmClick=e.x,exports.cursorGlow=n.t,exports.cycleText=e.b,exports.depthOfField=e.y,exports.drag=e._,exports.drop=e.v,exports.fill=e.m,exports.fromResizeObserver=r.t,exports.fullHeight=r.n,exports.fullWidth=r.r,exports.futureCell=e.E,exports.fyi=e.p,exports.gravity=i.t,exports.hummingbird=e.f,exports.intersect=e.d,exports.isBeta=e.w,exports.liquid=e.u,exports.livingBorder=e.l,exports.longPress=e.c,exports.magnetic=a.t,exports.missedPunch=e.s,exports.nebula=e.o,exports.overflowWithin=e.r,exports.reducedMotion$=t.t,exports.reveal=e.a,exports.ripple=e.i,exports.setBetaPredicate=e.T,exports.urgent=e.n,exports.workingSnake=e.t;
|
package/dist/directives.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { C as e, D as t, E as n, O as r, S as i, T as a, _ as o, a as s, b as c, c as l, d as u, f as d, g as f, h as p, i as m, k as h, l as g, m as _, n as v, o as y, p as b, r as x, s as S, t as C, u as w, v as T, w as E, x as D, y as O } from "./directives-
|
|
1
|
+
import { C as e, D as t, E as n, O as r, S as i, T as a, _ as o, a as s, b as c, c as l, d as u, f as d, g as f, h as p, i as m, k as h, l as g, m as _, n as v, o as y, p as b, r as x, s as S, t as C, u as w, v as T, w as E, x as D, y as O } from "./directives-B-RT9R2u.js";
|
|
2
2
|
import { t as k } from "./reduced-motion-D-L12p7G.js";
|
|
3
3
|
import { t as A } from "./cursor-glow-Ah7VXSj7.js";
|
|
4
|
-
import { n as j, r as M, t as N } from "./layout-
|
|
4
|
+
import { n as j, r as M, t as N } from "./layout-9K1zxhZn.js";
|
|
5
5
|
import { t as P } from "./gravity-sVK3zGBF.js";
|
|
6
6
|
import { t as F } from "./magnetic-B2VKNfDu.js";
|
|
7
7
|
export { p as DragDirective, f as DropDirective, r as aiBadge, h as animateText, t as art, e as beta, i as color, D as confirmClick, A as cursorGlow, c as cycleText, O as depthOfField, o as drag, T as drop, _ as fill, N as fromResizeObserver, j as fullHeight, M as fullWidth, n as futureCell, b as fyi, P as gravity, d as hummingbird, u as intersect, E as isBeta, w as liquid, g as livingBorder, l as longPress, F as magnetic, S as missedPunch, y as nebula, x as overflowWithin, k as reducedMotion$, s as reveal, m as ripple, a as setBetaPredicate, v as urgent, C as workingSnake };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.service-CIa3Eeuk.cjs","names":[],"sources":["../src/discovery/discovery.service.ts"],"sourcesContent":["import { fromEvent, timer, race, Observable } from 'rxjs'\r\nimport { takeUntil, map, defaultIfEmpty, take } from 'rxjs/operators'\r\n\r\n/**\r\n * Global discovery event names\r\n */\r\nconst DISCOVER_EVENT = 'schmancy-discover'\r\nconst DISCOVER_RESPONSE_EVENT = 'schmancy-discover-response'\r\n\r\n/**\r\n * Discovery request detail\r\n */\r\ninterface DiscoverRequest {\r\n\tselector: string\r\n\trequestId: string\r\n}\r\n\r\n/**\r\n * Discovery response detail\r\n */\r\ninterface DiscoverResponse {\r\n\trequestId: string\r\n\telement: HTMLElement\r\n}\r\n\r\n/**\r\n * Discover a component in the DOM using the WhereAreYou/HereIAm pattern.\r\n *\r\n * @param componentTag - The tag name of the component to discover (e.g., 'schmancy-navigation-rail')\r\n * @param timeout - How long to wait for a response in milliseconds (default: 100)\r\n * @returns Observable that emits the discovered component or null if not found\r\n */\r\nexport function discoverComponent<T extends HTMLElement>(\r\n\tcomponentTag: string,\r\n\ttimeout = 100,\r\n): Observable<T | null> {\r\n\tconst whereAreYouEvent = `${componentTag}-where-are-you`\r\n\tconst hereIAmEvent = `${componentTag}-here-i-am`\r\n\r\n\treturn new Observable(subscriber => {\r\n\t\tconst subscription = fromEvent<CustomEvent>(window, hereIAmEvent)\r\n\t\t\t.pipe(\r\n\t\t\t\ttakeUntil(timer(timeout)),\r\n\t\t\t\tmap(e => e.detail.component as T),\r\n\t\t\t\tdefaultIfEmpty(null),\r\n\t\t\t)\r\n\t\t\t.subscribe(component => {\r\n\t\t\t\tsubscriber.next(component)\r\n\t\t\t\tsubscriber.complete()\r\n\t\t\t})\r\n\r\n\t\twindow.dispatchEvent(\r\n\t\t\tnew CustomEvent(whereAreYouEvent, {\r\n\t\t\t\tbubbles: true,\r\n\t\t\t\tcomposed: true,\r\n\t\t\t}),\r\n\t\t)\r\n\r\n\t\treturn () => subscription.unsubscribe()\r\n\t})\r\n}\r\n\r\n/**\r\n * Discover any of multiple components using race.\r\n * Returns the first component that responds.\r\n *\r\n * @param componentTags - Array of component tag names to discover\r\n * @returns Observable that emits the first discovered component or null if none found\r\n */\r\nexport function discoverAnyComponent<T extends HTMLElement>(...componentTags: string[]): Observable<T | null> {\r\n\tif (componentTags.length === 0) {\r\n\t\treturn new Observable(subscriber => {\r\n\t\t\tsubscriber.next(null)\r\n\t\t\tsubscriber.complete()\r\n\t\t})\r\n\t}\r\n\r\n\treturn race(...componentTags.map(tag => discoverComponent<T>(tag)))\r\n}\r\n\r\n/**\r\n * Universal element discovery - finds ANY element by CSS selector across shadow DOM boundaries.\r\n * Uses event-based discovery pattern - no DOM traversal needed.\r\n *\r\n * How it works:\r\n * 1. Broadcasts a discovery request event on window\r\n * 2. All $LitElement components receive this event and check their shadow DOM\r\n * 3. If a match is found, they respond with the element\r\n *\r\n * @param selector - CSS selector (e.g., '#my-id', '.my-class', '[data-attr]')\r\n * @param timeout - How long to wait for a response in milliseconds (default: 150)\r\n * @returns Observable that emits the discovered element or null if not found\r\n *\r\n * @example\r\n * ```typescript\r\n * // Find element by ID across shadow boundaries\r\n * discoverElement('#app-card').subscribe(el => {\r\n * if (el) console.log('Found:', el)\r\n * })\r\n *\r\n * // Find element by class\r\n * discoverElement('.special-button').subscribe(el => {...})\r\n * ```\r\n */\r\nexport function discoverElement<T extends HTMLElement>(\r\n\tselector: string,\r\n\ttimeout = 150,\r\n): Observable<T | null> {\r\n\tconst requestId = `discover-${Date.now()}-${Math.random().toString(36).slice(2)}`\r\n\r\n\treturn new Observable(subscriber => {\r\n\t\tconst subscription = fromEvent<CustomEvent<DiscoverResponse>>(window, DISCOVER_RESPONSE_EVENT)\r\n\t\t\t.pipe(\r\n\t\t\t\ttakeUntil(timer(timeout)),\r\n\t\t\t\tmap(e => e.detail),\r\n\t\t\t\tmap(detail => (detail.requestId === requestId ? (detail.element as T) : null)),\r\n\t\t\t\ttake(1),\r\n\t\t\t\tdefaultIfEmpty(null),\r\n\t\t\t)\r\n\t\t\t.subscribe(element => {\r\n\t\t\t\tsubscriber.next(element)\r\n\t\t\t\tsubscriber.complete()\r\n\t\t\t})\r\n\r\n\t\twindow.dispatchEvent(\r\n\t\t\tnew CustomEvent<DiscoverRequest>(DISCOVER_EVENT, {\r\n\t\t\t\tdetail: { selector, requestId },\r\n\t\t\t\tbubbles: true,\r\n\t\t\t\tcomposed: true,\r\n\t\t\t}),\r\n\t\t)\r\n\r\n\t\treturn () => subscription.unsubscribe()\r\n\t})\r\n}\r\n\r\n/**\r\n * Discover multiple elements matching a selector.\r\n * Collects all responses within the timeout period.\r\n *\r\n * @param selector - CSS selector\r\n * @param timeout - How long to collect responses (default: 150ms)\r\n * @returns Observable that emits array of discovered elements\r\n */\r\nexport function discoverAllElements<T extends HTMLElement>(\r\n\tselector: string,\r\n\ttimeout = 150,\r\n): Observable<T[]> {\r\n\tconst requestId = `discover-all-${Date.now()}-${Math.random().toString(36).slice(2)}`\r\n\tconst elements: T[] = []\r\n\r\n\treturn new Observable(subscriber => {\r\n\t\tconst subscription = fromEvent<CustomEvent<DiscoverResponse>>(window, DISCOVER_RESPONSE_EVENT)\r\n\t\t\t.pipe(takeUntil(timer(timeout)))\r\n\t\t\t.subscribe({\r\n\t\t\t\tnext: e => {\r\n\t\t\t\t\tif (e.detail.requestId === requestId) {\r\n\t\t\t\t\t\telements.push(e.detail.element as T)\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tcomplete: () => {\r\n\t\t\t\t\tsubscriber.next(elements)\r\n\t\t\t\t\tsubscriber.complete()\r\n\t\t\t\t},\r\n\t\t\t})\r\n\r\n\t\twindow.dispatchEvent(\r\n\t\t\tnew CustomEvent<DiscoverRequest>(DISCOVER_EVENT, {\r\n\t\t\t\tdetail: { selector, requestId },\r\n\t\t\t\tbubbles: true,\r\n\t\t\t\tcomposed: true,\r\n\t\t\t}),\r\n\t\t)\r\n\r\n\t\treturn () => subscription.unsubscribe()\r\n\t})\r\n}\r\n\r\n/**\r\n * Smart discovery - automatically detects if input is a CSS selector or component tag.\r\n *\r\n * @param query - CSS selector (starts with #, ., [) OR component tag name\r\n * @param timeout - How long to wait (default: 150ms)\r\n * @returns Observable that emits the discovered element or null\r\n *\r\n * @example\r\n * ```typescript\r\n * // CSS selector - uses discoverElement\r\n * discover('#my-element').subscribe(...)\r\n *\r\n * // Component tag - uses discoverComponent\r\n * discover('schmancy-fancy').subscribe(...)\r\n * ```\r\n */\r\nexport function discover<T extends HTMLElement>(\r\n\tquery: string,\r\n\ttimeout = 150,\r\n): Observable<T | null> {\r\n\tconst isCssSelector = /^[#.[]/.test(query)\r\n\r\n\tif (isCssSelector) {\r\n\t\treturn discoverElement<T>(query, timeout)\r\n\t}\r\n\r\n\treturn discoverComponent<T>(query, timeout)\r\n}\r\n\r\n// Export event names for use in baseElement\r\nexport { DISCOVER_EVENT, DISCOVER_RESPONSE_EVENT }\r\nexport type { DiscoverRequest, DiscoverResponse }\r\n"],"mappings":"kFAMA,IAAM,EAAiB,oBACjB,EAA0B,6BAyBhC,SAAgB,EACf,EACA,EAAU,IAAA,CAEV,IAAM,EAAmB,GAAG,EAAA,gBACtB,EAAe,GAAG,EAAA,YAExB,OAAO,IAAI,EAAA,WAAW,GAAA,CACrB,IAAM,GAAA,EAAA,EAAA,WAAsC,OAAQ,
|
|
1
|
+
{"version":3,"file":"discovery.service-CIa3Eeuk.cjs","names":[],"sources":["../src/discovery/discovery.service.ts"],"sourcesContent":["import { fromEvent, timer, race, Observable } from 'rxjs'\r\nimport { takeUntil, map, defaultIfEmpty, take } from 'rxjs/operators'\r\n\r\n/**\r\n * Global discovery event names\r\n */\r\nconst DISCOVER_EVENT = 'schmancy-discover'\r\nconst DISCOVER_RESPONSE_EVENT = 'schmancy-discover-response'\r\n\r\n/**\r\n * Discovery request detail\r\n */\r\ninterface DiscoverRequest {\r\n\tselector: string\r\n\trequestId: string\r\n}\r\n\r\n/**\r\n * Discovery response detail\r\n */\r\ninterface DiscoverResponse {\r\n\trequestId: string\r\n\telement: HTMLElement\r\n}\r\n\r\n/**\r\n * Discover a component in the DOM using the WhereAreYou/HereIAm pattern.\r\n *\r\n * @param componentTag - The tag name of the component to discover (e.g., 'schmancy-navigation-rail')\r\n * @param timeout - How long to wait for a response in milliseconds (default: 100)\r\n * @returns Observable that emits the discovered component or null if not found\r\n */\r\nexport function discoverComponent<T extends HTMLElement>(\r\n\tcomponentTag: string,\r\n\ttimeout = 100,\r\n): Observable<T | null> {\r\n\tconst whereAreYouEvent = `${componentTag}-where-are-you`\r\n\tconst hereIAmEvent = `${componentTag}-here-i-am`\r\n\r\n\treturn new Observable(subscriber => {\r\n\t\tconst subscription = fromEvent<CustomEvent>(window, hereIAmEvent)\r\n\t\t\t.pipe(\r\n\t\t\t\ttakeUntil(timer(timeout)),\r\n\t\t\t\tmap(e => e.detail.component as T),\r\n\t\t\t\tdefaultIfEmpty(null),\r\n\t\t\t)\r\n\t\t\t.subscribe(component => {\r\n\t\t\t\tsubscriber.next(component)\r\n\t\t\t\tsubscriber.complete()\r\n\t\t\t})\r\n\r\n\t\twindow.dispatchEvent(\r\n\t\t\tnew CustomEvent(whereAreYouEvent, {\r\n\t\t\t\tbubbles: true,\r\n\t\t\t\tcomposed: true,\r\n\t\t\t}),\r\n\t\t)\r\n\r\n\t\treturn () => subscription.unsubscribe()\r\n\t})\r\n}\r\n\r\n/**\r\n * Discover any of multiple components using race.\r\n * Returns the first component that responds.\r\n *\r\n * @param componentTags - Array of component tag names to discover\r\n * @returns Observable that emits the first discovered component or null if none found\r\n */\r\nexport function discoverAnyComponent<T extends HTMLElement>(...componentTags: string[]): Observable<T | null> {\r\n\tif (componentTags.length === 0) {\r\n\t\treturn new Observable(subscriber => {\r\n\t\t\tsubscriber.next(null)\r\n\t\t\tsubscriber.complete()\r\n\t\t})\r\n\t}\r\n\r\n\treturn race(...componentTags.map(tag => discoverComponent<T>(tag)))\r\n}\r\n\r\n/**\r\n * Universal element discovery - finds ANY element by CSS selector across shadow DOM boundaries.\r\n * Uses event-based discovery pattern - no DOM traversal needed.\r\n *\r\n * How it works:\r\n * 1. Broadcasts a discovery request event on window\r\n * 2. All $LitElement components receive this event and check their shadow DOM\r\n * 3. If a match is found, they respond with the element\r\n *\r\n * @param selector - CSS selector (e.g., '#my-id', '.my-class', '[data-attr]')\r\n * @param timeout - How long to wait for a response in milliseconds (default: 150)\r\n * @returns Observable that emits the discovered element or null if not found\r\n *\r\n * @example\r\n * ```typescript\r\n * // Find element by ID across shadow boundaries\r\n * discoverElement('#app-card').subscribe(el => {\r\n * if (el) console.log('Found:', el)\r\n * })\r\n *\r\n * // Find element by class\r\n * discoverElement('.special-button').subscribe(el => {...})\r\n * ```\r\n */\r\nexport function discoverElement<T extends HTMLElement>(\r\n\tselector: string,\r\n\ttimeout = 150,\r\n): Observable<T | null> {\r\n\tconst requestId = `discover-${Date.now()}-${Math.random().toString(36).slice(2)}`\r\n\r\n\treturn new Observable(subscriber => {\r\n\t\tconst subscription = fromEvent<CustomEvent<DiscoverResponse>>(window, DISCOVER_RESPONSE_EVENT)\r\n\t\t\t.pipe(\r\n\t\t\t\ttakeUntil(timer(timeout)),\r\n\t\t\t\tmap(e => e.detail),\r\n\t\t\t\tmap(detail => (detail.requestId === requestId ? (detail.element as T) : null)),\r\n\t\t\t\ttake(1),\r\n\t\t\t\tdefaultIfEmpty(null),\r\n\t\t\t)\r\n\t\t\t.subscribe(element => {\r\n\t\t\t\tsubscriber.next(element)\r\n\t\t\t\tsubscriber.complete()\r\n\t\t\t})\r\n\r\n\t\twindow.dispatchEvent(\r\n\t\t\tnew CustomEvent<DiscoverRequest>(DISCOVER_EVENT, {\r\n\t\t\t\tdetail: { selector, requestId },\r\n\t\t\t\tbubbles: true,\r\n\t\t\t\tcomposed: true,\r\n\t\t\t}),\r\n\t\t)\r\n\r\n\t\treturn () => subscription.unsubscribe()\r\n\t})\r\n}\r\n\r\n/**\r\n * Discover multiple elements matching a selector.\r\n * Collects all responses within the timeout period.\r\n *\r\n * @param selector - CSS selector\r\n * @param timeout - How long to collect responses (default: 150ms)\r\n * @returns Observable that emits array of discovered elements\r\n */\r\nexport function discoverAllElements<T extends HTMLElement>(\r\n\tselector: string,\r\n\ttimeout = 150,\r\n): Observable<T[]> {\r\n\tconst requestId = `discover-all-${Date.now()}-${Math.random().toString(36).slice(2)}`\r\n\tconst elements: T[] = []\r\n\r\n\treturn new Observable(subscriber => {\r\n\t\tconst subscription = fromEvent<CustomEvent<DiscoverResponse>>(window, DISCOVER_RESPONSE_EVENT)\r\n\t\t\t.pipe(takeUntil(timer(timeout)))\r\n\t\t\t.subscribe({\r\n\t\t\t\tnext: e => {\r\n\t\t\t\t\tif (e.detail.requestId === requestId) {\r\n\t\t\t\t\t\telements.push(e.detail.element as T)\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tcomplete: () => {\r\n\t\t\t\t\tsubscriber.next(elements)\r\n\t\t\t\t\tsubscriber.complete()\r\n\t\t\t\t},\r\n\t\t\t})\r\n\r\n\t\twindow.dispatchEvent(\r\n\t\t\tnew CustomEvent<DiscoverRequest>(DISCOVER_EVENT, {\r\n\t\t\t\tdetail: { selector, requestId },\r\n\t\t\t\tbubbles: true,\r\n\t\t\t\tcomposed: true,\r\n\t\t\t}),\r\n\t\t)\r\n\r\n\t\treturn () => subscription.unsubscribe()\r\n\t})\r\n}\r\n\r\n/**\r\n * Smart discovery - automatically detects if input is a CSS selector or component tag.\r\n *\r\n * @param query - CSS selector (starts with #, ., [) OR component tag name\r\n * @param timeout - How long to wait (default: 150ms)\r\n * @returns Observable that emits the discovered element or null\r\n *\r\n * @example\r\n * ```typescript\r\n * // CSS selector - uses discoverElement\r\n * discover('#my-element').subscribe(...)\r\n *\r\n * // Component tag - uses discoverComponent\r\n * discover('schmancy-fancy').subscribe(...)\r\n * ```\r\n */\r\nexport function discover<T extends HTMLElement>(\r\n\tquery: string,\r\n\ttimeout = 150,\r\n): Observable<T | null> {\r\n\tconst isCssSelector = /^[#.[]/.test(query)\r\n\r\n\tif (isCssSelector) {\r\n\t\treturn discoverElement<T>(query, timeout)\r\n\t}\r\n\r\n\treturn discoverComponent<T>(query, timeout)\r\n}\r\n\r\n// Export event names for use in baseElement\r\nexport { DISCOVER_EVENT, DISCOVER_RESPONSE_EVENT }\r\nexport type { DiscoverRequest, DiscoverResponse }\r\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.service-DZFxtRwW.js","names":[],"sources":["../src/discovery/discovery.service.ts"],"sourcesContent":["import { fromEvent, timer, race, Observable } from 'rxjs'\r\nimport { takeUntil, map, defaultIfEmpty, take } from 'rxjs/operators'\r\n\r\n/**\r\n * Global discovery event names\r\n */\r\nconst DISCOVER_EVENT = 'schmancy-discover'\r\nconst DISCOVER_RESPONSE_EVENT = 'schmancy-discover-response'\r\n\r\n/**\r\n * Discovery request detail\r\n */\r\ninterface DiscoverRequest {\r\n\tselector: string\r\n\trequestId: string\r\n}\r\n\r\n/**\r\n * Discovery response detail\r\n */\r\ninterface DiscoverResponse {\r\n\trequestId: string\r\n\telement: HTMLElement\r\n}\r\n\r\n/**\r\n * Discover a component in the DOM using the WhereAreYou/HereIAm pattern.\r\n *\r\n * @param componentTag - The tag name of the component to discover (e.g., 'schmancy-navigation-rail')\r\n * @param timeout - How long to wait for a response in milliseconds (default: 100)\r\n * @returns Observable that emits the discovered component or null if not found\r\n */\r\nexport function discoverComponent<T extends HTMLElement>(\r\n\tcomponentTag: string,\r\n\ttimeout = 100,\r\n): Observable<T | null> {\r\n\tconst whereAreYouEvent = `${componentTag}-where-are-you`\r\n\tconst hereIAmEvent = `${componentTag}-here-i-am`\r\n\r\n\treturn new Observable(subscriber => {\r\n\t\tconst subscription = fromEvent<CustomEvent>(window, hereIAmEvent)\r\n\t\t\t.pipe(\r\n\t\t\t\ttakeUntil(timer(timeout)),\r\n\t\t\t\tmap(e => e.detail.component as T),\r\n\t\t\t\tdefaultIfEmpty(null),\r\n\t\t\t)\r\n\t\t\t.subscribe(component => {\r\n\t\t\t\tsubscriber.next(component)\r\n\t\t\t\tsubscriber.complete()\r\n\t\t\t})\r\n\r\n\t\twindow.dispatchEvent(\r\n\t\t\tnew CustomEvent(whereAreYouEvent, {\r\n\t\t\t\tbubbles: true,\r\n\t\t\t\tcomposed: true,\r\n\t\t\t}),\r\n\t\t)\r\n\r\n\t\treturn () => subscription.unsubscribe()\r\n\t})\r\n}\r\n\r\n/**\r\n * Discover any of multiple components using race.\r\n * Returns the first component that responds.\r\n *\r\n * @param componentTags - Array of component tag names to discover\r\n * @returns Observable that emits the first discovered component or null if none found\r\n */\r\nexport function discoverAnyComponent<T extends HTMLElement>(...componentTags: string[]): Observable<T | null> {\r\n\tif (componentTags.length === 0) {\r\n\t\treturn new Observable(subscriber => {\r\n\t\t\tsubscriber.next(null)\r\n\t\t\tsubscriber.complete()\r\n\t\t})\r\n\t}\r\n\r\n\treturn race(...componentTags.map(tag => discoverComponent<T>(tag)))\r\n}\r\n\r\n/**\r\n * Universal element discovery - finds ANY element by CSS selector across shadow DOM boundaries.\r\n * Uses event-based discovery pattern - no DOM traversal needed.\r\n *\r\n * How it works:\r\n * 1. Broadcasts a discovery request event on window\r\n * 2. All $LitElement components receive this event and check their shadow DOM\r\n * 3. If a match is found, they respond with the element\r\n *\r\n * @param selector - CSS selector (e.g., '#my-id', '.my-class', '[data-attr]')\r\n * @param timeout - How long to wait for a response in milliseconds (default: 150)\r\n * @returns Observable that emits the discovered element or null if not found\r\n *\r\n * @example\r\n * ```typescript\r\n * // Find element by ID across shadow boundaries\r\n * discoverElement('#app-card').subscribe(el => {\r\n * if (el) console.log('Found:', el)\r\n * })\r\n *\r\n * // Find element by class\r\n * discoverElement('.special-button').subscribe(el => {...})\r\n * ```\r\n */\r\nexport function discoverElement<T extends HTMLElement>(\r\n\tselector: string,\r\n\ttimeout = 150,\r\n): Observable<T | null> {\r\n\tconst requestId = `discover-${Date.now()}-${Math.random().toString(36).slice(2)}`\r\n\r\n\treturn new Observable(subscriber => {\r\n\t\tconst subscription = fromEvent<CustomEvent<DiscoverResponse>>(window, DISCOVER_RESPONSE_EVENT)\r\n\t\t\t.pipe(\r\n\t\t\t\ttakeUntil(timer(timeout)),\r\n\t\t\t\tmap(e => e.detail),\r\n\t\t\t\tmap(detail => (detail.requestId === requestId ? (detail.element as T) : null)),\r\n\t\t\t\ttake(1),\r\n\t\t\t\tdefaultIfEmpty(null),\r\n\t\t\t)\r\n\t\t\t.subscribe(element => {\r\n\t\t\t\tsubscriber.next(element)\r\n\t\t\t\tsubscriber.complete()\r\n\t\t\t})\r\n\r\n\t\twindow.dispatchEvent(\r\n\t\t\tnew CustomEvent<DiscoverRequest>(DISCOVER_EVENT, {\r\n\t\t\t\tdetail: { selector, requestId },\r\n\t\t\t\tbubbles: true,\r\n\t\t\t\tcomposed: true,\r\n\t\t\t}),\r\n\t\t)\r\n\r\n\t\treturn () => subscription.unsubscribe()\r\n\t})\r\n}\r\n\r\n/**\r\n * Discover multiple elements matching a selector.\r\n * Collects all responses within the timeout period.\r\n *\r\n * @param selector - CSS selector\r\n * @param timeout - How long to collect responses (default: 150ms)\r\n * @returns Observable that emits array of discovered elements\r\n */\r\nexport function discoverAllElements<T extends HTMLElement>(\r\n\tselector: string,\r\n\ttimeout = 150,\r\n): Observable<T[]> {\r\n\tconst requestId = `discover-all-${Date.now()}-${Math.random().toString(36).slice(2)}`\r\n\tconst elements: T[] = []\r\n\r\n\treturn new Observable(subscriber => {\r\n\t\tconst subscription = fromEvent<CustomEvent<DiscoverResponse>>(window, DISCOVER_RESPONSE_EVENT)\r\n\t\t\t.pipe(takeUntil(timer(timeout)))\r\n\t\t\t.subscribe({\r\n\t\t\t\tnext: e => {\r\n\t\t\t\t\tif (e.detail.requestId === requestId) {\r\n\t\t\t\t\t\telements.push(e.detail.element as T)\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tcomplete: () => {\r\n\t\t\t\t\tsubscriber.next(elements)\r\n\t\t\t\t\tsubscriber.complete()\r\n\t\t\t\t},\r\n\t\t\t})\r\n\r\n\t\twindow.dispatchEvent(\r\n\t\t\tnew CustomEvent<DiscoverRequest>(DISCOVER_EVENT, {\r\n\t\t\t\tdetail: { selector, requestId },\r\n\t\t\t\tbubbles: true,\r\n\t\t\t\tcomposed: true,\r\n\t\t\t}),\r\n\t\t)\r\n\r\n\t\treturn () => subscription.unsubscribe()\r\n\t})\r\n}\r\n\r\n/**\r\n * Smart discovery - automatically detects if input is a CSS selector or component tag.\r\n *\r\n * @param query - CSS selector (starts with #, ., [) OR component tag name\r\n * @param timeout - How long to wait (default: 150ms)\r\n * @returns Observable that emits the discovered element or null\r\n *\r\n * @example\r\n * ```typescript\r\n * // CSS selector - uses discoverElement\r\n * discover('#my-element').subscribe(...)\r\n *\r\n * // Component tag - uses discoverComponent\r\n * discover('schmancy-fancy').subscribe(...)\r\n * ```\r\n */\r\nexport function discover<T extends HTMLElement>(\r\n\tquery: string,\r\n\ttimeout = 150,\r\n): Observable<T | null> {\r\n\tconst isCssSelector = /^[#.[]/.test(query)\r\n\r\n\tif (isCssSelector) {\r\n\t\treturn discoverElement<T>(query, timeout)\r\n\t}\r\n\r\n\treturn discoverComponent<T>(query, timeout)\r\n}\r\n\r\n// Export event names for use in baseElement\r\nexport { DISCOVER_EVENT, DISCOVER_RESPONSE_EVENT }\r\nexport type { DiscoverRequest, DiscoverResponse }\r\n"],"mappings":";;AAMA,IAAM,IAAiB,qBACjB,IAA0B;AAyBhC,SAAgB,EACf,GACA,IAAU,KAAA;CAEV,IAAM,IAAmB,GAAG,EAAA,iBACtB,IAAe,GAAG,EAAA;CAExB,OAAO,IAAI,GAAW,MAAA;EACrB,IAAM,IAAe,EAAuB,QAAQ,
|
|
1
|
+
{"version":3,"file":"discovery.service-DZFxtRwW.js","names":[],"sources":["../src/discovery/discovery.service.ts"],"sourcesContent":["import { fromEvent, timer, race, Observable } from 'rxjs'\r\nimport { takeUntil, map, defaultIfEmpty, take } from 'rxjs/operators'\r\n\r\n/**\r\n * Global discovery event names\r\n */\r\nconst DISCOVER_EVENT = 'schmancy-discover'\r\nconst DISCOVER_RESPONSE_EVENT = 'schmancy-discover-response'\r\n\r\n/**\r\n * Discovery request detail\r\n */\r\ninterface DiscoverRequest {\r\n\tselector: string\r\n\trequestId: string\r\n}\r\n\r\n/**\r\n * Discovery response detail\r\n */\r\ninterface DiscoverResponse {\r\n\trequestId: string\r\n\telement: HTMLElement\r\n}\r\n\r\n/**\r\n * Discover a component in the DOM using the WhereAreYou/HereIAm pattern.\r\n *\r\n * @param componentTag - The tag name of the component to discover (e.g., 'schmancy-navigation-rail')\r\n * @param timeout - How long to wait for a response in milliseconds (default: 100)\r\n * @returns Observable that emits the discovered component or null if not found\r\n */\r\nexport function discoverComponent<T extends HTMLElement>(\r\n\tcomponentTag: string,\r\n\ttimeout = 100,\r\n): Observable<T | null> {\r\n\tconst whereAreYouEvent = `${componentTag}-where-are-you`\r\n\tconst hereIAmEvent = `${componentTag}-here-i-am`\r\n\r\n\treturn new Observable(subscriber => {\r\n\t\tconst subscription = fromEvent<CustomEvent>(window, hereIAmEvent)\r\n\t\t\t.pipe(\r\n\t\t\t\ttakeUntil(timer(timeout)),\r\n\t\t\t\tmap(e => e.detail.component as T),\r\n\t\t\t\tdefaultIfEmpty(null),\r\n\t\t\t)\r\n\t\t\t.subscribe(component => {\r\n\t\t\t\tsubscriber.next(component)\r\n\t\t\t\tsubscriber.complete()\r\n\t\t\t})\r\n\r\n\t\twindow.dispatchEvent(\r\n\t\t\tnew CustomEvent(whereAreYouEvent, {\r\n\t\t\t\tbubbles: true,\r\n\t\t\t\tcomposed: true,\r\n\t\t\t}),\r\n\t\t)\r\n\r\n\t\treturn () => subscription.unsubscribe()\r\n\t})\r\n}\r\n\r\n/**\r\n * Discover any of multiple components using race.\r\n * Returns the first component that responds.\r\n *\r\n * @param componentTags - Array of component tag names to discover\r\n * @returns Observable that emits the first discovered component or null if none found\r\n */\r\nexport function discoverAnyComponent<T extends HTMLElement>(...componentTags: string[]): Observable<T | null> {\r\n\tif (componentTags.length === 0) {\r\n\t\treturn new Observable(subscriber => {\r\n\t\t\tsubscriber.next(null)\r\n\t\t\tsubscriber.complete()\r\n\t\t})\r\n\t}\r\n\r\n\treturn race(...componentTags.map(tag => discoverComponent<T>(tag)))\r\n}\r\n\r\n/**\r\n * Universal element discovery - finds ANY element by CSS selector across shadow DOM boundaries.\r\n * Uses event-based discovery pattern - no DOM traversal needed.\r\n *\r\n * How it works:\r\n * 1. Broadcasts a discovery request event on window\r\n * 2. All $LitElement components receive this event and check their shadow DOM\r\n * 3. If a match is found, they respond with the element\r\n *\r\n * @param selector - CSS selector (e.g., '#my-id', '.my-class', '[data-attr]')\r\n * @param timeout - How long to wait for a response in milliseconds (default: 150)\r\n * @returns Observable that emits the discovered element or null if not found\r\n *\r\n * @example\r\n * ```typescript\r\n * // Find element by ID across shadow boundaries\r\n * discoverElement('#app-card').subscribe(el => {\r\n * if (el) console.log('Found:', el)\r\n * })\r\n *\r\n * // Find element by class\r\n * discoverElement('.special-button').subscribe(el => {...})\r\n * ```\r\n */\r\nexport function discoverElement<T extends HTMLElement>(\r\n\tselector: string,\r\n\ttimeout = 150,\r\n): Observable<T | null> {\r\n\tconst requestId = `discover-${Date.now()}-${Math.random().toString(36).slice(2)}`\r\n\r\n\treturn new Observable(subscriber => {\r\n\t\tconst subscription = fromEvent<CustomEvent<DiscoverResponse>>(window, DISCOVER_RESPONSE_EVENT)\r\n\t\t\t.pipe(\r\n\t\t\t\ttakeUntil(timer(timeout)),\r\n\t\t\t\tmap(e => e.detail),\r\n\t\t\t\tmap(detail => (detail.requestId === requestId ? (detail.element as T) : null)),\r\n\t\t\t\ttake(1),\r\n\t\t\t\tdefaultIfEmpty(null),\r\n\t\t\t)\r\n\t\t\t.subscribe(element => {\r\n\t\t\t\tsubscriber.next(element)\r\n\t\t\t\tsubscriber.complete()\r\n\t\t\t})\r\n\r\n\t\twindow.dispatchEvent(\r\n\t\t\tnew CustomEvent<DiscoverRequest>(DISCOVER_EVENT, {\r\n\t\t\t\tdetail: { selector, requestId },\r\n\t\t\t\tbubbles: true,\r\n\t\t\t\tcomposed: true,\r\n\t\t\t}),\r\n\t\t)\r\n\r\n\t\treturn () => subscription.unsubscribe()\r\n\t})\r\n}\r\n\r\n/**\r\n * Discover multiple elements matching a selector.\r\n * Collects all responses within the timeout period.\r\n *\r\n * @param selector - CSS selector\r\n * @param timeout - How long to collect responses (default: 150ms)\r\n * @returns Observable that emits array of discovered elements\r\n */\r\nexport function discoverAllElements<T extends HTMLElement>(\r\n\tselector: string,\r\n\ttimeout = 150,\r\n): Observable<T[]> {\r\n\tconst requestId = `discover-all-${Date.now()}-${Math.random().toString(36).slice(2)}`\r\n\tconst elements: T[] = []\r\n\r\n\treturn new Observable(subscriber => {\r\n\t\tconst subscription = fromEvent<CustomEvent<DiscoverResponse>>(window, DISCOVER_RESPONSE_EVENT)\r\n\t\t\t.pipe(takeUntil(timer(timeout)))\r\n\t\t\t.subscribe({\r\n\t\t\t\tnext: e => {\r\n\t\t\t\t\tif (e.detail.requestId === requestId) {\r\n\t\t\t\t\t\telements.push(e.detail.element as T)\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tcomplete: () => {\r\n\t\t\t\t\tsubscriber.next(elements)\r\n\t\t\t\t\tsubscriber.complete()\r\n\t\t\t\t},\r\n\t\t\t})\r\n\r\n\t\twindow.dispatchEvent(\r\n\t\t\tnew CustomEvent<DiscoverRequest>(DISCOVER_EVENT, {\r\n\t\t\t\tdetail: { selector, requestId },\r\n\t\t\t\tbubbles: true,\r\n\t\t\t\tcomposed: true,\r\n\t\t\t}),\r\n\t\t)\r\n\r\n\t\treturn () => subscription.unsubscribe()\r\n\t})\r\n}\r\n\r\n/**\r\n * Smart discovery - automatically detects if input is a CSS selector or component tag.\r\n *\r\n * @param query - CSS selector (starts with #, ., [) OR component tag name\r\n * @param timeout - How long to wait (default: 150ms)\r\n * @returns Observable that emits the discovered element or null\r\n *\r\n * @example\r\n * ```typescript\r\n * // CSS selector - uses discoverElement\r\n * discover('#my-element').subscribe(...)\r\n *\r\n * // Component tag - uses discoverComponent\r\n * discover('schmancy-fancy').subscribe(...)\r\n * ```\r\n */\r\nexport function discover<T extends HTMLElement>(\r\n\tquery: string,\r\n\ttimeout = 150,\r\n): Observable<T | null> {\r\n\tconst isCssSelector = /^[#.[]/.test(query)\r\n\r\n\tif (isCssSelector) {\r\n\t\treturn discoverElement<T>(query, timeout)\r\n\t}\r\n\r\n\treturn discoverComponent<T>(query, timeout)\r\n}\r\n\r\n// Export event names for use in baseElement\r\nexport { DISCOVER_EVENT, DISCOVER_RESPONSE_EVENT }\r\nexport type { DiscoverRequest, DiscoverResponse }\r\n"],"mappings":";;AAMA,IAAM,IAAiB,qBACjB,IAA0B;AAyBhC,SAAgB,EACf,GACA,IAAU,KAAA;CAEV,IAAM,IAAmB,GAAG,EAAA,iBACtB,IAAe,GAAG,EAAA;CAExB,OAAO,IAAI,GAAW,MAAA;EACrB,IAAM,IAAe,EAAuB,QAAQ,CAAA,EAClD,KACA,EAAU,EAAM,CAAA,CAAA,GAChB,GAAI,MAAK,EAAE,OAAO,SAAA,GAClB,EAAe,IAAA,CAAA,EAEf,WAAU,MAAA;GACV,EAAW,KAAK,CAAA,GAChB,EAAW,SAAA;EAAA,CAAA;EAUb,OAPA,OAAO,cACN,IAAI,YAAY,GAAkB;GACjC,SAAA,CAAS;GACT,UAAA,CAAU;EAAA,CAAA,CAAA,SAIC,EAAa,YAAA;CAAA,CAAA;AAE5B;AASA,SAAgB,EAAA,GAA+C,GAAA;CAC9D,OAAI,EAAc,WAAW,IACrB,IAAI,GAAW,MAAA;EACrB,EAAW,KAAK,IAAA,GAChB,EAAW,SAAA;CAAA,CAAA,IAIN,EAAA,GAAQ,EAAc,KAAI,MAAO,EAAqB,CAAA,CAAA,CAAA;AAC9D;AA0BA,SAAgB,EACf,GACA,IAAU,KAAA;CAEV,IAAM,IAAY,YAAY,KAAK,IAAA,EAAA,GAAS,KAAK,OAAA,EAAS,SAAS,EAAA,EAAI,MAAM,CAAA;CAE7E,OAAO,IAAI,GAAW,MAAA;EACrB,IAAM,IAAe,EAAyC,QAAQ,CAAA,EACpE,KACA,EAAU,EAAM,CAAA,CAAA,GAChB,GAAI,MAAK,EAAE,MAAA,GACX,GAAI,MAAW,EAAO,cAAc,IAAa,EAAO,UAAgB,IAAA,GACxE,EAAK,CAAA,GACL,EAAe,IAAA,CAAA,EAEf,WAAU,MAAA;GACV,EAAW,KAAK,CAAA,GAChB,EAAW,SAAA;EAAA,CAAA;EAWb,OARA,OAAO,cACN,IAAI,YAA6B,GAAgB;GAChD,QAAQ;IAAE,UAAA;IAAU,WAAA;GAAA;GACpB,SAAA,CAAS;GACT,UAAA,CAAU;EAAA,CAAA,CAAA,SAIC,EAAa,YAAA;CAAA,CAAA;AAE5B;AAUA,SAAgB,EACf,GACA,IAAU,KAAA;CAEV,IAAM,IAAY,gBAAgB,KAAK,IAAA,EAAA,GAAS,KAAK,OAAA,EAAS,SAAS,EAAA,EAAI,MAAM,CAAA,KAC3E,IAAgB,CAAA;CAEtB,OAAO,IAAI,GAAW,MAAA;EACrB,IAAM,IAAe,EAAyC,QAAQ,CAAA,EACpE,KAAK,EAAU,EAAM,CAAA,CAAA,CAAA,EACrB,UAAU;GACV,OAAM,MAAA;IACD,EAAE,OAAO,cAAc,KAC1B,EAAS,KAAK,EAAE,OAAO,OAAA;GAAA;GAGzB,gBAAA;IACC,EAAW,KAAK,CAAA,GAChB,EAAW,SAAA;GAAA;EAAA,CAAA;EAYd,OARA,OAAO,cACN,IAAI,YAA6B,GAAgB;GAChD,QAAQ;IAAE,UAAA;IAAU,WAAA;GAAA;GACpB,SAAA,CAAS;GACT,UAAA,CAAU;EAAA,CAAA,CAAA,SAIC,EAAa,YAAA;CAAA,CAAA;AAE5B;AAkBA,SAAgB,EACf,GACA,IAAU,KAAA;CAIV,OAFsB,SAAS,KAAK,CAAA,IAG5B,EAAmB,GAAO,CAAA,IAG3B,EAAqB,GAAO,CAAA;AACpC;AAAA,SAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA,GAAA,KAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { p as e, t } from "./SchmancyElement-BQ4DFufc.js";
|
|
2
|
+
import "./mixins-BYfSDvbP.js";
|
|
3
3
|
import { customElement as n, property as r } from "lit/decorators.js";
|
|
4
4
|
import { css as i, html as a } from "lit";
|
|
5
|
-
var o = class extends
|
|
5
|
+
var o = class extends t {
|
|
6
6
|
constructor(...e) {
|
|
7
7
|
super(...e), this.outline = "variant", this.vertical = !1, this.grow = "start";
|
|
8
8
|
}
|
|
@@ -83,7 +83,7 @@ var o = class extends e {
|
|
|
83
83
|
></div>`;
|
|
84
84
|
}
|
|
85
85
|
};
|
|
86
|
-
|
|
86
|
+
e([r({ type: String })], o.prototype, "outline", void 0), e([r({ type: Boolean })], o.prototype, "vertical", void 0), e([r({ type: String })], o.prototype, "grow", void 0), e([r({
|
|
87
87
|
reflect: !0,
|
|
88
88
|
type: String
|
|
89
|
-
})], o.prototype, "orientation", null), o =
|
|
89
|
+
})], o.prototype, "orientation", null), o = e([n("schmancy-divider")], o);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"divider-
|
|
1
|
+
{"version":3,"file":"divider-BMzm0lOz.js","names":[],"sources":["../src/divider/divider.ts"],"sourcesContent":["// divider.ts\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n@customElement('schmancy-divider')\nexport default class SchmancyDivider extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t}\n\n\t@keyframes grow-horizontal {\n\t\tfrom {\n\t\t\ttransform: scaleX(0);\n\t\t}\n\t\tto {\n\t\t\ttransform: scaleX(1);\n\t\t}\n\t}\n\n\t@keyframes grow-vertical {\n\t\tfrom {\n\t\t\ttransform: scaleY(0);\n\t\t}\n\t\tto {\n\t\t\ttransform: scaleY(1);\n\t\t}\n\t}\n\n\t/* Horizontal divider grow animations */\n\t.grow-start:not(.h-full) {\n\t\tanimation: grow-horizontal 400ms ease-out;\n\t\ttransform-origin: left;\n\t}\n\n\t.grow-end:not(.h-full) {\n\t\tanimation: grow-horizontal 400ms ease-out;\n\t\ttransform-origin: right;\n\t}\n\n\t.grow-both:not(.h-full) {\n\t\tanimation: grow-horizontal 400ms ease-out;\n\t\ttransform-origin: center;\n\t}\n\n\t/* Vertical divider grow animations */\n\t.grow-start.h-full {\n\t\tanimation: grow-vertical 400ms ease-out;\n\t\ttransform-origin: top;\n\t}\n\n\t.grow-end.h-full {\n\t\tanimation: grow-vertical 400ms ease-out;\n\t\ttransform-origin: bottom;\n\t}\n\n\t.grow-both.h-full {\n\t\tanimation: grow-vertical 400ms ease-out;\n\t\ttransform-origin: center;\n\t}\n`]\n\n\t@property({ type: String }) outline: 'default' | 'variant' = 'variant'\n\t@property({ type: Boolean }) vertical = false\n\t@property({ type: String }) grow: 'start' | 'end' | 'both' = 'start'\n\n\t/**\n\t * @deprecated Use `vertical` property instead. Will be removed in next major version.\n\t */\n\t@property({ reflect: true, type: String })\n\tset orientation(value: 'horizontal' | 'vertical') {\n\t\tthis.vertical = value === 'vertical'\n\t}\n\tget orientation(): 'horizontal' | 'vertical' {\n\t\treturn this.vertical ? 'vertical' : 'horizontal'\n\t}\n\n\tprotected render() {\n\t\treturn html`<div\n\t\t\tclass=${this.classMap({\n\t\t\t\t// Dimensions\n\t\t\t\t'w-full h-px': !this.vertical,\n\t\t\t\t'h-full w-px': this.vertical,\n\t\t\t\t// Border color\n\t\t\t\t'border-outlineVariant': this.outline === 'variant',\n\t\t\t\t'border-outline': this.outline === 'default',\n\t\t\t\t// Border style\n\t\t\t\t'border-t': !this.vertical,\n\t\t\t\t'border-l': this.vertical,\n\t\t\t\t// Grow behavior\n\t\t\t\t[`grow-${this.grow}`]: true,\n\t\t\t})}\n\t\t></div>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-divider': SchmancyDivider\n\t}\n}\n"],"mappings":";;;;AAMe,IAAA,IAAA,cAA8B,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,CAAA,GAAA,KAAA,UAyDiB,WAAA,KAAA,WAAA,CACrB,GAAA,KAAA,OACqB;CAAA;CAAA;EAAA,KAAA,SA1D7C,CAAC,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+DpB,IAAA,YACgB,GAAA;EACf,KAAK,WAAW,MAAU;CAC3B;CACA,IAAA,cAAI;EACH,OAAO,KAAK,WAAW,aAAa;CACrC;CAEA,SAAA;EACC,OAAO,CAAI;WACF,KAAK,SAAS;GAErB,eAAA,CAAgB,KAAK;GACrB,eAAe,KAAK;GAEpB,yBAAyB,KAAK,YAAY;GAC1C,kBAAkB,KAAK,YAAY;GAEnC,YAAA,CAAa,KAAK;GAClB,YAAY,KAAK;IAEhB,QAAQ,KAAK,SAAA,CAAS;EAAA,CAAA,EAAA;;CAG1B;AAAA;AAAA,EAAA,CA/BC,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,WAAA,KAAA,CAAA,GAAA,EAAA,CACzB,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,GAAS,EAAA,WAAA,YAAA,KAAA,CAAA,GAAA,EAAA,CAC1B,EAAS,EAAE,MAAM,OAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,QAAA,KAAA,CAAA,GAAA,EAAA,CAKzB,EAAS;CAAE,SAAA,CAAS;CAAM,MAAM;AAAA,CAAA,CAAA,GAAQ,EAAA,WAAA,eAAA,IAAA,GAAA,IAAA,EAAA,CAjEzC,EAAc,kBAAA,CAAA,GAAkB,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require(`./chunk-CncqDLb2.cjs`);const e=require(`./
|
|
1
|
+
require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-DhSiMp6Y.cjs`);require(`./mixins-YQI9JogS.cjs`);let t=require(`lit/decorators.js`),n=require(`lit`);var r=class extends e.t{constructor(...e){super(...e),this.outline=`variant`,this.vertical=!1,this.grow=`start`}static{this.styles=[n.css`
|
|
2
2
|
:host {
|
|
3
3
|
display: block;
|
|
4
4
|
}
|
|
@@ -52,6 +52,6 @@ require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-BF3Vj8_c.cjs`),t=requi
|
|
|
52
52
|
animation: grow-vertical 400ms ease-out;
|
|
53
53
|
transform-origin: center;
|
|
54
54
|
}
|
|
55
|
-
`]}set orientation(e){this.vertical=e===`vertical`}get orientation(){return this.vertical?`vertical`:`horizontal`}render(){return
|
|
55
|
+
`]}set orientation(e){this.vertical=e===`vertical`}get orientation(){return this.vertical?`vertical`:`horizontal`}render(){return n.html`<div
|
|
56
56
|
class=${this.classMap({"w-full h-px":!this.vertical,"h-full w-px":this.vertical,"border-outlineVariant":this.outline===`variant`,"border-outline":this.outline===`default`,"border-t":!this.vertical,"border-l":this.vertical,[`grow-${this.grow}`]:!0})}
|
|
57
|
-
></div>`}};
|
|
57
|
+
></div>`}};e.p([(0,t.property)({type:String})],r.prototype,`outline`,void 0),e.p([(0,t.property)({type:Boolean})],r.prototype,`vertical`,void 0),e.p([(0,t.property)({type:String})],r.prototype,`grow`,void 0),e.p([(0,t.property)({reflect:!0,type:String})],r.prototype,`orientation`,null),r=e.p([(0,t.customElement)(`schmancy-divider`)],r);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"divider-
|
|
1
|
+
{"version":3,"file":"divider-D1OzaRAQ.cjs","names":[],"sources":["../src/divider/divider.ts"],"sourcesContent":["// divider.ts\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n@customElement('schmancy-divider')\nexport default class SchmancyDivider extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t}\n\n\t@keyframes grow-horizontal {\n\t\tfrom {\n\t\t\ttransform: scaleX(0);\n\t\t}\n\t\tto {\n\t\t\ttransform: scaleX(1);\n\t\t}\n\t}\n\n\t@keyframes grow-vertical {\n\t\tfrom {\n\t\t\ttransform: scaleY(0);\n\t\t}\n\t\tto {\n\t\t\ttransform: scaleY(1);\n\t\t}\n\t}\n\n\t/* Horizontal divider grow animations */\n\t.grow-start:not(.h-full) {\n\t\tanimation: grow-horizontal 400ms ease-out;\n\t\ttransform-origin: left;\n\t}\n\n\t.grow-end:not(.h-full) {\n\t\tanimation: grow-horizontal 400ms ease-out;\n\t\ttransform-origin: right;\n\t}\n\n\t.grow-both:not(.h-full) {\n\t\tanimation: grow-horizontal 400ms ease-out;\n\t\ttransform-origin: center;\n\t}\n\n\t/* Vertical divider grow animations */\n\t.grow-start.h-full {\n\t\tanimation: grow-vertical 400ms ease-out;\n\t\ttransform-origin: top;\n\t}\n\n\t.grow-end.h-full {\n\t\tanimation: grow-vertical 400ms ease-out;\n\t\ttransform-origin: bottom;\n\t}\n\n\t.grow-both.h-full {\n\t\tanimation: grow-vertical 400ms ease-out;\n\t\ttransform-origin: center;\n\t}\n`]\n\n\t@property({ type: String }) outline: 'default' | 'variant' = 'variant'\n\t@property({ type: Boolean }) vertical = false\n\t@property({ type: String }) grow: 'start' | 'end' | 'both' = 'start'\n\n\t/**\n\t * @deprecated Use `vertical` property instead. Will be removed in next major version.\n\t */\n\t@property({ reflect: true, type: String })\n\tset orientation(value: 'horizontal' | 'vertical') {\n\t\tthis.vertical = value === 'vertical'\n\t}\n\tget orientation(): 'horizontal' | 'vertical' {\n\t\treturn this.vertical ? 'vertical' : 'horizontal'\n\t}\n\n\tprotected render() {\n\t\treturn html`<div\n\t\t\tclass=${this.classMap({\n\t\t\t\t// Dimensions\n\t\t\t\t'w-full h-px': !this.vertical,\n\t\t\t\t'h-full w-px': this.vertical,\n\t\t\t\t// Border color\n\t\t\t\t'border-outlineVariant': this.outline === 'variant',\n\t\t\t\t'border-outline': this.outline === 'default',\n\t\t\t\t// Border style\n\t\t\t\t'border-t': !this.vertical,\n\t\t\t\t'border-l': this.vertical,\n\t\t\t\t// Grow behavior\n\t\t\t\t[`grow-${this.grow}`]: true,\n\t\t\t})}\n\t\t></div>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-divider': SchmancyDivider\n\t}\n}\n"],"mappings":"uKAMe,IAAA,EAAA,cAA8B,EAAA,CAAA,CAAA,YAAA,GAAA,EAAA,CAAA,MAAA,GAAA,CAAA,EAAA,KAAA,QAyDiB,UAAA,KAAA,SAAA,CACrB,EAAA,KAAA,KACqB,OAAA,CAAA,OAAA,KAAA,OA1D7C,CAAC,EAAA,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DpB,IAAA,YACgB,EAAA,CACf,KAAK,SAAW,IAAU,UAC3B,CACA,IAAA,aAAI,CACH,OAAO,KAAK,SAAW,WAAa,YACrC,CAEA,QAAA,CACC,MAAO,GAAA,IAAI;WACF,KAAK,SAAS,CAErB,cAAA,CAAgB,KAAK,SACrB,cAAe,KAAK,SAEpB,wBAAyB,KAAK,UAAY,UAC1C,iBAAkB,KAAK,UAAY,UAEnC,WAAA,CAAa,KAAK,SAClB,WAAY,KAAK,UAEhB,QAAQ,KAAK,QAAA,CAAS,CAAA,CAAA,EAAA;UAG1B,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UA/BU,CAAE,KAAM,MAAA,CAAA,CAAA,EAAQ,EAAA,UAAA,UAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAChB,CAAE,KAAM,OAAA,CAAA,CAAA,EAAS,EAAA,UAAA,WAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UACjB,CAAE,KAAM,MAAA,CAAA,CAAA,EAAQ,EAAA,UAAA,OAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAKhB,CAAE,QAAA,CAAS,EAAM,KAAM,MAAA,CAAA,CAAA,EAAQ,EAAA,UAAA,cAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,eAjE3B,kBAAA,CAAA,EAAkB,CAAA"}
|
package/dist/divider.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./divider-
|
|
1
|
+
require(`./divider-D1OzaRAQ.cjs`);
|
package/dist/divider.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import "./divider-
|
|
1
|
+
import "./divider-BMzm0lOz.js";
|
package/dist/dropdown.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-DhSiMp6Y.cjs`);require(`./mixins-YQI9JogS.cjs`);let t=require(`rxjs`),n=require(`lit/decorators.js`),r=require(`lit`),i=require(`@floating-ui/dom`);var a=class extends e.t{constructor(...e){super(...e),this.open=!1,this.placement=`bottom-start`,this.distance=8,this.portal=null,this.portalSubscriptions=[]}connectedCallback(){super.connectedCallback(),this.setupPortal(),(0,t.fromEvent)(document,`click`).pipe((0,t.filter)(e=>this.open&&!this.isEventFromSelf(e)),(0,t.takeUntil)(this.disconnecting)).subscribe(()=>{this.open=!1}),(0,t.fromEvent)(document,`keydown`).pipe((0,t.filter)(e=>this.open&&e.key===`Escape`),(0,t.takeUntil)(this.disconnecting)).subscribe(()=>{this.open=!1})}setupPortal(){let e=document.getElementById(`schmancy-portal-container`);e||(e=document.createElement(`div`),e.id=`schmancy-portal-container`,e.style.position=`fixed`,e.style.zIndex=`10000`,e.style.top=`0`,e.style.left=`0`,e.style.pointerEvents=`none`,document.body.appendChild(e));let t=document.createElement(`div`);t.className=`schmancy-dropdown-portal`,t.style.position=`absolute`,t.style.pointerEvents=`auto`,t.style.display=`none`,e.appendChild(t),this.portal=t}isEventFromSelf(e){return e.composedPath().some(e=>e===this)}disconnectedCallback(){this.cleanupPositioner?.(),this.portalSubscriptions.forEach(e=>e.unsubscribe()),this.portalSubscriptions=[],this.portal&&=(this.portal.remove(),null),super.disconnectedCallback()}toggle(){this.open=!this.open}updated(e){super.updated(e),e.has(`open`)&&(this.open?this.setupPositioner():(this.cleanupPositioner?.(),this.portal&&(this.portal.style.display=`none`,this.portal.innerHTML=``,this.portalSubscriptions.forEach(e=>e.unsubscribe()),this.portalSubscriptions=[])))}setupPositioner(){this.triggerContainer&&this.portal&&(this.portal.style.display=`block`,this.teleportContentToPortal(),this.cleanupPositioner=(0,i.autoUpdate)(this.triggerContainer,this.portal,()=>{(0,i.computePosition)(this.triggerContainer,this.portal,{placement:this.placement,middleware:[(0,i.offset)(this.distance),(0,i.flip)({fallbackPlacements:[`top-start`,`bottom-start`]}),(0,i.shift)({padding:0})]}).then(({x:e,y:t})=>{Object.assign(this.portal.style,{left:`${e}px`,top:t-8+`px`})})}))}teleportContentToPortal(){this.portal&&(this.portalSubscriptions.forEach(e=>e.unsubscribe()),this.portalSubscriptions=[],this.portal.innerHTML=``,this.contentElements.forEach(e=>{let n=e.cloneNode(!0);if(e.tagName.toLowerCase()===`schmancy-dropdown-content`){let e=(0,t.fromEvent)(n,`slotchange`).subscribe(()=>{let e=n.shadowRoot?.querySelector(`[part="content"]`);e&&e.classList.add(`schmancy-dropdown-content`)});this.portalSubscriptions.push(e)}this.portal?.appendChild(n)}))}handleTriggerClick(e){e.stopPropagation(),this.toggle()}render(){return r.html`
|
|
2
2
|
<div class="trigger-container" @click=${this.handleTriggerClick}>
|
|
3
3
|
<slot name="trigger"></slot>
|
|
4
4
|
</div>
|
|
@@ -8,7 +8,7 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./ch
|
|
|
8
8
|
@slotchange=${()=>{this.open&&(this.teleportContentToPortal(),this.setupPositioner())}}
|
|
9
9
|
></slot>
|
|
10
10
|
</div>
|
|
11
|
-
`}};
|
|
11
|
+
`}};e.p([(0,n.property)({type:Boolean,reflect:!0})],a.prototype,`open`,void 0),e.p([(0,n.property)({type:String})],a.prototype,`placement`,void 0),e.p([(0,n.property)({type:Number})],a.prototype,`distance`,void 0),e.p([(0,n.query)(`.trigger-container`)],a.prototype,`triggerContainer`,void 0),e.p([(0,n.query)(`.dropdown-content-container`)],a.prototype,`contentContainer`,void 0),e.p([(0,n.queryAssignedElements)({flatten:!0})],a.prototype,`contentElements`,void 0),e.p([(0,n.state)()],a.prototype,`portal`,void 0),e.p([(0,n.queryAssignedElements)({slot:`trigger`,flatten:!0})],a.prototype,`triggerElements`,void 0),a=e.p([(0,n.customElement)(`schmancy-dropdown`)],a);var o=class extends e.t{constructor(...e){super(...e),this.width=`auto`,this.maxHeight=`80vh`,this.shadow=!0,this.radius=`md`}static{this.styles=[r.css`
|
|
12
12
|
:host {
|
|
13
13
|
display: block;
|
|
14
14
|
position: absolute;
|
|
@@ -50,8 +50,8 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./ch
|
|
|
50
50
|
transform-origin: top left;
|
|
51
51
|
animation: dropdownAnimation 0.1s ease-out forwards;
|
|
52
52
|
}
|
|
53
|
-
`]}render(){let e={"schmancy-dropdown-content":!0,"overflow-auto":!0,"shadow-none":!this.shadow,"rounded-none":this.radius===`none`,"rounded-sm":this.radius===`sm`,"rounded-md":this.radius===`md`,"rounded-lg":this.radius===`lg`,"rounded-full":this.radius===`full`},t={width:this.width,maxHeight:this.maxHeight};return
|
|
53
|
+
`]}render(){let e={"schmancy-dropdown-content":!0,"overflow-auto":!0,"shadow-none":!this.shadow,"rounded-none":this.radius===`none`,"rounded-sm":this.radius===`sm`,"rounded-md":this.radius===`md`,"rounded-lg":this.radius===`lg`,"rounded-full":this.radius===`full`},t={width:this.width,maxHeight:this.maxHeight};return r.html`
|
|
54
54
|
<div class=${this.classMap(e)} style=${this.styleMap(t)} part="content">
|
|
55
55
|
<slot></slot>
|
|
56
56
|
</div>
|
|
57
|
-
`}};
|
|
57
|
+
`}};e.p([(0,n.property)({type:String})],o.prototype,`width`,void 0),e.p([(0,n.property)({type:String})],o.prototype,`maxHeight`,void 0),e.p([(0,n.property)({type:Boolean})],o.prototype,`shadow`,void 0),e.p([(0,n.property)({type:String})],o.prototype,`radius`,void 0),o=e.p([(0,n.customElement)(`schmancy-dropdown-content`)],o),Object.defineProperty(exports,`SchmancyDropdown`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`SchmancyDropdownContent`,{enumerable:!0,get:function(){return o}});
|
package/dist/dropdown.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown.cjs","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.cjs","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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"}
|
package/dist/dropdown.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { p as e, t } from "./SchmancyElement-BQ4DFufc.js";
|
|
2
|
+
import "./mixins-BYfSDvbP.js";
|
|
3
3
|
import { filter as n, fromEvent as r, takeUntil as i } from "rxjs";
|
|
4
4
|
import { customElement as a, property as o, query as s, queryAssignedElements as c, state as l } from "lit/decorators.js";
|
|
5
5
|
import { css as u, html as d } from "lit";
|
|
6
6
|
import { autoUpdate as f, computePosition as p, flip as m, offset as h, shift as g } from "@floating-ui/dom";
|
|
7
|
-
var _ = class extends
|
|
7
|
+
var _ = class extends t {
|
|
8
8
|
constructor(...e) {
|
|
9
9
|
super(...e), this.open = !1, this.placement = "bottom-start", this.distance = 8, this.portal = null, this.portalSubscriptions = [];
|
|
10
10
|
}
|
|
@@ -82,14 +82,14 @@ var _ = class extends e {
|
|
|
82
82
|
`;
|
|
83
83
|
}
|
|
84
84
|
};
|
|
85
|
-
|
|
85
|
+
e([o({
|
|
86
86
|
type: Boolean,
|
|
87
87
|
reflect: !0
|
|
88
|
-
})], _.prototype, "open", void 0),
|
|
88
|
+
})], _.prototype, "open", void 0), e([o({ type: String })], _.prototype, "placement", void 0), e([o({ type: Number })], _.prototype, "distance", void 0), e([s(".trigger-container")], _.prototype, "triggerContainer", void 0), e([s(".dropdown-content-container")], _.prototype, "contentContainer", void 0), e([c({ flatten: !0 })], _.prototype, "contentElements", void 0), e([l()], _.prototype, "portal", void 0), e([c({
|
|
89
89
|
slot: "trigger",
|
|
90
90
|
flatten: !0
|
|
91
|
-
})], _.prototype, "triggerElements", void 0), _ =
|
|
92
|
-
var v = class extends
|
|
91
|
+
})], _.prototype, "triggerElements", void 0), _ = e([a("schmancy-dropdown")], _);
|
|
92
|
+
var v = class extends t {
|
|
93
93
|
constructor(...e) {
|
|
94
94
|
super(...e), this.width = "auto", this.maxHeight = "80vh", this.shadow = !0, this.radius = "md";
|
|
95
95
|
}
|
|
@@ -159,5 +159,5 @@ var v = class extends e {
|
|
|
159
159
|
`;
|
|
160
160
|
}
|
|
161
161
|
};
|
|
162
|
-
|
|
162
|
+
e([o({ type: String })], v.prototype, "width", void 0), e([o({ type: String })], v.prototype, "maxHeight", void 0), e([o({ type: Boolean })], v.prototype, "shadow", void 0), e([o({ type: String })], v.prototype, "radius", void 0), v = e([a("schmancy-dropdown-content")], v);
|
|
163
163
|
export { _ as SchmancyDropdown, v as SchmancyDropdownContent };
|
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 = [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":";;;;;;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,QAgD5B,QAAA,KAAA,YAMI,QAAA,KAAA,SAAA,CAMF,GAAA,KAAA,SAM6B;CAAA;CAAA;EAAA,KAAA,SAjE/B,CAAC,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmEpB,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,CAlE1B,EAAc,2BAAA,CAAA,GAA2B,CAAA;AAAA,SAAA,KAAA,kBAAA,KAAA"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { p as e, t } from "./SchmancyElement-BQ4DFufc.js";
|
|
2
|
+
import { t as n } from "./mixins-BYfSDvbP.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-C2TIedTq.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";
|
|
9
9
|
import { customElement as f, property as p, state as m } from "lit/decorators.js";
|
|
10
10
|
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
|
-
var b = class extends t
|
|
12
|
+
var b = class extends n(t) {
|
|
13
13
|
constructor(...e) {
|
|
14
14
|
super(...e), this.type = "solid", 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
|
}
|
|
@@ -179,8 +179,8 @@ var b = class extends t(e) {
|
|
|
179
179
|
` : _;
|
|
180
180
|
}
|
|
181
181
|
};
|
|
182
|
-
|
|
183
|
-
var x = "schmancy-expand-request-close", S = class extends
|
|
182
|
+
e([p({ reflect: !0 })], b.prototype, "type", void 0), e([m()], b.prototype, "isOpen", void 0), b = e([f("schmancy-expand-root")], b);
|
|
183
|
+
var x = "schmancy-expand-request-close", S = class extends t {
|
|
184
184
|
constructor(...e) {
|
|
185
185
|
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 = v(), this._contentSlotRef = v(), this._root = null, this._movedNodes = [];
|
|
186
186
|
}
|
|
@@ -328,14 +328,14 @@ var x = "schmancy-expand-request-close", S = class extends e {
|
|
|
328
328
|
`;
|
|
329
329
|
}
|
|
330
330
|
};
|
|
331
|
-
|
|
331
|
+
e([p()], S.prototype, "summary", void 0), e([p({
|
|
332
332
|
type: Boolean,
|
|
333
333
|
reflect: !0
|
|
334
|
-
})], S.prototype, "open", void 0),
|
|
334
|
+
})], S.prototype, "open", void 0), e([p({ attribute: "summary-padding" })], S.prototype, "summaryPadding", void 0), e([p({ attribute: "content-padding" })], S.prototype, "contentPadding", void 0), e([p({
|
|
335
335
|
type: Boolean,
|
|
336
336
|
attribute: "hide-indicator"
|
|
337
|
-
})], S.prototype, "hideIndicator", void 0),
|
|
337
|
+
})], S.prototype, "hideIndicator", void 0), e([p({
|
|
338
338
|
type: Number,
|
|
339
339
|
attribute: "indicator-rotate"
|
|
340
|
-
})], S.prototype, "indicatorRotate", void 0),
|
|
340
|
+
})], S.prototype, "indicatorRotate", void 0), e([p({ type: Boolean })], S.prototype, "backdrop", void 0), e([p({ type: Boolean })], S.prototype, "inline", void 0), S = e([f("schmancy-expand")], S);
|
|
341
341
|
export { b as n, x as t };
|