@mhmo91/schmancy 0.9.12 → 0.9.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -0
- package/custom-elements.json +236 -0
- package/dist/agent/flow-CaPi2G8y.js.map +1 -0
- package/dist/agent/schmancy.agent.js +36474 -0
- package/dist/agent/schmancy.agent.js.map +1 -0
- package/dist/agent/schmancy.manifest.json +7027 -0
- package/dist/agent/vendor-highlight-CHJZQQB7.js +2178 -0
- package/dist/agent/vendor-highlight-CHJZQQB7.js.map +1 -0
- package/dist/agent/vendor-jsqr-r7GNh4P3.js +10212 -0
- package/dist/agent/vendor-jsqr-r7GNh4P3.js.map +1 -0
- package/dist/agent/vendor-material-color-Be96dpGE.js +3309 -0
- package/dist/agent/vendor-material-color-Be96dpGE.js.map +1 -0
- package/dist/{animation-Bcwh107v.cjs.map → animation-CQRdLgzX.cjs.map} +1 -1
- package/dist/{animation-CXKSuUoE.js.map → animation-hXFClrIn.js.map} +1 -1
- package/dist/{area-CBjmKtN-.cjs → area-DBjAhgjP.cjs} +2 -2
- package/dist/area-DBjAhgjP.cjs.map +1 -0
- package/dist/{area-CjX0Ckh9.js → area-Dr4I9R2p.js} +23 -35
- package/dist/area-Dr4I9R2p.js.map +1 -0
- package/dist/area.cjs +1 -1
- package/dist/area.js +3 -2
- package/dist/{audio-DUVz7Ars.cjs → audio-Dvr-RBzE.cjs} +1 -1
- package/dist/{audio-DUVz7Ars.cjs.map → audio-Dvr-RBzE.cjs.map} +1 -1
- package/dist/{audio-C7TzWI8M.js → audio-ql6nvY0y.js} +1 -1
- package/dist/{audio-C7TzWI8M.js.map → audio-ql6nvY0y.js.map} +1 -1
- package/dist/audio.cjs +1 -1
- package/dist/audio.js +2 -2
- package/dist/{autocomplete-ppoaK_GD.js → autocomplete-CgWUCUU-.js} +3 -3
- package/dist/{autocomplete-ppoaK_GD.js.map → autocomplete-CgWUCUU-.js.map} +1 -1
- package/dist/{autocomplete-WQxz4VGO.cjs → autocomplete-EM0jE7X2.cjs} +1 -1
- package/dist/{autocomplete-WQxz4VGO.cjs.map → autocomplete-EM0jE7X2.cjs.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-C-T9RDiG.cjs → boat-BjYJI1HS.cjs} +1 -1
- package/dist/{boat-C-T9RDiG.cjs.map → boat-BjYJI1HS.cjs.map} +1 -1
- package/dist/{boat-C4JnoakD.js → boat-Dw8TmOzN.js} +4 -4
- package/dist/{boat-C4JnoakD.js.map → boat-Dw8TmOzN.js.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/breadcrumb.cjs +1 -1
- package/dist/breadcrumb.js +1 -1
- package/dist/{busy-BMRUS_Ns.cjs → busy-BmiumJpB.cjs} +1 -1
- package/dist/{busy-BMRUS_Ns.cjs.map → busy-BmiumJpB.cjs.map} +1 -1
- package/dist/{busy-DuV4A5PX.js → busy-D2hP3fOy.js} +1 -1
- package/dist/{busy-DuV4A5PX.js.map → busy-D2hP3fOy.js.map} +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.cjs.map +1 -1
- package/dist/button.js +4 -4
- package/dist/button.js.map +1 -1
- package/dist/{card-DBjGfCxi.cjs → card-BslSqOsf.cjs} +1 -1
- package/dist/{card-DBjGfCxi.cjs.map → card-BslSqOsf.cjs.map} +1 -1
- package/dist/{card-DzXRouJC.js → card-CEdgK9nb.js} +2 -2
- package/dist/{card-DzXRouJC.js.map → card-CEdgK9nb.js.map} +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/charts.cjs +1 -1
- package/dist/charts.js +1 -1
- package/dist/{checkbox-BwuhSBDG.js → checkbox-Br84TiCs.js} +2 -2
- package/dist/{checkbox-BwuhSBDG.js.map → checkbox-Br84TiCs.js.map} +1 -1
- package/dist/{checkbox-BibOr-sJ.cjs → checkbox-DtcFMgZL.cjs} +1 -1
- package/dist/{checkbox-BibOr-sJ.cjs.map → checkbox-DtcFMgZL.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-DiB2BfTQ.js → chips-BNYOweGm.js} +5 -5
- package/dist/{chips-DiB2BfTQ.js.map → chips-BNYOweGm.js.map} +1 -1
- package/dist/{chips-D5QvIKt6.cjs → chips-DoCu5YQb.cjs} +1 -1
- package/dist/{chips-D5QvIKt6.cjs.map → chips-DoCu5YQb.cjs.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/chunk-BM5alsTp.js +18 -0
- package/dist/chunk-CncqDLb2.cjs +1 -0
- package/dist/{code-highlight-B5_zONzv.js → code-highlight-BgExKEto.js} +1 -1
- package/dist/{code-highlight-B5_zONzv.js.map → code-highlight-BgExKEto.js.map} +1 -1
- package/dist/{code-highlight-Q2x2hrWg.cjs → code-highlight-zSYcSfCz.cjs} +1 -1
- package/dist/{code-highlight-Q2x2hrWg.cjs.map → code-highlight-zSYcSfCz.cjs.map} +1 -1
- package/dist/code-highlight.cjs +1 -1
- package/dist/code-highlight.js +1 -1
- package/dist/{components-CjLqW8Jp.js → components-DjKNS9R_.js} +1 -1
- package/dist/{components-CjLqW8Jp.js.map → components-DjKNS9R_.js.map} +1 -1
- package/dist/{components-jfFxyq6z.cjs → components-TJT8-tva.cjs} +1 -1
- package/dist/{components-jfFxyq6z.cjs.map → components-TJT8-tva.cjs.map} +1 -1
- package/dist/components.cjs +1 -1
- package/dist/components.js +1 -1
- package/dist/connectivity.cjs +1 -1
- package/dist/connectivity.js +2 -2
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/context-CAYQh-mx.cjs +1 -0
- package/dist/{context-BRtGc7PP.cjs.map → context-CAYQh-mx.cjs.map} +1 -1
- package/dist/context-D8Q66KPe.js +3 -0
- package/dist/{context-DgD3c6q-.js.map → context-D8Q66KPe.js.map} +1 -1
- package/dist/{cursor-glow-C2YRrB8Z.js → cursor-glow-BydlDInj.js} +1 -1
- package/dist/{cursor-glow-C2YRrB8Z.js.map → cursor-glow-BydlDInj.js.map} +1 -1
- package/dist/{cursor-glow-82y5h3E4.cjs → cursor-glow-Duw9jHmh.cjs} +1 -1
- package/dist/{cursor-glow-82y5h3E4.cjs.map → cursor-glow-Duw9jHmh.cjs.map} +1 -1
- package/dist/{date-range-DF5ROfrb.cjs → date-range-CIWYm3eS.cjs} +1 -1
- package/dist/{date-range-DF5ROfrb.cjs.map → date-range-CIWYm3eS.cjs.map} +1 -1
- package/dist/{date-range-inline-LLC3Y0mi.cjs → date-range-inline-B9Dp2z6C.cjs} +1 -1
- package/dist/{date-range-inline-LLC3Y0mi.cjs.map → date-range-inline-B9Dp2z6C.cjs.map} +1 -1
- package/dist/{date-range-inline-B_g1YXu3.js.map → date-range-inline-CpKG6qt2.js.map} +1 -1
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/{date-range-Dcy8GSov.js → date-range-sGkC0KF3.js} +4 -4
- package/dist/{date-range-Dcy8GSov.js.map → date-range-sGkC0KF3.js.map} +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-aQRihOO4.cjs → delay-Bu4WMQlV.cjs} +1 -1
- package/dist/{delay-aQRihOO4.cjs.map → delay-Bu4WMQlV.cjs.map} +1 -1
- package/dist/{delay-B7TvigGw.js → delay-DwX65fSc.js} +4 -4
- package/dist/{delay-B7TvigGw.js.map → delay-DwX65fSc.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{details-Cs8yStsJ.cjs → details-B8p62xmR.cjs} +1 -1
- package/dist/{details-Cs8yStsJ.cjs.map → details-B8p62xmR.cjs.map} +1 -1
- package/dist/{details-DfYDNHuv.js → details-CCW52lzz.js} +5 -5
- package/dist/{details-DfYDNHuv.js.map → details-CCW52lzz.js.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{dialog-service-DXLGSshF.cjs → dialog-service-CzDO08Gy.cjs} +1 -1
- package/dist/{dialog-service-DXLGSshF.cjs.map → dialog-service-CzDO08Gy.cjs.map} +1 -1
- package/dist/{dialog-service-CCFGpU7a.js → dialog-service-DH-tjPuE.js} +2 -2
- package/dist/{dialog-service-CCFGpU7a.js.map → dialog-service-DH-tjPuE.js.map} +1 -1
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.cjs.map +1 -1
- package/dist/dialog.js +5 -5
- package/dist/directives.cjs +1 -1
- package/dist/directives.cjs.map +1 -1
- package/dist/directives.js +5 -5
- package/dist/directives.js.map +1 -1
- package/dist/discovery.cjs +1 -1
- package/dist/{divider-DE9pcMw3.js → divider-CbEWg3G_.js} +1 -1
- package/dist/{divider-DE9pcMw3.js.map → divider-CbEWg3G_.js.map} +1 -1
- package/dist/{divider-DY4ocl-Z.cjs → divider-JyyFw_3J.cjs} +1 -1
- package/dist/{divider-DY4ocl-Z.cjs.map → divider-JyyFw_3J.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +2 -2
- package/dist/{expand-Cuu9u0j5.cjs → expand-BmwIPNjq.cjs} +1 -1
- package/dist/{expand-Cuu9u0j5.cjs.map → expand-BmwIPNjq.cjs.map} +1 -1
- package/dist/{expand-Cwis2Y6U.js → expand-bFa_qVDT.js} +4 -4
- package/dist/{expand-Cwis2Y6U.js.map → expand-bFa_qVDT.js.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/{extra-DRIgrdHx.cjs → extra-BUgyMgjl.cjs} +1 -1
- package/dist/{extra-DRIgrdHx.cjs.map → extra-BUgyMgjl.cjs.map} +1 -1
- package/dist/{extra-DoxLBpZ-.js → extra-HwbaUnCD.js} +1 -1
- package/dist/{extra-DoxLBpZ-.js.map → extra-HwbaUnCD.js.map} +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/float-BQwhfibw.cjs +1 -0
- package/dist/{float-I4wePTk7.cjs.map → float-BQwhfibw.cjs.map} +1 -1
- package/dist/{float-2aPqW2lz.js → float-D5ezUurt.js} +1 -1
- package/dist/{float-2aPqW2lz.js.map → float-D5ezUurt.js.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/flow-BGkHnOnd.js +386 -0
- package/dist/{flow-BPDtbhLe.js.map → flow-BGkHnOnd.js.map} +1 -1
- package/dist/{flow-Dn9AZktE.cjs.map → flow-ClAJ6Qby.cjs.map} +1 -1
- package/dist/{form-C1qS9uvS.js.map → form-rCZqoAoK.js.map} +1 -1
- package/dist/{form-CzD0JLxM.cjs → form-wI58M85H.cjs} +1 -1
- package/dist/{form-CzD0JLxM.cjs.map → form-wI58M85H.cjs.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{hashContent-BUqULUiZ.js.map → hashContent-B2IntJQf.js.map} +1 -1
- package/dist/{hashContent-CI39BY-_.cjs.map → hashContent-CahnEuut.cjs.map} +1 -1
- package/dist/{icons-UOqapID2.cjs → icons-B6V3nZ4-.cjs} +1 -1
- package/dist/{icons-UOqapID2.cjs.map → icons-B6V3nZ4-.cjs.map} +1 -1
- package/dist/{icons-DDQBxhDC.js → icons-C5-DIjet.js} +2 -2
- package/dist/{icons-DDQBxhDC.js.map → icons-C5-DIjet.js.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-CMTUyiz1.js → iframe-BXBsuLwt.js} +1 -1
- package/dist/{iframe-CMTUyiz1.js.map → iframe-BXBsuLwt.js.map} +1 -1
- package/dist/{iframe-FZCULDVM.cjs → iframe-C7sHg7RC.cjs} +1 -1
- package/dist/{iframe-FZCULDVM.cjs.map → iframe-C7sHg7RC.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 +53 -52
- package/dist/{input-DIuyi3Gm.cjs → input-BGNZlfL8.cjs} +1 -1
- package/dist/{input-DIuyi3Gm.cjs.map → input-BGNZlfL8.cjs.map} +1 -1
- package/dist/{input-HzweUBSn.js → input-Bc3bVISm.js} +1 -1
- package/dist/{input-HzweUBSn.js.map → input-Bc3bVISm.js.map} +1 -1
- package/dist/{input-chip-Bt2Lzi-2.js → input-chip-CiG61y-N.js} +1 -1
- package/dist/{input-chip-Bt2Lzi-2.js.map → input-chip-CiG61y-N.js.map} +1 -1
- package/dist/{input-chip-nghCxe9L.cjs → input-chip-p24lkYtY.cjs} +1 -1
- package/dist/{input-chip-nghCxe9L.cjs.map → input-chip-p24lkYtY.cjs.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/{intersection-C0JuW_7U.js.map → intersection-BrXp4YTO.js.map} +1 -1
- package/dist/{intersection-MvbRovUz.cjs → intersection-DqBqnpgh.cjs} +1 -1
- package/dist/{intersection-MvbRovUz.cjs.map → intersection-DqBqnpgh.cjs.map} +1 -1
- package/dist/json.cjs +1 -1
- package/dist/json.js +2 -2
- package/dist/kbd.cjs +1 -1
- package/dist/kbd.js +1 -1
- package/dist/{layout-DHt4hK1n.cjs → layout-B0_IXfov.cjs} +1 -1
- package/dist/{layout-DHt4hK1n.cjs.map → layout-B0_IXfov.cjs.map} +1 -1
- package/dist/{layout-PZCF3kwl.cjs → layout-CTfRXQoz.cjs} +1 -1
- package/dist/{layout-PZCF3kwl.cjs.map → layout-CTfRXQoz.cjs.map} +1 -1
- package/dist/{layout-BUq6VVj0.js → layout-Cqghi_rx.js} +2 -2
- package/dist/{layout-BUq6VVj0.js.map → layout-Cqghi_rx.js.map} +1 -1
- package/dist/{layout-BE2ld1IY.js → layout-fjM1DWlF.js} +1 -1
- package/dist/{layout-BE2ld1IY.js.map → layout-fjM1DWlF.js.map} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +2 -2
- package/dist/lazy-BDNnH_r7.cjs +1 -0
- package/dist/lazy-BDNnH_r7.cjs.map +1 -0
- package/dist/lazy-D6R5N5v4.js +13 -0
- package/dist/lazy-D6R5N5v4.js.map +1 -0
- package/dist/{lightbox-CbAbyhzE.cjs → lightbox-BWKTzA03.cjs} +1 -1
- package/dist/{lightbox-CbAbyhzE.cjs.map → lightbox-BWKTzA03.cjs.map} +1 -1
- package/dist/{lightbox-p_uYC9Hy.js → lightbox-CnCTvqSu.js} +3 -3
- package/dist/{lightbox-p_uYC9Hy.js.map → lightbox-CnCTvqSu.js.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-DG1shv4_.js → list-BpjKUOzM.js} +2 -2
- package/dist/{list-DG1shv4_.js.map → list-BpjKUOzM.js.map} +1 -1
- package/dist/{list-pvbKwpnz.cjs → list-CMWHu6cV.cjs} +1 -1
- package/dist/{list-pvbKwpnz.cjs.map → list-CMWHu6cV.cjs.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-BLb2kIHg.js → litElement.mixin-BnNYZ24e.js} +1 -1
- package/dist/{litElement.mixin-BLb2kIHg.js.map → litElement.mixin-BnNYZ24e.js.map} +1 -1
- package/dist/{litElement.mixin-Bx9Avv0M.cjs → litElement.mixin-CtQOmwq6.cjs} +1 -1
- package/dist/{litElement.mixin-Bx9Avv0M.cjs.map → litElement.mixin-CtQOmwq6.cjs.map} +1 -1
- package/dist/{magnetic-Dj52WplI.js → magnetic-BhXebqF3.js} +2 -2
- package/dist/{magnetic-Dj52WplI.js.map → magnetic-BhXebqF3.js.map} +1 -1
- package/dist/{magnetic-aBBnj_vk.cjs → magnetic-CVXEkYTA.cjs} +1 -1
- package/dist/{magnetic-aBBnj_vk.cjs.map → magnetic-CVXEkYTA.cjs.map} +1 -1
- package/dist/{mailbox-BCRplIro.js → mailbox-CHIpxS3W.js} +5 -5
- package/dist/{mailbox-BCRplIro.js.map → mailbox-CHIpxS3W.js.map} +1 -1
- package/dist/{mailbox-CZevIxwZ.cjs → mailbox-Tg1CROVz.cjs} +1 -1
- package/dist/{mailbox-CZevIxwZ.cjs.map → mailbox-Tg1CROVz.cjs.map} +1 -1
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-BUcxWqBH.js → map-YY1Q4FWO.js} +1 -1
- package/dist/{map-BUcxWqBH.js.map → map-YY1Q4FWO.js.map} +1 -1
- package/dist/{map-C6kDkAju.cjs → map-Z_dsu-dv.cjs} +1 -1
- package/dist/{map-C6kDkAju.cjs.map → map-Z_dsu-dv.cjs.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{menu-BleltblR.js → menu-BIBUgS1T.js} +2 -2
- package/dist/{menu-BleltblR.js.map → menu-BIBUgS1T.js.map} +1 -1
- package/dist/{menu-DhmDz_js.cjs → menu-DS8Iz4fJ.cjs} +1 -1
- package/dist/{menu-DhmDz_js.cjs.map → menu-DS8Iz4fJ.cjs.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.js +2 -2
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/navigation-bar.cjs +1 -1
- package/dist/navigation-bar.js +1 -1
- package/dist/navigation-rail.cjs +1 -1
- package/dist/navigation-rail.js +1 -1
- package/dist/{notification-DvrozLTu.js → notification-ChAvNXf3.js} +3 -3
- package/dist/notification-ChAvNXf3.js.map +1 -0
- package/dist/{notification-BT84PlwC.cjs → notification-DPUkuifB.cjs} +1 -1
- package/dist/notification-DPUkuifB.cjs.map +1 -0
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-EEYkHd44.js → option-Ci7C8xxh.js} +1 -1
- package/dist/{option-EEYkHd44.js.map → option-Ci7C8xxh.js.map} +1 -1
- package/dist/{option-y5FY8sz-.cjs → option-OIp0joyN.cjs} +1 -1
- package/dist/{option-y5FY8sz-.cjs.map → option-OIp0joyN.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{overlay-stack-J_eJCUTX.cjs.map → overlay-stack-7bs4ZNnh.cjs.map} +1 -1
- package/dist/{overlay-stack-BJt_r6aZ.js.map → overlay-stack-DXPYHPhk.js.map} +1 -1
- package/dist/overlay.cjs +130 -0
- package/dist/overlay.cjs.map +1 -0
- package/dist/overlay.js +570 -0
- package/dist/overlay.js.map +1 -0
- package/dist/page.cjs +1 -1
- package/dist/page.cjs.map +1 -1
- package/dist/page.js +4 -4
- package/dist/{progress-B1if5cWu.cjs → progress-32Cad1NX.cjs} +1 -1
- package/dist/{progress-B1if5cWu.cjs.map → progress-32Cad1NX.cjs.map} +1 -1
- package/dist/{progress-B8nfhvrc.js → progress-DGkwPgDX.js} +1 -1
- package/dist/{progress-B8nfhvrc.js.map → progress-DGkwPgDX.js.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{provide-BEMtticm.js → provide-BuzyBLGj.js} +1 -1
- package/dist/{provide-BEMtticm.js.map → provide-BuzyBLGj.js.map} +1 -1
- package/dist/{provide-BbFbvIEk.cjs → provide-MvHcXKzT.cjs} +1 -1
- package/dist/{provide-BbFbvIEk.cjs.map → provide-MvHcXKzT.cjs.map} +1 -1
- package/dist/qr-scanner.cjs +1 -1
- package/dist/qr-scanner.js +1 -1
- package/dist/{radio-group-DKXbC-jL.js → radio-group-B72sYGnS.js} +1 -1
- package/dist/{radio-group-DKXbC-jL.js.map → radio-group-B72sYGnS.js.map} +1 -1
- package/dist/{radio-group-DafTK0PB.cjs → radio-group-B7DuNxUq.cjs} +1 -1
- package/dist/{radio-group-DafTK0PB.cjs.map → radio-group-B7DuNxUq.cjs.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/range.cjs +1 -1
- package/dist/range.js +1 -1
- package/dist/{reduced-motion-DR32yKEO.cjs → reduced-motion-9RjNnhIg.cjs} +1 -1
- package/dist/{reduced-motion-DR32yKEO.cjs.map → reduced-motion-9RjNnhIg.cjs.map} +1 -1
- package/dist/{reduced-motion-B83yZbcO.js.map → reduced-motion-BZTLqAyl.js.map} +1 -1
- package/dist/{rxjs-utils-CN9fv8Xq.js → rxjs-utils-CKTnEKUH.js} +1 -1
- package/dist/{rxjs-utils-CN9fv8Xq.js.map → rxjs-utils-CKTnEKUH.js.map} +1 -1
- package/dist/{rxjs-utils-Vn6DCKgL.cjs → rxjs-utils-DJbZRjp3.cjs} +1 -1
- package/dist/{rxjs-utils-Vn6DCKgL.cjs.map → rxjs-utils-DJbZRjp3.cjs.map} +1 -1
- package/dist/rxjs-utils.cjs +1 -1
- package/dist/rxjs-utils.js +1 -1
- package/dist/{scroll-pdsp_9bT.js → scroll-CdmXRXh2.js} +1 -1
- package/dist/{scroll-pdsp_9bT.js.map → scroll-CdmXRXh2.js.map} +1 -1
- package/dist/{scroll-C6Hub5gG.cjs → scroll-V1rAZ9fK.cjs} +1 -1
- package/dist/{scroll-C6Hub5gG.cjs.map → scroll-V1rAZ9fK.cjs.map} +1 -1
- package/dist/{search-BlGJ6uJv.js.map → search-CvUZRLF1.js.map} +1 -1
- package/dist/{search-C8eAOzBm.cjs.map → search-CwMav5QB.cjs.map} +1 -1
- package/dist/{select-Zg9UqtCA.cjs → select-DFxoBgEf.cjs} +1 -1
- package/dist/{select-Zg9UqtCA.cjs.map → select-DFxoBgEf.cjs.map} +1 -1
- package/dist/{select-_Qkleofb.js → select-wFDKDLQI.js} +2 -2
- package/dist/{select-_Qkleofb.js.map → select-wFDKDLQI.js.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-7LWVKgW9.cjs → sheet-DdlZhnDG.cjs} +2 -2
- package/dist/{sheet-7LWVKgW9.cjs.map → sheet-DdlZhnDG.cjs.map} +1 -1
- package/dist/{sheet-N9TET_t_.js → sheet-LFVo5iN4.js} +4 -4
- package/dist/{sheet-N9TET_t_.js.map → sheet-LFVo5iN4.js.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +2 -2
- package/dist/{sheet.service-P2CkJW86.cjs → sheet.service-BfNDB0K0.cjs} +1 -1
- package/dist/{sheet.service-P2CkJW86.cjs.map → sheet.service-BfNDB0K0.cjs.map} +1 -1
- package/dist/{sheet.service-DCe4FOkQ.js → sheet.service-DQE7-_wq.js} +3 -3
- package/dist/{sheet.service-DCe4FOkQ.js.map → sheet.service-DQE7-_wq.js.map} +1 -1
- package/dist/skeleton.cjs +1 -1
- package/dist/skeleton.js +1 -1
- package/dist/skills/INDEX.md +1 -1
- package/dist/skills/overlay.md +200 -0
- package/dist/skills/schmancy/INDEX.md +1 -1
- package/dist/skills/schmancy/overlay.md +200 -0
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{sound.service-BjSoGjmT.cjs → sound.service-BEN6Xjy_.cjs} +1 -1
- package/dist/{sound.service-BjSoGjmT.cjs.map → sound.service-BEN6Xjy_.cjs.map} +1 -1
- package/dist/{sound.service-cdkw3Wkv.js → sound.service-DWZe6swU.js} +1 -1
- package/dist/{sound.service-cdkw3Wkv.js.map → sound.service-DWZe6swU.js.map} +1 -1
- package/dist/{splash-screen-BUKRc46i.cjs → splash-screen-C9HqX2nR.cjs} +1 -1
- package/dist/{splash-screen-BUKRc46i.cjs.map → splash-screen-C9HqX2nR.cjs.map} +1 -1
- package/dist/{splash-screen-B5Sgz7eG.js → splash-screen-COg3Z6n8.js} +1 -1
- package/dist/{splash-screen-B5Sgz7eG.js.map → splash-screen-COg3Z6n8.js.map} +1 -1
- package/dist/splash-screen.cjs +1 -1
- package/dist/splash-screen.js +1 -1
- package/dist/{src-59eVZMmI.js → src-C7niWYur.js} +51 -51
- package/dist/src-C7niWYur.js.map +1 -0
- package/dist/{src-r2bV-AFk.cjs → src-I4M33WK2.cjs} +3 -3
- package/dist/src-I4M33WK2.cjs.map +1 -0
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +3 -3
- package/dist/{store-CO4nJyGj.cjs → store-CjFHCSDb.cjs} +1 -1
- package/dist/{store-CO4nJyGj.cjs.map → store-CjFHCSDb.cjs.map} +1 -1
- package/dist/{store-Bmj6rvZY.js.map → store-CjzZDQt8.js.map} +1 -1
- package/dist/store.cjs +1 -1
- package/dist/store.js +1 -1
- package/dist/{surface-BL6YlaS3.js → surface-0XM4DBaT.js} +2 -2
- package/dist/{surface-BL6YlaS3.js.map → surface-0XM4DBaT.js.map} +1 -1
- package/dist/{surface-B-y5Zzmz.cjs → surface-B6DA01kL.cjs} +1 -1
- package/dist/{surface-B-y5Zzmz.cjs.map → surface-B6DA01kL.cjs.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{surface.mixin-CSKqQH-0.cjs → surface.mixin-DxOi-xo0.cjs} +1 -1
- package/dist/{surface.mixin-CSKqQH-0.cjs.map → surface.mixin-DxOi-xo0.cjs.map} +1 -1
- package/dist/switch.cjs +1 -1
- package/dist/switch.js +1 -1
- package/dist/{table-CzcIcVFc.cjs → table-B-DsOqzT.cjs} +2 -2
- package/dist/{table-CzcIcVFc.cjs.map → table-B-DsOqzT.cjs.map} +1 -1
- package/dist/{table-B0-Pi4G5.js → table-hBEZRxM_.js} +3 -3
- package/dist/{table-B0-Pi4G5.js.map → table-hBEZRxM_.js.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-D-VbZiFu.js → tabs-C7r4TqcX.js} +2 -2
- package/dist/{tabs-D-VbZiFu.js.map → tabs-C7r4TqcX.js.map} +1 -1
- package/dist/{tabs-CzC8kJyY.cjs → tabs-DZaLZUBy.cjs} +1 -1
- package/dist/{tabs-CzC8kJyY.cjs.map → tabs-DZaLZUBy.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tailwind.mixin-Bh58QnlW.cjs +2 -0
- package/dist/{tailwind.mixin-ZzkXQTFA.cjs.map → tailwind.mixin-Bh58QnlW.cjs.map} +1 -1
- package/dist/tailwind.mixin-H5Pn7vSJ.js +219 -0
- package/dist/{tailwind.mixin-BCz3GEpw.js.map → tailwind.mixin-H5Pn7vSJ.js.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-CgB6XptL.cjs → textarea-B2544vx9.cjs} +1 -1
- package/dist/{textarea-CgB6XptL.cjs.map → textarea-B2544vx9.cjs.map} +1 -1
- package/dist/{textarea-ZopeteYQ.js → textarea-CS-KdSLz.js} +1 -1
- package/dist/{textarea-ZopeteYQ.js.map → textarea-CS-KdSLz.js.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-C7As-iVa.js → theme-Cq_c9IO3.js} +7 -7
- package/dist/{theme-C7As-iVa.js.map → theme-Cq_c9IO3.js.map} +1 -1
- package/dist/{theme-D9bRCDs9.cjs → theme-DU5yXaV-.cjs} +1 -1
- package/dist/{theme-D9bRCDs9.cjs.map → theme-DU5yXaV-.cjs.map} +1 -1
- package/dist/{theme-button-D2nMfwSr.cjs → theme-button-CPujUbgV.cjs} +1 -1
- package/dist/{theme-button-D2nMfwSr.cjs.map → theme-button-CPujUbgV.cjs.map} +1 -1
- package/dist/{theme-button-BDXtIhZC.js → theme-button-OJl2ma0u.js} +1 -1
- package/dist/{theme-button-BDXtIhZC.js.map → theme-button-OJl2ma0u.js.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.events-EznKK2Y0.cjs.map → theme.events-DakXxZeP.cjs.map} +1 -1
- package/dist/{theme.events-Bw3mYjUA.js.map → theme.events-NuihzD_p.js.map} +1 -1
- package/dist/{theme.interface-Cyqv5XWY.js.map → theme.interface-Buged9Cg.js.map} +1 -1
- package/dist/{theme.interface-CCE3L1ql.cjs.map → theme.interface-DTwkuAKJ.cjs.map} +1 -1
- package/dist/theme.js +5 -5
- package/dist/{theme.service-ETiKUwVy.cjs → theme.service-DxJPUGlu.cjs} +1 -1
- package/dist/{theme.service-ETiKUwVy.cjs.map → theme.service-DxJPUGlu.cjs.map} +1 -1
- package/dist/{theme.service-_qP5WvB9.js → theme.service-cOfPrtfe.js} +2 -2
- package/dist/{theme.service-_qP5WvB9.js.map → theme.service-cOfPrtfe.js.map} +1 -1
- package/dist/tooltip.cjs +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.cjs.map +1 -1
- package/dist/tree.js +1 -1
- package/dist/{tslib.es6-PMITL0Z3.cjs.map → tslib.es6-Cnt75pb6.cjs.map} +1 -1
- package/dist/{tslib.es6-vJQZBGJO.js.map → tslib.es6-DMzzJKHV.js.map} +1 -1
- package/dist/{typewriter-DaTkMEHc.js → typewriter-DyN7xa0n.js} +5 -5
- package/dist/{typewriter-DaTkMEHc.js.map → typewriter-DyN7xa0n.js.map} +1 -1
- package/dist/{typewriter-BjuFsiR3.cjs → typewriter-LK0S4NEr.cjs} +1 -1
- package/dist/{typewriter-BjuFsiR3.cjs.map → typewriter-LK0S4NEr.cjs.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/dist/{utils-C8PD8So2.cjs → utils-2qrmPb78.cjs} +1 -1
- package/dist/{utils-C8PD8So2.cjs.map → utils-2qrmPb78.cjs.map} +1 -1
- package/dist/{utils-DVuCPDfw.js → utils-xBXLvebz.js} +3 -3
- package/dist/{utils-DVuCPDfw.js.map → utils-xBXLvebz.js.map} +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +5 -5
- package/dist/visually-hidden.cjs +1 -1
- package/dist/visually-hidden.js +1 -1
- package/dist/{window-DPSIGCUq.js → window-BWecg8Ih.js} +6 -6
- package/dist/{window-DPSIGCUq.js.map → window-BWecg8Ih.js.map} +1 -1
- package/dist/{window-DAWRoXo1.cjs → window-Cjv2GqSN.cjs} +1 -1
- package/dist/{window-DAWRoXo1.cjs.map → window-Cjv2GqSN.cjs.map} +1 -1
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/package.json +15 -3
- package/skills/schmancy/INDEX.md +1 -1
- package/skills/schmancy/overlay.md +200 -0
- package/src/agent/agent-bundle.test.ts +92 -0
- package/src/agent/agent-entry.ts +17 -0
- package/src/agent/helpers.ts +161 -0
- package/src/agent/index.ts +1 -0
- package/src/agent/schmancy-skill.ts +71 -0
- package/src/agent/virtual-manifest.d.ts +10 -0
- package/src/area/area.service.ts +11 -0
- package/src/content-drawer/drawer.service.ts +9 -0
- package/src/dialog/dialog-service.ts +11 -1
- package/src/notification/notification-service.ts +11 -1
- package/src/overlay/index.ts +15 -0
- package/src/overlay/overlay.animations.ts +137 -0
- package/src/overlay/overlay.component.ts +452 -0
- package/src/overlay/overlay.confirm-body.ts +149 -0
- package/src/overlay/overlay.gestures.ts +131 -0
- package/src/overlay/overlay.layout.ts +76 -0
- package/src/overlay/overlay.service.ts +299 -0
- package/src/overlay/overlay.stack.ts +171 -0
- package/src/overlay/overlay.types.ts +146 -0
- package/src/sheet/sheet.service.ts +10 -0
- package/src/theme/theme.service.ts +11 -1
- package/types/src/agent/agent-bundle.test.d.ts +1 -0
- package/types/src/agent/agent-entry.d.ts +4 -0
- package/types/src/agent/helpers.d.ts +87 -0
- package/types/src/agent/index.d.ts +1 -0
- package/types/src/agent/schmancy-skill.d.ts +33 -0
- package/types/src/area/area.service.d.ts +11 -0
- package/types/src/content-drawer/drawer.service.d.ts +9 -0
- package/types/src/dialog/dialog-service.d.ts +11 -1
- package/types/src/notification/notification-service.d.ts +11 -1
- package/types/src/overlay/index.d.ts +5 -0
- package/types/src/overlay/overlay.animations.d.ts +26 -0
- package/types/src/overlay/overlay.component.d.ts +48 -0
- package/types/src/overlay/overlay.confirm-body.d.ts +42 -0
- package/types/src/overlay/overlay.gestures.d.ts +39 -0
- package/types/src/overlay/overlay.layout.d.ts +48 -0
- package/types/src/overlay/overlay.service.d.ts +62 -0
- package/types/src/overlay/overlay.stack.d.ts +25 -0
- package/types/src/overlay/overlay.types.d.ts +122 -0
- package/types/src/sheet/sheet.service.d.ts +9 -0
- package/types/src/theme/theme.service.d.ts +11 -0
- package/dist/area-CBjmKtN-.cjs.map +0 -1
- package/dist/area-CjX0Ckh9.js.map +0 -1
- package/dist/chunk-BCfY8kxB.cjs +0 -1
- package/dist/context-BRtGc7PP.cjs +0 -1
- package/dist/context-DgD3c6q-.js +0 -3
- package/dist/float-I4wePTk7.cjs +0 -1
- package/dist/notification-BT84PlwC.cjs.map +0 -1
- package/dist/notification-DvrozLTu.js.map +0 -1
- package/dist/src-59eVZMmI.js.map +0 -1
- package/dist/src-r2bV-AFk.cjs.map +0 -1
- package/dist/tailwind.mixin-BCz3GEpw.js +0 -219
- package/dist/tailwind.mixin-ZzkXQTFA.cjs +0 -2
- /package/dist/{flow-BPDtbhLe.js → agent/flow-CaPi2G8y.js} +0 -0
- /package/dist/{chunk-C_1VqBVD.js → agent/rolldown-runtime-DsMetpgY.js} +0 -0
- /package/dist/{animation-Bcwh107v.cjs → animation-CQRdLgzX.cjs} +0 -0
- /package/dist/{animation-CXKSuUoE.js → animation-hXFClrIn.js} +0 -0
- /package/dist/{date-range-inline-B_g1YXu3.js → date-range-inline-CpKG6qt2.js} +0 -0
- /package/dist/{flow-Dn9AZktE.cjs → flow-ClAJ6Qby.cjs} +0 -0
- /package/dist/{form-C1qS9uvS.js → form-rCZqoAoK.js} +0 -0
- /package/dist/{hashContent-BUqULUiZ.js → hashContent-B2IntJQf.js} +0 -0
- /package/dist/{hashContent-CI39BY-_.cjs → hashContent-CahnEuut.cjs} +0 -0
- /package/dist/{intersection-C0JuW_7U.js → intersection-BrXp4YTO.js} +0 -0
- /package/dist/{overlay-stack-J_eJCUTX.cjs → overlay-stack-7bs4ZNnh.cjs} +0 -0
- /package/dist/{overlay-stack-BJt_r6aZ.js → overlay-stack-DXPYHPhk.js} +0 -0
- /package/dist/{reduced-motion-B83yZbcO.js → reduced-motion-BZTLqAyl.js} +0 -0
- /package/dist/{search-BlGJ6uJv.js → search-CvUZRLF1.js} +0 -0
- /package/dist/{search-C8eAOzBm.cjs → search-CwMav5QB.cjs} +0 -0
- /package/dist/{store-Bmj6rvZY.js → store-CjzZDQt8.js} +0 -0
- /package/dist/{theme.events-EznKK2Y0.cjs → theme.events-DakXxZeP.cjs} +0 -0
- /package/dist/{theme.events-Bw3mYjUA.js → theme.events-NuihzD_p.js} +0 -0
- /package/dist/{theme.interface-Cyqv5XWY.js → theme.interface-Buged9Cg.js} +0 -0
- /package/dist/{theme.interface-CCE3L1ql.cjs → theme.interface-DTwkuAKJ.cjs} +0 -0
- /package/dist/{tslib.es6-PMITL0Z3.cjs → tslib.es6-Cnt75pb6.cjs} +0 -0
- /package/dist/{tslib.es6-vJQZBGJO.js → tslib.es6-DMzzJKHV.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./chunk-
|
|
1
|
+
require(`./chunk-CncqDLb2.cjs`);const e=require(`./tailwind.mixin-Bh58QnlW.cjs`),t=require(`./audio-Dvr-RBzE.cjs`),n=require(`./overlay-stack-7bs4ZNnh.cjs`);let r=require(`rxjs`);var i=function(e){return e.Side=`side`,e.Bottom=`bottom`,e}({}),a=new class{constructor(){this.bottomSheet=new r.Subject,this.activeSheets=new Set,this.popStateListenerActive=!1,this.setupSheetOpeningLogic(),this.setupPopStateListener()}setupSheetOpeningLogic(){this.bottomSheet.pipe((0,r.switchMap)(t=>{let n=t.uid??`sheet-${Date.now()}`;return e.p(`schmancy-sheet`).pipe((0,r.map)(e=>({target:t,existingSheet:e?.getAttribute(`uid`)===n?e:null,uid:n})))}),(0,r.switchMap)(({target:t,existingSheet:n,uid:i})=>n?(0,r.of)({target:t,sheet:n,uid:i}):e.p(`schmancy-theme`).pipe((0,r.map)(e=>{let n=e||document.body,r=document.createElement(`schmancy-sheet`);return r.setAttribute(`uid`,i),n.appendChild(r),{target:t,sheet:r,uid:i}}))),(0,r.tap)(({target:e,sheet:t})=>{e.lock&&t.setAttribute(`lock`,`true`);let r=e.position||(window.innerWidth>=768?i.Side:i.Bottom);t.setAttribute(`position`,r),e.persist&&t.setAttribute(`persist`,String(e.persist)),t.style.setProperty(`--schmancy-overlay-z`,String(n.t.getNextZIndex())),document.body.style.overflow=`hidden`}),(0,r.delay)(20),(0,r.tap)(({target:e,uid:t})=>{window.dispatchEvent(new CustomEvent(`schmancy-sheet-render`,{detail:{component:e.component,uid:t,props:e.props},bubbles:!0,composed:!0}))}),(0,r.delay)(1),(0,r.tap)(({sheet:e,uid:i})=>{e.setAttribute(`open`,`true`),t.t.play(`curious`),this.activeSheets.add(i),(0,r.fromEvent)(e,`close`).pipe((0,r.take)(1),(0,r.delay)(300)).subscribe(()=>{this.activeSheets.delete(i),n.t.release();let t=e.getAttribute(`persist`);t&&t!==`false`||e.remove(),document.body.style.overflow=`auto`})})).subscribe()}setupPopStateListener(){this.popStateListenerActive||=((0,r.fromEvent)(window,`popstate`).subscribe(e=>{if(this.activeSheets.size>0){let t=Array.from(this.activeSheets).pop();t&&(this.dismiss(t),e.state&&e.state.schmancySheet&&history.pushState({},``,window.location.href))}}),!0)}dismiss(e){if(!e&&this.activeSheets.size>0){let t=Array.from(this.activeSheets);e=t[t.length-1]}e&&(t.t.play(`atEase`),window.dispatchEvent(new CustomEvent(`schmancy-sheet-dismiss`,{detail:{uid:e},bubbles:!0,composed:!0})),this.activeSheets.delete(e))}open(e){this.bottomSheet.next(e)}push(e){this.bottomSheet.next(e)}isOpen(e){return this.activeSheets.has(e)}closeAll(){Array.from(this.activeSheets).forEach(e=>{this.dismiss(e)})}};Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return i}});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sheet.service-P2CkJW86.cjs","names":[],"sources":["../src/sheet/sheet.service.ts"],"sourcesContent":["import {\n\tdelay,\n\tfromEvent,\n\tmap,\n\tof,\n\tSubject,\n\tswitchMap,\n\ttake,\n\ttap,\n} from 'rxjs'\nimport { $sounds } from '../audio'\nimport { ComponentType } from '../area/router.types'\nimport { discoverComponent } from '@mixins/discovery.service'\nimport { overlayStack } from '../utils/overlay-stack'\nimport SchmancySheet from './sheet'\n\nexport enum SchmancySheetPosition {\n\tSide = 'side',\n\tBottom = 'bottom',\n}\n\nexport type SheetConfig = {\n\tcomponent: ComponentType\n\tuid?: string\n\tposition?: SchmancySheetPosition\n\tpersist?: boolean\n\tclose?: () => void\n\tlock?: boolean // Controls both ESC and overlay click dismissal\n\tonBeforeOpen?: (component: HTMLElement) => void\n\tonAfterOpen?: (component: HTMLElement) => void\n\tprops?: Record<string, unknown> // Properties to pass to the component\n}\n\n// Keep old name for backward compatibility\ntype BottomSheeetTarget = SheetConfig\n\n// Function to determine the position based on screen size\nconst getPosition = (): SchmancySheetPosition => {\n\treturn window.innerWidth >= 768 ? SchmancySheetPosition.Side : SchmancySheetPosition.Bottom // Adjust 768 as needed for your breakpoint\n}\n\nclass BottomSheetService {\n\tbottomSheet = new Subject<BottomSheeetTarget>()\n\t// Track currently open sheets\n\tprivate activeSheets = new Set<string>()\n\t// To track if we've set up the popstate listener\n\tprivate popStateListenerActive = false\n\n\tconstructor() {\n\t\tthis.setupSheetOpeningLogic()\n\t\tthis.setupPopStateListener()\n\t}\n\n\t/**\n\t * Sets up the main sheet opening logic\n\t */\n\tprivate setupSheetOpeningLogic() {\n\t\tthis.bottomSheet\n\t\t\t.pipe(\n\t\t\t\tswitchMap(target => {\n\t\t\t\t\tconst uid = target.uid ?? `sheet-${Date.now()}`\n\n\t\t\t\t\t// Discover existing sheet with this uid\n\t\t\t\t\treturn discoverComponent<SchmancySheet>('schmancy-sheet').pipe(\n\t\t\t\t\t\tmap(existingSheet => {\n\t\t\t\t\t\t\t// Check if discovered sheet matches our uid\n\t\t\t\t\t\t\tconst sheet = existingSheet?.getAttribute('uid') === uid ? existingSheet : null\n\t\t\t\t\t\t\treturn { target, existingSheet: sheet, uid }\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\tswitchMap(({ target, existingSheet, uid }) => {\n\t\t\t\t\t// Discover theme container if creating new sheet\n\t\t\t\t\tif (existingSheet) {\n\t\t\t\t\t\treturn of({ target, sheet: existingSheet, uid })\n\t\t\t\t\t}\n\n\t\t\t\t\treturn discoverComponent<HTMLElement>('schmancy-theme').pipe(\n\t\t\t\t\t\tmap(theme => {\n\t\t\t\t\t\t\t// Determine container - use theme or fallback to body\n\t\t\t\t\t\t\tconst targetContainer = theme || document.body\n\n\t\t\t\t\t\t\t// Create new sheet\n\t\t\t\t\t\t\tconst sheet = document.createElement('schmancy-sheet')\n\t\t\t\t\t\t\tsheet.setAttribute('uid', uid)\n\t\t\t\t\t\t\ttargetContainer.appendChild(sheet)\n\n\t\t\t\t\t\t\treturn { target, sheet: sheet as SchmancySheet, uid }\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\t// Configure sheet attributes\n\t\t\t\t\tif (target.lock) sheet.setAttribute('lock', 'true')\n\n\t\t\t\t\tconst position = target.position || getPosition()\n\t\t\t\t\tsheet.setAttribute('position', position)\n\n\t\t\t\t\tif (target.persist) sheet.setAttribute('persist', String(target.persist))\n\n\t\t\t\t\t// Set dynamic z-index for proper stacking with dialogs\n\t\t\t\t\tsheet.style.setProperty('--schmancy-overlay-z', String(overlayStack.getNextZIndex()))\n\n\t\t\t\t\tdocument.body.style.overflow = 'hidden' // lock the scroll of the host\n\t\t\t\t}),\n\t\t\t\tdelay(20),\n\t\t\t\ttap(({ target, uid }) => {\n\t\t\t\t\t// Dispatch render event - area router handles duplicate prevention\n\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\tnew CustomEvent('schmancy-sheet-render', {\n\t\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\t\tcomponent: target.component,\n\t\t\t\t\t\t\t\tuid,\n\t\t\t\t\t\t\t\tprops: target.props\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\tdelay(1),\n\t\t\t\ttap(({ sheet, uid }) => {\n\t\t\t\t\tsheet.setAttribute('open', 'true')\n\t\t\t\t\t$sounds.play('curious')\n\n\t\t\t\t\t// Add to active sheets tracking\n\t\t\t\t\tthis.activeSheets.add(uid)\n\n\t\t\t\t\t// Set up close event listener\n\t\t\t\t\tfromEvent<CustomEvent>(sheet, 'close')\n\t\t\t\t\t\t.pipe(take(1), delay(300))\n\t\t\t\t\t\t.subscribe(() => {\n\t\t\t\t\t\t\t// Remove from active sheets tracking\n\t\t\t\t\t\t\tthis.activeSheets.delete(uid)\n\t\t\t\t\t\t\toverlayStack.release()\n\n\t\t\t\t\t\t\t// Only keep sheet if persist is explicitly set to a truthy value\n\t\t\t\t\t\t\tconst persistAttr = sheet.getAttribute('persist')\n\t\t\t\t\t\t\tconst shouldRemove = !persistAttr || persistAttr === 'false'\n\n\t\t\t\t\t\t\tif (shouldRemove) {\n\t\t\t\t\t\t\t\tsheet.remove()\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdocument.body.style.overflow = 'auto' // unlock the scroll of the host\n\t\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Sets up the popstate listener to handle browser back button\n\t */\n\tprivate setupPopStateListener() {\n\t\tif (this.popStateListenerActive) return\n\n\t\tfromEvent<PopStateEvent>(window, 'popstate').subscribe(event => {\n\t\t\t// If we have active sheets, close the most recently opened one\n\t\t\tif (this.activeSheets.size > 0) {\n\t\t\t\t// Get the last sheet (Set maintains insertion order)\n\t\t\t\tconst lastSheet = Array.from(this.activeSheets).pop()\n\t\t\t\tif (lastSheet) {\n\t\t\t\t\tthis.dismiss(lastSheet)\n\n\t\t\t\t\t// Prevent default navigation behavior by pushing a new state\n\t\t\t\t\t// This effectively cancels out the back navigation\n\t\t\t\t\tif (event.state && event.state.schmancySheet) {\n\t\t\t\t\t\thistory.pushState({}, '', window.location.href)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tthis.popStateListenerActive = true\n\t}\n\n\t/**\n\t * Dismiss a sheet by uid, or dismiss the most recently opened sheet if no uid provided\n\t */\n\tdismiss(uid?: string) {\n\t\tif (!uid && this.activeSheets.size > 0) {\n\t\t\t// Get the last sheet opened (Set maintains insertion order)\n\t\t\tconst sheetsArray = Array.from(this.activeSheets)\n\t\t\tuid = sheetsArray[sheetsArray.length - 1]\n\t\t}\n\n\t\tif (uid) {\n\t\t\t$sounds.play('atEase')\n\t\t\twindow.dispatchEvent(\n\t\t\t\tnew CustomEvent('schmancy-sheet-dismiss', {\n\t\t\t\t\tdetail: { uid },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t})\n\t\t\t)\n\t\t\tthis.activeSheets.delete(uid)\n\t\t}\n\t}\n\n\t/**\n\t * Open a sheet with the given target configuration\n\t * @deprecated Use `push` instead for consistency with area router API\n\t */\n\topen(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n\n\t/**\n\t * Push a component to the sheet (recommended method)\n\t * Follows the same API pattern as area.push for consistency\n\t */\n\tpush(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n\n\t/**\n\t * Check if a sheet is currently open by uid\n\t */\n\tisOpen(uid: string): boolean {\n\t\treturn this.activeSheets.has(uid)\n\t}\n\n\t/**\n\t * Close all open sheets\n\t */\n\tcloseAll() {\n\t\t// Copy the set to avoid modification during iteration\n\t\tArray.from(this.activeSheets).forEach(uid => {\n\t\t\tthis.dismiss(uid)\n\t\t})\n\t}\n\n}\nexport const sheet = new BottomSheetService()\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sheet.service-BfNDB0K0.cjs","names":[],"sources":["../src/sheet/sheet.service.ts"],"sourcesContent":["import {\n\tdelay,\n\tfromEvent,\n\tmap,\n\tof,\n\tSubject,\n\tswitchMap,\n\ttake,\n\ttap,\n} from 'rxjs'\nimport { $sounds } from '../audio'\nimport { ComponentType } from '../area/router.types'\nimport { discoverComponent } from '@mixins/discovery.service'\nimport { overlayStack } from '../utils/overlay-stack'\nimport SchmancySheet from './sheet'\n\nexport enum SchmancySheetPosition {\n\tSide = 'side',\n\tBottom = 'bottom',\n}\n\nexport type SheetConfig = {\n\tcomponent: ComponentType\n\tuid?: string\n\tposition?: SchmancySheetPosition\n\tpersist?: boolean\n\tclose?: () => void\n\tlock?: boolean // Controls both ESC and overlay click dismissal\n\tonBeforeOpen?: (component: HTMLElement) => void\n\tonAfterOpen?: (component: HTMLElement) => void\n\tprops?: Record<string, unknown> // Properties to pass to the component\n}\n\n// Keep old name for backward compatibility\ntype BottomSheeetTarget = SheetConfig\n\n// Function to determine the position based on screen size\nconst getPosition = (): SchmancySheetPosition => {\n\treturn window.innerWidth >= 768 ? SchmancySheetPosition.Side : SchmancySheetPosition.Bottom // Adjust 768 as needed for your breakpoint\n}\n\nclass BottomSheetService {\n\tbottomSheet = new Subject<BottomSheeetTarget>()\n\t// Track currently open sheets\n\tprivate activeSheets = new Set<string>()\n\t// To track if we've set up the popstate listener\n\tprivate popStateListenerActive = false\n\n\tconstructor() {\n\t\tthis.setupSheetOpeningLogic()\n\t\tthis.setupPopStateListener()\n\t}\n\n\t/**\n\t * Sets up the main sheet opening logic\n\t */\n\tprivate setupSheetOpeningLogic() {\n\t\tthis.bottomSheet\n\t\t\t.pipe(\n\t\t\t\tswitchMap(target => {\n\t\t\t\t\tconst uid = target.uid ?? `sheet-${Date.now()}`\n\n\t\t\t\t\t// Discover existing sheet with this uid\n\t\t\t\t\treturn discoverComponent<SchmancySheet>('schmancy-sheet').pipe(\n\t\t\t\t\t\tmap(existingSheet => {\n\t\t\t\t\t\t\t// Check if discovered sheet matches our uid\n\t\t\t\t\t\t\tconst sheet = existingSheet?.getAttribute('uid') === uid ? existingSheet : null\n\t\t\t\t\t\t\treturn { target, existingSheet: sheet, uid }\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\tswitchMap(({ target, existingSheet, uid }) => {\n\t\t\t\t\t// Discover theme container if creating new sheet\n\t\t\t\t\tif (existingSheet) {\n\t\t\t\t\t\treturn of({ target, sheet: existingSheet, uid })\n\t\t\t\t\t}\n\n\t\t\t\t\treturn discoverComponent<HTMLElement>('schmancy-theme').pipe(\n\t\t\t\t\t\tmap(theme => {\n\t\t\t\t\t\t\t// Determine container - use theme or fallback to body\n\t\t\t\t\t\t\tconst targetContainer = theme || document.body\n\n\t\t\t\t\t\t\t// Create new sheet\n\t\t\t\t\t\t\tconst sheet = document.createElement('schmancy-sheet')\n\t\t\t\t\t\t\tsheet.setAttribute('uid', uid)\n\t\t\t\t\t\t\ttargetContainer.appendChild(sheet)\n\n\t\t\t\t\t\t\treturn { target, sheet: sheet as SchmancySheet, uid }\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\t// Configure sheet attributes\n\t\t\t\t\tif (target.lock) sheet.setAttribute('lock', 'true')\n\n\t\t\t\t\tconst position = target.position || getPosition()\n\t\t\t\t\tsheet.setAttribute('position', position)\n\n\t\t\t\t\tif (target.persist) sheet.setAttribute('persist', String(target.persist))\n\n\t\t\t\t\t// Set dynamic z-index for proper stacking with dialogs\n\t\t\t\t\tsheet.style.setProperty('--schmancy-overlay-z', String(overlayStack.getNextZIndex()))\n\n\t\t\t\t\tdocument.body.style.overflow = 'hidden' // lock the scroll of the host\n\t\t\t\t}),\n\t\t\t\tdelay(20),\n\t\t\t\ttap(({ target, uid }) => {\n\t\t\t\t\t// Dispatch render event - area router handles duplicate prevention\n\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\tnew CustomEvent('schmancy-sheet-render', {\n\t\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\t\tcomponent: target.component,\n\t\t\t\t\t\t\t\tuid,\n\t\t\t\t\t\t\t\tprops: target.props\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\tdelay(1),\n\t\t\t\ttap(({ sheet, uid }) => {\n\t\t\t\t\tsheet.setAttribute('open', 'true')\n\t\t\t\t\t$sounds.play('curious')\n\n\t\t\t\t\t// Add to active sheets tracking\n\t\t\t\t\tthis.activeSheets.add(uid)\n\n\t\t\t\t\t// Set up close event listener\n\t\t\t\t\tfromEvent<CustomEvent>(sheet, 'close')\n\t\t\t\t\t\t.pipe(take(1), delay(300))\n\t\t\t\t\t\t.subscribe(() => {\n\t\t\t\t\t\t\t// Remove from active sheets tracking\n\t\t\t\t\t\t\tthis.activeSheets.delete(uid)\n\t\t\t\t\t\t\toverlayStack.release()\n\n\t\t\t\t\t\t\t// Only keep sheet if persist is explicitly set to a truthy value\n\t\t\t\t\t\t\tconst persistAttr = sheet.getAttribute('persist')\n\t\t\t\t\t\t\tconst shouldRemove = !persistAttr || persistAttr === 'false'\n\n\t\t\t\t\t\t\tif (shouldRemove) {\n\t\t\t\t\t\t\t\tsheet.remove()\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdocument.body.style.overflow = 'auto' // unlock the scroll of the host\n\t\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Sets up the popstate listener to handle browser back button\n\t */\n\tprivate setupPopStateListener() {\n\t\tif (this.popStateListenerActive) return\n\n\t\tfromEvent<PopStateEvent>(window, 'popstate').subscribe(event => {\n\t\t\t// If we have active sheets, close the most recently opened one\n\t\t\tif (this.activeSheets.size > 0) {\n\t\t\t\t// Get the last sheet (Set maintains insertion order)\n\t\t\t\tconst lastSheet = Array.from(this.activeSheets).pop()\n\t\t\t\tif (lastSheet) {\n\t\t\t\t\tthis.dismiss(lastSheet)\n\n\t\t\t\t\t// Prevent default navigation behavior by pushing a new state\n\t\t\t\t\t// This effectively cancels out the back navigation\n\t\t\t\t\tif (event.state && event.state.schmancySheet) {\n\t\t\t\t\t\thistory.pushState({}, '', window.location.href)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tthis.popStateListenerActive = true\n\t}\n\n\t/**\n\t * Dismiss a sheet by uid, or dismiss the most recently opened sheet if no uid provided\n\t */\n\tdismiss(uid?: string) {\n\t\tif (!uid && this.activeSheets.size > 0) {\n\t\t\t// Get the last sheet opened (Set maintains insertion order)\n\t\t\tconst sheetsArray = Array.from(this.activeSheets)\n\t\t\tuid = sheetsArray[sheetsArray.length - 1]\n\t\t}\n\n\t\tif (uid) {\n\t\t\t$sounds.play('atEase')\n\t\t\twindow.dispatchEvent(\n\t\t\t\tnew CustomEvent('schmancy-sheet-dismiss', {\n\t\t\t\t\tdetail: { uid },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t})\n\t\t\t)\n\t\t\tthis.activeSheets.delete(uid)\n\t\t}\n\t}\n\n\t/**\n\t * Open a sheet with the given target configuration\n\t * @deprecated Use `push` instead for consistency with area router API\n\t */\n\topen(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n\n\t/**\n\t * Push a component to the sheet (recommended method)\n\t * Follows the same API pattern as area.push for consistency\n\t */\n\tpush(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n\n\t/**\n\t * Check if a sheet is currently open by uid\n\t */\n\tisOpen(uid: string): boolean {\n\t\treturn this.activeSheets.has(uid)\n\t}\n\n\t/**\n\t * Close all open sheets\n\t */\n\tcloseAll() {\n\t\t// Copy the set to avoid modification during iteration\n\t\tArray.from(this.activeSheets).forEach(uid => {\n\t\t\tthis.dismiss(uid)\n\t\t})\n\t}\n\n}\n\n/**\n * Bottom / side sheet service. Mounts any element as a sheet with a chosen\n * position (see `SchmancySheetPosition` enum).\n *\n * @service\n * @summary Imperative bottom / side sheet surface.\n * @method open({ component, position? }) - Mount an element as a sheet.\n * @method dismiss(id?) - Dismiss a sheet by id, or the topmost.\n */\nexport const sheet = new BottomSheetService()\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { p as e } from "./tailwind.mixin-
|
|
2
|
-
import { t } from "./audio-
|
|
3
|
-
import { t as n } from "./overlay-stack-
|
|
1
|
+
import { p as e } from "./tailwind.mixin-H5Pn7vSJ.js";
|
|
2
|
+
import { t } from "./audio-ql6nvY0y.js";
|
|
3
|
+
import { t as n } from "./overlay-stack-DXPYHPhk.js";
|
|
4
4
|
import { Subject as r, delay as i, fromEvent as a, map as o, of as s, switchMap as c, take as l, tap as u } from "rxjs";
|
|
5
5
|
var d = function(e) {
|
|
6
6
|
return e.Side = "side", e.Bottom = "bottom", e;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sheet.service-DCe4FOkQ.js","names":[],"sources":["../src/sheet/sheet.service.ts"],"sourcesContent":["import {\n\tdelay,\n\tfromEvent,\n\tmap,\n\tof,\n\tSubject,\n\tswitchMap,\n\ttake,\n\ttap,\n} from 'rxjs'\nimport { $sounds } from '../audio'\nimport { ComponentType } from '../area/router.types'\nimport { discoverComponent } from '@mixins/discovery.service'\nimport { overlayStack } from '../utils/overlay-stack'\nimport SchmancySheet from './sheet'\n\nexport enum SchmancySheetPosition {\n\tSide = 'side',\n\tBottom = 'bottom',\n}\n\nexport type SheetConfig = {\n\tcomponent: ComponentType\n\tuid?: string\n\tposition?: SchmancySheetPosition\n\tpersist?: boolean\n\tclose?: () => void\n\tlock?: boolean // Controls both ESC and overlay click dismissal\n\tonBeforeOpen?: (component: HTMLElement) => void\n\tonAfterOpen?: (component: HTMLElement) => void\n\tprops?: Record<string, unknown> // Properties to pass to the component\n}\n\n// Keep old name for backward compatibility\ntype BottomSheeetTarget = SheetConfig\n\n// Function to determine the position based on screen size\nconst getPosition = (): SchmancySheetPosition => {\n\treturn window.innerWidth >= 768 ? SchmancySheetPosition.Side : SchmancySheetPosition.Bottom // Adjust 768 as needed for your breakpoint\n}\n\nclass BottomSheetService {\n\tbottomSheet = new Subject<BottomSheeetTarget>()\n\t// Track currently open sheets\n\tprivate activeSheets = new Set<string>()\n\t// To track if we've set up the popstate listener\n\tprivate popStateListenerActive = false\n\n\tconstructor() {\n\t\tthis.setupSheetOpeningLogic()\n\t\tthis.setupPopStateListener()\n\t}\n\n\t/**\n\t * Sets up the main sheet opening logic\n\t */\n\tprivate setupSheetOpeningLogic() {\n\t\tthis.bottomSheet\n\t\t\t.pipe(\n\t\t\t\tswitchMap(target => {\n\t\t\t\t\tconst uid = target.uid ?? `sheet-${Date.now()}`\n\n\t\t\t\t\t// Discover existing sheet with this uid\n\t\t\t\t\treturn discoverComponent<SchmancySheet>('schmancy-sheet').pipe(\n\t\t\t\t\t\tmap(existingSheet => {\n\t\t\t\t\t\t\t// Check if discovered sheet matches our uid\n\t\t\t\t\t\t\tconst sheet = existingSheet?.getAttribute('uid') === uid ? existingSheet : null\n\t\t\t\t\t\t\treturn { target, existingSheet: sheet, uid }\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\tswitchMap(({ target, existingSheet, uid }) => {\n\t\t\t\t\t// Discover theme container if creating new sheet\n\t\t\t\t\tif (existingSheet) {\n\t\t\t\t\t\treturn of({ target, sheet: existingSheet, uid })\n\t\t\t\t\t}\n\n\t\t\t\t\treturn discoverComponent<HTMLElement>('schmancy-theme').pipe(\n\t\t\t\t\t\tmap(theme => {\n\t\t\t\t\t\t\t// Determine container - use theme or fallback to body\n\t\t\t\t\t\t\tconst targetContainer = theme || document.body\n\n\t\t\t\t\t\t\t// Create new sheet\n\t\t\t\t\t\t\tconst sheet = document.createElement('schmancy-sheet')\n\t\t\t\t\t\t\tsheet.setAttribute('uid', uid)\n\t\t\t\t\t\t\ttargetContainer.appendChild(sheet)\n\n\t\t\t\t\t\t\treturn { target, sheet: sheet as SchmancySheet, uid }\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\t// Configure sheet attributes\n\t\t\t\t\tif (target.lock) sheet.setAttribute('lock', 'true')\n\n\t\t\t\t\tconst position = target.position || getPosition()\n\t\t\t\t\tsheet.setAttribute('position', position)\n\n\t\t\t\t\tif (target.persist) sheet.setAttribute('persist', String(target.persist))\n\n\t\t\t\t\t// Set dynamic z-index for proper stacking with dialogs\n\t\t\t\t\tsheet.style.setProperty('--schmancy-overlay-z', String(overlayStack.getNextZIndex()))\n\n\t\t\t\t\tdocument.body.style.overflow = 'hidden' // lock the scroll of the host\n\t\t\t\t}),\n\t\t\t\tdelay(20),\n\t\t\t\ttap(({ target, uid }) => {\n\t\t\t\t\t// Dispatch render event - area router handles duplicate prevention\n\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\tnew CustomEvent('schmancy-sheet-render', {\n\t\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\t\tcomponent: target.component,\n\t\t\t\t\t\t\t\tuid,\n\t\t\t\t\t\t\t\tprops: target.props\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\tdelay(1),\n\t\t\t\ttap(({ sheet, uid }) => {\n\t\t\t\t\tsheet.setAttribute('open', 'true')\n\t\t\t\t\t$sounds.play('curious')\n\n\t\t\t\t\t// Add to active sheets tracking\n\t\t\t\t\tthis.activeSheets.add(uid)\n\n\t\t\t\t\t// Set up close event listener\n\t\t\t\t\tfromEvent<CustomEvent>(sheet, 'close')\n\t\t\t\t\t\t.pipe(take(1), delay(300))\n\t\t\t\t\t\t.subscribe(() => {\n\t\t\t\t\t\t\t// Remove from active sheets tracking\n\t\t\t\t\t\t\tthis.activeSheets.delete(uid)\n\t\t\t\t\t\t\toverlayStack.release()\n\n\t\t\t\t\t\t\t// Only keep sheet if persist is explicitly set to a truthy value\n\t\t\t\t\t\t\tconst persistAttr = sheet.getAttribute('persist')\n\t\t\t\t\t\t\tconst shouldRemove = !persistAttr || persistAttr === 'false'\n\n\t\t\t\t\t\t\tif (shouldRemove) {\n\t\t\t\t\t\t\t\tsheet.remove()\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdocument.body.style.overflow = 'auto' // unlock the scroll of the host\n\t\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Sets up the popstate listener to handle browser back button\n\t */\n\tprivate setupPopStateListener() {\n\t\tif (this.popStateListenerActive) return\n\n\t\tfromEvent<PopStateEvent>(window, 'popstate').subscribe(event => {\n\t\t\t// If we have active sheets, close the most recently opened one\n\t\t\tif (this.activeSheets.size > 0) {\n\t\t\t\t// Get the last sheet (Set maintains insertion order)\n\t\t\t\tconst lastSheet = Array.from(this.activeSheets).pop()\n\t\t\t\tif (lastSheet) {\n\t\t\t\t\tthis.dismiss(lastSheet)\n\n\t\t\t\t\t// Prevent default navigation behavior by pushing a new state\n\t\t\t\t\t// This effectively cancels out the back navigation\n\t\t\t\t\tif (event.state && event.state.schmancySheet) {\n\t\t\t\t\t\thistory.pushState({}, '', window.location.href)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tthis.popStateListenerActive = true\n\t}\n\n\t/**\n\t * Dismiss a sheet by uid, or dismiss the most recently opened sheet if no uid provided\n\t */\n\tdismiss(uid?: string) {\n\t\tif (!uid && this.activeSheets.size > 0) {\n\t\t\t// Get the last sheet opened (Set maintains insertion order)\n\t\t\tconst sheetsArray = Array.from(this.activeSheets)\n\t\t\tuid = sheetsArray[sheetsArray.length - 1]\n\t\t}\n\n\t\tif (uid) {\n\t\t\t$sounds.play('atEase')\n\t\t\twindow.dispatchEvent(\n\t\t\t\tnew CustomEvent('schmancy-sheet-dismiss', {\n\t\t\t\t\tdetail: { uid },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t})\n\t\t\t)\n\t\t\tthis.activeSheets.delete(uid)\n\t\t}\n\t}\n\n\t/**\n\t * Open a sheet with the given target configuration\n\t * @deprecated Use `push` instead for consistency with area router API\n\t */\n\topen(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n\n\t/**\n\t * Push a component to the sheet (recommended method)\n\t * Follows the same API pattern as area.push for consistency\n\t */\n\tpush(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n\n\t/**\n\t * Check if a sheet is currently open by uid\n\t */\n\tisOpen(uid: string): boolean {\n\t\treturn this.activeSheets.has(uid)\n\t}\n\n\t/**\n\t * Close all open sheets\n\t */\n\tcloseAll() {\n\t\t// Copy the set to avoid modification during iteration\n\t\tArray.from(this.activeSheets).forEach(uid => {\n\t\t\tthis.dismiss(uid)\n\t\t})\n\t}\n\n}\nexport const sheet = new BottomSheetService()\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sheet.service-DQE7-_wq.js","names":[],"sources":["../src/sheet/sheet.service.ts"],"sourcesContent":["import {\n\tdelay,\n\tfromEvent,\n\tmap,\n\tof,\n\tSubject,\n\tswitchMap,\n\ttake,\n\ttap,\n} from 'rxjs'\nimport { $sounds } from '../audio'\nimport { ComponentType } from '../area/router.types'\nimport { discoverComponent } from '@mixins/discovery.service'\nimport { overlayStack } from '../utils/overlay-stack'\nimport SchmancySheet from './sheet'\n\nexport enum SchmancySheetPosition {\n\tSide = 'side',\n\tBottom = 'bottom',\n}\n\nexport type SheetConfig = {\n\tcomponent: ComponentType\n\tuid?: string\n\tposition?: SchmancySheetPosition\n\tpersist?: boolean\n\tclose?: () => void\n\tlock?: boolean // Controls both ESC and overlay click dismissal\n\tonBeforeOpen?: (component: HTMLElement) => void\n\tonAfterOpen?: (component: HTMLElement) => void\n\tprops?: Record<string, unknown> // Properties to pass to the component\n}\n\n// Keep old name for backward compatibility\ntype BottomSheeetTarget = SheetConfig\n\n// Function to determine the position based on screen size\nconst getPosition = (): SchmancySheetPosition => {\n\treturn window.innerWidth >= 768 ? SchmancySheetPosition.Side : SchmancySheetPosition.Bottom // Adjust 768 as needed for your breakpoint\n}\n\nclass BottomSheetService {\n\tbottomSheet = new Subject<BottomSheeetTarget>()\n\t// Track currently open sheets\n\tprivate activeSheets = new Set<string>()\n\t// To track if we've set up the popstate listener\n\tprivate popStateListenerActive = false\n\n\tconstructor() {\n\t\tthis.setupSheetOpeningLogic()\n\t\tthis.setupPopStateListener()\n\t}\n\n\t/**\n\t * Sets up the main sheet opening logic\n\t */\n\tprivate setupSheetOpeningLogic() {\n\t\tthis.bottomSheet\n\t\t\t.pipe(\n\t\t\t\tswitchMap(target => {\n\t\t\t\t\tconst uid = target.uid ?? `sheet-${Date.now()}`\n\n\t\t\t\t\t// Discover existing sheet with this uid\n\t\t\t\t\treturn discoverComponent<SchmancySheet>('schmancy-sheet').pipe(\n\t\t\t\t\t\tmap(existingSheet => {\n\t\t\t\t\t\t\t// Check if discovered sheet matches our uid\n\t\t\t\t\t\t\tconst sheet = existingSheet?.getAttribute('uid') === uid ? existingSheet : null\n\t\t\t\t\t\t\treturn { target, existingSheet: sheet, uid }\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\tswitchMap(({ target, existingSheet, uid }) => {\n\t\t\t\t\t// Discover theme container if creating new sheet\n\t\t\t\t\tif (existingSheet) {\n\t\t\t\t\t\treturn of({ target, sheet: existingSheet, uid })\n\t\t\t\t\t}\n\n\t\t\t\t\treturn discoverComponent<HTMLElement>('schmancy-theme').pipe(\n\t\t\t\t\t\tmap(theme => {\n\t\t\t\t\t\t\t// Determine container - use theme or fallback to body\n\t\t\t\t\t\t\tconst targetContainer = theme || document.body\n\n\t\t\t\t\t\t\t// Create new sheet\n\t\t\t\t\t\t\tconst sheet = document.createElement('schmancy-sheet')\n\t\t\t\t\t\t\tsheet.setAttribute('uid', uid)\n\t\t\t\t\t\t\ttargetContainer.appendChild(sheet)\n\n\t\t\t\t\t\t\treturn { target, sheet: sheet as SchmancySheet, uid }\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\t// Configure sheet attributes\n\t\t\t\t\tif (target.lock) sheet.setAttribute('lock', 'true')\n\n\t\t\t\t\tconst position = target.position || getPosition()\n\t\t\t\t\tsheet.setAttribute('position', position)\n\n\t\t\t\t\tif (target.persist) sheet.setAttribute('persist', String(target.persist))\n\n\t\t\t\t\t// Set dynamic z-index for proper stacking with dialogs\n\t\t\t\t\tsheet.style.setProperty('--schmancy-overlay-z', String(overlayStack.getNextZIndex()))\n\n\t\t\t\t\tdocument.body.style.overflow = 'hidden' // lock the scroll of the host\n\t\t\t\t}),\n\t\t\t\tdelay(20),\n\t\t\t\ttap(({ target, uid }) => {\n\t\t\t\t\t// Dispatch render event - area router handles duplicate prevention\n\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\tnew CustomEvent('schmancy-sheet-render', {\n\t\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\t\tcomponent: target.component,\n\t\t\t\t\t\t\t\tuid,\n\t\t\t\t\t\t\t\tprops: target.props\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\tdelay(1),\n\t\t\t\ttap(({ sheet, uid }) => {\n\t\t\t\t\tsheet.setAttribute('open', 'true')\n\t\t\t\t\t$sounds.play('curious')\n\n\t\t\t\t\t// Add to active sheets tracking\n\t\t\t\t\tthis.activeSheets.add(uid)\n\n\t\t\t\t\t// Set up close event listener\n\t\t\t\t\tfromEvent<CustomEvent>(sheet, 'close')\n\t\t\t\t\t\t.pipe(take(1), delay(300))\n\t\t\t\t\t\t.subscribe(() => {\n\t\t\t\t\t\t\t// Remove from active sheets tracking\n\t\t\t\t\t\t\tthis.activeSheets.delete(uid)\n\t\t\t\t\t\t\toverlayStack.release()\n\n\t\t\t\t\t\t\t// Only keep sheet if persist is explicitly set to a truthy value\n\t\t\t\t\t\t\tconst persistAttr = sheet.getAttribute('persist')\n\t\t\t\t\t\t\tconst shouldRemove = !persistAttr || persistAttr === 'false'\n\n\t\t\t\t\t\t\tif (shouldRemove) {\n\t\t\t\t\t\t\t\tsheet.remove()\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdocument.body.style.overflow = 'auto' // unlock the scroll of the host\n\t\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Sets up the popstate listener to handle browser back button\n\t */\n\tprivate setupPopStateListener() {\n\t\tif (this.popStateListenerActive) return\n\n\t\tfromEvent<PopStateEvent>(window, 'popstate').subscribe(event => {\n\t\t\t// If we have active sheets, close the most recently opened one\n\t\t\tif (this.activeSheets.size > 0) {\n\t\t\t\t// Get the last sheet (Set maintains insertion order)\n\t\t\t\tconst lastSheet = Array.from(this.activeSheets).pop()\n\t\t\t\tif (lastSheet) {\n\t\t\t\t\tthis.dismiss(lastSheet)\n\n\t\t\t\t\t// Prevent default navigation behavior by pushing a new state\n\t\t\t\t\t// This effectively cancels out the back navigation\n\t\t\t\t\tif (event.state && event.state.schmancySheet) {\n\t\t\t\t\t\thistory.pushState({}, '', window.location.href)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tthis.popStateListenerActive = true\n\t}\n\n\t/**\n\t * Dismiss a sheet by uid, or dismiss the most recently opened sheet if no uid provided\n\t */\n\tdismiss(uid?: string) {\n\t\tif (!uid && this.activeSheets.size > 0) {\n\t\t\t// Get the last sheet opened (Set maintains insertion order)\n\t\t\tconst sheetsArray = Array.from(this.activeSheets)\n\t\t\tuid = sheetsArray[sheetsArray.length - 1]\n\t\t}\n\n\t\tif (uid) {\n\t\t\t$sounds.play('atEase')\n\t\t\twindow.dispatchEvent(\n\t\t\t\tnew CustomEvent('schmancy-sheet-dismiss', {\n\t\t\t\t\tdetail: { uid },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t})\n\t\t\t)\n\t\t\tthis.activeSheets.delete(uid)\n\t\t}\n\t}\n\n\t/**\n\t * Open a sheet with the given target configuration\n\t * @deprecated Use `push` instead for consistency with area router API\n\t */\n\topen(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n\n\t/**\n\t * Push a component to the sheet (recommended method)\n\t * Follows the same API pattern as area.push for consistency\n\t */\n\tpush(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n\n\t/**\n\t * Check if a sheet is currently open by uid\n\t */\n\tisOpen(uid: string): boolean {\n\t\treturn this.activeSheets.has(uid)\n\t}\n\n\t/**\n\t * Close all open sheets\n\t */\n\tcloseAll() {\n\t\t// Copy the set to avoid modification during iteration\n\t\tArray.from(this.activeSheets).forEach(uid => {\n\t\t\tthis.dismiss(uid)\n\t\t})\n\t}\n\n}\n\n/**\n * Bottom / side sheet service. Mounts any element as a sheet with a chosen\n * position (see `SchmancySheetPosition` enum).\n *\n * @service\n * @summary Imperative bottom / side sheet surface.\n * @method open({ component, position? }) - Mount an element as a sheet.\n * @method dismiss(id?) - Dismiss a sheet by id, or the topmost.\n */\nexport const sheet = new BottomSheetService()\n"],"mappings":"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"}
|
package/dist/skeleton.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./tailwind.mixin-Bh58QnlW.cjs`),t=require(`./decorate-F9CuyeHg.cjs`);require(`./mixins.cjs`);let n=require(`lit/decorators.js`),r=require(`lit`);var i=class extends e.t(r.css`
|
|
2
2
|
:host {
|
|
3
3
|
display: block;
|
|
4
4
|
width: var(--_sw, 100%);
|
package/dist/skeleton.js
CHANGED
package/dist/skills/INDEX.md
CHANGED
|
@@ -28,7 +28,7 @@ The framework pieces — touch before components.
|
|
|
28
28
|
[Breadcrumb](./breadcrumb.md) · [Nav Drawer](./nav-drawer.md) · [Tabs](./tabs.md) · [Navigation Bar](./navigation-bar.md) · [Navigation Rail](./navigation-rail.md) · [Steps](./steps.md) · [Teleport](./teleport.md) · [Theme Button](./theme-button.md)
|
|
29
29
|
|
|
30
30
|
### Overlays
|
|
31
|
-
[Dialog](./dialog.md)
|
|
31
|
+
[Overlay](./overlay.md) — canonical · [Dialog](./dialog.md) / [Sheet](./sheet.md) — *deprecated, use Overlay* · [Notification](./notification.md) · [Menu](./menu.md) · [Dropdown](./dropdown.md) · [Tooltip (directive)](./tooltip.md) · [Lightbox](./lightbox.md) · [Expand](./expand.md)
|
|
32
32
|
|
|
33
33
|
### Interactive
|
|
34
34
|
[Button](./button.md) · [List](./list.md) · [Details](./details.md) · [Table](./table.md) · [Tree](./tree.md) · [Slider](./slider.md) · [QR Scanner](./qr-scanner.md)
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# Overlay — `show` / `<schmancy-overlay>`
|
|
2
|
+
|
|
3
|
+
> One overlay primitive. Anchored by default. Observable lifecycle. Replaces `sheet` + `$dialog`.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
import {
|
|
9
|
+
show, confirm, prompt,
|
|
10
|
+
openOverlays$, overlayEvents,
|
|
11
|
+
dismissAll, lazy,
|
|
12
|
+
} from '@mhmo91/schmancy/overlay'
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## The novel default — anchored
|
|
16
|
+
|
|
17
|
+
When you're triggering an overlay from a user gesture (click, touch), pass the event as `anchor`. The overlay blooms from the point of attention instead of materializing at the viewport center.
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
private handlePick = (ev: MouseEvent) => {
|
|
21
|
+
show(TemplatePicker, { anchor: ev, props: { kind: 'email' } })
|
|
22
|
+
.pipe(takeUntil(this.disconnecting))
|
|
23
|
+
.subscribe(picked => { if (picked) this.template = picked })
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Centered is the fallback (no anchor given). Sheet is the responsive adaptation (narrow viewport / touch / oversized content). You never pick layout — the system does.
|
|
28
|
+
|
|
29
|
+
## API
|
|
30
|
+
|
|
31
|
+
| Export | Signature | Purpose |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| `show<T>(content, opts?)` | `Observable<T \| undefined>` | Primary verb. Cold stream — subscribe to mount, unsubscribe to dismiss. |
|
|
34
|
+
| `confirm(opts)` | `Promise<boolean>` | Yes/no dialog. `variant: 'danger'` for destructive. |
|
|
35
|
+
| `prompt(opts)` | `Promise<string \| null>` | Single-line input. |
|
|
36
|
+
| `dismissAll()` | `void` | Close every open overlay (LIFO). |
|
|
37
|
+
| `openOverlays$` | `Observable<readonly OverlayEntry[]>` | Mechanical state — the current stack. |
|
|
38
|
+
| `overlayEvents<E>(tag, evt)` | `Observable<E>` | Third-party subscription to events from any overlay of `tag`. |
|
|
39
|
+
| `lazy(loader)` | `LazyComponent` | Re-exported from area for lazy-loaded content. |
|
|
40
|
+
|
|
41
|
+
## Subscription IS the overlay lifecycle
|
|
42
|
+
|
|
43
|
+
Inside any `$LitElement`, pipe `takeUntil(this.disconnecting)`. When the caller unmounts, the overlay auto-dismisses — no handles to track, no leaks.
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
show(MyForm, { props: { id }, anchor: ev })
|
|
47
|
+
.pipe(takeUntil(this.disconnecting))
|
|
48
|
+
.subscribe(saved => saved && this.store.persist(saved))
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Programmatic dismiss = unsubscribe. Either store the Subscription and call `.unsubscribe()`, or compose a terminator stream via `takeUntil(merge(this.disconnecting, saveTrigger$))`.
|
|
52
|
+
|
|
53
|
+
## How content returns a result — three platform paths
|
|
54
|
+
|
|
55
|
+
Priority order:
|
|
56
|
+
|
|
57
|
+
1. **CustomEvent('close', { detail })** — dispatched from content. `detail` becomes the Observable emission.
|
|
58
|
+
2. **`<form method="dialog">`** — native submit. The dialog's `returnValue` is emitted.
|
|
59
|
+
3. **User dismissal** — Esc / backdrop click / swipe / back-button / `.unsubscribe()` / `dismissAll()` emits `undefined`.
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
// Inside a content component:
|
|
63
|
+
this.dispatchEvent(new CustomEvent('close', {
|
|
64
|
+
detail: savedRecord,
|
|
65
|
+
bubbles: true,
|
|
66
|
+
composed: true, // cross shadow-DOM
|
|
67
|
+
}))
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
// Inline template with native form — zero JS
|
|
72
|
+
show<string>(html`
|
|
73
|
+
<form method="dialog">
|
|
74
|
+
<button value="save">Save</button>
|
|
75
|
+
<button value="discard">Discard</button>
|
|
76
|
+
<button value="">Cancel</button>
|
|
77
|
+
</form>
|
|
78
|
+
`)
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Options
|
|
82
|
+
|
|
83
|
+
```ts
|
|
84
|
+
interface ShowOptions {
|
|
85
|
+
props?: Record<string, unknown> // merged into component
|
|
86
|
+
anchor?: MouseEvent | HTMLElement | { x, y } // NOVEL DEFAULT
|
|
87
|
+
dismissable?: boolean // default true
|
|
88
|
+
persist?: boolean // reuse DOM on re-show
|
|
89
|
+
signal?: AbortSignal // standard cancellation
|
|
90
|
+
modal?: boolean // force focus trap; rare
|
|
91
|
+
historyStrategy?: 'push' | 'replace' | 'silent' // default 'push'
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## History integration
|
|
96
|
+
|
|
97
|
+
Each `show()` pushes a history sentinel unless `historyStrategy: 'silent'`. Browser back dismisses the overlay instead of navigating the page. For forward-restore on routed callers, pair with `area.on(name)` — your overlay sits inside a route-observer's `switchMap`, so forward-navigation re-subscribes and re-opens the overlay naturally.
|
|
98
|
+
|
|
99
|
+
```ts
|
|
100
|
+
area.on('root').pipe(
|
|
101
|
+
map(route => route.params?.editId),
|
|
102
|
+
distinctUntilChanged(),
|
|
103
|
+
switchMap(id => id ? show(TaskEditor, { props: { id } }) : EMPTY),
|
|
104
|
+
takeUntil(this.disconnecting),
|
|
105
|
+
).subscribe()
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Layout dispatch — internal
|
|
109
|
+
|
|
110
|
+
Pure function of (anchor, content size, viewport):
|
|
111
|
+
|
|
112
|
+
- Narrow viewport (< 640px) or coarse-pointer → **sheet**
|
|
113
|
+
- Content > 80% viewport height or 90% width → **sheet**
|
|
114
|
+
- Anchor provided → **anchored**
|
|
115
|
+
- Fallback → **centered**
|
|
116
|
+
|
|
117
|
+
Callers never override. The `modal: true` escape hatch forces focus trap on an anchored overlay for the rare "menu-with-destructive-item" case.
|
|
118
|
+
|
|
119
|
+
## Examples
|
|
120
|
+
|
|
121
|
+
### 1. Confirm / prompt / danger
|
|
122
|
+
|
|
123
|
+
```ts
|
|
124
|
+
if (await confirm({ title: 'Delete?', message: '...', variant: 'danger', anchor: ev })) {
|
|
125
|
+
await store.delete(id)
|
|
126
|
+
}
|
|
127
|
+
const name = await prompt({ label: 'Name', defaultValue: 'Untitled', anchor: ev })
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### 2. Cancellable via AbortSignal
|
|
131
|
+
|
|
132
|
+
```ts
|
|
133
|
+
const ac = new AbortController()
|
|
134
|
+
this.routeChange$.pipe(take(1)).subscribe(() => ac.abort())
|
|
135
|
+
show(LoadingOverlay, { signal: ac.signal })
|
|
136
|
+
.pipe(takeUntil(this.disconnecting))
|
|
137
|
+
.subscribe()
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### 3. Observe events from any open overlay without owning it
|
|
141
|
+
|
|
142
|
+
```ts
|
|
143
|
+
// A header progress bar reflects any upload overlay's progress.
|
|
144
|
+
overlayEvents<CustomEvent<{ pct: number }>>('image-upload', 'progress')
|
|
145
|
+
.pipe(map(e => e.detail.pct), takeUntil(this.disconnecting))
|
|
146
|
+
.subscribe(pct => this.progress = pct)
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### 4. Stack-driven UI
|
|
150
|
+
|
|
151
|
+
```ts
|
|
152
|
+
openOverlays$.pipe(
|
|
153
|
+
map(s => s.length > 1),
|
|
154
|
+
distinctUntilChanged(),
|
|
155
|
+
takeUntil(this.disconnecting),
|
|
156
|
+
).subscribe(many => this.showCloseAllButton = many)
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### 5. Lazy-loaded heavy overlay with error recovery
|
|
160
|
+
|
|
161
|
+
```ts
|
|
162
|
+
show(lazy(() => import('./canvas-editor')))
|
|
163
|
+
.pipe(
|
|
164
|
+
catchError(err => { $notify.error('Load failed'); return EMPTY }),
|
|
165
|
+
takeUntil(this.disconnecting),
|
|
166
|
+
)
|
|
167
|
+
.subscribe()
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### 6. Non-component caller (service / test)
|
|
171
|
+
|
|
172
|
+
```ts
|
|
173
|
+
const saved = await firstValueFrom(
|
|
174
|
+
show<Record>(MyPicker).pipe(defaultIfEmpty(undefined))
|
|
175
|
+
)
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## Migration cheatsheet — from `sheet` / `$dialog`
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
sheet.push({ component, props }) → show(C, { props }).pipe(takeUntil(...)).subscribe()
|
|
182
|
+
sheet.push({ ..., position: 'side'|'bottom' }) → show(C, { props }) // engine decides
|
|
183
|
+
sheet.dismiss(uid) → sub.unsubscribe() | dismissAll()
|
|
184
|
+
sheet.isOpen(uid) → openOverlays$.pipe(map(s => s.some(...)))
|
|
185
|
+
|
|
186
|
+
$dialog.confirm(opts) → confirm(opts)
|
|
187
|
+
$dialog.ask(msg, ev) → confirm({ message: msg, anchor: ev })
|
|
188
|
+
$dialog.danger(opts) → confirm({ ...opts, variant: 'danger' })
|
|
189
|
+
$dialog.prompt(opts) → prompt(opts)
|
|
190
|
+
$dialog.component(tpl, { position: ev }) → show(tpl, { anchor: ev })
|
|
191
|
+
$dialog.dismiss() → dismissAll()
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Principles (why this shape)
|
|
195
|
+
|
|
196
|
+
- **rxjs SUBSCRIPTION_IS_STATE.** The overlay lifecycle is a subscription — setup on subscribe, teardown on unsubscribe. No imperative handles.
|
|
197
|
+
- **Fewer APIs, smarter system.** Caller declares intent (`show(X, { anchor })`); the system decides layout, focus trap, positioning, scroll lock, inert, back-button handling.
|
|
198
|
+
- **Native platform first.** `<dialog>` + `::backdrop` + `returnValue` carry the weight. `CustomEvent('close', { detail })` is the typed overlay on top.
|
|
199
|
+
- **Anchored is novel default.** Overlays bloom from the user's gesture instead of center-of-viewport.
|
|
200
|
+
- **Content identity is the key.** `overlayEvents` keys on tag name (stable across HMR). No uid strings in the public API.
|
|
@@ -28,7 +28,7 @@ The framework pieces — touch before components.
|
|
|
28
28
|
[Breadcrumb](./breadcrumb.md) · [Nav Drawer](./nav-drawer.md) · [Tabs](./tabs.md) · [Navigation Bar](./navigation-bar.md) · [Navigation Rail](./navigation-rail.md) · [Steps](./steps.md) · [Teleport](./teleport.md) · [Theme Button](./theme-button.md)
|
|
29
29
|
|
|
30
30
|
### Overlays
|
|
31
|
-
[Dialog](./dialog.md)
|
|
31
|
+
[Overlay](./overlay.md) — canonical · [Dialog](./dialog.md) / [Sheet](./sheet.md) — *deprecated, use Overlay* · [Notification](./notification.md) · [Menu](./menu.md) · [Dropdown](./dropdown.md) · [Tooltip (directive)](./tooltip.md) · [Lightbox](./lightbox.md) · [Expand](./expand.md)
|
|
32
32
|
|
|
33
33
|
### Interactive
|
|
34
34
|
[Button](./button.md) · [List](./list.md) · [Details](./details.md) · [Table](./table.md) · [Tree](./tree.md) · [Slider](./slider.md) · [QR Scanner](./qr-scanner.md)
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# Overlay — `show` / `<schmancy-overlay>`
|
|
2
|
+
|
|
3
|
+
> One overlay primitive. Anchored by default. Observable lifecycle. Replaces `sheet` + `$dialog`.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
import {
|
|
9
|
+
show, confirm, prompt,
|
|
10
|
+
openOverlays$, overlayEvents,
|
|
11
|
+
dismissAll, lazy,
|
|
12
|
+
} from '@mhmo91/schmancy/overlay'
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## The novel default — anchored
|
|
16
|
+
|
|
17
|
+
When you're triggering an overlay from a user gesture (click, touch), pass the event as `anchor`. The overlay blooms from the point of attention instead of materializing at the viewport center.
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
private handlePick = (ev: MouseEvent) => {
|
|
21
|
+
show(TemplatePicker, { anchor: ev, props: { kind: 'email' } })
|
|
22
|
+
.pipe(takeUntil(this.disconnecting))
|
|
23
|
+
.subscribe(picked => { if (picked) this.template = picked })
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Centered is the fallback (no anchor given). Sheet is the responsive adaptation (narrow viewport / touch / oversized content). You never pick layout — the system does.
|
|
28
|
+
|
|
29
|
+
## API
|
|
30
|
+
|
|
31
|
+
| Export | Signature | Purpose |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| `show<T>(content, opts?)` | `Observable<T \| undefined>` | Primary verb. Cold stream — subscribe to mount, unsubscribe to dismiss. |
|
|
34
|
+
| `confirm(opts)` | `Promise<boolean>` | Yes/no dialog. `variant: 'danger'` for destructive. |
|
|
35
|
+
| `prompt(opts)` | `Promise<string \| null>` | Single-line input. |
|
|
36
|
+
| `dismissAll()` | `void` | Close every open overlay (LIFO). |
|
|
37
|
+
| `openOverlays$` | `Observable<readonly OverlayEntry[]>` | Mechanical state — the current stack. |
|
|
38
|
+
| `overlayEvents<E>(tag, evt)` | `Observable<E>` | Third-party subscription to events from any overlay of `tag`. |
|
|
39
|
+
| `lazy(loader)` | `LazyComponent` | Re-exported from area for lazy-loaded content. |
|
|
40
|
+
|
|
41
|
+
## Subscription IS the overlay lifecycle
|
|
42
|
+
|
|
43
|
+
Inside any `$LitElement`, pipe `takeUntil(this.disconnecting)`. When the caller unmounts, the overlay auto-dismisses — no handles to track, no leaks.
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
show(MyForm, { props: { id }, anchor: ev })
|
|
47
|
+
.pipe(takeUntil(this.disconnecting))
|
|
48
|
+
.subscribe(saved => saved && this.store.persist(saved))
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Programmatic dismiss = unsubscribe. Either store the Subscription and call `.unsubscribe()`, or compose a terminator stream via `takeUntil(merge(this.disconnecting, saveTrigger$))`.
|
|
52
|
+
|
|
53
|
+
## How content returns a result — three platform paths
|
|
54
|
+
|
|
55
|
+
Priority order:
|
|
56
|
+
|
|
57
|
+
1. **CustomEvent('close', { detail })** — dispatched from content. `detail` becomes the Observable emission.
|
|
58
|
+
2. **`<form method="dialog">`** — native submit. The dialog's `returnValue` is emitted.
|
|
59
|
+
3. **User dismissal** — Esc / backdrop click / swipe / back-button / `.unsubscribe()` / `dismissAll()` emits `undefined`.
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
// Inside a content component:
|
|
63
|
+
this.dispatchEvent(new CustomEvent('close', {
|
|
64
|
+
detail: savedRecord,
|
|
65
|
+
bubbles: true,
|
|
66
|
+
composed: true, // cross shadow-DOM
|
|
67
|
+
}))
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
// Inline template with native form — zero JS
|
|
72
|
+
show<string>(html`
|
|
73
|
+
<form method="dialog">
|
|
74
|
+
<button value="save">Save</button>
|
|
75
|
+
<button value="discard">Discard</button>
|
|
76
|
+
<button value="">Cancel</button>
|
|
77
|
+
</form>
|
|
78
|
+
`)
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Options
|
|
82
|
+
|
|
83
|
+
```ts
|
|
84
|
+
interface ShowOptions {
|
|
85
|
+
props?: Record<string, unknown> // merged into component
|
|
86
|
+
anchor?: MouseEvent | HTMLElement | { x, y } // NOVEL DEFAULT
|
|
87
|
+
dismissable?: boolean // default true
|
|
88
|
+
persist?: boolean // reuse DOM on re-show
|
|
89
|
+
signal?: AbortSignal // standard cancellation
|
|
90
|
+
modal?: boolean // force focus trap; rare
|
|
91
|
+
historyStrategy?: 'push' | 'replace' | 'silent' // default 'push'
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## History integration
|
|
96
|
+
|
|
97
|
+
Each `show()` pushes a history sentinel unless `historyStrategy: 'silent'`. Browser back dismisses the overlay instead of navigating the page. For forward-restore on routed callers, pair with `area.on(name)` — your overlay sits inside a route-observer's `switchMap`, so forward-navigation re-subscribes and re-opens the overlay naturally.
|
|
98
|
+
|
|
99
|
+
```ts
|
|
100
|
+
area.on('root').pipe(
|
|
101
|
+
map(route => route.params?.editId),
|
|
102
|
+
distinctUntilChanged(),
|
|
103
|
+
switchMap(id => id ? show(TaskEditor, { props: { id } }) : EMPTY),
|
|
104
|
+
takeUntil(this.disconnecting),
|
|
105
|
+
).subscribe()
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Layout dispatch — internal
|
|
109
|
+
|
|
110
|
+
Pure function of (anchor, content size, viewport):
|
|
111
|
+
|
|
112
|
+
- Narrow viewport (< 640px) or coarse-pointer → **sheet**
|
|
113
|
+
- Content > 80% viewport height or 90% width → **sheet**
|
|
114
|
+
- Anchor provided → **anchored**
|
|
115
|
+
- Fallback → **centered**
|
|
116
|
+
|
|
117
|
+
Callers never override. The `modal: true` escape hatch forces focus trap on an anchored overlay for the rare "menu-with-destructive-item" case.
|
|
118
|
+
|
|
119
|
+
## Examples
|
|
120
|
+
|
|
121
|
+
### 1. Confirm / prompt / danger
|
|
122
|
+
|
|
123
|
+
```ts
|
|
124
|
+
if (await confirm({ title: 'Delete?', message: '...', variant: 'danger', anchor: ev })) {
|
|
125
|
+
await store.delete(id)
|
|
126
|
+
}
|
|
127
|
+
const name = await prompt({ label: 'Name', defaultValue: 'Untitled', anchor: ev })
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### 2. Cancellable via AbortSignal
|
|
131
|
+
|
|
132
|
+
```ts
|
|
133
|
+
const ac = new AbortController()
|
|
134
|
+
this.routeChange$.pipe(take(1)).subscribe(() => ac.abort())
|
|
135
|
+
show(LoadingOverlay, { signal: ac.signal })
|
|
136
|
+
.pipe(takeUntil(this.disconnecting))
|
|
137
|
+
.subscribe()
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### 3. Observe events from any open overlay without owning it
|
|
141
|
+
|
|
142
|
+
```ts
|
|
143
|
+
// A header progress bar reflects any upload overlay's progress.
|
|
144
|
+
overlayEvents<CustomEvent<{ pct: number }>>('image-upload', 'progress')
|
|
145
|
+
.pipe(map(e => e.detail.pct), takeUntil(this.disconnecting))
|
|
146
|
+
.subscribe(pct => this.progress = pct)
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### 4. Stack-driven UI
|
|
150
|
+
|
|
151
|
+
```ts
|
|
152
|
+
openOverlays$.pipe(
|
|
153
|
+
map(s => s.length > 1),
|
|
154
|
+
distinctUntilChanged(),
|
|
155
|
+
takeUntil(this.disconnecting),
|
|
156
|
+
).subscribe(many => this.showCloseAllButton = many)
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### 5. Lazy-loaded heavy overlay with error recovery
|
|
160
|
+
|
|
161
|
+
```ts
|
|
162
|
+
show(lazy(() => import('./canvas-editor')))
|
|
163
|
+
.pipe(
|
|
164
|
+
catchError(err => { $notify.error('Load failed'); return EMPTY }),
|
|
165
|
+
takeUntil(this.disconnecting),
|
|
166
|
+
)
|
|
167
|
+
.subscribe()
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### 6. Non-component caller (service / test)
|
|
171
|
+
|
|
172
|
+
```ts
|
|
173
|
+
const saved = await firstValueFrom(
|
|
174
|
+
show<Record>(MyPicker).pipe(defaultIfEmpty(undefined))
|
|
175
|
+
)
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## Migration cheatsheet — from `sheet` / `$dialog`
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
sheet.push({ component, props }) → show(C, { props }).pipe(takeUntil(...)).subscribe()
|
|
182
|
+
sheet.push({ ..., position: 'side'|'bottom' }) → show(C, { props }) // engine decides
|
|
183
|
+
sheet.dismiss(uid) → sub.unsubscribe() | dismissAll()
|
|
184
|
+
sheet.isOpen(uid) → openOverlays$.pipe(map(s => s.some(...)))
|
|
185
|
+
|
|
186
|
+
$dialog.confirm(opts) → confirm(opts)
|
|
187
|
+
$dialog.ask(msg, ev) → confirm({ message: msg, anchor: ev })
|
|
188
|
+
$dialog.danger(opts) → confirm({ ...opts, variant: 'danger' })
|
|
189
|
+
$dialog.prompt(opts) → prompt(opts)
|
|
190
|
+
$dialog.component(tpl, { position: ev }) → show(tpl, { anchor: ev })
|
|
191
|
+
$dialog.dismiss() → dismissAll()
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Principles (why this shape)
|
|
195
|
+
|
|
196
|
+
- **rxjs SUBSCRIPTION_IS_STATE.** The overlay lifecycle is a subscription — setup on subscribe, teardown on unsubscribe. No imperative handles.
|
|
197
|
+
- **Fewer APIs, smarter system.** Caller declares intent (`show(X, { anchor })`); the system decides layout, focus trap, positioning, scroll lock, inert, back-button handling.
|
|
198
|
+
- **Native platform first.** `<dialog>` + `::backdrop` + `returnValue` carry the weight. `CustomEvent('close', { detail })` is the typed overlay on top.
|
|
199
|
+
- **Anchored is novel default.** Overlays bloom from the user's gesture instead of center-of-viewport.
|
|
200
|
+
- **Content identity is the key.** `overlayEvents` keys on tag name (stable across HMR). No uid strings in the public API.
|
package/dist/slider.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./decorate-F9CuyeHg.cjs`),t=require(`./litElement.mixin-CtQOmwq6.cjs`);require(`./mixins.cjs`);let n=require(`rxjs`),r=require(`rxjs/operators`),i=require(`lit/decorators.js`),a=require(`lit`),o=require(`lit/directives/cache.js`);var s=class extends t.t(a.css`
|
|
2
2
|
:host {
|
|
3
3
|
display: block;
|
|
4
4
|
scroll-snap-align: center; /* If your slider uses scroll-snap */
|
package/dist/slider.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as e } from "./decorate-D_utPUsC.js";
|
|
2
|
-
import { t } from "./litElement.mixin-
|
|
2
|
+
import { t } from "./litElement.mixin-BnNYZ24e.js";
|
|
3
3
|
import "./mixins.js";
|
|
4
4
|
import { fromEvent as n } from "rxjs";
|
|
5
5
|
import { throttleTime as r } from "rxjs/operators";
|