@mhmo91/schmancy 0.2.196 → 0.2.198
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{animated-text-jv1yAwLh.js → animated-text-Cb07SP6h.js} +3 -3
- package/dist/{animated-text-jv1yAwLh.js.map → animated-text-Cb07SP6h.js.map} +1 -1
- package/dist/{animated-text-DnX2TopW.cjs → animated-text-DML1qmmR.cjs} +2 -2
- package/dist/{animated-text-DnX2TopW.cjs.map → animated-text-DML1qmmR.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-DMD20wqd.js → area.component-CdFovqHE.js} +3 -3
- package/dist/{area.component-DMD20wqd.js.map → area.component-CdFovqHE.js.map} +1 -1
- package/dist/{area.component-Vs2WGXgk.cjs → area.component-Psgv50Lq.cjs} +2 -2
- package/dist/{area.component-Vs2WGXgk.cjs.map → area.component-Psgv50Lq.cjs.map} +1 -1
- package/dist/area.js +1 -1
- package/dist/{autocomplete-BrAxEJJq.cjs → autocomplete-B36XAOQm.cjs} +2 -2
- package/dist/{autocomplete-BrAxEJJq.cjs.map → autocomplete-B36XAOQm.cjs.map} +1 -1
- package/dist/{autocomplete-OS61ngsy.js → autocomplete-BD8oV6Se.js} +3 -3
- package/dist/{autocomplete-OS61ngsy.js.map → autocomplete-BD8oV6Se.js.map} +1 -1
- package/dist/autocomplete.cjs +1 -1
- package/dist/autocomplete.js +1 -1
- package/dist/{avatar-CEdv8DJY.cjs → avatar-COYuuamy.cjs} +2 -2
- package/dist/{avatar-CEdv8DJY.cjs.map → avatar-COYuuamy.cjs.map} +1 -1
- package/dist/{avatar-CUHTDenQ.js → avatar-CTMclGHR.js} +41 -41
- package/dist/{avatar-CUHTDenQ.js.map → avatar-CTMclGHR.js.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-Chd-COYm.cjs → checkbox-C80YxaCN.cjs} +2 -2
- package/dist/{checkbox-Chd-COYm.cjs.map → checkbox-C80YxaCN.cjs.map} +1 -1
- package/dist/{checkbox-CVXRiSWP.js → checkbox-Cntlr_eV.js} +2 -2
- package/dist/{checkbox-CVXRiSWP.js.map → checkbox-Cntlr_eV.js.map} +1 -1
- package/dist/checkbox.cjs +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/{chips-Bx9gSvN1.cjs → chips-CI-fsAqX.cjs} +2 -2
- package/dist/{chips-Bx9gSvN1.cjs.map → chips-CI-fsAqX.cjs.map} +1 -1
- package/dist/{chips-Dx_erk55.js → chips-vMtInVGX.js} +3 -3
- package/dist/{chips-Dx_erk55.js.map → chips-vMtInVGX.js.map} +1 -1
- package/dist/chips.cjs +1 -1
- package/dist/chips.js +1 -1
- package/dist/{circular-progress-BQnGvbss.js → circular-progress-8LR4RVjD.js} +3 -3
- package/dist/{circular-progress-BQnGvbss.js.map → circular-progress-8LR4RVjD.js.map} +1 -1
- package/dist/{circular-progress-CNBah5dz.cjs → circular-progress-CSWSAcU6.cjs} +2 -2
- package/dist/{circular-progress-CNBah5dz.cjs.map → circular-progress-CSWSAcU6.cjs.map} +1 -1
- package/dist/circular-progress.cjs +1 -1
- package/dist/circular-progress.js +1 -1
- package/dist/components.cjs +1 -1
- package/dist/components.js +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/{date-range-Cq0diVSY.cjs → date-range-BkVCslGl.cjs} +4 -2
- package/dist/{date-range-Cq0diVSY.cjs.map → date-range-BkVCslGl.cjs.map} +1 -1
- package/dist/{date-range-wxdt6Ha0.js → date-range-ChsdVWRV.js} +5 -3
- package/dist/date-range-ChsdVWRV.js.map +1 -0
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/{delay-BzkhDhs0.cjs → delay-D6UmIwSa.cjs} +2 -2
- package/dist/{delay-BzkhDhs0.cjs.map → delay-D6UmIwSa.cjs.map} +1 -1
- package/dist/{delay-Ds5suSsc.js → delay-DJMIbnvL.js} +2 -2
- package/dist/{delay-Ds5suSsc.js.map → delay-DJMIbnvL.js.map} +1 -1
- package/dist/delay.cjs +1 -1
- package/dist/delay.js +1 -1
- package/dist/{dialog-content-DFJnYzff.js → dialog-content-CWvxqVsr.js} +3 -3
- package/dist/{dialog-content-DFJnYzff.js.map → dialog-content-CWvxqVsr.js.map} +1 -1
- package/dist/{dialog-content-CJY69qfC.cjs → dialog-content-Cw1Al_Re.cjs} +2 -2
- package/dist/{dialog-content-CJY69qfC.cjs.map → dialog-content-Cw1Al_Re.cjs.map} +1 -1
- package/dist/dialog.cjs +1 -1
- package/dist/dialog.js +1 -1
- package/dist/{divider-C3w1_-N1.js → divider-BGo7hglJ.js} +3 -3
- package/dist/{divider-C3w1_-N1.js.map → divider-BGo7hglJ.js.map} +1 -1
- package/dist/{divider-CFzbCFsr.cjs → divider-Cp6EXlTN.cjs} +2 -2
- package/dist/{divider-CFzbCFsr.cjs.map → divider-Cp6EXlTN.cjs.map} +1 -1
- package/dist/divider.cjs +1 -1
- package/dist/divider.js +1 -1
- package/dist/{dropdown-content-BGFYBXcx.js → dropdown-content-CTWWDRgy.js} +3 -3
- package/dist/{dropdown-content-BGFYBXcx.js.map → dropdown-content-CTWWDRgy.js.map} +1 -1
- package/dist/{dropdown-content-PaMOJphI.cjs → dropdown-content-CmCumNjC.cjs} +2 -2
- package/dist/{dropdown-content-PaMOJphI.cjs.map → dropdown-content-CmCumNjC.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-Cy4Stl_1.js → flex-CKtJkkxU.js} +2 -2
- package/dist/{flex-Cy4Stl_1.js.map → flex-CKtJkkxU.js.map} +1 -1
- package/dist/{flex-DP5O5644.cjs → flex-Dyfn6mxF.cjs} +2 -2
- package/dist/{flex-DP5O5644.cjs.map → flex-Dyfn6mxF.cjs.map} +1 -1
- package/dist/{form-BQamcLFL.js → form-BZdw3XUt.js} +2 -2
- package/dist/{form-BQamcLFL.js.map → form-BZdw3XUt.js.map} +1 -1
- package/dist/{form-CG3kns69.cjs → form-BbQRONBu.cjs} +2 -2
- package/dist/{form-CG3kns69.cjs.map → form-BbQRONBu.cjs.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/{icon-CilwMTXB.cjs → icon-CNkK3oMH.cjs} +2 -2
- package/dist/{icon-CilwMTXB.cjs.map → icon-CNkK3oMH.cjs.map} +1 -1
- package/dist/{icon-Cd4p9jRB.js → icon-PZTHZSsC.js} +3 -3
- package/dist/{icon-Cd4p9jRB.js.map → icon-PZTHZSsC.js.map} +1 -1
- package/dist/{icon-button-By17is4V.js → icon-button-5_uidIo2.js} +3 -3
- package/dist/{icon-button-By17is4V.js.map → icon-button-5_uidIo2.js.map} +1 -1
- package/dist/{icon-button-C4Hf63hY.cjs → icon-button-L6UzTqIn.cjs} +2 -2
- package/dist/{icon-button-C4Hf63hY.cjs.map → icon-button-L6UzTqIn.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 +39 -39
- package/dist/{input-BIi0rS2t.cjs → input-GETorvfT.cjs} +2 -2
- package/dist/{input-BIi0rS2t.cjs.map → input-GETorvfT.cjs.map} +1 -1
- package/dist/{input-C8OAokVe.js → input-cvO-mD1t.js} +2 -2
- package/dist/{input-C8OAokVe.js.map → input-cvO-mD1t.js.map} +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +1 -1
- package/dist/{list-jFsCubuy.cjs → list-BPQwn2ZD.cjs} +2 -2
- package/dist/{list-jFsCubuy.cjs.map → list-BPQwn2ZD.cjs.map} +1 -1
- package/dist/{list-BC3OE3Pu.js → list-CjVW-XS-.js} +2 -2
- package/dist/{list-BC3OE3Pu.js.map → list-CjVW-XS-.js.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/{litElement.mixin-Cypiq-N-.cjs → litElement.mixin-0pIFA8ru.cjs} +2 -2
- package/dist/{litElement.mixin-Cypiq-N-.cjs.map → litElement.mixin-0pIFA8ru.cjs.map} +1 -1
- package/dist/{litElement.mixin-C6PzcPXd.js → litElement.mixin-BKgKxczr.js} +2 -2
- package/dist/{litElement.mixin-C6PzcPXd.js.map → litElement.mixin-BKgKxczr.js.map} +1 -1
- package/dist/{menu-n_Doj-bW.js → menu-Bj9xX6Hn.js} +3 -3
- package/dist/{menu-n_Doj-bW.js.map → menu-Bj9xX6Hn.js.map} +1 -1
- package/dist/{menu-CDjqdEd6.cjs → menu-BpjaKAXC.cjs} +2 -2
- package/dist/{menu-CDjqdEd6.cjs.map → menu-BpjaKAXC.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--VLqOJJg.cjs → notification-service-BFAKagab.cjs} +12 -12
- package/dist/{notification-service--VLqOJJg.cjs.map → notification-service-BFAKagab.cjs.map} +1 -1
- package/dist/{notification-service-DHIhgWQr.js → notification-service-ITb5rmvM.js} +7 -7
- package/dist/{notification-service-DHIhgWQr.js.map → notification-service-ITb5rmvM.js.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-oyyjCwnL.js → option-_DZj4_on.js} +2 -2
- package/dist/{option-oyyjCwnL.js.map → option-_DZj4_on.js.map} +1 -1
- package/dist/{option-B359EBiZ.cjs → option-vszqrPbH.cjs} +2 -2
- package/dist/{option-B359EBiZ.cjs.map → option-vszqrPbH.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/{payment-card-form-BSueaw97.js → payment-card-form-CxhMa60Q.js} +3 -3
- package/dist/{payment-card-form-BSueaw97.js.map → payment-card-form-CxhMa60Q.js.map} +1 -1
- package/dist/{payment-card-form-B-ZAsSED.cjs → payment-card-form-DgFUnANa.cjs} +2 -2
- package/dist/{payment-card-form-B-ZAsSED.cjs.map → payment-card-form-DgFUnANa.cjs.map} +1 -1
- package/dist/{radio-button-BO6mIWCi.cjs → radio-button-ChM1WZDg.cjs} +2 -2
- package/dist/{radio-button-BO6mIWCi.cjs.map → radio-button-ChM1WZDg.cjs.map} +1 -1
- package/dist/{radio-button-84TD7rpH.js → radio-button-svaVfPn8.js} +2 -2
- package/dist/{radio-button-84TD7rpH.js.map → radio-button-svaVfPn8.js.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/{schmancy-steps-container-Lo4d27n3.js → schmancy-steps-container-9fHGNLHd.js} +2 -2
- package/dist/{schmancy-steps-container-Lo4d27n3.js.map → schmancy-steps-container-9fHGNLHd.js.map} +1 -1
- package/dist/{schmancy-steps-container-Cfq8OsWt.cjs → schmancy-steps-container-C_-PFkRy.cjs} +2 -2
- package/dist/{schmancy-steps-container-Cfq8OsWt.cjs.map → schmancy-steps-container-C_-PFkRy.cjs.map} +1 -1
- package/dist/{select-B-zgP_v6.js → select-CWulYSxd.js} +3 -3
- package/dist/{select-B-zgP_v6.js.map → select-CWulYSxd.js.map} +1 -1
- package/dist/{select-DhEVsWh6.cjs → select-DEd1YJF0.cjs} +2 -2
- package/dist/{select-DhEVsWh6.cjs.map → select-DEd1YJF0.cjs.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/{sheet-BEWq40cN.cjs → sheet-BhKQmvCN.cjs} +2 -2
- package/dist/{sheet-BEWq40cN.cjs.map → sheet-BhKQmvCN.cjs.map} +1 -1
- package/dist/{sheet-DDY4pbD4.js → sheet-C2f1XwT3.js} +3 -3
- package/dist/{sheet-DDY4pbD4.js.map → sheet-C2f1XwT3.js.map} +1 -1
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +1 -1
- package/dist/{slider-De-H5fe8.cjs → slider-CetPyN3J.cjs} +2 -2
- package/dist/{slider-De-H5fe8.cjs.map → slider-CetPyN3J.cjs.map} +1 -1
- package/dist/{slider--irxEv_B.js → slider-CmJGqDDU.js} +3 -3
- package/dist/{slider--irxEv_B.js.map → slider-CmJGqDDU.js.map} +1 -1
- package/dist/slider.cjs +1 -1
- package/dist/slider.js +1 -1
- package/dist/{spinner-DNz1IjmL.cjs → spinner-CLfAy0cd.cjs} +2 -2
- package/dist/{spinner-DNz1IjmL.cjs.map → spinner-CLfAy0cd.cjs.map} +1 -1
- package/dist/{spinner-Bl9n09Z5.js → spinner-CmJk8fIO.js} +3 -3
- package/dist/{spinner-Bl9n09Z5.js.map → spinner-CmJk8fIO.js.map} +1 -1
- package/dist/steps.cjs +1 -1
- package/dist/steps.js +1 -1
- package/dist/{surface-h9dLHMTm.js → surface-BnlEKr-d.js} +2 -2
- package/dist/{surface-h9dLHMTm.js.map → surface-BnlEKr-d.js.map} +1 -1
- package/dist/{surface-BAEUiWcq.cjs → surface-ChxX03-I.cjs} +2 -2
- package/dist/{surface-BAEUiWcq.cjs.map → surface-ChxX03-I.cjs.map} +1 -1
- package/dist/surface.cjs +1 -1
- package/dist/surface.js +1 -1
- package/dist/{table-CxazXBjI.js → table-CZJ14ZEI.js} +2 -2
- package/dist/{table-CxazXBjI.js.map → table-CZJ14ZEI.js.map} +1 -1
- package/dist/{table-Dn07ykGG.cjs → table-CzD7rJ5o.cjs} +2 -2
- package/dist/{table-Dn07ykGG.cjs.map → table-CzD7rJ5o.cjs.map} +1 -1
- package/dist/table.cjs +1 -1
- package/dist/table.js +1 -1
- package/dist/{tabs-compatibility-BrTxeSS-.cjs → tabs-compatibility-BviE0FdA.cjs} +2 -2
- package/dist/{tabs-compatibility-BrTxeSS-.cjs.map → tabs-compatibility-BviE0FdA.cjs.map} +1 -1
- package/dist/{tabs-compatibility-B8I0vg7Y.js → tabs-compatibility-DHkghYmL.js} +2 -2
- package/dist/{tabs-compatibility-B8I0vg7Y.js.map → tabs-compatibility-DHkghYmL.js.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/{tailwind.mixin-qyIcoDLk.cjs → tailwind.mixin-DFxMrwgk.cjs} +2 -2
- package/dist/{tailwind.mixin-qyIcoDLk.cjs.map → tailwind.mixin-DFxMrwgk.cjs.map} +1 -1
- package/dist/{tailwind.mixin-Du4i6vQR.js → tailwind.mixin-k9HTphsu.js} +2 -2
- package/dist/{tailwind.mixin-Du4i6vQR.js.map → tailwind.mixin-k9HTphsu.js.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-DibCLxC2.js → textarea-kTwx4MAh.js} +2 -2
- package/dist/{textarea-DibCLxC2.js.map → textarea-kTwx4MAh.js.map} +1 -1
- package/dist/{textarea-pMec4Wpg.cjs → textarea-qNzKErHX.cjs} +2 -2
- package/dist/{textarea-pMec4Wpg.cjs.map → textarea-qNzKErHX.cjs.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-button-irLEczd5.js → theme-button-CCwPpArv.js} +2 -2
- package/dist/{theme-button-irLEczd5.js.map → theme-button-CCwPpArv.js.map} +1 -1
- package/dist/{theme-button-CG1w_waw.cjs → theme-button-Dt3WQdd4.cjs} +2 -2
- package/dist/{theme-button-CG1w_waw.cjs.map → theme-button-Dt3WQdd4.cjs.map} +1 -1
- package/dist/theme-button.cjs +1 -1
- package/dist/theme-button.js +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/{theme.component-CMM8Xws2.js → theme.component-CJHr6wNa.js} +2 -2
- package/dist/{theme.component-CMM8Xws2.js.map → theme.component-CJHr6wNa.js.map} +1 -1
- package/dist/{theme.component-CpRuySmd.cjs → theme.component-Drq675ta.cjs} +2 -2
- package/dist/{theme.component-CpRuySmd.cjs.map → theme.component-Drq675ta.cjs.map} +1 -1
- package/dist/theme.js +1 -1
- package/dist/{timezone-DIrmlnD6.js → timezone-B53HOn4a.js} +3 -3
- package/dist/{timezone-DIrmlnD6.js.map → timezone-B53HOn4a.js.map} +1 -1
- package/dist/{timezone-n5GflDRe.cjs → timezone-oZ1r5Z54.cjs} +2 -2
- package/dist/{timezone-n5GflDRe.cjs.map → timezone-oZ1r5Z54.cjs.map} +1 -1
- package/dist/{tooltip-N_B-vsDa.js → tooltip-Bfcu9uoC.js} +2 -2
- package/dist/{tooltip-N_B-vsDa.js.map → tooltip-Bfcu9uoC.js.map} +1 -1
- package/dist/{tooltip-0vIcVm5-.cjs → tooltip-DrLzz4rf.cjs} +2 -2
- package/dist/{tooltip-0vIcVm5-.cjs.map → tooltip-DrLzz4rf.cjs.map} +1 -1
- package/dist/tooltip.cjs +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/{tree-Q8AMxJxP.cjs → tree-Buf-0IQD.cjs} +2 -2
- package/dist/{tree-Q8AMxJxP.cjs.map → tree-Buf-0IQD.cjs.map} +1 -1
- package/dist/{tree-2Hf2X0Hv.js → tree-n0KxiiWX.js} +2 -2
- package/dist/{tree-2Hf2X0Hv.js.map → tree-n0KxiiWX.js.map} +1 -1
- package/dist/tree.cjs +1 -1
- package/dist/tree.js +1 -1
- package/dist/{typewriter-CsL-NfYC.cjs → typewriter-DSUU_7wv.cjs} +2 -2
- package/dist/{typewriter-CsL-NfYC.cjs.map → typewriter-DSUU_7wv.cjs.map} +1 -1
- package/dist/{typewriter-bqbNKczJ.js → typewriter-W7Rj384X.js} +4 -4
- package/dist/{typewriter-bqbNKczJ.js.map → typewriter-W7Rj384X.js.map} +1 -1
- package/dist/typewriter.cjs +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{typography-Hlts-hzc.cjs → typography-DaN7dGA2.cjs} +2 -2
- package/dist/typography-DaN7dGA2.cjs.map +1 -0
- package/dist/{typography-CbrvouLo.js → typography-XkeTnrP9.js} +6 -6
- package/dist/typography-XkeTnrP9.js.map +1 -0
- package/dist/typography.cjs +1 -1
- package/dist/typography.js +1 -1
- package/package.json +1 -1
- package/types/src/notification/notification-service.d.ts +8 -8
- package/types/src/typography/typography.d.ts +2 -2
- package/dist/date-range-wxdt6Ha0.js.map +0 -1
- package/dist/typography-CbrvouLo.js.map +0 -1
- package/dist/typography-Hlts-hzc.cjs.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { concat as u, interval as g, startWith as y, filter as h, take as d, fromEvent as f, throttleTime as w, map as b, distinctUntilChanged as $, tap as c } from "rxjs";
|
|
2
2
|
import "lit/directives/class-map.js";
|
|
3
3
|
import "lit/directives/style-map.js";
|
|
4
|
-
import { $ as x } from "./litElement.mixin-
|
|
5
|
-
import "./tailwind.mixin-
|
|
4
|
+
import { $ as x } from "./litElement.mixin-BKgKxczr.js";
|
|
5
|
+
import "./tailwind.mixin-k9HTphsu.js";
|
|
6
6
|
import { css as S, html as Z } from "lit";
|
|
7
7
|
import { property as a, queryAssignedNodes as v, query as m, customElement as A } from "lit/decorators.js";
|
|
8
8
|
var E = Object.defineProperty, O = Object.getOwnPropertyDescriptor, e = (r, s, n, i) => {
|
|
@@ -72,4 +72,4 @@ let t = class extends x(S`
|
|
|
72
72
|
}
|
|
73
73
|
};
|
|
74
74
|
e([a({ type: String })], t.prototype, "ease", 2), e([a({ type: Number })], t.prototype, "delay", 2), e([a({ type: Number })], t.prototype, "stagger", 2), e([a({ type: Number })], t.prototype, "duration", 2), e([a({ type: Array })], t.prototype, "scale", 2), e([a({ type: Array })], t.prototype, "opacity", 2), e([a({ type: Array })], t.prototype, "translateX", 2), e([a({ type: Array })], t.prototype, "translateY", 2), e([a({ type: Array })], t.prototype, "translateZ", 2), e([a({ type: Array })], t.prototype, "rotateZ", 2), e([a({ type: Boolean })], t.prototype, "resetOnScroll", 2), e([v()], t.prototype, "defaultSlot", 2), e([m(".letters")], t.prototype, "letters", 2), e([m(".ml7")], t.prototype, "ml7", 2), t = e([A("schmancy-animated-text")], t);
|
|
75
|
-
//# sourceMappingURL=animated-text-
|
|
75
|
+
//# sourceMappingURL=animated-text-Cb07SP6h.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animated-text-jv1yAwLh.js","sources":["../src/animated-text/animated-text.ts"],"sourcesContent":["// Removed: import { createTimeline, stagger } from '@packages/anime-beta-master'\nimport { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, queryAssignedNodes } from 'lit/decorators.js'\nimport {\n\tconcat,\n\tdistinctUntilChanged,\n\tfilter,\n\tfromEvent,\n\tinterval,\n\tmap,\n\tstartWith,\n\ttake,\n\ttap,\n\tthrottleTime,\n} from 'rxjs'\n\n/**\n * @element schmancy-animated-text\n * Inspired by https://tobiasahlin.com/moving-letters/#1\n */\n@customElement('schmancy-animated-text')\nexport default class SchmancyAnimatedText extends $LitElement(css`\n\t:host {\n\t\tfont-family: inherit;\n\t\tdisplay: block;\n\t}\n\t.ml7 {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t}\n\t.ml7 .text-wrapper {\n\t\tposition: relative;\n\t\tdisplay: inline-block;\n\t\toverflow: hidden;\n\t}\n\t.ml7 .letter {\n\t\ttransform-origin: 0 100%;\n\t\tdisplay: inline-block;\n\t\topacity: 0;\n\t}\n`) {\n\t@property({ type: String }) ease = 'outExpo' // not a built-in string for Web Animations\n\t@property({ type: Number }) delay = 0\n\t@property({ type: Number }) stagger = 50\n\t@property({ type: Number }) duration = 750\n\t@property({ type: Array }) scale = [0, 1]\n\t@property({ type: Array }) opacity = [0, 1]\n\t@property({ type: Array }) translateX = ['0.55em', '0em']\n\t@property({ type: Array }) translateY = ['1.1em', '0em']\n\t@property({ type: Array }) translateZ = [0, 0]\n\t@property({ type: Array }) rotateZ = [180, 0]\n\t@property({ type: Boolean }) resetOnScroll = true\n\n\t@queryAssignedNodes() defaultSlot!: HTMLElement[]\n\t@query('.letters') letters!: HTMLElement\n\t@query('.ml7') ml7!: HTMLElement\n\n\t// Function to check if an element is in the viewport\n\tisInViewport(element: HTMLElement) {\n\t\tconst rect = element.getBoundingClientRect()\n\t\treturn (\n\t\t\trect.top >= 0 &&\n\t\t\trect.left >= 0 &&\n\t\t\trect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n\t\t\trect.right <= (window.innerWidth || document.documentElement.clientWidth)\n\t\t)\n\t}\n\n\tasync firstUpdated() {\n\t\t// Split the text into <span class=\"letter\"> ... </span> elements\n\t\tthis.letters.innerHTML = this.defaultSlot[0].textContent!.replace(/\\S/g, `<span class=\"letter\">$&</span>`)\n\n\t\t// Observe viewport + initial readiness\n\t\tconcat(\n\t\t\t// 1) Wait until the element is rendered (width/height > 0)\n\t\t\tinterval(10).pipe(\n\t\t\t\tstartWith(true),\n\t\t\t\tfilter(() => {\n\t\t\t\t\tconst rect = this.getBoundingClientRect()\n\t\t\t\t\treturn rect.width > 0 && rect.height > 0\n\t\t\t\t}),\n\t\t\t\ttake(1),\n\t\t\t),\n\t\t\t// 2) Then handle scroll events, throttled\n\t\t\tfromEvent(window, 'scroll').pipe(\n\t\t\t\tthrottleTime(0, undefined, {\n\t\t\t\t\tleading: true,\n\t\t\t\t\ttrailing: true,\n\t\t\t\t}),\n\t\t\t\tstartWith(true),\n\t\t\t\tmap(() => this.isInViewport(this)),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(inViewport => {\n\t\t\t\t\t// If leaving viewport and `resetOnScroll` is true, reset letters to opacity 0\n\t\t\t\t\tif (!inViewport && this.resetOnScroll) {\n\t\t\t\t\t\tArray.from(this.letters.children).forEach((letter: HTMLElement) => {\n\t\t\t\t\t\t\tletter.style.opacity = '0'\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tfilter(isInViewport => isInViewport),\n\t\t\t\t// If resetOnScroll = false, animate only the first time inView. If true, repeat.\n\t\t\t\tthis.resetOnScroll ? tap() : take(1),\n\t\t\t\ttap({\n\t\t\t\t\tnext: () => {\n\t\t\t\t\t\t// Animate letters with the native Web Animations API\n\t\t\t\t\t\tconst letters = this.shadowRoot!.querySelectorAll<HTMLElement>('.ml7 .letter')\n\n\t\t\t\t\t\tletters.forEach((letter, i) => {\n\t\t\t\t\t\t\t// Combine all transforms into one CSS transform string\n\t\t\t\t\t\t\t// From\n\t\t\t\t\t\t\tconst fromTransform = `\n translate3d(${this.translateX[0]}, ${this.translateY[0]}, ${this.translateZ[0]}px)\n rotateZ(${this.rotateZ[0]}deg)\n scale(${this.scale[0]})\n `\n\t\t\t\t\t\t\t// To\n\t\t\t\t\t\t\tconst toTransform = `\n translate3d(${this.translateX[1]}, ${this.translateY[1]}, ${this.translateZ[1]}px)\n rotateZ(${this.rotateZ[1]}deg)\n scale(${this.scale[1]})\n `\n\t\t\t\t\t\t\t// Approximate `outExpo` or pick a standard easing (like 'ease-out'):\n\t\t\t\t\t\t\t// outExpo often approximated by cubic-bezier(0.19, 1, 0.22, 1)\n\t\t\t\t\t\t\tconst easingMap: Record<string, string> = {\n\t\t\t\t\t\t\t\toutExpo: 'cubic-bezier(0.19, 1, 0.22, 1)',\n\t\t\t\t\t\t\t\t// add more if you want\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst keyframes: Keyframe[] = [\n\t\t\t\t\t\t\t\t{ transform: fromTransform, opacity: String(this.opacity[0]) },\n\t\t\t\t\t\t\t\t{ transform: toTransform, opacity: String(this.opacity[1]) },\n\t\t\t\t\t\t\t]\n\n\t\t\t\t\t\t\tletter.animate(keyframes, {\n\t\t\t\t\t\t\t\tduration: this.duration,\n\t\t\t\t\t\t\t\teasing: easingMap[this.ease] || 'ease-out',\n\t\t\t\t\t\t\t\tdelay: this.delay + i * this.stagger, // staggered start\n\t\t\t\t\t\t\t\tfill: 'forwards', // so the letters remain visible\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t),\n\t\t).subscribe()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<span class=\"ml7\">\n\t\t\t\t<span class=\"text-wrapper\">\n\t\t\t\t\t<span class=\"letters\">\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-animated-text': SchmancyAnimatedText\n\t}\n}\n"],"names":["SchmancyAnimatedText","$LitElement","css","super","arguments","this","ease","delay","stagger","duration","scale","opacity","translateX","translateY","translateZ","rotateZ","resetOnScroll","element","rect","getBoundingClientRect","top","left","bottom","window","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","firstUpdated","letters","innerHTML","defaultSlot","textContent","replace","concat","interval","pipe","startWith","filter","width","height","take","fromEvent","throttleTime","leading","trailing","map","isInViewport","distinctUntilChanged","tap","inViewport","Array","from","children","forEach","letter","style","next","shadowRoot","querySelectorAll","i","fromTransform","toTransform","keyframes","transform","String","animate","easing","outExpo","fill","subscribe","html","__decorateClass","property","type","prototype","Number","Boolean","queryAssignedNodes","query","customElement"],"mappings":";;;;;;;;;;;AAsBA,IAAqBA,IAArB,cAAkDC,EAAYC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,CAA9D,EAAA;AAAA,EAAA,cAAAC;AAAAA,UAAAA,GAAAC,SAoBoCC,GAAAA,KAAAC,OAAA,WACCD,KAAAE,QAAA,GACEF,KAAAG,UAAA,IACCH,KAAAI,WAAA,KACJJ,KAAAK,QAAA,CAAC,GAAG,CAAA,GACFL,KAAAM,UAAA,CAAC,GAAG,CACDN,GAAAA,KAAAO,aAAA,CAAC,UAAU,KAAA,GACXP,KAAAQ,aAAA,CAAC,SAAS,KACVR,GAAAA,KAAAS,aAAA,CAAC,GAAG,CAAA,GACPT,KAAAU,UAAA,CAAC,KAAK,CACEV,GAAAA,KAAAW,gBAAA;AAAA,EAAA;AAAA,EAO7C,aAAaC,GAAAA;AACN,UAAAC,IAAOD,EAAQE,sBAAAA;AACrB,WACCD,EAAKE,OAAO,KACZF,EAAKG,QAAQ,KACbH,EAAKI,WAAWC,OAAOC,eAAeC,SAASC,gBAAgBC,iBAC/DT,EAAKU,UAAUL,OAAOM,cAAcJ,SAASC,gBAAgBI;AAAAA,EAAA;AAAA,EAI/D,MAAMC,eAAAA;AAEA1B,SAAA2B,QAAQC,YAAY5B,KAAK6B,YAAY,CAAA,EAAGC,YAAaC,QAAQ,OAAO,gCAAA,GAGzEC,EAECC,EAAS,EAAIC,EAAAA,KACZC,EAAU,EAAA,GACVC,EAAO,MAAA;AACA,YAAAvB,IAAOb,KAAKc,sBAAAA;AAClB,aAAOD,EAAKwB,QAAQ,KAAKxB,EAAKyB,SAAS;AAAA,IAAA,CAAA,GAExCC,EAAK,CAAA,CAAA,GAGNC,EAAUtB,QAAQ,QAAUgB,EAAAA,KAC3BO,EAAa,GAAA,QAAc,EAC1BC,SAAS,IACTC,UAAU,GAAA,CAAA,GAEXR,EAAU,EAAA,GACVS,EAAI,MAAM5C,KAAK6C,aAAa7C,IAC5B8C,CAAAA,GAAAA,EAAAA,GACAC,EAAkBC,CAAAA,MAAAA;AAAAA,OAEZA,KAAchD,KAAKW,iBACvBsC,MAAMC,KAAKlD,KAAK2B,QAAQwB,QAAAA,EAAUC,QAASC,CAAAA,MAAAA;AAC1CA,QAAAA,EAAOC,MAAMhD,UAAU;AAAA,MAAA,CACvB;AAAA,IAAA,CAAA,GAGH8B,SAAuBS,CAEvB7C,GAAAA,KAAKW,gBAAgBoC,EAAAA,IAAQR,EAAK,CAAA,GAClCQ,EAAI,EACHQ,MAAM,MAAA;AAEWvD,WAAKwD,WAAYC,iBAA8B,cAAA,EAEvDL,QAAQ,CAACC,GAAQK,MAAAA;AAGxB,cAAMC,IAAgB;AAAA,8BACC3D,KAAKO,WAAW,CAAA,CAAA,KAAOP,KAAKQ,WAAW,CAAOR,CAAAA,KAAAA,KAAKS,WAAW,CAAA,CAAA;AAAA,0BAClET,KAAKU,QAAQ,CACfV,CAAAA;AAAAA,wBAAAA,KAAKK,MAAM,CAAA,CAAA;AAAA,iBAGtBuD,IAAc;AAAA,8BACG5D,KAAKO,WAAW,CAAOP,CAAAA,KAAAA,KAAKQ,WAAW,CAAA,CAAA,KAAOR,KAAKS,WAAW,CAClET,CAAAA;AAAAA,0BAAAA,KAAKU,QAAQ,CAAA,CAAA;AAAA,wBACfV,KAAKK,MAAM,CAQtBwD,CAAAA;AAAAA,iBAAAA,IAAwB,CAC7B,EAAEC,WAAWH,GAAerD,SAASyD,OAAO/D,KAAKM,QAAQ,CACzD,CAAA,EAAA,GAAA,EAAEwD,WAAWF,GAAatD,SAASyD,OAAO/D,KAAKM,QAAQ,CAGxD+C,CAAAA,EAAAA,CAAAA;AAAAA,QAAAA,EAAOW,QAAQH,GAAW,EACzBzD,UAAUJ,KAAKI,UACf6D,QAXyC,EACzCC,SAAS,iCAAA,EAUSlE,KAAKC,IAAAA,KAAS,YAChCC,OAAOF,KAAKE,QAAQwD,IAAI1D,KAAKG,SAC7BgE,MAAM,WACN,CAAA;AAAA,MAAA,CAAA;AAAA,IACD,EAIHC,CAAAA,CAAAA,CAAAA,EAAAA,UAAAA;AAAAA,EAAU;AAAA,EAGb,SACQ;AAAA,WAAAC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,EAAA;AAAA;AA1GoBC,EAAA,CAA3BC,EAAS,EAAEC,MAAMT,OAAAA,CAAAA,CAAAA,GApBEpE,EAoBQ8E,WAAA,QAAA,CAAA,GACAH,EAAA,CAA3BC,EAAS,EAAEC,MAAME,OArBE/E,CAAAA,CAAAA,GAAAA,EAqBQ8E,WAAA,SAAA,CACAH,GAAAA,EAAA,CAA3BC,EAAS,EAAEC,MAAME,OAAAA,CAAAA,CAAAA,GAtBE/E,EAsBQ8E,WAAA,WAAA,CAAA,GACAH,EAAA,CAA3BC,EAAS,EAAEC,MAAME,OAvBE/E,CAAAA,CAAAA,GAAAA,EAuBQ8E,WAAA,YAAA,CACDH,GAAAA,EAAA,CAA1BC,EAAS,EAAEC,MAAMvB,MAxBEtD,CAAAA,CAAAA,GAAAA,EAwBO8E,WAAA,SAAA,CAAA,GACAH,EAAA,CAA1BC,EAAS,EAAEC,MAAMvB,MAAAA,CAAAA,CAAAA,GAzBEtD,EAyBO8E,WAAA,WAAA,CACAH,GAAAA,EAAA,CAA1BC,EAAS,EAAEC,MAAMvB,WA1BEtD,EA0BO8E,WAAA,cAAA,CAAA,GACAH,EAAA,CAA1BC,EAAS,EAAEC,MAAMvB,MAAAA,CAAAA,CAAAA,GA3BEtD,EA2BO8E,WAAA,cAAA,CAAA,GACAH,EAAA,CAA1BC,EAAS,EAAEC,MAAMvB,MA5BEtD,CAAAA,CAAAA,GAAAA,EA4BO8E,WAAA,cAAA,CACAH,GAAAA,EAAA,CAA1BC,EAAS,EAAEC,MAAMvB,MAAAA,CAAAA,CAAAA,GA7BEtD,EA6BO8E,WAAA,WAAA,CAAA,GACEH,EAAA,CAA5BC,EAAS,EAAEC,MAAMG,QA9BEhF,CAAAA,CAAAA,GAAAA,EA8BS8E,WAAA,iBAAA,IAEPH,EAAA,CAArBM,EAhCmBjF,CAAAA,GAAAA,EAgCE8E,WAAA,eAAA,CACHH,GAAAA,EAAA,CAAlBO,EAAM,UAAA,CAAA,GAjCalF,EAiCD8E,WAAA,WAAA,CAAA,GACJH,EAAA,CAAdO,EAAM,MAlCalF,CAAAA,GAAAA,EAkCL8E,WAAA,OAAA,CAlCK9E,GAAAA,IAArB2E,EAAA,CADCQ,EAAc,wBACMnF,CAAAA,GAAAA,CAAAA;"}
|
|
1
|
+
{"version":3,"file":"animated-text-Cb07SP6h.js","sources":["../src/animated-text/animated-text.ts"],"sourcesContent":["// Removed: import { createTimeline, stagger } from '@packages/anime-beta-master'\nimport { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, queryAssignedNodes } from 'lit/decorators.js'\nimport {\n\tconcat,\n\tdistinctUntilChanged,\n\tfilter,\n\tfromEvent,\n\tinterval,\n\tmap,\n\tstartWith,\n\ttake,\n\ttap,\n\tthrottleTime,\n} from 'rxjs'\n\n/**\n * @element schmancy-animated-text\n * Inspired by https://tobiasahlin.com/moving-letters/#1\n */\n@customElement('schmancy-animated-text')\nexport default class SchmancyAnimatedText extends $LitElement(css`\n\t:host {\n\t\tfont-family: inherit;\n\t\tdisplay: block;\n\t}\n\t.ml7 {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t}\n\t.ml7 .text-wrapper {\n\t\tposition: relative;\n\t\tdisplay: inline-block;\n\t\toverflow: hidden;\n\t}\n\t.ml7 .letter {\n\t\ttransform-origin: 0 100%;\n\t\tdisplay: inline-block;\n\t\topacity: 0;\n\t}\n`) {\n\t@property({ type: String }) ease = 'outExpo' // not a built-in string for Web Animations\n\t@property({ type: Number }) delay = 0\n\t@property({ type: Number }) stagger = 50\n\t@property({ type: Number }) duration = 750\n\t@property({ type: Array }) scale = [0, 1]\n\t@property({ type: Array }) opacity = [0, 1]\n\t@property({ type: Array }) translateX = ['0.55em', '0em']\n\t@property({ type: Array }) translateY = ['1.1em', '0em']\n\t@property({ type: Array }) translateZ = [0, 0]\n\t@property({ type: Array }) rotateZ = [180, 0]\n\t@property({ type: Boolean }) resetOnScroll = true\n\n\t@queryAssignedNodes() defaultSlot!: HTMLElement[]\n\t@query('.letters') letters!: HTMLElement\n\t@query('.ml7') ml7!: HTMLElement\n\n\t// Function to check if an element is in the viewport\n\tisInViewport(element: HTMLElement) {\n\t\tconst rect = element.getBoundingClientRect()\n\t\treturn (\n\t\t\trect.top >= 0 &&\n\t\t\trect.left >= 0 &&\n\t\t\trect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n\t\t\trect.right <= (window.innerWidth || document.documentElement.clientWidth)\n\t\t)\n\t}\n\n\tasync firstUpdated() {\n\t\t// Split the text into <span class=\"letter\"> ... </span> elements\n\t\tthis.letters.innerHTML = this.defaultSlot[0].textContent!.replace(/\\S/g, `<span class=\"letter\">$&</span>`)\n\n\t\t// Observe viewport + initial readiness\n\t\tconcat(\n\t\t\t// 1) Wait until the element is rendered (width/height > 0)\n\t\t\tinterval(10).pipe(\n\t\t\t\tstartWith(true),\n\t\t\t\tfilter(() => {\n\t\t\t\t\tconst rect = this.getBoundingClientRect()\n\t\t\t\t\treturn rect.width > 0 && rect.height > 0\n\t\t\t\t}),\n\t\t\t\ttake(1),\n\t\t\t),\n\t\t\t// 2) Then handle scroll events, throttled\n\t\t\tfromEvent(window, 'scroll').pipe(\n\t\t\t\tthrottleTime(0, undefined, {\n\t\t\t\t\tleading: true,\n\t\t\t\t\ttrailing: true,\n\t\t\t\t}),\n\t\t\t\tstartWith(true),\n\t\t\t\tmap(() => this.isInViewport(this)),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(inViewport => {\n\t\t\t\t\t// If leaving viewport and `resetOnScroll` is true, reset letters to opacity 0\n\t\t\t\t\tif (!inViewport && this.resetOnScroll) {\n\t\t\t\t\t\tArray.from(this.letters.children).forEach((letter: HTMLElement) => {\n\t\t\t\t\t\t\tletter.style.opacity = '0'\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tfilter(isInViewport => isInViewport),\n\t\t\t\t// If resetOnScroll = false, animate only the first time inView. If true, repeat.\n\t\t\t\tthis.resetOnScroll ? tap() : take(1),\n\t\t\t\ttap({\n\t\t\t\t\tnext: () => {\n\t\t\t\t\t\t// Animate letters with the native Web Animations API\n\t\t\t\t\t\tconst letters = this.shadowRoot!.querySelectorAll<HTMLElement>('.ml7 .letter')\n\n\t\t\t\t\t\tletters.forEach((letter, i) => {\n\t\t\t\t\t\t\t// Combine all transforms into one CSS transform string\n\t\t\t\t\t\t\t// From\n\t\t\t\t\t\t\tconst fromTransform = `\n translate3d(${this.translateX[0]}, ${this.translateY[0]}, ${this.translateZ[0]}px)\n rotateZ(${this.rotateZ[0]}deg)\n scale(${this.scale[0]})\n `\n\t\t\t\t\t\t\t// To\n\t\t\t\t\t\t\tconst toTransform = `\n translate3d(${this.translateX[1]}, ${this.translateY[1]}, ${this.translateZ[1]}px)\n rotateZ(${this.rotateZ[1]}deg)\n scale(${this.scale[1]})\n `\n\t\t\t\t\t\t\t// Approximate `outExpo` or pick a standard easing (like 'ease-out'):\n\t\t\t\t\t\t\t// outExpo often approximated by cubic-bezier(0.19, 1, 0.22, 1)\n\t\t\t\t\t\t\tconst easingMap: Record<string, string> = {\n\t\t\t\t\t\t\t\toutExpo: 'cubic-bezier(0.19, 1, 0.22, 1)',\n\t\t\t\t\t\t\t\t// add more if you want\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst keyframes: Keyframe[] = [\n\t\t\t\t\t\t\t\t{ transform: fromTransform, opacity: String(this.opacity[0]) },\n\t\t\t\t\t\t\t\t{ transform: toTransform, opacity: String(this.opacity[1]) },\n\t\t\t\t\t\t\t]\n\n\t\t\t\t\t\t\tletter.animate(keyframes, {\n\t\t\t\t\t\t\t\tduration: this.duration,\n\t\t\t\t\t\t\t\teasing: easingMap[this.ease] || 'ease-out',\n\t\t\t\t\t\t\t\tdelay: this.delay + i * this.stagger, // staggered start\n\t\t\t\t\t\t\t\tfill: 'forwards', // so the letters remain visible\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t),\n\t\t).subscribe()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<span class=\"ml7\">\n\t\t\t\t<span class=\"text-wrapper\">\n\t\t\t\t\t<span class=\"letters\">\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-animated-text': SchmancyAnimatedText\n\t}\n}\n"],"names":["SchmancyAnimatedText","$LitElement","css","super","arguments","this","ease","delay","stagger","duration","scale","opacity","translateX","translateY","translateZ","rotateZ","resetOnScroll","element","rect","getBoundingClientRect","top","left","bottom","window","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","firstUpdated","letters","innerHTML","defaultSlot","textContent","replace","concat","interval","pipe","startWith","filter","width","height","take","fromEvent","throttleTime","leading","trailing","map","isInViewport","distinctUntilChanged","tap","inViewport","Array","from","children","forEach","letter","style","next","shadowRoot","querySelectorAll","i","fromTransform","toTransform","keyframes","transform","String","animate","easing","outExpo","fill","subscribe","html","__decorateClass","property","type","prototype","Number","Boolean","queryAssignedNodes","query","customElement"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";const e=require("rxjs");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const h=require("./litElement.mixin-
|
|
1
|
+
"use strict";const e=require("rxjs");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const h=require("./litElement.mixin-0pIFA8ru.cjs");require("./tailwind.mixin-DFxMrwgk.cjs");const c=require("lit"),r=require("lit/decorators.js");var d=Object.defineProperty,u=Object.getOwnPropertyDescriptor,s=(i,a,p,n)=>{for(var l,o=n>1?void 0:n?u(a,p):a,y=i.length-1;y>=0;y--)(l=i[y])&&(o=(n?l(a,p,o):l(o))||o);return n&&o&&d(a,p,o),o};let t=class extends h.$LitElement(c.css`
|
|
2
2
|
:host {
|
|
3
3
|
font-family: inherit;
|
|
4
4
|
display: block;
|
|
@@ -34,4 +34,4 @@
|
|
|
34
34
|
</span>
|
|
35
35
|
</span>
|
|
36
36
|
`}};s([r.property({type:String})],t.prototype,"ease",2),s([r.property({type:Number})],t.prototype,"delay",2),s([r.property({type:Number})],t.prototype,"stagger",2),s([r.property({type:Number})],t.prototype,"duration",2),s([r.property({type:Array})],t.prototype,"scale",2),s([r.property({type:Array})],t.prototype,"opacity",2),s([r.property({type:Array})],t.prototype,"translateX",2),s([r.property({type:Array})],t.prototype,"translateY",2),s([r.property({type:Array})],t.prototype,"translateZ",2),s([r.property({type:Array})],t.prototype,"rotateZ",2),s([r.property({type:Boolean})],t.prototype,"resetOnScroll",2),s([r.queryAssignedNodes()],t.prototype,"defaultSlot",2),s([r.query(".letters")],t.prototype,"letters",2),s([r.query(".ml7")],t.prototype,"ml7",2),t=s([r.customElement("schmancy-animated-text")],t);
|
|
37
|
-
//# sourceMappingURL=animated-text-
|
|
37
|
+
//# sourceMappingURL=animated-text-DML1qmmR.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animated-text-DnX2TopW.cjs","sources":["../src/animated-text/animated-text.ts"],"sourcesContent":["// Removed: import { createTimeline, stagger } from '@packages/anime-beta-master'\nimport { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, queryAssignedNodes } from 'lit/decorators.js'\nimport {\n\tconcat,\n\tdistinctUntilChanged,\n\tfilter,\n\tfromEvent,\n\tinterval,\n\tmap,\n\tstartWith,\n\ttake,\n\ttap,\n\tthrottleTime,\n} from 'rxjs'\n\n/**\n * @element schmancy-animated-text\n * Inspired by https://tobiasahlin.com/moving-letters/#1\n */\n@customElement('schmancy-animated-text')\nexport default class SchmancyAnimatedText extends $LitElement(css`\n\t:host {\n\t\tfont-family: inherit;\n\t\tdisplay: block;\n\t}\n\t.ml7 {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t}\n\t.ml7 .text-wrapper {\n\t\tposition: relative;\n\t\tdisplay: inline-block;\n\t\toverflow: hidden;\n\t}\n\t.ml7 .letter {\n\t\ttransform-origin: 0 100%;\n\t\tdisplay: inline-block;\n\t\topacity: 0;\n\t}\n`) {\n\t@property({ type: String }) ease = 'outExpo' // not a built-in string for Web Animations\n\t@property({ type: Number }) delay = 0\n\t@property({ type: Number }) stagger = 50\n\t@property({ type: Number }) duration = 750\n\t@property({ type: Array }) scale = [0, 1]\n\t@property({ type: Array }) opacity = [0, 1]\n\t@property({ type: Array }) translateX = ['0.55em', '0em']\n\t@property({ type: Array }) translateY = ['1.1em', '0em']\n\t@property({ type: Array }) translateZ = [0, 0]\n\t@property({ type: Array }) rotateZ = [180, 0]\n\t@property({ type: Boolean }) resetOnScroll = true\n\n\t@queryAssignedNodes() defaultSlot!: HTMLElement[]\n\t@query('.letters') letters!: HTMLElement\n\t@query('.ml7') ml7!: HTMLElement\n\n\t// Function to check if an element is in the viewport\n\tisInViewport(element: HTMLElement) {\n\t\tconst rect = element.getBoundingClientRect()\n\t\treturn (\n\t\t\trect.top >= 0 &&\n\t\t\trect.left >= 0 &&\n\t\t\trect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n\t\t\trect.right <= (window.innerWidth || document.documentElement.clientWidth)\n\t\t)\n\t}\n\n\tasync firstUpdated() {\n\t\t// Split the text into <span class=\"letter\"> ... </span> elements\n\t\tthis.letters.innerHTML = this.defaultSlot[0].textContent!.replace(/\\S/g, `<span class=\"letter\">$&</span>`)\n\n\t\t// Observe viewport + initial readiness\n\t\tconcat(\n\t\t\t// 1) Wait until the element is rendered (width/height > 0)\n\t\t\tinterval(10).pipe(\n\t\t\t\tstartWith(true),\n\t\t\t\tfilter(() => {\n\t\t\t\t\tconst rect = this.getBoundingClientRect()\n\t\t\t\t\treturn rect.width > 0 && rect.height > 0\n\t\t\t\t}),\n\t\t\t\ttake(1),\n\t\t\t),\n\t\t\t// 2) Then handle scroll events, throttled\n\t\t\tfromEvent(window, 'scroll').pipe(\n\t\t\t\tthrottleTime(0, undefined, {\n\t\t\t\t\tleading: true,\n\t\t\t\t\ttrailing: true,\n\t\t\t\t}),\n\t\t\t\tstartWith(true),\n\t\t\t\tmap(() => this.isInViewport(this)),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(inViewport => {\n\t\t\t\t\t// If leaving viewport and `resetOnScroll` is true, reset letters to opacity 0\n\t\t\t\t\tif (!inViewport && this.resetOnScroll) {\n\t\t\t\t\t\tArray.from(this.letters.children).forEach((letter: HTMLElement) => {\n\t\t\t\t\t\t\tletter.style.opacity = '0'\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tfilter(isInViewport => isInViewport),\n\t\t\t\t// If resetOnScroll = false, animate only the first time inView. If true, repeat.\n\t\t\t\tthis.resetOnScroll ? tap() : take(1),\n\t\t\t\ttap({\n\t\t\t\t\tnext: () => {\n\t\t\t\t\t\t// Animate letters with the native Web Animations API\n\t\t\t\t\t\tconst letters = this.shadowRoot!.querySelectorAll<HTMLElement>('.ml7 .letter')\n\n\t\t\t\t\t\tletters.forEach((letter, i) => {\n\t\t\t\t\t\t\t// Combine all transforms into one CSS transform string\n\t\t\t\t\t\t\t// From\n\t\t\t\t\t\t\tconst fromTransform = `\n translate3d(${this.translateX[0]}, ${this.translateY[0]}, ${this.translateZ[0]}px)\n rotateZ(${this.rotateZ[0]}deg)\n scale(${this.scale[0]})\n `\n\t\t\t\t\t\t\t// To\n\t\t\t\t\t\t\tconst toTransform = `\n translate3d(${this.translateX[1]}, ${this.translateY[1]}, ${this.translateZ[1]}px)\n rotateZ(${this.rotateZ[1]}deg)\n scale(${this.scale[1]})\n `\n\t\t\t\t\t\t\t// Approximate `outExpo` or pick a standard easing (like 'ease-out'):\n\t\t\t\t\t\t\t// outExpo often approximated by cubic-bezier(0.19, 1, 0.22, 1)\n\t\t\t\t\t\t\tconst easingMap: Record<string, string> = {\n\t\t\t\t\t\t\t\toutExpo: 'cubic-bezier(0.19, 1, 0.22, 1)',\n\t\t\t\t\t\t\t\t// add more if you want\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst keyframes: Keyframe[] = [\n\t\t\t\t\t\t\t\t{ transform: fromTransform, opacity: String(this.opacity[0]) },\n\t\t\t\t\t\t\t\t{ transform: toTransform, opacity: String(this.opacity[1]) },\n\t\t\t\t\t\t\t]\n\n\t\t\t\t\t\t\tletter.animate(keyframes, {\n\t\t\t\t\t\t\t\tduration: this.duration,\n\t\t\t\t\t\t\t\teasing: easingMap[this.ease] || 'ease-out',\n\t\t\t\t\t\t\t\tdelay: this.delay + i * this.stagger, // staggered start\n\t\t\t\t\t\t\t\tfill: 'forwards', // so the letters remain visible\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t),\n\t\t).subscribe()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<span class=\"ml7\">\n\t\t\t\t<span class=\"text-wrapper\">\n\t\t\t\t\t<span class=\"letters\">\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-animated-text': SchmancyAnimatedText\n\t}\n}\n"],"names":["SchmancyAnimatedText","$LitElement","css","super","arguments","this","ease","delay","stagger","duration","scale","opacity","translateX","translateY","translateZ","rotateZ","resetOnScroll","element","rect","getBoundingClientRect","top","left","bottom","window","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","firstUpdated","letters","innerHTML","defaultSlot","textContent","replace","concat","interval","pipe","startWith","filter","width","height","take","fromEvent","throttleTime","leading","trailing","map","isInViewport","distinctUntilChanged","tap","inViewport","Array","from","children","forEach","letter","style","next","shadowRoot","querySelectorAll","i","fromTransform","toTransform","keyframes","transform","String","animate","easing","outExpo","fill","subscribe","html","__decorateClass","property","type","prototype","Number","Boolean","queryAssignedNodes","query","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"animated-text-DML1qmmR.cjs","sources":["../src/animated-text/animated-text.ts"],"sourcesContent":["// Removed: import { createTimeline, stagger } from '@packages/anime-beta-master'\nimport { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, queryAssignedNodes } from 'lit/decorators.js'\nimport {\n\tconcat,\n\tdistinctUntilChanged,\n\tfilter,\n\tfromEvent,\n\tinterval,\n\tmap,\n\tstartWith,\n\ttake,\n\ttap,\n\tthrottleTime,\n} from 'rxjs'\n\n/**\n * @element schmancy-animated-text\n * Inspired by https://tobiasahlin.com/moving-letters/#1\n */\n@customElement('schmancy-animated-text')\nexport default class SchmancyAnimatedText extends $LitElement(css`\n\t:host {\n\t\tfont-family: inherit;\n\t\tdisplay: block;\n\t}\n\t.ml7 {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t}\n\t.ml7 .text-wrapper {\n\t\tposition: relative;\n\t\tdisplay: inline-block;\n\t\toverflow: hidden;\n\t}\n\t.ml7 .letter {\n\t\ttransform-origin: 0 100%;\n\t\tdisplay: inline-block;\n\t\topacity: 0;\n\t}\n`) {\n\t@property({ type: String }) ease = 'outExpo' // not a built-in string for Web Animations\n\t@property({ type: Number }) delay = 0\n\t@property({ type: Number }) stagger = 50\n\t@property({ type: Number }) duration = 750\n\t@property({ type: Array }) scale = [0, 1]\n\t@property({ type: Array }) opacity = [0, 1]\n\t@property({ type: Array }) translateX = ['0.55em', '0em']\n\t@property({ type: Array }) translateY = ['1.1em', '0em']\n\t@property({ type: Array }) translateZ = [0, 0]\n\t@property({ type: Array }) rotateZ = [180, 0]\n\t@property({ type: Boolean }) resetOnScroll = true\n\n\t@queryAssignedNodes() defaultSlot!: HTMLElement[]\n\t@query('.letters') letters!: HTMLElement\n\t@query('.ml7') ml7!: HTMLElement\n\n\t// Function to check if an element is in the viewport\n\tisInViewport(element: HTMLElement) {\n\t\tconst rect = element.getBoundingClientRect()\n\t\treturn (\n\t\t\trect.top >= 0 &&\n\t\t\trect.left >= 0 &&\n\t\t\trect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n\t\t\trect.right <= (window.innerWidth || document.documentElement.clientWidth)\n\t\t)\n\t}\n\n\tasync firstUpdated() {\n\t\t// Split the text into <span class=\"letter\"> ... </span> elements\n\t\tthis.letters.innerHTML = this.defaultSlot[0].textContent!.replace(/\\S/g, `<span class=\"letter\">$&</span>`)\n\n\t\t// Observe viewport + initial readiness\n\t\tconcat(\n\t\t\t// 1) Wait until the element is rendered (width/height > 0)\n\t\t\tinterval(10).pipe(\n\t\t\t\tstartWith(true),\n\t\t\t\tfilter(() => {\n\t\t\t\t\tconst rect = this.getBoundingClientRect()\n\t\t\t\t\treturn rect.width > 0 && rect.height > 0\n\t\t\t\t}),\n\t\t\t\ttake(1),\n\t\t\t),\n\t\t\t// 2) Then handle scroll events, throttled\n\t\t\tfromEvent(window, 'scroll').pipe(\n\t\t\t\tthrottleTime(0, undefined, {\n\t\t\t\t\tleading: true,\n\t\t\t\t\ttrailing: true,\n\t\t\t\t}),\n\t\t\t\tstartWith(true),\n\t\t\t\tmap(() => this.isInViewport(this)),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(inViewport => {\n\t\t\t\t\t// If leaving viewport and `resetOnScroll` is true, reset letters to opacity 0\n\t\t\t\t\tif (!inViewport && this.resetOnScroll) {\n\t\t\t\t\t\tArray.from(this.letters.children).forEach((letter: HTMLElement) => {\n\t\t\t\t\t\t\tletter.style.opacity = '0'\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tfilter(isInViewport => isInViewport),\n\t\t\t\t// If resetOnScroll = false, animate only the first time inView. If true, repeat.\n\t\t\t\tthis.resetOnScroll ? tap() : take(1),\n\t\t\t\ttap({\n\t\t\t\t\tnext: () => {\n\t\t\t\t\t\t// Animate letters with the native Web Animations API\n\t\t\t\t\t\tconst letters = this.shadowRoot!.querySelectorAll<HTMLElement>('.ml7 .letter')\n\n\t\t\t\t\t\tletters.forEach((letter, i) => {\n\t\t\t\t\t\t\t// Combine all transforms into one CSS transform string\n\t\t\t\t\t\t\t// From\n\t\t\t\t\t\t\tconst fromTransform = `\n translate3d(${this.translateX[0]}, ${this.translateY[0]}, ${this.translateZ[0]}px)\n rotateZ(${this.rotateZ[0]}deg)\n scale(${this.scale[0]})\n `\n\t\t\t\t\t\t\t// To\n\t\t\t\t\t\t\tconst toTransform = `\n translate3d(${this.translateX[1]}, ${this.translateY[1]}, ${this.translateZ[1]}px)\n rotateZ(${this.rotateZ[1]}deg)\n scale(${this.scale[1]})\n `\n\t\t\t\t\t\t\t// Approximate `outExpo` or pick a standard easing (like 'ease-out'):\n\t\t\t\t\t\t\t// outExpo often approximated by cubic-bezier(0.19, 1, 0.22, 1)\n\t\t\t\t\t\t\tconst easingMap: Record<string, string> = {\n\t\t\t\t\t\t\t\toutExpo: 'cubic-bezier(0.19, 1, 0.22, 1)',\n\t\t\t\t\t\t\t\t// add more if you want\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst keyframes: Keyframe[] = [\n\t\t\t\t\t\t\t\t{ transform: fromTransform, opacity: String(this.opacity[0]) },\n\t\t\t\t\t\t\t\t{ transform: toTransform, opacity: String(this.opacity[1]) },\n\t\t\t\t\t\t\t]\n\n\t\t\t\t\t\t\tletter.animate(keyframes, {\n\t\t\t\t\t\t\t\tduration: this.duration,\n\t\t\t\t\t\t\t\teasing: easingMap[this.ease] || 'ease-out',\n\t\t\t\t\t\t\t\tdelay: this.delay + i * this.stagger, // staggered start\n\t\t\t\t\t\t\t\tfill: 'forwards', // so the letters remain visible\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t),\n\t\t).subscribe()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<span class=\"ml7\">\n\t\t\t\t<span class=\"text-wrapper\">\n\t\t\t\t\t<span class=\"letters\">\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-animated-text': SchmancyAnimatedText\n\t}\n}\n"],"names":["SchmancyAnimatedText","$LitElement","css","super","arguments","this","ease","delay","stagger","duration","scale","opacity","translateX","translateY","translateZ","rotateZ","resetOnScroll","element","rect","getBoundingClientRect","top","left","bottom","window","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","firstUpdated","letters","innerHTML","defaultSlot","textContent","replace","concat","interval","pipe","startWith","filter","width","height","take","fromEvent","throttleTime","leading","trailing","map","isInViewport","distinctUntilChanged","tap","inViewport","Array","from","children","forEach","letter","style","next","shadowRoot","querySelectorAll","i","fromTransform","toTransform","keyframes","transform","String","animate","easing","outExpo","fill","subscribe","html","__decorateClass","property","type","prototype","Number","Boolean","queryAssignedNodes","query","customElement"],"mappings":"qcAsBA,IAAqBA,EAArB,cAAkDC,EAAAA,YAAYC,EAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,CAA9D,CAAA,CAAA,aAAAC,CAAAA,MAAAA,GAAAC,SAoBoCC,EAAAA,KAAAC,KAAA,UACCD,KAAAE,MAAA,EACEF,KAAAG,QAAA,GACCH,KAAAI,SAAA,IACJJ,KAAAK,MAAA,CAAC,EAAG,CACFL,EAAAA,KAAAM,QAAA,CAAC,EAAG,CAAA,EACDN,KAAAO,WAAA,CAAC,SAAU,OACXP,KAAAQ,WAAA,CAAC,QAAS,KACVR,EAAAA,KAAAS,WAAA,CAAC,EAAG,CAAA,EACPT,KAAAU,QAAA,CAAC,IAAK,CACEV,EAAAA,KAAAW,gBAAA,CAO7C,aAAaC,EACN,CAAA,MAAAC,EAAOD,EAAQE,sBACrB,EAAA,OACCD,EAAKE,KAAO,GACZF,EAAKG,MAAQ,GACbH,EAAKI,SAAWC,OAAOC,aAAeC,SAASC,gBAAgBC,eAC/DT,EAAKU,QAAUL,OAAOM,YAAcJ,SAASC,gBAAgBI,YAAA,CAI/D,MAAMC,cAAAA,CAEA1B,KAAA2B,QAAQC,UAAY5B,KAAK6B,YAAY,CAAGC,EAAAA,YAAaC,QAAQ,MAAO,gCAGzEC,EAAAA,EAAAA,OAECC,EAAAA,SAAS,EAAA,EAAIC,KACZC,EAAAA,YACAC,EAAAA,EAAAA,OAAO,IAAA,CACA,MAAAvB,EAAOb,KAAKc,sBAAAA,EAClB,OAAOD,EAAKwB,MAAQ,GAAKxB,EAAKyB,OAAS,CAAA,CAAA,EAExCC,EAAAA,KAAK,CAAA,CAAA,EAGNC,YAAUtB,OAAQ,QAAA,EAAUgB,KAC3BO,EAAAA,aAAa,EAAA,OAAc,CAC1BC,QAAS,GACTC,SAAU,EAAA,CAAA,EAEXR,EAAAA,UAAU,EAAA,EACVS,EAAAA,IAAI,IAAM5C,KAAK6C,aAAa7C,IAAAA,CAAAA,EAC5B8C,yBACAC,MAAkBC,GAEZA,CAAAA,CAAAA,GAAchD,KAAKW,eACvBsC,MAAMC,KAAKlD,KAAK2B,QAAQwB,QAAAA,EAAUC,QAASC,GAAAA,CAC1CA,EAAOC,MAAMhD,QAAU,GAAA,CACvB,CAAA,CAAA,EAGH8B,YAAuBS,CAAAA,EAEvB7C,KAAKW,cAAgBoC,EAAAA,IAAQR,EAAAA,EAAAA,KAAK,CAAA,EAClCQ,MAAI,CACHQ,KAAM,IAEWvD,CAAAA,KAAKwD,WAAYC,iBAA8B,cAEvDL,EAAAA,QAAQ,CAACC,EAAQK,IAAAA,CAGxB,MAAMC,EAAgB;AAAA,8BACC3D,KAAKO,WAAW,CAAA,CAAA,KAAOP,KAAKQ,WAAW,CAAOR,CAAAA,KAAAA,KAAKS,WAAW,CAAA,CAAA;AAAA,0BAClET,KAAKU,QAAQ;wBACfV,KAAKK,MAAM,CAGtBuD,CAAAA;AAAAA,gBAAAA,EAAc;AAAA,8BACG5D,KAAKO,WAAW,CAAA,CAAA,KAAOP,KAAKQ,WAAW,CAAOR,CAAAA,KAAAA,KAAKS,WAAW,CAAA,CAAA;AAAA,0BAClET,KAAKU,QAAQ;wBACfV,KAAKK,MAAM,CAQtBwD,CAAAA;AAAAA,gBAAAA,EAAwB,CAC7B,CAAEC,UAAWH,EAAerD,QAASyD,OAAO/D,KAAKM,QAAQ,CACzD,CAAA,CAAA,EAAA,CAAEwD,UAAWF,EAAatD,QAASyD,OAAO/D,KAAKM,QAAQ,CAAA,CAAA,CAAA,CAAA,EAGxD+C,EAAOW,QAAQH,EAAW,CACzBzD,SAAUJ,KAAKI,SACf6D,OAXyC,CACzCC,QAAS,gCAUSlE,EAAAA,KAAKC,OAAS,WAChCC,MAAOF,KAAKE,MAAQwD,EAAI1D,KAAKG,QAC7BgE,KAAM,UACN,CAAA,CAAA,CAAA,CACD,CAIHC,CAAAA,CAAAA,CAAAA,EAAAA,UAAAA,CAAU,CAGb,QACQ,CAAA,OAAAC,EAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,GAAA,CAAA,EA1GoBC,EAAA,CAA3BC,WAAS,CAAEC,KAAMT,MAAAA,CAAAA,CAAAA,EApBEpE,EAoBQ8E,UAAA,OAAA,CACAH,EAAAA,EAAA,CAA3BC,WAAS,CAAEC,KAAME,MArBE/E,CAAAA,CAAAA,EAAAA,EAqBQ8E,UAAA,QAAA,CAAA,EACAH,EAAA,CAA3BC,WAAS,CAAEC,KAAME,MAAAA,CAAAA,CAAAA,EAtBE/E,EAsBQ8E,UAAA,UAAA,CACAH,EAAAA,EAAA,CAA3BC,WAAS,CAAEC,KAAME,MAvBE/E,CAAAA,CAAAA,EAAAA,EAuBQ8E,UAAA,WAAA,GACDH,EAAA,CAA1BC,WAAS,CAAEC,KAAMvB,KAAAA,CAAAA,CAAAA,EAxBEtD,EAwBO8E,UAAA,QAAA,CACAH,EAAAA,EAAA,CAA1BC,WAAS,CAAEC,KAAMvB,KAzBEtD,CAAAA,CAAAA,EAAAA,EAyBO8E,UAAA,UAAA,CAAA,EACAH,EAAA,CAA1BC,WAAS,CAAEC,KAAMvB,KAAAA,CAAAA,CAAAA,EA1BEtD,EA0BO8E,UAAA,aAAA,CACAH,EAAAA,EAAA,CAA1BC,WAAS,CAAEC,KAAMvB,KA3BEtD,CAAAA,CAAAA,EAAAA,EA2BO8E,UAAA,aAAA,GACAH,EAAA,CAA1BC,WAAS,CAAEC,KAAMvB,KAAAA,CAAAA,CAAAA,EA5BEtD,EA4BO8E,UAAA,aAAA,CACAH,EAAAA,EAAA,CAA1BC,WAAS,CAAEC,KAAMvB,KA7BEtD,CAAAA,CAAAA,EAAAA,EA6BO8E,UAAA,UAAA,CAAA,EACEH,EAAA,CAA5BC,WAAS,CAAEC,KAAMG,OAAAA,CAAAA,CAAAA,EA9BEhF,EA8BS8E,UAAA,gBAAA,CAAA,EAEPH,EAAA,CAArBM,EAAmBA,mBAhCAjF,CAAAA,EAAAA,EAgCE8E,UAAA,cAAA,CAAA,EACHH,EAAA,CAAlBO,EAAAA,MAAM,UAAA,CAAA,EAjCalF,EAiCD8E,UAAA,UAAA,CACJH,EAAAA,EAAA,CAAdO,EAAAA,MAAM,MAlCalF,CAAAA,EAAAA,EAkCL8E,UAAA,MAAA,GAlCK9E,EAArB2E,EAAA,CADCQ,EAAAA,cAAc,wBACMnF,CAAAA,EAAAA,CAAAA"}
|
package/dist/animated-text.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";require("./animated-text-
|
|
1
|
+
"use strict";require("./animated-text-DML1qmmR.cjs");
|
|
2
2
|
//# sourceMappingURL=animated-text.cjs.map
|
package/dist/animated-text.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import "./animated-text-
|
|
1
|
+
import "./animated-text-Cb07SP6h.js";
|
|
2
2
|
//# sourceMappingURL=animated-text.js.map
|
package/dist/area.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./area.component-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./area.component-Psgv50Lq.cjs"),e=require("./utils-BqFGvnN9.cjs");exports.FINDING_MORTIES=t.FINDING_MORTIES,exports.HERE_RICKY=t.HERE_RICKY,exports.HISTORY_STRATEGY=t.HISTORY_STRATEGY,Object.defineProperty(exports,"SchmancyArea",{enumerable:!0,get:()=>t.SchmancyArea}),exports.area=t.area,exports.routerHistory=t.routerHistory,exports.buildQueryString=e.buildQueryString,exports.compareActiveRoutes=e.compareActiveRoutes,exports.compareCustomElementConstructors=e.compareCustomElementConstructors,exports.compareRouteActions=e.compareRouteActions,exports.createRouteCacheKey=e.createRouteCacheKey,exports.debounce=e.debounce,exports.decodeRouteState=e.decodeRouteState,exports.deepMerge=e.deepMerge,exports.encodeRouteState=e.encodeRouteState,exports.extractQueryParams=e.extractQueryParams,exports.getTagName=e.getTagName,exports.isObject=e.isObject,exports.normalizeTagName=e.normalizeTagName,exports.sanitizeRouteState=e.sanitizeRouteState;
|
|
2
2
|
//# sourceMappingURL=area.cjs.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Subject as J, ReplaySubject as y, distinctUntilChanged as u, shareReplay as C, skip as N, map as s, filter as m, catchError as i, EMPTY as p, zip as $, fromEvent as E, of as c, bufferTime as j, tap as O, timeout as P, merge as q, switchMap as g, take as x, takeUntil as w, from as U } from "rxjs";
|
|
2
2
|
import "lit/directives/class-map.js";
|
|
3
3
|
import "lit/directives/style-map.js";
|
|
4
|
-
import { $ as I } from "./litElement.mixin-
|
|
5
|
-
import "./tailwind.mixin-
|
|
4
|
+
import { $ as I } from "./litElement.mixin-BKgKxczr.js";
|
|
5
|
+
import "./tailwind.mixin-k9HTphsu.js";
|
|
6
6
|
import { css as M, html as k } from "lit";
|
|
7
7
|
import { property as A, customElement as L } from "lit/decorators.js";
|
|
8
8
|
import { l as T } from "./index-CuY8m6ta.js";
|
|
@@ -188,4 +188,4 @@ export {
|
|
|
188
188
|
v as b,
|
|
189
189
|
R as r
|
|
190
190
|
};
|
|
191
|
-
//# sourceMappingURL=area.component-
|
|
191
|
+
//# sourceMappingURL=area.component-CdFovqHE.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"area.component-DMD20wqd.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-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,8 +1,8 @@
|
|
|
1
|
-
"use strict";const r=require("rxjs");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const S=require("./litElement.mixin-
|
|
1
|
+
"use strict";const r=require("rxjs");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const S=require("./litElement.mixin-0pIFA8ru.cjs");require("./tailwind.mixin-DFxMrwgk.cjs");const f=require("lit"),m=require("lit/decorators.js"),w=require("./index-DyJ0oDpR.cjs"),d=new r.Subject,y="FINDING_MORTIES",g="HERE_RICKY",u=new WeakMap;class c{constructor(){this.prettyURL=!1,this.mode="HISTORY",this.request=new r.ReplaySubject(1),this.current=new Map,this.$current=new r.ReplaySubject(1),this.enableHistoryMode=!0,this.findingMortiesEvent=new CustomEvent(y),this.disposed=!1,this.$current.next(this.current),this.$current.subscribe(e=>{this.disposed||e.forEach((t,n)=>{this.getOrCreateAreaSubject(n).next(t)})})}get areaSubjects(){let e=u.get(this);return e||(e=new Map,u.set(this,e)),e}getOrCreateAreaSubject(e){let t=this.areaSubjects.get(e);if(!t||t.closed){t=new r.ReplaySubject(1),this.areaSubjects.set(e,t);const n=this.current.get(e);n&&t.next({...n,state:n.state||{},params:n.params||{}})}return t}on(e,t=!1){if(!e)throw new Error("Area name is required");const n=this.getOrCreateAreaSubject(e).asObservable().pipe(r.distinctUntilChanged((s,i)=>s.component===i.component&&JSON.stringify(s.state)===JSON.stringify(i.state)&&JSON.stringify(s.params)===JSON.stringify(i.params)),r.shareReplay(1));return t?n.pipe(r.skip(1)):n}all(e=!1){const t=this.$current.asObservable().pipe(r.shareReplay(1));return e?t.pipe(r.skip(1)):t}getState(e){if(!e)throw new Error("Area name is required");return this.on(e).pipe(r.map(t=>t.state),r.filter(t=>t!=null),r.distinctUntilChanged((t,n)=>JSON.stringify(t)===JSON.stringify(n)),r.map(t=>t),r.catchError(t=>r.EMPTY))}params(e){if(!e)throw new Error("Area name is required");return this.on(e).pipe(r.map(t=>t.params),r.filter(t=>t!=null),r.distinctUntilChanged((t,n)=>JSON.stringify(t)===JSON.stringify(n)),r.map(t=>t),r.catchError(t=>r.EMPTY))}param(e,t){if(!e||!t)throw new Error("Area name and key are required");return this.params(e).pipe(r.map(n=>n[t]),r.filter(n=>n!==void 0),r.distinctUntilChanged(),r.map(n=>n),r.catchError(n=>r.EMPTY))}find(){return r.zip([r.fromEvent(window,g).pipe(r.map(e=>e.detail),r.bufferTime(0)),r.of(1).pipe(r.tap(()=>window.dispatchEvent(this.findingMortiesEvent)))]).pipe(r.map(([e])=>e),r.timeout(1),r.catchError(()=>r.EMPTY))}push(e){if(!e.area)throw new Error("Area is required for route action");const t={...e,state:e.state||{},params:e.params||{}};this.enableHistoryMode&&d.next(t),this.request.next(t),this.dispatchAreaEvent(t.area,t)}dispatchAreaEvent(e,t){const n=new CustomEvent(`schmancy-area-${e}-changed`,{detail:{area:e,component:t.component,state:t.state,params:t.params,historyStrategy:t.historyStrategy},bubbles:!0,composed:!0});window.dispatchEvent(n)}pop(e){if(!e)throw new Error("Area name is required");const t={...this.state};delete t[e];const n=encodeURIComponent(JSON.stringify(t));history.replaceState(null,"",`/${n}${location.search}`),this.current.delete(e),this.$current.next(this.current);const s=this.areaSubjects.get(e);s&&(s.complete(),this.areaSubjects.delete(e))}clear(){this.areaSubjects.forEach(e=>e.complete()),this.areaSubjects.clear(),this.current.clear(),this.$current.next(this.current),history.replaceState(null,"",`/${location.search}`)}dispose(){this.disposed||(this.disposed=!0,this.areaSubjects.forEach(e=>e.complete()),this.areaSubjects.clear(),this.request.complete(),this.$current.complete(),d.complete(),this.current.clear(),u.delete(this))}static getInstance(){return c.instance||(c.instance=new c),c.instance}get state(){const e=location.pathname.split("/").pop();if(!e)return{};try{const t=decodeURIComponent(e),n=JSON.parse(t);if(typeof n=="object"&&n!==null)return n}catch{}return{}}hasArea(e){return this.current.has(e)}getActiveAreas(){return Array.from(this.current.keys())}getRoute(e){return this.current.get(e)}}const o=c.getInstance();typeof window<"u"&&window.addEventListener("unload",()=>{o.dispose()});var p=(a=>(a.push="push",a.replace="replace",a.pop="pop",a.silent="silent",a))(p||{}),E=Object.defineProperty,b=Object.getOwnPropertyDescriptor,l=(a,e,t,n)=>{for(var s,i=n>1?void 0:n?b(e,t):e,h=a.length-1;h>=0;h--)(s=a[h])&&(i=(n?s(e,t,i):s(i))||i);return n&&i&&E(e,t,i),i};exports.SchmancyArea=class extends S.$LitElement(f.css`
|
|
2
2
|
:host {
|
|
3
3
|
position: relative;
|
|
4
4
|
display: block;
|
|
5
5
|
inset: 0;
|
|
6
6
|
}
|
|
7
7
|
`){getComponentFromPathname(a,e){return r.of(a).pipe(r.map(t=>t.split("/").pop()??""),r.map(t=>{try{return JSON.parse(decodeURIComponent(t))}catch{return{}}}),r.map(t=>t[this.name]),r.map(t=>!t&&this.default?{component:this.default,state:void 0}:t),r.filter(t=>w.libExports.isPresent(t)),r.map(t=>({area:this.name,component:t.component??this.default,state:t.state,historyStrategy:e})),r.map(t=>t),r.catchError(()=>this.default?r.of({area:this.name,component:this.default,historyStrategy:e}):r.EMPTY))}firstUpdated(){if(!this.name)throw new Error("Area name or default component not set");r.merge(r.of(location.pathname).pipe(r.switchMap(a=>this.getComponentFromPathname(a,p.silent)),r.map(a=>a),r.take(1)),o.request.pipe(r.filter(({area:a})=>a===this.name)),r.fromEvent(window,"popstate").pipe(r.map(a=>a.target.location.pathname),r.switchMap(a=>this.getComponentFromPathname(a,p.silent)),r.map(a=>a))).pipe(r.filter(a=>!!a.component),r.takeUntil(this.disconnecting),r.distinctUntilChanged((a,e)=>{let t,n;if(typeof a.component=="function"||(typeof a.component=="string"&&(t=a.component),typeof e.component=="function"))return!1;typeof e.component=="string"&&(n=e.component);const s=(n==null?void 0:n.replaceAll("-","").toLowerCase())===(t==null?void 0:t.replaceAll("-","").toLowerCase()),i=JSON.stringify(a.params||{})===JSON.stringify(e.params||{});return s&&i})).pipe(r.switchMap(a=>{const e=a.component;return e instanceof Promise?r.from(e).pipe(r.map(t=>{var n;return{component:((n=t.exports)==null?void 0:n.default)||t.default,route:a}}),r.catchError(()=>r.EMPTY)):r.of({component:e,route:a})}),r.map(({component:a,route:e})=>{let t;return t=typeof a=="string"?document.createElement(a):a instanceof HTMLElement?a:typeof a=="function"?new a:a,e.params&&Object.entries(e.params).forEach(([n,s])=>{t[n]=s}),e.state&&(t.state=e.state),{component:t,route:e}}),r.map(({component:a,route:e})=>{var s,i;const t=(s=this.shadowRoot)==null?void 0:s.children[0],n=!!t;return t==null||t.remove(),a.classList.add("opacity-0"),(i=this.shadowRoot)==null||i.append(a),a.animate([{opacity:0},{opacity:1}],{duration:n?150:100,easing:"cubic-bezier(0.25, 0.8, 0.25, 1)",fill:"forwards"}),{component:a,route:e}}),r.tap(({component:a,route:e})=>{e.historyStrategy===void 0||e.historyStrategy==="push"?history.pushState(e.state,"",this.newPath(a.tagName,e)):e.historyStrategy&&["replace","pop"].includes(e.historyStrategy)&&history.replaceState(e.state,"",this.newPath(a.tagName,e)),o.current.set(this.name,{component:a.tagName,state:e.state||{},area:this.name,params:e.params||{}}),o.$current.next(o.current)}),r.takeUntil(this.disconnecting)).subscribe()}newPath(a,e){const t=location.pathname.split("/").pop();let n={};try{n=t?JSON.parse(decodeURIComponent(t)):{}}catch{n={}}e.state=e.state??{};const s=e.clearQueryParams?this.queryParamClear(e.clearQueryParams):document.location.search;return encodeURIComponent(JSON.stringify({...n,[this.name]:{component:a.toLowerCase(),state:e.state,params:e.params}})).concat(`${s}`)}queryParamClear(a){if(!a)return"";const e=new URLSearchParams(location.search);return a.forEach(t=>e.delete(t)),e.toString()===""?"":`?${e.toString()}`}checkForTeleportationRequests(){return r.fromEvent(window,"FLIP_REQUEST").pipe(r.map(a=>a.detail),r.bufferTime(0),r.tap(()=>{this.dispatchEvent(new CustomEvent("FLIP_STARTED"))}),r.takeUntil(this.disconnecting),r.timeout(0),r.catchError(()=>r.of(null)))}disconnectedCallback(){super.disconnectedCallback(),this.disconnecting.next(!0),this.disconnecting.complete()}render(){return f.html` <slot> </slot> `}},l([m.property()],exports.SchmancyArea.prototype,"name",2),l([m.property()],exports.SchmancyArea.prototype,"default",2),exports.SchmancyArea=l([m.customElement("schmancy-area")],exports.SchmancyArea),exports.FINDING_MORTIES=y,exports.HERE_RICKY=g,exports.HISTORY_STRATEGY=p,exports.area=o,exports.routerHistory=d;
|
|
8
|
-
//# sourceMappingURL=area.component-
|
|
8
|
+
//# sourceMappingURL=area.component-Psgv50Lq.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"area.component-Vs2WGXgk.cjs","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","getInstance","instance","pathname","split","pop","decoded","decodeURIComponent","parsed","parse","has","Array","from","keys","addEventListener","dispose","HISTORY_STRATEGY","SchmancyArea","$LitElement","css","path","routes","default","x","isPresent","libExports","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","checkForTeleportationRequests","super","disconnectedCallback","html","__decorateClass","property","prototype","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"area.component-Psgv50Lq.cjs","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","getInstance","instance","pathname","split","pop","decoded","decodeURIComponent","parsed","parse","has","Array","from","keys","addEventListener","dispose","HISTORY_STRATEGY","SchmancyArea","$LitElement","css","path","routes","default","x","isPresent","libExports","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","checkForTeleportationRequests","super","disconnectedCallback","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-CdFovqHE.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,
|