@mhmo91/schmancy 0.10.24 → 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-CvdVfCnN.js → overlay.confirm-body-DozUyDYx.js} +242 -242
- package/dist/agent/{overlay.confirm-body-CvdVfCnN.js.map → overlay.confirm-body-DozUyDYx.js.map} +1 -1
- package/dist/agent/schmancy.agent.js +5658 -2927
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/{area-A_oUP4P1.js → area-1EG1LrkX.js} +1 -1
- package/dist/{area-A_oUP4P1.js.map → area-1EG1LrkX.js.map} +1 -1
- package/dist/{area-BuqdaUpQ.cjs → area-DrVE5pXW.cjs} +1 -1
- package/dist/{area-BuqdaUpQ.cjs.map → area-DrVE5pXW.cjs.map} +1 -1
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-Cy46gJxK.cjs → autocomplete-6pdZxEab.cjs} +1 -1
- package/dist/{autocomplete-Cy46gJxK.cjs.map → autocomplete-6pdZxEab.cjs.map} +1 -1
- package/dist/{autocomplete-BoCWO26L.js → autocomplete-nrIcCilw.js} +2 -2
- package/dist/{autocomplete-BoCWO26L.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-B0h5fuAA.js → boat--fLgbDAE.js} +3 -3
- package/dist/{boat-B0h5fuAA.js.map → boat--fLgbDAE.js.map} +1 -1
- package/dist/{boat-RRtBhD3x.cjs → boat-BIB-gPqy.cjs} +1 -1
- package/dist/{boat-RRtBhD3x.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-Bn6Pioo8.cjs → busy-DVCIxBVf.cjs} +1 -1
- package/dist/{busy-Bn6Pioo8.cjs.map → busy-DVCIxBVf.cjs.map} +1 -1
- package/dist/{busy-DObY7lfu.js → busy-DshZcVZ4.js} +1 -1
- package/dist/{busy-DObY7lfu.js.map → busy-DshZcVZ4.js.map} +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/{button-DEi3M2nV.js → button-D9UJ7I6Z.js} +2 -2
- package/dist/{button-DEi3M2nV.js.map → button-D9UJ7I6Z.js.map} +1 -1
- package/dist/{button-XfdPzfZQ.cjs → button-JrTMzwHY.cjs} +1 -1
- package/dist/{button-XfdPzfZQ.cjs.map → button-JrTMzwHY.cjs.map} +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.js +1 -1
- package/dist/{card-jzUQK0EQ.js → card-BvCFuX3J.js} +2 -2
- package/dist/{card-jzUQK0EQ.js.map → card-BvCFuX3J.js.map} +1 -1
- package/dist/{card-BjUgRzFh.cjs → card-CTotavhH.cjs} +1 -1
- package/dist/{card-BjUgRzFh.cjs.map → card-CTotavhH.cjs.map} +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-rskgUBxQ.cjs → checkbox-By4fFmjt.cjs} +1 -1
- package/dist/{checkbox-rskgUBxQ.cjs.map → checkbox-By4fFmjt.cjs.map} +1 -1
- package/dist/{checkbox-CfCm1vGN.js → checkbox-GPsdCUbs.js} +1 -1
- package/dist/{checkbox-CfCm1vGN.js.map → checkbox-GPsdCUbs.js.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-Dfim_tQv.js → chips-27umqnat.js} +4 -4
- package/dist/{chips-Dfim_tQv.js.map → chips-27umqnat.js.map} +1 -1
- package/dist/{chips-BiNZKu0J.cjs → chips-BZf9sGA8.cjs} +1 -1
- package/dist/{chips-BiNZKu0J.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-em7OwhlK.cjs → date-range-BJnLWCRF.cjs} +1 -1
- package/dist/{date-range-em7OwhlK.cjs.map → date-range-BJnLWCRF.cjs.map} +1 -1
- package/dist/{date-range-inline-DYeqoBIO.cjs → date-range-inline-B6uKUliV.cjs} +1 -1
- package/dist/{date-range-inline-DYeqoBIO.cjs.map → date-range-inline-B6uKUliV.cjs.map} +1 -1
- package/dist/{date-range-inline-BfUL8_vX.js → date-range-inline-BNbbRfIA.js} +1 -1
- package/dist/{date-range-inline-BfUL8_vX.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-B8zoj6Cj.js → date-range-wDVHcr0u.js} +2 -2
- package/dist/{date-range-B8zoj6Cj.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-D246xN83.js → details-Ckxpwacj.js} +4 -4
- package/dist/{details-D246xN83.js.map → details-Ckxpwacj.js.map} +1 -1
- package/dist/{details-CNM1tuma.cjs → details-DNrWIes6.cjs} +1 -1
- package/dist/{details-CNM1tuma.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-CbIp1je9.js → divider-BzcZGo4S.js} +1 -1
- package/dist/{divider-CbIp1je9.js.map → divider-BzcZGo4S.js.map} +1 -1
- package/dist/{divider-DaKsGNW-.cjs → divider-Cde33ivs.cjs} +1 -1
- package/dist/{divider-DaKsGNW-.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-DRkiO4vw.js → expand-DI144OzN.js} +3 -3
- package/dist/{expand-DRkiO4vw.js.map → expand-DI144OzN.js.map} +1 -1
- package/dist/{expand-CQDm3BF3.cjs → expand-Db4V0jj-.cjs} +1 -1
- package/dist/{expand-CQDm3BF3.cjs.map → expand-Db4V0jj-.cjs.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/{float-5O26zNRh.cjs → float--RScf9BZ.cjs} +1 -1
- package/dist/{float-5O26zNRh.cjs.map → float--RScf9BZ.cjs.map} +1 -1
- package/dist/{float-CZtu8FnO.js → float-DIyzy1c2.js} +1 -1
- package/dist/{float-CZtu8FnO.js.map → float-DIyzy1c2.js.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/{form-B90CMeqs.cjs → form-DWNpOsIU.cjs} +1 -1
- package/dist/{form-B90CMeqs.cjs.map → form-DWNpOsIU.cjs.map} +1 -1
- package/dist/{form-CE6Gwz4r.js → form-RtXH8UHQ.js} +8 -8
- package/dist/{form-CE6Gwz4r.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-D98csbEo.cjs → iframe-B1XWRaLC.cjs} +1 -1
- package/dist/{iframe-D98csbEo.cjs.map → iframe-B1XWRaLC.cjs.map} +1 -1
- package/dist/{iframe-C3PMj1MD.js → iframe-BlHK0cjy.js} +1 -1
- package/dist/{iframe-C3PMj1MD.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-_y92Pzon.cjs → input-C-_XU9AX.cjs} +1 -1
- package/dist/{input-_y92Pzon.cjs.map → input-C-_XU9AX.cjs.map} +1 -1
- package/dist/{input-CCOkeeVM.js → input-CiGa8Dkl.js} +1 -1
- package/dist/{input-CCOkeeVM.js.map → input-CiGa8Dkl.js.map} +1 -1
- package/dist/{input-chip-CR66MWml.cjs → input-chip-5aYnuRZ_.cjs} +1 -1
- package/dist/{input-chip-CR66MWml.cjs.map → input-chip-5aYnuRZ_.cjs.map} +1 -1
- package/dist/{input-chip-Bzwr5-XL.js → input-chip-l--zCMGR.js} +1 -1
- package/dist/{input-chip-Bzwr5-XL.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 +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-CfRDkeeb.cjs} +2 -2
- package/dist/{lightbox-Bk3ovcVu.cjs.map → lightbox-CfRDkeeb.cjs.map} +1 -1
- package/dist/{lightbox-Dl--fEbP.js → lightbox-D9oiu1Nv.js} +2 -2
- package/dist/{lightbox-Dl--fEbP.js.map → lightbox-D9oiu1Nv.js.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-B3WI_Nfs.js → list-BOlRka4v.js} +1 -1
- package/dist/{list-B3WI_Nfs.js.map → list-BOlRka4v.js.map} +1 -1
- package/dist/{list-DWngbP2X.cjs → list-CDJi3_Ut.cjs} +1 -1
- package/dist/{list-DWngbP2X.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-CdYjxJqm.cjs → menu-CJaDL2cd.cjs} +1 -1
- package/dist/{menu-CdYjxJqm.cjs.map → menu-CJaDL2cd.cjs.map} +1 -1
- package/dist/{menu-IDhVp6zm.js → menu-XyrLmCi_.js} +2 -2
- package/dist/{menu-IDhVp6zm.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-CllYkvlR.js → notification-CHrEY4u8.js} +2 -2
- package/dist/{notification-CllYkvlR.js.map → notification-CHrEY4u8.js.map} +1 -1
- package/dist/{notification-B3wVUC8l.cjs → notification-DKp4tjaB.cjs} +1 -1
- package/dist/{notification-B3wVUC8l.cjs.map → notification-DKp4tjaB.cjs.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-CPOL0nHL.js → option-Vpy4UQ-D.js} +1 -1
- package/dist/{option-CPOL0nHL.js.map → option-Vpy4UQ-D.js.map} +1 -1
- package/dist/{option-cRsdshy8.cjs → option-nRk4MuXH.cjs} +1 -1
- package/dist/{option-cRsdshy8.cjs.map → option-nRk4MuXH.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{overlay-BnTvnNDc.cjs → overlay-HNrWZ4sB.cjs} +1 -1
- package/dist/{overlay-BnTvnNDc.cjs.map → overlay-HNrWZ4sB.cjs.map} +1 -1
- package/dist/{overlay-DJ-vlwtR.js → overlay-jlkcrt8F.js} +5 -5
- package/dist/{overlay-DJ-vlwtR.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-CQ-FwySO.cjs → overlay.confirm-body-B8dFI3cj.cjs} +1 -1
- package/dist/{overlay.confirm-body-CQ-FwySO.cjs.map → overlay.confirm-body-B8dFI3cj.cjs.map} +1 -1
- package/dist/{overlay.confirm-body-DEb9xw5N.js → overlay.confirm-body-CYShkjI6.js} +1 -1
- package/dist/{overlay.confirm-body-DEb9xw5N.js.map → overlay.confirm-body-CYShkjI6.js.map} +1 -1
- package/dist/overlay.js +3 -3
- package/dist/{overlay.service-CKBCIP2f.cjs → overlay.service-BTPn7Uv7.cjs} +1 -1
- package/dist/{overlay.service-CKBCIP2f.cjs.map → overlay.service-BTPn7Uv7.cjs.map} +1 -1
- package/dist/{overlay.service-XM1YHkTk.js → overlay.service-BqhhxVJp.js} +2 -2
- package/dist/{overlay.service-XM1YHkTk.js.map → overlay.service-BqhhxVJp.js.map} +1 -1
- package/dist/{progress-CnMPp-9a.js → progress-8Bn88GK_.js} +1 -1
- package/dist/{progress-CnMPp-9a.js.map → progress-8Bn88GK_.js.map} +1 -1
- package/dist/{progress-CcfLfHOE.cjs → progress-CAp_4jtq.cjs} +1 -1
- package/dist/{progress-CcfLfHOE.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-D97hflrE.cjs → radio-group-CN44mAoc.cjs} +1 -1
- package/dist/{radio-group-D97hflrE.cjs.map → radio-group-CN44mAoc.cjs.map} +1 -1
- package/dist/{radio-group-BUJgfQFi.js → radio-group-GNHA7qJR.js} +1 -1
- package/dist/{radio-group-BUJgfQFi.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-BWEh5nRM.js → select-BnuXRHS4.js} +3 -3
- package/dist/{select-BWEh5nRM.js.map → select-BnuXRHS4.js.map} +1 -1
- package/dist/{select-Cv5Oev6d.cjs → select-DZNns5Pa.cjs} +2 -2
- package/dist/{select-Cv5Oev6d.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-B6w7X2z9.js → splash-screen-CUP_elaT.js} +1 -1
- package/dist/{splash-screen-B6w7X2z9.js.map → splash-screen-CUP_elaT.js.map} +1 -1
- package/dist/{splash-screen-DFtxtO2D.cjs → splash-screen-DeoPRrOu.cjs} +1 -1
- package/dist/{splash-screen-DFtxtO2D.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-D_NK-vMA.js → src-B1VkLX3l.js} +153 -153
- package/dist/{src-D_NK-vMA.js.map → src-B1VkLX3l.js.map} +1 -1
- package/dist/{src-Asw6A018.cjs → src-DQ4wr0qq.cjs} +13 -13
- package/dist/{src-Asw6A018.cjs.map → src-DQ4wr0qq.cjs.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{surface-B94ka2LY.cjs → surface-LkaZQXZn.cjs} +1 -1
- package/dist/{surface-B94ka2LY.cjs.map → surface-LkaZQXZn.cjs.map} +1 -1
- package/dist/{surface-ctBcRGSZ.js → surface-hOvkrjGN.js} +1 -1
- package/dist/{surface-ctBcRGSZ.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 +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-CrMx5z_y.js → tabs-CfwIHhHo.js} +1 -1
- package/dist/{tabs-CrMx5z_y.js.map → tabs-CfwIHhHo.js.map} +1 -1
- package/dist/{tabs-B7kaZIom.cjs → tabs-bplzstz6.cjs} +1 -1
- package/dist/{tabs-B7kaZIom.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-DeHFl80i.js → textarea-C1A5xuw9.js} +1 -1
- package/dist/{textarea-DeHFl80i.js.map → textarea-C1A5xuw9.js.map} +1 -1
- package/dist/{textarea-D1crj8JD.cjs → textarea-hrDp5gQq.cjs} +1 -1
- package/dist/{textarea-D1crj8JD.cjs.map → textarea-hrDp5gQq.cjs.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-C7Yo33nh.js → theme-BniFOMEo.js} +3 -3
- package/dist/{theme-C7Yo33nh.js.map → theme-BniFOMEo.js.map} +1 -1
- package/dist/{theme-wE2N7Yu9.cjs → theme-DmR6PKV8.cjs} +2 -2
- package/dist/{theme-wE2N7Yu9.cjs.map → theme-DmR6PKV8.cjs.map} +1 -1
- package/dist/{theme-button-Cpc_hs2O.js → theme-button--ruZIb0T.js} +1 -1
- package/dist/{theme-button-Cpc_hs2O.js.map → theme-button--ruZIb0T.js.map} +1 -1
- package/dist/{theme-button-CXSM5We4.cjs → theme-button-a0LgZ7hQ.cjs} +1 -1
- package/dist/{theme-button-CXSM5We4.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-JtkeHoxS.js → window-BT9JecWy.js} +5 -5
- package/dist/{window-JtkeHoxS.js.map → window-BT9JecWy.js.map} +1 -1
- package/dist/{window-Ck_zS4bb.cjs → window-Bp7zWZpu.cjs} +1 -1
- package/dist/{window-Ck_zS4bb.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/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/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/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-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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button-DEi3M2nV.js","names":[],"sources":["../src/button/context.ts","../src/button/button.ts","../src/button/icon-button.ts"],"sourcesContent":["import { createContext } from '@lit/context'\n\nexport type SchmancyButtonSize = 'xxs' | 'xs' | 'sm' | 'md' | 'lg'\n\n/**\n * Provided by `<schmancy-button>` to its descendants so children\n * (e.g. `<schmancy-icon>`) can auto-size against the enclosing button.\n */\nexport const SchmancyButtonSizeContext = createContext<SchmancyButtonSize>('schmancy-button-size')\n","import { provide } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, queryAssignedElements } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { when } from 'lit/directives/when.js'\nimport { magnetic } from '../directives/magnetic'\nimport { SchmancyButtonSizeContext, type SchmancyButtonSize } from './context'\n\nexport interface SchmancyButtonEventMap {\n\tSchmancyFocus: CustomEvent<void>\n\tSchmancyBlur: CustomEvent<void>\n}\n\nexport type ButtonVariant = 'elevated' | 'filled' | 'filled tonal' | 'tonal' | 'outlined' | 'text'\nexport type ButtonColor = 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info' | 'neutral'\n\n/**\n * A button component.\n * @element schmancy-button\n * @slot - The default slot.\n * @slot prefix - The prefix slot.\n * @slot suffix - The suffix slot.\n * @csspart base - The underlying native `<button>` (or `<a>` when `href` is set).\n */\n@customElement('schmancy-button')\nexport class SchmancyButton extends SchmancyElement {\n\tstatic styles = [css`:host{\n\t\tdisplay: inline-flex;\n\t\toverflow: hidden;\n\t\tposition: relative;\n\t\ttouch-action: manipulation;\n\t\tborder-radius: 1rem;\n\t\ttransition:\n\t\t\tbox-shadow 300ms cubic-bezier(0.34, 1.56, 0.64, 1),\n\t\t\ttransform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t}\n\t:host([width=\"full\"]) {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t}\n\t:host(:hover:not([disabled])) {\n\t\tbox-shadow: 0 4px 16px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 20%, transparent);\n\t}\n\t:host(:active:not([disabled])) {\n\t\ttransform: scale(0.97);\n\t\tbox-shadow: 0 1px 4px -2px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 10%, transparent);\n\t\ttransition-duration: 100ms;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t:host { transition: none; }\n\t\t:host(:hover:not([disabled])) { box-shadow: none; }\n\t\t:host(:active:not([disabled])) { transform: none; box-shadow: none; }\n\t}\n\t:host *,\n\t* {\n\t\ttouch-action: manipulation;\n\t}`]\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: true,\n\t}\n\n\tstatic formAssociated = true\n\tprivate internals: ElementInternals | undefined\n\t/**\n\t * When this button is `type=\"submit\"` and lives inside a <schmancy-form>,\n\t * the observer mirrors the form's `aria-busy` attribute onto this button\n\t * while a submit is in flight. Stays focusable; disabled buttons drop from\n\t * the tab order and are unreachable to AT (WCAG 2.2 AA).\n\t */\n\tprivate _formBusyObserver?: MutationObserver\n\n\tconstructor() {\n\t\tsuper()\n\t\ttry {\n\t\t\tthis.internals = this.attachInternals()\n\t\t} catch {\n\t\t\tthis.internals = undefined\n\t\t}\n\t\t// Translate clicks into native form semantics so the button works\n\t\t// inside any <form>, not just inside <schmancy-form>.\n\t\tthis.addEventListener('click', (e: MouseEvent) => {\n\t\t\tif (this.disabled) {\n\t\t\t\te.preventDefault()\n\t\t\t\te.stopImmediatePropagation()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst form = this.internals?.form\n\t\t\tif (!form) return\n\t\t\tif (this.type === 'submit') {\n\t\t\t\te.preventDefault()\n\t\t\t\tform.requestSubmit()\n\t\t\t} else if (this.type === 'reset') {\n\t\t\t\te.preventDefault()\n\t\t\t\tform.reset()\n\t\t\t}\n\t\t})\n\t}\n\n\t/** Associated form, when placed inside a <form>. */\n\tget form(): HTMLFormElement | null {\n\t\treturn this.internals?.form ?? null\n\t}\n\n\tformDisabledCallback(disabled: boolean): void {\n\t\tthis.disabled = disabled\n\t}\n\n\toverride connectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\t// Mirror the closest <schmancy-form>'s aria-busy onto this submit button\n\t\t// so the user gets a visible busy state during async submit handlers.\n\t\t// Schmancy-form sets aria-busy=\"true\" while status === 'submitting'.\n\t\tif (this.type !== 'submit') return\n\t\tconst form = this.closest('schmancy-form') as HTMLElement | null\n\t\tif (!form) return\n\t\tconst sync = () => {\n\t\t\tconst busy = form.getAttribute('aria-busy') === 'true'\n\t\t\tif (busy) {\n\t\t\t\tthis.setAttribute('aria-busy', 'true')\n\t\t\t\tthis.internals?.states.add('submitting')\n\t\t\t} else {\n\t\t\t\tthis.removeAttribute('aria-busy')\n\t\t\t\tthis.internals?.states.delete('submitting')\n\t\t\t}\n\t\t}\n\t\tsync()\n\t\tthis._formBusyObserver = new MutationObserver(sync)\n\t\tthis._formBusyObserver.observe(form, { attributes: true, attributeFilter: ['aria-busy'] })\n\t}\n\n\toverride disconnectedCallback(): void {\n\t\tthis._formBusyObserver?.disconnect()\n\t\tthis._formBusyObserver = undefined\n\t\tsuper.disconnectedCallback()\n\t}\n\n\t@query('[part=\"base\"]', true)\n\tprivate nativeElement!: HTMLElement\n\n\tprivate _ariaLabel!: string\n\n\t/**\n\t * The variant of the button.\n\t * @attr\n\t * @default 'text'\n\t * @public\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic variant: ButtonVariant = 'text'\n\n\t/**\n\t * The color of the button.\n\t * @attr\n\t * @default Depends on variant: 'primary' for filled/elevated/outlined/text, 'secondary' for tonal\n\t * @public\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic color?: ButtonColor\n\n\t/**\n\t * The width of the button.\n\t * @attr\n\t * @type {'full' | 'auto'}\n\t * @default 'auto'\n\t * @public\n\t */\n\t@property({ reflect: true })\n\tpublic width: 'full' | 'auto' = 'auto'\n\n\t/**\n\t * The size of the button.\n\t * Provided as `SchmancyButtonSizeContext` to descendant elements so children\n\t * (e.g. `<schmancy-icon>`) can auto-size against the enclosing button.\n\t * @attr\n\t * @type {'xxs' | 'xs' | 'sm' | 'md' | 'lg'}\n\t * @default 'md'\n\t * @public\n\t */\n\t@provide({ context: SchmancyButtonSizeContext })\n\t@property({ type: String })\n\tpublic size: SchmancyButtonSize = 'md'\n\n\t/**\n\t * The type of the button.\n\t * Defaults to 'button' (preventing accidental form submissions).\n\t * @attr\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic type: 'button' | 'reset' | 'submit' = 'button'\n\n\t/**\n\t * The URL the button points to.\n\t * If provided, the component will render as an anchor element.\n\t * @attr\n\t */\n\t@property()\n\tpublic href?: string\n\n\t/**\n\t * Determines whether the button is disabled.\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tpublic disabled = false\n\n\tpublic override set ariaLabel(value: string) {\n\t\tconst oldVal = this._ariaLabel\n\t\tthis._ariaLabel = value\n\n\t\tif (this.hasAttribute('aria-label')) {\n\t\t\tthis.removeAttribute('aria-label')\n\t\t}\n\t\tthis.requestUpdate('ariaLabel', oldVal)\n\t}\n\n\t@property({ attribute: 'aria-label' })\n\tpublic override get ariaLabel() {\n\t\treturn this._ariaLabel\n\t}\n\n\t@queryAssignedElements({\n\t\tslot: 'prefix',\n\t\tflatten: true,\n\t\tselector: 'img',\n\t})\n\tprivate prefixImgs!: HTMLImageElement[]\n\n\t@queryAssignedElements({\n\t\tslot: 'suffix',\n\t\tflatten: true,\n\t\tselector: 'img',\n\t})\n\tprivate suffixImgs!: HTMLImageElement[]\n\n\t/** Sets focus in the button. */\n\tpublic override focus(options?: FocusOptions) {\n\t\tthis.nativeElement.focus(options)\n\t}\n\n\t/** Removes focus from the button. */\n\tpublic override blur() {\n\t\tthis.nativeElement.blur()\n\t}\n\n\t/**\n\t * Get the effective color based on variant if not explicitly set\n\t * M3 spec: filled = primary, tonal = secondary, others = primary\n\t */\n\tprotected get effectiveColor(): ButtonColor {\n\t\tif (this.color) return this.color\n\n\t\t// Map 'tonal' to 'filled tonal' for checking\n\t\tconst effectiveVariant = this.variant === 'tonal' ? 'filled tonal' : this.variant\n\n\t\t// M3 defaults: tonal uses secondary, others use primary\n\t\treturn effectiveVariant === 'filled tonal' ? 'secondary' : 'primary'\n\t}\n\n\tprotected get imgClasses(): string[] {\n\t\t// M3 spec: icon sizes scale with button size\n\t\tconst sizeMap = {\n\t\t\txxs: 'w-3 h-3', // 12px for 24px button (ultra-compact)\n\t\t\txs: 'w-4 h-4', // 16px for 32px button (M3 dense)\n\t\t\tsm: 'w-5 h-5', // 20px for 40px button (M3 default)\n\t\t\tmd: 'w-6 h-6', // 24px for 48px button (M3 large)\n\t\t\tlg: 'w-7 h-7' // 28px for 56px button (M3 extra large)\n\t\t}\n\t\treturn [sizeMap[this.size], 'object-contain']\n\t}\n\n\tfirstUpdated() {\n\t\t// Add image classes and ensure decorative images have an empty alt.\n\t\tthis.prefixImgs?.forEach(img => {\n\t\t\timg.classList.add(...this.imgClasses)\n\t\t\tif (!img.hasAttribute('alt')) {\n\t\t\t\timg.setAttribute('alt', '')\n\t\t\t}\n\t\t})\n\t\tthis.suffixImgs?.forEach(img => {\n\t\t\timg.classList.add(...this.imgClasses)\n\t\t\tif (!img.hasAttribute('alt')) {\n\t\t\t\timg.setAttribute('alt', '')\n\t\t\t}\n\t\t})\n\t}\n\n\tclick(): void {\n\t\tthis.dispatchEvent(new Event('click', { bubbles: true, composed: true }))\n\t}\n\n\t// Prevent default behavior when the component is disabled.\n\tprivate _preventDefault(event: Event) {\n\t\tevent.preventDefault()\n\t\tevent.stopPropagation()\n\t}\n\n\trender() {\n\t\t// Map 'tonal' variant to 'filled tonal' for backwards compatibility\n\t\tconst effectiveVariant = this.variant === 'tonal' ? 'filled tonal' : this.variant;\n\n\t\t// Compute classes for the interactive element.\n\t\tconst classes = {\n\t\t\t'z-0 transition-all duration-200 relative rounded-2xl flex justify-center items-center outline-secondary-default focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 outline-hidden flex-1 overflow-hidden':\n\t\t\t\ttrue,\n\t\t\t// Height - M3 spec: 24dp (xxs) → 32dp (dense) → 40dp (default) → 48dp (large) → 56dp (XL)\n\t\t\t'h-6': this.size === 'xxs', // 24px - Ultra-compact\n\t\t\t'h-8': this.size === 'xs', // 32px - M3 dense/compact\n\t\t\t'h-10': this.size === 'sm', // 40px - M3 default\n\t\t\t'h-12': this.size === 'md', // 48px - M3 large\n\t\t\t'h-14': this.size === 'lg', // 56px - M3 extra large\n\t\t\t// Padding - M3 spec: horizontal padding 24dp default, scaled proportionally\n\t\t\t'py-1 px-2': this.size === 'xxs', // 4px/8px for 24px height\n\t\t\t'py-2 px-4': this.size === 'xs', // 8px/16px for 32px height\n\t\t\t'py-2.5 px-5': this.size === 'sm', // 10px/20px for 40px height\n\t\t\t'py-3 px-6': this.size === 'md', // 12px/24px for 48px height (M3 default)\n\t\t\t'py-4 px-7': this.size === 'lg', // 16px/28px for 56px height\n\t\t\t// Typography - M3 spec: label-large (14px) default, scaled\n\t\t\t'text-[10px] font-medium leading-3': this.size === 'xxs', // 10px\n\t\t\t'text-xs font-medium leading-4': this.size === 'xs', // 12px\n\t\t\t'text-sm font-medium leading-5': this.size === 'sm' || this.size === 'md', // 14px - M3 label-large\n\t\t\t'text-base font-medium leading-6': this.size === 'lg', // 16px\n\t\t\t// Letter spacing - M3 spec\n\t\t\t'tracking-[0.1px]': true,\n\t\t\t// Gap - Scaled with size\n\t\t\t'gap-0.5': this.size === 'xxs', // 2px\n\t\t\t'gap-1': this.size === 'xs', // 4px\n\t\t\t'gap-1.5': this.size === 'sm', // 6px\n\t\t\t'gap-2': this.size === 'md', // 8px\n\t\t\t'gap-2.5': this.size === 'lg', // 10px\n\t\t\t'cursor-pointer': !this.disabled,\n\t\t\t'opacity-[0.38]': this.disabled,\n\t\t\t'hover:shadow-sm': !this.disabled && effectiveVariant === 'elevated',\n\t\t\t'w-full tex-center': this.width === 'full',\n\t\t\t// Elevated variant\n\t\t\t'bg-surface-low shadow-xs': effectiveVariant === 'elevated',\n\t\t\t// Outlined variant\n\t\t\t'bg-transparent border-1 border-solid': effectiveVariant === 'outlined',\n\t\t\t'border-outline': effectiveVariant === 'outlined' && this.effectiveColor === 'primary',\n\t\t\t'border-success-default': effectiveVariant === 'outlined' && this.effectiveColor === 'success',\n\t\t\t'border-error-default': effectiveVariant === 'outlined' && this.effectiveColor === 'error',\n\t\t\t'border-warning-default': effectiveVariant === 'outlined' && this.effectiveColor === 'warning',\n\t\t\t'border-info-default': effectiveVariant === 'outlined' && this.effectiveColor === 'info',\n\t\t\t'border-secondary-default': effectiveVariant === 'outlined' && this.effectiveColor === 'secondary',\n\t\t\t'border-outline-variant': effectiveVariant === 'outlined' && this.effectiveColor === 'neutral',\n\t\t\t// Filled variant - background colors\n\t\t\t'bg-primary-default': effectiveVariant === 'filled' && this.effectiveColor === 'primary',\n\t\t\t'bg-secondary-default': effectiveVariant === 'filled' && this.effectiveColor === 'secondary',\n\t\t\t'bg-success-default': effectiveVariant === 'filled' && this.effectiveColor === 'success',\n\t\t\t'bg-error-default': effectiveVariant === 'filled' && this.effectiveColor === 'error',\n\t\t\t'bg-warning-default': effectiveVariant === 'filled' && this.effectiveColor === 'warning',\n\t\t\t'bg-info-default': effectiveVariant === 'filled' && this.effectiveColor === 'info',\n\t\t\t'bg-surface-containerHighest': effectiveVariant === 'filled' && this.effectiveColor === 'neutral',\n\t\t\t// Filled variant - text colors\n\t\t\t'text-primary-on': effectiveVariant === 'filled' && this.effectiveColor === 'primary',\n\t\t\t'text-secondary-on': effectiveVariant === 'filled' && this.effectiveColor === 'secondary',\n\t\t\t'text-success-on': effectiveVariant === 'filled' && this.effectiveColor === 'success',\n\t\t\t'text-error-on': effectiveVariant === 'filled' && this.effectiveColor === 'error',\n\t\t\t'text-warning-on': effectiveVariant === 'filled' && this.effectiveColor === 'warning',\n\t\t\t'text-info-on': effectiveVariant === 'filled' && this.effectiveColor === 'info',\n\t\t\t'text-surface-on': effectiveVariant === 'filled' && this.effectiveColor === 'neutral',\n\t\t\t// Filled tonal variant - background colors\n\t\t\t'bg-primary-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'primary',\n\t\t\t'bg-secondary-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'secondary',\n\t\t\t'bg-success-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'success',\n\t\t\t'bg-error-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'error',\n\t\t\t'bg-warning-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'warning',\n\t\t\t'bg-info-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'info',\n\t\t\t'bg-surface-containerLow': effectiveVariant === 'filled tonal' && this.effectiveColor === 'neutral',\n\t\t\t// Filled tonal variant - text colors\n\t\t\t'text-primary-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'primary',\n\t\t\t'text-secondary-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'secondary',\n\t\t\t'text-success-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'success',\n\t\t\t'text-error-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'error',\n\t\t\t'text-warning-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'warning',\n\t\t\t'text-info-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'info',\n\t\t\t// Text and elevated variants - text colors\n\t\t\t'text-primary-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'primary',\n\t\t\t'text-secondary-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'secondary',\n\t\t\t'text-success-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'success',\n\t\t\t'text-error-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'error',\n\t\t\t'text-warning-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'warning',\n\t\t\t'text-info-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'info',\n\t\t\t'text-surface-onVariant': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined' || effectiveVariant === 'filled tonal') && this.effectiveColor === 'neutral',\n\t\t}\n\n\t\tconst stateLayerClasses = {\n\t\t\t'absolute inset-0 hover:opacity-[0.08] z-0 rounded-2xl': true,\n\t\t\t// M3 focus and pressed states\n\t\t\t'focus-visible:opacity-[0.10]': true, // M3 focus state\n\t\t\t'active:opacity-[0.10]': true, // M3 pressed state\n\t\t\t// Filled variant hover\n\t\t\t'hover:bg-primary-on': effectiveVariant === 'filled' && this.effectiveColor === 'primary',\n\t\t\t'hover:bg-secondary-on': effectiveVariant === 'filled' && this.effectiveColor === 'secondary',\n\t\t\t'hover:bg-success-on': effectiveVariant === 'filled' && this.effectiveColor === 'success',\n\t\t\t'hover:bg-error-on': effectiveVariant === 'filled' && this.effectiveColor === 'error',\n\t\t\t'hover:bg-warning-on': effectiveVariant === 'filled' && this.effectiveColor === 'warning',\n\t\t\t'hover:bg-info-on': effectiveVariant === 'filled' && this.effectiveColor === 'info',\n\t\t\t'hover:bg-surface-on': effectiveVariant === 'filled' && this.effectiveColor === 'neutral',\n\t\t\t// Outlined, elevated, text variants hover\n\t\t\t'hover:bg-primary-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'primary',\n\t\t\t'hover:bg-secondary-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'secondary',\n\t\t\t'hover:bg-success-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'success',\n\t\t\t'hover:bg-error-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'error',\n\t\t\t'hover:bg-warning-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'warning',\n\t\t\t'hover:bg-info-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'info',\n\t\t\t'hover:bg-surface-onVariant': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'neutral',\n\t\t\t// Filled tonal hover\n\t\t\t'hover:bg-primary-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'primary',\n\t\t\t'hover:bg-secondary-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'secondary',\n\t\t\t'hover:bg-success-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'success',\n\t\t\t'hover:bg-error-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'error',\n\t\t\t'hover:bg-warning-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'warning',\n\t\t\t'hover:bg-info-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'info',\n\t\t\t'hover:bg-surface-containerLow': effectiveVariant === 'filled tonal' && this.effectiveColor === 'neutral',\n\t\t}\n\n\t\t// If href is provided, render an anchor element.\n\t\tif (this.href) {\n\t\t\treturn html`\n\t\t\t\t<a\n\t\t\t\t\t${magnetic({ strength: 3, radius: 60 })}\n\t\t\t\t\tpart=\"base\"\n\t\t\t\t\thref=${ifDefined(this.disabled ? undefined : this.href)}\n\t\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\t\ttabindex=${this.disabled ? '-1' : '0'}\n\t\t\t\t\taria-disabled=${this.disabled}\n\t\t\t\t\t@click=${this.disabled ? this._preventDefault : undefined}\n\t\t\t\t>\n\t\t\t\t\t${when(!this.disabled, () => html`<div class=\"${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t\t<slot name=\"prefix\"></slot>\n\t\t\t\t\t<slot></slot>\n\t\t\t\t\t<slot name=\"suffix\"></slot>\n\t\t\t\t</a>\n\t\t\t`\n\t\t}\n\n\t\t// Otherwise, render a native button element.\n\t\treturn html`\n\t\t\t<button\n\t\t\t\t${magnetic({ strength: 3, radius: 60 })}\n\t\t\t\tpart=\"base\"\n\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t?disabled=${this.disabled}\n\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\ttype=${ifDefined(this.type)}\n\t\t\t\ttabindex=${ifDefined(this.disabled ? '-1' : undefined)}\n\t\t\t>\n\t\t\t\t${when(!this.disabled, () => html`<div class=\"${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t<slot name=\"prefix\"></slot>\n\t\t\t\t<slot></slot>\n\t\t\t\t<slot name=\"suffix\"></slot>\n\t\t\t</button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-button': SchmancyButton\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html, LitElement, PropertyValueMap } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { when } from 'lit/directives/when.js'\nimport { magnetic } from '../directives/magnetic'\nimport { ButtonVariant } from './button'\n\n/**\n * An icon button component.\n * @element schmancy-icon-button\n * @slot - The default slot (usually an icon or glyph).\n * @csspart base - The underlying native `<button>` (or `<a>` when `href` is set).\n */\n@customElement('schmancy-icon-button')\nexport class SchmnacyIconButton extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: inline-flex;\n\t\tborder-radius: 9999px;\n\t\ttransition:\n\t\t\tbox-shadow 300ms cubic-bezier(0.34, 1.56, 0.64, 1),\n\t\t\ttransform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t}\n\t:host([width=\"full\"]) {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t}\n\t:host(:hover:not([disabled])) {\n\t\tbox-shadow: 0 2px 12px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 18%, transparent);\n\t}\n\t:host(:active:not([disabled])) {\n\t\ttransform: scale(0.92);\n\t\tbox-shadow: none;\n\t\ttransition-duration: 100ms;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t:host { transition: none; }\n\t\t:host(:hover:not([disabled])) { box-shadow: none; }\n\t\t:host(:active:not([disabled])) { transform: none; box-shadow: none; }\n\t}\n`]\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: true,\n\t}\n\n\t@query('[part=\"base\"]', true)\n\tprivate nativeElement!: HTMLElement\n\n\tprivate _ariaLabel!: string\n\n\t/**\n\t * The size of the icon.\n\t * @attr\n\t * @default 'md'\n\t */\n\t@property({ type: String })\n\tpublic size: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'md'\n\n\t/**\n\t * The variant of the button.\n\t * @attr\n\t * @default 'text'\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic variant: ButtonVariant = 'text'\n\n\t/**\n\t * The width of the button.\n\t * @attr\n\t * @type {'full' | 'auto'}\n\t * @default 'auto'\n\t */\n\t@property({ reflect: true })\n\tpublic width: 'full' | 'auto' = 'auto'\n\n\t/**\n\t * The type of the button.\n\t * Defaults to 'button' (preventing accidental form submissions).\n\t * @attr\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic type: 'button' | 'reset' | 'submit' = 'button'\n\n\t/**\n\t * The URL the button points to.\n\t * If provided, the component will render as an anchor element.\n\t * @attr\n\t */\n\t@property()\n\tpublic href?: string\n\n\t/**\n\t * Determines whether the button is disabled.\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tpublic disabled = false\n\n\t/**\n\t * Render slot content as text instead of wrapping in schmancy-icon.\n\t * Use this when you want to display text labels in the button.\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tpublic text = false\n\n\t/**\n\t * Icon name - use this instead of slot content to prevent translation breaking icons.\n\t * Example: <schmancy-icon-button icon=\"add\"></schmancy-icon-button>\n\t * @attr\n\t */\n\t@property({ type: String })\n\tpublic icon?: string\n\n\t// Reactively captured icon name from slot content (translation-proof)\n\t@state()\n\tprivate _capturedIcon?: string\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\t// Pre-capture icon from children to avoid double render flash\n\t\tthis._captureIconFromChildren()\n\t}\n\n\t// Capture icon from direct children (for initial render)\n\tprivate _captureIconFromChildren(): void {\n\t\tif (this.icon || this.text) return\n\t\tfor (const node of this.childNodes) {\n\t\t\tif (node.nodeType === Node.TEXT_NODE) {\n\t\t\t\tconst text = node.textContent?.trim()\n\t\t\t\tif (text) {\n\t\t\t\t\tthis._capturedIcon = text\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Handle slot content changes reactively (for dynamic updates)\n\tprivate _handleSlotChange(e: Event): void {\n\t\tif (this.icon || this.text) return\n\t\tconst slot = e.target as HTMLSlotElement\n\t\tconst nodes = slot.assignedNodes({ flatten: true })\n\t\tfor (const node of nodes) {\n\t\t\tif (node.nodeType === Node.TEXT_NODE) {\n\t\t\t\tconst text = node.textContent?.trim()\n\t\t\t\tif (text) {\n\t\t\t\t\tthis._capturedIcon = text\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Manage aria-label manually so that we can always use our internal property.\n\tpublic override set ariaLabel(value: string) {\n\t\tconst oldVal = this._ariaLabel\n\t\tthis._ariaLabel = value\n\n\t\tif (this.hasAttribute('aria-label')) {\n\t\t\tthis.removeAttribute('aria-label')\n\t\t}\n\t\tthis.requestUpdate('ariaLabel', oldVal)\n\t}\n\n\t@property({ attribute: 'aria-label' })\n\tpublic override get ariaLabel() {\n\t\treturn this._ariaLabel\n\t}\n\n\t/** Sets focus in the button. */\n\tpublic override focus(options?: FocusOptions) {\n\t\tthis.nativeElement.focus(options)\n\t}\n\n\t/** Removes focus from the button. */\n\tpublic override blur() {\n\t\tthis.nativeElement.blur()\n\t}\n\n\tclick(): void {\n\t\tthis.dispatchEvent(new Event('click', { bubbles: true, composed: true }))\n\t}\n\n\t// Prevent default behavior when the component is disabled.\n\tprivate _preventDefault(event: Event) {\n\t\tevent.preventDefault()\n\t\tevent.stopPropagation()\n\t}\n\n\tprotected firstUpdated(_changedProperties: PropertyValueMap<unknown> | Map<PropertyKey, unknown>): void {\n\t\t// Add any first-update logic here if needed.\n\t}\n\n\trender() {\n\t\t// Map 'tonal' variant to 'filled tonal' for backwards compatibility\n\t\tconst effectiveVariant = this.variant === 'tonal' ? 'filled tonal' : this.variant;\n\n\t\t// Compute classes for the interactive element.\n\t\tconst classes = {\n\t\t\t'z-0 h-full transition-all duration-200 relative rounded-full inline-flex justify-center items-center gap-[8px] outline-secondary-default focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 outline-hidden':\n\t\t\t\ttrue,\n\t\t\t'opacity-[0.38]': this.disabled,\n\t\t\t'cursor-pointer': !this.disabled,\n\t\t\t'hover:shadow-xs':\n\t\t\t\t!this.disabled &&\n\t\t\t\t(effectiveVariant === 'outlined' ||\n\t\t\t\t\teffectiveVariant === 'text' ||\n\t\t\t\t\teffectiveVariant === 'filled' ||\n\t\t\t\t\teffectiveVariant === 'filled tonal'),\n\t\t\t'hover:shadow-sm': !this.disabled && effectiveVariant === 'elevated',\n\t\t\t'flex-1 text-center': this.width === 'full',\n\t\t\t'bg-surface-low text-primary-default shadow-xs': effectiveVariant === 'elevated',\n\t\t\t'bg-transparent text-primary-default border-1 border-outline': effectiveVariant === 'outlined',\n\t\t\t'bg-primary-default text-primary-on': effectiveVariant === 'filled',\n\t\t\t'bg-secondary-container text-secondary-onContainer': effectiveVariant === 'filled tonal',\n\t\t\t'text-primary-default': effectiveVariant === 'text',\n\t\t\t// M3 spec: 24dp (xxs) → 32dp (dense) → 40dp (default) → 48dp (standard) → 56dp (large)\n\t\t\t'p-1.5': this.size === 'xxs', // 6px padding = 24px total (12px icon) - Ultra-compact\n\t\t\t'p-2': this.size === 'xs', // 8px padding = 32px total (16px icon) - M3 dense\n\t\t\t'p-2.5': this.size === 'sm', // 10px padding = 40px total (20px icon) - M3 default\n\t\t\t'p-3': this.size === 'md', // 12px padding = 48px total (24px icon) - M3 standard\n\t\t\t'p-4': this.size === 'lg', // 16px padding = 56px total (24px icon) - M3 large\n\t\t\t'p-5': this.size === 'xl', // 20px padding = 80px total (40px icon) - custom XL\n\t\t}\n\n\t\tconst stateLayerClasses = {\n\t\t\t'hover:opacity-[0.08] rounded-full z-0': true,\n\t\t\t'hover:bg-primary-on': effectiveVariant === 'filled',\n\t\t\t'hover:bg-primary-default': effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text',\n\t\t\t'hover:bg-secondary-container': effectiveVariant === 'filled tonal',\n\t\t}\n\n\t\tconst iconSizeClass = this.size === 'xxs' ? 'text-xs' : this.size === 'xs' ? 'text-base' : this.size === 'sm' ? 'text-xl' : this.size === 'md' ? 'text-2xl' : this.size === 'lg' ? 'text-2xl' : 'text-4xl';\n\n\t\t// If href is provided, render an anchor element.\n\t\tif (this.href) {\n\t\t\treturn html`\n\t\t\t\t<a\n\t\t\t\t\t${magnetic({ strength: 3, radius: 50 })}\n\t\t\t\t\tpart=\"base\"\n\t\t\t\t\thref=${ifDefined(this.disabled ? undefined : this.href)}\n\t\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\t\ttabindex=${this.disabled ? '-1' : '0'}\n\t\t\t\t\taria-disabled=${this.disabled}\n\t\t\t\t\t@click=${this.disabled ? this._preventDefault : undefined}\n\t\t\t\t>\n\t\t\t\t\t${when(!this.disabled, () => html`<div class=\"absolute inset-0 ${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t\t${this.text\n\t\t\t\t\t\t? html`<slot></slot>`\n\t\t\t\t\t\t: html`\n\t\t\t\t\t\t\t<slot style=\"display:none\" @slotchange=${this._handleSlotChange}></slot>\n\t\t\t\t\t\t\t<schmancy-icon class=${iconSizeClass}>${this.icon || this._capturedIcon}</schmancy-icon>\n\t\t\t\t\t\t`\n\t\t\t\t\t}\n\t\t\t\t</a>\n\t\t\t`\n\t\t}\n\n\t\t// Otherwise, render a native button element.\n\t\treturn html`\n\t\t\t<button\n\t\t\t\t${magnetic({ strength: 3, radius: 50 })}\n\t\t\t\tpart=\"base\"\n\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t?disabled=${this.disabled}\n\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\ttype=${ifDefined(this.type)}\n\t\t\t\ttabindex=${ifDefined(this.disabled ? '-1' : undefined)}\n\t\t\t>\n\t\t\t\t${when(!this.disabled, () => html`<div class=\"absolute inset-0 ${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t${this.text\n\t\t\t\t\t? html`<slot></slot>`\n\t\t\t\t\t: html`\n\t\t\t\t\t\t<slot style=\"display:none\" @slotchange=${this._handleSlotChange}></slot>\n\t\t\t\t\t\t<schmancy-icon class=${iconSizeClass}>${this.icon || this._capturedIcon}</schmancy-icon>\n\t\t\t\t\t`\n\t\t\t\t}\n\t\t\t</button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-icon-button': SchmnacyIconButton\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"button-D9UJ7I6Z.js","names":[],"sources":["../src/button/context.ts","../src/button/button.ts","../src/button/icon-button.ts"],"sourcesContent":["import { createContext } from '@lit/context'\n\nexport type SchmancyButtonSize = 'xxs' | 'xs' | 'sm' | 'md' | 'lg'\n\n/**\n * Provided by `<schmancy-button>` to its descendants so children\n * (e.g. `<schmancy-icon>`) can auto-size against the enclosing button.\n */\nexport const SchmancyButtonSizeContext = createContext<SchmancyButtonSize>('schmancy-button-size')\n","import { provide } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, queryAssignedElements } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { when } from 'lit/directives/when.js'\nimport { magnetic } from '../directives/magnetic'\nimport { SchmancyButtonSizeContext, type SchmancyButtonSize } from './context'\n\nexport interface SchmancyButtonEventMap {\n\tSchmancyFocus: CustomEvent<void>\n\tSchmancyBlur: CustomEvent<void>\n}\n\nexport type ButtonVariant = 'elevated' | 'filled' | 'filled tonal' | 'tonal' | 'outlined' | 'text'\nexport type ButtonColor = 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info' | 'neutral'\n\n/**\n * A button component.\n * @element schmancy-button\n * @slot - The default slot.\n * @slot prefix - The prefix slot.\n * @slot suffix - The suffix slot.\n * @csspart base - The underlying native `<button>` (or `<a>` when `href` is set).\n */\n@customElement('schmancy-button')\nexport class SchmancyButton extends SchmancyElement {\n\tstatic styles = [css`:host{\n\t\tdisplay: inline-flex;\n\t\toverflow: hidden;\n\t\tposition: relative;\n\t\ttouch-action: manipulation;\n\t\tborder-radius: 1rem;\n\t\ttransition:\n\t\t\tbox-shadow 300ms cubic-bezier(0.34, 1.56, 0.64, 1),\n\t\t\ttransform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t}\n\t:host([width=\"full\"]) {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t}\n\t:host(:hover:not([disabled])) {\n\t\tbox-shadow: 0 4px 16px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 20%, transparent);\n\t}\n\t:host(:active:not([disabled])) {\n\t\ttransform: scale(0.97);\n\t\tbox-shadow: 0 1px 4px -2px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 10%, transparent);\n\t\ttransition-duration: 100ms;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t:host { transition: none; }\n\t\t:host(:hover:not([disabled])) { box-shadow: none; }\n\t\t:host(:active:not([disabled])) { transform: none; box-shadow: none; }\n\t}\n\t:host *,\n\t* {\n\t\ttouch-action: manipulation;\n\t}`]\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: true,\n\t}\n\n\tstatic formAssociated = true\n\tprivate internals: ElementInternals | undefined\n\t/**\n\t * When this button is `type=\"submit\"` and lives inside a <schmancy-form>,\n\t * the observer mirrors the form's `aria-busy` attribute onto this button\n\t * while a submit is in flight. Stays focusable; disabled buttons drop from\n\t * the tab order and are unreachable to AT (WCAG 2.2 AA).\n\t */\n\tprivate _formBusyObserver?: MutationObserver\n\n\tconstructor() {\n\t\tsuper()\n\t\ttry {\n\t\t\tthis.internals = this.attachInternals()\n\t\t} catch {\n\t\t\tthis.internals = undefined\n\t\t}\n\t\t// Translate clicks into native form semantics so the button works\n\t\t// inside any <form>, not just inside <schmancy-form>.\n\t\tthis.addEventListener('click', (e: MouseEvent) => {\n\t\t\tif (this.disabled) {\n\t\t\t\te.preventDefault()\n\t\t\t\te.stopImmediatePropagation()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst form = this.internals?.form\n\t\t\tif (!form) return\n\t\t\tif (this.type === 'submit') {\n\t\t\t\te.preventDefault()\n\t\t\t\tform.requestSubmit()\n\t\t\t} else if (this.type === 'reset') {\n\t\t\t\te.preventDefault()\n\t\t\t\tform.reset()\n\t\t\t}\n\t\t})\n\t}\n\n\t/** Associated form, when placed inside a <form>. */\n\tget form(): HTMLFormElement | null {\n\t\treturn this.internals?.form ?? null\n\t}\n\n\tformDisabledCallback(disabled: boolean): void {\n\t\tthis.disabled = disabled\n\t}\n\n\toverride connectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\t// Mirror the closest <schmancy-form>'s aria-busy onto this submit button\n\t\t// so the user gets a visible busy state during async submit handlers.\n\t\t// Schmancy-form sets aria-busy=\"true\" while status === 'submitting'.\n\t\tif (this.type !== 'submit') return\n\t\tconst form = this.closest('schmancy-form') as HTMLElement | null\n\t\tif (!form) return\n\t\tconst sync = () => {\n\t\t\tconst busy = form.getAttribute('aria-busy') === 'true'\n\t\t\tif (busy) {\n\t\t\t\tthis.setAttribute('aria-busy', 'true')\n\t\t\t\tthis.internals?.states.add('submitting')\n\t\t\t} else {\n\t\t\t\tthis.removeAttribute('aria-busy')\n\t\t\t\tthis.internals?.states.delete('submitting')\n\t\t\t}\n\t\t}\n\t\tsync()\n\t\tthis._formBusyObserver = new MutationObserver(sync)\n\t\tthis._formBusyObserver.observe(form, { attributes: true, attributeFilter: ['aria-busy'] })\n\t}\n\n\toverride disconnectedCallback(): void {\n\t\tthis._formBusyObserver?.disconnect()\n\t\tthis._formBusyObserver = undefined\n\t\tsuper.disconnectedCallback()\n\t}\n\n\t@query('[part=\"base\"]', true)\n\tprivate nativeElement!: HTMLElement\n\n\tprivate _ariaLabel!: string\n\n\t/**\n\t * The variant of the button.\n\t * @attr\n\t * @default 'text'\n\t * @public\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic variant: ButtonVariant = 'text'\n\n\t/**\n\t * The color of the button.\n\t * @attr\n\t * @default Depends on variant: 'primary' for filled/elevated/outlined/text, 'secondary' for tonal\n\t * @public\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic color?: ButtonColor\n\n\t/**\n\t * The width of the button.\n\t * @attr\n\t * @type {'full' | 'auto'}\n\t * @default 'auto'\n\t * @public\n\t */\n\t@property({ reflect: true })\n\tpublic width: 'full' | 'auto' = 'auto'\n\n\t/**\n\t * The size of the button.\n\t * Provided as `SchmancyButtonSizeContext` to descendant elements so children\n\t * (e.g. `<schmancy-icon>`) can auto-size against the enclosing button.\n\t * @attr\n\t * @type {'xxs' | 'xs' | 'sm' | 'md' | 'lg'}\n\t * @default 'md'\n\t * @public\n\t */\n\t@provide({ context: SchmancyButtonSizeContext })\n\t@property({ type: String })\n\tpublic size: SchmancyButtonSize = 'md'\n\n\t/**\n\t * The type of the button.\n\t * Defaults to 'button' (preventing accidental form submissions).\n\t * @attr\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic type: 'button' | 'reset' | 'submit' = 'button'\n\n\t/**\n\t * The URL the button points to.\n\t * If provided, the component will render as an anchor element.\n\t * @attr\n\t */\n\t@property()\n\tpublic href?: string\n\n\t/**\n\t * Determines whether the button is disabled.\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tpublic disabled = false\n\n\tpublic override set ariaLabel(value: string) {\n\t\tconst oldVal = this._ariaLabel\n\t\tthis._ariaLabel = value\n\n\t\tif (this.hasAttribute('aria-label')) {\n\t\t\tthis.removeAttribute('aria-label')\n\t\t}\n\t\tthis.requestUpdate('ariaLabel', oldVal)\n\t}\n\n\t@property({ attribute: 'aria-label' })\n\tpublic override get ariaLabel() {\n\t\treturn this._ariaLabel\n\t}\n\n\t@queryAssignedElements({\n\t\tslot: 'prefix',\n\t\tflatten: true,\n\t\tselector: 'img',\n\t})\n\tprivate prefixImgs!: HTMLImageElement[]\n\n\t@queryAssignedElements({\n\t\tslot: 'suffix',\n\t\tflatten: true,\n\t\tselector: 'img',\n\t})\n\tprivate suffixImgs!: HTMLImageElement[]\n\n\t/** Sets focus in the button. */\n\tpublic override focus(options?: FocusOptions) {\n\t\tthis.nativeElement.focus(options)\n\t}\n\n\t/** Removes focus from the button. */\n\tpublic override blur() {\n\t\tthis.nativeElement.blur()\n\t}\n\n\t/**\n\t * Get the effective color based on variant if not explicitly set\n\t * M3 spec: filled = primary, tonal = secondary, others = primary\n\t */\n\tprotected get effectiveColor(): ButtonColor {\n\t\tif (this.color) return this.color\n\n\t\t// Map 'tonal' to 'filled tonal' for checking\n\t\tconst effectiveVariant = this.variant === 'tonal' ? 'filled tonal' : this.variant\n\n\t\t// M3 defaults: tonal uses secondary, others use primary\n\t\treturn effectiveVariant === 'filled tonal' ? 'secondary' : 'primary'\n\t}\n\n\tprotected get imgClasses(): string[] {\n\t\t// M3 spec: icon sizes scale with button size\n\t\tconst sizeMap = {\n\t\t\txxs: 'w-3 h-3', // 12px for 24px button (ultra-compact)\n\t\t\txs: 'w-4 h-4', // 16px for 32px button (M3 dense)\n\t\t\tsm: 'w-5 h-5', // 20px for 40px button (M3 default)\n\t\t\tmd: 'w-6 h-6', // 24px for 48px button (M3 large)\n\t\t\tlg: 'w-7 h-7' // 28px for 56px button (M3 extra large)\n\t\t}\n\t\treturn [sizeMap[this.size], 'object-contain']\n\t}\n\n\tfirstUpdated() {\n\t\t// Add image classes and ensure decorative images have an empty alt.\n\t\tthis.prefixImgs?.forEach(img => {\n\t\t\timg.classList.add(...this.imgClasses)\n\t\t\tif (!img.hasAttribute('alt')) {\n\t\t\t\timg.setAttribute('alt', '')\n\t\t\t}\n\t\t})\n\t\tthis.suffixImgs?.forEach(img => {\n\t\t\timg.classList.add(...this.imgClasses)\n\t\t\tif (!img.hasAttribute('alt')) {\n\t\t\t\timg.setAttribute('alt', '')\n\t\t\t}\n\t\t})\n\t}\n\n\tclick(): void {\n\t\tthis.dispatchEvent(new Event('click', { bubbles: true, composed: true }))\n\t}\n\n\t// Prevent default behavior when the component is disabled.\n\tprivate _preventDefault(event: Event) {\n\t\tevent.preventDefault()\n\t\tevent.stopPropagation()\n\t}\n\n\trender() {\n\t\t// Map 'tonal' variant to 'filled tonal' for backwards compatibility\n\t\tconst effectiveVariant = this.variant === 'tonal' ? 'filled tonal' : this.variant;\n\n\t\t// Compute classes for the interactive element.\n\t\tconst classes = {\n\t\t\t'z-0 transition-all duration-200 relative rounded-2xl flex justify-center items-center outline-secondary-default focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 outline-hidden flex-1 overflow-hidden':\n\t\t\t\ttrue,\n\t\t\t// Height - M3 spec: 24dp (xxs) → 32dp (dense) → 40dp (default) → 48dp (large) → 56dp (XL)\n\t\t\t'h-6': this.size === 'xxs', // 24px - Ultra-compact\n\t\t\t'h-8': this.size === 'xs', // 32px - M3 dense/compact\n\t\t\t'h-10': this.size === 'sm', // 40px - M3 default\n\t\t\t'h-12': this.size === 'md', // 48px - M3 large\n\t\t\t'h-14': this.size === 'lg', // 56px - M3 extra large\n\t\t\t// Padding - M3 spec: horizontal padding 24dp default, scaled proportionally\n\t\t\t'py-1 px-2': this.size === 'xxs', // 4px/8px for 24px height\n\t\t\t'py-2 px-4': this.size === 'xs', // 8px/16px for 32px height\n\t\t\t'py-2.5 px-5': this.size === 'sm', // 10px/20px for 40px height\n\t\t\t'py-3 px-6': this.size === 'md', // 12px/24px for 48px height (M3 default)\n\t\t\t'py-4 px-7': this.size === 'lg', // 16px/28px for 56px height\n\t\t\t// Typography - M3 spec: label-large (14px) default, scaled\n\t\t\t'text-[10px] font-medium leading-3': this.size === 'xxs', // 10px\n\t\t\t'text-xs font-medium leading-4': this.size === 'xs', // 12px\n\t\t\t'text-sm font-medium leading-5': this.size === 'sm' || this.size === 'md', // 14px - M3 label-large\n\t\t\t'text-base font-medium leading-6': this.size === 'lg', // 16px\n\t\t\t// Letter spacing - M3 spec\n\t\t\t'tracking-[0.1px]': true,\n\t\t\t// Gap - Scaled with size\n\t\t\t'gap-0.5': this.size === 'xxs', // 2px\n\t\t\t'gap-1': this.size === 'xs', // 4px\n\t\t\t'gap-1.5': this.size === 'sm', // 6px\n\t\t\t'gap-2': this.size === 'md', // 8px\n\t\t\t'gap-2.5': this.size === 'lg', // 10px\n\t\t\t'cursor-pointer': !this.disabled,\n\t\t\t'opacity-[0.38]': this.disabled,\n\t\t\t'hover:shadow-sm': !this.disabled && effectiveVariant === 'elevated',\n\t\t\t'w-full tex-center': this.width === 'full',\n\t\t\t// Elevated variant\n\t\t\t'bg-surface-low shadow-xs': effectiveVariant === 'elevated',\n\t\t\t// Outlined variant\n\t\t\t'bg-transparent border-1 border-solid': effectiveVariant === 'outlined',\n\t\t\t'border-outline': effectiveVariant === 'outlined' && this.effectiveColor === 'primary',\n\t\t\t'border-success-default': effectiveVariant === 'outlined' && this.effectiveColor === 'success',\n\t\t\t'border-error-default': effectiveVariant === 'outlined' && this.effectiveColor === 'error',\n\t\t\t'border-warning-default': effectiveVariant === 'outlined' && this.effectiveColor === 'warning',\n\t\t\t'border-info-default': effectiveVariant === 'outlined' && this.effectiveColor === 'info',\n\t\t\t'border-secondary-default': effectiveVariant === 'outlined' && this.effectiveColor === 'secondary',\n\t\t\t'border-outline-variant': effectiveVariant === 'outlined' && this.effectiveColor === 'neutral',\n\t\t\t// Filled variant - background colors\n\t\t\t'bg-primary-default': effectiveVariant === 'filled' && this.effectiveColor === 'primary',\n\t\t\t'bg-secondary-default': effectiveVariant === 'filled' && this.effectiveColor === 'secondary',\n\t\t\t'bg-success-default': effectiveVariant === 'filled' && this.effectiveColor === 'success',\n\t\t\t'bg-error-default': effectiveVariant === 'filled' && this.effectiveColor === 'error',\n\t\t\t'bg-warning-default': effectiveVariant === 'filled' && this.effectiveColor === 'warning',\n\t\t\t'bg-info-default': effectiveVariant === 'filled' && this.effectiveColor === 'info',\n\t\t\t'bg-surface-containerHighest': effectiveVariant === 'filled' && this.effectiveColor === 'neutral',\n\t\t\t// Filled variant - text colors\n\t\t\t'text-primary-on': effectiveVariant === 'filled' && this.effectiveColor === 'primary',\n\t\t\t'text-secondary-on': effectiveVariant === 'filled' && this.effectiveColor === 'secondary',\n\t\t\t'text-success-on': effectiveVariant === 'filled' && this.effectiveColor === 'success',\n\t\t\t'text-error-on': effectiveVariant === 'filled' && this.effectiveColor === 'error',\n\t\t\t'text-warning-on': effectiveVariant === 'filled' && this.effectiveColor === 'warning',\n\t\t\t'text-info-on': effectiveVariant === 'filled' && this.effectiveColor === 'info',\n\t\t\t'text-surface-on': effectiveVariant === 'filled' && this.effectiveColor === 'neutral',\n\t\t\t// Filled tonal variant - background colors\n\t\t\t'bg-primary-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'primary',\n\t\t\t'bg-secondary-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'secondary',\n\t\t\t'bg-success-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'success',\n\t\t\t'bg-error-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'error',\n\t\t\t'bg-warning-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'warning',\n\t\t\t'bg-info-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'info',\n\t\t\t'bg-surface-containerLow': effectiveVariant === 'filled tonal' && this.effectiveColor === 'neutral',\n\t\t\t// Filled tonal variant - text colors\n\t\t\t'text-primary-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'primary',\n\t\t\t'text-secondary-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'secondary',\n\t\t\t'text-success-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'success',\n\t\t\t'text-error-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'error',\n\t\t\t'text-warning-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'warning',\n\t\t\t'text-info-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'info',\n\t\t\t// Text and elevated variants - text colors\n\t\t\t'text-primary-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'primary',\n\t\t\t'text-secondary-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'secondary',\n\t\t\t'text-success-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'success',\n\t\t\t'text-error-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'error',\n\t\t\t'text-warning-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'warning',\n\t\t\t'text-info-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'info',\n\t\t\t'text-surface-onVariant': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined' || effectiveVariant === 'filled tonal') && this.effectiveColor === 'neutral',\n\t\t}\n\n\t\tconst stateLayerClasses = {\n\t\t\t'absolute inset-0 hover:opacity-[0.08] z-0 rounded-2xl': true,\n\t\t\t// M3 focus and pressed states\n\t\t\t'focus-visible:opacity-[0.10]': true, // M3 focus state\n\t\t\t'active:opacity-[0.10]': true, // M3 pressed state\n\t\t\t// Filled variant hover\n\t\t\t'hover:bg-primary-on': effectiveVariant === 'filled' && this.effectiveColor === 'primary',\n\t\t\t'hover:bg-secondary-on': effectiveVariant === 'filled' && this.effectiveColor === 'secondary',\n\t\t\t'hover:bg-success-on': effectiveVariant === 'filled' && this.effectiveColor === 'success',\n\t\t\t'hover:bg-error-on': effectiveVariant === 'filled' && this.effectiveColor === 'error',\n\t\t\t'hover:bg-warning-on': effectiveVariant === 'filled' && this.effectiveColor === 'warning',\n\t\t\t'hover:bg-info-on': effectiveVariant === 'filled' && this.effectiveColor === 'info',\n\t\t\t'hover:bg-surface-on': effectiveVariant === 'filled' && this.effectiveColor === 'neutral',\n\t\t\t// Outlined, elevated, text variants hover\n\t\t\t'hover:bg-primary-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'primary',\n\t\t\t'hover:bg-secondary-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'secondary',\n\t\t\t'hover:bg-success-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'success',\n\t\t\t'hover:bg-error-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'error',\n\t\t\t'hover:bg-warning-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'warning',\n\t\t\t'hover:bg-info-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'info',\n\t\t\t'hover:bg-surface-onVariant': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'neutral',\n\t\t\t// Filled tonal hover\n\t\t\t'hover:bg-primary-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'primary',\n\t\t\t'hover:bg-secondary-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'secondary',\n\t\t\t'hover:bg-success-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'success',\n\t\t\t'hover:bg-error-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'error',\n\t\t\t'hover:bg-warning-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'warning',\n\t\t\t'hover:bg-info-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'info',\n\t\t\t'hover:bg-surface-containerLow': effectiveVariant === 'filled tonal' && this.effectiveColor === 'neutral',\n\t\t}\n\n\t\t// If href is provided, render an anchor element.\n\t\tif (this.href) {\n\t\t\treturn html`\n\t\t\t\t<a\n\t\t\t\t\t${magnetic({ strength: 3, radius: 60 })}\n\t\t\t\t\tpart=\"base\"\n\t\t\t\t\thref=${ifDefined(this.disabled ? undefined : this.href)}\n\t\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\t\ttabindex=${this.disabled ? '-1' : '0'}\n\t\t\t\t\taria-disabled=${this.disabled}\n\t\t\t\t\t@click=${this.disabled ? this._preventDefault : undefined}\n\t\t\t\t>\n\t\t\t\t\t${when(!this.disabled, () => html`<div class=\"${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t\t<slot name=\"prefix\"></slot>\n\t\t\t\t\t<slot></slot>\n\t\t\t\t\t<slot name=\"suffix\"></slot>\n\t\t\t\t</a>\n\t\t\t`\n\t\t}\n\n\t\t// Otherwise, render a native button element.\n\t\treturn html`\n\t\t\t<button\n\t\t\t\t${magnetic({ strength: 3, radius: 60 })}\n\t\t\t\tpart=\"base\"\n\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t?disabled=${this.disabled}\n\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\ttype=${ifDefined(this.type)}\n\t\t\t\ttabindex=${ifDefined(this.disabled ? '-1' : undefined)}\n\t\t\t>\n\t\t\t\t${when(!this.disabled, () => html`<div class=\"${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t<slot name=\"prefix\"></slot>\n\t\t\t\t<slot></slot>\n\t\t\t\t<slot name=\"suffix\"></slot>\n\t\t\t</button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-button': SchmancyButton\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html, LitElement, PropertyValueMap } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { when } from 'lit/directives/when.js'\nimport { magnetic } from '../directives/magnetic'\nimport { ButtonVariant } from './button'\n\n/**\n * An icon button component.\n * @element schmancy-icon-button\n * @slot - The default slot (usually an icon or glyph).\n * @csspart base - The underlying native `<button>` (or `<a>` when `href` is set).\n */\n@customElement('schmancy-icon-button')\nexport class SchmnacyIconButton extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: inline-flex;\n\t\tborder-radius: 9999px;\n\t\ttransition:\n\t\t\tbox-shadow 300ms cubic-bezier(0.34, 1.56, 0.64, 1),\n\t\t\ttransform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t}\n\t:host([width=\"full\"]) {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t}\n\t:host(:hover:not([disabled])) {\n\t\tbox-shadow: 0 2px 12px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 18%, transparent);\n\t}\n\t:host(:active:not([disabled])) {\n\t\ttransform: scale(0.92);\n\t\tbox-shadow: none;\n\t\ttransition-duration: 100ms;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t:host { transition: none; }\n\t\t:host(:hover:not([disabled])) { box-shadow: none; }\n\t\t:host(:active:not([disabled])) { transform: none; box-shadow: none; }\n\t}\n`]\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: true,\n\t}\n\n\t@query('[part=\"base\"]', true)\n\tprivate nativeElement!: HTMLElement\n\n\tprivate _ariaLabel!: string\n\n\t/**\n\t * The size of the icon.\n\t * @attr\n\t * @default 'md'\n\t */\n\t@property({ type: String })\n\tpublic size: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'md'\n\n\t/**\n\t * The variant of the button.\n\t * @attr\n\t * @default 'text'\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic variant: ButtonVariant = 'text'\n\n\t/**\n\t * The width of the button.\n\t * @attr\n\t * @type {'full' | 'auto'}\n\t * @default 'auto'\n\t */\n\t@property({ reflect: true })\n\tpublic width: 'full' | 'auto' = 'auto'\n\n\t/**\n\t * The type of the button.\n\t * Defaults to 'button' (preventing accidental form submissions).\n\t * @attr\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic type: 'button' | 'reset' | 'submit' = 'button'\n\n\t/**\n\t * The URL the button points to.\n\t * If provided, the component will render as an anchor element.\n\t * @attr\n\t */\n\t@property()\n\tpublic href?: string\n\n\t/**\n\t * Determines whether the button is disabled.\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tpublic disabled = false\n\n\t/**\n\t * Render slot content as text instead of wrapping in schmancy-icon.\n\t * Use this when you want to display text labels in the button.\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tpublic text = false\n\n\t/**\n\t * Icon name - use this instead of slot content to prevent translation breaking icons.\n\t * Example: <schmancy-icon-button icon=\"add\"></schmancy-icon-button>\n\t * @attr\n\t */\n\t@property({ type: String })\n\tpublic icon?: string\n\n\t// Reactively captured icon name from slot content (translation-proof)\n\t@state()\n\tprivate _capturedIcon?: string\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\t// Pre-capture icon from children to avoid double render flash\n\t\tthis._captureIconFromChildren()\n\t}\n\n\t// Capture icon from direct children (for initial render)\n\tprivate _captureIconFromChildren(): void {\n\t\tif (this.icon || this.text) return\n\t\tfor (const node of this.childNodes) {\n\t\t\tif (node.nodeType === Node.TEXT_NODE) {\n\t\t\t\tconst text = node.textContent?.trim()\n\t\t\t\tif (text) {\n\t\t\t\t\tthis._capturedIcon = text\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Handle slot content changes reactively (for dynamic updates)\n\tprivate _handleSlotChange(e: Event): void {\n\t\tif (this.icon || this.text) return\n\t\tconst slot = e.target as HTMLSlotElement\n\t\tconst nodes = slot.assignedNodes({ flatten: true })\n\t\tfor (const node of nodes) {\n\t\t\tif (node.nodeType === Node.TEXT_NODE) {\n\t\t\t\tconst text = node.textContent?.trim()\n\t\t\t\tif (text) {\n\t\t\t\t\tthis._capturedIcon = text\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Manage aria-label manually so that we can always use our internal property.\n\tpublic override set ariaLabel(value: string) {\n\t\tconst oldVal = this._ariaLabel\n\t\tthis._ariaLabel = value\n\n\t\tif (this.hasAttribute('aria-label')) {\n\t\t\tthis.removeAttribute('aria-label')\n\t\t}\n\t\tthis.requestUpdate('ariaLabel', oldVal)\n\t}\n\n\t@property({ attribute: 'aria-label' })\n\tpublic override get ariaLabel() {\n\t\treturn this._ariaLabel\n\t}\n\n\t/** Sets focus in the button. */\n\tpublic override focus(options?: FocusOptions) {\n\t\tthis.nativeElement.focus(options)\n\t}\n\n\t/** Removes focus from the button. */\n\tpublic override blur() {\n\t\tthis.nativeElement.blur()\n\t}\n\n\tclick(): void {\n\t\tthis.dispatchEvent(new Event('click', { bubbles: true, composed: true }))\n\t}\n\n\t// Prevent default behavior when the component is disabled.\n\tprivate _preventDefault(event: Event) {\n\t\tevent.preventDefault()\n\t\tevent.stopPropagation()\n\t}\n\n\tprotected firstUpdated(_changedProperties: PropertyValueMap<unknown> | Map<PropertyKey, unknown>): void {\n\t\t// Add any first-update logic here if needed.\n\t}\n\n\trender() {\n\t\t// Map 'tonal' variant to 'filled tonal' for backwards compatibility\n\t\tconst effectiveVariant = this.variant === 'tonal' ? 'filled tonal' : this.variant;\n\n\t\t// Compute classes for the interactive element.\n\t\tconst classes = {\n\t\t\t'z-0 h-full transition-all duration-200 relative rounded-full inline-flex justify-center items-center gap-[8px] outline-secondary-default focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 outline-hidden':\n\t\t\t\ttrue,\n\t\t\t'opacity-[0.38]': this.disabled,\n\t\t\t'cursor-pointer': !this.disabled,\n\t\t\t'hover:shadow-xs':\n\t\t\t\t!this.disabled &&\n\t\t\t\t(effectiveVariant === 'outlined' ||\n\t\t\t\t\teffectiveVariant === 'text' ||\n\t\t\t\t\teffectiveVariant === 'filled' ||\n\t\t\t\t\teffectiveVariant === 'filled tonal'),\n\t\t\t'hover:shadow-sm': !this.disabled && effectiveVariant === 'elevated',\n\t\t\t'flex-1 text-center': this.width === 'full',\n\t\t\t'bg-surface-low text-primary-default shadow-xs': effectiveVariant === 'elevated',\n\t\t\t'bg-transparent text-primary-default border-1 border-outline': effectiveVariant === 'outlined',\n\t\t\t'bg-primary-default text-primary-on': effectiveVariant === 'filled',\n\t\t\t'bg-secondary-container text-secondary-onContainer': effectiveVariant === 'filled tonal',\n\t\t\t'text-primary-default': effectiveVariant === 'text',\n\t\t\t// M3 spec: 24dp (xxs) → 32dp (dense) → 40dp (default) → 48dp (standard) → 56dp (large)\n\t\t\t'p-1.5': this.size === 'xxs', // 6px padding = 24px total (12px icon) - Ultra-compact\n\t\t\t'p-2': this.size === 'xs', // 8px padding = 32px total (16px icon) - M3 dense\n\t\t\t'p-2.5': this.size === 'sm', // 10px padding = 40px total (20px icon) - M3 default\n\t\t\t'p-3': this.size === 'md', // 12px padding = 48px total (24px icon) - M3 standard\n\t\t\t'p-4': this.size === 'lg', // 16px padding = 56px total (24px icon) - M3 large\n\t\t\t'p-5': this.size === 'xl', // 20px padding = 80px total (40px icon) - custom XL\n\t\t}\n\n\t\tconst stateLayerClasses = {\n\t\t\t'hover:opacity-[0.08] rounded-full z-0': true,\n\t\t\t'hover:bg-primary-on': effectiveVariant === 'filled',\n\t\t\t'hover:bg-primary-default': effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text',\n\t\t\t'hover:bg-secondary-container': effectiveVariant === 'filled tonal',\n\t\t}\n\n\t\tconst iconSizeClass = this.size === 'xxs' ? 'text-xs' : this.size === 'xs' ? 'text-base' : this.size === 'sm' ? 'text-xl' : this.size === 'md' ? 'text-2xl' : this.size === 'lg' ? 'text-2xl' : 'text-4xl';\n\n\t\t// If href is provided, render an anchor element.\n\t\tif (this.href) {\n\t\t\treturn html`\n\t\t\t\t<a\n\t\t\t\t\t${magnetic({ strength: 3, radius: 50 })}\n\t\t\t\t\tpart=\"base\"\n\t\t\t\t\thref=${ifDefined(this.disabled ? undefined : this.href)}\n\t\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\t\ttabindex=${this.disabled ? '-1' : '0'}\n\t\t\t\t\taria-disabled=${this.disabled}\n\t\t\t\t\t@click=${this.disabled ? this._preventDefault : undefined}\n\t\t\t\t>\n\t\t\t\t\t${when(!this.disabled, () => html`<div class=\"absolute inset-0 ${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t\t${this.text\n\t\t\t\t\t\t? html`<slot></slot>`\n\t\t\t\t\t\t: html`\n\t\t\t\t\t\t\t<slot style=\"display:none\" @slotchange=${this._handleSlotChange}></slot>\n\t\t\t\t\t\t\t<schmancy-icon class=${iconSizeClass}>${this.icon || this._capturedIcon}</schmancy-icon>\n\t\t\t\t\t\t`\n\t\t\t\t\t}\n\t\t\t\t</a>\n\t\t\t`\n\t\t}\n\n\t\t// Otherwise, render a native button element.\n\t\treturn html`\n\t\t\t<button\n\t\t\t\t${magnetic({ strength: 3, radius: 50 })}\n\t\t\t\tpart=\"base\"\n\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t?disabled=${this.disabled}\n\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\ttype=${ifDefined(this.type)}\n\t\t\t\ttabindex=${ifDefined(this.disabled ? '-1' : undefined)}\n\t\t\t>\n\t\t\t\t${when(!this.disabled, () => html`<div class=\"absolute inset-0 ${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t${this.text\n\t\t\t\t\t? html`<slot></slot>`\n\t\t\t\t\t: html`\n\t\t\t\t\t\t<slot style=\"display:none\" @slotchange=${this._handleSlotChange}></slot>\n\t\t\t\t\t\t<schmancy-icon class=${iconSizeClass}>${this.icon || this._capturedIcon}</schmancy-icon>\n\t\t\t\t\t`\n\t\t\t\t}\n\t\t\t</button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-icon-button': SchmnacyIconButton\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-
|
|
1
|
+
require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-CsYsIJOI.cjs`),t=require(`./active-host-jH3iloCR.cjs`),n=require(`./magnetic-D-ph029G.cjs`);let r=require(`@lit/context`),i=require(`lit/decorators.js`),a=require(`lit`),o=require(`lit/directives/if-defined.js`),s=require(`lit/directives/when.js`);var c=(0,r.createContext)(`schmancy-button-size`),l=class extends e.c{static{this.styles=[a.css`:host{
|
|
2
2
|
display: inline-flex;
|
|
3
3
|
overflow: hidden;
|
|
4
4
|
position: relative;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button-XfdPzfZQ.cjs","names":[],"sources":["../src/button/context.ts","../src/button/button.ts","../src/button/icon-button.ts"],"sourcesContent":["import { createContext } from '@lit/context'\n\nexport type SchmancyButtonSize = 'xxs' | 'xs' | 'sm' | 'md' | 'lg'\n\n/**\n * Provided by `<schmancy-button>` to its descendants so children\n * (e.g. `<schmancy-icon>`) can auto-size against the enclosing button.\n */\nexport const SchmancyButtonSizeContext = createContext<SchmancyButtonSize>('schmancy-button-size')\n","import { provide } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, queryAssignedElements } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { when } from 'lit/directives/when.js'\nimport { magnetic } from '../directives/magnetic'\nimport { SchmancyButtonSizeContext, type SchmancyButtonSize } from './context'\n\nexport interface SchmancyButtonEventMap {\n\tSchmancyFocus: CustomEvent<void>\n\tSchmancyBlur: CustomEvent<void>\n}\n\nexport type ButtonVariant = 'elevated' | 'filled' | 'filled tonal' | 'tonal' | 'outlined' | 'text'\nexport type ButtonColor = 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info' | 'neutral'\n\n/**\n * A button component.\n * @element schmancy-button\n * @slot - The default slot.\n * @slot prefix - The prefix slot.\n * @slot suffix - The suffix slot.\n * @csspart base - The underlying native `<button>` (or `<a>` when `href` is set).\n */\n@customElement('schmancy-button')\nexport class SchmancyButton extends SchmancyElement {\n\tstatic styles = [css`:host{\n\t\tdisplay: inline-flex;\n\t\toverflow: hidden;\n\t\tposition: relative;\n\t\ttouch-action: manipulation;\n\t\tborder-radius: 1rem;\n\t\ttransition:\n\t\t\tbox-shadow 300ms cubic-bezier(0.34, 1.56, 0.64, 1),\n\t\t\ttransform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t}\n\t:host([width=\"full\"]) {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t}\n\t:host(:hover:not([disabled])) {\n\t\tbox-shadow: 0 4px 16px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 20%, transparent);\n\t}\n\t:host(:active:not([disabled])) {\n\t\ttransform: scale(0.97);\n\t\tbox-shadow: 0 1px 4px -2px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 10%, transparent);\n\t\ttransition-duration: 100ms;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t:host { transition: none; }\n\t\t:host(:hover:not([disabled])) { box-shadow: none; }\n\t\t:host(:active:not([disabled])) { transform: none; box-shadow: none; }\n\t}\n\t:host *,\n\t* {\n\t\ttouch-action: manipulation;\n\t}`]\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: true,\n\t}\n\n\tstatic formAssociated = true\n\tprivate internals: ElementInternals | undefined\n\t/**\n\t * When this button is `type=\"submit\"` and lives inside a <schmancy-form>,\n\t * the observer mirrors the form's `aria-busy` attribute onto this button\n\t * while a submit is in flight. Stays focusable; disabled buttons drop from\n\t * the tab order and are unreachable to AT (WCAG 2.2 AA).\n\t */\n\tprivate _formBusyObserver?: MutationObserver\n\n\tconstructor() {\n\t\tsuper()\n\t\ttry {\n\t\t\tthis.internals = this.attachInternals()\n\t\t} catch {\n\t\t\tthis.internals = undefined\n\t\t}\n\t\t// Translate clicks into native form semantics so the button works\n\t\t// inside any <form>, not just inside <schmancy-form>.\n\t\tthis.addEventListener('click', (e: MouseEvent) => {\n\t\t\tif (this.disabled) {\n\t\t\t\te.preventDefault()\n\t\t\t\te.stopImmediatePropagation()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst form = this.internals?.form\n\t\t\tif (!form) return\n\t\t\tif (this.type === 'submit') {\n\t\t\t\te.preventDefault()\n\t\t\t\tform.requestSubmit()\n\t\t\t} else if (this.type === 'reset') {\n\t\t\t\te.preventDefault()\n\t\t\t\tform.reset()\n\t\t\t}\n\t\t})\n\t}\n\n\t/** Associated form, when placed inside a <form>. */\n\tget form(): HTMLFormElement | null {\n\t\treturn this.internals?.form ?? null\n\t}\n\n\tformDisabledCallback(disabled: boolean): void {\n\t\tthis.disabled = disabled\n\t}\n\n\toverride connectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\t// Mirror the closest <schmancy-form>'s aria-busy onto this submit button\n\t\t// so the user gets a visible busy state during async submit handlers.\n\t\t// Schmancy-form sets aria-busy=\"true\" while status === 'submitting'.\n\t\tif (this.type !== 'submit') return\n\t\tconst form = this.closest('schmancy-form') as HTMLElement | null\n\t\tif (!form) return\n\t\tconst sync = () => {\n\t\t\tconst busy = form.getAttribute('aria-busy') === 'true'\n\t\t\tif (busy) {\n\t\t\t\tthis.setAttribute('aria-busy', 'true')\n\t\t\t\tthis.internals?.states.add('submitting')\n\t\t\t} else {\n\t\t\t\tthis.removeAttribute('aria-busy')\n\t\t\t\tthis.internals?.states.delete('submitting')\n\t\t\t}\n\t\t}\n\t\tsync()\n\t\tthis._formBusyObserver = new MutationObserver(sync)\n\t\tthis._formBusyObserver.observe(form, { attributes: true, attributeFilter: ['aria-busy'] })\n\t}\n\n\toverride disconnectedCallback(): void {\n\t\tthis._formBusyObserver?.disconnect()\n\t\tthis._formBusyObserver = undefined\n\t\tsuper.disconnectedCallback()\n\t}\n\n\t@query('[part=\"base\"]', true)\n\tprivate nativeElement!: HTMLElement\n\n\tprivate _ariaLabel!: string\n\n\t/**\n\t * The variant of the button.\n\t * @attr\n\t * @default 'text'\n\t * @public\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic variant: ButtonVariant = 'text'\n\n\t/**\n\t * The color of the button.\n\t * @attr\n\t * @default Depends on variant: 'primary' for filled/elevated/outlined/text, 'secondary' for tonal\n\t * @public\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic color?: ButtonColor\n\n\t/**\n\t * The width of the button.\n\t * @attr\n\t * @type {'full' | 'auto'}\n\t * @default 'auto'\n\t * @public\n\t */\n\t@property({ reflect: true })\n\tpublic width: 'full' | 'auto' = 'auto'\n\n\t/**\n\t * The size of the button.\n\t * Provided as `SchmancyButtonSizeContext` to descendant elements so children\n\t * (e.g. `<schmancy-icon>`) can auto-size against the enclosing button.\n\t * @attr\n\t * @type {'xxs' | 'xs' | 'sm' | 'md' | 'lg'}\n\t * @default 'md'\n\t * @public\n\t */\n\t@provide({ context: SchmancyButtonSizeContext })\n\t@property({ type: String })\n\tpublic size: SchmancyButtonSize = 'md'\n\n\t/**\n\t * The type of the button.\n\t * Defaults to 'button' (preventing accidental form submissions).\n\t * @attr\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic type: 'button' | 'reset' | 'submit' = 'button'\n\n\t/**\n\t * The URL the button points to.\n\t * If provided, the component will render as an anchor element.\n\t * @attr\n\t */\n\t@property()\n\tpublic href?: string\n\n\t/**\n\t * Determines whether the button is disabled.\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tpublic disabled = false\n\n\tpublic override set ariaLabel(value: string) {\n\t\tconst oldVal = this._ariaLabel\n\t\tthis._ariaLabel = value\n\n\t\tif (this.hasAttribute('aria-label')) {\n\t\t\tthis.removeAttribute('aria-label')\n\t\t}\n\t\tthis.requestUpdate('ariaLabel', oldVal)\n\t}\n\n\t@property({ attribute: 'aria-label' })\n\tpublic override get ariaLabel() {\n\t\treturn this._ariaLabel\n\t}\n\n\t@queryAssignedElements({\n\t\tslot: 'prefix',\n\t\tflatten: true,\n\t\tselector: 'img',\n\t})\n\tprivate prefixImgs!: HTMLImageElement[]\n\n\t@queryAssignedElements({\n\t\tslot: 'suffix',\n\t\tflatten: true,\n\t\tselector: 'img',\n\t})\n\tprivate suffixImgs!: HTMLImageElement[]\n\n\t/** Sets focus in the button. */\n\tpublic override focus(options?: FocusOptions) {\n\t\tthis.nativeElement.focus(options)\n\t}\n\n\t/** Removes focus from the button. */\n\tpublic override blur() {\n\t\tthis.nativeElement.blur()\n\t}\n\n\t/**\n\t * Get the effective color based on variant if not explicitly set\n\t * M3 spec: filled = primary, tonal = secondary, others = primary\n\t */\n\tprotected get effectiveColor(): ButtonColor {\n\t\tif (this.color) return this.color\n\n\t\t// Map 'tonal' to 'filled tonal' for checking\n\t\tconst effectiveVariant = this.variant === 'tonal' ? 'filled tonal' : this.variant\n\n\t\t// M3 defaults: tonal uses secondary, others use primary\n\t\treturn effectiveVariant === 'filled tonal' ? 'secondary' : 'primary'\n\t}\n\n\tprotected get imgClasses(): string[] {\n\t\t// M3 spec: icon sizes scale with button size\n\t\tconst sizeMap = {\n\t\t\txxs: 'w-3 h-3', // 12px for 24px button (ultra-compact)\n\t\t\txs: 'w-4 h-4', // 16px for 32px button (M3 dense)\n\t\t\tsm: 'w-5 h-5', // 20px for 40px button (M3 default)\n\t\t\tmd: 'w-6 h-6', // 24px for 48px button (M3 large)\n\t\t\tlg: 'w-7 h-7' // 28px for 56px button (M3 extra large)\n\t\t}\n\t\treturn [sizeMap[this.size], 'object-contain']\n\t}\n\n\tfirstUpdated() {\n\t\t// Add image classes and ensure decorative images have an empty alt.\n\t\tthis.prefixImgs?.forEach(img => {\n\t\t\timg.classList.add(...this.imgClasses)\n\t\t\tif (!img.hasAttribute('alt')) {\n\t\t\t\timg.setAttribute('alt', '')\n\t\t\t}\n\t\t})\n\t\tthis.suffixImgs?.forEach(img => {\n\t\t\timg.classList.add(...this.imgClasses)\n\t\t\tif (!img.hasAttribute('alt')) {\n\t\t\t\timg.setAttribute('alt', '')\n\t\t\t}\n\t\t})\n\t}\n\n\tclick(): void {\n\t\tthis.dispatchEvent(new Event('click', { bubbles: true, composed: true }))\n\t}\n\n\t// Prevent default behavior when the component is disabled.\n\tprivate _preventDefault(event: Event) {\n\t\tevent.preventDefault()\n\t\tevent.stopPropagation()\n\t}\n\n\trender() {\n\t\t// Map 'tonal' variant to 'filled tonal' for backwards compatibility\n\t\tconst effectiveVariant = this.variant === 'tonal' ? 'filled tonal' : this.variant;\n\n\t\t// Compute classes for the interactive element.\n\t\tconst classes = {\n\t\t\t'z-0 transition-all duration-200 relative rounded-2xl flex justify-center items-center outline-secondary-default focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 outline-hidden flex-1 overflow-hidden':\n\t\t\t\ttrue,\n\t\t\t// Height - M3 spec: 24dp (xxs) → 32dp (dense) → 40dp (default) → 48dp (large) → 56dp (XL)\n\t\t\t'h-6': this.size === 'xxs', // 24px - Ultra-compact\n\t\t\t'h-8': this.size === 'xs', // 32px - M3 dense/compact\n\t\t\t'h-10': this.size === 'sm', // 40px - M3 default\n\t\t\t'h-12': this.size === 'md', // 48px - M3 large\n\t\t\t'h-14': this.size === 'lg', // 56px - M3 extra large\n\t\t\t// Padding - M3 spec: horizontal padding 24dp default, scaled proportionally\n\t\t\t'py-1 px-2': this.size === 'xxs', // 4px/8px for 24px height\n\t\t\t'py-2 px-4': this.size === 'xs', // 8px/16px for 32px height\n\t\t\t'py-2.5 px-5': this.size === 'sm', // 10px/20px for 40px height\n\t\t\t'py-3 px-6': this.size === 'md', // 12px/24px for 48px height (M3 default)\n\t\t\t'py-4 px-7': this.size === 'lg', // 16px/28px for 56px height\n\t\t\t// Typography - M3 spec: label-large (14px) default, scaled\n\t\t\t'text-[10px] font-medium leading-3': this.size === 'xxs', // 10px\n\t\t\t'text-xs font-medium leading-4': this.size === 'xs', // 12px\n\t\t\t'text-sm font-medium leading-5': this.size === 'sm' || this.size === 'md', // 14px - M3 label-large\n\t\t\t'text-base font-medium leading-6': this.size === 'lg', // 16px\n\t\t\t// Letter spacing - M3 spec\n\t\t\t'tracking-[0.1px]': true,\n\t\t\t// Gap - Scaled with size\n\t\t\t'gap-0.5': this.size === 'xxs', // 2px\n\t\t\t'gap-1': this.size === 'xs', // 4px\n\t\t\t'gap-1.5': this.size === 'sm', // 6px\n\t\t\t'gap-2': this.size === 'md', // 8px\n\t\t\t'gap-2.5': this.size === 'lg', // 10px\n\t\t\t'cursor-pointer': !this.disabled,\n\t\t\t'opacity-[0.38]': this.disabled,\n\t\t\t'hover:shadow-sm': !this.disabled && effectiveVariant === 'elevated',\n\t\t\t'w-full tex-center': this.width === 'full',\n\t\t\t// Elevated variant\n\t\t\t'bg-surface-low shadow-xs': effectiveVariant === 'elevated',\n\t\t\t// Outlined variant\n\t\t\t'bg-transparent border-1 border-solid': effectiveVariant === 'outlined',\n\t\t\t'border-outline': effectiveVariant === 'outlined' && this.effectiveColor === 'primary',\n\t\t\t'border-success-default': effectiveVariant === 'outlined' && this.effectiveColor === 'success',\n\t\t\t'border-error-default': effectiveVariant === 'outlined' && this.effectiveColor === 'error',\n\t\t\t'border-warning-default': effectiveVariant === 'outlined' && this.effectiveColor === 'warning',\n\t\t\t'border-info-default': effectiveVariant === 'outlined' && this.effectiveColor === 'info',\n\t\t\t'border-secondary-default': effectiveVariant === 'outlined' && this.effectiveColor === 'secondary',\n\t\t\t'border-outline-variant': effectiveVariant === 'outlined' && this.effectiveColor === 'neutral',\n\t\t\t// Filled variant - background colors\n\t\t\t'bg-primary-default': effectiveVariant === 'filled' && this.effectiveColor === 'primary',\n\t\t\t'bg-secondary-default': effectiveVariant === 'filled' && this.effectiveColor === 'secondary',\n\t\t\t'bg-success-default': effectiveVariant === 'filled' && this.effectiveColor === 'success',\n\t\t\t'bg-error-default': effectiveVariant === 'filled' && this.effectiveColor === 'error',\n\t\t\t'bg-warning-default': effectiveVariant === 'filled' && this.effectiveColor === 'warning',\n\t\t\t'bg-info-default': effectiveVariant === 'filled' && this.effectiveColor === 'info',\n\t\t\t'bg-surface-containerHighest': effectiveVariant === 'filled' && this.effectiveColor === 'neutral',\n\t\t\t// Filled variant - text colors\n\t\t\t'text-primary-on': effectiveVariant === 'filled' && this.effectiveColor === 'primary',\n\t\t\t'text-secondary-on': effectiveVariant === 'filled' && this.effectiveColor === 'secondary',\n\t\t\t'text-success-on': effectiveVariant === 'filled' && this.effectiveColor === 'success',\n\t\t\t'text-error-on': effectiveVariant === 'filled' && this.effectiveColor === 'error',\n\t\t\t'text-warning-on': effectiveVariant === 'filled' && this.effectiveColor === 'warning',\n\t\t\t'text-info-on': effectiveVariant === 'filled' && this.effectiveColor === 'info',\n\t\t\t'text-surface-on': effectiveVariant === 'filled' && this.effectiveColor === 'neutral',\n\t\t\t// Filled tonal variant - background colors\n\t\t\t'bg-primary-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'primary',\n\t\t\t'bg-secondary-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'secondary',\n\t\t\t'bg-success-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'success',\n\t\t\t'bg-error-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'error',\n\t\t\t'bg-warning-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'warning',\n\t\t\t'bg-info-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'info',\n\t\t\t'bg-surface-containerLow': effectiveVariant === 'filled tonal' && this.effectiveColor === 'neutral',\n\t\t\t// Filled tonal variant - text colors\n\t\t\t'text-primary-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'primary',\n\t\t\t'text-secondary-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'secondary',\n\t\t\t'text-success-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'success',\n\t\t\t'text-error-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'error',\n\t\t\t'text-warning-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'warning',\n\t\t\t'text-info-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'info',\n\t\t\t// Text and elevated variants - text colors\n\t\t\t'text-primary-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'primary',\n\t\t\t'text-secondary-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'secondary',\n\t\t\t'text-success-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'success',\n\t\t\t'text-error-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'error',\n\t\t\t'text-warning-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'warning',\n\t\t\t'text-info-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'info',\n\t\t\t'text-surface-onVariant': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined' || effectiveVariant === 'filled tonal') && this.effectiveColor === 'neutral',\n\t\t}\n\n\t\tconst stateLayerClasses = {\n\t\t\t'absolute inset-0 hover:opacity-[0.08] z-0 rounded-2xl': true,\n\t\t\t// M3 focus and pressed states\n\t\t\t'focus-visible:opacity-[0.10]': true, // M3 focus state\n\t\t\t'active:opacity-[0.10]': true, // M3 pressed state\n\t\t\t// Filled variant hover\n\t\t\t'hover:bg-primary-on': effectiveVariant === 'filled' && this.effectiveColor === 'primary',\n\t\t\t'hover:bg-secondary-on': effectiveVariant === 'filled' && this.effectiveColor === 'secondary',\n\t\t\t'hover:bg-success-on': effectiveVariant === 'filled' && this.effectiveColor === 'success',\n\t\t\t'hover:bg-error-on': effectiveVariant === 'filled' && this.effectiveColor === 'error',\n\t\t\t'hover:bg-warning-on': effectiveVariant === 'filled' && this.effectiveColor === 'warning',\n\t\t\t'hover:bg-info-on': effectiveVariant === 'filled' && this.effectiveColor === 'info',\n\t\t\t'hover:bg-surface-on': effectiveVariant === 'filled' && this.effectiveColor === 'neutral',\n\t\t\t// Outlined, elevated, text variants hover\n\t\t\t'hover:bg-primary-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'primary',\n\t\t\t'hover:bg-secondary-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'secondary',\n\t\t\t'hover:bg-success-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'success',\n\t\t\t'hover:bg-error-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'error',\n\t\t\t'hover:bg-warning-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'warning',\n\t\t\t'hover:bg-info-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'info',\n\t\t\t'hover:bg-surface-onVariant': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'neutral',\n\t\t\t// Filled tonal hover\n\t\t\t'hover:bg-primary-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'primary',\n\t\t\t'hover:bg-secondary-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'secondary',\n\t\t\t'hover:bg-success-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'success',\n\t\t\t'hover:bg-error-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'error',\n\t\t\t'hover:bg-warning-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'warning',\n\t\t\t'hover:bg-info-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'info',\n\t\t\t'hover:bg-surface-containerLow': effectiveVariant === 'filled tonal' && this.effectiveColor === 'neutral',\n\t\t}\n\n\t\t// If href is provided, render an anchor element.\n\t\tif (this.href) {\n\t\t\treturn html`\n\t\t\t\t<a\n\t\t\t\t\t${magnetic({ strength: 3, radius: 60 })}\n\t\t\t\t\tpart=\"base\"\n\t\t\t\t\thref=${ifDefined(this.disabled ? undefined : this.href)}\n\t\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\t\ttabindex=${this.disabled ? '-1' : '0'}\n\t\t\t\t\taria-disabled=${this.disabled}\n\t\t\t\t\t@click=${this.disabled ? this._preventDefault : undefined}\n\t\t\t\t>\n\t\t\t\t\t${when(!this.disabled, () => html`<div class=\"${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t\t<slot name=\"prefix\"></slot>\n\t\t\t\t\t<slot></slot>\n\t\t\t\t\t<slot name=\"suffix\"></slot>\n\t\t\t\t</a>\n\t\t\t`\n\t\t}\n\n\t\t// Otherwise, render a native button element.\n\t\treturn html`\n\t\t\t<button\n\t\t\t\t${magnetic({ strength: 3, radius: 60 })}\n\t\t\t\tpart=\"base\"\n\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t?disabled=${this.disabled}\n\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\ttype=${ifDefined(this.type)}\n\t\t\t\ttabindex=${ifDefined(this.disabled ? '-1' : undefined)}\n\t\t\t>\n\t\t\t\t${when(!this.disabled, () => html`<div class=\"${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t<slot name=\"prefix\"></slot>\n\t\t\t\t<slot></slot>\n\t\t\t\t<slot name=\"suffix\"></slot>\n\t\t\t</button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-button': SchmancyButton\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html, LitElement, PropertyValueMap } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { when } from 'lit/directives/when.js'\nimport { magnetic } from '../directives/magnetic'\nimport { ButtonVariant } from './button'\n\n/**\n * An icon button component.\n * @element schmancy-icon-button\n * @slot - The default slot (usually an icon or glyph).\n * @csspart base - The underlying native `<button>` (or `<a>` when `href` is set).\n */\n@customElement('schmancy-icon-button')\nexport class SchmnacyIconButton extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: inline-flex;\n\t\tborder-radius: 9999px;\n\t\ttransition:\n\t\t\tbox-shadow 300ms cubic-bezier(0.34, 1.56, 0.64, 1),\n\t\t\ttransform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t}\n\t:host([width=\"full\"]) {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t}\n\t:host(:hover:not([disabled])) {\n\t\tbox-shadow: 0 2px 12px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 18%, transparent);\n\t}\n\t:host(:active:not([disabled])) {\n\t\ttransform: scale(0.92);\n\t\tbox-shadow: none;\n\t\ttransition-duration: 100ms;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t:host { transition: none; }\n\t\t:host(:hover:not([disabled])) { box-shadow: none; }\n\t\t:host(:active:not([disabled])) { transform: none; box-shadow: none; }\n\t}\n`]\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: true,\n\t}\n\n\t@query('[part=\"base\"]', true)\n\tprivate nativeElement!: HTMLElement\n\n\tprivate _ariaLabel!: string\n\n\t/**\n\t * The size of the icon.\n\t * @attr\n\t * @default 'md'\n\t */\n\t@property({ type: String })\n\tpublic size: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'md'\n\n\t/**\n\t * The variant of the button.\n\t * @attr\n\t * @default 'text'\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic variant: ButtonVariant = 'text'\n\n\t/**\n\t * The width of the button.\n\t * @attr\n\t * @type {'full' | 'auto'}\n\t * @default 'auto'\n\t */\n\t@property({ reflect: true })\n\tpublic width: 'full' | 'auto' = 'auto'\n\n\t/**\n\t * The type of the button.\n\t * Defaults to 'button' (preventing accidental form submissions).\n\t * @attr\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic type: 'button' | 'reset' | 'submit' = 'button'\n\n\t/**\n\t * The URL the button points to.\n\t * If provided, the component will render as an anchor element.\n\t * @attr\n\t */\n\t@property()\n\tpublic href?: string\n\n\t/**\n\t * Determines whether the button is disabled.\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tpublic disabled = false\n\n\t/**\n\t * Render slot content as text instead of wrapping in schmancy-icon.\n\t * Use this when you want to display text labels in the button.\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tpublic text = false\n\n\t/**\n\t * Icon name - use this instead of slot content to prevent translation breaking icons.\n\t * Example: <schmancy-icon-button icon=\"add\"></schmancy-icon-button>\n\t * @attr\n\t */\n\t@property({ type: String })\n\tpublic icon?: string\n\n\t// Reactively captured icon name from slot content (translation-proof)\n\t@state()\n\tprivate _capturedIcon?: string\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\t// Pre-capture icon from children to avoid double render flash\n\t\tthis._captureIconFromChildren()\n\t}\n\n\t// Capture icon from direct children (for initial render)\n\tprivate _captureIconFromChildren(): void {\n\t\tif (this.icon || this.text) return\n\t\tfor (const node of this.childNodes) {\n\t\t\tif (node.nodeType === Node.TEXT_NODE) {\n\t\t\t\tconst text = node.textContent?.trim()\n\t\t\t\tif (text) {\n\t\t\t\t\tthis._capturedIcon = text\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Handle slot content changes reactively (for dynamic updates)\n\tprivate _handleSlotChange(e: Event): void {\n\t\tif (this.icon || this.text) return\n\t\tconst slot = e.target as HTMLSlotElement\n\t\tconst nodes = slot.assignedNodes({ flatten: true })\n\t\tfor (const node of nodes) {\n\t\t\tif (node.nodeType === Node.TEXT_NODE) {\n\t\t\t\tconst text = node.textContent?.trim()\n\t\t\t\tif (text) {\n\t\t\t\t\tthis._capturedIcon = text\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Manage aria-label manually so that we can always use our internal property.\n\tpublic override set ariaLabel(value: string) {\n\t\tconst oldVal = this._ariaLabel\n\t\tthis._ariaLabel = value\n\n\t\tif (this.hasAttribute('aria-label')) {\n\t\t\tthis.removeAttribute('aria-label')\n\t\t}\n\t\tthis.requestUpdate('ariaLabel', oldVal)\n\t}\n\n\t@property({ attribute: 'aria-label' })\n\tpublic override get ariaLabel() {\n\t\treturn this._ariaLabel\n\t}\n\n\t/** Sets focus in the button. */\n\tpublic override focus(options?: FocusOptions) {\n\t\tthis.nativeElement.focus(options)\n\t}\n\n\t/** Removes focus from the button. */\n\tpublic override blur() {\n\t\tthis.nativeElement.blur()\n\t}\n\n\tclick(): void {\n\t\tthis.dispatchEvent(new Event('click', { bubbles: true, composed: true }))\n\t}\n\n\t// Prevent default behavior when the component is disabled.\n\tprivate _preventDefault(event: Event) {\n\t\tevent.preventDefault()\n\t\tevent.stopPropagation()\n\t}\n\n\tprotected firstUpdated(_changedProperties: PropertyValueMap<unknown> | Map<PropertyKey, unknown>): void {\n\t\t// Add any first-update logic here if needed.\n\t}\n\n\trender() {\n\t\t// Map 'tonal' variant to 'filled tonal' for backwards compatibility\n\t\tconst effectiveVariant = this.variant === 'tonal' ? 'filled tonal' : this.variant;\n\n\t\t// Compute classes for the interactive element.\n\t\tconst classes = {\n\t\t\t'z-0 h-full transition-all duration-200 relative rounded-full inline-flex justify-center items-center gap-[8px] outline-secondary-default focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 outline-hidden':\n\t\t\t\ttrue,\n\t\t\t'opacity-[0.38]': this.disabled,\n\t\t\t'cursor-pointer': !this.disabled,\n\t\t\t'hover:shadow-xs':\n\t\t\t\t!this.disabled &&\n\t\t\t\t(effectiveVariant === 'outlined' ||\n\t\t\t\t\teffectiveVariant === 'text' ||\n\t\t\t\t\teffectiveVariant === 'filled' ||\n\t\t\t\t\teffectiveVariant === 'filled tonal'),\n\t\t\t'hover:shadow-sm': !this.disabled && effectiveVariant === 'elevated',\n\t\t\t'flex-1 text-center': this.width === 'full',\n\t\t\t'bg-surface-low text-primary-default shadow-xs': effectiveVariant === 'elevated',\n\t\t\t'bg-transparent text-primary-default border-1 border-outline': effectiveVariant === 'outlined',\n\t\t\t'bg-primary-default text-primary-on': effectiveVariant === 'filled',\n\t\t\t'bg-secondary-container text-secondary-onContainer': effectiveVariant === 'filled tonal',\n\t\t\t'text-primary-default': effectiveVariant === 'text',\n\t\t\t// M3 spec: 24dp (xxs) → 32dp (dense) → 40dp (default) → 48dp (standard) → 56dp (large)\n\t\t\t'p-1.5': this.size === 'xxs', // 6px padding = 24px total (12px icon) - Ultra-compact\n\t\t\t'p-2': this.size === 'xs', // 8px padding = 32px total (16px icon) - M3 dense\n\t\t\t'p-2.5': this.size === 'sm', // 10px padding = 40px total (20px icon) - M3 default\n\t\t\t'p-3': this.size === 'md', // 12px padding = 48px total (24px icon) - M3 standard\n\t\t\t'p-4': this.size === 'lg', // 16px padding = 56px total (24px icon) - M3 large\n\t\t\t'p-5': this.size === 'xl', // 20px padding = 80px total (40px icon) - custom XL\n\t\t}\n\n\t\tconst stateLayerClasses = {\n\t\t\t'hover:opacity-[0.08] rounded-full z-0': true,\n\t\t\t'hover:bg-primary-on': effectiveVariant === 'filled',\n\t\t\t'hover:bg-primary-default': effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text',\n\t\t\t'hover:bg-secondary-container': effectiveVariant === 'filled tonal',\n\t\t}\n\n\t\tconst iconSizeClass = this.size === 'xxs' ? 'text-xs' : this.size === 'xs' ? 'text-base' : this.size === 'sm' ? 'text-xl' : this.size === 'md' ? 'text-2xl' : this.size === 'lg' ? 'text-2xl' : 'text-4xl';\n\n\t\t// If href is provided, render an anchor element.\n\t\tif (this.href) {\n\t\t\treturn html`\n\t\t\t\t<a\n\t\t\t\t\t${magnetic({ strength: 3, radius: 50 })}\n\t\t\t\t\tpart=\"base\"\n\t\t\t\t\thref=${ifDefined(this.disabled ? undefined : this.href)}\n\t\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\t\ttabindex=${this.disabled ? '-1' : '0'}\n\t\t\t\t\taria-disabled=${this.disabled}\n\t\t\t\t\t@click=${this.disabled ? this._preventDefault : undefined}\n\t\t\t\t>\n\t\t\t\t\t${when(!this.disabled, () => html`<div class=\"absolute inset-0 ${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t\t${this.text\n\t\t\t\t\t\t? html`<slot></slot>`\n\t\t\t\t\t\t: html`\n\t\t\t\t\t\t\t<slot style=\"display:none\" @slotchange=${this._handleSlotChange}></slot>\n\t\t\t\t\t\t\t<schmancy-icon class=${iconSizeClass}>${this.icon || this._capturedIcon}</schmancy-icon>\n\t\t\t\t\t\t`\n\t\t\t\t\t}\n\t\t\t\t</a>\n\t\t\t`\n\t\t}\n\n\t\t// Otherwise, render a native button element.\n\t\treturn html`\n\t\t\t<button\n\t\t\t\t${magnetic({ strength: 3, radius: 50 })}\n\t\t\t\tpart=\"base\"\n\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t?disabled=${this.disabled}\n\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\ttype=${ifDefined(this.type)}\n\t\t\t\ttabindex=${ifDefined(this.disabled ? '-1' : undefined)}\n\t\t\t>\n\t\t\t\t${when(!this.disabled, () => html`<div class=\"absolute inset-0 ${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t${this.text\n\t\t\t\t\t? html`<slot></slot>`\n\t\t\t\t\t: html`\n\t\t\t\t\t\t<slot style=\"display:none\" @slotchange=${this._handleSlotChange}></slot>\n\t\t\t\t\t\t<schmancy-icon class=${iconSizeClass}>${this.icon || this._capturedIcon}</schmancy-icon>\n\t\t\t\t\t`\n\t\t\t\t}\n\t\t\t</button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-icon-button': SchmnacyIconButton\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"button-JrTMzwHY.cjs","names":[],"sources":["../src/button/context.ts","../src/button/button.ts","../src/button/icon-button.ts"],"sourcesContent":["import { createContext } from '@lit/context'\n\nexport type SchmancyButtonSize = 'xxs' | 'xs' | 'sm' | 'md' | 'lg'\n\n/**\n * Provided by `<schmancy-button>` to its descendants so children\n * (e.g. `<schmancy-icon>`) can auto-size against the enclosing button.\n */\nexport const SchmancyButtonSizeContext = createContext<SchmancyButtonSize>('schmancy-button-size')\n","import { provide } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, query, queryAssignedElements } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { when } from 'lit/directives/when.js'\nimport { magnetic } from '../directives/magnetic'\nimport { SchmancyButtonSizeContext, type SchmancyButtonSize } from './context'\n\nexport interface SchmancyButtonEventMap {\n\tSchmancyFocus: CustomEvent<void>\n\tSchmancyBlur: CustomEvent<void>\n}\n\nexport type ButtonVariant = 'elevated' | 'filled' | 'filled tonal' | 'tonal' | 'outlined' | 'text'\nexport type ButtonColor = 'primary' | 'secondary' | 'success' | 'error' | 'warning' | 'info' | 'neutral'\n\n/**\n * A button component.\n * @element schmancy-button\n * @slot - The default slot.\n * @slot prefix - The prefix slot.\n * @slot suffix - The suffix slot.\n * @csspart base - The underlying native `<button>` (or `<a>` when `href` is set).\n */\n@customElement('schmancy-button')\nexport class SchmancyButton extends SchmancyElement {\n\tstatic styles = [css`:host{\n\t\tdisplay: inline-flex;\n\t\toverflow: hidden;\n\t\tposition: relative;\n\t\ttouch-action: manipulation;\n\t\tborder-radius: 1rem;\n\t\ttransition:\n\t\t\tbox-shadow 300ms cubic-bezier(0.34, 1.56, 0.64, 1),\n\t\t\ttransform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t}\n\t:host([width=\"full\"]) {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t}\n\t:host(:hover:not([disabled])) {\n\t\tbox-shadow: 0 4px 16px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 20%, transparent);\n\t}\n\t:host(:active:not([disabled])) {\n\t\ttransform: scale(0.97);\n\t\tbox-shadow: 0 1px 4px -2px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 10%, transparent);\n\t\ttransition-duration: 100ms;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t:host { transition: none; }\n\t\t:host(:hover:not([disabled])) { box-shadow: none; }\n\t\t:host(:active:not([disabled])) { transform: none; box-shadow: none; }\n\t}\n\t:host *,\n\t* {\n\t\ttouch-action: manipulation;\n\t}`]\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: true,\n\t}\n\n\tstatic formAssociated = true\n\tprivate internals: ElementInternals | undefined\n\t/**\n\t * When this button is `type=\"submit\"` and lives inside a <schmancy-form>,\n\t * the observer mirrors the form's `aria-busy` attribute onto this button\n\t * while a submit is in flight. Stays focusable; disabled buttons drop from\n\t * the tab order and are unreachable to AT (WCAG 2.2 AA).\n\t */\n\tprivate _formBusyObserver?: MutationObserver\n\n\tconstructor() {\n\t\tsuper()\n\t\ttry {\n\t\t\tthis.internals = this.attachInternals()\n\t\t} catch {\n\t\t\tthis.internals = undefined\n\t\t}\n\t\t// Translate clicks into native form semantics so the button works\n\t\t// inside any <form>, not just inside <schmancy-form>.\n\t\tthis.addEventListener('click', (e: MouseEvent) => {\n\t\t\tif (this.disabled) {\n\t\t\t\te.preventDefault()\n\t\t\t\te.stopImmediatePropagation()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst form = this.internals?.form\n\t\t\tif (!form) return\n\t\t\tif (this.type === 'submit') {\n\t\t\t\te.preventDefault()\n\t\t\t\tform.requestSubmit()\n\t\t\t} else if (this.type === 'reset') {\n\t\t\t\te.preventDefault()\n\t\t\t\tform.reset()\n\t\t\t}\n\t\t})\n\t}\n\n\t/** Associated form, when placed inside a <form>. */\n\tget form(): HTMLFormElement | null {\n\t\treturn this.internals?.form ?? null\n\t}\n\n\tformDisabledCallback(disabled: boolean): void {\n\t\tthis.disabled = disabled\n\t}\n\n\toverride connectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\t// Mirror the closest <schmancy-form>'s aria-busy onto this submit button\n\t\t// so the user gets a visible busy state during async submit handlers.\n\t\t// Schmancy-form sets aria-busy=\"true\" while status === 'submitting'.\n\t\tif (this.type !== 'submit') return\n\t\tconst form = this.closest('schmancy-form') as HTMLElement | null\n\t\tif (!form) return\n\t\tconst sync = () => {\n\t\t\tconst busy = form.getAttribute('aria-busy') === 'true'\n\t\t\tif (busy) {\n\t\t\t\tthis.setAttribute('aria-busy', 'true')\n\t\t\t\tthis.internals?.states.add('submitting')\n\t\t\t} else {\n\t\t\t\tthis.removeAttribute('aria-busy')\n\t\t\t\tthis.internals?.states.delete('submitting')\n\t\t\t}\n\t\t}\n\t\tsync()\n\t\tthis._formBusyObserver = new MutationObserver(sync)\n\t\tthis._formBusyObserver.observe(form, { attributes: true, attributeFilter: ['aria-busy'] })\n\t}\n\n\toverride disconnectedCallback(): void {\n\t\tthis._formBusyObserver?.disconnect()\n\t\tthis._formBusyObserver = undefined\n\t\tsuper.disconnectedCallback()\n\t}\n\n\t@query('[part=\"base\"]', true)\n\tprivate nativeElement!: HTMLElement\n\n\tprivate _ariaLabel!: string\n\n\t/**\n\t * The variant of the button.\n\t * @attr\n\t * @default 'text'\n\t * @public\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic variant: ButtonVariant = 'text'\n\n\t/**\n\t * The color of the button.\n\t * @attr\n\t * @default Depends on variant: 'primary' for filled/elevated/outlined/text, 'secondary' for tonal\n\t * @public\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic color?: ButtonColor\n\n\t/**\n\t * The width of the button.\n\t * @attr\n\t * @type {'full' | 'auto'}\n\t * @default 'auto'\n\t * @public\n\t */\n\t@property({ reflect: true })\n\tpublic width: 'full' | 'auto' = 'auto'\n\n\t/**\n\t * The size of the button.\n\t * Provided as `SchmancyButtonSizeContext` to descendant elements so children\n\t * (e.g. `<schmancy-icon>`) can auto-size against the enclosing button.\n\t * @attr\n\t * @type {'xxs' | 'xs' | 'sm' | 'md' | 'lg'}\n\t * @default 'md'\n\t * @public\n\t */\n\t@provide({ context: SchmancyButtonSizeContext })\n\t@property({ type: String })\n\tpublic size: SchmancyButtonSize = 'md'\n\n\t/**\n\t * The type of the button.\n\t * Defaults to 'button' (preventing accidental form submissions).\n\t * @attr\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic type: 'button' | 'reset' | 'submit' = 'button'\n\n\t/**\n\t * The URL the button points to.\n\t * If provided, the component will render as an anchor element.\n\t * @attr\n\t */\n\t@property()\n\tpublic href?: string\n\n\t/**\n\t * Determines whether the button is disabled.\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tpublic disabled = false\n\n\tpublic override set ariaLabel(value: string) {\n\t\tconst oldVal = this._ariaLabel\n\t\tthis._ariaLabel = value\n\n\t\tif (this.hasAttribute('aria-label')) {\n\t\t\tthis.removeAttribute('aria-label')\n\t\t}\n\t\tthis.requestUpdate('ariaLabel', oldVal)\n\t}\n\n\t@property({ attribute: 'aria-label' })\n\tpublic override get ariaLabel() {\n\t\treturn this._ariaLabel\n\t}\n\n\t@queryAssignedElements({\n\t\tslot: 'prefix',\n\t\tflatten: true,\n\t\tselector: 'img',\n\t})\n\tprivate prefixImgs!: HTMLImageElement[]\n\n\t@queryAssignedElements({\n\t\tslot: 'suffix',\n\t\tflatten: true,\n\t\tselector: 'img',\n\t})\n\tprivate suffixImgs!: HTMLImageElement[]\n\n\t/** Sets focus in the button. */\n\tpublic override focus(options?: FocusOptions) {\n\t\tthis.nativeElement.focus(options)\n\t}\n\n\t/** Removes focus from the button. */\n\tpublic override blur() {\n\t\tthis.nativeElement.blur()\n\t}\n\n\t/**\n\t * Get the effective color based on variant if not explicitly set\n\t * M3 spec: filled = primary, tonal = secondary, others = primary\n\t */\n\tprotected get effectiveColor(): ButtonColor {\n\t\tif (this.color) return this.color\n\n\t\t// Map 'tonal' to 'filled tonal' for checking\n\t\tconst effectiveVariant = this.variant === 'tonal' ? 'filled tonal' : this.variant\n\n\t\t// M3 defaults: tonal uses secondary, others use primary\n\t\treturn effectiveVariant === 'filled tonal' ? 'secondary' : 'primary'\n\t}\n\n\tprotected get imgClasses(): string[] {\n\t\t// M3 spec: icon sizes scale with button size\n\t\tconst sizeMap = {\n\t\t\txxs: 'w-3 h-3', // 12px for 24px button (ultra-compact)\n\t\t\txs: 'w-4 h-4', // 16px for 32px button (M3 dense)\n\t\t\tsm: 'w-5 h-5', // 20px for 40px button (M3 default)\n\t\t\tmd: 'w-6 h-6', // 24px for 48px button (M3 large)\n\t\t\tlg: 'w-7 h-7' // 28px for 56px button (M3 extra large)\n\t\t}\n\t\treturn [sizeMap[this.size], 'object-contain']\n\t}\n\n\tfirstUpdated() {\n\t\t// Add image classes and ensure decorative images have an empty alt.\n\t\tthis.prefixImgs?.forEach(img => {\n\t\t\timg.classList.add(...this.imgClasses)\n\t\t\tif (!img.hasAttribute('alt')) {\n\t\t\t\timg.setAttribute('alt', '')\n\t\t\t}\n\t\t})\n\t\tthis.suffixImgs?.forEach(img => {\n\t\t\timg.classList.add(...this.imgClasses)\n\t\t\tif (!img.hasAttribute('alt')) {\n\t\t\t\timg.setAttribute('alt', '')\n\t\t\t}\n\t\t})\n\t}\n\n\tclick(): void {\n\t\tthis.dispatchEvent(new Event('click', { bubbles: true, composed: true }))\n\t}\n\n\t// Prevent default behavior when the component is disabled.\n\tprivate _preventDefault(event: Event) {\n\t\tevent.preventDefault()\n\t\tevent.stopPropagation()\n\t}\n\n\trender() {\n\t\t// Map 'tonal' variant to 'filled tonal' for backwards compatibility\n\t\tconst effectiveVariant = this.variant === 'tonal' ? 'filled tonal' : this.variant;\n\n\t\t// Compute classes for the interactive element.\n\t\tconst classes = {\n\t\t\t'z-0 transition-all duration-200 relative rounded-2xl flex justify-center items-center outline-secondary-default focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 outline-hidden flex-1 overflow-hidden':\n\t\t\t\ttrue,\n\t\t\t// Height - M3 spec: 24dp (xxs) → 32dp (dense) → 40dp (default) → 48dp (large) → 56dp (XL)\n\t\t\t'h-6': this.size === 'xxs', // 24px - Ultra-compact\n\t\t\t'h-8': this.size === 'xs', // 32px - M3 dense/compact\n\t\t\t'h-10': this.size === 'sm', // 40px - M3 default\n\t\t\t'h-12': this.size === 'md', // 48px - M3 large\n\t\t\t'h-14': this.size === 'lg', // 56px - M3 extra large\n\t\t\t// Padding - M3 spec: horizontal padding 24dp default, scaled proportionally\n\t\t\t'py-1 px-2': this.size === 'xxs', // 4px/8px for 24px height\n\t\t\t'py-2 px-4': this.size === 'xs', // 8px/16px for 32px height\n\t\t\t'py-2.5 px-5': this.size === 'sm', // 10px/20px for 40px height\n\t\t\t'py-3 px-6': this.size === 'md', // 12px/24px for 48px height (M3 default)\n\t\t\t'py-4 px-7': this.size === 'lg', // 16px/28px for 56px height\n\t\t\t// Typography - M3 spec: label-large (14px) default, scaled\n\t\t\t'text-[10px] font-medium leading-3': this.size === 'xxs', // 10px\n\t\t\t'text-xs font-medium leading-4': this.size === 'xs', // 12px\n\t\t\t'text-sm font-medium leading-5': this.size === 'sm' || this.size === 'md', // 14px - M3 label-large\n\t\t\t'text-base font-medium leading-6': this.size === 'lg', // 16px\n\t\t\t// Letter spacing - M3 spec\n\t\t\t'tracking-[0.1px]': true,\n\t\t\t// Gap - Scaled with size\n\t\t\t'gap-0.5': this.size === 'xxs', // 2px\n\t\t\t'gap-1': this.size === 'xs', // 4px\n\t\t\t'gap-1.5': this.size === 'sm', // 6px\n\t\t\t'gap-2': this.size === 'md', // 8px\n\t\t\t'gap-2.5': this.size === 'lg', // 10px\n\t\t\t'cursor-pointer': !this.disabled,\n\t\t\t'opacity-[0.38]': this.disabled,\n\t\t\t'hover:shadow-sm': !this.disabled && effectiveVariant === 'elevated',\n\t\t\t'w-full tex-center': this.width === 'full',\n\t\t\t// Elevated variant\n\t\t\t'bg-surface-low shadow-xs': effectiveVariant === 'elevated',\n\t\t\t// Outlined variant\n\t\t\t'bg-transparent border-1 border-solid': effectiveVariant === 'outlined',\n\t\t\t'border-outline': effectiveVariant === 'outlined' && this.effectiveColor === 'primary',\n\t\t\t'border-success-default': effectiveVariant === 'outlined' && this.effectiveColor === 'success',\n\t\t\t'border-error-default': effectiveVariant === 'outlined' && this.effectiveColor === 'error',\n\t\t\t'border-warning-default': effectiveVariant === 'outlined' && this.effectiveColor === 'warning',\n\t\t\t'border-info-default': effectiveVariant === 'outlined' && this.effectiveColor === 'info',\n\t\t\t'border-secondary-default': effectiveVariant === 'outlined' && this.effectiveColor === 'secondary',\n\t\t\t'border-outline-variant': effectiveVariant === 'outlined' && this.effectiveColor === 'neutral',\n\t\t\t// Filled variant - background colors\n\t\t\t'bg-primary-default': effectiveVariant === 'filled' && this.effectiveColor === 'primary',\n\t\t\t'bg-secondary-default': effectiveVariant === 'filled' && this.effectiveColor === 'secondary',\n\t\t\t'bg-success-default': effectiveVariant === 'filled' && this.effectiveColor === 'success',\n\t\t\t'bg-error-default': effectiveVariant === 'filled' && this.effectiveColor === 'error',\n\t\t\t'bg-warning-default': effectiveVariant === 'filled' && this.effectiveColor === 'warning',\n\t\t\t'bg-info-default': effectiveVariant === 'filled' && this.effectiveColor === 'info',\n\t\t\t'bg-surface-containerHighest': effectiveVariant === 'filled' && this.effectiveColor === 'neutral',\n\t\t\t// Filled variant - text colors\n\t\t\t'text-primary-on': effectiveVariant === 'filled' && this.effectiveColor === 'primary',\n\t\t\t'text-secondary-on': effectiveVariant === 'filled' && this.effectiveColor === 'secondary',\n\t\t\t'text-success-on': effectiveVariant === 'filled' && this.effectiveColor === 'success',\n\t\t\t'text-error-on': effectiveVariant === 'filled' && this.effectiveColor === 'error',\n\t\t\t'text-warning-on': effectiveVariant === 'filled' && this.effectiveColor === 'warning',\n\t\t\t'text-info-on': effectiveVariant === 'filled' && this.effectiveColor === 'info',\n\t\t\t'text-surface-on': effectiveVariant === 'filled' && this.effectiveColor === 'neutral',\n\t\t\t// Filled tonal variant - background colors\n\t\t\t'bg-primary-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'primary',\n\t\t\t'bg-secondary-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'secondary',\n\t\t\t'bg-success-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'success',\n\t\t\t'bg-error-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'error',\n\t\t\t'bg-warning-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'warning',\n\t\t\t'bg-info-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'info',\n\t\t\t'bg-surface-containerLow': effectiveVariant === 'filled tonal' && this.effectiveColor === 'neutral',\n\t\t\t// Filled tonal variant - text colors\n\t\t\t'text-primary-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'primary',\n\t\t\t'text-secondary-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'secondary',\n\t\t\t'text-success-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'success',\n\t\t\t'text-error-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'error',\n\t\t\t'text-warning-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'warning',\n\t\t\t'text-info-onContainer': effectiveVariant === 'filled tonal' && this.effectiveColor === 'info',\n\t\t\t// Text and elevated variants - text colors\n\t\t\t'text-primary-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'primary',\n\t\t\t'text-secondary-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'secondary',\n\t\t\t'text-success-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'success',\n\t\t\t'text-error-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'error',\n\t\t\t'text-warning-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'warning',\n\t\t\t'text-info-default': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined') && this.effectiveColor === 'info',\n\t\t\t'text-surface-onVariant': (effectiveVariant === 'text' || effectiveVariant === 'elevated' || effectiveVariant === 'outlined' || effectiveVariant === 'filled tonal') && this.effectiveColor === 'neutral',\n\t\t}\n\n\t\tconst stateLayerClasses = {\n\t\t\t'absolute inset-0 hover:opacity-[0.08] z-0 rounded-2xl': true,\n\t\t\t// M3 focus and pressed states\n\t\t\t'focus-visible:opacity-[0.10]': true, // M3 focus state\n\t\t\t'active:opacity-[0.10]': true, // M3 pressed state\n\t\t\t// Filled variant hover\n\t\t\t'hover:bg-primary-on': effectiveVariant === 'filled' && this.effectiveColor === 'primary',\n\t\t\t'hover:bg-secondary-on': effectiveVariant === 'filled' && this.effectiveColor === 'secondary',\n\t\t\t'hover:bg-success-on': effectiveVariant === 'filled' && this.effectiveColor === 'success',\n\t\t\t'hover:bg-error-on': effectiveVariant === 'filled' && this.effectiveColor === 'error',\n\t\t\t'hover:bg-warning-on': effectiveVariant === 'filled' && this.effectiveColor === 'warning',\n\t\t\t'hover:bg-info-on': effectiveVariant === 'filled' && this.effectiveColor === 'info',\n\t\t\t'hover:bg-surface-on': effectiveVariant === 'filled' && this.effectiveColor === 'neutral',\n\t\t\t// Outlined, elevated, text variants hover\n\t\t\t'hover:bg-primary-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'primary',\n\t\t\t'hover:bg-secondary-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'secondary',\n\t\t\t'hover:bg-success-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'success',\n\t\t\t'hover:bg-error-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'error',\n\t\t\t'hover:bg-warning-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'warning',\n\t\t\t'hover:bg-info-default': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'info',\n\t\t\t'hover:bg-surface-onVariant': (effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text') && this.effectiveColor === 'neutral',\n\t\t\t// Filled tonal hover\n\t\t\t'hover:bg-primary-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'primary',\n\t\t\t'hover:bg-secondary-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'secondary',\n\t\t\t'hover:bg-success-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'success',\n\t\t\t'hover:bg-error-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'error',\n\t\t\t'hover:bg-warning-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'warning',\n\t\t\t'hover:bg-info-container': effectiveVariant === 'filled tonal' && this.effectiveColor === 'info',\n\t\t\t'hover:bg-surface-containerLow': effectiveVariant === 'filled tonal' && this.effectiveColor === 'neutral',\n\t\t}\n\n\t\t// If href is provided, render an anchor element.\n\t\tif (this.href) {\n\t\t\treturn html`\n\t\t\t\t<a\n\t\t\t\t\t${magnetic({ strength: 3, radius: 60 })}\n\t\t\t\t\tpart=\"base\"\n\t\t\t\t\thref=${ifDefined(this.disabled ? undefined : this.href)}\n\t\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\t\ttabindex=${this.disabled ? '-1' : '0'}\n\t\t\t\t\taria-disabled=${this.disabled}\n\t\t\t\t\t@click=${this.disabled ? this._preventDefault : undefined}\n\t\t\t\t>\n\t\t\t\t\t${when(!this.disabled, () => html`<div class=\"${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t\t<slot name=\"prefix\"></slot>\n\t\t\t\t\t<slot></slot>\n\t\t\t\t\t<slot name=\"suffix\"></slot>\n\t\t\t\t</a>\n\t\t\t`\n\t\t}\n\n\t\t// Otherwise, render a native button element.\n\t\treturn html`\n\t\t\t<button\n\t\t\t\t${magnetic({ strength: 3, radius: 60 })}\n\t\t\t\tpart=\"base\"\n\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t?disabled=${this.disabled}\n\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\ttype=${ifDefined(this.type)}\n\t\t\t\ttabindex=${ifDefined(this.disabled ? '-1' : undefined)}\n\t\t\t>\n\t\t\t\t${when(!this.disabled, () => html`<div class=\"${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t<slot name=\"prefix\"></slot>\n\t\t\t\t<slot></slot>\n\t\t\t\t<slot name=\"suffix\"></slot>\n\t\t\t</button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-button': SchmancyButton\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html, LitElement, PropertyValueMap } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { when } from 'lit/directives/when.js'\nimport { magnetic } from '../directives/magnetic'\nimport { ButtonVariant } from './button'\n\n/**\n * An icon button component.\n * @element schmancy-icon-button\n * @slot - The default slot (usually an icon or glyph).\n * @csspart base - The underlying native `<button>` (or `<a>` when `href` is set).\n */\n@customElement('schmancy-icon-button')\nexport class SchmnacyIconButton extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: inline-flex;\n\t\tborder-radius: 9999px;\n\t\ttransition:\n\t\t\tbox-shadow 300ms cubic-bezier(0.34, 1.56, 0.64, 1),\n\t\t\ttransform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t}\n\t:host([width=\"full\"]) {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t}\n\t:host(:hover:not([disabled])) {\n\t\tbox-shadow: 0 2px 12px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 18%, transparent);\n\t}\n\t:host(:active:not([disabled])) {\n\t\ttransform: scale(0.92);\n\t\tbox-shadow: none;\n\t\ttransition-duration: 100ms;\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t:host { transition: none; }\n\t\t:host(:hover:not([disabled])) { box-shadow: none; }\n\t\t:host(:active:not([disabled])) { transform: none; box-shadow: none; }\n\t}\n`]\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: true,\n\t}\n\n\t@query('[part=\"base\"]', true)\n\tprivate nativeElement!: HTMLElement\n\n\tprivate _ariaLabel!: string\n\n\t/**\n\t * The size of the icon.\n\t * @attr\n\t * @default 'md'\n\t */\n\t@property({ type: String })\n\tpublic size: 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'md'\n\n\t/**\n\t * The variant of the button.\n\t * @attr\n\t * @default 'text'\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic variant: ButtonVariant = 'text'\n\n\t/**\n\t * The width of the button.\n\t * @attr\n\t * @type {'full' | 'auto'}\n\t * @default 'auto'\n\t */\n\t@property({ reflect: true })\n\tpublic width: 'full' | 'auto' = 'auto'\n\n\t/**\n\t * The type of the button.\n\t * Defaults to 'button' (preventing accidental form submissions).\n\t * @attr\n\t */\n\t@property({ reflect: true, type: String })\n\tpublic type: 'button' | 'reset' | 'submit' = 'button'\n\n\t/**\n\t * The URL the button points to.\n\t * If provided, the component will render as an anchor element.\n\t * @attr\n\t */\n\t@property()\n\tpublic href?: string\n\n\t/**\n\t * Determines whether the button is disabled.\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tpublic disabled = false\n\n\t/**\n\t * Render slot content as text instead of wrapping in schmancy-icon.\n\t * Use this when you want to display text labels in the button.\n\t * @attr\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tpublic text = false\n\n\t/**\n\t * Icon name - use this instead of slot content to prevent translation breaking icons.\n\t * Example: <schmancy-icon-button icon=\"add\"></schmancy-icon-button>\n\t * @attr\n\t */\n\t@property({ type: String })\n\tpublic icon?: string\n\n\t// Reactively captured icon name from slot content (translation-proof)\n\t@state()\n\tprivate _capturedIcon?: string\n\n\tconnectedCallback(): void {\n\t\tsuper.connectedCallback()\n\t\t// Pre-capture icon from children to avoid double render flash\n\t\tthis._captureIconFromChildren()\n\t}\n\n\t// Capture icon from direct children (for initial render)\n\tprivate _captureIconFromChildren(): void {\n\t\tif (this.icon || this.text) return\n\t\tfor (const node of this.childNodes) {\n\t\t\tif (node.nodeType === Node.TEXT_NODE) {\n\t\t\t\tconst text = node.textContent?.trim()\n\t\t\t\tif (text) {\n\t\t\t\t\tthis._capturedIcon = text\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Handle slot content changes reactively (for dynamic updates)\n\tprivate _handleSlotChange(e: Event): void {\n\t\tif (this.icon || this.text) return\n\t\tconst slot = e.target as HTMLSlotElement\n\t\tconst nodes = slot.assignedNodes({ flatten: true })\n\t\tfor (const node of nodes) {\n\t\t\tif (node.nodeType === Node.TEXT_NODE) {\n\t\t\t\tconst text = node.textContent?.trim()\n\t\t\t\tif (text) {\n\t\t\t\t\tthis._capturedIcon = text\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Manage aria-label manually so that we can always use our internal property.\n\tpublic override set ariaLabel(value: string) {\n\t\tconst oldVal = this._ariaLabel\n\t\tthis._ariaLabel = value\n\n\t\tif (this.hasAttribute('aria-label')) {\n\t\t\tthis.removeAttribute('aria-label')\n\t\t}\n\t\tthis.requestUpdate('ariaLabel', oldVal)\n\t}\n\n\t@property({ attribute: 'aria-label' })\n\tpublic override get ariaLabel() {\n\t\treturn this._ariaLabel\n\t}\n\n\t/** Sets focus in the button. */\n\tpublic override focus(options?: FocusOptions) {\n\t\tthis.nativeElement.focus(options)\n\t}\n\n\t/** Removes focus from the button. */\n\tpublic override blur() {\n\t\tthis.nativeElement.blur()\n\t}\n\n\tclick(): void {\n\t\tthis.dispatchEvent(new Event('click', { bubbles: true, composed: true }))\n\t}\n\n\t// Prevent default behavior when the component is disabled.\n\tprivate _preventDefault(event: Event) {\n\t\tevent.preventDefault()\n\t\tevent.stopPropagation()\n\t}\n\n\tprotected firstUpdated(_changedProperties: PropertyValueMap<unknown> | Map<PropertyKey, unknown>): void {\n\t\t// Add any first-update logic here if needed.\n\t}\n\n\trender() {\n\t\t// Map 'tonal' variant to 'filled tonal' for backwards compatibility\n\t\tconst effectiveVariant = this.variant === 'tonal' ? 'filled tonal' : this.variant;\n\n\t\t// Compute classes for the interactive element.\n\t\tconst classes = {\n\t\t\t'z-0 h-full transition-all duration-200 relative rounded-full inline-flex justify-center items-center gap-[8px] outline-secondary-default focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 outline-hidden':\n\t\t\t\ttrue,\n\t\t\t'opacity-[0.38]': this.disabled,\n\t\t\t'cursor-pointer': !this.disabled,\n\t\t\t'hover:shadow-xs':\n\t\t\t\t!this.disabled &&\n\t\t\t\t(effectiveVariant === 'outlined' ||\n\t\t\t\t\teffectiveVariant === 'text' ||\n\t\t\t\t\teffectiveVariant === 'filled' ||\n\t\t\t\t\teffectiveVariant === 'filled tonal'),\n\t\t\t'hover:shadow-sm': !this.disabled && effectiveVariant === 'elevated',\n\t\t\t'flex-1 text-center': this.width === 'full',\n\t\t\t'bg-surface-low text-primary-default shadow-xs': effectiveVariant === 'elevated',\n\t\t\t'bg-transparent text-primary-default border-1 border-outline': effectiveVariant === 'outlined',\n\t\t\t'bg-primary-default text-primary-on': effectiveVariant === 'filled',\n\t\t\t'bg-secondary-container text-secondary-onContainer': effectiveVariant === 'filled tonal',\n\t\t\t'text-primary-default': effectiveVariant === 'text',\n\t\t\t// M3 spec: 24dp (xxs) → 32dp (dense) → 40dp (default) → 48dp (standard) → 56dp (large)\n\t\t\t'p-1.5': this.size === 'xxs', // 6px padding = 24px total (12px icon) - Ultra-compact\n\t\t\t'p-2': this.size === 'xs', // 8px padding = 32px total (16px icon) - M3 dense\n\t\t\t'p-2.5': this.size === 'sm', // 10px padding = 40px total (20px icon) - M3 default\n\t\t\t'p-3': this.size === 'md', // 12px padding = 48px total (24px icon) - M3 standard\n\t\t\t'p-4': this.size === 'lg', // 16px padding = 56px total (24px icon) - M3 large\n\t\t\t'p-5': this.size === 'xl', // 20px padding = 80px total (40px icon) - custom XL\n\t\t}\n\n\t\tconst stateLayerClasses = {\n\t\t\t'hover:opacity-[0.08] rounded-full z-0': true,\n\t\t\t'hover:bg-primary-on': effectiveVariant === 'filled',\n\t\t\t'hover:bg-primary-default': effectiveVariant === 'outlined' || effectiveVariant === 'elevated' || effectiveVariant === 'text',\n\t\t\t'hover:bg-secondary-container': effectiveVariant === 'filled tonal',\n\t\t}\n\n\t\tconst iconSizeClass = this.size === 'xxs' ? 'text-xs' : this.size === 'xs' ? 'text-base' : this.size === 'sm' ? 'text-xl' : this.size === 'md' ? 'text-2xl' : this.size === 'lg' ? 'text-2xl' : 'text-4xl';\n\n\t\t// If href is provided, render an anchor element.\n\t\tif (this.href) {\n\t\t\treturn html`\n\t\t\t\t<a\n\t\t\t\t\t${magnetic({ strength: 3, radius: 50 })}\n\t\t\t\t\tpart=\"base\"\n\t\t\t\t\thref=${ifDefined(this.disabled ? undefined : this.href)}\n\t\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\t\ttabindex=${this.disabled ? '-1' : '0'}\n\t\t\t\t\taria-disabled=${this.disabled}\n\t\t\t\t\t@click=${this.disabled ? this._preventDefault : undefined}\n\t\t\t\t>\n\t\t\t\t\t${when(!this.disabled, () => html`<div class=\"absolute inset-0 ${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t\t${this.text\n\t\t\t\t\t\t? html`<slot></slot>`\n\t\t\t\t\t\t: html`\n\t\t\t\t\t\t\t<slot style=\"display:none\" @slotchange=${this._handleSlotChange}></slot>\n\t\t\t\t\t\t\t<schmancy-icon class=${iconSizeClass}>${this.icon || this._capturedIcon}</schmancy-icon>\n\t\t\t\t\t\t`\n\t\t\t\t\t}\n\t\t\t\t</a>\n\t\t\t`\n\t\t}\n\n\t\t// Otherwise, render a native button element.\n\t\treturn html`\n\t\t\t<button\n\t\t\t\t${magnetic({ strength: 3, radius: 50 })}\n\t\t\t\tpart=\"base\"\n\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\t?disabled=${this.disabled}\n\t\t\t\tclass=\"${this.classMap(classes)}\"\n\t\t\t\ttype=${ifDefined(this.type)}\n\t\t\t\ttabindex=${ifDefined(this.disabled ? '-1' : undefined)}\n\t\t\t>\n\t\t\t\t${when(!this.disabled, () => html`<div class=\"absolute inset-0 ${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t\t${this.text\n\t\t\t\t\t? html`<slot></slot>`\n\t\t\t\t\t: html`\n\t\t\t\t\t\t<slot style=\"display:none\" @slotchange=${this._handleSlotChange}></slot>\n\t\t\t\t\t\t<schmancy-icon class=${iconSizeClass}>${this.icon || this._capturedIcon}</schmancy-icon>\n\t\t\t\t\t`\n\t\t\t\t}\n\t\t\t</button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-icon-button': SchmnacyIconButton\n\t}\n}\n"],"mappings":"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"}
|
package/dist/button.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./button-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./button-JrTMzwHY.cjs`);Object.defineProperty(exports,`SchmancyButton`,{enumerable:!0,get:function(){return e.n}}),Object.defineProperty(exports,`SchmnacyIconButton`,{enumerable:!0,get:function(){return e.t}});
|
package/dist/button.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as e, t } from "./button-
|
|
1
|
+
import { n as e, t } from "./button-D9UJ7I6Z.js";
|
|
2
2
|
export { e as SchmancyButton, t as SchmnacyIconButton };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { c as e } from "./mixins-
|
|
1
|
+
import { c as e } from "./mixins-DySzfmal.js";
|
|
2
2
|
import { a as t } from "./active-host-BP0zy_Y9.js";
|
|
3
|
-
import { t as n } from "./cursor-glow-
|
|
3
|
+
import { t as n } from "./cursor-glow-Ah7VXSj7.js";
|
|
4
4
|
import { customElement as r, property as i, state as a } from "lit/decorators.js";
|
|
5
5
|
import { LitElement as o, css as s, html as c } from "lit";
|
|
6
6
|
import { ifDefined as l } from "lit/directives/if-defined.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card-jzUQK0EQ.js","names":[],"sources":["../src/card/actions.ts","../src/card/card.ts","../src/card/content.ts","../src/card/media.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n/**\n * @element schmancy-card-action\n * @slot - The content of the action\n */\n@customElement('schmancy-card-action')\nexport default class SchmancyCardAction extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: flex;\n\t\tgap: 0.5rem;\n\t\tpadding: 0.5rem 1rem;\n\t\talign-items: center;\n\t\tjustify-content: flex-end;\n\t}\n`];\n\tprotected render(): unknown {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card-action': SchmancyCardAction\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { cursorGlow } from '../directives/cursor-glow'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\n@customElement('schmancy-card')\nexport default class SchmancyCard extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t\tborder-radius: var(--schmancy-sys-shape-corner-medium);\n\t\ttransition:\n\t\t\tbox-shadow var(--schmancy-sys-motion-duration-short4) var(--schmancy-sys-motion-easing-standard),\n\t\t\ttransform 300ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t\toutline: none;\n\t}\n\n\t/* Type variants */\n\t:host([type='elevated']) {\n\t\tbackground-color: var(--schmancy-sys-color-surface-low);\n\t\tbox-shadow: var(--schmancy-sys-elevation-1);\n\t}\n\t:host([type='filled']) {\n\t\tbackground-color: var(--schmancy-sys-color-surface-highest);\n\t\tbox-shadow: var(--schmancy-sys-elevation-0);\n\t}\n\t:host([type='outlined']) {\n\t\tbackground-color: var(--schmancy-sys-color-surface-default);\n\t\tborder: 1px solid var(--schmancy-sys-color-outlineVariant);\n\t\tbox-shadow: var(--schmancy-sys-elevation-0);\n\t}\n\n\t/* Interactive states */\n\t:host([interactive]) {\n\t\tcursor: pointer;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t:host([interactive]:focus-visible:not([disabled])) {\n\t\toutline: 2px solid var(--schmancy-sys-color-primary-default);\n\t\toutline-offset: 2px;\n\t}\n\t:host([disabled]) {\n\t\tpointer-events: none;\n\t\topacity: var(--schmancy-sys-state-disabled-opacity);\n\t}\n\n\t/* Hover elevations — luminous glow + lift */\n\t:host([type='elevated'][interactive]:hover:not([disabled])) {\n\t\tbox-shadow:\n\t\t\tvar(--schmancy-sys-elevation-2),\n\t\t\t0 4px 24px -6px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 12%, transparent);\n\t\ttransform: translateY(-2px);\n\t}\n\t:host([type='filled'][interactive]:hover:not([disabled])),\n\t:host([type='outlined'][interactive]:hover:not([disabled])) {\n\t\tbox-shadow:\n\t\t\tvar(--schmancy-sys-elevation-1),\n\t\t\t0 4px 20px -6px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 10%, transparent);\n\t\ttransform: translateY(-1px);\n\t}\n\n\t/* Active state — kinetic compress */\n\t:host([interactive]:active:not([disabled])) {\n\t\ttransform: scale(0.98);\n\t\ttransition-duration: 100ms;\n\t}\n\n\t/* Dragged state */\n\t:host([dragged]) {\n\t\tbox-shadow:\n\t\t\tvar(--schmancy-sys-elevation-3),\n\t\t\t0 8px 32px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 15%, transparent);\n\t\ttransform: translateY(-4px);\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\t:host([interactive]:hover:not([disabled])),\n\t\t:host([interactive]:active:not([disabled])),\n\t\t:host([dragged]) {\n\t\t\ttransform: none;\n\t\t}\n\t}\n\n\t@keyframes ripple {\n\t\tto {\n\t\t\ttransform: scale(4);\n\t\t\topacity: 0;\n\t\t}\n\t}\n`];\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: true,\n\t}\n\n\t/**\n\t * The visual style of the card.\n\t * @default 'elevated'\n\t */\n\t@property({ reflect: true })\n\ttype: 'elevated' | 'filled' | 'outlined' = 'elevated'\n\n\t/**\n\t * Makes the card interactive (clickable).\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tinteractive = false\n\n\t/**\n\t * Disables the card.\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tdisabled = false\n\n\t/**\n\t * Indicates the card is being dragged.\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tdragged = false\n\n\t/**\n\t * URL to navigate to when card is clicked (makes it act like a link).\n\t */\n\t@property()\n\thref?: string\n\n\t/**\n\t * Target for the link navigation.\n\t */\n\t@property()\n\ttarget?: string\n\n\t/**\n\t * ARIA role for accessibility.\n\t */\n\t@property({ attribute: 'role' })\n\toverride role = 'article'\n\n\t/**\n\t * ARIA label for accessibility.\n\t */\n\t@property({ attribute: 'aria-label' })\n\toverride ariaLabel: string = ''\n\n\t// Internal state for interaction feedback\n\t@state() pressed = false\n\t@state() private ripples: Array<{ x: number; y: number; id: number }> = []\n\n\tprivate nextRippleId = 0\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis._updateAriaAttributes()\n\t}\n\n\tupdated(changedProperties: Map<string, unknown>) {\n\t\tsuper.updated(changedProperties)\n\t\tif (changedProperties.has('interactive') || changedProperties.has('disabled')) {\n\t\t\tthis._updateAriaAttributes()\n\t\t}\n\t}\n\n\t// Consolidate ARIA attribute updates\n\tprivate _updateAriaAttributes() {\n\t\tconst isInteractive = this.interactive && !this.disabled\n\n\t\tif (isInteractive) {\n\t\t\tthis.setAttribute('tabindex', '0')\n\t\t\tif (!this.role || this.role === 'article') {\n\t\t\t\tthis.role = this.href ? 'link' : 'button'\n\t\t\t}\n\t\t} else {\n\t\t\tthis.removeAttribute('tabindex')\n\t\t\tif (this.role === 'button' || this.role === 'link') {\n\t\t\t\tthis.role = 'article'\n\t\t\t}\n\t\t}\n\t}\n\n\t// Shared ripple creation logic\n\tprivate _addRipple(x: number, y: number) {\n\t\tconst id = this.nextRippleId++\n\t\tthis.ripples = [...this.ripples, { x, y, id }]\n\n\t\t// Remove ripple after animation completes\n\t\tsetTimeout(() => {\n\t\t\tthis.ripples = this.ripples.filter(r => r.id !== id)\n\t\t}, 600) // M3 medium duration\n\t}\n\n\t// Shared navigation logic\n\tprivate _navigate() {\n\t\tif (!this.href) return\n\n\t\tif (this.target === '_blank') {\n\t\t\twindow.open(this.href, '_blank')\n\t\t} else {\n\t\t\twindow.location.href = this.href\n\t\t}\n\t}\n\n\t// Combined action trigger (ripple + navigate + event)\n\tprivate _triggerAction(x: number, y: number) {\n\t\tthis._addRipple(x, y)\n\t\tthis._navigate()\n\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('schmancy-click', {\n\t\t\t\tdetail: { value: this.type },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate handleClick = (e: MouseEvent) => {\n\t\tif (this.disabled || !this.interactive) return\n\n\t\tconst rect = this.getBoundingClientRect()\n\t\tthis._triggerAction(e.clientX - rect.left, e.clientY - rect.top)\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\tif (this.disabled || !this.interactive) return\n\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault()\n\t\t\tthis._setPressed(true)\n\n\t\t\t// Simulate click at center\n\t\t\tconst rect = this.getBoundingClientRect()\n\t\t\tthis._triggerAction(rect.width / 2, rect.height / 2)\n\t\t}\n\t}\n\n\tprivate handleKeyUp = (e: KeyboardEvent) => {\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\tthis._setPressed(false)\n\t\t}\n\t}\n\n\t// Consolidate pressed state management\n\tprivate _setPressed(pressed: boolean) {\n\t\tthis.pressed = pressed\n\t\tif (pressed) {\n\t\t\tthis.setAttribute('pressed', '')\n\t\t} else {\n\t\t\tthis.removeAttribute('pressed')\n\t\t}\n\t}\n\n\tprivate handleMouseDown = () => {\n\t\tif (this.disabled || !this.interactive) return\n\t\tthis._setPressed(true)\n\t}\n\n\tprivate handleMouseUp = () => this._setPressed(false)\n\tprivate handleMouseLeave = () => this._setPressed(false)\n\n\tprotected render() {\n\t\tconst isInteractive = this.interactive && !this.disabled\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\t${isInteractive ? cursorGlow({ radius: 200, intensity: 0.1 }) : ''}\n\t\t\t\tclass=\"relative w-full h-full rounded-xl ${isInteractive ? 'cursor-pointer' : ''}\"\n\t\t\t\t@click=${this.handleClick}\n\t\t\t\t@keydown=${this.handleKeyDown}\n\t\t\t\t@keyup=${this.handleKeyUp}\n\t\t\t\t@mousedown=${this.handleMouseDown}\n\t\t\t\t@mouseup=${this.handleMouseUp}\n\t\t\t\t@mouseleave=${this.handleMouseLeave}\n\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\taria-disabled=${this.disabled ? 'true' : 'false'}\n\t\t\t>\n\t\t\t\t<!-- State layer -->\n\t\t\t\t<div\n\t\t\t\t\tclass=\"absolute inset-0 rounded-xl pointer-events-none transition-opacity duration-200 bg-surface-on ${!isInteractive\n\t\t\t\t\t\t? 'opacity-0'\n\t\t\t\t\t\t: this.pressed\n\t\t\t\t\t\t\t? 'opacity-[var(--schmancy-sys-state-pressed-opacity)]'\n\t\t\t\t\t\t\t: 'opacity-0 hover:opacity-[var(--schmancy-sys-state-hover-opacity)] focus-visible:opacity-[var(--schmancy-sys-state-focus-opacity)]'}\"\n\t\t\t\t></div>\n\n\t\t\t\t<!-- Ripples -->\n\t\t\t\t${this.interactive && this.ripples.length\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<div class=\"absolute inset-0 rounded-xl overflow-hidden pointer-events-none\">\n\t\t\t\t\t\t\t\t${this.ripples.map(\n\t\t\t\t\t\t\t\t\tr => html`\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclass=\"absolute rounded-full scale-0 animate-[ripple_600ms_linear] bg-surface-on opacity-[0.12] w-5 h-5 -ml-2.5 -mt-2.5\"\n\t\t\t\t\t\t\t\t\t\t\tstyle=\"left: ${r.x}px; top: ${r.y}px\"\n\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`\n\t\t\t\t\t: ''}\n\n\t\t\t\t<!-- Content -->\n\t\t\t\t<div class=\"relative h-full w-full rounded-xl\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card': SchmancyCard\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n/**\n * @element schmancy-card-content\n */\n@customElement('schmancy-card-content')\nexport default class SchmancyCardContent extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\tpadding: 1rem;\n\t}\n`];\n\tprotected render(): unknown {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card-content': SchmancyCardContent\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n/**\n * @element schmancy-card-media\n */\n@customElement('schmancy-card-media')\nexport default class SchmancyCardMedia extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t\theight: 200px;\n\t\toverflow: hidden;\n\t}\n\t\n\t/* Allow height to be overridden when used in flex/grid layouts */\n\t:host-context(.h-full) {\n\t\theight: 100%;\n\t}\n\t\n\t::slotted(img),\n\timg {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tobject-position: center;\n\t}\n\t\n\t/* Object fit styles based on fit attribute */\n\t:host([fit=\"contain\"]) img,\n\t:host([fit=\"contain\"]) ::slotted(img) {\n\t\tobject-fit: contain;\n\t}\n\t\n\t:host([fit=\"cover\"]) img,\n\t:host([fit=\"cover\"]) ::slotted(img) {\n\t\tobject-fit: cover;\n\t}\n\t\n\t:host([fit=\"fill\"]) img,\n\t:host([fit=\"fill\"]) ::slotted(img) {\n\t\tobject-fit: fill;\n\t}\n\t\n\t:host([fit=\"none\"]) img,\n\t:host([fit=\"none\"]) ::slotted(img) {\n\t\tobject-fit: none;\n\t}\n\t\n\t:host([fit=\"scale-down\"]) img,\n\t:host([fit=\"scale-down\"]) ::slotted(img) {\n\t\tobject-fit: scale-down;\n\t}\n`];\n\t@property({ type: String, reflect: true })\n\tsrc: string = ''\n\n\t@property({ type: String, reflect: true })\n\tfit: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down' = 'contain'\n\t\n\t@property({ type: String })\n\talt: string = ''\n\n\tprotected render(): unknown {\n\t\t// If src is provided, render an img element\n\t\t// Otherwise, allow users to slot their own content\n\t\treturn this.src \n\t\t\t? html`<img src=\"${this.src}\" alt=\"${this.alt}\" />` \n\t\t\t: html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card-media': SchmancyCardMedia\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"card-BvCFuX3J.js","names":[],"sources":["../src/card/actions.ts","../src/card/card.ts","../src/card/content.ts","../src/card/media.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n/**\n * @element schmancy-card-action\n * @slot - The content of the action\n */\n@customElement('schmancy-card-action')\nexport default class SchmancyCardAction extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: flex;\n\t\tgap: 0.5rem;\n\t\tpadding: 0.5rem 1rem;\n\t\talign-items: center;\n\t\tjustify-content: flex-end;\n\t}\n`];\n\tprotected render(): unknown {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card-action': SchmancyCardAction\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { cursorGlow } from '../directives/cursor-glow'\nimport { ifDefined } from 'lit/directives/if-defined.js'\n\n@customElement('schmancy-card')\nexport default class SchmancyCard extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t\tborder-radius: var(--schmancy-sys-shape-corner-medium);\n\t\ttransition:\n\t\t\tbox-shadow var(--schmancy-sys-motion-duration-short4) var(--schmancy-sys-motion-easing-standard),\n\t\t\ttransform 300ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t\toutline: none;\n\t}\n\n\t/* Type variants */\n\t:host([type='elevated']) {\n\t\tbackground-color: var(--schmancy-sys-color-surface-low);\n\t\tbox-shadow: var(--schmancy-sys-elevation-1);\n\t}\n\t:host([type='filled']) {\n\t\tbackground-color: var(--schmancy-sys-color-surface-highest);\n\t\tbox-shadow: var(--schmancy-sys-elevation-0);\n\t}\n\t:host([type='outlined']) {\n\t\tbackground-color: var(--schmancy-sys-color-surface-default);\n\t\tborder: 1px solid var(--schmancy-sys-color-outlineVariant);\n\t\tbox-shadow: var(--schmancy-sys-elevation-0);\n\t}\n\n\t/* Interactive states */\n\t:host([interactive]) {\n\t\tcursor: pointer;\n\t\t-webkit-tap-highlight-color: transparent;\n\t}\n\t:host([interactive]:focus-visible:not([disabled])) {\n\t\toutline: 2px solid var(--schmancy-sys-color-primary-default);\n\t\toutline-offset: 2px;\n\t}\n\t:host([disabled]) {\n\t\tpointer-events: none;\n\t\topacity: var(--schmancy-sys-state-disabled-opacity);\n\t}\n\n\t/* Hover elevations — luminous glow + lift */\n\t:host([type='elevated'][interactive]:hover:not([disabled])) {\n\t\tbox-shadow:\n\t\t\tvar(--schmancy-sys-elevation-2),\n\t\t\t0 4px 24px -6px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 12%, transparent);\n\t\ttransform: translateY(-2px);\n\t}\n\t:host([type='filled'][interactive]:hover:not([disabled])),\n\t:host([type='outlined'][interactive]:hover:not([disabled])) {\n\t\tbox-shadow:\n\t\t\tvar(--schmancy-sys-elevation-1),\n\t\t\t0 4px 20px -6px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 10%, transparent);\n\t\ttransform: translateY(-1px);\n\t}\n\n\t/* Active state — kinetic compress */\n\t:host([interactive]:active:not([disabled])) {\n\t\ttransform: scale(0.98);\n\t\ttransition-duration: 100ms;\n\t}\n\n\t/* Dragged state */\n\t:host([dragged]) {\n\t\tbox-shadow:\n\t\t\tvar(--schmancy-sys-elevation-3),\n\t\t\t0 8px 32px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 15%, transparent);\n\t\ttransform: translateY(-4px);\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\t:host([interactive]:hover:not([disabled])),\n\t\t:host([interactive]:active:not([disabled])),\n\t\t:host([dragged]) {\n\t\t\ttransform: none;\n\t\t}\n\t}\n\n\t@keyframes ripple {\n\t\tto {\n\t\t\ttransform: scale(4);\n\t\t\topacity: 0;\n\t\t}\n\t}\n`];\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tmode: 'open',\n\t\tdelegatesFocus: true,\n\t}\n\n\t/**\n\t * The visual style of the card.\n\t * @default 'elevated'\n\t */\n\t@property({ reflect: true })\n\ttype: 'elevated' | 'filled' | 'outlined' = 'elevated'\n\n\t/**\n\t * Makes the card interactive (clickable).\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tinteractive = false\n\n\t/**\n\t * Disables the card.\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tdisabled = false\n\n\t/**\n\t * Indicates the card is being dragged.\n\t * @default false\n\t */\n\t@property({ type: Boolean, reflect: true })\n\tdragged = false\n\n\t/**\n\t * URL to navigate to when card is clicked (makes it act like a link).\n\t */\n\t@property()\n\thref?: string\n\n\t/**\n\t * Target for the link navigation.\n\t */\n\t@property()\n\ttarget?: string\n\n\t/**\n\t * ARIA role for accessibility.\n\t */\n\t@property({ attribute: 'role' })\n\toverride role = 'article'\n\n\t/**\n\t * ARIA label for accessibility.\n\t */\n\t@property({ attribute: 'aria-label' })\n\toverride ariaLabel: string = ''\n\n\t// Internal state for interaction feedback\n\t@state() pressed = false\n\t@state() private ripples: Array<{ x: number; y: number; id: number }> = []\n\n\tprivate nextRippleId = 0\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis._updateAriaAttributes()\n\t}\n\n\tupdated(changedProperties: Map<string, unknown>) {\n\t\tsuper.updated(changedProperties)\n\t\tif (changedProperties.has('interactive') || changedProperties.has('disabled')) {\n\t\t\tthis._updateAriaAttributes()\n\t\t}\n\t}\n\n\t// Consolidate ARIA attribute updates\n\tprivate _updateAriaAttributes() {\n\t\tconst isInteractive = this.interactive && !this.disabled\n\n\t\tif (isInteractive) {\n\t\t\tthis.setAttribute('tabindex', '0')\n\t\t\tif (!this.role || this.role === 'article') {\n\t\t\t\tthis.role = this.href ? 'link' : 'button'\n\t\t\t}\n\t\t} else {\n\t\t\tthis.removeAttribute('tabindex')\n\t\t\tif (this.role === 'button' || this.role === 'link') {\n\t\t\t\tthis.role = 'article'\n\t\t\t}\n\t\t}\n\t}\n\n\t// Shared ripple creation logic\n\tprivate _addRipple(x: number, y: number) {\n\t\tconst id = this.nextRippleId++\n\t\tthis.ripples = [...this.ripples, { x, y, id }]\n\n\t\t// Remove ripple after animation completes\n\t\tsetTimeout(() => {\n\t\t\tthis.ripples = this.ripples.filter(r => r.id !== id)\n\t\t}, 600) // M3 medium duration\n\t}\n\n\t// Shared navigation logic\n\tprivate _navigate() {\n\t\tif (!this.href) return\n\n\t\tif (this.target === '_blank') {\n\t\t\twindow.open(this.href, '_blank')\n\t\t} else {\n\t\t\twindow.location.href = this.href\n\t\t}\n\t}\n\n\t// Combined action trigger (ripple + navigate + event)\n\tprivate _triggerAction(x: number, y: number) {\n\t\tthis._addRipple(x, y)\n\t\tthis._navigate()\n\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('schmancy-click', {\n\t\t\t\tdetail: { value: this.type },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate handleClick = (e: MouseEvent) => {\n\t\tif (this.disabled || !this.interactive) return\n\n\t\tconst rect = this.getBoundingClientRect()\n\t\tthis._triggerAction(e.clientX - rect.left, e.clientY - rect.top)\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\tif (this.disabled || !this.interactive) return\n\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault()\n\t\t\tthis._setPressed(true)\n\n\t\t\t// Simulate click at center\n\t\t\tconst rect = this.getBoundingClientRect()\n\t\t\tthis._triggerAction(rect.width / 2, rect.height / 2)\n\t\t}\n\t}\n\n\tprivate handleKeyUp = (e: KeyboardEvent) => {\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\tthis._setPressed(false)\n\t\t}\n\t}\n\n\t// Consolidate pressed state management\n\tprivate _setPressed(pressed: boolean) {\n\t\tthis.pressed = pressed\n\t\tif (pressed) {\n\t\t\tthis.setAttribute('pressed', '')\n\t\t} else {\n\t\t\tthis.removeAttribute('pressed')\n\t\t}\n\t}\n\n\tprivate handleMouseDown = () => {\n\t\tif (this.disabled || !this.interactive) return\n\t\tthis._setPressed(true)\n\t}\n\n\tprivate handleMouseUp = () => this._setPressed(false)\n\tprivate handleMouseLeave = () => this._setPressed(false)\n\n\tprotected render() {\n\t\tconst isInteractive = this.interactive && !this.disabled\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\t${isInteractive ? cursorGlow({ radius: 200, intensity: 0.1 }) : ''}\n\t\t\t\tclass=\"relative w-full h-full rounded-xl ${isInteractive ? 'cursor-pointer' : ''}\"\n\t\t\t\t@click=${this.handleClick}\n\t\t\t\t@keydown=${this.handleKeyDown}\n\t\t\t\t@keyup=${this.handleKeyUp}\n\t\t\t\t@mousedown=${this.handleMouseDown}\n\t\t\t\t@mouseup=${this.handleMouseUp}\n\t\t\t\t@mouseleave=${this.handleMouseLeave}\n\t\t\t\taria-label=${ifDefined(this.ariaLabel)}\n\t\t\t\taria-disabled=${this.disabled ? 'true' : 'false'}\n\t\t\t>\n\t\t\t\t<!-- State layer -->\n\t\t\t\t<div\n\t\t\t\t\tclass=\"absolute inset-0 rounded-xl pointer-events-none transition-opacity duration-200 bg-surface-on ${!isInteractive\n\t\t\t\t\t\t? 'opacity-0'\n\t\t\t\t\t\t: this.pressed\n\t\t\t\t\t\t\t? 'opacity-[var(--schmancy-sys-state-pressed-opacity)]'\n\t\t\t\t\t\t\t: 'opacity-0 hover:opacity-[var(--schmancy-sys-state-hover-opacity)] focus-visible:opacity-[var(--schmancy-sys-state-focus-opacity)]'}\"\n\t\t\t\t></div>\n\n\t\t\t\t<!-- Ripples -->\n\t\t\t\t${this.interactive && this.ripples.length\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<div class=\"absolute inset-0 rounded-xl overflow-hidden pointer-events-none\">\n\t\t\t\t\t\t\t\t${this.ripples.map(\n\t\t\t\t\t\t\t\t\tr => html`\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclass=\"absolute rounded-full scale-0 animate-[ripple_600ms_linear] bg-surface-on opacity-[0.12] w-5 h-5 -ml-2.5 -mt-2.5\"\n\t\t\t\t\t\t\t\t\t\t\tstyle=\"left: ${r.x}px; top: ${r.y}px\"\n\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`\n\t\t\t\t\t: ''}\n\n\t\t\t\t<!-- Content -->\n\t\t\t\t<div class=\"relative h-full w-full rounded-xl\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card': SchmancyCard\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n/**\n * @element schmancy-card-content\n */\n@customElement('schmancy-card-content')\nexport default class SchmancyCardContent extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\tpadding: 1rem;\n\t}\n`];\n\tprotected render(): unknown {\n\t\treturn html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card-content': SchmancyCardContent\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\n\n/**\n * @element schmancy-card-media\n */\n@customElement('schmancy-card-media')\nexport default class SchmancyCardMedia extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t\theight: 200px;\n\t\toverflow: hidden;\n\t}\n\t\n\t/* Allow height to be overridden when used in flex/grid layouts */\n\t:host-context(.h-full) {\n\t\theight: 100%;\n\t}\n\t\n\t::slotted(img),\n\timg {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tobject-position: center;\n\t}\n\t\n\t/* Object fit styles based on fit attribute */\n\t:host([fit=\"contain\"]) img,\n\t:host([fit=\"contain\"]) ::slotted(img) {\n\t\tobject-fit: contain;\n\t}\n\t\n\t:host([fit=\"cover\"]) img,\n\t:host([fit=\"cover\"]) ::slotted(img) {\n\t\tobject-fit: cover;\n\t}\n\t\n\t:host([fit=\"fill\"]) img,\n\t:host([fit=\"fill\"]) ::slotted(img) {\n\t\tobject-fit: fill;\n\t}\n\t\n\t:host([fit=\"none\"]) img,\n\t:host([fit=\"none\"]) ::slotted(img) {\n\t\tobject-fit: none;\n\t}\n\t\n\t:host([fit=\"scale-down\"]) img,\n\t:host([fit=\"scale-down\"]) ::slotted(img) {\n\t\tobject-fit: scale-down;\n\t}\n`];\n\t@property({ type: String, reflect: true })\n\tsrc: string = ''\n\n\t@property({ type: String, reflect: true })\n\tfit: 'contain' | 'cover' | 'fill' | 'none' | 'scale-down' = 'contain'\n\t\n\t@property({ type: String })\n\talt: string = ''\n\n\tprotected render(): unknown {\n\t\t// If src is provided, render an img element\n\t\t// Otherwise, allow users to slot their own content\n\t\treturn this.src \n\t\t\t? html`<img src=\"${this.src}\" alt=\"${this.alt}\" />` \n\t\t\t: html`<slot></slot>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-card-media': SchmancyCardMedia\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-
|
|
1
|
+
require(`./chunk-CncqDLb2.cjs`);const e=require(`./mixins-CsYsIJOI.cjs`),t=require(`./active-host-jH3iloCR.cjs`),n=require(`./cursor-glow-Bulq-38P.cjs`);let r=require(`lit/decorators.js`),i=require(`lit`),a=require(`lit/directives/if-defined.js`);var o=class extends e.c{static{this.styles=[i.css`
|
|
2
2
|
:host {
|
|
3
3
|
display: flex;
|
|
4
4
|
gap: 0.5rem;
|