@mhmo91/schmancy 0.7.7 → 0.8.4
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/audio.md +241 -0
- package/ai/content-drawer.md +163 -70
- package/ai/lightbox.md +381 -0
- package/ai/typography.md +75 -49
- package/dist/ai/audio.md +241 -0
- package/dist/ai/content-drawer.md +163 -70
- package/dist/ai/lightbox.md +381 -0
- package/dist/ai/typography.md +75 -49
- package/dist/{animated-text-Be290e6l.cjs → animated-text-B3DQRJBy.cjs} +2 -2
- package/dist/{animated-text-Be290e6l.cjs.map → animated-text-B3DQRJBy.cjs.map} +1 -1
- package/dist/{animated-text-DuLrWJ6O.js → animated-text-BAj4-6hE.js} +3 -3
- package/dist/{animated-text-DuLrWJ6O.js.map → animated-text-BAj4-6hE.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-BzjJiNTJ.js → area.component-CP4DZ0d8.js} +104 -98
- package/dist/area.component-CP4DZ0d8.js.map +1 -0
- package/dist/area.component-ChxSLt16.cjs +12 -0
- package/dist/area.component-ChxSLt16.cjs.map +1 -0
- package/dist/area.js +1 -1
- package/dist/audio.cjs +2 -0
- package/dist/audio.cjs.map +1 -0
- package/dist/audio.js +9 -0
- package/dist/audio.js.map +1 -0
- package/dist/{autocomplete-CHmGhBNt.cjs → autocomplete-CAaVSg4g.cjs} +2 -2
- package/dist/{autocomplete-CHmGhBNt.cjs.map → autocomplete-CAaVSg4g.cjs.map} +1 -1
- package/dist/{autocomplete-FLkd9ju8.js → autocomplete-CGbACUYd.js} +4 -4
- package/dist/{autocomplete-FLkd9ju8.js.map → autocomplete-CGbACUYd.js.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/avatar-nWOZXEsW.cjs +273 -0
- package/dist/avatar-nWOZXEsW.cjs.map +1 -0
- package/dist/{avatar-C8P4lVfa.js → avatar-rLCF6MSI.js} +244 -259
- package/dist/avatar-rLCF6MSI.js.map +1 -0
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-Ma6LW-ny.js → boat-Ckt9v__d.js} +6 -6
- package/dist/{boat-Ma6LW-ny.js.map → boat-Ckt9v__d.js.map} +1 -1
- package/dist/{boat-kYOUec8f.cjs → boat-yNAZ2LLB.cjs} +5 -5
- package/dist/{boat-kYOUec8f.cjs.map → boat-yNAZ2LLB.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/charts.cjs +2 -0
- package/dist/charts.cjs.map +1 -0
- package/dist/charts.js +9 -0
- package/dist/charts.js.map +1 -0
- package/dist/{checkbox-DLZkKaon.cjs → checkbox-BnAlpsJN.cjs} +2 -2
- package/dist/{checkbox-DLZkKaon.cjs.map → checkbox-BnAlpsJN.cjs.map} +1 -1
- package/dist/{checkbox-x46L-XTG.js → checkbox-D22yfGe3.js} +6 -6
- package/dist/{checkbox-x46L-XTG.js.map → checkbox-D22yfGe3.js.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-C3DLglSl.js → code-preview-DPlQayFd.js} +3 -3
- package/dist/{code-preview-C3DLglSl.js.map → code-preview-DPlQayFd.js.map} +1 -1
- package/dist/{code-preview-BsQq77nu.cjs → code-preview-jPnX60FF.cjs} +2 -2
- package/dist/{code-preview-BsQq77nu.cjs.map → code-preview-jPnX60FF.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/{context-create-BvxbWTgj.js → context-create-B_S-sD5B.js} +69 -57
- package/dist/context-create-B_S-sD5B.js.map +1 -0
- package/dist/context-create-DTybDbZp.cjs +2 -0
- package/dist/context-create-DTybDbZp.cjs.map +1 -0
- package/dist/date-range-GFm5NG33.js +639 -0
- package/dist/date-range-GFm5NG33.js.map +1 -0
- package/dist/{date-range-inline-cGptw0hr.cjs → date-range-inline-CgX2o0FP.cjs} +2 -2
- package/dist/{date-range-inline-cGptw0hr.cjs.map → date-range-inline-CgX2o0FP.cjs.map} +1 -1
- package/dist/{date-range-inline-CfDu-lIo.js → date-range-inline-DTQLESAZ.js} +3 -3
- package/dist/{date-range-inline-CfDu-lIo.js.map → date-range-inline-DTQLESAZ.js.map} +1 -1
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/date-range-ug3B9CFT.cjs +119 -0
- package/dist/date-range-ug3B9CFT.cjs.map +1 -0
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-CXFIM6qK.cjs → delay-CWtBL0VD.cjs} +2 -2
- package/dist/delay-CWtBL0VD.cjs.map +1 -0
- package/dist/{delay-BINGOQ7f.js → delay-DEe1CmHc.js} +45 -45
- package/dist/delay-DEe1CmHc.js.map +1 -0
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/details-D-LXW23W.js +100 -0
- package/dist/details-D-LXW23W.js.map +1 -0
- package/dist/details-DVke77dU.cjs +55 -0
- package/dist/details-DVke77dU.cjs.map +1 -0
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/dialog-service-C86xTS8q.cjs +2 -0
- package/dist/dialog-service-C86xTS8q.cjs.map +1 -0
- package/dist/dialog-service-D9E3jLAR.js +118 -0
- package/dist/dialog-service-D9E3jLAR.js.map +1 -0
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.component-BM0D-hK9.cjs +48 -0
- package/dist/dialog.component-BM0D-hK9.cjs.map +1 -0
- package/dist/dialog.component-a7FlKhGD.js +145 -0
- package/dist/dialog.component-a7FlKhGD.js.map +1 -0
- package/dist/dialog.js +7 -7
- package/dist/directives.cjs +1 -1
- package/dist/directives.js +11 -10
- package/dist/directives.js.map +1 -1
- package/dist/{divider-Bu6tzwGl.js → divider-CzTpxOqt.js} +3 -3
- package/dist/{divider-Bu6tzwGl.js.map → divider-CzTpxOqt.js.map} +1 -1
- package/dist/{divider-8tk2mDbL.cjs → divider-D8KStUhN.cjs} +2 -2
- package/dist/{divider-8tk2mDbL.cjs.map → divider-D8KStUhN.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/{dropdown-content-DFb07S8x.cjs → dropdown-content-CngZN3vv.cjs} +2 -2
- package/dist/{dropdown-content-DFb07S8x.cjs.map → dropdown-content-CngZN3vv.cjs.map} +1 -1
- package/dist/{dropdown-content-fVhnEKdY.js → dropdown-content-DCn-g0-f.js} +3 -3
- package/dist/{dropdown-content-fVhnEKdY.js.map → dropdown-content-DCn-g0-f.js.map} +1 -1
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +1 -1
- package/dist/{email-recipients-BG3GxJvc.cjs → email-recipients-BhntMZMf.cjs} +2 -2
- package/dist/{email-recipients-BG3GxJvc.cjs.map → email-recipients-BhntMZMf.cjs.map} +1 -1
- package/dist/{email-recipients-OG52RGiH.js → email-recipients-BzjAKNJ0.js} +8 -7
- package/dist/{email-recipients-OG52RGiH.js.map → email-recipients-BzjAKNJ0.js.map} +1 -1
- package/dist/emotional-sounds-BRnFhww6.js +234 -0
- package/dist/emotional-sounds-BRnFhww6.js.map +1 -0
- package/dist/emotional-sounds-DVGhmoZf.cjs +2 -0
- package/dist/emotional-sounds-DVGhmoZf.cjs.map +1 -0
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/flex-5dR48zie.js +183 -0
- package/dist/flex-5dR48zie.js.map +1 -0
- package/dist/flex-oHl2EfYB.cjs +18 -0
- package/dist/flex-oHl2EfYB.cjs.map +1 -0
- package/dist/{form-cWJBcwc6.cjs → form-BlPiAPt7.cjs} +2 -2
- package/dist/{form-cWJBcwc6.cjs.map → form-BlPiAPt7.cjs.map} +1 -1
- package/dist/{form-tpyd1nsT.js → form-BxVM6JTn.js} +2 -2
- package/dist/{form-tpyd1nsT.js.map → form-BxVM6JTn.js.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{formField.mixin-Mx5CwYUh.js → formField.mixin-BCGA7Ea3.js} +2 -2
- package/dist/{formField.mixin-Mx5CwYUh.js.map → formField.mixin-BCGA7Ea3.js.map} +1 -1
- package/dist/{formField.mixin-XlN2pAL0.cjs → formField.mixin-BfJMifU9.cjs} +2 -2
- package/dist/{formField.mixin-XlN2pAL0.cjs.map → formField.mixin-BfJMifU9.cjs.map} +1 -1
- package/dist/height-CfECBO2j.js +44 -0
- package/dist/height-CfECBO2j.js.map +1 -0
- package/dist/height-Z70qJYJK.cjs +2 -0
- package/dist/height-Z70qJYJK.cjs.map +1 -0
- package/dist/icon-DHEXr3c-.cjs +49 -0
- package/dist/icon-DHEXr3c-.cjs.map +1 -0
- package/dist/{icon-Y2qLOFqe.js → icon-DYpLoegR.js} +17 -17
- package/dist/icon-DYpLoegR.js.map +1 -0
- package/dist/icon-button-CmZBLHWC.js +164 -0
- package/dist/icon-button-CmZBLHWC.js.map +1 -0
- package/dist/icon-button-IbSX8C98.cjs +70 -0
- package/dist/icon-button-IbSX8C98.cjs.map +1 -0
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +275 -250
- package/dist/index.js.map +1 -1
- package/dist/input-BByjYlgl.cjs +51 -0
- package/dist/input-BByjYlgl.cjs.map +1 -0
- package/dist/{input-DDCFZ3cr.js → input-D0cQ9DOY.js} +35 -31
- package/dist/input-D0cQ9DOY.js.map +1 -0
- package/dist/{input-chip-DVE4_1wn.js → input-chip-B5ErXgCB.js} +2 -2
- package/dist/{input-chip-DVE4_1wn.js.map → input-chip-B5ErXgCB.js.map} +1 -1
- package/dist/{input-chip-Bht9MU9G.cjs → input-chip-DkWaTciP.cjs} +2 -2
- package/dist/{input-chip-Bht9MU9G.cjs.map → input-chip-DkWaTciP.cjs.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/json-BZVe74np.cjs +12 -0
- package/dist/json-BZVe74np.cjs.map +1 -0
- package/dist/json-PKewOWuJ.js +51 -0
- package/dist/json-PKewOWuJ.js.map +1 -0
- package/dist/json.cjs +2 -0
- package/dist/json.cjs.map +1 -0
- package/dist/json.js +5 -0
- package/dist/json.js.map +1 -0
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +4 -3
- package/dist/layout.js.map +1 -1
- package/dist/lightbox-service-D-0JtxB1.cjs +202 -0
- package/dist/lightbox-service-D-0JtxB1.cjs.map +1 -0
- package/dist/lightbox-service-DZMnb1eU.js +458 -0
- package/dist/lightbox-service-DZMnb1eU.js.map +1 -0
- package/dist/lightbox.cjs +2 -0
- package/dist/lightbox.cjs.map +1 -0
- package/dist/lightbox.js +8 -0
- package/dist/lightbox.js.map +1 -0
- package/dist/{list-Bac329kq.cjs → list-B_2m7l3g.cjs} +6 -6
- package/dist/list-B_2m7l3g.cjs.map +1 -0
- package/dist/{list-BO1gnjmc.js → list-CW56LV-v.js} +13 -13
- package/dist/list-CW56LV-v.js.map +1 -0
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-B1WTI3WY.cjs → litElement.mixin-CrpeGpZ7.cjs} +2 -2
- package/dist/{litElement.mixin-B1WTI3WY.cjs.map → litElement.mixin-CrpeGpZ7.cjs.map} +1 -1
- package/dist/{litElement.mixin-CVje6z-M.js → litElement.mixin-DHZXtvYq.js} +2 -2
- package/dist/{litElement.mixin-CVje6z-M.js.map → litElement.mixin-DHZXtvYq.js.map} +1 -1
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-C1jVMhlF.js → map-2Hl60a0A.js} +6 -6
- package/dist/{map-C1jVMhlF.js.map → map-2Hl60a0A.js.map} +1 -1
- package/dist/{map-BlmS6Zfx.cjs → map-DyPS9G7M.cjs} +3 -3
- package/dist/{map-BlmS6Zfx.cjs.map → map-DyPS9G7M.cjs.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{media-CxfrOjie.cjs → media-CS8HpKnK.cjs} +2 -2
- package/dist/{media-CxfrOjie.cjs.map → media-CS8HpKnK.cjs.map} +1 -1
- package/dist/{media-CNMZbEJe.js → media-DtWbcRxL.js} +2 -2
- package/dist/{media-CNMZbEJe.js.map → media-DtWbcRxL.js.map} +1 -1
- package/dist/menu-Caju5-zd.js +60 -0
- package/dist/{menu-CUKV4pVJ.js.map → menu-Caju5-zd.js.map} +1 -1
- package/dist/{menu-DEa2K7Pk.cjs → menu-rX5RPAI2.cjs} +4 -6
- package/dist/{menu-DEa2K7Pk.cjs.map → menu-rX5RPAI2.cjs.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins.cjs +1 -1
- package/dist/mixins.js +3 -3
- 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-CYKfvZs9.js → navigation-rail-Ctketq5a.js} +43 -38
- package/dist/navigation-rail-Ctketq5a.js.map +1 -0
- package/dist/navigation-rail-DC9_oSIM.cjs +79 -0
- package/dist/navigation-rail-DC9_oSIM.cjs.map +1 -0
- package/dist/navigation-rail.cjs +1 -1
- package/dist/navigation-rail.js +1 -1
- package/dist/notification-service-CUlfXqmj.js +155 -0
- package/dist/notification-service-CUlfXqmj.js.map +1 -0
- package/dist/notification-service-DknbpqTt.cjs +19 -0
- package/dist/notification-service-DknbpqTt.cjs.map +1 -0
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +6 -8
- package/dist/{notify-KvHZ-8z9.js → notify-DJSOWTxv.js} +2 -2
- package/dist/notify-DJSOWTxv.js.map +1 -0
- package/dist/{notify-VkDx6hMZ.cjs → notify-DickIEHW.cjs} +2 -2
- package/dist/notify-DickIEHW.cjs.map +1 -0
- package/dist/{option-DnRdbsTb.js → option-Bng41-rY.js} +2 -2
- package/dist/{option-DnRdbsTb.js.map → option-Bng41-rY.js.map} +1 -1
- package/dist/{option-Eh2AXe-Z.cjs → option-DYT5Rkgy.cjs} +2 -2
- package/dist/{option-Eh2AXe-Z.cjs.map → option-DYT5Rkgy.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/page-BLn9gtSd.cjs +20 -0
- package/dist/page-BLn9gtSd.cjs.map +1 -0
- package/dist/page-D-ROcQDd.js +48 -0
- package/dist/page-D-ROcQDd.js.map +1 -0
- package/dist/page.cjs +2 -0
- package/dist/page.cjs.map +1 -0
- package/dist/page.js +5 -0
- package/dist/page.js.map +1 -0
- package/dist/{payment-card-form-8a4Nqqhy.cjs → payment-card-form-5UtfWzoW.cjs} +2 -2
- package/dist/{payment-card-form-8a4Nqqhy.cjs.map → payment-card-form-5UtfWzoW.cjs.map} +1 -1
- package/dist/{payment-card-form-EVQEb5OX.js → payment-card-form-BJa4RgF2.js} +3 -3
- package/dist/{payment-card-form-EVQEb5OX.js.map → payment-card-form-BJa4RgF2.js.map} +1 -1
- package/dist/pills-BS5rZ6C3.js +346 -0
- package/dist/pills-BS5rZ6C3.js.map +1 -0
- package/dist/pills-Blf7IAeq.cjs +113 -0
- package/dist/pills-Blf7IAeq.cjs.map +1 -0
- package/dist/progress-DlhYniW_.cjs +35 -0
- package/dist/progress-DlhYniW_.cjs.map +1 -0
- package/dist/progress-yTIX6EqC.js +56 -0
- package/dist/progress-yTIX6EqC.js.map +1 -0
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/qr-scanner-DOs7uNS_.cjs +29 -0
- package/dist/qr-scanner-DOs7uNS_.cjs.map +1 -0
- package/dist/qr-scanner-DjZ8mgHV.js +743 -0
- package/dist/qr-scanner-DjZ8mgHV.js.map +1 -0
- package/dist/qr-scanner.cjs +2 -0
- package/dist/qr-scanner.cjs.map +1 -0
- package/dist/qr-scanner.js +5 -0
- package/dist/qr-scanner.js.map +1 -0
- package/dist/{radio-button-BTdqEOSJ.cjs → radio-button-N_PrrxKB.cjs} +2 -2
- package/dist/{radio-button-BTdqEOSJ.cjs.map → radio-button-N_PrrxKB.cjs.map} +1 -1
- package/dist/{radio-button-QCukBJLy.js → radio-button-me3SRHGu.js} +3 -3
- package/dist/{radio-button-QCukBJLy.js.map → radio-button-me3SRHGu.js.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/ripple-BgJXbNSP.js +124 -0
- package/dist/ripple-BgJXbNSP.js.map +1 -0
- package/dist/ripple-x6sTX02K.cjs +16 -0
- package/dist/ripple-x6sTX02K.cjs.map +1 -0
- package/dist/{schmancy-steps-container-NZOamraF.js → schmancy-steps-container-J6P-NNNj.js} +3 -3
- package/dist/{schmancy-steps-container-NZOamraF.js.map → schmancy-steps-container-J6P-NNNj.js.map} +1 -1
- package/dist/{schmancy-steps-container-CtwqkRBU.cjs → schmancy-steps-container-T57BKMzi.cjs} +2 -2
- package/dist/{schmancy-steps-container-CtwqkRBU.cjs.map → schmancy-steps-container-T57BKMzi.cjs.map} +1 -1
- package/dist/scroll-C_gfUgjn.js +87 -0
- package/dist/scroll-C_gfUgjn.js.map +1 -0
- package/dist/scroll-CecsowP7.cjs +27 -0
- package/dist/scroll-CecsowP7.cjs.map +1 -0
- package/dist/{select-DSTQ-Zau.js → select-BBA0gBHf.js} +5 -4
- package/dist/select-BBA0gBHf.js.map +1 -0
- package/dist/{select-C-Kv7ey_.cjs → select-D9oCjv7N.cjs} +2 -2
- package/dist/select-D9oCjv7N.cjs.map +1 -0
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{selector-hook-Cok22ifx.cjs → selector-hook-9w2auh2O.cjs} +2 -2
- package/dist/{selector-hook-Cok22ifx.cjs.map → selector-hook-9w2auh2O.cjs.map} +1 -1
- package/dist/{selector-hook-l2fe2UO5.js → selector-hook-CHV4kDMd.js} +3 -3
- package/dist/{selector-hook-l2fe2UO5.js.map → selector-hook-CHV4kDMd.js.map} +1 -1
- package/dist/{sheet-IzYy3H8n.cjs → sheet-0oUfBmXX.cjs} +2 -2
- package/dist/{sheet-IzYy3H8n.cjs.map → sheet-0oUfBmXX.cjs.map} +1 -1
- package/dist/{sheet-DY-z5_tm.js → sheet-CNcDT3VP.js} +5 -5
- package/dist/{sheet-DY-z5_tm.js.map → sheet-CNcDT3VP.js.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +2 -2
- package/dist/{sheet.service-DuVcXyOB.js → sheet.service-2MobB-9z.js} +20 -18
- package/dist/sheet.service-2MobB-9z.js.map +1 -0
- package/dist/sheet.service-su_7yDQ-.cjs +2 -0
- package/dist/sheet.service-su_7yDQ-.cjs.map +1 -0
- package/dist/{slider-CGE_Qeok.cjs → slider-CV-Ehp_5.cjs} +2 -2
- package/dist/{slider-CGE_Qeok.cjs.map → slider-CV-Ehp_5.cjs.map} +1 -1
- package/dist/{slider-CFtbSQ9Y.js → slider-CkE-iFUy.js} +3 -3
- package/dist/{slider-CFtbSQ9Y.js.map → slider-CkE-iFUy.js.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/sound.service-Nza4c6wv.js +102 -0
- package/dist/sound.service-Nza4c6wv.js.map +1 -0
- package/dist/sound.service-eRirZw59.cjs +2 -0
- package/dist/sound.service-eRirZw59.cjs.map +1 -0
- package/dist/{spinner-CSPJs8CL.cjs → spinner-Bfn8KC-9.cjs} +9 -9
- package/dist/spinner-Bfn8KC-9.cjs.map +1 -0
- package/dist/{spinner-DAF-hCvQ.js → spinner-DiMbWXp9.js} +15 -12
- package/dist/spinner-DiMbWXp9.js.map +1 -0
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/store.cjs +1 -1
- package/dist/store.js +2 -2
- package/dist/{suggestion-chip-CYu-4xrL.js → suggestion-chip-CEDqUNoS.js} +50 -46
- package/dist/suggestion-chip-CEDqUNoS.js.map +1 -0
- package/dist/{suggestion-chip-Cj8gwZqq.cjs → suggestion-chip-HhsLtZXR.cjs} +18 -23
- package/dist/suggestion-chip-HhsLtZXR.cjs.map +1 -0
- package/dist/{surface-VX_THUHv.cjs → surface-CW3H23Va.cjs} +5 -4
- package/dist/surface-CW3H23Va.cjs.map +1 -0
- package/dist/{surface-DTOK-0E4.js → surface-eBfnSwQS.js} +12 -11
- package/dist/surface-eBfnSwQS.js.map +1 -0
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{table-BV0-o9Wi.cjs → table-D0tiSL_u.cjs} +2 -2
- package/dist/{table-BV0-o9Wi.cjs.map → table-D0tiSL_u.cjs.map} +1 -1
- package/dist/{table-CkXbXqi9.js → table-Dmo4TvTx.js} +3 -3
- package/dist/{table-CkXbXqi9.js.map → table-Dmo4TvTx.js.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-compatibility-D_BBW655.js → tabs-compatibility-Bit6y6en.js} +2 -2
- package/dist/{tabs-compatibility-D_BBW655.js.map → tabs-compatibility-Bit6y6en.js.map} +1 -1
- package/dist/{tabs-compatibility-DsfD60U_.cjs → tabs-compatibility-Vq_2-ekz.cjs} +2 -2
- package/dist/{tabs-compatibility-DsfD60U_.cjs.map → tabs-compatibility-Vq_2-ekz.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tailwind.mixin-Bp_PR6yc.js +67 -0
- package/dist/{tailwind.mixin-wLaKUxf1.js.map → tailwind.mixin-Bp_PR6yc.js.map} +1 -1
- package/dist/tailwind.mixin-Cp4PyXok.cjs +2 -0
- package/dist/{tailwind.mixin-JFXu3GSo.cjs.map → tailwind.mixin-Cp4PyXok.cjs.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-TeVnUeIJ.js → textarea-B1d1QCqT.js} +4 -3
- package/dist/{textarea-TeVnUeIJ.js.map → textarea-B1d1QCqT.js.map} +1 -1
- package/dist/textarea-DG8CHhZA.cjs +44 -0
- package/dist/{textarea-B6LDhRed.cjs.map → textarea-DG8CHhZA.cjs.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-button-DxMbO3yP.cjs → theme-button-CPL6Eaqd.cjs} +2 -2
- package/dist/{theme-button-DxMbO3yP.cjs.map → theme-button-CPL6Eaqd.cjs.map} +1 -1
- package/dist/{theme-button-BXXqAu2Y.js → theme-button-CrLuMQNe.js} +2 -2
- package/dist/{theme-button-BXXqAu2Y.js.map → theme-button-CrLuMQNe.js.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme-controller-boat-CXbNJSI3.cjs +178 -0
- package/dist/theme-controller-boat-CXbNJSI3.cjs.map +1 -0
- package/dist/{theme-controller-boat-CVS77gnH.js → theme-controller-boat-CzSmjyKq.js} +420 -228
- package/dist/theme-controller-boat-CzSmjyKq.js.map +1 -0
- package/dist/theme.cjs +1 -1
- package/dist/theme.js +13 -11
- package/dist/{timezone-RBV74f85.js → timezone-4vwX0BgA.js} +3 -3
- package/dist/{timezone-RBV74f85.js.map → timezone-4vwX0BgA.js.map} +1 -1
- package/dist/{timezone-D7YOMM8G.cjs → timezone-BxvQcqe1.cjs} +2 -2
- package/dist/{timezone-D7YOMM8G.cjs.map → timezone-BxvQcqe1.cjs.map} +1 -1
- package/dist/{tooltip-DssL6Qfx.js → tooltip-CjdvBf4X.js} +2 -2
- package/dist/{tooltip-DssL6Qfx.js.map → tooltip-CjdvBf4X.js.map} +1 -1
- package/dist/{tooltip-BH_RLoZI.cjs → tooltip-ZtnGjoJd.cjs} +2 -2
- package/dist/{tooltip-BH_RLoZI.cjs.map → tooltip-ZtnGjoJd.cjs.map} +1 -1
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/{tree-C33t9-0j.js → tree-CBEjV7jP.js} +2 -2
- package/dist/{tree-C33t9-0j.js.map → tree-CBEjV7jP.js.map} +1 -1
- package/dist/{tree-7Zz1sJKl.cjs → tree-DP5U00NA.cjs} +2 -2
- package/dist/{tree-7Zz1sJKl.cjs.map → tree-DP5U00NA.cjs.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-WbYqfXO7.cjs → typewriter-C6kFjLcX.cjs} +4 -4
- package/dist/{typewriter-WbYqfXO7.cjs.map → typewriter-C6kFjLcX.cjs.map} +1 -1
- package/dist/{typewriter-Dt1Js2lP.js → typewriter-Eo5qXoGC.js} +5 -5
- package/dist/{typewriter-Dt1Js2lP.js.map → typewriter-Eo5qXoGC.js.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{typography-DdG9aEAg.js → typography-C_1gdM2I.js} +13 -53
- package/dist/typography-C_1gdM2I.js.map +1 -0
- package/dist/{typography-Ck-OdI83.cjs → typography-DGyjlLCE.cjs} +3 -46
- package/dist/typography-DGyjlLCE.cjs.map +1 -0
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/mixins/tailwind.css +37 -6
- package/package.json +21 -20
- package/types/src/area/area.service.d.ts +1 -1
- package/types/src/area/router.types.d.ts +1 -0
- package/types/src/audio/emotional-sounds.d.ts +122 -0
- package/types/src/audio/index.d.ts +30 -0
- package/types/src/audio/sound.service.d.ts +111 -0
- package/types/src/avatar.d.ts +10 -1
- package/types/src/busy/spinner.d.ts +6 -1
- package/types/src/button/button.d.ts +15 -2
- package/types/src/button/icon-button.d.ts +1 -1
- package/types/src/charts/area-chart.d.ts +58 -0
- package/types/src/charts/index.d.ts +4 -0
- package/types/src/charts/pills.d.ts +51 -0
- package/types/src/charts/types.d.ts +62 -0
- package/types/src/charts/utils.d.ts +28 -0
- package/types/src/checkbox/checkbox.d.ts +3 -2
- package/types/src/chips/chips.d.ts +2 -0
- package/types/src/content-drawer/drawer.service.d.ts +1 -7
- package/types/src/date-range/date-range-dialog.d.ts +16 -0
- package/types/src/date-range/date-range.d.ts +1 -1
- package/types/src/details/details.d.ts +3 -7
- package/types/src/dialog/dailog.d.ts +1 -5
- package/types/src/dialog/dialog-base.mixin.d.ts +26 -0
- package/types/src/dialog/dialog-service.d.ts +3 -66
- package/types/src/dialog/dialog.component.d.ts +63 -30
- package/types/src/dialog/index.d.ts +1 -3
- package/types/src/directives/height.d.ts +11 -6
- package/types/src/icons/icon.d.ts +17 -0
- package/types/src/index.d.ts +6 -0
- package/types/src/input/input.d.ts +13 -9
- package/types/src/json/index.d.ts +1 -0
- package/types/src/json/json.d.ts +15 -0
- package/types/src/lightbox/flip-directive.d.ts +29 -0
- package/types/src/lightbox/flip.directive.d.ts +22 -0
- package/types/src/lightbox/index.d.ts +4 -0
- package/types/src/lightbox/lightbox-service.d.ts +24 -0
- package/types/src/lightbox/lightbox.d.ts +34 -0
- package/types/src/lightbox/lightbox.directive.d.ts +30 -0
- package/types/src/nav-drawer/appbar.d.ts +0 -5
- package/types/src/nav-drawer/drawer.d.ts +1 -32
- package/types/src/navigation-rail/navigation-rail.d.ts +2 -0
- package/types/src/notification/index.d.ts +1 -3
- package/types/src/notification/notification-service.d.ts +13 -1
- package/types/src/notification/notification.d.ts +13 -12
- package/types/src/notification/notify.d.ts +1 -1
- package/types/src/page/index.d.ts +1 -0
- package/types/src/page/page.d.ts +31 -0
- package/types/src/progress/progress.d.ts +2 -2
- package/types/src/qr-scanner/index.d.ts +1 -0
- package/types/src/qr-scanner/qr-scanner.d.ts +26 -0
- package/types/src/select/select.d.ts +1 -1
- package/types/src/theme/index.d.ts +1 -0
- package/types/src/theme/theme-audio-player.d.ts +100 -0
- package/types/src/theme/theme-controller-boat.d.ts +1 -0
- package/types/src/theme/theme.component.d.ts +1 -1
- package/types/src/types/index.d.ts +1 -0
- package/types/src/types/mood-audio.types.d.ts +173 -0
- package/types/src/typography/typography.d.ts +1 -0
- package/dist/area.component-BzjJiNTJ.js.map +0 -1
- package/dist/area.component-FL_IUylM.cjs +0 -12
- package/dist/area.component-FL_IUylM.cjs.map +0 -1
- package/dist/avatar-B_uJN9WV.cjs +0 -288
- package/dist/avatar-B_uJN9WV.cjs.map +0 -1
- package/dist/avatar-C8P4lVfa.js.map +0 -1
- package/dist/context-create-BJkkLr1D.cjs +0 -2
- package/dist/context-create-BJkkLr1D.cjs.map +0 -1
- package/dist/context-create-BvxbWTgj.js.map +0 -1
- package/dist/date-range-Cm0TCfwu.js +0 -664
- package/dist/date-range-Cm0TCfwu.js.map +0 -1
- package/dist/date-range-Cy97kOP_.cjs +0 -134
- package/dist/date-range-Cy97kOP_.cjs.map +0 -1
- package/dist/delay-BINGOQ7f.js.map +0 -1
- package/dist/delay-CXFIM6qK.cjs.map +0 -1
- package/dist/details-CLRikV4s.cjs +0 -64
- package/dist/details-CLRikV4s.cjs.map +0 -1
- package/dist/details-bgq2X_hO.js +0 -115
- package/dist/details-bgq2X_hO.js.map +0 -1
- package/dist/dialog-content-B59ekS_y.cjs +0 -85
- package/dist/dialog-content-B59ekS_y.cjs.map +0 -1
- package/dist/dialog-content-Cu7fqN8Y.js +0 -256
- package/dist/dialog-content-Cu7fqN8Y.js.map +0 -1
- package/dist/dialog-service-B4nR8Em5.cjs +0 -2
- package/dist/dialog-service-B4nR8Em5.cjs.map +0 -1
- package/dist/dialog-service-Bege4HF4.js +0 -140
- package/dist/dialog-service-Bege4HF4.js.map +0 -1
- package/dist/flex-CYQU6Pf8.js +0 -260
- package/dist/flex-CYQU6Pf8.js.map +0 -1
- package/dist/flex-DytMcHmq.cjs +0 -43
- package/dist/flex-DytMcHmq.cjs.map +0 -1
- package/dist/icon-C8Q_XMtJ.cjs +0 -49
- package/dist/icon-C8Q_XMtJ.cjs.map +0 -1
- package/dist/icon-Y2qLOFqe.js.map +0 -1
- package/dist/icon-button-CJ6AVTv9.js +0 -156
- package/dist/icon-button-CJ6AVTv9.js.map +0 -1
- package/dist/icon-button-IdG1NVgA.cjs +0 -65
- package/dist/icon-button-IdG1NVgA.cjs.map +0 -1
- package/dist/input-DDCFZ3cr.js.map +0 -1
- package/dist/input-UyknNHNr.cjs +0 -51
- package/dist/input-UyknNHNr.cjs.map +0 -1
- package/dist/list-BO1gnjmc.js.map +0 -1
- package/dist/list-Bac329kq.cjs.map +0 -1
- package/dist/menu-CUKV4pVJ.js +0 -61
- package/dist/navigation-rail-CYKfvZs9.js.map +0 -1
- package/dist/navigation-rail-DXr4NJnN.cjs +0 -81
- package/dist/navigation-rail-DXr4NJnN.cjs.map +0 -1
- package/dist/notification-service-CZ56fXew.js +0 -532
- package/dist/notification-service-CZ56fXew.js.map +0 -1
- package/dist/notification-service-DQGs9O0f.cjs +0 -143
- package/dist/notification-service-DQGs9O0f.cjs.map +0 -1
- package/dist/notify-KvHZ-8z9.js.map +0 -1
- package/dist/notify-VkDx6hMZ.cjs.map +0 -1
- package/dist/progress-D5kgn2Fg.js +0 -58
- package/dist/progress-D5kgn2Fg.js.map +0 -1
- package/dist/progress-yFxoJDYf.cjs +0 -35
- package/dist/progress-yFxoJDYf.cjs.map +0 -1
- package/dist/ripple-QoNZUUw_.js +0 -148
- package/dist/ripple-QoNZUUw_.js.map +0 -1
- package/dist/ripple-Ujq_REH4.cjs +0 -16
- package/dist/ripple-Ujq_REH4.cjs.map +0 -1
- package/dist/select-C-Kv7ey_.cjs.map +0 -1
- package/dist/select-DSTQ-Zau.js.map +0 -1
- package/dist/sheet.service-BNz-ird-.cjs +0 -2
- package/dist/sheet.service-BNz-ird-.cjs.map +0 -1
- package/dist/sheet.service-DuVcXyOB.js.map +0 -1
- package/dist/spinner-CSPJs8CL.cjs.map +0 -1
- package/dist/spinner-DAF-hCvQ.js.map +0 -1
- package/dist/suggestion-chip-CYu-4xrL.js.map +0 -1
- package/dist/suggestion-chip-Cj8gwZqq.cjs.map +0 -1
- package/dist/surface-DTOK-0E4.js.map +0 -1
- package/dist/surface-VX_THUHv.cjs.map +0 -1
- package/dist/tailwind.mixin-JFXu3GSo.cjs +0 -2
- package/dist/tailwind.mixin-wLaKUxf1.js +0 -67
- package/dist/textarea-B6LDhRed.cjs +0 -44
- package/dist/theme-controller-boat-CCBNOGxF.cjs +0 -64
- package/dist/theme-controller-boat-CCBNOGxF.cjs.map +0 -1
- package/dist/theme-controller-boat-CVS77gnH.js.map +0 -1
- package/dist/typography-Ck-OdI83.cjs.map +0 -1
- package/dist/typography-DdG9aEAg.js.map +0 -1
- package/types/src/notification/notification-audio-generator.d.ts +0 -45
- package/types/src/notification/notification-audio.d.ts +0 -79
- package/types/src/notification/notification-container.d.ts +0 -48
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"input-UyknNHNr.cjs","sources":["../src/input/input.ts"],"sourcesContent":["import { html, LitElement, nothing, PropertyValueMap } from 'lit'\nimport { customElement, property, query, state } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { when } from 'lit/directives/when.js'\nimport { distinctUntilChanged, filter, fromEvent, map, takeUntil } from 'rxjs'\n\nimport { SchmancyFormField } from '@mixins/index'\n\n// Import styles\nimport style from './input.scss?inline'\n\n// If you want to be form-associated, define the type on `ElementInternals`.\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-input': SchmancyInput\n\t\t'sch-input': SchmancyInput\n\t}\n}\n\ntype EventDetails = {\n\tvalue: string\n}\n\n/**\n * Custom events the component may emit:\n * - 'input': on every keystroke\n * - 'change': on native blur/change\n * - 'enter': specifically when user presses Enter\n */\nexport type SchmancyInputInputEvent = CustomEvent<EventDetails>\nexport type SchmancyInputChangeEvent = CustomEvent<EventDetails>\nexport type SchmancyInputEnterEvent = CustomEvent<EventDetails>\n\n/**\n * Size variants for the input.\n * - sm: Small, compact input (40px height)\n * - md: Medium input (50px height, default)\n * - lg: Large, spacious input (60px height)\n */\nexport type InputSize = 'sm' | 'md' | 'lg'\n\n/**\n * Enhanced version of the SchmancyInput component with improved form integration\n * and compatibility with legacy API.\n *\n * This component uses the native form association API and maintains parity with\n * native input behaviors while providing a stylish, accessible interface.\n *\n * @prop {string} name - Name attribute for form submission (inherited from FormFieldMixin)\n * @prop {string} label - Label text for the form field (inherited from FormFieldMixin)\n * @prop {boolean} required - Whether the field is required (inherited from FormFieldMixin)\n * @prop {boolean} disabled - Whether the field is disabled (inherited from FormFieldMixin)\n * @prop {boolean} readonly - Whether the field is read-only (inherited from FormFieldMixin)\n * @prop {boolean} error - Whether the field is in an error state (inherited from FormFieldMixin)\n * @prop {string} validationMessage - The validation message to display (inherited from FormFieldMixin)\n * @prop {string} hint - Optional hint text to display below the field (inherited from FormFieldMixin)\n */\n@customElement('schmancy-input')\nexport default class SchmancyInput extends SchmancyFormField(style) {\n\t// ----------------------------\n\t// A) Public properties\n\t// ----------------------------\n\n\t/** Auto-incrementing counter for generating unique IDs */\n\tstatic _idCounter = 0\n\n\t/** Override value to be string only for input element */\n\t@property({ type: String, reflect: true })\n\tpublic override value = ''\n\n\n\t/**\n\t * The type of input. (e.g. 'text', 'password', 'email', etc.)\n\t */\n\t@property({ reflect: true })\n\tpublic type: HTMLInputElement['type'] = 'text'\n\n\n\t@property()\n\tpublic placeholder = ''\n\n\n\t/** Pattern validation attribute. */\n\t@property({ type: String, reflect: true })\n\tpublic pattern?: string\n\n\n\t/** If true, we visually show a pointer cursor even if readOnly. */\n\t@property({ type: Boolean, reflect: true }) public clickable = false\n\n\t/** Whether browser spellcheck is enabled. */\n\t@property({ type: Boolean, reflect: true })\n\tpublic spellcheck = false\n\n\t/**\n\t * Text alignment within the input.\n\t * - 'left' | 'center' | 'right'\n\t */\n\t@property({ type: String, reflect: true })\n\tpublic align: 'left' | 'center' | 'right' = 'left'\n\n\t/** inputmode attribute (affects on-screen keyboards in mobile). */\n\t@property()\n\tpublic inputmode?: 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url'\n\n\t@property({ type: Number, reflect: true })\n\tpublic minlength?: number\n\n\t@property({ type: Number })\n\tpublic maxlength?: number\n\n\t@property()\n\tpublic min?: string\n\n\t@property()\n\tpublic max?: string\n\n\t@property({ type: Number, reflect: true })\n\tpublic step?: number\n\n\t/** If true, auto-focus this input on first render. */\n\t@property({ type: Boolean })\n\tpublic autofocus = false\n\n\t/** Autocomplete/autofill hints. */\n\t@property({ type: String, reflect: true })\n\tpublic autocomplete: AutoFill = 'on'\n\n\t/**\n\t * tabIndex for focusing by tab key. Typically 0 or -1.\n\t */\n\t@property({ type: Number, reflect: true })\n\tpublic override tabIndex = 0\n\n\n\t/**\n\t * The size of the input.\n\t * - 'sm': Small, compact size\n\t * - 'md': Medium size (default)\n\t * - 'lg': Large size\n\t */\n\t@property({ type: String, reflect: true })\n\tpublic size: InputSize = 'md'\n\n\t/**\n\t * Controls when validation should show.\n\t * - 'always' - Always show validation\n\t * - 'touched' - Only show after field has been focused and then blurred\n\t * - 'dirty' - Only show after value has changed\n\t * - 'submitted' - Only show after form submission\n\t */\n\t@property({ type: String })\n\tpublic validateOn: 'always' | 'touched' | 'dirty' | 'submitted' = 'touched'\n\n\t/**\n\t * For datalist support\n\t */\n\t@property({ type: String })\n\tpublic list?: string\n\n\n\t// ----------------------------\n\t// B) Queries & Refs\n\t// ----------------------------\n\t@query('input') private inputElement!: HTMLInputElement\n\tprivate inputRef = createRef<HTMLInputElement>()\n\n\t// ----------------------------\n\t// C) Internal States\n\t// ----------------------------\n\n\t/**\n\t * For integration with browser's autofill support\n\t */\n\t@state()\n\tprivate isAutofilled = false\n\n\t/**\n\t * Track user interaction state for validation\n\t */\n\t@state()\n\tprivate touched = false\n\n\t@state()\n\tprivate dirty = false\n\n\t@state()\n\tprivate submitted = false\n\n\t/**\n\t * Store the default value for reset behavior\n\t */\n\t@state()\n\tprivate defaultValue = ''\n\n\t// ----------------------------\n\t// D) Form-associated logic\n\t// ----------------------------\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tdelegatesFocus: true, // so focus() goes to <input>\n\t}\n\n\tprivate formResetObserver?: MutationObserver\n\n\t/**\n\t * If user did not provide an ID, auto-generate one so <label for=\"...\">\n\t * and various aria-* attributes can reference it.\n\t */\n\tprotected override willUpdate(changedProps: PropertyValueMap<any> | Map<PropertyKey, unknown>) {\n\t\tif (!this.id) {\n\t\t\tthis.id = `sch-input-${SchmancyInput._idCounter++}`\n\t\t}\n\t\tsuper.willUpdate(changedProps)\n\t}\n\n\n\tprotected override updated(changedProps: Map<string, unknown>) {\n\t\tsuper.updated(changedProps)\n\n\t\t// Handle value changes\n\t\tif (changedProps.has('value')) {\n\t\t\t// If value changes from original default, mark as dirty\n\t\t\tif (this.value !== this.defaultValue) {\n\t\t\t\tthis.dirty = true\n\t\t\t}\n\n\t\t\t// Update validation state when value changes\n\t\t\tthis.validateInput()\n\t\t}\n\n\t\t// Store default value if this is the first update\n\t\tif (!this.hasUpdated && changedProps.has('value')) {\n\t\t\tthis.defaultValue = this.value\n\t\t}\n\t}\n\n\t/**\n\t * Connect to the closest form element and set up form integration\n\t */\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Store initial default value for form reset\n\t\tthis.defaultValue = this.value\n\n\t\t// Set up form integration\n\t\tthis.setupFormIntegration()\n\n\t\t// Setup for external label association\n\t\tthis.setupExternalLabelAssociation()\n\t}\n\n\t/**\n\t * Set up form integration with ElementInternals\n\t */\n\tprivate setupFormIntegration() {\n\t\tif (this.form) {\n\t\t\t// Listen for form reset events\n\t\t\tthis.formResetObserver = new MutationObserver(mutations => {\n\t\t\t\tfor (const mutation of mutations) {\n\t\t\t\t\tif (mutation.type === 'attributes' && mutation.attributeName === 'reset') {\n\t\t\t\t\t\tthis.resetToDefault()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// Observe the form for reset events\n\t\t\tthis.formResetObserver.observe(this.form, {\n\t\t\t\tattributes: true,\n\t\t\t\tchildList: false,\n\t\t\t\tsubtree: false,\n\t\t\t})\n\n\t\t\t// Use RxJS for form reset events\n\t\t\tfromEvent(this.form, 'reset')\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tthis.resetToDefault()\n\t\t\t\t})\n\n\t\t\t// Use RxJS for form submit events to mark field as submitted\n\t\t\tfromEvent(this.form, 'submit')\n\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t.subscribe(() => {\n\t\t\t\t\tthis.submitted = true\n\t\t\t\t\t// Validate on form submission\n\t\t\t\t\tthis.validateInput(true)\n\t\t\t\t})\n\t\t}\n\t}\n\n\t/**\n\t * Set up external label association for native HTML label support\n\t */\n\tprivate setupExternalLabelAssociation() {\n\t\tif (this.id) {\n\t\t\tconst setupLabelClickListener = () => {\n\t\t\t\tconst labels = document.querySelectorAll(`label[for=\"${this.id}\"]`)\n\t\t\t\tlabels.forEach(label => {\n\t\t\t\t\t// Use RxJS for label click events\n\t\t\t\t\tfromEvent(label, 'click')\n\t\t\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t\t\t.subscribe(() => {\n\t\t\t\t\t\t\tthis.focus()\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// Initialize after DOM is ready\n\t\t\tif (document.readyState === 'complete') {\n\t\t\t\tsetupLabelClickListener()\n\t\t\t} else {\n\t\t\t\t// Use RxJS for DOMContentLoaded event\n\t\t\t\tfromEvent(document, 'DOMContentLoaded')\n\t\t\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t\t\t.subscribe(setupLabelClickListener)\n\t\t\t}\n\t\t}\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\n\t\t// Clean up the form observer\n\t\tif (this.formResetObserver) {\n\t\t\tthis.formResetObserver.disconnect()\n\t\t}\n\n\t\t// Note: RxJS subscriptions are automatically cleaned up via takeUntil(this.disconnecting)\n\t\t// No manual removeEventListener calls needed for RxJS-managed events\n\t}\n\n\t/**\n\t * Reset the input to its default state\n\t */\n\tprivate resetToDefault() {\n\t\tthis.value = this.defaultValue\n\t\tthis.touched = false\n\t\tthis.dirty = false\n\t\tthis.submitted = false\n\t\tthis.error = false\n\t\tthis.validationMessage = ''\n\t\tthis.dispatchEvent(new CustomEvent('reset', { bubbles: true }))\n\t}\n\n\t/**\n\t * Determines if validation errors should be shown based on current state\n\t * and validation strategy\n\t */\n\tprivate shouldShowValidation(forceValidation = false): boolean {\n\t\tif (forceValidation) return true\n\n\t\tswitch (this.validateOn) {\n\t\t\tcase 'always':\n\t\t\t\treturn true\n\t\t\tcase 'touched':\n\t\t\t\treturn this.touched\n\t\t\tcase 'dirty':\n\t\t\t\treturn this.dirty\n\t\t\tcase 'submitted':\n\t\t\t\treturn this.submitted\n\t\t\tdefault:\n\t\t\t\treturn this.touched\n\t\t}\n\t}\n\n\n\t/**\n\t * Validate input based on required, pattern, etc.\n\t * This mimics native validation behavior\n\t */\n\tprivate validateInput(forceValidation = false) {\n\t\t// Skip validation for disabled inputs\n\t\tif (this.disabled) return\n\n\t\t// Only show validation errors if we should based on the validation strategy\n\t\tconst shouldValidate = this.shouldShowValidation(forceValidation)\n\n\t\t// Get validity state from internal input if available\n\t\tconst validity: ValidityState = this.inputElement?.validity ?? {\n\t\t\tbadInput: false,\n\t\t\tcustomError: false,\n\t\t\tpatternMismatch: false,\n\t\t\trangeOverflow: false,\n\t\t\trangeUnderflow: false,\n\t\t\tstepMismatch: false,\n\t\t\ttooLong: false,\n\t\t\ttooShort: false,\n\t\t\ttypeMismatch: false,\n\t\t\tvalid: true,\n\t\t\tvalueMissing: false,\n\t\t}\n\n\t\t// Check if the input has an actual validation error (not a custom error)\n\t\tconst hasError = !validity.valid && !validity.customError\n\n\t\tif (shouldValidate && hasError) {\n\t\t\t// There's an error and we should show it\n\t\t\tthis.error = true\n\t\t\tthis.validationMessage = this.inputElement?.validationMessage || ''\n\t\t} else if (validity.valid) {\n\t\t\t// Input is valid, so clear the error state\n\t\t\tthis.error = false\n\n\t\t\t// Only clear validation message if there's no custom error\n\t\t\tif (!validity.customError) {\n\t\t\t\tthis.validationMessage = ''\n\t\t\t}\n\t\t} else if (!shouldValidate) {\n\t\t\t// We shouldn't show validation yet, so clear visual error state\n\t\t\tthis.error = false\n\t\t}\n\n\t\t// The mixin will handle updating internals based on error state\n\t}\n\n\t/**\n\t * Check validity without showing validation UI\n\t */\n\tpublic override checkValidity() {\n\t\t// Check internal input first\n\t\tconst inputValid = this.inputRef.value?.checkValidity() ?? true\n\n\t\t// Call parent implementation for basic validation\n\t\tconst parentValid = super.checkValidity()\n\n\t\treturn inputValid && parentValid\n\t}\n\n\t/**\n\t * Show validation UI and check validity\n\t */\n\tpublic override reportValidity() {\n\t\t// Mark as touched and submitted to show validation\n\t\tthis.touched = true\n\t\tthis.submitted = true\n\n\t\t// First check using native input\n\t\tconst inputValid = this.inputRef.value?.reportValidity() ?? true\n\n\t\t// Update our component's validation state with force=true\n\t\tthis.validateInput(true)\n\n\t\t// Call parent implementation\n\t\tconst parentValid = super.reportValidity()\n\n\t\treturn inputValid && parentValid\n\t}\n\n\t/**\n\t * Set a custom validation error message\n\t */\n\tpublic override setCustomValidity(message: string) {\n\t\t// Set on the native input\n\t\tif (this.inputRef.value) {\n\t\t\tthis.inputRef.value.setCustomValidity(message)\n\t\t}\n\n\t\t// Call parent implementation\n\t\tsuper.setCustomValidity(message)\n\t\t\n\t\t// Update error state based on validation strategy\n\t\tthis.error = message !== '' && this.shouldShowValidation()\n\t}\n\n\t// ----------------------------\n\t// E) Lifecycle Hooks & Event Handlers\n\t// ----------------------------\n\tfirstUpdated() {\n\t\t// Autofocus if desired\n\t\tif (this.autofocus) {\n\t\t\t// Use setTimeout to match browser behavior - autofocus happens after initial rendering\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.focus()\n\t\t\t}, 0)\n\t\t}\n\n\t\t// Subscribe to input events\n\t\tthis.setupInputEvents()\n\t\tthis.setupFocusBlurEvents()\n\t\tthis.setupAutofillDetection()\n\t\tthis.setupEnterKeyEvents()\n\t}\n\n\t/**\n\t * Set up input event handling for value changes\n\t */\n\tprivate setupInputEvents() {\n\t\tfromEvent<InputEvent>(this.inputElement, 'input')\n\t\t\t.pipe(\n\t\t\t\tmap(ev => {\n\t\t\t\t\t// Capture all input event properties for complete event forwarding\n\t\t\t\t\tconst inputEvent = ev as InputEvent\n\t\t\t\t\tconst target = ev.target as HTMLInputElement\n\t\t\t\t\treturn {\n\t\t\t\t\t\tvalue: target.value,\n\t\t\t\t\t\tinputType: inputEvent.inputType,\n\t\t\t\t\t\tdata: inputEvent.data,\n\t\t\t\t\t\tisComposing: inputEvent.isComposing,\n\t\t\t\t\t\toriginalEvent: ev,\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(eventData => {\n\t\t\t\t// Update component value\n\t\t\t\tthis.value = eventData.value\n\n\t\t\t\t// Mark as dirty when user types\n\t\t\t\tthis.dirty = this.value !== this.defaultValue\n\n\t\t\t\t// Fire custom 'input' event with extended details\n\t\t\t\tconst customEvent = new CustomEvent<EventDetails>('input', {\n\t\t\t\t\tdetail: { value: eventData.value },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t})\n\n\t\t\t\t// Add additional properties to match native events more closely\n\t\t\t\tObject.defineProperties(customEvent, {\n\t\t\t\t\tinputType: { value: eventData.inputType },\n\t\t\t\t\tdata: { value: eventData.data },\n\t\t\t\t\tisComposing: { value: eventData.isComposing },\n\t\t\t\t})\n\n\t\t\t\tthis.dispatchEvent(customEvent)\n\n\t\t\t\t// REMOVED: Duplicate change event dispatch that was here\n\t\t\t\t// Run validation like native inputs do on input, but respect the validation strategy\n\t\t\t\tthis.validateInput()\n\t\t\t})\n\n\t\t// Subscribe to native change events (usually on blur)\n\t\tfromEvent<Event>(this.inputElement, 'change')\n\t\t\t.pipe(\n\t\t\t\tmap(ev => (ev.target as HTMLInputElement).value),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(value => {\n\t\t\t\tthis.value = value\n\t\t\t\tthis.dirty = this.value !== this.defaultValue\n\n\t\t\t\t// Fire regular change event using mixin helper\n\t\t\t\tthis.emitChange({ value })\n\n\t\t\t\t// Run validation on change like native inputs\n\t\t\t\tthis.validateInput()\n\t\t\t})\n\t}\n\n\t/**\n\t * Set up focus/blur event handling\n\t */\n\tprivate setupFocusBlurEvents() {\n\t\tfromEvent<FocusEvent>(this.inputElement, 'focus')\n\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t.subscribe(ev => {\n\t\t\t\t// Create a custom focus event that includes standard props\n\t\t\t\tconst focusEvent = new CustomEvent('focus', {\n\t\t\t\t\tbubbles: ev.bubbles,\n\t\t\t\t\tcancelable: ev.cancelable,\n\t\t\t\t\tcomposed: ev.composed,\n\t\t\t\t})\n\n\t\t\t\t// Add focus-specific properties\n\t\t\t\tObject.defineProperties(focusEvent, {\n\t\t\t\t\trelatedTarget: { value: ev.relatedTarget },\n\t\t\t\t})\n\n\t\t\t\tthis.dispatchEvent(focusEvent)\n\t\t\t})\n\n\t\tfromEvent<FocusEvent>(this.inputElement, 'blur')\n\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t.subscribe(ev => {\n\t\t\t\t// Mark as touched when field loses focus\n\t\t\t\tthis.touched = true\n\n\t\t\t\t// Run validation on blur like native inputs, respecting validation strategy\n\t\t\t\tif (!this.disabled) {\n\t\t\t\t\tthis.validateInput()\n\t\t\t\t}\n\n\t\t\t\t// Create a custom blur event that includes standard props\n\t\t\t\tconst blurEvent = new CustomEvent('blur', {\n\t\t\t\t\tbubbles: ev.bubbles,\n\t\t\t\t\tcancelable: ev.cancelable,\n\t\t\t\t\tcomposed: ev.composed,\n\t\t\t\t})\n\n\t\t\t\t// Add blur-specific properties\n\t\t\t\tObject.defineProperties(blurEvent, {\n\t\t\t\t\trelatedTarget: { value: ev.relatedTarget },\n\t\t\t\t})\n\n\t\t\t\tthis.dispatchEvent(blurEvent)\n\t\t\t})\n\t}\n\n\t/**\n\t * Set up autofill detection\n\t */\n\tprivate setupAutofillDetection() {\n\t\t// Detect autofill animation (Chrome, etc.)\n\t\tfromEvent<AnimationEvent>(this.inputElement, 'animationstart')\n\t\t\t.pipe(\n\t\t\t\tfilter(ev => ev.animationName === 'onAutoFillStart'),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(ev => {\n\t\t\t\tconst { value } = ev.target as HTMLInputElement\n\t\t\t\tthis.value = value\n\t\t\t\tthis.isAutofilled = true\n\t\t\t\tthis.dirty = this.value !== this.defaultValue\n\n\t\t\t\t// Dispatch autofill event for integration with autofill systems\n\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\tnew CustomEvent('autofill', {\n\t\t\t\t\t\tdetail: { value },\n\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t}),\n\t\t\t\t)\n\n\t\t\t\t// Also propagate as a change event like browsers do\n\t\t\t\tthis.emitChange({ value })\n\t\t\t})\n\n\t\t// Detect end of autofill (Chrome)\n\t\tfromEvent<AnimationEvent>(this.inputElement, 'animationstart')\n\t\t\t.pipe(\n\t\t\t\tfilter(ev => ev.animationName === 'onAutoFillCancel'),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.isAutofilled = false\n\t\t\t})\n\t}\n\n\t/**\n\t * Set up enter key event handling\n\t */\n\tprivate setupEnterKeyEvents() {\n\t\t// Listen for Enter on keydown\n\t\tfromEvent<KeyboardEvent>(this.inputElement, 'keydown')\n\t\t\t.pipe(\n\t\t\t\tfilter(ev => ev.key === 'Enter'),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(ev => {\n\t\t\t\tconst { value } = ev.target as HTMLInputElement\n\t\t\t\t\n\t\t\t\t// Update value if changed\n\t\t\t\tif (this.value !== value) {\n\t\t\t\t\tthis.value = value\n\t\t\t\t\tthis.dirty = this.value !== this.defaultValue\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Blur the input to trigger change event naturally\n\t\t\t\t// This mimics what happens when you tab out of the field\n\t\t\t\tthis.inputElement.blur()\n\n\t\t\t\t// Dispatch enhanced enter event\n\t\t\t\tconst enterEvent = new CustomEvent<EventDetails>('enter', {\n\t\t\t\t\tdetail: { value: this.value },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t})\n\n\t\t\t\t// Add extra keyboard event props\n\t\t\t\tObject.defineProperties(enterEvent, {\n\t\t\t\t\tkey: { value: 'Enter' },\n\t\t\t\t\tcode: { value: 'Enter' },\n\t\t\t\t\tkeyCode: { value: 13 },\n\t\t\t\t\twhich: { value: 13 },\n\t\t\t\t})\n\n\t\t\t\tthis.dispatchEvent(enterEvent)\n\t\t\t})\n\t}\n\n\t// ----------------------------\n\t// F) Utility Methods\n\t// ----------------------------\n\t/** Selects all text within the input. */\n\tpublic select() {\n\t\treturn this.inputRef.value?.select()\n\t}\n\n\t/** Returns the native validity state of the inner <input>. */\n\tpublic getValidity(): ValidityState | undefined {\n\t\treturn this.inputRef.value?.validity\n\t}\n\n\t/**\n\t * Sets the selection range. Mirrors native input.setSelectionRange\n\t */\n\tpublic setSelectionRange(start: number, end: number, direction?: 'forward' | 'backward' | 'none') {\n\t\tthis.inputRef.value?.setSelectionRange(start, end, direction)\n\t}\n\n\t/**\n\t * Returns the selected text within the input (start position)\n\t */\n\tpublic get selectionStart(): number | null {\n\t\treturn this.inputRef.value?.selectionStart ?? null\n\t}\n\n\t/**\n\t * Returns the selected text within the input (end position)\n\t */\n\tpublic get selectionEnd(): number | null {\n\t\treturn this.inputRef.value?.selectionEnd ?? null\n\t}\n\n\t/**\n\t * Returns the direction of selection\n\t */\n\tpublic get selectionDirection(): 'forward' | 'backward' | 'none' | null {\n\t\treturn this.inputRef.value?.selectionDirection ?? null\n\t}\n\n\t/**\n\t * Sets the range of text to be selected.\n\t */\n\tpublic setRangeText(\n\t\treplacement: string,\n\t\tstart?: number,\n\t\tend?: number,\n\t\tselectMode?: 'select' | 'start' | 'end' | 'preserve',\n\t) {\n\t\tif (start !== undefined && end !== undefined) {\n\t\t\tthis.inputRef.value?.setRangeText(replacement, start, end, selectMode)\n\t\t} else {\n\t\t\tthis.inputRef.value?.setRangeText(replacement)\n\t\t}\n\t}\n\n\t/**\n\t * Override to forward focus to the internal <input>.\n\t * Also dispatch a 'focus' event for external listeners.\n\t */\n\tpublic override focus(options?: FocusOptions) {\n\t\tthis.inputRef.value?.focus(options)\n\t\tthis.dispatchEvent(new Event('focus'))\n\t}\n\n\t/**\n\t * Override to forward clicks to the internal <input>.\n\t * Also dispatch a 'click' event for external listeners.\n\t */\n\tpublic override click() {\n\t\tthis.inputRef.value?.click()\n\t\tthis.dispatchEvent(new Event('click'))\n\t}\n\n\t/** Forward blur to the internal <input>. */\n\tpublic override blur() {\n\t\tthis.inputRef.value?.blur()\n\t\tthis.dispatchEvent(new Event('blur'))\n\t}\n\n\t// ----------------------------\n\t// G) Rendering\n\t// ----------------------------\n\tprotected override render() {\n\t\t// Determine height and padding based on size\n\t\tconst getHeightAndPadding = () => {\n\t\t\tswitch (this.size) {\n\t\t\t\tcase 'sm':\n\t\t\t\t\treturn {\n\t\t\t\t\t\theight: '40px',\n\t\t\t\t\t\tpadding: '0 8px',\n\t\t\t\t\t\tfontSize: '0.875rem', // 14px\n\t\t\t\t\t}\n\t\t\t\tcase 'lg':\n\t\t\t\t\treturn {\n\t\t\t\t\t\theight: '60px',\n\t\t\t\t\t\tpadding: '0 20px',\n\t\t\t\t\t\tfontSize: '1.125rem', // 18px\n\t\t\t\t\t}\n\t\t\t\tcase 'md':\n\t\t\t\tdefault:\n\t\t\t\t\treturn {\n\t\t\t\t\t\theight: '50px',\n\t\t\t\t\t\tpadding: '0 16px',\n\t\t\t\t\t\tfontSize: '1rem', // 16px\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst { height, padding, fontSize } = getHeightAndPadding()\n\n\t\t// Check if it's a date-type input\n\t\tconst isDateType = ['date', 'datetime-local', 'time', 'month', 'week'].includes(this.type)\n\n\t\tconst inputClasses = {\n\t\t\t// Base styles\n\t\t\t'block w-full min-w-0 rounded-[8px] border-0 bg-surface-highest text-surface-on': true,\n\t\t\t// Focus styles\n\t\t\t'outline-secondary-default focus:outline-1': true,\n\t\t\t// Disabled styles\n\t\t\t'disabled:opacity-40 disabled:cursor-not-allowed': true,\n\t\t\t// Placeholder\n\t\t\t'placeholder:text-muted': true,\n\t\t\t// Ring styles\n\t\t\t'ring-0 ring-inset focus:ring-1 focus:ring-inset': true,\n\t\t\t// Ring colors based on error state\n\t\t\t'ring-secondary-default ring-outline focus:ring-secondary-default': !this.error,\n\t\t\t'ring-error-default focus:ring-error-default': this.error,\n\t\t\t// Readonly styles\n\t\t\t'caret-transparent focus:outline-hidden cursor-pointer select-none': this.readonly,\n\t\t\t'cursor-pointer': this.clickable,\n\t\t\t// Text alignment (date inputs always left-aligned)\n\t\t\t'text-left': this.align === 'left' || isDateType,\n\t\t\t'text-center': this.align === 'center' && !isDateType,\n\t\t\t'text-right': this.align === 'right' && !isDateType,\n\t\t\t// Autofill\n\t\t\tautofilled: this.isAutofilled,\n\t\t}\n\n\t\tconst labelClasses = {\n\t\t\t'block mb-1 font-medium': true,\n\t\t\t'opacity-40': this.disabled,\n\t\t\t'text-sm': this.size === 'sm',\n\t\t\t'text-base': this.size === 'md',\n\t\t\t'text-lg': this.size === 'lg',\n\t\t\t'text-primary-default': !this.error,\n\t\t\t'text-error-default': this.error,\n\t\t}\n\n\t\tconst styles = {\n\t\t\theight,\n\t\t\tpadding,\n\t\t\tfontSize,\n\t\t\t// Ensure vertical centering for all input types\n\t\t\tlineHeight: height,\n\t\t}\n\n\t\t/**\n\t\t * - If `this.label` is present, we render a proper `<label for=\"${this.id}\">`.\n\t\t * - If not, we add an aria-label to the <input> for better accessibility.\n\t\t * - If there's a `hint`, we reference it via aria-describedby.\n\t\t * - If there's an error, we set aria-invalid and could set aria-errormessage.\n\t\t */\n\t\treturn html`\n\t\t\t<div class=\"w-full min-w-0 ${isDateType ? 'date-input-container' : ''}\">\n\t\t\t\t${when(\n\t\t\t\t\tthis.label,\n\t\t\t\t\t() => html`\n\t\t\t\t\t\t<label\n\t\t\t\t\t\t\tfor=${this.id}\n\t\t\t\t\t\t\tclass=${this.classMap(labelClasses)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t${this.label}\n\t\t\t\t\t\t</label>\n\t\t\t\t\t`,\n\t\t\t\t)}\n\n\t\t\t\t<input\n\t\t\t\t\t${ref(this.inputRef)}\n\t\t\t\t\tid=${this.id}\n\t\t\t\t\tname=${this.name}\n\t\t\t\t\tclass=${this.classMap(inputClasses)}\n\t\t\t\t\tstyle=${this.styleMap(styles)}\n\t\t\t\t\t.value=${this.value}\n\t\t\t\t\t.type=${this.type}\n\t\t\t\t\t.autocomplete=${this.autocomplete}\n\t\t\t\t\t.spellcheck=${this.spellcheck}\n\t\t\t\t\tplaceholder=${this.placeholder}\n\t\t\t\t\tinputmode=${ifDefined(this.inputmode)}\n\t\t\t\t\tpattern=${ifDefined(this.pattern)}\n\t\t\t\t\tstep=${ifDefined(this.step)}\n\t\t\t\t\tminlength=${ifDefined(this.minlength)}\n\t\t\t\t\tmaxlength=${ifDefined(this.maxlength)}\n\t\t\t\t\tmin=${ifDefined(this.min)}\n\t\t\t\t\tmax=${ifDefined(this.max)}\n\t\t\t\t\tlist=${ifDefined(this.list)}\n\t\t\t\t\t?required=${this.required}\n\t\t\t\t\t?disabled=${this.disabled}\n\t\t\t\t\t?readonly=${this.readonly}\n\t\t\t\t\taria-invalid=${this.error ? 'true' : 'false'}\n\t\t\t\t\taria-required=${this.required ? 'true' : 'false'}\n\t\t\t\t\taria-labelledby=${this.label ? `label-${this.id}` : nothing}\n\t\t\t\t\taria-describedby=${this.hint || this.validationMessage ? `hint-${this.id}` : nothing}\n\t\t\t\t\taria-label=${ifDefined(!this.label ? this.placeholder || 'Input' : undefined)}\n\t\t\t\t/>\n\n\t\t\t\t${when(\n\t\t\t\t\tthis.hint || (this.error && this.validationMessage),\n\t\t\t\t\t() => html`\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tid=\"hint-${this.id}\"\n\t\t\t\t\t\t\tclass=\"mt-1 text-sm ${this.error ? 'text-error-default' : 'text-surface-onVariant'}\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t${this.error && this.validationMessage ? this.validationMessage : this.hint}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t`,\n\t\t\t\t)}\n\t\t\t</div>\n\t\t`\n\t}\n}\n\n/**\n * Register the component with the legacy tag name for backward compatibility\n * @prop {string} label - Label text for the form field (inherited from FormFieldMixin)\n * @prop {boolean} required - Whether the field is required (inherited from FormFieldMixin)\n * @prop {boolean} disabled - Whether the field is disabled (inherited from FormFieldMixin)\n * @prop {boolean} readonly - Whether the field is read-only (inherited from FormFieldMixin)\n * @prop {boolean} error - Whether the field is in an error state (inherited from FormFieldMixin)\n * @prop {string} validationMessage - The validation message to display (inherited from FormFieldMixin)\n * @prop {string} hint - Optional hint text to display below the field (inherited from FormFieldMixin)\n */\n@customElement('sch-input')\nexport class SchmancyInputCompat extends SchmancyInput {}\n"],"names":["SchmancyInput","SchmancyFormField","constructor","super","arguments","this","value","type","placeholder","clickable","spellcheck","align","autofocus","autocomplete","tabIndex","size","validateOn","inputRef","createRef","isAutofilled","touched","dirty","submitted","defaultValue","changedProps","id","_idCounter","willUpdate","updated","has","validateInput","hasUpdated","connectedCallback","setupFormIntegration","setupExternalLabelAssociation","form","formResetObserver","MutationObserver","mutations","mutation","attributeName","resetToDefault","observe","attributes","childList","subtree","fromEvent","pipe","takeUntil","disconnecting","subscribe","setupLabelClickListener","document","querySelectorAll","forEach","label","focus","readyState","disconnectedCallback","disconnect","error","validationMessage","dispatchEvent","CustomEvent","bubbles","forceValidation","disabled","shouldValidate","shouldShowValidation","validity","inputElement","customError","valid","hasError","checkValidity","inputValid","parentValid","reportValidity","message","setCustomValidity","firstUpdated","setTimeout","setupInputEvents","setupFocusBlurEvents","setupAutofillDetection","setupEnterKeyEvents","map","ev","inputEvent","target","inputType","data","isComposing","originalEvent","eventData","customEvent","detail","composed","Object","defineProperties","distinctUntilChanged","emitChange","focusEvent","cancelable","relatedTarget","blurEvent","filter","animationName","key","blur","enterEvent","code","keyCode","which","select","getValidity","start","end","direction","setSelectionRange","selectionStart","selectionEnd","selectionDirection","replacement","selectMode","setRangeText","options","Event","click","render","height","padding","fontSize","getHeightAndPadding","isDateType","includes","inputClasses","readonly","autofilled","labelClasses","styles","lineHeight","html","when","classMap","ref","name","styleMap","ifDefined","inputmode","pattern","step","minlength","maxlength","min","max","list","required","nothing","hint","shadowRootOptions","LitElement","delegatesFocus","__decorateClass","property","String","reflect","prototype","Boolean","Number","query","state","customElement","SchmancyInputCompat"],"mappings":"ykBA2DqBA,QAAAA,cAArB,cAA2CC,gmGAA3C,aAAAC,CAAAC,MAAAA,GAAAC,WAUCC,KAAgBC,MAAQ,GAOxBD,KAAOE,KAAiC,OAIxCF,KAAOG,YAAc,GASuBH,KAAOI,UAAAA,GAInDJ,KAAOK,WAAAA,GAOPL,KAAOM,MAAqC,OAuB5CN,KAAOO,UAAAA,GAIPP,KAAOQ,aAAyB,KAMhCR,KAAgBS,SAAW,EAU3BT,KAAOU,KAAkB,KAUzBV,KAAOW,WAA2D,UAalEX,KAAQY,SAAWC,cAUnBb,KAAQc,aAAAA,GAMRd,KAAQe,QAAAA,GAGRf,KAAQgB,SAGRhB,KAAQiB,UAAAA,GAMRjB,KAAQkB,aAAe,EAAA,CAgBJ,WAAWC,EAAAA,CACxBnB,KAAKoB,KACTpB,KAAKoB,GAAK,aAAazB,QAAAA,cAAc0B,cAEtCvB,MAAMwB,WAAWH,CAAAA,CAClB,CAGmB,QAAQA,GAC1BrB,MAAMyB,QAAQJ,CAAAA,EAGVA,EAAaK,IAAI,OAAA,IAEhBxB,KAAKC,QAAUD,KAAKkB,eACvBlB,KAAKgB,MAAAA,IAINhB,KAAKyB,cAAAA,GAAAA,CAIDzB,KAAK0B,YAAcP,EAAaK,IAAI,OAAA,IACxCxB,KAAKkB,aAAelB,KAAKC,MAE3B,CAKA,oBACCH,MAAM6B,kBAAAA,EAGN3B,KAAKkB,aAAelB,KAAKC,MAGzBD,KAAK4B,qBAAAA,EAGL5B,KAAK6B,8BAAAA,CACN,CAKQ,sBAAAD,CACH5B,KAAK8B,OAER9B,KAAK+B,kBAAoB,IAAIC,iBAAiBC,GAAAA,CAC7C,UAAWC,KAAYD,EAClBC,EAAShC,OAAS,cAAgBgC,EAASC,gBAAkB,SAChEnC,KAAKoC,eAAAA,CAAAA,CAAAA,EAMRpC,KAAK+B,kBAAkBM,QAAQrC,KAAK8B,KAAM,CACzCQ,WAAAA,GACAC,UAAAA,GACAC,QAAAA,KAIDC,EAAAA,UAAUzC,KAAK8B,KAAM,OAAA,EACnBY,KAAKC,EAAAA,UAAU3C,KAAK4C,aAAAA,CAAAA,EACpBC,UAAU,IAAA,CACV7C,KAAKoC,eAAAA,CAAAA,CAAAA,EAIPK,EAAAA,UAAUzC,KAAK8B,KAAM,QAAA,EACnBY,KAAKC,EAAAA,UAAU3C,KAAK4C,aAAAA,CAAAA,EACpBC,UAAU,IAAA,CACV7C,KAAKiB,UAAAA,GAELjB,KAAKyB,cAAAA,EAAc,CAAA,CAAA,EAGvB,CAKQ,+BAAAI,CACP,GAAI7B,KAAKoB,GAAI,CACZ,MAAM0B,EAA0B,IAAA,CAChBC,SAASC,iBAAiB,cAAchD,KAAKoB,EAAAA,IAAAA,EACrD6B,QAAQC,GAAAA,CAEdT,YAAUS,EAAO,OAAA,EACfR,KAAKC,YAAU3C,KAAK4C,aAAAA,CAAAA,EACpBC,UAAU,IAAA,CACV7C,KAAKmD,aAMLJ,SAASK,aAAe,WAC3BN,EAAAA,EAGAL,EAAAA,UAAUM,SAAU,kBAAA,EAClBL,KAAKC,EAAAA,UAAU3C,KAAK4C,aAAAA,CAAAA,EACpBC,UAAUC,CAAAA,CAEd,CACD,CAEA,sBAAAO,CACCvD,MAAMuD,qBAAAA,EAGFrD,KAAK+B,mBACR/B,KAAK+B,kBAAkBuB,WAAAA,CAKzB,CAKQ,gBAAAlB,CACPpC,KAAKC,MAAQD,KAAKkB,aAClBlB,KAAKe,QAAAA,GACLf,KAAKgB,MAAAA,GACLhB,KAAKiB,UAAAA,GACLjB,KAAKuD,MAAAA,GACLvD,KAAKwD,kBAAoB,GACzBxD,KAAKyD,cAAc,IAAIC,YAAY,QAAS,CAAEC,QAAAA,EAAS,CAAA,CAAA,CACxD,CAMQ,qBAAqBC,EAAAA,GAAkB,CAC9C,GAAIA,EAAiB,MAAA,GAErB,OAAQ5D,KAAKW,WAAAA,CACZ,IAAK,SACJ,SACD,IAAK,UAML,QACC,OAAOX,KAAKe,QALb,IAAK,QACJ,OAAOf,KAAKgB,MACb,IAAK,YACJ,OAAOhB,KAAKiB,SAAAA,CAIf,CAOQ,cAAc2C,EAAAA,GAAkB,CAEvC,GAAI5D,KAAK6D,SAAU,OAGnB,MAAMC,EAAiB9D,KAAK+D,qBAAqBH,CAAAA,EAG3CI,EAA0BhE,KAAKiE,cAAcD,UAAY,CAE9DE,YAAAA,GAQAC,MAAAA,EAAO,EAKFC,EAAAA,CAAYJ,EAASG,OAAAA,CAAUH,EAASE,YAE1CJ,GAAkBM,GAErBpE,KAAKuD,MAAAA,GACLvD,KAAKwD,kBAAoBxD,KAAKiE,cAAcT,mBAAqB,IACvDQ,EAASG,OAEnBnE,KAAKuD,MAAAA,GAGAS,EAASE,cACblE,KAAKwD,kBAAoB,KAEfM,IAEX9D,KAAKuD,MAAAA,GAIP,CAKgB,eAAAc,CAEf,MAAMC,EAAatE,KAAKY,SAASX,OAAOoE,cAAAA,GAAAA,GAGlCE,EAAczE,MAAMuE,cAAAA,EAE1B,OAAOC,GAAcC,CACtB,CAKgB,iBAEfvE,KAAKe,QAAAA,GACLf,KAAKiB,UAAAA,GAGL,MAAMqD,EAAatE,KAAKY,SAASX,OAAOuE,eAAAA,GAAAA,GAGxCxE,KAAKyB,cAAAA,EAAc,EAGnB,MAAM8C,EAAczE,MAAM0E,eAAAA,EAE1B,OAAOF,GAAcC,CACtB,CAKgB,kBAAkBE,GAE7BzE,KAAKY,SAASX,OACjBD,KAAKY,SAASX,MAAMyE,kBAAkBD,CAAAA,EAIvC3E,MAAM4E,kBAAkBD,CAAAA,EAGxBzE,KAAKuD,MAAQkB,IAAY,IAAMzE,KAAK+D,qBAAAA,CACrC,CAKA,cAAAY,CAEK3E,KAAKO,WAERqE,WAAW,IAAA,CACV5E,KAAKmD,SACH,CAAA,EAIJnD,KAAK6E,iBAAAA,EACL7E,KAAK8E,qBAAAA,EACL9E,KAAK+E,uBAAAA,EACL/E,KAAKgF,qBACN,CAKQ,kBAAAH,CACPpC,EAAAA,UAAsBzC,KAAKiE,aAAc,OAAA,EACvCvB,KACAuC,EAAAA,IAAIC,GAAAA,CAEH,MAAMC,EAAaD,EAEnB,MAAO,CACNjF,MAFciF,EAAGE,OAEHnF,MACdoF,UAAWF,EAAWE,UACtBC,KAAMH,EAAWG,KACjBC,YAAaJ,EAAWI,YACxBC,cAAeN,CAAAA,CAAAA,CAAAA,EAGjBvC,EAAAA,UAAU3C,KAAK4C,gBAEfC,UAAU4C,GAAAA,CAEVzF,KAAKC,MAAQwF,EAAUxF,MAGvBD,KAAKgB,MAAQhB,KAAKC,QAAUD,KAAKkB,aAGjC,MAAMwE,EAAc,IAAIhC,YAA0B,QAAS,CAC1DiC,OAAQ,CAAE1F,MAAOwF,EAAUxF,KAAAA,EAC3B0D,QAAAA,GACAiC,WAAU,CAAA,EAIXC,OAAOC,iBAAiBJ,EAAa,CACpCL,UAAW,CAAEpF,MAAOwF,EAAUJ,SAAAA,EAC9BC,KAAM,CAAErF,MAAOwF,EAAUH,IAAAA,EACzBC,YAAa,CAAEtF,MAAOwF,EAAUF,WAAAA,CAAAA,CAAAA,EAGjCvF,KAAKyD,cAAciC,CAAAA,EAInB1F,KAAKyB,cAAAA,CAAAA,CAAAA,EAIPgB,EAAAA,UAAiBzC,KAAKiE,aAAc,QAAA,EAClCvB,KACAuC,EAAAA,IAAIC,GAAOA,EAAGE,OAA4BnF,KAAAA,EAC1C8F,yBACApD,EAAAA,UAAU3C,KAAK4C,aAAAA,CAAAA,EAEfC,UAAU5C,IACVD,KAAKC,MAAQA,EACbD,KAAKgB,MAAQhB,KAAKC,QAAUD,KAAKkB,aAGjClB,KAAKgG,WAAW,CAAE/F,MAAAA,CAAAA,CAAAA,EAGlBD,KAAKyB,cAAAA,CAAAA,CAAAA,CAER,CAKQ,sBAAAqD,CACPrC,EAAAA,UAAsBzC,KAAKiE,aAAc,OAAA,EACvCvB,KAAKC,YAAU3C,KAAK4C,aAAAA,CAAAA,EACpBC,UAAUqC,GAAAA,CAEV,MAAMe,EAAa,IAAIvC,YAAY,QAAS,CAC3CC,QAASuB,EAAGvB,QACZuC,WAAYhB,EAAGgB,WACfN,SAAUV,EAAGU,QAAAA,CAAAA,EAIdC,OAAOC,iBAAiBG,EAAY,CACnCE,cAAe,CAAElG,MAAOiF,EAAGiB,aAAAA,CAAAA,CAAAA,EAG5BnG,KAAKyD,cAAcwC,CAAAA,CAAAA,CAAAA,EAGrBxD,EAAAA,UAAsBzC,KAAKiE,aAAc,QACvCvB,KAAKC,YAAU3C,KAAK4C,aAAAA,CAAAA,EACpBC,UAAUqC,GAAAA,CAEVlF,KAAKe,WAGAf,KAAK6D,UACT7D,KAAKyB,cAAAA,EAIN,MAAM2E,EAAY,IAAI1C,YAAY,OAAQ,CACzCC,QAASuB,EAAGvB,QACZuC,WAAYhB,EAAGgB,WACfN,SAAUV,EAAGU,QAAAA,CAAAA,EAIdC,OAAOC,iBAAiBM,EAAW,CAClCD,cAAe,CAAElG,MAAOiF,EAAGiB,aAAAA,CAAAA,CAAAA,EAG5BnG,KAAKyD,cAAc2C,CAAAA,CAAAA,CAAAA,CAEtB,CAKQ,yBAEP3D,EAAAA,UAA0BzC,KAAKiE,aAAc,gBAAA,EAC3CvB,KACA2D,EAAAA,OAAOnB,GAAMA,EAAGoB,gBAAkB,iBAAlBA,EAChB3D,EAAAA,UAAU3C,KAAK4C,aAAAA,CAAAA,EAEfC,UAAUqC,IACV,KAAA,CAAMjF,MAAEA,CAAAA,EAAUiF,EAAGE,OACrBpF,KAAKC,MAAQA,EACbD,KAAKc,aAAAA,GACLd,KAAKgB,MAAQhB,KAAKC,QAAUD,KAAKkB,aAGjClB,KAAKyD,cACJ,IAAIC,YAAY,WAAY,CAC3BiC,OAAQ,CAAE1F,MAAAA,CAAAA,EACV0D,WACAiC,SAAAA,EAAU,CAAA,CAAA,EAKZ5F,KAAKgG,WAAW,CAAE/F,MAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAIpBwC,EAAAA,UAA0BzC,KAAKiE,aAAc,gBAAA,EAC3CvB,KACA2D,EAAAA,OAAOnB,GAAMA,EAAGoB,gBAAkB,kBAAlBA,EAChB3D,EAAAA,UAAU3C,KAAK4C,aAAAA,CAAAA,EAEfC,UAAU,IAAA,CACV7C,KAAKc,aAAAA,EAAe,CAAA,CAEvB,CAKQ,qBAAAkE,CAEPvC,EAAAA,UAAyBzC,KAAKiE,aAAc,SAAA,EAC1CvB,KACA2D,EAAAA,OAAOnB,GAAMA,EAAGqB,MAAQ,OAARA,EAChB5D,EAAAA,UAAU3C,KAAK4C,aAAAA,CAAAA,EAEfC,UAAUqC,GAAAA,CACV,KAAA,CAAMjF,MAAEA,CAAAA,EAAUiF,EAAGE,OAGjBpF,KAAKC,QAAUA,IAClBD,KAAKC,MAAQA,EACbD,KAAKgB,MAAQhB,KAAKC,QAAUD,KAAKkB,cAKlClB,KAAKiE,aAAauC,KAAAA,EAGlB,MAAMC,EAAa,IAAI/C,YAA0B,QAAS,CACzDiC,OAAQ,CAAE1F,MAAOD,KAAKC,KAAAA,EACtB0D,QAAAA,GACAiC,SAAAA,EAAU,CAAA,EAIXC,OAAOC,iBAAiBW,EAAY,CACnCF,IAAK,CAAEtG,MAAO,OAAA,EACdyG,KAAM,CAAEzG,MAAO,OAAA,EACf0G,QAAS,CAAE1G,MAAO,EAAA,EAClB2G,MAAO,CAAE3G,MAAO,EAAA,CAAA,CAAA,EAGjBD,KAAKyD,cAAcgD,CAAAA,CAAAA,CAAAA,CAEtB,CAMO,QAAAI,CACN,OAAO7G,KAAKY,SAASX,OAAO4G,QAC7B,CAGO,aAAAC,CACN,OAAO9G,KAAKY,SAASX,OAAO+D,QAC7B,CAKO,kBAAkB+C,EAAeC,EAAaC,EAAAA,CACpDjH,KAAKY,SAASX,OAAOiH,kBAAkBH,EAAOC,EAAKC,CAAAA,CACpD,CAKA,IAAA,gBAAWE,CACV,OAAOnH,KAAKY,SAASX,OAAOkH,gBAAkB,IAC/C,CAKA,IAAA,cAAWC,CACV,OAAOpH,KAAKY,SAASX,OAAOmH,cAAgB,IAC7C,CAKA,IAAA,oBAAWC,CACV,OAAOrH,KAAKY,SAASX,OAAOoH,oBAAsB,IACnD,CAKO,aACNC,EACAP,EACAC,EACAO,EAAAA,CAEIR,IAFJQ,QAE2BP,IAAvBD,OACH/G,KAAKY,SAASX,OAAOuH,aAAaF,EAAaP,EAAOC,EAAKO,CAAAA,EAE3DvH,KAAKY,SAASX,OAAOuH,aAAaF,CAAAA,CAEpC,CAMgB,MAAMG,EAAAA,CACrBzH,KAAKY,SAASX,OAAOkD,MAAMsE,CAAAA,EAC3BzH,KAAKyD,cAAc,IAAIiE,MAAM,OAAA,CAAA,CAC9B,CAMgB,QACf1H,KAAKY,SAASX,OAAO0H,MAAAA,EACrB3H,KAAKyD,cAAc,IAAIiE,MAAM,SAC9B,CAGgB,MAAAlB,CACfxG,KAAKY,SAASX,OAAOuG,KAAAA,EACrBxG,KAAKyD,cAAc,IAAIiE,MAAM,MAAA,CAAA,CAC9B,CAKmB,QAAAE,CAElB,KAAA,CAwBMC,OAAEA,EAAAC,QAAQA,EAAAC,SAASA,CAAAA,GAxBG,IAAA,CAC3B,OAAQ/H,KAAKU,MACZ,IAAK,KACJ,MAAO,CACNmH,OAAQ,OACRC,QAAS,QACTC,SAAU,UAAA,EAEZ,IAAK,KACJ,MAAO,CACNF,OAAQ,OACRC,QAAS,SACTC,SAAU,UAAA,EAGZ,QACC,MAAO,CACNF,OAAQ,OACRC,QAAS,SACTC,SAAU,MAAA,CAAA,CAAA,GAKwBC,EAGhCC,EAAa,CAAC,OAAQ,iBAAkB,OAAQ,QAAS,MAAA,EAAQC,SAASlI,KAAKE,IAAAA,EAE/EiI,EAAe,CAEpB,iFAAA,GAEA,+CAEA,kDAAA,GAEA,yBAAA,GAEA,kDAAA,GAEA,mEAAA,CAAqEnI,KAAKuD,MAC1E,8CAA+CvD,KAAKuD,MAEpD,oEAAqEvD,KAAKoI,SAC1E,iBAAkBpI,KAAKI,UAEvB,YAAaJ,KAAKM,QAAU,QAAU2H,EACtC,cAAejI,KAAKM,QAAU,UAAVA,CAAuB2H,EAC3C,aAAcjI,KAAKM,QAAU,SAAVA,CAAsB2H,EAEzCI,WAAYrI,KAAKc,YAAAA,EAGZwH,EAAe,CACpB,yBAAA,GACA,aAActI,KAAK6D,SACnB,UAAW7D,KAAKU,OAAS,KACzB,YAAaV,KAAKU,OAAS,KAC3B,UAAWV,KAAKU,OAAS,KACzB,uBAAA,CAAyBV,KAAKuD,MAC9B,qBAAsBvD,KAAKuD,OAGtBgF,EAAS,CACdV,OAAAA,EACAC,QAAAA,EACAC,SAAAA,EAEAS,WAAYX,CAAAA,EASb,OAAOY,EAAAA;AAAAA,gCACuBR,EAAa,uBAAyB,EAAA;AAAA,MAChES,EAAAA,KACD1I,KAAKkD,MACL,IAAMuF,EAAAA;AAAAA;AAAAA,aAEEzI,KAAKoB,EAAAA;AAAAA,eACHpB,KAAK2I,SAASL,CAAAA,CAAAA;AAAAA;AAAAA,SAEpBtI,KAAKkD,KAAAA;AAAAA;AAAAA;;;OAMP0F,EAAAA,IAAI5I,KAAKY,QAAAA,CAAAA;AAAAA,UACNZ,KAAKoB,EAAAA;AAAAA,YACHpB,KAAK6I,IAAAA;AAAAA,aACJ7I,KAAK2I,SAASR,CAAAA,CAAAA;AAAAA,aACdnI,KAAK8I,SAASP,CAAAA,CAAAA;AAAAA,cACbvI,KAAKC,KAAAA;AAAAA,aACND,KAAKE,IAAAA;AAAAA,qBACGF,KAAKQ,YAAAA;AAAAA,mBACPR,KAAKK,UAAAA;AAAAA,mBACLL,KAAKG,WAAAA;AAAAA,iBACP4I,EAAAA,UAAU/I,KAAKgJ,SAAAA,CAAAA;AAAAA,eACjBD,EAAAA,UAAU/I,KAAKiJ,OAAAA,CAAAA;AAAAA,YAClBF,EAAAA,UAAU/I,KAAKkJ,IAAAA,CAAAA;AAAAA,iBACVH,EAAAA,UAAU/I,KAAKmJ,SAAAA,CAAAA;AAAAA,iBACfJ,EAAAA,UAAU/I,KAAKoJ,SAAAA,CAAAA;AAAAA,WACrBL,EAAAA,UAAU/I,KAAKqJ,GAAAA,CAAAA;AAAAA,WACfN,EAAAA,UAAU/I,KAAKsJ,GAAAA,CAAAA;AAAAA,YACdP,EAAAA,UAAU/I,KAAKuJ,IAAAA,CAAAA;AAAAA,iBACVvJ,KAAKwJ,QAAAA;AAAAA,iBACLxJ,KAAK6D,QAAAA;AAAAA,iBACL7D,KAAKoI,QAAAA;AAAAA,oBACFpI,KAAKuD,MAAQ,OAAS,OAAA;AAAA,qBACrBvD,KAAKwJ,SAAW,OAAS,OAAA;AAAA,uBACvBxJ,KAAKkD,MAAQ,SAASlD,KAAKoB,EAAAA,GAAOqI,EAAAA,OAAAA;AAAAA,wBACjCzJ,KAAK0J,MAAQ1J,KAAKwD,kBAAoB,QAAQxD,KAAKoB,KAAOqI,EAAAA,OAAAA;AAAAA,kBAChEV,EAAAA,UAAW/I,KAAKkD,MAAAA,OAAQlD,KAAKG,aAAe,OAAA,CAAA;AAAA;AAAA;AAAA,MAGxDuI,EAAAA,KACD1I,KAAK0J,MAAS1J,KAAKuD,OAASvD,KAAKwD,kBACjC,IAAMiF,EAAAA;AAAAA;AAAAA,kBAEOzI,KAAKoB,EAAAA;AAAAA,6BACMpB,KAAKuD,MAAQ,qBAAuB,wBAAA;AAAA;AAAA,SAExDvD,KAAKuD,OAASvD,KAAKwD,kBAAoBxD,KAAKwD,kBAAoBxD,KAAK0J,IAAAA;AAAAA;AAAAA;;GAM7E,CAAA,EA70BoB/J,QAAAA,cAMb0B,WAAa,EANA1B,QAAAA,cA4IHgK,kBAAoB,CAAA,GACjCC,EAAAA,WAAWD,kBACdE,eAAAA,EAAgB,EApIDC,EAAA,CADfC,EAAAA,SAAS,CAAE7J,KAAM8J,OAAQC,UAAS,CAAA,CAAA,EATftK,sBAUJuK,UAAA,QAAA,CAAA,EAOTJ,EAAA,CADNC,WAAS,CAAEE,QAAAA,MAhBQtK,sBAiBbuK,UAAA,OAAA,CAAA,EAIAJ,EAAA,CADNC,EAAAA,SAAAA,CAAAA,EApBmBpK,sBAqBbuK,UAAA,cAAA,CAAA,EAKAJ,EAAA,CADNC,EAAAA,SAAS,CAAE7J,KAAM8J,OAAQC,QAAAA,MAzBNtK,sBA0BbuK,UAAA,UAAA,GAI4CJ,EAAA,CAAlDC,EAAAA,SAAS,CAAE7J,KAAMiK,QAASF,QAAAA,EAAS,CAAA,CAAA,EA9BhBtK,sBA8B+BuK,UAAA,YAAA,CAAA,EAI5CJ,EAAA,CADNC,EAAAA,SAAS,CAAE7J,KAAMiK,QAASF,QAAAA,EAAS,CAAA,CAAA,EAjChBtK,sBAkCbuK,UAAA,aAAA,CAAA,EAOAJ,EAAA,CADNC,EAAAA,SAAS,CAAE7J,KAAM8J,OAAQC,UAAS,CAAA,CAAA,EAxCftK,sBAyCbuK,UAAA,QAAA,CAAA,EAIAJ,EAAA,CADNC,EAAAA,YA5CmBpK,sBA6CbuK,UAAA,YAAA,GAGAJ,EAAA,CADNC,EAAAA,SAAS,CAAE7J,KAAMkK,OAAQH,QAAAA,EAAS,CAAA,CAAA,EA/CftK,sBAgDbuK,UAAA,YAAA,CAAA,EAGAJ,EAAA,CADNC,WAAS,CAAE7J,KAAMkK,UAlDEzK,sBAmDbuK,UAAA,YAAA,GAGAJ,EAAA,CADNC,EAAAA,SAAAA,CAAAA,EArDmBpK,sBAsDbuK,UAAA,MAAA,CAAA,EAGAJ,EAAA,CADNC,EAAAA,SAAAA,CAAAA,EAxDmBpK,sBAyDbuK,UAAA,MAAA,GAGAJ,EAAA,CADNC,EAAAA,SAAS,CAAE7J,KAAMkK,OAAQH,UAAS,CAAA,CAAA,EA3DftK,sBA4DbuK,UAAA,OAAA,CAAA,EAIAJ,EAAA,CADNC,WAAS,CAAE7J,KAAMiK,OAAAA,CAAAA,CAAAA,EA/DExK,sBAgEbuK,UAAA,YAAA,CAAA,EAIAJ,EAAA,CADNC,EAAAA,SAAS,CAAE7J,KAAM8J,OAAQC,QAAAA,EAAS,CAAA,CAAA,EAnEftK,sBAoEbuK,UAAA,eAAA,CAAA,EAMSJ,EAAA,CADfC,EAAAA,SAAS,CAAE7J,KAAMkK,OAAQH,QAAAA,MAzENtK,sBA0EJuK,UAAA,WAAA,GAUTJ,EAAA,CADNC,EAAAA,SAAS,CAAE7J,KAAM8J,OAAQC,QAAAA,EAAS,CAAA,CAAA,EAnFftK,sBAoFbuK,UAAA,OAAA,CAAA,EAUAJ,EAAA,CADNC,WAAS,CAAE7J,KAAM8J,MAAAA,CAAAA,CAAAA,EA7FErK,sBA8FbuK,UAAA,aAAA,CAAA,EAMAJ,EAAA,CADNC,WAAS,CAAE7J,KAAM8J,MAAAA,CAAAA,CAAAA,EAnGErK,sBAoGbuK,UAAA,OAAA,CAAA,EAMiBJ,EAAA,CAAvBO,EAAAA,MAAM,OAAA,CAAA,EA1Ga1K,sBA0GIuK,UAAA,eAAA,CAAA,EAWhBJ,EAAA,CADPQ,EAAAA,MAAAA,CAAAA,EApHmB3K,sBAqHZuK,UAAA,eAAA,CAAA,EAMAJ,EAAA,CADPQ,EAAAA,SA1HmB3K,sBA2HZuK,UAAA,UAAA,GAGAJ,EAAA,CADPQ,EAAAA,MAAAA,CAAAA,EA7HmB3K,sBA8HZuK,UAAA,QAAA,CAAA,EAGAJ,EAAA,CADPQ,EAAAA,MAAAA,CAAAA,EAhImB3K,sBAiIZuK,UAAA,YAAA,CAAA,EAMAJ,EAAA,CADPQ,EAAAA,MAAAA,CAAAA,EAtImB3K,sBAuIZuK,UAAA,eAAA,GAvIYvK,QAAAA,cAArBmK,EAAA,CADCS,EAAAA,cAAc,gBAAA,CAAA,EACM5K,uBA21BR6K,QAAAA,oBAAN,cAAkC7K,QAAAA,aAAAA,CAAAA,EAA5B6K,QAAAA,oBAANV,EAAA,CADNS,EAAAA,cAAc,cACFC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list-BO1gnjmc.js","sources":["../src/list/context.ts","../src/surface/context.ts","../src/list/list-item.ts","../src/list/list.ts"],"sourcesContent":["import { createContext } from '@lit/context'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nexport const SchmancyListTypeContext = createContext<TSurfaceColor>(undefined)\n","import { createContext } from '@lit/context'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nexport const SchmancySurfaceTypeContext = createContext<TSurfaceColor>('surface')\n","import { consume } from '@lit/context'\nimport { TailwindElement } from '@mixins/index'\nimport { SchmancySurfaceTypeContext } from '@schmancy/surface/context'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nimport { html } from 'lit'\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\n\n/**\n * @element schmancy-list-item\n * @slot leading - leading content\n * @slot trailing - trailing content\n * @slot - default content\n */\n@customElement('schmancy-list-item')\nexport class SchmancyListItem extends TailwindElement() {\n\t@consume({ context: SchmancySurfaceTypeContext, subscribe: true })\n\t@property()\n\tvariant: TSurfaceColor\n\n\t@property({ type: Boolean })\n\trounded: boolean\n\n\t@property({ type: Boolean }) readonly: boolean\n\n\t@property({ type: Boolean }) selected: boolean = false\n\n\t@queryAssignedElements({\n\t\tslot: 'leading',\n\t\tflatten: true,\n\t})\n\tprivate leading!: HTMLElement[]\n\n\t@queryAssignedElements({\n\t\tslot: 'trailing',\n\t\tflatten: true,\n\t})\n\tprivate trailing!: HTMLElement[]\n\n\tprotected get imgClasses(): string[] {\n\t\treturn ['h-5', 'w-5', 'sm:h-6', 'sm:w-6', 'object-contain']\n\t}\n\n\tfirstUpdated() {\n\t\tthis.leading?.forEach(img => {\n\t\t\timg.classList.add(...this.imgClasses)\n\t\t})\n\t\tthis.trailing?.forEach(img => {\n\t\t\timg.classList.add(...this.imgClasses)\n\t\t})\n\t}\n\n\trender() {\n\t\tconst classes = {\n\t\t\t'rounded-none': this.rounded === false,\n\t\t\t'rounded-full': this.rounded,\n\t\t\t'relative inset-0 w-full flex items-center min-h-[44px] sm:min-h-[48px] md:min-h-[56px] py-1 px-2 sm:py-2 sm:px-3 md:py-2 md:px-4 text-sm sm:text-base duration-500 transition-colors focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:z-1 outline-secondary-default outline-hidden':\n\t\t\t\ttrue,\n\t\t\t'bg-secondary-container text-secondery-onContainer': this.selected,\n\t\t}\n\n\t\tconst stateLayerClasses = {\n\t\t\t'z-0 duration-500 transition-opacity': true,\n\t\t\t'rounded-none': this.rounded === false,\n\t\t\t'rounded-full': this.rounded,\n\t\t\t'hover:bg-surface-on opacity-[0.08] cursor-pointer absolute inset-0 ': !this.readonly,\n\t\t}\n\t\treturn html` <li .tabIndex=${this.readonly ? -1 : 0} class=${this.classMap(classes)}>\n\t\t\t${when(!this.readonly, () => html` <div class=\"${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t<slot></slot>\n\t\t</li>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-list-item': SchmancyListItem\n\t}\n}\n","import { provide } from '@lit/context'\nimport { TailwindElement } from '@mixins/index'\nimport { SchmancySurfaceFill } from '@schmancy/surface'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { SchmancyListTypeContext } from './context'\n\n/**\n * `<schmancy-list>` component.\n *\n * A list component that wraps its content within a customizable surface.\n * It allows you to set the surface type and fill style, and can optionally\n * enable scrolling behavior by delegating the scroller attribute to the surface.\n *\n * @element schmancy-list\n * @slot - The default slot for list items.\n *\n * @example\n * <schmancy-list surface=\"container\" scroller>\n * <schmancy-list-item>List Item 1</schmancy-list-item>\n * </schmancy-list>\n */\n@customElement('schmancy-list')\nexport class List extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tpadding-top: 8px;\n\t\tpadding-bottom: 8px;\n\t}\n`) {\n\t/**\n\t * Defines the type or color of the surface used by the component.\n\t * This value is provided to descendant components via context.\n\t *\n\t * @attr surface\n\t * @type {TSurfaceColor}\n\t * @default 'surface'\n\t */\n\t@provide({ context: SchmancyListTypeContext })\n\t@property()\n\tsurface: TSurfaceColor\n\n\t/**\n\t * Determines the fill style of the underlying surface.\n\t *\n\t * @attr fill\n\t * @type {SchmancySurfaceFill}\n\t * @default 'auto'\n\t */\n\t@property({ type: String, reflect: true })\n\tfill: SchmancySurfaceFill = 'auto'\n\n\t/**\n\t * Defines the elevation level of the surface.\n\t *\n\t * @attr elevation\n\t * @type {number}\n\t * @default 0\n\t */\n\t@property({ type: Number })\n\televation: 0 | 1 | 2 | 3 | 4 | 5 = 0\n\n\t/**\n\t * Renders the component's template.\n\t * The list content is wrapped inside a `<schmancy-surface>` element.\n\t * The scroller property is delegated to the surface so that it controls\n\t * the scrollable behavior.\n\t *\n\t * @returns The HTML template for the component.\n\t */\n\trender() {\n\t\treturn html`\n\t\t\t<schmancy-surface .elevation=${this.elevation} .fill=${this.fill} type=${this.surface}>\n\t\t\t\t<ul>\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</ul>\n\t\t\t</schmancy-surface>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-list': List\n\t}\n}\n"],"names":["SchmancyListTypeContext","createContext","SchmancySurfaceTypeContext","SchmancyListItem","TailwindElement","constructor","super","arguments","this","selected","imgClasses","firstUpdated","leading","forEach","img","classList","add","trailing","render","classes","rounded","stateLayerClasses","readonly","html","classMap","when","__decorateClass","consume","context","subscribe","property","prototype","type","Boolean","queryAssignedElements","slot","flatten","customElement","List","css","fill","elevation","surface","provide","String","reflect","Number"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list-Bac329kq.cjs","sources":["../src/list/context.ts","../src/surface/context.ts","../src/list/list-item.ts","../src/list/list.ts"],"sourcesContent":["import { createContext } from '@lit/context'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nexport const SchmancyListTypeContext = createContext<TSurfaceColor>(undefined)\n","import { createContext } from '@lit/context'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nexport const SchmancySurfaceTypeContext = createContext<TSurfaceColor>('surface')\n","import { consume } from '@lit/context'\nimport { TailwindElement } from '@mixins/index'\nimport { SchmancySurfaceTypeContext } from '@schmancy/surface/context'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nimport { html } from 'lit'\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\n\n/**\n * @element schmancy-list-item\n * @slot leading - leading content\n * @slot trailing - trailing content\n * @slot - default content\n */\n@customElement('schmancy-list-item')\nexport class SchmancyListItem extends TailwindElement() {\n\t@consume({ context: SchmancySurfaceTypeContext, subscribe: true })\n\t@property()\n\tvariant: TSurfaceColor\n\n\t@property({ type: Boolean })\n\trounded: boolean\n\n\t@property({ type: Boolean }) readonly: boolean\n\n\t@property({ type: Boolean }) selected: boolean = false\n\n\t@queryAssignedElements({\n\t\tslot: 'leading',\n\t\tflatten: true,\n\t})\n\tprivate leading!: HTMLElement[]\n\n\t@queryAssignedElements({\n\t\tslot: 'trailing',\n\t\tflatten: true,\n\t})\n\tprivate trailing!: HTMLElement[]\n\n\tprotected get imgClasses(): string[] {\n\t\treturn ['h-5', 'w-5', 'sm:h-6', 'sm:w-6', 'object-contain']\n\t}\n\n\tfirstUpdated() {\n\t\tthis.leading?.forEach(img => {\n\t\t\timg.classList.add(...this.imgClasses)\n\t\t})\n\t\tthis.trailing?.forEach(img => {\n\t\t\timg.classList.add(...this.imgClasses)\n\t\t})\n\t}\n\n\trender() {\n\t\tconst classes = {\n\t\t\t'rounded-none': this.rounded === false,\n\t\t\t'rounded-full': this.rounded,\n\t\t\t'relative inset-0 w-full flex items-center min-h-[44px] sm:min-h-[48px] md:min-h-[56px] py-1 px-2 sm:py-2 sm:px-3 md:py-2 md:px-4 text-sm sm:text-base duration-500 transition-colors focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:z-1 outline-secondary-default outline-hidden':\n\t\t\t\ttrue,\n\t\t\t'bg-secondary-container text-secondery-onContainer': this.selected,\n\t\t}\n\n\t\tconst stateLayerClasses = {\n\t\t\t'z-0 duration-500 transition-opacity': true,\n\t\t\t'rounded-none': this.rounded === false,\n\t\t\t'rounded-full': this.rounded,\n\t\t\t'hover:bg-surface-on opacity-[0.08] cursor-pointer absolute inset-0 ': !this.readonly,\n\t\t}\n\t\treturn html` <li .tabIndex=${this.readonly ? -1 : 0} class=${this.classMap(classes)}>\n\t\t\t${when(!this.readonly, () => html` <div class=\"${this.classMap(stateLayerClasses)}\"></div>`)}\n\t\t\t<slot></slot>\n\t\t</li>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-list-item': SchmancyListItem\n\t}\n}\n","import { provide } from '@lit/context'\nimport { TailwindElement } from '@mixins/index'\nimport { SchmancySurfaceFill } from '@schmancy/surface'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { SchmancyListTypeContext } from './context'\n\n/**\n * `<schmancy-list>` component.\n *\n * A list component that wraps its content within a customizable surface.\n * It allows you to set the surface type and fill style, and can optionally\n * enable scrolling behavior by delegating the scroller attribute to the surface.\n *\n * @element schmancy-list\n * @slot - The default slot for list items.\n *\n * @example\n * <schmancy-list surface=\"container\" scroller>\n * <schmancy-list-item>List Item 1</schmancy-list-item>\n * </schmancy-list>\n */\n@customElement('schmancy-list')\nexport class List extends TailwindElement(css`\n\t:host {\n\t\tdisplay: block;\n\t\tpadding-top: 8px;\n\t\tpadding-bottom: 8px;\n\t}\n`) {\n\t/**\n\t * Defines the type or color of the surface used by the component.\n\t * This value is provided to descendant components via context.\n\t *\n\t * @attr surface\n\t * @type {TSurfaceColor}\n\t * @default 'surface'\n\t */\n\t@provide({ context: SchmancyListTypeContext })\n\t@property()\n\tsurface: TSurfaceColor\n\n\t/**\n\t * Determines the fill style of the underlying surface.\n\t *\n\t * @attr fill\n\t * @type {SchmancySurfaceFill}\n\t * @default 'auto'\n\t */\n\t@property({ type: String, reflect: true })\n\tfill: SchmancySurfaceFill = 'auto'\n\n\t/**\n\t * Defines the elevation level of the surface.\n\t *\n\t * @attr elevation\n\t * @type {number}\n\t * @default 0\n\t */\n\t@property({ type: Number })\n\televation: 0 | 1 | 2 | 3 | 4 | 5 = 0\n\n\t/**\n\t * Renders the component's template.\n\t * The list content is wrapped inside a `<schmancy-surface>` element.\n\t * The scroller property is delegated to the surface so that it controls\n\t * the scrollable behavior.\n\t *\n\t * @returns The HTML template for the component.\n\t */\n\trender() {\n\t\treturn html`\n\t\t\t<schmancy-surface .elevation=${this.elevation} .fill=${this.fill} type=${this.surface}>\n\t\t\t\t<ul>\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</ul>\n\t\t\t</schmancy-surface>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-list': List\n\t}\n}\n"],"names":["SchmancyListTypeContext","createContext","SchmancySurfaceTypeContext","SchmancyListItem","TailwindElement","super","arguments","this","selected","firstUpdated","leading","forEach","img","classList","add","imgClasses","trailing","render","classes","rounded","stateLayerClasses","readonly","html","classMap","when","__decorateClass","consume","context","subscribe","property","prototype","type","Boolean","queryAssignedElements","slot","flatten","customElement","List","css","constructor","fill","elevation","surface","provide","String","reflect","Number"],"mappings":"wVAEaA,EAA0BC,EAAAA,EAAAA,MAA6B,ECAvDC,EAA6BD,EAAAA,EAA6B,SAAA,kMCa1DE,QAAAA,iBAAN,cAA+BC,EAAAA,gBAAAA,CAAAA,CAA/B,cAAAC,MAAAA,GAAAC,SAAAA,EAUuBC,KAAAC,SAAAA,EAAoB,CAcjD,IAAA,aACC,MAAO,CAAC,MAAO,MAAO,SAAU,SAAU,gBAAA,CAC3C,CAEA,cAAAC,CACCF,KAAKG,SAASC,QAAQC,IACrBA,EAAIC,UAAUC,IAAAA,GAAOP,KAAKQ,cAE3BR,KAAKS,UAAUL,QAAQC,GAAAA,CACtBA,EAAIC,UAAUC,IAAAA,GAAOP,KAAKQ,UAAAA,CAAAA,CAAAA,CAE5B,CAEA,QAAAE,CACC,MAAMC,EAAU,CACf,eAAgBX,KAAKY,UAArB,GACA,eAAgBZ,KAAKY,QACrB,qUAAA,GAEA,oDAAqDZ,KAAKC,QAAAA,EAGrDY,EAAoB,CACzB,sCAAA,GACA,eAAgBb,KAAKY,UAArB,GACA,eAAgBZ,KAAKY,QACrB,uEAAwEZ,KAAKc,QAAAA,EAE9E,OAAOC,wBAAsBf,KAAKc,YAAgB,CAAA,UAAWd,KAAKgB,SAASL,CAAAA,CAAAA;AAAAA,KACxEM,QAAMjB,KAAKc,SAAU,IAAMC,EAAAA,oBAAoBf,KAAKgB,SAASH,CAAAA,CAAAA,UAAAA,CAAAA;AAAAA;AAAAA,QAGjE,CAAA,EArDAK,EAAA,CAFCC,EAAAA,EAAQ,CAAEC,QAASzB,EAA4B0B,UAAAA,EAAW,CAAA,EAC1DC,EAAAA,SAAAA,CAAAA,EAFW1B,yBAGZ2B,UAAA,UAAA,CAAA,EAGAL,EAAA,CADCI,WAAS,CAAEE,KAAMC,WALN7B,yBAMZ2B,UAAA,UAAA,GAE6BL,EAAA,CAA5BI,WAAS,CAAEE,KAAMC,OAAAA,CAAAA,CAAAA,EARN7B,yBAQiB2B,UAAA,WAAA,CAAA,EAEAL,EAAA,CAA5BI,WAAS,CAAEE,KAAMC,WAVN7B,yBAUiB2B,UAAA,WAAA,GAMrBL,EAAA,CAJPQ,wBAAsB,CACtBC,KAAM,UACNC,QAAAA,MAdWhC,yBAgBJ2B,UAAA,UAAA,GAMAL,EAAA,CAJPQ,wBAAsB,CACtBC,KAAM,WACNC,QAAAA,EAAS,CAAA,CAAA,EApBEhC,yBAsBJ2B,UAAA,WAAA,GAtBI3B,QAAAA,iBAANsB,EAAA,CADNW,EAAAA,cAAc,oBAAA,CAAA,EACFjC,0NCSAkC,QAAAA,KAAN,cAAmBjC,EAAAA,gBAAgBkC,EAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,CAAnC,CAAA,CAAA,aAAAC,CAAAlC,MAAAA,GAAAC,SAAAA,EA2BNC,KAAAiC,KAA4B,OAU5BjC,KAAAkC,UAAmC,CAAA,CAUnC,QAAAxB,CACC,OAAOK,EAAAA;AAAAA,kCACyBf,KAAKkC,SAAAA,UAAmBlC,KAAKiC,IAAAA,SAAajC,KAAKmC,OAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,GAMhF,CAAA,EAtCAjB,EAAA,CAFCkB,IAAQ,CAAEhB,QAAS3B,CAAAA,CAAAA,EACnB6B,EAAAA,SAAAA,CAAAA,EAhBWQ,aAiBZP,UAAA,UAAA,CAAA,EAUAL,EAAA,CADCI,EAAAA,SAAS,CAAEE,KAAMa,OAAQC,QAAAA,EAAS,CAAA,CAAA,EA1BvBR,aA2BZP,UAAA,OAAA,CAAA,EAUAL,EAAA,CADCI,WAAS,CAAEE,KAAMe,MAAAA,CAAAA,CAAAA,EApCNT,aAqCZP,UAAA,YAAA,CAAA,EArCYO,QAAAA,KAANZ,EAAA,CADNW,EAAAA,cAAc,eAAA,CAAA,EACFC"}
|
package/dist/menu-CUKV4pVJ.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import "rxjs";
|
|
2
|
-
import "rxjs/operators";
|
|
3
|
-
import "lit/directives/class-map.js";
|
|
4
|
-
import "lit/directives/style-map.js";
|
|
5
|
-
import { customElement as p, query as y } from "lit/decorators.js";
|
|
6
|
-
import "./tailwind.mixin-wLaKUxf1.js";
|
|
7
|
-
import { $ as h } from "./litElement.mixin-CVje6z-M.js";
|
|
8
|
-
import { css as d, html as m } from "lit";
|
|
9
|
-
import { $ as u } from "./dialog-service-Bege4HF4.js";
|
|
10
|
-
var v = Object.getOwnPropertyDescriptor;
|
|
11
|
-
let l = class extends h(d`
|
|
12
|
-
:host {
|
|
13
|
-
display: block;
|
|
14
|
-
}
|
|
15
|
-
`) {
|
|
16
|
-
render() {
|
|
17
|
-
return m`
|
|
18
|
-
<schmancy-list-item @click=${() => u.dismiss()}>
|
|
19
|
-
<slot></slot>
|
|
20
|
-
</schmancy-list-item>
|
|
21
|
-
`;
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
l = ((n, o, i, e) => {
|
|
25
|
-
for (var s, t = e > 1 ? void 0 : e ? v(o, i) : o, r = n.length - 1; r >= 0; r--) (s = n[r]) && (t = s(t) || t);
|
|
26
|
-
return t;
|
|
27
|
-
})([p("schmancy-menu-item")], l);
|
|
28
|
-
var f = Object.defineProperty, b = Object.getOwnPropertyDescriptor, a = (n, o, i, e) => {
|
|
29
|
-
for (var s, t = e > 1 ? void 0 : e ? b(o, i) : o, r = n.length - 1; r >= 0; r--) (s = n[r]) && (t = (e ? s(o, i, t) : s(t)) || t);
|
|
30
|
-
return e && t && f(o, i, t), t;
|
|
31
|
-
};
|
|
32
|
-
let c = class extends h(d`
|
|
33
|
-
:host {
|
|
34
|
-
position: relative;
|
|
35
|
-
display: flex;
|
|
36
|
-
}
|
|
37
|
-
`) {
|
|
38
|
-
showMenu(n) {
|
|
39
|
-
const o = this.menuSlot?.assignedElements() || [], i = m`
|
|
40
|
-
${o.map((e, s) => {
|
|
41
|
-
const t = e.cloneNode(!0);
|
|
42
|
-
return t.onclick = () => o[s].click(), t;
|
|
43
|
-
})}
|
|
44
|
-
`;
|
|
45
|
-
u.component(i, { position: n, hideActions: !0, width: "auto" });
|
|
46
|
-
}
|
|
47
|
-
render() {
|
|
48
|
-
return m`
|
|
49
|
-
<slot name="trigger" @click=${this.showMenu}>
|
|
50
|
-
<slot name="button" @click=${this.showMenu}>
|
|
51
|
-
<schmancy-icon-button>more_vert</schmancy-icon-button>
|
|
52
|
-
</slot>
|
|
53
|
-
</slot>
|
|
54
|
-
<div hidden>
|
|
55
|
-
<slot></slot>
|
|
56
|
-
</div>
|
|
57
|
-
`;
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
a([y("slot:not([name])")], c.prototype, "menuSlot", 2), c = a([p("schmancy-menu")], c);
|
|
61
|
-
//# sourceMappingURL=menu-CUKV4pVJ.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"navigation-rail-CYKfvZs9.js","sources":["../src/navigation-rail/navigation-rail-item.ts","../src/navigation-rail/navigation-rail.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\r\nimport { html, PropertyValues } from 'lit'\r\nimport { customElement, property, state } from 'lit/decorators.js'\r\nimport { when } from 'lit/directives/when.js'\r\nimport { BehaviorSubject, fromEvent, merge, takeUntil } from 'rxjs'\r\nimport { delay, distinctUntilChanged, tap } from 'rxjs/operators'\r\n\r\nexport type NavigationRailItemClickEvent = CustomEvent<{\r\n\ticon: string\r\n\tlabel: string\r\n\tvalue: string\r\n\tactive: boolean\r\n}>\r\n\r\n/**\r\n * Material Design 3 Navigation Rail Item Component\r\n * @see https://m3.material.io/components/navigation-rail/overview\r\n *\r\n * `<schmancy-navigation-rail-item>` component\r\n *\r\n * Individual navigation item for use within a navigation rail.\r\n * Represents a single destination or action with an icon and optional label.\r\n *\r\n * @element schmancy-navigation-rail-item\r\n * @slot icon - Slot for the navigation item icon (e.g., schmancy-icon)\r\n * @slot - Default slot for custom content\r\n * @slot badge - Custom badge content\r\n *\r\n * @fires navigate - When the item is clicked\r\n *\r\n * @csspart container - The main item container\r\n * @csspart indicator - The active indicator\r\n * @csspart icon - The icon container\r\n * @csspart label - The label text\r\n * @csspart badge - The badge element\r\n *\r\n * @example\r\n * <schmancy-navigation-rail-item\r\n * icon=\"home\"\r\n * label=\"Home\"\r\n * value=\"/home\"\r\n * badge=\"3\"\r\n * active>\r\n * </schmancy-navigation-rail-item>\r\n *\r\n * @example\r\n * <!-- Using 'selected' alias -->\r\n * <schmancy-navigation-rail-item\r\n * icon=\"settings\"\r\n * label=\"Settings\"\r\n * value=\"/settings\"\r\n * selected>\r\n * </schmancy-navigation-rail-item>\r\n *\r\n * @example\r\n * <!-- With custom icon -->\r\n * <schmancy-navigation-rail-item label=\"Dashboard\">\r\n * <schmancy-icon slot=\"icon\">dashboard</schmancy-icon>\r\n * </schmancy-navigation-rail-item>\r\n */\r\n@customElement('schmancy-navigation-rail-item')\r\nexport class SchmancyNavigationRailItem extends $LitElement() {\r\n\t// Observable state\r\n\tprivate hovering$ = new BehaviorSubject<boolean>(false)\r\n\tprivate pressing$ = new BehaviorSubject<boolean>(false)\r\n\tprivate active$ = new BehaviorSubject<boolean>(false)\r\n\r\n\t// Properties\r\n\t/**\r\n\t * Icon name (Material Symbols icon)\r\n\t */\r\n\t@property({ type: String })\r\n\ticon = ''\r\n\r\n\t/**\r\n\t * Label text for the navigation item\r\n\t */\r\n\t@property({ type: String })\r\n\tlabel = ''\r\n\r\n\t/**\r\n\t * Value associated with this item (useful for routing)\r\n\t */\r\n\t@property({ type: String })\r\n\tvalue = ''\r\n\r\n\t/**\r\n\t * Whether this item is currently active/selected\r\n\t * @default false\r\n\t */\r\n\t@property({ type: Boolean, reflect: true })\r\n\tget active() { return this.active$.value }\r\n\tset active(value: boolean) {\r\n\t\tthis.active$.next(value)\r\n\t}\r\n\r\n\t/**\r\n\t * Whether this item is currently selected (alias for active)\r\n\t * @default false\r\n\t */\r\n\t@property({ type: Boolean, reflect: true })\r\n\tget selected() { return this.active }\r\n\tset selected(value: boolean) { this.active = value }\r\n\r\n\t/**\r\n\t * Badge text or number to display\r\n\t */\r\n\t@property({ type: String })\r\n\tbadge = ''\r\n\r\n\t/**\r\n\t * Badge variant\r\n\t */\r\n\t@property({ type: String })\r\n\tbadgeVariant: 'error' | 'primary' | 'secondary' = 'error'\r\n\r\n\t/**\r\n\t * Whether to show the label (controlled by parent rail)\r\n\t * @default false\r\n\t */\r\n\t@property({ type: Boolean, attribute: 'show-label' })\r\n\tshowLabel = false\r\n\r\n\t/**\r\n\t * Whether this item is disabled\r\n\t * @default false\r\n\t */\r\n\t@property({ type: Boolean, reflect: true })\r\n\tdisabled = false\r\n\r\n\t/**\r\n\t * Whether this is a nested item (sub-navigation)\r\n\t * @default false\r\n\t */\r\n\t@property({ type: Boolean, reflect: true })\r\n\tnested = false\r\n\r\n\t/**\r\n\t * Whether this item represents a group separator\r\n\t * @default false\r\n\t */\r\n\t@property({ type: Boolean, reflect: true })\r\n\tgroup = false\r\n\r\n\t// State\r\n\t@state()\r\n\tprivate showRipple = false\r\n\r\n\r\n\tconnectedCallback() {\r\n\t\tsuper.connectedCallback()\r\n\r\n\t\t// Set up hover tracking\r\n\t\tmerge(\r\n\t\t\tfromEvent(this, 'mouseenter').pipe(tap(() => this.hovering$.next(true))),\r\n\t\t\tfromEvent(this, 'mouseleave').pipe(tap(() => this.hovering$.next(false)))\r\n\t\t).pipe(takeUntil(this.disconnecting)).subscribe()\r\n\r\n\t\t// Set up press tracking\r\n\t\tmerge(\r\n\t\t\tfromEvent(this, 'mousedown').pipe(tap(() => this.pressing$.next(true))),\r\n\t\t\tfromEvent(this, 'mouseup').pipe(tap(() => this.pressing$.next(false))),\r\n\t\t\tfromEvent(this, 'mouseleave').pipe(tap(() => this.pressing$.next(false)))\r\n\t\t).pipe(takeUntil(this.disconnecting)).subscribe()\r\n\r\n\r\n\t\t// Ripple effect with M3 timing\r\n\t\tthis.pressing$.pipe(\r\n\t\t\ttap(pressing => {\r\n\t\t\t\tif (pressing && !this.disabled) {\r\n\t\t\t\t\tthis.showRipple = true\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\t\t// M3 standard ripple duration\r\n\t\t\tdelay(600),\r\n\t\t\ttap(() => this.showRipple = false),\r\n\t\t\ttakeUntil(this.disconnecting)\r\n\t\t).subscribe()\r\n\r\n\t\t// Subscribe to active state changes for reactive updates\r\n\t\tthis.active$.pipe(\r\n\t\t\tdistinctUntilChanged(),\r\n\t\t\ttap((isActive) => {\r\n\t\t\t\tthis.requestUpdate()\r\n\t\t\t\t// Update ARIA attributes reactively\r\n\t\t\t\tthis.setAttribute('aria-selected', String(isActive))\r\n\t\t\t\tthis.setAttribute('tabindex', isActive ? '0' : '-1')\r\n\t\t\t}),\r\n\t\t\ttakeUntil(this.disconnecting)\r\n\t\t).subscribe()\r\n\r\n\t\t// Set ARIA attributes\r\n\t\tthis.setAttribute('role', 'listitem')\r\n\t\tif (!this.hasAttribute('tabindex')) {\r\n\t\t\tthis.setAttribute('tabindex', this.active ? '0' : '-1')\r\n\t\t}\r\n\t}\r\n\r\n\tupdated(changedProperties: PropertyValues) {\r\n\t\tsuper.updated(changedProperties)\r\n\r\n\t\t// Active state is now handled by the BehaviorSubject subscription\r\n\t\t// So we don't need to duplicate it here\r\n\r\n\t\tif (changedProperties.has('disabled')) {\r\n\t\t\tthis.setAttribute('aria-disabled', String(this.disabled))\r\n\t\t}\r\n\r\n\t\tif (changedProperties.has('label')) {\r\n\t\t\tthis.setAttribute('aria-label', this.label)\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handle click events\r\n\t */\r\n\tprivate handleClick(event: Event) {\r\n\t\tif (this.disabled) {\r\n\t\t\tevent.preventDefault()\r\n\t\t\tevent.stopPropagation()\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\t// Emit navigate event with the value\r\n\t\tthis.dispatchEvent(new CustomEvent('navigate', {\r\n\t\t\tdetail: this.value || this.label,\r\n\t\t\tbubbles: true,\r\n\t\t\tcomposed: true\r\n\t\t}))\r\n\r\n\t\t// Visual feedback is handled by the ripple effect in connectedCallback\r\n\t\t// The parent rail will confirm and update via activeIndex\r\n\t}\r\n\r\n\t/**\r\n\t * Handle keyboard events\r\n\t */\r\n\tprivate handleKeyDown(event: KeyboardEvent) {\r\n\t\tif (this.disabled) return\r\n\r\n\t\tif (event.key === 'Enter' || event.key === ' ') {\r\n\t\t\tevent.preventDefault()\r\n\t\t\tthis.click()\r\n\t\t}\r\n\t}\r\n\r\n\tprotected render() {\r\n\t\tconst hasCustomIcon = this.querySelector('[slot=\"icon\"]')\r\n\t\tconst hasCustomContent = this.querySelector(':not([slot])')\r\n\t\tconst hasCustomBadge = this.querySelector('[slot=\"badge\"]')\r\n\r\n\t\t// M3 Navigation Rail Item classes with theme integration\r\n\t\tconst containerClasses = this.classMap({\r\n\t\t\t// Layout & Spacing (M3 56px height, 12px vertical padding)\r\n\t\t\t'flex flex-col items-center justify-center': true,\r\n\t\t\t'min-h-14 w-full': true, // min-h-14 = 56px\r\n\t\t\t'py-3': true, // py-3 = 12px top/bottom\r\n\t\t\t'gap-1': true, // gap-1 = 4px\r\n\r\n\t\t\t// M3 Shape & Interaction\r\n\t\t\t'rounded-lg': true, // M3 large corner radius\r\n\t\t\t'cursor-pointer': true,\r\n\t\t\t'relative': true,\r\n\t\t\t'select-none': true,\r\n\t\t\t'box-border': true,\r\n\r\n\t\t\t// Colors & States\r\n\t\t\t'text-surface-onVariant': !this.active,\r\n\t\t\t'text-secondary-onContainer': this.active,\r\n\t\t\t'hover:bg-surface-containerHighest': true,\r\n\r\n\t\t\t// Transitions (M3 emphasized motion)\r\n\t\t\t'transition-all duration-150 ease-out': true,\r\n\r\n\t\t\t// Disabled state\r\n\t\t\t'pointer-events-none opacity-38': this.disabled,\r\n\r\n\t\t\t// Active ripple effect\r\n\t\t\t'[&>.ripple]:scale-100': this.showRipple,\r\n\r\n\t\t\t// Nested item adjustments\r\n\t\t\t'min-h-12 pl-8': this.nested, // 48px height, 32px left padding for nested\r\n\r\n\t\t\t// Group separator\r\n\t\t\t'mb-2 after:absolute after:bottom-[-4px] after:left-3 after:right-3 after:h-px after:bg-outline-variant after:opacity-12': this.group,\r\n\t\t})\r\n\r\n\t\t// Icon container with active indicator\r\n\t\tconst iconContainerClasses = this.classMap({\r\n\t\t\t'flex items-center justify-center': true,\r\n\t\t\t'w-auto min-w-14 h-8': true, // 56px min-width, 32px height\r\n\t\t\t'flex-shrink-0 relative z-10': true,\r\n\t\t})\r\n\r\n\t\t// Active indicator behind icon\r\n\t\tconst indicatorClasses = this.classMap({\r\n\t\t\t'absolute top-1/2 left-1/2 opacity-50': true,\r\n\t\t\t'w-14 h-8': true, // 56px x 32px\r\n\t\t\t'rounded-lg': true, // M3 large corner radius\r\n\t\t\t'bg-secondary-container': true,\r\n\t\t\t'transition-transform duration-150 ease-out': true,\r\n\t\t\t'z-0': true,\r\n\t\t\t// Transform based on active state\r\n\t\t\t'scale-0 -translate-x-1/2 -translate-y-1/2': !this.active,\r\n\t\t\t'scale-100 -translate-x-1/2 -translate-y-1/2': this.active,\r\n\t\t})\r\n\r\n\t\t// Icon styling\r\n\t\tconst iconClasses = this.classMap({\r\n\t\t\t'text-2xl leading-none': !this.nested, // 24px icon for normal\r\n\t\t\t'text-xl leading-none': this.nested, // 20px icon for nested\r\n\t\t\t'relative z-10': true,\r\n\t\t\t// Material Symbols font variations handled via CSS custom properties\r\n\t\t})\r\n\r\n\t\t// Label styling\r\n\t\tconst labelClasses = this.classMap({\r\n\t\t\t'text-xs font-medium leading-4': true, // 12px, medium weight, 16px line height\r\n\t\t\t'text-center': true,\r\n\t\t\t'overflow-hidden text-ellipsis whitespace-nowrap': true,\r\n\t\t\t'z-10 max-w-14 px-1': true, // max 56px width, 4px horizontal padding\r\n\t\t\t'hidden': !this.showLabel && !this.label, // Hide if not shown or no label\r\n\t\t})\r\n\r\n\t\t// Badge styling with dynamic colors\r\n\t\tconst badgeClasses = this.classMap({\r\n\t\t\t'absolute top-2 right-3': true, // 8px from top, 12px from right\r\n\t\t\t'min-w-4 h-4': true, // 16px min-width and height\r\n\t\t\t'rounded-sm': true, // M3 small corner radius\r\n\t\t\t'text-xs font-semibold': true, // 11px, 600 weight\r\n\t\t\t'flex items-center justify-center': true,\r\n\t\t\t'px-1 box-border z-20': true, // 4px padding\r\n\t\t\t'animate-pulse': true, // Pulse animation\r\n\t\t\t// Dynamic background based on variant\r\n\t\t\t'bg-error-default text-error-on': this.badgeVariant === 'error',\r\n\t\t\t'bg-primary-default text-primary-on': this.badgeVariant === 'primary',\r\n\t\t\t'bg-secondary-default text-secondary-on': this.badgeVariant === 'secondary',\r\n\t\t})\r\n\r\n\t\t// Ripple effect classes\r\n\t\tconst rippleClasses = this.classMap({\r\n\t\t\t'absolute inset-0 rounded-lg overflow-hidden z-0': true,\r\n\t\t\t'before:content-[\"\"] before:absolute before:top-1/2 before:left-1/2': true,\r\n\t\t\t'before:w-0 before:h-0 before:rounded-full': true,\r\n\t\t\t'before:bg-current before:opacity-0': true,\r\n\t\t\t'before:-translate-x-1/2 before:-translate-y-1/2': true,\r\n\t\t\t'before:transition-all before:duration-300': true,\r\n\t\t\t// Active state\r\n\t\t\t'before:w-[200%] before:h-[200%] before:opacity-12': this.showRipple,\r\n\t\t})\r\n\r\n\t\treturn html`\r\n\t\t\t<div\r\n\t\t\t\tclass=${containerClasses}\r\n\t\t\t\tpart=\"container\"\r\n\t\t\t\t@click=${this.handleClick}\r\n\t\t\t\t@keydown=${this.handleKeyDown}\r\n\t\t\t\tstyle=\"outline: ${this.matches(':focus-visible') ? '2px solid var(--schmancy-sys-color-primary-default)' : 'none'}; outline-offset: 2px;\"\r\n\t\t\t>\r\n\t\t\t\t<span class=${rippleClasses} aria-hidden=\"true\"></span>\r\n\r\n\t\t\t\t${when(hasCustomContent,\r\n\t\t\t\t\t() => html`<slot></slot>`,\r\n\t\t\t\t\t() => html`\r\n\t\t\t\t\t\t<div class=${iconContainerClasses} part=\"icon\">\r\n\t\t\t\t\t\t\t<span class=${indicatorClasses} part=\"indicator\" aria-hidden=\"true\"></span>\r\n\t\t\t\t\t\t\t${when(hasCustomIcon,\r\n\t\t\t\t\t\t\t\t() => html`<slot name=\"icon\"></slot>`,\r\n\t\t\t\t\t\t\t\t() => when(this.icon,\r\n\t\t\t\t\t\t\t\t\t() => html`\r\n\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\tclass=${iconClasses}\r\n\t\t\t\t\t\t\t\t\t\t\tpart=\"icon-text\"\r\n\t\t\t\t\t\t\t\t\t\t\tstyle=\"font-family: 'Material Symbols Outlined'; font-variation-settings: 'FILL' ${this.active ? '1' : '0'}, 'wght' 400, 'GRAD' 0, 'opsz' ${this.nested ? '20' : '24'};\"\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t${this.icon}\r\n\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t`\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t${when(this.label,\r\n\t\t\t\t\t\t\t() => html`<span class=${labelClasses} part=\"label\">${this.label}</span>`\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t`\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t${when(this.badge,\r\n\t\t\t\t\t() => html`\r\n\t\t\t\t\t\t${when(hasCustomBadge,\r\n\t\t\t\t\t\t\t() => html`<slot name=\"badge\"></slot>`,\r\n\t\t\t\t\t\t\t() => html`\r\n\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\tclass=${badgeClasses}\r\n\t\t\t\t\t\t\t\t\tpart=\"badge\"\r\n\t\t\t\t\t\t\t\t\taria-label=\"${this.badge} notifications\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t${this.badge}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t`\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t`\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t<!-- Tooltip shown via title attribute -->\r\n\t\t\t\t${when(this.hasAttribute('title'),\r\n\t\t\t\t\t() => html`\r\n\t\t\t\t\t\t<div class=\"\r\n\t\t\t\t\t\t\tabsolute left-[calc(100%+8px)] top-1/2 -translate-y-1/2\r\n\t\t\t\t\t\t\tbg-surface-inverse text-surface-inverseOn\r\n\t\t\t\t\t\t\tpx-2 py-1 rounded-sm text-xs whitespace-nowrap\r\n\t\t\t\t\t\t\tz-[1000] pointer-events-none opacity-0\r\n\t\t\t\t\t\t\thover:opacity-100 hover:translate-x-0\r\n\t\t\t\t\t\t\ttransition-all duration-150 ease-out\r\n\t\t\t\t\t\t\t-translate-x-1\r\n\t\t\t\t\t\t\" aria-hidden=\"true\">\r\n\t\t\t\t\t\t\t${this.getAttribute('title')}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t`\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t`\r\n\t}\r\n}\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'schmancy-navigation-rail-item': SchmancyNavigationRailItem\r\n\t}\r\n}","import { $LitElement } from '@mixins/index'\r\nimport { html, PropertyValues } from 'lit'\r\nimport { customElement, property, queryAssignedElements, state } from 'lit/decorators.js'\r\nimport { BehaviorSubject, fromEvent, takeUntil } from 'rxjs'\r\nimport { distinctUntilChanged, tap } from 'rxjs/operators'\r\nimport { SchmancyNavigationRailItem } from './navigation-rail-item'\r\n\r\nexport type NavigateEvent = CustomEvent<string>\r\n\r\nexport type NavigationRailMenuClickEvent = CustomEvent<void>\r\n\r\nexport type NavigationRailFabClickEvent = CustomEvent<void>\r\n\r\n\r\nexport type LabelVisibility = 'all' | 'selected' | 'none'\r\n\r\n/**\r\n * Material Design 3 Navigation Rail Component\r\n * @see https://m3.material.io/components/navigation-rail/overview\r\n *\r\n * `<schmancy-navigation-rail>` component\r\n *\r\n * A Material Design 3 vertical navigation component positioned on the left side of an application.\r\n * Navigation rails provide access to between 3-7 primary destinations with a compact footprint.\r\n * Automatically hides in fullscreen mode when triggered via schmancyTheme.next({ fullscreen: true }).\r\n *\r\n * @element schmancy-navigation-rail\r\n * @slot fab - Slot for a floating action button at the top\r\n * @slot menu - Slot for a menu icon or button below the FAB\r\n * @slot header - Custom header content slot\r\n * @slot footer - Custom footer content slot\r\n * @slot - Default slot for navigation rail items\r\n *\r\n * @fires navigate - When a navigation item is selected\r\n * @fires menu-click - When the menu button is clicked\r\n * @fires fab-click - When the FAB is clicked\r\n *\r\n * @csspart rail - The main rail container\r\n * @csspart header - The header section\r\n * @csspart nav - The navigation items container\r\n * @csspart footer - The footer section\r\n *\r\n * @example\r\n * <schmancy-navigation-rail activeIndex=\"0\">\r\n * <schmancy-button slot=\"fab\" variant=\"filled\" aria-label=\"Compose\">\r\n * <schmancy-icon>add</schmancy-icon>\r\n * </schmancy-button>\r\n * <schmancy-button slot=\"menu\" variant=\"text\" aria-label=\"Menu\">\r\n * <schmancy-icon>menu</schmancy-icon>\r\n * </schmancy-button>\r\n * <schmancy-navigation-rail-item icon=\"home\" label=\"Home\"></schmancy-navigation-rail-item>\r\n * <schmancy-navigation-rail-item icon=\"search\" label=\"Search\"></schmancy-navigation-rail-item>\r\n * <schmancy-navigation-rail-item icon=\"favorite\" label=\"Favorites\" badge=\"3\"></schmancy-navigation-rail-item>\r\n * <schmancy-navigation-rail-item icon=\"settings\" label=\"Settings\"></schmancy-navigation-rail-item>\r\n * </schmancy-navigation-rail>\r\n */\r\n@customElement('schmancy-navigation-rail')\r\nexport class SchmancyNavigationRail extends $LitElement() {\r\n\t// Observable state\r\n\tprivate activeIndex$ = new BehaviorSubject<number>(-1)\r\n\r\n\t// Properties\r\n\t/**\r\n\t * The currently active item index\r\n\t * @default -1\r\n\t */\r\n\t@property({ type: Number })\r\n\tget activeIndex() {\r\n\t\treturn this.activeIndex$.value\r\n\t}\r\n\tset activeIndex(value: number) {\r\n\t\tthis.activeIndex$.next(value)\r\n\t}\r\n\r\n\t/**\r\n\t * The currently active item value (for programmatic selection)\r\n\t */\r\n\t@property({ type: String })\r\n\tget activeValue() {\r\n\t\treturn this._activeValue\r\n\t}\r\n\tset activeValue(value: string) {\r\n\t\tthis._activeValue = value\r\n\t\tthis.updateActiveByValue(value)\r\n\t}\r\n\tprivate _activeValue = ''\r\n\r\n\t/**\r\n\t * When to show labels for navigation items\r\n\t * 'all' - Always show labels for all items\r\n\t * 'selected' - Only show label for selected item\r\n\t * 'none' - Never show labels\r\n\t * @default 'all'\r\n\t */\r\n\t@property({ type: String, attribute: 'label-visibility', reflect: true })\r\n\tlabelVisibility: LabelVisibility = 'all'\r\n\r\n\t/**\r\n\t * Alignment of navigation items\r\n\t * @default 'top'\r\n\t */\r\n\t@property({ type: String, reflect: true })\r\n\talignment: 'top' | 'center' | 'bottom' = 'top'\r\n\r\n\t/**\r\n\t * Show tooltips when labels are hidden\r\n\t * @default true\r\n\t */\r\n\t@property({ type: Boolean })\r\n\tshowTooltips = true\r\n\r\n\t/**\r\n\t * Enable keyboard navigation\r\n\t * @default true\r\n\t */\r\n\t@property({ type: Boolean })\r\n\tkeyboardNavigation = true\r\n\r\n\t/**\r\n\t * Whether the navigation rail is expanded\r\n\t * @default false\r\n\t */\r\n\t@property({ type: Boolean, reflect: true })\r\n\texpanded = false\r\n\r\n\r\n\t// State\r\n\t@state()\r\n\tprivate focusedIndex = -1\r\n\r\n\t@state()\r\n\tprivate isFullscreen = false\r\n\r\n\t// Queries\r\n\r\n\t@queryAssignedElements({ flatten: true })\r\n\tprivate allElements!: Element[]\r\n\r\n\tprivate get navigationItems(): SchmancyNavigationRailItem[] {\r\n\t\treturn this.allElements.filter(el => el.tagName === 'SCHMANCY-NAVIGATION-RAIL-ITEM') as SchmancyNavigationRailItem[]\r\n\t}\r\n\r\n\tconnectedCallback() {\r\n\t\tsuper.connectedCallback()\r\n\r\n\t\t// Set up keyboard navigation if enabled\r\n\t\tif (this.keyboardNavigation) {\r\n\t\t\tthis.addEventListener('keydown', this.handleKeyDown)\r\n\t\t}\r\n\r\n\t\t// Subscribe to active index changes with distinct values only\r\n\t\tthis.activeIndex$\r\n\t\t\t.pipe(\r\n\t\t\t\tdistinctUntilChanged(),\r\n\t\t\t\ttap(index => this.updateActiveStates(index)),\r\n\t\t\t\ttakeUntil(this.disconnecting),\r\n\t\t\t)\r\n\t\t\t.subscribe()\r\n\r\n\t\t// Listen to fullscreen events\r\n\t\tfromEvent(window, 'fullscreen').pipe(\r\n\t\t\ttap((event: Event) => {\r\n\t\t\t\tconst customEvent = event as CustomEvent\r\n\t\t\t\tthis.isFullscreen = customEvent.detail\r\n\t\t\t}),\r\n\t\t\ttakeUntil(this.disconnecting)\r\n\t\t).subscribe()\r\n\r\n\t\t// Listen for navigate events from child items\r\n\t\tthis.setupNavigateListener()\r\n\r\n\t\t// Set up label visibility\r\n\t\tthis.updateLabelVisibility()\r\n\r\n\t\t// Update ARIA attributes\r\n\t\tthis.setAttribute('role', 'navigation')\r\n\t\tthis.setAttribute('aria-label', 'Main navigation')\r\n\t}\r\n\r\n\tupdated(changedProperties: PropertyValues) {\r\n\t\tsuper.updated(changedProperties)\r\n\r\n\t\tif (changedProperties.has('labelVisibility')) {\r\n\t\t\tthis.updateLabelVisibility()\r\n\t\t}\r\n\r\n\t\tif (changedProperties.has('activeValue')) {\r\n\t\t\tthis.updateActiveByValue(this.activeValue)\r\n\t\t}\r\n\r\n\t\tif (changedProperties.has('expanded')) {\r\n\t\t\tthis.updateLabelVisibility()\r\n\t\t}\r\n\t}\r\n\r\n\tprivate updateActiveStates(index: number) {\r\n\t\tthis.navigationItems.forEach((item, i) => {\r\n\t\t\tconst isActive = i === index\r\n\t\t\titem.active = isActive\r\n\t\t\titem.setAttribute('aria-selected', String(isActive))\r\n\t\t\titem.setAttribute('tabindex', isActive ? '0' : '-1')\r\n\r\n\t\t\t// Update activeValue when index changes\r\n\t\t\tif (isActive) {\r\n\t\t\t\tthis._activeValue = item.value || item.label || ''\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tprivate updateActiveByValue(value: string) {\r\n\t\tconst index = this.navigationItems.findIndex(item => item.getAttribute('value') === value || item.label === value)\r\n\t\tif (index >= 0) {\r\n\t\t\tthis.activeIndex = index\r\n\t\t}\r\n\t}\r\n\r\n\tprivate updateLabelVisibility() {\r\n\t\tthis.navigationItems.forEach((item, i) => {\r\n\t\t\tlet shouldShowLabel = false\r\n\r\n\t\t\t// M3 Spec: In expanded state, always show all labels\r\n\t\t\tif (this.expanded) {\r\n\t\t\t\tshouldShowLabel = true\r\n\t\t\t} else {\r\n\t\t\t\t// In collapsed state, respect labelVisibility setting\r\n\t\t\t\tshouldShowLabel =\r\n\t\t\t\t\tthis.labelVisibility === 'all' || (this.labelVisibility === 'selected' && i === this.activeIndex)\r\n\t\t\t}\r\n\r\n\t\t\titem.showLabel = shouldShowLabel\r\n\r\n\t\t\t// Add tooltips when labels are hidden (only in collapsed state)\r\n\t\t\tif (this.showTooltips && !shouldShowLabel && !this.expanded && item.label) {\r\n\t\t\t\titem.setAttribute('title', item.label)\r\n\t\t\t} else {\r\n\t\t\t\titem.removeAttribute('title')\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\t// Note: Hover-based label showing removed for M3 compliance\r\n\t// Labels are now controlled via labelVisibility property and expanded state\r\n\r\n\t/**\r\n\t * Programmatically expand the navigation rail\r\n\t */\r\n\texpand() {\r\n\t\tthis.expanded = true\r\n\t}\r\n\r\n\t/**\r\n\t * Programmatically collapse the navigation rail\r\n\t */\r\n\tcollapse() {\r\n\t\tthis.expanded = false\r\n\t}\r\n\r\n\t/**\r\n\t * Add a boat item to the navigation rail\r\n\t * @param config Configuration for the boat item\r\n\t * @returns The created or existing navigation rail item element\r\n\t */\r\n\tpublic addBoatItem(config: { id: string; title: string; icon?: string }) {\r\n\t\t// Check if item already exists\r\n\t\tconst existingItem = this.querySelector(`[value=\"${config.id}\"]`) as HTMLElement\r\n\t\tif (existingItem) {\r\n\t\t\t// Item already exists, just return it\r\n\t\t\treturn existingItem\r\n\t\t}\r\n\r\n\t\t// Create new item\r\n\t\tconst item = document.createElement('schmancy-navigation-rail-item')\r\n\t\titem.setAttribute('value', config.id)\r\n\t\titem.innerHTML = `\r\n\t\t\t<schmancy-icon slot=\"icon\">${config.icon || 'widgets'}</schmancy-icon>\r\n\t\t\t${config.title}\r\n\t\t`\r\n\t\t// Add to the rail before any footer content\r\n\t\tconst footer = this.querySelector('[slot=\"footer\"]')\r\n\t\tif (footer) {\r\n\t\t\tthis.insertBefore(item, footer)\r\n\t\t} else {\r\n\t\t\tthis.appendChild(item)\r\n\t\t}\r\n\t\treturn item\r\n\t}\r\n\r\n\t/**\r\n\t * Toggle the navigation rail between expanded and collapsed states\r\n\t */\r\n\ttoggle() {\r\n\t\tthis.expanded = !this.expanded\r\n\t}\r\n\r\n\r\n\tprivate handleKeyDown(event: KeyboardEvent) {\r\n\t\tconst items = this.navigationItems\r\n\t\tif (items.length === 0) return\r\n\r\n\t\tlet newIndex = this.focusedIndex >= 0 ? this.focusedIndex : this.activeIndex\r\n\r\n\t\tswitch (event.key) {\r\n\t\t\tcase 'ArrowDown':\r\n\t\t\t\tevent.preventDefault()\r\n\t\t\t\tnewIndex = (newIndex + 1) % items.length\r\n\t\t\t\tbreak\r\n\t\t\tcase 'ArrowUp':\r\n\t\t\t\tevent.preventDefault()\r\n\t\t\t\tnewIndex = newIndex <= 0 ? items.length - 1 : newIndex - 1\r\n\t\t\t\tbreak\r\n\t\t\tcase 'Home':\r\n\t\t\t\tevent.preventDefault()\r\n\t\t\t\tnewIndex = 0\r\n\t\t\t\tbreak\r\n\t\t\tcase 'End':\r\n\t\t\t\tevent.preventDefault()\r\n\t\t\t\tnewIndex = items.length - 1\r\n\t\t\t\tbreak\r\n\t\t\tcase 'Enter':\r\n\t\t\tcase ' ':\r\n\t\t\t\tevent.preventDefault()\r\n\t\t\t\tif (newIndex >= 0) {\r\n\t\t\t\t\titems[newIndex].click()\r\n\t\t\t\t}\r\n\t\t\t\treturn\r\n\t\t\tdefault:\r\n\t\t\t\treturn\r\n\t\t}\r\n\r\n\t\tthis.focusedIndex = newIndex\r\n\t\titems[newIndex].focus()\r\n\t}\r\n\r\n\tprivate handleFabClick(event: Event) {\r\n\t\tevent.stopPropagation()\r\n\t\tthis.dispatchEvent(\r\n\t\t\tnew CustomEvent('fab-click', {\r\n\t\t\t\tbubbles: true,\r\n\t\t\t\tcomposed: true,\r\n\t\t\t}),\r\n\t\t)\r\n\t}\r\n\r\n\tprivate handleMenuClick(event: Event) {\r\n\t\tevent.stopPropagation()\r\n\t\tthis.dispatchEvent(\r\n\t\t\tnew CustomEvent('menu-click', {\r\n\t\t\t\tbubbles: true,\r\n\t\t\t\tcomposed: true,\r\n\t\t\t}),\r\n\t\t)\r\n\t}\r\n\r\n\tprotected render() {\r\n\t\t// Host-level classes for the navigation rail\r\n\t\tconst hostClasses = this.classMap({\r\n\t\t\t// Layout & Structure - Fixed width to prevent layout shift\r\n\t\t\t'flex flex-col': true,\r\n\t\t\t'h-full': true,\r\n\t\t\t'box-border relative overflow-visible': true,\r\n\t\t\t'z-10 hover:z-[100]': true, // Base z-index, elevated on hover for overlay\r\n\r\n\t\t\t// Width - collapses to 0 when fullscreen\r\n\t\t\t'w-20': !this.isFullscreen, // w-20 = 80px fixed width (M3 spec: 80dp)\r\n\t\t\t'w-0': this.isFullscreen, // Collapse width to 0 in fullscreen\r\n\r\n\t\t\t// Visibility and transition\r\n\t\t\t'transition-all duration-300 ease-emphasized': true,\r\n\t\t\t'opacity-100': !this.isFullscreen,\r\n\t\t\t'opacity-0 pointer-events-none': this.isFullscreen,\r\n\t\t\t'overflow-hidden': this.isFullscreen, // Hide overflow when collapsed\r\n\t\t})\r\n\r\n\t\t// Rail container - programmatically controlled width\r\n\t\tconst railClasses = this.classMap({\r\n\t\t\t// Layout & Structure\r\n\t\t\t'flex flex-col h-full': true,\r\n\t\t\t'box-border relative': true,\r\n\t\t\t'py-2': true,\r\n\r\n\r\n\t\t\t// M3 Colors & Theme\r\n\t\t\t'bg-surface-default text-surface-on': true,\r\n\r\n\t\t\t// M3 Motion - smooth transitions for width and shadow\r\n\t\t\t'transition-all duration-300 ease-emphasized': true,\r\n\r\n\t\t\t// Collapsed state (default) - M3 standard 80px width\r\n\t\t\t'w-20': !this.expanded, // w-20 = 80px (M3 spec: 80dp)\r\n\t\t\t'px-3': !this.expanded, // px-3 = 12px (M3 spec: 12px to center 56px items)\r\n\r\n\t\t\t// Expanded state - M3 expanded width with shadow\r\n\t\t\t'w-60': this.expanded, // w-60 = 240px expanded width\r\n\t\t\t'px-4': this.expanded, // Larger padding when expanded\r\n\t\t\t'shadow-lg': this.expanded, // M3 elevation 3 shadow when expanded\r\n\t\t})\r\n\r\n\t\t// Header section classes\r\n\t\tconst headerClasses = this.classMap({\r\n\t\t\t'flex flex-col items-center gap-1 mb-2': true,\r\n\t\t\t// FAB and menu button spacing\r\n\t\t\t'[&_[slot=\"fab\"]]:mb-2': true,\r\n\t\t\t'[&_[slot=\"menu\"]]:mb-3': true,\r\n\t\t})\r\n\r\n\t\t// Navigation container classes with alignment\r\n\t\tconst navClasses = this.classMap({\r\n\t\t\t'flex-1 flex flex-col gap-3': true, // gap-3 = 12px (M3 spec: 12px item spacing)\r\n\t\t\t'min-h-0': true, // Allow flex shrinking and proper scroll container height calculation\r\n\t\t\t// Alignment variants\r\n\t\t\t'justify-start': this.alignment === 'top',\r\n\t\t\t'justify-center': this.alignment === 'center',\r\n\t\t\t'justify-end': this.alignment === 'bottom',\r\n\t\t})\r\n\r\n\t\t// Footer section classes\r\n\t\tconst footerClasses = this.classMap({\r\n\t\t\t'flex flex-col items-center gap-1 mt-auto pt-2': true,\r\n\t\t})\r\n\r\n\t\treturn html`\r\n\t\t\t<div\r\n\t\t\t\tclass=${hostClasses}\r\n\t\t\t>\r\n\t\t\t\t<div class=${railClasses} part=\"rail\">\r\n\t\t\t\t\t<div class=${headerClasses} part=\"header\">\r\n\t\t\t\t\t\t<slot name=\"fab\" @click=${this.handleFabClick}></slot>\r\n\t\t\t\t\t\t<slot name=\"menu\" @click=${this.handleMenuClick}></slot>\r\n\t\t\t\t\t\t<slot name=\"header\"></slot>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<nav class=${navClasses} part=\"nav\" role=\"list\">\r\n\t\t\t\t\t\t<schmancy-scroll hide direction=\"vertical\">\r\n\t\t\t\t\t\t\t<slot @slotchange=${this.handleSlotChange}></slot>\r\n\t\t\t\t\t\t</schmancy-scroll>\r\n\t\t\t\t\t</nav>\r\n\r\n\t\t\t\t\t<div class=${footerClasses} part=\"footer\">\r\n\t\t\t\t\t\t<slot name=\"footer\"></slot>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t`\r\n\t}\r\n\r\n\tprivate setupNavigateListener() {\r\n\t\t// Listen for navigate events from child items\r\n\t\tthis.addEventListener('navigate', (e: Event) => {\r\n\t\t\tif (e instanceof CustomEvent) {\r\n\t\t\t\tconst value = e.detail\r\n\t\t\t\t// Find the item that dispatched the event and update active state\r\n\t\t\t\tconst itemIndex = this.navigationItems.findIndex(item => item.value === value || item.label === value)\r\n\t\t\t\tif (itemIndex >= 0) {\r\n\t\t\t\t\tthis.activeIndex = itemIndex\r\n\t\t\t\t\tthis._activeValue = value\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tprivate handleSlotChange() {\r\n\t\t// Update items when slot content changes\r\n\t\tthis.updateLabelVisibility()\r\n\t\tthis.updateActiveStates(this.activeIndex)\r\n\r\n\t\t// Set ARIA attributes on items\r\n\t\tthis.navigationItems.forEach((item, index) => {\r\n\t\t\titem.setAttribute('role', 'listitem')\r\n\t\t\tif (!item.hasAttribute('tabindex')) {\r\n\t\t\t\titem.setAttribute('tabindex', index === this.activeIndex ? '0' : '-1')\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n}\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'schmancy-navigation-rail': SchmancyNavigationRail\r\n\t}\r\n}\r\n"],"names":["SchmancyNavigationRailItem","$LitElement","constructor","super","arguments","this","hovering$","BehaviorSubject","pressing$","active$","icon","label","value","badge","badgeVariant","showLabel","disabled","nested","group","showRipple","active","next","selected","connectedCallback","merge","fromEvent","pipe","tap","takeUntil","disconnecting","subscribe","pressing","delay","distinctUntilChanged","isActive","requestUpdate","setAttribute","String","hasAttribute","changedProperties","updated","has","event","preventDefault","stopPropagation","dispatchEvent","CustomEvent","detail","bubbles","composed","key","click","render","hasCustomIcon","querySelector","hasCustomContent","hasCustomBadge","containerClasses","classMap","relative","iconContainerClasses","indicatorClasses","iconClasses","labelClasses","hidden","badgeClasses","rippleClasses","html","handleClick","handleKeyDown","matches","when","getAttribute","__decorateClass","property","type","prototype","Boolean","reflect","attribute","state","customElement","SchmancyNavigationRail","activeIndex$","_activeValue","labelVisibility","alignment","showTooltips","keyboardNavigation","expanded","focusedIndex","isFullscreen","activeIndex","activeValue","updateActiveByValue","navigationItems","allElements","filter","el","tagName","addEventListener","index","updateActiveStates","window","customEvent","setupNavigateListener","updateLabelVisibility","forEach","item","i","findIndex","shouldShowLabel","removeAttribute","expand","collapse","config","existingItem","id","document","createElement","innerHTML","title","footer","insertBefore","appendChild","toggle","items","length","newIndex","focus","hostClasses","railClasses","headerClasses","navClasses","footerClasses","handleFabClick","handleMenuClick","handleSlotChange","e","itemIndex","Number","queryAssignedElements","flatten"],"mappings":"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"}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
"use strict";const n=require("rxjs"),r=require("rxjs/operators");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const s=require("lit/decorators.js");require("./tailwind.mixin-JFXu3GSo.cjs");const b=require("./litElement.mixin-B1WTI3WY.cjs"),p=require("lit"),u=require("lit/directives/when.js");var g=Object.defineProperty,f=Object.getOwnPropertyDescriptor,o=(e,t,i,a)=>{for(var c,l=a>1?void 0:a?f(t,i):t,d=e.length-1;d>=0;d--)(c=e[d])&&(l=(a?c(t,i,l):c(l))||l);return a&&l&&g(t,i,l),l};exports.SchmancyNavigationRailItem=class extends b.$LitElement(){constructor(){super(...arguments),this.hovering$=new n.BehaviorSubject(!1),this.pressing$=new n.BehaviorSubject(!1),this.active$=new n.BehaviorSubject(!1),this.icon="",this.label="",this.value="",this.badge="",this.badgeVariant="error",this.showLabel=!1,this.disabled=!1,this.nested=!1,this.group=!1,this.showRipple=!1}get active(){return this.active$.value}set active(e){this.active$.next(e)}get selected(){return this.active}set selected(e){this.active=e}connectedCallback(){super.connectedCallback(),n.merge(n.fromEvent(this,"mouseenter").pipe(r.tap(()=>this.hovering$.next(!0))),n.fromEvent(this,"mouseleave").pipe(r.tap(()=>this.hovering$.next(!1)))).pipe(n.takeUntil(this.disconnecting)).subscribe(),n.merge(n.fromEvent(this,"mousedown").pipe(r.tap(()=>this.pressing$.next(!0))),n.fromEvent(this,"mouseup").pipe(r.tap(()=>this.pressing$.next(!1))),n.fromEvent(this,"mouseleave").pipe(r.tap(()=>this.pressing$.next(!1)))).pipe(n.takeUntil(this.disconnecting)).subscribe(),this.pressing$.pipe(r.tap(e=>{e&&!this.disabled&&(this.showRipple=!0)}),r.delay(600),r.tap(()=>this.showRipple=!1),n.takeUntil(this.disconnecting)).subscribe(),this.active$.pipe(r.distinctUntilChanged(),r.tap(e=>{this.requestUpdate(),this.setAttribute("aria-selected",String(e)),this.setAttribute("tabindex",e?"0":"-1")}),n.takeUntil(this.disconnecting)).subscribe(),this.setAttribute("role","listitem"),this.hasAttribute("tabindex")||this.setAttribute("tabindex",this.active?"0":"-1")}updated(e){super.updated(e),e.has("disabled")&&this.setAttribute("aria-disabled",String(this.disabled)),e.has("label")&&this.setAttribute("aria-label",this.label)}handleClick(e){if(this.disabled)return e.preventDefault(),void e.stopPropagation();this.dispatchEvent(new CustomEvent("navigate",{detail:this.value||this.label,bubbles:!0,composed:!0}))}handleKeyDown(e){this.disabled||e.key!=="Enter"&&e.key!==" "||(e.preventDefault(),this.click())}render(){const e=this.querySelector('[slot="icon"]'),t=this.querySelector(":not([slot])"),i=this.querySelector('[slot="badge"]'),a=this.classMap({"flex flex-col items-center justify-center":!0,"min-h-14 w-full":!0,"py-3":!0,"gap-1":!0,"rounded-lg":!0,"cursor-pointer":!0,relative:!0,"select-none":!0,"box-border":!0,"text-surface-onVariant":!this.active,"text-secondary-onContainer":this.active,"hover:bg-surface-containerHighest":!0,"transition-all duration-150 ease-out":!0,"pointer-events-none opacity-38":this.disabled,"[&>.ripple]:scale-100":this.showRipple,"min-h-12 pl-8":this.nested,"mb-2 after:absolute after:bottom-[-4px] after:left-3 after:right-3 after:h-px after:bg-outline-variant after:opacity-12":this.group}),c=this.classMap({"flex items-center justify-center":!0,"w-auto min-w-14 h-8":!0,"flex-shrink-0 relative z-10":!0}),l=this.classMap({"absolute top-1/2 left-1/2 opacity-50":!0,"w-14 h-8":!0,"rounded-lg":!0,"bg-secondary-container":!0,"transition-transform duration-150 ease-out":!0,"z-0":!0,"scale-0 -translate-x-1/2 -translate-y-1/2":!this.active,"scale-100 -translate-x-1/2 -translate-y-1/2":this.active}),d=this.classMap({"text-2xl leading-none":!this.nested,"text-xl leading-none":this.nested,"relative z-10":!0}),v=this.classMap({"text-xs font-medium leading-4":!0,"text-center":!0,"overflow-hidden text-ellipsis whitespace-nowrap":!0,"z-10 max-w-14 px-1":!0,hidden:!this.showLabel&&!this.label}),y=this.classMap({"absolute top-2 right-3":!0,"min-w-4 h-4":!0,"rounded-sm":!0,"text-xs font-semibold":!0,"flex items-center justify-center":!0,"px-1 box-border z-20":!0,"animate-pulse":!0,"bg-error-default text-error-on":this.badgeVariant==="error","bg-primary-default text-primary-on":this.badgeVariant==="primary","bg-secondary-default text-secondary-on":this.badgeVariant==="secondary"}),m=this.classMap({"absolute inset-0 rounded-lg overflow-hidden z-0":!0,'before:content-[""] before:absolute before:top-1/2 before:left-1/2':!0,"before:w-0 before:h-0 before:rounded-full":!0,"before:bg-current before:opacity-0":!0,"before:-translate-x-1/2 before:-translate-y-1/2":!0,"before:transition-all before:duration-300":!0,"before:w-[200%] before:h-[200%] before:opacity-12":this.showRipple});return p.html`
|
|
2
|
-
<div
|
|
3
|
-
class=${a}
|
|
4
|
-
part="container"
|
|
5
|
-
@click=${this.handleClick}
|
|
6
|
-
@keydown=${this.handleKeyDown}
|
|
7
|
-
style="outline: ${this.matches(":focus-visible")?"2px solid var(--schmancy-sys-color-primary-default)":"none"}; outline-offset: 2px;"
|
|
8
|
-
>
|
|
9
|
-
<span class=${m} aria-hidden="true"></span>
|
|
10
|
-
|
|
11
|
-
${u.when(t,()=>p.html`<slot></slot>`,()=>p.html`
|
|
12
|
-
<div class=${c} part="icon">
|
|
13
|
-
<span class=${l} part="indicator" aria-hidden="true"></span>
|
|
14
|
-
${u.when(e,()=>p.html`<slot name="icon"></slot>`,()=>u.when(this.icon,()=>p.html`
|
|
15
|
-
<span
|
|
16
|
-
class=${d}
|
|
17
|
-
part="icon-text"
|
|
18
|
-
style="font-family: 'Material Symbols Outlined'; font-variation-settings: 'FILL' ${this.active?"1":"0"}, 'wght' 400, 'GRAD' 0, 'opsz' ${this.nested?"20":"24"};"
|
|
19
|
-
>
|
|
20
|
-
${this.icon}
|
|
21
|
-
</span>
|
|
22
|
-
`))}
|
|
23
|
-
</div>
|
|
24
|
-
|
|
25
|
-
${u.when(this.label,()=>p.html`<span class=${v} part="label">${this.label}</span>`)}
|
|
26
|
-
`)}
|
|
27
|
-
|
|
28
|
-
${u.when(this.badge,()=>p.html`
|
|
29
|
-
${u.when(i,()=>p.html`<slot name="badge"></slot>`,()=>p.html`
|
|
30
|
-
<span
|
|
31
|
-
class=${y}
|
|
32
|
-
part="badge"
|
|
33
|
-
aria-label="${this.badge} notifications"
|
|
34
|
-
>
|
|
35
|
-
${this.badge}
|
|
36
|
-
</span>
|
|
37
|
-
`)}
|
|
38
|
-
`)}
|
|
39
|
-
|
|
40
|
-
<!-- Tooltip shown via title attribute -->
|
|
41
|
-
${u.when(this.hasAttribute("title"),()=>p.html`
|
|
42
|
-
<div class="
|
|
43
|
-
absolute left-[calc(100%+8px)] top-1/2 -translate-y-1/2
|
|
44
|
-
bg-surface-inverse text-surface-inverseOn
|
|
45
|
-
px-2 py-1 rounded-sm text-xs whitespace-nowrap
|
|
46
|
-
z-[1000] pointer-events-none opacity-0
|
|
47
|
-
hover:opacity-100 hover:translate-x-0
|
|
48
|
-
transition-all duration-150 ease-out
|
|
49
|
-
-translate-x-1
|
|
50
|
-
" aria-hidden="true">
|
|
51
|
-
${this.getAttribute("title")}
|
|
52
|
-
</div>
|
|
53
|
-
`)}
|
|
54
|
-
</div>
|
|
55
|
-
`}},o([s.property({type:String})],exports.SchmancyNavigationRailItem.prototype,"icon",2),o([s.property({type:String})],exports.SchmancyNavigationRailItem.prototype,"label",2),o([s.property({type:String})],exports.SchmancyNavigationRailItem.prototype,"value",2),o([s.property({type:Boolean,reflect:!0})],exports.SchmancyNavigationRailItem.prototype,"active",1),o([s.property({type:Boolean,reflect:!0})],exports.SchmancyNavigationRailItem.prototype,"selected",1),o([s.property({type:String})],exports.SchmancyNavigationRailItem.prototype,"badge",2),o([s.property({type:String})],exports.SchmancyNavigationRailItem.prototype,"badgeVariant",2),o([s.property({type:Boolean,attribute:"show-label"})],exports.SchmancyNavigationRailItem.prototype,"showLabel",2),o([s.property({type:Boolean,reflect:!0})],exports.SchmancyNavigationRailItem.prototype,"disabled",2),o([s.property({type:Boolean,reflect:!0})],exports.SchmancyNavigationRailItem.prototype,"nested",2),o([s.property({type:Boolean,reflect:!0})],exports.SchmancyNavigationRailItem.prototype,"group",2),o([s.state()],exports.SchmancyNavigationRailItem.prototype,"showRipple",2),exports.SchmancyNavigationRailItem=o([s.customElement("schmancy-navigation-rail-item")],exports.SchmancyNavigationRailItem);var x=Object.defineProperty,w=Object.getOwnPropertyDescriptor,h=(e,t,i,a)=>{for(var c,l=a>1?void 0:a?w(t,i):t,d=e.length-1;d>=0;d--)(c=e[d])&&(l=(a?c(t,i,l):c(l))||l);return a&&l&&x(t,i,l),l};exports.SchmancyNavigationRail=class extends b.$LitElement(){constructor(){super(...arguments),this.activeIndex$=new n.BehaviorSubject(-1),this._activeValue="",this.labelVisibility="all",this.alignment="top",this.showTooltips=!0,this.keyboardNavigation=!0,this.expanded=!1,this.focusedIndex=-1,this.isFullscreen=!1}get activeIndex(){return this.activeIndex$.value}set activeIndex(e){this.activeIndex$.next(e)}get activeValue(){return this._activeValue}set activeValue(e){this._activeValue=e,this.updateActiveByValue(e)}get navigationItems(){return this.allElements.filter(e=>e.tagName==="SCHMANCY-NAVIGATION-RAIL-ITEM")}connectedCallback(){super.connectedCallback(),this.keyboardNavigation&&this.addEventListener("keydown",this.handleKeyDown),this.activeIndex$.pipe(r.distinctUntilChanged(),r.tap(e=>this.updateActiveStates(e)),n.takeUntil(this.disconnecting)).subscribe(),n.fromEvent(window,"fullscreen").pipe(r.tap(e=>{const t=e;this.isFullscreen=t.detail}),n.takeUntil(this.disconnecting)).subscribe(),this.setupNavigateListener(),this.updateLabelVisibility(),this.setAttribute("role","navigation"),this.setAttribute("aria-label","Main navigation")}updated(e){super.updated(e),e.has("labelVisibility")&&this.updateLabelVisibility(),e.has("activeValue")&&this.updateActiveByValue(this.activeValue),e.has("expanded")&&this.updateLabelVisibility()}updateActiveStates(e){this.navigationItems.forEach((t,i)=>{const a=i===e;t.active=a,t.setAttribute("aria-selected",String(a)),t.setAttribute("tabindex",a?"0":"-1"),a&&(this._activeValue=t.value||t.label||"")})}updateActiveByValue(e){const t=this.navigationItems.findIndex(i=>i.getAttribute("value")===e||i.label===e);t>=0&&(this.activeIndex=t)}updateLabelVisibility(){this.navigationItems.forEach((e,t)=>{let i=!1;i=!!this.expanded||this.labelVisibility==="all"||this.labelVisibility==="selected"&&t===this.activeIndex,e.showLabel=i,this.showTooltips&&!i&&!this.expanded&&e.label?e.setAttribute("title",e.label):e.removeAttribute("title")})}expand(){this.expanded=!0}collapse(){this.expanded=!1}addBoatItem(e){const t=this.querySelector(`[value="${e.id}"]`);if(t)return t;const i=document.createElement("schmancy-navigation-rail-item");i.setAttribute("value",e.id),i.innerHTML=`
|
|
56
|
-
<schmancy-icon slot="icon">${e.icon||"widgets"}</schmancy-icon>
|
|
57
|
-
${e.title}
|
|
58
|
-
`;const a=this.querySelector('[slot="footer"]');return a?this.insertBefore(i,a):this.appendChild(i),i}toggle(){this.expanded=!this.expanded}handleKeyDown(e){const t=this.navigationItems;if(t.length===0)return;let i=this.focusedIndex>=0?this.focusedIndex:this.activeIndex;switch(e.key){case"ArrowDown":e.preventDefault(),i=(i+1)%t.length;break;case"ArrowUp":e.preventDefault(),i=i<=0?t.length-1:i-1;break;case"Home":e.preventDefault(),i=0;break;case"End":e.preventDefault(),i=t.length-1;break;case"Enter":case" ":return e.preventDefault(),void(i>=0&&t[i].click());default:return}this.focusedIndex=i,t[i].focus()}handleFabClick(e){e.stopPropagation(),this.dispatchEvent(new CustomEvent("fab-click",{bubbles:!0,composed:!0}))}handleMenuClick(e){e.stopPropagation(),this.dispatchEvent(new CustomEvent("menu-click",{bubbles:!0,composed:!0}))}render(){const e=this.classMap({"flex flex-col":!0,"h-full":!0,"box-border relative overflow-visible":!0,"z-10 hover:z-[100]":!0,"w-20":!this.isFullscreen,"w-0":this.isFullscreen,"transition-all duration-300 ease-emphasized":!0,"opacity-100":!this.isFullscreen,"opacity-0 pointer-events-none":this.isFullscreen,"overflow-hidden":this.isFullscreen}),t=this.classMap({"flex flex-col h-full":!0,"box-border relative":!0,"py-2":!0,"bg-surface-default text-surface-on":!0,"transition-all duration-300 ease-emphasized":!0,"w-20":!this.expanded,"px-3":!this.expanded,"w-60":this.expanded,"px-4":this.expanded,"shadow-lg":this.expanded}),i=this.classMap({"flex flex-col items-center gap-1 mb-2":!0,'[&_[slot="fab"]]:mb-2':!0,'[&_[slot="menu"]]:mb-3':!0}),a=this.classMap({"flex-1 flex flex-col gap-3":!0,"min-h-0":!0,"justify-start":this.alignment==="top","justify-center":this.alignment==="center","justify-end":this.alignment==="bottom"}),c=this.classMap({"flex flex-col items-center gap-1 mt-auto pt-2":!0});return p.html`
|
|
59
|
-
<div
|
|
60
|
-
class=${e}
|
|
61
|
-
>
|
|
62
|
-
<div class=${t} part="rail">
|
|
63
|
-
<div class=${i} part="header">
|
|
64
|
-
<slot name="fab" @click=${this.handleFabClick}></slot>
|
|
65
|
-
<slot name="menu" @click=${this.handleMenuClick}></slot>
|
|
66
|
-
<slot name="header"></slot>
|
|
67
|
-
</div>
|
|
68
|
-
|
|
69
|
-
<nav class=${a} part="nav" role="list">
|
|
70
|
-
<schmancy-scroll hide direction="vertical">
|
|
71
|
-
<slot @slotchange=${this.handleSlotChange}></slot>
|
|
72
|
-
</schmancy-scroll>
|
|
73
|
-
</nav>
|
|
74
|
-
|
|
75
|
-
<div class=${c} part="footer">
|
|
76
|
-
<slot name="footer"></slot>
|
|
77
|
-
</div>
|
|
78
|
-
</div>
|
|
79
|
-
</div>
|
|
80
|
-
`}setupNavigateListener(){this.addEventListener("navigate",e=>{if(e instanceof CustomEvent){const t=e.detail,i=this.navigationItems.findIndex(a=>a.value===t||a.label===t);i>=0&&(this.activeIndex=i,this._activeValue=t)}})}handleSlotChange(){this.updateLabelVisibility(),this.updateActiveStates(this.activeIndex),this.navigationItems.forEach((e,t)=>{e.setAttribute("role","listitem"),e.hasAttribute("tabindex")||e.setAttribute("tabindex",t===this.activeIndex?"0":"-1")})}},h([s.property({type:Number})],exports.SchmancyNavigationRail.prototype,"activeIndex",1),h([s.property({type:String})],exports.SchmancyNavigationRail.prototype,"activeValue",1),h([s.property({type:String,attribute:"label-visibility",reflect:!0})],exports.SchmancyNavigationRail.prototype,"labelVisibility",2),h([s.property({type:String,reflect:!0})],exports.SchmancyNavigationRail.prototype,"alignment",2),h([s.property({type:Boolean})],exports.SchmancyNavigationRail.prototype,"showTooltips",2),h([s.property({type:Boolean})],exports.SchmancyNavigationRail.prototype,"keyboardNavigation",2),h([s.property({type:Boolean,reflect:!0})],exports.SchmancyNavigationRail.prototype,"expanded",2),h([s.state()],exports.SchmancyNavigationRail.prototype,"focusedIndex",2),h([s.state()],exports.SchmancyNavigationRail.prototype,"isFullscreen",2),h([s.queryAssignedElements({flatten:!0})],exports.SchmancyNavigationRail.prototype,"allElements",2),exports.SchmancyNavigationRail=h([s.customElement("schmancy-navigation-rail")],exports.SchmancyNavigationRail);
|
|
81
|
-
//# sourceMappingURL=navigation-rail-DXr4NJnN.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"navigation-rail-DXr4NJnN.cjs","sources":["../src/navigation-rail/navigation-rail-item.ts","../src/navigation-rail/navigation-rail.ts"],"sourcesContent":["import { $LitElement } from '@mixins/index'\r\nimport { html, PropertyValues } from 'lit'\r\nimport { customElement, property, state } from 'lit/decorators.js'\r\nimport { when } from 'lit/directives/when.js'\r\nimport { BehaviorSubject, fromEvent, merge, takeUntil } from 'rxjs'\r\nimport { delay, distinctUntilChanged, tap } from 'rxjs/operators'\r\n\r\nexport type NavigationRailItemClickEvent = CustomEvent<{\r\n\ticon: string\r\n\tlabel: string\r\n\tvalue: string\r\n\tactive: boolean\r\n}>\r\n\r\n/**\r\n * Material Design 3 Navigation Rail Item Component\r\n * @see https://m3.material.io/components/navigation-rail/overview\r\n *\r\n * `<schmancy-navigation-rail-item>` component\r\n *\r\n * Individual navigation item for use within a navigation rail.\r\n * Represents a single destination or action with an icon and optional label.\r\n *\r\n * @element schmancy-navigation-rail-item\r\n * @slot icon - Slot for the navigation item icon (e.g., schmancy-icon)\r\n * @slot - Default slot for custom content\r\n * @slot badge - Custom badge content\r\n *\r\n * @fires navigate - When the item is clicked\r\n *\r\n * @csspart container - The main item container\r\n * @csspart indicator - The active indicator\r\n * @csspart icon - The icon container\r\n * @csspart label - The label text\r\n * @csspart badge - The badge element\r\n *\r\n * @example\r\n * <schmancy-navigation-rail-item\r\n * icon=\"home\"\r\n * label=\"Home\"\r\n * value=\"/home\"\r\n * badge=\"3\"\r\n * active>\r\n * </schmancy-navigation-rail-item>\r\n *\r\n * @example\r\n * <!-- Using 'selected' alias -->\r\n * <schmancy-navigation-rail-item\r\n * icon=\"settings\"\r\n * label=\"Settings\"\r\n * value=\"/settings\"\r\n * selected>\r\n * </schmancy-navigation-rail-item>\r\n *\r\n * @example\r\n * <!-- With custom icon -->\r\n * <schmancy-navigation-rail-item label=\"Dashboard\">\r\n * <schmancy-icon slot=\"icon\">dashboard</schmancy-icon>\r\n * </schmancy-navigation-rail-item>\r\n */\r\n@customElement('schmancy-navigation-rail-item')\r\nexport class SchmancyNavigationRailItem extends $LitElement() {\r\n\t// Observable state\r\n\tprivate hovering$ = new BehaviorSubject<boolean>(false)\r\n\tprivate pressing$ = new BehaviorSubject<boolean>(false)\r\n\tprivate active$ = new BehaviorSubject<boolean>(false)\r\n\r\n\t// Properties\r\n\t/**\r\n\t * Icon name (Material Symbols icon)\r\n\t */\r\n\t@property({ type: String })\r\n\ticon = ''\r\n\r\n\t/**\r\n\t * Label text for the navigation item\r\n\t */\r\n\t@property({ type: String })\r\n\tlabel = ''\r\n\r\n\t/**\r\n\t * Value associated with this item (useful for routing)\r\n\t */\r\n\t@property({ type: String })\r\n\tvalue = ''\r\n\r\n\t/**\r\n\t * Whether this item is currently active/selected\r\n\t * @default false\r\n\t */\r\n\t@property({ type: Boolean, reflect: true })\r\n\tget active() { return this.active$.value }\r\n\tset active(value: boolean) {\r\n\t\tthis.active$.next(value)\r\n\t}\r\n\r\n\t/**\r\n\t * Whether this item is currently selected (alias for active)\r\n\t * @default false\r\n\t */\r\n\t@property({ type: Boolean, reflect: true })\r\n\tget selected() { return this.active }\r\n\tset selected(value: boolean) { this.active = value }\r\n\r\n\t/**\r\n\t * Badge text or number to display\r\n\t */\r\n\t@property({ type: String })\r\n\tbadge = ''\r\n\r\n\t/**\r\n\t * Badge variant\r\n\t */\r\n\t@property({ type: String })\r\n\tbadgeVariant: 'error' | 'primary' | 'secondary' = 'error'\r\n\r\n\t/**\r\n\t * Whether to show the label (controlled by parent rail)\r\n\t * @default false\r\n\t */\r\n\t@property({ type: Boolean, attribute: 'show-label' })\r\n\tshowLabel = false\r\n\r\n\t/**\r\n\t * Whether this item is disabled\r\n\t * @default false\r\n\t */\r\n\t@property({ type: Boolean, reflect: true })\r\n\tdisabled = false\r\n\r\n\t/**\r\n\t * Whether this is a nested item (sub-navigation)\r\n\t * @default false\r\n\t */\r\n\t@property({ type: Boolean, reflect: true })\r\n\tnested = false\r\n\r\n\t/**\r\n\t * Whether this item represents a group separator\r\n\t * @default false\r\n\t */\r\n\t@property({ type: Boolean, reflect: true })\r\n\tgroup = false\r\n\r\n\t// State\r\n\t@state()\r\n\tprivate showRipple = false\r\n\r\n\r\n\tconnectedCallback() {\r\n\t\tsuper.connectedCallback()\r\n\r\n\t\t// Set up hover tracking\r\n\t\tmerge(\r\n\t\t\tfromEvent(this, 'mouseenter').pipe(tap(() => this.hovering$.next(true))),\r\n\t\t\tfromEvent(this, 'mouseleave').pipe(tap(() => this.hovering$.next(false)))\r\n\t\t).pipe(takeUntil(this.disconnecting)).subscribe()\r\n\r\n\t\t// Set up press tracking\r\n\t\tmerge(\r\n\t\t\tfromEvent(this, 'mousedown').pipe(tap(() => this.pressing$.next(true))),\r\n\t\t\tfromEvent(this, 'mouseup').pipe(tap(() => this.pressing$.next(false))),\r\n\t\t\tfromEvent(this, 'mouseleave').pipe(tap(() => this.pressing$.next(false)))\r\n\t\t).pipe(takeUntil(this.disconnecting)).subscribe()\r\n\r\n\r\n\t\t// Ripple effect with M3 timing\r\n\t\tthis.pressing$.pipe(\r\n\t\t\ttap(pressing => {\r\n\t\t\t\tif (pressing && !this.disabled) {\r\n\t\t\t\t\tthis.showRipple = true\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\t\t// M3 standard ripple duration\r\n\t\t\tdelay(600),\r\n\t\t\ttap(() => this.showRipple = false),\r\n\t\t\ttakeUntil(this.disconnecting)\r\n\t\t).subscribe()\r\n\r\n\t\t// Subscribe to active state changes for reactive updates\r\n\t\tthis.active$.pipe(\r\n\t\t\tdistinctUntilChanged(),\r\n\t\t\ttap((isActive) => {\r\n\t\t\t\tthis.requestUpdate()\r\n\t\t\t\t// Update ARIA attributes reactively\r\n\t\t\t\tthis.setAttribute('aria-selected', String(isActive))\r\n\t\t\t\tthis.setAttribute('tabindex', isActive ? '0' : '-1')\r\n\t\t\t}),\r\n\t\t\ttakeUntil(this.disconnecting)\r\n\t\t).subscribe()\r\n\r\n\t\t// Set ARIA attributes\r\n\t\tthis.setAttribute('role', 'listitem')\r\n\t\tif (!this.hasAttribute('tabindex')) {\r\n\t\t\tthis.setAttribute('tabindex', this.active ? '0' : '-1')\r\n\t\t}\r\n\t}\r\n\r\n\tupdated(changedProperties: PropertyValues) {\r\n\t\tsuper.updated(changedProperties)\r\n\r\n\t\t// Active state is now handled by the BehaviorSubject subscription\r\n\t\t// So we don't need to duplicate it here\r\n\r\n\t\tif (changedProperties.has('disabled')) {\r\n\t\t\tthis.setAttribute('aria-disabled', String(this.disabled))\r\n\t\t}\r\n\r\n\t\tif (changedProperties.has('label')) {\r\n\t\t\tthis.setAttribute('aria-label', this.label)\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handle click events\r\n\t */\r\n\tprivate handleClick(event: Event) {\r\n\t\tif (this.disabled) {\r\n\t\t\tevent.preventDefault()\r\n\t\t\tevent.stopPropagation()\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\t// Emit navigate event with the value\r\n\t\tthis.dispatchEvent(new CustomEvent('navigate', {\r\n\t\t\tdetail: this.value || this.label,\r\n\t\t\tbubbles: true,\r\n\t\t\tcomposed: true\r\n\t\t}))\r\n\r\n\t\t// Visual feedback is handled by the ripple effect in connectedCallback\r\n\t\t// The parent rail will confirm and update via activeIndex\r\n\t}\r\n\r\n\t/**\r\n\t * Handle keyboard events\r\n\t */\r\n\tprivate handleKeyDown(event: KeyboardEvent) {\r\n\t\tif (this.disabled) return\r\n\r\n\t\tif (event.key === 'Enter' || event.key === ' ') {\r\n\t\t\tevent.preventDefault()\r\n\t\t\tthis.click()\r\n\t\t}\r\n\t}\r\n\r\n\tprotected render() {\r\n\t\tconst hasCustomIcon = this.querySelector('[slot=\"icon\"]')\r\n\t\tconst hasCustomContent = this.querySelector(':not([slot])')\r\n\t\tconst hasCustomBadge = this.querySelector('[slot=\"badge\"]')\r\n\r\n\t\t// M3 Navigation Rail Item classes with theme integration\r\n\t\tconst containerClasses = this.classMap({\r\n\t\t\t// Layout & Spacing (M3 56px height, 12px vertical padding)\r\n\t\t\t'flex flex-col items-center justify-center': true,\r\n\t\t\t'min-h-14 w-full': true, // min-h-14 = 56px\r\n\t\t\t'py-3': true, // py-3 = 12px top/bottom\r\n\t\t\t'gap-1': true, // gap-1 = 4px\r\n\r\n\t\t\t// M3 Shape & Interaction\r\n\t\t\t'rounded-lg': true, // M3 large corner radius\r\n\t\t\t'cursor-pointer': true,\r\n\t\t\t'relative': true,\r\n\t\t\t'select-none': true,\r\n\t\t\t'box-border': true,\r\n\r\n\t\t\t// Colors & States\r\n\t\t\t'text-surface-onVariant': !this.active,\r\n\t\t\t'text-secondary-onContainer': this.active,\r\n\t\t\t'hover:bg-surface-containerHighest': true,\r\n\r\n\t\t\t// Transitions (M3 emphasized motion)\r\n\t\t\t'transition-all duration-150 ease-out': true,\r\n\r\n\t\t\t// Disabled state\r\n\t\t\t'pointer-events-none opacity-38': this.disabled,\r\n\r\n\t\t\t// Active ripple effect\r\n\t\t\t'[&>.ripple]:scale-100': this.showRipple,\r\n\r\n\t\t\t// Nested item adjustments\r\n\t\t\t'min-h-12 pl-8': this.nested, // 48px height, 32px left padding for nested\r\n\r\n\t\t\t// Group separator\r\n\t\t\t'mb-2 after:absolute after:bottom-[-4px] after:left-3 after:right-3 after:h-px after:bg-outline-variant after:opacity-12': this.group,\r\n\t\t})\r\n\r\n\t\t// Icon container with active indicator\r\n\t\tconst iconContainerClasses = this.classMap({\r\n\t\t\t'flex items-center justify-center': true,\r\n\t\t\t'w-auto min-w-14 h-8': true, // 56px min-width, 32px height\r\n\t\t\t'flex-shrink-0 relative z-10': true,\r\n\t\t})\r\n\r\n\t\t// Active indicator behind icon\r\n\t\tconst indicatorClasses = this.classMap({\r\n\t\t\t'absolute top-1/2 left-1/2 opacity-50': true,\r\n\t\t\t'w-14 h-8': true, // 56px x 32px\r\n\t\t\t'rounded-lg': true, // M3 large corner radius\r\n\t\t\t'bg-secondary-container': true,\r\n\t\t\t'transition-transform duration-150 ease-out': true,\r\n\t\t\t'z-0': true,\r\n\t\t\t// Transform based on active state\r\n\t\t\t'scale-0 -translate-x-1/2 -translate-y-1/2': !this.active,\r\n\t\t\t'scale-100 -translate-x-1/2 -translate-y-1/2': this.active,\r\n\t\t})\r\n\r\n\t\t// Icon styling\r\n\t\tconst iconClasses = this.classMap({\r\n\t\t\t'text-2xl leading-none': !this.nested, // 24px icon for normal\r\n\t\t\t'text-xl leading-none': this.nested, // 20px icon for nested\r\n\t\t\t'relative z-10': true,\r\n\t\t\t// Material Symbols font variations handled via CSS custom properties\r\n\t\t})\r\n\r\n\t\t// Label styling\r\n\t\tconst labelClasses = this.classMap({\r\n\t\t\t'text-xs font-medium leading-4': true, // 12px, medium weight, 16px line height\r\n\t\t\t'text-center': true,\r\n\t\t\t'overflow-hidden text-ellipsis whitespace-nowrap': true,\r\n\t\t\t'z-10 max-w-14 px-1': true, // max 56px width, 4px horizontal padding\r\n\t\t\t'hidden': !this.showLabel && !this.label, // Hide if not shown or no label\r\n\t\t})\r\n\r\n\t\t// Badge styling with dynamic colors\r\n\t\tconst badgeClasses = this.classMap({\r\n\t\t\t'absolute top-2 right-3': true, // 8px from top, 12px from right\r\n\t\t\t'min-w-4 h-4': true, // 16px min-width and height\r\n\t\t\t'rounded-sm': true, // M3 small corner radius\r\n\t\t\t'text-xs font-semibold': true, // 11px, 600 weight\r\n\t\t\t'flex items-center justify-center': true,\r\n\t\t\t'px-1 box-border z-20': true, // 4px padding\r\n\t\t\t'animate-pulse': true, // Pulse animation\r\n\t\t\t// Dynamic background based on variant\r\n\t\t\t'bg-error-default text-error-on': this.badgeVariant === 'error',\r\n\t\t\t'bg-primary-default text-primary-on': this.badgeVariant === 'primary',\r\n\t\t\t'bg-secondary-default text-secondary-on': this.badgeVariant === 'secondary',\r\n\t\t})\r\n\r\n\t\t// Ripple effect classes\r\n\t\tconst rippleClasses = this.classMap({\r\n\t\t\t'absolute inset-0 rounded-lg overflow-hidden z-0': true,\r\n\t\t\t'before:content-[\"\"] before:absolute before:top-1/2 before:left-1/2': true,\r\n\t\t\t'before:w-0 before:h-0 before:rounded-full': true,\r\n\t\t\t'before:bg-current before:opacity-0': true,\r\n\t\t\t'before:-translate-x-1/2 before:-translate-y-1/2': true,\r\n\t\t\t'before:transition-all before:duration-300': true,\r\n\t\t\t// Active state\r\n\t\t\t'before:w-[200%] before:h-[200%] before:opacity-12': this.showRipple,\r\n\t\t})\r\n\r\n\t\treturn html`\r\n\t\t\t<div\r\n\t\t\t\tclass=${containerClasses}\r\n\t\t\t\tpart=\"container\"\r\n\t\t\t\t@click=${this.handleClick}\r\n\t\t\t\t@keydown=${this.handleKeyDown}\r\n\t\t\t\tstyle=\"outline: ${this.matches(':focus-visible') ? '2px solid var(--schmancy-sys-color-primary-default)' : 'none'}; outline-offset: 2px;\"\r\n\t\t\t>\r\n\t\t\t\t<span class=${rippleClasses} aria-hidden=\"true\"></span>\r\n\r\n\t\t\t\t${when(hasCustomContent,\r\n\t\t\t\t\t() => html`<slot></slot>`,\r\n\t\t\t\t\t() => html`\r\n\t\t\t\t\t\t<div class=${iconContainerClasses} part=\"icon\">\r\n\t\t\t\t\t\t\t<span class=${indicatorClasses} part=\"indicator\" aria-hidden=\"true\"></span>\r\n\t\t\t\t\t\t\t${when(hasCustomIcon,\r\n\t\t\t\t\t\t\t\t() => html`<slot name=\"icon\"></slot>`,\r\n\t\t\t\t\t\t\t\t() => when(this.icon,\r\n\t\t\t\t\t\t\t\t\t() => html`\r\n\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\tclass=${iconClasses}\r\n\t\t\t\t\t\t\t\t\t\t\tpart=\"icon-text\"\r\n\t\t\t\t\t\t\t\t\t\t\tstyle=\"font-family: 'Material Symbols Outlined'; font-variation-settings: 'FILL' ${this.active ? '1' : '0'}, 'wght' 400, 'GRAD' 0, 'opsz' ${this.nested ? '20' : '24'};\"\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t\t${this.icon}\r\n\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t`\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t${when(this.label,\r\n\t\t\t\t\t\t\t() => html`<span class=${labelClasses} part=\"label\">${this.label}</span>`\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t`\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t${when(this.badge,\r\n\t\t\t\t\t() => html`\r\n\t\t\t\t\t\t${when(hasCustomBadge,\r\n\t\t\t\t\t\t\t() => html`<slot name=\"badge\"></slot>`,\r\n\t\t\t\t\t\t\t() => html`\r\n\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\tclass=${badgeClasses}\r\n\t\t\t\t\t\t\t\t\tpart=\"badge\"\r\n\t\t\t\t\t\t\t\t\taria-label=\"${this.badge} notifications\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t${this.badge}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t`\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t`\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t<!-- Tooltip shown via title attribute -->\r\n\t\t\t\t${when(this.hasAttribute('title'),\r\n\t\t\t\t\t() => html`\r\n\t\t\t\t\t\t<div class=\"\r\n\t\t\t\t\t\t\tabsolute left-[calc(100%+8px)] top-1/2 -translate-y-1/2\r\n\t\t\t\t\t\t\tbg-surface-inverse text-surface-inverseOn\r\n\t\t\t\t\t\t\tpx-2 py-1 rounded-sm text-xs whitespace-nowrap\r\n\t\t\t\t\t\t\tz-[1000] pointer-events-none opacity-0\r\n\t\t\t\t\t\t\thover:opacity-100 hover:translate-x-0\r\n\t\t\t\t\t\t\ttransition-all duration-150 ease-out\r\n\t\t\t\t\t\t\t-translate-x-1\r\n\t\t\t\t\t\t\" aria-hidden=\"true\">\r\n\t\t\t\t\t\t\t${this.getAttribute('title')}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t`\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\t\t`\r\n\t}\r\n}\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'schmancy-navigation-rail-item': SchmancyNavigationRailItem\r\n\t}\r\n}","import { $LitElement } from '@mixins/index'\r\nimport { html, PropertyValues } from 'lit'\r\nimport { customElement, property, queryAssignedElements, state } from 'lit/decorators.js'\r\nimport { BehaviorSubject, fromEvent, takeUntil } from 'rxjs'\r\nimport { distinctUntilChanged, tap } from 'rxjs/operators'\r\nimport { SchmancyNavigationRailItem } from './navigation-rail-item'\r\n\r\nexport type NavigateEvent = CustomEvent<string>\r\n\r\nexport type NavigationRailMenuClickEvent = CustomEvent<void>\r\n\r\nexport type NavigationRailFabClickEvent = CustomEvent<void>\r\n\r\n\r\nexport type LabelVisibility = 'all' | 'selected' | 'none'\r\n\r\n/**\r\n * Material Design 3 Navigation Rail Component\r\n * @see https://m3.material.io/components/navigation-rail/overview\r\n *\r\n * `<schmancy-navigation-rail>` component\r\n *\r\n * A Material Design 3 vertical navigation component positioned on the left side of an application.\r\n * Navigation rails provide access to between 3-7 primary destinations with a compact footprint.\r\n * Automatically hides in fullscreen mode when triggered via schmancyTheme.next({ fullscreen: true }).\r\n *\r\n * @element schmancy-navigation-rail\r\n * @slot fab - Slot for a floating action button at the top\r\n * @slot menu - Slot for a menu icon or button below the FAB\r\n * @slot header - Custom header content slot\r\n * @slot footer - Custom footer content slot\r\n * @slot - Default slot for navigation rail items\r\n *\r\n * @fires navigate - When a navigation item is selected\r\n * @fires menu-click - When the menu button is clicked\r\n * @fires fab-click - When the FAB is clicked\r\n *\r\n * @csspart rail - The main rail container\r\n * @csspart header - The header section\r\n * @csspart nav - The navigation items container\r\n * @csspart footer - The footer section\r\n *\r\n * @example\r\n * <schmancy-navigation-rail activeIndex=\"0\">\r\n * <schmancy-button slot=\"fab\" variant=\"filled\" aria-label=\"Compose\">\r\n * <schmancy-icon>add</schmancy-icon>\r\n * </schmancy-button>\r\n * <schmancy-button slot=\"menu\" variant=\"text\" aria-label=\"Menu\">\r\n * <schmancy-icon>menu</schmancy-icon>\r\n * </schmancy-button>\r\n * <schmancy-navigation-rail-item icon=\"home\" label=\"Home\"></schmancy-navigation-rail-item>\r\n * <schmancy-navigation-rail-item icon=\"search\" label=\"Search\"></schmancy-navigation-rail-item>\r\n * <schmancy-navigation-rail-item icon=\"favorite\" label=\"Favorites\" badge=\"3\"></schmancy-navigation-rail-item>\r\n * <schmancy-navigation-rail-item icon=\"settings\" label=\"Settings\"></schmancy-navigation-rail-item>\r\n * </schmancy-navigation-rail>\r\n */\r\n@customElement('schmancy-navigation-rail')\r\nexport class SchmancyNavigationRail extends $LitElement() {\r\n\t// Observable state\r\n\tprivate activeIndex$ = new BehaviorSubject<number>(-1)\r\n\r\n\t// Properties\r\n\t/**\r\n\t * The currently active item index\r\n\t * @default -1\r\n\t */\r\n\t@property({ type: Number })\r\n\tget activeIndex() {\r\n\t\treturn this.activeIndex$.value\r\n\t}\r\n\tset activeIndex(value: number) {\r\n\t\tthis.activeIndex$.next(value)\r\n\t}\r\n\r\n\t/**\r\n\t * The currently active item value (for programmatic selection)\r\n\t */\r\n\t@property({ type: String })\r\n\tget activeValue() {\r\n\t\treturn this._activeValue\r\n\t}\r\n\tset activeValue(value: string) {\r\n\t\tthis._activeValue = value\r\n\t\tthis.updateActiveByValue(value)\r\n\t}\r\n\tprivate _activeValue = ''\r\n\r\n\t/**\r\n\t * When to show labels for navigation items\r\n\t * 'all' - Always show labels for all items\r\n\t * 'selected' - Only show label for selected item\r\n\t * 'none' - Never show labels\r\n\t * @default 'all'\r\n\t */\r\n\t@property({ type: String, attribute: 'label-visibility', reflect: true })\r\n\tlabelVisibility: LabelVisibility = 'all'\r\n\r\n\t/**\r\n\t * Alignment of navigation items\r\n\t * @default 'top'\r\n\t */\r\n\t@property({ type: String, reflect: true })\r\n\talignment: 'top' | 'center' | 'bottom' = 'top'\r\n\r\n\t/**\r\n\t * Show tooltips when labels are hidden\r\n\t * @default true\r\n\t */\r\n\t@property({ type: Boolean })\r\n\tshowTooltips = true\r\n\r\n\t/**\r\n\t * Enable keyboard navigation\r\n\t * @default true\r\n\t */\r\n\t@property({ type: Boolean })\r\n\tkeyboardNavigation = true\r\n\r\n\t/**\r\n\t * Whether the navigation rail is expanded\r\n\t * @default false\r\n\t */\r\n\t@property({ type: Boolean, reflect: true })\r\n\texpanded = false\r\n\r\n\r\n\t// State\r\n\t@state()\r\n\tprivate focusedIndex = -1\r\n\r\n\t@state()\r\n\tprivate isFullscreen = false\r\n\r\n\t// Queries\r\n\r\n\t@queryAssignedElements({ flatten: true })\r\n\tprivate allElements!: Element[]\r\n\r\n\tprivate get navigationItems(): SchmancyNavigationRailItem[] {\r\n\t\treturn this.allElements.filter(el => el.tagName === 'SCHMANCY-NAVIGATION-RAIL-ITEM') as SchmancyNavigationRailItem[]\r\n\t}\r\n\r\n\tconnectedCallback() {\r\n\t\tsuper.connectedCallback()\r\n\r\n\t\t// Set up keyboard navigation if enabled\r\n\t\tif (this.keyboardNavigation) {\r\n\t\t\tthis.addEventListener('keydown', this.handleKeyDown)\r\n\t\t}\r\n\r\n\t\t// Subscribe to active index changes with distinct values only\r\n\t\tthis.activeIndex$\r\n\t\t\t.pipe(\r\n\t\t\t\tdistinctUntilChanged(),\r\n\t\t\t\ttap(index => this.updateActiveStates(index)),\r\n\t\t\t\ttakeUntil(this.disconnecting),\r\n\t\t\t)\r\n\t\t\t.subscribe()\r\n\r\n\t\t// Listen to fullscreen events\r\n\t\tfromEvent(window, 'fullscreen').pipe(\r\n\t\t\ttap((event: Event) => {\r\n\t\t\t\tconst customEvent = event as CustomEvent\r\n\t\t\t\tthis.isFullscreen = customEvent.detail\r\n\t\t\t}),\r\n\t\t\ttakeUntil(this.disconnecting)\r\n\t\t).subscribe()\r\n\r\n\t\t// Listen for navigate events from child items\r\n\t\tthis.setupNavigateListener()\r\n\r\n\t\t// Set up label visibility\r\n\t\tthis.updateLabelVisibility()\r\n\r\n\t\t// Update ARIA attributes\r\n\t\tthis.setAttribute('role', 'navigation')\r\n\t\tthis.setAttribute('aria-label', 'Main navigation')\r\n\t}\r\n\r\n\tupdated(changedProperties: PropertyValues) {\r\n\t\tsuper.updated(changedProperties)\r\n\r\n\t\tif (changedProperties.has('labelVisibility')) {\r\n\t\t\tthis.updateLabelVisibility()\r\n\t\t}\r\n\r\n\t\tif (changedProperties.has('activeValue')) {\r\n\t\t\tthis.updateActiveByValue(this.activeValue)\r\n\t\t}\r\n\r\n\t\tif (changedProperties.has('expanded')) {\r\n\t\t\tthis.updateLabelVisibility()\r\n\t\t}\r\n\t}\r\n\r\n\tprivate updateActiveStates(index: number) {\r\n\t\tthis.navigationItems.forEach((item, i) => {\r\n\t\t\tconst isActive = i === index\r\n\t\t\titem.active = isActive\r\n\t\t\titem.setAttribute('aria-selected', String(isActive))\r\n\t\t\titem.setAttribute('tabindex', isActive ? '0' : '-1')\r\n\r\n\t\t\t// Update activeValue when index changes\r\n\t\t\tif (isActive) {\r\n\t\t\t\tthis._activeValue = item.value || item.label || ''\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tprivate updateActiveByValue(value: string) {\r\n\t\tconst index = this.navigationItems.findIndex(item => item.getAttribute('value') === value || item.label === value)\r\n\t\tif (index >= 0) {\r\n\t\t\tthis.activeIndex = index\r\n\t\t}\r\n\t}\r\n\r\n\tprivate updateLabelVisibility() {\r\n\t\tthis.navigationItems.forEach((item, i) => {\r\n\t\t\tlet shouldShowLabel = false\r\n\r\n\t\t\t// M3 Spec: In expanded state, always show all labels\r\n\t\t\tif (this.expanded) {\r\n\t\t\t\tshouldShowLabel = true\r\n\t\t\t} else {\r\n\t\t\t\t// In collapsed state, respect labelVisibility setting\r\n\t\t\t\tshouldShowLabel =\r\n\t\t\t\t\tthis.labelVisibility === 'all' || (this.labelVisibility === 'selected' && i === this.activeIndex)\r\n\t\t\t}\r\n\r\n\t\t\titem.showLabel = shouldShowLabel\r\n\r\n\t\t\t// Add tooltips when labels are hidden (only in collapsed state)\r\n\t\t\tif (this.showTooltips && !shouldShowLabel && !this.expanded && item.label) {\r\n\t\t\t\titem.setAttribute('title', item.label)\r\n\t\t\t} else {\r\n\t\t\t\titem.removeAttribute('title')\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\t// Note: Hover-based label showing removed for M3 compliance\r\n\t// Labels are now controlled via labelVisibility property and expanded state\r\n\r\n\t/**\r\n\t * Programmatically expand the navigation rail\r\n\t */\r\n\texpand() {\r\n\t\tthis.expanded = true\r\n\t}\r\n\r\n\t/**\r\n\t * Programmatically collapse the navigation rail\r\n\t */\r\n\tcollapse() {\r\n\t\tthis.expanded = false\r\n\t}\r\n\r\n\t/**\r\n\t * Add a boat item to the navigation rail\r\n\t * @param config Configuration for the boat item\r\n\t * @returns The created or existing navigation rail item element\r\n\t */\r\n\tpublic addBoatItem(config: { id: string; title: string; icon?: string }) {\r\n\t\t// Check if item already exists\r\n\t\tconst existingItem = this.querySelector(`[value=\"${config.id}\"]`) as HTMLElement\r\n\t\tif (existingItem) {\r\n\t\t\t// Item already exists, just return it\r\n\t\t\treturn existingItem\r\n\t\t}\r\n\r\n\t\t// Create new item\r\n\t\tconst item = document.createElement('schmancy-navigation-rail-item')\r\n\t\titem.setAttribute('value', config.id)\r\n\t\titem.innerHTML = `\r\n\t\t\t<schmancy-icon slot=\"icon\">${config.icon || 'widgets'}</schmancy-icon>\r\n\t\t\t${config.title}\r\n\t\t`\r\n\t\t// Add to the rail before any footer content\r\n\t\tconst footer = this.querySelector('[slot=\"footer\"]')\r\n\t\tif (footer) {\r\n\t\t\tthis.insertBefore(item, footer)\r\n\t\t} else {\r\n\t\t\tthis.appendChild(item)\r\n\t\t}\r\n\t\treturn item\r\n\t}\r\n\r\n\t/**\r\n\t * Toggle the navigation rail between expanded and collapsed states\r\n\t */\r\n\ttoggle() {\r\n\t\tthis.expanded = !this.expanded\r\n\t}\r\n\r\n\r\n\tprivate handleKeyDown(event: KeyboardEvent) {\r\n\t\tconst items = this.navigationItems\r\n\t\tif (items.length === 0) return\r\n\r\n\t\tlet newIndex = this.focusedIndex >= 0 ? this.focusedIndex : this.activeIndex\r\n\r\n\t\tswitch (event.key) {\r\n\t\t\tcase 'ArrowDown':\r\n\t\t\t\tevent.preventDefault()\r\n\t\t\t\tnewIndex = (newIndex + 1) % items.length\r\n\t\t\t\tbreak\r\n\t\t\tcase 'ArrowUp':\r\n\t\t\t\tevent.preventDefault()\r\n\t\t\t\tnewIndex = newIndex <= 0 ? items.length - 1 : newIndex - 1\r\n\t\t\t\tbreak\r\n\t\t\tcase 'Home':\r\n\t\t\t\tevent.preventDefault()\r\n\t\t\t\tnewIndex = 0\r\n\t\t\t\tbreak\r\n\t\t\tcase 'End':\r\n\t\t\t\tevent.preventDefault()\r\n\t\t\t\tnewIndex = items.length - 1\r\n\t\t\t\tbreak\r\n\t\t\tcase 'Enter':\r\n\t\t\tcase ' ':\r\n\t\t\t\tevent.preventDefault()\r\n\t\t\t\tif (newIndex >= 0) {\r\n\t\t\t\t\titems[newIndex].click()\r\n\t\t\t\t}\r\n\t\t\t\treturn\r\n\t\t\tdefault:\r\n\t\t\t\treturn\r\n\t\t}\r\n\r\n\t\tthis.focusedIndex = newIndex\r\n\t\titems[newIndex].focus()\r\n\t}\r\n\r\n\tprivate handleFabClick(event: Event) {\r\n\t\tevent.stopPropagation()\r\n\t\tthis.dispatchEvent(\r\n\t\t\tnew CustomEvent('fab-click', {\r\n\t\t\t\tbubbles: true,\r\n\t\t\t\tcomposed: true,\r\n\t\t\t}),\r\n\t\t)\r\n\t}\r\n\r\n\tprivate handleMenuClick(event: Event) {\r\n\t\tevent.stopPropagation()\r\n\t\tthis.dispatchEvent(\r\n\t\t\tnew CustomEvent('menu-click', {\r\n\t\t\t\tbubbles: true,\r\n\t\t\t\tcomposed: true,\r\n\t\t\t}),\r\n\t\t)\r\n\t}\r\n\r\n\tprotected render() {\r\n\t\t// Host-level classes for the navigation rail\r\n\t\tconst hostClasses = this.classMap({\r\n\t\t\t// Layout & Structure - Fixed width to prevent layout shift\r\n\t\t\t'flex flex-col': true,\r\n\t\t\t'h-full': true,\r\n\t\t\t'box-border relative overflow-visible': true,\r\n\t\t\t'z-10 hover:z-[100]': true, // Base z-index, elevated on hover for overlay\r\n\r\n\t\t\t// Width - collapses to 0 when fullscreen\r\n\t\t\t'w-20': !this.isFullscreen, // w-20 = 80px fixed width (M3 spec: 80dp)\r\n\t\t\t'w-0': this.isFullscreen, // Collapse width to 0 in fullscreen\r\n\r\n\t\t\t// Visibility and transition\r\n\t\t\t'transition-all duration-300 ease-emphasized': true,\r\n\t\t\t'opacity-100': !this.isFullscreen,\r\n\t\t\t'opacity-0 pointer-events-none': this.isFullscreen,\r\n\t\t\t'overflow-hidden': this.isFullscreen, // Hide overflow when collapsed\r\n\t\t})\r\n\r\n\t\t// Rail container - programmatically controlled width\r\n\t\tconst railClasses = this.classMap({\r\n\t\t\t// Layout & Structure\r\n\t\t\t'flex flex-col h-full': true,\r\n\t\t\t'box-border relative': true,\r\n\t\t\t'py-2': true,\r\n\r\n\r\n\t\t\t// M3 Colors & Theme\r\n\t\t\t'bg-surface-default text-surface-on': true,\r\n\r\n\t\t\t// M3 Motion - smooth transitions for width and shadow\r\n\t\t\t'transition-all duration-300 ease-emphasized': true,\r\n\r\n\t\t\t// Collapsed state (default) - M3 standard 80px width\r\n\t\t\t'w-20': !this.expanded, // w-20 = 80px (M3 spec: 80dp)\r\n\t\t\t'px-3': !this.expanded, // px-3 = 12px (M3 spec: 12px to center 56px items)\r\n\r\n\t\t\t// Expanded state - M3 expanded width with shadow\r\n\t\t\t'w-60': this.expanded, // w-60 = 240px expanded width\r\n\t\t\t'px-4': this.expanded, // Larger padding when expanded\r\n\t\t\t'shadow-lg': this.expanded, // M3 elevation 3 shadow when expanded\r\n\t\t})\r\n\r\n\t\t// Header section classes\r\n\t\tconst headerClasses = this.classMap({\r\n\t\t\t'flex flex-col items-center gap-1 mb-2': true,\r\n\t\t\t// FAB and menu button spacing\r\n\t\t\t'[&_[slot=\"fab\"]]:mb-2': true,\r\n\t\t\t'[&_[slot=\"menu\"]]:mb-3': true,\r\n\t\t})\r\n\r\n\t\t// Navigation container classes with alignment\r\n\t\tconst navClasses = this.classMap({\r\n\t\t\t'flex-1 flex flex-col gap-3': true, // gap-3 = 12px (M3 spec: 12px item spacing)\r\n\t\t\t'min-h-0': true, // Allow flex shrinking and proper scroll container height calculation\r\n\t\t\t// Alignment variants\r\n\t\t\t'justify-start': this.alignment === 'top',\r\n\t\t\t'justify-center': this.alignment === 'center',\r\n\t\t\t'justify-end': this.alignment === 'bottom',\r\n\t\t})\r\n\r\n\t\t// Footer section classes\r\n\t\tconst footerClasses = this.classMap({\r\n\t\t\t'flex flex-col items-center gap-1 mt-auto pt-2': true,\r\n\t\t})\r\n\r\n\t\treturn html`\r\n\t\t\t<div\r\n\t\t\t\tclass=${hostClasses}\r\n\t\t\t>\r\n\t\t\t\t<div class=${railClasses} part=\"rail\">\r\n\t\t\t\t\t<div class=${headerClasses} part=\"header\">\r\n\t\t\t\t\t\t<slot name=\"fab\" @click=${this.handleFabClick}></slot>\r\n\t\t\t\t\t\t<slot name=\"menu\" @click=${this.handleMenuClick}></slot>\r\n\t\t\t\t\t\t<slot name=\"header\"></slot>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<nav class=${navClasses} part=\"nav\" role=\"list\">\r\n\t\t\t\t\t\t<schmancy-scroll hide direction=\"vertical\">\r\n\t\t\t\t\t\t\t<slot @slotchange=${this.handleSlotChange}></slot>\r\n\t\t\t\t\t\t</schmancy-scroll>\r\n\t\t\t\t\t</nav>\r\n\r\n\t\t\t\t\t<div class=${footerClasses} part=\"footer\">\r\n\t\t\t\t\t\t<slot name=\"footer\"></slot>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t`\r\n\t}\r\n\r\n\tprivate setupNavigateListener() {\r\n\t\t// Listen for navigate events from child items\r\n\t\tthis.addEventListener('navigate', (e: Event) => {\r\n\t\t\tif (e instanceof CustomEvent) {\r\n\t\t\t\tconst value = e.detail\r\n\t\t\t\t// Find the item that dispatched the event and update active state\r\n\t\t\t\tconst itemIndex = this.navigationItems.findIndex(item => item.value === value || item.label === value)\r\n\t\t\t\tif (itemIndex >= 0) {\r\n\t\t\t\t\tthis.activeIndex = itemIndex\r\n\t\t\t\t\tthis._activeValue = value\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tprivate handleSlotChange() {\r\n\t\t// Update items when slot content changes\r\n\t\tthis.updateLabelVisibility()\r\n\t\tthis.updateActiveStates(this.activeIndex)\r\n\r\n\t\t// Set ARIA attributes on items\r\n\t\tthis.navigationItems.forEach((item, index) => {\r\n\t\t\titem.setAttribute('role', 'listitem')\r\n\t\t\tif (!item.hasAttribute('tabindex')) {\r\n\t\t\t\titem.setAttribute('tabindex', index === this.activeIndex ? '0' : '-1')\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n}\r\n\r\ndeclare global {\r\n\tinterface HTMLElementTagNameMap {\r\n\t\t'schmancy-navigation-rail': SchmancyNavigationRail\r\n\t}\r\n}\r\n"],"names":["SchmancyNavigationRailItem","$LitElement","constructor","super","arguments","this","hovering$","BehaviorSubject","pressing$","active$","icon","label","value","badge","badgeVariant","showLabel","disabled","nested","group","showRipple","active","next","selected","connectedCallback","merge","fromEvent","pipe","tap","takeUntil","disconnecting","subscribe","pressing","delay","distinctUntilChanged","isActive","requestUpdate","setAttribute","String","hasAttribute","changedProperties","updated","has","event","preventDefault","stopPropagation","dispatchEvent","CustomEvent","detail","bubbles","composed","key","click","render","hasCustomIcon","querySelector","hasCustomContent","hasCustomBadge","containerClasses","classMap","relative","iconContainerClasses","indicatorClasses","iconClasses","labelClasses","hidden","badgeClasses","rippleClasses","html","handleClick","handleKeyDown","matches","when","getAttribute","__decorateClass","property","type","prototype","Boolean","reflect","attribute","state","customElement","SchmancyNavigationRail","activeIndex$","_activeValue","labelVisibility","alignment","showTooltips","keyboardNavigation","expanded","focusedIndex","isFullscreen","updateActiveByValue","navigationItems","allElements","filter","el","tagName","addEventListener","index","updateActiveStates","window","customEvent","setupNavigateListener","updateLabelVisibility","activeValue","forEach","item","i","findIndex","activeIndex","shouldShowLabel","removeAttribute","expand","collapse","config","existingItem","id","document","createElement","innerHTML","title","footer","insertBefore","appendChild","toggle","items","length","newIndex","focus","hostClasses","railClasses","headerClasses","navClasses","footerClasses","handleFabClick","handleMenuClick","handleSlotChange","e","itemIndex","Number","queryAssignedElements","flatten"],"mappings":"qgBA6DaA,QAAAA,2BAAN,cAAyCC,EAAAA,YAAAA,CAAAA,CAAzC,aAAAC,CAAAC,MAAAA,GAAAC,SAAAA,EAENC,KAAQC,UAAY,IAAIC,EAAAA,gBAAAA,EAAyB,EACjDF,KAAQG,UAAY,IAAID,EAAAA,kBAAyB,EACjDF,KAAQI,QAAU,IAAIF,EAAAA,gBAAAA,EAAyB,EAO/CF,KAAAK,KAAO,GAMPL,KAAAM,MAAQ,GAMRN,KAAAO,MAAQ,GAwBRP,KAAAQ,MAAQ,GAMRR,KAAAS,aAAkD,QAOlDT,KAAAU,UAAAA,GAOAV,KAAAW,SAAAA,GAOAX,KAAAY,OAAAA,GAOAZ,KAAAa,MAAAA,GAIAb,KAAQc,WAAAA,EAAa,CAvDrB,IAAA,QAAIC,CAAW,OAAOf,KAAKI,QAAQG,KAAM,CACzC,IAAA,OAAWA,EAAAA,CACVP,KAAKI,QAAQY,KAAKT,EACnB,CAOA,IAAA,UAAIU,CAAa,OAAOjB,KAAKe,MAAO,CACpC,IAAA,SAAaR,EAAAA,CAAkBP,KAAKe,OAASR,CAAM,CA+CnD,mBAAAW,CACCpB,MAAMoB,kBAAAA,EAGNC,EAAAA,MACCC,EAAAA,UAAUpB,KAAM,YAAA,EAAcqB,KAAKC,EAAAA,IAAI,IAAMtB,KAAKC,UAAUe,KAAAA,EAAK,CAAA,CAAA,EACjEI,EAAAA,UAAUpB,KAAM,YAAA,EAAcqB,KAAKC,EAAAA,IAAI,IAAMtB,KAAKC,UAAUe,OAAK,CAAA,CAAA,CAAA,EAChEK,KAAKE,EAAAA,UAAUvB,KAAKwB,aAAAA,CAAAA,EAAgBC,UAAAA,EAGtCN,EAAAA,MACCC,EAAAA,UAAUpB,KAAM,WAAA,EAAaqB,KAAKC,EAAAA,IAAI,IAAMtB,KAAKG,UAAUa,KAAAA,EAAK,CAAA,CAAA,EAChEI,EAAAA,UAAUpB,KAAM,SAAA,EAAWqB,KAAKC,EAAAA,IAAI,IAAMtB,KAAKG,UAAUa,KAAAA,EAAK,CAAA,CAAA,EAC9DI,EAAAA,UAAUpB,KAAM,YAAA,EAAcqB,KAAKC,EAAAA,IAAI,IAAMtB,KAAKG,UAAUa,OAAK,CAAA,CAAA,CAAA,EAChEK,KAAKE,EAAAA,UAAUvB,KAAKwB,aAAAA,CAAAA,EAAgBC,UAAAA,EAItCzB,KAAKG,UAAUkB,KACdC,EAAAA,IAAII,GAAAA,CACCA,GAAAA,CAAa1B,KAAKW,WACrBX,KAAKc,WAAAA,GAAa,CAAA,EAIpBa,EAAAA,MAAM,GAAA,EACNL,EAAAA,IAAI,IAAMtB,KAAKc,WAAAA,EAAa,EAC5BS,EAAAA,UAAUvB,KAAKwB,aAAAA,CAAAA,EACdC,UAAAA,EAGFzB,KAAKI,QAAQiB,KACZO,yBACAN,EAAAA,IAAKO,GAAAA,CACJ7B,KAAK8B,cAAAA,EAEL9B,KAAK+B,aAAa,gBAAiBC,OAAOH,CAAAA,CAAAA,EAC1C7B,KAAK+B,aAAa,WAAYF,EAAW,IAAM,IAAA,CAAA,CAAA,EAEhDN,EAAAA,UAAUvB,KAAKwB,aAAAA,CAAAA,EACdC,UAAAA,EAGFzB,KAAK+B,aAAa,OAAQ,UAAA,EACrB/B,KAAKiC,aAAa,UAAA,GACtBjC,KAAK+B,aAAa,WAAY/B,KAAKe,OAAS,IAAM,IAAA,CAEpD,CAEA,QAAQmB,EAAAA,CACPpC,MAAMqC,QAAQD,CAAAA,EAKVA,EAAkBE,IAAI,UAAA,GACzBpC,KAAK+B,aAAa,gBAAiBC,OAAOhC,KAAKW,QAAAA,CAAAA,EAG5CuB,EAAkBE,IAAI,OAAA,GACzBpC,KAAK+B,aAAa,aAAc/B,KAAKM,KAAAA,CAEvC,CAKQ,YAAY+B,EAAAA,CACnB,GAAIrC,KAAKW,SAGR,OAFA0B,EAAMC,eAAAA,EAAAA,KACND,EAAME,gBAAAA,EAKPvC,KAAKwC,cAAc,IAAIC,YAAY,WAAY,CAC9CC,OAAQ1C,KAAKO,OAASP,KAAKM,MAC3BqC,WACAC,SAAAA,EAAU,CAAA,CAAA,CAKZ,CAKQ,cAAcP,EAAAA,CACjBrC,KAAKW,UAEL0B,EAAMQ,MAAQ,SAAWR,EAAMQ,MAAQ,MAC1CR,EAAMC,iBACNtC,KAAK8C,MAAAA,EAEP,CAEU,QAAAC,CACT,MAAMC,EAAgBhD,KAAKiD,cAAc,eAAA,EACnCC,EAAmBlD,KAAKiD,cAAc,cAAA,EACtCE,EAAiBnD,KAAKiD,cAAc,gBAAA,EAGpCG,EAAmBpD,KAAKqD,SAAS,CAEtC,4CAAA,GACA,kBAAA,GACA,OAAA,GACA,QAAA,GAGA,aAAA,GACA,iBAAA,GACAC,YACA,cAAA,GACA,aAAA,GAGA,yBAAA,CAA2BtD,KAAKe,OAChC,6BAA8Bf,KAAKe,OACnC,oCAAA,GAGA,uCAAA,GAGA,iCAAkCf,KAAKW,SAGvC,wBAAyBX,KAAKc,WAG9B,gBAAiBd,KAAKY,OAGtB,0HAA2HZ,KAAKa,KAAAA,CAAAA,EAI3H0C,EAAuBvD,KAAKqD,SAAS,CAC1C,mCAAA,GACA,yBACA,8BAAA,EAA+B,CAAA,EAI1BG,EAAmBxD,KAAKqD,SAAS,CACtC,uCAAA,GACA,WAAA,GACA,aAAA,GACA,yBAAA,GACA,6CAAA,GACA,MAAA,GAEA,4CAAA,CAA8CrD,KAAKe,OACnD,8CAA+Cf,KAAKe,MAAAA,CAAAA,EAI/C0C,EAAczD,KAAKqD,SAAS,CACjC,wBAAA,CAA0BrD,KAAKY,OAC/B,uBAAwBZ,KAAKY,OAC7B,gBAAA,EAAiB,CAAA,EAKZ8C,EAAe1D,KAAKqD,SAAS,CAClC,gCAAA,GACA,cAAA,GACA,kDAAA,GACA,qBAAA,GACAM,OAAAA,CAAW3D,KAAKU,YAAcV,KAAKM,KAAAA,CAAAA,EAI9BsD,EAAe5D,KAAKqD,SAAS,CAClC,yBAAA,GACA,iBACA,aAAA,GACA,wBAAA,GACA,mCAAA,GACA,uBAAA,GACA,gBAAA,GAEA,iCAAkCrD,KAAKS,eAAiB,QACxD,qCAAsCT,KAAKS,eAAiB,UAC5D,yCAA0CT,KAAKS,eAAiB,WAAjBA,CAAAA,EAI1CoD,EAAgB7D,KAAKqD,SAAS,CACnC,kDAAA,GACA,qEAAA,GACA,4CAAA,GACA,qCAAA,GACA,kDAAA,GACA,4CAAA,GAEA,oDAAqDrD,KAAKc,UAAAA,CAAAA,EAG3D,OAAOgD,EAAAA;AAAAA;AAAAA,YAEGV,CAAAA;AAAAA;AAAAA,aAECpD,KAAK+D,WAAAA;AAAAA,eACH/D,KAAKgE,aAAAA;AAAAA,sBACEhE,KAAKiE,QAAQ,kBAAoB,sDAAwD,MAAA;AAAA;AAAA,kBAE7FJ,CAAAA;AAAAA;AAAAA,MAEZK,EAAAA,KAAKhB,EACN,IAAMY,EAAAA,oBACN,IAAMA,EAAAA;AAAAA,mBACQP,CAAAA;AAAAA,qBACEC,CAAAA;AAAAA,SACZU,EAAAA,KAAKlB,EACN,IAAMc,EAAAA,gCACN,IAAMI,EAAAA,KAAKlE,KAAKK,KACf,IAAMyD,EAAAA;AAAAA;AAAAA,mBAEIL,CAAAA;AAAAA;AAAAA,8FAE2EzD,KAAKe,OAAS,IAAM,GAAA,kCAAqCf,KAAKY,OAAS,KAAO,IAAA;AAAA;AAAA,aAE/JZ,KAAKK,IAAAA;AAAAA;AAAAA;;;QAOV6D,EAAAA,KAAKlE,KAAKM,MACX,IAAMwD,EAAAA,mBAAmBJ,kBAA6B1D,KAAKM,KAAAA,SAAAA,CAAAA;AAAAA;;MAK5D4D,EAAAA,KAAKlE,KAAKQ,MACX,IAAMsD,EAAAA;AAAAA,QACHI,EAAAA,KAAKf,EACN,IAAMW,EAAAA,iCACN,IAAMA,EAAAA;AAAAA;AAAAA,iBAEIF,CAAAA;AAAAA;AAAAA,uBAEM5D,KAAKQ,KAAAA;AAAAA;AAAAA,WAEjBR,KAAKQ,KAAAA;AAAAA;AAAAA;;;;MAQV0D,EAAAA,KAAKlE,KAAKiC,aAAa,OAAA,EACxB,IAAM6B,EAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,SAUF9D,KAAKmE,aAAa,OAAA,CAAA;AAAA;AAAA;;GAM1B,CAAA,EA/VAC,EAAA,CADCC,WAAS,CAAEC,KAAMtC,UAVNrC,mCAWZ4E,UAAA,OAAA,CAAA,EAMAH,EAAA,CADCC,WAAS,CAAEC,KAAMtC,UAhBNrC,mCAiBZ4E,UAAA,QAAA,CAAA,EAMAH,EAAA,CADCC,WAAS,CAAEC,KAAMtC,UAtBNrC,mCAuBZ4E,UAAA,QAAA,CAAA,EAOIH,EAAA,CADHC,EAAAA,SAAS,CAAEC,KAAME,QAASC,QAAAA,EAAS,CAAA,CAAA,EA7BxB9E,mCA8BR4E,UAAA,SAAA,CAAA,EAUAH,EAAA,CADHC,EAAAA,SAAS,CAAEC,KAAME,QAASC,UAAS,CAAA,CAAA,EAvCxB9E,mCAwCR4E,UAAA,WAAA,GAOJH,EAAA,CADCC,WAAS,CAAEC,KAAMtC,MAAAA,CAAAA,CAAAA,EA9CNrC,mCA+CZ4E,UAAA,QAAA,GAMAH,EAAA,CADCC,WAAS,CAAEC,KAAMtC,MAAAA,CAAAA,CAAAA,EApDNrC,mCAqDZ4E,UAAA,eAAA,GAOAH,EAAA,CADCC,EAAAA,SAAS,CAAEC,KAAME,QAASE,UAAW,gBA3D1B/E,mCA4DZ4E,UAAA,YAAA,CAAA,EAOAH,EAAA,CADCC,EAAAA,SAAS,CAAEC,KAAME,QAASC,QAAAA,EAAS,CAAA,CAAA,EAlExB9E,mCAmEZ4E,UAAA,WAAA,CAAA,EAOAH,EAAA,CADCC,EAAAA,SAAS,CAAEC,KAAME,QAASC,UAAS,CAAA,CAAA,EAzExB9E,mCA0EZ4E,UAAA,SAAA,GAOAH,EAAA,CADCC,EAAAA,SAAS,CAAEC,KAAME,QAASC,QAAAA,MAhFf9E,mCAiFZ4E,UAAA,QAAA,CAAA,EAIQH,EAAA,CADPO,EAAAA,SApFWhF,mCAqFJ4E,UAAA,aAAA,CAAA,EArFI5E,QAAAA,2BAANyE,EAAA,CADNQ,EAAAA,cAAc,kCACFjF,oOCJAkF,QAAAA,uBAAN,cAAqCjF,EAAAA,YAAAA,CAAAA,CAArC,aAAAC,CAAAC,MAAAA,GAAAC,WAENC,KAAQ8E,aAAe,IAAI5E,EAAAA,gBAAAA,IA0B3BF,KAAQ+E,aAAe,GAUvB/E,KAAAgF,gBAAmC,MAOnChF,KAAAiF,UAAyC,MAOzCjF,KAAAkF,aAAAA,GAOAlF,KAAAmF,mBAAAA,GAOAnF,KAAAoF,SAAAA,GAKApF,KAAQqF,aAAAA,GAGRrF,KAAQsF,aAAAA,EAAe,CAhEvB,IAAA,cACC,OAAOtF,KAAK8E,aAAavE,KAC1B,CACA,gBAAgBA,EAAAA,CACfP,KAAK8E,aAAa9D,KAAKT,EACxB,CAMA,IAAA,cACC,OAAOP,KAAK+E,YACb,CACA,IAAA,YAAgBxE,EAAAA,CACfP,KAAK+E,aAAexE,EACpBP,KAAKuF,oBAAoBhF,CAAAA,CAC1B,CAsDA,qBAAYiF,CACX,OAAOxF,KAAKyF,YAAYC,OAAOC,GAAMA,EAAGC,UAAY,gCACrD,CAEA,oBACC9F,MAAMoB,kBAAAA,EAGFlB,KAAKmF,oBACRnF,KAAK6F,iBAAiB,UAAW7F,KAAKgE,eAIvChE,KAAK8E,aACHzD,KACAO,yBACAN,EAAAA,IAAIwE,GAAS9F,KAAK+F,mBAAmBD,CAAAA,CAAAA,EACrCvE,EAAAA,UAAUvB,KAAKwB,gBAEfC,UAAAA,EAGFL,YAAU4E,OAAQ,YAAA,EAAc3E,KAC/BC,EAAAA,IAAKe,IACJ,MAAM4D,EAAc5D,EACpBrC,KAAKsF,aAAeW,EAAYvD,MAAAA,CAAAA,EAEjCnB,EAAAA,UAAUvB,KAAKwB,aAAAA,CAAAA,EACdC,YAGFzB,KAAKkG,sBAAAA,EAGLlG,KAAKmG,sBAAAA,EAGLnG,KAAK+B,aAAa,OAAQ,YAAA,EAC1B/B,KAAK+B,aAAa,aAAc,kBACjC,CAEA,QAAQG,EAAAA,CACPpC,MAAMqC,QAAQD,CAAAA,EAEVA,EAAkBE,IAAI,iBAAA,GACzBpC,KAAKmG,wBAGFjE,EAAkBE,IAAI,gBACzBpC,KAAKuF,oBAAoBvF,KAAKoG,WAAAA,EAG3BlE,EAAkBE,IAAI,UAAA,GACzBpC,KAAKmG,uBAEP,CAEQ,mBAAmBL,EAAAA,CAC1B9F,KAAKwF,gBAAgBa,QAAQ,CAACC,EAAMC,IAAAA,CACnC,MAAM1E,EAAW0E,IAAMT,EACvBQ,EAAKvF,OAASc,EACdyE,EAAKvE,aAAa,gBAAiBC,OAAOH,CAAAA,CAAAA,EAC1CyE,EAAKvE,aAAa,WAAYF,EAAW,IAAM,IAAA,EAG3CA,IACH7B,KAAK+E,aAAeuB,EAAK/F,OAAS+F,EAAKhG,OAAS,GAAA,CAAA,CAGnD,CAEQ,oBAAoBC,EAAAA,CAC3B,MAAMuF,EAAQ9F,KAAKwF,gBAAgBgB,UAAUF,GAAQA,EAAKnC,aAAa,OAAA,IAAa5D,GAAS+F,EAAKhG,QAAUC,GACxGuF,GAAS,IACZ9F,KAAKyG,YAAcX,EAErB,CAEQ,uBAAAK,CACPnG,KAAKwF,gBAAgBa,QAAQ,CAACC,EAAMC,IAAAA,CACnC,IAAIG,EAAAA,GAIHA,IADG1G,KAAKoF,UAKPpF,KAAKgF,kBAAoB,OAAUhF,KAAKgF,kBAAoB,YAAcuB,IAAMvG,KAAKyG,YAGvFH,EAAK5F,UAAYgG,EAGb1G,KAAKkF,cAAAA,CAAiBwB,GAAAA,CAAoB1G,KAAKoF,UAAYkB,EAAKhG,MACnEgG,EAAKvE,aAAa,QAASuE,EAAKhG,KAAAA,EAEhCgG,EAAKK,gBAAgB,OAAA,CAAA,CAAA,CAGxB,CAQA,QAAAC,CACC5G,KAAKoF,SAAAA,EACN,CAKA,UAAAyB,CACC7G,KAAKoF,SAAAA,EACN,CAOO,YAAY0B,GAElB,MAAMC,EAAe/G,KAAKiD,cAAc,WAAW6D,EAAOE,EAAAA,IAAAA,EAC1D,GAAID,EAEH,OAAOA,EAIR,MAAMT,EAAOW,SAASC,cAAc,+BAAA,EACpCZ,EAAKvE,aAAa,QAAS+E,EAAOE,IAClCV,EAAKa,UAAY;AAAA,gCACaL,EAAOzG,MAAQ;KAC1CyG,EAAOM,KAAAA;AAAAA,IAGV,MAAMC,EAASrH,KAAKiD,cAAc,iBAAA,EAMlC,OALIoE,EACHrH,KAAKsH,aAAahB,EAAMe,CAAAA,EAExBrH,KAAKuH,YAAYjB,CAAAA,EAEXA,CACR,CAKA,QAAAkB,CACCxH,KAAKoF,SAAAA,CAAYpF,KAAKoF,QACvB,CAGQ,cAAc/C,EAAAA,CACrB,MAAMoF,EAAQzH,KAAKwF,gBACnB,GAAIiC,EAAMC,SAAW,EAAG,OAExB,IAAIC,EAAW3H,KAAKqF,cAAgB,EAAIrF,KAAKqF,aAAerF,KAAKyG,YAEjE,OAAQpE,EAAMQ,IAAAA,CACb,IAAK,YACJR,EAAMC,eAAAA,EACNqF,GAAYA,EAAW,GAAKF,EAAMC,OAClC,MACD,IAAK,UACJrF,EAAMC,iBACNqF,EAAWA,GAAY,EAAIF,EAAMC,OAAS,EAAIC,EAAW,EACzD,MACD,IAAK,OACJtF,EAAMC,eAAAA,EACNqF,EAAW,EACX,MACD,IAAK,MACJtF,EAAMC,eAAAA,EACNqF,EAAWF,EAAMC,OAAS,EAC1B,MACD,IAAK,QACL,IAAK,IAKJ,OAJArF,EAAMC,eAAAA,EAAAA,KACFqF,GAAY,GACfF,EAAME,GAAU7E,MAAAA,GAGlB,QACC,OAGF9C,KAAKqF,aAAesC,EACpBF,EAAME,CAAAA,EAAUC,OACjB,CAEQ,eAAevF,EAAAA,CACtBA,EAAME,kBACNvC,KAAKwC,cACJ,IAAIC,YAAY,YAAa,CAC5BE,QAAAA,GACAC,WAAU,CAAA,CAAA,CAGb,CAEQ,gBAAgBP,EAAAA,CACvBA,EAAME,gBAAAA,EACNvC,KAAKwC,cACJ,IAAIC,YAAY,aAAc,CAC7BE,QAAAA,GACAC,SAAAA,EAAU,CAAA,CAAA,CAGb,CAEU,QAAAG,CAET,MAAM8E,EAAc7H,KAAKqD,SAAS,CAEjC,gBAAA,GACA,SAAA,GACA,0CACA,qBAAA,GAGA,OAAA,CAASrD,KAAKsF,aACd,MAAOtF,KAAKsF,aAGZ,8CAAA,GACA,eAAgBtF,KAAKsF,aACrB,gCAAiCtF,KAAKsF,aACtC,kBAAmBtF,KAAKsF,YAAAA,CAAAA,EAInBwC,EAAc9H,KAAKqD,SAAS,CAEjC,uBAAA,GACA,yBACA,OAAA,GAIA,qCAAA,GAGA,iDAGA,OAAA,CAASrD,KAAKoF,SACd,OAAA,CAASpF,KAAKoF,SAGd,OAAQpF,KAAKoF,SACb,OAAQpF,KAAKoF,SACb,YAAapF,KAAKoF,QAAAA,CAAAA,EAIb2C,EAAgB/H,KAAKqD,SAAS,CACnC,2CAEA,wBAAA,GACA,yBAAA,EAA0B,CAAA,EAIrB2E,EAAahI,KAAKqD,SAAS,CAChC,6BAAA,GACA,aAEA,gBAAiBrD,KAAKiF,YAAc,MACpC,iBAAkBjF,KAAKiF,YAAc,SACrC,cAAejF,KAAKiF,YAAc,QAAdA,CAAAA,EAIfgD,EAAgBjI,KAAKqD,SAAS,CACnC,kDAAiD,CAAA,EAGlD,OAAOS,EAAAA;AAAAA;AAAAA,YAEG+D,CAAAA;AAAAA;AAAAA,iBAEKC,CAAAA;AAAAA,kBACCC,CAAAA;AAAAA,gCACc/H,KAAKkI,cAAAA;AAAAA,iCACJlI,KAAKmI,eAAAA;AAAAA;AAAAA;AAAAA;AAAAA,kBAIpBH,CAAAA;AAAAA;AAAAA,2BAEShI,KAAKoI,gBAAAA;AAAAA;AAAAA;AAAAA;AAAAA,kBAIdH,CAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,GAMjB,CAEQ,wBAEPjI,KAAK6F,iBAAiB,WAAawC,GAAAA,CAClC,GAAIA,aAAa5F,YAAa,CAC7B,MAAMlC,EAAQ8H,EAAE3F,OAEV4F,EAAYtI,KAAKwF,gBAAgBgB,UAAUF,GAAQA,EAAK/F,QAAUA,GAAS+F,EAAKhG,QAAUC,CAAAA,EAC5F+H,GAAa,IAChBtI,KAAKyG,YAAc6B,EACnBtI,KAAK+E,aAAexE,EAEtB,CAAA,CAAA,CAEF,CAEQ,kBAAA6H,CAEPpI,KAAKmG,sBAAAA,EACLnG,KAAK+F,mBAAmB/F,KAAKyG,WAAAA,EAG7BzG,KAAKwF,gBAAgBa,QAAQ,CAACC,EAAMR,IAAAA,CACnCQ,EAAKvE,aAAa,OAAQ,UAAA,EACrBuE,EAAKrE,aAAa,UAAA,GACtBqE,EAAKvE,aAAa,WAAY+D,IAAU9F,KAAKyG,YAAc,IAAM,IAAA,CAAA,CAAA,CAGpE,CAAA,EArZIrC,EAAA,CADHC,WAAS,CAAEC,KAAMiE,MAAAA,CAAAA,CAAAA,EATN1D,+BAURN,UAAA,cAAA,CAAA,EAWAH,EAAA,CADHC,WAAS,CAAEC,KAAMtC,MAAAA,CAAAA,CAAAA,EApBN6C,+BAqBRN,UAAA,cAAA,CAAA,EAiBJH,EAAA,CADCC,EAAAA,SAAS,CAAEC,KAAMtC,OAAQ0C,UAAW,mBAAoBD,QAAAA,EAAS,CAAA,CAAA,EArCtDI,+BAsCZN,UAAA,kBAAA,CAAA,EAOAH,EAAA,CADCC,EAAAA,SAAS,CAAEC,KAAMtC,OAAQyC,UAAS,CAAA,CAAA,EA5CvBI,+BA6CZN,UAAA,YAAA,GAOAH,EAAA,CADCC,WAAS,CAAEC,KAAME,OAAAA,CAAAA,CAAAA,EAnDNK,+BAoDZN,UAAA,eAAA,GAOAH,EAAA,CADCC,WAAS,CAAEC,KAAME,OAAAA,CAAAA,CAAAA,EA1DNK,+BA2DZN,UAAA,qBAAA,CAAA,EAOAH,EAAA,CADCC,EAAAA,SAAS,CAAEC,KAAME,QAASC,QAAAA,EAAS,CAAA,CAAA,EAjExBI,+BAkEZN,UAAA,WAAA,CAAA,EAKQH,EAAA,CADPO,EAAAA,MAAAA,CAAAA,EAtEWE,+BAuEJN,UAAA,eAAA,CAAA,EAGAH,EAAA,CADPO,EAAAA,MAAAA,CAAAA,EAzEWE,+BA0EJN,UAAA,eAAA,GAKAH,EAAA,CADPoE,wBAAsB,CAAEC,UAAS,CAAA,CAAA,EA9EtB5D,+BA+EJN,UAAA,cAAA,GA/EIM,QAAAA,uBAANT,EAAA,CADNQ,EAAAA,cAAc,0BAAA,CAAA,EACFC"}
|