@mhmo91/schmancy 0.8.3 → 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/dist/{animated-text-Bc3qyXjp.cjs → animated-text-B3DQRJBy.cjs} +2 -2
- package/dist/{animated-text-Bc3qyXjp.cjs.map → animated-text-B3DQRJBy.cjs.map} +1 -1
- package/dist/{animated-text-CNx6Pmlo.js → animated-text-BAj4-6hE.js} +3 -3
- package/dist/{animated-text-CNx6Pmlo.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-7mWxekxE.js → area.component-CP4DZ0d8.js} +3 -3
- package/dist/{area.component-7mWxekxE.js.map → area.component-CP4DZ0d8.js.map} +1 -1
- package/dist/{area.component-CS_gSutH.cjs → area.component-ChxSLt16.cjs} +2 -2
- package/dist/{area.component-CS_gSutH.cjs.map → area.component-ChxSLt16.cjs.map} +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-y-IyzH4r.cjs → autocomplete-CAaVSg4g.cjs} +2 -2
- package/dist/{autocomplete-y-IyzH4r.cjs.map → autocomplete-CAaVSg4g.cjs.map} +1 -1
- package/dist/{autocomplete-Ci4jo3Ur.js → autocomplete-CGbACUYd.js} +4 -4
- package/dist/{autocomplete-Ci4jo3Ur.js.map → autocomplete-CGbACUYd.js.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/{avatar-DBfJucB9.cjs → avatar-nWOZXEsW.cjs} +3 -3
- package/dist/avatar-nWOZXEsW.cjs.map +1 -0
- package/dist/{avatar-BdyuuIk7.js → avatar-rLCF6MSI.js} +58 -58
- package/dist/avatar-rLCF6MSI.js.map +1 -0
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-CowHieO2.js → boat-Ckt9v__d.js} +3 -3
- package/dist/{boat-CowHieO2.js.map → boat-Ckt9v__d.js.map} +1 -1
- package/dist/{boat-DkNUc1UO.cjs → boat-yNAZ2LLB.cjs} +2 -2
- package/dist/{boat-DkNUc1UO.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 +1 -1
- package/dist/charts.js +1 -1
- package/dist/{checkbox-BvWcABPr.cjs → checkbox-BnAlpsJN.cjs} +2 -2
- package/dist/{checkbox-BvWcABPr.cjs.map → checkbox-BnAlpsJN.cjs.map} +1 -1
- package/dist/{checkbox-BY4Sn8F2.js → checkbox-D22yfGe3.js} +2 -2
- package/dist/{checkbox-BY4Sn8F2.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-CYjmAxfs.js → code-preview-DPlQayFd.js} +2 -2
- package/dist/{code-preview-CYjmAxfs.js.map → code-preview-DPlQayFd.js.map} +1 -1
- package/dist/{code-preview-BIFIJigy.cjs → code-preview-jPnX60FF.cjs} +2 -2
- package/dist/{code-preview-BIFIJigy.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/{date-range-BdIqI7LC.js → date-range-GFm5NG33.js} +4 -4
- package/dist/{date-range-BdIqI7LC.js.map → date-range-GFm5NG33.js.map} +1 -1
- package/dist/{date-range-inline-Df8u6Ecy.cjs → date-range-inline-CgX2o0FP.cjs} +2 -2
- package/dist/{date-range-inline-Df8u6Ecy.cjs.map → date-range-inline-CgX2o0FP.cjs.map} +1 -1
- package/dist/{date-range-inline-Cnhs9atd.js → date-range-inline-DTQLESAZ.js} +3 -3
- package/dist/{date-range-inline-Cnhs9atd.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-B80Ummtv.cjs → date-range-ug3B9CFT.cjs} +2 -2
- package/dist/{date-range-B80Ummtv.cjs.map → date-range-ug3B9CFT.cjs.map} +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-BWsVHQib.cjs → delay-CWtBL0VD.cjs} +2 -2
- package/dist/{delay-BWsVHQib.cjs.map → delay-CWtBL0VD.cjs.map} +1 -1
- package/dist/{delay-CCa9nN4A.js → delay-DEe1CmHc.js} +2 -2
- package/dist/{delay-CCa9nN4A.js.map → delay-DEe1CmHc.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{details-Bee5ya0L.js → details-D-LXW23W.js} +2 -2
- package/dist/{details-Bee5ya0L.js.map → details-D-LXW23W.js.map} +1 -1
- package/dist/{details-oaVHXU7U.cjs → details-DVke77dU.cjs} +2 -2
- package/dist/{details-oaVHXU7U.cjs.map → details-DVke77dU.cjs.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/dialog.cjs +1 -1
- package/dist/{dialog.component-BriB-kFi.cjs → dialog.component-BM0D-hK9.cjs} +2 -2
- package/dist/{dialog.component-BriB-kFi.cjs.map → dialog.component-BM0D-hK9.cjs.map} +1 -1
- package/dist/{dialog.component-CMUoCC7O.js → dialog.component-a7FlKhGD.js} +3 -3
- package/dist/{dialog.component-CMUoCC7O.js.map → dialog.component-a7FlKhGD.js.map} +1 -1
- package/dist/dialog.js +1 -1
- package/dist/{divider-B7DBbYFI.js → divider-CzTpxOqt.js} +3 -3
- package/dist/{divider-B7DBbYFI.js.map → divider-CzTpxOqt.js.map} +1 -1
- package/dist/{divider-Dl4TToQZ.cjs → divider-D8KStUhN.cjs} +2 -2
- package/dist/{divider-Dl4TToQZ.cjs.map → divider-D8KStUhN.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/{dropdown-content-C2W7OttQ.cjs → dropdown-content-CngZN3vv.cjs} +2 -2
- package/dist/{dropdown-content-C2W7OttQ.cjs.map → dropdown-content-CngZN3vv.cjs.map} +1 -1
- package/dist/{dropdown-content-DzhOtilY.js → dropdown-content-DCn-g0-f.js} +3 -3
- package/dist/{dropdown-content-DzhOtilY.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-Bh5VC0rc.cjs → email-recipients-BhntMZMf.cjs} +2 -2
- package/dist/{email-recipients-Bh5VC0rc.cjs.map → email-recipients-BhntMZMf.cjs.map} +1 -1
- package/dist/{email-recipients-BWqZKo3m.js → email-recipients-BzjAKNJ0.js} +6 -6
- package/dist/{email-recipients-BWqZKo3m.js.map → email-recipients-BzjAKNJ0.js.map} +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{flex-53G-PJx7.js → flex-5dR48zie.js} +2 -2
- package/dist/{flex-53G-PJx7.js.map → flex-5dR48zie.js.map} +1 -1
- package/dist/{flex-DFSIy0t4.cjs → flex-oHl2EfYB.cjs} +2 -2
- package/dist/{flex-DFSIy0t4.cjs.map → flex-oHl2EfYB.cjs.map} +1 -1
- package/dist/{form-Zq7g2JS8.cjs → form-BlPiAPt7.cjs} +2 -2
- package/dist/{form-Zq7g2JS8.cjs.map → form-BlPiAPt7.cjs.map} +1 -1
- package/dist/{form-BtRK9bnp.js → form-BxVM6JTn.js} +2 -2
- package/dist/{form-BtRK9bnp.js.map → form-BxVM6JTn.js.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{formField.mixin-2jSL7WF_.js → formField.mixin-BCGA7Ea3.js} +2 -2
- package/dist/{formField.mixin-2jSL7WF_.js.map → formField.mixin-BCGA7Ea3.js.map} +1 -1
- package/dist/{formField.mixin-DkN2ufR_.cjs → formField.mixin-BfJMifU9.cjs} +2 -2
- package/dist/{formField.mixin-DkN2ufR_.cjs.map → formField.mixin-BfJMifU9.cjs.map} +1 -1
- package/dist/{icon-pU_cfmpD.cjs → icon-DHEXr3c-.cjs} +2 -2
- package/dist/{icon-pU_cfmpD.cjs.map → icon-DHEXr3c-.cjs.map} +1 -1
- package/dist/{icon-B5qeYrDu.js → icon-DYpLoegR.js} +2 -2
- package/dist/{icon-B5qeYrDu.js.map → icon-DYpLoegR.js.map} +1 -1
- package/dist/{icon-button-HSYaQBNF.js → icon-button-CmZBLHWC.js} +3 -3
- package/dist/{icon-button-HSYaQBNF.js.map → icon-button-CmZBLHWC.js.map} +1 -1
- package/dist/{icon-button-BpmGFjaR.cjs → icon-button-IbSX8C98.cjs} +2 -2
- package/dist/{icon-button-BpmGFjaR.cjs.map → icon-button-IbSX8C98.cjs.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +56 -56
- package/dist/{input-8G9YY9qv.cjs → input-BByjYlgl.cjs} +2 -2
- package/dist/{input-8G9YY9qv.cjs.map → input-BByjYlgl.cjs.map} +1 -1
- package/dist/{input-BJMF5Fyk.js → input-D0cQ9DOY.js} +3 -3
- package/dist/{input-BJMF5Fyk.js.map → input-D0cQ9DOY.js.map} +1 -1
- package/dist/{input-chip-tbrw56ix.js → input-chip-B5ErXgCB.js} +2 -2
- package/dist/{input-chip-tbrw56ix.js.map → input-chip-B5ErXgCB.js.map} +1 -1
- package/dist/{input-chip-CocdqTzr.cjs → input-chip-DkWaTciP.cjs} +2 -2
- package/dist/{input-chip-CocdqTzr.cjs.map → input-chip-DkWaTciP.cjs.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/{json-DPnyOA3K.cjs → json-BZVe74np.cjs} +2 -2
- package/dist/{json-DPnyOA3K.cjs.map → json-BZVe74np.cjs.map} +1 -1
- package/dist/{json-CvcloKQv.js → json-PKewOWuJ.js} +3 -3
- package/dist/{json-CvcloKQv.js.map → json-PKewOWuJ.js.map} +1 -1
- package/dist/json.cjs +1 -1
- package/dist/json.js +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +2 -2
- package/dist/{lightbox-service-3mHqBKEh.cjs → lightbox-service-D-0JtxB1.cjs} +2 -2
- package/dist/lightbox-service-D-0JtxB1.cjs.map +1 -0
- package/dist/{lightbox-service-DxbYZAuv.js → lightbox-service-DZMnb1eU.js} +3 -3
- package/dist/lightbox-service-DZMnb1eU.js.map +1 -0
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-JjR7WOrd.cjs → list-B_2m7l3g.cjs} +6 -6
- package/dist/list-B_2m7l3g.cjs.map +1 -0
- package/dist/{list-FWXmY-eQ.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-BVBdv0GP.cjs → litElement.mixin-CrpeGpZ7.cjs} +2 -2
- package/dist/{litElement.mixin-BVBdv0GP.cjs.map → litElement.mixin-CrpeGpZ7.cjs.map} +1 -1
- package/dist/{litElement.mixin-Wcu4yIIs.js → litElement.mixin-DHZXtvYq.js} +2 -2
- package/dist/{litElement.mixin-Wcu4yIIs.js.map → litElement.mixin-DHZXtvYq.js.map} +1 -1
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-Br6xJFxG.js → map-2Hl60a0A.js} +6 -6
- package/dist/{map-Br6xJFxG.js.map → map-2Hl60a0A.js.map} +1 -1
- package/dist/{map-D9R3OCne.cjs → map-DyPS9G7M.cjs} +3 -3
- package/dist/{map-D9R3OCne.cjs.map → map-DyPS9G7M.cjs.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{media-DibPwAjJ.cjs → media-CS8HpKnK.cjs} +2 -2
- package/dist/{media-DibPwAjJ.cjs.map → media-CS8HpKnK.cjs.map} +1 -1
- package/dist/{media-BV_1DfcW.js → media-DtWbcRxL.js} +2 -2
- package/dist/{media-BV_1DfcW.js.map → media-DtWbcRxL.js.map} +1 -1
- package/dist/{menu-HKqlq99V.js → menu-Caju5-zd.js} +3 -3
- package/dist/{menu-HKqlq99V.js.map → menu-Caju5-zd.js.map} +1 -1
- package/dist/{menu-vNrV-Nuq.cjs → menu-rX5RPAI2.cjs} +2 -2
- package/dist/{menu-vNrV-Nuq.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-DKXumnmt.js → navigation-rail-Ctketq5a.js} +32 -25
- package/dist/navigation-rail-Ctketq5a.js.map +1 -0
- package/dist/{navigation-rail-D1o3qDe_.cjs → navigation-rail-DC9_oSIM.cjs} +12 -12
- 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-B5ljba4P.js → notification-service-CUlfXqmj.js} +3 -3
- package/dist/{notification-service-B5ljba4P.js.map → notification-service-CUlfXqmj.js.map} +1 -1
- package/dist/{notification-service-ICRT05L0.cjs → notification-service-DknbpqTt.cjs} +2 -2
- package/dist/{notification-service-ICRT05L0.cjs.map → notification-service-DknbpqTt.cjs.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +2 -2
- package/dist/{notify-B9CpO1Ru.js → notify-DJSOWTxv.js} +2 -2
- package/dist/{notify-B9CpO1Ru.js.map → notify-DJSOWTxv.js.map} +1 -1
- package/dist/{notify-NX-dl60E.cjs → notify-DickIEHW.cjs} +2 -2
- package/dist/{notify-NX-dl60E.cjs.map → notify-DickIEHW.cjs.map} +1 -1
- package/dist/{option-B4JKMrLg.js → option-Bng41-rY.js} +2 -2
- package/dist/{option-B4JKMrLg.js.map → option-Bng41-rY.js.map} +1 -1
- package/dist/{option-epyXLWoY.cjs → option-DYT5Rkgy.cjs} +2 -2
- package/dist/{option-epyXLWoY.cjs.map → option-DYT5Rkgy.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{page-Bmi1QHtq.cjs → page-BLn9gtSd.cjs} +2 -2
- package/dist/{page-Bmi1QHtq.cjs.map → page-BLn9gtSd.cjs.map} +1 -1
- package/dist/{page-BpygEntU.js → page-D-ROcQDd.js} +4 -4
- package/dist/{page-BpygEntU.js.map → page-D-ROcQDd.js.map} +1 -1
- package/dist/page.cjs +1 -1
- package/dist/page.js +1 -1
- package/dist/{payment-card-form-3kAXDbXf.cjs → payment-card-form-5UtfWzoW.cjs} +2 -2
- package/dist/{payment-card-form-3kAXDbXf.cjs.map → payment-card-form-5UtfWzoW.cjs.map} +1 -1
- package/dist/{payment-card-form-BxkHuSls.js → payment-card-form-BJa4RgF2.js} +3 -3
- package/dist/{payment-card-form-BxkHuSls.js.map → payment-card-form-BJa4RgF2.js.map} +1 -1
- package/dist/{pills-C3fIvfn8.js → pills-BS5rZ6C3.js} +3 -3
- package/dist/{pills-C3fIvfn8.js.map → pills-BS5rZ6C3.js.map} +1 -1
- package/dist/{pills-MmHyBGQu.cjs → pills-Blf7IAeq.cjs} +2 -2
- package/dist/{pills-MmHyBGQu.cjs.map → pills-Blf7IAeq.cjs.map} +1 -1
- package/dist/{progress-qx8jtrOA.cjs → progress-DlhYniW_.cjs} +5 -5
- package/dist/progress-DlhYniW_.cjs.map +1 -0
- package/dist/{progress-0POmJs5o.js → progress-yTIX6EqC.js} +10 -13
- package/dist/progress-yTIX6EqC.js.map +1 -0
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{qr-scanner-DQq-WLyo.cjs → qr-scanner-DOs7uNS_.cjs} +2 -2
- package/dist/{qr-scanner-DQq-WLyo.cjs.map → qr-scanner-DOs7uNS_.cjs.map} +1 -1
- package/dist/{qr-scanner-jwOSrD0N.js → qr-scanner-DjZ8mgHV.js} +2 -2
- package/dist/{qr-scanner-jwOSrD0N.js.map → qr-scanner-DjZ8mgHV.js.map} +1 -1
- package/dist/qr-scanner.cjs +1 -1
- package/dist/qr-scanner.js +1 -1
- package/dist/{radio-button-DraEYR2R.cjs → radio-button-N_PrrxKB.cjs} +2 -2
- package/dist/{radio-button-DraEYR2R.cjs.map → radio-button-N_PrrxKB.cjs.map} +1 -1
- package/dist/{radio-button-B0EUK_wg.js → radio-button-me3SRHGu.js} +3 -3
- package/dist/{radio-button-B0EUK_wg.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/{schmancy-steps-container-C2StAA5K.js → schmancy-steps-container-J6P-NNNj.js} +2 -2
- package/dist/{schmancy-steps-container-C2StAA5K.js.map → schmancy-steps-container-J6P-NNNj.js.map} +1 -1
- package/dist/{schmancy-steps-container-B5aiqgMA.cjs → schmancy-steps-container-T57BKMzi.cjs} +2 -2
- package/dist/{schmancy-steps-container-B5aiqgMA.cjs.map → schmancy-steps-container-T57BKMzi.cjs.map} +1 -1
- package/dist/{scroll-Bu-vAg3d.js → scroll-C_gfUgjn.js} +2 -2
- package/dist/{scroll-Bu-vAg3d.js.map → scroll-C_gfUgjn.js.map} +1 -1
- package/dist/{scroll-BqT7bvhu.cjs → scroll-CecsowP7.cjs} +2 -2
- package/dist/{scroll-BqT7bvhu.cjs.map → scroll-CecsowP7.cjs.map} +1 -1
- package/dist/{select-i-uKur-W.js → select-BBA0gBHf.js} +3 -3
- package/dist/{select-i-uKur-W.js.map → select-BBA0gBHf.js.map} +1 -1
- package/dist/{select-HiEGJvOX.cjs → select-D9oCjv7N.cjs} +2 -2
- package/dist/{select-HiEGJvOX.cjs.map → select-D9oCjv7N.cjs.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-BbrRW0S5.cjs → sheet-0oUfBmXX.cjs} +2 -2
- package/dist/{sheet-BbrRW0S5.cjs.map → sheet-0oUfBmXX.cjs.map} +1 -1
- package/dist/{sheet-B1g7E4dQ.js → sheet-CNcDT3VP.js} +5 -5
- package/dist/{sheet-B1g7E4dQ.js.map → sheet-CNcDT3VP.js.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +2 -2
- package/dist/{sheet.service-4etIM-p6.js → sheet.service-2MobB-9z.js} +2 -2
- package/dist/{sheet.service-4etIM-p6.js.map → sheet.service-2MobB-9z.js.map} +1 -1
- package/dist/{sheet.service-BiRZjCdN.cjs → sheet.service-su_7yDQ-.cjs} +2 -2
- package/dist/{sheet.service-BiRZjCdN.cjs.map → sheet.service-su_7yDQ-.cjs.map} +1 -1
- package/dist/{slider-VYnbIRH2.cjs → slider-CV-Ehp_5.cjs} +2 -2
- package/dist/{slider-VYnbIRH2.cjs.map → slider-CV-Ehp_5.cjs.map} +1 -1
- package/dist/{slider-8E3Wad0t.js → slider-CkE-iFUy.js} +3 -3
- package/dist/{slider-8E3Wad0t.js.map → slider-CkE-iFUy.js.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{spinner-DJgcI5wr.cjs → spinner-Bfn8KC-9.cjs} +2 -2
- package/dist/{spinner-DJgcI5wr.cjs.map → spinner-Bfn8KC-9.cjs.map} +1 -1
- package/dist/{spinner-CKm13CKN.js → spinner-DiMbWXp9.js} +2 -2
- package/dist/{spinner-CKm13CKN.js.map → spinner-DiMbWXp9.js.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{suggestion-chip-6njXvvHm.js → suggestion-chip-CEDqUNoS.js} +3 -3
- package/dist/{suggestion-chip-6njXvvHm.js.map → suggestion-chip-CEDqUNoS.js.map} +1 -1
- package/dist/{suggestion-chip-DdLfqk7o.cjs → suggestion-chip-HhsLtZXR.cjs} +2 -2
- package/dist/{suggestion-chip-DdLfqk7o.cjs.map → suggestion-chip-HhsLtZXR.cjs.map} +1 -1
- package/dist/{surface-DcqbWGub.cjs → surface-CW3H23Va.cjs} +2 -2
- package/dist/{surface-DcqbWGub.cjs.map → surface-CW3H23Va.cjs.map} +1 -1
- package/dist/{surface-BYU3l_Q2.js → surface-eBfnSwQS.js} +2 -2
- package/dist/{surface-BYU3l_Q2.js.map → surface-eBfnSwQS.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{table-C9fzDjjk.cjs → table-D0tiSL_u.cjs} +2 -2
- package/dist/{table-C9fzDjjk.cjs.map → table-D0tiSL_u.cjs.map} +1 -1
- package/dist/{table-Dq12ollZ.js → table-Dmo4TvTx.js} +2 -2
- package/dist/{table-Dq12ollZ.js.map → table-Dmo4TvTx.js.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-compatibility-wnzlHtln.js → tabs-compatibility-Bit6y6en.js} +2 -2
- package/dist/{tabs-compatibility-wnzlHtln.js.map → tabs-compatibility-Bit6y6en.js.map} +1 -1
- package/dist/{tabs-compatibility-Dwtjfkcf.cjs → tabs-compatibility-Vq_2-ekz.cjs} +2 -2
- package/dist/{tabs-compatibility-Dwtjfkcf.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-Ddt05Frc.js → tailwind.mixin-Bp_PR6yc.js} +2 -2
- package/dist/{tailwind.mixin-Ddt05Frc.js.map → tailwind.mixin-Bp_PR6yc.js.map} +1 -1
- package/dist/{tailwind.mixin-UijsBrYW.cjs → tailwind.mixin-Cp4PyXok.cjs} +2 -2
- package/dist/{tailwind.mixin-UijsBrYW.cjs.map → tailwind.mixin-Cp4PyXok.cjs.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-Vd3zayJZ.js → textarea-B1d1QCqT.js} +2 -2
- package/dist/{textarea-Vd3zayJZ.js.map → textarea-B1d1QCqT.js.map} +1 -1
- package/dist/{textarea-DGmsw1B_.cjs → textarea-DG8CHhZA.cjs} +2 -2
- package/dist/{textarea-DGmsw1B_.cjs.map → textarea-DG8CHhZA.cjs.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-button-DG_Xwg9H.cjs → theme-button-CPL6Eaqd.cjs} +2 -2
- package/dist/{theme-button-DG_Xwg9H.cjs.map → theme-button-CPL6Eaqd.cjs.map} +1 -1
- package/dist/{theme-button-rGpEW_xS.js → theme-button-CrLuMQNe.js} +2 -2
- package/dist/{theme-button-rGpEW_xS.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-pLzK5zxL.cjs → theme-controller-boat-CXbNJSI3.cjs} +2 -2
- package/dist/{theme-controller-boat-pLzK5zxL.cjs.map → theme-controller-boat-CXbNJSI3.cjs.map} +1 -1
- package/dist/{theme-controller-boat-B1fjcqJI.js → theme-controller-boat-CzSmjyKq.js} +3 -3
- package/dist/{theme-controller-boat-B1fjcqJI.js.map → theme-controller-boat-CzSmjyKq.js.map} +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/theme.js +1 -1
- package/dist/{timezone-IQkwr6Oh.js → timezone-4vwX0BgA.js} +3 -3
- package/dist/{timezone-IQkwr6Oh.js.map → timezone-4vwX0BgA.js.map} +1 -1
- package/dist/{timezone-BhUaIAV7.cjs → timezone-BxvQcqe1.cjs} +2 -2
- package/dist/{timezone-BhUaIAV7.cjs.map → timezone-BxvQcqe1.cjs.map} +1 -1
- package/dist/{tooltip-CwaiZC8f.js → tooltip-CjdvBf4X.js} +2 -2
- package/dist/{tooltip-CwaiZC8f.js.map → tooltip-CjdvBf4X.js.map} +1 -1
- package/dist/{tooltip-iEvxKg8g.cjs → tooltip-ZtnGjoJd.cjs} +2 -2
- package/dist/{tooltip-iEvxKg8g.cjs.map → tooltip-ZtnGjoJd.cjs.map} +1 -1
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/{tree-D9EbEsxn.js → tree-CBEjV7jP.js} +2 -2
- package/dist/{tree-D9EbEsxn.js.map → tree-CBEjV7jP.js.map} +1 -1
- package/dist/{tree-Bclu6uvv.cjs → tree-DP5U00NA.cjs} +2 -2
- package/dist/{tree-Bclu6uvv.cjs.map → tree-DP5U00NA.cjs.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-Bscwd-36.cjs → typewriter-C6kFjLcX.cjs} +2 -2
- package/dist/{typewriter-Bscwd-36.cjs.map → typewriter-C6kFjLcX.cjs.map} +1 -1
- package/dist/{typewriter-BjDPgRlj.js → typewriter-Eo5qXoGC.js} +4 -4
- package/dist/{typewriter-BjDPgRlj.js.map → typewriter-Eo5qXoGC.js.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{typography-CConBBFH.js → typography-C_1gdM2I.js} +2 -2
- package/dist/{typography-CConBBFH.js.map → typography-C_1gdM2I.js.map} +1 -1
- package/dist/{typography-DLGT3DGz.cjs → typography-DGyjlLCE.cjs} +2 -2
- package/dist/{typography-DLGT3DGz.cjs.map → typography-DGyjlLCE.cjs.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/package.json +1 -1
- package/types/src/navigation-rail/navigation-rail.d.ts +2 -0
- package/types/src/progress/progress.d.ts +1 -1
- package/dist/avatar-BdyuuIk7.js.map +0 -1
- package/dist/avatar-DBfJucB9.cjs.map +0 -1
- package/dist/lightbox-service-3mHqBKEh.cjs.map +0 -1
- package/dist/lightbox-service-DxbYZAuv.js.map +0 -1
- package/dist/list-FWXmY-eQ.js.map +0 -1
- package/dist/list-JjR7WOrd.cjs.map +0 -1
- package/dist/navigation-rail-D1o3qDe_.cjs.map +0 -1
- package/dist/navigation-rail-DKXumnmt.js.map +0 -1
- package/dist/progress-0POmJs5o.js.map +0 -1
- package/dist/progress-qx8jtrOA.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lightbox-service-DxbYZAuv.js","sources":["../src/lightbox/lightbox.ts","../src/lightbox/flip-directive.ts","../src/lightbox/lightbox.directive.ts","../src/lightbox/lightbox-service.ts"],"sourcesContent":["import { css, html, PropertyValues } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport { ref, createRef, Ref } from 'lit/directives/ref.js'\nimport { fromEvent } from 'rxjs'\nimport { filter, takeUntil, tap, switchMap, map, first } from 'rxjs/operators'\nimport { $LitElement } from '@mixins/index';\n\n@customElement('schmancy-lightbox')\nexport class SchmancyLightbox extends $LitElement(css`\n\t:host {\n\t\tdisplay: contents;\n\t}\n`) {\n\t@property({ type: String }) src: string = ''\n\t@property({ type: Array }) images: string[] = []\n\t@property({ type: Number }) initialIndex: number = 0\n\t@property({ type: Boolean }) open: boolean = false\n\n\t@state() private currentIndex: number = 0\n\t@state() private isLoading: boolean = false\n\n\tprivate readonly swipeThreshold = 50\n\tprivate overlayRef: Ref<HTMLDivElement> = createRef()\n\tprivate contentRef: Ref<HTMLDivElement> = createRef()\n\tprivate imageRef: Ref<HTMLImageElement> = createRef()\n\n\tprivate get isGalleryMode(): boolean {\n\t\treturn this.images.length > 0\n\t}\n\n\tprivate get currentImageSrc(): string {\n\t\tif (this.isGalleryMode) {\n\t\t\treturn this.images[this.currentIndex] || ''\n\t\t}\n\t\treturn this.src\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.currentIndex = this.initialIndex\n\t}\n\n\tupdated(changedProperties: PropertyValues) {\n\t\tsuper.updated(changedProperties)\n\n\t\tif (changedProperties.has('open')) {\n\t\t\tif (this.open) {\n\t\t\t\tdocument.body.style.overflow = 'hidden'\n\t\t\t\tthis.animateIn()\n\t\t\t\tthis.setupEventListeners()\n\t\t\t} else {\n\t\t\t\tdocument.body.style.overflow = ''\n\t\t\t\tthis.animateOut()\n\t\t\t}\n\t\t}\n\n\t\tif (changedProperties.has('initialIndex')) {\n\t\t\tthis.currentIndex = this.initialIndex\n\t\t}\n\n\t\tif (changedProperties.has('currentIndex') && this.open) {\n\t\t\tthis.animateImageChange()\n\t\t}\n\t}\n\n\tprivate animateIn() {\n\t\tconst overlay = this.overlayRef.value\n\t\tconst content = this.contentRef.value\n\t\tconst image = this.imageRef.value\n\n\t\tif (overlay) {\n\t\t\t// Set initial styles\n\t\t\toverlay.style.backgroundColor = 'rgba(0, 0, 0, 0)'\n\t\t\toverlay.style.opacity = '0'\n\n\t\t\t// Animate to visible state\n\t\t\toverlay.animate(\n\t\t\t\t[\n\t\t\t\t\t{ opacity: 0 },\n\t\t\t\t\t{ opacity: 1 },\n\t\t\t\t],\n\t\t\t\t{\n\t\t\t\t\tduration: 300,\n\t\t\t\t\teasing: 'cubic-bezier(0.25, 1, 0.5, 1)',\n\t\t\t\t\tfill: 'forwards',\n\t\t\t\t},\n\t\t\t)\n\n\t\t\t// Manually set background color after a tick\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\toverlay.style.backgroundColor = 'rgba(0, 0, 0, 0.95)'\n\t\t\t})\n\t\t}\n\n\t\tif (content) {\n\t\t\tcontent.animate(\n\t\t\t\t[\n\t\t\t\t\t{ transform: 'scale(0.95)', opacity: 0 },\n\t\t\t\t\t{ transform: 'scale(1)', opacity: 1 },\n\t\t\t\t],\n\t\t\t\t{\n\t\t\t\t\tduration: 400,\n\t\t\t\t\tdelay: 100,\n\t\t\t\t\teasing: 'cubic-bezier(0.34, 1.56, 0.64, 1)', // Spring effect\n\t\t\t\t\tfill: 'forwards',\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\n\t\tif (image) {\n\t\t\timage.animate(\n\t\t\t\t[\n\t\t\t\t\t{ opacity: 0, transform: 'scale(0.98)' },\n\t\t\t\t\t{ opacity: 1, transform: 'scale(1)' },\n\t\t\t\t],\n\t\t\t\t{\n\t\t\t\t\tduration: 350,\n\t\t\t\t\tdelay: 150,\n\t\t\t\t\teasing: 'cubic-bezier(0.25, 1, 0.5, 1)',\n\t\t\t\t\tfill: 'forwards',\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\t}\n\n\tprivate animateOut() {\n\t\tconst overlay = this.overlayRef.value\n\t\tconst content = this.contentRef.value\n\t\tconst image = this.imageRef.value\n\n\t\tif (image) {\n\t\t\timage.animate(\n\t\t\t\t[\n\t\t\t\t\t{ transform: 'scale(1)', opacity: 1 },\n\t\t\t\t\t{ transform: 'scale(0.95)', opacity: 0 },\n\t\t\t\t],\n\t\t\t\t{\n\t\t\t\t\tduration: 200,\n\t\t\t\t\teasing: 'ease-out',\n\t\t\t\t\tfill: 'forwards',\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\n\t\tif (content) {\n\t\t\tcontent.animate(\n\t\t\t\t[\n\t\t\t\t\t{ transform: 'scale(1)', opacity: 1 },\n\t\t\t\t\t{ transform: 'scale(0.95)', opacity: 0 },\n\t\t\t\t],\n\t\t\t\t{\n\t\t\t\t\tduration: 250,\n\t\t\t\t\teasing: 'ease-out',\n\t\t\t\t\tfill: 'forwards',\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\n\t\tif (overlay) {\n\t\t\tconst animation = overlay.animate(\n\t\t\t\t[\n\t\t\t\t\t{ opacity: 1 },\n\t\t\t\t\t{ opacity: 0 },\n\t\t\t\t],\n\t\t\t\t{\n\t\t\t\t\tduration: 250,\n\t\t\t\t\tdelay: 50,\n\t\t\t\t\teasing: 'ease-out',\n\t\t\t\t\tfill: 'forwards',\n\t\t\t\t},\n\t\t\t)\n\n\t\t\tanimation.onfinish = () => {\n\t\t\t\t// Reset background color\n\t\t\t\toverlay.style.backgroundColor = 'rgba(0, 0, 0, 0)'\n\t\t\t\tthis.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }))\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate animateImageChange() {\n\t\tconst image = this.imageRef.value\n\t\tif (!image) return\n\n\t\t// Fade out\n\t\tconst fadeOut = image.animate(\n\t\t\t[\n\t\t\t\t{ opacity: 1, transform: 'scale(1)' },\n\t\t\t\t{ opacity: 0, transform: 'scale(0.98)' },\n\t\t\t],\n\t\t\t{\n\t\t\t\tduration: 150,\n\t\t\t\teasing: 'ease-out',\n\t\t\t\tfill: 'forwards',\n\t\t\t},\n\t\t)\n\n\t\t// Fade in after fade out completes\n\t\tfadeOut.onfinish = () => {\n\t\t\timage.animate(\n\t\t\t\t[\n\t\t\t\t\t{ opacity: 0, transform: 'scale(0.98)' },\n\t\t\t\t\t{ opacity: 1, transform: 'scale(1)' },\n\t\t\t\t],\n\t\t\t\t{\n\t\t\t\t\tduration: 200,\n\t\t\t\t\teasing: 'cubic-bezier(0.25, 1, 0.5, 1)',\n\t\t\t\t\tfill: 'forwards',\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\t}\n\n\tprivate setupEventListeners() {\n\t\t// Keyboard navigation\n\t\tfromEvent<KeyboardEvent>(document, 'keydown')\n\t\t\t.pipe(\n\t\t\t\tfilter(() => this.open),\n\t\t\t\ttap(e => {\n\t\t\t\t\tswitch (e.key) {\n\t\t\t\t\t\tcase 'Escape':\n\t\t\t\t\t\t\tthis.handleClose()\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'ArrowLeft':\n\t\t\t\t\t\t\tthis.handlePrevious()\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'ArrowRight':\n\t\t\t\t\t\t\tthis.handleNext()\n\t\t\t\t\t\t\tbreak\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()\n\n\t\t// Touch/swipe events for mobile\n\t\tif (!this.isGalleryMode || this.images.length <= 1) return\n\n\t\tconst content = this.contentRef.value\n\t\tif (!content) return\n\n\t\tconst touchStart$ = fromEvent<TouchEvent>(content, 'touchstart')\n\t\tconst touchEnd$ = fromEvent<TouchEvent>(content, 'touchend')\n\n\t\ttouchStart$\n\t\t\t.pipe(\n\t\t\t\tswitchMap(startEvent => {\n\t\t\t\t\tconst startX = startEvent.touches[0].clientX\n\t\t\t\t\treturn touchEnd$.pipe(\n\t\t\t\t\t\tfirst(),\n\t\t\t\t\t\tmap(endEvent => {\n\t\t\t\t\t\t\tconst endX = endEvent.changedTouches[0].clientX\n\t\t\t\t\t\t\treturn endX - startX\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\tfilter(distance => Math.abs(distance) > this.swipeThreshold),\n\t\t\t\ttap(distance => (distance > 0 ? this.handlePrevious() : this.handleNext())),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tprivate handleClose = () => {\n\t\tthis.open = false\n\t}\n\n\tprivate handlePrevious = () => {\n\t\tif (this.isGalleryMode && this.images.length > 1) {\n\t\t\tthis.isLoading = true\n\t\t\tthis.currentIndex = (this.currentIndex - 1 + this.images.length) % this.images.length\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('change', {\n\t\t\t\t\tdetail: { index: this.currentIndex },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t}\n\n\tprivate handleNext = () => {\n\t\tif (this.isGalleryMode && this.images.length > 1) {\n\t\t\tthis.isLoading = true\n\t\t\tthis.currentIndex = (this.currentIndex + 1) % this.images.length\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('change', {\n\t\t\t\t\tdetail: { index: this.currentIndex },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t}\n\n\tprivate handleImageLoad = () => {\n\t\tthis.isLoading = false\n\t}\n\n\tprivate handleOverlayClick = (e: Event) => {\n\t\t// Close when clicking the overlay (not the content)\n\t\tif (e.target === e.currentTarget) {\n\t\t\tthis.handleClose()\n\t\t}\n\t}\n\n\trender() {\n\t\tif (!this.open) return html``\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\t${ref(this.overlayRef)}\n\t\t\t\tclass=\"fixed inset-0 z-9999 flex items-center justify-center backdrop-blur-sm\"\n\t\t\t\t@click=${this.handleOverlayClick}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\t${ref(this.contentRef)}\n\t\t\t\t\tclass=\"relative max-w-[90vw] max-h-[90vh]\"\n\t\t\t\t\t@click=${(e: Event) => e.stopPropagation()}\n\t\t\t\t>\n\t\t\t\t\t<!-- Close Button -->\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"absolute top-4 right-4 md:top-4 md:right-4 sm:top-2 sm:right-2 bg-white/15 backdrop-blur-md border border-white/20 text-white w-11 h-11 rounded-full flex items-center justify-center cursor-pointer z-10 transition-all duration-200 hover:bg-white/25 hover:scale-105 active:scale-95\"\n\t\t\t\t\t\t@click=${this.handleClose}\n\t\t\t\t\t\taria-label=\"Close lightbox\"\n\t\t\t\t\t\ttitle=\"Close (Esc)\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<schmancy-icon>close</schmancy-icon>\n\t\t\t\t\t</button>\n\n\t\t\t\t\t<!-- Touch Zones for Gallery Navigation -->\n\t\t\t\t\t${when(\n\t\t\t\t\t\tthis.isGalleryMode && this.images.length > 1,\n\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"absolute top-0 bottom-0 left-0 w-1/3 cursor-pointer z-5\"\n\t\t\t\t\t\t\t\t@click=${this.handlePrevious}\n\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"absolute top-0 bottom-0 right-0 w-1/3 cursor-pointer z-5\"\n\t\t\t\t\t\t\t\t@click=${this.handleNext}\n\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t`,\n\t\t\t\t\t)}\n\n\t\t\t\t\t<!-- Loading Spinner -->\n\t\t\t\t\t${when(\n\t\t\t\t\t\tthis.isLoading,\n\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t<div class=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\">\n\t\t\t\t\t\t\t\t<schmancy-progress indeterminate></schmancy-progress>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`,\n\t\t\t\t\t)}\n\n\t\t\t\t\t<!-- Main Image -->\n\t\t\t\t\t<img\n\t\t\t\t\t\t${ref(this.imageRef)}\n\t\t\t\t\t\tclass=\"max-w-[90vw] max-h-[90vh] object-contain rounded select-none touch-pinch-zoom ${this\n\t\t\t\t\t\t\t.isGalleryMode\n\t\t\t\t\t\t\t? 'cursor-default'\n\t\t\t\t\t\t\t: 'cursor-pointer'}\"\n\t\t\t\t\t\t.src=${this.currentImageSrc}\n\t\t\t\t\t\talt=\"Full size image\"\n\t\t\t\t\t\t@load=${this.handleImageLoad}\n\t\t\t\t\t\t@click=${() => (!this.isGalleryMode ? this.handleClose() : null)}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<!-- Navigation Controls (Gallery Mode Only) -->\n\t\t\t\t\t${when(\n\t\t\t\t\t\tthis.isGalleryMode && this.images.length > 1,\n\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"absolute bottom-[-3.5rem] md:bottom-[-3.5rem] sm:bottom-[-3rem] left-1/2 -translate-x-1/2 flex items-center gap-4 z-10\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclass=\"bg-white/15 backdrop-blur-md border border-white/20 text-white w-10 h-10 rounded-full flex items-center justify-center cursor-pointer transition-all duration-200 hover:bg-white/25 hover:scale-105 active:scale-95\"\n\t\t\t\t\t\t\t\t\t@click=${this.handlePrevious}\n\t\t\t\t\t\t\t\t\taria-label=\"Previous image\"\n\t\t\t\t\t\t\t\t\ttitle=\"Previous (←)\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<schmancy-icon>arrow_back</schmancy-icon>\n\t\t\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t\t\t<div class=\"text-white text-base font-medium min-w-16 text-center\" aria-live=\"polite\">\n\t\t\t\t\t\t\t\t\t${this.currentIndex + 1} / ${this.images.length}\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclass=\"bg-white/15 backdrop-blur-md border border-white/20 text-white w-10 h-10 rounded-full flex items-center justify-center cursor-pointer transition-all duration-200 hover:bg-white/25 hover:scale-105 active:scale-95\"\n\t\t\t\t\t\t\t\t\t@click=${this.handleNext}\n\t\t\t\t\t\t\t\t\taria-label=\"Next image\"\n\t\t\t\t\t\t\t\t\ttitle=\"Next (→)\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<schmancy-icon>arrow_forward</schmancy-icon>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`,\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-lightbox': SchmancyLightbox\n\t}\n}\n","import { directive, PartInfo, PartType, ElementPart } from 'lit/directive.js'\nimport { AsyncDirective } from 'lit/async-directive.js'\nimport { noChange } from 'lit'\n\nexport interface FlipOptions {\n\t/** Source element to animate from (uses element's bounding rect) */\n\tsourceElement?: HTMLElement\n\t/** Click position - can be MouseEvent, TouchEvent, or {x, y} coordinates */\n\tposition?: { x: number; y: number } | MouseEvent | TouchEvent\n\t/** Animation duration in ms (total for both stages) */\n\tduration?: number\n\t/** CSS easing function */\n\teasing?: string\n\t/** Whether to animate scale (default: true) */\n\tscale?: boolean\n\t/** Enable blackbird two-stage arc animation (default: true) */\n\tblackbird?: boolean\n}\n\n/** Extract x,y coordinates from various position inputs */\nfunction extractPosition(pos: FlipOptions['position']): { x: number; y: number } | null {\n\tif (!pos) return null\n\n\tif ('clientX' in pos) {\n\t\t// MouseEvent\n\t\treturn { x: pos.clientX, y: pos.clientY }\n\t} else if ('touches' in pos && pos.touches.length) {\n\t\t// TouchEvent\n\t\treturn { x: pos.touches[0].clientX, y: pos.touches[0].clientY }\n\t} else if ('x' in pos && 'y' in pos) {\n\t\t// Position object\n\t\treturn { x: pos.x, y: pos.y }\n\t}\n\n\treturn null\n}\n\n/**\n * Calculate arc control point for bird-like curved trajectory\n * Birds arc UP when taking off and arc DOWN when landing\n */\nfunction calculateArcPoint(\n\tstart: { x: number; y: number },\n\tend: { x: number; y: number },\n\tarcDirection: 'up' | 'down' = 'up',\n\tintensity: number = 0.3,\n): { x: number; y: number } {\n\tconst midX = (start.x + end.x) / 2\n\tconst midY = (start.y + end.y) / 2\n\tconst distance = Math.sqrt(Math.pow(end.x - start.x, 2) + Math.pow(end.y - start.y, 2))\n\n\t// Arc height proportional to distance, but capped\n\tconst arcHeight = Math.min(distance * intensity, 150)\n\n\treturn {\n\t\tx: midX,\n\t\ty: arcDirection === 'up' ? midY - arcHeight : midY + arcHeight,\n\t}\n}\n\nclass FlipDirective extends AsyncDirective {\n\tprivate element?: HTMLElement\n\tprivate hasAnimated = false\n\n\tconstructor(partInfo: PartInfo) {\n\t\tsuper(partInfo)\n\t\tif (partInfo.type !== PartType.ELEMENT) {\n\t\t\tthrow new Error('flip directive can only be used on elements')\n\t\t}\n\t}\n\n\trender(_options?: FlipOptions) {\n\t\treturn noChange\n\t}\n\n\tupdate(part: ElementPart, [options]: [FlipOptions?]) {\n\t\tthis.element = part.element as HTMLElement\n\n\t\t// Animate if we have either a source element or position\n\t\tconst hasSource = options?.sourceElement || options?.position\n\t\tif (!this.hasAnimated && hasSource) {\n\t\t\tthis.hasAnimated = true\n\t\t\tthis.animateIn(options)\n\t\t}\n\n\t\treturn noChange\n\t}\n\n\tprivate animateIn(options?: FlipOptions) {\n\t\tif (!this.element) return\n\n\t\t// Check reduced motion preference\n\t\tif (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return\n\n\t\tconst totalDuration = options?.duration ?? 600\n\t\tconst animateScale = options?.scale !== false\n\t\tconst useBlackbird = options?.blackbird !== false\n\n\t\t// Get positions\n\t\tconst clickPos = extractPosition(options?.position)\n\t\tconst sourceRect = options?.sourceElement?.getBoundingClientRect()\n\n\t\tconst animate = () => {\n\t\t\tconst targetRect = this.element!.getBoundingClientRect()\n\t\t\tconst targetCenter = {\n\t\t\t\tx: targetRect.left + targetRect.width / 2,\n\t\t\t\ty: targetRect.top + targetRect.height / 2,\n\t\t\t}\n\n\t\t\t// Determine source point\n\t\t\tlet sourceCenter: { x: number; y: number }\n\t\t\tlet sourceScale = { x: 0.1, y: 0.1 }\n\n\t\t\tif (sourceRect) {\n\t\t\t\tsourceCenter = {\n\t\t\t\t\tx: sourceRect.left + sourceRect.width / 2,\n\t\t\t\t\ty: sourceRect.top + sourceRect.height / 2,\n\t\t\t\t}\n\t\t\t\tif (animateScale) {\n\t\t\t\t\tsourceScale = {\n\t\t\t\t\t\tx: sourceRect.width / targetRect.width,\n\t\t\t\t\t\ty: sourceRect.height / targetRect.height,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (clickPos) {\n\t\t\t\tsourceCenter = clickPos\n\t\t\t} else {\n\t\t\t\tsourceCenter = { x: window.innerWidth / 2, y: window.innerHeight / 2 }\n\t\t\t}\n\n\t\t\t// Calculate deltas from target (where element is) to source (where we start)\n\t\t\tconst sourceDelta = {\n\t\t\t\tx: sourceCenter.x - targetCenter.x,\n\t\t\t\ty: sourceCenter.y - targetCenter.y,\n\t\t\t}\n\n\t\t\tif (useBlackbird && clickPos && sourceRect) {\n\t\t\t\t// TWO-STAGE BLACKBIRD ANIMATION\n\t\t\t\t// Stage 1: Source element → Click position (takeoff arc - UP)\n\t\t\t\t// Stage 2: Click position → Final destination (landing arc - DOWN)\n\n\t\t\t\tconst clickDelta = {\n\t\t\t\t\tx: clickPos.x - targetCenter.x,\n\t\t\t\t\ty: clickPos.y - targetCenter.y,\n\t\t\t\t}\n\n\t\t\t\t// Calculate arc control points\n\t\t\t\tconst takeoffArc = calculateArcPoint(sourceCenter, clickPos, 'up', 0.4)\n\t\t\t\tconst landingArc = calculateArcPoint(clickPos, targetCenter, 'down', 0.3)\n\n\t\t\t\t// Arc deltas relative to target\n\t\t\t\tconst takeoffArcDelta = {\n\t\t\t\t\tx: takeoffArc.x - targetCenter.x,\n\t\t\t\t\ty: takeoffArc.y - targetCenter.y,\n\t\t\t\t}\n\t\t\t\tconst landingArcDelta = {\n\t\t\t\t\tx: landingArc.x - targetCenter.x,\n\t\t\t\t\ty: landingArc.y - targetCenter.y,\n\t\t\t\t}\n\n\t\t\t\t// Intermediate scale at click position\n\t\t\t\tconst midScale = 0.3\n\n\t\t\t\t// Create keyframes for two-stage arc animation\n\t\t\t\t// 0% → 25% → 50% → 75% → 100%\n\t\t\t\t// Source → Takeoff Arc → Click → Landing Arc → Final\n\t\t\t\tthis.element!.animate(\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// 0% - Start at source element\n\t\t\t\t\t\t\ttransform: `translate(${sourceDelta.x}px, ${sourceDelta.y}px) scale(${sourceScale.x}, ${sourceScale.y})`,\n\t\t\t\t\t\t\topacity: 0.6,\n\t\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// 25% - Peak of takeoff arc (bird lifts up)\n\t\t\t\t\t\t\ttransform: `translate(${takeoffArcDelta.x}px, ${takeoffArcDelta.y}px) scale(${midScale * 0.7})`,\n\t\t\t\t\t\t\topacity: 0.8,\n\t\t\t\t\t\t\toffset: 0.25,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// 50% - At click position (transition point)\n\t\t\t\t\t\t\ttransform: `translate(${clickDelta.x}px, ${clickDelta.y}px) scale(${midScale})`,\n\t\t\t\t\t\t\topacity: 0.9,\n\t\t\t\t\t\t\toffset: 0.5,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// 75% - Landing arc (bird descends toward target)\n\t\t\t\t\t\t\ttransform: `translate(${landingArcDelta.x}px, ${landingArcDelta.y}px) scale(0.6)`,\n\t\t\t\t\t\t\topacity: 0.95,\n\t\t\t\t\t\t\toffset: 0.75,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// 100% - Final position\n\t\t\t\t\t\t\ttransform: 'translate(0, 0) scale(1)',\n\t\t\t\t\t\t\topacity: 1,\n\t\t\t\t\t\t\toffset: 1,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\t{\n\t\t\t\t\t\tduration: totalDuration,\n\t\t\t\t\t\teasing: 'cubic-bezier(0.34, 1.2, 0.64, 1)', // Slight overshoot for organic feel\n\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t} else if (useBlackbird && clickPos) {\n\t\t\t\t// SINGLE-STAGE with arc (click position to final)\n\t\t\t\tconst arcPoint = calculateArcPoint(clickPos, targetCenter, 'down', 0.35)\n\t\t\t\tconst arcDelta = {\n\t\t\t\t\tx: arcPoint.x - targetCenter.x,\n\t\t\t\t\ty: arcPoint.y - targetCenter.y,\n\t\t\t\t}\n\n\t\t\t\tthis.element!.animate(\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttransform: `translate(${sourceDelta.x}px, ${sourceDelta.y}px) scale(0.1)`,\n\t\t\t\t\t\t\topacity: 0,\n\t\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttransform: `translate(${arcDelta.x}px, ${arcDelta.y}px) scale(0.5)`,\n\t\t\t\t\t\t\topacity: 0.8,\n\t\t\t\t\t\t\toffset: 0.5,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttransform: 'translate(0, 0) scale(1)',\n\t\t\t\t\t\t\topacity: 1,\n\t\t\t\t\t\t\toffset: 1,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\t{\n\t\t\t\t\t\tduration: totalDuration,\n\t\t\t\t\t\teasing: 'cubic-bezier(0.34, 1.2, 0.64, 1)',\n\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\t// SIMPLE animation (fallback)\n\t\t\t\tthis.element!.animate(\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttransform: `translate(${sourceDelta.x}px, ${sourceDelta.y}px) scale(${sourceScale.x}, ${sourceScale.y})`,\n\t\t\t\t\t\t\topacity: 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ transform: 'translate(0, 0) scale(1, 1)', opacity: 1 },\n\t\t\t\t\t],\n\t\t\t\t\t{\n\t\t\t\t\t\tduration: totalDuration,\n\t\t\t\t\t\teasing: options?.easing ?? 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\t// Handle image loading\n\t\tif (this.element instanceof HTMLImageElement) {\n\t\t\tif (this.element.complete) {\n\t\t\t\trequestAnimationFrame(animate)\n\t\t\t} else {\n\t\t\t\tthis.element.onload = () => requestAnimationFrame(animate)\n\t\t\t}\n\t\t} else {\n\t\t\trequestAnimationFrame(animate)\n\t\t}\n\t}\n}\n\nexport const flip = directive(FlipDirective)\n","import { directive, PartInfo, PartType, ElementPart } from 'lit/directive.js'\nimport { AsyncDirective } from 'lit/async-directive.js'\nimport { noChange, TemplateResult } from 'lit'\nimport { html, render } from 'lit'\nimport { styleMap } from 'lit/directives/style-map.js'\nimport { flip } from './flip-directive.js'\n\nexport interface LightboxOptions {\n\timages?: string[]\n\tindex?: number\n\toverlay?: TemplateResult\n}\n\nclass LightboxDirective extends AsyncDirective {\n\tprivate element?: HTMLImageElement\n\tprivate clickHandler?: EventListener\n\tprivate keyHandler?: EventListener\n\tprivate overlayElement?: HTMLDivElement\n\tprivate currentIndex = 0\n\tprivate images: string[] = []\n\tprivate overlay?: TemplateResult\n\tprivate clickPosition?: { x: number; y: number }\n\n\tconstructor(partInfo: PartInfo) {\n\t\tsuper(partInfo)\n\t\tif (partInfo.type !== PartType.ELEMENT) {\n\t\t\tthrow new Error('lightbox directive can only be used on elements')\n\t\t}\n\t}\n\n\trender(_options?: LightboxOptions) {\n\t\treturn noChange\n\t}\n\n\tupdate(part: ElementPart, [options]: [LightboxOptions?]) {\n\t\tthis.element = part.element as HTMLImageElement\n\n\t\t// Setup click handler\n\t\tif (!this.clickHandler) {\n\t\t\tthis.clickHandler = (e: Event) => {\n\t\t\t\te.preventDefault()\n\t\t\t\te.stopPropagation()\n\n\t\t\t\t// Capture click position from MouseEvent or TouchEvent\n\t\t\t\tif ('clientX' in e) {\n\t\t\t\t\tthis.clickPosition = { x: (e as MouseEvent).clientX, y: (e as MouseEvent).clientY }\n\t\t\t\t} else if ('touches' in e && (e as TouchEvent).touches.length) {\n\t\t\t\t\tconst touch = (e as TouchEvent).touches[0]\n\t\t\t\t\tthis.clickPosition = { x: touch.clientX, y: touch.clientY }\n\t\t\t\t}\n\n\t\t\t\tif (options?.images && options.images.length > 0) {\n\t\t\t\t\tthis.images = options.images\n\t\t\t\t\tthis.currentIndex = options.index || 0\n\t\t\t\t} else {\n\t\t\t\t\tthis.images = [this.element!.src]\n\t\t\t\t\tthis.currentIndex = 0\n\t\t\t\t}\n\t\t\t\tthis.overlay = options?.overlay\n\n\t\t\t\tthis.open()\n\t\t\t}\n\n\t\t\tthis.element.addEventListener('click', this.clickHandler)\n\t\t\tthis.element.style.cursor = 'pointer'\n\t\t\tthis.element.classList.add('hover:opacity-80', 'transition-opacity')\n\t\t}\n\n\t\treturn noChange\n\t}\n\n\tprivate open() {\n\t\t// Create overlay container with flex centering\n\t\tthis.overlayElement = document.createElement('div')\n\t\tthis.overlayElement.className = 'fixed inset-0 flex items-center justify-center opacity-0 bg-black/95 backdrop-blur-sm'\n\t\tthis.overlayElement.style.zIndex = '1000'\n\n\t\t// Render lightbox content using Lit\n\t\trender(this.renderLightbox(), this.overlayElement)\n\n\t\t// Add to body\n\t\tdocument.body.appendChild(this.overlayElement)\n\t\tdocument.body.style.overflow = 'hidden'\n\n\t\t// Animate in overlay\n\t\trequestAnimationFrame(() => {\n\t\t\tthis.overlayElement!.animate([{ opacity: 0 }, { opacity: 1 }], {\n\t\t\t\tduration: 300,\n\t\t\t\teasing: 'cubic-bezier(0.25, 1, 0.5, 1)',\n\t\t\t\tfill: 'forwards',\n\t\t\t})\n\t\t})\n\n\t\t// Setup keyboard\n\t\tthis.keyHandler = (e: KeyboardEvent) => {\n\t\t\tif (e.key === 'Escape') this.close()\n\t\t\tif (e.key === 'ArrowLeft' && this.images.length > 1) this.prev()\n\t\t\tif (e.key === 'ArrowRight' && this.images.length > 1) this.next()\n\t\t}\n\t\tdocument.addEventListener('keydown', this.keyHandler)\n\n\t\t// Click overlay to close\n\t\tthis.overlayElement.addEventListener('click', e => {\n\t\t\tif (e.target === this.overlayElement) this.close()\n\t\t})\n\t}\n\n\tprivate close() {\n\t\tif (!this.overlayElement) return\n\n\t\tconst contentContainer = this.overlayElement.querySelector('[data-lightbox-content]') as HTMLElement\n\n\t\t// Animate back to click position\n\t\tif (contentContainer && this.clickPosition) {\n\t\t\tconst rect = contentContainer.getBoundingClientRect()\n\n\t\t\t// Animate container shrinking toward click point\n\t\t\tconst deltaX = this.clickPosition.x - (rect.left + rect.width / 2)\n\t\t\tconst deltaY = this.clickPosition.y - (rect.top + rect.height / 2)\n\n\t\t\tconst containerAnim = contentContainer.animate(\n\t\t\t\t[\n\t\t\t\t\t{ transform: 'translate(0, 0) scale(1)', opacity: 1 },\n\t\t\t\t\t{ transform: `translate(${deltaX}px, ${deltaY}px) scale(0.1)`, opacity: 0 },\n\t\t\t\t],\n\t\t\t\t{\n\t\t\t\t\tduration: 300,\n\t\t\t\t\teasing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n\t\t\t\t\tfill: 'forwards',\n\t\t\t\t},\n\t\t\t)\n\n\t\t\tthis.overlayElement.animate([{ opacity: 1 }, { opacity: 0 }], {\n\t\t\t\tduration: 250,\n\t\t\t\teasing: 'ease-out',\n\t\t\t\tfill: 'forwards',\n\t\t\t})\n\n\t\t\tcontainerAnim.onfinish = () => {\n\t\t\t\tthis.overlayElement?.remove()\n\t\t\t\tthis.overlayElement = undefined\n\t\t\t\tdocument.body.style.overflow = ''\n\t\t\t}\n\t\t} else {\n\t\t\t// Fallback to simple fade\n\t\t\tconst animation = this.overlayElement.animate([{ opacity: 1 }, { opacity: 0 }], {\n\t\t\t\tduration: 250,\n\t\t\t\teasing: 'ease-out',\n\t\t\t\tfill: 'forwards',\n\t\t\t})\n\n\t\t\tanimation.onfinish = () => {\n\t\t\t\tthis.overlayElement?.remove()\n\t\t\t\tthis.overlayElement = undefined\n\t\t\t\tdocument.body.style.overflow = ''\n\t\t\t}\n\t\t}\n\n\t\tif (this.keyHandler) {\n\t\t\tdocument.removeEventListener('keydown', this.keyHandler)\n\t\t\tthis.keyHandler = undefined\n\t\t}\n\t}\n\n\tprivate prev() {\n\t\tthis.currentIndex = (this.currentIndex - 1 + this.images.length) % this.images.length\n\t\tthis.updateImage()\n\t}\n\n\tprivate next() {\n\t\tthis.currentIndex = (this.currentIndex + 1) % this.images.length\n\t\tthis.updateImage()\n\t}\n\n\tprivate updateImage() {\n\t\tif (!this.overlayElement) return\n\t\trender(this.renderLightbox(), this.overlayElement)\n\t}\n\n\tprivate renderLightbox() {\n\t\tconst currentSrc = this.images[this.currentIndex]\n\t\tconst isGallery = this.images.length > 1\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tdata-lightbox-content\n\t\t\t\tclass=\"relative\"\n\t\t\t\tstyle=${styleMap({\n\t\t\t\t\ttransformOrigin: 'center center',\n\t\t\t\t})}\n\t\t\t\t@click=${(e: Event) => e.stopPropagation()}\n\t\t\t>\n\t\t\t\t<!-- Close button -->\n\t\t\t\t<button\n\t\t\t\t\tclass=\"absolute top-2 right-2 z-10 w-10 h-10 rounded-full bg-white/20 hover:bg-white/30 flex items-center justify-center text-white transition-colors\"\n\t\t\t\t\t@click=${() => this.close()}\n\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t>\n\t\t\t\t\t<span class=\"text-2xl\">×</span>\n\t\t\t\t</button>\n\n\t\t\t\t<!-- Image container with optional overlay -->\n\t\t\t\t<div class=\"relative\">\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc=${currentSrc}\n\t\t\t\t\t\t${flip({\n\t\t\t\t\t\t\tsourceElement: this.element,\n\t\t\t\t\t\t\tposition: this.clickPosition,\n\t\t\t\t\t\t\tduration: 600,\n\t\t\t\t\t\t\tscale: true,\n\t\t\t\t\t\t\tblackbird: true,\n\t\t\t\t\t\t})}\n\t\t\t\t\t\tclass=\"object-contain rounded-lg\"\n\t\t\t\t\t\tstyle=\"max-height: calc(100vh - 40px); max-width: 90vw;\"\n\t\t\t\t\t\t@click=${() => !isGallery && this.close()}\n\t\t\t\t\t/>\n\t\t\t\t\t${this.overlay ? this.overlay : ''}\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Gallery controls -->\n\t\t\t\t${isGallery\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<div class=\"flex items-center justify-center gap-4 text-white mt-4\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclass=\"w-10 h-10 rounded-full bg-white/20 hover:bg-white/30 flex items-center justify-center transition-colors\"\n\t\t\t\t\t\t\t\t\t@click=${() => this.prev()}\n\t\t\t\t\t\t\t\t\taria-label=\"Previous\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t←\n\t\t\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t\t\t<div class=\"text-lg\">${this.currentIndex + 1} / ${this.images.length}</div>\n\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclass=\"w-10 h-10 rounded-full bg-white/20 hover:bg-white/30 flex items-center justify-center transition-colors\"\n\t\t\t\t\t\t\t\t\t@click=${() => this.next()}\n\t\t\t\t\t\t\t\t\taria-label=\"Next\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t→\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`\n\t\t\t\t\t: ''}\n\t\t\t</div>\n\t\t`\n\t}\n\n\tdisconnected() {\n\t\tif (this.element && this.clickHandler) {\n\t\t\tthis.element.removeEventListener('click', this.clickHandler)\n\t\t}\n\t\tthis.close()\n\t}\n}\n\nexport const lightbox = directive(LightboxDirective)\n","import { filter, fromEvent, map, Subject, switchMap, takeUntil, tap } from 'rxjs'\nimport { html, render } from 'lit'\nimport { styleMap } from 'lit/directives/style-map.js'\nimport { ComponentType } from '../area/router.types'\nimport { discoverComponent } from '@mixins/discovery.service'\nimport { lightbox as lightboxDirective, type LightboxOptions } from './lightbox.directive'\n\nexport type LightboxConfig = {\n\t// Image mode\n\timage?: string\n\timages?: string[]\n\tindex?: number\n\toverlay?: ComponentType\n\n\t// Component-only mode (no image background)\n\tcomponent?: ComponentType\n\n\tprops?: Record<string, unknown>\n}\n\n\n/**\n * Lightbox service for centralized lightbox management.\n * Follows the same patterns as DialogService.\n */\nclass LightboxService {\n\tprivate static instance: LightboxService\n\n\t// Subject for lightbox opening requests\n\tprivate pushSubject = new Subject<LightboxConfig>()\n\n\t// Subject for lightbox dismissal requests\n\tprivate dismissSubject = new Subject<void>()\n\n\t// Track active lightbox\n\tprivate activeLightbox?: {\n\t\telement: HTMLDivElement\n\t\tconfig: LightboxConfig\n\t\tcurrentIndex: number\n\t\timages: string[]\n\t}\n\n\tprivate constructor() {\n\t\tthis.setupLightboxOpeningLogic()\n\t\tthis.setupLightboxDismissLogic()\n\t}\n\n\t/**\n\t * Get the singleton instance\n\t */\n\tpublic static getInstance(): LightboxService {\n\t\tif (!LightboxService.instance) {\n\t\t\tLightboxService.instance = new LightboxService()\n\t\t}\n\t\treturn LightboxService.instance\n\t}\n\n\t/**\n\t * Sets up the main lightbox opening logic using RxJS pipes\n\t */\n\tprivate setupLightboxOpeningLogic() {\n\t\tthis.pushSubject\n\t\t\t.pipe(\n\t\t\t\tswitchMap(config => {\n\t\t\t\t\t// Use discoverComponent to find schmancy-theme (same pattern as sheet.service.ts)\n\t\t\t\t\treturn discoverComponent<HTMLElement>('schmancy-theme').pipe(\n\t\t\t\t\t\tmap(theme => {\n\t\t\t\t\t\t\t// Determine container - use theme or fallback to body\n\t\t\t\t\t\t\tconst container = theme || document.body\n\n\t\t\t\t\t\t\t// Create overlay element\n\t\t\t\t\t\t\tconst overlay = document.createElement('div')\n\t\t\t\t\t\t\toverlay.className = 'fixed inset-0 flex items-center justify-center opacity-0 bg-black/95 backdrop-blur-sm'\n\t\t\t\t\t\t\toverlay.style.zIndex = '1000'\n\n\t\t\t\t\t\t\tcontainer.appendChild(overlay)\n\t\t\t\t\t\t\tdocument.body.style.overflow = 'hidden'\n\n\t\t\t\t\t\t\treturn { overlay, config, container }\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\ttap(({ overlay, config }) => {\n\t\t\t\t\t// Setup images array\n\t\t\t\t\tlet images: string[] = []\n\t\t\t\t\tlet currentIndex = 0\n\n\t\t\t\t\tif (config.images && config.images.length > 0) {\n\t\t\t\t\t\timages = config.images\n\t\t\t\t\t\tcurrentIndex = config.index || 0\n\t\t\t\t\t} else if (config.image) {\n\t\t\t\t\t\timages = [config.image]\n\t\t\t\t\t\tcurrentIndex = 0\n\t\t\t\t\t}\n\n\t\t\t\t\t// Store active lightbox state\n\t\t\t\t\tthis.activeLightbox = {\n\t\t\t\t\t\telement: overlay,\n\t\t\t\t\t\tconfig,\n\t\t\t\t\t\tcurrentIndex,\n\t\t\t\t\t\timages,\n\t\t\t\t\t}\n\n\t\t\t\t\t// Keyboard handling via RxJS\n\t\t\t\t\tfromEvent<KeyboardEvent>(document, 'keydown').pipe(\n\t\t\t\t\t\ttakeUntil(this.dismissSubject),\n\t\t\t\t\t\tfilter(() => !!this.activeLightbox),\n\t\t\t\t\t\ttap(e => {\n\t\t\t\t\t\t\tif (e.key === 'Escape') this.dismiss()\n\t\t\t\t\t\t\tif (e.key === 'ArrowLeft' && this.activeLightbox!.images.length > 1) this.navigatePrev()\n\t\t\t\t\t\t\tif (e.key === 'ArrowRight' && this.activeLightbox!.images.length > 1) this.navigateNext()\n\t\t\t\t\t\t})\n\t\t\t\t\t).subscribe()\n\n\t\t\t\t\t// Click overlay to close via RxJS\n\t\t\t\t\tfromEvent<MouseEvent>(overlay, 'click').pipe(\n\t\t\t\t\t\ttakeUntil(this.dismissSubject),\n\t\t\t\t\t\tfilter(e => e.target === overlay),\n\t\t\t\t\t\ttap(() => this.dismiss())\n\t\t\t\t\t).subscribe()\n\n\t\t\t\t\t// Render content\n\t\t\t\t\tif (config.component) {\n\t\t\t\t\t\tthis.renderComponent(overlay, config)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.renderLightbox(overlay, config, images, currentIndex)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Animate in\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\toverlay.animate([{ opacity: 0 }, { opacity: 1 }], {\n\t\t\t\t\t\t\tduration: 300,\n\t\t\t\t\t\t\teasing: 'cubic-bezier(0.25, 1, 0.5, 1)',\n\t\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Sets up the lightbox dismissal logic\n\t */\n\tprivate setupLightboxDismissLogic() {\n\t\tthis.dismissSubject\n\t\t\t.pipe(\n\t\t\t\ttap(() => {\n\t\t\t\t\tif (!this.activeLightbox) return\n\n\t\t\t\t\tconst { element } = this.activeLightbox\n\n\t\t\t\t\t// Animate out\n\t\t\t\t\tconst animation = element.animate([{ opacity: 1 }, { opacity: 0 }], {\n\t\t\t\t\t\tduration: 250,\n\t\t\t\t\t\teasing: 'ease-out',\n\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t})\n\n\t\t\t\t\tanimation.onfinish = () => {\n\t\t\t\t\t\telement.remove()\n\t\t\t\t\t\tdocument.body.style.overflow = ''\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.activeLightbox = undefined\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Push/open a lightbox\n\t */\n\tpublic push(config: LightboxConfig): void {\n\t\t// Close any existing lightbox first\n\t\tif (this.activeLightbox) {\n\t\t\tthis.dismiss()\n\t\t}\n\t\tthis.pushSubject.next(config)\n\t}\n\n\t/**\n\t * Dismiss the lightbox\n\t */\n\tpublic dismiss(): void {\n\t\tthis.dismissSubject.next()\n\t}\n\n\t/**\n\t * Navigate to previous image\n\t */\n\tprivate navigatePrev(): void {\n\t\tif (!this.activeLightbox || this.activeLightbox.images.length <= 1) return\n\n\t\tconst { images, config, element } = this.activeLightbox\n\t\tthis.activeLightbox.currentIndex = (this.activeLightbox.currentIndex - 1 + images.length) % images.length\n\t\tthis.renderLightbox(element, config, images, this.activeLightbox.currentIndex)\n\t}\n\n\t/**\n\t * Navigate to next image\n\t */\n\tprivate navigateNext(): void {\n\t\tif (!this.activeLightbox || this.activeLightbox.images.length <= 1) return\n\n\t\tconst { images, config, element } = this.activeLightbox\n\t\tthis.activeLightbox.currentIndex = (this.activeLightbox.currentIndex + 1) % images.length\n\t\tthis.renderLightbox(element, config, images, this.activeLightbox.currentIndex)\n\t}\n\n\t/**\n\t * Render component-only mode (no image background)\n\t */\n\tprivate renderComponent(overlay: HTMLDivElement, config: LightboxConfig): void {\n\t\tif (!config.component) return\n\n\t\t// Create the component\n\t\tlet component: HTMLElement\n\t\tif (typeof config.component === 'string') {\n\t\t\tcomponent = document.createElement(config.component)\n\t\t} else {\n\t\t\tcomponent = new (config.component as CustomElementConstructor)()\n\t\t}\n\n\t\t// Set props\n\t\tif (config.props) {\n\t\t\tObject.entries(config.props).forEach(([key, value]) => {\n\t\t\t\t;(component as unknown as Record<string, unknown>)[key] = value\n\t\t\t})\n\t\t}\n\n\t\t// Create wrapper with close button\n\t\tconst template = html`\n\t\t\t<div class=\"relative\" @click=${(e: Event) => e.stopPropagation()}>\n\t\t\t\t<!-- Close button -->\n\t\t\t\t<button\n\t\t\t\t\tclass=\"absolute -top-12 right-0 z-10 w-10 h-10 rounded-full bg-white/20 hover:bg-white/30 flex items-center justify-center text-white transition-colors\"\n\t\t\t\t\t@click=${() => this.dismiss()}\n\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t>\n\t\t\t\t\t<span class=\"text-2xl\">×</span>\n\t\t\t\t</button>\n\n\t\t\t\t<!-- Component container -->\n\t\t\t\t<div id=\"lightbox-component-container\"></div>\n\t\t\t</div>\n\t\t`\n\n\t\trender(template, overlay)\n\n\t\t// Append component after render\n\t\tconst container = overlay.querySelector('#lightbox-component-container')\n\t\tif (container) {\n\t\t\tcontainer.appendChild(component)\n\t\t}\n\t}\n\n\t/**\n\t * Render image lightbox\n\t */\n\tprivate renderLightbox(overlay: HTMLDivElement, config: LightboxConfig, images: string[], currentIndex: number): void {\n\t\tconst currentSrc = images[currentIndex]\n\t\tconst isGallery = images.length > 1\n\n\t\t// Create overlay component if specified\n\t\tlet overlayComponent: HTMLElement | null = null\n\t\tif (config.overlay) {\n\t\t\tif (typeof config.overlay === 'string') {\n\t\t\t\toverlayComponent = document.createElement(config.overlay)\n\t\t\t} else if (typeof config.overlay === 'function') {\n\t\t\t\toverlayComponent = new (config.overlay as CustomElementConstructor)()\n\t\t\t}\n\n\t\t\t// Set props on the component\n\t\t\tif (config.props && overlayComponent) {\n\t\t\t\tObject.entries(config.props).forEach(([key, value]) => {\n\t\t\t\t\t;(overlayComponent as unknown as Record<string, unknown>)[key] = value\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tconst template = html`\n\t\t\t<div\n\t\t\t\tclass=\"relative\"\n\t\t\t\tstyle=${styleMap({ maxWidth: '90vw', maxHeight: '90vh' })}\n\t\t\t\t@click=${(e: Event) => e.stopPropagation()}\n\t\t\t>\n\t\t\t\t<!-- Close button -->\n\t\t\t\t<button\n\t\t\t\t\tclass=\"absolute top-4 right-4 z-10 w-10 h-10 rounded-full bg-white/20 hover:bg-white/30 flex items-center justify-center text-white transition-colors\"\n\t\t\t\t\t@click=${() => this.dismiss()}\n\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t>\n\t\t\t\t\t<span class=\"text-2xl\">×</span>\n\t\t\t\t</button>\n\n\t\t\t\t<!-- Image container with optional overlay -->\n\t\t\t\t<div class=\"relative\" id=\"lightbox-image-container\">\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc=${currentSrc}\n\t\t\t\t\t\tclass=\"max-w-full object-contain rounded-lg\"\n\t\t\t\t\t\tstyle=${styleMap({ maxHeight: '85vh' })}\n\t\t\t\t\t\t@click=${() => !isGallery && this.dismiss()}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Gallery controls -->\n\t\t\t\t${isGallery\n\t\t\t\t\t? html`\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"absolute left-1/2 -translate-x-1/2 flex items-center gap-4 text-white\"\n\t\t\t\t\t\t\t\tstyle=${styleMap({ bottom: '-60px' })}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclass=\"w-10 h-10 rounded-full bg-white/20 hover:bg-white/30 flex items-center justify-center transition-colors\"\n\t\t\t\t\t\t\t\t\t@click=${() => this.navigatePrev()}\n\t\t\t\t\t\t\t\t\taria-label=\"Previous\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t←\n\t\t\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t\t\t<div class=\"text-lg\">${currentIndex + 1} / ${images.length}</div>\n\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclass=\"w-10 h-10 rounded-full bg-white/20 hover:bg-white/30 flex items-center justify-center transition-colors\"\n\t\t\t\t\t\t\t\t\t@click=${() => this.navigateNext()}\n\t\t\t\t\t\t\t\t\taria-label=\"Next\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t→\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t`\n\t\t\t\t\t: ''}\n\t\t\t</div>\n\t\t`\n\n\t\trender(template, overlay)\n\n\t\t// Append overlay component to image container after render\n\t\tif (overlayComponent) {\n\t\t\tconst container = overlay.querySelector('#lightbox-image-container')\n\t\t\tif (container) {\n\t\t\t\t// Remove any existing overlay component\n\t\t\t\tconst existing = container.querySelector('[data-lightbox-overlay]')\n\t\t\t\tif (existing) existing.remove()\n\n\t\t\t\toverlayComponent.setAttribute('data-lightbox-overlay', '')\n\t\t\t\tcontainer.appendChild(overlayComponent)\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Unified lightbox type - works as both directive and service\n */\nexport type LightboxAPI = {\n\t(options?: LightboxOptions): ReturnType<typeof lightboxDirective>\n\tpush: (config: LightboxConfig) => void\n\tdismiss: () => void\n}\n\n/**\n * Unified lightbox export - works as both directive and service:\n * - Directive: ${lightbox()} or ${lightbox({ overlay: html`...` })}\n * - Service: lightbox.push({ image, overlay: 'component-name', props })\n */\nexport const lightbox: LightboxAPI = Object.assign(\n\t// Callable as directive (backward compatible)\n\t(options?: LightboxOptions) => lightboxDirective(options),\n\t// Also has service methods\n\t{\n\t\tpush: (config: LightboxConfig) => LightboxService.getInstance().push(config),\n\t\tdismiss: () => LightboxService.getInstance().dismiss(),\n\t},\n)\n"],"names":["SchmancyLightbox","$LitElement","css","constructor","super","arguments","this","src","images","initialIndex","open","currentIndex","isLoading","swipeThreshold","overlayRef","createRef","contentRef","imageRef","handleClose","handlePrevious","isGalleryMode","length","dispatchEvent","CustomEvent","detail","index","bubbles","composed","handleNext","handleImageLoad","handleOverlayClick","e","target","currentTarget","currentImageSrc","connectedCallback","changedProperties","updated","has","document","body","style","overflow","animateIn","setupEventListeners","animateOut","animateImageChange","overlay","value","content","image","backgroundColor","opacity","animate","duration","easing","fill","requestAnimationFrame","transform","delay","onfinish","fromEvent","pipe","filter","tap","key","takeUntil","disconnecting","subscribe","touchStart$","touchEnd$","switchMap","startEvent","startX","touches","clientX","first","map","endEvent","changedTouches","distance","Math","abs","render","html","ref","stopPropagation","when","calculateArcPoint","start","end","arcDirection","intensity","midX","x","midY","y","sqrt","pow","arcHeight","min","__decorateClass","property","type","String","prototype","Array","Number","Boolean","state","customElement","flip","directive","AsyncDirective","partInfo","hasAnimated","PartType","ELEMENT","Error","_options","noChange","part","options","element","hasSource","sourceElement","position","window","matchMedia","matches","totalDuration","animateScale","scale","useBlackbird","blackbird","clickPos","pos","clientY","sourceRect","getBoundingClientRect","targetRect","targetCenter","left","width","top","height","sourceCenter","sourceScale","innerWidth","innerHeight","sourceDelta","clickDelta","takeoffArc","landingArc","takeoffArcDelta","landingArcDelta","midScale","offset","arcPoint","arcDelta","HTMLImageElement","complete","onload","lightbox","clickHandler","preventDefault","clickPosition","touch","addEventListener","cursor","classList","add","overlayElement","createElement","className","zIndex","renderLightbox","appendChild","keyHandler","close","prev","next","contentContainer","querySelector","rect","deltaX","deltaY","containerAnim","remove","removeEventListener","updateImage","currentSrc","isGallery","styleMap","transformOrigin","LightboxService","pushSubject","Subject","dismissSubject","setupLightboxOpeningLogic","setupLightboxDismissLogic","getInstance","instance","config","discoverComponent","theme","container","activeLightbox","dismiss","navigatePrev","navigateNext","component","renderComponent","props","Object","entries","forEach","template","overlayComponent","maxWidth","maxHeight","bottom","existing","setAttribute","assign","lightboxDirective","push"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list-FWXmY-eQ.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":";;;;;;;;;;AAEO,MAAMA,IAA0BC,EAAAA,MAA6B,GCAvDC,IAA6BD,EAA6B;;;;;ACahE,IAAME,IAAN,cAA+BC,EAAAA,EAAAA;AAAAA,EAA/B,cAAAC;AAAAC,UAAAA,GAAAC,SAAAA,GAUuBC,KAAAC;EAAoB;AAAA,EAcjD,IAAA,aAAcC;AACb,WAAO,CAAC,OAAO,OAAO,UAAU,UAAU,gBAAA;AAAA,EAC3C;AAAA,EAEA,eAAAC;AACCH,SAAKI,SAASC,QAAQC,CAAAA,MAAAA;AACrBA,MAAAA,EAAIC,UAAUC,IAAAA,GAAOR,KAAKE,UAAAA;AAAAA,IAAAA,CAAAA,GAE3BF,KAAKS,UAAUJ,QAAQC,CAAAA,MAAAA;AACtBA,MAAAA,EAAIC,UAAUC,IAAAA,GAAOR,KAAKE,UAAAA;AAAAA,IAAAA,CAAAA;AAAAA,EAE5B;AAAA,EAEA,SAAAQ;AACC,UAAMC,IAAU,EACf,gBAAgBX,KAAKY,YAArB,IACA,gBAAgBZ,KAAKY,SACrB,0UAEA,qDAAqDZ,KAAKC,SAAAA,GAGrDY,IAAoB,EACzB,uCAAA,IACA,gBAAgBb,KAAKY,YAArB,IACA,gBAAgBZ,KAAKY,SACrB,uEAAA,CAAwEZ,KAAKc,SAAAA;AAE9E,WAAOC,mBAAsBf,KAAKc,gBAAgB,CAAA,UAAWd,KAAKgB,SAASL,CAAAA,CAAAA;AAAAA,KACxEM,EAAAA,CAAMjB,KAAKc,UAAU,MAAMC,iBAAoBf,KAAKgB,SAASH,CAAAA,CAAAA,UAAAA,CAAAA;AAAAA;AAAAA;AAAAA,EAGjE;AAAA;AArDAK,EAAA,CAFCC,EAAQ,EAAEC,SAAS1B,GAA4B2B,WAAAA,GAAW,CAAA,GAC1DC,EAAAA,CAAAA,GAFW3B,EAGZ4B,WAAA,WAAA,CAAA,GAGAL,EAAA,CADCI,EAAS,EAAEE,MAAMC,QAAAA,CAAAA,CAAAA,GALN9B,EAMZ4B,WAAA,WAAA,CAAA,GAE6BL,EAAA,CAA5BI,EAAS,EAAEE,MAAMC,aARN9B,EAQiB4B,WAAA,YAAA,CAAA,GAEAL,EAAA,CAA5BI,EAAS,EAAEE,MAAMC,QAAAA,CAAAA,CAAAA,GAVN9B,EAUiB4B,WAAA,YAAA,CAAA,GAMrBL,EAAA,CAJPQ,EAAsB,EACtBC,MAAM,WACNC,SAAAA,GAAS,CAAA,CAAA,GAdEjC,EAgBJ4B,WAAA,WAAA,CAAA,GAMAL,EAAA,CAJPQ,EAAsB,EACtBC,MAAM,YACNC,YAAS,CAAA,CAAA,GApBEjC,EAsBJ4B,WAAA,YAAA,CAAA,GAtBI5B,IAANuB,EAAA,CADNW,EAAc,oBAAA,CAAA,GACFlC,CAAAA;;;;;ACSN,IAAMmC,IAAN,cAAmBlC,EAAgBmC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,CAAnC,EAAA;AAAA,EAAA,cAAAlC;AAAAC,UAAAA,GAAAC,SAAAA,GA2BNC,KAAAgC,OAA4B,QAU5BhC,KAAAiC,YAAmC;AAAA,EAAA;AAAA,EAUnC,SAAAvB;AACC,WAAOK;AAAAA,kCACyBf,KAAKiC,SAAAA,UAAmBjC,KAAKgC,IAAAA,SAAahC,KAAKkC,OAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,EAMhF;AAAA;AAtCAhB,EAAA,CAFCiB,EAAQ,EAAEf,SAAS5B,EAAAA,CAAAA,GACnB8B,MAhBWQ,EAiBZP,WAAA,WAAA,CAAA,GAUAL,EAAA,CADCI,EAAS,EAAEE,MAAMY,QAAQC,YAAS,CAAA,CAAA,GA1BvBP,EA2BZP,WAAA,QAAA,IAUAL,EAAA,CADCI,EAAS,EAAEE,MAAMc,YApCNR,EAqCZP,WAAA,aAAA,CAAA,GArCYO,IAANZ,EAAA,CADNW,EAAc,eAAA,CAAA,GACFC,CAAAA;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list-JjR7WOrd.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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"navigation-rail-D1o3qDe_.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 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<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\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","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":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"navigation-rail-DKXumnmt.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 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<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\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","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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"progress-0POmJs5o.js","sources":["../src/progress/progress.ts"],"sourcesContent":["import { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { styleMap } from 'lit/directives/style-map.js'\nimport { $LitElement } from '@mixins/index';\n\n@customElement('schmancy-progress')\nexport default class SchmancyProgress extends $LitElement(css`\n :host {\n display: block;\n }\n\n @keyframes indeterminate {\n 0% {\n left: -30%;\n }\n 100% {\n left: 100%;\n }\n }\n\n .indeterminate-animation {\n animation: indeterminate 1.5s infinite ease-in-out;\n }\n`) {\n @property({ type: Number, reflect: true })\n value = 0\n\n @property({ type: Number, reflect: true })\n max = 100\n\n @property({ type: Boolean, reflect: true })\n indeterminate = false\n\n // M3 aligned track heights: xs=1px, sm=2px, md=4px, lg=8px\n @property({ type: String, reflect: true })\n size: 'xs' | 'sm' | 'md' | 'lg' = 'md'\n\n @property({ type: String, reflect: true })\n color: 'primary' | 'secondary' | 'tertiary' | 'error' | 'success' = 'primary'\n\n @property({ type: Boolean, reflect: true })\n glass = false\n\n private get percentage(): number {\n if (this.indeterminate) return 0\n return Math.min(100, Math.max(0, (this.value / this.max) * 100))\n }\n\n protected render() {\n const containerClasses = {\n 'w-full': true,\n 'relative': true,\n 'overflow-hidden': true,\n 'rounded-full': true,\n 'h-px': this.size === 'xs', // 1px - M3 linear indicator track\n 'h-0.5': this.size === 'sm', // 2px\n 'h-1': this.size === 'md', // 4px - M3 default\n 'h-2': this.size === 'lg', // 8px\n // Glass effect background\n 'backdrop-blur-xl': this.glass,\n 'backdrop-saturate-150': this.glass,\n 'bg-surface-container/20': this.glass && !this.indeterminate,\n 'bg-surface-container': !this.glass,\n 'shadow-[inset_0_1px_2px_0_rgba(0,0,0,0.1)]': this.glass,\n 'border': this.glass,\n 'border-outline/20': this.glass\n }\n\n const barClasses = {\n 'h-full': true,\n 'rounded-full': true,\n 'transition-all': true,\n 'duration-300': true,\n 'ease-in-out': true,\n 'relative': true,\n 'bg-primary-default': this.color === 'primary' && !this.glass,\n 'bg-secondary-default': this.color === 'secondary' && !this.glass,\n 'bg-tertiary-default': this.color === 'tertiary' && !this.glass,\n 'bg-error-default': this.color === 'error' && !this.glass,\n 'bg-success-default': this.color === 'success' && !this.glass,\n 'w-[30%]': this.indeterminate,\n 'absolute': this.indeterminate,\n 'indeterminate-animation': this.indeterminate\n }\n\n const barStyles = this.indeterminate \n ? {} \n : { width: `${this.percentage}%` }\n\n // Glass effect bar classes\n const glassBarClasses = {\n 'backdrop-blur-sm': this.glass,\n 'shadow-[0_0_20px_rgba(0,0,0,0.1)]': this.glass,\n // Use semi-transparent background colors for glass effect\n 'bg-primary-default/70': this.glass && this.color === 'primary',\n 'bg-secondary-default/70': this.glass && this.color === 'secondary',\n 'bg-tertiary-default/70': this.glass && this.color === 'tertiary',\n 'bg-error-default/70': this.glass && this.color === 'error',\n 'bg-success-default/70': this.glass && this.color === 'success',\n }\n\n return html`\n <div class=\"${classMap(containerClasses)}\">\n <div \n class=\"${classMap({...barClasses, ...glassBarClasses})}\"\n style=\"${styleMap(barStyles)}\"\n role=\"progressbar\"\n aria-valuenow=\"${this.value}\"\n aria-valuemin=\"0\"\n aria-valuemax=\"${this.max}\"\n >\n ${this.glass ? html`\n <!-- Glass shine effect -->\n <div class=\"absolute inset-0 bg-linear-to-b from-surface-on/20 to-transparent rounded-full\"></div>\n ` : ''}\n </div>\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'schmancy-progress': SchmancyProgress\n }\n}\n"],"names":["SchmancyProgress","$LitElement","css","constructor","super","arguments","this","value","max","indeterminate","size","color","glass","percentage","Math","min","render","containerClasses","relative","border","barClasses","absolute","barStyles","width","glassBarClasses","html","classMap","styleMap","__decorateClass","property","type","Number","reflect","prototype","Boolean","String","customElement"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"progress-qx8jtrOA.cjs","sources":["../src/progress/progress.ts"],"sourcesContent":["import { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { styleMap } from 'lit/directives/style-map.js'\nimport { $LitElement } from '@mixins/index';\n\n@customElement('schmancy-progress')\nexport default class SchmancyProgress extends $LitElement(css`\n :host {\n display: block;\n }\n\n @keyframes indeterminate {\n 0% {\n left: -30%;\n }\n 100% {\n left: 100%;\n }\n }\n\n .indeterminate-animation {\n animation: indeterminate 1.5s infinite ease-in-out;\n }\n`) {\n @property({ type: Number, reflect: true })\n value = 0\n\n @property({ type: Number, reflect: true })\n max = 100\n\n @property({ type: Boolean, reflect: true })\n indeterminate = false\n\n // M3 aligned track heights: xs=1px, sm=2px, md=4px, lg=8px\n @property({ type: String, reflect: true })\n size: 'xs' | 'sm' | 'md' | 'lg' = 'md'\n\n @property({ type: String, reflect: true })\n color: 'primary' | 'secondary' | 'tertiary' | 'error' | 'success' = 'primary'\n\n @property({ type: Boolean, reflect: true })\n glass = false\n\n private get percentage(): number {\n if (this.indeterminate) return 0\n return Math.min(100, Math.max(0, (this.value / this.max) * 100))\n }\n\n protected render() {\n const containerClasses = {\n 'w-full': true,\n 'relative': true,\n 'overflow-hidden': true,\n 'rounded-full': true,\n 'h-px': this.size === 'xs', // 1px - M3 linear indicator track\n 'h-0.5': this.size === 'sm', // 2px\n 'h-1': this.size === 'md', // 4px - M3 default\n 'h-2': this.size === 'lg', // 8px\n // Glass effect background\n 'backdrop-blur-xl': this.glass,\n 'backdrop-saturate-150': this.glass,\n 'bg-surface-container/20': this.glass && !this.indeterminate,\n 'bg-surface-container': !this.glass,\n 'shadow-[inset_0_1px_2px_0_rgba(0,0,0,0.1)]': this.glass,\n 'border': this.glass,\n 'border-outline/20': this.glass\n }\n\n const barClasses = {\n 'h-full': true,\n 'rounded-full': true,\n 'transition-all': true,\n 'duration-300': true,\n 'ease-in-out': true,\n 'relative': true,\n 'bg-primary-default': this.color === 'primary' && !this.glass,\n 'bg-secondary-default': this.color === 'secondary' && !this.glass,\n 'bg-tertiary-default': this.color === 'tertiary' && !this.glass,\n 'bg-error-default': this.color === 'error' && !this.glass,\n 'bg-success-default': this.color === 'success' && !this.glass,\n 'w-[30%]': this.indeterminate,\n 'absolute': this.indeterminate,\n 'indeterminate-animation': this.indeterminate\n }\n\n const barStyles = this.indeterminate \n ? {} \n : { width: `${this.percentage}%` }\n\n // Glass effect bar classes\n const glassBarClasses = {\n 'backdrop-blur-sm': this.glass,\n 'shadow-[0_0_20px_rgba(0,0,0,0.1)]': this.glass,\n // Use semi-transparent background colors for glass effect\n 'bg-primary-default/70': this.glass && this.color === 'primary',\n 'bg-secondary-default/70': this.glass && this.color === 'secondary',\n 'bg-tertiary-default/70': this.glass && this.color === 'tertiary',\n 'bg-error-default/70': this.glass && this.color === 'error',\n 'bg-success-default/70': this.glass && this.color === 'success',\n }\n\n return html`\n <div class=\"${classMap(containerClasses)}\">\n <div \n class=\"${classMap({...barClasses, ...glassBarClasses})}\"\n style=\"${styleMap(barStyles)}\"\n role=\"progressbar\"\n aria-valuenow=\"${this.value}\"\n aria-valuemin=\"0\"\n aria-valuemax=\"${this.max}\"\n >\n ${this.glass ? html`\n <!-- Glass shine effect -->\n <div class=\"absolute inset-0 bg-linear-to-b from-surface-on/20 to-transparent rounded-full\"></div>\n ` : ''}\n </div>\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'schmancy-progress': SchmancyProgress\n }\n}\n"],"names":["SchmancyProgress","$LitElement","css","constructor","super","arguments","this","value","max","indeterminate","size","color","glass","percentage","Math","min","render","containerClasses","relative","border","barClasses","absolute","barStyles","width","glassBarClasses","html","classMap","styleMap","__decorateClass","property","type","Number","reflect","prototype","Boolean","String","customElement"],"mappings":"2dAOA,IAAqBA,EAArB,cAA8CC,EAAAA,YAAYC,EAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,GAA1D,aAAAC,CAAAC,SAAAC,SAAAA,EAmBEC,KAAAC,MAAQ,EAGRD,KAAAE,IAAM,IAGNF,KAAAG,iBAIAH,KAAAI,KAAkC,KAGlCJ,KAAAK,MAAoE,UAGpEL,KAAAM,QAAQ,CAER,gBAAYC,CACV,OAAIP,KAAKG,cAAsB,EACxBK,KAAKC,IAAI,IAAKD,KAAKN,IAAI,EAAIF,KAAKC,MAAQD,KAAKE,IAAO,GAAA,CAAA,CAC7D,CAEU,QAAAQ,CACR,MAAMC,EAAmB,CACvB,SAAA,GACAC,YACA,kBAAA,GACA,eAAA,GACA,OAAQZ,KAAKI,OAAS,KACtB,QAASJ,KAAKI,OAAS,KACvB,MAAOJ,KAAKI,OAAS,KACrB,MAAOJ,KAAKI,OAAS,KAErB,mBAAoBJ,KAAKM,MACzB,wBAAyBN,KAAKM,MAC9B,0BAA2BN,KAAKM,OAAAA,CAAUN,KAAKG,cAC/C,uBAAA,CAAyBH,KAAKM,MAC9B,6CAA8CN,KAAKM,MACnDO,OAAUb,KAAKM,MACf,oBAAqBN,KAAKM,KAAAA,EAGtBQ,EAAa,CACjB,SAAA,GACA,eAAA,GACA,iBAAA,GACA,kBACA,cAAA,GACAF,SAAAA,GACA,qBAAsBZ,KAAKK,QAAU,YAAcL,KAAKM,MACxD,uBAAwBN,KAAKK,QAAU,cAAgBL,KAAKM,MAC5D,sBAAuBN,KAAKK,QAAU,YAAVA,CAAyBL,KAAKM,MAC1D,mBAAoBN,KAAKK,QAAU,SAAVA,CAAsBL,KAAKM,MACpD,qBAAsBN,KAAKK,QAAU,WAAVA,CAAwBL,KAAKM,MACxD,UAAWN,KAAKG,cAChBY,SAAYf,KAAKG,cACjB,0BAA2BH,KAAKG,aAAAA,EAG5Ba,EAAYhB,KAAKG,cACnB,GACA,CAAEc,MAAO,GAAGjB,KAAKO,UAAAA,GAAAA,EAGfW,EAAkB,CACtB,mBAAoBlB,KAAKM,MACzB,oCAAqCN,KAAKM,MAE1C,wBAAyBN,KAAKM,OAASN,KAAKK,QAAU,UACtD,0BAA2BL,KAAKM,OAASN,KAAKK,QAAU,YACxD,yBAA0BL,KAAKM,OAASN,KAAKK,QAAU,WACvD,sBAAuBL,KAAKM,OAASN,KAAKK,QAAU,QACpD,wBAAyBL,KAAKM,OAASN,KAAKK,QAAU,SAAVA,EAG9C,OAAOc,EAAAA;AAAAA,oBACSC,EAAAA,SAAST,CAAAA,CAAAA;AAAAA;AAAAA,mBAEVS,EAAAA,SAAS,IAAIN,EAAAA,GAAeI,CAAAA,CAAAA,CAAAA;AAAAA,mBAC5BG,EAAAA,SAASL,CAAAA,CAAAA;AAAAA;AAAAA,2BAEDhB,KAAKC,KAAAA;AAAAA;AAAAA,2BAELD,KAAKE,GAAAA;AAAAA;AAAAA,YAEpBF,KAAKM,MAAQa,EAAAA;AAAAA;AAAAA;AAAAA,YAGX,EAAA;AAAA;AAAA;AAAA,KAIZ,CAAA,EA7FAG,EAAA,CADCC,EAAAA,SAAS,CAAEC,KAAMC,OAAQC,QAAAA,EAAS,CAAA,CAAA,EAlBhBhC,EAmBnBiC,UAAA,QAAA,CAAA,EAGAL,EAAA,CADCC,EAAAA,SAAS,CAAEC,KAAMC,OAAQC,QAAAA,MArBPhC,EAsBnBiC,UAAA,MAAA,CAAA,EAGAL,EAAA,CADCC,EAAAA,SAAS,CAAEC,KAAMI,QAASF,QAAAA,EAAS,CAAA,CAAA,EAxBjBhC,EAyBnBiC,UAAA,gBAAA,GAIAL,EAAA,CADCC,EAAAA,SAAS,CAAEC,KAAMK,OAAQH,UAAS,CAAA,CAAA,EA5BhBhC,EA6BnBiC,UAAA,OAAA,CAAA,EAGAL,EAAA,CADCC,EAAAA,SAAS,CAAEC,KAAMK,OAAQH,QAAAA,MA/BPhC,EAgCnBiC,UAAA,QAAA,CAAA,EAGAL,EAAA,CADCC,EAAAA,SAAS,CAAEC,KAAMI,QAASF,QAAAA,EAAS,CAAA,CAAA,EAlCjBhC,EAmCnBiC,UAAA,QAAA,CAAA,EAnCmBjC,EAArB4B,EAAA,CADCQ,EAAAA,cAAc,mBAAA,CAAA,EACMpC,CAAAA"}
|