@mhmo91/schmancy 0.4.75 → 0.4.77

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.
Files changed (343) hide show
  1. package/ai/chips.md +350 -128
  2. package/ai/typography.md +66 -8
  3. package/dist/ai/chips.md +350 -128
  4. package/dist/ai/typography.md +66 -8
  5. package/dist/{animated-text-CqpyC7Y0.js → animated-text-CTMDHCbw.js} +6 -6
  6. package/dist/{animated-text-CqpyC7Y0.js.map → animated-text-CTMDHCbw.js.map} +1 -1
  7. package/dist/{animated-text-DlRt6Q09.cjs → animated-text-yAIb26ld.cjs} +2 -2
  8. package/dist/{animated-text-DlRt6Q09.cjs.map → animated-text-yAIb26ld.cjs.map} +1 -1
  9. package/dist/animated-text.cjs +1 -1
  10. package/dist/animated-text.js +1 -1
  11. package/dist/area.cjs +1 -1
  12. package/dist/area.js +1 -1
  13. package/dist/{autocomplete-BOGG_9iL.cjs → autocomplete-BYiDoFG_.cjs} +2 -2
  14. package/dist/{autocomplete-BOGG_9iL.cjs.map → autocomplete-BYiDoFG_.cjs.map} +1 -1
  15. package/dist/{autocomplete-B-oKMH7m.js → autocomplete-m-nEVE3h.js} +6 -6
  16. package/dist/{autocomplete-B-oKMH7m.js.map → autocomplete-m-nEVE3h.js.map} +1 -1
  17. package/dist/autocomplete.cjs +1 -1
  18. package/dist/autocomplete.js +1 -1
  19. package/dist/{avatar-C27bnQKE.cjs → avatar-DjCNlJz6.cjs} +2 -2
  20. package/dist/{avatar-C27bnQKE.cjs.map → avatar-DjCNlJz6.cjs.map} +1 -1
  21. package/dist/{avatar-DKVNl5rX.js → avatar-nxVn--Oo.js} +48 -48
  22. package/dist/{avatar-DKVNl5rX.js.map → avatar-nxVn--Oo.js.map} +1 -1
  23. package/dist/badge.cjs +1 -1
  24. package/dist/badge.js +1 -1
  25. package/dist/{boat-DMKcZpZb.cjs → boat-_ZRYkQQZ.cjs} +2 -2
  26. package/dist/{boat-DMKcZpZb.cjs.map → boat-_ZRYkQQZ.cjs.map} +1 -1
  27. package/dist/{boat-CdR5Pqik.js → boat-sl3amQ3s.js} +2 -2
  28. package/dist/{boat-CdR5Pqik.js.map → boat-sl3amQ3s.js.map} +1 -1
  29. package/dist/boat.cjs +1 -1
  30. package/dist/boat.js +1 -1
  31. package/dist/busy.cjs +1 -1
  32. package/dist/busy.js +1 -1
  33. package/dist/button.cjs +1 -1
  34. package/dist/button.js +1 -1
  35. package/dist/card.cjs +1 -1
  36. package/dist/card.js +1 -1
  37. package/dist/checkbox-HdmRM2Vg.cjs +40 -0
  38. package/dist/checkbox-HdmRM2Vg.cjs.map +1 -0
  39. package/dist/checkbox-zTyMywpJ.js +527 -0
  40. package/dist/checkbox-zTyMywpJ.js.map +1 -0
  41. package/dist/checkbox.cjs +1 -1
  42. package/dist/checkbox.js +1 -1
  43. package/dist/chips-DAkLLDRf.js +577 -0
  44. package/dist/chips-DAkLLDRf.js.map +1 -0
  45. package/dist/chips-DDDu8hh9.cjs +324 -0
  46. package/dist/chips-DDDu8hh9.cjs.map +1 -0
  47. package/dist/chips.cjs +1 -1
  48. package/dist/chips.js +9 -1
  49. package/dist/code-highlight.cjs +1 -1
  50. package/dist/code-highlight.js +1 -1
  51. package/dist/{code-preview-CdCzzZTX.cjs → code-preview-BxO04VVx.cjs} +2 -2
  52. package/dist/{code-preview-CdCzzZTX.cjs.map → code-preview-BxO04VVx.cjs.map} +1 -1
  53. package/dist/{code-preview-CIXEd04f.js → code-preview-DH3koGm9.js} +7 -7
  54. package/dist/{code-preview-CIXEd04f.js.map → code-preview-DH3koGm9.js.map} +1 -1
  55. package/dist/components.cjs +1 -1
  56. package/dist/components.js +1 -1
  57. package/dist/content-drawer.cjs +1 -1
  58. package/dist/content-drawer.js +1 -1
  59. package/dist/{date-range-CvD9zwK9.cjs → date-range-TJXLY7Yx.cjs} +2 -2
  60. package/dist/{date-range-CvD9zwK9.cjs.map → date-range-TJXLY7Yx.cjs.map} +1 -1
  61. package/dist/{date-range-inline-CP_a_w01.cjs → date-range-inline-BSqXKZ3-.cjs} +2 -2
  62. package/dist/{date-range-inline-CP_a_w01.cjs.map → date-range-inline-BSqXKZ3-.cjs.map} +1 -1
  63. package/dist/{date-range-inline-5QP9av94.js → date-range-inline-CUb59TOM.js} +3 -3
  64. package/dist/{date-range-inline-5QP9av94.js.map → date-range-inline-CUb59TOM.js.map} +1 -1
  65. package/dist/date-range-inline.cjs +1 -1
  66. package/dist/date-range-inline.js +1 -1
  67. package/dist/{date-range-lJ_fPY4v.js → date-range-sfDUF7dG.js} +8 -8
  68. package/dist/{date-range-lJ_fPY4v.js.map → date-range-sfDUF7dG.js.map} +1 -1
  69. package/dist/date-range.cjs +1 -1
  70. package/dist/date-range.js +1 -1
  71. package/dist/{delay-BM1jk7XF.js → delay-CHpGPLLr.js} +2 -2
  72. package/dist/{delay-BM1jk7XF.js.map → delay-CHpGPLLr.js.map} +1 -1
  73. package/dist/{delay-CB0Wohe7.cjs → delay-CbXOIuAd.cjs} +2 -2
  74. package/dist/{delay-CB0Wohe7.cjs.map → delay-CbXOIuAd.cjs.map} +1 -1
  75. package/dist/delay.cjs +1 -1
  76. package/dist/delay.js +1 -1
  77. package/dist/{details-B9JrXrCO.js → details-Cf7zosIT.js} +5 -5
  78. package/dist/{details-B9JrXrCO.js.map → details-Cf7zosIT.js.map} +1 -1
  79. package/dist/{details-C22WoRWP.cjs → details-D6yYIQaE.cjs} +2 -2
  80. package/dist/{details-C22WoRWP.cjs.map → details-D6yYIQaE.cjs.map} +1 -1
  81. package/dist/details.cjs +1 -1
  82. package/dist/details.js +1 -1
  83. package/dist/{dialog-content-BHR9cUJ-.js → dialog-content-BabnHd-t.js} +10 -10
  84. package/dist/{dialog-content-BHR9cUJ-.js.map → dialog-content-BabnHd-t.js.map} +1 -1
  85. package/dist/{dialog-content-CpxWMPlh.cjs → dialog-content-BkK0XT-T.cjs} +2 -2
  86. package/dist/{dialog-content-CpxWMPlh.cjs.map → dialog-content-BkK0XT-T.cjs.map} +1 -1
  87. package/dist/dialog.cjs +1 -1
  88. package/dist/dialog.js +1 -1
  89. package/dist/{divider-DAg0oW4T.cjs → divider-CQ9PTETp.cjs} +2 -2
  90. package/dist/{divider-DAg0oW4T.cjs.map → divider-CQ9PTETp.cjs.map} +1 -1
  91. package/dist/{divider-Cz4g_Ept.js → divider-DyNmX5oP.js} +6 -6
  92. package/dist/{divider-Cz4g_Ept.js.map → divider-DyNmX5oP.js.map} +1 -1
  93. package/dist/divider.cjs +1 -1
  94. package/dist/divider.js +1 -1
  95. package/dist/{dropdown-content-Bto1swKT.js → dropdown-content-1g76XIVT.js} +6 -6
  96. package/dist/{dropdown-content-Bto1swKT.js.map → dropdown-content-1g76XIVT.js.map} +1 -1
  97. package/dist/{dropdown-content-QvR9QvT0.cjs → dropdown-content-DwiI2xi1.cjs} +3 -3
  98. package/dist/{dropdown-content-QvR9QvT0.cjs.map → dropdown-content-DwiI2xi1.cjs.map} +1 -1
  99. package/dist/dropdown.cjs +1 -1
  100. package/dist/dropdown.js +1 -1
  101. package/dist/{email-recipients-C9Yx0eML.js → email-recipients-BJsjr6H6.js} +5 -5
  102. package/dist/{email-recipients-C9Yx0eML.js.map → email-recipients-BJsjr6H6.js.map} +1 -1
  103. package/dist/{email-recipients-aEI5Hz1y.cjs → email-recipients-BiPVR8Hi.cjs} +2 -2
  104. package/dist/{email-recipients-aEI5Hz1y.cjs.map → email-recipients-BiPVR8Hi.cjs.map} +1 -1
  105. package/dist/extra.cjs +1 -1
  106. package/dist/extra.js +1 -1
  107. package/dist/{flex-8Zt64KfZ.js → flex-0kVSQTqk.js} +2 -2
  108. package/dist/{flex-8Zt64KfZ.js.map → flex-0kVSQTqk.js.map} +1 -1
  109. package/dist/{flex-BWZv2xik.cjs → flex-CYToPu65.cjs} +2 -2
  110. package/dist/{flex-BWZv2xik.cjs.map → flex-CYToPu65.cjs.map} +1 -1
  111. package/dist/{form-BH43OMu3.cjs → form-BTIOJob0.cjs} +2 -2
  112. package/dist/{form-BH43OMu3.cjs.map → form-BTIOJob0.cjs.map} +1 -1
  113. package/dist/{form-DeoSuBtM.js → form-CzSHXlhh.js} +7 -7
  114. package/dist/{form-DeoSuBtM.js.map → form-CzSHXlhh.js.map} +1 -1
  115. package/dist/form.cjs +1 -1
  116. package/dist/form.js +1 -1
  117. package/dist/{formField.mixin-Dta3OeAY.cjs → formField.mixin-BE8yyY7E.cjs} +2 -2
  118. package/dist/{formField.mixin-Dta3OeAY.cjs.map → formField.mixin-BE8yyY7E.cjs.map} +1 -1
  119. package/dist/{formField.mixin-BaPL0TYo.js → formField.mixin-D3pQ9LTE.js} +2 -2
  120. package/dist/{formField.mixin-BaPL0TYo.js.map → formField.mixin-D3pQ9LTE.js.map} +1 -1
  121. package/dist/icon-CB8zMasU.js +85 -0
  122. package/dist/icon-CB8zMasU.js.map +1 -0
  123. package/dist/icon-DxLigT_B.cjs +49 -0
  124. package/dist/icon-DxLigT_B.cjs.map +1 -0
  125. package/dist/{icon-button-D1GjgM8z.cjs → icon-button-B6sa3c9D.cjs} +2 -2
  126. package/dist/{icon-button-D1GjgM8z.cjs.map → icon-button-B6sa3c9D.cjs.map} +1 -1
  127. package/dist/{icon-button-OZM1xg0D.js → icon-button-n_1iOQGQ.js} +8 -8
  128. package/dist/{icon-button-OZM1xg0D.js.map → icon-button-n_1iOQGQ.js.map} +1 -1
  129. package/dist/icons.cjs +1 -1
  130. package/dist/icons.js +1 -1
  131. package/dist/index.cjs +1 -1
  132. package/dist/index.js +232 -226
  133. package/dist/{input-CkvjCut5.js → input-BAJnPVSv.js} +3 -3
  134. package/dist/{input-CkvjCut5.js.map → input-BAJnPVSv.js.map} +1 -1
  135. package/dist/{input-lUWuO40Q.cjs → input-FXEREBl6.cjs} +2 -2
  136. package/dist/{input-lUWuO40Q.cjs.map → input-FXEREBl6.cjs.map} +1 -1
  137. package/dist/input.cjs +1 -1
  138. package/dist/input.js +1 -1
  139. package/dist/layout.cjs +1 -1
  140. package/dist/layout.js +1 -1
  141. package/dist/{list-CIt75CB5.cjs → list-TbB9Rpwx.cjs} +2 -2
  142. package/dist/{list-CIt75CB5.cjs.map → list-TbB9Rpwx.cjs.map} +1 -1
  143. package/dist/{list-5rw56k73.js → list-ZeNhyo74.js} +7 -7
  144. package/dist/{list-5rw56k73.js.map → list-ZeNhyo74.js.map} +1 -1
  145. package/dist/list.cjs +1 -1
  146. package/dist/list.js +1 -1
  147. package/dist/{litElement.mixin-BZErt4H3.js → litElement.mixin-DVZiIRUa.js} +2 -2
  148. package/dist/{litElement.mixin-BZErt4H3.js.map → litElement.mixin-DVZiIRUa.js.map} +1 -1
  149. package/dist/{litElement.mixin-BLa7fWsS.cjs → litElement.mixin-N4BRrCeD.cjs} +2 -2
  150. package/dist/{litElement.mixin-BLa7fWsS.cjs.map → litElement.mixin-N4BRrCeD.cjs.map} +1 -1
  151. package/dist/mailbox.cjs +1 -1
  152. package/dist/mailbox.js +1 -1
  153. package/dist/{map-BY_0W4ER.cjs → map-DW4GhKaH.cjs} +2 -2
  154. package/dist/{map-BY_0W4ER.cjs.map → map-DW4GhKaH.cjs.map} +1 -1
  155. package/dist/{map-BrguuFGa.js → map-ck5dlHEW.js} +5 -5
  156. package/dist/{map-BrguuFGa.js.map → map-ck5dlHEW.js.map} +1 -1
  157. package/dist/map.cjs +1 -1
  158. package/dist/map.js +1 -1
  159. package/dist/{media-D6ZtvTjC.cjs → media-C9Qy2mql.cjs} +2 -2
  160. package/dist/{media-D6ZtvTjC.cjs.map → media-C9Qy2mql.cjs.map} +1 -1
  161. package/dist/{media-CLz2t5zS.js → media-CunGFwol.js} +11 -11
  162. package/dist/{media-CLz2t5zS.js.map → media-CunGFwol.js.map} +1 -1
  163. package/dist/{menu-DWD_IywE.cjs → menu-BkTWAEeh.cjs} +3 -3
  164. package/dist/{menu-DWD_IywE.cjs.map → menu-BkTWAEeh.cjs.map} +1 -1
  165. package/dist/{menu-CgDSJpDV.js → menu-Cja83sLd.js} +7 -7
  166. package/dist/{menu-CgDSJpDV.js.map → menu-Cja83sLd.js.map} +1 -1
  167. package/dist/menu.cjs +1 -1
  168. package/dist/menu.js +1 -1
  169. package/dist/mixins/index.ts +5 -5
  170. package/dist/nav-drawer.cjs +1 -1
  171. package/dist/nav-drawer.js +1 -1
  172. package/dist/{notification-service-A3reAJZQ.cjs → notification-service-BB7pBlG6.cjs} +2 -2
  173. package/dist/{notification-service-A3reAJZQ.cjs.map → notification-service-BB7pBlG6.cjs.map} +1 -1
  174. package/dist/{notification-service-1HGYK2tM.js → notification-service-CKHPaK_C.js} +9 -9
  175. package/dist/{notification-service-1HGYK2tM.js.map → notification-service-CKHPaK_C.js.map} +1 -1
  176. package/dist/notification.cjs +1 -1
  177. package/dist/notification.js +2 -2
  178. package/dist/{notify-CVbsMt75.cjs → notify-CxMMHOyT.cjs} +2 -2
  179. package/dist/{notify-CVbsMt75.cjs.map → notify-CxMMHOyT.cjs.map} +1 -1
  180. package/dist/{notify-Bt-KiLeP.js → notify-DNNTtvHN.js} +2 -2
  181. package/dist/{notify-Bt-KiLeP.js.map → notify-DNNTtvHN.js.map} +1 -1
  182. package/dist/{option-Cd0TxMBE.cjs → option-BWzNpqSh.cjs} +2 -2
  183. package/dist/{option-Cd0TxMBE.cjs.map → option-BWzNpqSh.cjs.map} +1 -1
  184. package/dist/{option-DvSZ0D0R.js → option-BsvqJpe9.js} +5 -5
  185. package/dist/{option-DvSZ0D0R.js.map → option-BsvqJpe9.js.map} +1 -1
  186. package/dist/option.cjs +1 -1
  187. package/dist/option.js +1 -1
  188. package/dist/{payment-card-form-C6wrIT_X.js → payment-card-form-C0Rck0tO.js} +6 -6
  189. package/dist/{payment-card-form-C6wrIT_X.js.map → payment-card-form-C0Rck0tO.js.map} +1 -1
  190. package/dist/{payment-card-form-CJkWQ3j4.cjs → payment-card-form-Q8jzlprZ.cjs} +2 -2
  191. package/dist/{payment-card-form-CJkWQ3j4.cjs.map → payment-card-form-Q8jzlprZ.cjs.map} +1 -1
  192. package/dist/{progress-pOL6OHwT.js → progress-CG2bQVP8.js} +5 -5
  193. package/dist/{progress-pOL6OHwT.js.map → progress-CG2bQVP8.js.map} +1 -1
  194. package/dist/{progress-D0iWLtHk.cjs → progress-CtoQKQub.cjs} +2 -2
  195. package/dist/{progress-D0iWLtHk.cjs.map → progress-CtoQKQub.cjs.map} +1 -1
  196. package/dist/progress.cjs +1 -1
  197. package/dist/progress.js +1 -1
  198. package/dist/{radio-button-C-t6JJsj.js → radio-button-BSUgktLD.js} +5 -5
  199. package/dist/{radio-button-C-t6JJsj.js.map → radio-button-BSUgktLD.js.map} +1 -1
  200. package/dist/{radio-button-CSV7-ftB.cjs → radio-button-DnvjanKu.cjs} +3 -3
  201. package/dist/{radio-button-CSV7-ftB.cjs.map → radio-button-DnvjanKu.cjs.map} +1 -1
  202. package/dist/radio-group.cjs +1 -1
  203. package/dist/radio-group.js +1 -1
  204. package/dist/route.component-BJEghY9L.js +341 -0
  205. package/dist/route.component-BJEghY9L.js.map +1 -0
  206. package/dist/route.component-YXwO_9vn.cjs +12 -0
  207. package/dist/route.component-YXwO_9vn.cjs.map +1 -0
  208. package/dist/{schmancy-steps-container-CgzGlBCk.cjs → schmancy-steps-container-BJdjcjfb.cjs} +2 -2
  209. package/dist/{schmancy-steps-container-CgzGlBCk.cjs.map → schmancy-steps-container-BJdjcjfb.cjs.map} +1 -1
  210. package/dist/{schmancy-steps-container-AIJ2_ZSN.js → schmancy-steps-container-DLoPUodd.js} +2 -2
  211. package/dist/{schmancy-steps-container-AIJ2_ZSN.js.map → schmancy-steps-container-DLoPUodd.js.map} +1 -1
  212. package/dist/{select-CwJ4OuVo.js → select-DagDNtvt.js} +6 -6
  213. package/dist/{select-CwJ4OuVo.js.map → select-DagDNtvt.js.map} +1 -1
  214. package/dist/{select-GBaqnfMC.cjs → select-t2FXt_pa.cjs} +2 -2
  215. package/dist/{select-GBaqnfMC.cjs.map → select-t2FXt_pa.cjs.map} +1 -1
  216. package/dist/select.cjs +1 -1
  217. package/dist/select.js +1 -1
  218. package/dist/{sheet-fT1oxKgG.js → sheet-CRVVJZ0R.js} +6 -6
  219. package/dist/{sheet-fT1oxKgG.js.map → sheet-CRVVJZ0R.js.map} +1 -1
  220. package/dist/{sheet-CXd47YKG.cjs → sheet-mPwoKv2g.cjs} +2 -2
  221. package/dist/{sheet-CXd47YKG.cjs.map → sheet-mPwoKv2g.cjs.map} +1 -1
  222. package/dist/sheet.cjs +1 -1
  223. package/dist/sheet.js +1 -1
  224. package/dist/{slider-CYsku-3b.js → slider-B3F6JkFf.js} +8 -8
  225. package/dist/{slider-CYsku-3b.js.map → slider-B3F6JkFf.js.map} +1 -1
  226. package/dist/{slider-DxSzFbQe.cjs → slider-pBPJS7W9.cjs} +2 -2
  227. package/dist/{slider-DxSzFbQe.cjs.map → slider-pBPJS7W9.cjs.map} +1 -1
  228. package/dist/slider.cjs +1 -1
  229. package/dist/slider.js +1 -1
  230. package/dist/{spinner-DrG_NQpx.cjs → spinner-BRpfKS5O.cjs} +40 -11
  231. package/dist/spinner-BRpfKS5O.cjs.map +1 -0
  232. package/dist/{spinner-CrK1E8LD.js → spinner-DA_-O-xo.js} +51 -22
  233. package/dist/spinner-DA_-O-xo.js.map +1 -0
  234. package/dist/steps.cjs +1 -1
  235. package/dist/steps.js +1 -1
  236. package/dist/{surface-C64YekDh.js → surface-Dwl538cH.js} +2 -2
  237. package/dist/{surface-C64YekDh.js.map → surface-Dwl538cH.js.map} +1 -1
  238. package/dist/{surface-DVNi8l6T.cjs → surface-diIElnDd.cjs} +2 -2
  239. package/dist/{surface-DVNi8l6T.cjs.map → surface-diIElnDd.cjs.map} +1 -1
  240. package/dist/surface.cjs +1 -1
  241. package/dist/surface.js +1 -1
  242. package/dist/{table-DmrYZ1hR.js → table-BgKKtRLd.js} +2 -2
  243. package/dist/{table-DmrYZ1hR.js.map → table-BgKKtRLd.js.map} +1 -1
  244. package/dist/{table-B3WKGYlu.cjs → table-Bov9UEcb.cjs} +2 -2
  245. package/dist/{table-B3WKGYlu.cjs.map → table-Bov9UEcb.cjs.map} +1 -1
  246. package/dist/table.cjs +1 -1
  247. package/dist/table.js +1 -1
  248. package/dist/{tabs-compatibility-Uetjk25R.js → tabs-compatibility-CPvOBfor.js} +7 -7
  249. package/dist/{tabs-compatibility-Uetjk25R.js.map → tabs-compatibility-CPvOBfor.js.map} +1 -1
  250. package/dist/{tabs-compatibility-Ds7SEeST.cjs → tabs-compatibility-D5yIfQ_k.cjs} +2 -2
  251. package/dist/{tabs-compatibility-Ds7SEeST.cjs.map → tabs-compatibility-D5yIfQ_k.cjs.map} +1 -1
  252. package/dist/tabs.cjs +1 -1
  253. package/dist/tabs.js +1 -1
  254. package/dist/tailwind.mixin-2zZHkoOm.cjs +2 -0
  255. package/dist/{tailwind.mixin-df9KoZ9x.cjs.map → tailwind.mixin-2zZHkoOm.cjs.map} +1 -1
  256. package/dist/tailwind.mixin-DbE6WE_l.js +43 -0
  257. package/dist/{tailwind.mixin-B6ADeWOc.js.map → tailwind.mixin-DbE6WE_l.js.map} +1 -1
  258. package/dist/teleport.cjs +1 -1
  259. package/dist/teleport.js +1 -1
  260. package/dist/{textarea-B1Tng7F9.js → textarea-CNEv2Aoz.js} +2 -2
  261. package/dist/{textarea-B1Tng7F9.js.map → textarea-CNEv2Aoz.js.map} +1 -1
  262. package/dist/{textarea-QKNA3oAQ.cjs → textarea-CswyRsoR.cjs} +2 -2
  263. package/dist/{textarea-QKNA3oAQ.cjs.map → textarea-CswyRsoR.cjs.map} +1 -1
  264. package/dist/textarea.cjs +1 -1
  265. package/dist/textarea.js +1 -1
  266. package/dist/{theme-button-CYEhS3ub.js → theme-button-CRcXeIw5.js} +5 -5
  267. package/dist/{theme-button-CYEhS3ub.js.map → theme-button-CRcXeIw5.js.map} +1 -1
  268. package/dist/{theme-button-CoCFS3Rx.cjs → theme-button-DPmEDF3P.cjs} +2 -2
  269. package/dist/{theme-button-CoCFS3Rx.cjs.map → theme-button-DPmEDF3P.cjs.map} +1 -1
  270. package/dist/theme-button.cjs +1 -1
  271. package/dist/theme-button.js +1 -1
  272. package/dist/theme.cjs +1 -1
  273. package/dist/{theme.component-C12jLwtB.cjs → theme.component-CamQBQHp.cjs} +2 -2
  274. package/dist/{theme.component-C12jLwtB.cjs.map → theme.component-CamQBQHp.cjs.map} +1 -1
  275. package/dist/{theme.component-Df731_fn.js → theme.component-v5kO9gkQ.js} +30 -30
  276. package/dist/{theme.component-Df731_fn.js.map → theme.component-v5kO9gkQ.js.map} +1 -1
  277. package/dist/theme.js +1 -1
  278. package/dist/{timezone-B7bscKFN.cjs → timezone-Bk4IctLE.cjs} +2 -2
  279. package/dist/{timezone-B7bscKFN.cjs.map → timezone-Bk4IctLE.cjs.map} +1 -1
  280. package/dist/{timezone-CdtCVjMF.js → timezone-Yo9Sdd5R.js} +8 -8
  281. package/dist/{timezone-CdtCVjMF.js.map → timezone-Yo9Sdd5R.js.map} +1 -1
  282. package/dist/{tooltip-CjoNCIvr.cjs → tooltip-B-yn_OSS.cjs} +2 -2
  283. package/dist/{tooltip-CjoNCIvr.cjs.map → tooltip-B-yn_OSS.cjs.map} +1 -1
  284. package/dist/{tooltip-JVkexTyf.js → tooltip-ZJEAlZUQ.js} +2 -2
  285. package/dist/{tooltip-JVkexTyf.js.map → tooltip-ZJEAlZUQ.js.map} +1 -1
  286. package/dist/tooltip.cjs +1 -1
  287. package/dist/tooltip.js +1 -1
  288. package/dist/{tree-CaqiNcJJ.js → tree-BV-2ElOU.js} +5 -5
  289. package/dist/{tree-CaqiNcJJ.js.map → tree-BV-2ElOU.js.map} +1 -1
  290. package/dist/{tree-Be48ABq4.cjs → tree-CxBWy_Vp.cjs} +2 -2
  291. package/dist/{tree-Be48ABq4.cjs.map → tree-CxBWy_Vp.cjs.map} +1 -1
  292. package/dist/tree.cjs +1 -1
  293. package/dist/tree.js +1 -1
  294. package/dist/{typewriter-CoMrmwFJ.js → typewriter-Bsn8eoJW.js} +7 -7
  295. package/dist/{typewriter-CoMrmwFJ.js.map → typewriter-Bsn8eoJW.js.map} +1 -1
  296. package/dist/{typewriter-DCYDScE9.cjs → typewriter-C-mf2RVj.cjs} +2 -2
  297. package/dist/{typewriter-DCYDScE9.cjs.map → typewriter-C-mf2RVj.cjs.map} +1 -1
  298. package/dist/typewriter.cjs +1 -1
  299. package/dist/typewriter.js +1 -1
  300. package/dist/{typography-DkJagEoF.js → typography-B5Y21osS.js} +2 -2
  301. package/dist/{typography-DkJagEoF.js.map → typography-B5Y21osS.js.map} +1 -1
  302. package/dist/{typography-BQg6J2hD.cjs → typography-pyk5TJHO.cjs} +2 -2
  303. package/dist/{typography-BQg6J2hD.cjs.map → typography-pyk5TJHO.cjs.map} +1 -1
  304. package/dist/typography.cjs +1 -1
  305. package/dist/typography.js +1 -1
  306. package/package.json +252 -1
  307. package/types/mixins/index.d.ts +1 -1
  308. package/types/src/area/area.component.d.ts +1 -4
  309. package/types/src/area/route.component.d.ts +9 -3
  310. package/types/src/busy/spinner.d.ts +1 -1
  311. package/types/src/checkbox/checkbox.d.ts +5 -4
  312. package/types/src/chips/assist-chip.d.ts +46 -0
  313. package/types/src/chips/chip.d.ts +3 -32
  314. package/types/src/chips/chips.d.ts +26 -11
  315. package/types/src/chips/filter-chip.d.ts +73 -0
  316. package/types/src/chips/index.d.ts +11 -2
  317. package/types/src/chips/input-chip.d.ts +75 -0
  318. package/types/src/chips/suggestion-chip.d.ts +51 -0
  319. package/types/src/icons/icon.d.ts +32 -5
  320. package/dist/checkbox-CVwU3M4h.js +0 -243
  321. package/dist/checkbox-CVwU3M4h.js.map +0 -1
  322. package/dist/checkbox-DP_zX786.cjs +0 -38
  323. package/dist/checkbox-DP_zX786.cjs.map +0 -1
  324. package/dist/chips-BuMUH3zA.cjs +0 -87
  325. package/dist/chips-BuMUH3zA.cjs.map +0 -1
  326. package/dist/chips-DcCUwYBu.js +0 -340
  327. package/dist/chips-DcCUwYBu.js.map +0 -1
  328. package/dist/icon-B0JNrBfq.js +0 -55
  329. package/dist/icon-B0JNrBfq.js.map +0 -1
  330. package/dist/icon-DY2pBLIU.cjs +0 -30
  331. package/dist/icon-DY2pBLIU.cjs.map +0 -1
  332. package/dist/redispatch-event-BLom7yp4.js +0 -293
  333. package/dist/redispatch-event-BLom7yp4.js.map +0 -1
  334. package/dist/redispatch-event-DHcobAl6.cjs +0 -4
  335. package/dist/redispatch-event-DHcobAl6.cjs.map +0 -1
  336. package/dist/route.component-BWVESeW2.cjs +0 -12
  337. package/dist/route.component-BWVESeW2.cjs.map +0 -1
  338. package/dist/route.component-DkPA8FVn.js +0 -348
  339. package/dist/route.component-DkPA8FVn.js.map +0 -1
  340. package/dist/spinner-CrK1E8LD.js.map +0 -1
  341. package/dist/spinner-DrG_NQpx.cjs.map +0 -1
  342. package/dist/tailwind.mixin-B6ADeWOc.js +0 -43
  343. package/dist/tailwind.mixin-df9KoZ9x.cjs +0 -2
