@mhmo91/schmancy 0.10.23 → 0.10.25
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-xfOh5Q28.js → overlay.confirm-body-DozUyDYx.js} +242 -242
- package/dist/agent/{overlay.confirm-body-xfOh5Q28.js.map → overlay.confirm-body-DozUyDYx.js.map} +1 -1
- package/dist/agent/schmancy.agent.js +5670 -2939
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/{area-Ddk7P5wD.js → area-1EG1LrkX.js} +1 -1
- package/dist/{area-Ddk7P5wD.js.map → area-1EG1LrkX.js.map} +1 -1
- package/dist/{area-Cbkt0NX4.cjs → area-DrVE5pXW.cjs} +1 -1
- package/dist/{area-Cbkt0NX4.cjs.map → area-DrVE5pXW.cjs.map} +1 -1
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-CfBFDSc3.cjs → autocomplete-6pdZxEab.cjs} +1 -1
- package/dist/{autocomplete-CfBFDSc3.cjs.map → autocomplete-6pdZxEab.cjs.map} +1 -1
- package/dist/{autocomplete-Ds3Q2cwR.js → autocomplete-nrIcCilw.js} +2 -2
- package/dist/{autocomplete-Ds3Q2cwR.js.map → autocomplete-nrIcCilw.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-BF5P6p_f.js → boat--fLgbDAE.js} +3 -3
- package/dist/{boat-BF5P6p_f.js.map → boat--fLgbDAE.js.map} +1 -1
- package/dist/{boat-BPN8HLzZ.cjs → boat-BIB-gPqy.cjs} +1 -1
- package/dist/{boat-BPN8HLzZ.cjs.map → boat-BIB-gPqy.cjs.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-C7ejPa-Q.cjs → busy-DVCIxBVf.cjs} +1 -1
- package/dist/{busy-C7ejPa-Q.cjs.map → busy-DVCIxBVf.cjs.map} +1 -1
- package/dist/{busy-BuACDJy6.js → busy-DshZcVZ4.js} +1 -1
- package/dist/{busy-BuACDJy6.js.map → busy-DshZcVZ4.js.map} +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/{button-C1IMGS6M.js → button-D9UJ7I6Z.js} +5 -5
- package/dist/{button-C1IMGS6M.js.map → button-D9UJ7I6Z.js.map} +1 -1
- package/dist/{button-CWNbPPq-.cjs → button-JrTMzwHY.cjs} +4 -4
- package/dist/{button-CWNbPPq-.cjs.map → button-JrTMzwHY.cjs.map} +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.js +1 -1
- package/dist/{card-CgQwXO8L.js → card-BvCFuX3J.js} +2 -2
- package/dist/{card-CgQwXO8L.js.map → card-BvCFuX3J.js.map} +1 -1
- package/dist/{card-BIzaLuEg.cjs → card-CTotavhH.cjs} +1 -1
- package/dist/{card-BIzaLuEg.cjs.map → card-CTotavhH.cjs.map} +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-BAqE3sTx.cjs → checkbox-By4fFmjt.cjs} +1 -1
- package/dist/{checkbox-BAqE3sTx.cjs.map → checkbox-By4fFmjt.cjs.map} +1 -1
- package/dist/{checkbox-BNdg57Om.js → checkbox-GPsdCUbs.js} +1 -1
- package/dist/{checkbox-BNdg57Om.js.map → checkbox-GPsdCUbs.js.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-DnqLaOb1.js → chips-27umqnat.js} +4 -4
- package/dist/{chips-DnqLaOb1.js.map → chips-27umqnat.js.map} +1 -1
- package/dist/{chips-DS3y4Lbn.cjs → chips-BZf9sGA8.cjs} +1 -1
- package/dist/{chips-DS3y4Lbn.cjs.map → chips-BZf9sGA8.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-VA1mi1N7.cjs → date-range-BJnLWCRF.cjs} +1 -1
- package/dist/{date-range-VA1mi1N7.cjs.map → date-range-BJnLWCRF.cjs.map} +1 -1
- package/dist/{date-range-inline-CAa0_4EI.cjs → date-range-inline-B6uKUliV.cjs} +1 -1
- package/dist/{date-range-inline-CAa0_4EI.cjs.map → date-range-inline-B6uKUliV.cjs.map} +1 -1
- package/dist/{date-range-inline-PeRt1iIF.js → date-range-inline-BNbbRfIA.js} +1 -1
- package/dist/{date-range-inline-PeRt1iIF.js.map → date-range-inline-BNbbRfIA.js.map} +1 -1
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/{date-range-CAqB-B0M.js → date-range-wDVHcr0u.js} +2 -2
- package/dist/{date-range-CAqB-B0M.js.map → date-range-wDVHcr0u.js.map} +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-BpFjVclg.js → details-Ckxpwacj.js} +4 -4
- package/dist/{details-BpFjVclg.js.map → details-Ckxpwacj.js.map} +1 -1
- package/dist/{details-BnXbDpt7.cjs → details-DNrWIes6.cjs} +1 -1
- package/dist/{details-BnXbDpt7.cjs.map → details-DNrWIes6.cjs.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/directives-BBMqe8x3.js +4082 -0
- package/dist/directives-BBMqe8x3.js.map +1 -0
- package/dist/directives-F15SJZUR.cjs +348 -0
- package/dist/directives-F15SJZUR.cjs.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-D8cBBkdG.js → divider-BzcZGo4S.js} +1 -1
- package/dist/{divider-D8cBBkdG.js.map → divider-BzcZGo4S.js.map} +1 -1
- package/dist/{divider-B84lt1A3.cjs → divider-Cde33ivs.cjs} +1 -1
- package/dist/{divider-B84lt1A3.cjs.map → divider-Cde33ivs.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-BJiKggfg.js → expand-DI144OzN.js} +3 -3
- package/dist/{expand-BJiKggfg.js.map → expand-DI144OzN.js.map} +1 -1
- package/dist/{expand-DK-O37-j.cjs → expand-Db4V0jj-.cjs} +1 -1
- package/dist/{expand-DK-O37-j.cjs.map → expand-Db4V0jj-.cjs.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/{float-RWR6Q1Hh.cjs → float--RScf9BZ.cjs} +1 -1
- package/dist/{float-RWR6Q1Hh.cjs.map → float--RScf9BZ.cjs.map} +1 -1
- package/dist/{float-B4FDN40h.js → float-DIyzy1c2.js} +1 -1
- package/dist/{float-B4FDN40h.js.map → float-DIyzy1c2.js.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{form-ha3df3K7.cjs → form-DWNpOsIU.cjs} +1 -1
- package/dist/{form-ha3df3K7.cjs.map → form-DWNpOsIU.cjs.map} +1 -1
- package/dist/{form-B-Sm6u25.js → form-RtXH8UHQ.js} +8 -8
- package/dist/{form-B-Sm6u25.js.map → form-RtXH8UHQ.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-DXanGDZ_.js +52 -0
- package/dist/icons-DXanGDZ_.js.map +1 -0
- package/dist/icons-bNxlWLlk.cjs +24 -0
- package/dist/icons-bNxlWLlk.cjs.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-BXe1TPx1.cjs → iframe-B1XWRaLC.cjs} +1 -1
- package/dist/{iframe-BXe1TPx1.cjs.map → iframe-B1XWRaLC.cjs.map} +1 -1
- package/dist/{iframe-CByrVlZy.js → iframe-BlHK0cjy.js} +1 -1
- package/dist/{iframe-CByrVlZy.js.map → iframe-BlHK0cjy.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 +60 -60
- package/dist/{input-BY9OCQWr.cjs → input-C-_XU9AX.cjs} +1 -1
- package/dist/{input-BY9OCQWr.cjs.map → input-C-_XU9AX.cjs.map} +1 -1
- package/dist/{input-Q0fm34Co.js → input-CiGa8Dkl.js} +1 -1
- package/dist/{input-Q0fm34Co.js.map → input-CiGa8Dkl.js.map} +1 -1
- package/dist/{input-chip-BwNf3GD0.cjs → input-chip-5aYnuRZ_.cjs} +1 -1
- package/dist/{input-chip-BwNf3GD0.cjs.map → input-chip-5aYnuRZ_.cjs.map} +1 -1
- package/dist/{input-chip-CytUirVS.js → input-chip-l--zCMGR.js} +1 -1
- package/dist/{input-chip-CytUirVS.js.map → input-chip-l--zCMGR.js.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/json.cjs +2 -2
- package/dist/json.cjs.map +1 -1
- package/dist/json.js +3 -3
- package/dist/json.js.map +1 -1
- 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-p2E0oVR0.cjs → lightbox-CfRDkeeb.cjs} +2 -2
- package/dist/{lightbox-p2E0oVR0.cjs.map → lightbox-CfRDkeeb.cjs.map} +1 -1
- package/dist/{lightbox-Ckvn5YNF.js → lightbox-D9oiu1Nv.js} +2 -2
- package/dist/{lightbox-Ckvn5YNF.js.map → lightbox-D9oiu1Nv.js.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-CsrPVvmm.js → list-BOlRka4v.js} +1 -1
- package/dist/{list-CsrPVvmm.js.map → list-BOlRka4v.js.map} +1 -1
- package/dist/{list-r57UFHu3.cjs → list-CDJi3_Ut.cjs} +1 -1
- package/dist/{list-r57UFHu3.cjs.map → list-CDJi3_Ut.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-DBuZiPyW.cjs → menu-CJaDL2cd.cjs} +1 -1
- package/dist/{menu-DBuZiPyW.cjs.map → menu-CJaDL2cd.cjs.map} +1 -1
- package/dist/{menu-Csm6Fg88.js → menu-XyrLmCi_.js} +2 -2
- package/dist/{menu-Csm6Fg88.js.map → menu-XyrLmCi_.js.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins-CsYsIJOI.cjs +254 -0
- package/dist/mixins-CsYsIJOI.cjs.map +1 -0
- package/dist/mixins-DySzfmal.js +642 -0
- package/dist/mixins-DySzfmal.js.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-CgTBiAdf.js → notification-CHrEY4u8.js} +2 -2
- package/dist/{notification-CgTBiAdf.js.map → notification-CHrEY4u8.js.map} +1 -1
- package/dist/{notification-58tkVys8.cjs → notification-DKp4tjaB.cjs} +1 -1
- package/dist/{notification-58tkVys8.cjs.map → notification-DKp4tjaB.cjs.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-Bicf6xpI.js → option-Vpy4UQ-D.js} +1 -1
- package/dist/{option-Bicf6xpI.js.map → option-Vpy4UQ-D.js.map} +1 -1
- package/dist/{option-61YE3gub.cjs → option-nRk4MuXH.cjs} +1 -1
- package/dist/{option-61YE3gub.cjs.map → option-nRk4MuXH.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{overlay-CpvmytrQ.cjs → overlay-HNrWZ4sB.cjs} +1 -1
- package/dist/{overlay-CpvmytrQ.cjs.map → overlay-HNrWZ4sB.cjs.map} +1 -1
- package/dist/{overlay-CAI2FAp7.js → overlay-jlkcrt8F.js} +5 -5
- package/dist/{overlay-CAI2FAp7.js.map → overlay-jlkcrt8F.js.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-QD-5cj3_.cjs → overlay.confirm-body-B8dFI3cj.cjs} +1 -1
- package/dist/{overlay.confirm-body-QD-5cj3_.cjs.map → overlay.confirm-body-B8dFI3cj.cjs.map} +1 -1
- package/dist/{overlay.confirm-body-Cq25CkTw.js → overlay.confirm-body-CYShkjI6.js} +1 -1
- package/dist/{overlay.confirm-body-Cq25CkTw.js.map → overlay.confirm-body-CYShkjI6.js.map} +1 -1
- package/dist/overlay.js +3 -3
- package/dist/{overlay.service-BG0bqPwJ.cjs → overlay.service-BTPn7Uv7.cjs} +1 -1
- package/dist/{overlay.service-BG0bqPwJ.cjs.map → overlay.service-BTPn7Uv7.cjs.map} +1 -1
- package/dist/{overlay.service-Bpjrhaxh.js → overlay.service-BqhhxVJp.js} +2 -2
- package/dist/{overlay.service-Bpjrhaxh.js.map → overlay.service-BqhhxVJp.js.map} +1 -1
- package/dist/{progress-Zqx-S9NZ.js → progress-8Bn88GK_.js} +1 -1
- package/dist/{progress-Zqx-S9NZ.js.map → progress-8Bn88GK_.js.map} +1 -1
- package/dist/{progress-D8XZJVl5.cjs → progress-CAp_4jtq.cjs} +1 -1
- package/dist/{progress-D8XZJVl5.cjs.map → progress-CAp_4jtq.cjs.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-group-bl8K4Gls.cjs → radio-group-CN44mAoc.cjs} +1 -1
- package/dist/{radio-group-bl8K4Gls.cjs.map → radio-group-CN44mAoc.cjs.map} +1 -1
- package/dist/{radio-group-D9MU1Mxz.js → radio-group-GNHA7qJR.js} +1 -1
- package/dist/{radio-group-D9MU1Mxz.js.map → radio-group-GNHA7qJR.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-CMwkl-D6.js → select-BnuXRHS4.js} +3 -3
- package/dist/{select-CMwkl-D6.js.map → select-BnuXRHS4.js.map} +1 -1
- package/dist/{select-COIfVtZl.cjs → select-DZNns5Pa.cjs} +2 -2
- package/dist/{select-COIfVtZl.cjs.map → select-DZNns5Pa.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-xrMNpzkm.js → splash-screen-CUP_elaT.js} +1 -1
- package/dist/{splash-screen-xrMNpzkm.js.map → splash-screen-CUP_elaT.js.map} +1 -1
- package/dist/{splash-screen-2hxq8Sft.cjs → splash-screen-DeoPRrOu.cjs} +1 -1
- package/dist/{splash-screen-2hxq8Sft.cjs.map → splash-screen-DeoPRrOu.cjs.map} +1 -1
- package/dist/splash-screen.cjs +1 -1
- package/dist/splash-screen.js +1 -1
- package/dist/{src-B15R32Sp.js → src-B1VkLX3l.js} +159 -159
- package/dist/src-B1VkLX3l.js.map +1 -0
- package/dist/{src-BWQvtOOf.cjs → src-DQ4wr0qq.cjs} +13 -13
- package/dist/src-DQ4wr0qq.cjs.map +1 -0
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{surface-BkQ44Wuo.cjs → surface-LkaZQXZn.cjs} +1 -1
- package/dist/{surface-BkQ44Wuo.cjs.map → surface-LkaZQXZn.cjs.map} +1 -1
- package/dist/{surface-3nnvlxeE.js → surface-hOvkrjGN.js} +1 -1
- package/dist/{surface-3nnvlxeE.js.map → surface-hOvkrjGN.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 +2 -2
- package/dist/table.cjs.map +1 -1
- package/dist/table.js +2 -2
- package/dist/table.js.map +1 -1
- package/dist/{tabs-CnLIe8nE.js → tabs-CfwIHhHo.js} +1 -1
- package/dist/{tabs-CnLIe8nE.js.map → tabs-CfwIHhHo.js.map} +1 -1
- package/dist/{tabs-Dql0rcqZ.cjs → tabs-bplzstz6.cjs} +1 -1
- package/dist/{tabs-Dql0rcqZ.cjs.map → tabs-bplzstz6.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-BAogS_Ff.js → textarea-C1A5xuw9.js} +1 -1
- package/dist/{textarea-BAogS_Ff.js.map → textarea-C1A5xuw9.js.map} +1 -1
- package/dist/{textarea-CGD6lAEe.cjs → textarea-hrDp5gQq.cjs} +1 -1
- package/dist/{textarea-CGD6lAEe.cjs.map → textarea-hrDp5gQq.cjs.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-CUK0HrS3.js → theme-BniFOMEo.js} +4 -4
- package/dist/{theme-CUK0HrS3.js.map → theme-BniFOMEo.js.map} +1 -1
- package/dist/{theme-DKrrQ-ic.cjs → theme-DmR6PKV8.cjs} +3 -3
- package/dist/{theme-DKrrQ-ic.cjs.map → theme-DmR6PKV8.cjs.map} +1 -1
- package/dist/{theme-button-Bb8qW2IH.js → theme-button--ruZIb0T.js} +1 -1
- package/dist/{theme-button-Bb8qW2IH.js.map → theme-button--ruZIb0T.js.map} +1 -1
- package/dist/{theme-button-CmTwFm3l.cjs → theme-button-a0LgZ7hQ.cjs} +1 -1
- package/dist/{theme-button-CmTwFm3l.cjs.map → theme-button-a0LgZ7hQ.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-DuDAQa6y.js → window-BT9JecWy.js} +5 -5
- package/dist/{window-DuDAQa6y.js.map → window-BT9JecWy.js.map} +1 -1
- package/dist/{window-BbWlaPZv.cjs → window-Bp7zWZpu.cjs} +1 -1
- package/dist/{window-BbWlaPZv.cjs.map → window-Bp7zWZpu.cjs.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/badge/badge.ts +7 -11
- package/src/button/icon-button.ts +3 -4
- 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/urgent.ts +660 -0
- package/src/directives/working-snake.ts +294 -0
- package/src/icons/icon.ts +53 -30
- package/src/json/json.ts +1 -1
- package/src/navigation-rail/navigation-rail-item.ts +7 -12
- package/src/navigation-rail/navigation-rail.ts +0 -2
- package/src/table/table.ts +2 -2
- package/src/theme/theme-audio-player.ts +1 -1
- package/types/mixins/SchmancyElement.d.ts +31 -0
- package/types/src/badge/badge.d.ts +1 -1
- 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/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/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-DJuXwn8D.js +0 -48
- package/dist/icons-DJuXwn8D.js.map +0 -1
- package/dist/icons-oNRUCAEY.cjs +0 -33
- package/dist/icons-oNRUCAEY.cjs.map +0 -1
- package/dist/mixins-DTCHPEd4.cjs +0 -254
- package/dist/mixins-DTCHPEd4.cjs.map +0 -1
- package/dist/mixins-pU53qf6R.js +0 -636
- package/dist/mixins-pU53qf6R.js.map +0 -1
- package/dist/skills/page.md +0 -84
- package/dist/skills/schmancy/page.md +0 -84
- package/dist/src-B15R32Sp.js.map +0 -1
- package/dist/src-BWQvtOOf.cjs.map +0 -1
- 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
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Working Snake Directive - Animated trail indicating active work
|
|
3
|
+
*
|
|
4
|
+
* Creates a visual "snake" effect emanating from a punch point when
|
|
5
|
+
* an employee is currently working (single check-in, no check-out yet).
|
|
6
|
+
*
|
|
7
|
+
* The animation creates a visual illusion of forward motion - dots flow
|
|
8
|
+
* rightward with a subtle sine wave oscillation, representing time passing.
|
|
9
|
+
*
|
|
10
|
+
* Follows patterns from art.ts:
|
|
11
|
+
* - RequestAnimationFrame for smooth 60fps
|
|
12
|
+
* - Intersection Observer to pause when off-screen
|
|
13
|
+
* - GPU-accelerated CSS transforms
|
|
14
|
+
* - Object pooling for performance
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* html`
|
|
19
|
+
* <div ${workingSnake({ active: true, color: 'var(--md-sys-color-primary)' })}>
|
|
20
|
+
* <div class="punch-dot"></div>
|
|
21
|
+
* </div>
|
|
22
|
+
* `
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import type { ElementPart } from 'lit'
|
|
27
|
+
import { noChange } from 'lit'
|
|
28
|
+
import { AsyncDirective, directive } from 'lit/async-directive.js'
|
|
29
|
+
|
|
30
|
+
export interface WorkingSnakeOptions {
|
|
31
|
+
/** Whether the snake animation is active */
|
|
32
|
+
active: boolean
|
|
33
|
+
/** CSS color value for the snake segments */
|
|
34
|
+
color?: string
|
|
35
|
+
/** Width in pixels the snake should travel */
|
|
36
|
+
travelWidth?: number
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
interface Segment {
|
|
40
|
+
element: SVGCircleElement
|
|
41
|
+
progress: number // 0 to 1 - position along the path
|
|
42
|
+
phase: number // offset for sine wave
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
interface SnakeState {
|
|
46
|
+
active: boolean
|
|
47
|
+
color: string
|
|
48
|
+
travelWidth: number
|
|
49
|
+
element: HTMLElement
|
|
50
|
+
overlayElement?: HTMLDivElement
|
|
51
|
+
svg?: SVGSVGElement
|
|
52
|
+
segments: Segment[]
|
|
53
|
+
animationId?: number
|
|
54
|
+
isVisible: boolean
|
|
55
|
+
observer?: IntersectionObserver
|
|
56
|
+
startTime: number
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const SEGMENT_COUNT = 10
|
|
60
|
+
const CYCLE_DURATION = 3000 // 3 seconds for full cycle
|
|
61
|
+
const SINE_AMPLITUDE = 3 // vertical oscillation in pixels
|
|
62
|
+
const HEAD_RADIUS = 4
|
|
63
|
+
const TAIL_RADIUS = 1.5
|
|
64
|
+
|
|
65
|
+
class WorkingSnakeDirective extends AsyncDirective {
|
|
66
|
+
private state: SnakeState | null = null
|
|
67
|
+
|
|
68
|
+
render(_options: WorkingSnakeOptions) {
|
|
69
|
+
return noChange
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
override update(part: ElementPart, [options]: [WorkingSnakeOptions]) {
|
|
73
|
+
const element = part.element as HTMLElement
|
|
74
|
+
// Auto-calculate travelWidth to use 100% of container if not specified
|
|
75
|
+
const calculatedWidth = element.offsetWidth || element.clientWidth
|
|
76
|
+
const { active, color = 'var(--md-sys-color-primary)', travelWidth = calculatedWidth } = options
|
|
77
|
+
|
|
78
|
+
// If becoming inactive, cleanup
|
|
79
|
+
if (!active && this.state) {
|
|
80
|
+
this.cleanup()
|
|
81
|
+
return noChange
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// If not active and no state, nothing to do
|
|
85
|
+
if (!active) {
|
|
86
|
+
return noChange
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// If options changed, recreate
|
|
90
|
+
if (this.state && (this.state.color !== color || this.state.travelWidth !== travelWidth)) {
|
|
91
|
+
this.cleanup()
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Initialize if needed
|
|
95
|
+
if (!this.state) {
|
|
96
|
+
this.state = {
|
|
97
|
+
active: true,
|
|
98
|
+
color,
|
|
99
|
+
travelWidth,
|
|
100
|
+
element,
|
|
101
|
+
segments: [],
|
|
102
|
+
isVisible: true,
|
|
103
|
+
startTime: performance.now(),
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Ensure element has relative positioning for absolute overlay
|
|
107
|
+
const computedStyle = getComputedStyle(element)
|
|
108
|
+
if (computedStyle.position === 'static') {
|
|
109
|
+
element.style.position = 'relative'
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
this.createOverlay()
|
|
113
|
+
this.setupVisibilityObserver()
|
|
114
|
+
this.startAnimation()
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return noChange
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
private createOverlay() {
|
|
121
|
+
if (!this.state) return
|
|
122
|
+
|
|
123
|
+
const { element, color, travelWidth } = this.state
|
|
124
|
+
|
|
125
|
+
// Create overlay container - starts from the punch point
|
|
126
|
+
const overlay = document.createElement('div')
|
|
127
|
+
overlay.className = 'working-snake-overlay'
|
|
128
|
+
overlay.style.cssText = `
|
|
129
|
+
position: absolute;
|
|
130
|
+
top: 50%;
|
|
131
|
+
left: 0;
|
|
132
|
+
width: ${travelWidth}px;
|
|
133
|
+
height: 20px;
|
|
134
|
+
transform: translateY(-50%);
|
|
135
|
+
pointer-events: none;
|
|
136
|
+
overflow: visible;
|
|
137
|
+
z-index: 5;
|
|
138
|
+
`
|
|
139
|
+
|
|
140
|
+
// Create SVG
|
|
141
|
+
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')
|
|
142
|
+
svg.setAttribute('width', '100%')
|
|
143
|
+
svg.setAttribute('height', '100%')
|
|
144
|
+
svg.setAttribute('viewBox', `0 0 ${travelWidth} 20`)
|
|
145
|
+
svg.setAttribute('preserveAspectRatio', 'none')
|
|
146
|
+
svg.style.cssText = `
|
|
147
|
+
position: absolute;
|
|
148
|
+
top: 0;
|
|
149
|
+
left: 0;
|
|
150
|
+
width: 100%;
|
|
151
|
+
height: 100%;
|
|
152
|
+
overflow: visible;
|
|
153
|
+
`
|
|
154
|
+
|
|
155
|
+
// Create segments (circles)
|
|
156
|
+
const segments: Segment[] = []
|
|
157
|
+
for (let i = 0; i < SEGMENT_COUNT; i++) {
|
|
158
|
+
const circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle')
|
|
159
|
+
|
|
160
|
+
// Calculate radius - head is bigger, tail is smaller
|
|
161
|
+
const normalizedIndex = i / (SEGMENT_COUNT - 1)
|
|
162
|
+
const radius = HEAD_RADIUS - normalizedIndex * (HEAD_RADIUS - TAIL_RADIUS)
|
|
163
|
+
|
|
164
|
+
circle.setAttribute('r', radius.toString())
|
|
165
|
+
circle.setAttribute('fill', color)
|
|
166
|
+
circle.setAttribute('cy', '10') // Center vertically in 20px height
|
|
167
|
+
circle.style.willChange = 'transform, opacity'
|
|
168
|
+
|
|
169
|
+
// Stagger initial progress and phase for organic movement
|
|
170
|
+
const progress = (i / SEGMENT_COUNT) * 0.5 // Start staggered
|
|
171
|
+
const phase = (i / SEGMENT_COUNT) * Math.PI * 2
|
|
172
|
+
|
|
173
|
+
segments.push({ element: circle, progress, phase })
|
|
174
|
+
svg.appendChild(circle)
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
overlay.appendChild(svg)
|
|
178
|
+
element.appendChild(overlay)
|
|
179
|
+
|
|
180
|
+
this.state.overlayElement = overlay
|
|
181
|
+
this.state.svg = svg
|
|
182
|
+
this.state.segments = segments
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
private setupVisibilityObserver() {
|
|
186
|
+
if (!this.state || typeof IntersectionObserver === 'undefined') return
|
|
187
|
+
|
|
188
|
+
this.state.observer = new IntersectionObserver(
|
|
189
|
+
entries => {
|
|
190
|
+
if (!this.state) return
|
|
191
|
+
const isVisible = entries[0].isIntersecting
|
|
192
|
+
|
|
193
|
+
if (isVisible && !this.state.isVisible) {
|
|
194
|
+
this.state.isVisible = true
|
|
195
|
+
this.startAnimation()
|
|
196
|
+
} else if (!isVisible && this.state.isVisible) {
|
|
197
|
+
this.state.isVisible = false
|
|
198
|
+
if (this.state.animationId) {
|
|
199
|
+
cancelAnimationFrame(this.state.animationId)
|
|
200
|
+
this.state.animationId = undefined
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
{ threshold: 0 }
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
this.state.observer.observe(this.state.element)
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
private startAnimation() {
|
|
211
|
+
if (!this.state || !this.state.isVisible) return
|
|
212
|
+
|
|
213
|
+
const animate = (currentTime: number) => {
|
|
214
|
+
if (!this.state || !this.state.isVisible) return
|
|
215
|
+
|
|
216
|
+
const elapsed = currentTime - this.state.startTime
|
|
217
|
+
const cycleProgress = (elapsed % CYCLE_DURATION) / CYCLE_DURATION
|
|
218
|
+
|
|
219
|
+
const { segments, travelWidth } = this.state
|
|
220
|
+
|
|
221
|
+
// Animate each segment
|
|
222
|
+
for (let i = 0; i < segments.length; i++) {
|
|
223
|
+
const segment = segments[i]
|
|
224
|
+
|
|
225
|
+
// Each segment is offset in the cycle
|
|
226
|
+
const segmentOffset = i / SEGMENT_COUNT
|
|
227
|
+
let progress = (cycleProgress + segmentOffset) % 1
|
|
228
|
+
|
|
229
|
+
// Ease the progress for more organic feel (ease-out)
|
|
230
|
+
const easedProgress = 1 - Math.pow(1 - progress, 2)
|
|
231
|
+
|
|
232
|
+
// Calculate x position
|
|
233
|
+
const x = easedProgress * travelWidth
|
|
234
|
+
|
|
235
|
+
// Calculate y position with sine wave
|
|
236
|
+
const sineWave = Math.sin(progress * Math.PI * 4 + segment.phase) * SINE_AMPLITUDE
|
|
237
|
+
const y = 10 + sineWave
|
|
238
|
+
|
|
239
|
+
// Calculate opacity - fade out as it travels
|
|
240
|
+
const baseOpacity = i === 0 ? 0.9 : 0.7 - (i / SEGMENT_COUNT) * 0.55
|
|
241
|
+
const fadeOut = 1 - easedProgress * 0.7
|
|
242
|
+
const opacity = baseOpacity * fadeOut
|
|
243
|
+
|
|
244
|
+
// Head has subtle pulse
|
|
245
|
+
let scale = 1
|
|
246
|
+
if (i === 0) {
|
|
247
|
+
const pulse = Math.sin(currentTime / 200) * 0.1 + 1
|
|
248
|
+
scale = pulse
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// Apply transforms
|
|
252
|
+
segment.element.setAttribute('cx', x.toFixed(1))
|
|
253
|
+
segment.element.setAttribute('cy', y.toFixed(1))
|
|
254
|
+
segment.element.setAttribute('opacity', Math.max(0.1, opacity).toFixed(2))
|
|
255
|
+
|
|
256
|
+
if (scale !== 1) {
|
|
257
|
+
segment.element.style.transform = `scale(${scale.toFixed(2)})`
|
|
258
|
+
segment.element.style.transformOrigin = `${x}px ${y}px`
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
this.state.animationId = requestAnimationFrame(animate)
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
this.state.animationId = requestAnimationFrame(animate)
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
private cleanup() {
|
|
269
|
+
if (!this.state) return
|
|
270
|
+
|
|
271
|
+
// Cancel animation
|
|
272
|
+
if (this.state.animationId) {
|
|
273
|
+
cancelAnimationFrame(this.state.animationId)
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// Disconnect observer
|
|
277
|
+
if (this.state.observer) {
|
|
278
|
+
this.state.observer.disconnect()
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// Remove overlay
|
|
282
|
+
if (this.state.overlayElement) {
|
|
283
|
+
this.state.overlayElement.remove()
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
this.state = null
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
override disconnected() {
|
|
290
|
+
this.cleanup()
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
export const workingSnake = directive(WorkingSnakeDirective)
|
package/src/icons/icon.ts
CHANGED
|
@@ -1,56 +1,79 @@
|
|
|
1
1
|
import { SchmancyElement } from '@mixins/index'
|
|
2
|
-
import { css, html } from 'lit'
|
|
3
|
-
import { customElement } from 'lit/decorators.js'
|
|
2
|
+
import { css, html, nothing, svg } from 'lit'
|
|
3
|
+
import { customElement, state } from 'lit/decorators.js'
|
|
4
4
|
|
|
5
|
+
declare global {
|
|
6
|
+
interface Window {
|
|
7
|
+
__siIcons?: Record<string, string>
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @element schmancy-icon
|
|
13
|
+
* Renders a Material Symbol inline as SVG — path data comes from
|
|
14
|
+
* window.__siIcons populated by the schmancy-icons Vite plugin.
|
|
15
|
+
*
|
|
16
|
+
* Size: set font-size on the host via Tailwind (e.g. class="text-2xl").
|
|
17
|
+
* Color: inherits currentColor.
|
|
18
|
+
* Active fill: use the "-fill" variant name: "home-fill".
|
|
19
|
+
*
|
|
20
|
+
* Usage:
|
|
21
|
+
* <schmancy-icon>home</schmancy-icon>
|
|
22
|
+
* <schmancy-icon class="text-lg text-primary-default">delete</schmancy-icon>
|
|
23
|
+
* <schmancy-icon>${active ? 'home-fill' : 'home'}</schmancy-icon>
|
|
24
|
+
*/
|
|
5
25
|
@customElement('schmancy-icon')
|
|
6
26
|
export default class SchmancyIcon extends SchmancyElement {
|
|
7
27
|
static styles = [css`
|
|
8
28
|
:host {
|
|
9
|
-
font-family: 'Material Symbols Outlined';
|
|
10
|
-
font-size: 24px;
|
|
11
|
-
width: 1em;
|
|
12
|
-
height: 1em;
|
|
13
|
-
color: inherit;
|
|
14
|
-
font-variation-settings: inherit;
|
|
15
|
-
font-weight: 400;
|
|
16
29
|
display: inline-flex;
|
|
17
|
-
font-style: normal;
|
|
18
30
|
place-items: center;
|
|
19
31
|
place-content: center;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
text-transform: none;
|
|
24
|
-
user-select: none;
|
|
25
|
-
white-space: nowrap;
|
|
32
|
+
font-size: 24px;
|
|
33
|
+
width: 1em;
|
|
34
|
+
height: 1em;
|
|
26
35
|
flex-shrink: 0;
|
|
27
|
-
|
|
28
|
-
text-rendering: optimizeLegibility;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
::slotted(svg) {
|
|
32
|
-
fill: currentColor;
|
|
36
|
+
color: inherit;
|
|
33
37
|
}
|
|
34
38
|
|
|
35
|
-
|
|
36
|
-
height: 100%;
|
|
39
|
+
svg {
|
|
37
40
|
width: 100%;
|
|
41
|
+
height: 100%;
|
|
42
|
+
fill: currentColor;
|
|
43
|
+
overflow: visible;
|
|
38
44
|
}
|
|
39
45
|
`]
|
|
40
46
|
|
|
47
|
+
@state() private _name = ''
|
|
48
|
+
|
|
49
|
+
private _observer?: MutationObserver
|
|
50
|
+
|
|
41
51
|
override connectedCallback(): void {
|
|
42
52
|
super.connectedCallback()
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
this.
|
|
46
|
-
|
|
47
|
-
}
|
|
53
|
+
this._name = this.textContent?.trim() ?? ''
|
|
54
|
+
this._observer = new MutationObserver(() => {
|
|
55
|
+
this._name = this.textContent?.trim() ?? ''
|
|
56
|
+
})
|
|
57
|
+
this._observer.observe(this, { childList: true, characterData: true, subtree: true })
|
|
48
58
|
this.setAttribute('aria-hidden', 'true')
|
|
49
59
|
this.setAttribute('translate', 'no')
|
|
50
60
|
}
|
|
51
61
|
|
|
62
|
+
override disconnectedCallback(): void {
|
|
63
|
+
super.disconnectedCallback()
|
|
64
|
+
this._observer?.disconnect()
|
|
65
|
+
}
|
|
66
|
+
|
|
52
67
|
protected override render(): unknown {
|
|
53
|
-
|
|
68
|
+
const path = window.__siIcons?.[this._name]
|
|
69
|
+
return html`
|
|
70
|
+
<slot style="display:none"></slot>
|
|
71
|
+
${path
|
|
72
|
+
? html`<svg viewBox="0 -960 960 960" xmlns="http://www.w3.org/2000/svg">
|
|
73
|
+
${svg`<path d="${path}"/>`}
|
|
74
|
+
</svg>`
|
|
75
|
+
: nothing}
|
|
76
|
+
`
|
|
54
77
|
}
|
|
55
78
|
}
|
|
56
79
|
|
package/src/json/json.ts
CHANGED
|
@@ -41,7 +41,7 @@ export class SchmancyJson extends SchmancyElement {
|
|
|
41
41
|
@click=${this.copyJSON}
|
|
42
42
|
>
|
|
43
43
|
<div class="flex items-center justify-between mb-1">
|
|
44
|
-
<schmancy-icon
|
|
44
|
+
<schmancy-icon class="text-xs text-on-surface-variant">content_copy</schmancy-icon>
|
|
45
45
|
</div>
|
|
46
46
|
<pre class="text-[10px] leading-tight">${unsafeHTML(highlighted)}</pre>
|
|
47
47
|
</div>
|
|
@@ -264,10 +264,11 @@ export class SchmancyNavigationRailItem extends SchmancyElement {
|
|
|
264
264
|
|
|
265
265
|
// M3 Navigation Rail Item classes with theme integration
|
|
266
266
|
const containerClasses = this.classMap({
|
|
267
|
-
// Layout & Spacing (M3 56px
|
|
268
|
-
|
|
267
|
+
// Layout & Spacing (M3 56px minimum hit target; vertical padding is consumer-controlled)
|
|
268
|
+
// justify-start pins the icon to the row top so its vertical center is invariant
|
|
269
|
+
// across label-visibility states — consumer rows can align siblings to it.
|
|
270
|
+
'flex flex-col items-center justify-start': true,
|
|
269
271
|
'min-h-14 w-full': true, // min-h-14 = 56px
|
|
270
|
-
'py-3': true, // py-3 = 12px top/bottom
|
|
271
272
|
'gap-1': true, // gap-1 = 4px
|
|
272
273
|
|
|
273
274
|
// M3 Shape & Interaction
|
|
@@ -383,15 +384,9 @@ export class SchmancyNavigationRailItem extends SchmancyElement {
|
|
|
383
384
|
when(
|
|
384
385
|
this.icon,
|
|
385
386
|
() => html`
|
|
386
|
-
<
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
style="font-family: 'Material Symbols Outlined'; font-variation-settings: 'FILL' ${this.active
|
|
390
|
-
? '1'
|
|
391
|
-
: '0'}, 'wght' 400, 'GRAD' 0, 'opsz' ${this.nested ? '20' : '24'};"
|
|
392
|
-
>
|
|
393
|
-
${this.icon}
|
|
394
|
-
</span>
|
|
387
|
+
<schmancy-icon class=${iconClasses} part="icon-text">
|
|
388
|
+
${this.active ? `${this.icon}-fill` : this.icon}
|
|
389
|
+
</schmancy-icon>
|
|
395
390
|
`,
|
|
396
391
|
),
|
|
397
392
|
)}
|
|
@@ -379,8 +379,6 @@ export class SchmancyNavigationRail extends SchmancyElement {
|
|
|
379
379
|
// Layout & Structure
|
|
380
380
|
'flex flex-col h-full': true,
|
|
381
381
|
'box-border relative': true,
|
|
382
|
-
'py-2': true,
|
|
383
|
-
|
|
384
382
|
|
|
385
383
|
// M3 Colors & Theme
|
|
386
384
|
'bg-container-lowest text-surface-on': true,
|
package/src/table/table.ts
CHANGED
|
@@ -182,9 +182,9 @@ export class SchmancyDataTable<T extends Record<string, any> = any> extends Schm
|
|
|
182
182
|
return html`
|
|
183
183
|
<span class="ml-1">
|
|
184
184
|
${this.sortDirection === 'asc'
|
|
185
|
-
? html`<schmancy-icon
|
|
185
|
+
? html`<schmancy-icon class="text-base">arrow_upward</schmancy-icon>`
|
|
186
186
|
: this.sortDirection === 'desc'
|
|
187
|
-
? html`<schmancy-icon
|
|
187
|
+
? html`<schmancy-icon class="text-base">arrow_downward</schmancy-icon>`
|
|
188
188
|
: null}
|
|
189
189
|
</span>
|
|
190
190
|
`
|
|
@@ -349,7 +349,7 @@ export class SchmancyThemeAudioPlayer extends SchmancyElement {
|
|
|
349
349
|
this.currentThemeName !== 'default',
|
|
350
350
|
() => html`
|
|
351
351
|
<schmancy-button variant="text" size="sm" @click=${() => this.resetToDefaults()}>
|
|
352
|
-
<schmancy-icon
|
|
352
|
+
<schmancy-icon class="text-base">refresh</schmancy-icon>
|
|
353
353
|
Reset
|
|
354
354
|
</schmancy-button>
|
|
355
355
|
`
|
|
@@ -46,4 +46,35 @@ export declare class SchmancyElement extends SchmancyElementBase {
|
|
|
46
46
|
removeEventListener(type: string, listener: EventListenerOrEventListenerObject | null, options?: boolean | EventListenerOptions): void;
|
|
47
47
|
disconnectedCallback(): void;
|
|
48
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Decorator: `@schmancyElement('tag-name')`. The standard way to register
|
|
51
|
+
* a `SchmancyElement` subclass.
|
|
52
|
+
*
|
|
53
|
+
* Drop-in replacement for Lit's `@customElement`. The difference is
|
|
54
|
+
* timing: this decorator wraps the prototype's methods with
|
|
55
|
+
* `_activeHost.run` BEFORE calling `customElements.define`.
|
|
56
|
+
*
|
|
57
|
+
* Why this matters: the HTML spec captures the element's lifecycle
|
|
58
|
+
* callback references (`connectedCallback`, `disconnectedCallback`, etc.)
|
|
59
|
+
* off the prototype at `customElements.define` time, and the browser
|
|
60
|
+
* invokes those cached references for the element's lifecycle — it does
|
|
61
|
+
* NOT re-look-up the prototype each time. SchmancyElement's constructor
|
|
62
|
+
* installs the active-host wrap on first instantiation, which is strictly
|
|
63
|
+
* later than `define`, so the browser ends up calling unwrapped
|
|
64
|
+
* lifecycle callbacks. Reads inside `connectedCallback` then fall through
|
|
65
|
+
* to `document.activeElement`, miss the enclosing `<schmancy-context>`,
|
|
66
|
+
* and resolve to the module-scoped global instead of the isolated copy.
|
|
67
|
+
*
|
|
68
|
+
* Use this decorator for any subclass that:
|
|
69
|
+
* - Reads or writes a state-singleton inside `connectedCallback` or
|
|
70
|
+
* `disconnectedCallback`, AND
|
|
71
|
+
* - May appear inside a `<schmancy-context>` subtree.
|
|
72
|
+
*
|
|
73
|
+
* For elements that never touch state in lifecycle callbacks, plain
|
|
74
|
+
* `@customElement` from `lit/decorators.js` still works — the
|
|
75
|
+
* constructor's wrap covers everything else (render, class methods,
|
|
76
|
+
* event handlers attached via the prototype). The two decorators are
|
|
77
|
+
* interchangeable for those cases.
|
|
78
|
+
*/
|
|
79
|
+
export declare function schmancyElement(tagName: string): <T extends CustomElementConstructor>(cls: T) => T;
|
|
49
80
|
export {};
|
|
@@ -68,7 +68,7 @@ export declare class SchmancyBadgeV2 extends SchmancyElement {
|
|
|
68
68
|
* Get icon size based on badge size with harmonious proportions
|
|
69
69
|
* Using golden ratio-inspired proportions relative to text size
|
|
70
70
|
*/
|
|
71
|
-
private
|
|
71
|
+
private getIconSizeClass;
|
|
72
72
|
/**
|
|
73
73
|
* Get additional styling for specific sizes
|
|
74
74
|
*/
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Badge Directive — Indicator for AI-generated content.
|
|
3
|
+
* Pulses gently on the host element; color routed through theme tokens.
|
|
4
|
+
*/
|
|
5
|
+
import { AsyncDirective } from 'lit/async-directive.js';
|
|
6
|
+
import type { ElementPart } from 'lit';
|
|
7
|
+
declare class AIBadgeDirective extends AsyncDirective {
|
|
8
|
+
private state;
|
|
9
|
+
render(_message?: string): symbol;
|
|
10
|
+
update(part: ElementPart, [message]: [string?]): symbol;
|
|
11
|
+
private cleanup;
|
|
12
|
+
disconnected(): void;
|
|
13
|
+
}
|
|
14
|
+
export declare const aiBadge: (_message?: string) => import("lit-html/directive").DirectiveResult<typeof AIBadgeDirective>;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Art Directive — GPU-accelerated decorative overlays.
|
|
3
|
+
* Lazy-initialised, IntersectionObserver-paused, RAF-driven, particle-pooled.
|
|
4
|
+
*/
|
|
5
|
+
import type { ElementPart } from 'lit';
|
|
6
|
+
import { AsyncDirective } from 'lit/async-directive.js';
|
|
7
|
+
import type { ArtOptions } from './types';
|
|
8
|
+
declare class ArtDirective extends AsyncDirective {
|
|
9
|
+
private state;
|
|
10
|
+
render(_options: ArtOptions): symbol;
|
|
11
|
+
update(part: ElementPart, [options]: [ArtOptions]): symbol;
|
|
12
|
+
private initializeResources;
|
|
13
|
+
private setupVisibilityObserver;
|
|
14
|
+
private startAnimation;
|
|
15
|
+
private cleanup;
|
|
16
|
+
disconnected(): void;
|
|
17
|
+
}
|
|
18
|
+
export declare const art: (_options: ArtOptions) => import("lit-html/directive").DirectiveResult<typeof ArtDirective>;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error Effect — Electrical/warning glow on edges with static particles and lightning bolts.
|
|
3
|
+
* 2.5-second main pulse cycle.
|
|
4
|
+
*/
|
|
5
|
+
import type { ArtState } from '../types';
|
|
6
|
+
export declare function createErrorOverlay(state: ArtState): void;
|
|
7
|
+
export declare function animateError(state: ArtState, currentTime: number): void;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Funkhaus Effect — Grid wave animation with window panes glowing diagonally.
|
|
3
|
+
* 7-second cycle, exponential intensity curve.
|
|
4
|
+
*/
|
|
5
|
+
import type { ArtState } from '../types';
|
|
6
|
+
export declare function createFunkhausOverlay(state: ArtState): void;
|
|
7
|
+
export declare function animateFunkhaus(state: ArtState, currentTime: number): void;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Howl Effect — Steampunk gears, sparkles, crystals, rising steam.
|
|
3
|
+
* 17-second cycle, layered animations.
|
|
4
|
+
*/
|
|
5
|
+
import type { ArtState } from '../types';
|
|
6
|
+
export declare function createHowlOverlay(state: ArtState): void;
|
|
7
|
+
export declare function animateHowl(state: ArtState, currentTime: number): void;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Samwa Effect — Ambient geometric particles with gentle physics.
|
|
3
|
+
* Color-responsive palette derived from the passed `color` prop; organic wind system.
|
|
4
|
+
*/
|
|
5
|
+
import type { ArtState } from '../types';
|
|
6
|
+
export declare function createSamwaOverlay(state: ArtState): void;
|
|
7
|
+
export declare function animateSamwa(state: ArtState, currentTime: number): void;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Snow Effect — Peaceful winter snowfall with snow/leaf shapes.
|
|
3
|
+
* Same physics pattern as samwa effect but tuned for slower, floatier fall.
|
|
4
|
+
*/
|
|
5
|
+
import type { ArtState } from '../types';
|
|
6
|
+
export declare function createSnowOverlay(state: ArtState): void;
|
|
7
|
+
export declare function animateSnow(state: ArtState, currentTime: number): void;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Starfield Effect — Night sky with twinkling stars.
|
|
3
|
+
*
|
|
4
|
+
* 6 groups × 7 stars using CSS radial-gradient backgrounds.
|
|
5
|
+
* Wave-by-wave fade-in (group 0 first, then 1, 2, …); gentle twinkle once visible.
|
|
6
|
+
* Opacity driven by RAF instead of CSS @keyframes to avoid Shadow DOM scoping.
|
|
7
|
+
*/
|
|
8
|
+
import type { ArtState } from '../types';
|
|
9
|
+
export declare function createStarfieldOverlay(state: ArtState): void;
|
|
10
|
+
export declare function animateStarfield(state: ArtState, currentTime: number): void;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Particle Pool
|
|
3
|
+
*
|
|
4
|
+
* Reusable object pool for SVG particles to avoid constant creation/destruction.
|
|
5
|
+
* Used by samwa (leaves), howl (steam), error (lightning), snow (flakes) effects.
|
|
6
|
+
*/
|
|
7
|
+
export declare class ParticlePool<T extends SVGElement> {
|
|
8
|
+
private pool;
|
|
9
|
+
private active;
|
|
10
|
+
private factory;
|
|
11
|
+
constructor(factory: () => T, initialSize?: number);
|
|
12
|
+
acquire(): T;
|
|
13
|
+
release(particle: T): void;
|
|
14
|
+
clear(): void;
|
|
15
|
+
get activeCount(): number;
|
|
16
|
+
}
|