@mhmo91/schmancy 0.10.25 → 0.10.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +9 -18
- package/dist/agent/overlay.confirm-body-BZoUgkdK.js +4574 -0
- package/dist/agent/overlay.confirm-body-BZoUgkdK.js.map +1 -0
- package/dist/agent/schmancy.agent.js +3183 -4976
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/agent/schmancy.manifest.json +68 -24
- package/dist/{area-DrVE5pXW.cjs → area-BSVOYQDA.cjs} +1 -1
- package/dist/{area-DrVE5pXW.cjs.map → area-BSVOYQDA.cjs.map} +1 -1
- package/dist/{area-1EG1LrkX.js → area-C_Yvjmad.js} +1 -1
- package/dist/{area-1EG1LrkX.js.map → area-C_Yvjmad.js.map} +1 -1
- package/dist/area.cjs +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-6pdZxEab.cjs → autocomplete-B50VXUzw.cjs} +1 -1
- package/dist/{autocomplete-6pdZxEab.cjs.map → autocomplete-B50VXUzw.cjs.map} +1 -1
- package/dist/{autocomplete-nrIcCilw.js → autocomplete-C6I1mfOT.js} +2 -2
- package/dist/{autocomplete-nrIcCilw.js.map → autocomplete-C6I1mfOT.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.js +3 -3
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat--fLgbDAE.js → boat-C94QZ4Zt.js} +27 -21
- package/dist/boat-C94QZ4Zt.js.map +1 -0
- package/dist/boat-DVQBNkk5.cjs +85 -0
- package/dist/boat-DVQBNkk5.cjs.map +1 -0
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/breadcrumb.cjs +1 -1
- package/dist/breadcrumb.js +1 -1
- package/dist/{busy-DshZcVZ4.js → busy--bNb42rM.js} +1 -1
- package/dist/{busy-DshZcVZ4.js.map → busy--bNb42rM.js.map} +1 -1
- package/dist/{busy-DVCIxBVf.cjs → busy-DuxFvEkY.cjs} +1 -1
- package/dist/{busy-DVCIxBVf.cjs.map → busy-DuxFvEkY.cjs.map} +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/{button-D9UJ7I6Z.js → button-B7b9L_h5.js} +26 -187
- package/dist/button-B7b9L_h5.js.map +1 -0
- package/dist/{button-JrTMzwHY.cjs → button-DAFZ5A4O.cjs} +2 -60
- package/dist/button-DAFZ5A4O.cjs.map +1 -0
- package/dist/button.cjs +59 -1
- package/dist/button.cjs.map +1 -0
- package/dist/button.js +170 -2
- package/dist/button.js.map +1 -0
- package/dist/{card-CTotavhH.cjs → card-DZPd24Sn.cjs} +1 -1
- package/dist/{card-CTotavhH.cjs.map → card-DZPd24Sn.cjs.map} +1 -1
- package/dist/{card-BvCFuX3J.js → card-ixzxOW-Q.js} +1 -1
- package/dist/{card-BvCFuX3J.js.map → card-ixzxOW-Q.js.map} +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-By4fFmjt.cjs → checkbox-Bi_Fm2mf.cjs} +1 -1
- package/dist/{checkbox-By4fFmjt.cjs.map → checkbox-Bi_Fm2mf.cjs.map} +1 -1
- package/dist/{checkbox-GPsdCUbs.js → checkbox-DdGpepTh.js} +1 -1
- package/dist/{checkbox-GPsdCUbs.js.map → checkbox-DdGpepTh.js.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-27umqnat.js → chips-DLTynyVB.js} +3 -3
- package/dist/{chips-27umqnat.js.map → chips-DLTynyVB.js.map} +1 -1
- package/dist/{chips-BZf9sGA8.cjs → chips-DWQMZErr.cjs} +1 -1
- package/dist/{chips-BZf9sGA8.cjs.map → chips-DWQMZErr.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/{date-range-BJnLWCRF.cjs → date-range-BgGQyxOC.cjs} +1 -1
- package/dist/{date-range-BJnLWCRF.cjs.map → date-range-BgGQyxOC.cjs.map} +1 -1
- package/dist/{date-range-wDVHcr0u.js → date-range-CT6ckjmV.js} +2 -2
- package/dist/{date-range-wDVHcr0u.js.map → date-range-CT6ckjmV.js.map} +1 -1
- package/dist/{date-range-inline-BNbbRfIA.js → date-range-inline-Ho3CENTh.js} +1 -1
- package/dist/{date-range-inline-BNbbRfIA.js.map → date-range-inline-Ho3CENTh.js.map} +1 -1
- package/dist/{date-range-inline-B6uKUliV.cjs → date-range-inline-nPWIs-3C.cjs} +1 -1
- package/dist/{date-range-inline-B6uKUliV.cjs.map → date-range-inline-nPWIs-3C.cjs.map} +1 -1
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +2 -2
- package/dist/{details-DNrWIes6.cjs → details-BnRWMZdt.cjs} +1 -1
- package/dist/{details-DNrWIes6.cjs.map → details-BnRWMZdt.cjs.map} +1 -1
- package/dist/{details-Ckxpwacj.js → details-CcMTvYo7.js} +2 -2
- package/dist/{details-Ckxpwacj.js.map → details-CcMTvYo7.js.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{directives-F15SJZUR.cjs → directives-BkSqmLBV.cjs} +22 -20
- package/dist/directives-BkSqmLBV.cjs.map +1 -0
- package/dist/{directives-BBMqe8x3.js → directives-DgPbz0lQ.js} +142 -198
- package/dist/directives-DgPbz0lQ.js.map +1 -0
- package/dist/directives.cjs +1 -1
- package/dist/directives.js +7 -6
- package/dist/discovery.cjs +1 -1
- package/dist/discovery.js +1 -1
- package/dist/{discovery.service-CVDXO9rH.cjs.map → discovery.service-CIa3Eeuk.cjs.map} +1 -1
- package/dist/{discovery.service-COmbHaoI.js.map → discovery.service-DZFxtRwW.js.map} +1 -1
- package/dist/{divider-Cde33ivs.cjs → divider-C6yJSL1c.cjs} +1 -1
- package/dist/{divider-Cde33ivs.cjs.map → divider-C6yJSL1c.cjs.map} +1 -1
- package/dist/{divider-BzcZGo4S.js → divider-CZCj0ioH.js} +1 -1
- package/dist/{divider-BzcZGo4S.js.map → divider-CZCj0ioH.js.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +1 -1
- package/dist/{expand-DI144OzN.js → expand-Cc6ogXsR.js} +2 -2
- package/dist/{expand-DI144OzN.js.map → expand-Cc6ogXsR.js.map} +1 -1
- package/dist/{expand-Db4V0jj-.cjs → expand-D4EhwOYh.cjs} +1 -1
- package/dist/{expand-Db4V0jj-.cjs.map → expand-D4EhwOYh.cjs.map} +1 -1
- package/dist/expand.cjs +1 -1
- package/dist/expand.js +1 -1
- package/dist/{float--RScf9BZ.cjs → float-B8EPc_OG.cjs} +1 -1
- package/dist/{float--RScf9BZ.cjs.map → float-B8EPc_OG.cjs.map} +1 -1
- package/dist/{float-DIyzy1c2.js → float-BvI3HTtB.js} +1 -1
- package/dist/{float-DIyzy1c2.js.map → float-BvI3HTtB.js.map} +1 -1
- package/dist/float.cjs +1 -1
- package/dist/float.js +1 -1
- package/dist/form-C4eFgFwF.cjs +42 -0
- package/dist/{form-DWNpOsIU.cjs.map → form-C4eFgFwF.cjs.map} +1 -1
- package/dist/{form-RtXH8UHQ.js → form-CGe9rVox.js} +8 -8
- package/dist/{form-RtXH8UHQ.js.map → form-CGe9rVox.js.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +6 -6
- package/dist/gravity-6pL6CfIr.cjs +1 -0
- package/dist/gravity-6pL6CfIr.cjs.map +1 -0
- package/dist/gravity-sVK3zGBF.js +46 -0
- package/dist/gravity-sVK3zGBF.js.map +1 -0
- package/dist/handover/agent-runtime-followups.md +1 -1
- package/dist/handover/agent-runtime-v1.md +3 -3
- package/dist/{hashContent-Dgmzc32o.js.map → hashContent-BqU6v1Xr.js.map} +1 -1
- package/dist/{hashContent-Dh1VzIAb.cjs.map → hashContent-iRZJJWtE.cjs.map} +1 -1
- package/dist/{icons-DXanGDZ_.js → icon-B1eZr2ZL.js} +1 -1
- package/dist/icon-B1eZr2ZL.js.map +1 -0
- package/dist/{icons-bNxlWLlk.cjs → icon-CgIXAvKI.cjs} +1 -1
- package/dist/{icons-DXanGDZ_.js.map → icon-CgIXAvKI.cjs.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-B1XWRaLC.cjs → iframe-BO3BpRLH.cjs} +1 -1
- package/dist/{iframe-B1XWRaLC.cjs.map → iframe-BO3BpRLH.cjs.map} +1 -1
- package/dist/{iframe-BlHK0cjy.js → iframe-CmpAZc61.js} +1 -1
- package/dist/{iframe-BlHK0cjy.js.map → iframe-CmpAZc61.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 +49 -47
- package/dist/{input-C-_XU9AX.cjs → input-5YL2oUBr.cjs} +1 -1
- package/dist/{input-C-_XU9AX.cjs.map → input-5YL2oUBr.cjs.map} +1 -1
- package/dist/{input-CiGa8Dkl.js → input-_Hft9vov.js} +1 -1
- package/dist/{input-CiGa8Dkl.js.map → input-_Hft9vov.js.map} +1 -1
- package/dist/{input-chip-l--zCMGR.js → input-chip-BNTojQT6.js} +1 -1
- package/dist/{input-chip-l--zCMGR.js.map → input-chip-BNTojQT6.js.map} +1 -1
- package/dist/{input-chip-5aYnuRZ_.cjs → input-chip-DKMNpcED.cjs} +1 -1
- package/dist/{input-chip-5aYnuRZ_.cjs.map → input-chip-DKMNpcED.cjs.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/json.cjs +1 -1
- package/dist/json.js +2 -2
- package/dist/kbd.cjs +1 -1
- package/dist/kbd.js +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +1 -1
- package/dist/{lightbox-D9oiu1Nv.js → lightbox-CKlYcnHV.js} +1 -1
- package/dist/{lightbox-D9oiu1Nv.js.map → lightbox-CKlYcnHV.js.map} +1 -1
- package/dist/{lightbox-CfRDkeeb.cjs → lightbox-t4dvb8_A.cjs} +1 -1
- package/dist/{lightbox-CfRDkeeb.cjs.map → lightbox-t4dvb8_A.cjs.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-CDJi3_Ut.cjs → list-21mWtDKg.cjs} +4 -4
- package/dist/list-21mWtDKg.cjs.map +1 -0
- package/dist/{list-BOlRka4v.js → list-B6QhxgRJ.js} +4 -7
- package/dist/list-B6QhxgRJ.js.map +1 -0
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{magnetic-mHXl54Z8.js.map → magnetic-B2VKNfDu.js.map} +1 -1
- package/dist/{magnetic-D-ph029G.cjs.map → magnetic-MQ3HMHJi.cjs.map} +1 -1
- package/dist/{menu-XyrLmCi_.js → menu-CjOgPSOG.js} +2 -2
- package/dist/{menu-XyrLmCi_.js.map → menu-CjOgPSOG.js.map} +1 -1
- package/dist/{menu-CJaDL2cd.cjs → menu-Cu5G4vcR.cjs} +1 -1
- package/dist/{menu-CJaDL2cd.cjs.map → menu-Cu5G4vcR.cjs.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins-8dT5j6CS.js +627 -0
- package/dist/mixins-8dT5j6CS.js.map +1 -0
- package/dist/mixins-BF3Vj8_c.cjs +242 -0
- package/dist/mixins-BF3Vj8_c.cjs.map +1 -0
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.js +1 -1
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/navigation-bar.cjs +1 -1
- package/dist/navigation-bar.js +1 -1
- package/dist/navigation-rail.cjs +7 -5
- package/dist/navigation-rail.cjs.map +1 -1
- package/dist/navigation-rail.js +52 -38
- package/dist/navigation-rail.js.map +1 -1
- package/dist/notification-CDKBKh63.js +243 -0
- package/dist/notification-CDKBKh63.js.map +1 -0
- package/dist/notification-CcNoBFEJ.cjs +24 -0
- package/dist/notification-CcNoBFEJ.cjs.map +1 -0
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-Vpy4UQ-D.js → option-BWfmDJvm.js} +1 -1
- package/dist/{option-Vpy4UQ-D.js.map → option-BWfmDJvm.js.map} +1 -1
- package/dist/{option-nRk4MuXH.cjs → option-DejeqOad.cjs} +1 -1
- package/dist/{option-nRk4MuXH.cjs.map → option-DejeqOad.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{overlay-jlkcrt8F.js → overlay-D3c_NY18.js} +214 -265
- package/dist/overlay-D3c_NY18.js.map +1 -0
- package/dist/overlay-Dv2utO4C.cjs +43 -0
- package/dist/overlay-Dv2utO4C.cjs.map +1 -0
- package/dist/overlay.cjs +1 -1
- package/dist/overlay.confirm-body-B2ntyquG.cjs +79 -0
- package/dist/overlay.confirm-body-B2ntyquG.cjs.map +1 -0
- package/dist/overlay.confirm-body-B_v0ivkn.js +159 -0
- package/dist/overlay.confirm-body-B_v0ivkn.js.map +1 -0
- package/dist/overlay.js +3 -3
- package/dist/overlay.service-B3FjXCqc.js +143 -0
- package/dist/overlay.service-B3FjXCqc.js.map +1 -0
- package/dist/overlay.service-BkSeqXIv.cjs +1 -0
- package/dist/overlay.service-BkSeqXIv.cjs.map +1 -0
- package/dist/{progress-CAp_4jtq.cjs → progress-6_rb3Ah9.cjs} +1 -1
- package/dist/{progress-CAp_4jtq.cjs.map → progress-6_rb3Ah9.cjs.map} +1 -1
- package/dist/{progress-8Bn88GK_.js → progress-CFcmO0wv.js} +1 -1
- package/dist/{progress-8Bn88GK_.js.map → progress-CFcmO0wv.js.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-group-GNHA7qJR.js → radio-group-Bd8y9QpX.js} +1 -1
- package/dist/{radio-group-GNHA7qJR.js.map → radio-group-Bd8y9QpX.js.map} +1 -1
- package/dist/{radio-group-CN44mAoc.cjs → radio-group-_WZg8EKM.cjs} +1 -1
- package/dist/{radio-group-CN44mAoc.cjs.map → radio-group-_WZg8EKM.cjs.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/range.cjs +1 -1
- package/dist/range.js +1 -1
- package/dist/{rxjs-utils-CaC-tdot.cjs.map → rxjs-utils-Csnks202.cjs.map} +1 -1
- package/dist/{rxjs-utils-BXpvHN4-.js.map → rxjs-utils-d-ivVN84.js.map} +1 -1
- package/dist/rxjs-utils.cjs +1 -1
- package/dist/rxjs-utils.js +1 -1
- package/dist/{select-DZNns5Pa.cjs → select-BaioT3yY.cjs} +2 -2
- package/dist/{select-DZNns5Pa.cjs.map → select-BaioT3yY.cjs.map} +1 -1
- package/dist/{select-BnuXRHS4.js → select-Czpl1ztD.js} +3 -3
- package/dist/{select-BnuXRHS4.js.map → select-Czpl1ztD.js.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/SKILL.md +1 -1
- package/dist/skills/list.md +0 -1
- package/dist/skills/schmancy/SKILL.md +1 -1
- package/dist/skills/schmancy/list.md +0 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{splash-screen-DeoPRrOu.cjs → splash-screen-3FtgdVy3.cjs} +1 -1
- package/dist/{splash-screen-DeoPRrOu.cjs.map → splash-screen-3FtgdVy3.cjs.map} +1 -1
- package/dist/{splash-screen-CUP_elaT.js → splash-screen-YtTVkJg8.js} +1 -1
- package/dist/{splash-screen-CUP_elaT.js.map → splash-screen-YtTVkJg8.js.map} +1 -1
- package/dist/splash-screen.cjs +1 -1
- package/dist/splash-screen.js +1 -1
- package/dist/{src-DQ4wr0qq.cjs → src-0LIdvAX6.cjs} +8 -8
- package/dist/{src-DQ4wr0qq.cjs.map → src-0LIdvAX6.cjs.map} +1 -1
- package/dist/{src-B1VkLX3l.js → src-BJHws7IS.js} +37 -37
- package/dist/{src-B1VkLX3l.js.map → src-BJHws7IS.js.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{surface-LkaZQXZn.cjs → surface-BNvxLEDN.cjs} +1 -1
- package/dist/surface-BNvxLEDN.cjs.map +1 -0
- package/dist/{surface-hOvkrjGN.js → surface-CVxyQPln.js} +1 -1
- package/dist/surface-CVxyQPln.js.map +1 -0
- 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-CfwIHhHo.js → tabs-CnPXvZuZ.js} +1 -1
- package/dist/{tabs-CfwIHhHo.js.map → tabs-CnPXvZuZ.js.map} +1 -1
- package/dist/{tabs-bplzstz6.cjs → tabs-DTU7748z.cjs} +1 -1
- package/dist/{tabs-bplzstz6.cjs.map → tabs-DTU7748z.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-hrDp5gQq.cjs → textarea-Bqth6Q8P.cjs} +1 -1
- package/dist/{textarea-hrDp5gQq.cjs.map → textarea-Bqth6Q8P.cjs.map} +1 -1
- package/dist/{textarea-C1A5xuw9.js → textarea-mQPsppmd.js} +1 -1
- package/dist/{textarea-C1A5xuw9.js.map → textarea-mQPsppmd.js.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-BniFOMEo.js → theme-BJqpv4cG.js} +2 -2
- package/dist/{theme-BniFOMEo.js.map → theme-BJqpv4cG.js.map} +1 -1
- package/dist/{theme-DmR6PKV8.cjs → theme-D4HGKt7N.cjs} +1 -1
- package/dist/{theme-DmR6PKV8.cjs.map → theme-D4HGKt7N.cjs.map} +1 -1
- package/dist/{theme-button--ruZIb0T.js → theme-button-Jap7G_IH.js} +1 -1
- package/dist/{theme-button--ruZIb0T.js.map → theme-button-Jap7G_IH.js.map} +1 -1
- package/dist/{theme-button-a0LgZ7hQ.cjs → theme-button-LP-Dgr17.cjs} +1 -1
- package/dist/{theme-button-a0LgZ7hQ.cjs.map → theme-button-LP-Dgr17.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-B5xjEk74.cjs.map → theme.interface-CSt7JUBD.cjs.map} +1 -1
- package/dist/{theme.interface-DVEw3s8m.js.map → theme.interface-odQEpZZH.js.map} +1 -1
- package/dist/theme.js +3 -3
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/typography-BJMm6b0b.js +358 -0
- package/dist/typography-BJMm6b0b.js.map +1 -0
- package/dist/typography-Bc4MmSal.cjs +282 -0
- package/dist/typography-Bc4MmSal.cjs.map +1 -0
- package/dist/typography.cjs +1 -282
- package/dist/typography.js +2 -358
- package/dist/{utils-CVWUrECT.cjs.map → utils-DTa3QHxk.cjs.map} +1 -1
- package/dist/{utils-578eFTx4.js.map → utils-H8wNknWC.js.map} +1 -1
- package/dist/utils.cjs +1 -1
- package/dist/utils.js +1 -1
- package/dist/visually-hidden.cjs +1 -1
- package/dist/visually-hidden.js +1 -1
- package/dist/{window-Bp7zWZpu.cjs → window-CNu_WnsY.cjs} +1 -1
- package/dist/{window-Bp7zWZpu.cjs.map → window-CNu_WnsY.cjs.map} +1 -1
- package/dist/{window-BT9JecWy.js → window-DZTjkE24.js} +1 -1
- package/dist/{window-BT9JecWy.js.map → window-DZTjkE24.js.map} +1 -1
- package/dist/window.cjs +1 -1
- package/dist/window.js +1 -1
- package/package.json +1 -1
- package/skills/schmancy/SKILL.md +1 -1
- package/skills/schmancy/list.md +0 -1
- package/src/boat/boat.ts +33 -23
- package/src/directives/nebula.ts +64 -61
- package/src/list/list.ts +1 -12
- package/src/navigation-rail/navigation-rail.ts +558 -490
- package/src/notification/notification-service.ts +81 -263
- package/src/notification/notification.scss +93 -50
- package/src/notification/notification.ts +32 -69
- package/src/overlay/overlay.component.ts +99 -158
- package/src/overlay/overlay.confirm-body.ts +106 -61
- package/src/overlay/overlay.service.ts +81 -108
- package/src/surface/surface.styles.ts +0 -17
- package/src/surface/surface.ts +5 -7
- package/types/mixins/surface.mixin.d.ts +0 -3
- package/types/src/directives/nebula.d.ts +1 -1
- package/types/src/list/list.d.ts +0 -9
- package/types/src/navigation-rail/navigation-rail.d.ts +21 -1
- package/types/src/notification/notification-service.d.ts +3 -86
- package/types/src/notification/notification.d.ts +1 -1
- package/types/src/overlay/overlay.component.d.ts +1 -2
- package/types/src/overlay/overlay.confirm-body.d.ts +8 -4
- package/types/src/surface/surface.d.ts +5 -6
- package/types/src/surface/surface.styles.d.ts +0 -4
- package/dist/agent/overlay.confirm-body-DozUyDYx.js +0 -2859
- package/dist/agent/overlay.confirm-body-DozUyDYx.js.map +0 -1
- package/dist/boat--fLgbDAE.js.map +0 -1
- package/dist/boat-BIB-gPqy.cjs +0 -80
- package/dist/boat-BIB-gPqy.cjs.map +0 -1
- package/dist/button-D9UJ7I6Z.js.map +0 -1
- package/dist/button-JrTMzwHY.cjs.map +0 -1
- package/dist/directives-BBMqe8x3.js.map +0 -1
- package/dist/directives-F15SJZUR.cjs.map +0 -1
- package/dist/form-DWNpOsIU.cjs +0 -42
- package/dist/icons-bNxlWLlk.cjs.map +0 -1
- package/dist/list-BOlRka4v.js.map +0 -1
- package/dist/list-CDJi3_Ut.cjs.map +0 -1
- package/dist/mixins-CsYsIJOI.cjs +0 -254
- package/dist/mixins-CsYsIJOI.cjs.map +0 -1
- package/dist/mixins-DySzfmal.js +0 -642
- package/dist/mixins-DySzfmal.js.map +0 -1
- package/dist/notification-CHrEY4u8.js +0 -306
- package/dist/notification-CHrEY4u8.js.map +0 -1
- package/dist/notification-DKp4tjaB.cjs +0 -23
- package/dist/notification-DKp4tjaB.cjs.map +0 -1
- package/dist/overlay-HNrWZ4sB.cjs +0 -81
- package/dist/overlay-HNrWZ4sB.cjs.map +0 -1
- package/dist/overlay-jlkcrt8F.js.map +0 -1
- package/dist/overlay.confirm-body-B8dFI3cj.cjs +0 -45
- package/dist/overlay.confirm-body-B8dFI3cj.cjs.map +0 -1
- package/dist/overlay.confirm-body-CYShkjI6.js +0 -100
- package/dist/overlay.confirm-body-CYShkjI6.js.map +0 -1
- package/dist/overlay.service-BTPn7Uv7.cjs +0 -1
- package/dist/overlay.service-BTPn7Uv7.cjs.map +0 -1
- package/dist/overlay.service-BqhhxVJp.js +0 -146
- package/dist/overlay.service-BqhhxVJp.js.map +0 -1
- package/dist/surface-LkaZQXZn.cjs.map +0 -1
- package/dist/surface-hOvkrjGN.js.map +0 -1
- package/dist/typography.cjs.map +0 -1
- package/dist/typography.js.map +0 -1
- /package/dist/{discovery.service-CVDXO9rH.cjs → discovery.service-CIa3Eeuk.cjs} +0 -0
- /package/dist/{discovery.service-COmbHaoI.js → discovery.service-DZFxtRwW.js} +0 -0
- /package/dist/{hashContent-Dgmzc32o.js → hashContent-BqU6v1Xr.js} +0 -0
- /package/dist/{hashContent-Dh1VzIAb.cjs → hashContent-iRZJJWtE.cjs} +0 -0
- /package/dist/{magnetic-mHXl54Z8.js → magnetic-B2VKNfDu.js} +0 -0
- /package/dist/{magnetic-D-ph029G.cjs → magnetic-MQ3HMHJi.cjs} +0 -0
- /package/dist/{rxjs-utils-CaC-tdot.cjs → rxjs-utils-Csnks202.cjs} +0 -0
- /package/dist/{rxjs-utils-BXpvHN4-.js → rxjs-utils-d-ivVN84.js} +0 -0
- /package/dist/{theme.interface-B5xjEk74.cjs → theme.interface-CSt7JUBD.cjs} +0 -0
- /package/dist/{theme.interface-DVEw3s8m.js → theme.interface-odQEpZZH.js} +0 -0
- /package/dist/{utils-CVWUrECT.cjs → utils-DTa3QHxk.cjs} +0 -0
- /package/dist/{utils-578eFTx4.js → utils-H8wNknWC.js} +0 -0
|
@@ -1,490 +1,558 @@
|
|
|
1
|
-
import { SchmancyElement } from '@mixins/index'
|
|
2
|
-
import { html, PropertyValues } from 'lit'
|
|
3
|
-
import { customElement, property, queryAssignedElements, state } from 'lit/decorators.js'
|
|
4
|
-
import { BehaviorSubject, fromEvent, takeUntil } from 'rxjs'
|
|
5
|
-
import { distinctUntilChanged, tap } from 'rxjs/operators'
|
|
6
|
-
import { SchmancyNavigationRailItem } from './navigation-rail-item'
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
*
|
|
29
|
-
* @
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* <
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* <
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
|
|
57
|
-
@
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
*
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
*
|
|
101
|
-
*/
|
|
102
|
-
@property({ type: String
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
this
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
'
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
'
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
'
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
'
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
})
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
//
|
|
462
|
-
const
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
}
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
}
|
|
1
|
+
import { SchmancyElement } from '@mixins/index'
|
|
2
|
+
import { html, PropertyValues } from 'lit'
|
|
3
|
+
import { customElement, property, queryAssignedElements, state } from 'lit/decorators.js'
|
|
4
|
+
import { BehaviorSubject, fromEvent, Observable, takeUntil } from 'rxjs'
|
|
5
|
+
import { distinctUntilChanged, tap } from 'rxjs/operators'
|
|
6
|
+
import { SchmancyNavigationRailItem } from './navigation-rail-item'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Regex matching Tailwind utility prefixes that control items-container layout.
|
|
10
|
+
* Classes matching this are forwarded from the host's `class` attribute to the
|
|
11
|
+
* inner `<nav>` element so authors can write e.g. `class="grid gap-2"` on the
|
|
12
|
+
* host and have the items container adopt that layout.
|
|
13
|
+
* Classes NOT matching (bg-*, text-*, shadow-*, etc.) stay on the host only.
|
|
14
|
+
*/
|
|
15
|
+
const LAYOUT_CLASS_RE =
|
|
16
|
+
/^(grid($|-)|flex($|-)|gap-|col-|row-|justify-|items-|content-|place-|auto-|grid-cols-|grid-rows-)/
|
|
17
|
+
|
|
18
|
+
export type NavigateEvent = CustomEvent<string>
|
|
19
|
+
|
|
20
|
+
export type NavigationRailMenuClickEvent = CustomEvent<void>
|
|
21
|
+
|
|
22
|
+
export type NavigationRailFabClickEvent = CustomEvent<void>
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
export type LabelVisibility = 'all' | 'selected' | 'none'
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Material Design 3 Navigation Rail Component
|
|
29
|
+
* @see https://m3.material.io/components/navigation-rail/overview
|
|
30
|
+
*
|
|
31
|
+
* `<schmancy-navigation-rail>` component
|
|
32
|
+
*
|
|
33
|
+
* A Material Design 3 vertical navigation component positioned on the left side of an application.
|
|
34
|
+
* Navigation rails provide access to between 3-7 primary destinations with a compact footprint.
|
|
35
|
+
* Automatically hides in fullscreen mode when triggered via schmancyTheme.next({ fullscreen: true }).
|
|
36
|
+
*
|
|
37
|
+
* ## Layout composition
|
|
38
|
+
* Place layout utilities directly on the host element. They are forwarded to the
|
|
39
|
+
* items container `<div part="items">` (the direct flat-tree parent of slotted items,
|
|
40
|
+
* placed inside `<schmancy-scroll>`). When no layout utilities are present on the host,
|
|
41
|
+
* the items container defaults to `flex flex-col gap-3` plus the `justify-*` class
|
|
42
|
+
* driven by the `alignment` property.
|
|
43
|
+
*
|
|
44
|
+
* <schmancy-navigation-rail class="grid gap-2">…</schmancy-navigation-rail>
|
|
45
|
+
* → items container <div>: `grid gap-2`
|
|
46
|
+
*
|
|
47
|
+
* <schmancy-navigation-rail>…</schmancy-navigation-rail>
|
|
48
|
+
* → items container <div>: `flex flex-col gap-3 justify-start`
|
|
49
|
+
*
|
|
50
|
+
* @element schmancy-navigation-rail
|
|
51
|
+
* @slot fab - Slot for a floating action button at the top
|
|
52
|
+
* @slot menu - Slot for a menu icon or button below the FAB
|
|
53
|
+
* @slot header - Custom header content slot
|
|
54
|
+
* @slot footer - Custom footer content slot
|
|
55
|
+
* @slot - Default slot for navigation rail items
|
|
56
|
+
*
|
|
57
|
+
* @fires navigate - When a navigation item is selected
|
|
58
|
+
* @fires menu-click - When the menu button is clicked
|
|
59
|
+
* @fires fab-click - When the FAB is clicked
|
|
60
|
+
*
|
|
61
|
+
* @csspart rail - The main rail container
|
|
62
|
+
* @csspart header - The header section
|
|
63
|
+
* @csspart nav - The navigation scroll region (contains items)
|
|
64
|
+
* @csspart items - The direct layout container for slotted items (inside schmancy-scroll)
|
|
65
|
+
* @csspart footer - The footer section
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* <schmancy-navigation-rail activeIndex="0">
|
|
69
|
+
* <schmancy-button slot="fab" variant="filled" aria-label="Compose">
|
|
70
|
+
* <schmancy-icon>add</schmancy-icon>
|
|
71
|
+
* </schmancy-button>
|
|
72
|
+
* <schmancy-button slot="menu" variant="text" aria-label="Menu">
|
|
73
|
+
* <schmancy-icon>menu</schmancy-icon>
|
|
74
|
+
* </schmancy-button>
|
|
75
|
+
* <schmancy-navigation-rail-item icon="home" label="Home"></schmancy-navigation-rail-item>
|
|
76
|
+
* <schmancy-navigation-rail-item icon="search" label="Search"></schmancy-navigation-rail-item>
|
|
77
|
+
* <schmancy-navigation-rail-item icon="favorite" label="Favorites" badge="3"></schmancy-navigation-rail-item>
|
|
78
|
+
* <schmancy-navigation-rail-item icon="settings" label="Settings"></schmancy-navigation-rail-item>
|
|
79
|
+
* </schmancy-navigation-rail>
|
|
80
|
+
*/
|
|
81
|
+
@customElement('schmancy-navigation-rail')
|
|
82
|
+
export class SchmancyNavigationRail extends SchmancyElement {
|
|
83
|
+
// Observable state
|
|
84
|
+
private activeIndex$ = new BehaviorSubject<number>(-1)
|
|
85
|
+
|
|
86
|
+
// Properties
|
|
87
|
+
/**
|
|
88
|
+
* The currently active item index
|
|
89
|
+
* @default -1
|
|
90
|
+
*/
|
|
91
|
+
@property({ type: Number })
|
|
92
|
+
get activeIndex() {
|
|
93
|
+
return this.activeIndex$.value
|
|
94
|
+
}
|
|
95
|
+
set activeIndex(value: number) {
|
|
96
|
+
this.activeIndex$.next(value)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* The currently active item value (for programmatic selection)
|
|
101
|
+
*/
|
|
102
|
+
@property({ type: String })
|
|
103
|
+
get activeValue() {
|
|
104
|
+
return this._activeValue
|
|
105
|
+
}
|
|
106
|
+
set activeValue(value: string) {
|
|
107
|
+
this._activeValue = value
|
|
108
|
+
this.updateActiveByValue(value)
|
|
109
|
+
}
|
|
110
|
+
private _activeValue = ''
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* When to show labels for navigation items
|
|
114
|
+
* 'all' - Always show labels for all items
|
|
115
|
+
* 'selected' - Only show label for selected item
|
|
116
|
+
* 'none' - Never show labels
|
|
117
|
+
* @default 'all'
|
|
118
|
+
*/
|
|
119
|
+
@property({ type: String, attribute: 'label-visibility', reflect: true })
|
|
120
|
+
labelVisibility: LabelVisibility = 'all'
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Alignment of navigation items
|
|
124
|
+
* @default 'top'
|
|
125
|
+
*/
|
|
126
|
+
@property({ type: String, reflect: true })
|
|
127
|
+
alignment: 'top' | 'center' | 'bottom' = 'top'
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Show tooltips when labels are hidden
|
|
131
|
+
* @default true
|
|
132
|
+
*/
|
|
133
|
+
@property({ type: Boolean })
|
|
134
|
+
showTooltips = true
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Enable keyboard navigation
|
|
138
|
+
* @default true
|
|
139
|
+
*/
|
|
140
|
+
@property({ type: Boolean })
|
|
141
|
+
keyboardNavigation = true
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Whether the navigation rail is expanded
|
|
145
|
+
* @default false
|
|
146
|
+
*/
|
|
147
|
+
@property({ type: Boolean, reflect: true })
|
|
148
|
+
expanded = false
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
// State
|
|
152
|
+
@state()
|
|
153
|
+
private focusedIndex = -1
|
|
154
|
+
|
|
155
|
+
@state()
|
|
156
|
+
private hasHeaderContent = false
|
|
157
|
+
|
|
158
|
+
@state()
|
|
159
|
+
private isFullscreen = false
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Layout-related classes extracted from the host's `class` attribute.
|
|
163
|
+
* Forwarded verbatim to the inner `<nav>` element.
|
|
164
|
+
* When empty, the nav falls back to the M3 default: `flex flex-col gap-3`.
|
|
165
|
+
*/
|
|
166
|
+
@state()
|
|
167
|
+
private _hostLayoutClasses = ''
|
|
168
|
+
|
|
169
|
+
// Queries
|
|
170
|
+
|
|
171
|
+
@queryAssignedElements({ flatten: true })
|
|
172
|
+
private allElements!: Element[]
|
|
173
|
+
|
|
174
|
+
private get navigationItems(): SchmancyNavigationRailItem[] {
|
|
175
|
+
return this.allElements.filter(el => el.tagName === 'SCHMANCY-NAVIGATION-RAIL-ITEM') as SchmancyNavigationRailItem[]
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
connectedCallback() {
|
|
179
|
+
super.connectedCallback()
|
|
180
|
+
|
|
181
|
+
// Set up keyboard navigation if enabled
|
|
182
|
+
if (this.keyboardNavigation) {
|
|
183
|
+
this.addEventListener('keydown', this.handleKeyDown)
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Subscribe to active index changes with distinct values only
|
|
187
|
+
this.activeIndex$
|
|
188
|
+
.pipe(
|
|
189
|
+
distinctUntilChanged(),
|
|
190
|
+
tap(index => this.updateActiveStates(index)),
|
|
191
|
+
takeUntil(this.disconnecting),
|
|
192
|
+
)
|
|
193
|
+
.subscribe()
|
|
194
|
+
|
|
195
|
+
// Listen to fullscreen events
|
|
196
|
+
fromEvent(window, 'fullscreen').pipe(
|
|
197
|
+
tap((event: Event) => {
|
|
198
|
+
const customEvent = event as CustomEvent
|
|
199
|
+
this.isFullscreen = customEvent.detail
|
|
200
|
+
}),
|
|
201
|
+
takeUntil(this.disconnecting)
|
|
202
|
+
).subscribe()
|
|
203
|
+
|
|
204
|
+
// Watch the host's `class` attribute for layout utilities and forward them
|
|
205
|
+
// to the inner <nav>. The Observable wraps MutationObserver so teardown is
|
|
206
|
+
// handled by the existing takeUntil(this.disconnecting) pattern.
|
|
207
|
+
new Observable<string>(subscriber => {
|
|
208
|
+
const extract = () =>
|
|
209
|
+
Array.from(this.classList)
|
|
210
|
+
.filter(c => LAYOUT_CLASS_RE.test(c))
|
|
211
|
+
.join(' ')
|
|
212
|
+
|
|
213
|
+
subscriber.next(extract())
|
|
214
|
+
|
|
215
|
+
const mo = new MutationObserver(() => subscriber.next(extract()))
|
|
216
|
+
mo.observe(this, { attributes: true, attributeFilter: ['class'] })
|
|
217
|
+
return () => mo.disconnect()
|
|
218
|
+
}).pipe(
|
|
219
|
+
distinctUntilChanged(),
|
|
220
|
+
tap(layoutClasses => { this._hostLayoutClasses = layoutClasses }),
|
|
221
|
+
takeUntil(this.disconnecting),
|
|
222
|
+
).subscribe()
|
|
223
|
+
|
|
224
|
+
// Listen for navigate events from child items
|
|
225
|
+
this.setupNavigateListener()
|
|
226
|
+
|
|
227
|
+
// Set up label visibility
|
|
228
|
+
this.updateLabelVisibility()
|
|
229
|
+
|
|
230
|
+
// Update ARIA attributes
|
|
231
|
+
this.setAttribute('role', 'navigation')
|
|
232
|
+
this.setAttribute('aria-label', 'Main navigation')
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
updated(changedProperties: PropertyValues) {
|
|
236
|
+
super.updated(changedProperties)
|
|
237
|
+
|
|
238
|
+
if (changedProperties.has('labelVisibility')) {
|
|
239
|
+
this.updateLabelVisibility()
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
if (changedProperties.has('activeValue')) {
|
|
243
|
+
this.updateActiveByValue(this.activeValue)
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
if (changedProperties.has('expanded')) {
|
|
247
|
+
this.updateLabelVisibility()
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
private updateActiveStates(index: number) {
|
|
252
|
+
this.navigationItems.forEach((item, i) => {
|
|
253
|
+
const isActive = i === index
|
|
254
|
+
item.active = isActive
|
|
255
|
+
item.setAttribute('aria-selected', String(isActive))
|
|
256
|
+
item.setAttribute('tabindex', isActive ? '0' : '-1')
|
|
257
|
+
|
|
258
|
+
// Update activeValue when index changes
|
|
259
|
+
if (isActive) {
|
|
260
|
+
this._activeValue = item.value || item.label || ''
|
|
261
|
+
}
|
|
262
|
+
})
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
private updateActiveByValue(value: string) {
|
|
266
|
+
const index = this.navigationItems.findIndex(item => item.getAttribute('value') === value || item.label === value)
|
|
267
|
+
if (index >= 0) {
|
|
268
|
+
this.activeIndex = index
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
private updateLabelVisibility() {
|
|
273
|
+
this.navigationItems.forEach((item, i) => {
|
|
274
|
+
let shouldShowLabel = false
|
|
275
|
+
|
|
276
|
+
// M3 Spec: In expanded state, always show all labels
|
|
277
|
+
if (this.expanded) {
|
|
278
|
+
shouldShowLabel = true
|
|
279
|
+
} else {
|
|
280
|
+
// In collapsed state, respect labelVisibility setting
|
|
281
|
+
shouldShowLabel =
|
|
282
|
+
this.labelVisibility === 'all' || (this.labelVisibility === 'selected' && i === this.activeIndex)
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
item.showLabel = shouldShowLabel
|
|
286
|
+
|
|
287
|
+
// Add tooltips when labels are hidden (only in collapsed state)
|
|
288
|
+
if (this.showTooltips && !shouldShowLabel && !this.expanded && item.label) {
|
|
289
|
+
item.setAttribute('title', item.label)
|
|
290
|
+
} else {
|
|
291
|
+
item.removeAttribute('title')
|
|
292
|
+
}
|
|
293
|
+
})
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
// Note: Hover-based label showing removed for M3 compliance
|
|
297
|
+
// Labels are now controlled via labelVisibility property and expanded state
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Programmatically expand the navigation rail
|
|
301
|
+
*/
|
|
302
|
+
expand() {
|
|
303
|
+
this.expanded = true
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Programmatically collapse the navigation rail
|
|
308
|
+
*/
|
|
309
|
+
collapse() {
|
|
310
|
+
this.expanded = false
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* Add a boat item to the navigation rail
|
|
315
|
+
* @param config Configuration for the boat item
|
|
316
|
+
* @returns The created or existing navigation rail item element
|
|
317
|
+
*/
|
|
318
|
+
public addBoatItem(config: { id: string; title: string; icon?: string }) {
|
|
319
|
+
// Check if item already exists
|
|
320
|
+
const existingItem = this.querySelector(`[value="${config.id}"]`) as HTMLElement
|
|
321
|
+
if (existingItem) {
|
|
322
|
+
// Item already exists, just return it
|
|
323
|
+
return existingItem
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// Create new item
|
|
327
|
+
const item = document.createElement('schmancy-navigation-rail-item')
|
|
328
|
+
item.setAttribute('value', config.id)
|
|
329
|
+
item.innerHTML = `
|
|
330
|
+
<schmancy-icon slot="icon">${config.icon || 'widgets'}</schmancy-icon>
|
|
331
|
+
${config.title}
|
|
332
|
+
`
|
|
333
|
+
// Add to the rail before any footer content
|
|
334
|
+
const footer = this.querySelector('[slot="footer"]')
|
|
335
|
+
if (footer) {
|
|
336
|
+
this.insertBefore(item, footer)
|
|
337
|
+
} else {
|
|
338
|
+
this.appendChild(item)
|
|
339
|
+
}
|
|
340
|
+
return item
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* Toggle the navigation rail between expanded and collapsed states
|
|
345
|
+
*/
|
|
346
|
+
toggle() {
|
|
347
|
+
this.expanded = !this.expanded
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
private handleKeyDown(event: KeyboardEvent) {
|
|
352
|
+
const items = this.navigationItems
|
|
353
|
+
if (items.length === 0) return
|
|
354
|
+
|
|
355
|
+
let newIndex = this.focusedIndex >= 0 ? this.focusedIndex : this.activeIndex
|
|
356
|
+
|
|
357
|
+
switch (event.key) {
|
|
358
|
+
case 'ArrowDown':
|
|
359
|
+
event.preventDefault()
|
|
360
|
+
newIndex = (newIndex + 1) % items.length
|
|
361
|
+
break
|
|
362
|
+
case 'ArrowUp':
|
|
363
|
+
event.preventDefault()
|
|
364
|
+
newIndex = newIndex <= 0 ? items.length - 1 : newIndex - 1
|
|
365
|
+
break
|
|
366
|
+
case 'Home':
|
|
367
|
+
event.preventDefault()
|
|
368
|
+
newIndex = 0
|
|
369
|
+
break
|
|
370
|
+
case 'End':
|
|
371
|
+
event.preventDefault()
|
|
372
|
+
newIndex = items.length - 1
|
|
373
|
+
break
|
|
374
|
+
case 'Enter':
|
|
375
|
+
case ' ':
|
|
376
|
+
event.preventDefault()
|
|
377
|
+
if (newIndex >= 0) {
|
|
378
|
+
items[newIndex].click()
|
|
379
|
+
}
|
|
380
|
+
return
|
|
381
|
+
default:
|
|
382
|
+
return
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
this.focusedIndex = newIndex
|
|
386
|
+
items[newIndex].focus()
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
private handleFabClick(event: Event) {
|
|
390
|
+
event.stopPropagation()
|
|
391
|
+
this.dispatchEvent(
|
|
392
|
+
new CustomEvent('fab-click', {
|
|
393
|
+
bubbles: true,
|
|
394
|
+
composed: true,
|
|
395
|
+
}),
|
|
396
|
+
)
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
private handleMenuClick(event: Event) {
|
|
400
|
+
event.stopPropagation()
|
|
401
|
+
this.dispatchEvent(
|
|
402
|
+
new CustomEvent('menu-click', {
|
|
403
|
+
bubbles: true,
|
|
404
|
+
composed: true,
|
|
405
|
+
}),
|
|
406
|
+
)
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
protected render() {
|
|
410
|
+
// Host-level classes for the navigation rail (width, visibility, z-index).
|
|
411
|
+
// Layout utilities the author placed on the host are NOT included here —
|
|
412
|
+
// they are forwarded to the inner <nav> via _hostLayoutClasses instead.
|
|
413
|
+
const hostClasses = this.classMap({
|
|
414
|
+
// Layout & Structure - Fixed width to prevent layout shift
|
|
415
|
+
'flex flex-col': true,
|
|
416
|
+
'h-full': true,
|
|
417
|
+
'box-border relative overflow-visible': true,
|
|
418
|
+
'z-10 hover:z-[100]': true, // Base z-index, elevated on hover for overlay
|
|
419
|
+
|
|
420
|
+
// Width - collapses to 0 when fullscreen
|
|
421
|
+
'w-20': !this.isFullscreen, // w-20 = 80px fixed width (M3 spec: 80dp)
|
|
422
|
+
'w-0': this.isFullscreen, // Collapse width to 0 in fullscreen
|
|
423
|
+
|
|
424
|
+
// Visibility and transition
|
|
425
|
+
'transition-all duration-300 ease-emphasized': true,
|
|
426
|
+
'opacity-100': !this.isFullscreen,
|
|
427
|
+
'opacity-0 pointer-events-none': this.isFullscreen,
|
|
428
|
+
'overflow-hidden': this.isFullscreen, // Hide overflow when collapsed
|
|
429
|
+
})
|
|
430
|
+
|
|
431
|
+
// Rail container - programmatically controlled width
|
|
432
|
+
const railClasses = this.classMap({
|
|
433
|
+
// Layout & Structure
|
|
434
|
+
'flex flex-col h-full': true,
|
|
435
|
+
'box-border relative': true,
|
|
436
|
+
|
|
437
|
+
// M3 Colors & Theme
|
|
438
|
+
'bg-container-lowest text-surface-on': true,
|
|
439
|
+
|
|
440
|
+
// M3 Motion - smooth transitions for width and shadow
|
|
441
|
+
'transition-all duration-300 ease-emphasized': true,
|
|
442
|
+
|
|
443
|
+
// Collapsed state (default) - M3 standard 80px width
|
|
444
|
+
'w-20': !this.expanded, // w-20 = 80px (M3 spec: 80dp)
|
|
445
|
+
'px-3': !this.expanded, // px-3 = 12px (M3 spec: 12px to center 56px items)
|
|
446
|
+
|
|
447
|
+
// Expanded state - M3 expanded width with shadow
|
|
448
|
+
'w-60': this.expanded, // w-60 = 240px expanded width
|
|
449
|
+
'px-4': this.expanded, // Larger padding when expanded
|
|
450
|
+
'shadow-lg': this.expanded, // M3 elevation 3 shadow when expanded
|
|
451
|
+
})
|
|
452
|
+
|
|
453
|
+
// Header section classes - hidden when no content
|
|
454
|
+
const headerClasses = this.classMap({
|
|
455
|
+
'flex flex-col items-center gap-1': true,
|
|
456
|
+
'hidden': !this.hasHeaderContent,
|
|
457
|
+
})
|
|
458
|
+
|
|
459
|
+
// Navigation container <nav> — holds a single <schmancy-scroll> child, so only
|
|
460
|
+
// vertical fill classes belong here. Layout of the items themselves lives on the
|
|
461
|
+
// inner <div part="items"> so that the items' flat-tree parent is that div, not nav.
|
|
462
|
+
const navClasses = this.classMap({
|
|
463
|
+
'flex-1': true,
|
|
464
|
+
'min-h-0': true, // Allow flex shrinking and proper scroll container height calculation
|
|
465
|
+
})
|
|
466
|
+
|
|
467
|
+
// Items container <div> — the direct flat-tree parent of slotted navigation items
|
|
468
|
+
// after re-slotting through <schmancy-scroll>. Layout utilities forwarded from the
|
|
469
|
+
// host land here so that `grid gap-2` (or any other layout) actually shapes items.
|
|
470
|
+
// When the host carries no layout classes, default to M3 flex-column + alignment.
|
|
471
|
+
const hasHostLayout = this._hostLayoutClasses.length > 0
|
|
472
|
+
const itemsContainerClasses = hasHostLayout
|
|
473
|
+
? this._hostLayoutClasses
|
|
474
|
+
: this.classMap({
|
|
475
|
+
'flex flex-col gap-3': true,
|
|
476
|
+
'justify-start': this.alignment === 'top',
|
|
477
|
+
'justify-center': this.alignment === 'center',
|
|
478
|
+
'justify-end': this.alignment === 'bottom',
|
|
479
|
+
})
|
|
480
|
+
|
|
481
|
+
// Footer section classes
|
|
482
|
+
const footerClasses = this.classMap({
|
|
483
|
+
'flex flex-col items-center gap-1 mt-auto pt-2': true,
|
|
484
|
+
})
|
|
485
|
+
|
|
486
|
+
return html`
|
|
487
|
+
<div
|
|
488
|
+
class=${hostClasses}
|
|
489
|
+
>
|
|
490
|
+
<div class=${railClasses} part="rail">
|
|
491
|
+
<div class=${headerClasses} part="header">
|
|
492
|
+
<slot name="fab" @click=${this.handleFabClick} @slotchange=${this.handleHeaderSlotChange}></slot>
|
|
493
|
+
<slot name="menu" @click=${this.handleMenuClick} @slotchange=${this.handleHeaderSlotChange}></slot>
|
|
494
|
+
<slot name="header" @slotchange=${this.handleHeaderSlotChange}></slot>
|
|
495
|
+
</div>
|
|
496
|
+
|
|
497
|
+
<nav class=${navClasses} part="nav" role="list">
|
|
498
|
+
<schmancy-scroll hide direction="vertical">
|
|
499
|
+
<div class=${itemsContainerClasses} part="items">
|
|
500
|
+
<slot @slotchange=${this.handleSlotChange}></slot>
|
|
501
|
+
</div>
|
|
502
|
+
</schmancy-scroll>
|
|
503
|
+
</nav>
|
|
504
|
+
|
|
505
|
+
<div class=${footerClasses} part="footer">
|
|
506
|
+
<slot name="footer"></slot>
|
|
507
|
+
</div>
|
|
508
|
+
</div>
|
|
509
|
+
</div>
|
|
510
|
+
`
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
private setupNavigateListener() {
|
|
514
|
+
// Listen for navigate events from child items
|
|
515
|
+
this.addEventListener('navigate', (e: Event) => {
|
|
516
|
+
if (e instanceof CustomEvent) {
|
|
517
|
+
const value = e.detail
|
|
518
|
+
// Find the item that dispatched the event and update active state
|
|
519
|
+
const itemIndex = this.navigationItems.findIndex(item => item.value === value || item.label === value)
|
|
520
|
+
if (itemIndex >= 0) {
|
|
521
|
+
this.activeIndex = itemIndex
|
|
522
|
+
this._activeValue = value
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
})
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
private handleHeaderSlotChange() {
|
|
529
|
+
// Check if any header slot has content
|
|
530
|
+
const headerDiv = this.shadowRoot?.querySelector('[part="header"]')
|
|
531
|
+
if (headerDiv) {
|
|
532
|
+
const allSlots = headerDiv.querySelectorAll('slot')
|
|
533
|
+
this.hasHeaderContent = Array.from(allSlots).some(s =>
|
|
534
|
+
s.assignedNodes({ flatten: true }).length > 0
|
|
535
|
+
)
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
private handleSlotChange() {
|
|
540
|
+
// Update items when slot content changes
|
|
541
|
+
this.updateLabelVisibility()
|
|
542
|
+
this.updateActiveStates(this.activeIndex)
|
|
543
|
+
|
|
544
|
+
// Set ARIA attributes on items
|
|
545
|
+
this.navigationItems.forEach((item, index) => {
|
|
546
|
+
item.setAttribute('role', 'listitem')
|
|
547
|
+
if (!item.hasAttribute('tabindex')) {
|
|
548
|
+
item.setAttribute('tabindex', index === this.activeIndex ? '0' : '-1')
|
|
549
|
+
}
|
|
550
|
+
})
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
declare global {
|
|
555
|
+
interface HTMLElementTagNameMap {
|
|
556
|
+
'schmancy-navigation-rail': SchmancyNavigationRail
|
|
557
|
+
}
|
|
558
|
+
}
|