@@ -1 +0,0 @@
1
- {"version":3,"file":"redispatch-event-DHcobAl6.cjs","sources":["../node_modules/@material/web/internal/controller/attachable-controller.js","../node_modules/@material/web/focus/internal/focus-ring.js","../node_modules/@material/web/focus/internal/focus-ring-styles.js","../node_modules/@material/web/focus/md-focus-ring.js","../node_modules/@material/web/internal/motion/animation.js","../node_modules/@material/web/ripple/internal/ripple.js","../node_modules/@material/web/ripple/internal/ripple-styles.js","../node_modules/@material/web/ripple/ripple.js","../node_modules/@material/web/internal/aria/aria.js","../node_modules/@material/web/internal/aria/delegate.js","../node_modules/@material/web/internal/events/redispatch-event.js"],"sourcesContent":["/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { isServer } from 'lit';\n/**\n * A key to retrieve an `Attachable` element's `AttachableController` from a\n * global `MutationObserver`.\n */\nconst ATTACHABLE_CONTROLLER = Symbol('attachableController');\nlet FOR_ATTRIBUTE_OBSERVER;\nif (!isServer) {\n /**\n * A global `MutationObserver` that reacts to `for` attribute changes on\n * `Attachable` elements. If the `for` attribute changes, the controller will\n * re-attach to the new referenced element.\n */\n FOR_ATTRIBUTE_OBSERVER = new MutationObserver((records) => {\n for (const record of records) {\n // When a control's `for` attribute changes, inform its\n // `AttachableController` to update to a new control.\n record.target[ATTACHABLE_CONTROLLER]?.hostConnected();\n }\n });\n}\n/**\n * A controller that provides an implementation for `Attachable` elements.\n *\n * @example\n * ```ts\n * class MyElement extends LitElement implements Attachable {\n * get control() { return this.attachableController.control; }\n *\n * private readonly attachableController = new AttachableController(\n * this,\n * (previousControl, newControl) => {\n * previousControl?.removeEventListener('click', this.handleClick);\n * newControl?.addEventListener('click', this.handleClick);\n * }\n * );\n *\n * // Implement remaining `Attachable` properties/methods that call the\n * // controller's properties/methods.\n * }\n * ```\n */\nexport class AttachableController {\n get htmlFor() {\n return this.host.getAttribute('for');\n }\n set htmlFor(htmlFor) {\n if (htmlFor === null) {\n this.host.removeAttribute('for');\n }\n else {\n this.host.setAttribute('for', htmlFor);\n }\n }\n get control() {\n if (this.host.hasAttribute('for')) {\n if (!this.htmlFor || !this.host.isConnected) {\n return null;\n }\n return this.host.getRootNode().querySelector(`#${this.htmlFor}`);\n }\n return this.currentControl || this.host.parentElement;\n }\n set control(control) {\n if (control) {\n this.attach(control);\n }\n else {\n this.detach();\n }\n }\n /**\n * Creates a new controller for an `Attachable` element.\n *\n * @param host The `Attachable` element.\n * @param onControlChange A callback with two parameters for the previous and\n * next control. An `Attachable` element may perform setup or teardown\n * logic whenever the control changes.\n */\n constructor(host, onControlChange) {\n this.host = host;\n this.onControlChange = onControlChange;\n this.currentControl = null;\n host.addController(this);\n host[ATTACHABLE_CONTROLLER] = this;\n FOR_ATTRIBUTE_OBSERVER?.observe(host, { attributeFilter: ['for'] });\n }\n attach(control) {\n if (control === this.currentControl) {\n return;\n }\n this.setCurrentControl(control);\n // When imperatively attaching, remove the `for` attribute so\n // that the attached control is used instead of a referenced one.\n this.host.removeAttribute('for');\n }\n detach() {\n this.setCurrentControl(null);\n // When imperatively detaching, add an empty `for=\"\"` attribute. This will\n // ensure the control is `null` rather than the `parentElement`.\n this.host.setAttribute('for', '');\n }\n /** @private */\n hostConnected() {\n this.setCurrentControl(this.control);\n }\n /** @private */\n hostDisconnected() {\n this.setCurrentControl(null);\n }\n setCurrentControl(control) {\n this.onControlChange(this.currentControl, control);\n this.currentControl = control;\n }\n}\n//# sourceMappingURL=attachable-controller.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { __decorate } from \"tslib\";\nimport { isServer, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { AttachableController, } from '../../internal/controller/attachable-controller.js';\n/**\n * Events that the focus ring listens to.\n */\nconst EVENTS = ['focusin', 'focusout', 'pointerdown'];\n/**\n * A focus ring component.\n *\n * @fires visibility-changed {Event} Fired whenever `visible` changes.\n */\nexport class FocusRing extends LitElement {\n constructor() {\n super(...arguments);\n /**\n * Makes the focus ring visible.\n */\n this.visible = false;\n /**\n * Makes the focus ring animate inwards instead of outwards.\n */\n this.inward = false;\n this.attachableController = new AttachableController(this, this.onControlChange.bind(this));\n }\n get htmlFor() {\n return this.attachableController.htmlFor;\n }\n set htmlFor(htmlFor) {\n this.attachableController.htmlFor = htmlFor;\n }\n get control() {\n return this.attachableController.control;\n }\n set control(control) {\n this.attachableController.control = control;\n }\n attach(control) {\n this.attachableController.attach(control);\n }\n detach() {\n this.attachableController.detach();\n }\n connectedCallback() {\n super.connectedCallback();\n // Needed for VoiceOver, which will create a \"group\" if the element is a\n // sibling to other content.\n this.setAttribute('aria-hidden', 'true');\n }\n /** @private */\n handleEvent(event) {\n if (event[HANDLED_BY_FOCUS_RING]) {\n // This ensures the focus ring does not activate when multiple focus rings\n // are used within a single component.\n return;\n }\n switch (event.type) {\n default:\n return;\n case 'focusin':\n this.visible = this.control?.matches(':focus-visible') ?? false;\n break;\n case 'focusout':\n case 'pointerdown':\n this.visible = false;\n break;\n }\n event[HANDLED_BY_FOCUS_RING] = true;\n }\n onControlChange(prev, next) {\n if (isServer)\n return;\n for (const event of EVENTS) {\n prev?.removeEventListener(event, this);\n next?.addEventListener(event, this);\n }\n }\n update(changed) {\n if (changed.has('visible')) {\n // This logic can be removed once the `:has` selector has been introduced\n // to Firefox. This is necessary to allow correct submenu styles.\n this.dispatchEvent(new Event('visibility-changed'));\n }\n super.update(changed);\n }\n}\n__decorate([\n property({ type: Boolean, reflect: true })\n], FocusRing.prototype, \"visible\", void 0);\n__decorate([\n property({ type: Boolean, reflect: true })\n], FocusRing.prototype, \"inward\", void 0);\nconst HANDLED_BY_FOCUS_RING = Symbol('handledByFocusRing');\n//# sourceMappingURL=focus-ring.js.map","/**\n * @license\n * Copyright 2024 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n// Generated stylesheet for ./focus/internal/focus-ring-styles.css.\nimport { css } from 'lit';\nexport const styles = css `:host{animation-delay:0s,calc(var(--md-focus-ring-duration, 600ms)*.25);animation-duration:calc(var(--md-focus-ring-duration, 600ms)*.25),calc(var(--md-focus-ring-duration, 600ms)*.75);animation-timing-function:cubic-bezier(0.2, 0, 0, 1);box-sizing:border-box;color:var(--md-focus-ring-color, var(--md-sys-color-secondary, #625b71));display:none;pointer-events:none;position:absolute}:host([visible]){display:flex}:host(:not([inward])){animation-name:outward-grow,outward-shrink;border-end-end-radius:calc(var(--md-focus-ring-shape-end-end, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) + var(--md-focus-ring-outward-offset, 2px));border-end-start-radius:calc(var(--md-focus-ring-shape-end-start, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) + var(--md-focus-ring-outward-offset, 2px));border-start-end-radius:calc(var(--md-focus-ring-shape-start-end, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) + var(--md-focus-ring-outward-offset, 2px));border-start-start-radius:calc(var(--md-focus-ring-shape-start-start, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) + var(--md-focus-ring-outward-offset, 2px));inset:calc(-1*var(--md-focus-ring-outward-offset, 2px));outline:var(--md-focus-ring-width, 3px) solid currentColor}:host([inward]){animation-name:inward-grow,inward-shrink;border-end-end-radius:calc(var(--md-focus-ring-shape-end-end, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) - var(--md-focus-ring-inward-offset, 0px));border-end-start-radius:calc(var(--md-focus-ring-shape-end-start, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) - var(--md-focus-ring-inward-offset, 0px));border-start-end-radius:calc(var(--md-focus-ring-shape-start-end, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) - var(--md-focus-ring-inward-offset, 0px));border-start-start-radius:calc(var(--md-focus-ring-shape-start-start, var(--md-focus-ring-shape, var(--md-sys-shape-corner-full, 9999px))) - var(--md-focus-ring-inward-offset, 0px));border:var(--md-focus-ring-width, 3px) solid currentColor;inset:var(--md-focus-ring-inward-offset, 0px)}@keyframes outward-grow{from{outline-width:0}to{outline-width:var(--md-focus-ring-active-width, 8px)}}@keyframes outward-shrink{from{outline-width:var(--md-focus-ring-active-width, 8px)}}@keyframes inward-grow{from{border-width:0}to{border-width:var(--md-focus-ring-active-width, 8px)}}@keyframes inward-shrink{from{border-width:var(--md-focus-ring-active-width, 8px)}}@media(prefers-reduced-motion){:host{animation:none}}\n`;\n//# sourceMappingURL=focus-ring-styles.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { __decorate } from \"tslib\";\nimport { customElement } from 'lit/decorators.js';\nimport { FocusRing } from './internal/focus-ring.js';\nimport { styles } from './internal/focus-ring-styles.js';\n/**\n * TODO(b/267336424): add docs\n *\n * @final\n * @suppress {visibility}\n */\nlet MdFocusRing = class MdFocusRing extends FocusRing {\n};\nMdFocusRing.styles = [styles];\nMdFocusRing = __decorate([\n customElement('md-focus-ring')\n], MdFocusRing);\nexport { MdFocusRing };\n//# sourceMappingURL=md-focus-ring.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * Easing functions to use for web animations.\n *\n * **NOTE:** `EASING.EMPHASIZED` is approximated with unknown accuracy.\n *\n * TODO(b/241113345): replace with tokens\n */\nexport const EASING = {\n STANDARD: 'cubic-bezier(0.2, 0, 0, 1)',\n STANDARD_ACCELERATE: 'cubic-bezier(.3,0,1,1)',\n STANDARD_DECELERATE: 'cubic-bezier(0,0,0,1)',\n EMPHASIZED: 'cubic-bezier(.3,0,0,1)',\n EMPHASIZED_ACCELERATE: 'cubic-bezier(.3,0,.8,.15)',\n EMPHASIZED_DECELERATE: 'cubic-bezier(.05,.7,.1,1)',\n};\n/**\n * Creates an `AnimationSignal` that can be used to cancel a previous task.\n *\n * @example\n * class MyClass {\n * private labelAnimationSignal = createAnimationSignal();\n *\n * private async animateLabel() {\n * // Start of the task. Previous tasks will be canceled.\n * const signal = this.labelAnimationSignal.start();\n *\n * // Do async work...\n * if (signal.aborted) {\n * // Use AbortSignal to check if a request was made to abort after some\n * // asynchronous work.\n * return;\n * }\n *\n * const animation = this.animate(...);\n * // Add event listeners to be notified when the task should be canceled.\n * signal.addEventListener('abort', () => {\n * animation.cancel();\n * });\n *\n * animation.addEventListener('finish', () => {\n * // Tell the signal that the current task is finished.\n * this.labelAnimationSignal.finish();\n * });\n * }\n * }\n *\n * @return An `AnimationSignal`.\n */\nexport function createAnimationSignal() {\n // The current animation's AbortController\n let animationAbortController = null;\n return {\n start() {\n // Tell the previous animation to cancel.\n animationAbortController?.abort();\n // Set up a new AbortController for the current animation.\n animationAbortController = new AbortController();\n // Provide the AbortSignal so that the caller can check aborted status\n // and add listeners.\n return animationAbortController.signal;\n },\n finish() {\n animationAbortController = null;\n },\n };\n}\n/**\n * Returns a function which can be used to throttle function calls\n * mapped to a key via a given function that should produce a promise that\n * determines the throttle amount (defaults to requestAnimationFrame).\n */\nexport function createThrottle() {\n const stack = new Set();\n return async (key = '', cb, timeout = async () => {\n await new Promise(requestAnimationFrame);\n }) => {\n if (!stack.has(key)) {\n stack.add(key);\n await timeout();\n if (stack.has(key)) {\n stack.delete(key);\n cb();\n }\n }\n };\n}\n/**\n * Parses an number in milliseconds from a css time value\n */\nexport function msFromTimeCSSValue(value) {\n const match = value.trim().match(/([\\d.]+)(\\s*s$)?/);\n const time = match?.[1];\n const seconds = match?.[2];\n return Number(time ?? 0) * (seconds ? 1000 : 1);\n}\n//# sourceMappingURL=animation.js.map","/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { __decorate } from \"tslib\";\nimport { html, isServer, LitElement } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { AttachableController, } from '../../internal/controller/attachable-controller.js';\nimport { EASING } from '../../internal/motion/animation.js';\nconst PRESS_GROW_MS = 450;\nconst MINIMUM_PRESS_MS = 225;\nconst INITIAL_ORIGIN_SCALE = 0.2;\nconst PADDING = 10;\nconst SOFT_EDGE_MINIMUM_SIZE = 75;\nconst SOFT_EDGE_CONTAINER_RATIO = 0.35;\nconst PRESS_PSEUDO = '::after';\nconst ANIMATION_FILL = 'forwards';\n/**\n * Interaction states for the ripple.\n *\n * On Touch:\n * - `INACTIVE -> TOUCH_DELAY -> WAITING_FOR_CLICK -> INACTIVE`\n * - `INACTIVE -> TOUCH_DELAY -> HOLDING -> WAITING_FOR_CLICK -> INACTIVE`\n *\n * On Mouse or Pen:\n * - `INACTIVE -> WAITING_FOR_CLICK -> INACTIVE`\n */\nvar State;\n(function (State) {\n /**\n * Initial state of the control, no touch in progress.\n *\n * Transitions:\n * - on touch down: transition to `TOUCH_DELAY`.\n * - on mouse down: transition to `WAITING_FOR_CLICK`.\n */\n State[State[\"INACTIVE\"] = 0] = \"INACTIVE\";\n /**\n * Touch down has been received, waiting to determine if it's a swipe or\n * scroll.\n *\n * Transitions:\n * - on touch up: begin press; transition to `WAITING_FOR_CLICK`.\n * - on cancel: transition to `INACTIVE`.\n * - after `TOUCH_DELAY_MS`: begin press; transition to `HOLDING`.\n */\n State[State[\"TOUCH_DELAY\"] = 1] = \"TOUCH_DELAY\";\n /**\n * A touch has been deemed to be a press\n *\n * Transitions:\n * - on up: transition to `WAITING_FOR_CLICK`.\n */\n State[State[\"HOLDING\"] = 2] = \"HOLDING\";\n /**\n * The user touch has finished, transition into rest state.\n *\n * Transitions:\n * - on click end press; transition to `INACTIVE`.\n */\n State[State[\"WAITING_FOR_CLICK\"] = 3] = \"WAITING_FOR_CLICK\";\n})(State || (State = {}));\n/**\n * Events that the ripple listens to.\n */\nconst EVENTS = [\n 'click',\n 'contextmenu',\n 'pointercancel',\n 'pointerdown',\n 'pointerenter',\n 'pointerleave',\n 'pointerup',\n];\n/**\n * Delay reacting to touch so that we do not show the ripple for a swipe or\n * scroll interaction.\n */\nconst TOUCH_DELAY_MS = 150;\n/**\n * Used to detect if HCM is active. Events do not process during HCM when the\n * ripple is not displayed.\n */\nconst FORCED_COLORS = isServer\n ? null\n : window.matchMedia('(forced-colors: active)');\n/**\n * A ripple component.\n */\nexport class Ripple extends LitElement {\n constructor() {\n super(...arguments);\n /**\n * Disables the ripple.\n */\n this.disabled = false;\n this.hovered = false;\n this.pressed = false;\n this.rippleSize = '';\n this.rippleScale = '';\n this.initialSize = 0;\n this.state = State.INACTIVE;\n this.checkBoundsAfterContextMenu = false;\n this.attachableController = new AttachableController(this, this.onControlChange.bind(this));\n }\n get htmlFor() {\n return this.attachableController.htmlFor;\n }\n set htmlFor(htmlFor) {\n this.attachableController.htmlFor = htmlFor;\n }\n get control() {\n return this.attachableController.control;\n }\n set control(control) {\n this.attachableController.control = control;\n }\n attach(control) {\n this.attachableController.attach(control);\n }\n detach() {\n this.attachableController.detach();\n }\n connectedCallback() {\n super.connectedCallback();\n // Needed for VoiceOver, which will create a \"group\" if the element is a\n // sibling to other content.\n this.setAttribute('aria-hidden', 'true');\n }\n render() {\n const classes = {\n 'hovered': this.hovered,\n 'pressed': this.pressed,\n };\n return html `<div class=\"surface ${classMap(classes)}\"></div>`;\n }\n update(changedProps) {\n if (changedProps.has('disabled') && this.disabled) {\n this.hovered = false;\n this.pressed = false;\n }\n super.update(changedProps);\n }\n /**\n * TODO(b/269799771): make private\n * @private only public for slider\n */\n handlePointerenter(event) {\n if (!this.shouldReactToEvent(event)) {\n return;\n }\n this.hovered = true;\n }\n /**\n * TODO(b/269799771): make private\n * @private only public for slider\n */\n handlePointerleave(event) {\n if (!this.shouldReactToEvent(event)) {\n return;\n }\n this.hovered = false;\n // release a held mouse or pen press that moves outside the element\n if (this.state !== State.INACTIVE) {\n this.endPressAnimation();\n }\n }\n handlePointerup(event) {\n if (!this.shouldReactToEvent(event)) {\n return;\n }\n if (this.state === State.HOLDING) {\n this.state = State.WAITING_FOR_CLICK;\n return;\n }\n if (this.state === State.TOUCH_DELAY) {\n this.state = State.WAITING_FOR_CLICK;\n this.startPressAnimation(this.rippleStartEvent);\n return;\n }\n }\n async handlePointerdown(event) {\n if (!this.shouldReactToEvent(event)) {\n return;\n }\n this.rippleStartEvent = event;\n if (!this.isTouch(event)) {\n this.state = State.WAITING_FOR_CLICK;\n this.startPressAnimation(event);\n return;\n }\n // after a longpress contextmenu event, an extra `pointerdown` can be\n // dispatched to the pressed element. Check that the down is within\n // bounds of the element in this case.\n if (this.checkBoundsAfterContextMenu && !this.inBounds(event)) {\n return;\n }\n this.checkBoundsAfterContextMenu = false;\n // Wait for a hold after touch delay\n this.state = State.TOUCH_DELAY;\n await new Promise((resolve) => {\n setTimeout(resolve, TOUCH_DELAY_MS);\n });\n if (this.state !== State.TOUCH_DELAY) {\n return;\n }\n this.state = State.HOLDING;\n this.startPressAnimation(event);\n }\n handleClick() {\n // Click is a MouseEvent in Firefox and Safari, so we cannot use\n // `shouldReactToEvent`\n if (this.disabled) {\n return;\n }\n if (this.state === State.WAITING_FOR_CLICK) {\n this.endPressAnimation();\n return;\n }\n if (this.state === State.INACTIVE) {\n // keyboard synthesized click event\n this.startPressAnimation();\n this.endPressAnimation();\n }\n }\n handlePointercancel(event) {\n if (!this.shouldReactToEvent(event)) {\n return;\n }\n this.endPressAnimation();\n }\n handleContextmenu() {\n if (this.disabled) {\n return;\n }\n this.checkBoundsAfterContextMenu = true;\n this.endPressAnimation();\n }\n determineRippleSize() {\n const { height, width } = this.getBoundingClientRect();\n const maxDim = Math.max(height, width);\n const softEdgeSize = Math.max(SOFT_EDGE_CONTAINER_RATIO * maxDim, SOFT_EDGE_MINIMUM_SIZE);\n const initialSize = Math.floor(maxDim * INITIAL_ORIGIN_SCALE);\n const hypotenuse = Math.sqrt(width ** 2 + height ** 2);\n const maxRadius = hypotenuse + PADDING;\n this.initialSize = initialSize;\n this.rippleScale = `${(maxRadius + softEdgeSize) / initialSize}`;\n this.rippleSize = `${initialSize}px`;\n }\n getNormalizedPointerEventCoords(pointerEvent) {\n const { scrollX, scrollY } = window;\n const { left, top } = this.getBoundingClientRect();\n const documentX = scrollX + left;\n const documentY = scrollY + top;\n const { pageX, pageY } = pointerEvent;\n return { x: pageX - documentX, y: pageY - documentY };\n }\n getTranslationCoordinates(positionEvent) {\n const { height, width } = this.getBoundingClientRect();\n // end in the center\n const endPoint = {\n x: (width - this.initialSize) / 2,\n y: (height - this.initialSize) / 2,\n };\n let startPoint;\n if (positionEvent instanceof PointerEvent) {\n startPoint = this.getNormalizedPointerEventCoords(positionEvent);\n }\n else {\n startPoint = {\n x: width / 2,\n y: height / 2,\n };\n }\n // center around start point\n startPoint = {\n x: startPoint.x - this.initialSize / 2,\n y: startPoint.y - this.initialSize / 2,\n };\n return { startPoint, endPoint };\n }\n startPressAnimation(positionEvent) {\n if (!this.mdRoot) {\n return;\n }\n this.pressed = true;\n this.growAnimation?.cancel();\n this.determineRippleSize();\n const { startPoint, endPoint } = this.getTranslationCoordinates(positionEvent);\n const translateStart = `${startPoint.x}px, ${startPoint.y}px`;\n const translateEnd = `${endPoint.x}px, ${endPoint.y}px`;\n this.growAnimation = this.mdRoot.animate({\n top: [0, 0],\n left: [0, 0],\n height: [this.rippleSize, this.rippleSize],\n width: [this.rippleSize, this.rippleSize],\n transform: [\n `translate(${translateStart}) scale(1)`,\n `translate(${translateEnd}) scale(${this.rippleScale})`,\n ],\n }, {\n pseudoElement: PRESS_PSEUDO,\n duration: PRESS_GROW_MS,\n easing: EASING.STANDARD,\n fill: ANIMATION_FILL,\n });\n }\n async endPressAnimation() {\n this.rippleStartEvent = undefined;\n this.state = State.INACTIVE;\n const animation = this.growAnimation;\n let pressAnimationPlayState = Infinity;\n if (typeof animation?.currentTime === 'number') {\n pressAnimationPlayState = animation.currentTime;\n }\n else if (animation?.currentTime) {\n pressAnimationPlayState = animation.currentTime.to('ms').value;\n }\n if (pressAnimationPlayState >= MINIMUM_PRESS_MS) {\n this.pressed = false;\n return;\n }\n await new Promise((resolve) => {\n setTimeout(resolve, MINIMUM_PRESS_MS - pressAnimationPlayState);\n });\n if (this.growAnimation !== animation) {\n // A new press animation was started. The old animation was canceled and\n // should not finish the pressed state.\n return;\n }\n this.pressed = false;\n }\n /**\n * Returns `true` if\n * - the ripple element is enabled\n * - the pointer is primary for the input type\n * - the pointer is the pointer that started the interaction, or will start\n * the interaction\n * - the pointer is a touch, or the pointer state has the primary button\n * held, or the pointer is hovering\n */\n shouldReactToEvent(event) {\n if (this.disabled || !event.isPrimary) {\n return false;\n }\n if (this.rippleStartEvent &&\n this.rippleStartEvent.pointerId !== event.pointerId) {\n return false;\n }\n if (event.type === 'pointerenter' || event.type === 'pointerleave') {\n return !this.isTouch(event);\n }\n const isPrimaryButton = event.buttons === 1;\n return this.isTouch(event) || isPrimaryButton;\n }\n /**\n * Check if the event is within the bounds of the element.\n *\n * This is only needed for the \"stuck\" contextmenu longpress on Chrome.\n */\n inBounds({ x, y }) {\n const { top, left, bottom, right } = this.getBoundingClientRect();\n return x >= left && x <= right && y >= top && y <= bottom;\n }\n isTouch({ pointerType }) {\n return pointerType === 'touch';\n }\n /** @private */\n async handleEvent(event) {\n if (FORCED_COLORS?.matches) {\n // Skip event logic since the ripple is `display: none`.\n return;\n }\n switch (event.type) {\n case 'click':\n this.handleClick();\n break;\n case 'contextmenu':\n this.handleContextmenu();\n break;\n case 'pointercancel':\n this.handlePointercancel(event);\n break;\n case 'pointerdown':\n await this.handlePointerdown(event);\n break;\n case 'pointerenter':\n this.handlePointerenter(event);\n break;\n case 'pointerleave':\n this.handlePointerleave(event);\n break;\n case 'pointerup':\n this.handlePointerup(event);\n break;\n default:\n break;\n }\n }\n onControlChange(prev, next) {\n if (isServer)\n return;\n for (const event of EVENTS) {\n prev?.removeEventListener(event, this);\n next?.addEventListener(event, this);\n }\n }\n}\n__decorate([\n property({ type: Boolean, reflect: true })\n], Ripple.prototype, \"disabled\", void 0);\n__decorate([\n state()\n], Ripple.prototype, \"hovered\", void 0);\n__decorate([\n state()\n], Ripple.prototype, \"pressed\", void 0);\n__decorate([\n query('.surface')\n], Ripple.prototype, \"mdRoot\", void 0);\n//# sourceMappingURL=ripple.js.map","/**\n * @license\n * Copyright 2024 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n// Generated stylesheet for ./ripple/internal/ripple-styles.css.\nimport { css } from 'lit';\nexport const styles = css `:host{display:flex;margin:auto;pointer-events:none}:host([disabled]){display:none}@media(forced-colors: active){:host{display:none}}:host,.surface{border-radius:inherit;position:absolute;inset:0;overflow:hidden}.surface{-webkit-tap-highlight-color:rgba(0,0,0,0)}.surface::before,.surface::after{content:\"\";opacity:0;position:absolute}.surface::before{background-color:var(--md-ripple-hover-color, var(--md-sys-color-on-surface, #1d1b20));inset:0;transition:opacity 15ms linear,background-color 15ms linear}.surface::after{background:radial-gradient(closest-side, var(--md-ripple-pressed-color, var(--md-sys-color-on-surface, #1d1b20)) max(100% - 70px, 65%), transparent 100%);transform-origin:center center;transition:opacity 375ms linear}.hovered::before{background-color:var(--md-ripple-hover-color, var(--md-sys-color-on-surface, #1d1b20));opacity:var(--md-ripple-hover-opacity, 0.08)}.pressed::after{opacity:var(--md-ripple-pressed-opacity, 0.12);transition-duration:105ms}\n`;\n//# sourceMappingURL=ripple-styles.js.map","/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { __decorate } from \"tslib\";\nimport { customElement } from 'lit/decorators.js';\nimport { Ripple } from './internal/ripple.js';\nimport { styles } from './internal/ripple-styles.js';\n/**\n * @summary Ripples, also known as state layers, are visual indicators used to\n * communicate the status of a component or interactive element.\n *\n * @description A state layer is a semi-transparent covering on an element that\n * indicates its state. State layers provide a systematic approach to\n * visualizing states by using opacity. A layer can be applied to an entire\n * element or in a circular shape and only one state layer can be applied at a\n * given time.\n *\n * @final\n * @suppress {visibility}\n */\nlet MdRipple = class MdRipple extends Ripple {\n};\nMdRipple.styles = [styles];\nMdRipple = __decorate([\n customElement('md-ripple')\n], MdRipple);\nexport { MdRipple };\n//# sourceMappingURL=ripple.js.map","/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * Accessibility Object Model reflective aria properties.\n */\nexport const ARIA_PROPERTIES = [\n 'role',\n 'ariaAtomic',\n 'ariaAutoComplete',\n 'ariaBusy',\n 'ariaChecked',\n 'ariaColCount',\n 'ariaColIndex',\n 'ariaColSpan',\n 'ariaCurrent',\n 'ariaDisabled',\n 'ariaExpanded',\n 'ariaHasPopup',\n 'ariaHidden',\n 'ariaInvalid',\n 'ariaKeyShortcuts',\n 'ariaLabel',\n 'ariaLevel',\n 'ariaLive',\n 'ariaModal',\n 'ariaMultiLine',\n 'ariaMultiSelectable',\n 'ariaOrientation',\n 'ariaPlaceholder',\n 'ariaPosInSet',\n 'ariaPressed',\n 'ariaReadOnly',\n 'ariaRequired',\n 'ariaRoleDescription',\n 'ariaRowCount',\n 'ariaRowIndex',\n 'ariaRowSpan',\n 'ariaSelected',\n 'ariaSetSize',\n 'ariaSort',\n 'ariaValueMax',\n 'ariaValueMin',\n 'ariaValueNow',\n 'ariaValueText',\n];\n/**\n * Accessibility Object Model aria attributes.\n */\nexport const ARIA_ATTRIBUTES = ARIA_PROPERTIES.map(ariaPropertyToAttribute);\n/**\n * Checks if an attribute is one of the AOM aria attributes.\n *\n * @example\n * isAriaAttribute('aria-label'); // true\n *\n * @param attribute The attribute to check.\n * @return True if the attribute is an aria attribute, or false if not.\n */\nexport function isAriaAttribute(attribute) {\n return ARIA_ATTRIBUTES.includes(attribute);\n}\n/**\n * Converts an AOM aria property into its corresponding attribute.\n *\n * @example\n * ariaPropertyToAttribute('ariaLabel'); // 'aria-label'\n *\n * @param property The aria property.\n * @return The aria attribute.\n */\nexport function ariaPropertyToAttribute(property) {\n return property\n .replace('aria', 'aria-')\n // IDREF attributes also include an \"Element\" or \"Elements\" suffix\n .replace(/Elements?/g, '')\n .toLowerCase();\n}\n//# sourceMappingURL=aria.js.map","/**\n * @license\n * Copyright 2023 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\nimport { isServer } from 'lit';\nimport { ARIA_PROPERTIES, ariaPropertyToAttribute, isAriaAttribute, } from './aria.js';\n// Private symbols\nconst privateIgnoreAttributeChangesFor = Symbol('privateIgnoreAttributeChangesFor');\n/**\n * Mixes in aria delegation for elements that delegate focus and aria to inner\n * shadow root elements.\n *\n * This mixin fixes invalid aria announcements with shadow roots, caused by\n * duplicate aria attributes on both the host and the inner shadow root element.\n *\n * Note: this mixin **does not yet support** ID reference attributes, such as\n * `aria-labelledby` or `aria-controls`.\n *\n * @example\n * ```ts\n * class MyButton extends mixinDelegatesAria(LitElement) {\n * static shadowRootOptions = {mode: 'open', delegatesFocus: true};\n *\n * render() {\n * return html`\n * <button aria-label=${this.ariaLabel || nothing}>\n * <slot></slot>\n * </button>\n * `;\n * }\n * }\n * ```\n * ```html\n * <my-button aria-label=\"Plus one\">+1</my-button>\n * ```\n *\n * Use `ARIAMixinStrict` for lit analyzer strict types, such as the \"role\"\n * attribute.\n *\n * @example\n * ```ts\n * return html`\n * <button role=${(this as ARIAMixinStrict).role || nothing}>\n * <slot></slot>\n * </button>\n * `;\n * ```\n *\n * In the future, updates to the Accessibility Object Model (AOM) will provide\n * built-in aria delegation features that will replace this mixin.\n *\n * @param base The class to mix functionality into.\n * @return The provided class with aria delegation mixed in.\n */\nexport function mixinDelegatesAria(base) {\n var _a;\n if (isServer) {\n // Don't shift attributes when running with lit-ssr. The SSR renderer\n // implements a subset of DOM APIs, including the methods this mixin\n // overrides, causing errors. We don't need to shift on the server anyway\n // since elements will shift attributes immediately once they hydrate.\n return base;\n }\n class WithDelegatesAriaElement extends base {\n constructor() {\n super(...arguments);\n this[_a] = new Set();\n }\n attributeChangedCallback(name, oldValue, newValue) {\n if (!isAriaAttribute(name)) {\n super.attributeChangedCallback(name, oldValue, newValue);\n return;\n }\n if (this[privateIgnoreAttributeChangesFor].has(name)) {\n return;\n }\n // Don't trigger another `attributeChangedCallback` once we remove the\n // aria attribute from the host. We check the explicit name of the\n // attribute to ignore since `attributeChangedCallback` can be called\n // multiple times out of an expected order when hydrating an element with\n // multiple attributes.\n this[privateIgnoreAttributeChangesFor].add(name);\n this.removeAttribute(name);\n this[privateIgnoreAttributeChangesFor].delete(name);\n const dataProperty = ariaAttributeToDataProperty(name);\n if (newValue === null) {\n delete this.dataset[dataProperty];\n }\n else {\n this.dataset[dataProperty] = newValue;\n }\n this.requestUpdate(ariaAttributeToDataProperty(name), oldValue);\n }\n getAttribute(name) {\n if (isAriaAttribute(name)) {\n return super.getAttribute(ariaAttributeToDataAttribute(name));\n }\n return super.getAttribute(name);\n }\n removeAttribute(name) {\n super.removeAttribute(name);\n if (isAriaAttribute(name)) {\n super.removeAttribute(ariaAttributeToDataAttribute(name));\n // Since `aria-*` attributes are already removed`, we need to request\n // an update because `attributeChangedCallback` will not be called.\n this.requestUpdate();\n }\n }\n }\n _a = privateIgnoreAttributeChangesFor;\n setupDelegatesAriaProperties(WithDelegatesAriaElement);\n return WithDelegatesAriaElement;\n}\n/**\n * Overrides the constructor's native `ARIAMixin` properties to ensure that\n * aria properties reflect the values that were shifted to a data attribute.\n *\n * @param ctor The `ReactiveElement` constructor to patch.\n */\nfunction setupDelegatesAriaProperties(ctor) {\n for (const ariaProperty of ARIA_PROPERTIES) {\n // The casing between ariaProperty and the dataProperty may be different.\n // ex: aria-haspopup -> ariaHasPopup\n const ariaAttribute = ariaPropertyToAttribute(ariaProperty);\n // ex: aria-haspopup -> data-aria-haspopup\n const dataAttribute = ariaAttributeToDataAttribute(ariaAttribute);\n // ex: aria-haspopup -> dataset.ariaHaspopup\n const dataProperty = ariaAttributeToDataProperty(ariaAttribute);\n // Call `ReactiveElement.createProperty()` so that the `aria-*` and `data-*`\n // attributes are added to the `static observedAttributes` array. This\n // triggers `attributeChangedCallback` for the delegates aria mixin to\n // handle.\n ctor.createProperty(ariaProperty, {\n attribute: ariaAttribute,\n noAccessor: true,\n });\n ctor.createProperty(Symbol(dataAttribute), {\n attribute: dataAttribute,\n noAccessor: true,\n });\n // Re-define the `ARIAMixin` properties to handle data attribute shifting.\n // It is safe to use `Object.defineProperty` here because the properties\n // are native and not renamed.\n // tslint:disable-next-line:ban-unsafe-reflection\n Object.defineProperty(ctor.prototype, ariaProperty, {\n configurable: true,\n enumerable: true,\n get() {\n return this.dataset[dataProperty] ?? null;\n },\n set(value) {\n const prevValue = this.dataset[dataProperty] ?? null;\n if (value === prevValue) {\n return;\n }\n if (value === null) {\n delete this.dataset[dataProperty];\n }\n else {\n this.dataset[dataProperty] = value;\n }\n this.requestUpdate(ariaProperty, prevValue);\n },\n });\n }\n}\nfunction ariaAttributeToDataAttribute(ariaAttribute) {\n // aria-haspopup -> data-aria-haspopup\n return `data-${ariaAttribute}`;\n}\nfunction ariaAttributeToDataProperty(ariaAttribute) {\n // aria-haspopup -> dataset.ariaHaspopup\n return ariaAttribute.replace(/-\\w/, (dashLetter) => dashLetter[1].toUpperCase());\n}\n//# sourceMappingURL=delegate.js.map","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n/**\n * Re-dispatches an event from the provided element.\n *\n * This function is useful for forwarding non-composed events, such as `change`\n * events.\n *\n * @example\n * class MyInput extends LitElement {\n * render() {\n * return html`<input @change=${this.redispatchEvent}>`;\n * }\n *\n * protected redispatchEvent(event: Event) {\n * redispatchEvent(this, event);\n * }\n * }\n *\n * @param element The element to dispatch the event from.\n * @param event The event to re-dispatch.\n * @return Whether or not the event was dispatched (if cancelable).\n */\nexport function redispatchEvent(element, event) {\n // For bubbling events in SSR light DOM (or composed), stop their propagation\n // and dispatch the copy.\n if (event.bubbles && (!element.shadowRoot || event.composed)) {\n event.stopPropagation();\n }\n const copy = Reflect.construct(event.constructor, [event.type, event]);\n const dispatched = element.dispatchEvent(copy);\n if (!dispatched) {\n event.preventDefault();\n }\n return dispatched;\n}\n//# sourceMappingURL=redispatch-event.js.map"],"names":["ATTACHABLE_CONTROLLER","Symbol","FOR_ATTRIBUTE_OBSERVER","isServer","MutationObserver","records","record","target","hostConnected","AttachableController","htmlFor","this","host","getAttribute","removeAttribute","setAttribute","control","hasAttribute","isConnected","getRootNode","querySelector","currentControl","parentElement","attach","detach","onControlChange","addController","observe","attributeFilter","setCurrentControl","hostDisconnected","EVENTS","FocusRing","LitElement","constructor","super","arguments","visible","inward","attachableController","bind","connectedCallback","event","HANDLED_BY_FOCUS_RING","type","matches","prev","next","removeEventListener","addEventListener","changed","has","dispatchEvent","Event","update","__decorate","property","Boolean","reflect","prototype","styles","css","MdFocusRing","customElement","EASING","State","FORCED_COLORS","window","matchMedia","Ripple","disabled","hovered","pressed","rippleSize","rippleScale","initialSize","state","INACTIVE","checkBoundsAfterContextMenu","render","classes","html","classMap","changedProps","shouldReactToEvent","endPressAnimation","HOLDING","TOUCH_DELAY","WAITING_FOR_CLICK","startPressAnimation","rippleStartEvent","isTouch","inBounds","Promise","resolve","setTimeout","handleClick","handleContextmenu","determineRippleSize","height","width","getBoundingClientRect","maxDim","Math","max","softEdgeSize","floor","maxRadius","sqrt","pointerEvent","scrollX","scrollY","left","top","documentX","documentY","pageX","pageY","x","y","positionEvent","endPoint","startPoint","PointerEvent","getNormalizedPointerEventCoords","mdRoot","growAnimation","cancel","getTranslationCoordinates","translateStart","translateEnd","animate","transform","pseudoElement","duration","easing","fill","animation","pressAnimationPlayState","Infinity","currentTime","to","value","isPrimary","pointerId","isPrimaryButton","buttons","bottom","right","pointerType","handlePointercancel","handlePointerdown","handlePointerenter","handlePointerleave","handlePointerup","query","MdRipple","ARIA_PROPERTIES","ARIA_ATTRIBUTES","map","ariaPropertyToAttribute","isAriaAttribute","attribute","includes","replace","toLowerCase","privateIgnoreAttributeChangesFor","ariaAttributeToDataAttribute","ariaAttribute","ariaAttributeToDataProperty","dashLetter","toUpperCase","base","_a","WithDelegatesAriaElement","Set","name","oldValue","newValue","attributeChangedCallback","add","delete","dataProperty","dataset","requestUpdate","ctor","ariaProperty","dataAttribute","createProperty","noAccessor","Object","defineProperty","configurable","enumerable","get","prevValue","element","bubbles","shadowRoot","composed","stopPropagation","copy","Reflect","construct","dispatched","preventDefault"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10]}
@@ -1,12 +0,0 @@
1
- "use strict";const r=require("rxjs");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const E=require("./litElement.mixin-BLa7fWsS.cjs");require("./tailwind.mixin-df9KoZ9x.cjs");const m=require("lit/decorators.js"),g=require("lit"),b=new r.Subject,R="FINDING_MORTIES",O="HERE_RICKY",w=new WeakMap;class y{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(R),this.disposed=!1,this.isProcessingPopstate=!1,this.$current.next(this.current),this.$current.subscribe(t=>{this.disposed||t.forEach((e,n)=>{this.getOrCreateAreaSubject(n).next(e)})}),this.initializeFromBrowserState()}get areaSubjects(){let t=w.get(this);return t||(t=new Map,w.set(this,t)),t}initializeFromBrowserState(){try{const t=history.state;t&&t.schmancyAreas&&(Object.entries(t.schmancyAreas).forEach(([e,n])=>{this.current.set(e,n)}),this.$current.next(this.current))}catch{}}getOrCreateAreaSubject(t){let e=this.areaSubjects.get(t);if(!e||e.closed){e=new r.ReplaySubject(1),this.areaSubjects.set(t,e);const n=this.current.get(t);n&&e.next({...n,state:n.state||{},params:n.params||{},props:n.props||{}})}return e}on(t,e=!1){if(!t)throw new Error("Area name is required");const n=this.getOrCreateAreaSubject(t).asObservable().pipe(r.distinctUntilChanged((c,a)=>c.component===a.component&&JSON.stringify(c.state)===JSON.stringify(a.state)&&JSON.stringify(c.params)===JSON.stringify(a.params)),r.shareReplay(1));return e?n.pipe(r.skip(1)):n}all(t=!1){const e=this.$current.asObservable().pipe(r.shareReplay(1));return t?e.pipe(r.skip(1)):e}getState(t){if(!t)throw new Error("Area name is required");return this.on(t).pipe(r.map(e=>e.state),r.filter(e=>e!=null),r.distinctUntilChanged((e,n)=>JSON.stringify(e)===JSON.stringify(n)),r.map(e=>e),r.catchError(e=>r.EMPTY))}params(t){if(!t)throw new Error("Area name is required");return this.on(t).pipe(r.map(e=>e.params),r.filter(e=>e!=null),r.distinctUntilChanged((e,n)=>JSON.stringify(e)===JSON.stringify(n)),r.map(e=>e),r.catchError(e=>r.EMPTY))}param(t,e){if(!t||!e)throw new Error("Area name and key are required");return this.params(t).pipe(r.map(n=>n[e]),r.filter(n=>n!==void 0),r.distinctUntilChanged(),r.map(n=>n),r.catchError(n=>r.EMPTY))}props(t){if(!t)throw new Error("Area name is required");return this.on(t).pipe(r.map(e=>e.props),r.filter(e=>e!=null),r.distinctUntilChanged((e,n)=>JSON.stringify(e)===JSON.stringify(n)),r.map(e=>e),r.catchError(e=>r.EMPTY))}prop(t,e){if(!t||!e)throw new Error("Area name and key are required");return this.props(t).pipe(r.map(n=>n[e]),r.filter(n=>n!==void 0),r.distinctUntilChanged(),r.map(n=>n),r.catchError(n=>r.EMPTY))}find(){return r.zip([r.fromEvent(window,O).pipe(r.map(t=>t.detail),r.bufferTime(0)),r.of(1).pipe(r.tap(()=>window.dispatchEvent(this.findingMortiesEvent)))]).pipe(r.map(([t])=>t),r.timeout(1),r.catchError(()=>r.EMPTY))}push(t){if(!t.area)throw new Error("Area is required for route action");if(this.isProcessingPopstate)return;const e={...t,state:t.state||{},params:t.params||{},props:t.props||{},_source:"programmatic"};this.enableHistoryMode&&b.next(e),this.request.next(e),this.dispatchAreaEvent(e.area,e)}_updateFromBrowser(t){const e={...t,state:t.state||{},params:t.params||{},props:t.props||{},_source:"browser"};this.isProcessingPopstate=!0,this.request.next(e),this.isProcessingPopstate=!1}_updateBrowserHistory(t,e,n,c){if(this.enableHistoryMode)try{const a=history.state||{},o=a.schmancyAreas||{},i={component:e.component,area:e.area};e.state&&Object.keys(e.state).length>0&&(i.state=e.state),e.params&&Object.keys(e.params).length>0&&(i.params=e.params),e.props&&Object.keys(e.props).length>0&&(i.props=e.props),o[t]=i;const p={...a,schmancyAreas:o},h=this.createCleanURL(o,c);n==="replace"||n==="pop"?history.replaceState(p,"",h):n!=="push"&&n||history.pushState(p,"",h)}catch{}}createCleanURL(t,e){let n="";if(e!==!0){const c=new URLSearchParams(location.search);Array.isArray(e)&&e.forEach(a=>c.delete(a)),n=c.toString(),n=n?`?${n}`:""}if(this.prettyURL){const c=t.main;if(c){let a=`/${c.component}`;const o=new URLSearchParams(n);c.params&&Object.entries(c.params).forEach(([p,h])=>{typeof h!="string"&&typeof h!="number"||o.set(p,String(h))});const i=o.toString();return a+(i?`?${i}`:"")}}try{const c={};return Object.entries(t).forEach(([a,o])=>{const i={component:o.component};o.state&&Object.keys(o.state).length>0&&(i.state=o.state),o.params&&Object.keys(o.params).length>0&&(i.params=o.params),o.props&&Object.keys(o.props).length>0&&(i.props=o.props),c[a]=i}),`/${encodeURIComponent(JSON.stringify(c))}${n}`}catch{return location.pathname}}restoreFromBrowserState(t){try{if(t&&t.schmancyAreas)return t.schmancyAreas}catch{}return this.parseStateFromURL()}parseStateFromURL(){const t=location.pathname.split("/").pop();if(!t)return{};try{const e=decodeURIComponent(t),n=JSON.parse(e);if(typeof n=="object"&&n!==null)return n}catch{}return{}}dispatchAreaEvent(t,e){const n=new CustomEvent(`schmancy-area-${t}-changed`,{detail:{area:t,component:e.component,state:e.state,params:e.params,props:e.props,historyStrategy:e.historyStrategy},bubbles:!0,composed:!0});window.dispatchEvent(n)}pop(t){if(!t)throw new Error("Area name is required");const e=this.areaSubjects.get(t);if(e&&!e.closed&&e.next({component:null,state:{},area:t,params:{},props:{}}),this.request.next({area:t,component:null,state:{},params:{},props:{},historyStrategy:"silent",_source:"programmatic"}),this.current.delete(t),this.$current.next(this.current),this.enableHistoryMode)try{const n=history.state||{},c={...n.schmancyAreas||{}};delete c[t];const a={...n,schmancyAreas:c},o=this.createCleanURL(c);history.replaceState(a,"",o)}catch{}}clear(){this.areaSubjects.forEach(t=>t.complete()),this.areaSubjects.clear(),this.current.clear(),this.$current.next(this.current),this.enableHistoryMode&&history.replaceState({schmancyAreas:{}},"",`/${location.search}`)}dispose(){this.disposed||(this.disposed=!0,this.areaSubjects.forEach(t=>t.complete()),this.areaSubjects.clear(),this.request.complete(),this.$current.complete(),b.complete(),this.current.clear(),w.delete(this))}static getInstance(){return y.instance||(y.instance=new y),y.instance}get state(){try{const t=history.state;if(t&&t.schmancyAreas)return t.schmancyAreas}catch{}return this.parseStateFromURL()}hasArea(t){return this.current.has(t)}getActiveAreas(){return Array.from(this.current.keys())}getRoute(t){return this.current.get(t)}}const u=y.getInstance();typeof window<"u"&&window.addEventListener("unload",()=>{u.dispose()});var l=(s=>(s.push="push",s.replace="replace",s.pop="pop",s.silent="silent",s))(l||{}),A=Object.defineProperty,C=Object.getOwnPropertyDescriptor,d=(s,t,e,n)=>{for(var c,a=n>1?void 0:n?C(t,e):t,o=s.length-1;o>=0;o--)(c=s[o])&&(a=(n?c(t,e,a):c(a))||a);return n&&a&&A(t,e,a),a};exports.SchmancyArea=class extends E.$LitElement(g.css`
2
- :host {
3
- position: relative;
4
- display: block;
5
- inset: 0;
6
- }
7
- `){constructor(){super(...arguments),this.currentComponent=null}resolveRoute(s,t,e=l.silent,n=[]){switch(s){case"initial":case"popstate":{if(s==="popstate"&&t&&typeof t=="object"&&"state"in t){const a=t,o=a.state?.schmancyAreas?.[this.name];if(o)return r.of({area:this.name,component:o.component,state:o.state||{},params:o.params||{},historyStrategy:l.silent})}const c=typeof t=="string"?t:location.pathname;return this.matchSegmentToRoute(c,e,n)}case"navigation":return t&&typeof t=="object"&&"component"in t?r.of(t):r.EMPTY;default:return r.EMPTY}}matchSegmentToRoute(s,t,e){const n=s.split("/").pop()||"";if(n&&(n.includes("{")||n.includes("%7B")))try{const c=decodeURIComponent(n),a=JSON.parse(c);if(a[this.name])return r.of({area:this.name,component:a[this.name].component,state:a[this.name].state||{},params:a[this.name].params||{},historyStrategy:t})}catch{}if(e&&e.length>0){const c=s.split("/").filter(Boolean)[0]||"";for(const a of e)if(a.when===c)return a.guard?r.from(Promise.resolve(a.guard())).pipe(r.switchMap(o=>o===!0?r.of({area:this.name,component:a.component,state:{},params:{},historyStrategy:t}):o===!1?r.EMPTY:typeof o=="string"?this.matchSegmentToRoute(o,t,e):typeof o=="object"&&o.redirect?this.matchSegmentToRoute(o.redirect,t,e):r.EMPTY),r.catchError(o=>r.EMPTY)):r.of({area:this.name,component:a.component,state:{},params:{},historyStrategy:t})}return r.EMPTY}async resolveComponent(s){if(!s||s==="")return{element:null};if(typeof s=="string")try{return{element:document.createElement(s)}}catch{return this.default&&typeof this.default=="string"?{element:document.createElement(this.default)}:{element:null}}if(s instanceof HTMLElement)return{element:s};if(typeof s=="function"&&!("then"in s))try{return{element:new s}}catch{return{element:null}}if(typeof s=="function")try{const t=(await s()).default;return{element:new t}}catch{return{element:null}}if(s instanceof Promise)try{const t=(await s).default;return{element:new t}}catch{return{element:null}}return{element:null}}firstUpdated(){if(!this.name)throw new Error("Area name is required");this.routingSubscription?.unsubscribe();const s=this.shadowRoot?.querySelector("slot"),t=s?r.fromEvent(s,"slotchange").pipe(r.startWith(null),r.map(()=>this.routes||[])):r.of([]),e=r.combineLatest([r.of(location.pathname),t]).pipe(r.take(1),r.switchMap(([i,p])=>this.resolveRoute("initial",i,l.silent,p))),n=r.combineLatest([u.request.pipe(r.filter(({area:i})=>i===this.name)),t]).pipe(r.switchMap(([i,p])=>this.resolveRoute("navigation",i,l.silent,p))),c=r.combineLatest([r.fromEvent(window,"popstate"),t]).pipe(r.switchMap(([i,p])=>this.resolveRoute("popstate",i,l.silent,p))),a=r.merge(e,n,c),o=this.default?a.pipe(r.startWith({area:this.name,component:this.default,state:{},params:{},historyStrategy:l.silent})):a;this.routingSubscription=o.pipe(r.debounceTime(0),r.filter(i=>i.component!==void 0),r.distinctUntilChanged((i,p)=>this.isSameRoute(i,p)),r.switchMap(i=>r.from(this.resolveComponent(i.component)).pipe(r.map(p=>({...p,route:i})))),r.map(({element:i,route:p})=>(i&&(p.params&&Object.entries(p.params).forEach(([h,S])=>{i[h]=S}),p.props&&Object.entries(p.props).forEach(([h,S])=>{i[h]=S}),p.state&&(i.state=p.state)),{element:i,route:p})),r.tap(({element:i,route:p})=>{if(i){const h=i.tagName.toLowerCase();this.currentComponent!==h&&(this.currentComponent=h)}else this.currentComponent=null;this.updateDOM(i),i&&this.updateInternalState(p,i),this.updateBrowserHistory(p,i)}),r.catchError(i=>r.EMPTY),r.takeUntil(this.disconnecting)).subscribe({error:i=>{}})}isSameRoute(s,t){if(s.component===null&&t.component===null)return!0;if(s.component===null||t.component===null)return!1;let e="",n="";typeof s.component=="function"?e=s.component.name||s.component.toString():typeof s.component=="string"?e=s.component:s.component instanceof HTMLElement&&(e=s.component.tagName.toLowerCase()),typeof t.component=="function"?n=t.component.name||t.component.toString():typeof t.component=="string"?n=t.component:t.component instanceof HTMLElement&&(n=t.component.tagName.toLowerCase());const c=p=>p?.replaceAll("-","").toLowerCase(),a=c(e)===c(n),o=JSON.stringify(s.params||{})===JSON.stringify(t.params||{}),i=JSON.stringify(s.state||{})===JSON.stringify(t.state||{});return a&&o&&i}updateDOM(s){const t=this.shadowRoot?.children[0],e=!!t;t&&t.remove(),s&&(this.shadowRoot?.append(s),this.shadowRoot?.contains(s)&&(s.animate([{opacity:0},{opacity:1}],{duration:e?150:100,easing:"cubic-bezier(0.25, 0.8, 0.25, 1)",fill:"forwards"}).onfinish=()=>{s.style.opacity="1"}))}updateInternalState(s,t){if(!t)return;const e={component:t.tagName.toLowerCase(),state:s.state||{},area:this.name,params:s.params||{}};u.current.set(this.name,e),u.$current.next(u.current)}updateBrowserHistory(s,t){if(!u.enableHistoryMode||!t)return;const e={component:t.tagName.toLowerCase(),state:s.state||{},area:this.name,params:s.params||{}};u._updateBrowserHistory(this.name,e,s.historyStrategy,s.clearQueryParams)}newPath(s,t){const e=location.pathname.split("/").pop();let n={};try{n=e?JSON.parse(decodeURIComponent(e)):{}}catch{n={}}t.state=t.state??{};const c=t.clearQueryParams?this.queryParamClear(t.clearQueryParams):document.location.search;return encodeURIComponent(JSON.stringify({...n,[this.name]:{component:s.toLowerCase(),state:t.state,params:t.params}})).concat(`${c}`)}queryParamClear(s){if(!s)return"";const t=new URLSearchParams(location.search);return s===!0?"":(s.forEach(e=>t.delete(e)),t.toString()===""?"":`?${t.toString()}`)}disconnectedCallback(){super.disconnectedCallback(),this.routingSubscription&&(this.routingSubscription.unsubscribe(),this.routingSubscription=void 0),this.currentComponent=null}render(){return g.html` <slot> </slot> `}},d([m.property()],exports.SchmancyArea.prototype,"name",2),d([m.property()],exports.SchmancyArea.prototype,"default",2),d([m.queryAssignedElements({selector:"schmancy-route"})],exports.SchmancyArea.prototype,"routes",2),exports.SchmancyArea=d([m.customElement("schmancy-area")],exports.SchmancyArea);var j=Object.defineProperty,v=Object.getOwnPropertyDescriptor,f=(s,t,e,n)=>{for(var c,a=n>1?void 0:n?v(t,e):t,o=s.length-1;o>=0;o--)(c=s[o])&&(a=(n?c(t,e,a):c(a))||a);return n&&a&&j(t,e,a),a};exports.SchmancyRoute=class extends E.$LitElement(g.css`
8
- :host {
9
- display: none;
10
- }
11
- `){constructor(){super(...arguments),this.exact=!1}getConfig(){return{when:this.when,component:this.component,exact:this.exact,guard:this.guard}}render(){return g.html``}},f([m.property({type:String})],exports.SchmancyRoute.prototype,"when",2),f([m.property({type:Object})],exports.SchmancyRoute.prototype,"component",2),f([m.property({type:Boolean})],exports.SchmancyRoute.prototype,"exact",2),f([m.property({type:Object})],exports.SchmancyRoute.prototype,"guard",2),exports.SchmancyRoute=f([m.customElement("schmancy-route")],exports.SchmancyRoute),exports.FINDING_MORTIES=R,exports.HERE_RICKY=O,exports.HISTORY_STRATEGY=l,exports.area=u,exports.routerHistory=b;
12
- //# sourceMappingURL=route.component-BWVESeW2.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"route.component-BWVESeW2.cjs","sources":["../src/area/area.service.ts","../src/area/router.types.ts","../src/area/area.component.ts","../src/area/route.component.ts"],"sourcesContent":["import { \n\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\n// Track navigation source to prevent history conflicts\ntype NavigationSource = 'programmatic' | 'browser' | 'initial'\n\nclass AreaService implements AreaSubscription {\n\tprivate static instance: AreaService\n\tpublic prettyURL = false\n\tpublic mode: 'SILENT' | 'HISTORY' = 'HISTORY'\n\tpublic request = new ReplaySubject<RouteAction>(1)\n\tpublic current = new Map<string, ActiveRoute>()\n\tpublic $current = new ReplaySubject<Map<string, ActiveRoute>>(1)\n\t\n\t// Create a dictionary of ReplaySubjects for area-specific subscriptions\n\tprivate get areaSubjects(): Map<string, ReplaySubject<ActiveRoute>> {\n\t\tlet subjects = areaSubjectsCache.get(this)\n\t\tif (!subjects) {\n\t\t\tsubjects = new Map()\n\t\t\tareaSubjectsCache.set(this, subjects)\n\t\t}\n\t\treturn subjects\n\t}\n\t\n\tpublic enableHistoryMode = true\n\tprivate findingMortiesEvent = new CustomEvent<FINDING_MORTIES_EVENT['detail']>(FINDING_MORTIES)\n\tprivate disposed = false\n\tpublic isProcessingPopstate = false\n\n\tconstructor() {\n\t\tthis.$current.next(this.current)\n\t\t\n\t\t// Subscribe to current changes to update area-specific subjects\n\t\tthis.$current.subscribe(currentAreas => {\n\t\t\tif (this.disposed) return\n\t\t\t\n\t\t\t// For each area in the current map\n\t\t\tcurrentAreas.forEach((route, areaName) => {\n\t\t\t\t// Get or create a subject for this area\n\t\t\t\tconst areaSubject = this.getOrCreateAreaSubject(areaName)\n\t\t\t\t// Emit the updated route to area-specific subscribers\n\t\t\t\tareaSubject.next(route)\n\t\t\t})\n\t\t})\n\n\t\t// Initialize from browser state if available\n\t\tthis.initializeFromBrowserState()\n\t}\n\n\t/**\n\t * Initialize router state from browser history state\n\t */\n\tprivate initializeFromBrowserState() {\n\t\ttry {\n\t\t\tconst browserState = history.state\n\t\t\tif (browserState && browserState.schmancyAreas) {\n\t\t\t\tObject.entries(browserState.schmancyAreas).forEach(([areaName, route]) => {\n\t\t\t\t\tthis.current.set(areaName, route as ActiveRoute)\n\t\t\t\t})\n\t\t\t\tthis.$current.next(this.current)\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.warn('Failed to initialize from browser state:', error)\n\t\t}\n\t}\n\n\t/**\n\t * Get or create a ReplaySubject for a specific area with proper cleanup\n\t */\n\tprivate getOrCreateAreaSubject(areaName: string): ReplaySubject<ActiveRoute> {\n\t\tlet subject = this.areaSubjects.get(areaName)\n\t\t\n\t\tif (!subject || subject.closed) {\n\t\t\tsubject = new ReplaySubject<ActiveRoute>(1)\n\t\t\tthis.areaSubjects.set(areaName, subject)\n\t\t\t\n\t\t\t// If the area already exists in current, emit it immediately\n\t\t\tconst currentRoute = this.current.get(areaName)\n\t\t\tif (currentRoute) {\n\t\t\t\tsubject.next({\n\t\t\t\t\t...currentRoute,\n\t\t\t\t\t// Ensure state, params and props are initialized if undefined\n\t\t\t\t\tstate: currentRoute.state || {},\n\t\t\t\t\tparams: currentRoute.params || {},\n\t\t\t\t\tprops: currentRoute.props || {}\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn subject\n\t}\n\n\t/**\n\t * Subscribe to a specific area with caching\n\t */\n\ton(areaName: string, skipCurrent = false): Observable<ActiveRoute> {\n\t\tif (!areaName) {\n\t\t\tthrow new Error('Area name is required')\n\t\t}\n\t\t\n\t\tconst areaSubject = this.getOrCreateAreaSubject(areaName)\n\t\tconst observable = areaSubject.asObservable().pipe(\n\t\t\t// Add distinct to prevent duplicate emissions - now includes state\n\t\t\tdistinctUntilChanged((a, b) => \n\t\t\t\ta.component === b.component &&\n\t\t\t\tJSON.stringify(a.state) === JSON.stringify(b.state) &&\n\t\t\t\tJSON.stringify(a.params) === JSON.stringify(b.params)\n\t\t\t),\n\t\t\t// Share the subscription\n\t\t\tshareReplay(1)\n\t\t)\n\t\t\n\t\treturn skipCurrent ? observable.pipe(skip(1)) : observable\n\t}\n\t\n\t/**\n\t * Subscribe to all areas\n\t */\n\tall(skipCurrent = false): Observable<Map<string, ActiveRoute>> {\n\t\tconst observable = this.$current.asObservable().pipe(\n\t\t\tshareReplay(1)\n\t\t)\n\t\treturn skipCurrent ? observable.pipe(skip(1)) : observable\n\t}\n\t\n\t/**\n\t * Get state from an area with type safety\n\t */\n\tgetState<T = unknown>(areaName: string): Observable<T> {\n\t\tif (!areaName) {\n\t\t\tthrow new Error('Area name is required')\n\t\t}\n\t\t\n\t\treturn this.on(areaName).pipe(\n\t\t\tmap(route => route.state),\n\t\t\tfilter((state): state is NonNullable<Record<string, unknown>> => \n\t\t\t\tstate !== undefined && state !== null\n\t\t\t),\n\t\t\tdistinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\n\t\t\tmap(state => state as T),\n\t\t\tcatchError(err => {\n\t\t\t\tconsole.error(`Error getting state for area \"${areaName}\":`, err)\n\t\t\t\treturn EMPTY\n\t\t\t})\n\t\t)\n\t}\n\t\n\t/**\n\t * Get params from an area with type safety\n\t */\n\tparams<T extends Record<string, unknown> = Record<string, unknown>>(areaName: string): Observable<T> {\n\t\tif (!areaName) {\n\t\t\tthrow new Error('Area name is required')\n\t\t}\n\t\t\n\t\treturn this.on(areaName).pipe(\n\t\t\tmap(route => route.params),\n\t\t\tfilter((params): params is NonNullable<Record<string, unknown>> => \n\t\t\t\tparams !== undefined && params !== null\n\t\t\t),\n\t\t\tdistinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\n\t\t\tmap(params => params as T),\n\t\t\tcatchError(err => {\n\t\t\t\tconsole.error(`Error getting params for area \"${areaName}\":`, err)\n\t\t\t\treturn EMPTY\n\t\t\t})\n\t\t)\n\t}\n\t\n\t/**\n\t * Get a specific param from an area with null safety\n\t */\n\tparam<T = unknown>(areaName: string, key: string): Observable<T> {\n\t\tif (!areaName || !key) {\n\t\t\tthrow new Error('Area name and key are required')\n\t\t}\n\t\t\n\t\treturn this.params<Record<string, unknown>>(areaName).pipe(\n\t\t\tmap(params => params[key]),\n\t\t\tfilter((value): value is NonNullable<unknown> => value !== undefined),\n\t\t\tdistinctUntilChanged(),\n\t\t\tmap(value => value as T),\n\t\t\tcatchError(err => {\n\t\t\t\tconsole.error(`Error getting param \"${key}\" for area \"${areaName}\":`, err)\n\t\t\t\treturn EMPTY\n\t\t\t})\n\t\t)\n\t}\n\t\n\t/**\n\t * Get props from an area with type safety\n\t */\n\tprops<T extends Record<string, unknown> = Record<string, unknown>>(areaName: string): Observable<T> {\n\t\tif (!areaName) {\n\t\t\tthrow new Error('Area name is required')\n\t\t}\n\t\t\n\t\treturn this.on(areaName).pipe(\n\t\t\tmap(route => route.props),\n\t\t\tfilter((props): props is NonNullable<Record<string, unknown>> => \n\t\t\t\tprops !== undefined && props !== null\n\t\t\t),\n\t\t\tdistinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\n\t\t\tmap(props => props as T),\n\t\t\tcatchError(err => {\n\t\t\t\tconsole.error(`Error getting props for area \"${areaName}\":`, err)\n\t\t\t\treturn EMPTY\n\t\t\t})\n\t\t)\n\t}\n\t\n\t/**\n\t * Get a specific prop from an area with null safety\n\t */\n\tprop<T = unknown>(areaName: string, key: string): Observable<T> {\n\t\tif (!areaName || !key) {\n\t\t\tthrow new Error('Area name and key are required')\n\t\t}\n\t\t\n\t\treturn this.props<Record<string, unknown>>(areaName).pipe(\n\t\t\tmap(props => props[key]),\n\t\t\tfilter((value): value is NonNullable<unknown> => value !== undefined),\n\t\t\tdistinctUntilChanged(),\n\t\t\tmap(value => value as T),\n\t\t\tcatchError(err => {\n\t\t\t\tconsole.error(`Error getting prop \"${key}\" for area \"${areaName}\":`, err)\n\t\t\t\treturn EMPTY\n\t\t\t})\n\t\t)\n\t}\n\n\t/**\n\t * Find teleportation components\n\t */\n\tfind() {\n\t\treturn zip([\n\t\t\tfromEvent<HERE_RICKY_EVENT>(window, HERE_RICKY).pipe(\n\t\t\t\tmap(e => e.detail),\n\t\t\t\tbufferTime(0),\n\t\t\t),\n\t\t\tof(1).pipe(tap(() => window.dispatchEvent(this.findingMortiesEvent))),\n\t\t]).pipe(\n\t\t\tmap(([component]) => component),\n\t\t\ttimeout(1),\n\t\t\tcatchError(() => EMPTY)\n\t\t)\n\t}\n\n\t/**\n\t * Push a new route action with validation\n\t */\n\tpush(r: RouteAction) {\n\t\tif (!r.area) {\n\t\t\tthrow new Error('Area is required for route action')\n\t\t}\n\t\t\n\t\t// Prevent processing during popstate handling\n\t\tif (this.isProcessingPopstate) {\n\t\t\treturn\n\t\t}\n\t\t\n\t\t// Ensure state, params and props are initialized\n\t\tconst routeAction: RouteAction = {\n\t\t\t...r,\n\t\t\tstate: r.state || {},\n\t\t\tparams: r.params || {},\n\t\t\tprops: r.props || {},\n\t\t\t_source: 'programmatic' as NavigationSource\n\t\t}\n\t\t\n\t\t// Add to history if enabled\n\t\tif (this.enableHistoryMode) {\n\t\t\trouterHistory.next(routeAction)\n\t\t}\n\t\t\n\t\tthis.request.next(routeAction)\n\t\t// Emit an area-specific event for those who want to listen directly to DOM events\n\t\tthis.dispatchAreaEvent(routeAction.area, routeAction)\n\t}\n\n\t/**\n\t * Internal method to update route from browser navigation\n\t * This should only be called by area components during popstate handling\n\t */\n\t_updateFromBrowser(routeAction: RouteAction) {\n\t\tconst enhancedRoute: RouteAction = {\n\t\t\t...routeAction,\n\t\t\tstate: routeAction.state || {},\n\t\t\tparams: routeAction.params || {},\n\t\t\tprops: routeAction.props || {},\n\t\t\t_source: 'browser' as NavigationSource\n\t\t}\n\t\t\n\t\tthis.isProcessingPopstate = true\n\t\tthis.request.next(enhancedRoute)\n\t\tthis.isProcessingPopstate = false\n\t}\n\n\t/**\n\t * Update browser history state (called by area components)\n\t */\n\t_updateBrowserHistory(areaName: string, route: ActiveRoute, historyStrategy?: string, clearQueryParams?: string[] | boolean | null) {\n\t\tif (!this.enableHistoryMode) return\n\t\t\n\t\ttry {\n\t\t\t// Get current browser state or create new one\n\t\t\tconst currentState = history.state || {}\n\t\t\tconst schmancyAreas = currentState.schmancyAreas || {}\n\t\t\t\n\t\t\t// Update the specific area - only include non-empty state/params/props\n\t\t\tconst areaData: any = {\n\t\t\t\tcomponent: route.component,\n\t\t\t\tarea: route.area\n\t\t\t}\n\t\t\t\n\t\t\t// Only include state if it has content\n\t\t\tif (route.state && Object.keys(route.state).length > 0) {\n\t\t\t\tareaData.state = route.state\n\t\t\t}\n\t\t\t\n\t\t\t// Only include params if it has content\n\t\t\tif (route.params && Object.keys(route.params).length > 0) {\n\t\t\t\tareaData.params = route.params\n\t\t\t}\n\t\t\t\n\t\t\t// Only include props if it has content\n\t\t\tif (route.props && Object.keys(route.props).length > 0) {\n\t\t\t\tareaData.props = route.props\n\t\t\t}\n\t\t\t\n\t\t\tschmancyAreas[areaName] = areaData\n\t\t\t\n\t\t\tconst newState = {\n\t\t\t\t...currentState,\n\t\t\t\tschmancyAreas\n\t\t\t}\n\t\t\t\n\t\t\t// Create clean URL\n\t\t\tconst url = this.createCleanURL(schmancyAreas, clearQueryParams)\n\t\t\t\n\t\t\t// Update browser history\n\t\t\tif (historyStrategy === 'replace' || historyStrategy === 'pop') {\n\t\t\t\thistory.replaceState(newState, '', url)\n\t\t\t} else if (historyStrategy === 'push' || !historyStrategy) {\n\t\t\t\thistory.pushState(newState, '', url)\n\t\t\t}\n\t\t\t// 'silent' strategy doesn't update browser history\n\t\t\t\n\t\t} catch (error) {\n\t\t\tconsole.error('Failed to update browser history:', error)\n\t\t}\n\t}\n\n\t/**\n\t * Create a clean URL from area states\n\t */\n\tprivate createCleanURL(areas: Record<string, ActiveRoute>, clearQueryParams?: string[] | boolean | null): string {\n\t\t// Handle query parameters\n\t\tlet queryString = ''\n\t\t\n\t\tif (clearQueryParams !== true) {\n\t\t\t// Get current query params\n\t\t\tconst urlParams = new URLSearchParams(location.search)\n\t\t\t\n\t\t\t// Clear specific params if provided\n\t\t\tif (Array.isArray(clearQueryParams)) {\n\t\t\t\tclearQueryParams.forEach(param => urlParams.delete(param))\n\t\t\t}\n\t\t\t\n\t\t\t// Convert back to string\n\t\t\tqueryString = urlParams.toString()\n\t\t\tqueryString = queryString ? `?${queryString}` : ''\n\t\t}\n\t\t// If clearQueryParams === true, queryString remains empty (all params cleared)\n\t\t\n\t\tif (this.prettyURL) {\n\t\t\t// Create pretty URLs - customize this based on your routing needs\n\t\t\tconst mainArea = areas.main\n\t\t\tif (mainArea) {\n\t\t\t\tlet path = `/${mainArea.component}`\n\t\t\t\t\n\t\t\t\t// Add simple params to URL\n\t\t\t\tconst searchParams = new URLSearchParams(queryString)\n\t\t\t\tif (mainArea.params) {\n\t\t\t\t\tObject.entries(mainArea.params).forEach(([key, value]) => {\n\t\t\t\t\t\tif (typeof value === 'string' || typeof value === 'number') {\n\t\t\t\t\t\t\tsearchParams.set(key, String(value))\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tconst query = searchParams.toString()\n\t\t\t\treturn path + (query ? `?${query}` : '')\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Fallback to encoded state in URL (original behavior)\n\t\ttry {\n\t\t\t// Clean up empty objects before encoding\n\t\t\tconst cleanedAreas: Record<string, any> = {}\n\t\t\tObject.entries(areas).forEach(([areaName, route]) => {\n\t\t\t\tconst cleanRoute: any = { component: route.component }\n\t\t\t\t\n\t\t\t\t// Only include state if it has content\n\t\t\t\tif (route.state && Object.keys(route.state).length > 0) {\n\t\t\t\t\tcleanRoute.state = route.state\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Only include params if it has content\n\t\t\t\tif (route.params && Object.keys(route.params).length > 0) {\n\t\t\t\t\tcleanRoute.params = route.params\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Only include props if it has content\n\t\t\t\tif (route.props && Object.keys(route.props).length > 0) {\n\t\t\t\t\tcleanRoute.props = route.props\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcleanedAreas[areaName] = cleanRoute\n\t\t\t})\n\t\t\t\n\t\t\tconst encoded = encodeURIComponent(JSON.stringify(cleanedAreas))\n\t\t\treturn `/${encoded}${queryString}`\n\t\t} catch (error) {\n\t\t\tconsole.error('Failed to encode URL state:', error)\n\t\t\treturn location.pathname\n\t\t}\n\t}\n\n\t/**\n\t * Restore state from browser history state\n\t */\n\trestoreFromBrowserState(browserState: any): Record<string, ActiveRoute> {\n\t\ttry {\n\t\t\tif (browserState && browserState.schmancyAreas) {\n\t\t\t\treturn browserState.schmancyAreas\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error('Failed to restore from browser state:', error)\n\t\t}\n\t\t\n\t\t// Fallback to URL parsing (original behavior)\n\t\treturn this.parseStateFromURL()\n\t}\n\n\t/**\n\t * Parse state from URL (fallback method)\n\t */\n\tprivate parseStateFromURL(): Record<string, ActiveRoute> {\n\t\tconst pathname = location.pathname.split('/').pop()\n\t\tif (!pathname) return {}\n\t\t\n\t\ttry {\n\t\t\tconst decoded = decodeURIComponent(pathname)\n\t\t\tconst parsed = JSON.parse(decoded)\n\t\t\t\n\t\t\tif (typeof parsed === 'object' && parsed !== null) {\n\t\t\t\treturn parsed\n\t\t\t}\n\t\t} catch {\n\t\t\t// Ignore parse errors\n\t\t}\n\t\t\n\t\treturn {}\n\t}\n\t\n\t/**\n\t * Dispatch a DOM event for a specific area change\n\t */\n\tprivate dispatchAreaEvent(areaName: string, routeAction: RouteAction) {\n\t\tconst eventName = `schmancy-area-${areaName}-changed`\n\t\tconst event = new CustomEvent(eventName, { \n\t\t\tdetail: { \n\t\t\t\tarea: areaName,\n\t\t\t\tcomponent: routeAction.component,\n\t\t\t\tstate: routeAction.state,\n\t\t\t\tparams: routeAction.params,\n\t\t\t\tprops: routeAction.props,\n\t\t\t\thistoryStrategy: routeAction.historyStrategy\n\t\t\t},\n\t\t\tbubbles: true,\n\t\t\tcomposed: true\n\t\t})\n\t\twindow.dispatchEvent(event)\n\t}\n\n\t/**\n\t * Remove an area from the current state\n\t */\n\tpop(name: string) {\n\t\tif (!name) {\n\t\t\tthrow new Error('Area name is required')\n\t\t}\n\n\t\t// Before removing from current map, emit a clearing signal to the area's subject\n\t\t// This notifies the area component to clear itself\n\t\tconst areaSubject = this.areaSubjects.get(name)\n\t\tif (areaSubject && !areaSubject.closed) {\n\t\t\t// Send a route with null component to signal clearing\n\t\t\tareaSubject.next({\n\t\t\t\tcomponent: null as any,\n\t\t\t\tstate: {},\n\t\t\t\tarea: name,\n\t\t\t\tparams: {},\n\t\t\t\tprops: {}\n\t\t\t})\n\t\t}\n\n\t\t// Send a clearing signal through the request pipeline\n\t\t// This ensures the area component receives the signal to clear\n\t\tthis.request.next({\n\t\t\tarea: name,\n\t\t\tcomponent: null as any,\n\t\t\tstate: {},\n\t\t\tparams: {},\n\t\t\tprops: {},\n\t\t\thistoryStrategy: 'silent' as any,\n\t\t\t_source: 'programmatic' as NavigationSource\n\t\t})\n\n\t\t// Remove from current map\n\t\tthis.current.delete(name)\n\t\tthis.$current.next(this.current)\n\n\t\t// Update browser history\n\t\tif (this.enableHistoryMode) {\n\t\t\ttry {\n\t\t\t\tconst currentState = history.state || {}\n\t\t\t\tconst schmancyAreas = { ...(currentState.schmancyAreas || {}) }\n\t\t\t\tdelete schmancyAreas[name]\n\n\t\t\t\tconst newState = {\n\t\t\t\t\t...currentState,\n\t\t\t\t\tschmancyAreas\n\t\t\t\t}\n\n\t\t\t\tconst url = this.createCleanURL(schmancyAreas)\n\t\t\t\thistory.replaceState(newState, '', url)\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error('Failed to update history after pop:', error)\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * Clear all areas\n\t */\n\tclear() {\n\t\t// Complete all area subjects\n\t\tthis.areaSubjects.forEach(subject => subject.complete())\n\t\tthis.areaSubjects.clear()\n\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\tif (this.enableHistoryMode) {\n\t\t\thistory.replaceState({ schmancyAreas: {} }, '', `/${location.search}`)\n\t\t}\n\t}\n\t\n\t/**\n\t * Dispose of the service and clean up resources\n\t */\n\tdispose() {\n\t\tif (this.disposed) return\n\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 (deprecated - use browser state instead)\n\t */\n\tget state(): Record<string, unknown> {\n\t\t// Try browser state first\n\t\ttry {\n\t\t\tconst browserState = history.state\n\t\t\tif (browserState && browserState.schmancyAreas) {\n\t\t\t\treturn browserState.schmancyAreas\n\t\t\t}\n\t\t} catch {\n\t\t\t// Fallback to URL parsing\n\t\t}\n\t\t\n\t\t// Fallback to URL parsing (original behavior)\n\t\treturn this.parseStateFromURL()\n\t}\n\t\n\t/**\n\t * Check if an area exists in current state\n\t */\n\thasArea(areaName: string): boolean {\n\t\treturn this.current.has(areaName)\n\t}\n\t\n\t/**\n\t * Get all active area names\n\t */\n\tgetActiveAreas(): string[] {\n\t\treturn Array.from(this.current.keys())\n\t}\n\t\n\t/**\n\t * Get route for a specific area synchronously\n\t */\n\tgetRoute(areaName: string): ActiveRoute | undefined {\n\t\treturn this.current.get(areaName)\n\t}\n}\n\nexport const area = AreaService.getInstance()\nexport default area\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 | Promise<any>\n\tarea: string\n\tstate?: Record<string, unknown>\n\tparams?: Record<string, unknown>\n\tprops?: Record<string, unknown> // Alias for params\n\thistoryStrategy?: THistoryStrategy\n\tclearQueryParams?: string[] | boolean | null\n\t_source?: 'programmatic' | 'browser' | 'initial' // Internal use only\n}\n\nexport type ActiveRoute = {\n\tcomponent: string\n\tarea: string\n\tstate?: Record<string, unknown>\n\tparams?: Record<string, unknown>\n\tprops?: Record<string, unknown>\n}\n\n/**\n * Interface for subscribing to area changes\n */\nexport interface AreaSubscription {\n\t/**\n\t * Subscribe to a specific area\n\t * @param areaName Name of the area to subscribe to\n\t * @param skipCurrent Whether to skip the current value\n\t * @returns Observable of the active route for the specified area\n\t */\n\ton(areaName: string, skipCurrent?: boolean): import('rxjs').Observable<ActiveRoute>\n\t\n\t/**\n\t * Subscribe to all areas\n\t * @param skipCurrent Whether to skip the current value\n\t * @returns Observable of all active routes\n\t */\n\tall(skipCurrent?: boolean): import('rxjs').Observable<Map<string, ActiveRoute>>\n\t\n\t/**\n\t * Get state from an area\n\t * @param areaName Name of the area to subscribe to\n\t * @returns Observable of the area's state\n\t */\n\tgetState<T = unknown>(areaName: string): import('rxjs').Observable<T>\n\t\n\t/**\n\t * Get params from an area\n\t * @param areaName Name of the area to subscribe to\n\t * @returns Observable of the area's params\n\t */\n\tparams<T extends Record<string, unknown> = Record<string, unknown>>(areaName: string): import('rxjs').Observable<T>\n\t\n\t/**\n\t * Get a specific param from an area\n\t * @param areaName Name of the area to subscribe to\n\t * @param key Key of the param to select\n\t * @returns Observable of the param value\n\t */\n\tparam<T = unknown>(areaName: string, key: string): import('rxjs').Observable<T>\n\t\n\t/**\n\t * Get props from an area\n\t * @param areaName Name of the area to subscribe to\n\t * @returns Observable of the area's props\n\t */\n\tprops<T extends Record<string, unknown> = Record<string, unknown>>(areaName: string): import('rxjs').Observable<T>\n\t\n\t/**\n\t * Get a specific prop from an area\n\t * @param areaName Name of the area to subscribe to\n\t * @param key Key of the prop to select\n\t * @returns Observable of the prop value\n\t */\n\tprop<T = unknown>(areaName: string, key: string): import('rxjs').Observable<T>\n}\n\nexport type THistoryStrategy = 'push' | 'replace' | 'pop' | 'silent'\n\nexport enum HISTORY_STRATEGY {\n\tpush = 'push',\n\treplace = 'replace',\n\tpop = 'pop',\n\tsilent = 'silent',\n}\n\n/**\n * Browser history state structure used by Schmancy Area\n */\nexport interface SchmancyHistoryState {\n\tschmancyAreas: Record<string, ActiveRoute>\n\t[key: string]: any // Allow other apps to store additional state\n}","import { $LitElement } from '@mixins/index'\nimport { TemplateResult, css, html } from 'lit'\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js'\nimport {\n\tEMPTY,\n\tObservable,\n\tSubscription,\n\tcatchError,\n\tcombineLatest,\n\tdebounceTime,\n\tdistinctUntilChanged,\n\tfilter,\n\tfrom,\n\tfromEvent,\n\tmap,\n\tmerge,\n\tof,\n\tstartWith,\n\tswitchMap,\n\ttake,\n\ttakeUntil,\n\ttap\n} from 'rxjs'\nimport area from './area.service'\nimport { SchmancyRoute } from './route.component'\nimport { ActiveRoute, HISTORY_STRATEGY, RouteAction } from './router.types'\n\n// Component types that can be passed to area\ntype ComponentInput =\n\t| string // Tag name or path\n\t| CustomElementConstructor // Constructor function\n\t| HTMLElement // Existing element\n\t| TemplateResult<1> // Lit template\n\t| (() => Promise<{ default: CustomElementConstructor }>) // Lazy loader\n\t| Promise<{ default: CustomElementConstructor }> // Dynamic import\n\n// Resolved component after processing\ntype ResolvedComponent = {\n\telement: HTMLElement | null\n}\n\n// Route source for debugging\ntype RouteSource = 'initial' | 'navigation' | 'popstate'\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 * Query for assigned route elements in the slot\n\t * This will automatically update when slot content changes\n\t */\n\t@queryAssignedElements({ selector: 'schmancy-route' })\n\tprivate routes!: SchmancyRoute[]\n\n\t/**\n\t * Subscription to the routing pipeline\n\t */\n\tprivate routingSubscription?: Subscription\n\n\t/**\n\t * Track the current component to prevent circular default application\n\t */\n\tprivate currentComponent: string | null = null\n\n\t/**\n\t * Unified route resolver that handles all routing scenarios\n\t * This is the single source of truth for resolving routes\n\t */\n\tprivate resolveRoute(\n\t\tsource: RouteSource,\n\t\tdata?: string | PopStateEvent | RouteAction | null,\n\t\thistoryStrategy: HISTORY_STRATEGY = HISTORY_STRATEGY.silent,\n\t\troutes: SchmancyRoute[] = []\n\t): Observable<RouteAction> {\n\n\t\tswitch (source) {\n\t\t\tcase 'initial':\n\t\t\tcase 'popstate': {\n\t\t\t\t// Handle initial load or popstate event\n\t\t\t\tif (source === 'popstate' && data && typeof data === 'object' && 'state' in data) {\n\t\t\t\t\t// Try to get from browser state first\n\t\t\t\t\tconst event = data as PopStateEvent\n\t\t\t\t\tconst state = event.state?.schmancyAreas?.[this.name]\n\t\t\t\t\tif (state) {\n\t\t\t\t\t\treturn of({\n\t\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t\t\tcomponent: state.component,\n\t\t\t\t\t\t\tstate: state.state || {},\n\t\t\t\t\t\t\tparams: state.params || {},\n\t\t\t\t\t\t\thistoryStrategy: HISTORY_STRATEGY.silent\n\t\t\t\t\t\t} as RouteAction)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Fall back to segment matching\n\t\t\t\tconst pathname = typeof data === 'string' ? data : location.pathname\n\t\t\t\treturn this.matchSegmentToRoute(pathname, historyStrategy, routes)\n\t\t\t}\n\n\t\t\tcase 'navigation': {\n\t\t\t\t// Direct navigation request\n\t\t\t\tif (!data || typeof data !== 'object' || !('component' in data)) {\n\t\t\t\t\treturn EMPTY\n\t\t\t\t}\n\t\t\t\treturn of(data as RouteAction)\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\treturn EMPTY\n\t\t}\n\t}\n\n\t/**\n\t * Match URL to route using both JSON-based (core) and segment-based (enhancement) routing\n\t */\n\tprivate matchSegmentToRoute(pathname: string, historyStrategy: HISTORY_STRATEGY, routes: SchmancyRoute[]): Observable<RouteAction> {\n\n\t\t// 1. CORE LOGIC: Try JSON-based routing first (this is the primary routing mechanism)\n\t\t// JSON routing allows for complete state and component configuration via URL\n\t\tconst lastSegment = pathname.split('/').pop() || ''\n\n\t\tif (lastSegment && (lastSegment.includes('{') || lastSegment.includes('%7B'))) {\n\t\t\ttry {\n\t\t\t\tconst decoded = decodeURIComponent(lastSegment)\n\t\t\t\tconst parsed = JSON.parse(decoded)\n\n\t\t\t\t// JSON was successfully parsed\n\t\t\t\t// Check if this specific area has a component in the JSON state\n\t\t\t\tif (parsed[this.name]) {\n\t\t\t\t\treturn of({\n\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t\tcomponent: parsed[this.name].component,\n\t\t\t\t\t\tstate: parsed[this.name].state || {},\n\t\t\t\t\t\tparams: parsed[this.name].params || {},\n\t\t\t\t\t\thistoryStrategy\n\t\t\t\t\t} as RouteAction)\n\t\t\t\t}\n\n\t\t\t} catch (e) {\n\t\t\t\t// Not valid JSON, continue to segment matching\n\t\t\t}\n\t\t}\n\n\t\t// 2. ENHANCEMENT: Try segment-based routing (new feature - only if routes are configured)\n\t\t// Segment routing provides clean URLs for defined routes\n\t\tif (routes && routes.length > 0) {\n\t\t\t// Extract the first segment from the pathname\n\t\t\tconst segments = pathname.split('/').filter(Boolean)\n\t\t\tconst currentSegment = segments[0] || ''\n\n\t\t\t// Find matching route by when attribute\n\t\t\tfor (const route of routes) {\n\t\t\t\tconst routeWhen = route.when\n\n\t\t\t\tif (routeWhen === currentSegment) {\n\n\t\t\t\t\t// Check guard if present\n\t\t\t\t\tif (route.guard) {\n\t\t\t\t\t\treturn from(Promise.resolve(route.guard())).pipe(\n\t\t\t\t\t\t\tswitchMap(guardResult => {\n\n\t\t\t\t\t\t\t\t// Handle guard result\n\t\t\t\t\t\t\t\tif (guardResult === true) {\n\t\t\t\t\t\t\t\t\t// Guard passed, proceed with the route\n\t\t\t\t\t\t\t\t\treturn of({\n\t\t\t\t\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t\t\t\t\t\tcomponent: route.component,\n\t\t\t\t\t\t\t\t\t\tstate: {},\n\t\t\t\t\t\t\t\t\t\tparams: {},\n\t\t\t\t\t\t\t\t\t\thistoryStrategy\n\t\t\t\t\t\t\t\t\t} as RouteAction)\n\t\t\t\t\t\t\t\t} else if (guardResult === false) {\n\t\t\t\t\t\t\t\t\t// Guard failed, stop navigation\n\t\t\t\t\t\t\t\t\treturn EMPTY\n\t\t\t\t\t\t\t\t} else if (typeof guardResult === 'string') {\n\t\t\t\t\t\t\t\t\t// Redirect to string path\n\t\t\t\t\t\t\t\t\treturn this.matchSegmentToRoute(guardResult, historyStrategy, routes)\n\t\t\t\t\t\t\t\t} else if (typeof guardResult === 'object' && guardResult.redirect) {\n\t\t\t\t\t\t\t\t\t// Redirect to path in object\n\t\t\t\t\t\t\t\t\treturn this.matchSegmentToRoute(guardResult.redirect, historyStrategy, routes)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Invalid guard result\n\t\t\t\t\t\t\t\t\tconsole.error(`[${this.name}] Invalid guard result:`, guardResult)\n\t\t\t\t\t\t\t\t\treturn EMPTY\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tcatchError(err => {\n\t\t\t\t\t\t\t\tconsole.error(`[${this.name}] Guard error:`, err)\n\t\t\t\t\t\t\t\treturn EMPTY\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\n\t\t\t\t\t// No guard, proceed with the route\n\t\t\t\t\treturn of({\n\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t\tcomponent: route.component,\n\t\t\t\t\t\tstate: {},\n\t\t\t\t\t\tparams: {},\n\t\t\t\t\t\thistoryStrategy\n\t\t\t\t\t} as RouteAction)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// No routes matched, return EMPTY\n\t\treturn EMPTY\n\t}\n\n\n\t/**\n\t * Resolve component input to HTMLElement\n\t * Handles strings, constructors, promises, lazy loading, etc.\n\t */\n\tprivate async resolveComponent(component: ComponentInput): Promise<ResolvedComponent> {\n\n\t\t// Handle empty/null cases\n\t\tif (!component || component === '') {\n\t\t\treturn { element: null }\n\t\t}\n\n\t\t// Handle string (tag name)\n\t\tif (typeof component === 'string') {\n\t\t\ttry {\n\t\t\t\tconst element = document.createElement(component)\n\t\t\t\treturn { element }\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(`[${this.name}] Failed to create element:`, component, error)\n\t\t\t\tif (this.default && typeof this.default === 'string') {\n\t\t\t\t\tconst element = document.createElement(this.default)\n\t\t\t\t\treturn { element }\n\t\t\t\t}\n\t\t\t\treturn { element: null }\n\t\t\t}\n\t\t}\n\n\t\t// Handle HTMLElement\n\t\tif (component instanceof HTMLElement) {\n\t\t\treturn { element: component }\n\t\t}\n\n\t\t// Handle constructor function\n\t\tif (typeof component === 'function' && !('then' in component)) {\n\t\t\ttry {\n\t\t\t\tconst element = new (component as CustomElementConstructor)()\n\t\t\t\treturn { element }\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(`[${this.name}] Failed to instantiate component:`, error)\n\t\t\t\treturn { element: null }\n\t\t\t}\n\t\t}\n\n\t\t// Handle lazy loading function\n\t\tif (typeof component === 'function') {\n\t\t\ttry {\n\t\t\t\tconst module = await (component as () => Promise<{ default: CustomElementConstructor }>)()\n\t\t\t\tconst Constructor = module.default\n\t\t\t\tconst element = new Constructor()\n\t\t\t\treturn { element }\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(`[${this.name}] Failed to load dynamic component:`, error)\n\t\t\t\treturn { element: null }\n\t\t\t}\n\t\t}\n\n\t\t// Handle Promise (dynamic import)\n\t\tif (component instanceof Promise) {\n\t\t\ttry {\n\t\t\t\tconst module = await component\n\t\t\t\tconst Constructor = module.default\n\t\t\t\tconst element = new Constructor()\n\t\t\t\treturn { element }\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(`[${this.name}] Failed to load promise component:`, error)\n\t\t\t\treturn { element: null }\n\t\t\t}\n\t\t}\n\n\t\t// Fallback for unknown types\n\t\tconsole.warn(`[${this.name}] Unknown component type:`, typeof component, component)\n\t\treturn { element: null }\n\t}\n\n\tprotected firstUpdated(): void {\n\t\tif (!this.name) {\n\t\t\tthrow new Error('Area name is required')\n\t\t}\n\n\t\t// Clean up any existing subscription before creating a new one\n\t\tthis.routingSubscription?.unsubscribe()\n\n\t\t// Create a reactive stream from slot changes\n\t\tconst slot = this.shadowRoot?.querySelector('slot') as HTMLSlotElement\n\t\tconst slotChanges$ = slot ? fromEvent(slot, 'slotchange').pipe(\n\t\t\tstartWith(null), // Emit immediately to capture initial state\n\t\t\tmap(() => this.routes || []), // Use queryAssignedElements result\n\t\t) : of([])\n\n\t\t// Create navigation event streams that will be combined with routes\n\t\tconst initialLoad$ = combineLatest([\n\t\t\tof(location.pathname),\n\t\t\tslotChanges$\n\t\t]).pipe(\n\t\t\ttake(1),\n\t\t\tswitchMap(([pathname, routes]) => this.resolveRoute('initial', pathname, HISTORY_STRATEGY.silent, routes)),\n\t\t)\n\n\t\tconst navigation$ = combineLatest([\n\t\t\tarea.request.pipe(filter(({ area }) => area === this.name)),\n\t\t\tslotChanges$\n\t\t]).pipe(\n\t\t\tswitchMap(([route, routes]) => this.resolveRoute('navigation', route, HISTORY_STRATEGY.silent, routes)),\n\t\t)\n\n\t\tconst popstate$ = combineLatest([\n\t\t\tfromEvent<PopStateEvent>(window, 'popstate'),\n\t\t\tslotChanges$\n\t\t]).pipe(\n\t\t\tswitchMap(([event, routes]) => this.resolveRoute('popstate', event, HISTORY_STRATEGY.silent, routes)),\n\t\t)\n\n\t\t// Create the base routing stream\n\t\tconst baseRouting$ = merge(initialLoad$, navigation$, popstate$)\n\n\t\t// Apply default if defined and on initial load\n\t\tconst routingWithDefault$ = this.default\n\t\t\t? baseRouting$.pipe(\n\t\t\t\tstartWith({\n\t\t\t\t\tarea: this.name,\n\t\t\t\t\tcomponent: this.default,\n\t\t\t\t\tstate: {},\n\t\t\t\t\tparams: {},\n\t\t\t\t\thistoryStrategy: HISTORY_STRATEGY.silent\n\t\t\t\t} as RouteAction)\n\t\t\t)\n\t\t\t: baseRouting$\n\n\t\t// Merge the streams and create the routing pipeline\n\t\tthis.routingSubscription = routingWithDefault$.pipe(\n\t\t\t// Add debounceTime to coalesce rapid emissions (especially during initialization)\n\t\t\tdebounceTime(0),\n\n\t\t\t// Filter out invalid routes (but allow null for clearing)\n\t\t\tfilter(route => {\n\t\t\t\t// Allow null component as a signal to clear the area\n\t\t\t\tconst valid = route.component !== undefined\n\t\t\t\treturn valid\n\t\t\t}),\n\n\t\t\t// Prevent duplicate navigations using deep comparison\n\t\t\tdistinctUntilChanged((a, b) => {\n\t\t\t\tconst same = this.isSameRoute(a, b)\n\t\t\t\treturn same\n\t\t\t}),\n\n\t\t\t// Resolve component to HTMLElement\n\t\t\tswitchMap(route => {\n\t\t\t\treturn from(this.resolveComponent(route.component as ComponentInput)).pipe(\n\t\t\t\t\tmap(resolved => ({ ...resolved, route }))\n\t\t\t\t)\n\t\t\t}),\n\n\t\t\t// Apply props, params, and state to element\n\t\t\tmap(({ element, route }) => {\n\t\t\t\tif (element) {\n\t\t\t\t\t// Apply params\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\n\t\t\t\t\t// Apply props\n\t\t\t\t\tif (route.props) {\n\t\t\t\t\t\tObject.entries(route.props).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\n\t\t\t\t\t// Apply state\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}\n\n\t\t\t\treturn { element, route }\n\t\t\t}),\n\n\t\t\t// Update DOM and handle side effects\n\t\t\ttap(({ element, route }) => {\n\t\t\t\t// Update current component tracking only if not already set\n\t\t\t\t// (default component pre-sets this to prevent race condition)\n\t\t\t\tif (element) {\n\t\t\t\t\tconst elementName = element.tagName.toLowerCase()\n\t\t\t\t\t// Only update if different from what's already tracked\n\t\t\t\t\tif (this.currentComponent !== elementName) {\n\t\t\t\t\t\tthis.currentComponent = elementName\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.currentComponent = null\n\t\t\t\t}\n\n\t\t\t\t// Update DOM\n\t\t\t\tthis.updateDOM(element)\n\n\t\t\t\t// Update internal state\n\t\t\t\tif (element) {\n\t\t\t\t\tthis.updateInternalState(route, element)\n\t\t\t\t}\n\n\t\t\t\t// Handle browser history\n\t\t\t\tthis.updateBrowserHistory(route, element)\n\t\t\t}),\n\n\t\t\t// Error handling\n\t\t\tcatchError(error => {\n\t\t\t\tconsole.error(`[${this.name}] Navigation error:`, error)\n\t\t\t\treturn EMPTY\n\t\t\t}),\n\n\t\t\ttakeUntil(this.disconnecting)\n\t\t).subscribe({\n\t\t\terror: (error) => {\n\t\t\t\tconsole.error(`[${this.name}] Subscription error:`, error)\n\t\t\t}\n\t\t})\n\t}\n\n\n\t/**\n\t * Check if two routes are the same (for duplicate prevention)\n\t */\n\tprivate isSameRoute(a: RouteAction, b: RouteAction): boolean {\n\t\t// Handle null components (clearing signals)\n\t\tif (a.component === null && b.component === null) {\n\t\t\treturn true // Both are clearing signals\n\t\t}\n\t\tif (a.component === null || b.component === null) {\n\t\t\treturn false // One is clearing, one is not\n\t\t}\n\n\t\tlet aComponent = '', bComponent = ''\n\n\t\t// Extract component identifiers\n\t\tif (typeof a.component === 'function') {\n\t\t\taComponent = (a.component as any).name || a.component.toString()\n\t\t} else if (typeof a.component === 'string') {\n\t\t\taComponent = a.component\n\t\t} else if (a.component instanceof HTMLElement) {\n\t\t\taComponent = a.component.tagName.toLowerCase()\n\t\t}\n\n\t\tif (typeof b.component === 'function') {\n\t\t\tbComponent = (b.component as any).name || b.component.toString()\n\t\t} else if (typeof b.component === 'string') {\n\t\t\tbComponent = b.component\n\t\t} else if (b.component instanceof HTMLElement) {\n\t\t\tbComponent = b.component.tagName.toLowerCase()\n\t\t}\n\n\t\t// Normalize and compare\n\t\tconst normalizeComponent = (c: string) => c?.replaceAll('-', '').toLowerCase()\n\t\tconst sameComponent = normalizeComponent(aComponent) === normalizeComponent(bComponent)\n\t\tconst sameParams = JSON.stringify(a.params || {}) === JSON.stringify(b.params || {})\n\t\tconst sameState = JSON.stringify(a.state || {}) === JSON.stringify(b.state || {})\n\n\t\tconst result = sameComponent && sameParams && sameState\n\n\t\treturn result\n\t}\n\n\t/**\n\t * Update the DOM with the new component\n\t */\n\tprivate updateDOM(component: HTMLElement | null) {\n\n\t\tconst oldView = this.shadowRoot?.children[0]\n\t\tconst oldViewExists = !!oldView\n\n\t\t// Remove the old view (if any)\n\t\tif (oldView) {\n\t\t\toldView.remove()\n\t\t}\n\n\t\t// If component is null, we're clearing the area\n\t\tif (!component) {\n\t\t\treturn\n\t\t}\n\n\t\t// Add new component with animation\n\n\t\t// Append the component first\n\t\tthis.shadowRoot?.append(component)\n\n\n\t\t// Check if component was actually appended\n\t\tif (!this.shadowRoot?.contains(component)) {\n\t\t\tconsole.error(`[${this.name}] CRITICAL: Component was not appended to shadowRoot!`)\n\t\t\tconsole.error(`[${this.name}] ShadowRoot:`, this.shadowRoot)\n\t\t\tconsole.error(`[${this.name}] Component:`, component)\n\t\t\treturn\n\t\t}\n\n\t\t// Animate in without opacity class - use Web Animations API directly\n\t\tconst animation = component.animate([{ opacity: 0 }, { opacity: 1 }], {\n\t\t\tduration: oldViewExists ? 150 : 100,\n\t\t\teasing: 'cubic-bezier(0.25, 0.8, 0.25, 1)',\n\t\t\tfill: 'forwards',\n\t\t})\n\n\t\tanimation.onfinish = () => {\n\t\t\t// Ensure opacity is set to 1 after animation\n\t\t\tcomponent.style.opacity = '1'\n\t\t}\n\t}\n\n\t/**\n\t * Update internal router state\n\t */\n\tprivate updateInternalState(route: RouteAction, component: HTMLElement | null) {\n\t\t// If component is null, we're clearing\n\t\tif (!component) {\n\t\t\t// Don't update state - it's already been cleared by the service\n\t\t\treturn\n\t\t}\n\t\t\n\t\tconst activeRoute: ActiveRoute = {\n\t\t\tcomponent: component.tagName.toLowerCase(),\n\t\t\tstate: route.state || {},\n\t\t\tarea: this.name,\n\t\t\tparams: route.params || {},\n\t\t}\n\n\t\tarea.current.set(this.name, activeRoute)\n\t\tarea.$current.next(area.current)\n\t}\n\n\t/**\n\t * Update browser history (only for programmatic navigation)\n\t */\n\tprivate updateBrowserHistory(route: RouteAction, component: HTMLElement | null) {\n\t\tif (!area.enableHistoryMode) return\n\n\t\t// If clearing, don't update history (already handled by service)\n\t\tif (!component) {\n\t\t\treturn\n\t\t}\n\n\t\tconst activeRoute: ActiveRoute = {\n\t\t\tcomponent: component.tagName.toLowerCase(),\n\t\t\tstate: route.state || {},\n\t\t\tarea: this.name,\n\t\t\tparams: route.params || {},\n\t\t}\n\n\t\t// Use the service method to update browser history\n\t\tarea._updateBrowserHistory(this.name, activeRoute, route.historyStrategy, route.clearQueryParams)\n\t}\n\n\n\t/**\n\t * Create URL path for the route (legacy method, now handled by service)\n\t */\n\tnewPath(tag: string, route: RouteAction) {\n\t\tconst oldPathname = location.pathname.split('/').pop()\n\t\tlet oldAreaState = {}\n\t\ttry {\n\t\t\toldAreaState = oldPathname ? JSON.parse(decodeURIComponent(oldPathname)) : {}\n\t\t} catch {\n\t\t\toldAreaState = {}\n\t\t}\n\t\troute.state = route.state ?? {}\n\t\tconst queryParams = route.clearQueryParams ? this.queryParamClear(route.clearQueryParams) : document.location.search\n\n\t\treturn encodeURIComponent(\n\t\t\tJSON.stringify({\n\t\t\t\t...oldAreaState,\n\t\t\t\t[this.name]: { component: tag.toLowerCase(), state: route.state, params: route.params },\n\t\t\t}),\n\t\t).concat(`${queryParams}`)\n\t}\n\n\t/**\n\t * Clear query parameters\n\t */\n\tqueryParamClear(params?: string[] | boolean) {\n\t\tif (!params) {\n\t\t\treturn ''\n\t\t}\n\t\t// get query params from url\n\t\tconst urlParams = new URLSearchParams(location.search)\n\t\t\n\t\tif (params === true) {\n\t\t\t// Clear all query params\n\t\t\treturn ''\n\t\t} else {\n\t\t\t// Clear specific query params\n\t\t\tparams.forEach(param => urlParams.delete(param))\n\t\t\t// update url\n\t\t\tif (urlParams.toString() === '') return ''\n\t\t\treturn `?${urlParams.toString()}`\n\t\t}\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\t// Clean up the routing subscription\n\t\tif (this.routingSubscription) {\n\t\t\tthis.routingSubscription.unsubscribe()\n\t\t\tthis.routingSubscription = undefined\n\t\t}\n\t\t// Reset current component tracking\n\t\tthis.currentComponent = null\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}","import { html, css } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { $LitElement } from '@mixins/index';\n\nexport type GuardResult = boolean | string | { redirect: string };\n\nexport interface RouteConfig {\n when: string;\n component: any;\n exact?: boolean;\n guard?: () => GuardResult | Promise<GuardResult>;\n}\n\n/**\n * A marker component that holds route configuration.\n * This component doesn't render anything - it's used by schmancy-area\n * to configure routing via slot change detection.\n *\n * @example\n * ```html\n * <schmancy-area>\n * <schmancy-route\n * when=\"users\"\n * .component=${UserComponent}\n * exact\n * ></schmancy-route>\n * </schmancy-area>\n * ```\n */\n@customElement('schmancy-route')\nexport class SchmancyRoute extends $LitElement(css`\n :host {\n display: none;\n }\n`) {\n @property({ type: String })\n when!: string;\n\n @property({ type: Object })\n component!: any;\n\n @property({ type: Boolean })\n exact?: boolean = false;\n\n @property({ type: Object })\n guard?: () => GuardResult | Promise<GuardResult>;\n\n /**\n * Returns the route configuration object\n */\n getConfig(): RouteConfig {\n return {\n when: this.when,\n component: this.component,\n exact: this.exact,\n guard: this.guard\n };\n }\n\n render() {\n // This is a marker component - no visual output\n return html``;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'schmancy-route': SchmancyRoute;\n }\n}"],"names":["routerHistory","Subject","FINDING_MORTIES","HERE_RICKY","areaSubjectsCache","WeakMap","AreaService","this","prettyURL","mode","request","ReplaySubject","current","Map","$current","enableHistoryMode","findingMortiesEvent","CustomEvent","disposed","isProcessingPopstate","next","subscribe","currentAreas","forEach","route","areaName","getOrCreateAreaSubject","initializeFromBrowserState","areaSubjects","subjects","get","set","browserState","history","state","schmancyAreas","Object","entries","error","subject","closed","currentRoute","params","props","skipCurrent","Error","observable","asObservable","pipe","distinctUntilChanged","a","b","component","JSON","stringify","shareReplay","skip","on","map","filter","catchError","err","EMPTY","key","value","zip","fromEvent","window","e","detail","bufferTime","of","tap","dispatchEvent","timeout","r","area","routeAction","_source","dispatchAreaEvent","enhancedRoute","historyStrategy","clearQueryParams","currentState","areaData","keys","length","newState","url","createCleanURL","replaceState","pushState","areas","queryString","urlParams","URLSearchParams","location","search","Array","isArray","param","delete","toString","mainArea","main","path","searchParams","String","query","cleanedAreas","cleanRoute","encodeURIComponent","pathname","parseStateFromURL","split","pop","decoded","decodeURIComponent","parsed","parse","event","bubbles","composed","name","areaSubject","clear","complete","dispose","getInstance","instance","has","from","addEventListener","HISTORY_STRATEGY","SchmancyArea","$LitElement","css","constructor","super","arguments","currentComponent","source","data","silent","routes","matchSegmentToRoute","lastSegment","includes","currentSegment","Boolean","when","guard","Promise","resolve","switchMap","guardResult","redirect","element","document","createElement","default","HTMLElement","Constructor","firstUpdated","routingSubscription","unsubscribe","slot","shadowRoot","querySelector","slotChanges$","startWith","initialLoad$","combineLatest","take","resolveRoute","navigation$","popstate$","baseRouting$","merge","routingWithDefault$","debounceTime","isSameRoute","resolveComponent","resolved","elementName","tagName","toLowerCase","updateDOM","updateInternalState","updateBrowserHistory","takeUntil","disconnecting","aComponent","bComponent","normalizeComponent","c","replaceAll","sameComponent","sameParams","sameState","oldView","children","oldViewExists","remove","append","contains","animate","opacity","duration","easing","fill","onfinish","style","activeRoute","_updateBrowserHistory","tag","oldPathname","oldAreaState","queryParams","queryParamClear","concat","disconnectedCallback","render","html","__decorateClass","property","prototype","queryAssignedElements","selector","customElement","SchmancyRoute","exact","getConfig","type"],"mappings":"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"}