@mhmo91/schmancy 0.5.18 → 0.5.20
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/ai/navigation-bar-item.md +259 -0
- package/ai/navigation-bar.md +163 -0
- package/dist/ai/navigation-bar-item.md +259 -0
- package/dist/ai/navigation-bar.md +163 -0
- package/dist/{animated-text-B3ShIBX3.cjs → animated-text-D1D0dI8T.cjs} +2 -2
- package/dist/{animated-text-B3ShIBX3.cjs.map → animated-text-D1D0dI8T.cjs.map} +1 -1
- package/dist/{animated-text-Bu95OxOB.js → animated-text-DS9AsLAy.js} +3 -3
- package/dist/{animated-text-Bu95OxOB.js.map → animated-text-DS9AsLAy.js.map} +1 -1
- package/dist/animated-text.cjs +1 -1
- package/dist/animated-text.js +1 -1
- package/dist/area.cjs +1 -1
- package/dist/{area.component-Uj8eYomX.js → area.component-5hv6c-dZ.js} +3 -3
- package/dist/{area.component-Uj8eYomX.js.map → area.component-5hv6c-dZ.js.map} +1 -1
- package/dist/{area.component-De95XHvt.cjs → area.component-DZFtLBMV.cjs} +2 -2
- package/dist/{area.component-De95XHvt.cjs.map → area.component-DZFtLBMV.cjs.map} +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-CfICiUej.js → autocomplete-Bm_tnRns.js} +4 -4
- package/dist/{autocomplete-CfICiUej.js.map → autocomplete-Bm_tnRns.js.map} +1 -1
- package/dist/{autocomplete-S3tqpsfx.cjs → autocomplete-DpGmI06M.cjs} +2 -2
- package/dist/{autocomplete-S3tqpsfx.cjs.map → autocomplete-DpGmI06M.cjs.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/avatar-B0Q9R0jH.cjs +303 -0
- package/dist/avatar-B0Q9R0jH.cjs.map +1 -0
- package/dist/avatar-DVkOL5_x.js +895 -0
- package/dist/avatar-DVkOL5_x.js.map +1 -0
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-X1OG5F2J.js → boat-DDBc--4N.js} +2 -2
- package/dist/{boat-X1OG5F2J.js.map → boat-DDBc--4N.js.map} +1 -1
- package/dist/{boat-COig4aPk.cjs → boat-DpuxxF9v.cjs} +2 -2
- package/dist/{boat-COig4aPk.cjs.map → boat-DpuxxF9v.cjs.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.js +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-CQ_N8nVx.js → checkbox-ByAbf0mX.js} +2 -2
- package/dist/{checkbox-CQ_N8nVx.js.map → checkbox-ByAbf0mX.js.map} +1 -1
- package/dist/{checkbox-BKyJeBzr.cjs → checkbox-DA355aVd.cjs} +2 -2
- package/dist/{checkbox-BKyJeBzr.cjs.map → checkbox-DA355aVd.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +2 -2
- package/dist/code-highlight.cjs +1 -1
- package/dist/code-highlight.js +1 -1
- package/dist/{code-preview-DRt2qNK4.js → code-preview-BEDuv4oc.js} +133 -123
- package/dist/{code-preview-DRt2qNK4.js.map → code-preview-BEDuv4oc.js.map} +1 -1
- package/dist/{code-preview-DdWQ9Huu.cjs → code-preview-DXvds6Ik.cjs} +67 -57
- package/dist/{code-preview-DdWQ9Huu.cjs.map → code-preview-DXvds6Ik.cjs.map} +1 -1
- package/dist/components.cjs +1 -1
- package/dist/components.js +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/{date-range-_0PfGLTG.cjs → date-range-CO96uRfu.cjs} +2 -2
- package/dist/{date-range-_0PfGLTG.cjs.map → date-range-CO96uRfu.cjs.map} +1 -1
- package/dist/{date-range-W2AtcWsE.js → date-range-CWwzapvu.js} +3 -3
- package/dist/{date-range-W2AtcWsE.js.map → date-range-CWwzapvu.js.map} +1 -1
- package/dist/{date-range-inline-tDA37KYD.cjs → date-range-inline-Br8Pkm6Z.cjs} +2 -2
- package/dist/{date-range-inline-tDA37KYD.cjs.map → date-range-inline-Br8Pkm6Z.cjs.map} +1 -1
- package/dist/{date-range-inline-Cqu7nIGM.js → date-range-inline-DcRJrT7z.js} +3 -3
- package/dist/{date-range-inline-Cqu7nIGM.js.map → date-range-inline-DcRJrT7z.js.map} +1 -1
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-CXAQP1GR.js → delay-4p58-oPM.js} +2 -2
- package/dist/{delay-CXAQP1GR.js.map → delay-4p58-oPM.js.map} +1 -1
- package/dist/{delay-B_M7fPe5.cjs → delay-BU66nJyr.cjs} +2 -2
- package/dist/{delay-B_M7fPe5.cjs.map → delay-BU66nJyr.cjs.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{details-CphTZvhk.js → details-COgnQWz1.js} +2 -2
- package/dist/{details-CphTZvhk.js.map → details-COgnQWz1.js.map} +1 -1
- package/dist/{details-Chfs-oHV.cjs → details-CoqpAwjh.cjs} +2 -2
- package/dist/{details-Chfs-oHV.cjs.map → details-CoqpAwjh.cjs.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{dialog-content-Cm8VekL4.cjs → dialog-content-CJUcyFT1.cjs} +2 -2
- package/dist/{dialog-content-Cm8VekL4.cjs.map → dialog-content-CJUcyFT1.cjs.map} +1 -1
- package/dist/{dialog-content-h_Oz2PDz.js → dialog-content-naA5eL6T.js} +3 -3
- package/dist/{dialog-content-h_Oz2PDz.js.map → dialog-content-naA5eL6T.js.map} +1 -1
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.js +1 -1
- package/dist/{divider-DZZPRjp6.js → divider-DsNchzPn.js} +3 -3
- package/dist/{divider-DZZPRjp6.js.map → divider-DsNchzPn.js.map} +1 -1
- package/dist/{divider-CrP3muaP.cjs → divider-a2f7N3mc.cjs} +2 -2
- package/dist/{divider-CrP3muaP.cjs.map → divider-a2f7N3mc.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/{dropdown-content-CB1GBHlI.js → dropdown-content-CARJm72a.js} +3 -3
- package/dist/{dropdown-content-CB1GBHlI.js.map → dropdown-content-CARJm72a.js.map} +1 -1
- package/dist/{dropdown-content-A6ZdJyZz.cjs → dropdown-content-YiOmwoxH.cjs} +2 -2
- package/dist/{dropdown-content-A6ZdJyZz.cjs.map → dropdown-content-YiOmwoxH.cjs.map} +1 -1
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +1 -1
- package/dist/{email-recipients-Wk64dWuZ.js → email-recipients-CM41HA4G.js} +5 -5
- package/dist/{email-recipients-Wk64dWuZ.js.map → email-recipients-CM41HA4G.js.map} +1 -1
- package/dist/{email-recipients-DbovFfyf.cjs → email-recipients-Dha5jYMG.cjs} +2 -2
- package/dist/{email-recipients-DbovFfyf.cjs.map → email-recipients-Dha5jYMG.cjs.map} +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{flex-BjEfo9Y7.js → flex-D-oS3wlY.js} +2 -2
- package/dist/{flex-BjEfo9Y7.js.map → flex-D-oS3wlY.js.map} +1 -1
- package/dist/{flex-B20VU8L_.cjs → flex-zqTHF06u.cjs} +2 -2
- package/dist/{flex-B20VU8L_.cjs.map → flex-zqTHF06u.cjs.map} +1 -1
- package/dist/{form-C02xoiR8.cjs → form-BSlt0E8v.cjs} +2 -2
- package/dist/{form-C02xoiR8.cjs.map → form-BSlt0E8v.cjs.map} +1 -1
- package/dist/{form-C1PF3LFP.js → form-DPAzy8Dn.js} +2 -2
- package/dist/{form-C1PF3LFP.js.map → form-DPAzy8Dn.js.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{formField.mixin-Butk4H3G.js → formField.mixin-CVkUNhSX.js} +2 -2
- package/dist/{formField.mixin-Butk4H3G.js.map → formField.mixin-CVkUNhSX.js.map} +1 -1
- package/dist/{formField.mixin-pLRVCeUD.cjs → formField.mixin-R7Ddvq3q.cjs} +2 -2
- package/dist/{formField.mixin-pLRVCeUD.cjs.map → formField.mixin-R7Ddvq3q.cjs.map} +1 -1
- package/dist/{icon-CcNT1vvG.cjs → icon-Cm5BKSV4.cjs} +2 -2
- package/dist/{icon-CcNT1vvG.cjs.map → icon-Cm5BKSV4.cjs.map} +1 -1
- package/dist/{icon-BZUpikxQ.js → icon-ave1X5b9.js} +2 -2
- package/dist/{icon-BZUpikxQ.js.map → icon-ave1X5b9.js.map} +1 -1
- package/dist/{icon-button-C5YpXRdC.cjs → icon-button-BdB5el84.cjs} +2 -2
- package/dist/{icon-button-C5YpXRdC.cjs.map → icon-button-BdB5el84.cjs.map} +1 -1
- package/dist/{icon-button-7b5uVTan.js → icon-button-DiNXfJ8u.js} +3 -3
- package/dist/{icon-button-7b5uVTan.js.map → icon-button-DiNXfJ8u.js.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +212 -210
- package/dist/{input-DhdHemYN.cjs → input-B6zwyDBC.cjs} +2 -2
- package/dist/{input-DhdHemYN.cjs.map → input-B6zwyDBC.cjs.map} +1 -1
- package/dist/{input-DC8Sf6IC.js → input-DPiDmsjt.js} +3 -3
- package/dist/{input-DC8Sf6IC.js.map → input-DPiDmsjt.js.map} +1 -1
- package/dist/{input-chip-CIk926sc.js → input-chip-C06GAnnC.js} +2 -2
- package/dist/{input-chip-CIk926sc.js.map → input-chip-C06GAnnC.js.map} +1 -1
- package/dist/{input-chip-BVeKi5rc.cjs → input-chip-CkWSf6nV.cjs} +2 -2
- package/dist/{input-chip-BVeKi5rc.cjs.map → input-chip-CkWSf6nV.cjs.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +1 -1
- package/dist/{list-t7vG7o_O.cjs → list-BCDPk6mM.cjs} +2 -2
- package/dist/{list-t7vG7o_O.cjs.map → list-BCDPk6mM.cjs.map} +1 -1
- package/dist/{list-CGNZvRGe.js → list-vICZQxqV.js} +2 -2
- package/dist/{list-CGNZvRGe.js.map → list-vICZQxqV.js.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-BJ_Q1yRD.cjs → litElement.mixin-DLJYzvsb.cjs} +2 -2
- package/dist/{litElement.mixin-BJ_Q1yRD.cjs.map → litElement.mixin-DLJYzvsb.cjs.map} +1 -1
- package/dist/{litElement.mixin-C_TdCsfa.js → litElement.mixin-jTGHsEfH.js} +2 -2
- package/dist/{litElement.mixin-C_TdCsfa.js.map → litElement.mixin-jTGHsEfH.js.map} +1 -1
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-Bm3uVhWx.cjs → map-D6QG9Yzr.cjs} +2 -2
- package/dist/{map-Bm3uVhWx.cjs.map → map-D6QG9Yzr.cjs.map} +1 -1
- package/dist/{map-BiTqxS1F.js → map-DZt51SfS.js} +2 -2
- package/dist/{map-BiTqxS1F.js.map → map-DZt51SfS.js.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{media-BKviPW_h.js → media-BUx20F5U.js} +2 -2
- package/dist/{media-BKviPW_h.js.map → media-BUx20F5U.js.map} +1 -1
- package/dist/{media-D1kp7fjX.cjs → media-CdPEYBLJ.cjs} +2 -2
- package/dist/{media-D1kp7fjX.cjs.map → media-CdPEYBLJ.cjs.map} +1 -1
- package/dist/{menu-Cjz7s37L.cjs → menu-2UwBHzr9.cjs} +2 -2
- package/dist/{menu-Cjz7s37L.cjs.map → menu-2UwBHzr9.cjs.map} +1 -1
- package/dist/{menu-BZzL9ILt.js → menu-CvWQC1In.js} +3 -3
- package/dist/{menu-BZzL9ILt.js.map → menu-CvWQC1In.js.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/navigation-bar.cjs +2 -0
- package/dist/navigation-bar.cjs.map +1 -0
- package/dist/navigation-bar.js +6 -0
- package/dist/navigation-bar.js.map +1 -0
- package/dist/{navigation-rail-item-D3uE3_58.js → navigation-rail-item-CIg6-B2G.js} +2 -2
- package/dist/{navigation-rail-item-D3uE3_58.js.map → navigation-rail-item-CIg6-B2G.js.map} +1 -1
- package/dist/{navigation-rail-item-B4IK1tid.cjs → navigation-rail-item-DA7eqAg3.cjs} +2 -2
- package/dist/{navigation-rail-item-B4IK1tid.cjs.map → navigation-rail-item-DA7eqAg3.cjs.map} +1 -1
- package/dist/navigation-rail.cjs +1 -1
- package/dist/navigation-rail.js +1 -1
- package/dist/{notification-service-ECIE9gmi.cjs → notification-service-BqvWCDoP.cjs} +2 -2
- package/dist/{notification-service-ECIE9gmi.cjs.map → notification-service-BqvWCDoP.cjs.map} +1 -1
- package/dist/{notification-service-CLOPRsR_.js → notification-service-eOCFErH1.js} +4 -4
- package/dist/{notification-service-CLOPRsR_.js.map → notification-service-eOCFErH1.js.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +2 -2
- package/dist/{notify-nO72O0p5.cjs → notify-BaedZ1y9.cjs} +2 -2
- package/dist/{notify-nO72O0p5.cjs.map → notify-BaedZ1y9.cjs.map} +1 -1
- package/dist/{notify-Ujep-Wva.js → notify-COSA8XRV.js} +2 -2
- package/dist/{notify-Ujep-Wva.js.map → notify-COSA8XRV.js.map} +1 -1
- package/dist/{option-r8dBm4ca.cjs → option-CeXe-DCz.cjs} +2 -2
- package/dist/{option-r8dBm4ca.cjs.map → option-CeXe-DCz.cjs.map} +1 -1
- package/dist/{option-CRjbCpf-.js → option-CplQ_59U.js} +2 -2
- package/dist/{option-CRjbCpf-.js.map → option-CplQ_59U.js.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{payment-card-form-BkWQ6H8v.js → payment-card-form-hVPgM3HO.js} +3 -3
- package/dist/{payment-card-form-BkWQ6H8v.js.map → payment-card-form-hVPgM3HO.js.map} +1 -1
- package/dist/{payment-card-form-C3rs3GJg.cjs → payment-card-form-wns1GAaC.cjs} +2 -2
- package/dist/{payment-card-form-C3rs3GJg.cjs.map → payment-card-form-wns1GAaC.cjs.map} +1 -1
- package/dist/{progress-C6sY_Q2O.cjs → progress-CM5lHuCR.cjs} +2 -2
- package/dist/{progress-C6sY_Q2O.cjs.map → progress-CM5lHuCR.cjs.map} +1 -1
- package/dist/{progress-T5BaCgVz.js → progress-X8hxleUC.js} +2 -2
- package/dist/{progress-T5BaCgVz.js.map → progress-X8hxleUC.js.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-button-BXZsXmyT.js → radio-button--uXczpjB.js} +3 -3
- package/dist/{radio-button-BXZsXmyT.js.map → radio-button--uXczpjB.js.map} +1 -1
- package/dist/{radio-button-C85DWct1.cjs → radio-button-D76Qubig.cjs} +2 -2
- package/dist/{radio-button-C85DWct1.cjs.map → radio-button-D76Qubig.cjs.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/{schmancy-steps-container-C18l7ZUJ.js → schmancy-steps-container-Csh_Ocoa.js} +2 -2
- package/dist/{schmancy-steps-container-C18l7ZUJ.js.map → schmancy-steps-container-Csh_Ocoa.js.map} +1 -1
- package/dist/{schmancy-steps-container-YzlY4UDL.cjs → schmancy-steps-container-Dc_hXgrm.cjs} +2 -2
- package/dist/{schmancy-steps-container-YzlY4UDL.cjs.map → schmancy-steps-container-Dc_hXgrm.cjs.map} +1 -1
- package/dist/{select-BgxZupg_.js → select-BrdNXtJK.js} +27 -21
- package/dist/select-BrdNXtJK.js.map +1 -0
- package/dist/select-DvjgcI2e.cjs +57 -0
- package/dist/select-DvjgcI2e.cjs.map +1 -0
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-Dn2OyNPH.js → sheet-D6hxqRpX.js} +3 -3
- package/dist/{sheet-Dn2OyNPH.js.map → sheet-D6hxqRpX.js.map} +1 -1
- package/dist/{sheet-y9Uo1NQy.cjs → sheet-DrGvhM5D.cjs} +2 -2
- package/dist/{sheet-y9Uo1NQy.cjs.map → sheet-DrGvhM5D.cjs.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +1 -1
- package/dist/{slider-CTsC1POO.cjs → slider-DNqgaGvI.cjs} +2 -2
- package/dist/{slider-CTsC1POO.cjs.map → slider-DNqgaGvI.cjs.map} +1 -1
- package/dist/{slider-HrSdi1w5.js → slider-ev-R3lWD.js} +3 -3
- package/dist/{slider-HrSdi1w5.js.map → slider-ev-R3lWD.js.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{spinner-CwsNWGqj.js → spinner-0Be5YjKa.js} +2 -2
- package/dist/{spinner-CwsNWGqj.js.map → spinner-0Be5YjKa.js.map} +1 -1
- package/dist/{spinner-DguvYTr2.cjs → spinner-BBhBlm_F.cjs} +2 -2
- package/dist/{spinner-DguvYTr2.cjs.map → spinner-BBhBlm_F.cjs.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{suggestion-chip-CocgJQgD.cjs → suggestion-chip-GLpIJvu3.cjs} +2 -2
- package/dist/{suggestion-chip-CocgJQgD.cjs.map → suggestion-chip-GLpIJvu3.cjs.map} +1 -1
- package/dist/{suggestion-chip-BcfuYhVu.js → suggestion-chip-WW3dScRF.js} +3 -3
- package/dist/{suggestion-chip-BcfuYhVu.js.map → suggestion-chip-WW3dScRF.js.map} +1 -1
- package/dist/{surface-14-wbhaX.cjs → surface-BaMQfpnN.cjs} +2 -2
- package/dist/{surface-14-wbhaX.cjs.map → surface-BaMQfpnN.cjs.map} +1 -1
- package/dist/{surface-BU2twRfK.js → surface-DmtBge0h.js} +2 -2
- package/dist/{surface-BU2twRfK.js.map → surface-DmtBge0h.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{table-CUWzQ4jl.cjs → table-Bc86ZVfE.cjs} +2 -2
- package/dist/{table-CUWzQ4jl.cjs.map → table-Bc86ZVfE.cjs.map} +1 -1
- package/dist/{table-d_te1RgD.js → table-D00xx57f.js} +2 -2
- package/dist/{table-d_te1RgD.js.map → table-D00xx57f.js.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-compatibility-Boc5CUVW.js → tabs-compatibility-BQqS_oQN.js} +2 -2
- package/dist/{tabs-compatibility-Boc5CUVW.js.map → tabs-compatibility-BQqS_oQN.js.map} +1 -1
- package/dist/{tabs-compatibility-DyZLNr4f.cjs → tabs-compatibility-Bo4Z38SO.cjs} +2 -2
- package/dist/{tabs-compatibility-DyZLNr4f.cjs.map → tabs-compatibility-Bo4Z38SO.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tailwind.mixin-B_-9TcsC.cjs +2 -0
- package/dist/{tailwind.mixin-D2o72t31.cjs.map → tailwind.mixin-B_-9TcsC.cjs.map} +1 -1
- package/dist/tailwind.mixin-Dq8FD_xN.js +43 -0
- package/dist/{tailwind.mixin-nZk3QUQy.js.map → tailwind.mixin-Dq8FD_xN.js.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-B0sYfSz6.js → textarea-DpSgcB0q.js} +2 -2
- package/dist/{textarea-B0sYfSz6.js.map → textarea-DpSgcB0q.js.map} +1 -1
- package/dist/{textarea-mrIBP74N.cjs → textarea-DvfusaL0.cjs} +2 -2
- package/dist/{textarea-mrIBP74N.cjs.map → textarea-DvfusaL0.cjs.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-button-CNJVyopz.js → theme-button-1dnUcGe5.js} +2 -2
- package/dist/{theme-button-CNJVyopz.js.map → theme-button-1dnUcGe5.js.map} +1 -1
- package/dist/{theme-button-DGb5LDjM.cjs → theme-button-Dj3aS2jG.cjs} +2 -2
- package/dist/{theme-button-DGb5LDjM.cjs.map → theme-button-Dj3aS2jG.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.component-BIrl0bms.cjs → theme.component-B2834R93.cjs} +2 -2
- package/dist/{theme.component-BIrl0bms.cjs.map → theme.component-B2834R93.cjs.map} +1 -1
- package/dist/{theme.component-X5en4kgs.js → theme.component-DwzieORm.js} +2 -2
- package/dist/{theme.component-X5en4kgs.js.map → theme.component-DwzieORm.js.map} +1 -1
- package/dist/theme.js +1 -1
- package/dist/{timezone-Bt3qA38o.cjs → timezone-CWEqsRA_.cjs} +2 -2
- package/dist/{timezone-Bt3qA38o.cjs.map → timezone-CWEqsRA_.cjs.map} +1 -1
- package/dist/{timezone-CjMKVlle.js → timezone-YbhVzZRq.js} +3 -3
- package/dist/{timezone-CjMKVlle.js.map → timezone-YbhVzZRq.js.map} +1 -1
- package/dist/{tooltip-B8YU69FO.cjs → tooltip-BZ2fruXd.cjs} +2 -2
- package/dist/{tooltip-B8YU69FO.cjs.map → tooltip-BZ2fruXd.cjs.map} +1 -1
- package/dist/{tooltip-BorRixOk.js → tooltip-DgLua_UV.js} +2 -2
- package/dist/{tooltip-BorRixOk.js.map → tooltip-DgLua_UV.js.map} +1 -1
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/{tree-DQi0dyBy.js → tree-Dg-mKO7n.js} +2 -2
- package/dist/{tree-DQi0dyBy.js.map → tree-Dg-mKO7n.js.map} +1 -1
- package/dist/{tree-jWKUZns-.cjs → tree-c9Fcsgxi.cjs} +2 -2
- package/dist/{tree-jWKUZns-.cjs.map → tree-c9Fcsgxi.cjs.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-GHGwLOWk.js → typewriter-Bgp3f7FN.js} +4 -4
- package/dist/{typewriter-GHGwLOWk.js.map → typewriter-Bgp3f7FN.js.map} +1 -1
- package/dist/{typewriter-BCVmjF7y.cjs → typewriter-FHkXxEdA.cjs} +2 -2
- package/dist/{typewriter-BCVmjF7y.cjs.map → typewriter-FHkXxEdA.cjs.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{typography-DsKadWmR.js → typography-B2kH45Vn.js} +2 -2
- package/dist/{typography-DsKadWmR.js.map → typography-B2kH45Vn.js.map} +1 -1
- package/dist/{typography-BIHYyI6-.cjs → typography-CE_QuH1P.cjs} +2 -2
- package/dist/{typography-BIHYyI6-.cjs.map → typography-CE_QuH1P.cjs.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/package.json +1 -1
- package/types/src/code-highlight/code-highlight.d.ts +1 -1
- package/types/src/index.d.ts +1 -0
- package/types/src/navigation-bar/index.d.ts +2 -0
- package/types/src/navigation-bar/navigation-bar-item.d.ts +94 -0
- package/types/src/navigation-bar/navigation-bar.d.ts +93 -0
- package/types/src/select/select.d.ts +2 -0
- package/dist/avatar-3C1rkJ1T.cjs +0 -157
- package/dist/avatar-3C1rkJ1T.cjs.map +0 -1
- package/dist/avatar-CxDF7O9q.js +0 -609
- package/dist/avatar-CxDF7O9q.js.map +0 -1
- package/dist/select-BgxZupg_.js.map +0 -1
- package/dist/select-Dve8bW-v.cjs +0 -57
- package/dist/select-Dve8bW-v.cjs.map +0 -1
- package/dist/tailwind.mixin-D2o72t31.cjs +0 -2
- package/dist/tailwind.mixin-nZk3QUQy.js +0 -43
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
# Navigation Bar Item Component
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
The `<schmancy-navigation-bar-item>` component represents an individual navigation destination within a navigation bar. It follows Material Design 3 specifications with proper touch targets, ripple effects, and state management using RxJS observables.
|
|
5
|
+
|
|
6
|
+
## Usage
|
|
7
|
+
|
|
8
|
+
### Basic Example
|
|
9
|
+
```html
|
|
10
|
+
<schmancy-navigation-bar-item
|
|
11
|
+
icon="home"
|
|
12
|
+
label="Home"
|
|
13
|
+
active
|
|
14
|
+
></schmancy-navigation-bar-item>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### With Badge
|
|
18
|
+
```html
|
|
19
|
+
<schmancy-navigation-bar-item
|
|
20
|
+
icon="notifications"
|
|
21
|
+
label="Alerts"
|
|
22
|
+
badge="5"
|
|
23
|
+
></schmancy-navigation-bar-item>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Custom Icon Slot
|
|
27
|
+
```html
|
|
28
|
+
<schmancy-navigation-bar-item label="Custom">
|
|
29
|
+
<span slot="icon">🏠</span>
|
|
30
|
+
</schmancy-navigation-bar-item>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### With Custom Content
|
|
34
|
+
```html
|
|
35
|
+
<schmancy-navigation-bar-item>
|
|
36
|
+
<schmancy-icon slot="icon" size="24">favorite</schmancy-icon>
|
|
37
|
+
Custom Content
|
|
38
|
+
</schmancy-navigation-bar-item>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Properties
|
|
42
|
+
|
|
43
|
+
| Property | Type | Default | Description |
|
|
44
|
+
|----------|------|---------|-------------|
|
|
45
|
+
| `icon` | `string` | `''` | Material Symbols Outlined icon name |
|
|
46
|
+
| `label` | `string` | `''` | Label text for the navigation item |
|
|
47
|
+
| `badge` | `string` | `''` | Badge content (number or short text) |
|
|
48
|
+
| `active` | `boolean` | `false` | Whether this item is currently active/selected |
|
|
49
|
+
| `disabled` | `boolean` | `false` | Whether this item is disabled |
|
|
50
|
+
| `hideLabels` | `boolean` | `false` | Hide labels (controlled by parent navigation bar) |
|
|
51
|
+
|
|
52
|
+
## Events
|
|
53
|
+
|
|
54
|
+
### bar-item-click
|
|
55
|
+
Fired when the item is clicked.
|
|
56
|
+
|
|
57
|
+
```javascript
|
|
58
|
+
item.addEventListener('bar-item-click', (event) => {
|
|
59
|
+
console.log('Icon:', event.detail.icon);
|
|
60
|
+
console.log('Label:', event.detail.label);
|
|
61
|
+
console.log('Active:', event.detail.active);
|
|
62
|
+
});
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### focus / blur
|
|
66
|
+
Standard focus and blur events for accessibility.
|
|
67
|
+
|
|
68
|
+
## Features
|
|
69
|
+
|
|
70
|
+
### RxJS-Powered Interactions
|
|
71
|
+
- **Click handling**: Uses RxJS observables for instant navigation events
|
|
72
|
+
- **Ripple effects**: Immediate visual feedback on interaction
|
|
73
|
+
- **Keyboard support**: Enter and Space keys properly handled
|
|
74
|
+
- **State management**: BehaviorSubject for reactive active state updates
|
|
75
|
+
|
|
76
|
+
### Full Clickable Area
|
|
77
|
+
The entire navigation item is clickable, not just the icon area:
|
|
78
|
+
- Better touch targets on mobile devices
|
|
79
|
+
- Improved accessibility
|
|
80
|
+
- More intuitive user experience
|
|
81
|
+
- 48x48dp minimum touch target as per Material Design
|
|
82
|
+
|
|
83
|
+
### Badge System
|
|
84
|
+
Intelligent badge handling:
|
|
85
|
+
- Numbers > 99 display as "99+"
|
|
86
|
+
- Text badges limited to 3 characters
|
|
87
|
+
- Zero values hide the badge
|
|
88
|
+
- Proper ARIA labels for screen readers
|
|
89
|
+
|
|
90
|
+
### Ripple Animation
|
|
91
|
+
Material Design ripple effect:
|
|
92
|
+
- Originates from click position
|
|
93
|
+
- 600ms animation duration
|
|
94
|
+
- GPU-accelerated CSS animations
|
|
95
|
+
- Multiple concurrent ripples supported
|
|
96
|
+
|
|
97
|
+
## Slots
|
|
98
|
+
|
|
99
|
+
| Slot | Description |
|
|
100
|
+
|------|-------------|
|
|
101
|
+
| `icon` | Custom icon content to replace the default icon |
|
|
102
|
+
| default | Custom content for the item |
|
|
103
|
+
|
|
104
|
+
## Styling
|
|
105
|
+
|
|
106
|
+
### State-based Styling
|
|
107
|
+
The component automatically applies different styles based on state:
|
|
108
|
+
|
|
109
|
+
```css
|
|
110
|
+
/* Active state */
|
|
111
|
+
schmancy-navigation-bar-item[active] {
|
|
112
|
+
/* Icon indicator background: secondary-container */
|
|
113
|
+
/* Text color: secondary-onContainer */
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/* Inactive state */
|
|
117
|
+
schmancy-navigation-bar-item:not([active]) {
|
|
118
|
+
/* Text color: surface-onVariant */
|
|
119
|
+
/* Hover background: surface-container-highest */
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* Disabled state */
|
|
123
|
+
schmancy-navigation-bar-item[disabled] {
|
|
124
|
+
/* Opacity: 0.38 */
|
|
125
|
+
/* Pointer events disabled */
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### CSS Parts
|
|
130
|
+
```css
|
|
131
|
+
/* Style the button element */
|
|
132
|
+
schmancy-navigation-bar-item::part(button) {
|
|
133
|
+
/* Custom button styles */
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Methods
|
|
138
|
+
|
|
139
|
+
### setActive(isActive: boolean)
|
|
140
|
+
Programmatically set the active state of the item.
|
|
141
|
+
|
|
142
|
+
```javascript
|
|
143
|
+
// In Lit component - use property binding
|
|
144
|
+
@state() isActive = true;
|
|
145
|
+
|
|
146
|
+
render() {
|
|
147
|
+
return html`
|
|
148
|
+
<schmancy-navigation-bar-item ?active=${this.isActive}>
|
|
149
|
+
</schmancy-navigation-bar-item>
|
|
150
|
+
`;
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Integration Example
|
|
155
|
+
|
|
156
|
+
### Complete Navigation Setup
|
|
157
|
+
```typescript
|
|
158
|
+
@customElement('app-navigation')
|
|
159
|
+
class AppNavigation extends LitElement {
|
|
160
|
+
@state() activeIndex = 0;
|
|
161
|
+
|
|
162
|
+
private navigationItems = [
|
|
163
|
+
{ icon: 'home', label: 'Home', route: 'home' },
|
|
164
|
+
{ icon: 'search', label: 'Search', route: 'search' },
|
|
165
|
+
{ icon: 'favorite', label: 'Favorites', route: 'favorites', badge: '3' },
|
|
166
|
+
{ icon: 'person', label: 'Profile', route: 'profile' }
|
|
167
|
+
];
|
|
168
|
+
|
|
169
|
+
private handleItemClick = (e: CustomEvent, index: number) => {
|
|
170
|
+
this.activeIndex = index;
|
|
171
|
+
const route = this.navigationItems[index].route;
|
|
172
|
+
|
|
173
|
+
// Navigate to route
|
|
174
|
+
area.push({
|
|
175
|
+
component: route,
|
|
176
|
+
area: 'main'
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
render() {
|
|
181
|
+
return html`
|
|
182
|
+
${this.navigationItems.map((item, index) => html`
|
|
183
|
+
<schmancy-navigation-bar-item
|
|
184
|
+
icon=${item.icon}
|
|
185
|
+
label=${item.label}
|
|
186
|
+
?active=${this.activeIndex === index}
|
|
187
|
+
badge=${item.badge || ''}
|
|
188
|
+
@bar-item-click=${(e: CustomEvent) => this.handleItemClick(e, index)}
|
|
189
|
+
></schmancy-navigation-bar-item>
|
|
190
|
+
`)}
|
|
191
|
+
`;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Accessibility
|
|
197
|
+
|
|
198
|
+
### Keyboard Support
|
|
199
|
+
- `Enter` / `Space` - Activate the item instantly
|
|
200
|
+
- Full focus management with visual indicators
|
|
201
|
+
- `aria-pressed` attribute reflects active state
|
|
202
|
+
- `aria-label` for badge notifications
|
|
203
|
+
|
|
204
|
+
### Screen Reader Support
|
|
205
|
+
- Proper ARIA attributes
|
|
206
|
+
- Semantic HTML structure
|
|
207
|
+
- Badge announcements ("3 notifications")
|
|
208
|
+
|
|
209
|
+
## Performance Optimization
|
|
210
|
+
|
|
211
|
+
### RxJS Observables
|
|
212
|
+
- Efficient event handling with proper cleanup
|
|
213
|
+
- Instant navigation events for responsive interaction
|
|
214
|
+
- Immediate ripple feedback for better UX
|
|
215
|
+
- Memory-safe with `takeUntil(this.disconnecting)`
|
|
216
|
+
|
|
217
|
+
### Rendering Optimization
|
|
218
|
+
- Conditional rendering based on props
|
|
219
|
+
- Efficient class mapping with TailwindElement
|
|
220
|
+
- Shadow DOM for style encapsulation
|
|
221
|
+
|
|
222
|
+
## Best Practices
|
|
223
|
+
|
|
224
|
+
1. **Icons**: Always use Material Symbols Outlined for consistency
|
|
225
|
+
2. **Labels**: Keep labels concise (1-2 words maximum)
|
|
226
|
+
3. **Badges**: Use for important notifications only
|
|
227
|
+
4. **Active State**: Let parent navigation bar manage active states
|
|
228
|
+
5. **Disabled State**: Use sparingly, consider hiding instead
|
|
229
|
+
6. **Custom Icons**: Use the icon slot for custom SVGs or emojis
|
|
230
|
+
|
|
231
|
+
## Common Patterns
|
|
232
|
+
|
|
233
|
+
### Dynamic Badges
|
|
234
|
+
```javascript
|
|
235
|
+
// In Lit component - use declarative binding
|
|
236
|
+
@state() notificationCount = 0;
|
|
237
|
+
|
|
238
|
+
render() {
|
|
239
|
+
return html`
|
|
240
|
+
<schmancy-navigation-bar-item
|
|
241
|
+
badge=${this.notificationCount > 0 ? String(this.notificationCount) : ''}
|
|
242
|
+
></schmancy-navigation-bar-item>
|
|
243
|
+
`;
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### Conditional Rendering
|
|
248
|
+
```javascript
|
|
249
|
+
// Show/hide items based on user role
|
|
250
|
+
const items = user.isAdmin
|
|
251
|
+
? ['dashboard', 'users', 'settings']
|
|
252
|
+
: ['dashboard', 'settings'];
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### Icon Switching
|
|
256
|
+
```javascript
|
|
257
|
+
// Change icon based on state
|
|
258
|
+
const icon = isPlaying ? 'pause' : 'play_arrow';
|
|
259
|
+
```
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# Navigation Bar Component
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
The `<schmancy-navigation-bar>` component is a Material Design 3 compliant horizontal navigation component that provides access to 3-7 primary destinations in your application. It's typically fixed at the bottom of the viewport and follows M3 specifications with proper elevation, touch targets, and responsive behavior.
|
|
5
|
+
|
|
6
|
+
## Usage
|
|
7
|
+
|
|
8
|
+
### Basic Example
|
|
9
|
+
```html
|
|
10
|
+
<schmancy-navigation-bar activeIndex="0">
|
|
11
|
+
<schmancy-navigation-bar-item icon="home" label="Home"></schmancy-navigation-bar-item>
|
|
12
|
+
<schmancy-navigation-bar-item icon="search" label="Search"></schmancy-navigation-bar-item>
|
|
13
|
+
<schmancy-navigation-bar-item icon="favorite" label="Favorites"></schmancy-navigation-bar-item>
|
|
14
|
+
<schmancy-navigation-bar-item icon="settings" label="Settings"></schmancy-navigation-bar-item>
|
|
15
|
+
</schmancy-navigation-bar>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### With Hide on Scroll
|
|
19
|
+
```html
|
|
20
|
+
<schmancy-navigation-bar activeIndex="0" hideOnScroll>
|
|
21
|
+
<schmancy-navigation-bar-item icon="dashboard" label="Dashboard"></schmancy-navigation-bar-item>
|
|
22
|
+
<schmancy-navigation-bar-item icon="shopping_cart" label="Orders"></schmancy-navigation-bar-item>
|
|
23
|
+
<schmancy-navigation-bar-item icon="inventory" label="Products"></schmancy-navigation-bar-item>
|
|
24
|
+
</schmancy-navigation-bar>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### With Badges
|
|
28
|
+
```html
|
|
29
|
+
<schmancy-navigation-bar>
|
|
30
|
+
<schmancy-navigation-bar-item icon="home" label="Home"></schmancy-navigation-bar-item>
|
|
31
|
+
<schmancy-navigation-bar-item icon="notifications" label="Alerts" badge="3"></schmancy-navigation-bar-item>
|
|
32
|
+
<schmancy-navigation-bar-item icon="mail" label="Messages" badge="99+"></schmancy-navigation-bar-item>
|
|
33
|
+
</schmancy-navigation-bar>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Properties
|
|
37
|
+
|
|
38
|
+
| Property | Type | Default | Description |
|
|
39
|
+
|----------|------|---------|-------------|
|
|
40
|
+
| `activeIndex` | `number` | `-1` | Currently active item index (zero-based) |
|
|
41
|
+
| `hideLabels` | `boolean` | `false` | Hide labels and show only icons |
|
|
42
|
+
| `elevation` | `number` | `2` | Elevation level for the navigation bar (0-5) |
|
|
43
|
+
| `hideOnScroll` | `boolean` | `false` | Automatically hide bar when scrolling down, show when scrolling up |
|
|
44
|
+
|
|
45
|
+
## Events
|
|
46
|
+
|
|
47
|
+
### navigation-change
|
|
48
|
+
Fired when an item is selected.
|
|
49
|
+
|
|
50
|
+
```javascript
|
|
51
|
+
navigationBar.addEventListener('navigation-change', (event) => {
|
|
52
|
+
console.log('Old index:', event.detail.oldIndex);
|
|
53
|
+
console.log('New index:', event.detail.newIndex);
|
|
54
|
+
console.log('Selected item:', event.detail.item);
|
|
55
|
+
});
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Features
|
|
59
|
+
|
|
60
|
+
### Reactive State Management
|
|
61
|
+
The component uses RxJS BehaviorSubjects for reactive state management, ensuring smooth and predictable state updates across all navigation items.
|
|
62
|
+
|
|
63
|
+
### Hide on Scroll Behavior
|
|
64
|
+
When `hideOnScroll` is enabled:
|
|
65
|
+
- Navigation bar hides when scrolling down to maximize content space
|
|
66
|
+
- Shows automatically when scrolling up for quick access
|
|
67
|
+
- Uses smooth CSS transforms for GPU-accelerated animations
|
|
68
|
+
- Implements a 10px scroll threshold to prevent jittery behavior
|
|
69
|
+
- Always visible when near the top of the page
|
|
70
|
+
|
|
71
|
+
### Keyboard Navigation
|
|
72
|
+
Full keyboard support for accessibility:
|
|
73
|
+
- `ArrowLeft` / `ArrowRight` - Navigate between items
|
|
74
|
+
- `Home` / `End` - Jump to first/last item
|
|
75
|
+
- `Enter` / `Space` - Activate focused item
|
|
76
|
+
- Proper focus management with `tabindex`
|
|
77
|
+
|
|
78
|
+
### Material Design 3 Compliance
|
|
79
|
+
- Fixed 80px height as per M3 specifications
|
|
80
|
+
- 48x48dp minimum touch targets
|
|
81
|
+
- Proper elevation and shadow system
|
|
82
|
+
- Responsive item distribution (3-7 items)
|
|
83
|
+
- Surface container background color
|
|
84
|
+
|
|
85
|
+
## Styling
|
|
86
|
+
|
|
87
|
+
### CSS Variables
|
|
88
|
+
The component respects the Schmancy theme system:
|
|
89
|
+
- Background: `SchmancyTheme.sys.color.surface.container`
|
|
90
|
+
- Text: `SchmancyTheme.sys.color.surface.on`
|
|
91
|
+
|
|
92
|
+
### Custom Styling
|
|
93
|
+
```css
|
|
94
|
+
schmancy-navigation-bar {
|
|
95
|
+
/* Custom z-index if needed */
|
|
96
|
+
--navigation-bar-z-index: 20;
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Integration with schmancy-area
|
|
101
|
+
|
|
102
|
+
### Route-based Navigation
|
|
103
|
+
```typescript
|
|
104
|
+
@customElement('my-app')
|
|
105
|
+
class MyApp extends LitElement {
|
|
106
|
+
private handleNavigation = (e: CustomEvent) => {
|
|
107
|
+
const routes = ['dashboard', 'orders', 'products', 'settings'];
|
|
108
|
+
const route = routes[e.detail.newIndex];
|
|
109
|
+
|
|
110
|
+
// Navigate using schmancy-area
|
|
111
|
+
area.push({
|
|
112
|
+
component: route,
|
|
113
|
+
area: 'main'
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
render() {
|
|
118
|
+
return html`
|
|
119
|
+
<schmancy-navigation-bar
|
|
120
|
+
@navigation-change=${this.handleNavigation}
|
|
121
|
+
activeIndex="0"
|
|
122
|
+
>
|
|
123
|
+
<schmancy-navigation-bar-item icon="dashboard" label="Dashboard"></schmancy-navigation-bar-item>
|
|
124
|
+
<schmancy-navigation-bar-item icon="shopping_cart" label="Orders"></schmancy-navigation-bar-item>
|
|
125
|
+
<schmancy-navigation-bar-item icon="inventory" label="Products"></schmancy-navigation-bar-item>
|
|
126
|
+
<schmancy-navigation-bar-item icon="settings" label="Settings"></schmancy-navigation-bar-item>
|
|
127
|
+
</schmancy-navigation-bar>
|
|
128
|
+
|
|
129
|
+
<schmancy-area name="main" default="dashboard">
|
|
130
|
+
<schmancy-route when="dashboard" component="app-dashboard"></schmancy-route>
|
|
131
|
+
<schmancy-route when="orders" component="app-orders"></schmancy-route>
|
|
132
|
+
<schmancy-route when="products" component="app-products"></schmancy-route>
|
|
133
|
+
<schmancy-route when="settings" component="app-settings"></schmancy-route>
|
|
134
|
+
</schmancy-area>
|
|
135
|
+
`;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Best Practices
|
|
141
|
+
|
|
142
|
+
1. **Item Count**: Use between 3-7 items for optimal usability
|
|
143
|
+
2. **Labels**: Keep labels short (1-2 words) for better readability
|
|
144
|
+
3. **Icons**: Use Material Symbols Outlined icons for consistency
|
|
145
|
+
4. **Active State**: Always maintain an active state for user orientation
|
|
146
|
+
5. **Scroll Behavior**: Enable `hideOnScroll` for content-heavy pages
|
|
147
|
+
6. **Badges**: Use sparingly for important notifications only
|
|
148
|
+
|
|
149
|
+
## Accessibility
|
|
150
|
+
|
|
151
|
+
- ARIA roles and labels properly set
|
|
152
|
+
- Keyboard navigation fully supported
|
|
153
|
+
- Focus indicators for keyboard users
|
|
154
|
+
- `aria-pressed` attribute on active items
|
|
155
|
+
- `aria-hidden` when navigation is hidden on scroll
|
|
156
|
+
|
|
157
|
+
## Performance Notes
|
|
158
|
+
|
|
159
|
+
- Uses RxJS for efficient event handling
|
|
160
|
+
- Scroll events are throttled at 100ms intervals
|
|
161
|
+
- CSS transforms for smooth GPU-accelerated animations
|
|
162
|
+
- Debounced navigation events (300ms) prevent accidental double-clicks
|
|
163
|
+
- Lazy subscription setup for scroll listeners
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
# Navigation Bar Item Component
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
The `<schmancy-navigation-bar-item>` component represents an individual navigation destination within a navigation bar. It follows Material Design 3 specifications with proper touch targets, ripple effects, and state management using RxJS observables.
|
|
5
|
+
|
|
6
|
+
## Usage
|
|
7
|
+
|
|
8
|
+
### Basic Example
|
|
9
|
+
```html
|
|
10
|
+
<schmancy-navigation-bar-item
|
|
11
|
+
icon="home"
|
|
12
|
+
label="Home"
|
|
13
|
+
active
|
|
14
|
+
></schmancy-navigation-bar-item>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### With Badge
|
|
18
|
+
```html
|
|
19
|
+
<schmancy-navigation-bar-item
|
|
20
|
+
icon="notifications"
|
|
21
|
+
label="Alerts"
|
|
22
|
+
badge="5"
|
|
23
|
+
></schmancy-navigation-bar-item>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Custom Icon Slot
|
|
27
|
+
```html
|
|
28
|
+
<schmancy-navigation-bar-item label="Custom">
|
|
29
|
+
<span slot="icon">🏠</span>
|
|
30
|
+
</schmancy-navigation-bar-item>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### With Custom Content
|
|
34
|
+
```html
|
|
35
|
+
<schmancy-navigation-bar-item>
|
|
36
|
+
<schmancy-icon slot="icon" size="24">favorite</schmancy-icon>
|
|
37
|
+
Custom Content
|
|
38
|
+
</schmancy-navigation-bar-item>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Properties
|
|
42
|
+
|
|
43
|
+
| Property | Type | Default | Description |
|
|
44
|
+
|----------|------|---------|-------------|
|
|
45
|
+
| `icon` | `string` | `''` | Material Symbols Outlined icon name |
|
|
46
|
+
| `label` | `string` | `''` | Label text for the navigation item |
|
|
47
|
+
| `badge` | `string` | `''` | Badge content (number or short text) |
|
|
48
|
+
| `active` | `boolean` | `false` | Whether this item is currently active/selected |
|
|
49
|
+
| `disabled` | `boolean` | `false` | Whether this item is disabled |
|
|
50
|
+
| `hideLabels` | `boolean` | `false` | Hide labels (controlled by parent navigation bar) |
|
|
51
|
+
|
|
52
|
+
## Events
|
|
53
|
+
|
|
54
|
+
### bar-item-click
|
|
55
|
+
Fired when the item is clicked.
|
|
56
|
+
|
|
57
|
+
```javascript
|
|
58
|
+
item.addEventListener('bar-item-click', (event) => {
|
|
59
|
+
console.log('Icon:', event.detail.icon);
|
|
60
|
+
console.log('Label:', event.detail.label);
|
|
61
|
+
console.log('Active:', event.detail.active);
|
|
62
|
+
});
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### focus / blur
|
|
66
|
+
Standard focus and blur events for accessibility.
|
|
67
|
+
|
|
68
|
+
## Features
|
|
69
|
+
|
|
70
|
+
### RxJS-Powered Interactions
|
|
71
|
+
- **Click handling**: Uses RxJS observables for instant navigation events
|
|
72
|
+
- **Ripple effects**: Immediate visual feedback on interaction
|
|
73
|
+
- **Keyboard support**: Enter and Space keys properly handled
|
|
74
|
+
- **State management**: BehaviorSubject for reactive active state updates
|
|
75
|
+
|
|
76
|
+
### Full Clickable Area
|
|
77
|
+
The entire navigation item is clickable, not just the icon area:
|
|
78
|
+
- Better touch targets on mobile devices
|
|
79
|
+
- Improved accessibility
|
|
80
|
+
- More intuitive user experience
|
|
81
|
+
- 48x48dp minimum touch target as per Material Design
|
|
82
|
+
|
|
83
|
+
### Badge System
|
|
84
|
+
Intelligent badge handling:
|
|
85
|
+
- Numbers > 99 display as "99+"
|
|
86
|
+
- Text badges limited to 3 characters
|
|
87
|
+
- Zero values hide the badge
|
|
88
|
+
- Proper ARIA labels for screen readers
|
|
89
|
+
|
|
90
|
+
### Ripple Animation
|
|
91
|
+
Material Design ripple effect:
|
|
92
|
+
- Originates from click position
|
|
93
|
+
- 600ms animation duration
|
|
94
|
+
- GPU-accelerated CSS animations
|
|
95
|
+
- Multiple concurrent ripples supported
|
|
96
|
+
|
|
97
|
+
## Slots
|
|
98
|
+
|
|
99
|
+
| Slot | Description |
|
|
100
|
+
|------|-------------|
|
|
101
|
+
| `icon` | Custom icon content to replace the default icon |
|
|
102
|
+
| default | Custom content for the item |
|
|
103
|
+
|
|
104
|
+
## Styling
|
|
105
|
+
|
|
106
|
+
### State-based Styling
|
|
107
|
+
The component automatically applies different styles based on state:
|
|
108
|
+
|
|
109
|
+
```css
|
|
110
|
+
/* Active state */
|
|
111
|
+
schmancy-navigation-bar-item[active] {
|
|
112
|
+
/* Icon indicator background: secondary-container */
|
|
113
|
+
/* Text color: secondary-onContainer */
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/* Inactive state */
|
|
117
|
+
schmancy-navigation-bar-item:not([active]) {
|
|
118
|
+
/* Text color: surface-onVariant */
|
|
119
|
+
/* Hover background: surface-container-highest */
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* Disabled state */
|
|
123
|
+
schmancy-navigation-bar-item[disabled] {
|
|
124
|
+
/* Opacity: 0.38 */
|
|
125
|
+
/* Pointer events disabled */
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### CSS Parts
|
|
130
|
+
```css
|
|
131
|
+
/* Style the button element */
|
|
132
|
+
schmancy-navigation-bar-item::part(button) {
|
|
133
|
+
/* Custom button styles */
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Methods
|
|
138
|
+
|
|
139
|
+
### setActive(isActive: boolean)
|
|
140
|
+
Programmatically set the active state of the item.
|
|
141
|
+
|
|
142
|
+
```javascript
|
|
143
|
+
// In Lit component - use property binding
|
|
144
|
+
@state() isActive = true;
|
|
145
|
+
|
|
146
|
+
render() {
|
|
147
|
+
return html`
|
|
148
|
+
<schmancy-navigation-bar-item ?active=${this.isActive}>
|
|
149
|
+
</schmancy-navigation-bar-item>
|
|
150
|
+
`;
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Integration Example
|
|
155
|
+
|
|
156
|
+
### Complete Navigation Setup
|
|
157
|
+
```typescript
|
|
158
|
+
@customElement('app-navigation')
|
|
159
|
+
class AppNavigation extends LitElement {
|
|
160
|
+
@state() activeIndex = 0;
|
|
161
|
+
|
|
162
|
+
private navigationItems = [
|
|
163
|
+
{ icon: 'home', label: 'Home', route: 'home' },
|
|
164
|
+
{ icon: 'search', label: 'Search', route: 'search' },
|
|
165
|
+
{ icon: 'favorite', label: 'Favorites', route: 'favorites', badge: '3' },
|
|
166
|
+
{ icon: 'person', label: 'Profile', route: 'profile' }
|
|
167
|
+
];
|
|
168
|
+
|
|
169
|
+
private handleItemClick = (e: CustomEvent, index: number) => {
|
|
170
|
+
this.activeIndex = index;
|
|
171
|
+
const route = this.navigationItems[index].route;
|
|
172
|
+
|
|
173
|
+
// Navigate to route
|
|
174
|
+
area.push({
|
|
175
|
+
component: route,
|
|
176
|
+
area: 'main'
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
render() {
|
|
181
|
+
return html`
|
|
182
|
+
${this.navigationItems.map((item, index) => html`
|
|
183
|
+
<schmancy-navigation-bar-item
|
|
184
|
+
icon=${item.icon}
|
|
185
|
+
label=${item.label}
|
|
186
|
+
?active=${this.activeIndex === index}
|
|
187
|
+
badge=${item.badge || ''}
|
|
188
|
+
@bar-item-click=${(e: CustomEvent) => this.handleItemClick(e, index)}
|
|
189
|
+
></schmancy-navigation-bar-item>
|
|
190
|
+
`)}
|
|
191
|
+
`;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Accessibility
|
|
197
|
+
|
|
198
|
+
### Keyboard Support
|
|
199
|
+
- `Enter` / `Space` - Activate the item instantly
|
|
200
|
+
- Full focus management with visual indicators
|
|
201
|
+
- `aria-pressed` attribute reflects active state
|
|
202
|
+
- `aria-label` for badge notifications
|
|
203
|
+
|
|
204
|
+
### Screen Reader Support
|
|
205
|
+
- Proper ARIA attributes
|
|
206
|
+
- Semantic HTML structure
|
|
207
|
+
- Badge announcements ("3 notifications")
|
|
208
|
+
|
|
209
|
+
## Performance Optimization
|
|
210
|
+
|
|
211
|
+
### RxJS Observables
|
|
212
|
+
- Efficient event handling with proper cleanup
|
|
213
|
+
- Instant navigation events for responsive interaction
|
|
214
|
+
- Immediate ripple feedback for better UX
|
|
215
|
+
- Memory-safe with `takeUntil(this.disconnecting)`
|
|
216
|
+
|
|
217
|
+
### Rendering Optimization
|
|
218
|
+
- Conditional rendering based on props
|
|
219
|
+
- Efficient class mapping with TailwindElement
|
|
220
|
+
- Shadow DOM for style encapsulation
|
|
221
|
+
|
|
222
|
+
## Best Practices
|
|
223
|
+
|
|
224
|
+
1. **Icons**: Always use Material Symbols Outlined for consistency
|
|
225
|
+
2. **Labels**: Keep labels concise (1-2 words maximum)
|
|
226
|
+
3. **Badges**: Use for important notifications only
|
|
227
|
+
4. **Active State**: Let parent navigation bar manage active states
|
|
228
|
+
5. **Disabled State**: Use sparingly, consider hiding instead
|
|
229
|
+
6. **Custom Icons**: Use the icon slot for custom SVGs or emojis
|
|
230
|
+
|
|
231
|
+
## Common Patterns
|
|
232
|
+
|
|
233
|
+
### Dynamic Badges
|
|
234
|
+
```javascript
|
|
235
|
+
// In Lit component - use declarative binding
|
|
236
|
+
@state() notificationCount = 0;
|
|
237
|
+
|
|
238
|
+
render() {
|
|
239
|
+
return html`
|
|
240
|
+
<schmancy-navigation-bar-item
|
|
241
|
+
badge=${this.notificationCount > 0 ? String(this.notificationCount) : ''}
|
|
242
|
+
></schmancy-navigation-bar-item>
|
|
243
|
+
`;
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### Conditional Rendering
|
|
248
|
+
```javascript
|
|
249
|
+
// Show/hide items based on user role
|
|
250
|
+
const items = user.isAdmin
|
|
251
|
+
? ['dashboard', 'users', 'settings']
|
|
252
|
+
: ['dashboard', 'settings'];
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### Icon Switching
|
|
256
|
+
```javascript
|
|
257
|
+
// Change icon based on state
|
|
258
|
+
const icon = isPlaying ? 'pause' : 'play_arrow';
|
|
259
|
+
```
|