@mhmo91/schmancy 0.5.20 → 0.5.22
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-rail.md +475 -0
- package/dist/ai/navigation-rail.md +475 -0
- package/dist/{animated-text-D1D0dI8T.cjs → animated-text-Bic7z7SI.cjs} +2 -2
- package/dist/{animated-text-D1D0dI8T.cjs.map → animated-text-Bic7z7SI.cjs.map} +1 -1
- package/dist/{animated-text-DS9AsLAy.js → animated-text-CLEr78FV.js} +3 -3
- package/dist/{animated-text-DS9AsLAy.js.map → animated-text-CLEr78FV.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-DZFtLBMV.cjs → area.component-BrvNYy7Z.cjs} +2 -2
- package/dist/{area.component-DZFtLBMV.cjs.map → area.component-BrvNYy7Z.cjs.map} +1 -1
- package/dist/{area.component-5hv6c-dZ.js → area.component-tIK_P5JR.js} +3 -3
- package/dist/{area.component-5hv6c-dZ.js.map → area.component-tIK_P5JR.js.map} +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-DpGmI06M.cjs → autocomplete-CG2YtfwU.cjs} +2 -2
- package/dist/autocomplete-CG2YtfwU.cjs.map +1 -0
- package/dist/{autocomplete-Bm_tnRns.js → autocomplete-DzZQusAY.js} +10 -10
- package/dist/autocomplete-DzZQusAY.js.map +1 -0
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/{avatar-DVkOL5_x.js → avatar-39MTGkwX.js} +50 -50
- package/dist/{avatar-DVkOL5_x.js.map → avatar-39MTGkwX.js.map} +1 -1
- package/dist/{avatar-B0Q9R0jH.cjs → avatar-QYDHa7s3.cjs} +2 -2
- package/dist/{avatar-B0Q9R0jH.cjs.map → avatar-QYDHa7s3.cjs.map} +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-DDBc--4N.js → boat-BdJ1jyK_.js} +2 -2
- package/dist/{boat-DDBc--4N.js.map → boat-BdJ1jyK_.js.map} +1 -1
- package/dist/{boat-DpuxxF9v.cjs → boat-DP98_5qG.cjs} +2 -2
- package/dist/{boat-DpuxxF9v.cjs.map → boat-DP98_5qG.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-ByAbf0mX.js → checkbox-4mBWkzKG.js} +2 -2
- package/dist/{checkbox-ByAbf0mX.js.map → checkbox-4mBWkzKG.js.map} +1 -1
- package/dist/{checkbox-DA355aVd.cjs → checkbox-CIMDI5hW.cjs} +2 -2
- package/dist/{checkbox-DA355aVd.cjs.map → checkbox-CIMDI5hW.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-BEDuv4oc.js → code-preview-CrsExDWj.js} +7 -8
- package/dist/{code-preview-BEDuv4oc.js.map → code-preview-CrsExDWj.js.map} +1 -1
- package/dist/{code-preview-DXvds6Ik.cjs → code-preview-hWI3erYE.cjs} +6 -7
- package/dist/{code-preview-DXvds6Ik.cjs.map → code-preview-hWI3erYE.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-CO96uRfu.cjs → date-range-B0yz-_Zv.cjs} +2 -2
- package/dist/{date-range-CO96uRfu.cjs.map → date-range-B0yz-_Zv.cjs.map} +1 -1
- package/dist/{date-range-CWwzapvu.js → date-range-CM-5J_JO.js} +3 -3
- package/dist/{date-range-CWwzapvu.js.map → date-range-CM-5J_JO.js.map} +1 -1
- package/dist/{date-range-inline-DcRJrT7z.js → date-range-inline-CPI4EyL0.js} +3 -3
- package/dist/{date-range-inline-DcRJrT7z.js.map → date-range-inline-CPI4EyL0.js.map} +1 -1
- package/dist/{date-range-inline-Br8Pkm6Z.cjs → date-range-inline-P8P2ixg1.cjs} +2 -2
- package/dist/{date-range-inline-Br8Pkm6Z.cjs.map → date-range-inline-P8P2ixg1.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-BU66nJyr.cjs → delay-1aTGz1ZH.cjs} +2 -2
- package/dist/{delay-BU66nJyr.cjs.map → delay-1aTGz1ZH.cjs.map} +1 -1
- package/dist/{delay-4p58-oPM.js → delay-Lg_7K_Vi.js} +2 -2
- package/dist/{delay-4p58-oPM.js.map → delay-Lg_7K_Vi.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{details-COgnQWz1.js → details-gUvX6sxc.js} +2 -2
- package/dist/{details-COgnQWz1.js.map → details-gUvX6sxc.js.map} +1 -1
- package/dist/{details-CoqpAwjh.cjs → details-uxsPpjMp.cjs} +2 -2
- package/dist/{details-CoqpAwjh.cjs.map → details-uxsPpjMp.cjs.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{dialog-content-CJUcyFT1.cjs → dialog-content-CvVd9EwS.cjs} +2 -2
- package/dist/{dialog-content-CJUcyFT1.cjs.map → dialog-content-CvVd9EwS.cjs.map} +1 -1
- package/dist/{dialog-content-naA5eL6T.js → dialog-content-DKLDmgfz.js} +3 -3
- package/dist/{dialog-content-naA5eL6T.js.map → dialog-content-DKLDmgfz.js.map} +1 -1
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.js +1 -1
- package/dist/{divider-a2f7N3mc.cjs → divider-CHGffGro.cjs} +2 -2
- package/dist/{divider-a2f7N3mc.cjs.map → divider-CHGffGro.cjs.map} +1 -1
- package/dist/{divider-DsNchzPn.js → divider-EvBnlb2a.js} +3 -3
- package/dist/{divider-DsNchzPn.js.map → divider-EvBnlb2a.js.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/{dropdown-content-YiOmwoxH.cjs → dropdown-content-FVKimBQR.cjs} +2 -2
- package/dist/{dropdown-content-YiOmwoxH.cjs.map → dropdown-content-FVKimBQR.cjs.map} +1 -1
- package/dist/{dropdown-content-CARJm72a.js → dropdown-content-NGBIkvdR.js} +3 -3
- package/dist/{dropdown-content-CARJm72a.js.map → dropdown-content-NGBIkvdR.js.map} +1 -1
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +1 -1
- package/dist/{email-recipients-CM41HA4G.js → email-recipients-CXFSIsL-.js} +5 -5
- package/dist/{email-recipients-CM41HA4G.js.map → email-recipients-CXFSIsL-.js.map} +1 -1
- package/dist/{email-recipients-Dha5jYMG.cjs → email-recipients-DxqCC99q.cjs} +2 -2
- package/dist/{email-recipients-Dha5jYMG.cjs.map → email-recipients-DxqCC99q.cjs.map} +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{flex-D-oS3wlY.js → flex-Cm4nZM9q.js} +2 -2
- package/dist/{flex-D-oS3wlY.js.map → flex-Cm4nZM9q.js.map} +1 -1
- package/dist/{flex-zqTHF06u.cjs → flex-DisTVvBI.cjs} +2 -2
- package/dist/{flex-zqTHF06u.cjs.map → flex-DisTVvBI.cjs.map} +1 -1
- package/dist/{form-DPAzy8Dn.js → form-BU9TBjfk.js} +2 -2
- package/dist/{form-DPAzy8Dn.js.map → form-BU9TBjfk.js.map} +1 -1
- package/dist/{form-BSlt0E8v.cjs → form-SMbhjYsC.cjs} +2 -2
- package/dist/{form-BSlt0E8v.cjs.map → form-SMbhjYsC.cjs.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{formField.mixin-R7Ddvq3q.cjs → formField.mixin-DYkeOpES.cjs} +2 -2
- package/dist/{formField.mixin-R7Ddvq3q.cjs.map → formField.mixin-DYkeOpES.cjs.map} +1 -1
- package/dist/{formField.mixin-CVkUNhSX.js → formField.mixin-DxhnL3Kb.js} +2 -2
- package/dist/{formField.mixin-CVkUNhSX.js.map → formField.mixin-DxhnL3Kb.js.map} +1 -1
- package/dist/{icon-Cm5BKSV4.cjs → icon-BT_1B5_G.cjs} +2 -2
- package/dist/{icon-Cm5BKSV4.cjs.map → icon-BT_1B5_G.cjs.map} +1 -1
- package/dist/{icon-ave1X5b9.js → icon-Cgd3NUcv.js} +2 -2
- package/dist/{icon-ave1X5b9.js.map → icon-Cgd3NUcv.js.map} +1 -1
- package/dist/{icon-button-BdB5el84.cjs → icon-button-C5hq1cKD.cjs} +2 -2
- package/dist/{icon-button-BdB5el84.cjs.map → icon-button-C5hq1cKD.cjs.map} +1 -1
- package/dist/{icon-button-DiNXfJ8u.js → icon-button-DsjqusZz.js} +3 -3
- package/dist/{icon-button-DiNXfJ8u.js.map → icon-button-DsjqusZz.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 +49 -49
- package/dist/{input-DPiDmsjt.js → input-Bj4MTOC9.js} +3 -3
- package/dist/{input-DPiDmsjt.js.map → input-Bj4MTOC9.js.map} +1 -1
- package/dist/{input-B6zwyDBC.cjs → input-D3qmQZ-Y.cjs} +2 -2
- package/dist/{input-B6zwyDBC.cjs.map → input-D3qmQZ-Y.cjs.map} +1 -1
- package/dist/{input-chip-CkWSf6nV.cjs → input-chip-CbD-eDs-.cjs} +2 -2
- package/dist/{input-chip-CkWSf6nV.cjs.map → input-chip-CbD-eDs-.cjs.map} +1 -1
- package/dist/{input-chip-C06GAnnC.js → input-chip-DiThsRoi.js} +2 -2
- package/dist/{input-chip-C06GAnnC.js.map → input-chip-DiThsRoi.js.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-BCDPk6mM.cjs → list-5Y_CGGJF.cjs} +2 -2
- package/dist/{list-BCDPk6mM.cjs.map → list-5Y_CGGJF.cjs.map} +1 -1
- package/dist/{list-vICZQxqV.js → list-CAFpmXsb.js} +2 -2
- package/dist/{list-vICZQxqV.js.map → list-CAFpmXsb.js.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-jTGHsEfH.js → litElement.mixin-Bv6DGuhe.js} +2 -2
- package/dist/{litElement.mixin-jTGHsEfH.js.map → litElement.mixin-Bv6DGuhe.js.map} +1 -1
- package/dist/{litElement.mixin-DLJYzvsb.cjs → litElement.mixin-rWG9s46P.cjs} +2 -2
- package/dist/{litElement.mixin-DLJYzvsb.cjs.map → litElement.mixin-rWG9s46P.cjs.map} +1 -1
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-D6QG9Yzr.cjs → map-bTOQf8Jm.cjs} +2 -2
- package/dist/{map-D6QG9Yzr.cjs.map → map-bTOQf8Jm.cjs.map} +1 -1
- package/dist/{map-DZt51SfS.js → map-yv8FB9mG.js} +2 -2
- package/dist/{map-DZt51SfS.js.map → map-yv8FB9mG.js.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{media-BUx20F5U.js → media-CA52MXd3.js} +2 -2
- package/dist/{media-BUx20F5U.js.map → media-CA52MXd3.js.map} +1 -1
- package/dist/{media-CdPEYBLJ.cjs → media-CPIoKlRw.cjs} +2 -2
- package/dist/{media-CdPEYBLJ.cjs.map → media-CPIoKlRw.cjs.map} +1 -1
- package/dist/{menu-CvWQC1In.js → menu-BKO9PgJq.js} +3 -3
- package/dist/{menu-CvWQC1In.js.map → menu-BKO9PgJq.js.map} +1 -1
- package/dist/{menu-2UwBHzr9.cjs → menu-Cak8SbFx.cjs} +2 -2
- package/dist/{menu-2UwBHzr9.cjs.map → menu-Cak8SbFx.cjs.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 +1 -1
- package/dist/navigation-bar.js +1 -1
- package/dist/navigation-rail-C8OOb0V3.js +564 -0
- package/dist/navigation-rail-C8OOb0V3.js.map +1 -0
- package/dist/navigation-rail-D1iYDMy2.cjs +415 -0
- package/dist/navigation-rail-D1iYDMy2.cjs.map +1 -0
- package/dist/navigation-rail.cjs +1 -1
- package/dist/navigation-rail.js +1 -1
- package/dist/{notification-service-BqvWCDoP.cjs → notification-service-DaXxcXyj.cjs} +2 -2
- package/dist/{notification-service-BqvWCDoP.cjs.map → notification-service-DaXxcXyj.cjs.map} +1 -1
- package/dist/{notification-service-eOCFErH1.js → notification-service-jfBwJ2TN.js} +4 -4
- package/dist/{notification-service-eOCFErH1.js.map → notification-service-jfBwJ2TN.js.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +2 -2
- package/dist/{notify-COSA8XRV.js → notify-C5gy3egX.js} +2 -2
- package/dist/{notify-COSA8XRV.js.map → notify-C5gy3egX.js.map} +1 -1
- package/dist/{notify-BaedZ1y9.cjs → notify-Dd5h2l-v.cjs} +2 -2
- package/dist/{notify-BaedZ1y9.cjs.map → notify-Dd5h2l-v.cjs.map} +1 -1
- package/dist/{option-CeXe-DCz.cjs → option-C6PwIhut.cjs} +2 -2
- package/dist/{option-CeXe-DCz.cjs.map → option-C6PwIhut.cjs.map} +1 -1
- package/dist/{option-CplQ_59U.js → option-D7b-uGff.js} +2 -2
- package/dist/{option-CplQ_59U.js.map → option-D7b-uGff.js.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{payment-card-form-wns1GAaC.cjs → payment-card-form-DTfoZiiN.cjs} +2 -2
- package/dist/{payment-card-form-wns1GAaC.cjs.map → payment-card-form-DTfoZiiN.cjs.map} +1 -1
- package/dist/{payment-card-form-hVPgM3HO.js → payment-card-form-xwk5dfeQ.js} +3 -3
- package/dist/{payment-card-form-hVPgM3HO.js.map → payment-card-form-xwk5dfeQ.js.map} +1 -1
- package/dist/{progress-X8hxleUC.js → progress-D-5gThOU.js} +2 -2
- package/dist/{progress-X8hxleUC.js.map → progress-D-5gThOU.js.map} +1 -1
- package/dist/{progress-CM5lHuCR.cjs → progress-sFt6EeRy.cjs} +2 -2
- package/dist/{progress-CM5lHuCR.cjs.map → progress-sFt6EeRy.cjs.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-button--uXczpjB.js → radio-button-CZq8Z-V-.js} +3 -3
- package/dist/{radio-button--uXczpjB.js.map → radio-button-CZq8Z-V-.js.map} +1 -1
- package/dist/{radio-button-D76Qubig.cjs → radio-button-Cc5fCDdU.cjs} +2 -2
- package/dist/{radio-button-D76Qubig.cjs.map → radio-button-Cc5fCDdU.cjs.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/{schmancy-steps-container-Dc_hXgrm.cjs → schmancy-steps-container-Cb-cUZWP.cjs} +2 -2
- package/dist/{schmancy-steps-container-Dc_hXgrm.cjs.map → schmancy-steps-container-Cb-cUZWP.cjs.map} +1 -1
- package/dist/{schmancy-steps-container-Csh_Ocoa.js → schmancy-steps-container-DkPckhRw.js} +2 -2
- package/dist/{schmancy-steps-container-Csh_Ocoa.js.map → schmancy-steps-container-DkPckhRw.js.map} +1 -1
- package/dist/{select-DvjgcI2e.cjs → select-BszKwEA_.cjs} +4 -4
- package/dist/select-BszKwEA_.cjs.map +1 -0
- package/dist/{select-BrdNXtJK.js → select-CHgsFxnz.js} +14 -14
- package/dist/select-CHgsFxnz.js.map +1 -0
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-D6hxqRpX.js → sheet-BscruHZw.js} +3 -3
- package/dist/{sheet-D6hxqRpX.js.map → sheet-BscruHZw.js.map} +1 -1
- package/dist/{sheet-DrGvhM5D.cjs → sheet-ZHVITumf.cjs} +2 -2
- package/dist/{sheet-DrGvhM5D.cjs.map → sheet-ZHVITumf.cjs.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +1 -1
- package/dist/{slider-DNqgaGvI.cjs → slider-BKUCiMOV.cjs} +2 -2
- package/dist/{slider-DNqgaGvI.cjs.map → slider-BKUCiMOV.cjs.map} +1 -1
- package/dist/{slider-ev-R3lWD.js → slider-gBHyj2TC.js} +3 -3
- package/dist/{slider-ev-R3lWD.js.map → slider-gBHyj2TC.js.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{spinner-BBhBlm_F.cjs → spinner-CiRbCC74.cjs} +2 -2
- package/dist/{spinner-BBhBlm_F.cjs.map → spinner-CiRbCC74.cjs.map} +1 -1
- package/dist/{spinner-0Be5YjKa.js → spinner-DZ3oE5cQ.js} +2 -2
- package/dist/{spinner-0Be5YjKa.js.map → spinner-DZ3oE5cQ.js.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{suggestion-chip-WW3dScRF.js → suggestion-chip-BTiLUD1d.js} +10 -10
- package/dist/suggestion-chip-BTiLUD1d.js.map +1 -0
- package/dist/{suggestion-chip-GLpIJvu3.cjs → suggestion-chip-D7izoLhZ.cjs} +8 -8
- package/dist/suggestion-chip-D7izoLhZ.cjs.map +1 -0
- package/dist/{surface-DmtBge0h.js → surface-C4Lkv6Xu.js} +2 -2
- package/dist/{surface-DmtBge0h.js.map → surface-C4Lkv6Xu.js.map} +1 -1
- package/dist/{surface-BaMQfpnN.cjs → surface-DTqeD1NX.cjs} +2 -2
- package/dist/{surface-BaMQfpnN.cjs.map → surface-DTqeD1NX.cjs.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{table-Bc86ZVfE.cjs → table-CGB_dR8H.cjs} +2 -2
- package/dist/{table-Bc86ZVfE.cjs.map → table-CGB_dR8H.cjs.map} +1 -1
- package/dist/{table-D00xx57f.js → table-D320TllW.js} +2 -2
- package/dist/{table-D00xx57f.js.map → table-D320TllW.js.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-compatibility-Bo4Z38SO.cjs → tabs-compatibility-C1ifLAs_.cjs} +2 -2
- package/dist/{tabs-compatibility-Bo4Z38SO.cjs.map → tabs-compatibility-C1ifLAs_.cjs.map} +1 -1
- package/dist/{tabs-compatibility-BQqS_oQN.js → tabs-compatibility-DNkcL6dE.js} +2 -2
- package/dist/{tabs-compatibility-BQqS_oQN.js.map → tabs-compatibility-DNkcL6dE.js.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tailwind.mixin-9XFzAXGw.js +43 -0
- package/dist/{tailwind.mixin-Dq8FD_xN.js.map → tailwind.mixin-9XFzAXGw.js.map} +1 -1
- package/dist/tailwind.mixin-ChrVaJHF.cjs +2 -0
- package/dist/{tailwind.mixin-B_-9TcsC.cjs.map → tailwind.mixin-ChrVaJHF.cjs.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-DvfusaL0.cjs → textarea-1QvQzHKm.cjs} +2 -2
- package/dist/{textarea-DvfusaL0.cjs.map → textarea-1QvQzHKm.cjs.map} +1 -1
- package/dist/{textarea-DpSgcB0q.js → textarea-B2U316Um.js} +2 -2
- package/dist/{textarea-DpSgcB0q.js.map → textarea-B2U316Um.js.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-button-Dj3aS2jG.cjs → theme-button-B0n3kSd_.cjs} +2 -2
- package/dist/{theme-button-Dj3aS2jG.cjs.map → theme-button-B0n3kSd_.cjs.map} +1 -1
- package/dist/{theme-button-1dnUcGe5.js → theme-button-zUYywyWx.js} +2 -2
- package/dist/{theme-button-1dnUcGe5.js.map → theme-button-zUYywyWx.js.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-B2834R93.cjs → theme.component-BLKJxyFX.cjs} +2 -2
- package/dist/{theme.component-B2834R93.cjs.map → theme.component-BLKJxyFX.cjs.map} +1 -1
- package/dist/{theme.component-DwzieORm.js → theme.component-DpPMKf8l.js} +2 -2
- package/dist/{theme.component-DwzieORm.js.map → theme.component-DpPMKf8l.js.map} +1 -1
- package/dist/theme.js +1 -1
- package/dist/{timezone-CWEqsRA_.cjs → timezone-DRSCR7bi.cjs} +2 -2
- package/dist/{timezone-CWEqsRA_.cjs.map → timezone-DRSCR7bi.cjs.map} +1 -1
- package/dist/{timezone-YbhVzZRq.js → timezone-DhLUcYcX.js} +3 -3
- package/dist/{timezone-YbhVzZRq.js.map → timezone-DhLUcYcX.js.map} +1 -1
- package/dist/{tooltip-BZ2fruXd.cjs → tooltip-B4nvmANO.cjs} +2 -2
- package/dist/{tooltip-BZ2fruXd.cjs.map → tooltip-B4nvmANO.cjs.map} +1 -1
- package/dist/{tooltip-DgLua_UV.js → tooltip-tFxYzDct.js} +2 -2
- package/dist/{tooltip-DgLua_UV.js.map → tooltip-tFxYzDct.js.map} +1 -1
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/{tree-Dg-mKO7n.js → tree-C9gLZE_E.js} +2 -2
- package/dist/{tree-Dg-mKO7n.js.map → tree-C9gLZE_E.js.map} +1 -1
- package/dist/{tree-c9Fcsgxi.cjs → tree-CRjGBeHH.cjs} +2 -2
- package/dist/{tree-c9Fcsgxi.cjs.map → tree-CRjGBeHH.cjs.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-Bgp3f7FN.js → typewriter-DN9HiCBW.js} +4 -4
- package/dist/{typewriter-Bgp3f7FN.js.map → typewriter-DN9HiCBW.js.map} +1 -1
- package/dist/{typewriter-FHkXxEdA.cjs → typewriter-VGsKEZOj.cjs} +2 -2
- package/dist/{typewriter-FHkXxEdA.cjs.map → typewriter-VGsKEZOj.cjs.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{typography-B2kH45Vn.js → typography-MN7P8my2.js} +2 -2
- package/dist/{typography-B2kH45Vn.js.map → typography-MN7P8my2.js.map} +1 -1
- package/dist/{typography-CE_QuH1P.cjs → typography-XN-pEi3Q.cjs} +2 -2
- package/dist/{typography-CE_QuH1P.cjs.map → typography-XN-pEi3Q.cjs.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/package.json +1 -1
- package/types/src/navigation-rail/index.d.ts +1 -1
- package/types/src/navigation-rail/navigation-rail-item.d.ts +89 -9
- package/types/src/navigation-rail/navigation-rail.d.ts +77 -9
- package/dist/autocomplete-Bm_tnRns.js.map +0 -1
- package/dist/autocomplete-DpGmI06M.cjs.map +0 -1
- package/dist/navigation-rail-item-CIg6-B2G.js +0 -151
- package/dist/navigation-rail-item-CIg6-B2G.js.map +0 -1
- package/dist/navigation-rail-item-DA7eqAg3.cjs +0 -116
- package/dist/navigation-rail-item-DA7eqAg3.cjs.map +0 -1
- package/dist/select-BrdNXtJK.js.map +0 -1
- package/dist/select-DvjgcI2e.cjs.map +0 -1
- package/dist/suggestion-chip-GLpIJvu3.cjs.map +0 -1
- package/dist/suggestion-chip-WW3dScRF.js.map +0 -1
- package/dist/tailwind.mixin-B_-9TcsC.cjs +0 -2
- package/dist/tailwind.mixin-Dq8FD_xN.js +0 -43
|
@@ -1,44 +1,124 @@
|
|
|
1
|
-
|
|
1
|
+
import { PropertyValues } from 'lit';
|
|
2
|
+
export type NavigationRailItemClickEvent = CustomEvent<{
|
|
3
|
+
icon: string;
|
|
4
|
+
label: string;
|
|
5
|
+
value: string;
|
|
6
|
+
active: boolean;
|
|
7
|
+
}>;
|
|
8
|
+
declare const SchmancyNavigationRailItem_base: CustomElementConstructor & import("@mixins/index").Constructor<import("lit").LitElement> & import("@mixins/index").Constructor<import("@mixins/index").IBaseMixin>;
|
|
2
9
|
/**
|
|
10
|
+
* Material Design 3 Navigation Rail Item Component
|
|
11
|
+
* @see https://m3.material.io/components/navigation-rail/overview
|
|
12
|
+
*
|
|
3
13
|
* `<schmancy-navigation-rail-item>` component
|
|
4
14
|
*
|
|
5
15
|
* Individual navigation item for use within a navigation rail.
|
|
6
16
|
* Represents a single destination or action with an icon and optional label.
|
|
7
17
|
*
|
|
8
18
|
* @element schmancy-navigation-rail-item
|
|
9
|
-
* @slot icon - Slot for the navigation item icon
|
|
10
|
-
* @slot - Default slot for custom content
|
|
19
|
+
* @slot icon - Slot for the navigation item icon (e.g., schmancy-icon)
|
|
20
|
+
* @slot - Default slot for custom content
|
|
21
|
+
* @slot badge - Custom badge content
|
|
22
|
+
*
|
|
23
|
+
* @fires navigate - When the item is clicked
|
|
24
|
+
*
|
|
25
|
+
* @csspart container - The main item container
|
|
26
|
+
* @csspart indicator - The active indicator
|
|
27
|
+
* @csspart icon - The icon container
|
|
28
|
+
* @csspart label - The label text
|
|
29
|
+
* @csspart badge - The badge element
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* <schmancy-navigation-rail-item
|
|
33
|
+
* icon="home"
|
|
34
|
+
* label="Home"
|
|
35
|
+
* value="/home"
|
|
36
|
+
* badge="3"
|
|
37
|
+
* active>
|
|
38
|
+
* </schmancy-navigation-rail-item>
|
|
11
39
|
*
|
|
12
40
|
* @example
|
|
13
|
-
*
|
|
41
|
+
* <!-- Using 'selected' alias -->
|
|
42
|
+
* <schmancy-navigation-rail-item
|
|
43
|
+
* icon="settings"
|
|
44
|
+
* label="Settings"
|
|
45
|
+
* value="/settings"
|
|
46
|
+
* selected>
|
|
47
|
+
* </schmancy-navigation-rail-item>
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* <!-- With custom icon -->
|
|
51
|
+
* <schmancy-navigation-rail-item label="Dashboard">
|
|
52
|
+
* <schmancy-icon slot="icon">dashboard</schmancy-icon>
|
|
53
|
+
* </schmancy-navigation-rail-item>
|
|
14
54
|
*/
|
|
15
55
|
export declare class SchmancyNavigationRailItem extends SchmancyNavigationRailItem_base {
|
|
56
|
+
private hovering$;
|
|
57
|
+
private pressing$;
|
|
58
|
+
private active$;
|
|
16
59
|
/**
|
|
17
|
-
* Icon name
|
|
60
|
+
* Icon name (Material Symbols icon)
|
|
18
61
|
*/
|
|
19
62
|
icon: string;
|
|
20
63
|
/**
|
|
21
64
|
* Label text for the navigation item
|
|
22
65
|
*/
|
|
23
66
|
label: string;
|
|
67
|
+
/**
|
|
68
|
+
* Value associated with this item (useful for routing)
|
|
69
|
+
*/
|
|
70
|
+
value: string;
|
|
24
71
|
/**
|
|
25
72
|
* Whether this item is currently active/selected
|
|
26
73
|
* @default false
|
|
27
74
|
*/
|
|
28
|
-
active: boolean;
|
|
75
|
+
get active(): boolean;
|
|
76
|
+
set active(value: boolean);
|
|
29
77
|
/**
|
|
30
|
-
*
|
|
78
|
+
* Whether this item is currently selected (alias for active)
|
|
79
|
+
* @default false
|
|
80
|
+
*/
|
|
81
|
+
get selected(): boolean;
|
|
82
|
+
set selected(value: boolean);
|
|
83
|
+
/**
|
|
84
|
+
* Badge text or number to display
|
|
31
85
|
*/
|
|
32
86
|
badge: string;
|
|
33
87
|
/**
|
|
34
|
-
*
|
|
88
|
+
* Badge variant
|
|
89
|
+
*/
|
|
90
|
+
badgeVariant: 'error' | 'primary' | 'secondary';
|
|
91
|
+
/**
|
|
92
|
+
* Whether to show the label (controlled by parent rail)
|
|
93
|
+
* @default false
|
|
94
|
+
*/
|
|
95
|
+
showLabel: boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Whether this item is disabled
|
|
98
|
+
* @default false
|
|
99
|
+
*/
|
|
100
|
+
disabled: boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Whether this is a nested item (sub-navigation)
|
|
35
103
|
* @default false
|
|
36
104
|
*/
|
|
37
|
-
|
|
105
|
+
nested: boolean;
|
|
106
|
+
/**
|
|
107
|
+
* Whether this item represents a group separator
|
|
108
|
+
* @default false
|
|
109
|
+
*/
|
|
110
|
+
group: boolean;
|
|
111
|
+
private showRipple;
|
|
112
|
+
connectedCallback(): void;
|
|
113
|
+
updated(changedProperties: PropertyValues): void;
|
|
38
114
|
/**
|
|
39
115
|
* Handle click events
|
|
40
116
|
*/
|
|
41
117
|
private handleClick;
|
|
118
|
+
/**
|
|
119
|
+
* Handle keyboard events
|
|
120
|
+
*/
|
|
121
|
+
private handleKeyDown;
|
|
42
122
|
protected render(): import("lit-html").TemplateResult<1>;
|
|
43
123
|
}
|
|
44
124
|
declare global {
|
|
@@ -1,31 +1,99 @@
|
|
|
1
|
-
|
|
1
|
+
import { PropertyValues } from 'lit';
|
|
2
|
+
export type NavigateEvent = CustomEvent<string>;
|
|
3
|
+
export type NavigationRailMenuClickEvent = CustomEvent<void>;
|
|
4
|
+
export type NavigationRailFabClickEvent = CustomEvent<void>;
|
|
5
|
+
export type LabelVisibility = 'all' | 'selected' | 'none';
|
|
6
|
+
declare const SchmancyNavigationRail_base: CustomElementConstructor & import("@mixins/index").Constructor<import("lit").LitElement> & import("@mixins/index").Constructor<import("@mixins/index").IBaseMixin>;
|
|
2
7
|
/**
|
|
8
|
+
* Material Design 3 Navigation Rail Component
|
|
9
|
+
* @see https://m3.material.io/components/navigation-rail/overview
|
|
10
|
+
*
|
|
3
11
|
* `<schmancy-navigation-rail>` component
|
|
4
12
|
*
|
|
5
|
-
* A vertical navigation component
|
|
13
|
+
* A Material Design 3 vertical navigation component positioned on the left side of an application.
|
|
6
14
|
* Navigation rails provide access to between 3-7 primary destinations with a compact footprint.
|
|
7
15
|
*
|
|
8
16
|
* @element schmancy-navigation-rail
|
|
17
|
+
* @slot fab - Slot for a floating action button at the top
|
|
18
|
+
* @slot menu - Slot for a menu icon or button below the FAB
|
|
19
|
+
* @slot header - Custom header content slot
|
|
20
|
+
* @slot footer - Custom footer content slot
|
|
9
21
|
* @slot - Default slot for navigation rail items
|
|
10
22
|
*
|
|
23
|
+
* @fires navigate - When a navigation item is selected
|
|
24
|
+
* @fires menu-click - When the menu button is clicked
|
|
25
|
+
* @fires fab-click - When the FAB is clicked
|
|
26
|
+
*
|
|
27
|
+
* @csspart rail - The main rail container
|
|
28
|
+
* @csspart header - The header section
|
|
29
|
+
* @csspart nav - The navigation items container
|
|
30
|
+
* @csspart footer - The footer section
|
|
31
|
+
*
|
|
11
32
|
* @example
|
|
12
|
-
* <schmancy-navigation-rail>
|
|
33
|
+
* <schmancy-navigation-rail activeIndex="0">
|
|
34
|
+
* <schmancy-button slot="fab" variant="filled" aria-label="Compose">
|
|
35
|
+
* <schmancy-icon>add</schmancy-icon>
|
|
36
|
+
* </schmancy-button>
|
|
37
|
+
* <schmancy-button slot="menu" variant="text" aria-label="Menu">
|
|
38
|
+
* <schmancy-icon>menu</schmancy-icon>
|
|
39
|
+
* </schmancy-button>
|
|
13
40
|
* <schmancy-navigation-rail-item icon="home" label="Home"></schmancy-navigation-rail-item>
|
|
14
41
|
* <schmancy-navigation-rail-item icon="search" label="Search"></schmancy-navigation-rail-item>
|
|
42
|
+
* <schmancy-navigation-rail-item icon="favorite" label="Favorites" badge="3"></schmancy-navigation-rail-item>
|
|
43
|
+
* <schmancy-navigation-rail-item icon="settings" label="Settings"></schmancy-navigation-rail-item>
|
|
15
44
|
* </schmancy-navigation-rail>
|
|
16
45
|
*/
|
|
17
46
|
export declare class SchmancyNavigationRail extends SchmancyNavigationRail_base {
|
|
47
|
+
private activeIndex$;
|
|
48
|
+
/**
|
|
49
|
+
* The currently active item index
|
|
50
|
+
* @default -1
|
|
51
|
+
*/
|
|
52
|
+
get activeIndex(): number;
|
|
53
|
+
set activeIndex(value: number);
|
|
54
|
+
/**
|
|
55
|
+
* The currently active item value (for programmatic selection)
|
|
56
|
+
*/
|
|
57
|
+
get activeValue(): string;
|
|
58
|
+
set activeValue(value: string);
|
|
59
|
+
private _activeValue;
|
|
60
|
+
/**
|
|
61
|
+
* When to show labels for navigation items
|
|
62
|
+
* 'all' - Always show labels for all items
|
|
63
|
+
* 'selected' - Only show label for selected item
|
|
64
|
+
* 'none' - Never show labels
|
|
65
|
+
* @default 'all'
|
|
66
|
+
*/
|
|
67
|
+
labelVisibility: LabelVisibility;
|
|
68
|
+
/**
|
|
69
|
+
* Alignment of navigation items
|
|
70
|
+
* @default 'top'
|
|
71
|
+
*/
|
|
72
|
+
alignment: 'top' | 'center' | 'bottom';
|
|
18
73
|
/**
|
|
19
|
-
*
|
|
20
|
-
* @default
|
|
74
|
+
* Show tooltips when labels are hidden
|
|
75
|
+
* @default true
|
|
21
76
|
*/
|
|
22
|
-
|
|
77
|
+
showTooltips: boolean;
|
|
23
78
|
/**
|
|
24
|
-
*
|
|
25
|
-
* @default
|
|
79
|
+
* Enable keyboard navigation
|
|
80
|
+
* @default true
|
|
26
81
|
*/
|
|
27
|
-
|
|
82
|
+
keyboardNavigation: boolean;
|
|
83
|
+
private focusedIndex;
|
|
84
|
+
private allElements;
|
|
85
|
+
private get navigationItems();
|
|
86
|
+
connectedCallback(): void;
|
|
87
|
+
updated(changedProperties: PropertyValues): void;
|
|
88
|
+
private updateActiveStates;
|
|
89
|
+
private updateActiveByValue;
|
|
90
|
+
private updateLabelVisibility;
|
|
91
|
+
private handleKeyDown;
|
|
92
|
+
private handleFabClick;
|
|
93
|
+
private handleMenuClick;
|
|
28
94
|
protected render(): import("lit-html").TemplateResult<1>;
|
|
95
|
+
private setupNavigateListener;
|
|
96
|
+
private handleSlotChange;
|
|
29
97
|
}
|
|
30
98
|
declare global {
|
|
31
99
|
interface HTMLElementTagNameMap {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"autocomplete-Bm_tnRns.js","sources":["../src/autocomplete/autocomplete.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\nimport { InputSize, SchmancyInput } from '@schmancy/input'\nimport SchmancyOption from '@schmancy/option/option'\nimport { html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { when } from 'lit/directives/when.js'\nimport {\n BehaviorSubject,\n combineLatest,\n EMPTY,\n fromEvent,\n of,\n Subject,\n timer\n} from 'rxjs'\nimport {\n debounceTime,\n distinctUntilChanged,\n filter,\n switchMap,\n take,\n takeUntil,\n tap,\n withLatestFrom\n} from 'rxjs/operators'\nimport style from './autocomplete.scss?inline'\n\n// Import the similarity function (or include it inline)\nimport { similarity } from '../utils/search'\n// Import chip component for multi-select display\nimport '../chips/input-chip'\n\nexport type SchmancyAutocompleteChangeEvent = CustomEvent<{\n value: string | string[]\n values?: string[]\n}>\n\ninterface FilteredOption {\n option: SchmancyOption\n score: number\n}\n\n@customElement('schmancy-autocomplete')\nexport default class SchmancyAutocomplete extends $LitElement(style) {\n // Public API properties\n @property({ type: Boolean }) required = false\n @property({ type: String }) placeholder = ''\n @property({ type: String, reflect: true }) label = ''\n @property({ type: String }) name = ''\n @property({ type: String }) maxHeight = '300px'\n @property({ type: Boolean }) multi = false\n @property({ type: String }) description = ''\n @property({ type: String, reflect: true }) size: InputSize = 'md'\n @property({ type: String }) autocomplete = 'off'\n @property({ type: Number }) debounceMs = 200\n @property({ type: Number }) similarityThreshold = 0.3 // Minimum similarity score to show option\n @property({ type: Boolean }) error = false\n @property({ type: String }) validationMessage = ''\n\n // Values property for multi-select mode\n @property({ type: Array })\n get values() {\n return [...this._selectedValues$.value]\n }\n set values(vals: string[]) {\n this._selectedValues$.next(Array.isArray(vals) ? [...vals] : [])\n }\n\n // Value property\n @property({ type: String, reflect: true })\n get value() {\n return this.multi \n ? this._selectedValues$.value.join(',')\n : this._selectedValue$.value\n }\n set value(val: string) {\n if (this.multi) {\n this._selectedValues$.next(\n val ? val.split(',').map(v => v.trim()).filter(Boolean) : []\n )\n } else {\n this._selectedValue$.next(val)\n }\n }\n\n // State\n @state() private _open = false\n @state() private _inputValue = ''\n @state() private _visibleOptionsCount = 0\n @state() private _hasResults = true\n\n // DOM references\n @query('#options') _listbox!: HTMLUListElement\n @query('sch-input') _input!: SchmancyInput\n @queryAssignedElements({ flatten: true }) private _options!: SchmancyOption[]\n private _inputElementRef = createRef<HTMLInputElement>()\n\n // RxJS Subjects\n private _selectedValue$ = new BehaviorSubject<string>('')\n private _selectedValues$ = new BehaviorSubject<string[]>([])\n private _inputValue$ = new BehaviorSubject<string>('')\n private _open$ = new BehaviorSubject<boolean>(false)\n private _options$ = new BehaviorSubject<SchmancyOption[]>([])\n private _optionSelect$ = new Subject<SchmancyOption>()\n private _documentClick$ = new Subject<MouseEvent>()\n\n connectedCallback() {\n super.connectedCallback()\n \n if (!this.id) {\n this.id = `sch-autocomplete-${Math.random().toString(36).slice(2, 9)}`\n }\n\n this._setupAutocompleteLogic()\n this._setupDocumentClickHandler()\n // Complex autofill detection disabled - using simple auto-select on blur instead\n // this._setupAutofillDetection()\n }\n\n private _setupAutocompleteLogic() {\n // Options management pipeline\n this._options$.pipe(\n tap(options => {\n options.forEach((option, index) => {\n option.setAttribute('role', 'option')\n option.tabIndex = -1\n if (!option.id) {\n option.id = `${this.id}-option-${index}`\n }\n if (!option.hasAttribute('data-event-bound')) {\n fromEvent(option, 'pointerdown').pipe(\n tap(e => {\n e.preventDefault() // Prevent blur from firing\n e.stopPropagation()\n }),\n takeUntil(this.disconnecting)\n ).subscribe(() => this._optionSelect$.next(option))\n option.setAttribute('data-event-bound', 'true')\n }\n })\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Selection sync pipeline\n combineLatest([\n this._selectedValue$,\n this._selectedValues$,\n this._options$\n ]).pipe(\n tap(([selectedValue, selectedValues, options]) => {\n options.forEach(option => {\n option.selected = this.multi \n ? selectedValues.includes(option.value)\n : option.value === selectedValue\n option.setAttribute('aria-selected', String(option.selected))\n })\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Enhanced fuzzy filtering pipeline\n this._inputValue$.pipe(\n distinctUntilChanged(),\n debounceTime(this.debounceMs),\n withLatestFrom(this._options$, this._open$),\n tap(([searchTerm, options, isOpen]) => {\n if (!isOpen) return\n\n const term = searchTerm.trim()\n \n if (!term) {\n // Show all options if no search term\n options.forEach(option => {\n option.hidden = false\n option.style.order = '0' // Reset order\n })\n this._visibleOptionsCount = options.length\n this._hasResults = true\n } else {\n // Calculate similarity scores for all options\n const scoredOptions: FilteredOption[] = options.map(option => {\n // Get text to search in (prioritize label, then textContent, then value)\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n \n // Calculate similarity scores for both label and value\n const labelScore = similarity(term, optionLabel)\n const valueScore = similarity(term, optionValue)\n \n // Use the higher score (prioritizing label matches)\n const score = Math.max(labelScore * 1.1, valueScore) // Slight boost for label matches\n \n return { option, score }\n })\n \n // Sort by score (highest first)\n scoredOptions.sort((a, b) => b.score - a.score)\n \n // Apply visibility and ordering\n let visibleCount = 0\n scoredOptions.forEach((item, index) => {\n const { option, score } = item\n \n // Hide options below threshold\n if (score < this.similarityThreshold) {\n option.hidden = true\n } else {\n option.hidden = false\n visibleCount++\n // Use CSS order to sort visible options by relevance\n option.style.order = String(index)\n }\n })\n \n this._visibleOptionsCount = visibleCount\n this._hasResults = visibleCount > 0\n }\n \n this._announceToScreenReader(\n this._visibleOptionsCount > 0 \n ? `${this._visibleOptionsCount} option${this._visibleOptionsCount === 1 ? '' : 's'} available.`\n : 'No results found.'\n )\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Option selection pipeline\n this._optionSelect$.pipe(\n withLatestFrom(this._selectedValue$, this._selectedValues$),\n tap(([option, _, currentValues]) => {\n if (this.multi) {\n const index = currentValues.indexOf(option.value)\n const newValues = index > -1\n ? [...currentValues.slice(0, index), ...currentValues.slice(index + 1)]\n : [...currentValues, option.value]\n this._selectedValues$.next(newValues)\n\n // Keep search input persistent - don't reset\n // this._inputValue$.next('')\n // this._inputValue = ''\n \n const labels = this._getSelectedLabels()\n this._announceToScreenReader(\n labels.length > 0 \n ? `Selected: ${labels.join(', ')}`\n : 'No options selected'\n )\n } else {\n this._selectedValue$.next(option.value)\n this._open$.next(false)\n this._open = false\n \n this._inputValue = option.label || option.textContent || ''\n this._inputValue$.next(this._inputValue)\n \n timer(100).pipe(\n tap(() => this._inputElementRef.value?.blur()),\n take(1)\n ).subscribe()\n \n this._announceToScreenReader(`Selected: ${option.label || option.textContent}`)\n }\n }),\n tap(() => this._fireChangeEvent()),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Display update pipeline - only for single select\n combineLatest([\n this._open$,\n this._selectedValue$,\n this._options$\n ]).pipe(\n filter(() => !this._open$.value && !this.multi),\n tap(([, selectedValue, options]) => {\n const option = options.find(opt => opt.value === selectedValue)\n this._inputValue = option ? option.label || option.textContent || '' : ''\n this._inputValue$.next(this._inputValue)\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Open state sync\n this._open$.pipe(\n tap(open => this._open = open),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n private _setupDocumentClickHandler() {\n this._documentClick$.pipe(\n filter(e => !e.composedPath().includes(this)),\n filter(e => !this._options.some(opt => e.composedPath().includes(opt))),\n filter(() => this._open),\n tap(() => {\n this._open$.next(false)\n this._updateInputDisplay()\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n this._open$.pipe(\n distinctUntilChanged(),\n switchMap(open =>\n open\n ? timer(10).pipe(\n switchMap(() => fromEvent<MouseEvent>(document, 'click').pipe(\n tap(e => this._documentClick$.next(e)),\n takeUntil(this._open$.pipe(filter(isOpen => !isOpen)))\n ))\n )\n : EMPTY\n ),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n\n private _updateInputDisplay() {\n // For multi-select, we don't update input display since chips show the selections\n if (this.multi) {\n return\n }\n\n of(null).pipe(\n withLatestFrom(\n this._selectedValue$,\n this._options$,\n this._open$\n ),\n tap(([, selectedValue, options, isOpen]) => {\n if (!this._inputElementRef.value) return\n\n if (!isOpen) {\n const option = options.find(opt => opt.value === selectedValue)\n this._inputValue = option ? option.label || option.textContent || '' : ''\n this._inputValue$.next(this._inputValue)\n this._inputElementRef.value.value = this._inputValue\n }\n }),\n take(1)\n ).subscribe()\n }\n\n private _getSelectedLabels(): string[] {\n return this._options\n .filter(option => \n this.multi \n ? this._selectedValues$.value.includes(option.value)\n : option.value === this._selectedValue$.value\n )\n .map(option => option.label || option.textContent || '')\n }\n\n private _announceToScreenReader(message: string) {\n const liveRegion = this.shadowRoot?.querySelector('#live-status')\n if (liveRegion) {\n liveRegion.textContent = message\n }\n }\n\n private _fireChangeEvent() {\n const detail: SchmancyAutocompleteChangeEvent['detail'] = {\n value: this.value,\n }\n\n if (this.multi) {\n detail.values = [...this._selectedValues$.value]\n }\n\n this.dispatchEvent(\n new CustomEvent<SchmancyAutocompleteChangeEvent['detail']>('change', {\n detail,\n bubbles: true,\n composed: true,\n })\n )\n }\n\n public checkValidity(): boolean {\n if (!this.required) return true\n return this.multi \n ? this._selectedValues$.value.length > 0 \n : Boolean(this._selectedValue$.value)\n }\n\n public reportValidity(): boolean {\n if (this._inputElementRef.value) {\n return this._inputElementRef.value.reportValidity()\n }\n return this.checkValidity()\n }\n\n firstUpdated() {\n // Auto-selection now happens on blur, no need for autofill detection\n }\n\n private handleChipRemove(value: string) {\n const currentValues = this._selectedValues$.value\n const newValues = currentValues.filter(v => v !== value)\n this._selectedValues$.next(newValues)\n this._fireChangeEvent()\n this._announceToScreenReader(`Removed: ${this._getChipLabel(value)}`)\n }\n\n private _getChipLabel(value: string): string {\n const option = this._options.find(opt => opt.value === value)\n return option ? option.label || option.textContent || value : value\n }\n\n private _focusTextInput() {\n if (this._inputElementRef.value) {\n this._inputElementRef.value.focus()\n }\n }\n\n render() {\n const descriptionId = `${this.id}-desc`\n\n // Get size-based styling to match Schmancy input\n const getSizeStyles = () => {\n switch (this.size) {\n case 'sm':\n return {\n height: 'min-h-[40px]',\n padding: 'px-2',\n fontSize: 'text-sm', // 14px\n labelSize: 'text-sm'\n }\n case 'lg':\n return {\n height: 'min-h-[60px]',\n padding: 'px-5',\n fontSize: 'text-lg', // 18px\n labelSize: 'text-lg'\n }\n case 'md':\n default:\n return {\n height: 'min-h-[50px]',\n padding: 'px-4',\n fontSize: 'text-base', // 16px\n labelSize: 'text-base'\n }\n }\n }\n\n const { height, padding, fontSize, labelSize } = getSizeStyles()\n\n return html`\n <div class=\"relative\">\n <!-- Screen reader live region -->\n <div id=\"live-status\" role=\"status\" aria-live=\"polite\" class=\"sr-only\"></div>\n\n <!-- Description -->\n ${this.description ? html`<div id=\"${descriptionId}\" class=\"sr-only\">${this.description}</div>` : ''}\n\n <!-- Custom input wrapper for Gmail-style chip input -->\n <slot name=\"trigger\">\n ${when(this.multi,\n () => html`\n <!-- Custom multi-select input with inline chips -->\n <div class=\"relative\">\n ${when(this.label, () => html`\n <label class=\"${classMap({\n 'block mb-1 font-medium': true,\n 'text-primary-default': !this.error,\n 'text-error-default': this.error,\n [labelSize]: true\n })}\">\n ${this.label}${this.required ? html`<span class=\"text-error-default ml-1\">*</span>` : ''}\n </label>\n `)}\n <div\n class=\"${classMap({\n 'flex flex-wrap items-center gap-1': true,\n [height]: true,\n [padding]: true,\n 'block w-full min-w-0 rounded-[8px] border-0': true,\n 'bg-surface-highest text-surface-on': true,\n 'ring-0 ring-inset focus-within:ring-1 focus-within:ring-inset': true,\n 'ring-secondary-default focus-within:ring-secondary-default': !this.error,\n 'ring-error-default focus-within:ring-error-default': this.error,\n 'cursor-text transition-colors duration-200': true\n })}\"\n @click=${() => this._focusTextInput()}\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls=\"options\"\n aria-expanded=${this._open}\n >\n <!-- Render chips inline -->\n ${repeat(\n this._selectedValues$.value,\n value => value,\n value => html`\n <schmancy-input-chip\n .value=${value}\n @remove=${(e: CustomEvent) => this.handleChipRemove(e.detail.value)}\n class=\"flex-shrink-0 my-0.5\"\n >\n ${this._getChipLabel(value)}\n </schmancy-input-chip>\n `\n )}\n\n <!-- Text input for typing -->\n <input\n ${ref(this._inputElementRef)}\n id=\"autocomplete-input\"\n type=\"text\"\n class=\"flex-1 min-w-[120px] py-1 bg-transparent border-none outline-none ${fontSize} font-medium text-surface-on placeholder:text-muted\"\n .name=${this.name || this.label?.toLowerCase().replace(/\\s+/g, '-')}\n .placeholder=${this._selectedValues$.value.length > 0 ? 'Add more...' : this.placeholder}\n .value=${this._inputValue}\n .autocomplete=${this.autocomplete}\n @input=${(e: Event) => {\n const value = (e.target as HTMLInputElement).value\n this._inputValue = value\n this._inputValue$.next(value)\n }}\n @focus=${(e: FocusEvent) => {\n e.stopPropagation()\n // Clear input on focus for new searches\n this._inputValue = ''\n this._inputValue$.next('')\n this._open$.next(true)\n }}\n @keydown=${(e: KeyboardEvent) => {\n this._handleKeyDown(e)\n }}\n @blur=${() => {\n this._handleAutoSelectOnBlur()\n }}\n />\n </div>\n\n <!-- Validation message -->\n ${when(this.error && this.validationMessage, () => html`\n <div class=\"mt-1 text-sm text-error-default\">\n ${this.validationMessage}\n </div>\n `)}\n </div>\n `,\n () => html`\n <!-- Regular single-select input -->\n <schmancy-input\n .size=${this.size}\n ${ref(this._inputElementRef)}\n id=\"autocomplete-input\"\n class=\"w-full\"\n .name=${this.name || this.label?.toLowerCase().replace(/\\s+/g, '-')}\n .label=${this.label}\n .placeholder=${this.placeholder}\n .required=${this.required}\n .value=${this._inputValue}\n type=\"text\"\n autocomplete=${this.autocomplete}\n clickable\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls=\"options\"\n aria-expanded=${this._open}\n aria-describedby=${this.description ? descriptionId : undefined}\n @input=${(e: Event) => {\n const value = (e.target as HTMLInputElement).value\n this._inputValue = value\n this._inputValue$.next(value)\n }}\n @focus=${(e: FocusEvent) => {\n e.stopPropagation()\n this._open$.next(true)\n }}\n @click=${(e: MouseEvent) => {\n e.stopPropagation()\n this._open$.next(true)\n }}\n @keydown=${(e: KeyboardEvent) => {\n this._handleKeyDown(e)\n }}\n @blur=${() => {\n this._handleAutoSelectOnBlur()\n }}\n >\n </schmancy-input>\n `\n )}\n </slot>\n\n <!-- Options dropdown -->\n <ul\n id=\"options\"\n class=${classMap({\n 'absolute': true,\n 'z-[1000]': true,\n 'mt-1': true,\n 'w-full': true,\n 'rounded-md': true,\n 'shadow-md': true,\n 'overflow-auto': true,\n 'min-w-full': true,\n 'bg-surface-low': true,\n 'flex': true,\n 'flex-col': true, // Enable flexbox for ordering\n })}\n role=\"listbox\"\n aria-multiselectable=${this.multi ? 'true' : 'false'}\n aria-label=${`${this.label || 'Options'} dropdown`}\n ?hidden=${!this._open}\n style=\"max-height: ${this.maxHeight}; display: ${this._open ? 'flex' : 'none'};\"\n @slotchange=${() => {\n this._options$.next(this._options)\n }}\n >\n <slot></slot>\n ${!this._hasResults ? html`\n <li class=\"px-3 py-2 text-sm text-muted\">No results found</li>\n ` : ''}\n </ul>\n </div>\n `\n }\n\n private _handleAutoSelectOnBlur() {\n // Only auto-select in single-select mode and when dropdown is open with a search term\n if (this.multi || !this._open || !this._inputValue.trim()) {\n return\n }\n \n const searchTerm = this._inputValue.trim()\n \n // Find the best matching option using the same similarity logic as filtering\n let bestMatch: SchmancyOption | null = null\n let bestScore = 0\n \n this._options.forEach(option => {\n // Skip hidden options\n if (option.hidden) return\n \n // Get text to search in (prioritize label, then textContent, then value)\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n \n // Calculate similarity scores for both label and value\n const labelScore = similarity(searchTerm, optionLabel)\n const valueScore = similarity(searchTerm, optionValue)\n \n // Use the higher score (prioritizing label matches)\n const score = Math.max(labelScore * 1.1, valueScore) // Slight boost for label matches\n \n // Keep track of best match that meets threshold\n if (score > bestScore && score >= this.similarityThreshold) {\n bestScore = score\n bestMatch = option\n }\n })\n \n // Auto-select the best match if found\n if (bestMatch) {\n // Select the option using the existing pipeline\n this._optionSelect$.next(bestMatch)\n \n // Close the dropdown\n this._open$.next(false)\n this._open = false\n \n }\n }\n\n private _handleKeyDown(_e: KeyboardEvent) {\n fromEvent<KeyboardEvent>(document, 'keydown').pipe(\n take(1),\n withLatestFrom(this._open$, this._options$, this._selectedValues$),\n tap(([event, isOpen, options, selectedValues]) => {\n // Handle backspace to remove last chip in multi-select when input is empty\n if (this.multi && event.key === 'Backspace' && !this._inputValue && selectedValues.length > 0 && !isOpen) {\n event.preventDefault()\n const lastValue = selectedValues[selectedValues.length - 1]\n this.handleChipRemove(lastValue)\n return\n }\n if (!isOpen && (event.key === 'ArrowDown' || event.key === 'Enter')) {\n event.preventDefault()\n this._open$.next(true)\n \n timer(10).pipe(\n tap(() => {\n const firstVisible = options.find(opt => !opt.hidden)\n firstVisible?.focus()\n }),\n take(1)\n ).subscribe()\n return\n }\n\n if (!isOpen) return\n\n const visibleOptions = options.filter(opt => !opt.hidden)\n .sort((a, b) => parseInt(a.style.order || '0') - parseInt(b.style.order || '0'))\n \n const focusedOption = visibleOptions.find(opt => opt === document.activeElement)\n const currentIndex = focusedOption ? visibleOptions.indexOf(focusedOption) : -1\n\n switch (event.key) {\n case 'Escape':\n event.preventDefault()\n this._open$.next(false)\n this._updateInputDisplay()\n this._inputElementRef.value?.focus()\n break\n\n case 'Tab':\n this._open$.next(false)\n this._updateInputDisplay()\n break\n\n case 'ArrowDown':\n event.preventDefault()\n const nextIndex = currentIndex < visibleOptions.length - 1 ? currentIndex + 1 : 0\n visibleOptions[nextIndex]?.focus()\n break\n\n case 'ArrowUp':\n event.preventDefault()\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : visibleOptions.length - 1\n visibleOptions[prevIndex]?.focus()\n break\n\n case 'Home':\n event.preventDefault()\n visibleOptions[0]?.focus()\n break\n\n case 'End':\n event.preventDefault()\n visibleOptions[visibleOptions.length - 1]?.focus()\n break\n\n case 'Enter':\n case ' ':\n if (focusedOption) {\n event.preventDefault()\n this._optionSelect$.next(focusedOption)\n }\n break\n }\n })\n ).subscribe()\n }\n}\n\n\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'schmancy-autocomplete': SchmancyAutocomplete\n }\n}"],"names":["SchmancyAutocomplete","$LitElement","constructor","super","arguments","this","required","placeholder","label","name","maxHeight","multi","description","size","autocomplete","debounceMs","similarityThreshold","error","validationMessage","_open","_inputValue","_visibleOptionsCount","_hasResults","_inputElementRef","createRef","_selectedValue$","BehaviorSubject","_selectedValues$","_inputValue$","_open$","_options$","_optionSelect$","Subject","_documentClick$","values","value","vals","next","Array","isArray","join","val","split","map","v","trim","filter","Boolean","connectedCallback","id","Math","random","toString","slice","_setupAutocompleteLogic","_setupDocumentClickHandler","pipe","tap","options","forEach","option","index","setAttribute","tabIndex","hasAttribute","fromEvent","e","preventDefault","stopPropagation","takeUntil","disconnecting","subscribe","combineLatest","selectedValue","selectedValues","selected","includes","String","distinctUntilChanged","debounceTime","withLatestFrom","searchTerm","isOpen","term","scoredOptions","optionLabel","textContent","optionValue","labelScore","similarity","valueScore","score","max","sort","a","b","visibleCount","item","hidden","style","order","length","_announceToScreenReader","_","currentValues","indexOf","newValues","labels","_getSelectedLabels","timer","blur","take","_fireChangeEvent","find","opt","open","composedPath","_options","some","_updateInputDisplay","switchMap","document","EMPTY","of","message","liveRegion","shadowRoot","querySelector","detail","dispatchEvent","CustomEvent","bubbles","composed","checkValidity","reportValidity","firstUpdated","_getChipLabel","_focusTextInput","focus","render","descriptionId","height","padding","fontSize","labelSize","getSizeStyles","html","when","classMap","repeat","handleChipRemove","ref","toLowerCase","replace","target","_handleKeyDown","_handleAutoSelectOnBlur","absolute","flex","bestMatch","bestScore","_e","event","key","lastValue","firstVisible","visibleOptions","parseInt","focusedOption","activeElement","currentIndex","nextIndex","prevIndex","__decorateClass","property","type","prototype","reflect","Number","state","query","queryAssignedElements","flatten","customElement"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"autocomplete-DpGmI06M.cjs","sources":["../src/autocomplete/autocomplete.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\nimport { InputSize, SchmancyInput } from '@schmancy/input'\nimport SchmancyOption from '@schmancy/option/option'\nimport { html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { when } from 'lit/directives/when.js'\nimport {\n BehaviorSubject,\n combineLatest,\n EMPTY,\n fromEvent,\n of,\n Subject,\n timer\n} from 'rxjs'\nimport {\n debounceTime,\n distinctUntilChanged,\n filter,\n switchMap,\n take,\n takeUntil,\n tap,\n withLatestFrom\n} from 'rxjs/operators'\nimport style from './autocomplete.scss?inline'\n\n// Import the similarity function (or include it inline)\nimport { similarity } from '../utils/search'\n// Import chip component for multi-select display\nimport '../chips/input-chip'\n\nexport type SchmancyAutocompleteChangeEvent = CustomEvent<{\n value: string | string[]\n values?: string[]\n}>\n\ninterface FilteredOption {\n option: SchmancyOption\n score: number\n}\n\n@customElement('schmancy-autocomplete')\nexport default class SchmancyAutocomplete extends $LitElement(style) {\n // Public API properties\n @property({ type: Boolean }) required = false\n @property({ type: String }) placeholder = ''\n @property({ type: String, reflect: true }) label = ''\n @property({ type: String }) name = ''\n @property({ type: String }) maxHeight = '300px'\n @property({ type: Boolean }) multi = false\n @property({ type: String }) description = ''\n @property({ type: String, reflect: true }) size: InputSize = 'md'\n @property({ type: String }) autocomplete = 'off'\n @property({ type: Number }) debounceMs = 200\n @property({ type: Number }) similarityThreshold = 0.3 // Minimum similarity score to show option\n @property({ type: Boolean }) error = false\n @property({ type: String }) validationMessage = ''\n\n // Values property for multi-select mode\n @property({ type: Array })\n get values() {\n return [...this._selectedValues$.value]\n }\n set values(vals: string[]) {\n this._selectedValues$.next(Array.isArray(vals) ? [...vals] : [])\n }\n\n // Value property\n @property({ type: String, reflect: true })\n get value() {\n return this.multi \n ? this._selectedValues$.value.join(',')\n : this._selectedValue$.value\n }\n set value(val: string) {\n if (this.multi) {\n this._selectedValues$.next(\n val ? val.split(',').map(v => v.trim()).filter(Boolean) : []\n )\n } else {\n this._selectedValue$.next(val)\n }\n }\n\n // State\n @state() private _open = false\n @state() private _inputValue = ''\n @state() private _visibleOptionsCount = 0\n @state() private _hasResults = true\n\n // DOM references\n @query('#options') _listbox!: HTMLUListElement\n @query('sch-input') _input!: SchmancyInput\n @queryAssignedElements({ flatten: true }) private _options!: SchmancyOption[]\n private _inputElementRef = createRef<HTMLInputElement>()\n\n // RxJS Subjects\n private _selectedValue$ = new BehaviorSubject<string>('')\n private _selectedValues$ = new BehaviorSubject<string[]>([])\n private _inputValue$ = new BehaviorSubject<string>('')\n private _open$ = new BehaviorSubject<boolean>(false)\n private _options$ = new BehaviorSubject<SchmancyOption[]>([])\n private _optionSelect$ = new Subject<SchmancyOption>()\n private _documentClick$ = new Subject<MouseEvent>()\n\n connectedCallback() {\n super.connectedCallback()\n \n if (!this.id) {\n this.id = `sch-autocomplete-${Math.random().toString(36).slice(2, 9)}`\n }\n\n this._setupAutocompleteLogic()\n this._setupDocumentClickHandler()\n // Complex autofill detection disabled - using simple auto-select on blur instead\n // this._setupAutofillDetection()\n }\n\n private _setupAutocompleteLogic() {\n // Options management pipeline\n this._options$.pipe(\n tap(options => {\n options.forEach((option, index) => {\n option.setAttribute('role', 'option')\n option.tabIndex = -1\n if (!option.id) {\n option.id = `${this.id}-option-${index}`\n }\n if (!option.hasAttribute('data-event-bound')) {\n fromEvent(option, 'pointerdown').pipe(\n tap(e => {\n e.preventDefault() // Prevent blur from firing\n e.stopPropagation()\n }),\n takeUntil(this.disconnecting)\n ).subscribe(() => this._optionSelect$.next(option))\n option.setAttribute('data-event-bound', 'true')\n }\n })\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Selection sync pipeline\n combineLatest([\n this._selectedValue$,\n this._selectedValues$,\n this._options$\n ]).pipe(\n tap(([selectedValue, selectedValues, options]) => {\n options.forEach(option => {\n option.selected = this.multi \n ? selectedValues.includes(option.value)\n : option.value === selectedValue\n option.setAttribute('aria-selected', String(option.selected))\n })\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Enhanced fuzzy filtering pipeline\n this._inputValue$.pipe(\n distinctUntilChanged(),\n debounceTime(this.debounceMs),\n withLatestFrom(this._options$, this._open$),\n tap(([searchTerm, options, isOpen]) => {\n if (!isOpen) return\n\n const term = searchTerm.trim()\n \n if (!term) {\n // Show all options if no search term\n options.forEach(option => {\n option.hidden = false\n option.style.order = '0' // Reset order\n })\n this._visibleOptionsCount = options.length\n this._hasResults = true\n } else {\n // Calculate similarity scores for all options\n const scoredOptions: FilteredOption[] = options.map(option => {\n // Get text to search in (prioritize label, then textContent, then value)\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n \n // Calculate similarity scores for both label and value\n const labelScore = similarity(term, optionLabel)\n const valueScore = similarity(term, optionValue)\n \n // Use the higher score (prioritizing label matches)\n const score = Math.max(labelScore * 1.1, valueScore) // Slight boost for label matches\n \n return { option, score }\n })\n \n // Sort by score (highest first)\n scoredOptions.sort((a, b) => b.score - a.score)\n \n // Apply visibility and ordering\n let visibleCount = 0\n scoredOptions.forEach((item, index) => {\n const { option, score } = item\n \n // Hide options below threshold\n if (score < this.similarityThreshold) {\n option.hidden = true\n } else {\n option.hidden = false\n visibleCount++\n // Use CSS order to sort visible options by relevance\n option.style.order = String(index)\n }\n })\n \n this._visibleOptionsCount = visibleCount\n this._hasResults = visibleCount > 0\n }\n \n this._announceToScreenReader(\n this._visibleOptionsCount > 0 \n ? `${this._visibleOptionsCount} option${this._visibleOptionsCount === 1 ? '' : 's'} available.`\n : 'No results found.'\n )\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Option selection pipeline\n this._optionSelect$.pipe(\n withLatestFrom(this._selectedValue$, this._selectedValues$),\n tap(([option, _, currentValues]) => {\n if (this.multi) {\n const index = currentValues.indexOf(option.value)\n const newValues = index > -1\n ? [...currentValues.slice(0, index), ...currentValues.slice(index + 1)]\n : [...currentValues, option.value]\n this._selectedValues$.next(newValues)\n\n // Keep search input persistent - don't reset\n // this._inputValue$.next('')\n // this._inputValue = ''\n \n const labels = this._getSelectedLabels()\n this._announceToScreenReader(\n labels.length > 0 \n ? `Selected: ${labels.join(', ')}`\n : 'No options selected'\n )\n } else {\n this._selectedValue$.next(option.value)\n this._open$.next(false)\n this._open = false\n \n this._inputValue = option.label || option.textContent || ''\n this._inputValue$.next(this._inputValue)\n \n timer(100).pipe(\n tap(() => this._inputElementRef.value?.blur()),\n take(1)\n ).subscribe()\n \n this._announceToScreenReader(`Selected: ${option.label || option.textContent}`)\n }\n }),\n tap(() => this._fireChangeEvent()),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Display update pipeline - only for single select\n combineLatest([\n this._open$,\n this._selectedValue$,\n this._options$\n ]).pipe(\n filter(() => !this._open$.value && !this.multi),\n tap(([, selectedValue, options]) => {\n const option = options.find(opt => opt.value === selectedValue)\n this._inputValue = option ? option.label || option.textContent || '' : ''\n this._inputValue$.next(this._inputValue)\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Open state sync\n this._open$.pipe(\n tap(open => this._open = open),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n private _setupDocumentClickHandler() {\n this._documentClick$.pipe(\n filter(e => !e.composedPath().includes(this)),\n filter(e => !this._options.some(opt => e.composedPath().includes(opt))),\n filter(() => this._open),\n tap(() => {\n this._open$.next(false)\n this._updateInputDisplay()\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n this._open$.pipe(\n distinctUntilChanged(),\n switchMap(open =>\n open\n ? timer(10).pipe(\n switchMap(() => fromEvent<MouseEvent>(document, 'click').pipe(\n tap(e => this._documentClick$.next(e)),\n takeUntil(this._open$.pipe(filter(isOpen => !isOpen)))\n ))\n )\n : EMPTY\n ),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n\n private _updateInputDisplay() {\n // For multi-select, we don't update input display since chips show the selections\n if (this.multi) {\n return\n }\n\n of(null).pipe(\n withLatestFrom(\n this._selectedValue$,\n this._options$,\n this._open$\n ),\n tap(([, selectedValue, options, isOpen]) => {\n if (!this._inputElementRef.value) return\n\n if (!isOpen) {\n const option = options.find(opt => opt.value === selectedValue)\n this._inputValue = option ? option.label || option.textContent || '' : ''\n this._inputValue$.next(this._inputValue)\n this._inputElementRef.value.value = this._inputValue\n }\n }),\n take(1)\n ).subscribe()\n }\n\n private _getSelectedLabels(): string[] {\n return this._options\n .filter(option => \n this.multi \n ? this._selectedValues$.value.includes(option.value)\n : option.value === this._selectedValue$.value\n )\n .map(option => option.label || option.textContent || '')\n }\n\n private _announceToScreenReader(message: string) {\n const liveRegion = this.shadowRoot?.querySelector('#live-status')\n if (liveRegion) {\n liveRegion.textContent = message\n }\n }\n\n private _fireChangeEvent() {\n const detail: SchmancyAutocompleteChangeEvent['detail'] = {\n value: this.value,\n }\n\n if (this.multi) {\n detail.values = [...this._selectedValues$.value]\n }\n\n this.dispatchEvent(\n new CustomEvent<SchmancyAutocompleteChangeEvent['detail']>('change', {\n detail,\n bubbles: true,\n composed: true,\n })\n )\n }\n\n public checkValidity(): boolean {\n if (!this.required) return true\n return this.multi \n ? this._selectedValues$.value.length > 0 \n : Boolean(this._selectedValue$.value)\n }\n\n public reportValidity(): boolean {\n if (this._inputElementRef.value) {\n return this._inputElementRef.value.reportValidity()\n }\n return this.checkValidity()\n }\n\n firstUpdated() {\n // Auto-selection now happens on blur, no need for autofill detection\n }\n\n private handleChipRemove(value: string) {\n const currentValues = this._selectedValues$.value\n const newValues = currentValues.filter(v => v !== value)\n this._selectedValues$.next(newValues)\n this._fireChangeEvent()\n this._announceToScreenReader(`Removed: ${this._getChipLabel(value)}`)\n }\n\n private _getChipLabel(value: string): string {\n const option = this._options.find(opt => opt.value === value)\n return option ? option.label || option.textContent || value : value\n }\n\n private _focusTextInput() {\n if (this._inputElementRef.value) {\n this._inputElementRef.value.focus()\n }\n }\n\n render() {\n const descriptionId = `${this.id}-desc`\n\n // Get size-based styling to match Schmancy input\n const getSizeStyles = () => {\n switch (this.size) {\n case 'sm':\n return {\n height: 'min-h-[40px]',\n padding: 'px-2',\n fontSize: 'text-sm', // 14px\n labelSize: 'text-sm'\n }\n case 'lg':\n return {\n height: 'min-h-[60px]',\n padding: 'px-5',\n fontSize: 'text-lg', // 18px\n labelSize: 'text-lg'\n }\n case 'md':\n default:\n return {\n height: 'min-h-[50px]',\n padding: 'px-4',\n fontSize: 'text-base', // 16px\n labelSize: 'text-base'\n }\n }\n }\n\n const { height, padding, fontSize, labelSize } = getSizeStyles()\n\n return html`\n <div class=\"relative\">\n <!-- Screen reader live region -->\n <div id=\"live-status\" role=\"status\" aria-live=\"polite\" class=\"sr-only\"></div>\n\n <!-- Description -->\n ${this.description ? html`<div id=\"${descriptionId}\" class=\"sr-only\">${this.description}</div>` : ''}\n\n <!-- Custom input wrapper for Gmail-style chip input -->\n <slot name=\"trigger\">\n ${when(this.multi,\n () => html`\n <!-- Custom multi-select input with inline chips -->\n <div class=\"relative\">\n ${when(this.label, () => html`\n <label class=\"${classMap({\n 'block mb-1 font-medium': true,\n 'text-primary-default': !this.error,\n 'text-error-default': this.error,\n [labelSize]: true\n })}\">\n ${this.label}${this.required ? html`<span class=\"text-error-default ml-1\">*</span>` : ''}\n </label>\n `)}\n <div\n class=\"${classMap({\n 'flex flex-wrap items-center gap-1': true,\n [height]: true,\n [padding]: true,\n 'block w-full min-w-0 rounded-[8px] border-0': true,\n 'bg-surface-highest text-surface-on': true,\n 'ring-0 ring-inset focus-within:ring-1 focus-within:ring-inset': true,\n 'ring-secondary-default focus-within:ring-secondary-default': !this.error,\n 'ring-error-default focus-within:ring-error-default': this.error,\n 'cursor-text transition-colors duration-200': true\n })}\"\n @click=${() => this._focusTextInput()}\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls=\"options\"\n aria-expanded=${this._open}\n >\n <!-- Render chips inline -->\n ${repeat(\n this._selectedValues$.value,\n value => value,\n value => html`\n <schmancy-input-chip\n .value=${value}\n @remove=${(e: CustomEvent) => this.handleChipRemove(e.detail.value)}\n class=\"flex-shrink-0 my-0.5\"\n >\n ${this._getChipLabel(value)}\n </schmancy-input-chip>\n `\n )}\n\n <!-- Text input for typing -->\n <input\n ${ref(this._inputElementRef)}\n id=\"autocomplete-input\"\n type=\"text\"\n class=\"flex-1 min-w-[120px] py-1 bg-transparent border-none outline-none ${fontSize} font-medium text-surface-on placeholder:text-muted\"\n .name=${this.name || this.label?.toLowerCase().replace(/\\s+/g, '-')}\n .placeholder=${this._selectedValues$.value.length > 0 ? 'Add more...' : this.placeholder}\n .value=${this._inputValue}\n .autocomplete=${this.autocomplete}\n @input=${(e: Event) => {\n const value = (e.target as HTMLInputElement).value\n this._inputValue = value\n this._inputValue$.next(value)\n }}\n @focus=${(e: FocusEvent) => {\n e.stopPropagation()\n // Clear input on focus for new searches\n this._inputValue = ''\n this._inputValue$.next('')\n this._open$.next(true)\n }}\n @keydown=${(e: KeyboardEvent) => {\n this._handleKeyDown(e)\n }}\n @blur=${() => {\n this._handleAutoSelectOnBlur()\n }}\n />\n </div>\n\n <!-- Validation message -->\n ${when(this.error && this.validationMessage, () => html`\n <div class=\"mt-1 text-sm text-error-default\">\n ${this.validationMessage}\n </div>\n `)}\n </div>\n `,\n () => html`\n <!-- Regular single-select input -->\n <schmancy-input\n .size=${this.size}\n ${ref(this._inputElementRef)}\n id=\"autocomplete-input\"\n class=\"w-full\"\n .name=${this.name || this.label?.toLowerCase().replace(/\\s+/g, '-')}\n .label=${this.label}\n .placeholder=${this.placeholder}\n .required=${this.required}\n .value=${this._inputValue}\n type=\"text\"\n autocomplete=${this.autocomplete}\n clickable\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls=\"options\"\n aria-expanded=${this._open}\n aria-describedby=${this.description ? descriptionId : undefined}\n @input=${(e: Event) => {\n const value = (e.target as HTMLInputElement).value\n this._inputValue = value\n this._inputValue$.next(value)\n }}\n @focus=${(e: FocusEvent) => {\n e.stopPropagation()\n this._open$.next(true)\n }}\n @click=${(e: MouseEvent) => {\n e.stopPropagation()\n this._open$.next(true)\n }}\n @keydown=${(e: KeyboardEvent) => {\n this._handleKeyDown(e)\n }}\n @blur=${() => {\n this._handleAutoSelectOnBlur()\n }}\n >\n </schmancy-input>\n `\n )}\n </slot>\n\n <!-- Options dropdown -->\n <ul\n id=\"options\"\n class=${classMap({\n 'absolute': true,\n 'z-[1000]': true,\n 'mt-1': true,\n 'w-full': true,\n 'rounded-md': true,\n 'shadow-md': true,\n 'overflow-auto': true,\n 'min-w-full': true,\n 'bg-surface-low': true,\n 'flex': true,\n 'flex-col': true, // Enable flexbox for ordering\n })}\n role=\"listbox\"\n aria-multiselectable=${this.multi ? 'true' : 'false'}\n aria-label=${`${this.label || 'Options'} dropdown`}\n ?hidden=${!this._open}\n style=\"max-height: ${this.maxHeight}; display: ${this._open ? 'flex' : 'none'};\"\n @slotchange=${() => {\n this._options$.next(this._options)\n }}\n >\n <slot></slot>\n ${!this._hasResults ? html`\n <li class=\"px-3 py-2 text-sm text-muted\">No results found</li>\n ` : ''}\n </ul>\n </div>\n `\n }\n\n private _handleAutoSelectOnBlur() {\n // Only auto-select in single-select mode and when dropdown is open with a search term\n if (this.multi || !this._open || !this._inputValue.trim()) {\n return\n }\n \n const searchTerm = this._inputValue.trim()\n \n // Find the best matching option using the same similarity logic as filtering\n let bestMatch: SchmancyOption | null = null\n let bestScore = 0\n \n this._options.forEach(option => {\n // Skip hidden options\n if (option.hidden) return\n \n // Get text to search in (prioritize label, then textContent, then value)\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n \n // Calculate similarity scores for both label and value\n const labelScore = similarity(searchTerm, optionLabel)\n const valueScore = similarity(searchTerm, optionValue)\n \n // Use the higher score (prioritizing label matches)\n const score = Math.max(labelScore * 1.1, valueScore) // Slight boost for label matches\n \n // Keep track of best match that meets threshold\n if (score > bestScore && score >= this.similarityThreshold) {\n bestScore = score\n bestMatch = option\n }\n })\n \n // Auto-select the best match if found\n if (bestMatch) {\n // Select the option using the existing pipeline\n this._optionSelect$.next(bestMatch)\n \n // Close the dropdown\n this._open$.next(false)\n this._open = false\n \n }\n }\n\n private _handleKeyDown(_e: KeyboardEvent) {\n fromEvent<KeyboardEvent>(document, 'keydown').pipe(\n take(1),\n withLatestFrom(this._open$, this._options$, this._selectedValues$),\n tap(([event, isOpen, options, selectedValues]) => {\n // Handle backspace to remove last chip in multi-select when input is empty\n if (this.multi && event.key === 'Backspace' && !this._inputValue && selectedValues.length > 0 && !isOpen) {\n event.preventDefault()\n const lastValue = selectedValues[selectedValues.length - 1]\n this.handleChipRemove(lastValue)\n return\n }\n if (!isOpen && (event.key === 'ArrowDown' || event.key === 'Enter')) {\n event.preventDefault()\n this._open$.next(true)\n \n timer(10).pipe(\n tap(() => {\n const firstVisible = options.find(opt => !opt.hidden)\n firstVisible?.focus()\n }),\n take(1)\n ).subscribe()\n return\n }\n\n if (!isOpen) return\n\n const visibleOptions = options.filter(opt => !opt.hidden)\n .sort((a, b) => parseInt(a.style.order || '0') - parseInt(b.style.order || '0'))\n \n const focusedOption = visibleOptions.find(opt => opt === document.activeElement)\n const currentIndex = focusedOption ? visibleOptions.indexOf(focusedOption) : -1\n\n switch (event.key) {\n case 'Escape':\n event.preventDefault()\n this._open$.next(false)\n this._updateInputDisplay()\n this._inputElementRef.value?.focus()\n break\n\n case 'Tab':\n this._open$.next(false)\n this._updateInputDisplay()\n break\n\n case 'ArrowDown':\n event.preventDefault()\n const nextIndex = currentIndex < visibleOptions.length - 1 ? currentIndex + 1 : 0\n visibleOptions[nextIndex]?.focus()\n break\n\n case 'ArrowUp':\n event.preventDefault()\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : visibleOptions.length - 1\n visibleOptions[prevIndex]?.focus()\n break\n\n case 'Home':\n event.preventDefault()\n visibleOptions[0]?.focus()\n break\n\n case 'End':\n event.preventDefault()\n visibleOptions[visibleOptions.length - 1]?.focus()\n break\n\n case 'Enter':\n case ' ':\n if (focusedOption) {\n event.preventDefault()\n this._optionSelect$.next(focusedOption)\n }\n break\n }\n })\n ).subscribe()\n }\n}\n\n\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'schmancy-autocomplete': SchmancyAutocomplete\n }\n}"],"names":["SchmancyAutocomplete","$LitElement","constructor","super","arguments","this","required","placeholder","label","name","maxHeight","multi","description","size","autocomplete","debounceMs","similarityThreshold","error","validationMessage","_open","_inputValue","_visibleOptionsCount","_hasResults","_inputElementRef","createRef","_selectedValue$","BehaviorSubject","_selectedValues$","_inputValue$","_open$","_options$","_optionSelect$","Subject","_documentClick$","values","value","vals","next","Array","isArray","join","val","split","map","v","trim","filter","Boolean","connectedCallback","id","Math","random","toString","slice","_setupAutocompleteLogic","_setupDocumentClickHandler","pipe","tap","options","forEach","option","index","setAttribute","tabIndex","hasAttribute","fromEvent","e","preventDefault","stopPropagation","takeUntil","disconnecting","subscribe","combineLatest","selectedValue","selectedValues","selected","includes","String","distinctUntilChanged","debounceTime","withLatestFrom","searchTerm","isOpen","term","scoredOptions","optionLabel","textContent","optionValue","labelScore","similarity","valueScore","score","max","sort","a","b","visibleCount","item","hidden","style","order","length","_announceToScreenReader","_","currentValues","indexOf","newValues","labels","_getSelectedLabels","timer","blur","take","_fireChangeEvent","find","opt","open","composedPath","_options","some","_updateInputDisplay","switchMap","document","EMPTY","of","message","liveRegion","shadowRoot","querySelector","detail","dispatchEvent","CustomEvent","bubbles","composed","checkValidity","reportValidity","firstUpdated","_getChipLabel","_focusTextInput","focus","render","descriptionId","height","padding","fontSize","labelSize","getSizeStyles","html","when","classMap","repeat","handleChipRemove","ref","toLowerCase","replace","target","_handleKeyDown","_handleAutoSelectOnBlur","absolute","flex","bestMatch","bestScore","_e","event","key","lastValue","visibleOptions","parseInt","focusedOption","activeElement","currentIndex","nextIndex","prevIndex","__decorateClass","property","type","prototype","reflect","Number","state","query","queryAssignedElements","flatten","customElement"],"mappings":"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"}
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import { T as g } from "./tailwind.mixin-Dq8FD_xN.js";
|
|
2
|
-
import { css as x, html as l } from "lit";
|
|
3
|
-
import { property as a, customElement as y } from "lit/decorators.js";
|
|
4
|
-
var m = Object.defineProperty, b = Object.getOwnPropertyDescriptor, h = (p, t, i, o) => {
|
|
5
|
-
for (var n, e = o > 1 ? void 0 : o ? b(t, i) : t, r = p.length - 1; r >= 0; r--) (n = p[r]) && (e = (o ? n(t, i, e) : n(e)) || e);
|
|
6
|
-
return o && e && m(t, i, e), e;
|
|
7
|
-
};
|
|
8
|
-
let d = class extends g(x`
|
|
9
|
-
:host {
|
|
10
|
-
display: flex;
|
|
11
|
-
flex-direction: column;
|
|
12
|
-
width: 80px;
|
|
13
|
-
height: 100%;
|
|
14
|
-
background-color: var(--schmancy-sys-color-surface-container);
|
|
15
|
-
color: var(--schmancy-sys-color-surface-on);
|
|
16
|
-
box-sizing: border-box;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
:host([extended]) {
|
|
20
|
-
width: 192px;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/* Alignment options */
|
|
24
|
-
:host([align='start']) {
|
|
25
|
-
align-items: flex-start;
|
|
26
|
-
padding: 16px 12px;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
:host([align='center']) {
|
|
30
|
-
align-items: center;
|
|
31
|
-
justify-content: center;
|
|
32
|
-
padding: 16px 12px;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
:host([align='end']) {
|
|
36
|
-
align-items: flex-end;
|
|
37
|
-
padding: 16px 12px;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/* Default center alignment */
|
|
41
|
-
:host {
|
|
42
|
-
align-items: center;
|
|
43
|
-
padding: 16px 12px;
|
|
44
|
-
gap: 12px;
|
|
45
|
-
}
|
|
46
|
-
`) {
|
|
47
|
-
constructor() {
|
|
48
|
-
super(...arguments), this.extended = !1, this.align = "center";
|
|
49
|
-
}
|
|
50
|
-
render() {
|
|
51
|
-
return l`<slot></slot>`;
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
h([a({ type: Boolean, reflect: !0 })], d.prototype, "extended", 2), h([a({ reflect: !0 })], d.prototype, "align", 2), d = h([y("schmancy-navigation-rail")], d);
|
|
55
|
-
var f = Object.defineProperty, u = Object.getOwnPropertyDescriptor, c = (p, t, i, o) => {
|
|
56
|
-
for (var n, e = o > 1 ? void 0 : o ? u(t, i) : t, r = p.length - 1; r >= 0; r--) (n = p[r]) && (e = (o ? n(t, i, e) : n(e)) || e);
|
|
57
|
-
return o && e && f(t, i, e), e;
|
|
58
|
-
};
|
|
59
|
-
let s = class extends g(x`
|
|
60
|
-
:host {
|
|
61
|
-
display: flex;
|
|
62
|
-
align-items: center;
|
|
63
|
-
justify-content: center;
|
|
64
|
-
min-width: 56px;
|
|
65
|
-
min-height: 56px;
|
|
66
|
-
border-radius: 16px;
|
|
67
|
-
cursor: pointer;
|
|
68
|
-
transition: all 0.2s ease;
|
|
69
|
-
position: relative;
|
|
70
|
-
box-sizing: border-box;
|
|
71
|
-
color: var(--schmancy-sys-color-surface-on-variant);
|
|
72
|
-
user-select: none;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
:host(:hover) {
|
|
76
|
-
background-color: var(--schmancy-sys-color-surface-container-high);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
:host([active]) {
|
|
80
|
-
background-color: var(--schmancy-sys-color-secondary-container);
|
|
81
|
-
color: var(--schmancy-sys-color-secondary-container-on);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
:host([extended]) {
|
|
85
|
-
width: 168px;
|
|
86
|
-
justify-content: flex-start;
|
|
87
|
-
padding: 0 16px;
|
|
88
|
-
gap: 12px;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
.icon {
|
|
92
|
-
font-family: 'Material Symbols Outlined';
|
|
93
|
-
font-size: 24px;
|
|
94
|
-
line-height: 1;
|
|
95
|
-
flex-shrink: 0;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
.label {
|
|
99
|
-
font-size: 14px;
|
|
100
|
-
font-weight: 500;
|
|
101
|
-
line-height: 1.2;
|
|
102
|
-
overflow: hidden;
|
|
103
|
-
text-overflow: ellipsis;
|
|
104
|
-
white-space: nowrap;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
.badge {
|
|
108
|
-
position: absolute;
|
|
109
|
-
top: 4px;
|
|
110
|
-
right: 4px;
|
|
111
|
-
min-width: 16px;
|
|
112
|
-
height: 16px;
|
|
113
|
-
border-radius: 8px;
|
|
114
|
-
background-color: var(--schmancy-sys-color-error);
|
|
115
|
-
color: var(--schmancy-sys-color-error-on);
|
|
116
|
-
font-size: 11px;
|
|
117
|
-
font-weight: 500;
|
|
118
|
-
display: flex;
|
|
119
|
-
align-items: center;
|
|
120
|
-
justify-content: center;
|
|
121
|
-
padding: 0 4px;
|
|
122
|
-
box-sizing: border-box;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
:host([extended]) .badge {
|
|
126
|
-
position: static;
|
|
127
|
-
margin-left: auto;
|
|
128
|
-
}
|
|
129
|
-
`) {
|
|
130
|
-
constructor() {
|
|
131
|
-
super(...arguments), this.icon = "", this.label = "", this.active = !1, this.badge = "", this.extended = !1;
|
|
132
|
-
}
|
|
133
|
-
handleClick() {
|
|
134
|
-
this.dispatchEvent(new CustomEvent("rail-item-click", { detail: { icon: this.icon, label: this.label, active: this.active }, bubbles: !0, composed: !0 }));
|
|
135
|
-
}
|
|
136
|
-
render() {
|
|
137
|
-
return this.querySelector("[slot]") || this.textContent?.trim() ? l`<slot @click=${this.handleClick}></slot>` : l`
|
|
138
|
-
<div @click=${this.handleClick}>
|
|
139
|
-
${this.icon ? l`<span class="icon">${this.icon}</span>` : ""}
|
|
140
|
-
${this.extended && this.label ? l`<span class="label">${this.label}</span>` : ""}
|
|
141
|
-
${this.badge ? l`<span class="badge">${this.badge}</span>` : ""}
|
|
142
|
-
</div>
|
|
143
|
-
`;
|
|
144
|
-
}
|
|
145
|
-
};
|
|
146
|
-
c([a({ type: String })], s.prototype, "icon", 2), c([a({ type: String })], s.prototype, "label", 2), c([a({ type: Boolean, reflect: !0 })], s.prototype, "active", 2), c([a({ type: String })], s.prototype, "badge", 2), c([a({ type: Boolean, reflect: !0 })], s.prototype, "extended", 2), s = c([y("schmancy-navigation-rail-item")], s);
|
|
147
|
-
export {
|
|
148
|
-
d as S,
|
|
149
|
-
s as a
|
|
150
|
-
};
|
|
151
|
-
//# sourceMappingURL=navigation-rail-item-CIg6-B2G.js.map
|