@mhmo91/schmancy 0.10.24 → 0.10.26
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/dist/agent/{overlay.confirm-body-CvdVfCnN.js → overlay.confirm-body-DJrL6tio.js} +242 -242
- package/dist/agent/{overlay.confirm-body-CvdVfCnN.js.map → overlay.confirm-body-DJrL6tio.js.map} +1 -1
- package/dist/agent/schmancy.agent.js +5586 -2868
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/{area-BuqdaUpQ.cjs → area-DkvO_oiO.cjs} +1 -1
- package/dist/{area-BuqdaUpQ.cjs.map → area-DkvO_oiO.cjs.map} +1 -1
- package/dist/{area-A_oUP4P1.js → area-fC1_kvAW.js} +1 -1
- package/dist/{area-A_oUP4P1.js.map → area-fC1_kvAW.js.map} +1 -1
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-Cy46gJxK.cjs → autocomplete-Aa2IstyX.cjs} +1 -1
- package/dist/{autocomplete-Cy46gJxK.cjs.map → autocomplete-Aa2IstyX.cjs.map} +1 -1
- package/dist/{autocomplete-BoCWO26L.js → autocomplete-Hb-C11a3.js} +2 -2
- package/dist/{autocomplete-BoCWO26L.js.map → autocomplete-Hb-C11a3.js.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/avatar.cjs +2 -2
- package/dist/avatar.cjs.map +1 -1
- package/dist/avatar.js +3 -3
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/boat-BEq-AHmL.cjs +85 -0
- package/dist/boat-BEq-AHmL.cjs.map +1 -0
- package/dist/{boat-B0h5fuAA.js → boat-BW6aRcdY.js} +29 -23
- package/dist/boat-BW6aRcdY.js.map +1 -0
- 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-Bn6Pioo8.cjs → busy-CKpIblIO.cjs} +1 -1
- package/dist/{busy-Bn6Pioo8.cjs.map → busy-CKpIblIO.cjs.map} +1 -1
- package/dist/{busy-DObY7lfu.js → busy-D-ucQFSB.js} +1 -1
- package/dist/{busy-DObY7lfu.js.map → busy-D-ucQFSB.js.map} +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/{button-DEi3M2nV.js → button-BU-X0a0S.js} +2 -2
- package/dist/{button-DEi3M2nV.js.map → button-BU-X0a0S.js.map} +1 -1
- package/dist/{button-XfdPzfZQ.cjs → button-HzLpB3NP.cjs} +1 -1
- package/dist/{button-XfdPzfZQ.cjs.map → button-HzLpB3NP.cjs.map} +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.js +1 -1
- package/dist/{card-BjUgRzFh.cjs → card-CcrUlgd3.cjs} +1 -1
- package/dist/{card-BjUgRzFh.cjs.map → card-CcrUlgd3.cjs.map} +1 -1
- package/dist/{card-jzUQK0EQ.js → card-ueXBeJ6q.js} +2 -2
- package/dist/{card-jzUQK0EQ.js.map → card-ueXBeJ6q.js.map} +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-CfCm1vGN.js → checkbox-CW1kk4Tu.js} +1 -1
- package/dist/{checkbox-CfCm1vGN.js.map → checkbox-CW1kk4Tu.js.map} +1 -1
- package/dist/{checkbox-rskgUBxQ.cjs → checkbox-qsp-I5C6.cjs} +1 -1
- package/dist/{checkbox-rskgUBxQ.cjs.map → checkbox-qsp-I5C6.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-Dfim_tQv.js → chips-C_F6-gfe.js} +4 -4
- package/dist/{chips-Dfim_tQv.js.map → chips-C_F6-gfe.js.map} +1 -1
- package/dist/{chips-BiNZKu0J.cjs → chips-Dluk6RV4.cjs} +1 -1
- package/dist/{chips-BiNZKu0J.cjs.map → chips-Dluk6RV4.cjs.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/{cursor-glow-Cs2XLDB9.js → cursor-glow-Ah7VXSj7.js} +1 -1
- package/dist/{cursor-glow-Cs2XLDB9.js.map → cursor-glow-Ah7VXSj7.js.map} +1 -1
- package/dist/{cursor-glow-C8LgCxpI.cjs → cursor-glow-Bulq-38P.cjs} +1 -1
- package/dist/{cursor-glow-C8LgCxpI.cjs.map → cursor-glow-Bulq-38P.cjs.map} +1 -1
- package/dist/{date-range-B8zoj6Cj.js → date-range-ASZ8h_Il.js} +2 -2
- package/dist/{date-range-B8zoj6Cj.js.map → date-range-ASZ8h_Il.js.map} +1 -1
- package/dist/{date-range-em7OwhlK.cjs → date-range-BFOqXAI2.cjs} +1 -1
- package/dist/{date-range-em7OwhlK.cjs.map → date-range-BFOqXAI2.cjs.map} +1 -1
- package/dist/{date-range-inline-DYeqoBIO.cjs → date-range-inline-BNmNOpL0.cjs} +1 -1
- package/dist/{date-range-inline-DYeqoBIO.cjs.map → date-range-inline-BNmNOpL0.cjs.map} +1 -1
- package/dist/{date-range-inline-BfUL8_vX.js → date-range-inline-DHrgolLn.js} +1 -1
- package/dist/{date-range-inline-BfUL8_vX.js.map → date-range-inline-DHrgolLn.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-D246xN83.js → details-B9RgRw6c.js} +4 -4
- package/dist/{details-D246xN83.js.map → details-B9RgRw6c.js.map} +1 -1
- package/dist/{details-CNM1tuma.cjs → details-Bx9c4XQR.cjs} +1 -1
- package/dist/{details-CNM1tuma.cjs.map → details-Bx9c4XQR.cjs.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/directives-Dq0zi2KR.cjs +350 -0
- package/dist/directives-Dq0zi2KR.cjs.map +1 -0
- package/dist/directives-sWKTEJDb.js +4063 -0
- package/dist/directives-sWKTEJDb.js.map +1 -0
- package/dist/directives.cjs +1 -99
- package/dist/directives.js +6 -1363
- package/dist/discovery.cjs +1 -1
- package/dist/discovery.js +2 -61
- package/dist/discovery.service-COmbHaoI.js +61 -0
- package/dist/discovery.service-COmbHaoI.js.map +1 -0
- package/dist/discovery.service-CVDXO9rH.cjs +1 -0
- package/dist/discovery.service-CVDXO9rH.cjs.map +1 -0
- package/dist/{divider-CbIp1je9.js → divider-C7BtzDcK.js} +1 -1
- package/dist/{divider-CbIp1je9.js.map → divider-C7BtzDcK.js.map} +1 -1
- package/dist/{divider-DaKsGNW-.cjs → divider-DH0BvTOv.cjs} +1 -1
- package/dist/{divider-DaKsGNW-.cjs.map → divider-DH0BvTOv.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-CQDm3BF3.cjs → expand-CPMF44eL.cjs} +1 -1
- package/dist/{expand-CQDm3BF3.cjs.map → expand-CPMF44eL.cjs.map} +1 -1
- package/dist/{expand-DRkiO4vw.js → expand-DcMx9dHY.js} +3 -3
- package/dist/{expand-DRkiO4vw.js.map → expand-DcMx9dHY.js.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/{float-5O26zNRh.cjs → float-CgBN4H3g.cjs} +1 -1
- package/dist/{float-5O26zNRh.cjs.map → float-CgBN4H3g.cjs.map} +1 -1
- package/dist/{float-CZtu8FnO.js → float-DkUw5TN4.js} +1 -1
- package/dist/{float-CZtu8FnO.js.map → float-DkUw5TN4.js.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{form-B90CMeqs.cjs → form-DxApnyVx.cjs} +1 -1
- package/dist/{form-B90CMeqs.cjs.map → form-DxApnyVx.cjs.map} +1 -1
- package/dist/{form-CE6Gwz4r.js → form-kSgJf_h4.js} +8 -8
- package/dist/{form-CE6Gwz4r.js.map → form-kSgJf_h4.js.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +6 -6
- package/dist/handover/agent-runtime-followups.md +1 -1
- package/dist/handover/agent-runtime-v1.md +3 -3
- package/dist/{hashContent-dJrI-9sc.js.map → hashContent-Dgmzc32o.js.map} +1 -1
- package/dist/{hashContent-Ck6laKlk.cjs.map → hashContent-Dh1VzIAb.cjs.map} +1 -1
- package/dist/icons-3F1nQAn_.cjs +24 -0
- package/dist/icons-3F1nQAn_.cjs.map +1 -0
- package/dist/icons-DsfpmrVO.js +52 -0
- package/dist/icons-DsfpmrVO.js.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-C3PMj1MD.js → iframe-KrV4Cak-.js} +1 -1
- package/dist/{iframe-C3PMj1MD.js.map → iframe-KrV4Cak-.js.map} +1 -1
- package/dist/{iframe-D98csbEo.cjs → iframe-sTXBw6zB.cjs} +1 -1
- package/dist/{iframe-D98csbEo.cjs.map → iframe-sTXBw6zB.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 +60 -60
- package/dist/{input-_y92Pzon.cjs → input-DMoggdSN.cjs} +1 -1
- package/dist/{input-_y92Pzon.cjs.map → input-DMoggdSN.cjs.map} +1 -1
- package/dist/{input-chip-CR66MWml.cjs → input-chip-B1iNQW2m.cjs} +1 -1
- package/dist/{input-chip-CR66MWml.cjs.map → input-chip-B1iNQW2m.cjs.map} +1 -1
- package/dist/{input-chip-Bzwr5-XL.js → input-chip-DHbfUatc.js} +1 -1
- package/dist/{input-chip-Bzwr5-XL.js.map → input-chip-DHbfUatc.js.map} +1 -1
- package/dist/{input-CCOkeeVM.js → input-zj3eaZM_.js} +1 -1
- package/dist/{input-CCOkeeVM.js.map → input-zj3eaZM_.js.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-Dq2oeOTS.js → layout-DSAjo92m.js} +1 -1
- package/dist/{layout-Dq2oeOTS.js.map → layout-DSAjo92m.js.map} +1 -1
- package/dist/{layout-BbCIfIgo.cjs → layout-eXb9wjDh.cjs} +1 -1
- package/dist/{layout-BbCIfIgo.cjs.map → layout-eXb9wjDh.cjs.map} +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +1 -1
- package/dist/{lightbox-Bk3ovcVu.cjs → lightbox-86F2RgXy.cjs} +2 -2
- package/dist/{lightbox-Bk3ovcVu.cjs.map → lightbox-86F2RgXy.cjs.map} +1 -1
- package/dist/{lightbox-Dl--fEbP.js → lightbox-CAcXlJlv.js} +2 -2
- package/dist/{lightbox-Dl--fEbP.js.map → lightbox-CAcXlJlv.js.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-B3WI_Nfs.js → list-BIjJ6T1c.js} +1 -1
- package/dist/{list-B3WI_Nfs.js.map → list-BIjJ6T1c.js.map} +1 -1
- package/dist/{list-DWngbP2X.cjs → list-CUbI0RM6.cjs} +1 -1
- package/dist/{list-DWngbP2X.cjs.map → list-CUbI0RM6.cjs.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{magnetic-Bgh7aHHI.cjs → magnetic-D-ph029G.cjs} +1 -1
- package/dist/{magnetic-Bgh7aHHI.cjs.map → magnetic-D-ph029G.cjs.map} +1 -1
- package/dist/{magnetic-DxvoEz8_.js → magnetic-mHXl54Z8.js} +1 -1
- package/dist/{magnetic-DxvoEz8_.js.map → magnetic-mHXl54Z8.js.map} +1 -1
- package/dist/{menu-IDhVp6zm.js → menu-CtFcvxgU.js} +2 -2
- package/dist/{menu-IDhVp6zm.js.map → menu-CtFcvxgU.js.map} +1 -1
- package/dist/{menu-CdYjxJqm.cjs → menu-DGMrjR_a.cjs} +1 -1
- package/dist/{menu-CdYjxJqm.cjs.map → menu-DGMrjR_a.cjs.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins-CKbQ6BJo.js +642 -0
- package/dist/mixins-CKbQ6BJo.js.map +1 -0
- package/dist/mixins-DSy-enUd.cjs +254 -0
- package/dist/mixins-DSy-enUd.cjs.map +1 -0
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.js +2 -2
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/navigation-bar.cjs +1 -1
- package/dist/navigation-bar.js +1 -1
- package/dist/navigation-rail.cjs +5 -9
- package/dist/navigation-rail.cjs.map +1 -1
- package/dist/navigation-rail.js +5 -11
- package/dist/navigation-rail.js.map +1 -1
- package/dist/{notification-CllYkvlR.js → notification-BqyMYtP7.js} +2 -2
- package/dist/{notification-CllYkvlR.js.map → notification-BqyMYtP7.js.map} +1 -1
- package/dist/{notification-B3wVUC8l.cjs → notification-D5eOdsMT.cjs} +1 -1
- package/dist/{notification-B3wVUC8l.cjs.map → notification-D5eOdsMT.cjs.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-CPOL0nHL.js → option-C3UyYQi_.js} +1 -1
- package/dist/{option-CPOL0nHL.js.map → option-C3UyYQi_.js.map} +1 -1
- package/dist/{option-cRsdshy8.cjs → option-DJ3R-2Wn.cjs} +1 -1
- package/dist/{option-cRsdshy8.cjs.map → option-DJ3R-2Wn.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{overlay-DJ-vlwtR.js → overlay-D1hFkcFA.js} +5 -5
- package/dist/{overlay-DJ-vlwtR.js.map → overlay-D1hFkcFA.js.map} +1 -1
- package/dist/{overlay-BnTvnNDc.cjs → overlay-D7nQaT5U.cjs} +1 -1
- package/dist/{overlay-BnTvnNDc.cjs.map → overlay-D7nQaT5U.cjs.map} +1 -1
- package/dist/{overlay-stack-Dk0xETTy.cjs.map → overlay-stack-Bdr9lOqi.cjs.map} +1 -1
- package/dist/{overlay-stack-BR4iYivO.js.map → overlay-stack-D2rgxQLh.js.map} +1 -1
- package/dist/overlay.cjs +1 -1
- package/dist/{overlay.confirm-body-DEb9xw5N.js → overlay.confirm-body-B4eCDLmU.js} +1 -1
- package/dist/{overlay.confirm-body-DEb9xw5N.js.map → overlay.confirm-body-B4eCDLmU.js.map} +1 -1
- package/dist/{overlay.confirm-body-CQ-FwySO.cjs → overlay.confirm-body-P18SmJL2.cjs} +1 -1
- package/dist/{overlay.confirm-body-CQ-FwySO.cjs.map → overlay.confirm-body-P18SmJL2.cjs.map} +1 -1
- package/dist/overlay.js +3 -3
- package/dist/{overlay.service-XM1YHkTk.js → overlay.service-02ZLZ8Ib.js} +2 -2
- package/dist/{overlay.service-XM1YHkTk.js.map → overlay.service-02ZLZ8Ib.js.map} +1 -1
- package/dist/{overlay.service-CKBCIP2f.cjs → overlay.service-m-8omCA-.cjs} +1 -1
- package/dist/{overlay.service-CKBCIP2f.cjs.map → overlay.service-m-8omCA-.cjs.map} +1 -1
- package/dist/{progress-CcfLfHOE.cjs → progress-CY-UbvOB.cjs} +1 -1
- package/dist/{progress-CcfLfHOE.cjs.map → progress-CY-UbvOB.cjs.map} +1 -1
- package/dist/{progress-CnMPp-9a.js → progress-YjdEWDI5.js} +1 -1
- package/dist/{progress-CnMPp-9a.js.map → progress-YjdEWDI5.js.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-group-D97hflrE.cjs → radio-group--UamzqAm.cjs} +1 -1
- package/dist/{radio-group-D97hflrE.cjs.map → radio-group--UamzqAm.cjs.map} +1 -1
- package/dist/{radio-group-BUJgfQFi.js → radio-group-aKXKHqUp.js} +1 -1
- package/dist/{radio-group-BUJgfQFi.js.map → radio-group-aKXKHqUp.js.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/range.cjs +1 -1
- package/dist/range.js +1 -1
- package/dist/{reduced-motion-D7LqTUMn.js.map → reduced-motion-D-L12p7G.js.map} +1 -1
- package/dist/{reduced-motion-Dzfp_w5x.cjs.map → reduced-motion-Ds-HjMzn.cjs.map} +1 -1
- package/dist/{rxjs-utils-BK8VMe3K.js.map → rxjs-utils-BXpvHN4-.js.map} +1 -1
- package/dist/{rxjs-utils-DhOKenkS.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/{select-BWEh5nRM.js → select-B0Qk4PfT.js} +3 -3
- package/dist/{select-BWEh5nRM.js.map → select-B0Qk4PfT.js.map} +1 -1
- package/dist/{select-Cv5Oev6d.cjs → select-CIquL8LY.cjs} +2 -2
- package/dist/{select-Cv5Oev6d.cjs.map → select-CIquL8LY.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 -1
- package/dist/skills/SKILL.md +33 -23
- package/dist/skills/area.md +5 -4
- package/dist/skills/connectivity.md +1 -3
- package/dist/skills/directives.md +36 -0
- package/dist/skills/icons.md +95 -31
- package/dist/skills/layout.md +36 -53
- package/dist/skills/mixins.md +26 -5
- package/dist/skills/schmancy/INDEX.md +2 -1
- package/dist/skills/schmancy/SKILL.md +33 -23
- package/dist/skills/schmancy/area.md +5 -4
- package/dist/skills/schmancy/connectivity.md +1 -3
- package/dist/skills/schmancy/directives.md +36 -0
- package/dist/skills/schmancy/icons.md +95 -31
- package/dist/skills/schmancy/layout.md +36 -53
- package/dist/skills/schmancy/mixins.md +26 -5
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{splash-screen-B6w7X2z9.js → splash-screen-CP_Idse2.js} +1 -1
- package/dist/{splash-screen-B6w7X2z9.js.map → splash-screen-CP_Idse2.js.map} +1 -1
- package/dist/{splash-screen-DFtxtO2D.cjs → splash-screen-rg56AXCf.cjs} +1 -1
- package/dist/{splash-screen-DFtxtO2D.cjs.map → splash-screen-rg56AXCf.cjs.map} +1 -1
- package/dist/splash-screen.cjs +1 -1
- package/dist/splash-screen.js +1 -1
- package/dist/{src-Asw6A018.cjs → src-BAaNnqwc.cjs} +13 -13
- package/dist/{src-Asw6A018.cjs.map → src-BAaNnqwc.cjs.map} +1 -1
- package/dist/{src-D_NK-vMA.js → src-Do0IGupa.js} +153 -153
- package/dist/{src-D_NK-vMA.js.map → src-Do0IGupa.js.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{surface-B94ka2LY.cjs → surface-B7a2O5-9.cjs} +1 -1
- package/dist/{surface-B94ka2LY.cjs.map → surface-B7a2O5-9.cjs.map} +1 -1
- package/dist/{surface-ctBcRGSZ.js → surface-DGewe6IV.js} +1 -1
- package/dist/{surface-ctBcRGSZ.js.map → surface-DGewe6IV.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-CrMx5z_y.js → tabs-g2aM43TH.js} +1 -1
- package/dist/{tabs-CrMx5z_y.js.map → tabs-g2aM43TH.js.map} +1 -1
- package/dist/{tabs-B7kaZIom.cjs → tabs-n4dO5fo1.cjs} +1 -1
- package/dist/{tabs-B7kaZIom.cjs.map → tabs-n4dO5fo1.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-DeHFl80i.js → textarea-D5hw4jsP.js} +1 -1
- package/dist/{textarea-DeHFl80i.js.map → textarea-D5hw4jsP.js.map} +1 -1
- package/dist/{textarea-D1crj8JD.cjs → textarea-DDx_7AfQ.cjs} +1 -1
- package/dist/{textarea-D1crj8JD.cjs.map → textarea-DDx_7AfQ.cjs.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-C7Yo33nh.js → theme-BMYkheaA.js} +3 -3
- package/dist/{theme-C7Yo33nh.js.map → theme-BMYkheaA.js.map} +1 -1
- package/dist/{theme-wE2N7Yu9.cjs → theme-BdZAj0CO.cjs} +2 -2
- package/dist/{theme-wE2N7Yu9.cjs.map → theme-BdZAj0CO.cjs.map} +1 -1
- package/dist/{theme-button-Cpc_hs2O.js → theme-button-DdI6kxY3.js} +1 -1
- package/dist/{theme-button-Cpc_hs2O.js.map → theme-button-DdI6kxY3.js.map} +1 -1
- package/dist/{theme-button-CXSM5We4.cjs → theme-button-R2f_kLEl.cjs} +1 -1
- package/dist/{theme-button-CXSM5We4.cjs.map → theme-button-R2f_kLEl.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-D4NeufQA.cjs.map → theme.interface-B5xjEk74.cjs.map} +1 -1
- package/dist/{theme.interface-C2XNgsLB.js.map → theme.interface-DVEw3s8m.js.map} +1 -1
- package/dist/theme.js +4 -4
- package/dist/{theme.service-CSzNkqBB.js.map → theme.service-Bh08uOSJ.js.map} +1 -1
- package/dist/{theme.service-CnFUmUpc.cjs.map → theme.service-Y-e8b331.cjs.map} +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-Cxg0Kfy5.js → utils-578eFTx4.js} +1 -1
- package/dist/{utils-Cxg0Kfy5.js.map → utils-578eFTx4.js.map} +1 -1
- package/dist/{utils-aCJYAGUr.cjs → utils-CVWUrECT.cjs} +1 -1
- package/dist/{utils-aCJYAGUr.cjs.map → utils-CVWUrECT.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-Ck_zS4bb.cjs → window-LOGPpN8K.cjs} +1 -1
- package/dist/{window-Ck_zS4bb.cjs.map → window-LOGPpN8K.cjs.map} +1 -1
- package/dist/{window-JtkeHoxS.js → window-MQxhTodp.js} +5 -5
- package/dist/{window-JtkeHoxS.js.map → window-MQxhTodp.js.map} +1 -1
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/package.json +1 -1
- package/skills/schmancy/INDEX.md +2 -1
- package/skills/schmancy/SKILL.md +33 -23
- package/skills/schmancy/area.md +5 -4
- package/skills/schmancy/connectivity.md +1 -3
- package/skills/schmancy/directives.md +36 -0
- package/skills/schmancy/icons.md +95 -31
- package/skills/schmancy/layout.md +36 -53
- package/skills/schmancy/mixins.md +26 -5
- package/src/boat/boat.ts +33 -23
- package/src/directives/ai-badge.ts +95 -0
- package/src/directives/art/art.directive.ts +228 -0
- package/src/directives/art/effects/error.ts +192 -0
- package/src/directives/art/effects/funkhaus.ts +121 -0
- package/src/directives/art/effects/howl.ts +203 -0
- package/src/directives/art/effects/samwa.ts +228 -0
- package/src/directives/art/effects/snow.ts +207 -0
- package/src/directives/art/effects/starfield.ts +107 -0
- package/src/directives/art/index.ts +2 -0
- package/src/directives/art/particle-pool.ts +40 -0
- package/src/directives/art/types.ts +129 -0
- package/src/directives/art/utils.ts +35 -0
- package/src/directives/battery.ts +1014 -0
- package/src/directives/beta.ts +44 -0
- package/src/directives/fill.ts +32 -60
- package/src/directives/fyi.ts +551 -0
- package/src/directives/hummingbird.ts +1712 -0
- package/src/directives/index.ts +9 -0
- package/src/directives/missed-punch.ts +407 -0
- package/src/directives/nebula.ts +64 -61
- package/src/directives/urgent.ts +660 -0
- package/src/directives/working-snake.ts +294 -0
- package/src/icons/icon.ts +53 -30
- package/src/navigation-rail/navigation-rail-item.ts +7 -12
- package/src/navigation-rail/navigation-rail.ts +0 -2
- package/types/mixins/SchmancyElement.d.ts +31 -0
- package/types/src/directives/ai-badge.d.ts +15 -0
- package/types/src/directives/art/art.directive.d.ts +19 -0
- package/types/src/directives/art/effects/error.d.ts +7 -0
- package/types/src/directives/art/effects/funkhaus.d.ts +7 -0
- package/types/src/directives/art/effects/howl.d.ts +7 -0
- package/types/src/directives/art/effects/samwa.d.ts +7 -0
- package/types/src/directives/art/effects/snow.d.ts +7 -0
- package/types/src/directives/art/effects/starfield.d.ts +10 -0
- package/types/src/directives/art/index.d.ts +2 -0
- package/types/src/directives/art/particle-pool.d.ts +16 -0
- package/types/src/directives/art/types.d.ts +126 -0
- package/types/src/directives/art/utils.d.ts +5 -0
- package/types/src/directives/battery.d.ts +96 -0
- package/types/src/directives/beta.d.ts +33 -0
- package/types/src/directives/fill.d.ts +4 -11
- package/types/src/directives/fyi.d.ts +76 -0
- package/types/src/directives/hummingbird.d.ts +180 -0
- package/types/src/directives/index.d.ts +9 -0
- package/types/src/directives/missed-punch.d.ts +28 -0
- package/types/src/directives/nebula.d.ts +1 -1
- package/types/src/directives/urgent.d.ts +88 -0
- package/types/src/directives/working-snake.d.ts +46 -0
- package/types/src/icons/icon.d.ts +22 -0
- package/dist/boat-B0h5fuAA.js.map +0 -1
- package/dist/boat-RRtBhD3x.cjs +0 -80
- package/dist/boat-RRtBhD3x.cjs.map +0 -1
- package/dist/directives.cjs.map +0 -1
- package/dist/directives.js.map +0 -1
- package/dist/discovery.cjs.map +0 -1
- package/dist/discovery.js.map +0 -1
- package/dist/icons-B7ppo07M.cjs +0 -33
- package/dist/icons-B7ppo07M.cjs.map +0 -1
- package/dist/icons-CGhozJ5v.js +0 -48
- package/dist/icons-CGhozJ5v.js.map +0 -1
- package/dist/mixins-BPUR4Kc4.cjs +0 -254
- package/dist/mixins-BPUR4Kc4.cjs.map +0 -1
- package/dist/mixins-C42OILRS.js +0 -636
- package/dist/mixins-C42OILRS.js.map +0 -1
- package/dist/skills/page.md +0 -84
- package/dist/skills/schmancy/page.md +0 -84
- package/skills/schmancy/page.md +0 -84
- /package/dist/{hashContent-dJrI-9sc.js → hashContent-Dgmzc32o.js} +0 -0
- /package/dist/{hashContent-Ck6laKlk.cjs → hashContent-Dh1VzIAb.cjs} +0 -0
- /package/dist/{overlay-stack-Dk0xETTy.cjs → overlay-stack-Bdr9lOqi.cjs} +0 -0
- /package/dist/{overlay-stack-BR4iYivO.js → overlay-stack-D2rgxQLh.js} +0 -0
- /package/dist/{reduced-motion-D7LqTUMn.js → reduced-motion-D-L12p7G.js} +0 -0
- /package/dist/{reduced-motion-Dzfp_w5x.cjs → reduced-motion-Ds-HjMzn.cjs} +0 -0
- /package/dist/{rxjs-utils-BK8VMe3K.js → rxjs-utils-BXpvHN4-.js} +0 -0
- /package/dist/{rxjs-utils-DhOKenkS.cjs → rxjs-utils-CaC-tdot.cjs} +0 -0
- /package/dist/{theme.interface-D4NeufQA.cjs → theme.interface-B5xjEk74.cjs} +0 -0
- /package/dist/{theme.interface-C2XNgsLB.js → theme.interface-DVEw3s8m.js} +0 -0
- /package/dist/{theme.service-CSzNkqBB.js → theme.service-Bh08uOSJ.js} +0 -0
- /package/dist/{theme.service-CnFUmUpc.cjs → theme.service-Y-e8b331.cjs} +0 -0
|
@@ -1,63 +1,46 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Layout Directives
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
```typescript
|
|
4
|
+
import { fill, overflowWithin } from '@mhmo91/schmancy/directives'
|
|
5
|
+
```
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
## `fill()` — viewport-anchor an element
|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
```html
|
|
9
|
-
<schmancy-grid cols="1fr 2fr 1fr" gap="md" align="center">
|
|
10
|
-
<div>Left</div><div>Center</div><div>Right</div>
|
|
11
|
-
</schmancy-grid>
|
|
12
|
-
```
|
|
9
|
+
Measures against `visualViewport` and writes exact `height`/`width` in px. Cascade-independent — works even when parent custom elements default to `display: inline`. Tracks iOS keyboard, orientation change, and `theme.bottomOffset$`.
|
|
13
10
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
| `flow` | `'row' \| 'col' \| 'dense' \| 'row-dense' \| 'col-dense'` | `'row'` | Grid auto-flow |
|
|
17
|
-
| `align` | `'start' \| 'center' \| 'end' \| 'stretch' \| 'baseline'` | `'stretch'` | Item alignment |
|
|
18
|
-
| `justify` | `'start' \| 'center' \| 'end' \| 'stretch'` | `'stretch'` | Item justification |
|
|
19
|
-
| `content` | `'start' \| 'center' \| 'end' \| 'stretch' \| 'around' \| 'evenly' \| 'between'` | — | Align-content |
|
|
20
|
-
| `gap` | `'none' \| 'xs' \| 'sm' \| 'md' \| 'lg'` | `'none'` | Grid gap |
|
|
21
|
-
| `cols` | string | — | grid-template-columns (e.g. `"1fr 2fr"`) |
|
|
22
|
-
| `rows` | string | — | grid-template-rows |
|
|
23
|
-
| `rcols` | object | — | Responsive cols: `{ sm: '1fr', md: '1fr 1fr', lg: '1fr 2fr 1fr' }` |
|
|
24
|
-
| `wrap` | boolean | `false` | Grid auto-wrap |
|
|
25
|
-
|
|
26
|
-
## schmancy-flex
|
|
27
|
-
```html
|
|
28
|
-
<schmancy-flex flow="row" justify="between" align="center" gap="md">
|
|
29
|
-
<div>Logo</div><div>Nav</div>
|
|
30
|
-
</schmancy-flex>
|
|
31
|
-
```
|
|
11
|
+
Sets: `height: Npx`, `width: Npx`, `overflow: hidden`, `min-h/w: 0`, `box-sizing: border-box`, `padding-bottom` (safe area).
|
|
12
|
+
Does **not** set `display` or `grid-template-*` — use Tailwind classes on the same element.
|
|
32
13
|
|
|
33
|
-
|
|
34
|
-
|----------|------|---------|
|
|
35
|
-
| `flow` | `'row' \| 'row-reverse' \| 'col' \| 'col-reverse'` | `'col'` |
|
|
36
|
-
| `wrap` | `'wrap' \| 'nowrap' \| 'wrap-reverse'` | `'wrap'` |
|
|
37
|
-
| `align` | `'start' \| 'center' \| 'end' \| 'stretch' \| 'baseline'` | `'start'` |
|
|
38
|
-
| `justify` | `'start' \| 'center' \| 'end' \| 'stretch' \| 'between'` | `'start'` |
|
|
39
|
-
| `gap` | `'none' \| 'sm' \| 'md' \| 'lg'` | `'none'` |
|
|
40
|
-
|
|
41
|
-
## schmancy-scroll
|
|
42
|
-
```html
|
|
43
|
-
<schmancy-scroll hide direction="vertical" name="main">
|
|
44
|
-
<!-- long content -->
|
|
45
|
-
</schmancy-scroll>
|
|
46
|
-
```
|
|
14
|
+
## `overflowWithin()` — contained scroll region
|
|
47
15
|
|
|
48
|
-
|
|
49
|
-
|----------|------|---------|-------------|
|
|
50
|
-
| `hide` | boolean | `false` | Hide scrollbar in supported browsers |
|
|
51
|
-
| `direction` | `'vertical' \| 'horizontal' \| 'both'` | `'both'` | Scroll axes |
|
|
52
|
-
| `name` | string | — | Identifier for global scroll events |
|
|
53
|
-
| `debounce` | number | — | Debounce time in ms for scroll events |
|
|
16
|
+
Sets: `overflow: auto`, `overscroll-behavior: contain`, `scroll-behavior: smooth`, `min-h/w: 0`, `box-sizing: border-box`.
|
|
54
17
|
|
|
55
|
-
|
|
18
|
+
## Canonical shell
|
|
56
19
|
|
|
57
|
-
|
|
20
|
+
```typescript
|
|
21
|
+
// app-shell.view.ts
|
|
22
|
+
html`<schmancy-area ${fill()} name="root" .default=${...}>...</schmancy-area>`
|
|
23
|
+
|
|
24
|
+
// app-home.view.ts
|
|
25
|
+
html`
|
|
26
|
+
<my-shell class="grid grid-cols-[auto_1fr]" ${fill()}>
|
|
27
|
+
<app-rail></app-rail>
|
|
28
|
+
<div ${overflowWithin()} class="grid grid-rows-[auto_1fr] min-h-0">
|
|
29
|
+
<tree-picker></tree-picker>
|
|
30
|
+
<schmancy-area name="app" .default=${...}>...</schmancy-area>
|
|
31
|
+
</div>
|
|
32
|
+
</my-shell>
|
|
33
|
+
`
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
```css
|
|
37
|
+
/* styles.css */
|
|
38
|
+
html, body { margin: 0; padding: 0; overflow: hidden; }
|
|
39
|
+
```
|
|
58
40
|
|
|
59
|
-
|
|
41
|
+
## Rules
|
|
60
42
|
|
|
61
|
-
|
|
62
|
-
-
|
|
63
|
-
-
|
|
43
|
+
- One `fill()` per shell level. Inner levels get `min-h-0` grid cells.
|
|
44
|
+
- `overflowWithin()` goes on the element that should scroll, not on `:host`.
|
|
45
|
+
- Do not write `h-full`, `w-full`, or `:host { height: 100% }` anywhere. `schmancy-area`'s `::slotted` rule sizes mounted views.
|
|
46
|
+
- `<schmancy-page>` is removed — `fill()` replaces it.
|
|
@@ -8,11 +8,10 @@ factory — composing `LitElement` + Tailwind injection + `BaseElement`
|
|
|
8
8
|
## Usage
|
|
9
9
|
|
|
10
10
|
```typescript
|
|
11
|
-
import { SchmancyElement } from '@mhmo91/schmancy/mixins'
|
|
12
|
-
import { customElement } from 'lit/decorators.js'
|
|
11
|
+
import { SchmancyElement, schmancyElement } from '@mhmo91/schmancy/mixins'
|
|
13
12
|
import { css, html } from 'lit'
|
|
14
13
|
|
|
15
|
-
@
|
|
14
|
+
@schmancyElement('my-component')
|
|
16
15
|
class MyComponent extends SchmancyElement {
|
|
17
16
|
static styles = [css`
|
|
18
17
|
:host { display: block }
|
|
@@ -33,12 +32,34 @@ declare global {
|
|
|
33
32
|
No styles? Just drop `static styles`:
|
|
34
33
|
|
|
35
34
|
```typescript
|
|
36
|
-
@
|
|
35
|
+
@schmancyElement('my-component')
|
|
37
36
|
class MyComponent extends SchmancyElement {
|
|
38
37
|
render() { return html`<slot></slot>` }
|
|
39
38
|
}
|
|
40
39
|
```
|
|
41
40
|
|
|
41
|
+
### Why `@schmancyElement` instead of Lit's `@customElement`
|
|
42
|
+
|
|
43
|
+
`@schmancyElement` wraps the class's prototype methods with the active-host
|
|
44
|
+
tracker BEFORE calling `customElements.define`. Lit's `@customElement` only
|
|
45
|
+
calls `define` — the wrap then runs inside the `SchmancyElement` constructor,
|
|
46
|
+
which is too late: per the HTML spec, the browser captures lifecycle callback
|
|
47
|
+
references off the prototype at `define` time and invokes those cached
|
|
48
|
+
references for every connect / disconnect.
|
|
49
|
+
|
|
50
|
+
If you use plain `@customElement` and read state inside `connectedCallback`,
|
|
51
|
+
the active-host stack is empty, the read falls through to `document.activeElement`,
|
|
52
|
+
misses the enclosing `<schmancy-context>`, and silently resolves to the
|
|
53
|
+
module-scoped global instead of the isolated copy. The constructor-time wrap
|
|
54
|
+
still catches `render`, class methods, and inherited lifecycle methods on
|
|
55
|
+
ancestor prototypes (the browser's cached reference for those is the
|
|
56
|
+
ancestor's, which gets wrapped by an earlier sibling). But your subclass's
|
|
57
|
+
own `connectedCallback` / `disconnectedCallback` overrides fall through.
|
|
58
|
+
The symptom is silent: writes go to the wrong slot, reads return the wrong
|
|
59
|
+
value, and the form looks broken for no obvious reason.
|
|
60
|
+
|
|
61
|
+
`@schmancyElement` makes this impossible. Use it as the default.
|
|
62
|
+
|
|
42
63
|
Tailwind is injected automatically — your `static styles` only declares
|
|
43
64
|
component-local CSS.
|
|
44
65
|
|
|
@@ -99,7 +120,7 @@ Every SchmancyElement responds to `{its-tag}-where-are-you` events with
|
|
|
99
120
|
## Component skeleton
|
|
100
121
|
|
|
101
122
|
```typescript
|
|
102
|
-
@
|
|
123
|
+
@schmancyElement('my-component')
|
|
103
124
|
export class MyComponent extends SchmancyElement {
|
|
104
125
|
static styles = [css`:host { display: block }`]
|
|
105
126
|
|
package/src/boat/boat.ts
CHANGED
|
@@ -10,7 +10,7 @@ import { SPRING_SMOOTH, SPRING_SNAPPY } from '../utils/animation.js'
|
|
|
10
10
|
import { reducedMotion$ } from '../directives/reduced-motion'
|
|
11
11
|
import { theme } from '../theme/theme.service.js'
|
|
12
12
|
|
|
13
|
-
const FAB_HEIGHT =
|
|
13
|
+
const FAB_HEIGHT = 36
|
|
14
14
|
const DRAG_THRESHOLD = 5
|
|
15
15
|
const POSITION_STORAGE_KEY_PREFIX = 'schmancy-boat-'
|
|
16
16
|
|
|
@@ -89,12 +89,12 @@ export default class SchmancyBoat extends SchmancyElement {
|
|
|
89
89
|
|
|
90
90
|
private get closedClipPath(): string {
|
|
91
91
|
return this.isBottomCorner
|
|
92
|
-
? `inset(calc(100% - ${FAB_HEIGHT}px) 0px 0px 0px round
|
|
93
|
-
: `inset(0px 0px calc(100% - ${FAB_HEIGHT}px) 0px round
|
|
92
|
+
? `inset(calc(100% - ${FAB_HEIGHT}px) 0px 0px 0px round 10px)`
|
|
93
|
+
: `inset(0px 0px calc(100% - ${FAB_HEIGHT}px) 0px round 10px)`
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
private get openClipPath(): string {
|
|
97
|
-
return 'inset(0px 0px 0px 0px round
|
|
97
|
+
return 'inset(0px 0px 0px 0px round 4px)'
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
private get elevation(): 0 | 1 | 2 | 3 | 4 | 5 {
|
|
@@ -415,7 +415,7 @@ export default class SchmancyBoat extends SchmancyElement {
|
|
|
415
415
|
container.style.overflow = 'hidden'
|
|
416
416
|
|
|
417
417
|
const openKeyframes: Keyframe[] = [
|
|
418
|
-
{ clipPath: this.closedClipPath, opacity: 0.
|
|
418
|
+
{ clipPath: this.closedClipPath, opacity: 0.85 },
|
|
419
419
|
{ clipPath: this.openClipPath, opacity: 1 },
|
|
420
420
|
]
|
|
421
421
|
const anim = container.animate(openKeyframes, {
|
|
@@ -459,7 +459,7 @@ export default class SchmancyBoat extends SchmancyElement {
|
|
|
459
459
|
|
|
460
460
|
const closeKeyframes: Keyframe[] = [
|
|
461
461
|
{ clipPath: this.openClipPath, opacity: 1 },
|
|
462
|
-
{ clipPath: this.closedClipPath, opacity: 0.
|
|
462
|
+
{ clipPath: this.closedClipPath, opacity: 0.85 },
|
|
463
463
|
]
|
|
464
464
|
const anim = container.animate(closeKeyframes, {
|
|
465
465
|
duration: Math.round(SPRING_SNAPPY.duration * 0.9),
|
|
@@ -527,10 +527,13 @@ export default class SchmancyBoat extends SchmancyElement {
|
|
|
527
527
|
'flex-col-reverse': !isBottom,
|
|
528
528
|
'will-change-[clip-path]': true,
|
|
529
529
|
'z-1000': true,
|
|
530
|
-
|
|
531
|
-
'rounded
|
|
530
|
+
// open: 4px radius (instrument-sharp); closed: 10px (status-bar pill)
|
|
531
|
+
'rounded': this.open,
|
|
532
|
+
'rounded-lg': !this.open,
|
|
532
533
|
'overflow-hidden': true,
|
|
533
|
-
|
|
534
|
+
// micro-scale + reduced opacity signals lift during drag
|
|
535
|
+
'opacity-85': this.isDragging,
|
|
536
|
+
'scale-95': this.isDragging,
|
|
534
537
|
})
|
|
535
538
|
|
|
536
539
|
const containerStyles = styleMap({
|
|
@@ -584,32 +587,39 @@ export default class SchmancyBoat extends SchmancyElement {
|
|
|
584
587
|
</schmancy-surface>
|
|
585
588
|
</section>
|
|
586
589
|
|
|
587
|
-
<!-- Gradient separator between header and content — only when open -->
|
|
588
|
-
${when(
|
|
589
|
-
this.open,
|
|
590
|
-
() =>
|
|
591
|
-
html`<div
|
|
592
|
-
class="h-px shrink-0 bg-linear-to-r from-transparent via-primary-default/30 to-transparent"
|
|
593
|
-
></div>`,
|
|
594
|
-
)}
|
|
595
|
-
|
|
596
590
|
<!-- Header / FAB section — always interactive, always visible -->
|
|
597
591
|
<section
|
|
598
|
-
class="shrink-0 bg-surface-containerLowest"
|
|
592
|
+
class="shrink-0 bg-surface-containerLowest relative"
|
|
599
593
|
style=${styleMap({ 'pointer-events': 'auto', height: `${FAB_HEIGHT}px` })}
|
|
600
594
|
>
|
|
595
|
+
<!-- 1px top inner highlight — reads as a lit edge when open, instrument-panel HUD accent -->
|
|
596
|
+
${when(
|
|
597
|
+
this.open,
|
|
598
|
+
() => html`<div
|
|
599
|
+
class="absolute inset-x-0 top-0 h-px bg-linear-to-r from-transparent via-primary-default/40 to-transparent pointer-events-none"
|
|
600
|
+
></div>`,
|
|
601
|
+
)}
|
|
601
602
|
<div
|
|
602
603
|
${ref(this._headerRef)}
|
|
603
604
|
class=${headerClasses}
|
|
604
605
|
title="Drag to move"
|
|
605
606
|
aria-label="Drag to reposition panel"
|
|
606
607
|
>
|
|
608
|
+
<!-- Grip indicator: only visible when collapsed, signals "this is a handle" -->
|
|
609
|
+
${when(
|
|
610
|
+
!this.open,
|
|
611
|
+
() => html`<div
|
|
612
|
+
class="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 w-6 h-0.5 rounded-full bg-on-surface/20 pointer-events-none"
|
|
613
|
+
style="z-index:0"
|
|
614
|
+
></div>`,
|
|
615
|
+
)}
|
|
616
|
+
|
|
607
617
|
<!-- Summary slot rendered once — avoids DOM teardown on toggle -->
|
|
608
|
-
<div class="flex-1 min-w-0">
|
|
618
|
+
<div class="flex-1 min-w-0 relative" style="z-index:1">
|
|
609
619
|
<slot name="summary"></slot>
|
|
610
620
|
</div>
|
|
611
621
|
|
|
612
|
-
<!-- Toggle button:
|
|
622
|
+
<!-- Toggle button: chevron up/down matches open/close direction per corner -->
|
|
613
623
|
${when(
|
|
614
624
|
this.open,
|
|
615
625
|
() => html`
|
|
@@ -622,7 +632,7 @@ export default class SchmancyBoat extends SchmancyElement {
|
|
|
622
632
|
}}
|
|
623
633
|
title="Collapse"
|
|
624
634
|
>
|
|
625
|
-
|
|
635
|
+
${isBottom ? 'expand_more' : 'expand_less'}
|
|
626
636
|
</schmancy-icon-button>
|
|
627
637
|
`,
|
|
628
638
|
() => html`
|
|
@@ -635,7 +645,7 @@ export default class SchmancyBoat extends SchmancyElement {
|
|
|
635
645
|
}}
|
|
636
646
|
title="Expand"
|
|
637
647
|
>
|
|
638
|
-
|
|
648
|
+
${isBottom ? 'expand_less' : 'expand_more'}
|
|
639
649
|
</schmancy-icon-button>
|
|
640
650
|
`,
|
|
641
651
|
)}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Badge Directive — Indicator for AI-generated content.
|
|
3
|
+
* Pulses gently on the host element; color routed through theme tokens.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { noChange } from 'lit'
|
|
7
|
+
import { AsyncDirective, directive } from 'lit/async-directive.js'
|
|
8
|
+
import type { ElementPart } from 'lit'
|
|
9
|
+
|
|
10
|
+
interface State {
|
|
11
|
+
message: string
|
|
12
|
+
element: HTMLElement
|
|
13
|
+
badge: HTMLElement | null
|
|
14
|
+
animation: Animation | null
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
class AIBadgeDirective extends AsyncDirective {
|
|
18
|
+
private state: State | null = null
|
|
19
|
+
|
|
20
|
+
render(_message?: string) {
|
|
21
|
+
return noChange
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
override update(part: ElementPart, [message = '']: [string?]) {
|
|
25
|
+
const element = part.element as HTMLElement
|
|
26
|
+
|
|
27
|
+
if (!message) {
|
|
28
|
+
this.cleanup()
|
|
29
|
+
return noChange
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (this.state) return noChange
|
|
33
|
+
|
|
34
|
+
this.state = {
|
|
35
|
+
message,
|
|
36
|
+
element,
|
|
37
|
+
badge: null,
|
|
38
|
+
animation: null,
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (getComputedStyle(element).position === 'static') {
|
|
42
|
+
element.style.position = 'relative'
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const badge = document.createElement('div')
|
|
46
|
+
badge.style.cssText = `
|
|
47
|
+
display: block;
|
|
48
|
+
position: absolute;
|
|
49
|
+
bottom: -8px;
|
|
50
|
+
left: 8px;
|
|
51
|
+
z-index: 10;
|
|
52
|
+
padding: 3px 10px;
|
|
53
|
+
border-radius: 12px;
|
|
54
|
+
font-size: 0.65rem;
|
|
55
|
+
font-weight: 600;
|
|
56
|
+
background: linear-gradient(
|
|
57
|
+
135deg,
|
|
58
|
+
var(--md-sys-color-primary, #7c5cff),
|
|
59
|
+
var(--md-sys-color-primary-container, #6750a4)
|
|
60
|
+
);
|
|
61
|
+
color: var(--md-sys-color-on-primary, #fff);
|
|
62
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
|
|
63
|
+
white-space: nowrap;
|
|
64
|
+
`
|
|
65
|
+
badge.textContent = `✦ ${message}`
|
|
66
|
+
badge.title = message
|
|
67
|
+
|
|
68
|
+
element.appendChild(badge)
|
|
69
|
+
this.state.badge = badge
|
|
70
|
+
|
|
71
|
+
this.state.animation = badge.animate(
|
|
72
|
+
[
|
|
73
|
+
{ transform: 'scale(1)' },
|
|
74
|
+
{ transform: 'scale(1.03)' },
|
|
75
|
+
{ transform: 'scale(1)' },
|
|
76
|
+
],
|
|
77
|
+
{ duration: 2000, easing: 'ease-in-out', iterations: Infinity },
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
return noChange
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
private cleanup(): void {
|
|
84
|
+
if (!this.state) return
|
|
85
|
+
this.state.animation?.cancel()
|
|
86
|
+
this.state.badge?.remove()
|
|
87
|
+
this.state = null
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
override disconnected(): void {
|
|
91
|
+
this.cleanup()
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export const aiBadge = directive(AIBadgeDirective)
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Art Directive — GPU-accelerated decorative overlays.
|
|
3
|
+
* Lazy-initialised, IntersectionObserver-paused, RAF-driven, particle-pooled.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { ElementPart } from 'lit'
|
|
7
|
+
import { noChange } from 'lit'
|
|
8
|
+
import { AsyncDirective, directive } from 'lit/async-directive.js'
|
|
9
|
+
|
|
10
|
+
import type { ArtOptions, ArtState } from './types'
|
|
11
|
+
import { createFunkhausOverlay, animateFunkhaus } from './effects/funkhaus'
|
|
12
|
+
import { createSamwaOverlay, animateSamwa } from './effects/samwa'
|
|
13
|
+
import { createHowlOverlay, animateHowl } from './effects/howl'
|
|
14
|
+
import { createErrorOverlay, animateError } from './effects/error'
|
|
15
|
+
import { createSnowOverlay, animateSnow } from './effects/snow'
|
|
16
|
+
import { createStarfieldOverlay, animateStarfield } from './effects/starfield'
|
|
17
|
+
|
|
18
|
+
interface ExtendedArtState extends ArtState {
|
|
19
|
+
initialized: boolean
|
|
20
|
+
originalPosition: string
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
class ArtDirective extends AsyncDirective {
|
|
24
|
+
private state: ExtendedArtState | null = null
|
|
25
|
+
|
|
26
|
+
render(_options: ArtOptions) {
|
|
27
|
+
return noChange
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
override update(part: ElementPart, [options]: [ArtOptions]) {
|
|
31
|
+
const element = part.element as HTMLElement
|
|
32
|
+
const { name, color, intensity = 1, speed = 1 } = options
|
|
33
|
+
|
|
34
|
+
if (
|
|
35
|
+
this.state &&
|
|
36
|
+
(this.state.effect !== name ||
|
|
37
|
+
this.state.color !== color ||
|
|
38
|
+
this.state.intensity !== intensity ||
|
|
39
|
+
this.state.speed !== speed)
|
|
40
|
+
) {
|
|
41
|
+
this.cleanup()
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (!this.state) {
|
|
45
|
+
const originalPosition = element.style.position
|
|
46
|
+
|
|
47
|
+
this.state = {
|
|
48
|
+
effect: name,
|
|
49
|
+
color,
|
|
50
|
+
intensity,
|
|
51
|
+
speed,
|
|
52
|
+
element,
|
|
53
|
+
isVisible: true,
|
|
54
|
+
initialized: false,
|
|
55
|
+
originalPosition,
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
requestAnimationFrame(() => {
|
|
59
|
+
if (!this.state) return
|
|
60
|
+
|
|
61
|
+
const rect = element.getBoundingClientRect()
|
|
62
|
+
const isVisible =
|
|
63
|
+
rect.top < window.innerHeight && rect.bottom > 0 && rect.left < window.innerWidth && rect.right > 0
|
|
64
|
+
|
|
65
|
+
if (!isVisible) {
|
|
66
|
+
this.state.isVisible = false
|
|
67
|
+
this.setupVisibilityObserver()
|
|
68
|
+
return
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
this.initializeResources()
|
|
72
|
+
this.startAnimation()
|
|
73
|
+
this.setupVisibilityObserver()
|
|
74
|
+
})
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return noChange
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
private initializeResources(): void {
|
|
81
|
+
if (!this.state || this.state.initialized) return
|
|
82
|
+
|
|
83
|
+
const { element, effect: name } = this.state
|
|
84
|
+
|
|
85
|
+
const computedStyle = getComputedStyle(element)
|
|
86
|
+
if (computedStyle.position === 'static') {
|
|
87
|
+
element.style.position = 'relative'
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
switch (name) {
|
|
91
|
+
case 'funkhaus':
|
|
92
|
+
createFunkhausOverlay(this.state)
|
|
93
|
+
break
|
|
94
|
+
case 'samwa':
|
|
95
|
+
createSamwaOverlay(this.state)
|
|
96
|
+
break
|
|
97
|
+
case 'howl':
|
|
98
|
+
createHowlOverlay(this.state)
|
|
99
|
+
break
|
|
100
|
+
case 'error':
|
|
101
|
+
createErrorOverlay(this.state)
|
|
102
|
+
break
|
|
103
|
+
case 'snow':
|
|
104
|
+
createSnowOverlay(this.state)
|
|
105
|
+
break
|
|
106
|
+
case 'starfield':
|
|
107
|
+
createStarfieldOverlay(this.state)
|
|
108
|
+
break
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
this.state.initialized = true
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
private setupVisibilityObserver(): void {
|
|
115
|
+
if (!this.state || typeof IntersectionObserver === 'undefined') return
|
|
116
|
+
|
|
117
|
+
this.state.observer = new IntersectionObserver(
|
|
118
|
+
entries => {
|
|
119
|
+
if (!this.state) return
|
|
120
|
+
const isVisible = entries[0].isIntersecting
|
|
121
|
+
|
|
122
|
+
if (isVisible && !this.state.isVisible) {
|
|
123
|
+
this.state.isVisible = true
|
|
124
|
+
|
|
125
|
+
if (!this.state.initialized) {
|
|
126
|
+
this.initializeResources()
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
this.startAnimation()
|
|
130
|
+
} else if (!isVisible && this.state.isVisible) {
|
|
131
|
+
this.state.isVisible = false
|
|
132
|
+
if (this.state.animationId) {
|
|
133
|
+
cancelAnimationFrame(this.state.animationId)
|
|
134
|
+
this.state.animationId = undefined
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
{ threshold: 0 },
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
this.state.observer.observe(this.state.element)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
private startAnimation(): void {
|
|
145
|
+
if (!this.state || !this.state.isVisible) return
|
|
146
|
+
if (this.state.animationId) return
|
|
147
|
+
|
|
148
|
+
if (!this.state.initialized) {
|
|
149
|
+
this.initializeResources()
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
const animate = (currentTime: number) => {
|
|
153
|
+
if (!this.state || !this.state.isVisible) {
|
|
154
|
+
if (this.state) this.state.animationId = undefined
|
|
155
|
+
return
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
switch (this.state.effect) {
|
|
159
|
+
case 'funkhaus':
|
|
160
|
+
animateFunkhaus(this.state, currentTime)
|
|
161
|
+
break
|
|
162
|
+
case 'samwa':
|
|
163
|
+
animateSamwa(this.state, currentTime)
|
|
164
|
+
break
|
|
165
|
+
case 'howl':
|
|
166
|
+
animateHowl(this.state, currentTime)
|
|
167
|
+
break
|
|
168
|
+
case 'error':
|
|
169
|
+
animateError(this.state, currentTime)
|
|
170
|
+
break
|
|
171
|
+
case 'snow':
|
|
172
|
+
animateSnow(this.state, currentTime)
|
|
173
|
+
break
|
|
174
|
+
case 'starfield':
|
|
175
|
+
animateStarfield(this.state, currentTime)
|
|
176
|
+
break
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
this.state.animationId = requestAnimationFrame(animate)
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
this.state.animationId = requestAnimationFrame(animate)
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
private cleanup(): void {
|
|
186
|
+
if (!this.state) return
|
|
187
|
+
|
|
188
|
+
if (this.state.animationId) {
|
|
189
|
+
cancelAnimationFrame(this.state.animationId)
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
if (this.state.observer) {
|
|
193
|
+
this.state.observer.disconnect()
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
if (this.state.samwa) {
|
|
197
|
+
this.state.samwa.leafPool.clear()
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
if (this.state.howl) {
|
|
201
|
+
this.state.howl.steamPool.clear()
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
if (this.state.error) {
|
|
205
|
+
this.state.error.boltPool.clear()
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
if (this.state.snow) {
|
|
209
|
+
this.state.snow.snowflakePool.clear()
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
if (this.state.overlayElement) {
|
|
213
|
+
this.state.overlayElement.remove()
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
if (this.state.originalPosition !== undefined) {
|
|
217
|
+
this.state.element.style.position = this.state.originalPosition
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
this.state = null
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
override disconnected(): void {
|
|
224
|
+
this.cleanup()
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
export const art = directive(ArtDirective)
|