@mhmo91/schmancy 0.10.3 → 0.10.5
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 +20 -19
- package/custom-elements.json +17 -233
- package/dist/agent/schmancy.agent.js +5709 -9749
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/agent/schmancy.manifest.json +7 -224
- package/dist/{area-ZupIezvU.cjs → area-CSQdhCBF.cjs} +1 -1
- package/dist/{area-ZupIezvU.cjs.map → area-CSQdhCBF.cjs.map} +1 -1
- package/dist/{area-DHVANBbr.js → area-D5haQE-J.js} +1 -1
- package/dist/{area-DHVANBbr.js.map → area-D5haQE-J.js.map} +1 -1
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-Bn525CTp.cjs → autocomplete-B_bJXUjm.cjs} +1 -1
- package/dist/{autocomplete-Bn525CTp.cjs.map → autocomplete-B_bJXUjm.cjs.map} +1 -1
- package/dist/{autocomplete-pHvsyfbH.js → autocomplete-DtyjZJ1E.js} +2 -2
- package/dist/{autocomplete-pHvsyfbH.js.map → autocomplete-DtyjZJ1E.js.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-BJLCp-Hv.cjs} +1 -1
- package/dist/{boat-IyEtsNI4.cjs.map → boat-BJLCp-Hv.cjs.map} +1 -1
- package/dist/{boat-_Yv3M6YM.js → boat-MT8bRT8u.js} +2 -2
- package/dist/{boat-_Yv3M6YM.js.map → boat-MT8bRT8u.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-6BqWGryX.js} +1 -1
- package/dist/{busy-Ck2IXJ4r.js.map → busy-6BqWGryX.js.map} +1 -1
- package/dist/{busy-CjM39APN.cjs → busy-DSF2E-zy.cjs} +1 -1
- package/dist/{busy-CjM39APN.cjs.map → busy-DSF2E-zy.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-CvuVha-W.js} +1 -1
- package/dist/{card-DUWZmMHc.js.map → card-CvuVha-W.js.map} +1 -1
- package/dist/{card-DIxDuuth.cjs → card-DnKnaHzf.cjs} +1 -1
- package/dist/{card-DIxDuuth.cjs.map → card-DnKnaHzf.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-CGdFXuWQ.cjs → checkbox-D3u8Wm9r.cjs} +1 -1
- package/dist/{checkbox-CGdFXuWQ.cjs.map → checkbox-D3u8Wm9r.cjs.map} +1 -1
- package/dist/{checkbox-DPS1mWG-.js → checkbox-QDRsE8cp.js} +1 -1
- package/dist/{checkbox-DPS1mWG-.js.map → checkbox-QDRsE8cp.js.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-UoFbwmlG.cjs → chips-CMoQzop1.cjs} +1 -1
- package/dist/{chips-UoFbwmlG.cjs.map → chips-CMoQzop1.cjs.map} +1 -1
- package/dist/{chips-BnnXQSA-.js → chips-Dy9vx8JS.js} +4 -4
- package/dist/{chips-BnnXQSA-.js.map → chips-Dy9vx8JS.js.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/{code-highlight-CMilN0B8.cjs → code-highlight-Ddp0oZnm.cjs} +1 -1
- package/dist/{code-highlight-CMilN0B8.cjs.map → code-highlight-Ddp0oZnm.cjs.map} +1 -1
- package/dist/{code-highlight-kFUJ1Eet.js → code-highlight-DtE2-ObF.js} +1 -1
- package/dist/{code-highlight-kFUJ1Eet.js.map → code-highlight-DtE2-ObF.js.map} +1 -1
- package/dist/code-highlight.cjs +1 -1
- package/dist/code-highlight.js +1 -1
- 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-B2NuihKA.cjs +131 -0
- package/dist/date-range-B2NuihKA.cjs.map +1 -0
- package/dist/{date-range-DOstCIg8.js → date-range-Boesjlic.js} +99 -113
- package/dist/date-range-Boesjlic.js.map +1 -0
- package/dist/{date-range-inline-4P7zqeVe.cjs → date-range-inline-BI6_4Ahl.cjs} +1 -1
- package/dist/{date-range-inline-4P7zqeVe.cjs.map → date-range-inline-BI6_4Ahl.cjs.map} +1 -1
- package/dist/{date-range-inline-BVycTWLb.js → date-range-inline-DBuND2pc.js} +1 -1
- package/dist/{date-range-inline-BVycTWLb.js.map → date-range-inline-DBuND2pc.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-BRs_z5-k.cjs} +1 -1
- package/dist/{details-BJBbZOO6.cjs.map → details-BRs_z5-k.cjs.map} +1 -1
- package/dist/{details-DPc5GxPa.js → details-BrGrUTGC.js} +2 -2
- package/dist/{details-DPc5GxPa.js.map → details-BrGrUTGC.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-DPT3XnG5.cjs → divider-BOxQ2T9h.cjs} +1 -1
- package/dist/{divider-DPT3XnG5.cjs.map → divider-BOxQ2T9h.cjs.map} +1 -1
- package/dist/{divider-BvJsmSPH.js → divider-W3TiDasp.js} +1 -1
- package/dist/{divider-BvJsmSPH.js.map → divider-W3TiDasp.js.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-CnccBF91.cjs} +1 -1
- package/dist/{expand-CTqBWVXo.cjs.map → expand-CnccBF91.cjs.map} +1 -1
- package/dist/{expand-BMzocdtj.js → expand-Pu8fZ0jZ.js} +2 -2
- package/dist/{expand-BMzocdtj.js.map → expand-Pu8fZ0jZ.js.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/{extra-h_cuxRII.cjs → extra-B8IPs6gG.cjs} +1 -1
- package/dist/{extra-h_cuxRII.cjs.map → extra-B8IPs6gG.cjs.map} +1 -1
- package/dist/{extra-BeHlUhzv.js → extra-DxEWs41z.js} +1 -1
- package/dist/{extra-BeHlUhzv.js.map → extra-DxEWs41z.js.map} +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{float-CwVBs11k.cjs → float-BRKa-P6Z.cjs} +1 -1
- package/dist/{float-CwVBs11k.cjs.map → float-BRKa-P6Z.cjs.map} +1 -1
- package/dist/{float-CTc1xxqH.js → float-WCVdp3um.js} +1 -1
- package/dist/{float-CTc1xxqH.js.map → float-WCVdp3um.js.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{form-CSJp687X.cjs.map → form-B2qudx_q.cjs.map} +1 -1
- package/dist/{form-BtwOBMZ9.js.map → form-CI59gad4.js.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-a8uVr3xs.js.map} +1 -1
- package/dist/{hashContent-Bp5S6T4U.cjs.map → hashContent-ejkBgDnN.cjs.map} +1 -1
- package/dist/{icons-BbCVrcas.js → icons-C0ufCcdp.js} +2 -2
- package/dist/{icons-BbCVrcas.js.map → icons-C0ufCcdp.js.map} +1 -1
- package/dist/{icons-qEQW4pjM.cjs → icons-DXEbmg-O.cjs} +1 -1
- package/dist/{icons-qEQW4pjM.cjs.map → icons-DXEbmg-O.cjs.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-D6HTruav.cjs → iframe-C6RVODkW.cjs} +1 -1
- package/dist/{iframe-D6HTruav.cjs.map → iframe-C6RVODkW.cjs.map} +1 -1
- package/dist/{iframe-BJfDIEJf.js → iframe-c9lGxw7x.js} +1 -1
- package/dist/{iframe-BJfDIEJf.js.map → iframe-c9lGxw7x.js.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 +72 -76
- package/dist/{input-U26axtcs.cjs → input-B4HM-9-H.cjs} +1 -1
- package/dist/{input-U26axtcs.cjs.map → input-B4HM-9-H.cjs.map} +1 -1
- package/dist/{input-LTK3cctF.js → input-Pmj_bH37.js} +1 -1
- package/dist/{input-LTK3cctF.js.map → input-Pmj_bH37.js.map} +1 -1
- package/dist/{input-chip-Ch-aCs3c.js → input-chip-BIGgd_7w.js} +1 -1
- package/dist/{input-chip-Ch-aCs3c.js.map → input-chip-BIGgd_7w.js.map} +1 -1
- package/dist/{input-chip-CADXt0X5.cjs → input-chip-BoDisY6c.cjs} +1 -1
- package/dist/{input-chip-CADXt0X5.cjs.map → input-chip-BoDisY6c.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-DbYUSfVl.cjs → lightbox-DK1vDKm3.cjs} +1 -1
- package/dist/{lightbox-DbYUSfVl.cjs.map → lightbox-DK1vDKm3.cjs.map} +1 -1
- package/dist/{lightbox-DqG2z3Cn.js → lightbox-K1eJTYXP.js} +2 -2
- package/dist/{lightbox-DqG2z3Cn.js.map → lightbox-K1eJTYXP.js.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-CLX4sSAw.cjs → list-CEuVqAxN.cjs} +1 -1
- package/dist/{list-CLX4sSAw.cjs.map → list-CEuVqAxN.cjs.map} +1 -1
- package/dist/{list-D6-_E5ZD.js → list-Ds0Nv1y5.js} +1 -1
- package/dist/{list-D6-_E5ZD.js.map → list-Ds0Nv1y5.js.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/{mailbox-Ct6iYe-4.cjs → mailbox-CDWqbVvZ.cjs} +58 -58
- package/dist/mailbox-CDWqbVvZ.cjs.map +1 -0
- package/dist/{mailbox-DsPII8HR.js → mailbox-DD2How0H.js} +112 -101
- package/dist/mailbox-DD2How0H.js.map +1 -0
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-Dhy3ta9v.js → map-1uwxxvBa.js} +1 -1
- package/dist/{map-Dhy3ta9v.js.map → map-1uwxxvBa.js.map} +1 -1
- package/dist/{map-WXeVkx2K.cjs → map-BrBSrIqg.cjs} +1 -1
- package/dist/{map-WXeVkx2K.cjs.map → map-BrBSrIqg.cjs.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/menu-Bly30Nje.cjs +23 -0
- package/dist/menu-Bly30Nje.cjs.map +1 -0
- package/dist/menu-L8MK1ma5.js +62 -0
- package/dist/menu-L8MK1ma5.js.map +1 -0
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins-B34UxxCe.js +627 -0
- package/dist/{mixins-CcIWET41.js.map → mixins-B34UxxCe.js.map} +1 -1
- package/dist/mixins-CAb0b03r.cjs +298 -0
- package/dist/{mixins-De3xfjrm.cjs.map → mixins-CAb0b03r.cjs.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-7fSbk8hm.cjs} +1 -1
- package/dist/{notification-D_PQjBSf.cjs.map → notification-7fSbk8hm.cjs.map} +1 -1
- package/dist/{notification-CVLqQ8c_.js → notification-DB25M-qo.js} +2 -2
- package/dist/{notification-CVLqQ8c_.js.map → notification-DB25M-qo.js.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-rm4HebVs.js → option-DDHa25k5.js} +1 -1
- package/dist/{option-rm4HebVs.js.map → option-DDHa25k5.js.map} +1 -1
- package/dist/{option-DDU_goh1.cjs → option-HF9Xqbuq.cjs} +1 -1
- package/dist/{option-DDU_goh1.cjs.map → option-HF9Xqbuq.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-CCiTaf_C.js.map} +1 -1
- package/dist/{overlay-stack-BprhAE9a.cjs.map → overlay-stack-CFGiYf34.cjs.map} +1 -1
- package/dist/overlay.cjs +5 -53
- package/dist/overlay.cjs.map +1 -1
- package/dist/overlay.confirm-body-BDG94R0x.js +104 -0
- package/dist/overlay.confirm-body-BDG94R0x.js.map +1 -0
- package/dist/overlay.confirm-body-b4Nx_OVf.cjs +49 -0
- package/dist/overlay.confirm-body-b4Nx_OVf.cjs.map +1 -0
- package/dist/overlay.js +120 -360
- package/dist/overlay.js.map +1 -1
- package/dist/overlay.service-BUCuZa6V.js +146 -0
- package/dist/overlay.service-BUCuZa6V.js.map +1 -0
- package/dist/overlay.service-CRHZZY9F.cjs +1 -0
- package/dist/overlay.service-CRHZZY9F.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-C4jb-OdM.js} +1 -1
- package/dist/{payment-card-form-C0dHYZIv.js.map → payment-card-form-C4jb-OdM.js.map} +1 -1
- package/dist/{payment-card-form-DNvmZxs4.cjs → payment-card-form-WEx4CscR.cjs} +1 -1
- package/dist/{payment-card-form-DNvmZxs4.cjs.map → payment-card-form-WEx4CscR.cjs.map} +1 -1
- package/dist/payment-card-form.cjs +1 -1
- package/dist/payment-card-form.js +1 -1
- package/dist/{progress-U3LQkpM2.cjs → progress-54R4QRgW.cjs} +1 -1
- package/dist/{progress-U3LQkpM2.cjs.map → progress-54R4QRgW.cjs.map} +1 -1
- package/dist/{progress-BRerM5Bn.js → progress-CqOyMM4i.js} +1 -1
- package/dist/{progress-BRerM5Bn.js.map → progress-CqOyMM4i.js.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-B4zbBIZF.js} +1 -1
- package/dist/{radio-group-BZ2WoOXJ.js.map → radio-group-B4zbBIZF.js.map} +1 -1
- package/dist/{radio-group-D7mm-yvJ.cjs → radio-group-BJqZpYVy.cjs} +1 -1
- package/dist/{radio-group-D7mm-yvJ.cjs.map → radio-group-BJqZpYVy.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-BXpvHN4-.js.map} +1 -1
- package/dist/{rxjs-utils-Csnks202.cjs.map → rxjs-utils-CaC-tdot.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-CYm6Krus.js} +1 -1
- package/dist/{scroll-qL-HkMdP.js.map → scroll-CYm6Krus.js.map} +1 -1
- package/dist/{scroll-DJTjNIT_.cjs → scroll-iSRovYYt.cjs} +1 -1
- package/dist/{scroll-DJTjNIT_.cjs.map → scroll-iSRovYYt.cjs.map} +1 -1
- package/dist/{select-CnPXUeSf.js → select-1WHseXP6.js} +2 -2
- package/dist/{select-CnPXUeSf.js.map → select-1WHseXP6.js.map} +1 -1
- package/dist/{select-BvA7v-gL.cjs → select-DiQHtQJN.cjs} +1 -1
- package/dist/{select-BvA7v-gL.cjs.map → select-DiQHtQJN.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 +2 -2
- package/dist/skills/SKILL.md +13 -9
- package/dist/skills/schmancy/INDEX.md +2 -2
- package/dist/skills/schmancy/SKILL.md +13 -9
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{splash-screen-C8JCqX5L.js → splash-screen-BwvtKMdN.js} +1 -1
- package/dist/{splash-screen-C8JCqX5L.js.map → splash-screen-BwvtKMdN.js.map} +1 -1
- package/dist/{splash-screen-BDt4PInk.cjs → splash-screen-CJL8DGDe.cjs} +1 -1
- package/dist/{splash-screen-BDt4PInk.cjs.map → splash-screen-CJL8DGDe.cjs.map} +1 -1
- package/dist/splash-screen.cjs +1 -1
- package/dist/splash-screen.js +1 -1
- package/dist/{src-CpRNClhg.cjs → src-Bwr2NR0A.cjs} +13 -13
- package/dist/src-Bwr2NR0A.cjs.map +1 -0
- package/dist/{src-CqdnWGgr.js → src-UaZeROcW.js} +164 -162
- package/dist/src-UaZeROcW.js.map +1 -0
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{surface-Du2Y4vXd.cjs → surface-DE5iuI8e.cjs} +1 -1
- package/dist/{surface-Du2Y4vXd.cjs.map → surface-DE5iuI8e.cjs.map} +1 -1
- package/dist/{surface-C8jQy8Ym.js → surface-DPUkQ3OL.js} +1 -1
- package/dist/{surface-C8jQy8Ym.js.map → surface-DPUkQ3OL.js.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-Cyahh9Q6.js → tabs-B2XEQPQl.js} +1 -1
- package/dist/{tabs-Cyahh9Q6.js.map → tabs-B2XEQPQl.js.map} +1 -1
- package/dist/{tabs-0RfeCa00.cjs → tabs-CsDQ72Qk.cjs} +1 -1
- package/dist/{tabs-0RfeCa00.cjs.map → tabs-CsDQ72Qk.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-CXCcTVnf.js → textarea-C_ps0lL-.js} +1 -1
- package/dist/{textarea-CXCcTVnf.js.map → textarea-C_ps0lL-.js.map} +1 -1
- package/dist/{textarea-jqRrLxmo.cjs → textarea-aeAP9cDG.cjs} +1 -1
- package/dist/{textarea-jqRrLxmo.cjs.map → textarea-aeAP9cDG.cjs.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/theme-DAYTVw13.cjs +181 -0
- package/dist/{theme-Hjz9sCN-.cjs.map → theme-DAYTVw13.cjs.map} +1 -1
- package/dist/{theme-2KZW2Rfs.js → theme-DAx1iRNr.js} +3 -4
- package/dist/{theme-2KZW2Rfs.js.map → theme-DAx1iRNr.js.map} +1 -1
- package/dist/{theme-button-9uF1eoHz.js → theme-button-BrHkzCtj.js} +1 -1
- package/dist/{theme-button-9uF1eoHz.js.map → theme-button-BrHkzCtj.js.map} +1 -1
- package/dist/{theme-button-C7QIbke1.cjs → theme-button-LsMKY_N_.cjs} +1 -1
- package/dist/{theme-button-C7QIbke1.cjs.map → theme-button-LsMKY_N_.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-DnVNre4O.js.map → theme.interface-C_034TxG.js.map} +1 -1
- package/dist/{theme.interface-D9l33b-M.cjs.map → theme.interface-DESopuZS.cjs.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-BzFQfaIr.js} +1 -1
- package/dist/{utils-hp-DnFf5.js.map → utils-BzFQfaIr.js.map} +1 -1
- package/dist/{utils-Cr-YO4Np.cjs → utils-oLBkMvor.cjs} +1 -1
- package/dist/{utils-Cr-YO4Np.cjs.map → utils-oLBkMvor.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-BJrKS6Zr.cjs} +1 -1
- package/dist/{window-DtUOWiAj.cjs.map → window-BJrKS6Zr.cjs.map} +1 -1
- package/dist/{window-C7yY9yp5.js → window-CyDuTN80.js} +3 -3
- package/dist/{window-C7yY9yp5.js.map → window-CyDuTN80.js.map} +1 -1
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/package.json +1 -1
- package/plugins/vite-plugin-schmancy-manifest.ts +0 -13
- package/skills/schmancy/INDEX.md +2 -2
- package/skills/schmancy/SKILL.md +13 -9
- package/src/agent/agent-entry.test.ts +15 -0
- package/src/agent/agent-entry.ts +11 -16
- 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 -2
- package/src/mailbox/email-editor.ts +17 -18
- package/src/mailbox/email-template-picker.ts +19 -13
- package/src/menu/menu-item.ts +7 -2
- package/src/menu/menu.ts +24 -20
- package/types/src/agent/agent-entry.d.ts +2 -3
- 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 -2
- package/types/src/mailbox/email-template-picker.d.ts +7 -7
- package/types/src/menu/menu-item.d.ts +1 -0
- package/types/src/menu/menu.d.ts +9 -7
- 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.map +0 -1
- package/dist/mailbox-DsPII8HR.js.map +0 -1
- 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/dialog.md +0 -69
- package/dist/skills/schmancy/dialog.md +0 -69
- 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/dialog.md +0 -69
- package/skills/schmancy/sheet.md +0 -76
- package/src/agent/agent-bundle.test.ts +0 -92
- package/src/agent/helpers.ts +0 -159
- package/src/agent/schmancy-skill.ts +0 -71
- package/src/agent/virtual-manifest.d.ts +0 -10
- 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/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/agent/helpers.d.ts +0 -86
- package/types/src/agent/schmancy-skill.d.ts +0 -32
- 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/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/{context-daN5G6HS.cjs → context-BpCETidA.cjs} +0 -0
- /package/dist/{context-Bdu1xt0W.js → context-DJTJnSK4.js} +0 -0
- /package/dist/{form-CSJp687X.cjs → form-B2qudx_q.cjs} +0 -0
- /package/dist/{form-BtwOBMZ9.js → form-CI59gad4.js} +0 -0
- /package/dist/{hashContent-1ARKIsx9.js → hashContent-a8uVr3xs.js} +0 -0
- /package/dist/{hashContent-Bp5S6T4U.cjs → hashContent-ejkBgDnN.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-CCiTaf_C.js} +0 -0
- /package/dist/{overlay-stack-BprhAE9a.cjs → overlay-stack-CFGiYf34.cjs} +0 -0
- /package/dist/{rxjs-utils-d-ivVN84.js → rxjs-utils-BXpvHN4-.js} +0 -0
- /package/dist/{rxjs-utils-Csnks202.cjs → rxjs-utils-CaC-tdot.cjs} +0 -0
- /package/dist/{theme.interface-DnVNre4O.js → theme.interface-C_034TxG.js} +0 -0
- /package/dist/{theme.interface-D9l33b-M.cjs → theme.interface-DESopuZS.cjs} +0 -0
- /package/types/src/agent/{agent-bundle.test.d.ts → agent-entry.test.d.ts} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"theme.service-CmbOGMA8.js","names":[],"sources":["../src/theme/theme.service.ts"],"sourcesContent":["import {\n BehaviorSubject,\n Observable,\n fromEvent,\n timer,\n map,\n takeUntil,\n defaultIfEmpty,\n distinctUntilChanged,\n shareReplay,\n tap,\n switchMap,\n of\n} from 'rxjs'\nimport { ThemeHereIAm, ThemeHereIAmEvent, ThemeWhereAreYou } from './theme.events'\nimport type { SchmancyThemeComponent } from './theme.component'\nimport type { TSchmancyTheme } from './theme.interface'\nimport { state } from '../state'\n\ninterface ThemeSettings {\n scheme: 'dark' | 'light' | 'auto'\n color: string\n}\n\n// Theme settings — persists to localStorage under namespace `schmancy/theme`.\nconst ThemeContext = state<ThemeSettings>('schmancy/theme').local({\n scheme: 'auto',\n color: '#6200ee',\n})\n\n/**\n * Theme Service - Provides centralized theme management for Schmancy components.\n *\n * This service acts as a singleton interface to interact with the theme system,\n * providing reactive observables for theme state and methods to control theming.\n *\n * @example\n * ```typescript\n * import { theme } from '@schmancy/theme'\n *\n * // Subscribe to theme changes\n * theme.scheme$.subscribe(scheme => {\n * console.log('Current scheme:', scheme) // 'light' | 'dark' | 'auto'\n * })\n *\n * // Get current values synchronously\n * const currentScheme = theme.scheme\n * const currentColor = theme.color\n *\n * // Toggle between light and dark mode\n * theme.toggleScheme()\n *\n * // Set specific scheme\n * theme.setScheme('dark')\n *\n * // Check if dark mode is active\n * theme.isDarkMode().subscribe(isDark => {\n * console.log('Is dark mode:', isDark)\n * })\n * ```\n */\nclass ThemeService {\n private static instance: ThemeService\n\n // Observable properties for theme values\n private _theme$ = new BehaviorSubject<Partial<TSchmancyTheme>>({})\n private _themeComponent$ = new BehaviorSubject<SchmancyThemeComponent | null>(null)\n private _fullscreen$ = new BehaviorSubject<boolean>(false)\n private _bottomOffset$ = new BehaviorSubject<number>(0)\n\n // Public observables derived from context\n public readonly scheme$ = ThemeContext.$.pipe(\n map(settings => settings.scheme),\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly color$ = ThemeContext.$.pipe(\n map(settings => settings.color),\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly theme$ = this._theme$.asObservable().pipe(\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\n shareReplay(1)\n )\n\n public readonly themeComponent$ = this._themeComponent$.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly fullscreen$ = this._fullscreen$.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n public readonly bottomOffset$ = this._bottomOffset$.asObservable().pipe(\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n // Getters for synchronous access to current values\n get scheme(): 'dark' | 'light' | 'auto' {\n return ThemeContext.value.scheme\n }\n\n get color(): string {\n return ThemeContext.value.color\n }\n\n get theme(): Partial<TSchmancyTheme> {\n return this._theme$.getValue()\n }\n\n get themeComponent(): SchmancyThemeComponent | null {\n return this._themeComponent$.getValue()\n }\n\n get fullscreen(): boolean {\n return this._fullscreen$.getValue()\n }\n\n get bottomOffset(): number {\n return this._bottomOffset$.getValue()\n }\n\n // Computed observable for actual scheme (resolving 'auto')\n public readonly resolvedScheme$ = this.scheme$.pipe(\n switchMap(scheme => {\n if (scheme === 'auto') {\n // Listen to system preference changes\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\n return new Observable<'dark' | 'light'>(subscriber => {\n const handler = (e: MediaQueryListEvent) => {\n subscriber.next(e.matches ? 'dark' : 'light')\n }\n mediaQuery.addEventListener('change', handler)\n\n // Emit initial value\n subscriber.next(mediaQuery.matches ? 'dark' : 'light')\n\n // Cleanup\n return () => mediaQuery.removeEventListener('change', handler)\n })\n }\n return of(scheme as 'dark' | 'light')\n }),\n distinctUntilChanged(),\n shareReplay(1)\n )\n\n constructor() {\n this.discoverTheme()\n }\n\n /**\n * Discover the nearest theme component in the DOM.\n * This method can be called to refresh the theme discovery process.\n *\n * @returns {Observable<SchmancyThemeComponent | null>} Observable that emits the discovered theme component or null\n *\n * @example\n * ```typescript\n * theme.discoverTheme().subscribe(component => {\n * if (component) {\n * console.log('Theme component found:', component)\n * } else {\n * console.log('No theme component found')\n * }\n * })\n * ```\n */\n public discoverTheme(): Observable<SchmancyThemeComponent | null> {\n // Dispatch discovery event and wait for response\n return fromEvent<ThemeHereIAmEvent>(window, ThemeHereIAm).pipe(\n takeUntil(timer(100)), // Wait up to 100ms for response\n map(e => e.detail.theme as SchmancyThemeComponent),\n defaultIfEmpty(null),\n tap(themeComponent => {\n if (themeComponent) {\n this.registerThemeComponent(themeComponent)\n }\n })\n ).pipe(\n tap(() => {\n // Trigger theme discovery\n window.dispatchEvent(\n new CustomEvent(ThemeWhereAreYou, {\n bubbles: true,\n composed: true,\n })\n )\n }),\n switchMap(() =>\n fromEvent<ThemeHereIAmEvent>(window, ThemeHereIAm).pipe(\n takeUntil(timer(100)),\n map(e => e.detail.theme as SchmancyThemeComponent),\n defaultIfEmpty(null),\n tap(themeComponent => {\n if (themeComponent) {\n this.registerThemeComponent(themeComponent)\n }\n })\n )\n )\n )\n }\n\n /**\n * Register a theme component and subscribe to its changes.\n * This is typically called internally by theme components when they mount or update.\n *\n * @param {SchmancyThemeComponent} component - The theme component to register\n *\n * @internal\n */\n public registerThemeComponent(component: SchmancyThemeComponent): void {\n this._themeComponent$.next(component)\n\n // Update values from the component\n ThemeContext.set({ scheme: component.scheme, color: component.color })\n this._theme$.next(component.theme)\n }\n\n /**\n * Update theme values. Usually called internally by theme components.\n *\n * @param {Object} values - Theme values to update\n * @param {'dark' | 'light' | 'auto'} [values.scheme] - Color scheme to set\n * @param {string} [values.color] - Primary color in hex format\n * @param {Partial<TSchmancyTheme>} [values.theme] - Theme configuration object\n *\n * @internal\n */\n public updateTheme(values: {\n scheme?: 'dark' | 'light' | 'auto'\n color?: string\n theme?: Partial<TSchmancyTheme>\n }): void {\n const updates: Partial<ThemeSettings> = {}\n if (values.scheme !== undefined) {\n updates.scheme = values.scheme\n }\n if (values.color !== undefined) {\n updates.color = values.color\n }\n if (Object.keys(updates).length > 0) {\n ThemeContext.set(updates)\n }\n if (values.theme !== undefined) {\n this._theme$.next(values.theme)\n }\n }\n\n /**\n * Set the color scheme for the application.\n *\n * @param {'dark' | 'light' | 'auto'} scheme - The color scheme to set\n *\n * @example\n * ```typescript\n * // Set to dark mode\n * theme.setScheme('dark')\n *\n * // Set to auto (follows system preference)\n * theme.setScheme('auto')\n * ```\n */\n public setScheme(scheme: 'dark' | 'light' | 'auto'): void {\n const component = this.themeComponent\n if (component) {\n component.scheme = scheme\n ThemeContext.set({ scheme })\n } else {\n console.warn('No theme component found. Scheme change may not persist.')\n ThemeContext.set({ scheme })\n }\n }\n\n /**\n * Set the primary color for the theme.\n *\n * @param {string} color - Primary color in hex format (e.g., '#6200ee')\n *\n * @example\n * ```typescript\n * // Set primary color to purple\n * theme.setColor('#6200ee')\n *\n * // Set primary color to blue\n * theme.setColor('#2196f3')\n * ```\n */\n public setColor(color: string): void {\n const component = this.themeComponent\n if (component) {\n component.color = color\n ThemeContext.set({ color })\n } else {\n console.warn('No theme component found. Color change may not persist.')\n ThemeContext.set({ color })\n }\n }\n\n /**\n * Check if dark mode is currently active.\n * This resolves 'auto' scheme to the actual value based on system preference.\n *\n * @returns {Observable<boolean>} Observable that emits true if dark mode is active, false otherwise\n *\n * @example\n * ```typescript\n * theme.isDarkMode().subscribe(isDark => {\n * if (isDark) {\n * console.log('Dark mode is active')\n * } else {\n * console.log('Light mode is active')\n * }\n * })\n * ```\n */\n public isDarkMode(): Observable<boolean> {\n return this.resolvedScheme$.pipe(\n map(scheme => scheme === 'dark')\n )\n }\n\n /**\n * Toggle between light and dark mode.\n * If currently in 'auto' mode, defaults to 'light'.\n *\n * @example\n * ```typescript\n * // Toggle theme on button click\n * button.addEventListener('click', () => {\n * theme.toggleScheme()\n * })\n * ```\n */\n public toggleScheme(): void {\n const currentScheme = this.scheme\n const newScheme = currentScheme === 'dark' ? 'light' :\n currentScheme === 'light' ? 'dark' :\n 'light' // If 'auto', default to 'light'\n this.setScheme(newScheme)\n }\n\n /**\n * Get the current value of a CSS variable from the theme.\n *\n * @param {string} variableName - Name of the CSS variable (without '--schmancy-' prefix)\n * @returns {string} The CSS variable value or empty string if not found\n *\n * @example\n * ```typescript\n * // Get primary color variable\n * const primaryColor = theme.getCSSVariable('color-primary')\n *\n * // Get surface color\n * const surfaceColor = theme.getCSSVariable('color-surface')\n * ```\n */\n public getCSSVariable(variableName: string): string {\n const component = this.themeComponent\n if (component) {\n const host = component.root ? document.body : (component.shadowRoot?.host as HTMLElement)\n if (host) {\n return getComputedStyle(host).getPropertyValue(`--schmancy-${variableName}`).trim()\n }\n }\n return ''\n }\n\n /**\n * Subscribe to changes of a specific CSS variable.\n *\n * @param {string} variableName - Name of the CSS variable to watch (without '--schmancy-' prefix)\n * @returns {Observable<string>} Observable that emits the CSS variable value when it changes\n *\n * @example\n * ```typescript\n * // Watch for primary color changes\n * theme.watchCSSVariable('color-primary').subscribe(color => {\n * console.log('Primary color changed to:', color)\n * })\n *\n * // Watch for surface color changes\n * theme.watchCSSVariable('color-surface').subscribe(color => {\n * console.log('Surface color changed to:', color)\n * })\n * ```\n */\n public watchCSSVariable(variableName: string): Observable<string> {\n return this.theme$.pipe(\n map(() => this.getCSSVariable(variableName)),\n distinctUntilChanged()\n )\n }\n\n /**\n * Set the fullscreen state for the application.\n * This emits a custom event that navigation components can listen to.\n *\n * @param {boolean} value - Whether fullscreen mode is active\n *\n * @example\n * ```typescript\n * // Enter fullscreen mode\n * theme.setFullscreen(true)\n *\n * // Exit fullscreen mode\n * theme.setFullscreen(false)\n * ```\n */\n public setFullscreen(value: boolean): void {\n this._fullscreen$.next(value)\n\n // Emit custom event for components to listen to\n window.dispatchEvent(\n new CustomEvent('fullscreen', {\n detail: value,\n bubbles: true,\n composed: true\n })\n )\n }\n\n /**\n * Toggle fullscreen mode.\n *\n * @example\n * ```typescript\n * // Toggle fullscreen mode on button click\n * button.addEventListener('click', () => {\n * theme.toggleFullscreen()\n * })\n * ```\n */\n public toggleFullscreen(): void {\n this.setFullscreen(!this.fullscreen)\n }\n\n /**\n * Set the bottom offset for viewport calculations.\n * Used by navigation bars to inform fullHeight directive of reserved space.\n *\n * @param {number} value - Bottom offset in pixels\n *\n * @example\n * ```typescript\n * // Set bottom offset when nav bar is visible\n * theme.setBottomOffset(80)\n *\n * // Clear bottom offset when nav bar is hidden\n * theme.setBottomOffset(0)\n * ```\n */\n public setBottomOffset(value: number): void {\n this._bottomOffset$.next(value)\n }\n\n /**\n * Convenience method to update theme state including fullscreen.\n * Can be called with next() like syntax for familiarity.\n *\n * @param {Object} values - Theme values to update\n * @param {boolean} [values.fullscreen] - Fullscreen state\n * @param {'dark' | 'light' | 'auto'} [values.scheme] - Color scheme\n * @param {string} [values.color] - Primary color\n *\n * @example\n * ```typescript\n * // Set fullscreen mode\n * theme.next({ fullscreen: true })\n *\n * // Update multiple values\n * theme.next({\n * fullscreen: true,\n * scheme: 'dark'\n * })\n * ```\n */\n public next(values: {\n fullscreen?: boolean\n scheme?: 'dark' | 'light' | 'auto'\n color?: string\n }): void {\n if (values.fullscreen !== undefined) {\n this.setFullscreen(values.fullscreen)\n }\n if (values.scheme !== undefined) {\n this.setScheme(values.scheme)\n }\n if (values.color !== undefined) {\n this.setColor(values.color)\n }\n }\n\n /**\n * Get the singleton instance of ThemeService.\n *\n * @returns {ThemeService} The singleton ThemeService instance\n *\n * @internal\n */\n static getInstance(): ThemeService {\n if (!ThemeService.instance) {\n ThemeService.instance = new ThemeService()\n }\n return ThemeService.instance\n }\n}\n\n/**\n * Theme singleton. Reads and mutates the active theme (scheme, source color,\n * locale); persists the user's scheme choice. Components subscribe via\n * `theme.theme$` for changes.\n *\n * @service\n * @summary Theme service — active scheme, source color, locale.\n * @method next({ scheme?, source?, locale? }) - Update theme state.\n * @method theme$ - Observable<TSchmancyTheme>; emits on every theme change.\n * @method toggle() - Toggle between light and dark schemes.\n */\nexport const theme = ThemeService.getInstance()\nexport const schmancyTheme = theme // Alias for convenience\nexport default theme"],"mappings":"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"}
|
|
@@ -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/skills/schmancy/sheet.md
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
# schmancy-sheet / sheet
|
|
2
|
-
|
|
3
|
-
> Side/bottom panel with glass backdrop, luminous edge glow, and spring entry animation. Use `sheet` service for imperative usage.
|
|
4
|
-
|
|
5
|
-
## Usage
|
|
6
|
-
```typescript
|
|
7
|
-
import { sheet } from '@mhmo91/schmancy'
|
|
8
|
-
|
|
9
|
-
sheet.push({
|
|
10
|
-
component: MyComponent, // Component class or tag name
|
|
11
|
-
position: SchmancySheetPosition.Side,
|
|
12
|
-
props: { itemId: '123' }, // Passed to component
|
|
13
|
-
})
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## sheet API
|
|
17
|
-
| Method | Description |
|
|
18
|
-
|--------|-------------|
|
|
19
|
-
| `push(config)` | Open a sheet with component content |
|
|
20
|
-
| `dismiss(uid?)` | Close sheet by uid, or most recent |
|
|
21
|
-
| `closeAll()` | Close all open sheets |
|
|
22
|
-
| `isOpen(uid)` | Check if sheet with uid is open |
|
|
23
|
-
|
|
24
|
-
## SheetConfig
|
|
25
|
-
| Option | Type | Default | Description |
|
|
26
|
-
|--------|------|---------|-------------|
|
|
27
|
-
| `component` | `ComponentType` | required | Component class or lazy loader |
|
|
28
|
-
| `uid` | `string` | Auto-generated | Unique identifier for the sheet |
|
|
29
|
-
| `position` | `SchmancySheetPosition` | Auto (side on desktop, bottom on mobile) | `Side` or `Bottom` |
|
|
30
|
-
| `persist` | `boolean` | `false` | Keep DOM after close |
|
|
31
|
-
| `lock` | `boolean` | `false` | Prevent ESC and overlay click dismiss |
|
|
32
|
-
| `props` | `Record<string, unknown>` | `undefined` | Properties passed to component |
|
|
33
|
-
| `close` | `() => void` | `undefined` | Close callback |
|
|
34
|
-
|
|
35
|
-
## Component Properties (schmancy-sheet)
|
|
36
|
-
| Property | Type | Default | Description |
|
|
37
|
-
|----------|------|---------|-------------|
|
|
38
|
-
| `open` | `boolean` | `false` | Open state |
|
|
39
|
-
| `position` | `'side' \| 'bottom'` | `'side'` | Panel position |
|
|
40
|
-
| `persist` | `boolean` | `false` | Keep in DOM after close |
|
|
41
|
-
| `lock` | `boolean` | `false` | Disable dismiss via ESC/overlay |
|
|
42
|
-
| `handleHistory` | `boolean` | `true` | Handle browser back button |
|
|
43
|
-
|
|
44
|
-
## Events
|
|
45
|
-
| Event | Description |
|
|
46
|
-
|-------|-------------|
|
|
47
|
-
| `close` | Fired when sheet closes |
|
|
48
|
-
|
|
49
|
-
## Physics
|
|
50
|
-
- Glass backdrop: `backdrop-blur-lg` + `backdrop-saturate-150`
|
|
51
|
-
- Luminous edge glow on panel (primary color, 15% intensity)
|
|
52
|
-
- Spring entry: `scale(0.95)` to `scale(1)` with Blackbird easing
|
|
53
|
-
- Side: slides from right; Bottom: slides from bottom
|
|
54
|
-
- Background siblings set to `inert` while open
|
|
55
|
-
- Stacks with dialogs via shared `overlayStack` z-index manager
|
|
56
|
-
|
|
57
|
-
## Examples
|
|
58
|
-
```typescript
|
|
59
|
-
import { sheet, SchmancySheetPosition } from '@mhmo91/schmancy'
|
|
60
|
-
|
|
61
|
-
// Open side sheet
|
|
62
|
-
sheet.push({
|
|
63
|
-
component: UserEditor,
|
|
64
|
-
props: { userId: '456' },
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
// Locked bottom sheet
|
|
68
|
-
sheet.push({
|
|
69
|
-
component: PaymentForm,
|
|
70
|
-
position: SchmancySheetPosition.Bottom,
|
|
71
|
-
lock: true,
|
|
72
|
-
})
|
|
73
|
-
|
|
74
|
-
// Dismiss programmatically
|
|
75
|
-
sheet.dismiss()
|
|
76
|
-
```
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest'
|
|
2
|
-
import './agent-entry'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Acceptance test per the Claude Design handover §4.4:
|
|
6
|
-
*
|
|
7
|
-
* > "CI check: load the bundle in a headless browser, assert
|
|
8
|
-
* > `customElements.get('schmancy-button')` resolves, assert
|
|
9
|
-
* > `window.schmancy.help()` returns non-empty."
|
|
10
|
-
*
|
|
11
|
-
* This test is the runtime smoke test. It imports the agent bundle entry
|
|
12
|
-
* (which side-effect registers every <schmancy-*> tag plus <schmancy-skill>)
|
|
13
|
-
* and then verifies the self-describing surface is installed.
|
|
14
|
-
*/
|
|
15
|
-
describe('agent bundle — handover §4.4 acceptance', () => {
|
|
16
|
-
it('registers `schmancy-button` on import', () => {
|
|
17
|
-
expect(customElements.get('schmancy-button')).toBeDefined()
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
it('registers `schmancy-skill` on import', () => {
|
|
21
|
-
expect(customElements.get('schmancy-skill')).toBeDefined()
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
it('installs `window.schmancy` when a <schmancy-skill> connects', async () => {
|
|
25
|
-
const host = document.createElement('div')
|
|
26
|
-
const skill = document.createElement('schmancy-skill')
|
|
27
|
-
host.appendChild(skill)
|
|
28
|
-
document.body.appendChild(host)
|
|
29
|
-
|
|
30
|
-
await customElements.whenDefined('schmancy-skill')
|
|
31
|
-
// One microtask for connectedCallback to finish installing globals.
|
|
32
|
-
await new Promise(requestAnimationFrame)
|
|
33
|
-
|
|
34
|
-
expect(typeof window.schmancy).toBe('object')
|
|
35
|
-
expect(typeof window.schmancy?.help).toBe('function')
|
|
36
|
-
expect(typeof window.schmancy?.tokens).toBe('function')
|
|
37
|
-
expect(typeof window.schmancy?.capabilities).toBe('function')
|
|
38
|
-
|
|
39
|
-
host.remove()
|
|
40
|
-
})
|
|
41
|
-
|
|
42
|
-
it('`window.schmancy.help()` returns a non-empty manifest summary', async () => {
|
|
43
|
-
const skill = document.createElement('schmancy-skill')
|
|
44
|
-
document.body.appendChild(skill)
|
|
45
|
-
await customElements.whenDefined('schmancy-skill')
|
|
46
|
-
await new Promise(requestAnimationFrame)
|
|
47
|
-
|
|
48
|
-
const help = window.schmancy!.help() as { elements: unknown[]; services: unknown[] }
|
|
49
|
-
expect(Array.isArray(help.elements)).toBe(true)
|
|
50
|
-
expect(help.elements.length).toBeGreaterThan(50)
|
|
51
|
-
|
|
52
|
-
skill.remove()
|
|
53
|
-
})
|
|
54
|
-
|
|
55
|
-
it('`window.schmancy.help("schmancy-button")` returns attribute enum values', async () => {
|
|
56
|
-
const skill = document.createElement('schmancy-skill')
|
|
57
|
-
document.body.appendChild(skill)
|
|
58
|
-
await customElements.whenDefined('schmancy-skill')
|
|
59
|
-
await new Promise(requestAnimationFrame)
|
|
60
|
-
|
|
61
|
-
const btn = window.schmancy!.help('schmancy-button') as {
|
|
62
|
-
attributes?: Array<{ name: string; values?: string[] }>
|
|
63
|
-
}
|
|
64
|
-
expect(btn).toBeTruthy()
|
|
65
|
-
expect(btn.attributes?.length ?? 0).toBeGreaterThan(0)
|
|
66
|
-
const variant = btn.attributes?.find(a => a.name === 'variant')
|
|
67
|
-
expect(variant?.values).toContain('filled')
|
|
68
|
-
|
|
69
|
-
skill.remove()
|
|
70
|
-
})
|
|
71
|
-
|
|
72
|
-
it('`window.schmancy.capabilities()` reports every probed feature', async () => {
|
|
73
|
-
const skill = document.createElement('schmancy-skill')
|
|
74
|
-
document.body.appendChild(skill)
|
|
75
|
-
await customElements.whenDefined('schmancy-skill')
|
|
76
|
-
await new Promise(requestAnimationFrame)
|
|
77
|
-
|
|
78
|
-
const caps = window.schmancy!.capabilities()
|
|
79
|
-
expect(caps).toMatchObject({
|
|
80
|
-
popover: expect.any(Boolean),
|
|
81
|
-
declarativeShadowDom: expect.any(Boolean),
|
|
82
|
-
scopedRegistries: expect.any(Boolean),
|
|
83
|
-
trustedTypes: expect.any(Boolean),
|
|
84
|
-
cssRegisteredProperties: expect.any(Boolean),
|
|
85
|
-
elementInternalsAria: expect.any(Boolean),
|
|
86
|
-
formAssociated: expect.any(Boolean),
|
|
87
|
-
adoptedStyleSheets: expect.any(Boolean),
|
|
88
|
-
})
|
|
89
|
-
|
|
90
|
-
skill.remove()
|
|
91
|
-
})
|
|
92
|
-
})
|
package/src/agent/helpers.ts
DELETED
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
import manifest from 'virtual:schmancy-manifest'
|
|
2
|
-
|
|
3
|
-
export type ElementEntry = {
|
|
4
|
-
kind: 'class'
|
|
5
|
-
name: string
|
|
6
|
-
tagName?: string
|
|
7
|
-
description?: string
|
|
8
|
-
summary?: string
|
|
9
|
-
attributes?: Array<{
|
|
10
|
-
name: string
|
|
11
|
-
description?: string
|
|
12
|
-
type?: { text?: string }
|
|
13
|
-
default?: string
|
|
14
|
-
values?: string[]
|
|
15
|
-
}>
|
|
16
|
-
events?: Array<{ name: string; description?: string; type?: { text?: string } }>
|
|
17
|
-
slots?: Array<{ name: string; description?: string }>
|
|
18
|
-
cssProperties?: Array<{ name: string; description?: string }>
|
|
19
|
-
cssParts?: Array<{ name: string; description?: string }>
|
|
20
|
-
whenToUse?: string
|
|
21
|
-
platformPrimitive?: { tag: string; mode?: string; note?: string }
|
|
22
|
-
contexts?: { provides?: string[]; consumes?: string[] }
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export type ServiceEntry = {
|
|
26
|
-
kind: 'variable'
|
|
27
|
-
name: string
|
|
28
|
-
description?: string
|
|
29
|
-
summary?: string
|
|
30
|
-
service: true
|
|
31
|
-
methods?: Array<{ signature: string; summary?: string }>
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
type Declaration = ElementEntry | ServiceEntry | { kind: string; name: string; [key: string]: unknown }
|
|
35
|
-
|
|
36
|
-
function allDeclarations(): Declaration[] {
|
|
37
|
-
const out: Declaration[] = []
|
|
38
|
-
for (const mod of manifest.modules ?? []) {
|
|
39
|
-
const decls = (mod as unknown as { declarations?: Declaration[] }).declarations ?? []
|
|
40
|
-
for (const decl of decls) out.push(decl)
|
|
41
|
-
}
|
|
42
|
-
return out
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function elements(): ElementEntry[] {
|
|
46
|
-
return allDeclarations().filter(
|
|
47
|
-
(d): d is ElementEntry => d.kind === 'class' && typeof (d as ElementEntry).tagName === 'string',
|
|
48
|
-
)
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
function services(): ServiceEntry[] {
|
|
52
|
-
return allDeclarations().filter((d): d is ServiceEntry => d.kind === 'variable' && (d as ServiceEntry).service === true)
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export function help(tag?: string): unknown {
|
|
56
|
-
if (!tag) {
|
|
57
|
-
return {
|
|
58
|
-
elements: elements().map(e => ({ tag: e.tagName, summary: e.summary ?? e.description })),
|
|
59
|
-
services: services().map(s => ({ name: s.name, summary: s.summary ?? s.description })),
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
const el = elements().find(e => e.tagName === tag)
|
|
63
|
-
if (el) return el
|
|
64
|
-
const svc = services().find(s => s.name === tag)
|
|
65
|
-
if (svc) return svc
|
|
66
|
-
return null
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export function tokens(): string[] {
|
|
70
|
-
return (manifest as { tokens?: string[] }).tokens ?? []
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export function platformPrimitive(tag: string): ElementEntry['platformPrimitive'] | null {
|
|
74
|
-
return elements().find(e => e.tagName === tag)?.platformPrimitive ?? null
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
export function registeredTags(): string[] {
|
|
78
|
-
return elements()
|
|
79
|
-
.map(e => e.tagName!)
|
|
80
|
-
.filter(tag => typeof customElements.get(tag) !== 'undefined')
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
export function a11yAudit(): Array<{
|
|
84
|
-
tag: string
|
|
85
|
-
role: string | null
|
|
86
|
-
ariaLabel: string | null
|
|
87
|
-
hasShadowRoot: boolean
|
|
88
|
-
formAssociated: boolean
|
|
89
|
-
}> {
|
|
90
|
-
const tags = new Set(elements().map(e => e.tagName!))
|
|
91
|
-
const report: Array<{
|
|
92
|
-
tag: string
|
|
93
|
-
role: string | null
|
|
94
|
-
ariaLabel: string | null
|
|
95
|
-
hasShadowRoot: boolean
|
|
96
|
-
formAssociated: boolean
|
|
97
|
-
}> = []
|
|
98
|
-
const all = document.querySelectorAll('*')
|
|
99
|
-
for (const node of Array.from(all)) {
|
|
100
|
-
const tag = node.tagName.toLowerCase()
|
|
101
|
-
if (!tags.has(tag)) continue
|
|
102
|
-
const ctor = customElements.get(tag) as (CustomElementConstructor & { formAssociated?: boolean }) | undefined
|
|
103
|
-
report.push({
|
|
104
|
-
tag,
|
|
105
|
-
role: node.getAttribute('role'),
|
|
106
|
-
ariaLabel: node.getAttribute('aria-label'),
|
|
107
|
-
hasShadowRoot: Boolean((node as Element & { shadowRoot?: ShadowRoot | null }).shadowRoot),
|
|
108
|
-
formAssociated: Boolean(ctor?.formAssociated),
|
|
109
|
-
})
|
|
110
|
-
}
|
|
111
|
-
return report
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
export type Capabilities = {
|
|
115
|
-
popover: boolean
|
|
116
|
-
declarativeShadowDom: boolean
|
|
117
|
-
scopedRegistries: boolean
|
|
118
|
-
trustedTypes: boolean
|
|
119
|
-
cssRegisteredProperties: boolean
|
|
120
|
-
elementInternalsAria: boolean
|
|
121
|
-
formAssociated: boolean
|
|
122
|
-
adoptedStyleSheets: boolean
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Runtime feature probe. Tells an agent which platform capabilities the
|
|
127
|
-
* current sandbox exposes, so it can adapt without assuming the sandbox CSP
|
|
128
|
-
* or browser version. Every check is feature-detect, not UA-sniff.
|
|
129
|
-
*/
|
|
130
|
-
export function capabilities(): Capabilities {
|
|
131
|
-
const anyTemplate = typeof HTMLTemplateElement !== 'undefined' ? HTMLTemplateElement.prototype : null
|
|
132
|
-
const anyElInternals = typeof ElementInternals !== 'undefined' ? ElementInternals.prototype : null
|
|
133
|
-
return {
|
|
134
|
-
popover: typeof HTMLElement !== 'undefined' && 'popover' in HTMLElement.prototype,
|
|
135
|
-
declarativeShadowDom: Boolean(anyTemplate && 'shadowRootMode' in anyTemplate),
|
|
136
|
-
scopedRegistries: (() => {
|
|
137
|
-
try {
|
|
138
|
-
// Native scoped registries require a constructible CustomElementRegistry.
|
|
139
|
-
// Pre-Safari-26/Chrome-146, the constructor throws Illegal constructor.
|
|
140
|
-
void new (window as { CustomElementRegistry?: new () => unknown }).CustomElementRegistry!()
|
|
141
|
-
return true
|
|
142
|
-
} catch {
|
|
143
|
-
return false
|
|
144
|
-
}
|
|
145
|
-
})(),
|
|
146
|
-
trustedTypes: typeof (globalThis as { trustedTypes?: unknown }).trustedTypes !== 'undefined',
|
|
147
|
-
cssRegisteredProperties: typeof (window as { CSS?: { registerProperty?: unknown } }).CSS?.registerProperty === 'function',
|
|
148
|
-
elementInternalsAria: Boolean(anyElInternals && 'role' in anyElInternals),
|
|
149
|
-
formAssociated: typeof ElementInternals !== 'undefined',
|
|
150
|
-
adoptedStyleSheets: typeof Document !== 'undefined' && 'adoptedStyleSheets' in Document.prototype,
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
export function manifestUrl(): string {
|
|
155
|
-
const blob = new Blob([JSON.stringify(manifest)], { type: 'application/json' })
|
|
156
|
-
return URL.createObjectURL(blob)
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
export { manifest }
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { SchmancyElement } from '../../mixins/index'
|
|
2
|
-
import { html } from 'lit'
|
|
3
|
-
import { customElement } from 'lit/decorators.js'
|
|
4
|
-
import {
|
|
5
|
-
a11yAudit,
|
|
6
|
-
capabilities,
|
|
7
|
-
help,
|
|
8
|
-
manifest,
|
|
9
|
-
manifestUrl,
|
|
10
|
-
platformPrimitive,
|
|
11
|
-
registeredTags,
|
|
12
|
-
tokens,
|
|
13
|
-
} from './helpers'
|
|
14
|
-
|
|
15
|
-
declare global {
|
|
16
|
-
interface Window {
|
|
17
|
-
schmancy?: {
|
|
18
|
-
manifest: typeof manifest
|
|
19
|
-
manifestUrl: string
|
|
20
|
-
help: typeof help
|
|
21
|
-
tokens: typeof tokens
|
|
22
|
-
platformPrimitive: typeof platformPrimitive
|
|
23
|
-
registeredTags: typeof registeredTags
|
|
24
|
-
a11yAudit: typeof a11yAudit
|
|
25
|
-
capabilities: typeof capabilities
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
let installedUrl: string | null = null
|
|
31
|
-
|
|
32
|
-
function install() {
|
|
33
|
-
if (typeof window === 'undefined') return
|
|
34
|
-
if (installedUrl) return
|
|
35
|
-
installedUrl = manifestUrl()
|
|
36
|
-
window.schmancy = {
|
|
37
|
-
manifest,
|
|
38
|
-
manifestUrl: installedUrl,
|
|
39
|
-
help,
|
|
40
|
-
tokens,
|
|
41
|
-
platformPrimitive,
|
|
42
|
-
registeredTags,
|
|
43
|
-
a11yAudit,
|
|
44
|
-
capabilities,
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Self-describing runtime helper. Drop `<schmancy-skill></schmancy-skill>`
|
|
50
|
-
* once on a page and `window.schmancy.help('schmancy-button')` returns the
|
|
51
|
-
* machine-readable entry for any tag. Renders nothing.
|
|
52
|
-
*
|
|
53
|
-
* @element schmancy-skill
|
|
54
|
-
*/
|
|
55
|
-
@customElement('schmancy-skill')
|
|
56
|
-
export class SchmancySkill extends SchmancyElement {
|
|
57
|
-
connectedCallback() {
|
|
58
|
-
super.connectedCallback()
|
|
59
|
-
install()
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
render() {
|
|
63
|
-
return html``
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
declare global {
|
|
68
|
-
interface HTMLElementTagNameMap {
|
|
69
|
-
'schmancy-skill': SchmancySkill
|
|
70
|
-
}
|
|
71
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
declare module 'virtual:schmancy-manifest' {
|
|
2
|
-
type ManifestModule = { kind: 'javascript-module'; path: string; declarations: Array<Record<string, unknown>> }
|
|
3
|
-
const manifest: {
|
|
4
|
-
schemaVersion: '1.0.0'
|
|
5
|
-
readme?: string
|
|
6
|
-
modules: ManifestModule[]
|
|
7
|
-
tokens: string[]
|
|
8
|
-
}
|
|
9
|
-
export default manifest
|
|
10
|
-
}
|