@mhmo91/schmancy 0.10.4 → 0.10.6
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 +43 -949
- package/dist/agent/{flow-CaPi2G8y.js.map → flow-3RrZM-e7.js.map} +1 -1
- package/dist/agent/schmancy.agent.js +3817 -6527
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/agent/schmancy.manifest.json +10 -680
- package/dist/agent/{vendor-jsqr-r7GNh4P3.js.map → vendor-jsqr-BUVwyoGC.js.map} +1 -1
- package/dist/agent/{vendor-material-color-Be96dpGE.js.map → vendor-material-color-33Mj762T.js.map} +1 -1
- package/dist/{area-DHVANBbr.js → area-CIZZ5tbB.js} +1 -1
- package/dist/{area-DHVANBbr.js.map → area-CIZZ5tbB.js.map} +1 -1
- package/dist/{area-ZupIezvU.cjs → area-oZjYJlUy.cjs} +1 -1
- package/dist/{area-ZupIezvU.cjs.map → area-oZjYJlUy.cjs.map} +1 -1
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-pHvsyfbH.js → autocomplete-C1oDLuol.js} +2 -2
- package/dist/{autocomplete-pHvsyfbH.js.map → autocomplete-C1oDLuol.js.map} +1 -1
- package/dist/{autocomplete-Bn525CTp.cjs → autocomplete-X20i6D62.cjs} +1 -1
- package/dist/{autocomplete-Bn525CTp.cjs.map → autocomplete-X20i6D62.cjs.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/avatar.cjs +1 -1
- package/dist/avatar.js +2 -2
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-IyEtsNI4.cjs → boat-CUx58Gwe.cjs} +1 -1
- package/dist/{boat-IyEtsNI4.cjs.map → boat-CUx58Gwe.cjs.map} +1 -1
- package/dist/{boat-_Yv3M6YM.js → boat-CpE0yAlK.js} +2 -2
- package/dist/{boat-_Yv3M6YM.js.map → boat-CpE0yAlK.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-Ck2IXJ4r.js → busy-C9n-DUY4.js} +1 -1
- package/dist/{busy-Ck2IXJ4r.js.map → busy-C9n-DUY4.js.map} +1 -1
- package/dist/{busy-CjM39APN.cjs → busy-D1DKZhgV.cjs} +1 -1
- package/dist/{busy-CjM39APN.cjs.map → busy-D1DKZhgV.cjs.map} +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.js +3 -3
- package/dist/{card-DUWZmMHc.js → card-B3hN-qzk.js} +1 -1
- package/dist/{card-DUWZmMHc.js.map → card-B3hN-qzk.js.map} +1 -1
- package/dist/{card-DIxDuuth.cjs → card-DZJ7qjf2.cjs} +1 -1
- package/dist/{card-DIxDuuth.cjs.map → card-DZJ7qjf2.cjs.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-DPS1mWG-.js → checkbox-CvmB1ev9.js} +1 -1
- package/dist/{checkbox-DPS1mWG-.js.map → checkbox-CvmB1ev9.js.map} +1 -1
- package/dist/{checkbox-CGdFXuWQ.cjs → checkbox-DapdzDow.cjs} +1 -1
- package/dist/{checkbox-CGdFXuWQ.cjs.map → checkbox-DapdzDow.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-UoFbwmlG.cjs → chips-7g6mWRuh.cjs} +1 -1
- package/dist/{chips-UoFbwmlG.cjs.map → chips-7g6mWRuh.cjs.map} +1 -1
- package/dist/{chips-BnnXQSA-.js → chips-C8Y3_3ke.js} +4 -4
- package/dist/{chips-BnnXQSA-.js.map → chips-C8Y3_3ke.js.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/connectivity.cjs +1 -1
- package/dist/connectivity.js +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/{context-daN5G6HS.cjs.map → context-BpCETidA.cjs.map} +1 -1
- package/dist/{context-Bdu1xt0W.js.map → context-DJTJnSK4.js.map} +1 -1
- package/dist/{date-range-DOstCIg8.js → date-range-DdcaPX7C.js} +99 -113
- package/dist/date-range-DdcaPX7C.js.map +1 -0
- package/dist/date-range-ZfUl4duV.cjs +131 -0
- package/dist/date-range-ZfUl4duV.cjs.map +1 -0
- package/dist/{date-range-inline-4P7zqeVe.cjs → date-range-inline-D-d7N6bh.cjs} +1 -1
- package/dist/{date-range-inline-4P7zqeVe.cjs.map → date-range-inline-D-d7N6bh.cjs.map} +1 -1
- package/dist/{date-range-inline-BVycTWLb.js → date-range-inline-QQmIWhZ4.js} +1 -1
- package/dist/{date-range-inline-BVycTWLb.js.map → date-range-inline-QQmIWhZ4.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 +1 -1
- package/dist/delay.js +2 -2
- package/dist/{details-BJBbZOO6.cjs → details-3rL6UQU8.cjs} +1 -1
- package/dist/{details-BJBbZOO6.cjs.map → details-3rL6UQU8.cjs.map} +1 -1
- package/dist/{details-DPc5GxPa.js → details-Dpjh-XnJ.js} +2 -2
- package/dist/{details-DPc5GxPa.js.map → details-Dpjh-XnJ.js.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/directives.cjs +1 -1
- package/dist/directives.js +2 -2
- package/dist/{divider-BvJsmSPH.js → divider-BdfEKQsH.js} +1 -1
- package/dist/{divider-BvJsmSPH.js.map → divider-BdfEKQsH.js.map} +1 -1
- package/dist/{divider-DPT3XnG5.cjs → divider-CutXDz3F.cjs} +1 -1
- package/dist/{divider-DPT3XnG5.cjs.map → divider-CutXDz3F.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 +1 -1
- package/dist/{expand-CTqBWVXo.cjs → expand-DM6zfZf7.cjs} +1 -1
- package/dist/{expand-CTqBWVXo.cjs.map → expand-DM6zfZf7.cjs.map} +1 -1
- package/dist/{expand-BMzocdtj.js → expand-DrgMPJbu.js} +2 -2
- package/dist/{expand-BMzocdtj.js.map → expand-DrgMPJbu.js.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/{extra-BeHlUhzv.js → extra-B6gFu4_1.js} +1 -1
- package/dist/{extra-BeHlUhzv.js.map → extra-B6gFu4_1.js.map} +1 -1
- package/dist/{extra-h_cuxRII.cjs → extra-DJRYaOXe.cjs} +1 -1
- package/dist/{extra-h_cuxRII.cjs.map → extra-DJRYaOXe.cjs.map} +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{float-CTc1xxqH.js → float-1iihPek5.js} +1 -1
- package/dist/{float-CTc1xxqH.js.map → float-1iihPek5.js.map} +1 -1
- package/dist/{float-CwVBs11k.cjs → float-Ckyk85XG.cjs} +1 -1
- package/dist/{float-CwVBs11k.cjs.map → float-Ckyk85XG.cjs.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{form-BtwOBMZ9.js.map → form-BF1c3Dk1.js.map} +1 -1
- package/dist/{form-CSJp687X.cjs.map → form-DeO5XX3b.cjs.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/handover/agent-runtime-followups.md +1 -1
- package/dist/handover/agent-runtime-v1.md +3 -3
- package/dist/{hashContent-1ARKIsx9.js.map → hashContent-BU6jl5ih.js.map} +1 -1
- package/dist/{hashContent-Bp5S6T4U.cjs.map → hashContent-Bobsobip.cjs.map} +1 -1
- package/dist/{icons-qEQW4pjM.cjs → icons-CV-fiGcW.cjs} +1 -1
- package/dist/{icons-qEQW4pjM.cjs.map → icons-CV-fiGcW.cjs.map} +1 -1
- package/dist/{icons-BbCVrcas.js → icons-DUkcTZAY.js} +2 -2
- package/dist/{icons-BbCVrcas.js.map → icons-DUkcTZAY.js.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-BJfDIEJf.js → iframe-C9tj7F6Y.js} +1 -1
- package/dist/{iframe-BJfDIEJf.js.map → iframe-C9tj7F6Y.js.map} +1 -1
- package/dist/{iframe-D6HTruav.cjs → iframe-DF97oGtZ.cjs} +1 -1
- package/dist/{iframe-D6HTruav.cjs.map → iframe-DF97oGtZ.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 +70 -76
- package/dist/{input-LTK3cctF.js → input-DE7x223Y.js} +1 -1
- package/dist/{input-LTK3cctF.js.map → input-DE7x223Y.js.map} +1 -1
- package/dist/{input-U26axtcs.cjs → input-TW9G3n7X.cjs} +1 -1
- package/dist/{input-U26axtcs.cjs.map → input-TW9G3n7X.cjs.map} +1 -1
- package/dist/{input-chip-Ch-aCs3c.js → input-chip-BdoaVw_D.js} +1 -1
- package/dist/{input-chip-Ch-aCs3c.js.map → input-chip-BdoaVw_D.js.map} +1 -1
- package/dist/{input-chip-CADXt0X5.cjs → input-chip-Do48eI5r.cjs} +1 -1
- package/dist/{input-chip-CADXt0X5.cjs.map → input-chip-Do48eI5r.cjs.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +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-C4xmnU4n.js → layout-CXPNsUIo.js} +1 -1
- package/dist/{layout-C4xmnU4n.js.map → layout-CXPNsUIo.js.map} +1 -1
- package/dist/{layout-Dmh6fxh0.cjs → layout-Zhe7wSZ_.cjs} +1 -1
- package/dist/{layout-Dmh6fxh0.cjs.map → layout-Zhe7wSZ_.cjs.map} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +1 -1
- package/dist/{lightbox-DqG2z3Cn.js → lightbox-DcutIyjx.js} +2 -2
- package/dist/{lightbox-DqG2z3Cn.js.map → lightbox-DcutIyjx.js.map} +1 -1
- package/dist/{lightbox-DbYUSfVl.cjs → lightbox-sPfnYzjJ.cjs} +1 -1
- package/dist/{lightbox-DbYUSfVl.cjs.map → lightbox-sPfnYzjJ.cjs.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-D6-_E5ZD.js → list-BWrtrdgs.js} +1 -1
- package/dist/{list-D6-_E5ZD.js.map → list-BWrtrdgs.js.map} +1 -1
- package/dist/{list-CLX4sSAw.cjs → list-C4vasUly.cjs} +1 -1
- package/dist/{list-CLX4sSAw.cjs.map → list-C4vasUly.cjs.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{magnetic-BH0TsofV.cjs.map → magnetic-BJgB1dVi.cjs.map} +1 -1
- package/dist/{magnetic-BZGFxAWG.js.map → magnetic-YwCNvtbB.js.map} +1 -1
- package/dist/{map-WXeVkx2K.cjs → map-BAQ9FEB6.cjs} +1 -1
- package/dist/{map-WXeVkx2K.cjs.map → map-BAQ9FEB6.cjs.map} +1 -1
- package/dist/{map-Dhy3ta9v.js → map-CEreveeI.js} +1 -1
- package/dist/{map-Dhy3ta9v.js.map → map-CEreveeI.js.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/menu-3yXDZusj.cjs +23 -0
- package/dist/menu-3yXDZusj.cjs.map +1 -0
- package/dist/menu-CxChOxWT.js +62 -0
- package/dist/menu-CxChOxWT.js.map +1 -0
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins-Db7gjDah.cjs +298 -0
- package/dist/{mixins-De3xfjrm.cjs.map → mixins-Db7gjDah.cjs.map} +1 -1
- package/dist/mixins-Dw6hVfy-.js +627 -0
- package/dist/{mixins-CcIWET41.js.map → mixins-Dw6hVfy-.js.map} +1 -1
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.js +1 -1
- 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-D_PQjBSf.cjs → notification-DKYy9qVe.cjs} +1 -1
- package/dist/{notification-D_PQjBSf.cjs.map → notification-DKYy9qVe.cjs.map} +1 -1
- package/dist/{notification-CVLqQ8c_.js → notification-ycbUBbOu.js} +2 -2
- package/dist/{notification-CVLqQ8c_.js.map → notification-ycbUBbOu.js.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-rm4HebVs.js → option-DtOhMd3k.js} +1 -1
- package/dist/{option-rm4HebVs.js.map → option-DtOhMd3k.js.map} +1 -1
- package/dist/{option-DDU_goh1.cjs → option-zgVge3BH.cjs} +1 -1
- package/dist/{option-DDU_goh1.cjs.map → option-zgVge3BH.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{overlay-stack-CAQno0CK.js.map → overlay-stack-DCDS17uj.js.map} +1 -1
- package/dist/{overlay-stack-BprhAE9a.cjs.map → overlay-stack-DPIe_aYv.cjs.map} +1 -1
- package/dist/overlay.cjs +5 -53
- package/dist/overlay.cjs.map +1 -1
- package/dist/overlay.confirm-body-AFqYBqrI.js +104 -0
- package/dist/overlay.confirm-body-AFqYBqrI.js.map +1 -0
- package/dist/overlay.confirm-body-DctQLDao.cjs +49 -0
- package/dist/overlay.confirm-body-DctQLDao.cjs.map +1 -0
- package/dist/overlay.js +120 -360
- package/dist/overlay.js.map +1 -1
- package/dist/overlay.service-B9On2-Aa.js +146 -0
- package/dist/overlay.service-B9On2-Aa.js.map +1 -0
- package/dist/overlay.service-k2nCE4pi.cjs +1 -0
- package/dist/overlay.service-k2nCE4pi.cjs.map +1 -0
- package/dist/page.cjs +1 -1
- package/dist/page.js +4 -4
- package/dist/{payment-card-form-C0dHYZIv.js → payment-card-form-Be1-OVlL.js} +1 -1
- package/dist/{payment-card-form-C0dHYZIv.js.map → payment-card-form-Be1-OVlL.js.map} +1 -1
- package/dist/{payment-card-form-DNvmZxs4.cjs → payment-card-form-CNnGePG4.cjs} +1 -1
- package/dist/{payment-card-form-DNvmZxs4.cjs.map → payment-card-form-CNnGePG4.cjs.map} +1 -1
- package/dist/payment-card-form.cjs +1 -1
- package/dist/payment-card-form.js +1 -1
- package/dist/{progress-BRerM5Bn.js → progress-BFWzmTlz.js} +1 -1
- package/dist/{progress-BRerM5Bn.js.map → progress-BFWzmTlz.js.map} +1 -1
- package/dist/{progress-U3LQkpM2.cjs → progress-C4TGG2eN.cjs} +1 -1
- package/dist/{progress-U3LQkpM2.cjs.map → progress-C4TGG2eN.cjs.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/qr-scanner.cjs +1 -1
- package/dist/qr-scanner.js +1 -1
- package/dist/{radio-group-BZ2WoOXJ.js → radio-group-DTNAW5dd.js} +1 -1
- package/dist/{radio-group-BZ2WoOXJ.js.map → radio-group-DTNAW5dd.js.map} +1 -1
- package/dist/{radio-group-D7mm-yvJ.cjs → radio-group-xLRp1g57.cjs} +1 -1
- package/dist/{radio-group-D7mm-yvJ.cjs.map → radio-group-xLRp1g57.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/{rxjs-utils-d-ivVN84.js.map → rxjs-utils-BK8VMe3K.js.map} +1 -1
- package/dist/{rxjs-utils-Csnks202.cjs.map → rxjs-utils-DhOKenkS.cjs.map} +1 -1
- package/dist/rxjs-utils.cjs +1 -1
- package/dist/rxjs-utils.js +1 -1
- package/dist/{scroll-qL-HkMdP.js → scroll-BCmdqSQU.js} +1 -1
- package/dist/{scroll-qL-HkMdP.js.map → scroll-BCmdqSQU.js.map} +1 -1
- package/dist/{scroll-DJTjNIT_.cjs → scroll-Bdgb-vRy.cjs} +1 -1
- package/dist/{scroll-DJTjNIT_.cjs.map → scroll-Bdgb-vRy.cjs.map} +1 -1
- package/dist/{select-CnPXUeSf.js → select-COGARE0b.js} +2 -2
- package/dist/{select-CnPXUeSf.js.map → select-COGARE0b.js.map} +1 -1
- package/dist/{select-BvA7v-gL.cjs → select-Cv5t_PT3.cjs} +1 -1
- package/dist/{select-BvA7v-gL.cjs.map → select-Cv5t_PT3.cjs.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/skeleton.cjs +1 -1
- package/dist/skeleton.js +1 -1
- package/dist/skills/INDEX.md +3 -6
- package/dist/skills/SKILL.md +13 -9
- package/dist/skills/schmancy/INDEX.md +3 -6
- package/dist/skills/schmancy/SKILL.md +13 -9
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{splash-screen-BDt4PInk.cjs → splash-screen-B8rFbjqT.cjs} +1 -1
- package/dist/{splash-screen-BDt4PInk.cjs.map → splash-screen-B8rFbjqT.cjs.map} +1 -1
- package/dist/{splash-screen-C8JCqX5L.js → splash-screen-DbGbGttg.js} +1 -1
- package/dist/{splash-screen-C8JCqX5L.js.map → splash-screen-DbGbGttg.js.map} +1 -1
- package/dist/splash-screen.cjs +1 -1
- package/dist/splash-screen.js +1 -1
- package/dist/{src-CqdnWGgr.js → src-YRir9pOP.js} +162 -162
- package/dist/src-YRir9pOP.js.map +1 -0
- package/dist/{src-CpRNClhg.cjs → src-b8D-Ec-Q.cjs} +13 -13
- package/dist/src-b8D-Ec-Q.cjs.map +1 -0
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{surface-C8jQy8Ym.js → surface-BE7sGTBt.js} +1 -1
- package/dist/{surface-C8jQy8Ym.js.map → surface-BE7sGTBt.js.map} +1 -1
- package/dist/{surface-Du2Y4vXd.cjs → surface-BvudRtf5.cjs} +1 -1
- package/dist/{surface-Du2Y4vXd.cjs.map → surface-BvudRtf5.cjs.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/switch.cjs +1 -1
- package/dist/switch.js +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-0RfeCa00.cjs → tabs-C0XKld1Z.cjs} +1 -1
- package/dist/{tabs-0RfeCa00.cjs.map → tabs-C0XKld1Z.cjs.map} +1 -1
- package/dist/{tabs-Cyahh9Q6.js → tabs-DIzCRsA3.js} +1 -1
- package/dist/{tabs-Cyahh9Q6.js.map → tabs-DIzCRsA3.js.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-jqRrLxmo.cjs → textarea-BCDCGCJd.cjs} +1 -1
- package/dist/{textarea-jqRrLxmo.cjs.map → textarea-BCDCGCJd.cjs.map} +1 -1
- package/dist/{textarea-CXCcTVnf.js → textarea-UbZzBwqm.js} +1 -1
- package/dist/{textarea-CXCcTVnf.js.map → textarea-UbZzBwqm.js.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/theme-CIsI-sFj.cjs +181 -0
- package/dist/{theme-Hjz9sCN-.cjs.map → theme-CIsI-sFj.cjs.map} +1 -1
- package/dist/{theme-2KZW2Rfs.js → theme-Qh-yPEPL.js} +3 -4
- package/dist/{theme-2KZW2Rfs.js.map → theme-Qh-yPEPL.js.map} +1 -1
- package/dist/{theme-button-9uF1eoHz.js → theme-button-CjTnfs9x.js} +1 -1
- package/dist/{theme-button-9uF1eoHz.js.map → theme-button-CjTnfs9x.js.map} +1 -1
- package/dist/{theme-button-C7QIbke1.cjs → theme-button-Dv1D_Vil.cjs} +1 -1
- package/dist/{theme-button-C7QIbke1.cjs.map → theme-button-Dv1D_Vil.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-D9l33b-M.cjs.map → theme.interface-BeW-sz_g.cjs.map} +1 -1
- package/dist/{theme.interface-DnVNre4O.js.map → theme.interface-v7SkAnDH.js.map} +1 -1
- package/dist/theme.js +5 -6
- package/dist/theme.service-Cfk88qHK.cjs +1 -0
- package/dist/theme.service-Cfk88qHK.cjs.map +1 -0
- package/dist/{theme.service-CmbOGMA8.js → theme.service-DIUo1mBP.js} +13 -14
- package/dist/theme.service-DIUo1mBP.js.map +1 -0
- package/dist/timeline.cjs +1 -1
- package/dist/timeline.js +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/dist/{utils-hp-DnFf5.js → utils-BfOze6Tk.js} +1 -1
- package/dist/{utils-hp-DnFf5.js.map → utils-BfOze6Tk.js.map} +1 -1
- package/dist/{utils-Cr-YO4Np.cjs → utils-CJ9y2Jz9.cjs} +1 -1
- package/dist/{utils-Cr-YO4Np.cjs.map → utils-CJ9y2Jz9.cjs.map} +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +2 -2
- package/dist/visually-hidden.cjs +1 -1
- package/dist/visually-hidden.js +1 -1
- package/dist/{window-DtUOWiAj.cjs → window-9HOUXrTU.cjs} +1 -1
- package/dist/{window-DtUOWiAj.cjs.map → window-9HOUXrTU.cjs.map} +1 -1
- package/dist/{window-C7yY9yp5.js → window-B_55dzk0.js} +3 -3
- package/dist/{window-C7yY9yp5.js.map → window-B_55dzk0.js.map} +1 -1
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/package.json +1 -2
- package/skills/schmancy/INDEX.md +3 -6
- package/skills/schmancy/SKILL.md +13 -9
- package/src/content-drawer/drawer.ts +24 -7
- package/src/content-drawer/events.ts +6 -0
- package/src/content-drawer/sheet.ts +13 -12
- package/src/date-range/date-range-dialog.ts +4 -4
- package/src/date-range/date-range.ts +35 -53
- package/src/index.ts +0 -4
- package/src/menu/menu-item.ts +7 -2
- package/src/menu/menu.ts +24 -20
- package/types/src/content-drawer/drawer.d.ts +2 -0
- package/types/src/content-drawer/events.d.ts +6 -0
- package/types/src/content-drawer/sheet.d.ts +6 -5
- package/types/src/date-range/date-range.d.ts +1 -5
- package/types/src/index.d.ts +0 -4
- package/types/src/menu/menu-item.d.ts +1 -0
- package/types/src/menu/menu.d.ts +9 -7
- package/dist/agent/vendor-highlight-CHJZQQB7.js +0 -2178
- package/dist/agent/vendor-highlight-CHJZQQB7.js.map +0 -1
- package/dist/code-highlight-CMilN0B8.cjs +0 -190
- package/dist/code-highlight-CMilN0B8.cjs.map +0 -1
- package/dist/code-highlight-kFUJ1Eet.js +0 -296
- package/dist/code-highlight-kFUJ1Eet.js.map +0 -1
- package/dist/code-highlight.cjs +0 -1
- package/dist/code-highlight.js +0 -2
- package/dist/date-range-BIyrzTRZ.cjs +0 -131
- package/dist/date-range-BIyrzTRZ.cjs.map +0 -1
- package/dist/date-range-DOstCIg8.js.map +0 -1
- package/dist/dialog-service-DI9PPy4H.js +0 -193
- package/dist/dialog-service-DI9PPy4H.js.map +0 -1
- package/dist/dialog-service-DJd5L0f5.cjs +0 -1
- package/dist/dialog-service-DJd5L0f5.cjs.map +0 -1
- package/dist/dialog.cjs +0 -89
- package/dist/dialog.cjs.map +0 -1
- package/dist/dialog.js +0 -419
- package/dist/dialog.js.map +0 -1
- package/dist/mailbox-Ct6iYe-4.cjs +0 -1140
- package/dist/mailbox-Ct6iYe-4.cjs.map +0 -1
- package/dist/mailbox-DsPII8HR.js +0 -1596
- package/dist/mailbox-DsPII8HR.js.map +0 -1
- package/dist/mailbox.cjs +0 -1
- package/dist/mailbox.js +0 -2
- package/dist/menu-Bhd3EapX.js +0 -56
- package/dist/menu-Bhd3EapX.js.map +0 -1
- package/dist/menu-Cg2aaDjs.cjs +0 -23
- package/dist/menu-Cg2aaDjs.cjs.map +0 -1
- package/dist/mixins-CcIWET41.js +0 -627
- package/dist/mixins-De3xfjrm.cjs +0 -298
- package/dist/sheet-BRL07BB4.js +0 -170
- package/dist/sheet-BRL07BB4.js.map +0 -1
- package/dist/sheet-BYQJAHQn.cjs +0 -35
- package/dist/sheet-BYQJAHQn.cjs.map +0 -1
- package/dist/sheet.cjs +0 -1
- package/dist/sheet.js +0 -3
- package/dist/sheet.service-B25bsrYG.cjs +0 -1
- package/dist/sheet.service-B25bsrYG.cjs.map +0 -1
- package/dist/sheet.service-SPQ8oLCi.js +0 -86
- package/dist/sheet.service-SPQ8oLCi.js.map +0 -1
- package/dist/skills/code-highlight.md +0 -47
- package/dist/skills/dialog.md +0 -69
- package/dist/skills/mailbox.md +0 -102
- package/dist/skills/schmancy/code-highlight.md +0 -47
- package/dist/skills/schmancy/dialog.md +0 -69
- package/dist/skills/schmancy/mailbox.md +0 -102
- package/dist/skills/schmancy/sheet.md +0 -76
- package/dist/skills/sheet.md +0 -76
- package/dist/src-CpRNClhg.cjs.map +0 -1
- package/dist/src-CqdnWGgr.js.map +0 -1
- package/dist/theme-Hjz9sCN-.cjs +0 -181
- package/dist/theme.events-Cv7N4Toe.js +0 -2
- package/dist/theme.events-Cv7N4Toe.js.map +0 -1
- package/dist/theme.events-DM4H5F2d.cjs +0 -1
- package/dist/theme.events-DM4H5F2d.cjs.map +0 -1
- package/dist/theme.service-BrUbGoeQ.cjs +0 -1
- package/dist/theme.service-BrUbGoeQ.cjs.map +0 -1
- package/dist/theme.service-CmbOGMA8.js.map +0 -1
- package/skills/schmancy/code-highlight.md +0 -47
- package/skills/schmancy/dialog.md +0 -69
- package/skills/schmancy/mailbox.md +0 -102
- package/skills/schmancy/sheet.md +0 -76
- package/src/code-highlight/code-highlight.ts +0 -345
- package/src/code-highlight/code-preview.ts +0 -125
- package/src/code-highlight/index.ts +0 -3
- package/src/dialog/dialog-base.mixin.ts +0 -576
- package/src/dialog/dialog-events.ts +0 -17
- package/src/dialog/dialog-service.ts +0 -494
- package/src/dialog/dialog.component.ts +0 -414
- package/src/dialog/index.ts +0 -3
- package/src/mailbox/README.md +0 -128
- package/src/mailbox/email-editor.ts +0 -1077
- package/src/mailbox/email-layout-selector.ts +0 -58
- package/src/mailbox/email-recipients.ts +0 -599
- package/src/mailbox/email-template-picker.ts +0 -297
- package/src/mailbox/email-viewer.ts +0 -717
- package/src/mailbox/index.ts +0 -31
- package/src/mailbox/mailbox.ts +0 -364
- package/src/mailbox/types.ts +0 -180
- package/src/sheet/hook.ts +0 -40
- package/src/sheet/index.ts +0 -2
- package/src/sheet/sheet.service.ts +0 -245
- package/src/sheet/sheet.ts +0 -238
- package/types/src/code-highlight/code-highlight.d.ts +0 -49
- package/types/src/code-highlight/code-preview.d.ts +0 -30
- package/types/src/code-highlight/index.d.ts +0 -3
- package/types/src/dialog/dialog-base.mixin.d.ts +0 -30
- package/types/src/dialog/dialog-events.d.ts +0 -13
- package/types/src/dialog/dialog-service.d.ts +0 -91
- package/types/src/dialog/dialog.component.d.ts +0 -150
- package/types/src/dialog/index.d.ts +0 -3
- package/types/src/mailbox/email-editor.d.ts +0 -101
- package/types/src/mailbox/email-layout-selector.d.ts +0 -18
- package/types/src/mailbox/email-recipients.d.ts +0 -122
- package/types/src/mailbox/email-template-picker.d.ts +0 -54
- package/types/src/mailbox/email-viewer.d.ts +0 -86
- package/types/src/mailbox/index.d.ts +0 -12
- package/types/src/mailbox/mailbox.d.ts +0 -82
- package/types/src/mailbox/types.d.ts +0 -176
- package/types/src/sheet/hook.d.ts +0 -5
- package/types/src/sheet/index.d.ts +0 -2
- package/types/src/sheet/sheet.d.ts +0 -29
- package/types/src/sheet/sheet.service.d.ts +0 -65
- /package/dist/agent/{flow-CaPi2G8y.js → flow-3RrZM-e7.js} +0 -0
- /package/dist/agent/{vendor-jsqr-r7GNh4P3.js → vendor-jsqr-BUVwyoGC.js} +0 -0
- /package/dist/agent/{vendor-material-color-Be96dpGE.js → vendor-material-color-33Mj762T.js} +0 -0
- /package/dist/{context-daN5G6HS.cjs → context-BpCETidA.cjs} +0 -0
- /package/dist/{context-Bdu1xt0W.js → context-DJTJnSK4.js} +0 -0
- /package/dist/{form-BtwOBMZ9.js → form-BF1c3Dk1.js} +0 -0
- /package/dist/{form-CSJp687X.cjs → form-DeO5XX3b.cjs} +0 -0
- /package/dist/{hashContent-1ARKIsx9.js → hashContent-BU6jl5ih.js} +0 -0
- /package/dist/{hashContent-Bp5S6T4U.cjs → hashContent-Bobsobip.cjs} +0 -0
- /package/dist/{magnetic-BH0TsofV.cjs → magnetic-BJgB1dVi.cjs} +0 -0
- /package/dist/{magnetic-BZGFxAWG.js → magnetic-YwCNvtbB.js} +0 -0
- /package/dist/{overlay-stack-CAQno0CK.js → overlay-stack-DCDS17uj.js} +0 -0
- /package/dist/{overlay-stack-BprhAE9a.cjs → overlay-stack-DPIe_aYv.cjs} +0 -0
- /package/dist/{rxjs-utils-d-ivVN84.js → rxjs-utils-BK8VMe3K.js} +0 -0
- /package/dist/{rxjs-utils-Csnks202.cjs → rxjs-utils-DhOKenkS.cjs} +0 -0
- /package/dist/{theme.interface-D9l33b-M.cjs → theme.interface-BeW-sz_g.cjs} +0 -0
- /package/dist/{theme.interface-DnVNre4O.js → theme.interface-v7SkAnDH.js} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sheet-BRL07BB4.js","names":[],"sources":["../src/sheet/hook.ts","../src/sheet/sheet.ts"],"sourcesContent":["// @watch decorator\n//\n// Runs when an observed property changes, e.g. @property or @state, but before the component updates.\n//\n// To wait for an update to complete after a change occurs, use `await this.updateComplete` in the handler. To start\n// watching after the initial update/render, use `{ waitUntilFirstUpdate: true }` or `this.hasUpdated` in the handler.\n//\n// Usage:\n//\n// @watch('propName')\n// handlePropChange(oldValue, newValue) {\n// ...\n// }\n//\ninterface WatchOptions {\n\twaitUntilFirstUpdate?: boolean\n}\n\nexport function on(propName: string, options?: WatchOptions) {\n\treturn (protoOrDescriptor: any, name: string): any => {\n\t\tconst { willUpdate } = protoOrDescriptor\n\n\t\toptions = Object.assign({ waitUntilFirstUpdate: false }, options) as WatchOptions\n\n\t\tprotoOrDescriptor.willUpdate = function (changedProps: Map<string, any>) {\n\t\t\twillUpdate.call(this, changedProps)\n\n\t\t\tif (changedProps.has(propName)) {\n\t\t\t\tconst oldValue = changedProps.get(propName)\n\t\t\t\tconst newValue = this[propName]\n\n\t\t\t\tif (oldValue !== newValue) {\n\t\t\t\t\tif (!options?.waitUntilFirstUpdate || this.hasUpdated) {\n\t\t\t\t\t\tthis[name](oldValue, newValue)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { area } from '../area'\nimport { html, css } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { fromEvent, merge, takeUntil, tap, filter } from 'rxjs'\nimport { on } from './hook'\nimport { SchmancySheetPosition, sheet } from './sheet.service'\nimport { BLACKBIRD_EASING, DURATION_ENTER, DURATION_EXIT, DURATION_BACKDROP, EASE_OUT, EASE_IN } from '../utils/animation'\n\n@customElement('schmancy-sheet')\nexport default class SchmancySheet extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tposition: fixed;\n\t\tinset: 0;\n\t\tz-index: var(--schmancy-overlay-z, 999);\n\t\tdisplay: none;\n\t}\n\t:host([open]) {\n\t\tdisplay: block;\n\t}\n\n\t/* Luminous edge glow on sheet panel */\n\t.content {\n\t\tbox-shadow: -8px 0 40px -8px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 15%, transparent);\n\t}\n\n\t:host([position='bottom']) .content {\n\t\tbox-shadow: 0 -8px 40px -8px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 15%, transparent);\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.content { box-shadow: var(--schmancy-sys-elevation-3); }\n\t}\n`]\n\n\t// uid is inherited from $LitElement mixin - auto-generated or set via attribute\n\t@property({ type: Boolean, reflect: true }) open = false\n\t@property({ type: String, reflect: true }) position: SchmancySheetPosition = SchmancySheetPosition.Side\n\t@property({ type: Boolean, reflect: true }) persist = false\n\t@property({ type: Boolean, reflect: true }) lock = false\n\t@property({ type: Boolean, reflect: true }) handleHistory = true\n\n\tprivate lastFocusedElement: HTMLElement | null = null\n\t@query('.overlay') private overlayEl!: HTMLDivElement\n\t@query('.content') private contentEl!: HTMLDivElement\n\n\t@on('open')\n\tonOpenChange(_oldValue: boolean, newValue: boolean) {\n\t\tif (newValue) {\n\t\t\tthis.lastFocusedElement = document.activeElement as HTMLElement\n\t\t\tthis.setBackgroundInert(true)\n\t\t\tthis.animateIn()\n\t\t\tthis.focus()\n\t\t} else {\n\t\t\tthis.animateOut()\n\t\t\tthis.setBackgroundInert(false)\n\t\t\tthis.lastFocusedElement?.focus()\n\t\t\tthis.lastFocusedElement = null\n\t\t}\n\t}\n\n\tprivate animateIn() {\n\t\tif (!this.overlayEl || !this.contentEl) return\n\n\t\tthis.overlayEl.animate([{ opacity: 0 }, { opacity: 1 }], {\n\t\t\tduration: DURATION_BACKDROP,\n\t\t\teasing: EASE_OUT,\n\t\t\tfill: 'forwards',\n\t\t})\n\n\t\tconst animation =\n\t\t\tthis.position === SchmancySheetPosition.Side\n\t\t\t\t? [\n\t\t\t\t\t\t{ opacity: 0, transform: 'translateX(100%) scale(0.95)' },\n\t\t\t\t\t\t{ opacity: 1, transform: 'translateX(0) scale(1)' },\n\t\t\t\t\t]\n\t\t\t\t: [\n\t\t\t\t\t\t{ opacity: 0, transform: 'translateY(100%) scale(0.95)' },\n\t\t\t\t\t\t{ opacity: 1, transform: 'translateY(0) scale(1)' },\n\t\t\t\t\t]\n\n\t\tthis.contentEl.animate(animation, {\n\t\t\tduration: DURATION_ENTER,\n\t\t\teasing: BLACKBIRD_EASING,\n\t\t\tfill: 'forwards',\n\t\t})\n\t}\n\n\tprivate animateOut() {\n\t\tif (!this.overlayEl || !this.contentEl) return\n\n\t\tthis.overlayEl.animate([{ opacity: 1 }, { opacity: 0 }], {\n\t\t\tduration: DURATION_EXIT,\n\t\t\teasing: EASE_OUT,\n\t\t\tfill: 'forwards',\n\t\t})\n\n\t\tconst animation =\n\t\t\tthis.position === SchmancySheetPosition.Side\n\t\t\t\t? [\n\t\t\t\t\t\t{ opacity: 1, transform: 'translateX(0) scale(1)' },\n\t\t\t\t\t\t{ opacity: 0, transform: 'translateX(100%) scale(0.98)' },\n\t\t\t\t\t]\n\t\t\t\t: [\n\t\t\t\t\t\t{ opacity: 1, transform: 'translateY(0) scale(1)' },\n\t\t\t\t\t\t{ opacity: 0, transform: 'translateY(100%) scale(0.98)' },\n\t\t\t\t\t]\n\n\t\tthis.contentEl.animate(animation, {\n\t\t\tduration: DURATION_EXIT,\n\t\t\teasing: EASE_IN,\n\t\t\tfill: 'forwards',\n\t\t})\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.setupEventListeners()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.disconnecting.next(true)\n\t}\n\n\tprivate setupEventListeners() {\n\t\t// Handle browser back button\n\t\tconst popState$ = fromEvent<PopStateEvent>(window, 'popstate').pipe(\n\t\t\tfilter(() => this.handleHistory),\n\t\t\ttap(e => {\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.closeSheet()\n\t\t\t}),\n\t\t)\n\n\t\t// Handle ESC key\n\t\tconst keyUp$ = fromEvent<KeyboardEvent>(this, 'keydown').pipe(\n\t\t\ttap(event => {\n\t\t\t\tif (event.key === 'Escape' && !this.lock && this.open) {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tsheet.dismiss(this.uid)\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\n\t\t// Handle render events from sheet service\n\t\tconst render$ = fromEvent<CustomEvent>(window, 'schmancy-sheet-render').pipe(\n\t\t\tfilter(e => e.detail.uid === this.uid),\n\t\t\ttap(e => {\n\t\t\t\tarea.push({\n\t\t\t\t\tarea: this.uid,\n\t\t\t\t\tcomponent: e.detail.component,\n\t\t\t\t\tprops: e.detail.props,\n\t\t\t\t\thistoryStrategy: 'silent',\n\t\t\t\t})\n\t\t\t}),\n\t\t)\n\n\t\t// Handle dismiss events from sheet service\n\t\tconst dismiss$ = fromEvent<CustomEvent>(window, 'schmancy-sheet-dismiss').pipe(\n\t\t\tfilter(e => e.detail.uid === this.uid),\n\t\t\ttap(() => {\n\t\t\t\tthis.closeSheet()\n\t\t\t}),\n\t\t)\n\n\t\tmerge(popState$, keyUp$, render$, dismiss$).pipe(takeUntil(this.disconnecting)).subscribe()\n\t}\n\n\tprivate setBackgroundInert(inert: boolean) {\n\t\tconst parent = this.parentElement\n\t\tif (!parent) return\n\n\t\tArray.from(parent.children).forEach(child => {\n\t\t\tif (child !== this && child instanceof HTMLElement) {\n\t\t\t\tchild.toggleAttribute('inert', inert)\n\t\t\t}\n\t\t})\n\t}\n\n\tcloseSheet() {\n\t\tthis.open = false\n\t\tthis.dispatchEvent(new CustomEvent('close'))\n\t}\n\n\toverride focus() {\n\t\t// delegatesFocus in shadowRootOptions handles automatic focus\n\t\t// Just focus first element with autofocus attribute if present\n\t\tconst element = this.querySelector('[autofocus]')\n\t\tif (element instanceof HTMLElement) {\n\t\t\telement.focus()\n\t\t}\n\t}\n\n\tprivate handleOverlayClick = (e: Event) => {\n\t\te.stopPropagation()\n\t\tif (!this.lock) {\n\t\t\tsheet.dismiss(this.uid)\n\t\t}\n\t}\n\n\trender() {\n\t\tconst sheetClasses = `absolute inset-0 flex h-full`\n\n\t\tconst overlayClasses = `overlay absolute inset-0 bg-surface-container/10 backdrop-blur-lg backdrop-saturate-150 ${this.lock ? '' : 'cursor-pointer'}`\n\n\t\tconst contentClasses =\n\t\t\tthis.position === SchmancySheetPosition.Side\n\t\t\t\t? 'content h-full min-w-[320px] max-w-[90vw] w-fit ml-auto z-10'\n\t\t\t\t: 'content w-full mt-auto rounded-t-2xl max-h-[90vh] z-10'\n\n\t\tconst surfaceClasses =\n\t\t\tthis.position === SchmancySheetPosition.Side\n\t\t\t\t? 'h-full overflow-auto'\n\t\t\t\t: 'max-h-[90vh] overflow-auto'\n\n\t\treturn html`\n\t\t\t<div class=${sheetClasses} role=\"dialog\" aria-hidden=${!this.open} aria-modal=${this.open} tabindex=\"0\">\n\t\t\t\t<div class=${overlayClasses} @click=${this.handleOverlayClick}></div>\n\t\t\t\t<div class=${contentClasses}>\n\t\t\t\t\t<schmancy-surface rounded=\"left\" fill=\"all\" id=\"body\" class=${surfaceClasses} type=\"solid\">\n\t\t\t\t\t\t<schmancy-area class=\"size-full overflow-auto\" name=${this.uid}>\n\t\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t\t</schmancy-area>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet': SchmancySheet\n\t}\n}\n"],"mappings":"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"}
|
package/dist/sheet-BYQJAHQn.cjs
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-De3xfjrm.cjs`),t=require(`./decorate-DpFmy0nm.cjs`),n=require(`./area-ZupIezvU.cjs`),r=require(`./animation-CO_Csq84.cjs`),i=require(`./sheet.service-B25bsrYG.cjs`);let a=require(`rxjs`),o=require(`lit/decorators.js`),s=require(`lit`);var c,l,u=class extends e.s{constructor(...e){super(...e),this.open=!1,this.position=i.t.Side,this.persist=!1,this.lock=!1,this.handleHistory=!0,this.lastFocusedElement=null,this.handleOverlayClick=e=>{e.stopPropagation(),this.lock||i.n.dismiss(this.uid)}}static{this.styles=[s.css`
|
|
2
|
-
:host {
|
|
3
|
-
position: fixed;
|
|
4
|
-
inset: 0;
|
|
5
|
-
z-index: var(--schmancy-overlay-z, 999);
|
|
6
|
-
display: none;
|
|
7
|
-
}
|
|
8
|
-
:host([open]) {
|
|
9
|
-
display: block;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/* Luminous edge glow on sheet panel */
|
|
13
|
-
.content {
|
|
14
|
-
box-shadow: -8px 0 40px -8px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 15%, transparent);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
:host([position='bottom']) .content {
|
|
18
|
-
box-shadow: 0 -8px 40px -8px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 15%, transparent);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
@media (prefers-reduced-motion: reduce) {
|
|
22
|
-
.content { box-shadow: var(--schmancy-sys-elevation-3); }
|
|
23
|
-
}
|
|
24
|
-
`]}onOpenChange(e,t){t?(this.lastFocusedElement=document.activeElement,this.setBackgroundInert(!0),this.animateIn(),this.focus()):(this.animateOut(),this.setBackgroundInert(!1),this.lastFocusedElement?.focus(),this.lastFocusedElement=null)}animateIn(){if(!this.overlayEl||!this.contentEl)return;this.overlayEl.animate([{opacity:0},{opacity:1}],{duration:200,easing:r.s,fill:`forwards`});let e=this.position===i.t.Side?[{opacity:0,transform:`translateX(100%) scale(0.95)`},{opacity:1,transform:`translateX(0) scale(1)`}]:[{opacity:0,transform:`translateY(100%) scale(0.95)`},{opacity:1,transform:`translateY(0) scale(1)`}];this.contentEl.animate(e,{duration:r.i,easing:r.n,fill:`forwards`})}animateOut(){if(!this.overlayEl||!this.contentEl)return;this.overlayEl.animate([{opacity:1},{opacity:0}],{duration:150,easing:r.s,fill:`forwards`});let e=this.position===i.t.Side?[{opacity:1,transform:`translateX(0) scale(1)`},{opacity:0,transform:`translateX(100%) scale(0.98)`}]:[{opacity:1,transform:`translateY(0) scale(1)`},{opacity:0,transform:`translateY(100%) scale(0.98)`}];this.contentEl.animate(e,{duration:150,easing:r.o,fill:`forwards`})}connectedCallback(){super.connectedCallback(),this.setupEventListeners()}disconnectedCallback(){super.disconnectedCallback(),this.disconnecting.next(!0)}setupEventListeners(){(0,a.merge)((0,a.fromEvent)(window,`popstate`).pipe((0,a.filter)(()=>this.handleHistory),(0,a.tap)(e=>{e.preventDefault(),this.closeSheet()})),(0,a.fromEvent)(this,`keydown`).pipe((0,a.tap)(e=>{e.key===`Escape`&&!this.lock&&this.open&&(e.preventDefault(),e.stopPropagation(),i.n.dismiss(this.uid))})),(0,a.fromEvent)(window,`schmancy-sheet-render`).pipe((0,a.filter)(e=>e.detail.uid===this.uid),(0,a.tap)(e=>{n.S.push({area:this.uid,component:e.detail.component,props:e.detail.props,historyStrategy:`silent`})})),(0,a.fromEvent)(window,`schmancy-sheet-dismiss`).pipe((0,a.filter)(e=>e.detail.uid===this.uid),(0,a.tap)(()=>{this.closeSheet()}))).pipe((0,a.takeUntil)(this.disconnecting)).subscribe()}setBackgroundInert(e){let t=this.parentElement;t&&Array.from(t.children).forEach(t=>{t!==this&&t instanceof HTMLElement&&t.toggleAttribute(`inert`,e)})}closeSheet(){this.open=!1,this.dispatchEvent(new CustomEvent(`close`))}focus(){let e=this.querySelector(`[autofocus]`);e instanceof HTMLElement&&e.focus()}render(){let e=`overlay absolute inset-0 bg-surface-container/10 backdrop-blur-lg backdrop-saturate-150 `+(this.lock?``:`cursor-pointer`),t=this.position===i.t.Side?`content h-full min-w-[320px] max-w-[90vw] w-fit ml-auto z-10`:`content w-full mt-auto rounded-t-2xl max-h-[90vh] z-10`,n=this.position===i.t.Side?`h-full overflow-auto`:`max-h-[90vh] overflow-auto`;return s.html`
|
|
25
|
-
<div class=${`absolute inset-0 flex h-full`} role="dialog" aria-hidden=${!this.open} aria-modal=${this.open} tabindex="0">
|
|
26
|
-
<div class=${e} @click=${this.handleOverlayClick}></div>
|
|
27
|
-
<div class=${t}>
|
|
28
|
-
<schmancy-surface rounded="left" fill="all" id="body" class=${n} type="solid">
|
|
29
|
-
<schmancy-area class="size-full overflow-auto" name=${this.uid}>
|
|
30
|
-
<slot></slot>
|
|
31
|
-
</schmancy-area>
|
|
32
|
-
</schmancy-surface>
|
|
33
|
-
</div>
|
|
34
|
-
</div>
|
|
35
|
-
`}};t.t([(0,o.property)({type:Boolean,reflect:!0})],u.prototype,`open`,void 0),t.t([(0,o.property)({type:String,reflect:!0})],u.prototype,`position`,void 0),t.t([(0,o.property)({type:Boolean,reflect:!0})],u.prototype,`persist`,void 0),t.t([(0,o.property)({type:Boolean,reflect:!0})],u.prototype,`lock`,void 0),t.t([(0,o.property)({type:Boolean,reflect:!0})],u.prototype,`handleHistory`,void 0),t.t([(0,o.query)(`.overlay`)],u.prototype,`overlayEl`,void 0),t.t([(0,o.query)(`.content`)],u.prototype,`contentEl`,void 0),t.t([(c=`open`,(e,t)=>{let{willUpdate:n}=e;l=Object.assign({waitUntilFirstUpdate:!1},l),e.willUpdate=function(e){if(n.call(this,e),e.has(c)){let n=e.get(c),r=this[c];n!==r&&(l?.waitUntilFirstUpdate&&!this.hasUpdated||this[t](n,r))}}})],u.prototype,`onOpenChange`,null),u=t.t([(0,o.customElement)(`schmancy-sheet`)],u);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sheet-BYQJAHQn.cjs","names":[],"sources":["../src/sheet/hook.ts","../src/sheet/sheet.ts"],"sourcesContent":["// @watch decorator\n//\n// Runs when an observed property changes, e.g. @property or @state, but before the component updates.\n//\n// To wait for an update to complete after a change occurs, use `await this.updateComplete` in the handler. To start\n// watching after the initial update/render, use `{ waitUntilFirstUpdate: true }` or `this.hasUpdated` in the handler.\n//\n// Usage:\n//\n// @watch('propName')\n// handlePropChange(oldValue, newValue) {\n// ...\n// }\n//\ninterface WatchOptions {\n\twaitUntilFirstUpdate?: boolean\n}\n\nexport function on(propName: string, options?: WatchOptions) {\n\treturn (protoOrDescriptor: any, name: string): any => {\n\t\tconst { willUpdate } = protoOrDescriptor\n\n\t\toptions = Object.assign({ waitUntilFirstUpdate: false }, options) as WatchOptions\n\n\t\tprotoOrDescriptor.willUpdate = function (changedProps: Map<string, any>) {\n\t\t\twillUpdate.call(this, changedProps)\n\n\t\t\tif (changedProps.has(propName)) {\n\t\t\t\tconst oldValue = changedProps.get(propName)\n\t\t\t\tconst newValue = this[propName]\n\n\t\t\t\tif (oldValue !== newValue) {\n\t\t\t\t\tif (!options?.waitUntilFirstUpdate || this.hasUpdated) {\n\t\t\t\t\t\tthis[name](oldValue, newValue)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { area } from '../area'\nimport { html, css } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\nimport { fromEvent, merge, takeUntil, tap, filter } from 'rxjs'\nimport { on } from './hook'\nimport { SchmancySheetPosition, sheet } from './sheet.service'\nimport { BLACKBIRD_EASING, DURATION_ENTER, DURATION_EXIT, DURATION_BACKDROP, EASE_OUT, EASE_IN } from '../utils/animation'\n\n@customElement('schmancy-sheet')\nexport default class SchmancySheet extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tposition: fixed;\n\t\tinset: 0;\n\t\tz-index: var(--schmancy-overlay-z, 999);\n\t\tdisplay: none;\n\t}\n\t:host([open]) {\n\t\tdisplay: block;\n\t}\n\n\t/* Luminous edge glow on sheet panel */\n\t.content {\n\t\tbox-shadow: -8px 0 40px -8px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 15%, transparent);\n\t}\n\n\t:host([position='bottom']) .content {\n\t\tbox-shadow: 0 -8px 40px -8px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 15%, transparent);\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.content { box-shadow: var(--schmancy-sys-elevation-3); }\n\t}\n`]\n\n\t// uid is inherited from $LitElement mixin - auto-generated or set via attribute\n\t@property({ type: Boolean, reflect: true }) open = false\n\t@property({ type: String, reflect: true }) position: SchmancySheetPosition = SchmancySheetPosition.Side\n\t@property({ type: Boolean, reflect: true }) persist = false\n\t@property({ type: Boolean, reflect: true }) lock = false\n\t@property({ type: Boolean, reflect: true }) handleHistory = true\n\n\tprivate lastFocusedElement: HTMLElement | null = null\n\t@query('.overlay') private overlayEl!: HTMLDivElement\n\t@query('.content') private contentEl!: HTMLDivElement\n\n\t@on('open')\n\tonOpenChange(_oldValue: boolean, newValue: boolean) {\n\t\tif (newValue) {\n\t\t\tthis.lastFocusedElement = document.activeElement as HTMLElement\n\t\t\tthis.setBackgroundInert(true)\n\t\t\tthis.animateIn()\n\t\t\tthis.focus()\n\t\t} else {\n\t\t\tthis.animateOut()\n\t\t\tthis.setBackgroundInert(false)\n\t\t\tthis.lastFocusedElement?.focus()\n\t\t\tthis.lastFocusedElement = null\n\t\t}\n\t}\n\n\tprivate animateIn() {\n\t\tif (!this.overlayEl || !this.contentEl) return\n\n\t\tthis.overlayEl.animate([{ opacity: 0 }, { opacity: 1 }], {\n\t\t\tduration: DURATION_BACKDROP,\n\t\t\teasing: EASE_OUT,\n\t\t\tfill: 'forwards',\n\t\t})\n\n\t\tconst animation =\n\t\t\tthis.position === SchmancySheetPosition.Side\n\t\t\t\t? [\n\t\t\t\t\t\t{ opacity: 0, transform: 'translateX(100%) scale(0.95)' },\n\t\t\t\t\t\t{ opacity: 1, transform: 'translateX(0) scale(1)' },\n\t\t\t\t\t]\n\t\t\t\t: [\n\t\t\t\t\t\t{ opacity: 0, transform: 'translateY(100%) scale(0.95)' },\n\t\t\t\t\t\t{ opacity: 1, transform: 'translateY(0) scale(1)' },\n\t\t\t\t\t]\n\n\t\tthis.contentEl.animate(animation, {\n\t\t\tduration: DURATION_ENTER,\n\t\t\teasing: BLACKBIRD_EASING,\n\t\t\tfill: 'forwards',\n\t\t})\n\t}\n\n\tprivate animateOut() {\n\t\tif (!this.overlayEl || !this.contentEl) return\n\n\t\tthis.overlayEl.animate([{ opacity: 1 }, { opacity: 0 }], {\n\t\t\tduration: DURATION_EXIT,\n\t\t\teasing: EASE_OUT,\n\t\t\tfill: 'forwards',\n\t\t})\n\n\t\tconst animation =\n\t\t\tthis.position === SchmancySheetPosition.Side\n\t\t\t\t? [\n\t\t\t\t\t\t{ opacity: 1, transform: 'translateX(0) scale(1)' },\n\t\t\t\t\t\t{ opacity: 0, transform: 'translateX(100%) scale(0.98)' },\n\t\t\t\t\t]\n\t\t\t\t: [\n\t\t\t\t\t\t{ opacity: 1, transform: 'translateY(0) scale(1)' },\n\t\t\t\t\t\t{ opacity: 0, transform: 'translateY(100%) scale(0.98)' },\n\t\t\t\t\t]\n\n\t\tthis.contentEl.animate(animation, {\n\t\t\tduration: DURATION_EXIT,\n\t\t\teasing: EASE_IN,\n\t\t\tfill: 'forwards',\n\t\t})\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.setupEventListeners()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.disconnecting.next(true)\n\t}\n\n\tprivate setupEventListeners() {\n\t\t// Handle browser back button\n\t\tconst popState$ = fromEvent<PopStateEvent>(window, 'popstate').pipe(\n\t\t\tfilter(() => this.handleHistory),\n\t\t\ttap(e => {\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.closeSheet()\n\t\t\t}),\n\t\t)\n\n\t\t// Handle ESC key\n\t\tconst keyUp$ = fromEvent<KeyboardEvent>(this, 'keydown').pipe(\n\t\t\ttap(event => {\n\t\t\t\tif (event.key === 'Escape' && !this.lock && this.open) {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tsheet.dismiss(this.uid)\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\n\t\t// Handle render events from sheet service\n\t\tconst render$ = fromEvent<CustomEvent>(window, 'schmancy-sheet-render').pipe(\n\t\t\tfilter(e => e.detail.uid === this.uid),\n\t\t\ttap(e => {\n\t\t\t\tarea.push({\n\t\t\t\t\tarea: this.uid,\n\t\t\t\t\tcomponent: e.detail.component,\n\t\t\t\t\tprops: e.detail.props,\n\t\t\t\t\thistoryStrategy: 'silent',\n\t\t\t\t})\n\t\t\t}),\n\t\t)\n\n\t\t// Handle dismiss events from sheet service\n\t\tconst dismiss$ = fromEvent<CustomEvent>(window, 'schmancy-sheet-dismiss').pipe(\n\t\t\tfilter(e => e.detail.uid === this.uid),\n\t\t\ttap(() => {\n\t\t\t\tthis.closeSheet()\n\t\t\t}),\n\t\t)\n\n\t\tmerge(popState$, keyUp$, render$, dismiss$).pipe(takeUntil(this.disconnecting)).subscribe()\n\t}\n\n\tprivate setBackgroundInert(inert: boolean) {\n\t\tconst parent = this.parentElement\n\t\tif (!parent) return\n\n\t\tArray.from(parent.children).forEach(child => {\n\t\t\tif (child !== this && child instanceof HTMLElement) {\n\t\t\t\tchild.toggleAttribute('inert', inert)\n\t\t\t}\n\t\t})\n\t}\n\n\tcloseSheet() {\n\t\tthis.open = false\n\t\tthis.dispatchEvent(new CustomEvent('close'))\n\t}\n\n\toverride focus() {\n\t\t// delegatesFocus in shadowRootOptions handles automatic focus\n\t\t// Just focus first element with autofocus attribute if present\n\t\tconst element = this.querySelector('[autofocus]')\n\t\tif (element instanceof HTMLElement) {\n\t\t\telement.focus()\n\t\t}\n\t}\n\n\tprivate handleOverlayClick = (e: Event) => {\n\t\te.stopPropagation()\n\t\tif (!this.lock) {\n\t\t\tsheet.dismiss(this.uid)\n\t\t}\n\t}\n\n\trender() {\n\t\tconst sheetClasses = `absolute inset-0 flex h-full`\n\n\t\tconst overlayClasses = `overlay absolute inset-0 bg-surface-container/10 backdrop-blur-lg backdrop-saturate-150 ${this.lock ? '' : 'cursor-pointer'}`\n\n\t\tconst contentClasses =\n\t\t\tthis.position === SchmancySheetPosition.Side\n\t\t\t\t? 'content h-full min-w-[320px] max-w-[90vw] w-fit ml-auto z-10'\n\t\t\t\t: 'content w-full mt-auto rounded-t-2xl max-h-[90vh] z-10'\n\n\t\tconst surfaceClasses =\n\t\t\tthis.position === SchmancySheetPosition.Side\n\t\t\t\t? 'h-full overflow-auto'\n\t\t\t\t: 'max-h-[90vh] overflow-auto'\n\n\t\treturn html`\n\t\t\t<div class=${sheetClasses} role=\"dialog\" aria-hidden=${!this.open} aria-modal=${this.open} tabindex=\"0\">\n\t\t\t\t<div class=${overlayClasses} @click=${this.handleOverlayClick}></div>\n\t\t\t\t<div class=${contentClasses}>\n\t\t\t\t\t<schmancy-surface rounded=\"left\" fill=\"all\" id=\"body\" class=${surfaceClasses} type=\"solid\">\n\t\t\t\t\t\t<schmancy-area class=\"size-full overflow-auto\" name=${this.uid}>\n\t\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t\t</schmancy-area>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet': SchmancySheet\n\t}\n}\n"],"mappings":"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"}
|
package/dist/sheet.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./sheet.service-B25bsrYG.cjs`);require(`./sheet-BYQJAHQn.cjs`),exports.SchmancySheetPosition=e.t,exports.sheet=e.n;
|
package/dist/sheet.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-De3xfjrm.cjs`),t=require(`./audio-CluX8Qpq.cjs`),n=require(`./overlay-stack-BprhAE9a.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._(`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._(`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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sheet.service-B25bsrYG.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,86 +0,0 @@
|
|
|
1
|
-
import { _ as e } from "./mixins-CcIWET41.js";
|
|
2
|
-
import { t } from "./audio-DcXphulJ.js";
|
|
3
|
-
import { t as n } from "./overlay-stack-CAQno0CK.js";
|
|
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
|
-
var d = function(e) {
|
|
6
|
-
return e.Side = "side", e.Bottom = "bottom", e;
|
|
7
|
-
}({}), f = new class {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.bottomSheet = new r(), this.activeSheets = /* @__PURE__ */ new Set(), this.popStateListenerActive = !1, this.setupSheetOpeningLogic(), this.setupPopStateListener();
|
|
10
|
-
}
|
|
11
|
-
setupSheetOpeningLogic() {
|
|
12
|
-
this.bottomSheet.pipe(c((t) => {
|
|
13
|
-
let n = t.uid ?? `sheet-${Date.now()}`;
|
|
14
|
-
return e("schmancy-sheet").pipe(o((e) => ({
|
|
15
|
-
target: t,
|
|
16
|
-
existingSheet: e?.getAttribute("uid") === n ? e : null,
|
|
17
|
-
uid: n
|
|
18
|
-
})));
|
|
19
|
-
}), c(({ target: t, existingSheet: n, uid: r }) => n ? s({
|
|
20
|
-
target: t,
|
|
21
|
-
sheet: n,
|
|
22
|
-
uid: r
|
|
23
|
-
}) : e("schmancy-theme").pipe(o((e) => {
|
|
24
|
-
let n = e || document.body, i = document.createElement("schmancy-sheet");
|
|
25
|
-
return i.setAttribute("uid", r), n.appendChild(i), {
|
|
26
|
-
target: t,
|
|
27
|
-
sheet: i,
|
|
28
|
-
uid: r
|
|
29
|
-
};
|
|
30
|
-
}))), u(({ target: e, sheet: t }) => {
|
|
31
|
-
e.lock && t.setAttribute("lock", "true");
|
|
32
|
-
let r = e.position || (window.innerWidth >= 768 ? d.Side : d.Bottom);
|
|
33
|
-
t.setAttribute("position", r), e.persist && t.setAttribute("persist", String(e.persist)), t.style.setProperty("--schmancy-overlay-z", String(n.getNextZIndex())), document.body.style.overflow = "hidden";
|
|
34
|
-
}), i(20), u(({ target: e, uid: t }) => {
|
|
35
|
-
window.dispatchEvent(new CustomEvent("schmancy-sheet-render", {
|
|
36
|
-
detail: {
|
|
37
|
-
component: e.component,
|
|
38
|
-
uid: t,
|
|
39
|
-
props: e.props
|
|
40
|
-
},
|
|
41
|
-
bubbles: !0,
|
|
42
|
-
composed: !0
|
|
43
|
-
}));
|
|
44
|
-
}), i(1), u(({ sheet: e, uid: r }) => {
|
|
45
|
-
e.setAttribute("open", "true"), t.play("curious"), this.activeSheets.add(r), a(e, "close").pipe(l(1), i(300)).subscribe(() => {
|
|
46
|
-
this.activeSheets.delete(r), n.release();
|
|
47
|
-
let t = e.getAttribute("persist");
|
|
48
|
-
t && t !== "false" || e.remove(), document.body.style.overflow = "auto";
|
|
49
|
-
});
|
|
50
|
-
})).subscribe();
|
|
51
|
-
}
|
|
52
|
-
setupPopStateListener() {
|
|
53
|
-
this.popStateListenerActive ||= (a(window, "popstate").subscribe((e) => {
|
|
54
|
-
if (this.activeSheets.size > 0) {
|
|
55
|
-
let t = Array.from(this.activeSheets).pop();
|
|
56
|
-
t && (this.dismiss(t), e.state && e.state.schmancySheet && history.pushState({}, "", window.location.href));
|
|
57
|
-
}
|
|
58
|
-
}), !0);
|
|
59
|
-
}
|
|
60
|
-
dismiss(e) {
|
|
61
|
-
if (!e && this.activeSheets.size > 0) {
|
|
62
|
-
let t = Array.from(this.activeSheets);
|
|
63
|
-
e = t[t.length - 1];
|
|
64
|
-
}
|
|
65
|
-
e && (t.play("atEase"), window.dispatchEvent(new CustomEvent("schmancy-sheet-dismiss", {
|
|
66
|
-
detail: { uid: e },
|
|
67
|
-
bubbles: !0,
|
|
68
|
-
composed: !0
|
|
69
|
-
})), this.activeSheets.delete(e));
|
|
70
|
-
}
|
|
71
|
-
open(e) {
|
|
72
|
-
this.bottomSheet.next(e);
|
|
73
|
-
}
|
|
74
|
-
push(e) {
|
|
75
|
-
this.bottomSheet.next(e);
|
|
76
|
-
}
|
|
77
|
-
isOpen(e) {
|
|
78
|
-
return this.activeSheets.has(e);
|
|
79
|
-
}
|
|
80
|
-
closeAll() {
|
|
81
|
-
Array.from(this.activeSheets).forEach((e) => {
|
|
82
|
-
this.dismiss(e);
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
}();
|
|
86
|
-
export { f as n, d as t };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sheet.service-SPQ8oLCi.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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"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
# schmancy-code
|
|
2
|
-
|
|
3
|
-
> Syntax-highlighted code block with line numbers, copy button, and collapsible display.
|
|
4
|
-
|
|
5
|
-
## Usage
|
|
6
|
-
```html
|
|
7
|
-
<schmancy-code language="typescript" .code=${'const x = 42'}></schmancy-code>
|
|
8
|
-
```
|
|
9
|
-
|
|
10
|
-
## Properties
|
|
11
|
-
| Property | Type | Default | Description |
|
|
12
|
-
|----------|------|---------|-------------|
|
|
13
|
-
| code | string | `''` | Code content to highlight |
|
|
14
|
-
| language | string | `'javascript'` | Language for syntax highlighting |
|
|
15
|
-
| filename | string | `undefined` | Filename shown in header |
|
|
16
|
-
| lineNumbers | boolean | `false` | Show line numbers |
|
|
17
|
-
| copyButton | boolean | `true` | Show copy-to-clipboard button |
|
|
18
|
-
| highlightLines | string | `undefined` | Lines to highlight (e.g., `'1-3,5,7-9'`) |
|
|
19
|
-
| maxHeight | string | `undefined` | Max height before scrolling |
|
|
20
|
-
|
|
21
|
-
## Supported Languages
|
|
22
|
-
javascript, typescript, html, xml, markdown, bash
|
|
23
|
-
|
|
24
|
-
## Examples
|
|
25
|
-
```html
|
|
26
|
-
<!-- TypeScript with line numbers and highlighted lines -->
|
|
27
|
-
<schmancy-code
|
|
28
|
-
language="typescript"
|
|
29
|
-
lineNumbers
|
|
30
|
-
highlightLines="2-3"
|
|
31
|
-
.code=${`import { html } from 'lit'
|
|
32
|
-
const greeting = 'Hello'
|
|
33
|
-
console.log(greeting)`}>
|
|
34
|
-
</schmancy-code>
|
|
35
|
-
|
|
36
|
-
<!-- Bash with filename -->
|
|
37
|
-
<schmancy-code language="bash" filename="install.sh"
|
|
38
|
-
.code=${'npm install @mhmo91/schmancy'}>
|
|
39
|
-
</schmancy-code>
|
|
40
|
-
|
|
41
|
-
<!-- With max height -->
|
|
42
|
-
<schmancy-code language="javascript" maxHeight="300px"
|
|
43
|
-
.code=${longCodeString}>
|
|
44
|
-
</schmancy-code>
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
Renders inside a collapsible `schmancy-details` with a macOS-style header (colored dots + language label). Uses highlight.js with schmancy color tokens.
|
package/dist/skills/dialog.md
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
# schmancy-dialog / $dialog
|
|
2
|
-
|
|
3
|
-
> Dialog with glass surface, cursorGlow, and mobile bottom-sheet adaptation. Use `$dialog` service for imperative usage.
|
|
4
|
-
|
|
5
|
-
## Usage
|
|
6
|
-
```typescript
|
|
7
|
-
import { $dialog } from '@mhmo91/schmancy'
|
|
8
|
-
|
|
9
|
-
// Confirm dialog
|
|
10
|
-
const confirmed = await $dialog.confirm({
|
|
11
|
-
title: 'Delete item?',
|
|
12
|
-
message: 'This cannot be undone.',
|
|
13
|
-
confirmText: 'Delete',
|
|
14
|
-
cancelText: 'Cancel',
|
|
15
|
-
variant: 'danger',
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
// Component dialog (renders any template/element)
|
|
19
|
-
await $dialog.component(html`<my-editor .data=${item}></my-editor>`)
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## $dialog API
|
|
23
|
-
| Method | Returns | Description |
|
|
24
|
-
|--------|---------|-------------|
|
|
25
|
-
| `confirm(options)` | `Promise<boolean>` | Show confirm dialog with title/message/buttons |
|
|
26
|
-
| `ask(message, event?)` | `Promise<boolean>` | Quick confirm with just a message |
|
|
27
|
-
| `danger(options)` | `Promise<boolean>` | Confirm with danger variant |
|
|
28
|
-
| `component(content, options?)` | `Promise<boolean>` | Show any template/element as dialog |
|
|
29
|
-
| `prompt(options)` | `Promise<string \| null>` | Input dialog, returns value or null |
|
|
30
|
-
| `dismiss()` | `boolean` | Dismiss topmost dialog |
|
|
31
|
-
|
|
32
|
-
## Confirm Options
|
|
33
|
-
| Option | Type | Default | Description |
|
|
34
|
-
|--------|------|---------|-------------|
|
|
35
|
-
| `title` | `string` | `undefined` | Dialog title |
|
|
36
|
-
| `subtitle` | `string` | `undefined` | Subtitle below title |
|
|
37
|
-
| `message` | `string` | `undefined` | Body message |
|
|
38
|
-
| `confirmText` | `string` | `'Confirm'` | Confirm button label |
|
|
39
|
-
| `cancelText` | `string` | `'Cancel'` | Cancel button label |
|
|
40
|
-
| `variant` | `'default' \| 'danger'` | `'default'` | Button color scheme |
|
|
41
|
-
| `position` | `{x,y} \| MouseEvent` | Last click | Animation origin |
|
|
42
|
-
| `content` | `TemplateResult \| HTMLElement` | `undefined` | Custom content in body |
|
|
43
|
-
|
|
44
|
-
## Physics
|
|
45
|
-
- **cursorGlow** on dialog surface (radius: 250, intensity: 0.1)
|
|
46
|
-
- Glass surface with `backdrop-blur-lg` and `backdrop-saturate-150`
|
|
47
|
-
- Luminous glow shadow around dialog container
|
|
48
|
-
- Mobile: renders as bottom sheet with drag handle and swipe dismiss
|
|
49
|
-
|
|
50
|
-
## Examples
|
|
51
|
-
```typescript
|
|
52
|
-
// Quick ask
|
|
53
|
-
if (await $dialog.ask('Remove this entry?', event)) {
|
|
54
|
-
removeEntry()
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// Prompt for input
|
|
58
|
-
const name = await $dialog.prompt({
|
|
59
|
-
title: 'Rename',
|
|
60
|
-
label: 'New name',
|
|
61
|
-
defaultValue: currentName,
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
// Custom component dialog
|
|
65
|
-
await $dialog.component(
|
|
66
|
-
html`<user-profile-editor .user=${user}></user-profile-editor>`,
|
|
67
|
-
{ position: event }
|
|
68
|
-
)
|
|
69
|
-
```
|
package/dist/skills/mailbox.md
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
# Schmancy Mailbox
|
|
2
|
-
|
|
3
|
-
> Full email composition + campaign management system. Orchestrates recipients, templates, editor, attachments, and preview.
|
|
4
|
-
|
|
5
|
-
## Components
|
|
6
|
-
|
|
7
|
-
| Tag | Purpose |
|
|
8
|
-
|-----|---------|
|
|
9
|
-
| `schmancy-mailbox` | Top-level orchestrator |
|
|
10
|
-
| `schmancy-email-editor` | Subject + body composition |
|
|
11
|
-
| `schmancy-email-viewer` | HTML/plaintext preview |
|
|
12
|
-
| `schmancy-email-recipients` | Recipient list with import/CSV |
|
|
13
|
-
| `schmancy-email-layout-selector` | Layout template picker |
|
|
14
|
-
| `schmancy-email-template-picker` | Email template browser |
|
|
15
|
-
|
|
16
|
-
## Usage
|
|
17
|
-
```html
|
|
18
|
-
<schmancy-mailbox
|
|
19
|
-
.config=${{
|
|
20
|
-
sendEndpoint: '/api/emails/send',
|
|
21
|
-
uploadEndpoint: '/api/uploads',
|
|
22
|
-
authenticateRequest: (req) => ({ ...req, headers: { Authorization: `Bearer ${token}` } })
|
|
23
|
-
}}
|
|
24
|
-
.templates=${myTemplates}
|
|
25
|
-
.importSources=${[
|
|
26
|
-
{ id: 'ticketholders', label: 'Ticket holders', icon: 'confirmation_number', handler: loadTicketHolders },
|
|
27
|
-
{ id: 'waitlist', label: 'Waitlist', icon: 'hourglass_empty', handler: loadWaitlist },
|
|
28
|
-
]}
|
|
29
|
-
></schmancy-mailbox>
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## schmancy-mailbox Properties
|
|
33
|
-
| Property | Type | Default | Description |
|
|
34
|
-
|----------|------|---------|-------------|
|
|
35
|
-
| `config` | `EmailComposeConfig` | `{}` | Endpoints, auth, upload handlers |
|
|
36
|
-
| `templates` | `EmailTemplate[]` | `[]` | Available email templates |
|
|
37
|
-
| `importSources` | `ImportSource[]` | `[]` | Import buttons shown in recipients panel |
|
|
38
|
-
| `disabled` | boolean | `false` | Disable all interactions |
|
|
39
|
-
| `recipientsTitle` | string | `'Recipients'` | Recipients panel heading |
|
|
40
|
-
| `recipientsEmptyTitle` | string | `'No recipients yet'` | Empty state title |
|
|
41
|
-
| `recipientsEmptyMessage` | string | `'Import from sources or upload a CSV'` | Empty state body |
|
|
42
|
-
| `enableCsvImport` | boolean | `true` | Allow CSV file import |
|
|
43
|
-
| `enableDragDrop` | boolean | `true` | Accept dropped CSV files |
|
|
44
|
-
|
|
45
|
-
## Key Types
|
|
46
|
-
```typescript
|
|
47
|
-
interface EmailTemplate { id, name, subject, body, category?, thumbnail? }
|
|
48
|
-
|
|
49
|
-
interface EmailComposeConfig {
|
|
50
|
-
sendEndpoint?: string
|
|
51
|
-
templatesEndpoint?: string
|
|
52
|
-
uploadEndpoint?: string
|
|
53
|
-
authenticateRequest?: (req: RequestInit) => RequestInit
|
|
54
|
-
uploadHandler?: (file: File) => Promise<string>
|
|
55
|
-
imageUploadHandler?: (file: File) => Promise<string>
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
interface SendEmailRequest {
|
|
59
|
-
recipients: string[]
|
|
60
|
-
subject: string
|
|
61
|
-
body: string
|
|
62
|
-
attachments: EmailAttachment[]
|
|
63
|
-
templateId?: string | null
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
interface ImportSource {
|
|
67
|
-
id: string
|
|
68
|
-
label: string
|
|
69
|
-
icon: string // Material icon name
|
|
70
|
-
handler: () => void // Populates recipients via events
|
|
71
|
-
}
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
## Events
|
|
75
|
-
| Event | Detail | Where |
|
|
76
|
-
|-------|--------|-------|
|
|
77
|
-
| `emails-imported` | `{ emails, source }` | Recipients |
|
|
78
|
-
| `recipient-removed` | `{ email }` | Recipients |
|
|
79
|
-
| `recipients-cleared` | `{}` | Recipients |
|
|
80
|
-
| `selection-changed` | `{ selectedEmails }` | Recipients |
|
|
81
|
-
| `compose-changed` | `{ subject, body, templateId, attachments }` | Editor |
|
|
82
|
-
| `send-email` | `{ request: SendEmailRequest }` | Mailbox — consumer POSTs to backend |
|
|
83
|
-
| `send-error` | `{ error }` | Mailbox |
|
|
84
|
-
|
|
85
|
-
## Recipients Flow
|
|
86
|
-
1. User clicks an `ImportSource` button (or drops a CSV).
|
|
87
|
-
2. CSV is parsed → `validEmails`, `invalidEmails`, `duplicates` reported.
|
|
88
|
-
3. `emails-imported` event fires; mailbox merges into selected recipients.
|
|
89
|
-
4. User edits subject/body via email-editor; changes bubble as `compose-changed`.
|
|
90
|
-
5. On send, `send-email` fires with the full `SendEmailRequest` — parent handles network.
|
|
91
|
-
|
|
92
|
-
## Minimal Integration
|
|
93
|
-
```typescript
|
|
94
|
-
<schmancy-mailbox
|
|
95
|
-
.config=${config}
|
|
96
|
-
.templates=${templates}
|
|
97
|
-
@send-email=${async (e: CustomEvent<{ request: SendEmailRequest }>) => {
|
|
98
|
-
const result = await api.sendCampaign(e.detail.request)
|
|
99
|
-
if (!result.success) this.dispatchError(result.message)
|
|
100
|
-
}}
|
|
101
|
-
></schmancy-mailbox>
|
|
102
|
-
```
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
# schmancy-code
|
|
2
|
-
|
|
3
|
-
> Syntax-highlighted code block with line numbers, copy button, and collapsible display.
|
|
4
|
-
|
|
5
|
-
## Usage
|
|
6
|
-
```html
|
|
7
|
-
<schmancy-code language="typescript" .code=${'const x = 42'}></schmancy-code>
|
|
8
|
-
```
|
|
9
|
-
|
|
10
|
-
## Properties
|
|
11
|
-
| Property | Type | Default | Description |
|
|
12
|
-
|----------|------|---------|-------------|
|
|
13
|
-
| code | string | `''` | Code content to highlight |
|
|
14
|
-
| language | string | `'javascript'` | Language for syntax highlighting |
|
|
15
|
-
| filename | string | `undefined` | Filename shown in header |
|
|
16
|
-
| lineNumbers | boolean | `false` | Show line numbers |
|
|
17
|
-
| copyButton | boolean | `true` | Show copy-to-clipboard button |
|
|
18
|
-
| highlightLines | string | `undefined` | Lines to highlight (e.g., `'1-3,5,7-9'`) |
|
|
19
|
-
| maxHeight | string | `undefined` | Max height before scrolling |
|
|
20
|
-
|
|
21
|
-
## Supported Languages
|
|
22
|
-
javascript, typescript, html, xml, markdown, bash
|
|
23
|
-
|
|
24
|
-
## Examples
|
|
25
|
-
```html
|
|
26
|
-
<!-- TypeScript with line numbers and highlighted lines -->
|
|
27
|
-
<schmancy-code
|
|
28
|
-
language="typescript"
|
|
29
|
-
lineNumbers
|
|
30
|
-
highlightLines="2-3"
|
|
31
|
-
.code=${`import { html } from 'lit'
|
|
32
|
-
const greeting = 'Hello'
|
|
33
|
-
console.log(greeting)`}>
|
|
34
|
-
</schmancy-code>
|
|
35
|
-
|
|
36
|
-
<!-- Bash with filename -->
|
|
37
|
-
<schmancy-code language="bash" filename="install.sh"
|
|
38
|
-
.code=${'npm install @mhmo91/schmancy'}>
|
|
39
|
-
</schmancy-code>
|
|
40
|
-
|
|
41
|
-
<!-- With max height -->
|
|
42
|
-
<schmancy-code language="javascript" maxHeight="300px"
|
|
43
|
-
.code=${longCodeString}>
|
|
44
|
-
</schmancy-code>
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
Renders inside a collapsible `schmancy-details` with a macOS-style header (colored dots + language label). Uses highlight.js with schmancy color tokens.
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
# schmancy-dialog / $dialog
|
|
2
|
-
|
|
3
|
-
> Dialog with glass surface, cursorGlow, and mobile bottom-sheet adaptation. Use `$dialog` service for imperative usage.
|
|
4
|
-
|
|
5
|
-
## Usage
|
|
6
|
-
```typescript
|
|
7
|
-
import { $dialog } from '@mhmo91/schmancy'
|
|
8
|
-
|
|
9
|
-
// Confirm dialog
|
|
10
|
-
const confirmed = await $dialog.confirm({
|
|
11
|
-
title: 'Delete item?',
|
|
12
|
-
message: 'This cannot be undone.',
|
|
13
|
-
confirmText: 'Delete',
|
|
14
|
-
cancelText: 'Cancel',
|
|
15
|
-
variant: 'danger',
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
// Component dialog (renders any template/element)
|
|
19
|
-
await $dialog.component(html`<my-editor .data=${item}></my-editor>`)
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## $dialog API
|
|
23
|
-
| Method | Returns | Description |
|
|
24
|
-
|--------|---------|-------------|
|
|
25
|
-
| `confirm(options)` | `Promise<boolean>` | Show confirm dialog with title/message/buttons |
|
|
26
|
-
| `ask(message, event?)` | `Promise<boolean>` | Quick confirm with just a message |
|
|
27
|
-
| `danger(options)` | `Promise<boolean>` | Confirm with danger variant |
|
|
28
|
-
| `component(content, options?)` | `Promise<boolean>` | Show any template/element as dialog |
|
|
29
|
-
| `prompt(options)` | `Promise<string \| null>` | Input dialog, returns value or null |
|
|
30
|
-
| `dismiss()` | `boolean` | Dismiss topmost dialog |
|
|
31
|
-
|
|
32
|
-
## Confirm Options
|
|
33
|
-
| Option | Type | Default | Description |
|
|
34
|
-
|--------|------|---------|-------------|
|
|
35
|
-
| `title` | `string` | `undefined` | Dialog title |
|
|
36
|
-
| `subtitle` | `string` | `undefined` | Subtitle below title |
|
|
37
|
-
| `message` | `string` | `undefined` | Body message |
|
|
38
|
-
| `confirmText` | `string` | `'Confirm'` | Confirm button label |
|
|
39
|
-
| `cancelText` | `string` | `'Cancel'` | Cancel button label |
|
|
40
|
-
| `variant` | `'default' \| 'danger'` | `'default'` | Button color scheme |
|
|
41
|
-
| `position` | `{x,y} \| MouseEvent` | Last click | Animation origin |
|
|
42
|
-
| `content` | `TemplateResult \| HTMLElement` | `undefined` | Custom content in body |
|
|
43
|
-
|
|
44
|
-
## Physics
|
|
45
|
-
- **cursorGlow** on dialog surface (radius: 250, intensity: 0.1)
|
|
46
|
-
- Glass surface with `backdrop-blur-lg` and `backdrop-saturate-150`
|
|
47
|
-
- Luminous glow shadow around dialog container
|
|
48
|
-
- Mobile: renders as bottom sheet with drag handle and swipe dismiss
|
|
49
|
-
|
|
50
|
-
## Examples
|
|
51
|
-
```typescript
|
|
52
|
-
// Quick ask
|
|
53
|
-
if (await $dialog.ask('Remove this entry?', event)) {
|
|
54
|
-
removeEntry()
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// Prompt for input
|
|
58
|
-
const name = await $dialog.prompt({
|
|
59
|
-
title: 'Rename',
|
|
60
|
-
label: 'New name',
|
|
61
|
-
defaultValue: currentName,
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
// Custom component dialog
|
|
65
|
-
await $dialog.component(
|
|
66
|
-
html`<user-profile-editor .user=${user}></user-profile-editor>`,
|
|
67
|
-
{ position: event }
|
|
68
|
-
)
|
|
69
|
-
```
|