@mhmo91/schmancy 0.4.94 → 0.4.96
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-BLDqQ33G.js → animated-text-B1DKGEyL.js} +3 -3
- package/dist/{animated-text-BLDqQ33G.js.map → animated-text-B1DKGEyL.js.map} +1 -1
- package/dist/{animated-text-CIgDmUF0.cjs → animated-text-DBRSI9xt.cjs} +2 -2
- package/dist/{animated-text-CIgDmUF0.cjs.map → animated-text-DBRSI9xt.cjs.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-DA4tYUkZ.cjs +12 -0
- package/dist/area.component-DA4tYUkZ.cjs.map +1 -0
- package/dist/area.component-DbHc6U3D.js +320 -0
- package/dist/area.component-DbHc6U3D.js.map +1 -0
- package/dist/area.js +1 -1
- package/dist/{autocomplete-35wx4zfo.cjs → autocomplete-BFN4UGNs.cjs} +2 -2
- package/dist/{autocomplete-35wx4zfo.cjs.map → autocomplete-BFN4UGNs.cjs.map} +1 -1
- package/dist/{autocomplete-DMbJLodc.js → autocomplete-DpZQqAGm.js} +3 -3
- package/dist/{autocomplete-DMbJLodc.js.map → autocomplete-DpZQqAGm.js.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/{avatar-BqGZ5lKc.js → avatar-BGzMoyIf.js} +48 -48
- package/dist/{avatar-BqGZ5lKc.js.map → avatar-BGzMoyIf.js.map} +1 -1
- package/dist/{avatar-UnP-o7T9.cjs → avatar-C-SwQh5Z.cjs} +2 -2
- package/dist/{avatar-UnP-o7T9.cjs.map → avatar-C-SwQh5Z.cjs.map} +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/{boat-PVy1fXfm.js → boat-C6oKTIlM.js} +2 -2
- package/dist/{boat-PVy1fXfm.js.map → boat-C6oKTIlM.js.map} +1 -1
- package/dist/{boat-zVJF22wK.cjs → boat-CsVNMu2n.cjs} +2 -2
- package/dist/{boat-zVJF22wK.cjs.map → boat-CsVNMu2n.cjs.map} +1 -1
- package/dist/boat.cjs +1 -1
- package/dist/boat.js +1 -1
- package/dist/busy.cjs +1 -1
- package/dist/busy.js +1 -1
- package/dist/button.cjs +1 -1
- package/dist/button.js +1 -1
- package/dist/card.cjs +1 -1
- package/dist/card.js +1 -1
- package/dist/{checkbox-BtZqKgPT.cjs → checkbox-B5XA1Ugc.cjs} +2 -2
- package/dist/{checkbox-BtZqKgPT.cjs.map → checkbox-B5XA1Ugc.cjs.map} +1 -1
- package/dist/{checkbox-DAFDBz7J.js → checkbox-DSW62smU.js} +2 -2
- package/dist/{checkbox-DAFDBz7J.js.map → checkbox-DSW62smU.js.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-BRigd0oB.cjs → chips-BWSXmedd.cjs} +108 -30
- package/dist/chips-BWSXmedd.cjs.map +1 -0
- package/dist/{chips-BnA6mVWq.js → chips-DIoIf1ND.js} +159 -81
- package/dist/chips-DIoIf1ND.js.map +1 -0
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +1 -1
- package/dist/code-highlight.cjs +1 -1
- package/dist/code-highlight.js +1 -1
- package/dist/{code-preview-CUc2NHQu.js → code-preview-8XQAR_rg.js} +2 -2
- package/dist/{code-preview-CUc2NHQu.js.map → code-preview-8XQAR_rg.js.map} +1 -1
- package/dist/{code-preview-BYWzA52m.cjs → code-preview-U3CqjP3A.cjs} +2 -2
- package/dist/{code-preview-BYWzA52m.cjs.map → code-preview-U3CqjP3A.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-DhWbY9Ph.cjs → date-range-1smHimq3.cjs} +2 -2
- package/dist/{date-range-DhWbY9Ph.cjs.map → date-range-1smHimq3.cjs.map} +1 -1
- package/dist/{date-range-DFNdMN6p.js → date-range-Bgr1ok1D.js} +3 -3
- package/dist/{date-range-DFNdMN6p.js.map → date-range-Bgr1ok1D.js.map} +1 -1
- package/dist/{date-range-inline-xh0mrWH9.js → date-range-inline-7g5AJrua.js} +3 -3
- package/dist/{date-range-inline-xh0mrWH9.js.map → date-range-inline-7g5AJrua.js.map} +1 -1
- package/dist/{date-range-inline-FiCLIta4.cjs → date-range-inline-DyGBs-PG.cjs} +2 -2
- package/dist/{date-range-inline-FiCLIta4.cjs.map → date-range-inline-DyGBs-PG.cjs.map} +1 -1
- package/dist/date-range-inline.cjs +1 -1
- package/dist/date-range-inline.js +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-BTRy2v5H.js → delay-CtF14hCc.js} +2 -2
- package/dist/{delay-BTRy2v5H.js.map → delay-CtF14hCc.js.map} +1 -1
- package/dist/{delay-dCLgp1B7.cjs → delay-R0ZUrPTI.cjs} +2 -2
- package/dist/{delay-dCLgp1B7.cjs.map → delay-R0ZUrPTI.cjs.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{details-Bf0qMDKW.cjs → details-CudVyRmo.cjs} +2 -2
- package/dist/{details-Bf0qMDKW.cjs.map → details-CudVyRmo.cjs.map} +1 -1
- package/dist/{details-BsmaD0yr.js → details-DDhUTFpC.js} +2 -2
- package/dist/{details-BsmaD0yr.js.map → details-DDhUTFpC.js.map} +1 -1
- package/dist/details.cjs +1 -1
- package/dist/details.js +1 -1
- package/dist/{dialog-content-0w0WQYF3.cjs → dialog-content-D1aMHnPF.cjs} +2 -2
- package/dist/{dialog-content-0w0WQYF3.cjs.map → dialog-content-D1aMHnPF.cjs.map} +1 -1
- package/dist/{dialog-content-r1Ai3BZj.js → dialog-content-DZ5VUwBo.js} +3 -3
- package/dist/{dialog-content-r1Ai3BZj.js.map → dialog-content-DZ5VUwBo.js.map} +1 -1
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.js +1 -1
- package/dist/{divider-BPsLFNzK.js → divider-Dn6brh7T.js} +3 -3
- package/dist/{divider-BPsLFNzK.js.map → divider-Dn6brh7T.js.map} +1 -1
- package/dist/{divider-CYPKRC_-.cjs → divider-PDyRDKLg.cjs} +2 -2
- package/dist/{divider-CYPKRC_-.cjs.map → divider-PDyRDKLg.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/{dropdown-content-DelDUcfW.cjs → dropdown-content-4VFUPSIJ.cjs} +2 -2
- package/dist/{dropdown-content-DelDUcfW.cjs.map → dropdown-content-4VFUPSIJ.cjs.map} +1 -1
- package/dist/{dropdown-content-B51-eGbI.js → dropdown-content-Cgj5pA_r.js} +3 -3
- package/dist/{dropdown-content-B51-eGbI.js.map → dropdown-content-Cgj5pA_r.js.map} +1 -1
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +1 -1
- package/dist/{email-recipients-BlSATi3L.cjs → email-recipients-CWuZ6PTF.cjs} +2 -2
- package/dist/{email-recipients-BlSATi3L.cjs.map → email-recipients-CWuZ6PTF.cjs.map} +1 -1
- package/dist/{email-recipients-hkvv_vgI.js → email-recipients-DWMc4Kbm.js} +5 -5
- package/dist/{email-recipients-hkvv_vgI.js.map → email-recipients-DWMc4Kbm.js.map} +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{flex-_K-5RVZM.cjs → flex-BNyBqVQE.cjs} +2 -2
- package/dist/{flex-_K-5RVZM.cjs.map → flex-BNyBqVQE.cjs.map} +1 -1
- package/dist/{flex-BDtCUg0s.js → flex-D7uKo3cp.js} +2 -2
- package/dist/{flex-BDtCUg0s.js.map → flex-D7uKo3cp.js.map} +1 -1
- package/dist/{form-BTmhZIB8.js → form-B1eDJoVW.js} +2 -2
- package/dist/{form-BTmhZIB8.js.map → form-B1eDJoVW.js.map} +1 -1
- package/dist/{form-jw1NVkyp.cjs → form-Cl1dBHEC.cjs} +2 -2
- package/dist/{form-jw1NVkyp.cjs.map → form-Cl1dBHEC.cjs.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{formField.mixin-D_1WwNWJ.js → formField.mixin-CVgvtBxj.js} +2 -2
- package/dist/{formField.mixin-D_1WwNWJ.js.map → formField.mixin-CVgvtBxj.js.map} +1 -1
- package/dist/{formField.mixin-HN79lSIE.cjs → formField.mixin-UB5HVdDM.cjs} +2 -2
- package/dist/{formField.mixin-HN79lSIE.cjs.map → formField.mixin-UB5HVdDM.cjs.map} +1 -1
- package/dist/{icon-pFAWVSGq.cjs → icon-6lRY13IZ.cjs} +2 -2
- package/dist/{icon-pFAWVSGq.cjs.map → icon-6lRY13IZ.cjs.map} +1 -1
- package/dist/{icon-Clqcexag.js → icon-Bxm8o8R4.js} +2 -2
- package/dist/{icon-Clqcexag.js.map → icon-Bxm8o8R4.js.map} +1 -1
- package/dist/{icon-button-Bu_eEqfk.js → icon-button-B4fsinj2.js} +3 -3
- package/dist/{icon-button-Bu_eEqfk.js.map → icon-button-B4fsinj2.js.map} +1 -1
- package/dist/{icon-button-M5CqyRR4.cjs → icon-button-B9Xckdkv.cjs} +2 -2
- package/dist/{icon-button-M5CqyRR4.cjs.map → icon-button-B9Xckdkv.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 +47 -47
- package/dist/{input-CWOVMdSb.cjs → input-BJ73v2t7.cjs} +2 -2
- package/dist/{input-CWOVMdSb.cjs.map → input-BJ73v2t7.cjs.map} +1 -1
- package/dist/{input-CFlQ_9Cq.js → input-BrFENpX9.js} +3 -3
- package/dist/{input-CFlQ_9Cq.js.map → input-BrFENpX9.js.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +1 -1
- package/dist/{list-rmfIuWZK.js → list-B11MYVeT.js} +2 -2
- package/dist/{list-rmfIuWZK.js.map → list-B11MYVeT.js.map} +1 -1
- package/dist/{list-CDXL73JQ.cjs → list-Cr5bjF_6.cjs} +2 -2
- package/dist/{list-CDXL73JQ.cjs.map → list-Cr5bjF_6.cjs.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-YJ8D9a8Z.cjs → litElement.mixin-BnXm63YO.cjs} +2 -2
- package/dist/{litElement.mixin-YJ8D9a8Z.cjs.map → litElement.mixin-BnXm63YO.cjs.map} +1 -1
- package/dist/{litElement.mixin-Dm9SOPDp.js → litElement.mixin-CAQ8pH9g.js} +2 -2
- package/dist/{litElement.mixin-Dm9SOPDp.js.map → litElement.mixin-CAQ8pH9g.js.map} +1 -1
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/{map-DQwGv46m.cjs → map-C89AQAh-.cjs} +2 -2
- package/dist/{map-DQwGv46m.cjs.map → map-C89AQAh-.cjs.map} +1 -1
- package/dist/{map-BfP3ZVm_.js → map-CPaDh0fK.js} +2 -2
- package/dist/{map-BfP3ZVm_.js.map → map-CPaDh0fK.js.map} +1 -1
- package/dist/map.cjs +1 -1
- package/dist/map.js +1 -1
- package/dist/{media-B28J9yez.js → media-BvEF-HzD.js} +2 -2
- package/dist/{media-B28J9yez.js.map → media-BvEF-HzD.js.map} +1 -1
- package/dist/{media-DtYChqKs.cjs → media-v4K8T9FY.cjs} +2 -2
- package/dist/{media-DtYChqKs.cjs.map → media-v4K8T9FY.cjs.map} +1 -1
- package/dist/{menu-jcodrTEA.cjs → menu-9KPQvqqI.cjs} +2 -2
- package/dist/{menu-jcodrTEA.cjs.map → menu-9KPQvqqI.cjs.map} +1 -1
- package/dist/{menu-C0iTDVTM.js → menu-BL-7oqJ9.js} +3 -3
- package/dist/{menu-C0iTDVTM.js.map → menu-BL-7oqJ9.js.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/{notification-service-CD-XzDeP.cjs → notification-service-7NEpiPIR.cjs} +2 -2
- package/dist/{notification-service-CD-XzDeP.cjs.map → notification-service-7NEpiPIR.cjs.map} +1 -1
- package/dist/{notification-service-BIH173dS.js → notification-service-BwM5HMaj.js} +4 -4
- package/dist/{notification-service-BIH173dS.js.map → notification-service-BwM5HMaj.js.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +2 -2
- package/dist/{notify-4u_P6A9W.js → notify-BHmCE9I3.js} +2 -2
- package/dist/{notify-4u_P6A9W.js.map → notify-BHmCE9I3.js.map} +1 -1
- package/dist/{notify-C95rxXiW.cjs → notify-DLSWAUcA.cjs} +2 -2
- package/dist/{notify-C95rxXiW.cjs.map → notify-DLSWAUcA.cjs.map} +1 -1
- package/dist/{option-D-Itfwmu.cjs → option-C4G7DGtI.cjs} +2 -2
- package/dist/{option-D-Itfwmu.cjs.map → option-C4G7DGtI.cjs.map} +1 -1
- package/dist/{option-CTkTl7Pz.js → option-CRw6_dXY.js} +2 -2
- package/dist/{option-CTkTl7Pz.js.map → option-CRw6_dXY.js.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{payment-card-form-HQsOp4z5.cjs → payment-card-form-BzGdWKH-.cjs} +2 -2
- package/dist/{payment-card-form-HQsOp4z5.cjs.map → payment-card-form-BzGdWKH-.cjs.map} +1 -1
- package/dist/{payment-card-form-DcipYS1-.js → payment-card-form-D-MHQCM7.js} +3 -3
- package/dist/{payment-card-form-DcipYS1-.js.map → payment-card-form-D-MHQCM7.js.map} +1 -1
- package/dist/{progress-B3Q1qs5e.cjs → progress-Bkugth6y.cjs} +2 -2
- package/dist/{progress-B3Q1qs5e.cjs.map → progress-Bkugth6y.cjs.map} +1 -1
- package/dist/{progress-zOZKeIA7.js → progress-BuYkNiju.js} +2 -2
- package/dist/{progress-zOZKeIA7.js.map → progress-BuYkNiju.js.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-button-C4TI0v9W.js → radio-button-CokLuIqN.js} +3 -3
- package/dist/{radio-button-C4TI0v9W.js.map → radio-button-CokLuIqN.js.map} +1 -1
- package/dist/{radio-button-COzEX5Ar.cjs → radio-button-DCKG8p75.cjs} +2 -2
- package/dist/{radio-button-COzEX5Ar.cjs.map → radio-button-DCKG8p75.cjs.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/{schmancy-steps-container-DC6Ca6-A.js → schmancy-steps-container-2gQqGQwB.js} +2 -2
- package/dist/{schmancy-steps-container-DC6Ca6-A.js.map → schmancy-steps-container-2gQqGQwB.js.map} +1 -1
- package/dist/{schmancy-steps-container-DfzodwEn.cjs → schmancy-steps-container-xIqWhNoQ.cjs} +2 -2
- package/dist/{schmancy-steps-container-DfzodwEn.cjs.map → schmancy-steps-container-xIqWhNoQ.cjs.map} +1 -1
- package/dist/{select-wUk1qE31.cjs → select-BTIUXOs_.cjs} +2 -2
- package/dist/{select-wUk1qE31.cjs.map → select-BTIUXOs_.cjs.map} +1 -1
- package/dist/{select-Br2sY6MK.js → select-Dj-oLKFF.js} +3 -3
- package/dist/{select-Br2sY6MK.js.map → select-Dj-oLKFF.js.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-D3RmdvbL.cjs → sheet-BiElPoDB.cjs} +2 -2
- package/dist/{sheet-D3RmdvbL.cjs.map → sheet-BiElPoDB.cjs.map} +1 -1
- package/dist/{sheet-BjJdVvvp.js → sheet-DHy5-DkZ.js} +3 -3
- package/dist/{sheet-BjJdVvvp.js.map → sheet-DHy5-DkZ.js.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +1 -1
- package/dist/{slider-XoN7Z9iO.cjs → slider-CwX-MWmI.cjs} +2 -2
- package/dist/{slider-XoN7Z9iO.cjs.map → slider-CwX-MWmI.cjs.map} +1 -1
- package/dist/{slider-Dgwlzvr-.js → slider-FixLgBPB.js} +3 -3
- package/dist/{slider-Dgwlzvr-.js.map → slider-FixLgBPB.js.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{spinner-D9l0j12i.cjs → spinner-Cm2yObux.cjs} +2 -2
- package/dist/{spinner-D9l0j12i.cjs.map → spinner-Cm2yObux.cjs.map} +1 -1
- package/dist/{spinner-e06PNB2u.js → spinner-NR-WnRIj.js} +2 -2
- package/dist/{spinner-e06PNB2u.js.map → spinner-NR-WnRIj.js.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{surface-BgLZnRcp.cjs → surface-BbQxucUq.cjs} +2 -2
- package/dist/{surface-BgLZnRcp.cjs.map → surface-BbQxucUq.cjs.map} +1 -1
- package/dist/{surface-trk3Zpii.js → surface-Bygc4Pkm.js} +2 -2
- package/dist/{surface-trk3Zpii.js.map → surface-Bygc4Pkm.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{table-BfFAQg7K.js → table--xC1C9bV.js} +2 -2
- package/dist/{table-BfFAQg7K.js.map → table--xC1C9bV.js.map} +1 -1
- package/dist/{table-g0Wsm45r.cjs → table-D-GttRq4.cjs} +2 -2
- package/dist/{table-g0Wsm45r.cjs.map → table-D-GttRq4.cjs.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-compatibility-FkpvGEG3.cjs → tabs-compatibility-CdydM7pv.cjs} +2 -2
- package/dist/{tabs-compatibility-FkpvGEG3.cjs.map → tabs-compatibility-CdydM7pv.cjs.map} +1 -1
- package/dist/{tabs-compatibility-D1RfuRqZ.js → tabs-compatibility-Dj58Mdjp.js} +2 -2
- package/dist/{tabs-compatibility-D1RfuRqZ.js.map → tabs-compatibility-Dj58Mdjp.js.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tailwind.mixin-DRrIaNCZ.js +43 -0
- package/dist/{tailwind.mixin-CPuO9c5y.js.map → tailwind.mixin-DRrIaNCZ.js.map} +1 -1
- package/dist/tailwind.mixin-DvXzFSLc.cjs +2 -0
- package/dist/{tailwind.mixin-Cb-fyJ_y.cjs.map → tailwind.mixin-DvXzFSLc.cjs.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-U-fvfv2M.js → textarea-8OzsuUGm.js} +2 -2
- package/dist/{textarea-U-fvfv2M.js.map → textarea-8OzsuUGm.js.map} +1 -1
- package/dist/{textarea-DBKIOjBp.cjs → textarea-BxmPIhSX.cjs} +2 -2
- package/dist/{textarea-DBKIOjBp.cjs.map → textarea-BxmPIhSX.cjs.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-button-CnWM9ZCv.js → theme-button-CKBPOL_F.js} +2 -2
- package/dist/{theme-button-CnWM9ZCv.js.map → theme-button-CKBPOL_F.js.map} +1 -1
- package/dist/{theme-button-C-6Y_Mib.cjs → theme-button-EkMBPnXv.cjs} +2 -2
- package/dist/{theme-button-C-6Y_Mib.cjs.map → theme-button-EkMBPnXv.cjs.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/{theme.component-Dko2yi2n.cjs → theme.component-BWpLpI0u.cjs} +2 -2
- package/dist/{theme.component-Dko2yi2n.cjs.map → theme.component-BWpLpI0u.cjs.map} +1 -1
- package/dist/{theme.component-CfLAvCYi.js → theme.component-CMNPDwrg.js} +2 -2
- package/dist/{theme.component-CfLAvCYi.js.map → theme.component-CMNPDwrg.js.map} +1 -1
- package/dist/theme.js +1 -1
- package/dist/{timezone-CXGJk88N.js → timezone-B0JHFjXr.js} +3 -3
- package/dist/{timezone-CXGJk88N.js.map → timezone-B0JHFjXr.js.map} +1 -1
- package/dist/{timezone-Wy7jf5gf.cjs → timezone-BGgX7VU3.cjs} +2 -2
- package/dist/{timezone-Wy7jf5gf.cjs.map → timezone-BGgX7VU3.cjs.map} +1 -1
- package/dist/{tooltip-BXCWSU_6.cjs → tooltip-BvM1QM9r.cjs} +2 -2
- package/dist/{tooltip-BXCWSU_6.cjs.map → tooltip-BvM1QM9r.cjs.map} +1 -1
- package/dist/{tooltip-CuDCLzkr.js → tooltip-vzAPO65W.js} +2 -2
- package/dist/{tooltip-CuDCLzkr.js.map → tooltip-vzAPO65W.js.map} +1 -1
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/{tree-CfcLl-dV.js → tree--vE36pPQ.js} +2 -2
- package/dist/{tree-CfcLl-dV.js.map → tree--vE36pPQ.js.map} +1 -1
- package/dist/{tree-Bux6udiH.cjs → tree-BGHP-zFq.cjs} +2 -2
- package/dist/{tree-Bux6udiH.cjs.map → tree-BGHP-zFq.cjs.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-C63WkKf1.js → typewriter-C0E8tuqP.js} +4 -4
- package/dist/{typewriter-C63WkKf1.js.map → typewriter-C0E8tuqP.js.map} +1 -1
- package/dist/{typewriter-HZThI3m1.cjs → typewriter-ovVSo7i3.cjs} +2 -2
- package/dist/{typewriter-HZThI3m1.cjs.map → typewriter-ovVSo7i3.cjs.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{typography-DRkYb9R0.js → typography-6mMnwoRl.js} +2 -2
- package/dist/{typography-DRkYb9R0.js.map → typography-6mMnwoRl.js.map} +1 -1
- package/dist/{typography-DNj4eHeR.cjs → typography-BKpY6oL9.cjs} +2 -2
- package/dist/{typography-DNj4eHeR.cjs.map → typography-BKpY6oL9.cjs.map} +1 -1
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/package.json +1 -1
- package/types/src/area/area.component.d.ts +0 -4
- package/types/src/chips/assist-chip.d.ts +1 -1
- package/types/src/chips/input-chip.d.ts +6 -1
- package/types/src/chips/suggestion-chip.d.ts +1 -1
- package/dist/chips-BRigd0oB.cjs.map +0 -1
- package/dist/chips-BnA6mVWq.js.map +0 -1
- package/dist/route.component-Cr-M16SZ.cjs +0 -12
- package/dist/route.component-Cr-M16SZ.cjs.map +0 -1
- package/dist/route.component-Df4CQy4C.js +0 -320
- package/dist/route.component-Df4CQy4C.js.map +0 -1
- package/dist/tailwind.mixin-CPuO9c5y.js +0 -43
- package/dist/tailwind.mixin-Cb-fyJ_y.cjs +0 -2
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chips-BRigd0oB.cjs","sources":["../src/chips/filter-chip.ts","../src/chips/assist-chip.ts","../src/chips/input-chip.ts","../src/chips/suggestion-chip.ts","../src/chips/chips.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/tailwind.mixin'\nimport { css, html, LitElement } from 'lit'\nimport { property, queryAssignedElements } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport { BehaviorSubject, combineLatest } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\n\n/**\n * Filter chip component for content filtering.\n *\n * Filter chips are the ONLY chip type that maintains persistent selected state.\n * They are used for filtering content by toggling on/off different filter criteria.\n *\n * @fires change - Dispatched when selection state changes with {value, selected}\n * @fires remove - Dispatched when remove button is clicked (if removable)\n *\n * @example\n * ```html\n * <schmancy-filter-chip value=\"category-1\" selected>\n * Category 1\n * </schmancy-filter-chip>\n * ```\n */\nexport class SchmancyFilterChip extends TailwindElement(css`\n\t:host {\n\t\tdisplay: inline-block;\n\t\toutline: none;\n\t\tmin-width:fit-content\n\t}\n\n\t:host([disabled]) {\n\t\tpointer-events: none;\n\t\topacity: 0.5;\n\t}\n\n\tbutton {\n\t\tfont-family: inherit;\n\t}\n\n\t/* Material Symbols font for icons */\n\t.material-symbols-outlined {\n\t\tfont-family: 'Material Symbols Outlined';\n\t\tfont-weight: normal;\n\t\tfont-style: normal;\n\t\tfont-size: 18px;\n\t\tline-height: 1;\n\t\tletter-spacing: normal;\n\t\ttext-transform: none;\n\t\tdisplay: inline-block;\n\t\twhite-space: nowrap;\n\t\tword-wrap: normal;\n\t\tdirection: ltr;\n\t\t-webkit-font-smoothing: antialiased;\n\t\ttext-rendering: optimizeLegibility;\n\t\t-moz-osx-font-smoothing: grayscale;\n\t\tfont-feature-settings: 'liga';\n\t\tvertical-align: middle;\n\t}\n`) {\n\t/** Unique identifier for this filter chip */\n\t@property({ type: String, reflect: true })\n\tvalue: string = ''\n\n\t/** Whether the filter chip is selected (active filter) */\n\tprivate _selected: boolean = false\n\n\t@property({ type: Boolean, reflect: true })\n\tget selected(): boolean {\n\t\treturn this._selected\n\t}\n\tset selected(value: boolean) {\n\t\tconst oldValue = this._selected\n\t\tthis._selected = value\n\t\tthis.requestUpdate('selected', oldValue)\n\t}\n\n\t/** Optional icon to display (Material Symbols name) */\n\t@property({ type: String, reflect: true })\n\ticon: string = ''\n\n\t/** Whether to show a remove button */\n\t@property({ type: Boolean, reflect: true })\n\tremovable: boolean = false\n\n\t/** Whether the chip is disabled */\n\t@property({ type: Boolean, reflect: true })\n\tdisabled: boolean = false\n\n\t/** Whether to use elevated style with shadow */\n\t@property({ type: Boolean, reflect: true })\n\televated: boolean = false\n\n\t// Reactive state management with RxJS\n\tprivate hover$ = new BehaviorSubject<boolean>(false)\n\tprivate pressed$ = new BehaviorSubject<boolean>(false)\n\tprivate focused$ = new BehaviorSubject<boolean>(false)\n\n\t// Query assigned elements in the icon slot\n\t@queryAssignedElements({ slot: 'icon' }) iconSlotElements!: Element[]\n\n\tconstructor() {\n\t\tsuper()\n\t\ttry {\n\t\t\tthis.internals = this.attachInternals()\n\t\t} catch {\n\t\t\tthis.internals = undefined\n\t\t}\n\t}\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tdelegatesFocus: true,\n\t}\n\n\tstatic formAssociated = true\n\tinternals: ElementInternals | undefined\n\tget form() {\n\t\treturn this.internals?.form\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// RxJS streams are maintained for potential future use\n\t\t// Currently state is handled directly through event handlers\n\t\tcombineLatest([\n\t\t\tthis.hover$,\n\t\t\tthis.pressed$,\n\t\t\tthis.focused$,\n\t\t]).pipe(\n\t\t\t// States are managed through event handlers directly\n\t\t\t// This pipeline is kept for potential future state combinations\n\t\t\ttakeUntil(this.disconnecting),\n\t\t).subscribe()\n\t}\n\n\tprivate handleClick = () => {\n\t\tif (this.disabled) return\n\n\t\t// Don't modify this.selected - let the parent container control it\n\t\t// Dispatch change event with the INTENDED state\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('change', {\n\t\t\t\tdetail: { value: this.value, selected: !this._selected },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate handleRemove = (e: Event) => {\n\t\tif (this.disabled) return\n\n\t\te.stopPropagation()\n\n\t\t// Dispatch remove event\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('remove', {\n\t\t\t\tdetail: { value: this.value },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\tif (this.disabled) return\n\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault()\n\t\t\t// Dispatch event directly rather than calling handleClick to be explicit\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('change', {\n\t\t\t\t\tdetail: { value: this.value, selected: !this._selected },\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 handleMouseEnter = () => {\n\t\tthis.hover$.next(true)\n\t}\n\n\tprivate handleMouseLeave = () => {\n\t\tthis.hover$.next(false)\n\t\tthis.pressed$.next(false)\n\t}\n\n\tprivate handleMouseDown = () => {\n\t\tthis.pressed$.next(true)\n\t}\n\n\tprivate handleMouseUp = () => {\n\t\tthis.pressed$.next(false)\n\t}\n\n\tprivate handleFocus = () => {\n\t\tthis.focused$.next(true)\n\t}\n\n\tprivate handleBlur = () => {\n\t\tthis.focused$.next(false)\n\t}\n\n\tprotected render(): unknown {\n\t\tconst chipClasses = {\n\t\t\t'inline-flex': true,\n\t\t\t'items-center': true,\n\t\t\t'gap-2': true,\n\t\t\t'rounded-full': true,\n\t\t\t'h-8 px-4': true,\n\t\t\t'cursor-pointer': !this.disabled,\n\t\t\t'transition-all': true,\n\t\t\t'duration-200': true,\n\t\t\t'select-none': true,\n\t\t\t'text-sm': true,\n\t\t\t'font-medium': true,\n\t\t\t'border': true,\n\t\t\t'relative': true,\n\t\t\t'min-h-[32px]': true,\n\n\t\t\t// Background and text colors based on selection state\n\t\t\t'bg-secondary-container': this._selected,\n\t\t\t'text-secondary-onContainer': this._selected,\n\t\t\t'border-secondary-container': this._selected,\n\t\t\t'bg-surface-container': !this._selected,\n\t\t\t'text-surface-on': !this._selected,\n\t\t\t'border-outline-variant': !this._selected,\n\n\t\t\t// Hover states\n\t\t\t'hover:brightness-95': this._selected && !this.disabled,\n\t\t\t'hover:bg-surface-containerHigh': !this._selected && !this.disabled,\n\n\t\t\t// Pressed state\n\t\t\t'active:scale-95': !this.disabled,\n\n\t\t\t// Focus-visible state for better UX\n\t\t\t'focus-visible:outline': !this.disabled,\n\t\t\t'focus-visible:outline-2': !this.disabled,\n\t\t\t'focus-visible:outline-offset-2': !this.disabled,\n\t\t\t'focus-visible:outline-primary-default': !this.disabled,\n\n\t\t\t// Elevated style\n\t\t\t'shadow-md': this.elevated && !this.disabled,\n\t\t\t'hover:shadow-lg': this.elevated && !this.disabled,\n\n\t\t\t// Disabled state\n\t\t\t'opacity-50': this.disabled,\n\t\t\t'cursor-not-allowed': this.disabled\n\t\t}\n\n\t\treturn html`\n\t\t\t<button\n\t\t\t\tclass=${this.classMap(chipClasses)}\n\t\t\t\t@click=${this.handleClick}\n\t\t\t\t@keydown=${this.handleKeyDown}\n\t\t\t\t@mouseenter=${this.handleMouseEnter}\n\t\t\t\t@mouseleave=${this.handleMouseLeave}\n\t\t\t\t@mousedown=${this.handleMouseDown}\n\t\t\t\t@mouseup=${this.handleMouseUp}\n\t\t\t\t@focus=${this.handleFocus}\n\t\t\t\t@blur=${this.handleBlur}\n\t\t\t\t?disabled=${this.disabled}\n\t\t\t\taria-pressed=${this._selected ? 'true' : 'false'}\n\t\t\t\trole=\"checkbox\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t>\n\t\t\t\t<!-- Icon container - conditionally shown using when directive -->\n\t\t\t\t${when(\n\t\t\t\t\tthis._selected || this.icon || this.iconSlotElements?.length > 0,\n\t\t\t\t\t() => html`\n\t\t\t\t\t\t<span class=\"inline-flex w-[18px] h-[18px] items-center justify-center shrink-0\">\n\t\t\t\t\t\t\t${this._selected ? html`\n\t\t\t\t\t\t\t\t<span class=\"material-symbols-outlined text-base sm:text-[18px]\">\n\t\t\t\t\t\t\t\t\tcheck\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t` : this.icon ? html`\n\t\t\t\t\t\t\t\t<span class=\"material-symbols-outlined text-base sm:text-[18px]\">\n\t\t\t\t\t\t\t\t\t${this.icon}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t` : html`\n\t\t\t\t\t\t\t\t<slot name=\"icon\"></slot>\n\t\t\t\t\t\t\t`}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t`\n\t\t\t\t)}\n\n\t\t\t\t<!-- Chip content -->\n\t\t\t\t<slot></slot>\n\n\t\t\t\t<!-- Remove button (if removable) -->\n\t\t\t\t${this.removable ? html`\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"ml-1 -mr-1 p-0.5 rounded-full hover:bg-surface-containerHighest transition-colors\"\n\t\t\t\t\t\t@click=${this.handleRemove}\n\t\t\t\t\t\taria-label=\"Remove filter\"\n\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"material-symbols-outlined text-sm sm:text-[16px]\">\n\t\t\t\t\t\t\tclose\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</button>\n\t\t\t\t` : ''}\n\t\t\t</button>\n\t\t`\n\t}\n}\n\n// Register the element with both names for backward compatibility\n// Check if not already registered to prevent duplicate registration errors\nif (!customElements.get('schmancy-filter-chip')) {\n\tcustomElements.define('schmancy-filter-chip', SchmancyFilterChip)\n}\n\n// For backward compatibility, register 'schmancy-chip' with a subclass\n// to avoid duplicate constructor registration error\nif (!customElements.get('schmancy-chip')) {\n\tclass SchmancyChipCompat extends SchmancyFilterChip {}\n\tcustomElements.define('schmancy-chip', SchmancyChipCompat)\n}\n\n// Export alias for backward compatibility\nexport { SchmancyFilterChip as SchmancyChip }\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-chip': SchmancyFilterChip\n\t\t'schmancy-filter-chip': SchmancyFilterChip\n\t}\n}\n\nexport type FilterChipChangeEvent = { value: string; selected: boolean }\nexport type FilterChipRemoveEvent = { value: string }\n// Alias for backward compatibility\nexport type SchmancyChipChangeEvent = FilterChipChangeEvent","import { TailwindElement } from '@mixins/tailwind.mixin'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { BehaviorSubject, combineLatest } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\n\n/**\n * Assist chip component - prompts user actions like opening calendar events or sharing content\n * Pure Schmancy implementation with Tailwind CSS and RxJS state management\n */\n@customElement('schmancy-assist-chip')\nexport class SchmancyAssistChip extends TailwindElement(css`\n\t:host {\n\t\tdisplay: inline-block;\n\t\toutline: none;\n\t\tmin-width:fit-content\n\t}\n\n\t:host([disabled]) {\n\t\tpointer-events: none;\n\t}\n\n\t.ripple {\n\t\tposition: absolute;\n\t\tborder-radius: 50%;\n\t\ttransform: scale(0);\n\t\tanimation: ripple 600ms linear;\n\t\tbackground-color: rgba(0, 0, 0, 0.08);\n\t\tpointer-events: none;\n\t}\n\n\t@keyframes ripple {\n\t\tto {\n\t\t\ttransform: scale(4);\n\t\t\topacity: 0;\n\t\t}\n\t}\n`) {\n\t/** Value identifier for the chip */\n\t@property({ reflect: true }) value = ''\n\n\t/** Optional icon name (Material Symbols) */\n\t@property({ reflect: true }) icon = ''\n\n\t/** Optional href for navigation */\n\t@property({ reflect: true }) href = ''\n\n\t/** Target for navigation (e.g., '_blank') */\n\t@property({ reflect: true }) target = ''\n\n\t/** Disable the chip */\n\t@property({ type: Boolean, reflect: true }) disabled = false\n\n\t/** Elevated style variant */\n\t@property({ type: Boolean, reflect: true }) elevated = false\n\n\t// RxJS state streams\n\tprivate hover$ = new BehaviorSubject<boolean>(false)\n\tprivate pressed$ = new BehaviorSubject<boolean>(false)\n\tprivate focused$ = new BehaviorSubject<boolean>(false)\n\n\t// UI state - only ripples needed for rendering\n\t@state() private ripples: Array<{ x: number; y: number; id: number }> = []\n\n\tprotected static shadowRootOptions = { ...LitElement.shadowRootOptions, delegatesFocus: true }\n\n\tprivate nextRippleId = 0\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Stream management for future extensions\n\t\t// Currently, states are handled directly in event handlers\n\t\t// This pipeline can be extended for more complex state interactions\n\t\tcombineLatest([\n\t\t\tthis.hover$,\n\t\t\tthis.pressed$,\n\t\t\tthis.focused$\n\t\t]).pipe(\n\t\t\t// States are managed through event handlers directly\n\t\t\t// This pipeline is kept for potential future state combinations\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe()\n\t}\n\n\tprivate handleClick = (e: MouseEvent) => {\n\t\tif (this.disabled) return\n\n\t\t// Add ripple effect\n\t\tconst button = this.shadowRoot?.querySelector('button')\n\t\tif (button) {\n\t\t\tconst rect = button.getBoundingClientRect()\n\t\t\tconst x = e.clientX - rect.left\n\t\t\tconst y = e.clientY - rect.top\n\t\t\tconst id = this.nextRippleId++\n\n\t\t\tthis.ripples = [...this.ripples, { x, y, id }]\n\n\t\t\t// Remove ripple after animation\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.ripples = this.ripples.filter(r => r.id !== id)\n\t\t\t}, 600)\n\t\t}\n\n\t\t// Navigate if href is provided\n\t\tif (this.href) {\n\t\t\tif (this.target === '_blank') {\n\t\t\t\twindow.open(this.href, '_blank')\n\t\t\t} else {\n\t\t\t\twindow.location.href = this.href\n\t\t\t}\n\t\t}\n\n\t\t// Dispatch action event\n\t\tthis.dispatchEvent(new CustomEvent('action', {\n\t\t\tdetail: { value: this.value },\n\t\t\tbubbles: true,\n\t\t\tcomposed: true\n\t\t}))\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\tif (this.disabled) return\n\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault()\n\t\t\tthis.pressed$.next(true)\n\n\t\t\t// Simulate click\n\t\t\tconst clickEvent = new MouseEvent('click', {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: true,\n\t\t\t\tclientX: 0,\n\t\t\t\tclientY: 0\n\t\t\t})\n\t\t\tthis.handleClick(clickEvent)\n\n\t\t\tsetTimeout(() => this.pressed$.next(false), 100)\n\t\t}\n\t}\n\n\tprivate handleFocus = () => {\n\t\tthis.focused$.next(true)\n\t}\n\n\tprivate handleBlur = () => {\n\t\tthis.focused$.next(false)\n\t}\n\n\trender() {\n\t\tconst classes = {\n\t\t\t'relative': true,\n\t\t\t'inline-flex': true,\n\t\t\t'items-center': true,\n\t\t\t'gap-1 sm:gap-1.5 md:gap-2': true,\n\t\t\t'px-2 py-1 sm:px-3 sm:py-1.5 md:px-4 md:py-2': true,\n\t\t\t'rounded-full': true,\n\t\t\t'cursor-pointer': !this.disabled,\n\t\t\t'transition-all': true,\n\t\t\t'duration-200': true,\n\t\t\t'select-none': true,\n\t\t\t'overflow-hidden': true,\n\n\t\t\t// Colors\n\t\t\t'bg-surface-container': !this.elevated,\n\t\t\t'text-surface-on': true,\n\n\t\t\t// Elevated variant\n\t\t\t'bg-surface-containerLow': this.elevated,\n\t\t\t'shadow-md': this.elevated && !this.disabled,\n\n\t\t\t// States\n\t\t\t'hover:bg-surface-containerHigh': !this.disabled && !this.elevated,\n\t\t\t'hover:shadow-lg': this.elevated && !this.disabled,\n\t\t\t'focus-visible:outline': !this.disabled,\n\t\t\t'focus-visible:outline-2': !this.disabled,\n\t\t\t'focus-visible:outline-primary-default': !this.disabled,\n\t\t\t'focus-visible:outline-offset-2': !this.disabled,\n\t\t\t'active:scale-95': !this.disabled,\n\n\t\t\t// Disabled\n\t\t\t'opacity-50': this.disabled,\n\t\t\t'cursor-not-allowed': this.disabled\n\t\t}\n\n\t\treturn html`\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=${classMap(classes)}\n\t\t\t\t?disabled=${this.disabled}\n\t\t\t\t@click=${this.handleClick}\n\t\t\t\t@keydown=${this.handleKeyDown}\n\t\t\t\t@mouseenter=${() => this.hover$.next(true)}\n\t\t\t\t@mouseleave=${() => this.hover$.next(false)}\n\t\t\t\t@mousedown=${() => this.pressed$.next(true)}\n\t\t\t\t@mouseup=${() => this.pressed$.next(false)}\n\t\t\t\t@focus=${this.handleFocus}\n\t\t\t\t@blur=${this.handleBlur}\n\t\t\t\ttabindex=${this.disabled ? '-1' : '0'}\n\t\t\t\trole=\"button\"\n\t\t\t\taria-disabled=${this.disabled}\n\t\t\t\taria-label=${this.value}\n\t\t\t>\n\t\t\t\t${this.icon ? html`\n\t\t\t\t\t<schmancy-icon class=\"text-sm sm:text-base\">${this.icon}</schmancy-icon>\n\t\t\t\t` : ''}\n\t\t\t\t<span class=\"text-xs sm:text-sm font-medium\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</span>\n\n\t\t\t\t<!-- Ripple effects -->\n\t\t\t\t${this.ripples.map(ripple => html`\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"ripple\"\n\t\t\t\t\t\tstyle=\"left: ${ripple.x}px; top: ${ripple.y}px;\"\n\t\t\t\t\t></span>\n\t\t\t\t`)}\n\t\t\t</button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-assist-chip': SchmancyAssistChip\n\t}\n}\n\nexport type AssistChipActionEvent = { value: string }","import { TailwindElement } from '@mixins/tailwind.mixin'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { BehaviorSubject, combineLatest } from 'rxjs'\nimport { map, takeUntil, tap } from 'rxjs/operators'\n\n/**\n * Input chip component - represents user-provided information that can be removed.\n *\n * IMPORTANT: Per Material Design 3 specification, input chips do NOT have selected state.\n * They represent discrete pieces of user input (like entered tags, selections from lists, etc.)\n * that can only be removed, not toggled on/off.\n *\n * Use cases:\n * - Displaying selected recipients in an email\n * - Showing applied filters that can be removed\n * - Tags or keywords entered by the user\n * - Selected items from a multi-select dropdown\n *\n * @fires click - Optional click event on chip body (value)\n * @fires remove - Dispatched when remove button is clicked (value)\n *\n * @example\n * ```html\n * <schmancy-input-chip value=\"john@example.com\" avatar=\"/avatars/john.jpg\">\n * John Doe\n * </schmancy-input-chip>\n * ```\n */\n@customElement('schmancy-input-chip')\nexport class SchmancyInputChip extends TailwindElement(css`\n\t:host {\n\t\tdisplay: inline-block;\n\t\toutline: none;\n\t\tmin-width:fit-content\n\n\t}\n\n\t:host([disabled]) {\n\t\tpointer-events: none;\n\t}\n\n\tbutton {\n\t\tfont-family: inherit;\n\t}\n\n\t.avatar-img {\n\t\twidth: 20px;\n\t\theight: 20px;\n\t\tobject-fit: cover;\n\t}\n\n\t/* Material Symbols font for icons */\n\t.material-symbols-outlined {\n\t\tfont-family: 'Material Symbols Outlined';\n\t\tfont-weight: normal;\n\t\tfont-style: normal;\n\t\tfont-size: 18px;\n\t\tline-height: 1;\n\t\tletter-spacing: normal;\n\t\ttext-transform: none;\n\t\tdisplay: inline-block;\n\t\twhite-space: nowrap;\n\t\tword-wrap: normal;\n\t\tdirection: ltr;\n\t\t-webkit-font-smoothing: antialiased;\n\t\ttext-rendering: optimizeLegibility;\n\t\t-moz-osx-font-smoothing: grayscale;\n\t\tfont-feature-settings: 'liga';\n\t\tvertical-align: middle;\n\t}\n\n\t.ripple {\n\t\tposition: absolute;\n\t\tborder-radius: 50%;\n\t\ttransform: scale(0);\n\t\tanimation: ripple 600ms linear;\n\t\tbackground-color: rgba(0, 0, 0, 0.08);\n\t\tpointer-events: none;\n\t}\n\n\t@keyframes ripple {\n\t\tto {\n\t\t\ttransform: scale(4);\n\t\t\topacity: 0;\n\t\t}\n\t}\n`) {\n\t/** Value identifier for the chip */\n\t@property({ type: String, reflect: true })\n\tvalue: string = ''\n\n\t/** Optional icon name (Material Symbols) */\n\t@property({ type: String, reflect: true })\n\ticon: string = ''\n\n\t/** Optional avatar image URL */\n\t@property({ type: String, reflect: true })\n\tavatar: string = ''\n\n\t/** Whether to show remove button (default true for input chips) */\n\t@property({ type: Boolean, reflect: true })\n\tremovable: boolean = true\n\n\t/** Disable the chip */\n\t@property({ type: Boolean, reflect: true })\n\tdisabled: boolean = false\n\n\t/** Elevated style variant */\n\t@property({ type: Boolean, reflect: true })\n\televated: boolean = false\n\n\t// RxJS state streams\n\tprivate chipHover$ = new BehaviorSubject<boolean>(false)\n\tprivate removeHover$ = new BehaviorSubject<boolean>(false)\n\tprivate focused$ = new BehaviorSubject<boolean>(false)\n\tprivate pressed$ = new BehaviorSubject<boolean>(false)\n\n\t// UI state from combined streams\n\t@state() private uiState = {\n\t\tchipHover: false,\n\t\tremoveHover: false,\n\t\tfocused: false,\n\t\tpressed: false\n\t}\n\n\t// Ripple effects\n\t@state() private ripples: Array<{ x: number; y: number; id: number }> = []\n\tprivate nextRippleId = 0\n\n\tconstructor() {\n\t\tsuper()\n\t\ttry {\n\t\t\tthis.internals = this.attachInternals()\n\t\t} catch {\n\t\t\tthis.internals = undefined\n\t\t}\n\t}\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tdelegatesFocus: true,\n\t}\n\n\tstatic formAssociated = true\n\tinternals: ElementInternals | undefined\n\tget form() {\n\t\treturn this.internals?.form\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Combine all UI state streams\n\t\tcombineLatest([\n\t\t\tthis.chipHover$,\n\t\t\tthis.removeHover$,\n\t\t\tthis.focused$,\n\t\t\tthis.pressed$\n\t\t]).pipe(\n\t\t\tmap(([chipHover, removeHover, focused, pressed]) => ({\n\t\t\t\tchipHover,\n\t\t\t\tremoveHover,\n\t\t\t\tfocused,\n\t\t\t\tpressed\n\t\t\t})),\n\t\t\ttap(state => {\n\t\t\t\tthis.uiState = state\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe()\n\t}\n\n\tprivate handleChipClick = (e: MouseEvent) => {\n\t\tif (this.disabled) return\n\n\t\t// Add ripple effect\n\t\tconst chip = this.shadowRoot?.querySelector('.chip-container') as HTMLElement\n\t\tif (chip) {\n\t\t\tconst rect = chip.getBoundingClientRect()\n\t\t\tconst x = e.clientX - rect.left\n\t\t\tconst y = e.clientY - rect.top\n\t\t\tconst id = this.nextRippleId++\n\n\t\t\tthis.ripples = [...this.ripples, { x, y, id }]\n\n\t\t\t// Remove ripple after animation\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.ripples = this.ripples.filter(r => r.id !== id)\n\t\t\t}, 600)\n\t\t}\n\n\t\t// Dispatch optional click event (for custom handling if needed)\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('click', {\n\t\t\t\tdetail: { value: this.value },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t})\n\t\t)\n\t}\n\n\tprivate handleRemove = (e: Event) => {\n\t\tif (this.disabled) return\n\n\t\te.stopPropagation()\n\n\t\t// Dispatch remove event\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('remove', {\n\t\t\t\tdetail: { value: this.value },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t})\n\t\t)\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\tif (this.disabled) return\n\n\t\t// Delete or Backspace removes the chip\n\t\tif ((e.key === 'Delete' || e.key === 'Backspace') && this.removable) {\n\t\t\te.preventDefault()\n\t\t\tthis.handleRemove(e)\n\t\t}\n\t\t// Enter can optionally trigger click\n\t\telse if (e.key === 'Enter') {\n\t\t\te.preventDefault()\n\t\t\tconst clickEvent = new MouseEvent('click', {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: true,\n\t\t\t\tclientX: 0,\n\t\t\t\tclientY: 0\n\t\t\t})\n\t\t\tthis.handleChipClick(clickEvent)\n\t\t}\n\t}\n\n\tprivate handleFocus = () => {\n\t\tthis.focused$.next(true)\n\t}\n\n\tprivate handleBlur = () => {\n\t\tthis.focused$.next(false)\n\t}\n\n\tprotected render(): unknown {\n\t\tconst chipClasses = {\n\t\t\t'chip-container': true,\n\t\t\t'inline-flex': true,\n\t\t\t'items-center': true,\n\t\t\t'gap-1 sm:gap-1.5 md:gap-2': true,\n\t\t\t'pl-3': !this.avatar, // Less padding if avatar present\n\t\t\t'pl-1': this.avatar, // Tight padding for avatar\n\t\t\t'pr-2': this.removable,\n\t\t\t'pr-3': !this.removable,\n\t\t\t'py-1 sm:py-1.5 md:py-2': true,\n\t\t\t'rounded-full': true,\n\t\t\t'cursor-default': true,\n\t\t\t'transition-all': true,\n\t\t\t'duration-200': true,\n\t\t\t'select-none': true,\n\t\t\t'text-xs sm:text-sm': true,\n\t\t\t'font-medium': true,\n\t\t\t'relative': true,\n\t\t\t'overflow-hidden': true,\n\n\t\t\t// Colors\n\t\t\t'bg-surface-container': true,\n\t\t\t'text-surface-on': true,\n\n\t\t\t// Elevated variant\n\t\t\t'shadow-md': this.elevated && !this.disabled,\n\n\t\t\t// Hover state (subtle on chip body)\n\t\t\t'hover:bg-surface-containerHigh': !this.disabled && !this.uiState.removeHover,\n\t\t\t'hover:shadow-lg': this.elevated && !this.disabled,\n\n\t\t\t// Focus-visible state for better UX\n\t\t\t'focus-visible:outline': !this.disabled,\n\t\t\t'focus-visible:outline-2': !this.disabled,\n\t\t\t'focus-visible:outline-primary-default': !this.disabled,\n\t\t\t'focus-visible:outline-offset-2': !this.disabled,\n\n\t\t\t// Disabled state\n\t\t\t'opacity-50': this.disabled,\n\t\t\t'cursor-not-allowed': this.disabled\n\t\t}\n\n\t\tconst removeButtonClasses = {\n\t\t\t\"size-5 sm:size-6\":true,\n\t\t\t'rounded-full': true,\n\t\t\t'transition-all': true,\n\t\t\t'duration-200': true,\n\t\t\t'cursor-pointer': !this.disabled,\n\n\t\t\t// Hover state for remove button\n\t\t\t'bg-error-container': this.uiState.removeHover && !this.disabled,\n\t\t\t'text-error-onContainer': this.uiState.removeHover && !this.disabled,\n\t\t\t'hover:scale-110': this.uiState.removeHover && !this.disabled,\n\n\t\t\t// Default state\n\t\t\t'hover:bg-surface-containerHighest': !this.uiState.removeHover && !this.disabled,\n\t\t\t'opacity-50': this.disabled\n\t\t}\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=${classMap(chipClasses)}\n\t\t\t\t@click=${this.handleChipClick}\n\t\t\t\t@keydown=${this.handleKeyDown}\n\t\t\t\t@mouseenter=${() => this.chipHover$.next(true)}\n\t\t\t\t@mouseleave=${() => this.chipHover$.next(false)}\n\t\t\t\t@mousedown=${() => this.pressed$.next(true)}\n\t\t\t\t@mouseup=${() => this.pressed$.next(false)}\n\t\t\t\t@focus=${this.handleFocus}\n\t\t\t\t@blur=${this.handleBlur}\n\t\t\t\trole=\"button\"\n\t\t\t\ttabindex=${this.disabled ? '-1' : '0'}\n\t\t\t\taria-disabled=${this.disabled}\n\t\t\t\taria-label=${this.value}\n\t\t\t>\n\t\t\t\t<!-- Avatar image (if provided) -->\n\t\t\t\t${this.avatar ? html`\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc=${this.avatar}\n\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\tclass=\"avatar-img rounded-full sm:size-6\"\n\t\t\t\t\t/>\n\t\t\t\t` : ''}\n\n\t\t\t\t<!-- Icon (if provided and no avatar) -->\n\t\t\t\t${this.icon && !this.avatar ? html`\n\t\t\t\t\t<span class=\"material-symbols-outlined rounded-full text-base sm:text-[18px]\">\n\t\t\t\t\t\t${this.icon}\n\t\t\t\t\t</span>\n\t\t\t\t` : ''}\n\n\t\t\t\t<!-- Chip content -->\n\t\t\t\t<span>\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</span>\n\n\t\t\t\t<!-- Remove button (shown by default for input chips) -->\n\t\t\t\t${this.removable ? html`\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=${classMap(removeButtonClasses)}\n\t\t\t\t\t\t@click=${this.handleRemove}\n\t\t\t\t\t\t@mouseenter=${() => this.removeHover$.next(true)}\n\t\t\t\t\t\t@mouseleave=${() => this.removeHover$.next(false)}\n\t\t\t\t\t\taria-label=\"Remove\"\n\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\t?disabled=${this.disabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"material-symbols-outlined text-sm sm:text-[16px]\">\n\t\t\t\t\t\t\tclose\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</button>\n\t\t\t\t` : ''}\n\n\t\t\t\t<!-- Ripple effects -->\n\t\t\t\t${this.ripples.map(ripple => html`\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"ripple\"\n\t\t\t\t\t\tstyle=\"left: ${ripple.x}px; top: ${ripple.y}px;\"\n\t\t\t\t\t></span>\n\t\t\t\t`)}\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-input-chip': SchmancyInputChip\n\t}\n}\n\nexport type InputChipClickEvent = { value: string }\nexport type InputChipRemoveEvent = { value: string }","import { TailwindElement } from '@mixins/tailwind.mixin'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { BehaviorSubject, combineLatest } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\n\n/**\n * Suggestion chip component - provides contextual recommendations to users\n *\n * IMPORTANT: Suggestion chips do NOT have a selected state. They are designed to\n * provide suggestions and recommendations that trigger actions when clicked.\n * Unlike filter chips, they cannot be toggled on/off.\n *\n * Pure Schmancy implementation with Tailwind CSS and RxJS state management\n */\n@customElement('schmancy-suggestion-chip')\nexport class SchmancySuggestionChip extends TailwindElement(css`\n\t:host {\n\t\tdisplay: inline-block;\n\t\toutline: none;\n\t\tmin-width:fit-content\n\t}\n\n\t:host([disabled]) {\n\t\tpointer-events: none;\n\t}\n\n\t.ripple {\n\t\tposition: absolute;\n\t\tborder-radius: 50%;\n\t\ttransform: scale(0);\n\t\tanimation: ripple 600ms linear;\n\t\tbackground-color: rgba(0, 0, 0, 0.08);\n\t\tpointer-events: none;\n\t}\n\n\t@keyframes ripple {\n\t\tto {\n\t\t\ttransform: scale(4);\n\t\t\topacity: 0;\n\t\t}\n\t}\n`) {\n\t/** Value identifier for the chip */\n\t@property({ reflect: true }) value = ''\n\n\t/** Optional icon name (Material Symbols) */\n\t@property({ reflect: true }) icon = ''\n\n\t/** Optional href for navigation */\n\t@property({ reflect: true }) href = ''\n\n\t/** Target for navigation (e.g., '_blank') */\n\t@property({ reflect: true }) target = ''\n\n\t/** Disable the chip */\n\t@property({ type: Boolean, reflect: true }) disabled = false\n\n\t/** Elevated style variant */\n\t@property({ type: Boolean, reflect: true }) elevated = false\n\n\t// RxJS state streams\n\tprivate hover$ = new BehaviorSubject<boolean>(false)\n\tprivate pressed$ = new BehaviorSubject<boolean>(false)\n\tprivate focused$ = new BehaviorSubject<boolean>(false)\n\n\t// UI state - only ripples needed for rendering\n\t@state() private ripples: Array<{ x: number; y: number; id: number }> = []\n\n\tprotected static shadowRootOptions = { ...LitElement.shadowRootOptions, delegatesFocus: true }\n\n\tprivate nextRippleId = 0\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Stream management for future extensions\n\t\t// Currently, states are handled directly in event handlers\n\t\t// This pipeline can be extended for more complex state interactions\n\t\tcombineLatest([\n\t\t\tthis.hover$,\n\t\t\tthis.pressed$,\n\t\t\tthis.focused$\n\t\t]).pipe(\n\t\t\t// States are managed through event handlers directly\n\t\t\t// This pipeline is kept for potential future state combinations\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe()\n\t}\n\n\tprivate handleClick = (e: MouseEvent) => {\n\t\tif (this.disabled) return\n\n\t\t// Add ripple effect\n\t\tconst button = this.shadowRoot?.querySelector('button')\n\t\tif (button) {\n\t\t\tconst rect = button.getBoundingClientRect()\n\t\t\tconst x = e.clientX - rect.left\n\t\t\tconst y = e.clientY - rect.top\n\t\t\tconst id = this.nextRippleId++\n\n\t\t\tthis.ripples = [...this.ripples, { x, y, id }]\n\n\t\t\t// Remove ripple after animation\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.ripples = this.ripples.filter(r => r.id !== id)\n\t\t\t}, 600)\n\t\t}\n\n\t\t// Navigate if href is provided\n\t\tif (this.href) {\n\t\t\tif (this.target === '_blank') {\n\t\t\t\twindow.open(this.href, '_blank')\n\t\t\t} else {\n\t\t\t\twindow.location.href = this.href\n\t\t\t}\n\t\t}\n\n\t\t// Dispatch action event\n\t\tthis.dispatchEvent(new CustomEvent('action', {\n\t\t\tdetail: { value: this.value },\n\t\t\tbubbles: true,\n\t\t\tcomposed: true\n\t\t}))\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\tif (this.disabled) return\n\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault()\n\t\t\tthis.pressed$.next(true)\n\n\t\t\t// Simulate click\n\t\t\tconst clickEvent = new MouseEvent('click', {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: true,\n\t\t\t\tclientX: 0,\n\t\t\t\tclientY: 0\n\t\t\t})\n\t\t\tthis.handleClick(clickEvent)\n\n\t\t\tsetTimeout(() => this.pressed$.next(false), 100)\n\t\t}\n\t}\n\n\tprivate handleFocus = () => {\n\t\tthis.focused$.next(true)\n\t}\n\n\tprivate handleBlur = () => {\n\t\tthis.focused$.next(false)\n\t}\n\n\tprotected render(): unknown {\n\t\tconst classes = {\n\t\t\t'relative': true,\n\t\t\t'inline-flex': true,\n\t\t\t'items-center': true,\n\t\t\t'gap-1 sm:gap-1.5 md:gap-2': true,\n\t\t\t'px-2 py-1 sm:px-3 sm:py-1.5 md:px-4 md:py-2': true,\n\t\t\t'rounded-full': true,\n\t\t\t'cursor-pointer': !this.disabled,\n\t\t\t'transition-all': true,\n\t\t\t'duration-200': true,\n\t\t\t'select-none': true,\n\t\t\t'overflow-hidden': true,\n\n\t\t\t// Colors - slightly different from assist chips\n\t\t\t'bg-surface-containerLow': !this.elevated,\n\t\t\t'text-surface-on': true,\n\n\t\t\t// Elevated variant\n\t\t\t'bg-surface': this.elevated,\n\t\t\t'shadow-md': this.elevated && !this.disabled,\n\n\t\t\t// States\n\t\t\t'hover:bg-surface-containerHigh': !this.disabled,\n\t\t\t'hover:shadow-lg': this.elevated && !this.disabled,\n\t\t\t'focus-visible:outline': !this.disabled,\n\t\t\t'focus-visible:outline-2': !this.disabled,\n\t\t\t'focus-visible:outline-primary-default': !this.disabled,\n\t\t\t'focus-visible:outline-offset-2': !this.disabled,\n\t\t\t'active:scale-95': !this.disabled,\n\n\t\t\t// Disabled\n\t\t\t'opacity-50': this.disabled,\n\t\t\t'cursor-not-allowed': this.disabled\n\t\t}\n\n\t\treturn html`\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=${classMap(classes)}\n\t\t\t\t?disabled=${this.disabled}\n\t\t\t\t@click=${this.handleClick}\n\t\t\t\t@keydown=${this.handleKeyDown}\n\t\t\t\t@mouseenter=${() => this.hover$.next(true)}\n\t\t\t\t@mouseleave=${() => this.hover$.next(false)}\n\t\t\t\t@mousedown=${() => this.pressed$.next(true)}\n\t\t\t\t@mouseup=${() => this.pressed$.next(false)}\n\t\t\t\t@focus=${this.handleFocus}\n\t\t\t\t@blur=${this.handleBlur}\n\t\t\t\ttabindex=${this.disabled ? '-1' : '0'}\n\t\t\t\trole=\"button\"\n\t\t\t\taria-disabled=${this.disabled}\n\t\t\t\taria-label=${this.value}\n\t\t\t>\n\t\t\t\t${this.icon ? html`\n\t\t\t\t\t<schmancy-icon class=\"text-sm sm:text-base\">${this.icon}</schmancy-icon>\n\t\t\t\t` : ''}\n\t\t\t\t<span class=\"text-xs sm:text-sm font-medium\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</span>\n\n\t\t\t\t<!-- Ripple effects -->\n\t\t\t\t${this.ripples.map(ripple => html`\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"ripple\"\n\t\t\t\t\t\tstyle=\"left: ${ripple.x}px; top: ${ripple.y}px;\"\n\t\t\t\t\t></span>\n\t\t\t\t`)}\n\t\t\t</button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-suggestion-chip': SchmancySuggestionChip\n\t}\n}\n\nexport type SuggestionChipActionEvent = { value: string }","import { $LitElement } from '@mixins/index'\nimport { html, PropertyValues } from 'lit'\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js'\nimport { SchmancyFilterChip as SchmancyChip } from './filter-chip'\nimport type { FilterChipChangeEvent as SchmancyChipChangeEvent } from './filter-chip'\nimport { BehaviorSubject, combineLatest } from 'rxjs'\nimport { takeUntil, distinctUntilChanged, debounceTime } from 'rxjs/operators'\n\n@customElement('schmancy-chips')\nexport default class SchmancyChips extends $LitElement() {\n\t// RxJS state streams - initialized with undefined to detect if properties were set\n\tprivate value$ = new BehaviorSubject<string>('')\n\tprivate values$ = new BehaviorSubject<string[]>([])\n\n\t// Track if properties were initialized from attributes/properties\n\tprivate _value: string = ''\n\tprivate _values: string[] = []\n\tprivate _multi: boolean = false\n\n\t// Track if properties have been explicitly set\n\tprivate _valueSet: boolean = false\n\tprivate _valuesSet: boolean = false\n\n\t/**\n\t * @deprecated Use .values for multi-selection or .value for single-selection instead.\n\t * The mode is now automatically determined based on which property is used.\n\t */\n\t@property({\n\t\ttype: Boolean,\n\t\treflect: true,\n\t})\n\tget multi(): boolean {\n\t\treturn this._multi\n\t}\n\tset multi(value: boolean) {\n\t\tthis._multi = value\n\t\t// Note: We don't update any BehaviorSubject here as mode is now computed\n\t}\n\n\t/**\n\t * Automatically determines the selection mode based on which properties are in use\n\t */\n\tprivate get mode(): 'multi' | 'single' | 'none' {\n\t\t// Check if values array is being used (explicitly set)\n\t\tif (this._valuesSet) {\n\t\t\treturn 'multi'\n\t\t}\n\t\t// Check if value string is being used (explicitly set)\n\t\tif (this._valueSet) {\n\t\t\treturn 'single'\n\t\t}\n\t\t// Check if either property has been set via attributes\n\t\tif (this.hasAttribute('values')) {\n\t\t\treturn 'multi'\n\t\t}\n\t\tif (this.hasAttribute('value')) {\n\t\t\treturn 'single'\n\t\t}\n\t\t// Fallback to deprecated multi prop for backward compatibility\n\t\tif (this._multi === true) {\n\t\t\treturn 'multi'\n\t\t}\n\t\t// Default to none (no selection management)\n\t\treturn 'none'\n\t}\n\n\t@property({\n\t\ttype: Array,\n\t\treflect: true,\n\t})\n\tget values(): string[] {\n\t\treturn this._values\n\t}\n\tset values(value: string[]) {\n\t\tthis._values = value || []\n\t\tthis._valuesSet = true // Mark that values has been explicitly set\n\t\tthis.values$.next(this._values)\n\t}\n\n\t@property({\n\t\ttype: String,\n\t\treflect: true,\n\t})\n\tget value(): string {\n\t\treturn this._value\n\t}\n\tset value(value: string) {\n\t\tthis._value = value || ''\n\t\tthis._valueSet = true // Mark that value has been explicitly set\n\t\tthis.value$.next(this._value)\n\t}\n\n\t@queryAssignedElements({\n\t\tselector:\n\t\t\t'schmancy-chip, schmancy-filter-chip, schmancy-assist-chip, schmancy-input-chip, schmancy-suggestion-chip',\n\t\tflatten: true,\n\t})\n\tchips!: (SchmancyChip | HTMLElement)[]\n\n\t@property({\n\t\ttype: Boolean,\n\t\treflect: true,\n\t})\n\twrap: boolean = false\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Initialize BehaviorSubjects with current property values\n\t\t// This ensures properties set before connectedCallback are respected\n\t\tthis.value$.next(this._value)\n\t\tthis.values$.next(this._values)\n\n\t\t// Set up reactive pipeline for state synchronization\n\t\tcombineLatest([\n\t\t\tthis.value$.pipe(distinctUntilChanged()),\n\t\t\tthis.values$.pipe(\n\t\t\t\tdistinctUntilChanged((prev, curr) => prev.length === curr.length && prev.every((v, i) => v === curr[i])),\n\t\t\t),\n\t\t])\n\t\t\t.pipe(\n\t\t\t\tdebounceTime(0), // Ensure DOM is ready\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(([value, values]) => {\n\t\t\t\t// Reactively update chip states based on container state and auto-detected mode\n\t\t\t\tthis.updateChipStates(this.mode, value, values)\n\t\t\t})\n\t}\n\n\tprivate updateChipStates(mode: 'multi' | 'single' | 'none', value: string, values: string[]) {\n\t\tif (!this.chips) return\n\n\t\t// If mode is 'none', don't manage selection state\n\t\tif (mode === 'none') return\n\n\t\tthis.chips.forEach(chip => {\n\t\t\tif ('value' in chip && 'selected' in chip) {\n\t\t\t\tconst filterChip = chip as SchmancyChip\n\t\t\t\tif (mode === 'multi') {\n\t\t\t\t\t// In multi mode: only select if values array explicitly includes this chip's value\n\t\t\t\t\tfilterChip.selected = values.length > 0 && values.includes(filterChip.value)\n\t\t\t\t} else if (mode === 'single') {\n\t\t\t\t\t// In single mode: only select if value is non-empty AND matches this chip's value\n\t\t\t\t\t// This prevents chips from being selected when value is empty string\n\t\t\t\t\tfilterChip.selected = value !== '' && value === filterChip.value\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\tasync change(e: CustomEvent<SchmancyChipChangeEvent>) {\n\t\te.preventDefault()\n\t\te.stopPropagation()\n\n\t\t// If mode is 'none', don't handle selection changes\n\t\tif (this.mode === 'none') return\n\n\t\tconst { value, selected } = e.detail\n\n\t\t// Update the reactive streams and internal tracking, which will trigger state synchronization\n\t\tif (this.mode === 'multi') {\n\t\t\tif (selected) {\n\t\t\t\t// Add value if not already present\n\t\t\t\tif (!this._values.includes(value)) {\n\t\t\t\t\tthis._values = [...this._values, value]\n\t\t\t\t\tthis.values$.next(this._values)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Remove value\n\t\t\t\tthis._values = this._values.filter(v => v !== value)\n\t\t\t\tthis.values$.next(this._values)\n\t\t\t}\n\t\t} else if (this.mode === 'single') {\n\t\t\t// Single selection mode\n\t\t\tthis._value = selected ? value : ''\n\t\t\tthis.value$.next(this._value)\n\t\t}\n\n\t\t// Request update to trigger re-render and property reflection\n\t\tthis.requestUpdate()\n\n\t\t// Dispatch change event with appropriate detail based on mode\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent<SchmancyChipsChangeEvent>('change', {\n\t\t\t\tdetail: this.mode === 'multi' ? this._values : this._value,\n\t\t\t\tbubbles: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprotected firstUpdated(_changedProperties: PropertyValues): void {\n\t\tsuper.firstUpdated(_changedProperties)\n\t\t// Initial state synchronization will happen through the reactive pipeline\n\t\t// Force an initial update to ensure chips are synchronized\n\t\tthis.updateChipStates(this.mode, this._value, this._values)\n\t}\n\n\tprotected render(): unknown {\n\t\tconst containerClasses = this.classMap({\n\t\t\t'inset-2': true,\n\t\t\tflex: true,\n\t\t\t'gap-2': true,\n\t\t\t'items-center': true,\n\t\t\t'flex-wrap': this.wrap,\n\t\t\t'overflow-x-auto': !this.wrap,\n\t\t\t'scrollbar-hide': !this.wrap,\n\t\t})\n\n\t\treturn html`\n\t\t\t<div class=${containerClasses} @change=${this.change}>\n\t\t\t\t<slot\n\t\t\t\t\t@slotchange=${() => {\n\t\t\t\t\t\t// When slot changes, trigger state update through reactive pipeline\n\t\t\t\t\t\tthis.updateChipStates(this.mode, this._value, this._values)\n\t\t\t\t\t}}\n\t\t\t\t></slot>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-chips': SchmancyChips\n\t}\n}\nexport type SchmancyChipsChangeEvent = string | Array<string>\n"],"names":["SchmancyFilterChip","TailwindElement","css","super","this","value","_selected","icon","removable","disabled","elevated","hover$","BehaviorSubject","pressed$","focused$","handleClick","dispatchEvent","CustomEvent","detail","selected","bubbles","composed","handleRemove","e","stopPropagation","handleKeyDown","key","preventDefault","handleMouseEnter","next","handleMouseLeave","handleMouseDown","handleMouseUp","handleFocus","handleBlur","internals","attachInternals","oldValue","requestUpdate","form","connectedCallback","combineLatest","pipe","takeUntil","disconnecting","subscribe","render","chipClasses","border","relative","html","classMap","when","iconSlotElements","length","shadowRootOptions","LitElement","delegatesFocus","formAssociated","_u","__decorateClass","property","type","String","reflect","prototype","Boolean","queryAssignedElements","slot","customElements","get","define","SchmancyChipCompat","SchmancyAssistChip","constructor","arguments","href","target","ripples","nextRippleId","button","shadowRoot","querySelector","rect","getBoundingClientRect","x","clientX","left","y","clientY","top","id","setTimeout","filter","r","window","open","location","clickEvent","MouseEvent","cancelable","classes","map","ripple","state","customElement","SchmancyInputChip","avatar","chipHover$","removeHover$","uiState","chipHover","removeHover","focused","pressed","handleChipClick","chip","tap","removeButtonClasses","SchmancySuggestionChip","SchmancyChips","$LitElement","value$","values$","_value","_values","_multi","_valueSet","_valuesSet","wrap","multi","mode","hasAttribute","values","distinctUntilChanged","prev","curr","every","v","i","debounceTime","updateChipStates","chips","forEach","filterChip","includes","_changedProperties","firstUpdated","containerClasses","flex","change","Array","selector","flatten"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chips-BnA6mVWq.js","sources":["../src/chips/filter-chip.ts","../src/chips/assist-chip.ts","../src/chips/input-chip.ts","../src/chips/suggestion-chip.ts","../src/chips/chips.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/tailwind.mixin'\nimport { css, html, LitElement } from 'lit'\nimport { property, queryAssignedElements } from 'lit/decorators.js'\nimport { when } from 'lit/directives/when.js'\nimport { BehaviorSubject, combineLatest } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\n\n/**\n * Filter chip component for content filtering.\n *\n * Filter chips are the ONLY chip type that maintains persistent selected state.\n * They are used for filtering content by toggling on/off different filter criteria.\n *\n * @fires change - Dispatched when selection state changes with {value, selected}\n * @fires remove - Dispatched when remove button is clicked (if removable)\n *\n * @example\n * ```html\n * <schmancy-filter-chip value=\"category-1\" selected>\n * Category 1\n * </schmancy-filter-chip>\n * ```\n */\nexport class SchmancyFilterChip extends TailwindElement(css`\n\t:host {\n\t\tdisplay: inline-block;\n\t\toutline: none;\n\t\tmin-width:fit-content\n\t}\n\n\t:host([disabled]) {\n\t\tpointer-events: none;\n\t\topacity: 0.5;\n\t}\n\n\tbutton {\n\t\tfont-family: inherit;\n\t}\n\n\t/* Material Symbols font for icons */\n\t.material-symbols-outlined {\n\t\tfont-family: 'Material Symbols Outlined';\n\t\tfont-weight: normal;\n\t\tfont-style: normal;\n\t\tfont-size: 18px;\n\t\tline-height: 1;\n\t\tletter-spacing: normal;\n\t\ttext-transform: none;\n\t\tdisplay: inline-block;\n\t\twhite-space: nowrap;\n\t\tword-wrap: normal;\n\t\tdirection: ltr;\n\t\t-webkit-font-smoothing: antialiased;\n\t\ttext-rendering: optimizeLegibility;\n\t\t-moz-osx-font-smoothing: grayscale;\n\t\tfont-feature-settings: 'liga';\n\t\tvertical-align: middle;\n\t}\n`) {\n\t/** Unique identifier for this filter chip */\n\t@property({ type: String, reflect: true })\n\tvalue: string = ''\n\n\t/** Whether the filter chip is selected (active filter) */\n\tprivate _selected: boolean = false\n\n\t@property({ type: Boolean, reflect: true })\n\tget selected(): boolean {\n\t\treturn this._selected\n\t}\n\tset selected(value: boolean) {\n\t\tconst oldValue = this._selected\n\t\tthis._selected = value\n\t\tthis.requestUpdate('selected', oldValue)\n\t}\n\n\t/** Optional icon to display (Material Symbols name) */\n\t@property({ type: String, reflect: true })\n\ticon: string = ''\n\n\t/** Whether to show a remove button */\n\t@property({ type: Boolean, reflect: true })\n\tremovable: boolean = false\n\n\t/** Whether the chip is disabled */\n\t@property({ type: Boolean, reflect: true })\n\tdisabled: boolean = false\n\n\t/** Whether to use elevated style with shadow */\n\t@property({ type: Boolean, reflect: true })\n\televated: boolean = false\n\n\t// Reactive state management with RxJS\n\tprivate hover$ = new BehaviorSubject<boolean>(false)\n\tprivate pressed$ = new BehaviorSubject<boolean>(false)\n\tprivate focused$ = new BehaviorSubject<boolean>(false)\n\n\t// Query assigned elements in the icon slot\n\t@queryAssignedElements({ slot: 'icon' }) iconSlotElements!: Element[]\n\n\tconstructor() {\n\t\tsuper()\n\t\ttry {\n\t\t\tthis.internals = this.attachInternals()\n\t\t} catch {\n\t\t\tthis.internals = undefined\n\t\t}\n\t}\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tdelegatesFocus: true,\n\t}\n\n\tstatic formAssociated = true\n\tinternals: ElementInternals | undefined\n\tget form() {\n\t\treturn this.internals?.form\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// RxJS streams are maintained for potential future use\n\t\t// Currently state is handled directly through event handlers\n\t\tcombineLatest([\n\t\t\tthis.hover$,\n\t\t\tthis.pressed$,\n\t\t\tthis.focused$,\n\t\t]).pipe(\n\t\t\t// States are managed through event handlers directly\n\t\t\t// This pipeline is kept for potential future state combinations\n\t\t\ttakeUntil(this.disconnecting),\n\t\t).subscribe()\n\t}\n\n\tprivate handleClick = () => {\n\t\tif (this.disabled) return\n\n\t\t// Don't modify this.selected - let the parent container control it\n\t\t// Dispatch change event with the INTENDED state\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('change', {\n\t\t\t\tdetail: { value: this.value, selected: !this._selected },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate handleRemove = (e: Event) => {\n\t\tif (this.disabled) return\n\n\t\te.stopPropagation()\n\n\t\t// Dispatch remove event\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('remove', {\n\t\t\t\tdetail: { value: this.value },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\tif (this.disabled) return\n\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault()\n\t\t\t// Dispatch event directly rather than calling handleClick to be explicit\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent('change', {\n\t\t\t\t\tdetail: { value: this.value, selected: !this._selected },\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 handleMouseEnter = () => {\n\t\tthis.hover$.next(true)\n\t}\n\n\tprivate handleMouseLeave = () => {\n\t\tthis.hover$.next(false)\n\t\tthis.pressed$.next(false)\n\t}\n\n\tprivate handleMouseDown = () => {\n\t\tthis.pressed$.next(true)\n\t}\n\n\tprivate handleMouseUp = () => {\n\t\tthis.pressed$.next(false)\n\t}\n\n\tprivate handleFocus = () => {\n\t\tthis.focused$.next(true)\n\t}\n\n\tprivate handleBlur = () => {\n\t\tthis.focused$.next(false)\n\t}\n\n\tprotected render(): unknown {\n\t\tconst chipClasses = {\n\t\t\t'inline-flex': true,\n\t\t\t'items-center': true,\n\t\t\t'gap-2': true,\n\t\t\t'rounded-full': true,\n\t\t\t'h-8 px-4': true,\n\t\t\t'cursor-pointer': !this.disabled,\n\t\t\t'transition-all': true,\n\t\t\t'duration-200': true,\n\t\t\t'select-none': true,\n\t\t\t'text-sm': true,\n\t\t\t'font-medium': true,\n\t\t\t'border': true,\n\t\t\t'relative': true,\n\t\t\t'min-h-[32px]': true,\n\n\t\t\t// Background and text colors based on selection state\n\t\t\t'bg-secondary-container': this._selected,\n\t\t\t'text-secondary-onContainer': this._selected,\n\t\t\t'border-secondary-container': this._selected,\n\t\t\t'bg-surface-container': !this._selected,\n\t\t\t'text-surface-on': !this._selected,\n\t\t\t'border-outline-variant': !this._selected,\n\n\t\t\t// Hover states\n\t\t\t'hover:brightness-95': this._selected && !this.disabled,\n\t\t\t'hover:bg-surface-containerHigh': !this._selected && !this.disabled,\n\n\t\t\t// Pressed state\n\t\t\t'active:scale-95': !this.disabled,\n\n\t\t\t// Focus-visible state for better UX\n\t\t\t'focus-visible:outline': !this.disabled,\n\t\t\t'focus-visible:outline-2': !this.disabled,\n\t\t\t'focus-visible:outline-offset-2': !this.disabled,\n\t\t\t'focus-visible:outline-primary-default': !this.disabled,\n\n\t\t\t// Elevated style\n\t\t\t'shadow-md': this.elevated && !this.disabled,\n\t\t\t'hover:shadow-lg': this.elevated && !this.disabled,\n\n\t\t\t// Disabled state\n\t\t\t'opacity-50': this.disabled,\n\t\t\t'cursor-not-allowed': this.disabled\n\t\t}\n\n\t\treturn html`\n\t\t\t<button\n\t\t\t\tclass=${this.classMap(chipClasses)}\n\t\t\t\t@click=${this.handleClick}\n\t\t\t\t@keydown=${this.handleKeyDown}\n\t\t\t\t@mouseenter=${this.handleMouseEnter}\n\t\t\t\t@mouseleave=${this.handleMouseLeave}\n\t\t\t\t@mousedown=${this.handleMouseDown}\n\t\t\t\t@mouseup=${this.handleMouseUp}\n\t\t\t\t@focus=${this.handleFocus}\n\t\t\t\t@blur=${this.handleBlur}\n\t\t\t\t?disabled=${this.disabled}\n\t\t\t\taria-pressed=${this._selected ? 'true' : 'false'}\n\t\t\t\trole=\"checkbox\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t>\n\t\t\t\t<!-- Icon container - conditionally shown using when directive -->\n\t\t\t\t${when(\n\t\t\t\t\tthis._selected || this.icon || this.iconSlotElements?.length > 0,\n\t\t\t\t\t() => html`\n\t\t\t\t\t\t<span class=\"inline-flex w-[18px] h-[18px] items-center justify-center shrink-0\">\n\t\t\t\t\t\t\t${this._selected ? html`\n\t\t\t\t\t\t\t\t<span class=\"material-symbols-outlined text-base sm:text-[18px]\">\n\t\t\t\t\t\t\t\t\tcheck\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t` : this.icon ? html`\n\t\t\t\t\t\t\t\t<span class=\"material-symbols-outlined text-base sm:text-[18px]\">\n\t\t\t\t\t\t\t\t\t${this.icon}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t` : html`\n\t\t\t\t\t\t\t\t<slot name=\"icon\"></slot>\n\t\t\t\t\t\t\t`}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t`\n\t\t\t\t)}\n\n\t\t\t\t<!-- Chip content -->\n\t\t\t\t<slot></slot>\n\n\t\t\t\t<!-- Remove button (if removable) -->\n\t\t\t\t${this.removable ? html`\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"ml-1 -mr-1 p-0.5 rounded-full hover:bg-surface-containerHighest transition-colors\"\n\t\t\t\t\t\t@click=${this.handleRemove}\n\t\t\t\t\t\taria-label=\"Remove filter\"\n\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"material-symbols-outlined text-sm sm:text-[16px]\">\n\t\t\t\t\t\t\tclose\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</button>\n\t\t\t\t` : ''}\n\t\t\t</button>\n\t\t`\n\t}\n}\n\n// Register the element with both names for backward compatibility\n// Check if not already registered to prevent duplicate registration errors\nif (!customElements.get('schmancy-filter-chip')) {\n\tcustomElements.define('schmancy-filter-chip', SchmancyFilterChip)\n}\n\n// For backward compatibility, register 'schmancy-chip' with a subclass\n// to avoid duplicate constructor registration error\nif (!customElements.get('schmancy-chip')) {\n\tclass SchmancyChipCompat extends SchmancyFilterChip {}\n\tcustomElements.define('schmancy-chip', SchmancyChipCompat)\n}\n\n// Export alias for backward compatibility\nexport { SchmancyFilterChip as SchmancyChip }\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-chip': SchmancyFilterChip\n\t\t'schmancy-filter-chip': SchmancyFilterChip\n\t}\n}\n\nexport type FilterChipChangeEvent = { value: string; selected: boolean }\nexport type FilterChipRemoveEvent = { value: string }\n// Alias for backward compatibility\nexport type SchmancyChipChangeEvent = FilterChipChangeEvent","import { TailwindElement } from '@mixins/tailwind.mixin'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { BehaviorSubject, combineLatest } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\n\n/**\n * Assist chip component - prompts user actions like opening calendar events or sharing content\n * Pure Schmancy implementation with Tailwind CSS and RxJS state management\n */\n@customElement('schmancy-assist-chip')\nexport class SchmancyAssistChip extends TailwindElement(css`\n\t:host {\n\t\tdisplay: inline-block;\n\t\toutline: none;\n\t\tmin-width:fit-content\n\t}\n\n\t:host([disabled]) {\n\t\tpointer-events: none;\n\t}\n\n\t.ripple {\n\t\tposition: absolute;\n\t\tborder-radius: 50%;\n\t\ttransform: scale(0);\n\t\tanimation: ripple 600ms linear;\n\t\tbackground-color: rgba(0, 0, 0, 0.08);\n\t\tpointer-events: none;\n\t}\n\n\t@keyframes ripple {\n\t\tto {\n\t\t\ttransform: scale(4);\n\t\t\topacity: 0;\n\t\t}\n\t}\n`) {\n\t/** Value identifier for the chip */\n\t@property({ reflect: true }) value = ''\n\n\t/** Optional icon name (Material Symbols) */\n\t@property({ reflect: true }) icon = ''\n\n\t/** Optional href for navigation */\n\t@property({ reflect: true }) href = ''\n\n\t/** Target for navigation (e.g., '_blank') */\n\t@property({ reflect: true }) target = ''\n\n\t/** Disable the chip */\n\t@property({ type: Boolean, reflect: true }) disabled = false\n\n\t/** Elevated style variant */\n\t@property({ type: Boolean, reflect: true }) elevated = false\n\n\t// RxJS state streams\n\tprivate hover$ = new BehaviorSubject<boolean>(false)\n\tprivate pressed$ = new BehaviorSubject<boolean>(false)\n\tprivate focused$ = new BehaviorSubject<boolean>(false)\n\n\t// UI state - only ripples needed for rendering\n\t@state() private ripples: Array<{ x: number; y: number; id: number }> = []\n\n\tprotected static shadowRootOptions = { ...LitElement.shadowRootOptions, delegatesFocus: true }\n\n\tprivate nextRippleId = 0\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Stream management for future extensions\n\t\t// Currently, states are handled directly in event handlers\n\t\t// This pipeline can be extended for more complex state interactions\n\t\tcombineLatest([\n\t\t\tthis.hover$,\n\t\t\tthis.pressed$,\n\t\t\tthis.focused$\n\t\t]).pipe(\n\t\t\t// States are managed through event handlers directly\n\t\t\t// This pipeline is kept for potential future state combinations\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe()\n\t}\n\n\tprivate handleClick = (e: MouseEvent) => {\n\t\tif (this.disabled) return\n\n\t\t// Add ripple effect\n\t\tconst button = this.shadowRoot?.querySelector('button')\n\t\tif (button) {\n\t\t\tconst rect = button.getBoundingClientRect()\n\t\t\tconst x = e.clientX - rect.left\n\t\t\tconst y = e.clientY - rect.top\n\t\t\tconst id = this.nextRippleId++\n\n\t\t\tthis.ripples = [...this.ripples, { x, y, id }]\n\n\t\t\t// Remove ripple after animation\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.ripples = this.ripples.filter(r => r.id !== id)\n\t\t\t}, 600)\n\t\t}\n\n\t\t// Navigate if href is provided\n\t\tif (this.href) {\n\t\t\tif (this.target === '_blank') {\n\t\t\t\twindow.open(this.href, '_blank')\n\t\t\t} else {\n\t\t\t\twindow.location.href = this.href\n\t\t\t}\n\t\t}\n\n\t\t// Dispatch action event\n\t\tthis.dispatchEvent(new CustomEvent('action', {\n\t\t\tdetail: { value: this.value },\n\t\t\tbubbles: true,\n\t\t\tcomposed: true\n\t\t}))\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\tif (this.disabled) return\n\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault()\n\t\t\tthis.pressed$.next(true)\n\n\t\t\t// Simulate click\n\t\t\tconst clickEvent = new MouseEvent('click', {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: true,\n\t\t\t\tclientX: 0,\n\t\t\t\tclientY: 0\n\t\t\t})\n\t\t\tthis.handleClick(clickEvent)\n\n\t\t\tsetTimeout(() => this.pressed$.next(false), 100)\n\t\t}\n\t}\n\n\tprivate handleFocus = () => {\n\t\tthis.focused$.next(true)\n\t}\n\n\tprivate handleBlur = () => {\n\t\tthis.focused$.next(false)\n\t}\n\n\trender() {\n\t\tconst classes = {\n\t\t\t'relative': true,\n\t\t\t'inline-flex': true,\n\t\t\t'items-center': true,\n\t\t\t'gap-1 sm:gap-1.5 md:gap-2': true,\n\t\t\t'px-2 py-1 sm:px-3 sm:py-1.5 md:px-4 md:py-2': true,\n\t\t\t'rounded-full': true,\n\t\t\t'cursor-pointer': !this.disabled,\n\t\t\t'transition-all': true,\n\t\t\t'duration-200': true,\n\t\t\t'select-none': true,\n\t\t\t'overflow-hidden': true,\n\n\t\t\t// Colors\n\t\t\t'bg-surface-container': !this.elevated,\n\t\t\t'text-surface-on': true,\n\n\t\t\t// Elevated variant\n\t\t\t'bg-surface-containerLow': this.elevated,\n\t\t\t'shadow-md': this.elevated && !this.disabled,\n\n\t\t\t// States\n\t\t\t'hover:bg-surface-containerHigh': !this.disabled && !this.elevated,\n\t\t\t'hover:shadow-lg': this.elevated && !this.disabled,\n\t\t\t'focus-visible:outline': !this.disabled,\n\t\t\t'focus-visible:outline-2': !this.disabled,\n\t\t\t'focus-visible:outline-primary-default': !this.disabled,\n\t\t\t'focus-visible:outline-offset-2': !this.disabled,\n\t\t\t'active:scale-95': !this.disabled,\n\n\t\t\t// Disabled\n\t\t\t'opacity-50': this.disabled,\n\t\t\t'cursor-not-allowed': this.disabled\n\t\t}\n\n\t\treturn html`\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=${classMap(classes)}\n\t\t\t\t?disabled=${this.disabled}\n\t\t\t\t@click=${this.handleClick}\n\t\t\t\t@keydown=${this.handleKeyDown}\n\t\t\t\t@mouseenter=${() => this.hover$.next(true)}\n\t\t\t\t@mouseleave=${() => this.hover$.next(false)}\n\t\t\t\t@mousedown=${() => this.pressed$.next(true)}\n\t\t\t\t@mouseup=${() => this.pressed$.next(false)}\n\t\t\t\t@focus=${this.handleFocus}\n\t\t\t\t@blur=${this.handleBlur}\n\t\t\t\ttabindex=${this.disabled ? '-1' : '0'}\n\t\t\t\trole=\"button\"\n\t\t\t\taria-disabled=${this.disabled}\n\t\t\t\taria-label=${this.value}\n\t\t\t>\n\t\t\t\t${this.icon ? html`\n\t\t\t\t\t<schmancy-icon class=\"text-sm sm:text-base\">${this.icon}</schmancy-icon>\n\t\t\t\t` : ''}\n\t\t\t\t<span class=\"text-xs sm:text-sm font-medium\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</span>\n\n\t\t\t\t<!-- Ripple effects -->\n\t\t\t\t${this.ripples.map(ripple => html`\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"ripple\"\n\t\t\t\t\t\tstyle=\"left: ${ripple.x}px; top: ${ripple.y}px;\"\n\t\t\t\t\t></span>\n\t\t\t\t`)}\n\t\t\t</button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-assist-chip': SchmancyAssistChip\n\t}\n}\n\nexport type AssistChipActionEvent = { value: string }","import { TailwindElement } from '@mixins/tailwind.mixin'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { BehaviorSubject, combineLatest } from 'rxjs'\nimport { map, takeUntil, tap } from 'rxjs/operators'\n\n/**\n * Input chip component - represents user-provided information that can be removed.\n *\n * IMPORTANT: Per Material Design 3 specification, input chips do NOT have selected state.\n * They represent discrete pieces of user input (like entered tags, selections from lists, etc.)\n * that can only be removed, not toggled on/off.\n *\n * Use cases:\n * - Displaying selected recipients in an email\n * - Showing applied filters that can be removed\n * - Tags or keywords entered by the user\n * - Selected items from a multi-select dropdown\n *\n * @fires click - Optional click event on chip body (value)\n * @fires remove - Dispatched when remove button is clicked (value)\n *\n * @example\n * ```html\n * <schmancy-input-chip value=\"john@example.com\" avatar=\"/avatars/john.jpg\">\n * John Doe\n * </schmancy-input-chip>\n * ```\n */\n@customElement('schmancy-input-chip')\nexport class SchmancyInputChip extends TailwindElement(css`\n\t:host {\n\t\tdisplay: inline-block;\n\t\toutline: none;\n\t\tmin-width:fit-content\n\n\t}\n\n\t:host([disabled]) {\n\t\tpointer-events: none;\n\t}\n\n\tbutton {\n\t\tfont-family: inherit;\n\t}\n\n\t.avatar-img {\n\t\twidth: 20px;\n\t\theight: 20px;\n\t\tobject-fit: cover;\n\t}\n\n\t/* Material Symbols font for icons */\n\t.material-symbols-outlined {\n\t\tfont-family: 'Material Symbols Outlined';\n\t\tfont-weight: normal;\n\t\tfont-style: normal;\n\t\tfont-size: 18px;\n\t\tline-height: 1;\n\t\tletter-spacing: normal;\n\t\ttext-transform: none;\n\t\tdisplay: inline-block;\n\t\twhite-space: nowrap;\n\t\tword-wrap: normal;\n\t\tdirection: ltr;\n\t\t-webkit-font-smoothing: antialiased;\n\t\ttext-rendering: optimizeLegibility;\n\t\t-moz-osx-font-smoothing: grayscale;\n\t\tfont-feature-settings: 'liga';\n\t\tvertical-align: middle;\n\t}\n\n\t.ripple {\n\t\tposition: absolute;\n\t\tborder-radius: 50%;\n\t\ttransform: scale(0);\n\t\tanimation: ripple 600ms linear;\n\t\tbackground-color: rgba(0, 0, 0, 0.08);\n\t\tpointer-events: none;\n\t}\n\n\t@keyframes ripple {\n\t\tto {\n\t\t\ttransform: scale(4);\n\t\t\topacity: 0;\n\t\t}\n\t}\n`) {\n\t/** Value identifier for the chip */\n\t@property({ type: String, reflect: true })\n\tvalue: string = ''\n\n\t/** Optional icon name (Material Symbols) */\n\t@property({ type: String, reflect: true })\n\ticon: string = ''\n\n\t/** Optional avatar image URL */\n\t@property({ type: String, reflect: true })\n\tavatar: string = ''\n\n\t/** Whether to show remove button (default true for input chips) */\n\t@property({ type: Boolean, reflect: true })\n\tremovable: boolean = true\n\n\t/** Disable the chip */\n\t@property({ type: Boolean, reflect: true })\n\tdisabled: boolean = false\n\n\t/** Elevated style variant */\n\t@property({ type: Boolean, reflect: true })\n\televated: boolean = false\n\n\t// RxJS state streams\n\tprivate chipHover$ = new BehaviorSubject<boolean>(false)\n\tprivate removeHover$ = new BehaviorSubject<boolean>(false)\n\tprivate focused$ = new BehaviorSubject<boolean>(false)\n\tprivate pressed$ = new BehaviorSubject<boolean>(false)\n\n\t// UI state from combined streams\n\t@state() private uiState = {\n\t\tchipHover: false,\n\t\tremoveHover: false,\n\t\tfocused: false,\n\t\tpressed: false\n\t}\n\n\t// Ripple effects\n\t@state() private ripples: Array<{ x: number; y: number; id: number }> = []\n\tprivate nextRippleId = 0\n\n\tconstructor() {\n\t\tsuper()\n\t\ttry {\n\t\t\tthis.internals = this.attachInternals()\n\t\t} catch {\n\t\t\tthis.internals = undefined\n\t\t}\n\t}\n\n\tprotected static shadowRootOptions = {\n\t\t...LitElement.shadowRootOptions,\n\t\tdelegatesFocus: true,\n\t}\n\n\tstatic formAssociated = true\n\tinternals: ElementInternals | undefined\n\tget form() {\n\t\treturn this.internals?.form\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Combine all UI state streams\n\t\tcombineLatest([\n\t\t\tthis.chipHover$,\n\t\t\tthis.removeHover$,\n\t\t\tthis.focused$,\n\t\t\tthis.pressed$\n\t\t]).pipe(\n\t\t\tmap(([chipHover, removeHover, focused, pressed]) => ({\n\t\t\t\tchipHover,\n\t\t\t\tremoveHover,\n\t\t\t\tfocused,\n\t\t\t\tpressed\n\t\t\t})),\n\t\t\ttap(state => {\n\t\t\t\tthis.uiState = state\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe()\n\t}\n\n\tprivate handleChipClick = (e: MouseEvent) => {\n\t\tif (this.disabled) return\n\n\t\t// Add ripple effect\n\t\tconst chip = this.shadowRoot?.querySelector('.chip-container') as HTMLElement\n\t\tif (chip) {\n\t\t\tconst rect = chip.getBoundingClientRect()\n\t\t\tconst x = e.clientX - rect.left\n\t\t\tconst y = e.clientY - rect.top\n\t\t\tconst id = this.nextRippleId++\n\n\t\t\tthis.ripples = [...this.ripples, { x, y, id }]\n\n\t\t\t// Remove ripple after animation\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.ripples = this.ripples.filter(r => r.id !== id)\n\t\t\t}, 600)\n\t\t}\n\n\t\t// Dispatch optional click event (for custom handling if needed)\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('click', {\n\t\t\t\tdetail: { value: this.value },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t})\n\t\t)\n\t}\n\n\tprivate handleRemove = (e: Event) => {\n\t\tif (this.disabled) return\n\n\t\te.stopPropagation()\n\n\t\t// Dispatch remove event\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('remove', {\n\t\t\t\tdetail: { value: this.value },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t})\n\t\t)\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\tif (this.disabled) return\n\n\t\t// Delete or Backspace removes the chip\n\t\tif ((e.key === 'Delete' || e.key === 'Backspace') && this.removable) {\n\t\t\te.preventDefault()\n\t\t\tthis.handleRemove(e)\n\t\t}\n\t\t// Enter can optionally trigger click\n\t\telse if (e.key === 'Enter') {\n\t\t\te.preventDefault()\n\t\t\tconst clickEvent = new MouseEvent('click', {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: true,\n\t\t\t\tclientX: 0,\n\t\t\t\tclientY: 0\n\t\t\t})\n\t\t\tthis.handleChipClick(clickEvent)\n\t\t}\n\t}\n\n\tprivate handleFocus = () => {\n\t\tthis.focused$.next(true)\n\t}\n\n\tprivate handleBlur = () => {\n\t\tthis.focused$.next(false)\n\t}\n\n\tprotected render(): unknown {\n\t\tconst chipClasses = {\n\t\t\t'chip-container': true,\n\t\t\t'inline-flex': true,\n\t\t\t'items-center': true,\n\t\t\t'gap-1 sm:gap-1.5 md:gap-2': true,\n\t\t\t'pl-3': !this.avatar, // Less padding if avatar present\n\t\t\t'pl-1': this.avatar, // Tight padding for avatar\n\t\t\t'pr-2': this.removable,\n\t\t\t'pr-3': !this.removable,\n\t\t\t'py-1 sm:py-1.5 md:py-2': true,\n\t\t\t'rounded-full': true,\n\t\t\t'cursor-default': true,\n\t\t\t'transition-all': true,\n\t\t\t'duration-200': true,\n\t\t\t'select-none': true,\n\t\t\t'text-xs sm:text-sm': true,\n\t\t\t'font-medium': true,\n\t\t\t'relative': true,\n\t\t\t'overflow-hidden': true,\n\n\t\t\t// Colors\n\t\t\t'bg-surface-container': true,\n\t\t\t'text-surface-on': true,\n\n\t\t\t// Elevated variant\n\t\t\t'shadow-md': this.elevated && !this.disabled,\n\n\t\t\t// Hover state (subtle on chip body)\n\t\t\t'hover:bg-surface-containerHigh': !this.disabled && !this.uiState.removeHover,\n\t\t\t'hover:shadow-lg': this.elevated && !this.disabled,\n\n\t\t\t// Focus-visible state for better UX\n\t\t\t'focus-visible:outline': !this.disabled,\n\t\t\t'focus-visible:outline-2': !this.disabled,\n\t\t\t'focus-visible:outline-primary-default': !this.disabled,\n\t\t\t'focus-visible:outline-offset-2': !this.disabled,\n\n\t\t\t// Disabled state\n\t\t\t'opacity-50': this.disabled,\n\t\t\t'cursor-not-allowed': this.disabled\n\t\t}\n\n\t\tconst removeButtonClasses = {\n\t\t\t\"size-5 sm:size-6\":true,\n\t\t\t'rounded-full': true,\n\t\t\t'transition-all': true,\n\t\t\t'duration-200': true,\n\t\t\t'cursor-pointer': !this.disabled,\n\n\t\t\t// Hover state for remove button\n\t\t\t'bg-error-container': this.uiState.removeHover && !this.disabled,\n\t\t\t'text-error-onContainer': this.uiState.removeHover && !this.disabled,\n\t\t\t'hover:scale-110': this.uiState.removeHover && !this.disabled,\n\n\t\t\t// Default state\n\t\t\t'hover:bg-surface-containerHighest': !this.uiState.removeHover && !this.disabled,\n\t\t\t'opacity-50': this.disabled\n\t\t}\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=${classMap(chipClasses)}\n\t\t\t\t@click=${this.handleChipClick}\n\t\t\t\t@keydown=${this.handleKeyDown}\n\t\t\t\t@mouseenter=${() => this.chipHover$.next(true)}\n\t\t\t\t@mouseleave=${() => this.chipHover$.next(false)}\n\t\t\t\t@mousedown=${() => this.pressed$.next(true)}\n\t\t\t\t@mouseup=${() => this.pressed$.next(false)}\n\t\t\t\t@focus=${this.handleFocus}\n\t\t\t\t@blur=${this.handleBlur}\n\t\t\t\trole=\"button\"\n\t\t\t\ttabindex=${this.disabled ? '-1' : '0'}\n\t\t\t\taria-disabled=${this.disabled}\n\t\t\t\taria-label=${this.value}\n\t\t\t>\n\t\t\t\t<!-- Avatar image (if provided) -->\n\t\t\t\t${this.avatar ? html`\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc=${this.avatar}\n\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\tclass=\"avatar-img rounded-full sm:size-6\"\n\t\t\t\t\t/>\n\t\t\t\t` : ''}\n\n\t\t\t\t<!-- Icon (if provided and no avatar) -->\n\t\t\t\t${this.icon && !this.avatar ? html`\n\t\t\t\t\t<span class=\"material-symbols-outlined rounded-full text-base sm:text-[18px]\">\n\t\t\t\t\t\t${this.icon}\n\t\t\t\t\t</span>\n\t\t\t\t` : ''}\n\n\t\t\t\t<!-- Chip content -->\n\t\t\t\t<span>\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</span>\n\n\t\t\t\t<!-- Remove button (shown by default for input chips) -->\n\t\t\t\t${this.removable ? html`\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=${classMap(removeButtonClasses)}\n\t\t\t\t\t\t@click=${this.handleRemove}\n\t\t\t\t\t\t@mouseenter=${() => this.removeHover$.next(true)}\n\t\t\t\t\t\t@mouseleave=${() => this.removeHover$.next(false)}\n\t\t\t\t\t\taria-label=\"Remove\"\n\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\t?disabled=${this.disabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"material-symbols-outlined text-sm sm:text-[16px]\">\n\t\t\t\t\t\t\tclose\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</button>\n\t\t\t\t` : ''}\n\n\t\t\t\t<!-- Ripple effects -->\n\t\t\t\t${this.ripples.map(ripple => html`\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"ripple\"\n\t\t\t\t\t\tstyle=\"left: ${ripple.x}px; top: ${ripple.y}px;\"\n\t\t\t\t\t></span>\n\t\t\t\t`)}\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-input-chip': SchmancyInputChip\n\t}\n}\n\nexport type InputChipClickEvent = { value: string }\nexport type InputChipRemoveEvent = { value: string }","import { TailwindElement } from '@mixins/tailwind.mixin'\nimport { css, html, LitElement } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { BehaviorSubject, combineLatest } from 'rxjs'\nimport { takeUntil } from 'rxjs/operators'\n\n/**\n * Suggestion chip component - provides contextual recommendations to users\n *\n * IMPORTANT: Suggestion chips do NOT have a selected state. They are designed to\n * provide suggestions and recommendations that trigger actions when clicked.\n * Unlike filter chips, they cannot be toggled on/off.\n *\n * Pure Schmancy implementation with Tailwind CSS and RxJS state management\n */\n@customElement('schmancy-suggestion-chip')\nexport class SchmancySuggestionChip extends TailwindElement(css`\n\t:host {\n\t\tdisplay: inline-block;\n\t\toutline: none;\n\t\tmin-width:fit-content\n\t}\n\n\t:host([disabled]) {\n\t\tpointer-events: none;\n\t}\n\n\t.ripple {\n\t\tposition: absolute;\n\t\tborder-radius: 50%;\n\t\ttransform: scale(0);\n\t\tanimation: ripple 600ms linear;\n\t\tbackground-color: rgba(0, 0, 0, 0.08);\n\t\tpointer-events: none;\n\t}\n\n\t@keyframes ripple {\n\t\tto {\n\t\t\ttransform: scale(4);\n\t\t\topacity: 0;\n\t\t}\n\t}\n`) {\n\t/** Value identifier for the chip */\n\t@property({ reflect: true }) value = ''\n\n\t/** Optional icon name (Material Symbols) */\n\t@property({ reflect: true }) icon = ''\n\n\t/** Optional href for navigation */\n\t@property({ reflect: true }) href = ''\n\n\t/** Target for navigation (e.g., '_blank') */\n\t@property({ reflect: true }) target = ''\n\n\t/** Disable the chip */\n\t@property({ type: Boolean, reflect: true }) disabled = false\n\n\t/** Elevated style variant */\n\t@property({ type: Boolean, reflect: true }) elevated = false\n\n\t// RxJS state streams\n\tprivate hover$ = new BehaviorSubject<boolean>(false)\n\tprivate pressed$ = new BehaviorSubject<boolean>(false)\n\tprivate focused$ = new BehaviorSubject<boolean>(false)\n\n\t// UI state - only ripples needed for rendering\n\t@state() private ripples: Array<{ x: number; y: number; id: number }> = []\n\n\tprotected static shadowRootOptions = { ...LitElement.shadowRootOptions, delegatesFocus: true }\n\n\tprivate nextRippleId = 0\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Stream management for future extensions\n\t\t// Currently, states are handled directly in event handlers\n\t\t// This pipeline can be extended for more complex state interactions\n\t\tcombineLatest([\n\t\t\tthis.hover$,\n\t\t\tthis.pressed$,\n\t\t\tthis.focused$\n\t\t]).pipe(\n\t\t\t// States are managed through event handlers directly\n\t\t\t// This pipeline is kept for potential future state combinations\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe()\n\t}\n\n\tprivate handleClick = (e: MouseEvent) => {\n\t\tif (this.disabled) return\n\n\t\t// Add ripple effect\n\t\tconst button = this.shadowRoot?.querySelector('button')\n\t\tif (button) {\n\t\t\tconst rect = button.getBoundingClientRect()\n\t\t\tconst x = e.clientX - rect.left\n\t\t\tconst y = e.clientY - rect.top\n\t\t\tconst id = this.nextRippleId++\n\n\t\t\tthis.ripples = [...this.ripples, { x, y, id }]\n\n\t\t\t// Remove ripple after animation\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.ripples = this.ripples.filter(r => r.id !== id)\n\t\t\t}, 600)\n\t\t}\n\n\t\t// Navigate if href is provided\n\t\tif (this.href) {\n\t\t\tif (this.target === '_blank') {\n\t\t\t\twindow.open(this.href, '_blank')\n\t\t\t} else {\n\t\t\t\twindow.location.href = this.href\n\t\t\t}\n\t\t}\n\n\t\t// Dispatch action event\n\t\tthis.dispatchEvent(new CustomEvent('action', {\n\t\t\tdetail: { value: this.value },\n\t\t\tbubbles: true,\n\t\t\tcomposed: true\n\t\t}))\n\t}\n\n\tprivate handleKeyDown = (e: KeyboardEvent) => {\n\t\tif (this.disabled) return\n\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault()\n\t\t\tthis.pressed$.next(true)\n\n\t\t\t// Simulate click\n\t\t\tconst clickEvent = new MouseEvent('click', {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: true,\n\t\t\t\tclientX: 0,\n\t\t\t\tclientY: 0\n\t\t\t})\n\t\t\tthis.handleClick(clickEvent)\n\n\t\t\tsetTimeout(() => this.pressed$.next(false), 100)\n\t\t}\n\t}\n\n\tprivate handleFocus = () => {\n\t\tthis.focused$.next(true)\n\t}\n\n\tprivate handleBlur = () => {\n\t\tthis.focused$.next(false)\n\t}\n\n\tprotected render(): unknown {\n\t\tconst classes = {\n\t\t\t'relative': true,\n\t\t\t'inline-flex': true,\n\t\t\t'items-center': true,\n\t\t\t'gap-1 sm:gap-1.5 md:gap-2': true,\n\t\t\t'px-2 py-1 sm:px-3 sm:py-1.5 md:px-4 md:py-2': true,\n\t\t\t'rounded-full': true,\n\t\t\t'cursor-pointer': !this.disabled,\n\t\t\t'transition-all': true,\n\t\t\t'duration-200': true,\n\t\t\t'select-none': true,\n\t\t\t'overflow-hidden': true,\n\n\t\t\t// Colors - slightly different from assist chips\n\t\t\t'bg-surface-containerLow': !this.elevated,\n\t\t\t'text-surface-on': true,\n\n\t\t\t// Elevated variant\n\t\t\t'bg-surface': this.elevated,\n\t\t\t'shadow-md': this.elevated && !this.disabled,\n\n\t\t\t// States\n\t\t\t'hover:bg-surface-containerHigh': !this.disabled,\n\t\t\t'hover:shadow-lg': this.elevated && !this.disabled,\n\t\t\t'focus-visible:outline': !this.disabled,\n\t\t\t'focus-visible:outline-2': !this.disabled,\n\t\t\t'focus-visible:outline-primary-default': !this.disabled,\n\t\t\t'focus-visible:outline-offset-2': !this.disabled,\n\t\t\t'active:scale-95': !this.disabled,\n\n\t\t\t// Disabled\n\t\t\t'opacity-50': this.disabled,\n\t\t\t'cursor-not-allowed': this.disabled\n\t\t}\n\n\t\treturn html`\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=${classMap(classes)}\n\t\t\t\t?disabled=${this.disabled}\n\t\t\t\t@click=${this.handleClick}\n\t\t\t\t@keydown=${this.handleKeyDown}\n\t\t\t\t@mouseenter=${() => this.hover$.next(true)}\n\t\t\t\t@mouseleave=${() => this.hover$.next(false)}\n\t\t\t\t@mousedown=${() => this.pressed$.next(true)}\n\t\t\t\t@mouseup=${() => this.pressed$.next(false)}\n\t\t\t\t@focus=${this.handleFocus}\n\t\t\t\t@blur=${this.handleBlur}\n\t\t\t\ttabindex=${this.disabled ? '-1' : '0'}\n\t\t\t\trole=\"button\"\n\t\t\t\taria-disabled=${this.disabled}\n\t\t\t\taria-label=${this.value}\n\t\t\t>\n\t\t\t\t${this.icon ? html`\n\t\t\t\t\t<schmancy-icon class=\"text-sm sm:text-base\">${this.icon}</schmancy-icon>\n\t\t\t\t` : ''}\n\t\t\t\t<span class=\"text-xs sm:text-sm font-medium\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</span>\n\n\t\t\t\t<!-- Ripple effects -->\n\t\t\t\t${this.ripples.map(ripple => html`\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"ripple\"\n\t\t\t\t\t\tstyle=\"left: ${ripple.x}px; top: ${ripple.y}px;\"\n\t\t\t\t\t></span>\n\t\t\t\t`)}\n\t\t\t</button>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-suggestion-chip': SchmancySuggestionChip\n\t}\n}\n\nexport type SuggestionChipActionEvent = { value: string }","import { $LitElement } from '@mixins/index'\nimport { html, PropertyValues } from 'lit'\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js'\nimport { SchmancyFilterChip as SchmancyChip } from './filter-chip'\nimport type { FilterChipChangeEvent as SchmancyChipChangeEvent } from './filter-chip'\nimport { BehaviorSubject, combineLatest } from 'rxjs'\nimport { takeUntil, distinctUntilChanged, debounceTime } from 'rxjs/operators'\n\n@customElement('schmancy-chips')\nexport default class SchmancyChips extends $LitElement() {\n\t// RxJS state streams - initialized with undefined to detect if properties were set\n\tprivate value$ = new BehaviorSubject<string>('')\n\tprivate values$ = new BehaviorSubject<string[]>([])\n\n\t// Track if properties were initialized from attributes/properties\n\tprivate _value: string = ''\n\tprivate _values: string[] = []\n\tprivate _multi: boolean = false\n\n\t// Track if properties have been explicitly set\n\tprivate _valueSet: boolean = false\n\tprivate _valuesSet: boolean = false\n\n\t/**\n\t * @deprecated Use .values for multi-selection or .value for single-selection instead.\n\t * The mode is now automatically determined based on which property is used.\n\t */\n\t@property({\n\t\ttype: Boolean,\n\t\treflect: true,\n\t})\n\tget multi(): boolean {\n\t\treturn this._multi\n\t}\n\tset multi(value: boolean) {\n\t\tthis._multi = value\n\t\t// Note: We don't update any BehaviorSubject here as mode is now computed\n\t}\n\n\t/**\n\t * Automatically determines the selection mode based on which properties are in use\n\t */\n\tprivate get mode(): 'multi' | 'single' | 'none' {\n\t\t// Check if values array is being used (explicitly set)\n\t\tif (this._valuesSet) {\n\t\t\treturn 'multi'\n\t\t}\n\t\t// Check if value string is being used (explicitly set)\n\t\tif (this._valueSet) {\n\t\t\treturn 'single'\n\t\t}\n\t\t// Check if either property has been set via attributes\n\t\tif (this.hasAttribute('values')) {\n\t\t\treturn 'multi'\n\t\t}\n\t\tif (this.hasAttribute('value')) {\n\t\t\treturn 'single'\n\t\t}\n\t\t// Fallback to deprecated multi prop for backward compatibility\n\t\tif (this._multi === true) {\n\t\t\treturn 'multi'\n\t\t}\n\t\t// Default to none (no selection management)\n\t\treturn 'none'\n\t}\n\n\t@property({\n\t\ttype: Array,\n\t\treflect: true,\n\t})\n\tget values(): string[] {\n\t\treturn this._values\n\t}\n\tset values(value: string[]) {\n\t\tthis._values = value || []\n\t\tthis._valuesSet = true // Mark that values has been explicitly set\n\t\tthis.values$.next(this._values)\n\t}\n\n\t@property({\n\t\ttype: String,\n\t\treflect: true,\n\t})\n\tget value(): string {\n\t\treturn this._value\n\t}\n\tset value(value: string) {\n\t\tthis._value = value || ''\n\t\tthis._valueSet = true // Mark that value has been explicitly set\n\t\tthis.value$.next(this._value)\n\t}\n\n\t@queryAssignedElements({\n\t\tselector:\n\t\t\t'schmancy-chip, schmancy-filter-chip, schmancy-assist-chip, schmancy-input-chip, schmancy-suggestion-chip',\n\t\tflatten: true,\n\t})\n\tchips!: (SchmancyChip | HTMLElement)[]\n\n\t@property({\n\t\ttype: Boolean,\n\t\treflect: true,\n\t})\n\twrap: boolean = false\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// Initialize BehaviorSubjects with current property values\n\t\t// This ensures properties set before connectedCallback are respected\n\t\tthis.value$.next(this._value)\n\t\tthis.values$.next(this._values)\n\n\t\t// Set up reactive pipeline for state synchronization\n\t\tcombineLatest([\n\t\t\tthis.value$.pipe(distinctUntilChanged()),\n\t\t\tthis.values$.pipe(\n\t\t\t\tdistinctUntilChanged((prev, curr) => prev.length === curr.length && prev.every((v, i) => v === curr[i])),\n\t\t\t),\n\t\t])\n\t\t\t.pipe(\n\t\t\t\tdebounceTime(0), // Ensure DOM is ready\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe(([value, values]) => {\n\t\t\t\t// Reactively update chip states based on container state and auto-detected mode\n\t\t\t\tthis.updateChipStates(this.mode, value, values)\n\t\t\t})\n\t}\n\n\tprivate updateChipStates(mode: 'multi' | 'single' | 'none', value: string, values: string[]) {\n\t\tif (!this.chips) return\n\n\t\t// If mode is 'none', don't manage selection state\n\t\tif (mode === 'none') return\n\n\t\tthis.chips.forEach(chip => {\n\t\t\tif ('value' in chip && 'selected' in chip) {\n\t\t\t\tconst filterChip = chip as SchmancyChip\n\t\t\t\tif (mode === 'multi') {\n\t\t\t\t\t// In multi mode: only select if values array explicitly includes this chip's value\n\t\t\t\t\tfilterChip.selected = values.length > 0 && values.includes(filterChip.value)\n\t\t\t\t} else if (mode === 'single') {\n\t\t\t\t\t// In single mode: only select if value is non-empty AND matches this chip's value\n\t\t\t\t\t// This prevents chips from being selected when value is empty string\n\t\t\t\t\tfilterChip.selected = value !== '' && value === filterChip.value\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\tasync change(e: CustomEvent<SchmancyChipChangeEvent>) {\n\t\te.preventDefault()\n\t\te.stopPropagation()\n\n\t\t// If mode is 'none', don't handle selection changes\n\t\tif (this.mode === 'none') return\n\n\t\tconst { value, selected } = e.detail\n\n\t\t// Update the reactive streams and internal tracking, which will trigger state synchronization\n\t\tif (this.mode === 'multi') {\n\t\t\tif (selected) {\n\t\t\t\t// Add value if not already present\n\t\t\t\tif (!this._values.includes(value)) {\n\t\t\t\t\tthis._values = [...this._values, value]\n\t\t\t\t\tthis.values$.next(this._values)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Remove value\n\t\t\t\tthis._values = this._values.filter(v => v !== value)\n\t\t\t\tthis.values$.next(this._values)\n\t\t\t}\n\t\t} else if (this.mode === 'single') {\n\t\t\t// Single selection mode\n\t\t\tthis._value = selected ? value : ''\n\t\t\tthis.value$.next(this._value)\n\t\t}\n\n\t\t// Request update to trigger re-render and property reflection\n\t\tthis.requestUpdate()\n\n\t\t// Dispatch change event with appropriate detail based on mode\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent<SchmancyChipsChangeEvent>('change', {\n\t\t\t\tdetail: this.mode === 'multi' ? this._values : this._value,\n\t\t\t\tbubbles: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprotected firstUpdated(_changedProperties: PropertyValues): void {\n\t\tsuper.firstUpdated(_changedProperties)\n\t\t// Initial state synchronization will happen through the reactive pipeline\n\t\t// Force an initial update to ensure chips are synchronized\n\t\tthis.updateChipStates(this.mode, this._value, this._values)\n\t}\n\n\tprotected render(): unknown {\n\t\tconst containerClasses = this.classMap({\n\t\t\t'inset-2': true,\n\t\t\tflex: true,\n\t\t\t'gap-2': true,\n\t\t\t'items-center': true,\n\t\t\t'flex-wrap': this.wrap,\n\t\t\t'overflow-x-auto': !this.wrap,\n\t\t\t'scrollbar-hide': !this.wrap,\n\t\t})\n\n\t\treturn html`\n\t\t\t<div class=${containerClasses} @change=${this.change}>\n\t\t\t\t<slot\n\t\t\t\t\t@slotchange=${() => {\n\t\t\t\t\t\t// When slot changes, trigger state update through reactive pipeline\n\t\t\t\t\t\tthis.updateChipStates(this.mode, this._value, this._values)\n\t\t\t\t\t}}\n\t\t\t\t></slot>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-chips': SchmancyChips\n\t}\n}\nexport type SchmancyChipsChangeEvent = string | Array<string>\n"],"names":["SchmancyFilterChip","TailwindElement","css","super","this","value","_selected","icon","removable","disabled","elevated","hover$","BehaviorSubject","pressed$","focused$","handleClick","dispatchEvent","CustomEvent","detail","selected","bubbles","composed","handleRemove","e","stopPropagation","handleKeyDown","key","preventDefault","handleMouseEnter","next","handleMouseLeave","handleMouseDown","handleMouseUp","handleFocus","handleBlur","internals","attachInternals","oldValue","requestUpdate","form","connectedCallback","combineLatest","pipe","takeUntil","disconnecting","subscribe","render","chipClasses","border","relative","html","classMap","when","iconSlotElements","length","shadowRootOptions","LitElement","delegatesFocus","formAssociated","_w","__decorateClass","property","type","String","reflect","prototype","Boolean","queryAssignedElements","slot","customElements","get","define","SchmancyChipCompat","SchmancyAssistChip","constructor","arguments","href","target","ripples","nextRippleId","button","shadowRoot","querySelector","rect","getBoundingClientRect","x","clientX","left","y","clientY","top","id","setTimeout","filter","r","window","open","location","clickEvent","MouseEvent","cancelable","classes","map","ripple","state","customElement","SchmancyInputChip","avatar","chipHover$","removeHover$","uiState","chipHover","removeHover","focused","pressed","handleChipClick","chip","tap","removeButtonClasses","SchmancySuggestionChip","SchmancyChips","$LitElement","value$","values$","_value","_values","_multi","_valueSet","_valuesSet","wrap","multi","mode","hasAttribute","values","distinctUntilChanged","prev","curr","every","v","i","debounceTime","updateChipStates","chips","forEach","filterChip","includes","_changedProperties","firstUpdated","containerClasses","flex","change","Array","selector","flatten"],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";const r=require("rxjs");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const m=require("lit/decorators.js");require("./tailwind.mixin-Cb-fyJ_y.cjs");const A=require("./litElement.mixin-YJ8D9a8Z.cjs"),b=require("lit"),R=new r.Subject,C="FINDING_MORTIES",j="HERE_RICKY",O=new WeakMap;class f{constructor(){this.prettyURL=!1,this.mode="HISTORY",this.request=new r.ReplaySubject(1),this.current=new Map,this.$current=new r.ReplaySubject(1),this.enableHistoryMode=!0,this.findingMortiesEvent=new CustomEvent(C),this.disposed=!1,this.isProcessingPopstate=!1,this.$current.next(this.current),this.$current.subscribe(e=>{this.disposed||e.forEach((t,s)=>{this.getOrCreateAreaSubject(s).next(t)})}),this.initializeFromBrowserState(),typeof window<"u"&&(this.unloadSubscription=r.fromEvent(window,"unload").subscribe(()=>{this.dispose()}))}get areaSubjects(){let e=O.get(this);return e||(e=new Map,O.set(this,e)),e}initializeFromBrowserState(){try{const e=history.state;e&&e.schmancyAreas&&(Object.entries(e.schmancyAreas).forEach(([t,s])=>{this.current.set(t,s)}),this.$current.next(this.current))}catch{}}getOrCreateAreaSubject(e){let t=this.areaSubjects.get(e);if(!t||t.closed){t=new r.ReplaySubject(1),this.areaSubjects.set(e,t);const s=this.current.get(e);s&&t.next({...s,state:s.state||{},params:s.params||{},props:s.props||{}})}return t}on(e,t=!1){if(!e)throw new Error("Area name is required");const s=this.getOrCreateAreaSubject(e).asObservable().pipe(r.distinctUntilChanged((o,n)=>o.component===n.component&&JSON.stringify(o.state)===JSON.stringify(n.state)&&JSON.stringify(o.params)===JSON.stringify(n.params)),r.shareReplay(1));return t?s.pipe(r.skip(1)):s}all(e=!1){const t=this.$current.asObservable().pipe(r.shareReplay(1));return e?t.pipe(r.skip(1)):t}getState(e){if(!e)throw new Error("Area name is required");return this.on(e).pipe(r.map(t=>t.state),r.filter(t=>t!=null),r.distinctUntilChanged((t,s)=>JSON.stringify(t)===JSON.stringify(s)),r.map(t=>t),r.catchError(t=>r.EMPTY))}params(e){if(!e)throw new Error("Area name is required");return this.on(e).pipe(r.map(t=>t.params),r.filter(t=>t!=null),r.distinctUntilChanged((t,s)=>JSON.stringify(t)===JSON.stringify(s)),r.map(t=>t),r.catchError(t=>r.EMPTY))}param(e,t){if(!e||!t)throw new Error("Area name and key are required");return this.params(e).pipe(r.map(s=>s[t]),r.filter(s=>s!==void 0),r.distinctUntilChanged(),r.map(s=>s),r.catchError(s=>r.EMPTY))}props(e){if(!e)throw new Error("Area name is required");return this.on(e).pipe(r.map(t=>t.props),r.filter(t=>t!=null),r.distinctUntilChanged((t,s)=>JSON.stringify(t)===JSON.stringify(s)),r.map(t=>t),r.catchError(t=>r.EMPTY))}prop(e,t){if(!e||!t)throw new Error("Area name and key are required");return this.props(e).pipe(r.map(s=>s[t]),r.filter(s=>s!==void 0),r.distinctUntilChanged(),r.map(s=>s),r.catchError(s=>r.EMPTY))}find(){return r.zip([r.fromEvent(window,j).pipe(r.map(e=>e.detail),r.bufferTime(0)),r.of(1).pipe(r.tap(()=>window.dispatchEvent(this.findingMortiesEvent)))]).pipe(r.map(([e])=>e),r.timeout(1),r.catchError(()=>r.EMPTY))}push(e){if(!e.area)throw new Error("Area is required for route action");if(this.isProcessingPopstate)return;const t={...e,state:e.state||{},params:e.params||{},props:e.props||{},_source:"programmatic"};this.enableHistoryMode&&R.next(t),this.request.next(t),this.dispatchAreaEvent(t.area,t)}_updateFromBrowser(e){const t={...e,state:e.state||{},params:e.params||{},props:e.props||{},_source:"browser"};this.isProcessingPopstate=!0,this.request.next(t),this.isProcessingPopstate=!1}_updateBrowserHistory(e,t,s,o){if(this.enableHistoryMode)try{const n=history.state||{},i=n.schmancyAreas||{},h={component:t.component,area:t.area};t.state&&Object.keys(t.state).length>0&&(h.state=t.state),t.params&&Object.keys(t.params).length>0&&(h.params=t.params),t.props&&Object.keys(t.props).length>0&&(h.props=t.props),i[e]=h;const c={...n,schmancyAreas:i},u=this.createCleanURL(i,o);s==="replace"||s==="pop"?history.replaceState(c,"",u):s!=="push"&&s||history.pushState(c,"",u)}catch{}}createCleanURL(e,t){const s=location.pathname,o=s.split("/");let n="/";const i=o[o.length-1];i&&(i.includes("{")||i.includes("%7B"))?(o.pop(),n=o.join("/")||"/"):n=s,n==="/"||n.endsWith("/")||(n+="/");let h="";if(t!==!0){const c=new URLSearchParams(location.search);Array.isArray(t)&&t.forEach(u=>c.delete(u)),h=c.toString(),h=h?`?${h}`:""}if(this.prettyURL){const c=e.main;if(c){let u=n==="/"?`/${c.component}`:`${n}${c.component}`;const S=new URLSearchParams(h);c.params&&Object.entries(c.params).forEach(([d,E])=>{typeof E!="string"&&typeof E!="number"||S.set(d,String(E))});const p=S.toString();return u+(p?`?${p}`:"")}}try{const c={};if(Object.entries(e).forEach(([S,p])=>{const d={component:p.component};p.state&&Object.keys(p.state).length>0&&(d.state=p.state),p.params&&Object.keys(p.params).length>0&&(d.params=p.params),p.props&&Object.keys(p.props).length>0&&(d.props=p.props),c[S]=d}),Object.keys(c).length===0)return`${n==="/"?"":n.replace(/\/$/,"")}${h}`;const u=encodeURIComponent(JSON.stringify(c));return`${n==="/"?"":n.replace(/\/$/,"")}/${u}${h}`}catch{return location.pathname}}restoreFromBrowserState(e){try{if(e&&e.schmancyAreas)return e.schmancyAreas}catch{}return this.parseStateFromURL()}parseStateFromURL(){const e=location.pathname.split("/").pop();if(!e)return{};try{const t=decodeURIComponent(e),s=JSON.parse(t);if(typeof s=="object"&&s!==null)return s}catch{}return{}}dispatchAreaEvent(e,t){const s=new CustomEvent(`schmancy-area-${e}-changed`,{detail:{area:e,component:t.component,state:t.state,params:t.params,props:t.props,historyStrategy:t.historyStrategy},bubbles:!0,composed:!0});window.dispatchEvent(s)}pop(e){if(!e)throw new Error("Area name is required");const t=this.areaSubjects.get(e);if(t&&!t.closed&&t.next({component:null,state:{},area:e,params:{},props:{}}),this.request.next({area:e,component:null,state:{},params:{},props:{},historyStrategy:"silent",_source:"programmatic"}),this.current.delete(e),this.$current.next(this.current),this.enableHistoryMode)try{const s=history.state||{},o={...s.schmancyAreas||{}};delete o[e];const n={...s,schmancyAreas:o},i=this.createCleanURL(o);history.replaceState(n,"",i)}catch{}}clear(){if(this.areaSubjects.forEach(e=>e.complete()),this.areaSubjects.clear(),this.current.clear(),this.$current.next(this.current),this.enableHistoryMode){const e=this.createCleanURL({});history.replaceState({schmancyAreas:{}},"",e)}}dispose(){this.disposed||(this.disposed=!0,this.unloadSubscription&&(this.unloadSubscription.unsubscribe(),this.unloadSubscription=void 0),this.areaSubjects.forEach(e=>e.complete()),this.areaSubjects.clear(),this.request.complete(),this.$current.complete(),R.complete(),this.current.clear(),O.delete(this))}static getInstance(){return f.instance||(f.instance=new f),f.instance}get state(){try{const e=history.state;if(e&&e.schmancyAreas)return e.schmancyAreas}catch{}return this.parseStateFromURL()}hasArea(e){return this.current.has(e)}getActiveAreas(){return Array.from(this.current.keys())}getRoute(e){return this.current.get(e)}}const y=f.getInstance();var l=(a=>(a.push="push",a.replace="replace",a.pop="pop",a.silent="silent",a))(l||{}),v=Object.defineProperty,P=Object.getOwnPropertyDescriptor,w=(a,e,t,s)=>{for(var o,n=s>1?void 0:s?P(e,t):e,i=a.length-1;i>=0;i--)(o=a[i])&&(n=(s?o(e,t,n):o(n))||n);return s&&n&&v(e,t,n),n};exports.SchmancyArea=class extends A.$LitElement(b.css`
|
|
2
|
-
:host {
|
|
3
|
-
position: relative;
|
|
4
|
-
display: block;
|
|
5
|
-
inset: 0;
|
|
6
|
-
}
|
|
7
|
-
`){constructor(){super(...arguments),this._routeCache=[]}firstUpdated(){if(!this.name)throw new Error("Area name is required");this._routeCache=this.routes||[],this.name,r.merge(y.request.pipe(r.filter(({area:a})=>a===this.name)),r.of(location.pathname).pipe(r.take(1),r.switchMap(()=>{const a=location.pathname,e=a.split("/").pop()||"";let t;if(e&&(e.includes("{")||e.includes("%7B")))try{const o=JSON.parse(decodeURIComponent(e));if(o[this.name]){const n=o[this.name];return t=this._routeCache?.find(i=>i.when===n.component),t?r.of({area:this.name,component:t.component,state:o[this.name].state||{},params:o[this.name].params||{},historyStrategy:l.replace}):r.of({area:this.name,component:o[this.name].component,state:o[this.name].state||{},params:o[this.name].params||{},historyStrategy:l.replace})}}catch{}const s=a.split("/").filter(Boolean);return t=this._routeCache?.find(o=>s.includes(o.when)),t?r.of({area:this.name,component:t.component,state:{},params:{},historyStrategy:l.silent}):this.default?r.of({area:this.name,component:this.default,state:{},params:{},historyStrategy:l.silent}):r.EMPTY})),r.fromEvent(window,"popstate").pipe(r.map(a=>a.state?.schmancyAreas?.[this.name]?{area:this.name,component:a.state.schmancyAreas[this.name].component,state:a.state.schmancyAreas[this.name].state||{},params:a.state.schmancyAreas[this.name].params||{},historyStrategy:l.pop}:null),r.filter(a=>a!==null))).pipe(r.filter(a=>a?.component!==void 0),r.switchMap(async a=>{let e=a.component;if(typeof e=="function"&&("preload"in e||"_promise"in e||"_module"in e))try{e=(await e()).default}catch{return{component:null,route:a}}return{component:e,route:a}}),r.map(({component:a,route:e})=>{let t="";return a&&a!==""?typeof a=="string"?t=a:a instanceof HTMLElement?t=a.tagName:typeof a=="function"&&(t=a.name||"CustomElement"):t="null",{component:a,route:e,key:`${t}${JSON.stringify(e.params)}${JSON.stringify(e.state)}`}}),r.distinctUntilChanged((a,e)=>a.key===e.key),r.switchMap(a=>r.of(a).pipe(r.map(()=>this._routeCache.find(e=>e.when===a.component)),r.switchMap(e=>e?.guard?e.guard.pipe(r.tap(t=>{})):r.of(!0)),r.switchMap(e=>{if(e===!0)return r.of(a);const t=this._routeCache.find(o=>o.when===a.component),s=new CustomEvent("redirect",{detail:{blockedRoute:a.component,area:this.name,params:a.route?.params||{},state:a.route?.state||{},redirectTarget:typeof e=="object"&&e!==!1?e:void 0},bubbles:!0,composed:!0});return t.dispatchEvent(s),r.EMPTY}))),r.map(({component:a,route:e})=>{let t=null;if(a&&a!==""){if(typeof a=="string")try{t=document.createElement(a)}catch{}else if(a instanceof HTMLElement)t=a;else if(typeof a=="function")try{t=new a}catch{}}else t=null;return t&&(e.params&&Object.assign(t,e.params),e.props&&Object.assign(t,e.props),e.state&&(t.state=e.state)),{element:t,route:e}}),r.shareReplay(1),r.tap(({element:a,route:e})=>this.swapComponents(a,e)),r.catchError(a=>r.EMPTY),r.takeUntil(this.disconnecting)).subscribe()}swapComponents(a,e){const t=this.shadowRoot?.children[0];if(a){if(t?t.animate([{opacity:1},{opacity:0}],{duration:150,easing:"ease-out"}).onfinish=()=>{t.remove(),this.shadowRoot?.append(a),a.animate([{opacity:0},{opacity:1}],{duration:150,easing:"ease-in"})}:(this.shadowRoot?.append(a),a.animate([{opacity:0},{opacity:1}],{duration:100,easing:"ease-in"})),a){const s={component:a.tagName.toLowerCase(),state:e.state||{},area:this.name,params:e.params||{}};y.current.set(this.name,s),y.$current.next(y.current)}if(y.enableHistoryMode&&a){const s={component:a.tagName.toLowerCase(),state:e.state||{},area:this.name,params:e.params||{}};y._updateBrowserHistory(this.name,s,e.historyStrategy||l.push,e.clearQueryParams)}}else t&&t.remove()}newPath(a,e){const t=location.pathname.split("/").pop();let s={};try{s=t?JSON.parse(decodeURIComponent(t)):{}}catch{s={}}e.state=e.state??{};const o=e.clearQueryParams?this.queryParamClear(e.clearQueryParams):document.location.search;return encodeURIComponent(JSON.stringify({...s,[this.name]:{component:a.toLowerCase(),state:e.state,params:e.params}})).concat(`${o}`)}queryParamClear(a){if(!a)return"";const e=new URLSearchParams(location.search);return a===!0?"":(a.forEach(t=>e.delete(t)),e.toString()===""?"":`?${e.toString()}`)}disconnectedCallback(){super.disconnectedCallback()}render(){return b.html` <slot> </slot> `}},w([m.property()],exports.SchmancyArea.prototype,"name",2),w([m.property()],exports.SchmancyArea.prototype,"default",2),w([m.queryAssignedElements({selector:"schmancy-route",flatten:!0})],exports.SchmancyArea.prototype,"routes",2),exports.SchmancyArea=w([m.customElement("schmancy-area")],exports.SchmancyArea);var M=Object.defineProperty,$=Object.getOwnPropertyDescriptor,g=(a,e,t,s)=>{for(var o,n=s>1?void 0:s?$(e,t):e,i=a.length-1;i>=0;i--)(o=a[i])&&(n=(s?o(e,t,n):o(n))||n);return s&&n&&M(e,t,n),n};exports.SchmancyRoute=class extends A.$LitElement(b.css`
|
|
8
|
-
:host {
|
|
9
|
-
display: none;
|
|
10
|
-
}
|
|
11
|
-
`){constructor(){super(...arguments),this.exact=!1}getConfig(){return{when:this.when,component:this.component,exact:this.exact,guard:this.guard}}render(){return b.html``}},g([m.property({type:String})],exports.SchmancyRoute.prototype,"when",2),g([m.property({type:Object})],exports.SchmancyRoute.prototype,"component",2),g([m.property({type:Boolean})],exports.SchmancyRoute.prototype,"exact",2),g([m.property({type:Object})],exports.SchmancyRoute.prototype,"guard",2),exports.SchmancyRoute=g([m.customElement("schmancy-route")],exports.SchmancyRoute),exports.FINDING_MORTIES=C,exports.HERE_RICKY=j,exports.HISTORY_STRATEGY=l,exports.area=y,exports.routerHistory=R;
|
|
12
|
-
//# sourceMappingURL=route.component-Cr-M16SZ.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"route.component-Cr-M16SZ.cjs","sources":["../src/area/area.service.ts","../src/area/router.types.ts","../src/area/area.component.ts","../src/area/route.component.ts"],"sourcesContent":["import {\n\tbufferTime,\n\tcatchError,\n\tdistinctUntilChanged,\n\tEMPTY,\n\tfilter,\n\tfromEvent,\n\tmap,\n\tObservable,\n\tof,\n\tReplaySubject,\n\tshareReplay,\n\tskip,\n\tSubject,\n\tSubscription,\n\ttap,\n\ttimeout,\n\tzip\n} from 'rxjs'\nimport { SchmancyTeleportation } from '../teleport'\nimport { ActiveRoute, AreaSubscription, RouteAction } from './router.types'\n\nexport const routerHistory = new Subject<RouteAction>()\n\nexport const FINDING_MORTIES = 'FINDING_MORTIES'\nexport const HERE_RICKY = 'HERE_RICKY'\nexport type HERE_RICKY_EVENT = CustomEvent<{\n\tcomponent: SchmancyTeleportation\n}>\nexport type FINDING_MORTIES_EVENT = CustomEvent<{\n\tcomponent: SchmancyTeleportation\n}>\n\n// WeakMap for better memory management of area subjects\nconst areaSubjectsCache = new WeakMap<AreaService, Map<string, ReplaySubject<ActiveRoute>>>()\n\n// Track navigation source to prevent history conflicts\ntype NavigationSource = 'programmatic' | 'browser' | 'initial'\n\nclass AreaService implements AreaSubscription {\n\tprivate static instance: AreaService\n\tpublic prettyURL = false\n\tpublic mode: 'SILENT' | 'HISTORY' = 'HISTORY'\n\tpublic request = new ReplaySubject<RouteAction>(1)\n\tpublic current = new Map<string, ActiveRoute>()\n\tpublic $current = new ReplaySubject<Map<string, ActiveRoute>>(1)\n\t\n\t// Create a dictionary of ReplaySubjects for area-specific subscriptions\n\tprivate get areaSubjects(): Map<string, ReplaySubject<ActiveRoute>> {\n\t\tlet subjects = areaSubjectsCache.get(this)\n\t\tif (!subjects) {\n\t\t\tsubjects = new Map()\n\t\t\tareaSubjectsCache.set(this, subjects)\n\t\t}\n\t\treturn subjects\n\t}\n\t\n\tpublic enableHistoryMode = true\n\tprivate findingMortiesEvent = new CustomEvent<FINDING_MORTIES_EVENT['detail']>(FINDING_MORTIES)\n\tprivate disposed = false\n\tpublic isProcessingPopstate = false\n\tprivate unloadSubscription?: Subscription\n\n\tconstructor() {\n\t\tthis.$current.next(this.current)\n\t\t\n\t\t// Subscribe to current changes to update area-specific subjects\n\t\tthis.$current.subscribe(currentAreas => {\n\t\t\tif (this.disposed) return\n\t\t\t\n\t\t\t// For each area in the current map\n\t\t\tcurrentAreas.forEach((route, areaName) => {\n\t\t\t\t// Get or create a subject for this area\n\t\t\t\tconst areaSubject = this.getOrCreateAreaSubject(areaName)\n\t\t\t\t// Emit the updated route to area-specific subscribers\n\t\t\t\tareaSubject.next(route)\n\t\t\t})\n\t\t})\n\n\t\t// Initialize from browser state if available\n\t\tthis.initializeFromBrowserState()\n\n\t\t// Setup unload subscription using RxJS\n\t\tif (typeof window !== 'undefined') {\n\t\t\tthis.unloadSubscription = fromEvent(window, 'unload').subscribe(() => {\n\t\t\t\tthis.dispose()\n\t\t\t})\n\t\t}\n\t}\n\n\t/**\n\t * Initialize router state from browser history state\n\t */\n\tprivate initializeFromBrowserState() {\n\t\ttry {\n\t\t\tconst browserState = history.state\n\t\t\tif (browserState && browserState.schmancyAreas) {\n\t\t\t\tObject.entries(browserState.schmancyAreas).forEach(([areaName, route]) => {\n\t\t\t\t\tthis.current.set(areaName, route as ActiveRoute)\n\t\t\t\t})\n\t\t\t\tthis.$current.next(this.current)\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.warn('Failed to initialize from browser state:', error)\n\t\t}\n\t}\n\n\t/**\n\t * Get or create a ReplaySubject for a specific area with proper cleanup\n\t */\n\tprivate getOrCreateAreaSubject(areaName: string): ReplaySubject<ActiveRoute> {\n\t\tlet subject = this.areaSubjects.get(areaName)\n\t\t\n\t\tif (!subject || subject.closed) {\n\t\t\tsubject = new ReplaySubject<ActiveRoute>(1)\n\t\t\tthis.areaSubjects.set(areaName, subject)\n\t\t\t\n\t\t\t// If the area already exists in current, emit it immediately\n\t\t\tconst currentRoute = this.current.get(areaName)\n\t\t\tif (currentRoute) {\n\t\t\t\tsubject.next({\n\t\t\t\t\t...currentRoute,\n\t\t\t\t\t// Ensure state, params and props are initialized if undefined\n\t\t\t\t\tstate: currentRoute.state || {},\n\t\t\t\t\tparams: currentRoute.params || {},\n\t\t\t\t\tprops: currentRoute.props || {}\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn subject\n\t}\n\n\t/**\n\t * Subscribe to a specific area with caching\n\t */\n\ton(areaName: string, skipCurrent = false): Observable<ActiveRoute> {\n\t\tif (!areaName) {\n\t\t\tthrow new Error('Area name is required')\n\t\t}\n\t\t\n\t\tconst areaSubject = this.getOrCreateAreaSubject(areaName)\n\t\tconst observable = areaSubject.asObservable().pipe(\n\t\t\t// Add distinct to prevent duplicate emissions - now includes state\n\t\t\tdistinctUntilChanged((a, b) => \n\t\t\t\ta.component === b.component &&\n\t\t\t\tJSON.stringify(a.state) === JSON.stringify(b.state) &&\n\t\t\t\tJSON.stringify(a.params) === JSON.stringify(b.params)\n\t\t\t),\n\t\t\t// Share the subscription\n\t\t\tshareReplay(1)\n\t\t)\n\t\t\n\t\treturn skipCurrent ? observable.pipe(skip(1)) : observable\n\t}\n\t\n\t/**\n\t * Subscribe to all areas\n\t */\n\tall(skipCurrent = false): Observable<Map<string, ActiveRoute>> {\n\t\tconst observable = this.$current.asObservable().pipe(\n\t\t\tshareReplay(1)\n\t\t)\n\t\treturn skipCurrent ? observable.pipe(skip(1)) : observable\n\t}\n\t\n\t/**\n\t * Get state from an area with type safety\n\t */\n\tgetState<T = unknown>(areaName: string): Observable<T> {\n\t\tif (!areaName) {\n\t\t\tthrow new Error('Area name is required')\n\t\t}\n\t\t\n\t\treturn this.on(areaName).pipe(\n\t\t\tmap(route => route.state),\n\t\t\tfilter((state): state is NonNullable<Record<string, unknown>> => \n\t\t\t\tstate !== undefined && state !== null\n\t\t\t),\n\t\t\tdistinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\n\t\t\tmap(state => state as T),\n\t\t\tcatchError(err => {\n\t\t\t\tconsole.error(`Error getting state for area \"${areaName}\":`, err)\n\t\t\t\treturn EMPTY\n\t\t\t})\n\t\t)\n\t}\n\t\n\t/**\n\t * Get params from an area with type safety\n\t */\n\tparams<T extends Record<string, unknown> = Record<string, unknown>>(areaName: string): Observable<T> {\n\t\tif (!areaName) {\n\t\t\tthrow new Error('Area name is required')\n\t\t}\n\t\t\n\t\treturn this.on(areaName).pipe(\n\t\t\tmap(route => route.params),\n\t\t\tfilter((params): params is NonNullable<Record<string, unknown>> => \n\t\t\t\tparams !== undefined && params !== null\n\t\t\t),\n\t\t\tdistinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\n\t\t\tmap(params => params as T),\n\t\t\tcatchError(err => {\n\t\t\t\tconsole.error(`Error getting params for area \"${areaName}\":`, err)\n\t\t\t\treturn EMPTY\n\t\t\t})\n\t\t)\n\t}\n\t\n\t/**\n\t * Get a specific param from an area with null safety\n\t */\n\tparam<T = unknown>(areaName: string, key: string): Observable<T> {\n\t\tif (!areaName || !key) {\n\t\t\tthrow new Error('Area name and key are required')\n\t\t}\n\t\t\n\t\treturn this.params<Record<string, unknown>>(areaName).pipe(\n\t\t\tmap(params => params[key]),\n\t\t\tfilter((value): value is NonNullable<unknown> => value !== undefined),\n\t\t\tdistinctUntilChanged(),\n\t\t\tmap(value => value as T),\n\t\t\tcatchError(err => {\n\t\t\t\tconsole.error(`Error getting param \"${key}\" for area \"${areaName}\":`, err)\n\t\t\t\treturn EMPTY\n\t\t\t})\n\t\t)\n\t}\n\t\n\t/**\n\t * Get props from an area with type safety\n\t */\n\tprops<T extends Record<string, unknown> = Record<string, unknown>>(areaName: string): Observable<T> {\n\t\tif (!areaName) {\n\t\t\tthrow new Error('Area name is required')\n\t\t}\n\t\t\n\t\treturn this.on(areaName).pipe(\n\t\t\tmap(route => route.props),\n\t\t\tfilter((props): props is NonNullable<Record<string, unknown>> => \n\t\t\t\tprops !== undefined && props !== null\n\t\t\t),\n\t\t\tdistinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\n\t\t\tmap(props => props as T),\n\t\t\tcatchError(err => {\n\t\t\t\tconsole.error(`Error getting props for area \"${areaName}\":`, err)\n\t\t\t\treturn EMPTY\n\t\t\t})\n\t\t)\n\t}\n\t\n\t/**\n\t * Get a specific prop from an area with null safety\n\t */\n\tprop<T = unknown>(areaName: string, key: string): Observable<T> {\n\t\tif (!areaName || !key) {\n\t\t\tthrow new Error('Area name and key are required')\n\t\t}\n\t\t\n\t\treturn this.props<Record<string, unknown>>(areaName).pipe(\n\t\t\tmap(props => props[key]),\n\t\t\tfilter((value): value is NonNullable<unknown> => value !== undefined),\n\t\t\tdistinctUntilChanged(),\n\t\t\tmap(value => value as T),\n\t\t\tcatchError(err => {\n\t\t\t\tconsole.error(`Error getting prop \"${key}\" for area \"${areaName}\":`, err)\n\t\t\t\treturn EMPTY\n\t\t\t})\n\t\t)\n\t}\n\n\t/**\n\t * Find teleportation components\n\t */\n\tfind() {\n\t\treturn zip([\n\t\t\tfromEvent<HERE_RICKY_EVENT>(window, HERE_RICKY).pipe(\n\t\t\t\tmap(e => e.detail),\n\t\t\t\tbufferTime(0),\n\t\t\t),\n\t\t\tof(1).pipe(tap(() => window.dispatchEvent(this.findingMortiesEvent))),\n\t\t]).pipe(\n\t\t\tmap(([component]) => component),\n\t\t\ttimeout(1),\n\t\t\tcatchError(() => EMPTY)\n\t\t)\n\t}\n\n\t/**\n\t * Push a new route action with validation\n\t */\n\tpush(r: RouteAction) {\n\t\tif (!r.area) {\n\t\t\tthrow new Error('Area is required for route action')\n\t\t}\n\t\t\n\t\t// Prevent processing during popstate handling\n\t\tif (this.isProcessingPopstate) {\n\t\t\treturn\n\t\t}\n\t\t\n\t\t// Ensure state, params and props are initialized\n\t\tconst routeAction: RouteAction = {\n\t\t\t...r,\n\t\t\tstate: r.state || {},\n\t\t\tparams: r.params || {},\n\t\t\tprops: r.props || {},\n\t\t\t_source: 'programmatic' as NavigationSource\n\t\t}\n\t\t\n\t\t// Add to history if enabled\n\t\tif (this.enableHistoryMode) {\n\t\t\trouterHistory.next(routeAction)\n\t\t}\n\t\t\n\t\tthis.request.next(routeAction)\n\t\t// Emit an area-specific event for those who want to listen directly to DOM events\n\t\tthis.dispatchAreaEvent(routeAction.area, routeAction)\n\t}\n\n\t/**\n\t * Internal method to update route from browser navigation\n\t * This should only be called by area components during popstate handling\n\t */\n\t_updateFromBrowser(routeAction: RouteAction) {\n\t\tconst enhancedRoute: RouteAction = {\n\t\t\t...routeAction,\n\t\t\tstate: routeAction.state || {},\n\t\t\tparams: routeAction.params || {},\n\t\t\tprops: routeAction.props || {},\n\t\t\t_source: 'browser' as NavigationSource\n\t\t}\n\t\t\n\t\tthis.isProcessingPopstate = true\n\t\tthis.request.next(enhancedRoute)\n\t\tthis.isProcessingPopstate = false\n\t}\n\n\t/**\n\t * Update browser history state (called by area components)\n\t */\n\t_updateBrowserHistory(areaName: string, route: ActiveRoute, historyStrategy?: string, clearQueryParams?: string[] | boolean | null) {\n\t\tif (!this.enableHistoryMode) return\n\t\t\n\t\ttry {\n\t\t\t// Get current browser state or create new one\n\t\t\tconst currentState = history.state || {}\n\t\t\tconst schmancyAreas = currentState.schmancyAreas || {}\n\t\t\t\n\t\t\t// Update the specific area - only include non-empty state/params/props\n\t\t\tconst areaData: any = {\n\t\t\t\tcomponent: route.component,\n\t\t\t\tarea: route.area\n\t\t\t}\n\t\t\t\n\t\t\t// Only include state if it has content\n\t\t\tif (route.state && Object.keys(route.state).length > 0) {\n\t\t\t\tareaData.state = route.state\n\t\t\t}\n\t\t\t\n\t\t\t// Only include params if it has content\n\t\t\tif (route.params && Object.keys(route.params).length > 0) {\n\t\t\t\tareaData.params = route.params\n\t\t\t}\n\t\t\t\n\t\t\t// Only include props if it has content\n\t\t\tif (route.props && Object.keys(route.props).length > 0) {\n\t\t\t\tareaData.props = route.props\n\t\t\t}\n\t\t\t\n\t\t\tschmancyAreas[areaName] = areaData\n\t\t\t\n\t\t\tconst newState = {\n\t\t\t\t...currentState,\n\t\t\t\tschmancyAreas\n\t\t\t}\n\t\t\t\n\t\t\t// Create clean URL\n\t\t\tconst url = this.createCleanURL(schmancyAreas, clearQueryParams)\n\t\t\t\n\t\t\t// Update browser history\n\t\t\tif (historyStrategy === 'replace' || historyStrategy === 'pop') {\n\t\t\t\thistory.replaceState(newState, '', url)\n\t\t\t} else if (historyStrategy === 'push' || !historyStrategy) {\n\t\t\t\thistory.pushState(newState, '', url)\n\t\t\t}\n\t\t\t// 'silent' strategy doesn't update browser history\n\t\t\t\n\t\t} catch (error) {\n\t\t\tconsole.error('Failed to update browser history:', error)\n\t\t}\n\t}\n\n\t/**\n\t * Create a clean URL from area states\n\t */\n\tprivate createCleanURL(areas: Record<string, ActiveRoute>, clearQueryParams?: string[] | boolean | null): string {\n\t\t// Get the current base path (everything except the last segment which might be encoded state)\n\t\tconst currentPath = location.pathname\n\t\tconst pathSegments = currentPath.split('/')\n\t\tlet basePath = '/'\n\n\t\t// Check if the last segment is encoded state (contains { or %7B)\n\t\tconst lastSegment = pathSegments[pathSegments.length - 1]\n\t\tif (lastSegment && (lastSegment.includes('{') || lastSegment.includes('%7B'))) {\n\t\t\t// Remove the encoded state segment to get the base path\n\t\t\tpathSegments.pop()\n\t\t\tbasePath = pathSegments.join('/') || '/'\n\t\t} else {\n\t\t\t// Keep the current path as base path\n\t\t\tbasePath = currentPath\n\t\t}\n\n\t\t// Ensure base path ends properly\n\t\tif (basePath !== '/' && !basePath.endsWith('/')) {\n\t\t\tbasePath += '/'\n\t\t}\n\n\t\t// Handle query parameters\n\t\tlet queryString = ''\n\n\t\tif (clearQueryParams !== true) {\n\t\t\t// Get current query params\n\t\t\tconst urlParams = new URLSearchParams(location.search)\n\n\t\t\t// Clear specific params if provided\n\t\t\tif (Array.isArray(clearQueryParams)) {\n\t\t\t\tclearQueryParams.forEach(param => urlParams.delete(param))\n\t\t\t}\n\n\t\t\t// Convert back to string\n\t\t\tqueryString = urlParams.toString()\n\t\t\tqueryString = queryString ? `?${queryString}` : ''\n\t\t}\n\t\t// If clearQueryParams === true, queryString remains empty (all params cleared)\n\n\t\tif (this.prettyURL) {\n\t\t\t// Create pretty URLs - customize this based on your routing needs\n\t\t\tconst mainArea = areas.main\n\t\t\tif (mainArea) {\n\t\t\t\tlet path = basePath === '/' ? `/${mainArea.component}` : `${basePath}${mainArea.component}`\n\n\t\t\t\t// Add simple params to URL\n\t\t\t\tconst searchParams = new URLSearchParams(queryString)\n\t\t\t\tif (mainArea.params) {\n\t\t\t\t\tObject.entries(mainArea.params).forEach(([key, value]) => {\n\t\t\t\t\t\tif (typeof value === 'string' || typeof value === 'number') {\n\t\t\t\t\t\t\tsearchParams.set(key, String(value))\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tconst query = searchParams.toString()\n\t\t\t\treturn path + (query ? `?${query}` : '')\n\t\t\t}\n\t\t}\n\n\t\t// Fallback to encoded state in URL (original behavior)\n\t\ttry {\n\t\t\t// Clean up empty objects before encoding\n\t\t\tconst cleanedAreas: Record<string, any> = {}\n\t\t\tObject.entries(areas).forEach(([areaName, route]) => {\n\t\t\t\tconst cleanRoute: any = { component: route.component }\n\n\t\t\t\t// Only include state if it has content\n\t\t\t\tif (route.state && Object.keys(route.state).length > 0) {\n\t\t\t\t\tcleanRoute.state = route.state\n\t\t\t\t}\n\n\t\t\t\t// Only include params if it has content\n\t\t\t\tif (route.params && Object.keys(route.params).length > 0) {\n\t\t\t\t\tcleanRoute.params = route.params\n\t\t\t\t}\n\n\t\t\t\t// Only include props if it has content\n\t\t\t\tif (route.props && Object.keys(route.props).length > 0) {\n\t\t\t\t\tcleanRoute.props = route.props\n\t\t\t\t}\n\n\t\t\t\tcleanedAreas[areaName] = cleanRoute\n\t\t\t})\n\n\t\t\t// If cleanedAreas is empty, preserve the base path\n\t\t\tif (Object.keys(cleanedAreas).length === 0) {\n\t\t\t\tconst cleanBasePath = basePath === '/' ? '' : basePath.replace(/\\/$/, '')\n\t\t\t\treturn `${cleanBasePath}${queryString}`\n\t\t\t}\n\n\t\t\tconst encoded = encodeURIComponent(JSON.stringify(cleanedAreas))\n\t\t\tconst cleanBasePath = basePath === '/' ? '' : basePath.replace(/\\/$/, '')\n\t\t\treturn `${cleanBasePath}/${encoded}${queryString}`\n\t\t} catch (error) {\n\t\t\tconsole.error('Failed to encode URL state:', error)\n\t\t\treturn location.pathname\n\t\t}\n\t}\n\n\t/**\n\t * Restore state from browser history state\n\t */\n\trestoreFromBrowserState(browserState: any): Record<string, ActiveRoute> {\n\t\ttry {\n\t\t\tif (browserState && browserState.schmancyAreas) {\n\t\t\t\treturn browserState.schmancyAreas\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error('Failed to restore from browser state:', error)\n\t\t}\n\t\t\n\t\t// Fallback to URL parsing (original behavior)\n\t\treturn this.parseStateFromURL()\n\t}\n\n\t/**\n\t * Parse state from URL (fallback method)\n\t */\n\tprivate parseStateFromURL(): Record<string, ActiveRoute> {\n\t\tconst pathname = location.pathname.split('/').pop()\n\t\tif (!pathname) return {}\n\t\t\n\t\ttry {\n\t\t\tconst decoded = decodeURIComponent(pathname)\n\t\t\tconst parsed = JSON.parse(decoded)\n\t\t\t\n\t\t\tif (typeof parsed === 'object' && parsed !== null) {\n\t\t\t\treturn parsed\n\t\t\t}\n\t\t} catch {\n\t\t\t// Ignore parse errors\n\t\t}\n\t\t\n\t\treturn {}\n\t}\n\t\n\t/**\n\t * Dispatch a DOM event for a specific area change\n\t */\n\tprivate dispatchAreaEvent(areaName: string, routeAction: RouteAction) {\n\t\tconst eventName = `schmancy-area-${areaName}-changed`\n\t\tconst event = new CustomEvent(eventName, { \n\t\t\tdetail: { \n\t\t\t\tarea: areaName,\n\t\t\t\tcomponent: routeAction.component,\n\t\t\t\tstate: routeAction.state,\n\t\t\t\tparams: routeAction.params,\n\t\t\t\tprops: routeAction.props,\n\t\t\t\thistoryStrategy: routeAction.historyStrategy\n\t\t\t},\n\t\t\tbubbles: true,\n\t\t\tcomposed: true\n\t\t})\n\t\twindow.dispatchEvent(event)\n\t}\n\n\t/**\n\t * Remove an area from the current state\n\t */\n\tpop(name: string) {\n\t\tif (!name) {\n\t\t\tthrow new Error('Area name is required')\n\t\t}\n\n\t\t// Before removing from current map, emit a clearing signal to the area's subject\n\t\t// This notifies the area component to clear itself\n\t\tconst areaSubject = this.areaSubjects.get(name)\n\t\tif (areaSubject && !areaSubject.closed) {\n\t\t\t// Send a route with null component to signal clearing\n\t\t\tareaSubject.next({\n\t\t\t\tcomponent: null as any,\n\t\t\t\tstate: {},\n\t\t\t\tarea: name,\n\t\t\t\tparams: {},\n\t\t\t\tprops: {}\n\t\t\t})\n\t\t}\n\n\t\t// Send a clearing signal through the request pipeline\n\t\t// This ensures the area component receives the signal to clear\n\t\tthis.request.next({\n\t\t\tarea: name,\n\t\t\tcomponent: null as any,\n\t\t\tstate: {},\n\t\t\tparams: {},\n\t\t\tprops: {},\n\t\t\thistoryStrategy: 'silent' as any,\n\t\t\t_source: 'programmatic' as NavigationSource\n\t\t})\n\n\t\t// Remove from current map\n\t\tthis.current.delete(name)\n\t\tthis.$current.next(this.current)\n\n\t\t// Update browser history\n\t\tif (this.enableHistoryMode) {\n\t\t\ttry {\n\t\t\t\tconst currentState = history.state || {}\n\t\t\t\tconst schmancyAreas = { ...(currentState.schmancyAreas || {}) }\n\t\t\t\tdelete schmancyAreas[name]\n\n\t\t\t\tconst newState = {\n\t\t\t\t\t...currentState,\n\t\t\t\t\tschmancyAreas\n\t\t\t\t}\n\n\t\t\t\tconst url = this.createCleanURL(schmancyAreas)\n\t\t\t\thistory.replaceState(newState, '', url)\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Failed to update history after pop:', error)\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Clear all areas\n\t */\n\tclear() {\n\t\t// Complete all area subjects\n\t\tthis.areaSubjects.forEach(subject => subject.complete())\n\t\tthis.areaSubjects.clear()\n\n\t\t// Clear current state\n\t\tthis.current.clear()\n\t\tthis.$current.next(this.current)\n\n\t\t// Update URL\n\t\tif (this.enableHistoryMode) {\n\t\t\tconst url = this.createCleanURL({})\n\t\t\thistory.replaceState({ schmancyAreas: {} }, '', url)\n\t\t}\n\t}\n\t\n\t/**\n\t * Dispose of the service and clean up resources\n\t */\n\tdispose() {\n\t\tif (this.disposed) return\n\n\t\tthis.disposed = true\n\n\t\t// Unsubscribe from unload event\n\t\tif (this.unloadSubscription) {\n\t\t\tthis.unloadSubscription.unsubscribe()\n\t\t\tthis.unloadSubscription = undefined\n\t\t}\n\n\t\t// Complete all subjects\n\t\tthis.areaSubjects.forEach(subject => subject.complete())\n\t\tthis.areaSubjects.clear()\n\n\t\tthis.request.complete()\n\t\tthis.$current.complete()\n\t\trouterHistory.complete()\n\n\t\t// Clear references\n\t\tthis.current.clear()\n\t\tareaSubjectsCache.delete(this)\n\t}\n\t\n\t/**\n\t * Get singleton instance\n\t */\n\tstatic getInstance() {\n\t\tif (!AreaService.instance) {\n\t\t\tAreaService.instance = new AreaService()\n\t\t}\n\t\treturn AreaService.instance\n\t}\n\n\t/**\n\t * Get current state from URL (deprecated - use browser state instead)\n\t */\n\tget state(): Record<string, unknown> {\n\t\t// Try browser state first\n\t\ttry {\n\t\t\tconst browserState = history.state\n\t\t\tif (browserState && browserState.schmancyAreas) {\n\t\t\t\treturn browserState.schmancyAreas\n\t\t\t}\n\t\t} catch {\n\t\t\t// Fallback to URL parsing\n\t\t}\n\t\t\n\t\t// Fallback to URL parsing (original behavior)\n\t\treturn this.parseStateFromURL()\n\t}\n\t\n\t/**\n\t * Check if an area exists in current state\n\t */\n\thasArea(areaName: string): boolean {\n\t\treturn this.current.has(areaName)\n\t}\n\t\n\t/**\n\t * Get all active area names\n\t */\n\tgetActiveAreas(): string[] {\n\t\treturn Array.from(this.current.keys())\n\t}\n\t\n\t/**\n\t * Get route for a specific area synchronously\n\t */\n\tgetRoute(areaName: string): ActiveRoute | undefined {\n\t\treturn this.current.get(areaName)\n\t}\n}\n\nexport const area = AreaService.getInstance()\nexport default area","export type RouteAction = {\n\tcomponent: CustomElementConstructor | string | HTMLElement | (() => Promise<{ default: CustomElementConstructor }>)\n\tarea: string\n\tstate?: Record<string, unknown>\n\tparams?: Record<string, unknown>\n\tprops?: Record<string, unknown> // Alias for params\n\thistoryStrategy?: THistoryStrategy\n\tclearQueryParams?: string[] | boolean | null\n\t_source?: 'programmatic' | 'browser' | 'initial' // Internal use only\n}\n\nexport type ActiveRoute = {\n\tcomponent: string\n\tarea: string\n\tstate?: Record<string, unknown>\n\tparams?: Record<string, unknown>\n\tprops?: Record<string, unknown>\n}\n\n/**\n * Interface for subscribing to area changes\n */\nexport interface AreaSubscription {\n\t/**\n\t * Subscribe to a specific area\n\t * @param areaName Name of the area to subscribe to\n\t * @param skipCurrent Whether to skip the current value\n\t * @returns Observable of the active route for the specified area\n\t */\n\ton(areaName: string, skipCurrent?: boolean): import('rxjs').Observable<ActiveRoute>\n\t\n\t/**\n\t * Subscribe to all areas\n\t * @param skipCurrent Whether to skip the current value\n\t * @returns Observable of all active routes\n\t */\n\tall(skipCurrent?: boolean): import('rxjs').Observable<Map<string, ActiveRoute>>\n\t\n\t/**\n\t * Get state from an area\n\t * @param areaName Name of the area to subscribe to\n\t * @returns Observable of the area's state\n\t */\n\tgetState<T = unknown>(areaName: string): import('rxjs').Observable<T>\n\t\n\t/**\n\t * Get params from an area\n\t * @param areaName Name of the area to subscribe to\n\t * @returns Observable of the area's params\n\t */\n\tparams<T extends Record<string, unknown> = Record<string, unknown>>(areaName: string): import('rxjs').Observable<T>\n\t\n\t/**\n\t * Get a specific param from an area\n\t * @param areaName Name of the area to subscribe to\n\t * @param key Key of the param to select\n\t * @returns Observable of the param value\n\t */\n\tparam<T = unknown>(areaName: string, key: string): import('rxjs').Observable<T>\n\t\n\t/**\n\t * Get props from an area\n\t * @param areaName Name of the area to subscribe to\n\t * @returns Observable of the area's props\n\t */\n\tprops<T extends Record<string, unknown> = Record<string, unknown>>(areaName: string): import('rxjs').Observable<T>\n\t\n\t/**\n\t * Get a specific prop from an area\n\t * @param areaName Name of the area to subscribe to\n\t * @param key Key of the prop to select\n\t * @returns Observable of the prop value\n\t */\n\tprop<T = unknown>(areaName: string, key: string): import('rxjs').Observable<T>\n}\n\nexport type THistoryStrategy = 'push' | 'replace' | 'pop' | 'silent'\n\nexport enum HISTORY_STRATEGY {\n\tpush = 'push',\n\treplace = 'replace',\n\tpop = 'pop',\n\tsilent = 'silent',\n}\n\n/**\n * Browser history state structure used by Schmancy Area\n */\nexport interface SchmancyHistoryState {\n\tschmancyAreas: Record<string, ActiveRoute>\n\t[key: string]: any // Allow other apps to store additional state\n}","import { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js'\nimport {\n\tEMPTY,\n\tcatchError,\n\tdistinctUntilChanged,\n\tfilter,\n\tfromEvent,\n\tmap,\n\tmerge,\n\tof,\n\tshareReplay,\n\tswitchMap,\n\ttake,\n\ttakeUntil,\n\ttap,\n} from 'rxjs'\nimport area from './area.service'\nimport { SchmancyRoute } from './route.component'\nimport { ActiveRoute, HISTORY_STRATEGY, RouteAction } from './router.types'\n\nexport type ComponentType =\n\t| CustomElementConstructor\n\t| string\n\t| HTMLElement\n\t| (() => Promise<{ default: CustomElementConstructor }>)\n@customElement('schmancy-area')\nexport class SchmancyArea extends $LitElement(css`\n\t:host {\n\t\tposition: relative;\n\t\tdisplay: block;\n\t\tinset: 0;\n\t}\n`) {\n\t/**\n\t * The name of the router outlet\n\t * @attr\n\t * @type {string}\n\t * @public\n\t * @required\n\t */\n\t@property() name!: string\n\n\t@property() default!: ComponentType\n\n\t/**\n\t * Query for assigned route elements in the slot\n\t * This will automatically update when slot content changes\n\t */\n\t@queryAssignedElements({ selector: 'schmancy-route', flatten: true })\n\tprivate routes!: SchmancyRoute[]\n\n\t/**\n\t * Cache routes to ensure they remain accessible throughout component lifecycle\n\t */\n\tprivate _routeCache: SchmancyRoute[] = []\n\n\tprotected firstUpdated(): void {\n\t\tif (!this.name) throw new Error('Area name is required')\n\n\t\t// Cache routes immediately after name check\n\t\tthis._routeCache = this.routes || []\n\n\t\tif (this.name === 'guard-demo-area') {\n\t\t\tconsole.log('guard-demo-area routes:', this._routeCache)\n\t\t}\n\t\t// Single unified routing pipeline - all logic inline\n\t\tmerge(\n\t\t\t// Programmatic navigation\n\t\t\tarea.request.pipe(filter(({ area }) => area === this.name)),\n\n\t\t\t// Initial load - simplified to use this.routes directly\n\t\t\tof(location.pathname).pipe(\n\t\t\t\ttake(1),\n\t\t\t\tswitchMap(() => {\n\t\t\t\t\tconst path = location.pathname\n\t\t\t\t\tconst lastSegment = path.split('/').pop() || ''\n\t\t\t\t\tlet route: SchmancyRoute\n\n\t\t\t\t\t// Check for JSON encoded route\n\t\t\t\t\tif (lastSegment && (lastSegment.includes('{') || lastSegment.includes('%7B'))) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst parsed = JSON.parse(decodeURIComponent(lastSegment)) as Record<string, ActiveRoute>\n\t\t\t\t\t\t\tif (parsed[this.name]) {\n\t\t\t\t\t\t\t\tconst componentTag = parsed[this.name]\n\t\t\t\t\t\t\t\troute = this._routeCache?.find(r => r.when === componentTag.component)\n\t\t\t\t\t\t\t\t// if the route.component is a lazy loaded module we need to load it\n\t\t\t\t\t\t\t\tif (route)\n\t\t\t\t\t\t\t\t\treturn of({\n\t\t\t\t\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t\t\t\t\t\tcomponent: route.component,\n\t\t\t\t\t\t\t\t\t\tstate: parsed[this.name].state || {},\n\t\t\t\t\t\t\t\t\t\tparams: parsed[this.name].params || {},\n\t\t\t\t\t\t\t\t\t\thistoryStrategy: HISTORY_STRATEGY.replace,\n\t\t\t\t\t\t\t\t\t} as RouteAction)\n\n\t\t\t\t\t\t\t\treturn of({\n\t\t\t\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t\t\t\t\tcomponent: parsed[this.name].component,\n\t\t\t\t\t\t\t\t\tstate: parsed[this.name].state || {},\n\t\t\t\t\t\t\t\t\tparams: parsed[this.name].params || {},\n\t\t\t\t\t\t\t\t\thistoryStrategy: HISTORY_STRATEGY.replace,\n\t\t\t\t\t\t\t\t} as RouteAction)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch {}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Segment-based routing - use cached routes\n\t\t\t\t\tconst segments = path.split('/').filter(Boolean)\n\t\t\t\t\troute = this._routeCache?.find(r => segments.includes(r.when))\n\t\t\t\t\t// if the route.component is a lazy loaded module we need to load it\n\n\t\t\t\t\tif (!route) {\n\t\t\t\t\t\treturn this.default\n\t\t\t\t\t\t\t? of({\n\t\t\t\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t\t\t\t\tcomponent: this.default,\n\t\t\t\t\t\t\t\t\tstate: {},\n\t\t\t\t\t\t\t\t\tparams: {},\n\t\t\t\t\t\t\t\t\thistoryStrategy: HISTORY_STRATEGY.silent,\n\t\t\t\t\t\t\t\t} as RouteAction)\n\t\t\t\t\t\t\t: EMPTY\n\t\t\t\t\t}\n\n\t\t\t\t\treturn of({\n\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t\tcomponent: route.component,\n\t\t\t\t\t\tstate: {},\n\t\t\t\t\t\tparams: {},\n\t\t\t\t\t\thistoryStrategy: HISTORY_STRATEGY.silent,\n\t\t\t\t\t} as RouteAction)\n\t\t\t\t}),\n\t\t\t),\n\n\t\t\t// Browser back/forward - simplified to directly use popstate\n\t\t\tfromEvent<PopStateEvent>(window, 'popstate').pipe(\n\t\t\t\tmap(event =>\n\t\t\t\t\tevent.state?.schmancyAreas?.[this.name]\n\t\t\t\t\t\t? ({\n\t\t\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t\t\t\tcomponent: event.state.schmancyAreas[this.name].component,\n\t\t\t\t\t\t\t\tstate: event.state.schmancyAreas[this.name].state || {},\n\t\t\t\t\t\t\t\tparams: event.state.schmancyAreas[this.name].params || {},\n\t\t\t\t\t\t\t\thistoryStrategy: HISTORY_STRATEGY.pop,\n\t\t\t\t\t\t\t} as RouteAction)\n\t\t\t\t\t\t: null,\n\t\t\t\t),\n\t\t\t\tfilter(route => route !== null),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(\n\t\t\t\tfilter(route => route?.component !== undefined),\n\t\t\t\t// Step 1: Resolve ONLY lazy components to constructors (no element creation)\n\t\t\t\tswitchMap(async route => {\n\t\t\t\t\tlet component = route.component\n\n\t\t\t\t\t// Resolve lazy components first\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof component === 'function' &&\n\t\t\t\t\t\t('preload' in component || '_promise' in component || '_module' in component)\n\t\t\t\t\t) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst module = await (component as () => Promise<{ default: CustomElementConstructor }>)()\n\t\t\t\t\t\t\tcomponent = module.default\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tconsole.error(`[${this.name}] Lazy load failed:`, e)\n\t\t\t\t\t\t\treturn { component: null, route }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn { component, route }\n\t\t\t\t}),\n\n\t\t\t\t// Step 2: Extract component identifier for comparison (without creating elements)\n\t\t\t\tmap(({ component, route }) => {\n\t\t\t\t\tlet identifier = ''\n\n\t\t\t\t\tif (!component || component === '') {\n\t\t\t\t\t\tidentifier = 'null'\n\t\t\t\t\t} else if (typeof component === 'string') {\n\t\t\t\t\t\tidentifier = component\n\t\t\t\t\t} else if (component instanceof HTMLElement) {\n\t\t\t\t\t\tidentifier = component.tagName\n\t\t\t\t\t} else if (typeof component === 'function') {\n\t\t\t\t\t\tidentifier = component.name || 'CustomElement'\n\t\t\t\t\t}\n\n\t\t\t\t\tconst key = `${identifier}${JSON.stringify(route.params)}${JSON.stringify(route.state)}`\n\n\t\t\t\t\treturn { component, route, key }\n\t\t\t\t}),\n\n\t\t\t\t// Step 3: Deduplicate using the identifier (before creating expensive elements)\n\t\t\t\tdistinctUntilChanged((a, b) => {\n\t\t\t\t\treturn a.key === b.key\n\t\t\t\t}),\n\t\t\t\t// Step 0: Guard\n\t\t\t\tswitchMap(r => {\n\t\t\t\t\tconsole.log(this._routeCache)\n\t\t\t\t\treturn of(r).pipe(\n\t\t\t\t\t\tmap(() => this._routeCache.find(route => route.when === r.component)),\n\t\t\t\t\t\tswitchMap(route => {\n\t\t\t\t\t\t\treturn route?.guard\n\t\t\t\t\t\t\t\t? route.guard.pipe(\n\t\t\t\t\t\t\t\t\t\ttap(v => {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('just hit route guard', v)\n\t\t\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: of(true)\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tswitchMap(guardResult => {\n\t\t\t\t\t\t\t// Guard can return true, false, or an object with redirect info\n\t\t\t\t\t\t\tif (guardResult === true) return of(r)\n\t\t\t\t\t\t\tconst route = this._routeCache.find(route => route.when === r.component)\n\t\t\t\t\t\t\t// Emit redirect event with details about the blocked navigation\n\t\t\t\t\t\t\tconst redirectEvent = new CustomEvent('redirect', {\n\t\t\t\t\t\t\t\tdetail: {\n\t\t\t\t\t\t\t\t\tblockedRoute: r.component,\n\t\t\t\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t\t\t\t\tparams: r.route?.params || {},\n\t\t\t\t\t\t\t\t\tstate: r.route?.state || {},\n\t\t\t\t\t\t\t\t\t// If guard returns an object with redirect info, include it\n\t\t\t\t\t\t\t\t\tredirectTarget: typeof guardResult === 'object' && guardResult !== false ? guardResult : undefined,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tconsole.clear()\n\t\t\t\t\t\t\tconsole.log(route)\n\t\t\t\t\t\t\troute.dispatchEvent(redirectEvent)\n\n\t\t\t\t\t\t\t// Return EMPTY to gracefully handle the failed navigation\n\t\t\t\t\t\t\treturn EMPTY\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t}),\n\n\t\t\t\t// Step 4: Create the HTMLElement and apply properties\n\t\t\t\tmap(({ component, route }) => {\n\t\t\t\t\tlet element: HTMLElement | null = null\n\n\t\t\t\t\t// Now resolve to HTMLElement\n\t\t\t\t\tif (!component || component === '') {\n\t\t\t\t\t\telement = null\n\t\t\t\t\t} else if (typeof component === 'string') {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\telement = document.createElement(component)\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\tconsole.error(`[${this.name}] Failed to create element:`, component)\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (component instanceof HTMLElement) {\n\t\t\t\t\t\telement = component\n\t\t\t\t\t} else if (typeof component === 'function') {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\telement = new (component as CustomElementConstructor)()\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tconsole.error(`[${this.name}] Failed to instantiate:`, e)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply properties inline\n\t\t\t\t\tif (element) {\n\t\t\t\t\t\tif (route.params) Object.assign(element, route.params)\n\t\t\t\t\t\tif (route.props) Object.assign(element, route.props)\n\t\t\t\t\t\tif (route.state) (element as any).state = route.state\n\t\t\t\t\t}\n\n\t\t\t\t\treturn { element, route }\n\t\t\t\t}),\n\n\t\t\t\tshareReplay(1),\n\n\t\t\t\t// Swap components\n\t\t\t\ttap(({ element, route }) => this.swapComponents(element, route)),\n\n\t\t\t\tcatchError(error => {\n\t\t\t\t\tconsole.error(`[${this.name}] Navigation error:`, error)\n\t\t\t\t\treturn EMPTY\n\t\t\t\t}),\n\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Swap components with animation following the original pattern\n\t */\n\tprivate swapComponents(newComponent: HTMLElement | null, routeAction: RouteAction) {\n\t\tconst oldComponent = this.shadowRoot?.children[0] as HTMLElement | undefined\n\n\t\t// If no new component, just clear\n\t\tif (!newComponent) {\n\t\t\tif (oldComponent) {\n\t\t\t\toldComponent.remove()\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\t// Animate transition\n\t\tif (oldComponent) {\n\t\t\t// Fade out old component\n\t\t\tconst fadeOut = oldComponent.animate([{ opacity: 1 }, { opacity: 0 }], { duration: 150, easing: 'ease-out' })\n\n\t\t\tfadeOut.onfinish = () => {\n\t\t\t\toldComponent.remove()\n\t\t\t\t// Add and fade in new component\n\t\t\t\tthis.shadowRoot?.append(newComponent)\n\t\t\t\tnewComponent.animate([{ opacity: 0 }, { opacity: 1 }], { duration: 150, easing: 'ease-in' })\n\t\t\t}\n\t\t} else {\n\t\t\t// No old component, just add and fade in\n\t\t\tthis.shadowRoot?.append(newComponent)\n\t\t\tnewComponent.animate([{ opacity: 0 }, { opacity: 1 }], { duration: 100, easing: 'ease-in' })\n\t\t}\n\n\t\t// Update internal state\n\t\tif (newComponent) {\n\t\t\tconst activeRoute: ActiveRoute = {\n\t\t\t\tcomponent: newComponent.tagName.toLowerCase(),\n\t\t\t\tstate: routeAction.state || {},\n\t\t\t\tarea: this.name,\n\t\t\t\tparams: routeAction.params || {},\n\t\t\t}\n\n\t\t\tarea.current.set(this.name, activeRoute)\n\t\t\tarea.$current.next(area.current)\n\t\t}\n\n\t\t// Update browser history\n\t\tif (area.enableHistoryMode && newComponent) {\n\t\t\tconst activeRoute: ActiveRoute = {\n\t\t\t\tcomponent: newComponent.tagName.toLowerCase(),\n\t\t\t\tstate: routeAction.state || {},\n\t\t\t\tarea: this.name,\n\t\t\t\tparams: routeAction.params || {},\n\t\t\t}\n\n\t\t\tarea._updateBrowserHistory(\n\t\t\t\tthis.name,\n\t\t\t\tactiveRoute,\n\t\t\t\trouteAction.historyStrategy || HISTORY_STRATEGY.push,\n\t\t\t\trouteAction.clearQueryParams,\n\t\t\t)\n\t\t}\n\t}\n\n\t/**\n\t * Create URL path for the route (legacy method, now handled by service)\n\t */\n\tnewPath(tag: string, route: RouteAction) {\n\t\tconst oldPathname = location.pathname.split('/').pop()\n\t\tlet oldAreaState = {}\n\t\ttry {\n\t\t\toldAreaState = oldPathname ? JSON.parse(decodeURIComponent(oldPathname)) : {}\n\t\t} catch {\n\t\t\toldAreaState = {}\n\t\t}\n\t\troute.state = route.state ?? {}\n\t\tconst queryParams = route.clearQueryParams ? this.queryParamClear(route.clearQueryParams) : document.location.search\n\n\t\treturn encodeURIComponent(\n\t\t\tJSON.stringify({\n\t\t\t\t...oldAreaState,\n\t\t\t\t[this.name]: { component: tag.toLowerCase(), state: route.state, params: route.params },\n\t\t\t}),\n\t\t).concat(`${queryParams}`)\n\t}\n\n\t/**\n\t * Clear query parameters\n\t */\n\tqueryParamClear(params?: string[] | boolean) {\n\t\tif (!params) {\n\t\t\treturn ''\n\t\t}\n\t\t// get query params from url\n\t\tconst urlParams = new URLSearchParams(location.search)\n\n\t\tif (params === true) {\n\t\t\t// Clear all query params\n\t\t\treturn ''\n\t\t} else {\n\t\t\t// Clear specific query params\n\t\t\tparams.forEach(param => urlParams.delete(param))\n\t\t\t// update url\n\t\t\tif (urlParams.toString() === '') return ''\n\t\t\treturn `?${urlParams.toString()}`\n\t\t}\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t}\n\n\trender() {\n\t\treturn html` <slot> </slot> `\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-area': SchmancyArea\n\t}\n}\n","import { html, css, TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { $LitElement } from '@mixins/index';\nimport { Observable } from 'rxjs';\n\nexport type ObservableGuardResult = Observable<boolean>;\n\n// Component types that can be passed to routes\nexport type RouteComponent =\n | string // Tag name\n | CustomElementConstructor // Constructor function\n | HTMLElement // Existing element\n | TemplateResult<1> // Lit template\n | (() => Promise<{ default: CustomElementConstructor }>) // Lazy loader\n | Promise<{ default: CustomElementConstructor }>; // Dynamic import\n\nexport interface RouteConfig {\n when: string;\n component: RouteComponent;\n exact?: boolean;\n guard?: ObservableGuardResult;\n}\n\n/**\n * A marker component that holds route configuration.\n * This component doesn't render anything - it's used by schmancy-area\n * to configure routing via slot change detection.\n *\n * @example\n * ```html\n * <schmancy-area>\n * <schmancy-route\n * when=\"users\"\n * .component=${UserComponent}\n * exact\n * ></schmancy-route>\n * </schmancy-area>\n * ```\n */\n@customElement('schmancy-route')\nexport class SchmancyRoute extends $LitElement(css`\n :host {\n display: none;\n }\n`) {\n @property({ type: String })\n when!: string;\n\n @property({ type: Object })\n component!: RouteComponent;\n\n @property({ type: Boolean })\n exact?: boolean = false;\n\n @property({ type: Object })\n guard?:ObservableGuardResult ;\n\n /**\n * Returns the route configuration object\n */\n getConfig(): RouteConfig {\n return {\n when: this.when,\n component: this.component,\n exact: this.exact,\n guard: this.guard\n };\n }\n\n render() {\n // This is a marker component - no visual output\n return html``;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'schmancy-route': SchmancyRoute;\n }\n}"],"names":["routerHistory","Subject","FINDING_MORTIES","HERE_RICKY","areaSubjectsCache","WeakMap","AreaService","this","prettyURL","mode","request","ReplaySubject","current","Map","$current","enableHistoryMode","findingMortiesEvent","CustomEvent","disposed","isProcessingPopstate","next","subscribe","currentAreas","forEach","route","areaName","getOrCreateAreaSubject","initializeFromBrowserState","window","unloadSubscription","fromEvent","dispose","areaSubjects","subjects","get","set","browserState","history","state","schmancyAreas","Object","entries","subject","closed","currentRoute","params","props","skipCurrent","Error","observable","asObservable","pipe","distinctUntilChanged","a","b","component","JSON","stringify","shareReplay","skip","on","map","filter","catchError","err","EMPTY","key","value","find","zip","e","detail","bufferTime","of","tap","dispatchEvent","timeout","r","area","routeAction","_source","dispatchAreaEvent","enhancedRoute","historyStrategy","clearQueryParams","currentState","areaData","keys","length","newState","url","createCleanURL","replaceState","pushState","areas","currentPath","location","pathname","pathSegments","split","basePath","lastSegment","includes","pop","join","endsWith","queryString","urlParams","URLSearchParams","search","Array","isArray","param","delete","toString","mainArea","main","path","searchParams","String","query","cleanedAreas","cleanRoute","replace","encoded","encodeURIComponent","error","parseStateFromURL","decoded","decodeURIComponent","parsed","parse","event","bubbles","composed","name","areaSubject","clear","complete","unsubscribe","getInstance","instance","has","from","HISTORY_STRATEGY","SchmancyArea","$LitElement","css","constructor","super","arguments","_routeCache","firstUpdated","routes","merge","take","switchMap","componentTag","when","segments","Boolean","silent","default","async","module","identifier","HTMLElement","tagName","guard","v","guardResult","redirectEvent","blockedRoute","redirectTarget","element","document","createElement","assign","swapComponents","takeUntil","disconnecting","newComponent","oldComponent","shadowRoot","children","animate","opacity","duration","easing","onfinish","remove","append","activeRoute","toLowerCase","_updateBrowserHistory","push","tag","oldPathname","oldAreaState","queryParams","queryParamClear","concat","disconnectedCallback","html","__decorateClass","property","prototype","queryAssignedElements","selector","flatten","customElement","SchmancyRoute","exact","getConfig","render","type"],"mappings":"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"}
|