@mhmo91/schmancy 0.2.198 → 0.2.200
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/_commonjsHelpers-Dw9sPFZy.js +7 -0
- package/dist/_commonjsHelpers-Dw9sPFZy.js.map +1 -0
- package/dist/_commonjsHelpers-k2hpEU-q.cjs +2 -0
- package/dist/_commonjsHelpers-k2hpEU-q.cjs.map +1 -0
- package/dist/{animated-text-Cb07SP6h.js → animated-text-BZWvzqEZ.js} +3 -3
- package/dist/{animated-text-Cb07SP6h.js.map → animated-text-BZWvzqEZ.js.map} +1 -1
- package/dist/{animated-text-DML1qmmR.cjs → animated-text-BgLktXr-.cjs} +2 -2
- package/dist/{animated-text-DML1qmmR.cjs.map → animated-text-BgLktXr-.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-Psgv50Lq.cjs → area.component-CqKoQRDp.cjs} +2 -2
- package/dist/{area.component-Psgv50Lq.cjs.map → area.component-CqKoQRDp.cjs.map} +1 -1
- package/dist/{area.component-CdFovqHE.js → area.component-zvrF1R-P.js} +3 -3
- package/dist/{area.component-CdFovqHE.js.map → area.component-zvrF1R-P.js.map} +1 -1
- package/dist/area.js +1 -1
- package/dist/autocomplete-BCE9oBkO.cjs +73 -0
- package/dist/autocomplete-BCE9oBkO.cjs.map +1 -0
- package/dist/autocomplete-CpYDECg0.js +324 -0
- package/dist/autocomplete-CpYDECg0.js.map +1 -0
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/{avatar-CTMclGHR.js → avatar-B_BubJYb.js} +46 -45
- package/dist/{avatar-CTMclGHR.js.map → avatar-B_BubJYb.js.map} +1 -1
- package/dist/{avatar-COYuuamy.cjs → avatar-B_y2vLrR.cjs} +2 -2
- package/dist/{avatar-COYuuamy.cjs.map → avatar-B_y2vLrR.cjs.map} +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.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-Cntlr_eV.js → checkbox-CJ6x-G_b.js} +2 -2
- package/dist/{checkbox-Cntlr_eV.js.map → checkbox-CJ6x-G_b.js.map} +1 -1
- package/dist/{checkbox-C80YxaCN.cjs → checkbox-DATn1US_.cjs} +2 -2
- package/dist/{checkbox-C80YxaCN.cjs.map → checkbox-DATn1US_.cjs.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-CI-fsAqX.cjs → chips-BbWIMKDU.cjs} +2 -2
- package/dist/{chips-CI-fsAqX.cjs.map → chips-BbWIMKDU.cjs.map} +1 -1
- package/dist/{chips-vMtInVGX.js → chips-CcT1N7--.js} +9 -9
- package/dist/{chips-vMtInVGX.js.map → chips-CcT1N7--.js.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +1 -1
- package/dist/{circular-progress-8LR4RVjD.js → circular-progress-Cs3G6PHo.js} +3 -3
- package/dist/{circular-progress-8LR4RVjD.js.map → circular-progress-Cs3G6PHo.js.map} +1 -1
- package/dist/{circular-progress-CSWSAcU6.cjs → circular-progress-JGc2_9ef.cjs} +2 -2
- package/dist/{circular-progress-CSWSAcU6.cjs.map → circular-progress-JGc2_9ef.cjs.map} +1 -1
- package/dist/circular-progress.cjs +1 -1
- package/dist/circular-progress.js +1 -1
- package/dist/code-highlight.cjs +2 -0
- package/dist/code-highlight.cjs.map +1 -0
- package/dist/code-highlight.js +7 -0
- package/dist/code-highlight.js.map +1 -0
- package/dist/code-preview-BZ-uk6y1.js +876 -0
- package/dist/code-preview-BZ-uk6y1.js.map +1 -0
- package/dist/code-preview-DXf_SN2X.cjs +133 -0
- package/dist/code-preview-DXf_SN2X.cjs.map +1 -0
- 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-D85imfq-.cjs +121 -0
- package/dist/{date-range-BkVCslGl.cjs.map → date-range-D85imfq-.cjs.map} +1 -1
- package/dist/{date-range-ChsdVWRV.js → date-range-Dt9V5MyB.js} +62 -64
- package/dist/{date-range-ChsdVWRV.js.map → date-range-Dt9V5MyB.js.map} +1 -1
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-D6UmIwSa.cjs → delay-BH-y0tJg.cjs} +2 -2
- package/dist/{delay-D6UmIwSa.cjs.map → delay-BH-y0tJg.cjs.map} +1 -1
- package/dist/{delay-DJMIbnvL.js → delay-CE3iPMYG.js} +11 -11
- package/dist/{delay-DJMIbnvL.js.map → delay-CE3iPMYG.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{dialog-content-Cw1Al_Re.cjs → dialog-content-BQN75NSZ.cjs} +2 -2
- package/dist/{dialog-content-Cw1Al_Re.cjs.map → dialog-content-BQN75NSZ.cjs.map} +1 -1
- package/dist/{dialog-content-CWvxqVsr.js → dialog-content-E5R1XfK5.js} +3 -3
- package/dist/{dialog-content-CWvxqVsr.js.map → dialog-content-E5R1XfK5.js.map} +1 -1
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.js +1 -1
- package/dist/{divider-Cp6EXlTN.cjs → divider-BEtL0P-_.cjs} +2 -2
- package/dist/{divider-Cp6EXlTN.cjs.map → divider-BEtL0P-_.cjs.map} +1 -1
- package/dist/{divider-BGo7hglJ.js → divider-BlSi0WWi.js} +3 -3
- package/dist/{divider-BGo7hglJ.js.map → divider-BlSi0WWi.js.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/{dropdown-content-CTWWDRgy.js → dropdown-content-DkKciM_R.js} +3 -3
- package/dist/{dropdown-content-CTWWDRgy.js.map → dropdown-content-DkKciM_R.js.map} +1 -1
- package/dist/{dropdown-content-CmCumNjC.cjs → dropdown-content-HRI7Jkak.cjs} +2 -2
- package/dist/{dropdown-content-CmCumNjC.cjs.map → dropdown-content-HRI7Jkak.cjs.map} +1 -1
- package/dist/dropdown.cjs +1 -1
- package/dist/dropdown.js +1 -1
- package/dist/extra.cjs +1 -1
- package/dist/extra.js +1 -1
- package/dist/{flex-Dyfn6mxF.cjs → flex-CwTn3AfA.cjs} +2 -2
- package/dist/{flex-Dyfn6mxF.cjs.map → flex-CwTn3AfA.cjs.map} +1 -1
- package/dist/{flex-CKtJkkxU.js → flex-DHA02Mfw.js} +2 -2
- package/dist/{flex-CKtJkkxU.js.map → flex-DHA02Mfw.js.map} +1 -1
- package/dist/{form-BbQRONBu.cjs → form-C9llOgOw.cjs} +2 -2
- package/dist/{form-BbQRONBu.cjs.map → form-C9llOgOw.cjs.map} +1 -1
- package/dist/{form-BZdw3XUt.js → form-DsprWndI.js} +2 -2
- package/dist/{form-BZdw3XUt.js.map → form-DsprWndI.js.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{icon-CNkK3oMH.cjs → icon-B1vaqlkD.cjs} +2 -2
- package/dist/icon-B1vaqlkD.cjs.map +1 -0
- package/dist/{icon-PZTHZSsC.js → icon-D967cxey.js} +2 -3
- package/dist/icon-D967cxey.js.map +1 -0
- package/dist/{icon-button-5_uidIo2.js → icon-button-C_OqjQfc.js} +3 -3
- package/dist/{icon-button-5_uidIo2.js.map → icon-button-C_OqjQfc.js.map} +1 -1
- package/dist/{icon-button-L6UzTqIn.cjs → icon-button-D6RzSEQb.cjs} +2 -2
- package/dist/{icon-button-L6UzTqIn.cjs.map → icon-button-D6RzSEQb.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 +156 -152
- package/dist/index.js.map +1 -1
- package/dist/{input-cvO-mD1t.js → input-4heVsnGw.js} +2 -2
- package/dist/{input-cvO-mD1t.js.map → input-4heVsnGw.js.map} +1 -1
- package/dist/{input-GETorvfT.cjs → input-DschQCBp.cjs} +2 -2
- package/dist/{input-GETorvfT.cjs.map → input-DschQCBp.cjs.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +1 -1
- package/dist/{list-BPQwn2ZD.cjs → list-B1bxSmd5.cjs} +2 -2
- package/dist/{list-BPQwn2ZD.cjs.map → list-B1bxSmd5.cjs.map} +1 -1
- package/dist/{list-CjVW-XS-.js → list-DE1otSG3.js} +2 -2
- package/dist/{list-CjVW-XS-.js.map → list-DE1otSG3.js.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-BKgKxczr.js → litElement.mixin-1-y-wwQg.js} +2 -2
- package/dist/{litElement.mixin-BKgKxczr.js.map → litElement.mixin-1-y-wwQg.js.map} +1 -1
- package/dist/{litElement.mixin-0pIFA8ru.cjs → litElement.mixin-CB6DWbFn.cjs} +2 -2
- package/dist/{litElement.mixin-0pIFA8ru.cjs.map → litElement.mixin-CB6DWbFn.cjs.map} +1 -1
- package/dist/{menu-Bj9xX6Hn.js → menu-B1qPlV2t.js} +3 -3
- package/dist/{menu-Bj9xX6Hn.js.map → menu-B1qPlV2t.js.map} +1 -1
- package/dist/{menu-BpjaKAXC.cjs → menu-TDH53RmV.cjs} +2 -2
- package/dist/{menu-BpjaKAXC.cjs.map → menu-TDH53RmV.cjs.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/{notification-service-BFAKagab.cjs → notification-service-BKSRwonz.cjs} +2 -2
- package/dist/{notification-service-BFAKagab.cjs.map → notification-service-BKSRwonz.cjs.map} +1 -1
- package/dist/{notification-service-ITb5rmvM.js → notification-service-D2pgTqTS.js} +3 -3
- package/dist/{notification-service-ITb5rmvM.js.map → notification-service-D2pgTqTS.js.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-_DZj4_on.js → option-CLY6hO5V.js} +2 -2
- package/dist/{option-_DZj4_on.js.map → option-CLY6hO5V.js.map} +1 -1
- package/dist/{option-vszqrPbH.cjs → option-Q6l-t3es.cjs} +2 -2
- package/dist/{option-vszqrPbH.cjs.map → option-Q6l-t3es.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{payment-card-form-CxhMa60Q.js → payment-card-form-BpaCnjrt.js} +3 -3
- package/dist/{payment-card-form-CxhMa60Q.js.map → payment-card-form-BpaCnjrt.js.map} +1 -1
- package/dist/{payment-card-form-DgFUnANa.cjs → payment-card-form-V5eIamA9.cjs} +2 -2
- package/dist/{payment-card-form-DgFUnANa.cjs.map → payment-card-form-V5eIamA9.cjs.map} +1 -1
- package/dist/{radio-button-svaVfPn8.js → radio-button-CuTpkLr8.js} +2 -2
- package/dist/{radio-button-svaVfPn8.js.map → radio-button-CuTpkLr8.js.map} +1 -1
- package/dist/{radio-button-ChM1WZDg.cjs → radio-button-Dm2I9Ic4.cjs} +2 -2
- package/dist/{radio-button-ChM1WZDg.cjs.map → radio-button-Dm2I9Ic4.cjs.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/{schmancy-steps-container-C_-PFkRy.cjs → schmancy-steps-container-DO4tx0KH.cjs} +2 -2
- package/dist/{schmancy-steps-container-C_-PFkRy.cjs.map → schmancy-steps-container-DO4tx0KH.cjs.map} +1 -1
- package/dist/{schmancy-steps-container-9fHGNLHd.js → schmancy-steps-container-SrnYbTe-.js} +2 -2
- package/dist/{schmancy-steps-container-9fHGNLHd.js.map → schmancy-steps-container-SrnYbTe-.js.map} +1 -1
- package/dist/{select-DEd1YJF0.cjs → select-BJdRm5US.cjs} +2 -2
- package/dist/{select-DEd1YJF0.cjs.map → select-BJdRm5US.cjs.map} +1 -1
- package/dist/{select-CWulYSxd.js → select-DfemPf0w.js} +3 -3
- package/dist/{select-CWulYSxd.js.map → select-DfemPf0w.js.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-BhKQmvCN.cjs → sheet-BtaT1eui.cjs} +2 -2
- package/dist/{sheet-BhKQmvCN.cjs.map → sheet-BtaT1eui.cjs.map} +1 -1
- package/dist/{sheet-C2f1XwT3.js → sheet-Bvj7tapP.js} +3 -3
- package/dist/{sheet-C2f1XwT3.js.map → sheet-Bvj7tapP.js.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +1 -1
- package/dist/{slider-CetPyN3J.cjs → slider-AQvRuZ-m.cjs} +2 -2
- package/dist/{slider-CetPyN3J.cjs.map → slider-AQvRuZ-m.cjs.map} +1 -1
- package/dist/{slider-CmJGqDDU.js → slider-DAwHA6Az.js} +3 -3
- package/dist/{slider-CmJGqDDU.js.map → slider-DAwHA6Az.js.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{spinner-CLfAy0cd.cjs → spinner-BLy3-lqb.cjs} +2 -2
- package/dist/{spinner-CLfAy0cd.cjs.map → spinner-BLy3-lqb.cjs.map} +1 -1
- package/dist/{spinner-CmJk8fIO.js → spinner-DrZuae0L.js} +3 -3
- package/dist/{spinner-CmJk8fIO.js.map → spinner-DrZuae0L.js.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{surface-ChxX03-I.cjs → surface-BOerTano.cjs} +2 -2
- package/dist/{surface-ChxX03-I.cjs.map → surface-BOerTano.cjs.map} +1 -1
- package/dist/{surface-BnlEKr-d.js → surface-CAlEVfSs.js} +2 -2
- package/dist/{surface-BnlEKr-d.js.map → surface-CAlEVfSs.js.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{table-CzD7rJ5o.cjs → table-B3VrNQUV.cjs} +2 -2
- package/dist/{table-CzD7rJ5o.cjs.map → table-B3VrNQUV.cjs.map} +1 -1
- package/dist/{table-CZJ14ZEI.js → table-hjsAGpRq.js} +2 -2
- package/dist/{table-CZJ14ZEI.js.map → table-hjsAGpRq.js.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-compatibility-DHkghYmL.js → tabs-compatibility-D9ajXdXz.js} +2 -2
- package/dist/{tabs-compatibility-DHkghYmL.js.map → tabs-compatibility-D9ajXdXz.js.map} +1 -1
- package/dist/{tabs-compatibility-BviE0FdA.cjs → tabs-compatibility-DdXO8DcF.cjs} +2 -2
- package/dist/{tabs-compatibility-BviE0FdA.cjs.map → tabs-compatibility-DdXO8DcF.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/tailwind.mixin-DPUboU_5.js +43 -0
- package/dist/{tailwind.mixin-k9HTphsu.js.map → tailwind.mixin-DPUboU_5.js.map} +1 -1
- package/dist/tailwind.mixin-mxyACxyp.cjs +2 -0
- package/dist/{tailwind.mixin-DFxMrwgk.cjs.map → tailwind.mixin-mxyACxyp.cjs.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-qNzKErHX.cjs → textarea-C16vg4ME.cjs} +2 -2
- package/dist/{textarea-qNzKErHX.cjs.map → textarea-C16vg4ME.cjs.map} +1 -1
- package/dist/{textarea-kTwx4MAh.js → textarea-DqFx1pM1.js} +2 -2
- package/dist/{textarea-kTwx4MAh.js.map → textarea-DqFx1pM1.js.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-button-Dt3WQdd4.cjs → theme-button-CgZ5qc7_.cjs} +2 -2
- package/dist/{theme-button-Dt3WQdd4.cjs.map → theme-button-CgZ5qc7_.cjs.map} +1 -1
- package/dist/{theme-button-CCwPpArv.js → theme-button-D5fnf2QD.js} +2 -2
- package/dist/{theme-button-CCwPpArv.js.map → theme-button-D5fnf2QD.js.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/{theme.component-Drq675ta.cjs → theme.component-B5uMqEbH.cjs} +2 -2
- package/dist/{theme.component-Drq675ta.cjs.map → theme.component-B5uMqEbH.cjs.map} +1 -1
- package/dist/{theme.component-CJHr6wNa.js → theme.component-BOnjDUB3.js} +2 -2
- package/dist/{theme.component-CJHr6wNa.js.map → theme.component-BOnjDUB3.js.map} +1 -1
- package/dist/theme.js +1 -1
- package/dist/{timezone-oZ1r5Z54.cjs → timezone-CdAu8QsM.cjs} +2 -2
- package/dist/{timezone-oZ1r5Z54.cjs.map → timezone-CdAu8QsM.cjs.map} +1 -1
- package/dist/{timezone-B53HOn4a.js → timezone-DwU-YCRw.js} +3 -3
- package/dist/{timezone-B53HOn4a.js.map → timezone-DwU-YCRw.js.map} +1 -1
- package/dist/{tooltip-Bfcu9uoC.js → tooltip-Bn-UWxd4.js} +2 -2
- package/dist/{tooltip-Bfcu9uoC.js.map → tooltip-Bn-UWxd4.js.map} +1 -1
- package/dist/{tooltip-DrLzz4rf.cjs → tooltip-CyI3NYzI.cjs} +2 -2
- package/dist/{tooltip-DrLzz4rf.cjs.map → tooltip-CyI3NYzI.cjs.map} +1 -1
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/{tree-n0KxiiWX.js → tree-D2g2zq2B.js} +2 -2
- package/dist/{tree-n0KxiiWX.js.map → tree-D2g2zq2B.js.map} +1 -1
- package/dist/{tree-Buf-0IQD.cjs → tree-DdXcAF6S.cjs} +2 -2
- package/dist/{tree-Buf-0IQD.cjs.map → tree-DdXcAF6S.cjs.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-W7Rj384X.js → typewriter-3w_PiJFo.js} +16 -16
- package/dist/{typewriter-W7Rj384X.js.map → typewriter-3w_PiJFo.js.map} +1 -1
- package/dist/{typewriter-DSUU_7wv.cjs → typewriter-RVqJuWSv.cjs} +2 -2
- package/dist/{typewriter-DSUU_7wv.cjs.map → typewriter-RVqJuWSv.cjs.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/typography-BLJPXhuT.cjs +10 -0
- package/dist/typography-BLJPXhuT.cjs.map +1 -0
- package/dist/typography-izBBu-t8.js +37 -0
- package/dist/typography-izBBu-t8.js.map +1 -0
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/package.json +2 -1
- package/types/src/autocomplete/autocomplete.d.ts +18 -108
- package/types/src/code-highlight/code-highlight.d.ts +39 -0
- package/types/src/code-highlight/code-preview.d.ts +25 -0
- package/types/src/code-highlight/index.d.ts +3 -0
- package/types/src/icons/icon.d.ts +1 -1
- package/types/src/index.d.ts +1 -0
- package/types/src/utils/search.d.ts +1 -1
- package/dist/autocomplete-B36XAOQm.cjs +0 -56
- package/dist/autocomplete-B36XAOQm.cjs.map +0 -1
- package/dist/autocomplete-BD8oV6Se.js +0 -259
- package/dist/autocomplete-BD8oV6Se.js.map +0 -1
- package/dist/date-range-BkVCslGl.cjs +0 -121
- package/dist/icon-CNkK3oMH.cjs.map +0 -1
- package/dist/icon-PZTHZSsC.js.map +0 -1
- package/dist/tailwind.mixin-DFxMrwgk.cjs +0 -2
- package/dist/tailwind.mixin-k9HTphsu.js +0 -43
- package/dist/typography-DaN7dGA2.cjs +0 -6
- package/dist/typography-DaN7dGA2.cjs.map +0 -1
- package/dist/typography-XkeTnrP9.js +0 -29
- package/dist/typography-XkeTnrP9.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"area.component-CdFovqHE.js","sources":["../src/area/area.service.ts","../src/area/router.types.ts","../src/area/area.component.ts"],"sourcesContent":["import { \n\tObservable, \n\tReplaySubject, \n\tSubject, \n\tbufferTime, \n\tfilter, \n\tfromEvent, \n\tmap, \n\tof, \n\tskip, \n\ttap, \n\ttimeout, \n\tzip,\n\tshareReplay,\n\tdistinctUntilChanged,\n\tcatchError,\n\tEMPTY\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\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\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\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 and params 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})\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\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\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// Ensure state and params 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}\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\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\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\t\t\n\t\tconst newState = { ...this.state }\n\t\tdelete newState[name]\n\t\t\n\t\t// Update the URL\n\t\tconst encoded = encodeURIComponent(JSON.stringify(newState))\n\t\thistory.replaceState(null, '', `/${encoded}${location.search}`)\n\t\t\n\t\t// Remove from current map\n\t\tthis.current.delete(name)\n\t\tthis.$current.next(this.current)\n\t\t\n\t\t// Complete the area subject\n\t\tconst areaSubject = this.areaSubjects.get(name)\n\t\tif (areaSubject) {\n\t\t\tareaSubject.complete()\n\t\t\tthis.areaSubjects.delete(name)\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\t\t\n\t\t// Clear current state\n\t\tthis.current.clear()\n\t\tthis.$current.next(this.current)\n\t\t\n\t\t// Update URL\n\t\thistory.replaceState(null, '', `/${location.search}`)\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\t\t\n\t\tthis.disposed = true\n\t\t\n\t\t// Complete all subjects\n\t\tthis.areaSubjects.forEach(subject => subject.complete())\n\t\tthis.areaSubjects.clear()\n\t\t\n\t\tthis.request.complete()\n\t\tthis.$current.complete()\n\t\trouterHistory.complete()\n\t\t\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\n\t */\n\tget state(): Record<string, unknown> {\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 * 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\n\n// Cleanup on page unload\nif (typeof window !== 'undefined') {\n\twindow.addEventListener('unload', () => {\n\t\tarea.dispose()\n\t})\n}","export type RouteAction = {\n\tcomponent: CustomElementConstructor | string | HTMLElement\n\tarea: string\n\tstate?: Record<string, unknown>\n\tparams?: Record<string, unknown>\n\thistoryStrategy?: THistoryStrategy\n\tclearQueryParams?: string[] | null\n}\n\nexport type ActiveRoute = {\n\tcomponent: string\n\tarea: string\n\tstate?: Record<string, unknown>\n\tparams?: 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}\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","import { $LitElement } from '@mixins/index'\nimport { TemplateResult, css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport {\n\tEMPTY,\n\tbufferTime,\n\tcatchError,\n\tdistinctUntilChanged,\n\tfilter,\n\tfrom,\n\tfromEvent,\n\tmap,\n\tmerge,\n\tof,\n\tswitchMap,\n\ttake,\n\ttakeUntil,\n\ttap,\n\ttimeout,\n} from 'rxjs'\nimport { isPresent } from 'ts-is-present'\nimport area from './area.service'\nimport { HISTORY_STRATEGY, RouteAction } from './router.types'\n\ntype TRouteArea = {\n\tcomponent: string\n\tstate: object | undefined\n}\n\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!: string | CustomElementConstructor | TemplateResult<1>\n\n\t/**\n\t *\n\t * @param pathname pathname from the browser location API\n\t * @param historyStrategy the history strategy to use for the route like PUSH, REPLACE, or SILENT\n\t * @returns rxjs pipes that will return the component to render and the history strategy to use\n\t */\n\tgetComponentFromPathname(pathname: string, historyStrategy: HISTORY_STRATEGY) {\n\t\treturn of(pathname).pipe(\n\t\t\tmap(path => path.split('/').pop() ?? ''),\n\t\t\tmap(path => {\n\t\t\t\ttry {\n\t\t\t\t\treturn JSON.parse(decodeURIComponent(path))\n\t\t\t\t} catch {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t}),\n\t\t\tmap(routes => routes[this.name] as TRouteArea),\n\t\t\tmap(component =>\n\t\t\t\t!component && this.default\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tcomponent: this.default,\n\t\t\t\t\t\t\tstate: undefined,\n\t\t\t\t\t\t}\n\t\t\t\t\t: component,\n\t\t\t),\n\t\t\tfilter(x => isPresent(x)),\n\t\t\tmap((component: TRouteArea) => ({\n\t\t\t\tarea: this.name,\n\t\t\t\tcomponent: component.component ?? this.default,\n\t\t\t\tstate: component.state,\n\t\t\t\thistoryStrategy,\n\t\t\t})),\n\t\t\tmap(x => x as RouteAction),\n\t\t\tcatchError(() => {\n\t\t\t\treturn this.default\n\t\t\t\t\t? of({\n\t\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t\t\tcomponent: this.default,\n\t\t\t\t\t\t\thistoryStrategy,\n\t\t\t\t\t\t} as RouteAction)\n\t\t\t\t\t: EMPTY\n\t\t\t}),\n\t\t)\n\t}\n\n\tprotected firstUpdated(): void {\n\t\tif (!this.name) {\n\t\t\tthrow new Error('Area name or default component not set')\n\t\t}\n\n\t\t// active outlet changes\n\t\tmerge(\n\t\t\t// 1) initial load from location.pathname\n\t\t\tof(location.pathname).pipe(\n\t\t\t\tswitchMap(pathname => this.getComponentFromPathname(pathname, HISTORY_STRATEGY.silent)),\n\t\t\t\tmap(route => route as RouteAction),\n\t\t\t\ttake(1),\n\t\t\t),\n\t\t\t// 2) requests to change the route for this area\n\t\t\tarea.request.pipe(filter(({ area }) => area === this.name)),\n\t\t\t// 3) popstate events (back, forward)\n\t\t\tfromEvent<PopStateEvent>(window, 'popstate').pipe(\n\t\t\t\tmap(e => (e.target as Window).location.pathname),\n\t\t\t\tswitchMap(pathname => this.getComponentFromPathname(pathname, HISTORY_STRATEGY.silent)),\n\t\t\t\tmap(route => route as RouteAction),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(\n\t\t\t\tfilter(request => !!request.component),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\tdistinctUntilChanged((a, b) => {\n\t\t\t\t\tlet aComponent, bComponent\n\t\t\t\t\tif (typeof a.component === 'function') return false\n\t\t\t\t\telse if (typeof a.component === 'string') aComponent = a.component\n\n\t\t\t\t\tif (typeof b.component === 'function') return false\n\t\t\t\t\telse if (typeof b.component === 'string') bComponent = b.component\n\n\t\t\t\t\tconst sameComponent = bComponent?.replaceAll('-', '').toLowerCase() === aComponent?.replaceAll('-', '').toLowerCase()\n\t\t\t\t\tconst sameParams = JSON.stringify(a.params || {}) === JSON.stringify(b.params || {})\n\t\t\t\t\t\n\t\t\t\t\treturn sameComponent && sameParams\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.pipe(\n\t\t\t\tswitchMap(route => {\n\t\t\t\t\tconst c = route.component\n\t\t\t\t\tif (c instanceof Promise) {\n\t\t\t\t\t\t// Dynamic import module\n\t\t\t\t\t\treturn from(c).pipe(\n\t\t\t\t\t\t\tmap((x: any) => ({ component: (x.exports?.default || x.default) as CustomElementConstructor, route })),\n\t\t\t\t\t\t\tcatchError(() => EMPTY)\n\t\t\t\t\t\t)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Already a string, function, or element\n\t\t\t\t\t\treturn of({ component: c, route })\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tmap(({ component, route }) => {\n\t\t\t\t\tlet element: HTMLElement\n\t\t\t\t\t\n\t\t\t\t\tif (typeof component === 'string') {\n\t\t\t\t\t\t// Tag name\n\t\t\t\t\t\telement = document.createElement(component)\n\t\t\t\t\t} else if (component instanceof HTMLElement) {\n\t\t\t\t\t\t// Already an element instance\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\t// Custom element constructor\n\t\t\t\t\t\telement = new component()\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// @ts-ignore - we know component exists\n\t\t\t\t\t\telement = component\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// Set params as properties on the element\n\t\t\t\t\tif (route.params) {\n\t\t\t\t\t\tObject.entries(route.params).forEach(([key, value]) => {\n\t\t\t\t\t\t\t(element as any)[key] = value\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// Set state as well if provided\n\t\t\t\t\tif (route.state) {\n\t\t\t\t\t\t(element as any).state = route.state\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn { component: element, route }\n\t\t\t\t}),\n\t\t\t\t// create the new view and add it to the DOM\n\t\t\t\tmap(({ component, route }) => {\n\t\t\t\t\tconst oldView = this.shadowRoot?.children[0]\n\t\t\t\t\tconst oldViewExists = !!oldView\n\n\t\t\t\t\t// Remove the old view (if any)\n\t\t\t\t\toldView?.remove()\n\t\t\t\t\t// Native Web Animations API - fade in\n\t\t\t\t\t// \"ease: cubic-bezier(0.25, 0.8, 0.25, 1)\" was used in the old code\n\t\t\t\t\tcomponent.classList.add('opacity-0')\n\t\t\t\t\tthis.shadowRoot?.append(component)\n\t\t\t\t\tcomponent.animate([{ opacity: 0 }, { opacity: 1 }], {\n\t\t\t\t\t\tduration: oldViewExists ? 150 : 100,\n\t\t\t\t\t\teasing: 'cubic-bezier(0.25, 0.8, 0.25, 1)',\n\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t})\n\n\t\t\t\t\t// Insert the new view\n\n\t\t\t\t\treturn { component, route }\n\t\t\t\t}),\n\t\t\t\ttap(({ component, route }) => {\n\t\t\t\t\t// Handle history updates\n\t\t\t\t\tif (typeof route.historyStrategy === 'undefined' || route.historyStrategy === 'push') {\n\t\t\t\t\t\thistory.pushState(route.state, '', this.newPath(component.tagName, route))\n\t\t\t\t\t} else if (route.historyStrategy && ['replace', 'pop'].includes(route.historyStrategy)) {\n\t\t\t\t\t\thistory.replaceState(route.state, '', this.newPath(component.tagName, route))\n\t\t\t\t\t}\n\t\t\t\t\tarea.current.set(this.name, {\n\t\t\t\t\t\tcomponent: component.tagName,\n\t\t\t\t\t\tstate: route.state || {},\n\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t\tparams: route.params || {},\n\t\t\t\t\t})\n\n\t\t\t\t\tarea.$current.next(area.current)\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\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\tqueryParamClear(params?: string[]) {\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\t\t// remove query params\n\t\tparams.forEach(param => urlParams.delete(param))\n\t\t// update url\n\t\tif (urlParams.toString() === '') return ''\n\t\treturn `?${urlParams.toString()}`\n\t}\n\n\tcheckForTeleportationRequests() {\n\t\treturn fromEvent<CustomEvent>(window, 'FLIP_REQUEST').pipe(\n\t\t\tmap(e => e.detail),\n\t\t\tbufferTime(0),\n\t\t\ttap(() => {\n\t\t\t\tthis.dispatchEvent(new CustomEvent('FLIP_STARTED'))\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting),\n\t\t\ttimeout(0),\n\t\t\tcatchError(() => of(null)),\n\t\t)\n\t}\n\n\tdisconnectedCallback(): void {\n\t\tsuper.disconnectedCallback()\n\t\tthis.disconnecting.next(true)\n\t\tthis.disconnecting.complete()\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}"],"names":["routerHistory","Subject","FINDING_MORTIES","HERE_RICKY","areaSubjectsCache","WeakMap","AreaService","this","prettyURL","mode","request","ReplaySubject","current","Map","$current","enableHistoryMode","findingMortiesEvent","CustomEvent","disposed","next","subscribe","currentAreas","forEach","route","areaName","getOrCreateAreaSubject","subjects","get","set","subject","areaSubjects","closed","currentRoute","state","params","skipCurrent","Error","observable","asObservable","pipe","distinctUntilChanged","a","b","component","JSON","stringify","shareReplay","skip","on","map","filter","catchError","err","EMPTY","key","value","zip","fromEvent","window","e","detail","bufferTime","of","tap","dispatchEvent","timeout","r","area","routeAction","dispatchAreaEvent","event","historyStrategy","bubbles","composed","name","newState","encoded","encodeURIComponent","history","replaceState","location","search","delete","areaSubject","complete","clear","dispose","instance","pathname","split","pop","decoded","decodeURIComponent","parsed","parse","has","getActiveAreas","Array","from","keys","getInstance","addEventListener","HISTORY_STRATEGY","SchmancyArea","$LitElement","css","path","routes","default","x","isPresent","firstUpdated","merge","switchMap","getComponentFromPathname","silent","take","target","takeUntil","disconnecting","aComponent","bComponent","sameComponent","replaceAll","toLowerCase","sameParams","c","Promise","exports","element","document","createElement","HTMLElement","Object","entries","oldView","shadowRoot","children","oldViewExists","remove","classList","add","append","animate","opacity","duration","easing","fill","pushState","newPath","tagName","includes","tag","oldPathname","oldAreaState","queryParams","clearQueryParams","queryParamClear","concat","urlParams","URLSearchParams","param","toString","super","disconnectedCallback","render","html","__decorateClass","property","prototype","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"area.component-zvrF1R-P.js","sources":["../src/area/area.service.ts","../src/area/router.types.ts","../src/area/area.component.ts"],"sourcesContent":["import { \n\tObservable, \n\tReplaySubject, \n\tSubject, \n\tbufferTime, \n\tfilter, \n\tfromEvent, \n\tmap, \n\tof, \n\tskip, \n\ttap, \n\ttimeout, \n\tzip,\n\tshareReplay,\n\tdistinctUntilChanged,\n\tcatchError,\n\tEMPTY\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\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\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\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 and params 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})\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\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\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// Ensure state and params 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}\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\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\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\t\t\n\t\tconst newState = { ...this.state }\n\t\tdelete newState[name]\n\t\t\n\t\t// Update the URL\n\t\tconst encoded = encodeURIComponent(JSON.stringify(newState))\n\t\thistory.replaceState(null, '', `/${encoded}${location.search}`)\n\t\t\n\t\t// Remove from current map\n\t\tthis.current.delete(name)\n\t\tthis.$current.next(this.current)\n\t\t\n\t\t// Complete the area subject\n\t\tconst areaSubject = this.areaSubjects.get(name)\n\t\tif (areaSubject) {\n\t\t\tareaSubject.complete()\n\t\t\tthis.areaSubjects.delete(name)\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\t\t\n\t\t// Clear current state\n\t\tthis.current.clear()\n\t\tthis.$current.next(this.current)\n\t\t\n\t\t// Update URL\n\t\thistory.replaceState(null, '', `/${location.search}`)\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\t\t\n\t\tthis.disposed = true\n\t\t\n\t\t// Complete all subjects\n\t\tthis.areaSubjects.forEach(subject => subject.complete())\n\t\tthis.areaSubjects.clear()\n\t\t\n\t\tthis.request.complete()\n\t\tthis.$current.complete()\n\t\trouterHistory.complete()\n\t\t\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\n\t */\n\tget state(): Record<string, unknown> {\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 * 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\n\n// Cleanup on page unload\nif (typeof window !== 'undefined') {\n\twindow.addEventListener('unload', () => {\n\t\tarea.dispose()\n\t})\n}","export type RouteAction = {\n\tcomponent: CustomElementConstructor | string | HTMLElement\n\tarea: string\n\tstate?: Record<string, unknown>\n\tparams?: Record<string, unknown>\n\thistoryStrategy?: THistoryStrategy\n\tclearQueryParams?: string[] | null\n}\n\nexport type ActiveRoute = {\n\tcomponent: string\n\tarea: string\n\tstate?: Record<string, unknown>\n\tparams?: 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}\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","import { $LitElement } from '@mixins/index'\nimport { TemplateResult, css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport {\n\tEMPTY,\n\tbufferTime,\n\tcatchError,\n\tdistinctUntilChanged,\n\tfilter,\n\tfrom,\n\tfromEvent,\n\tmap,\n\tmerge,\n\tof,\n\tswitchMap,\n\ttake,\n\ttakeUntil,\n\ttap,\n\ttimeout,\n} from 'rxjs'\nimport { isPresent } from 'ts-is-present'\nimport area from './area.service'\nimport { HISTORY_STRATEGY, RouteAction } from './router.types'\n\ntype TRouteArea = {\n\tcomponent: string\n\tstate: object | undefined\n}\n\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!: string | CustomElementConstructor | TemplateResult<1>\n\n\t/**\n\t *\n\t * @param pathname pathname from the browser location API\n\t * @param historyStrategy the history strategy to use for the route like PUSH, REPLACE, or SILENT\n\t * @returns rxjs pipes that will return the component to render and the history strategy to use\n\t */\n\tgetComponentFromPathname(pathname: string, historyStrategy: HISTORY_STRATEGY) {\n\t\treturn of(pathname).pipe(\n\t\t\tmap(path => path.split('/').pop() ?? ''),\n\t\t\tmap(path => {\n\t\t\t\ttry {\n\t\t\t\t\treturn JSON.parse(decodeURIComponent(path))\n\t\t\t\t} catch {\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\t\t\t}),\n\t\t\tmap(routes => routes[this.name] as TRouteArea),\n\t\t\tmap(component =>\n\t\t\t\t!component && this.default\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tcomponent: this.default,\n\t\t\t\t\t\t\tstate: undefined,\n\t\t\t\t\t\t}\n\t\t\t\t\t: component,\n\t\t\t),\n\t\t\tfilter(x => isPresent(x)),\n\t\t\tmap((component: TRouteArea) => ({\n\t\t\t\tarea: this.name,\n\t\t\t\tcomponent: component.component ?? this.default,\n\t\t\t\tstate: component.state,\n\t\t\t\thistoryStrategy,\n\t\t\t})),\n\t\t\tmap(x => x as RouteAction),\n\t\t\tcatchError(() => {\n\t\t\t\treturn this.default\n\t\t\t\t\t? of({\n\t\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t\t\tcomponent: this.default,\n\t\t\t\t\t\t\thistoryStrategy,\n\t\t\t\t\t\t} as RouteAction)\n\t\t\t\t\t: EMPTY\n\t\t\t}),\n\t\t)\n\t}\n\n\tprotected firstUpdated(): void {\n\t\tif (!this.name) {\n\t\t\tthrow new Error('Area name or default component not set')\n\t\t}\n\n\t\t// active outlet changes\n\t\tmerge(\n\t\t\t// 1) initial load from location.pathname\n\t\t\tof(location.pathname).pipe(\n\t\t\t\tswitchMap(pathname => this.getComponentFromPathname(pathname, HISTORY_STRATEGY.silent)),\n\t\t\t\tmap(route => route as RouteAction),\n\t\t\t\ttake(1),\n\t\t\t),\n\t\t\t// 2) requests to change the route for this area\n\t\t\tarea.request.pipe(filter(({ area }) => area === this.name)),\n\t\t\t// 3) popstate events (back, forward)\n\t\t\tfromEvent<PopStateEvent>(window, 'popstate').pipe(\n\t\t\t\tmap(e => (e.target as Window).location.pathname),\n\t\t\t\tswitchMap(pathname => this.getComponentFromPathname(pathname, HISTORY_STRATEGY.silent)),\n\t\t\t\tmap(route => route as RouteAction),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(\n\t\t\t\tfilter(request => !!request.component),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\tdistinctUntilChanged((a, b) => {\n\t\t\t\t\tlet aComponent, bComponent\n\t\t\t\t\tif (typeof a.component === 'function') return false\n\t\t\t\t\telse if (typeof a.component === 'string') aComponent = a.component\n\n\t\t\t\t\tif (typeof b.component === 'function') return false\n\t\t\t\t\telse if (typeof b.component === 'string') bComponent = b.component\n\n\t\t\t\t\tconst sameComponent = bComponent?.replaceAll('-', '').toLowerCase() === aComponent?.replaceAll('-', '').toLowerCase()\n\t\t\t\t\tconst sameParams = JSON.stringify(a.params || {}) === JSON.stringify(b.params || {})\n\t\t\t\t\t\n\t\t\t\t\treturn sameComponent && sameParams\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.pipe(\n\t\t\t\tswitchMap(route => {\n\t\t\t\t\tconst c = route.component\n\t\t\t\t\tif (c instanceof Promise) {\n\t\t\t\t\t\t// Dynamic import module\n\t\t\t\t\t\treturn from(c).pipe(\n\t\t\t\t\t\t\tmap((x: any) => ({ component: (x.exports?.default || x.default) as CustomElementConstructor, route })),\n\t\t\t\t\t\t\tcatchError(() => EMPTY)\n\t\t\t\t\t\t)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Already a string, function, or element\n\t\t\t\t\t\treturn of({ component: c, route })\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tmap(({ component, route }) => {\n\t\t\t\t\tlet element: HTMLElement\n\t\t\t\t\t\n\t\t\t\t\tif (typeof component === 'string') {\n\t\t\t\t\t\t// Tag name\n\t\t\t\t\t\telement = document.createElement(component)\n\t\t\t\t\t} else if (component instanceof HTMLElement) {\n\t\t\t\t\t\t// Already an element instance\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\t// Custom element constructor\n\t\t\t\t\t\telement = new component()\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// @ts-ignore - we know component exists\n\t\t\t\t\t\telement = component\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// Set params as properties on the element\n\t\t\t\t\tif (route.params) {\n\t\t\t\t\t\tObject.entries(route.params).forEach(([key, value]) => {\n\t\t\t\t\t\t\t(element as any)[key] = value\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// Set state as well if provided\n\t\t\t\t\tif (route.state) {\n\t\t\t\t\t\t(element as any).state = route.state\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn { component: element, route }\n\t\t\t\t}),\n\t\t\t\t// create the new view and add it to the DOM\n\t\t\t\tmap(({ component, route }) => {\n\t\t\t\t\tconst oldView = this.shadowRoot?.children[0]\n\t\t\t\t\tconst oldViewExists = !!oldView\n\n\t\t\t\t\t// Remove the old view (if any)\n\t\t\t\t\toldView?.remove()\n\t\t\t\t\t// Native Web Animations API - fade in\n\t\t\t\t\t// \"ease: cubic-bezier(0.25, 0.8, 0.25, 1)\" was used in the old code\n\t\t\t\t\tcomponent.classList.add('opacity-0')\n\t\t\t\t\tthis.shadowRoot?.append(component)\n\t\t\t\t\tcomponent.animate([{ opacity: 0 }, { opacity: 1 }], {\n\t\t\t\t\t\tduration: oldViewExists ? 150 : 100,\n\t\t\t\t\t\teasing: 'cubic-bezier(0.25, 0.8, 0.25, 1)',\n\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t})\n\n\t\t\t\t\t// Insert the new view\n\n\t\t\t\t\treturn { component, route }\n\t\t\t\t}),\n\t\t\t\ttap(({ component, route }) => {\n\t\t\t\t\t// Handle history updates\n\t\t\t\t\tif (typeof route.historyStrategy === 'undefined' || route.historyStrategy === 'push') {\n\t\t\t\t\t\thistory.pushState(route.state, '', this.newPath(component.tagName, route))\n\t\t\t\t\t} else if (route.historyStrategy && ['replace', 'pop'].includes(route.historyStrategy)) {\n\t\t\t\t\t\thistory.replaceState(route.state, '', this.newPath(component.tagName, route))\n\t\t\t\t\t}\n\t\t\t\t\tarea.current.set(this.name, {\n\t\t\t\t\t\tcomponent: component.tagName,\n\t\t\t\t\t\tstate: route.state || {},\n\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t\tparams: route.params || {},\n\t\t\t\t\t})\n\n\t\t\t\t\tarea.$current.next(area.current)\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\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\tqueryParamClear(params?: string[]) {\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\t\t// remove query params\n\t\tparams.forEach(param => urlParams.delete(param))\n\t\t// update url\n\t\tif (urlParams.toString() === '') return ''\n\t\treturn `?${urlParams.toString()}`\n\t}\n\n\tcheckForTeleportationRequests() {\n\t\treturn fromEvent<CustomEvent>(window, 'FLIP_REQUEST').pipe(\n\t\t\tmap(e => e.detail),\n\t\t\tbufferTime(0),\n\t\t\ttap(() => {\n\t\t\t\tthis.dispatchEvent(new CustomEvent('FLIP_STARTED'))\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting),\n\t\t\ttimeout(0),\n\t\t\tcatchError(() => of(null)),\n\t\t)\n\t}\n\n\tdisconnectedCallback(): void {\n\t\tsuper.disconnectedCallback()\n\t\tthis.disconnecting.next(true)\n\t\tthis.disconnecting.complete()\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}"],"names":["routerHistory","Subject","FINDING_MORTIES","HERE_RICKY","areaSubjectsCache","WeakMap","AreaService","this","prettyURL","mode","request","ReplaySubject","current","Map","$current","enableHistoryMode","findingMortiesEvent","CustomEvent","disposed","next","subscribe","currentAreas","forEach","route","areaName","getOrCreateAreaSubject","subjects","get","set","subject","areaSubjects","closed","currentRoute","state","params","skipCurrent","Error","observable","asObservable","pipe","distinctUntilChanged","a","b","component","JSON","stringify","shareReplay","skip","on","map","filter","catchError","err","EMPTY","key","value","zip","fromEvent","window","e","detail","bufferTime","of","tap","dispatchEvent","timeout","r","area","routeAction","dispatchAreaEvent","event","historyStrategy","bubbles","composed","name","newState","encoded","encodeURIComponent","history","replaceState","location","search","delete","areaSubject","complete","clear","dispose","instance","pathname","split","pop","decoded","decodeURIComponent","parsed","parse","has","getActiveAreas","Array","from","keys","getInstance","addEventListener","HISTORY_STRATEGY","SchmancyArea","$LitElement","css","path","routes","default","x","isPresent","firstUpdated","merge","switchMap","getComponentFromPathname","silent","take","target","takeUntil","disconnecting","aComponent","bComponent","sameComponent","replaceAll","toLowerCase","sameParams","c","Promise","exports","element","document","createElement","HTMLElement","Object","entries","oldView","shadowRoot","children","oldViewExists","remove","classList","add","append","animate","opacity","duration","easing","fill","pushState","newPath","tagName","includes","tag","oldPathname","oldAreaState","queryParams","clearQueryParams","queryParamClear","concat","urlParams","URLSearchParams","param","toString","super","disconnectedCallback","render","html","__decorateClass","property","prototype","customElement"],"mappings":"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"}
|
package/dist/area.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { F as s, H as t, b as o, S as r, a as c, r as u } from "./area.component-
|
|
1
|
+
import { F as s, H as t, b as o, S as r, a as c, r as u } from "./area.component-zvrF1R-P.js";
|
|
2
2
|
import { l as R, h as i, c as n, f as S, j as d, a as g, b as p, d as T, e as b, k as y, g as E, i as I, n as l, s as A } from "./utils-jduntaQU.js";
|
|
3
3
|
export {
|
|
4
4
|
s as FINDING_MORTIES,
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";const u=require("rxjs"),E=require("lit/directives/class-map.js");require("lit/directives/style-map.js");const C=require("./litElement.mixin-CB6DWbFn.cjs");require("./tailwind.mixin-mxyACxyp.cjs");const V=require("lit"),d=require("lit/decorators.js"),w=require("lit/directives/ref.js"),e=require("rxjs/operators");function k(t,i){if(!t||!i)return 0;if(t===i)return 1;const s=t.toLowerCase().trim(),n=i.toLowerCase().trim();if(s===n)return 1;if(n.startsWith(s))return .95+.05*(s.length/n.length);const l=n.split(/[\s\-_]+/);for(const p of l)if(p.startsWith(s))return .85*(1-l.indexOf(p)/l.length*.1);if(n.includes(s))return .7*(1-n.indexOf(s)/n.length*.2);if(function(p,m){let r=0,o=0;for(;r<p.length&&o<m.length;)p[r]===m[o]&&r++,o++;return r===p.length}(s,n))return .5;const a=function(p,m){if(p.length<2||m.length<2)return 0;const r=S(p),o=S(m);let v=0;const y=new Array(o.length).fill(!1);for(const x of r)for(let g=0;g<o.length;g++)if(!y[g]&&o[g]===x){v++,y[g]=!0;break}return 2*v/(r.length+o.length)}(s,n),h=Math.max(s.length,n.length),f=function(p,m){if(p.length===0)return m.length;if(m.length===0)return p.length;const r=[];for(let o=0;o<=m.length;o++)r[o]=[o];for(let o=0;o<=p.length;o++)r[0][o]=o;for(let o=1;o<=m.length;o++)for(let v=1;v<=p.length;v++){const y=p[v-1]===m[o-1]?0:1;r[o][v]=Math.min(r[o-1][v]+1,r[o][v-1]+1,r[o-1][v-1]+y)}return r[m.length][p.length]}(s,n),b=h?1-f/h:0,$=function(p,m){const r=y=>y.split("").reduce((x,g)=>(x[g]=(x[g]||0)+1,x),{}),o=r(p),v=r(m);return Object.keys(o).every(y=>(v[y]||0)>=o[y])}(s,n)?.3:0;return Math.max(.4*a,.4*b,$)}function S(t){const i=[];for(let s=0;s<t.length-1;s++)i.push(t.substring(s,s+2));return i}var R=Object.defineProperty,A=Object.getOwnPropertyDescriptor,_=(t,i,s,n)=>{for(var l,a=n>1?void 0:n?A(i,s):i,h=t.length-1;h>=0;h--)(l=t[h])&&(a=(n?l(i,s,a):l(a))||a);return n&&a&&R(i,s,a),a};let c=class extends C.$LitElement(":host{display:block;border:unset!important;line-height:unset!important;background:unset!important;padding:unset!important;font-size:unset!important;box-shadow:unset!important}:host:focus{box-shadow:unset!important}"){constructor(){super(...arguments),this.required=!1,this.placeholder="",this.label="",this.name="",this.maxHeight="300px",this.multi=!1,this.description="",this.size="md",this.autocomplete="on",this.debounceMs=200,this.similarityThreshold=.3,this._open=!1,this._inputValue="",this._visibleOptionsCount=0,this._hasResults=!0,this._inputElementRef=w.createRef(),this._selectedValue$=new u.BehaviorSubject(""),this._selectedValues$=new u.BehaviorSubject([]),this._inputValue$=new u.BehaviorSubject(""),this._open$=new u.BehaviorSubject(!1),this._options$=new u.BehaviorSubject([]),this._optionSelect$=new u.Subject,this._documentClick$=new u.Subject,this._checkAutofill$=new u.Subject}get values(){return[...this._selectedValues$.value]}set values(t){this._selectedValues$.next(Array.isArray(t)?[...t]:[])}get value(){return this.multi?this._selectedValues$.value.join(","):this._selectedValue$.value}set value(t){this.multi?this._selectedValues$.next(t?t.split(",").map(i=>i.trim()).filter(Boolean):[]):this._selectedValue$.next(t)}connectedCallback(){super.connectedCallback(),this.id||(this.id=`sch-autocomplete-${Math.random().toString(36).slice(2,9)}`),this._setupAutocompleteLogic(),this._setupDocumentClickHandler(),this._setupAutofillDetection()}_setupAutocompleteLogic(){this._options$.pipe(e.tap(t=>{t.forEach((i,s)=>{i.setAttribute("role","option"),i.tabIndex=-1,i.id||(i.id=`${this.id}-option-${s}`),i.hasAttribute("data-event-bound")||(u.fromEvent(i,"click").pipe(e.tap(n=>n.stopPropagation()),e.takeUntil(this.disconnecting)).subscribe(()=>this._optionSelect$.next(i)),i.setAttribute("data-event-bound","true"))})}),e.takeUntil(this.disconnecting)).subscribe(),u.combineLatest([this._selectedValue$,this._selectedValues$,this._options$]).pipe(e.tap(([t,i,s])=>{s.forEach(n=>{n.selected=this.multi?i.includes(n.value):n.value===t,n.setAttribute("aria-selected",String(n.selected))})}),e.takeUntil(this.disconnecting)).subscribe(),this._inputValue$.pipe(e.distinctUntilChanged(),e.debounceTime(this.debounceMs),e.withLatestFrom(this._options$,this._open$),e.tap(([t,i,s])=>{if(!s)return;const n=t.trim();if(n){const l=i.map(h=>{const f=h.label||h.textContent||"",b=h.value,$=k(n,f),p=k(n,b);return{option:h,score:Math.max(1.1*$,p)}});l.sort((h,f)=>f.score-h.score);let a=0;l.forEach((h,f)=>{const{option:b,score:$}=h;$<this.similarityThreshold?b.hidden=!0:(b.hidden=!1,a++,b.style.order=String(f))}),this._visibleOptionsCount=a,this._hasResults=a>0}else i.forEach(l=>{l.hidden=!1,l.style.order="0"}),this._visibleOptionsCount=i.length,this._hasResults=!0;this._announceToScreenReader(this._visibleOptionsCount>0?`${this._visibleOptionsCount} option${this._visibleOptionsCount===1?"":"s"} available.`:"No results found.")}),e.takeUntil(this.disconnecting)).subscribe(),this._optionSelect$.pipe(e.withLatestFrom(this._selectedValue$,this._selectedValues$),e.tap(([t,i,s])=>{if(this.multi){const n=s.indexOf(t.value),l=n>-1?[...s.slice(0,n),...s.slice(n+1)]:[...s,t.value];this._selectedValues$.next(l),this._inputValue$.next(""),this._inputValue="";const a=this._getSelectedLabels();this._announceToScreenReader(a.length>0?`Selected: ${a.join(", ")}`:"No options selected")}else this._selectedValue$.next(t.value),this._open$.next(!1),this._open=!1,this._inputValue=t.label||t.textContent||"",this._inputValue$.next(this._inputValue),u.timer(100).pipe(e.tap(()=>{var n;return(n=this._inputElementRef.value)==null?void 0:n.blur()}),e.take(1)).subscribe(),this._announceToScreenReader(`Selected: ${t.label||t.textContent}`)}),e.tap(()=>this._fireChangeEvent()),e.takeUntil(this.disconnecting)).subscribe(),u.combineLatest([this._open$,this._selectedValue$,this._selectedValues$,this._options$]).pipe(e.filter(()=>!this._open$.value),e.tap(([,t,i,s])=>{if(this.multi){const n=s.filter(l=>i.includes(l.value)).map(l=>l.label||l.textContent||"");this._inputValue=n.join(", ")}else{const n=s.find(l=>l.value===t);this._inputValue=n&&(n.label||n.textContent)||""}this._inputValue$.next(this._inputValue)}),e.takeUntil(this.disconnecting)).subscribe(),this._open$.pipe(e.tap(t=>this._open=t),e.takeUntil(this.disconnecting)).subscribe()}_setupDocumentClickHandler(){this._documentClick$.pipe(e.filter(t=>!t.composedPath().includes(this)),e.filter(t=>!this._options.some(i=>t.composedPath().includes(i))),e.filter(()=>this._open),e.tap(()=>{this._open$.next(!1),this._updateInputDisplay()}),e.takeUntil(this.disconnecting)).subscribe(),this._open$.pipe(e.distinctUntilChanged(),e.switchMap(t=>t?u.timer(10).pipe(e.tap(()=>document.addEventListener("click",i=>this._documentClick$.next(i))),e.switchMap(()=>u.EMPTY)):u.of(null).pipe(e.tap(()=>document.removeEventListener("click",i=>this._documentClick$.next(i))))),e.takeUntil(this.disconnecting)).subscribe()}_setupAutofillDetection(){u.merge(u.timer(100,500).pipe(e.take(10)),this._checkAutofill$,u.timer(100).pipe(e.switchMap(()=>u.fromEvent(window,"load").pipe(e.startWith(null))))).pipe(e.map(()=>{var i,s;const t=this._inputElementRef.value;return t?((i=t.shadowRoot)==null?void 0:i.querySelector("input"))||t.querySelector("input")||((s=t._inputRef)==null?void 0:s.value):null}),e.filter(t=>!!t),e.map(t=>t.value),e.filter(t=>!!t&&t.trim().length>0),e.distinctUntilChanged(),e.withLatestFrom(this._options$),e.tap(([t,i])=>{let s=null,n=0;if(i.forEach(l=>{const a=l.label||l.textContent||"",h=l.value,f=k(t,a),b=k(t,h),$=Math.max(f,b);$>n&&$>=this.similarityThreshold&&(n=$,s=l)}),s){this.multi?this._selectedValues$.next([s.value]):this._selectedValue$.next(s.value);const l=s.label||s.textContent||"";this._inputValue=l,this._inputValue$.next(l);const a=this._inputElementRef.value;a&&(a.value=l),this._open$.next(!1),this._fireChangeEvent(),this._announceToScreenReader(`Autofilled: ${l}`)}}),e.takeUntil(this.disconnecting)).subscribe(),u.timer(100).pipe(e.map(()=>{var i,s;const t=this._inputElementRef.value;return t?((i=t.shadowRoot)==null?void 0:i.querySelector("input"))||t.querySelector("input")||((s=t._inputRef)==null?void 0:s.value):null}),e.filter(t=>!!t),e.switchMap(t=>u.fromEvent(t,"animationstart").pipe(e.filter(i=>i.animationName==="onAutoFillStart"),e.tap(()=>{u.timer(100).pipe(e.tap(()=>this._checkAutofill$.next()),e.take(1)).subscribe()}))),e.takeUntil(this.disconnecting)).subscribe()}_updateInputDisplay(){u.of(null).pipe(e.withLatestFrom(this._selectedValue$,this._selectedValues$,this._options$,this._open$),e.tap(([,t,i,s,n])=>{if(this._inputElementRef.value&&(!n||!this.multi)){if(this.multi){const l=s.filter(a=>i.includes(a.value)).map(a=>a.label||a.textContent||"");this._inputValue=l.join(", ")}else{const l=s.find(a=>a.value===t);this._inputValue=l&&(l.label||l.textContent)||""}this._inputValue$.next(this._inputValue),this._inputElementRef.value.value=this._inputValue}}),e.take(1)).subscribe()}_getSelectedLabels(){return this._options.filter(t=>this.multi?this._selectedValues$.value.includes(t.value):t.value===this._selectedValue$.value).map(t=>t.label||t.textContent||"")}_announceToScreenReader(t){var s;const i=(s=this.shadowRoot)==null?void 0:s.querySelector("#live-status");i&&(i.textContent=t)}_fireChangeEvent(){const t={value:this.value};this.multi&&(t.values=[...this._selectedValues$.value]),this.dispatchEvent(new CustomEvent("change",{detail:t,bubbles:!0,composed:!0}))}checkValidity(){return!this.required||(this.multi?this._selectedValues$.value.length>0:!!this._selectedValue$.value)}reportValidity(){return this._inputElementRef.value?this._inputElementRef.value.reportValidity():this.checkValidity()}firstUpdated(){u.timer(200).pipe(e.tap(()=>this._checkAutofill$.next()),e.take(1)).subscribe(),this._options$.pipe(e.filter(t=>t.length>0),e.tap(()=>this._checkAutofill$.next()),e.takeUntil(this.disconnecting)).subscribe()}render(){var i;const t=`${this.id}-desc`;return V.html`
|
|
2
|
+
<div class="relative">
|
|
3
|
+
<!-- Screen reader live region -->
|
|
4
|
+
<div id="live-status" role="status" aria-live="polite" class="sr-only"></div>
|
|
5
|
+
|
|
6
|
+
<!-- Description -->
|
|
7
|
+
${this.description?V.html`<div id="${t}" class="sr-only">${this.description}</div>`:""}
|
|
8
|
+
|
|
9
|
+
<!-- Input -->
|
|
10
|
+
<slot name="trigger">
|
|
11
|
+
<sch-input
|
|
12
|
+
.size=${this.size}
|
|
13
|
+
${w.ref(this._inputElementRef)}
|
|
14
|
+
id="autocomplete-input"
|
|
15
|
+
class="w-full"
|
|
16
|
+
.name=${this.name||((i=this.label)==null?void 0:i.toLowerCase().replace(/\s+/g,"-"))}
|
|
17
|
+
.label=${this.label}
|
|
18
|
+
.placeholder=${this.placeholder}
|
|
19
|
+
.required=${this.required}
|
|
20
|
+
.value=${this._inputValue}
|
|
21
|
+
type="text"
|
|
22
|
+
autocomplete=${this.autocomplete}
|
|
23
|
+
clickable
|
|
24
|
+
role="combobox"
|
|
25
|
+
aria-autocomplete="list"
|
|
26
|
+
aria-haspopup="listbox"
|
|
27
|
+
aria-controls="options"
|
|
28
|
+
aria-expanded=${this._open}
|
|
29
|
+
aria-describedby=${this.description?t:void 0}
|
|
30
|
+
@input=${s=>{const n=s.target.value;this._inputValue=n,this._inputValue$.next(n)}}
|
|
31
|
+
@focus=${s=>{s.stopPropagation();const n=this.multi?this._selectedValues$.value.length>0:!!this._selectedValue$.value;this.multi&&!n&&(this._inputValue="",this._inputValue$.next(""),this._inputElementRef.value&&(this._inputElementRef.value.value="")),this._open$.next(!0)}}
|
|
32
|
+
@click=${s=>{s.stopPropagation(),this._open$.next(!0)}}
|
|
33
|
+
@keydown=${s=>{this._handleKeyDown(s)}}
|
|
34
|
+
>
|
|
35
|
+
</sch-input>
|
|
36
|
+
</slot>
|
|
37
|
+
|
|
38
|
+
<!-- Options dropdown -->
|
|
39
|
+
<ul
|
|
40
|
+
id="options"
|
|
41
|
+
class=${E.classMap({absolute:!0,"z-[1000]":!0,"mt-1":!0,"w-full":!0,"rounded-md":!0,"shadow-md":!0,"overflow-auto":!0,"min-w-full":!0,"bg-surface-low":!0,flex:!0,"flex-col":!0})}
|
|
42
|
+
role="listbox"
|
|
43
|
+
aria-multiselectable=${this.multi?"true":"false"}
|
|
44
|
+
aria-label=${`${this.label||"Options"} dropdown`}
|
|
45
|
+
?hidden=${!this._open}
|
|
46
|
+
style="max-height: ${this.maxHeight}; display: ${this._open?"flex":"none"};"
|
|
47
|
+
@slotchange=${()=>{this._options$.next(this._options),u.timer(100).pipe(e.tap(()=>this._checkAutofill$.next()),e.take(1)).subscribe()}}
|
|
48
|
+
>
|
|
49
|
+
<slot></slot>
|
|
50
|
+
${this._hasResults?"":V.html`
|
|
51
|
+
<li class="px-3 py-2 text-sm text-muted">No results found</li>
|
|
52
|
+
`}
|
|
53
|
+
</ul>
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
<style>
|
|
57
|
+
:host {
|
|
58
|
+
display: block;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@keyframes onAutoFillStart {
|
|
62
|
+
from {/**/}
|
|
63
|
+
to {/**/}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
sch-input::part(input):-webkit-autofill,
|
|
67
|
+
sch-input input:-webkit-autofill {
|
|
68
|
+
animation-name: onAutoFillStart;
|
|
69
|
+
animation-duration: 1ms;
|
|
70
|
+
}
|
|
71
|
+
</style>
|
|
72
|
+
`}_handleKeyDown(t){u.fromEvent(document,"keydown").pipe(e.take(1),e.withLatestFrom(this._open$,this._options$),e.tap(([i,s,n])=>{var f,b,$,p,m;if(!s&&(i.key==="ArrowDown"||i.key==="Enter"))return i.preventDefault(),this._open$.next(!0),void u.timer(10).pipe(e.tap(()=>{const r=n.find(o=>!o.hidden);r==null||r.focus()}),e.take(1)).subscribe();if(!s)return;const l=n.filter(r=>!r.hidden).sort((r,o)=>parseInt(r.style.order||"0")-parseInt(o.style.order||"0")),a=l.find(r=>r===document.activeElement),h=a?l.indexOf(a):-1;switch(i.key){case"Escape":i.preventDefault(),this._open$.next(!1),this._updateInputDisplay(),(f=this._inputElementRef.value)==null||f.focus();break;case"Tab":this._open$.next(!1),this._updateInputDisplay();break;case"ArrowDown":i.preventDefault();const r=h<l.length-1?h+1:0;(b=l[r])==null||b.focus();break;case"ArrowUp":i.preventDefault();const o=h>0?h-1:l.length-1;($=l[o])==null||$.focus();break;case"Home":i.preventDefault(),(p=l[0])==null||p.focus();break;case"End":i.preventDefault(),(m=l[l.length-1])==null||m.focus();break;case"Enter":case" ":a&&(i.preventDefault(),this._optionSelect$.next(a))}})).subscribe()}};_([d.property({type:Boolean})],c.prototype,"required",2),_([d.property({type:String})],c.prototype,"placeholder",2),_([d.property({type:String,reflect:!0})],c.prototype,"label",2),_([d.property({type:String})],c.prototype,"name",2),_([d.property({type:String})],c.prototype,"maxHeight",2),_([d.property({type:Boolean})],c.prototype,"multi",2),_([d.property({type:String})],c.prototype,"description",2),_([d.property({type:String,reflect:!0})],c.prototype,"size",2),_([d.property({type:String})],c.prototype,"autocomplete",2),_([d.property({type:Number})],c.prototype,"debounceMs",2),_([d.property({type:Number})],c.prototype,"similarityThreshold",2),_([d.property({type:Array})],c.prototype,"values",1),_([d.property({type:String,reflect:!0})],c.prototype,"value",1),_([d.state()],c.prototype,"_open",2),_([d.state()],c.prototype,"_inputValue",2),_([d.state()],c.prototype,"_visibleOptionsCount",2),_([d.state()],c.prototype,"_hasResults",2),_([d.query("#options")],c.prototype,"_listbox",2),_([d.query("sch-input")],c.prototype,"_input",2),_([d.queryAssignedElements({flatten:!0})],c.prototype,"_options",2),c=_([d.customElement("schmancy-autocomplete")],c);
|
|
73
|
+
//# sourceMappingURL=autocomplete-BCE9oBkO.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autocomplete-BCE9oBkO.cjs","sources":["../src/utils/search.ts","../src/autocomplete/autocomplete.ts"],"sourcesContent":["/**\n * Calculate similarity score between two strings.\n * Returns a value between 0 (no match) and 1 (exact match).\n * Optimized for autocomplete with prioritization of start matches and whole words.\n *\n * @param query The search query string\n * @param target The target string to compare against\n * @returns A similarity score from 0 to 1\n */\nexport function similarity(query: string, target: string): number {\n\t// Handle edge cases\n\tif (!query || !target) return 0\n\tif (query === target) return 1\n\n\t// Normalize strings for comparison\n\tconst normalizedQuery = query.toLowerCase().trim()\n\tconst normalizedTarget = target.toLowerCase().trim()\n\n\t// 1. Exact match (case-insensitive)\n\tif (normalizedQuery === normalizedTarget) return 1\n\n\t// 2. Target starts with query (highest priority for autocomplete)\n\tif (normalizedTarget.startsWith(normalizedQuery)) {\n\t\t// Give higher score to shorter targets (more precise matches)\n\t\tconst lengthRatio = normalizedQuery.length / normalizedTarget.length\n\t\treturn 0.95 + (lengthRatio * 0.05) // Score between 0.95 and 1.0\n\t}\n\n\t// 3. Word boundary match (query matches start of any word in target)\n\tconst words = normalizedTarget.split(/[\\s\\-_]+/)\n\tfor (const word of words) {\n\t\tif (word.startsWith(normalizedQuery)) {\n\t\t\t// Score based on which word matched (earlier words score higher)\n\t\t\tconst wordIndex = words.indexOf(word)\n\t\t\tconst wordPositionScore = 1 - (wordIndex / words.length) * 0.1\n\t\t\treturn 0.85 * wordPositionScore // Score between 0.765 and 0.85\n\t\t}\n\t}\n\n\t// 4. Direct substring match (query appears anywhere in target)\n\tif (normalizedTarget.includes(normalizedQuery)) {\n\t\t// Score based on position (earlier position scores higher)\n\t\tconst position = normalizedTarget.indexOf(normalizedQuery)\n\t\tconst positionScore = 1 - (position / normalizedTarget.length) * 0.2\n\t\treturn 0.7 * positionScore // Score between 0.56 and 0.7\n\t}\n\n\t// 5. Subsequence check (all query chars appear in order)\n\tif (isSubsequence(normalizedQuery, normalizedTarget)) {\n\t\treturn 0.5\n\t}\n\n\t// 6. Fuzzy matching for typos\n\t// 6a. Dice coefficient (good for similar words)\n\tconst diceScore = diceCoefficient(normalizedQuery, normalizedTarget)\n\t\n\t// 6b. Levenshtein distance (good for typos)\n\tconst maxLength = Math.max(normalizedQuery.length, normalizedTarget.length)\n\tconst levenshteinDistance = calculateLevenshtein(normalizedQuery, normalizedTarget)\n\tconst levenshteinScore = maxLength ? 1 - levenshteinDistance / maxLength : 0\n\n\t// 6c. Character frequency match (anagram-like)\n\tconst anagramScore = hasAllCharacters(normalizedQuery, normalizedTarget) ? 0.3 : 0\n\n\t// Combine fuzzy scores with weights\n\tconst fuzzyScore = Math.max(\n\t\tdiceScore * 0.4,\n\t\tlevenshteinScore * 0.4,\n\t\tanagramScore\n\t)\n\n\treturn fuzzyScore\n}\n\n// Keep the rest of the helper functions as they are...\n/**\n * Check if string 'sub' is a subsequence of string 'str'.\n * All characters in 'sub' must appear in order in 'str'.\n */\nfunction isSubsequence(sub: string, str: string): boolean {\n\tlet i = 0,\n\t\tj = 0\n\twhile (i < sub.length && j < str.length) {\n\t\tif (sub[i] === str[j]) i++\n\t\tj++\n\t}\n\treturn i === sub.length\n}\n\n/**\n * Check if all characters in 'query' are present in 'target'.\n * For example, \"aovc\" matches \"avocados\" (anagram subset matching).\n */\nfunction hasAllCharacters(query: string, target: string): boolean {\n\tconst countChars = (s: string): Record<string, number> => {\n\t\treturn s.split('').reduce(\n\t\t\t(acc, char) => {\n\t\t\t\tacc[char] = (acc[char] || 0) + 1\n\t\t\t\treturn acc\n\t\t\t},\n\t\t\t{} as Record<string, number>,\n\t\t)\n\t}\n\n\tconst queryCount = countChars(query)\n\tconst targetCount = countChars(target)\n\n\treturn Object.keys(queryCount).every(char => (targetCount[char] || 0) >= queryCount[char])\n}\n\n/**\n * Generate bigrams for a string.\n * A bigram is a sequence of two adjacent characters.\n */\nfunction getBigrams(s: string): string[] {\n\tconst bigrams = []\n\tfor (let i = 0; i < s.length - 1; i++) {\n\t\tbigrams.push(s.substring(i, i + 2))\n\t}\n\treturn bigrams\n}\n\n/**\n * Compute Dice's coefficient for two strings based on bigrams.\n * Returns a value between 0 (no similarity) and 1 (perfect match).\n */\nfunction diceCoefficient(s1: string, s2: string): number {\n\tif (s1.length < 2 || s2.length < 2) return 0\n\n\tconst bigrams1 = getBigrams(s1)\n\tconst bigrams2 = getBigrams(s2)\n\n\tlet intersection = 0\n\tconst used = new Array(bigrams2.length).fill(false)\n\n\tfor (const bigram of bigrams1) {\n\t\tfor (let i = 0; i < bigrams2.length; i++) {\n\t\t\tif (!used[i] && bigrams2[i] === bigram) {\n\t\t\t\tintersection++\n\t\t\t\tused[i] = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\treturn (2 * intersection) / (bigrams1.length + bigrams2.length)\n}\n\n/**\n * Calculate Levenshtein distance between two strings.\n */\nfunction calculateLevenshtein(a: string, b: string): number {\n\tif (a.length === 0) return b.length\n\tif (b.length === 0) return a.length\n\n\tconst matrix: number[][] = []\n\n\t// Initialize the matrix\n\tfor (let i = 0; i <= b.length; i++) {\n\t\tmatrix[i] = [i]\n\t}\n\tfor (let j = 0; j <= a.length; j++) {\n\t\tmatrix[0][j] = j\n\t}\n\n\t// Calculate distances\n\tfor (let i = 1; i <= b.length; i++) {\n\t\tfor (let j = 1; j <= a.length; j++) {\n\t\t\tconst cost = a[j - 1] === b[i - 1] ? 0 : 1\n\t\t\tmatrix[i][j] = Math.min(\n\t\t\t\tmatrix[i - 1][j] + 1, // deletion\n\t\t\t\tmatrix[i][j - 1] + 1, // insertion\n\t\t\t\tmatrix[i - 1][j - 1] + cost, // substitution\n\t\t\t)\n\t\t}\n\t}\n\n\treturn matrix[b.length][a.length]\n}\n","import { $LitElement } from '@mixins/index'\nimport { InputSize } from '@schmancy/input'\nimport SchmancyInputV2 from '@schmancy/input/input-v2'\nimport SchmancyOption from '@schmancy/option/option'\nimport { html } from 'lit'\nimport { customElement, property, query, queryAssignedElements, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport {\n BehaviorSubject,\n combineLatest,\n EMPTY,\n fromEvent,\n merge,\n of,\n Subject,\n timer\n} from 'rxjs'\nimport {\n debounceTime,\n distinctUntilChanged,\n filter,\n map,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap,\n withLatestFrom\n} from 'rxjs/operators'\nimport style from './autocomplete.scss?inline'\n\n// Import the similarity function (or include it inline)\nimport { similarity } from '../utils/search'\n\nexport type SchmancyAutocompleteChangeEvent = CustomEvent<{\n value: string | string[]\n values?: string[]\n}>\n\ninterface FilteredOption {\n option: SchmancyOption\n score: number\n}\n\n@customElement('schmancy-autocomplete')\nexport default class SchmancyAutocomplete extends $LitElement(style) {\n // Public API properties\n @property({ type: Boolean }) required = false\n @property({ type: String }) placeholder = ''\n @property({ type: String, reflect: true }) label = ''\n @property({ type: String }) name = ''\n @property({ type: String }) maxHeight = '300px'\n @property({ type: Boolean }) multi = false\n @property({ type: String }) description = ''\n @property({ type: String, reflect: true }) size: InputSize = 'md'\n @property({ type: String }) autocomplete = 'on'\n @property({ type: Number }) debounceMs = 200\n @property({ type: Number }) similarityThreshold = 0.3 // Minimum similarity score to show option\n\n // Values property for multi-select mode\n @property({ type: Array })\n get values() {\n return [...this._selectedValues$.value]\n }\n set values(vals: string[]) {\n this._selectedValues$.next(Array.isArray(vals) ? [...vals] : [])\n }\n\n // Value property\n @property({ type: String, reflect: true })\n get value() {\n return this.multi \n ? this._selectedValues$.value.join(',')\n : this._selectedValue$.value\n }\n set value(val: string) {\n if (this.multi) {\n this._selectedValues$.next(\n val ? val.split(',').map(v => v.trim()).filter(Boolean) : []\n )\n } else {\n this._selectedValue$.next(val)\n }\n }\n\n // State\n @state() private _open = false\n @state() private _inputValue = ''\n @state() private _visibleOptionsCount = 0\n @state() private _hasResults = true\n\n // DOM references\n @query('#options') _listbox!: HTMLUListElement\n @query('sch-input') _input!: SchmancyInputV2\n @queryAssignedElements({ flatten: true }) private _options!: SchmancyOption[]\n private _inputElementRef = createRef<HTMLInputElement>()\n\n // RxJS Subjects\n private _selectedValue$ = new BehaviorSubject<string>('')\n private _selectedValues$ = new BehaviorSubject<string[]>([])\n private _inputValue$ = new BehaviorSubject<string>('')\n private _open$ = new BehaviorSubject<boolean>(false)\n private _options$ = new BehaviorSubject<SchmancyOption[]>([])\n private _optionSelect$ = new Subject<SchmancyOption>()\n private _documentClick$ = new Subject<MouseEvent>()\n private _checkAutofill$ = new Subject<void>()\n\n connectedCallback() {\n super.connectedCallback()\n \n if (!this.id) {\n this.id = `sch-autocomplete-${Math.random().toString(36).slice(2, 9)}`\n }\n\n this._setupAutocompleteLogic()\n this._setupDocumentClickHandler()\n this._setupAutofillDetection()\n }\n\n private _setupAutocompleteLogic() {\n // Options management pipeline\n this._options$.pipe(\n tap(options => {\n options.forEach((option, index) => {\n option.setAttribute('role', 'option')\n option.tabIndex = -1\n if (!option.id) {\n option.id = `${this.id}-option-${index}`\n }\n if (!option.hasAttribute('data-event-bound')) {\n fromEvent(option, 'click').pipe(\n tap(e => e.stopPropagation()),\n takeUntil(this.disconnecting)\n ).subscribe(() => this._optionSelect$.next(option))\n option.setAttribute('data-event-bound', 'true')\n }\n })\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Selection sync pipeline\n combineLatest([\n this._selectedValue$,\n this._selectedValues$,\n this._options$\n ]).pipe(\n tap(([selectedValue, selectedValues, options]) => {\n options.forEach(option => {\n option.selected = this.multi \n ? selectedValues.includes(option.value)\n : option.value === selectedValue\n option.setAttribute('aria-selected', String(option.selected))\n })\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Enhanced fuzzy filtering pipeline\n this._inputValue$.pipe(\n distinctUntilChanged(),\n debounceTime(this.debounceMs),\n withLatestFrom(this._options$, this._open$),\n tap(([searchTerm, options, isOpen]) => {\n if (!isOpen) return\n\n const term = searchTerm.trim()\n \n if (!term) {\n // Show all options if no search term\n options.forEach(option => {\n option.hidden = false\n option.style.order = '0' // Reset order\n })\n this._visibleOptionsCount = options.length\n this._hasResults = true\n } else {\n // Calculate similarity scores for all options\n const scoredOptions: FilteredOption[] = options.map(option => {\n // Get text to search in (prioritize label, then textContent, then value)\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n \n // Calculate similarity scores for both label and value\n const labelScore = similarity(term, optionLabel)\n const valueScore = similarity(term, optionValue)\n \n // Use the higher score (prioritizing label matches)\n const score = Math.max(labelScore * 1.1, valueScore) // Slight boost for label matches\n \n return { option, score }\n })\n \n // Sort by score (highest first)\n scoredOptions.sort((a, b) => b.score - a.score)\n \n // Apply visibility and ordering\n let visibleCount = 0\n scoredOptions.forEach((item, index) => {\n const { option, score } = item\n \n // Hide options below threshold\n if (score < this.similarityThreshold) {\n option.hidden = true\n } else {\n option.hidden = false\n visibleCount++\n // Use CSS order to sort visible options by relevance\n option.style.order = String(index)\n }\n })\n \n this._visibleOptionsCount = visibleCount\n this._hasResults = visibleCount > 0\n }\n \n this._announceToScreenReader(\n this._visibleOptionsCount > 0 \n ? `${this._visibleOptionsCount} option${this._visibleOptionsCount === 1 ? '' : 's'} available.`\n : 'No results found.'\n )\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Option selection pipeline\n this._optionSelect$.pipe(\n withLatestFrom(this._selectedValue$, this._selectedValues$),\n tap(([option, _, currentValues]) => {\n if (this.multi) {\n const index = currentValues.indexOf(option.value)\n const newValues = index > -1\n ? [...currentValues.slice(0, index), ...currentValues.slice(index + 1)]\n : [...currentValues, option.value]\n this._selectedValues$.next(newValues)\n \n this._inputValue$.next('')\n this._inputValue = ''\n \n const labels = this._getSelectedLabels()\n this._announceToScreenReader(\n labels.length > 0 \n ? `Selected: ${labels.join(', ')}`\n : 'No options selected'\n )\n } else {\n this._selectedValue$.next(option.value)\n this._open$.next(false)\n this._open = false\n \n this._inputValue = option.label || option.textContent || ''\n this._inputValue$.next(this._inputValue)\n \n timer(100).pipe(\n tap(() => this._inputElementRef.value?.blur()),\n take(1)\n ).subscribe()\n \n this._announceToScreenReader(`Selected: ${option.label || option.textContent}`)\n }\n }),\n tap(() => this._fireChangeEvent()),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Display update pipeline\n combineLatest([\n this._open$,\n this._selectedValue$,\n this._selectedValues$,\n this._options$\n ]).pipe(\n filter(() => !this._open$.value),\n tap(([, selectedValue, selectedValues, options]) => {\n if (this.multi) {\n const labels = options\n .filter(opt => selectedValues.includes(opt.value))\n .map(opt => opt.label || opt.textContent || '')\n this._inputValue = labels.join(', ')\n } else {\n const option = options.find(opt => opt.value === selectedValue)\n this._inputValue = option ? option.label || option.textContent || '' : ''\n }\n this._inputValue$.next(this._inputValue)\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Open state sync\n this._open$.pipe(\n tap(open => this._open = open),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n private _setupDocumentClickHandler() {\n this._documentClick$.pipe(\n filter(e => !e.composedPath().includes(this)),\n filter(e => !this._options.some(opt => e.composedPath().includes(opt))),\n filter(() => this._open),\n tap(() => {\n this._open$.next(false)\n this._updateInputDisplay()\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n this._open$.pipe(\n distinctUntilChanged(),\n switchMap(open => \n open \n ? timer(10).pipe(\n tap(() => document.addEventListener('click', e => this._documentClick$.next(e))),\n switchMap(() => EMPTY)\n )\n : of(null).pipe(\n tap(() => document.removeEventListener('click', e => this._documentClick$.next(e)))\n )\n ),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n private _setupAutofillDetection() {\n // Enhanced autofill detection with fuzzy matching\n merge(\n timer(100, 500).pipe(take(10)),\n this._checkAutofill$,\n timer(100).pipe(\n switchMap(() => \n fromEvent(window, 'load').pipe(startWith(null))\n )\n )\n ).pipe(\n map(() => {\n const schInput = this._inputElementRef.value\n if (!schInput) return null\n return schInput.shadowRoot?.querySelector('input') || \n schInput.querySelector('input') ||\n (schInput as any)._inputRef?.value\n }),\n filter(input => !!input),\n map(input => (input as HTMLInputElement).value),\n filter(value => !!value && value.trim().length > 0),\n distinctUntilChanged(),\n withLatestFrom(this._options$),\n tap(([autofilledValue, options]) => {\n console.log('Autofill detected:', autofilledValue)\n \n // Use fuzzy matching to find best matching option\n let bestMatch: SchmancyOption | null = null\n let bestScore = 0\n \n options.forEach(option => {\n const optionLabel = option.label || option.textContent || ''\n const optionValue = option.value\n \n // Calculate similarity scores\n const labelScore = similarity(autofilledValue, optionLabel)\n const valueScore = similarity(autofilledValue, optionValue)\n \n // Use the higher score\n const score = Math.max(labelScore, valueScore)\n \n // Keep track of best match\n if (score > bestScore && score >= this.similarityThreshold) {\n bestScore = score\n bestMatch = option\n }\n })\n\n if (bestMatch) {\n console.log('Found matching option:', bestMatch.value, 'with score:', bestScore)\n \n // Select the option\n if (this.multi) {\n this._selectedValues$.next([bestMatch.value])\n } else {\n this._selectedValue$.next(bestMatch.value)\n }\n \n // Update input to show the label\n const displayValue = bestMatch.label || bestMatch.textContent || ''\n this._inputValue = displayValue\n this._inputValue$.next(displayValue)\n \n // Update the actual input element\n const input = this._inputElementRef.value\n if (input) {\n input.value = displayValue\n }\n \n // Close dropdown if open\n this._open$.next(false)\n \n // Fire change event\n this._fireChangeEvent()\n \n // Announce to screen reader\n this._announceToScreenReader(`Autofilled: ${displayValue}`)\n }\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n\n // Chrome autofill animation detection\n timer(100).pipe(\n map(() => {\n const schInput = this._inputElementRef.value\n if (!schInput) return null\n return schInput.shadowRoot?.querySelector('input') || \n schInput.querySelector('input') ||\n (schInput as any)._inputRef?.value\n }),\n filter(input => !!input),\n switchMap(input => {\n return fromEvent<AnimationEvent>(input!, 'animationstart').pipe(\n filter(e => e.animationName === 'onAutoFillStart'),\n tap(() => {\n console.log('Chrome autofill animation detected')\n timer(100).pipe(\n tap(() => this._checkAutofill$.next()),\n take(1)\n ).subscribe()\n })\n )\n }),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n private _updateInputDisplay() {\n of(null).pipe(\n withLatestFrom(\n this._selectedValue$,\n this._selectedValues$,\n this._options$,\n this._open$\n ),\n tap(([, selectedValue, selectedValues, options, isOpen]) => {\n if (!this._inputElementRef.value) return\n\n if (!isOpen || !this.multi) {\n if (this.multi) {\n const labels = options\n .filter(opt => selectedValues.includes(opt.value))\n .map(opt => opt.label || opt.textContent || '')\n this._inputValue = labels.join(', ')\n } else {\n const option = options.find(opt => opt.value === selectedValue)\n this._inputValue = option ? option.label || option.textContent || '' : ''\n }\n this._inputValue$.next(this._inputValue)\n this._inputElementRef.value.value = this._inputValue\n }\n }),\n take(1)\n ).subscribe()\n }\n\n private _getSelectedLabels(): string[] {\n return this._options\n .filter(option => \n this.multi \n ? this._selectedValues$.value.includes(option.value)\n : option.value === this._selectedValue$.value\n )\n .map(option => option.label || option.textContent || '')\n }\n\n private _announceToScreenReader(message: string) {\n const liveRegion = this.shadowRoot?.querySelector('#live-status')\n if (liveRegion) {\n liveRegion.textContent = message\n }\n }\n\n private _fireChangeEvent() {\n const detail: SchmancyAutocompleteChangeEvent['detail'] = {\n value: this.value,\n }\n\n if (this.multi) {\n detail.values = [...this._selectedValues$.value]\n }\n\n this.dispatchEvent(\n new CustomEvent<SchmancyAutocompleteChangeEvent['detail']>('change', {\n detail,\n bubbles: true,\n composed: true,\n })\n )\n }\n\n public checkValidity(): boolean {\n if (!this.required) return true\n return this.multi \n ? this._selectedValues$.value.length > 0 \n : Boolean(this._selectedValue$.value)\n }\n\n public reportValidity(): boolean {\n if (this._inputElementRef.value) {\n return this._inputElementRef.value.reportValidity()\n }\n return this.checkValidity()\n }\n\n firstUpdated() {\n timer(200).pipe(\n tap(() => this._checkAutofill$.next()),\n take(1)\n ).subscribe()\n \n this._options$.pipe(\n filter(options => options.length > 0),\n tap(() => this._checkAutofill$.next()),\n takeUntil(this.disconnecting)\n ).subscribe()\n }\n\n render() {\n const descriptionId = `${this.id}-desc`\n\n return html`\n <div class=\"relative\">\n <!-- Screen reader live region -->\n <div id=\"live-status\" role=\"status\" aria-live=\"polite\" class=\"sr-only\"></div>\n\n <!-- Description -->\n ${this.description ? html`<div id=\"${descriptionId}\" class=\"sr-only\">${this.description}</div>` : ''}\n\n <!-- Input -->\n <slot name=\"trigger\">\n <sch-input\n .size=${this.size}\n ${ref(this._inputElementRef)}\n id=\"autocomplete-input\"\n class=\"w-full\"\n .name=${this.name || this.label?.toLowerCase().replace(/\\s+/g, '-')}\n .label=${this.label}\n .placeholder=${this.placeholder}\n .required=${this.required}\n .value=${this._inputValue}\n type=\"text\"\n autocomplete=${this.autocomplete}\n clickable\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-controls=\"options\"\n aria-expanded=${this._open}\n aria-describedby=${this.description ? descriptionId : undefined}\n @input=${(e: Event) => {\n const value = (e.target as HTMLInputElement).value\n this._inputValue = value\n this._inputValue$.next(value)\n }}\n @focus=${(e: FocusEvent) => {\n e.stopPropagation()\n \n const hasSelection = this.multi \n ? this._selectedValues$.value.length > 0\n : !!this._selectedValue$.value\n \n if (this.multi && !hasSelection) {\n this._inputValue = ''\n this._inputValue$.next('')\n if (this._inputElementRef.value) {\n this._inputElementRef.value.value = ''\n }\n }\n \n this._open$.next(true)\n }}\n @click=${(e: MouseEvent) => {\n e.stopPropagation()\n this._open$.next(true)\n }}\n @keydown=${(e: KeyboardEvent) => {\n this._handleKeyDown(e)\n }}\n >\n </sch-input>\n </slot>\n\n <!-- Options dropdown -->\n <ul\n id=\"options\"\n class=${classMap({\n 'absolute': true,\n 'z-[1000]': true,\n 'mt-1': true,\n 'w-full': true,\n 'rounded-md': true,\n 'shadow-md': true,\n 'overflow-auto': true,\n 'min-w-full': true,\n 'bg-surface-low': true,\n 'flex': true,\n 'flex-col': true, // Enable flexbox for ordering\n })}\n role=\"listbox\"\n aria-multiselectable=${this.multi ? 'true' : 'false'}\n aria-label=${`${this.label || 'Options'} dropdown`}\n ?hidden=${!this._open}\n style=\"max-height: ${this.maxHeight}; display: ${this._open ? 'flex' : 'none'};\"\n @slotchange=${() => {\n this._options$.next(this._options)\n timer(100).pipe(\n tap(() => this._checkAutofill$.next()),\n take(1)\n ).subscribe()\n }}\n >\n <slot></slot>\n ${!this._hasResults ? html`\n <li class=\"px-3 py-2 text-sm text-muted\">No results found</li>\n ` : ''}\n </ul>\n </div>\n\n <style>\n :host {\n display: block;\n }\n\n @keyframes onAutoFillStart {\n from {/**/}\n to {/**/}\n }\n\n sch-input::part(input):-webkit-autofill,\n sch-input input:-webkit-autofill {\n animation-name: onAutoFillStart;\n animation-duration: 1ms;\n }\n </style>\n `\n }\n\n private _handleKeyDown(_e: KeyboardEvent) {\n fromEvent<KeyboardEvent>(document, 'keydown').pipe(\n take(1),\n withLatestFrom(this._open$, this._options$),\n tap(([event, isOpen, options]) => {\n if (!isOpen && (event.key === 'ArrowDown' || event.key === 'Enter')) {\n event.preventDefault()\n this._open$.next(true)\n \n timer(10).pipe(\n tap(() => {\n const firstVisible = options.find(opt => !opt.hidden)\n firstVisible?.focus()\n }),\n take(1)\n ).subscribe()\n return\n }\n\n if (!isOpen) return\n\n const visibleOptions = options.filter(opt => !opt.hidden)\n .sort((a, b) => parseInt(a.style.order || '0') - parseInt(b.style.order || '0'))\n \n const focusedOption = visibleOptions.find(opt => opt === document.activeElement)\n const currentIndex = focusedOption ? visibleOptions.indexOf(focusedOption) : -1\n\n switch (event.key) {\n case 'Escape':\n event.preventDefault()\n this._open$.next(false)\n this._updateInputDisplay()\n this._inputElementRef.value?.focus()\n break\n\n case 'Tab':\n this._open$.next(false)\n this._updateInputDisplay()\n break\n\n case 'ArrowDown':\n event.preventDefault()\n const nextIndex = currentIndex < visibleOptions.length - 1 ? currentIndex + 1 : 0\n visibleOptions[nextIndex]?.focus()\n break\n\n case 'ArrowUp':\n event.preventDefault()\n const prevIndex = currentIndex > 0 ? currentIndex - 1 : visibleOptions.length - 1\n visibleOptions[prevIndex]?.focus()\n break\n\n case 'Home':\n event.preventDefault()\n visibleOptions[0]?.focus()\n break\n\n case 'End':\n event.preventDefault()\n visibleOptions[visibleOptions.length - 1]?.focus()\n break\n\n case 'Enter':\n case ' ':\n if (focusedOption) {\n event.preventDefault()\n this._optionSelect$.next(focusedOption)\n }\n break\n }\n })\n ).subscribe()\n }\n}\n\n\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'schmancy-autocomplete': SchmancyAutocomplete\n }\n}"],"names":["similarity","query","target","normalizedQuery","toLowerCase","trim","normalizedTarget","startsWith","length","words","split","word","indexOf","includes","sub","str","i","j","diceScore","s1","s2","bigrams1","getBigrams","bigrams2","intersection","used","Array","fill","bigram","maxLength","Math","max","levenshteinDistance","a","b","matrix","cost","min","levenshteinScore","anagramScore","countChars","s","reduce","acc","char","queryCount","targetCount","Object","keys","every","bigrams","push","substring","SchmancyAutocomplete","$LitElement","constructor","super","arguments","this","required","placeholder","label","name","maxHeight","multi","description","size","autocomplete","debounceMs","similarityThreshold","_open","_inputValue","_visibleOptionsCount","_hasResults","_inputElementRef","createRef","_selectedValue$","BehaviorSubject","_selectedValues$","_inputValue$","_open$","_options$","_optionSelect$","Subject","_documentClick$","_checkAutofill$","values","value","vals","next","isArray","join","val","map","v","filter","Boolean","connectedCallback","id","random","toString","slice","_setupAutocompleteLogic","_setupDocumentClickHandler","_setupAutofillDetection","pipe","tap","options","forEach","option","index","setAttribute","tabIndex","hasAttribute","fromEvent","e","stopPropagation","takeUntil","disconnecting","subscribe","combineLatest","selectedValue","selectedValues","selected","String","distinctUntilChanged","debounceTime","withLatestFrom","searchTerm","isOpen","term","scoredOptions","optionLabel","textContent","optionValue","labelScore","valueScore","score","sort","visibleCount","item","hidden","style","order","_announceToScreenReader","_","currentValues","newValues","labels","_getSelectedLabels","timer","blur","take","_fireChangeEvent","opt","find","open","composedPath","_options","some","_updateInputDisplay","switchMap","document","addEventListener","EMPTY","of","removeEventListener","merge","window","startWith","schInput","shadowRoot","querySelector","_inputRef","input","autofilledValue","bestMatch","bestScore","displayValue","animationName","message","liveRegion","detail","dispatchEvent","CustomEvent","bubbles","composed","reportValidity","checkValidity","render","descriptionId","html","ref","replace","hasSelection","_handleKeyDown","classMap","absolute","flex","_e","event","key","preventDefault","firstVisible","focus","visibleOptions","parseInt","focusedOption","activeElement","currentIndex","nextIndex","prevIndex","__decorateClass","property","type","prototype","reflect","Number","state","queryAssignedElements","flatten","customElement"],"mappings":"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"}
|