@mhmo91/schmancy 0.2.39 → 0.2.41

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 (222) hide show
  1. package/dist/{animated-text-B3UYCBgB.cjs → animated-text-CaUJr-yL.cjs} +2 -2
  2. package/dist/{animated-text-B3UYCBgB.cjs.map → animated-text-CaUJr-yL.cjs.map} +1 -1
  3. package/dist/{animated-text-D6s-YOrx.js → animated-text-D8LhwMLu.js} +3 -3
  4. package/dist/{animated-text-D6s-YOrx.js.map → animated-text-D8LhwMLu.js.map} +1 -1
  5. package/dist/animated-text.cjs +1 -1
  6. package/dist/animated-text.js +1 -1
  7. package/dist/area.cjs +1 -1
  8. package/dist/{area.component-CNHbzqRX.cjs → area.component-DJYgP8NP.cjs} +2 -2
  9. package/dist/{area.component-CNHbzqRX.cjs.map → area.component-DJYgP8NP.cjs.map} +1 -1
  10. package/dist/{area.component-xeDLv_CE.js → area.component-FgfXnOUF.js} +3 -3
  11. package/dist/{area.component-xeDLv_CE.js.map → area.component-FgfXnOUF.js.map} +1 -1
  12. package/dist/area.js +1 -1
  13. package/dist/{autocomplete-Cz4oZQBB.js → autocomplete-C36FPrMT.js} +3 -3
  14. package/dist/{autocomplete-Cz4oZQBB.js.map → autocomplete-C36FPrMT.js.map} +1 -1
  15. package/dist/{autocomplete-D71XBwSj.cjs → autocomplete-CFcZcrJm.cjs} +2 -2
  16. package/dist/{autocomplete-D71XBwSj.cjs.map → autocomplete-CFcZcrJm.cjs.map} +1 -1
  17. package/dist/autocomplete.cjs +1 -1
  18. package/dist/autocomplete.js +1 -1
  19. package/dist/busy.cjs +1 -1
  20. package/dist/busy.js +1 -1
  21. package/dist/button.cjs +1 -1
  22. package/dist/button.js +1 -1
  23. package/dist/card.cjs +1 -1
  24. package/dist/card.js +1 -1
  25. package/dist/{checkbox-CQvBkjyb.cjs → checkbox-Drf8MwrJ.cjs} +2 -2
  26. package/dist/{checkbox-CQvBkjyb.cjs.map → checkbox-Drf8MwrJ.cjs.map} +1 -1
  27. package/dist/{checkbox-DCRZj150.js → checkbox-Sf2HtMs9.js} +2 -2
  28. package/dist/{checkbox-DCRZj150.js.map → checkbox-Sf2HtMs9.js.map} +1 -1
  29. package/dist/checkbox.cjs +1 -1
  30. package/dist/checkbox.js +1 -1
  31. package/dist/{chips-BUDT0jpL.cjs → chips-8SMj1Siq.cjs} +2 -2
  32. package/dist/{chips-BUDT0jpL.cjs.map → chips-8SMj1Siq.cjs.map} +1 -1
  33. package/dist/{chips-DStbVgUo.js → chips-CA-B5JGD.js} +3 -3
  34. package/dist/{chips-DStbVgUo.js.map → chips-CA-B5JGD.js.map} +1 -1
  35. package/dist/chips.cjs +1 -1
  36. package/dist/chips.js +1 -1
  37. package/dist/components.cjs +1 -1
  38. package/dist/components.js +1 -1
  39. package/dist/content-drawer.cjs +1 -1
  40. package/dist/content-drawer.js +1 -1
  41. package/dist/{date-range-D_zg5C9O.js → date-range-BFW0xGWz.js} +3 -3
  42. package/dist/{date-range-D_zg5C9O.js.map → date-range-BFW0xGWz.js.map} +1 -1
  43. package/dist/{date-range-BjIt4Ocb.cjs → date-range-CAFOX_Sm.cjs} +2 -2
  44. package/dist/{date-range-BjIt4Ocb.cjs.map → date-range-CAFOX_Sm.cjs.map} +1 -1
  45. package/dist/date-range.cjs +1 -1
  46. package/dist/date-range.js +1 -1
  47. package/dist/{delay-LxXCSBHq.js → delay-DbaKftdS.js} +2 -2
  48. package/dist/{delay-LxXCSBHq.js.map → delay-DbaKftdS.js.map} +1 -1
  49. package/dist/{delay-D8wCtScV.cjs → delay-_LA9VzS1.cjs} +2 -2
  50. package/dist/{delay-D8wCtScV.cjs.map → delay-_LA9VzS1.cjs.map} +1 -1
  51. package/dist/delay.cjs +1 -1
  52. package/dist/delay.js +1 -1
  53. package/dist/{divider-BSEoJ09J.js → divider-Ba1jSOh5.js} +3 -3
  54. package/dist/{divider-BSEoJ09J.js.map → divider-Ba1jSOh5.js.map} +1 -1
  55. package/dist/{divider-lCnFIhkp.cjs → divider-DUvuIyeA.cjs} +2 -2
  56. package/dist/{divider-lCnFIhkp.cjs.map → divider-DUvuIyeA.cjs.map} +1 -1
  57. package/dist/divider.cjs +1 -1
  58. package/dist/divider.js +1 -1
  59. package/dist/{form-Bf2BlAqE.cjs → form-Dga1_eim.cjs} +2 -2
  60. package/dist/{form-Bf2BlAqE.cjs.map → form-Dga1_eim.cjs.map} +1 -1
  61. package/dist/{form-C-1W3Aqc.js → form-H0pfjyGl.js} +2 -2
  62. package/dist/{form-C-1W3Aqc.js.map → form-H0pfjyGl.js.map} +1 -1
  63. package/dist/form.cjs +1 -1
  64. package/dist/form.js +1 -1
  65. package/dist/{icon-Wj9hmgVr.cjs → icon-Dr1MeHJo.cjs} +2 -2
  66. package/dist/{icon-Wj9hmgVr.cjs.map → icon-Dr1MeHJo.cjs.map} +1 -1
  67. package/dist/{icon-button-C0bTDyZI.cjs → icon-button-B1Hzc1qy.cjs} +2 -2
  68. package/dist/{icon-button-C0bTDyZI.cjs.map → icon-button-B1Hzc1qy.cjs.map} +1 -1
  69. package/dist/{icon-button-CRWWdZ-S.js → icon-button-BFdAiGNP.js} +3 -3
  70. package/dist/{icon-button-CRWWdZ-S.js.map → icon-button-BFdAiGNP.js.map} +1 -1
  71. package/dist/{icon-CXD3W__G.js → icon-pvbFfBbz.js} +3 -3
  72. package/dist/{icon-CXD3W__G.js.map → icon-pvbFfBbz.js.map} +1 -1
  73. package/dist/icons.cjs +1 -1
  74. package/dist/icons.js +1 -1
  75. package/dist/index.cjs +1 -1
  76. package/dist/index.js +33 -33
  77. package/dist/{input-DRhsCSxi.cjs → input-1-LnDYbT.cjs} +2 -2
  78. package/dist/{input-DRhsCSxi.cjs.map → input-1-LnDYbT.cjs.map} +1 -1
  79. package/dist/{input-BQtGX-Fg.js → input-CBjD2PL8.js} +2 -2
  80. package/dist/{input-BQtGX-Fg.js.map → input-CBjD2PL8.js.map} +1 -1
  81. package/dist/input.cjs +1 -1
  82. package/dist/input.js +1 -1
  83. package/dist/layout.cjs +1 -1
  84. package/dist/layout.js +1 -1
  85. package/dist/{list-CUpWM7R0.js → list-BdN19pT0.js} +2 -2
  86. package/dist/{list-CUpWM7R0.js.map → list-BdN19pT0.js.map} +1 -1
  87. package/dist/{list-bbSGS1sE.cjs → list-DSyxyPI_.cjs} +2 -2
  88. package/dist/{list-bbSGS1sE.cjs.map → list-DSyxyPI_.cjs.map} +1 -1
  89. package/dist/list.cjs +1 -1
  90. package/dist/list.js +1 -1
  91. package/dist/{litElement.mixin-CYwiYZyZ.cjs → litElement.mixin-B9kSOE4x.cjs} +2 -2
  92. package/dist/{litElement.mixin-CYwiYZyZ.cjs.map → litElement.mixin-B9kSOE4x.cjs.map} +1 -1
  93. package/dist/{litElement.mixin-DoKCdkhO.js → litElement.mixin-D9kneJpW.js} +2 -2
  94. package/dist/{litElement.mixin-DoKCdkhO.js.map → litElement.mixin-D9kneJpW.js.map} +1 -1
  95. package/dist/{menu-DGFcpetb.js → menu-DjWA-lYK.js} +3 -3
  96. package/dist/{menu-DGFcpetb.js.map → menu-DjWA-lYK.js.map} +1 -1
  97. package/dist/{menu-CXDFSHgu.cjs → menu-XffIwQSn.cjs} +2 -2
  98. package/dist/{menu-CXDFSHgu.cjs.map → menu-XffIwQSn.cjs.map} +1 -1
  99. package/dist/menu.cjs +1 -1
  100. package/dist/menu.js +1 -1
  101. package/dist/nav-drawer.cjs +1 -1
  102. package/dist/nav-drawer.js +1 -1
  103. package/dist/notification.cjs +1 -1
  104. package/dist/notification.js +1 -1
  105. package/dist/{option-Cr7OiYc5.js → option-C4fWPkxl.js} +2 -2
  106. package/dist/{option-Cr7OiYc5.js.map → option-C4fWPkxl.js.map} +1 -1
  107. package/dist/{option-BKHQU-_I.cjs → option-Dcuv7dNV.cjs} +2 -2
  108. package/dist/{option-BKHQU-_I.cjs.map → option-Dcuv7dNV.cjs.map} +1 -1
  109. package/dist/option.cjs +1 -1
  110. package/dist/option.js +1 -1
  111. package/dist/{outlet-BZSpbcNh.cjs → outlet-881x1gpm.cjs} +2 -2
  112. package/dist/{outlet-BZSpbcNh.cjs.map → outlet-881x1gpm.cjs.map} +1 -1
  113. package/dist/{outlet-D39IYQgF.js → outlet-oc58T2jq.js} +2 -2
  114. package/dist/{outlet-D39IYQgF.js.map → outlet-oc58T2jq.js.map} +1 -1
  115. package/dist/{payment-card-form-jktK4YkR.cjs → payment-card-form-BlusjI2Q.cjs} +2 -2
  116. package/dist/{payment-card-form-jktK4YkR.cjs.map → payment-card-form-BlusjI2Q.cjs.map} +1 -1
  117. package/dist/{payment-card-form-MU2rWtCN.js → payment-card-form-D2NiZkJM.js} +3 -3
  118. package/dist/{payment-card-form-MU2rWtCN.js.map → payment-card-form-D2NiZkJM.js.map} +1 -1
  119. package/dist/{radio-group-Cbcn7M8H.js → radio-group-BALwJIFj.js} +2 -2
  120. package/dist/{radio-group-Cbcn7M8H.js.map → radio-group-BALwJIFj.js.map} +1 -1
  121. package/dist/{radio-group-DnpFVpBo.cjs → radio-group-DE6ao3xB.cjs} +2 -2
  122. package/dist/{radio-group-DnpFVpBo.cjs.map → radio-group-DE6ao3xB.cjs.map} +1 -1
  123. package/dist/radio-group.cjs +1 -1
  124. package/dist/radio-group.js +1 -1
  125. package/dist/{scroll-moSwU3Ry.js → scroll-BbqxMyDc.js} +2 -2
  126. package/dist/{scroll-moSwU3Ry.js.map → scroll-BbqxMyDc.js.map} +1 -1
  127. package/dist/{scroll-DNj5rrzc.cjs → scroll-BqLesKK7.cjs} +2 -2
  128. package/dist/{scroll-DNj5rrzc.cjs.map → scroll-BqLesKK7.cjs.map} +1 -1
  129. package/dist/{select-Dmhiq26e.js → select-CaBI5TrW.js} +3 -3
  130. package/dist/{select-Dmhiq26e.js.map → select-CaBI5TrW.js.map} +1 -1
  131. package/dist/{select-DEOnUayG.cjs → select-N1WX3mjc.cjs} +2 -2
  132. package/dist/{select-DEOnUayG.cjs.map → select-N1WX3mjc.cjs.map} +1 -1
  133. package/dist/select.cjs +1 -1
  134. package/dist/select.js +1 -1
  135. package/dist/{sheet-CgaQ6pVJ.cjs → sheet-BLzXXxJz.cjs} +2 -2
  136. package/dist/{sheet-CgaQ6pVJ.cjs.map → sheet-BLzXXxJz.cjs.map} +1 -1
  137. package/dist/{sheet-BDPiwpWN.js → sheet-CrFAERdT.js} +3 -3
  138. package/dist/{sheet-BDPiwpWN.js.map → sheet-CrFAERdT.js.map} +1 -1
  139. package/dist/sheet.cjs +1 -1
  140. package/dist/sheet.js +1 -1
  141. package/dist/{slider-D-cIdjqg.js → slider-BAQ6ue43.js} +3 -3
  142. package/dist/{slider-D-cIdjqg.js.map → slider-BAQ6ue43.js.map} +1 -1
  143. package/dist/{slider-Dbz2ehmj.cjs → slider-Ck3rrBuj.cjs} +2 -2
  144. package/dist/{slider-Dbz2ehmj.cjs.map → slider-Ck3rrBuj.cjs.map} +1 -1
  145. package/dist/slider.cjs +1 -1
  146. package/dist/slider.js +1 -1
  147. package/dist/{spinner-COoBI2kA.cjs → spinner-B1iL6lg7.cjs} +2 -2
  148. package/dist/{spinner-COoBI2kA.cjs.map → spinner-B1iL6lg7.cjs.map} +1 -1
  149. package/dist/{spinner-qHgA76_k.js → spinner-Dp-BlzFE.js} +3 -3
  150. package/dist/{spinner-qHgA76_k.js.map → spinner-Dp-BlzFE.js.map} +1 -1
  151. package/dist/{surface-BALOUsnP.js → surface-C-5hXuc0.js} +2 -2
  152. package/dist/{surface-BALOUsnP.js.map → surface-C-5hXuc0.js.map} +1 -1
  153. package/dist/{surface-DI4R4vjx.cjs → surface-KIYOpqYN.cjs} +2 -2
  154. package/dist/{surface-DI4R4vjx.cjs.map → surface-KIYOpqYN.cjs.map} +1 -1
  155. package/dist/surface.cjs +1 -1
  156. package/dist/surface.js +1 -1
  157. package/dist/{table-DVqYwon7.cjs → table-COiGzwHG.cjs} +2 -2
  158. package/dist/{table-DVqYwon7.cjs.map → table-COiGzwHG.cjs.map} +1 -1
  159. package/dist/{table-C3YCvbyA.js → table-D5Y7TtBM.js} +2 -2
  160. package/dist/{table-C3YCvbyA.js.map → table-D5Y7TtBM.js.map} +1 -1
  161. package/dist/table.cjs +1 -1
  162. package/dist/table.js +1 -1
  163. package/dist/{tabs-group-DtvVC_nM.js → tabs-group-DIv7H3ii.js} +2 -2
  164. package/dist/{tabs-group-DtvVC_nM.js.map → tabs-group-DIv7H3ii.js.map} +1 -1
  165. package/dist/{tabs-group-CM9Hd80d.cjs → tabs-group-Dzw-rYWP.cjs} +2 -2
  166. package/dist/{tabs-group-CM9Hd80d.cjs.map → tabs-group-Dzw-rYWP.cjs.map} +1 -1
  167. package/dist/tabs.cjs +1 -1
  168. package/dist/tabs.js +1 -1
  169. package/dist/tailwind.mixin-BBKdEPAU.js +43 -0
  170. package/dist/{tailwind.mixin-CHPxMV8E.js.map → tailwind.mixin-BBKdEPAU.js.map} +1 -1
  171. package/dist/{tailwind.mixin-CHPxMV8E.js → tailwind.mixin-gE-6eUQA.cjs} +2 -43
  172. package/dist/{tailwind.mixin-BmIP1Qzo.cjs.map → tailwind.mixin-gE-6eUQA.cjs.map} +1 -1
  173. package/dist/teleport.cjs +1 -1
  174. package/dist/teleport.component-Bp9B02lJ.cjs +150 -0
  175. package/dist/teleport.component-Bp9B02lJ.cjs.map +1 -0
  176. package/dist/teleport.component-Do0-5-jy.js +530 -0
  177. package/dist/teleport.component-Do0-5-jy.js.map +1 -0
  178. package/dist/teleport.js +1 -1
  179. package/dist/{textarea-C8bsVuSe.cjs → textarea-Cm_0BDw5.cjs} +2 -2
  180. package/dist/{textarea-C8bsVuSe.cjs.map → textarea-Cm_0BDw5.cjs.map} +1 -1
  181. package/dist/{textarea-D7ZLtbVj.js → textarea-DWBpogxd.js} +2 -2
  182. package/dist/{textarea-D7ZLtbVj.js.map → textarea-DWBpogxd.js.map} +1 -1
  183. package/dist/textarea.cjs +1 -1
  184. package/dist/textarea.js +1 -1
  185. package/dist/{theme-button-fUwuhdHz.cjs → theme-button-B7JR-68y.cjs} +2 -2
  186. package/dist/{theme-button-fUwuhdHz.cjs.map → theme-button-B7JR-68y.cjs.map} +1 -1
  187. package/dist/{theme-button-CcHxfORU.js → theme-button-CdjTjQE-.js} +2 -2
  188. package/dist/{theme-button-CcHxfORU.js.map → theme-button-CdjTjQE-.js.map} +1 -1
  189. package/dist/theme-button.cjs +1 -1
  190. package/dist/theme-button.js +1 -1
  191. package/dist/theme.cjs +1 -1
  192. package/dist/{theme.component-ByOov4NR.cjs → theme.component-D0pi4zH5.cjs} +2 -2
  193. package/dist/{theme.component-ByOov4NR.cjs.map → theme.component-D0pi4zH5.cjs.map} +1 -1
  194. package/dist/{theme.component-D4gPoycY.js → theme.component-DWRFe6NX.js} +2 -2
  195. package/dist/{theme.component-D4gPoycY.js.map → theme.component-DWRFe6NX.js.map} +1 -1
  196. package/dist/theme.js +1 -1
  197. package/dist/{tree-DW_S-LL9.js → tree-COFA9Z7I.js} +2 -2
  198. package/dist/{tree-DW_S-LL9.js.map → tree-COFA9Z7I.js.map} +1 -1
  199. package/dist/{tree-DJQKaG-K.cjs → tree-D8SHnBQ7.cjs} +2 -2
  200. package/dist/{tree-DJQKaG-K.cjs.map → tree-D8SHnBQ7.cjs.map} +1 -1
  201. package/dist/tree.cjs +1 -1
  202. package/dist/tree.js +1 -1
  203. package/dist/{typewriter-jDCMhixI.cjs → typewriter-B254asJ6.cjs} +2 -2
  204. package/dist/{typewriter-jDCMhixI.cjs.map → typewriter-B254asJ6.cjs.map} +1 -1
  205. package/dist/{typewriter-_3w-aV-9.js → typewriter-CKloAbr2.js} +4 -4
  206. package/dist/{typewriter-_3w-aV-9.js.map → typewriter-CKloAbr2.js.map} +1 -1
  207. package/dist/typewriter.cjs +1 -1
  208. package/dist/typewriter.js +1 -1
  209. package/dist/{typography-BhqtMVYz.cjs → typography-BjmgtlSe.cjs} +2 -2
  210. package/dist/{typography-BhqtMVYz.cjs.map → typography-BjmgtlSe.cjs.map} +1 -1
  211. package/dist/{typography-GzUb3OWl.js → typography-C0__6Aqk.js} +2 -2
  212. package/dist/{typography-GzUb3OWl.js.map → typography-C0__6Aqk.js.map} +1 -1
  213. package/dist/typography.cjs +1 -1
  214. package/dist/typography.js +1 -1
  215. package/package.json +5 -5
  216. package/types/src/nav-drawer/drawer.d.ts +33 -10
  217. package/types/src/nav-drawer/navbar.d.ts +23 -2
  218. package/dist/tailwind.mixin-BmIP1Qzo.cjs +0 -2
  219. package/dist/teleport.component-BQTFUlsF.js +0 -515
  220. package/dist/teleport.component-BQTFUlsF.js.map +0 -1
  221. package/dist/teleport.component-hBN2zB0w.cjs +0 -144
  222. package/dist/teleport.component-hBN2zB0w.cjs.map +0 -1
@@ -1,4 +1,4 @@
1
- "use strict";const e=require("rxjs");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const h=require("./litElement.mixin-CYwiYZyZ.cjs");require("./tailwind.mixin-BmIP1Qzo.cjs");const c=require("lit"),r=require("lit/decorators.js");var d=Object.defineProperty,u=Object.getOwnPropertyDescriptor,s=(i,a,p,n)=>{for(var l,o=n>1?void 0:n?u(a,p):a,y=i.length-1;y>=0;y--)(l=i[y])&&(o=(n?l(a,p,o):l(o))||o);return n&&o&&d(a,p,o),o};let t=class extends h.$LitElement(c.css`
1
+ "use strict";const e=require("rxjs");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const h=require("./litElement.mixin-B9kSOE4x.cjs");require("./tailwind.mixin-gE-6eUQA.cjs");const c=require("lit"),r=require("lit/decorators.js");var d=Object.defineProperty,u=Object.getOwnPropertyDescriptor,s=(i,a,p,n)=>{for(var l,o=n>1?void 0:n?u(a,p):a,y=i.length-1;y>=0;y--)(l=i[y])&&(o=(n?l(a,p,o):l(o))||o);return n&&o&&d(a,p,o),o};let t=class extends h.$LitElement(c.css`
2
2
  :host {
3
3
  font-family: inherit;
4
4
  display: block;
@@ -34,4 +34,4 @@
34
34
  </span>
35
35
  </span>
36
36
  `}};s([r.property({type:String})],t.prototype,"ease",2),s([r.property({type:Number})],t.prototype,"delay",2),s([r.property({type:Number})],t.prototype,"stagger",2),s([r.property({type:Number})],t.prototype,"duration",2),s([r.property({type:Array})],t.prototype,"scale",2),s([r.property({type:Array})],t.prototype,"opacity",2),s([r.property({type:Array})],t.prototype,"translateX",2),s([r.property({type:Array})],t.prototype,"translateY",2),s([r.property({type:Array})],t.prototype,"translateZ",2),s([r.property({type:Array})],t.prototype,"rotateZ",2),s([r.property({type:Boolean})],t.prototype,"resetOnScroll",2),s([r.queryAssignedNodes()],t.prototype,"defaultSlot",2),s([r.query(".letters")],t.prototype,"letters",2),s([r.query(".ml7")],t.prototype,"ml7",2),t=s([r.customElement("schmancy-animated-text")],t);
37
- //# sourceMappingURL=animated-text-B3UYCBgB.cjs.map
37
+ //# sourceMappingURL=animated-text-CaUJr-yL.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"animated-text-B3UYCBgB.cjs","sources":["../src/animated-text/animated-text.ts"],"sourcesContent":["// Removed: import { createTimeline, stagger } from '@packages/anime-beta-master'\nimport { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, queryAssignedNodes } from 'lit/decorators.js'\nimport {\n\tconcat,\n\tdistinctUntilChanged,\n\tfilter,\n\tfromEvent,\n\tinterval,\n\tmap,\n\tstartWith,\n\ttake,\n\ttap,\n\tthrottleTime,\n} from 'rxjs'\n\n/**\n * @element schmancy-animated-text\n * Inspired by https://tobiasahlin.com/moving-letters/#1\n */\n@customElement('schmancy-animated-text')\nexport default class SchmancyAnimatedText extends $LitElement(css`\n\t:host {\n\t\tfont-family: inherit;\n\t\tdisplay: block;\n\t}\n\t.ml7 {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t}\n\t.ml7 .text-wrapper {\n\t\tposition: relative;\n\t\tdisplay: inline-block;\n\t\toverflow: hidden;\n\t}\n\t.ml7 .letter {\n\t\ttransform-origin: 0 100%;\n\t\tdisplay: inline-block;\n\t\topacity: 0;\n\t}\n`) {\n\t@property({ type: String }) ease = 'outExpo' // not a built-in string for Web Animations\n\t@property({ type: Number }) delay = 0\n\t@property({ type: Number }) stagger = 50\n\t@property({ type: Number }) duration = 750\n\t@property({ type: Array }) scale = [0, 1]\n\t@property({ type: Array }) opacity = [0, 1]\n\t@property({ type: Array }) translateX = ['0.55em', '0em']\n\t@property({ type: Array }) translateY = ['1.1em', '0em']\n\t@property({ type: Array }) translateZ = [0, 0]\n\t@property({ type: Array }) rotateZ = [180, 0]\n\t@property({ type: Boolean }) resetOnScroll = true\n\n\t@queryAssignedNodes() defaultSlot!: HTMLElement[]\n\t@query('.letters') letters!: HTMLElement\n\t@query('.ml7') ml7!: HTMLElement\n\n\t// Function to check if an element is in the viewport\n\tisInViewport(element: HTMLElement) {\n\t\tconst rect = element.getBoundingClientRect()\n\t\treturn (\n\t\t\trect.top >= 0 &&\n\t\t\trect.left >= 0 &&\n\t\t\trect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n\t\t\trect.right <= (window.innerWidth || document.documentElement.clientWidth)\n\t\t)\n\t}\n\n\tasync firstUpdated() {\n\t\t// Split the text into <span class=\"letter\"> ... </span> elements\n\t\tthis.letters.innerHTML = this.defaultSlot[0].textContent!.replace(/\\S/g, `<span class=\"letter\">$&</span>`)\n\n\t\t// Observe viewport + initial readiness\n\t\tconcat(\n\t\t\t// 1) Wait until the element is rendered (width/height > 0)\n\t\t\tinterval(10).pipe(\n\t\t\t\tstartWith(true),\n\t\t\t\tfilter(() => {\n\t\t\t\t\tconst rect = this.getBoundingClientRect()\n\t\t\t\t\treturn rect.width > 0 && rect.height > 0\n\t\t\t\t}),\n\t\t\t\ttake(1),\n\t\t\t),\n\t\t\t// 2) Then handle scroll events, throttled\n\t\t\tfromEvent(window, 'scroll').pipe(\n\t\t\t\tthrottleTime(0, undefined, {\n\t\t\t\t\tleading: true,\n\t\t\t\t\ttrailing: true,\n\t\t\t\t}),\n\t\t\t\tstartWith(true),\n\t\t\t\tmap(() => this.isInViewport(this)),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(inViewport => {\n\t\t\t\t\t// If leaving viewport and `resetOnScroll` is true, reset letters to opacity 0\n\t\t\t\t\tif (!inViewport && this.resetOnScroll) {\n\t\t\t\t\t\tArray.from(this.letters.children).forEach((letter: HTMLElement) => {\n\t\t\t\t\t\t\tletter.style.opacity = '0'\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tfilter(isInViewport => isInViewport),\n\t\t\t\t// If resetOnScroll = false, animate only the first time inView. If true, repeat.\n\t\t\t\tthis.resetOnScroll ? tap() : take(1),\n\t\t\t\ttap({\n\t\t\t\t\tnext: () => {\n\t\t\t\t\t\t// Animate letters with the native Web Animations API\n\t\t\t\t\t\tconst letters = this.shadowRoot!.querySelectorAll<HTMLElement>('.ml7 .letter')\n\n\t\t\t\t\t\tletters.forEach((letter, i) => {\n\t\t\t\t\t\t\t// Combine all transforms into one CSS transform string\n\t\t\t\t\t\t\t// From\n\t\t\t\t\t\t\tconst fromTransform = `\n translate3d(${this.translateX[0]}, ${this.translateY[0]}, ${this.translateZ[0]}px)\n rotateZ(${this.rotateZ[0]}deg)\n scale(${this.scale[0]})\n `\n\t\t\t\t\t\t\t// To\n\t\t\t\t\t\t\tconst toTransform = `\n translate3d(${this.translateX[1]}, ${this.translateY[1]}, ${this.translateZ[1]}px)\n rotateZ(${this.rotateZ[1]}deg)\n scale(${this.scale[1]})\n `\n\t\t\t\t\t\t\t// Approximate `outExpo` or pick a standard easing (like 'ease-out'):\n\t\t\t\t\t\t\t// outExpo often approximated by cubic-bezier(0.19, 1, 0.22, 1)\n\t\t\t\t\t\t\tconst easingMap: Record<string, string> = {\n\t\t\t\t\t\t\t\toutExpo: 'cubic-bezier(0.19, 1, 0.22, 1)',\n\t\t\t\t\t\t\t\t// add more if you want\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst keyframes: Keyframe[] = [\n\t\t\t\t\t\t\t\t{ transform: fromTransform, opacity: String(this.opacity[0]) },\n\t\t\t\t\t\t\t\t{ transform: toTransform, opacity: String(this.opacity[1]) },\n\t\t\t\t\t\t\t]\n\n\t\t\t\t\t\t\tletter.animate(keyframes, {\n\t\t\t\t\t\t\t\tduration: this.duration,\n\t\t\t\t\t\t\t\teasing: easingMap[this.ease] || 'ease-out',\n\t\t\t\t\t\t\t\tdelay: this.delay + i * this.stagger, // staggered start\n\t\t\t\t\t\t\t\tfill: 'forwards', // so the letters remain visible\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t),\n\t\t).subscribe()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<span class=\"ml7\">\n\t\t\t\t<span class=\"text-wrapper\">\n\t\t\t\t\t<span class=\"letters\">\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-animated-text': SchmancyAnimatedText\n\t}\n}\n"],"names":["SchmancyAnimatedText","$LitElement","css","super","arguments","this","ease","delay","stagger","duration","scale","opacity","translateX","translateY","translateZ","rotateZ","resetOnScroll","element","rect","getBoundingClientRect","top","left","bottom","window","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","firstUpdated","letters","innerHTML","defaultSlot","textContent","replace","concat","interval","pipe","startWith","filter","width","height","take","fromEvent","throttleTime","leading","trailing","map","isInViewport","distinctUntilChanged","tap","inViewport","Array","from","children","forEach","letter","style","next","shadowRoot","querySelectorAll","i","fromTransform","toTransform","keyframes","transform","String","animate","easing","outExpo","fill","subscribe","html","__decorateClass","property","type","prototype","Number","Boolean","queryAssignedNodes","query","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"animated-text-CaUJr-yL.cjs","sources":["../src/animated-text/animated-text.ts"],"sourcesContent":["// Removed: import { createTimeline, stagger } from '@packages/anime-beta-master'\nimport { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, queryAssignedNodes } from 'lit/decorators.js'\nimport {\n\tconcat,\n\tdistinctUntilChanged,\n\tfilter,\n\tfromEvent,\n\tinterval,\n\tmap,\n\tstartWith,\n\ttake,\n\ttap,\n\tthrottleTime,\n} from 'rxjs'\n\n/**\n * @element schmancy-animated-text\n * Inspired by https://tobiasahlin.com/moving-letters/#1\n */\n@customElement('schmancy-animated-text')\nexport default class SchmancyAnimatedText extends $LitElement(css`\n\t:host {\n\t\tfont-family: inherit;\n\t\tdisplay: block;\n\t}\n\t.ml7 {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t}\n\t.ml7 .text-wrapper {\n\t\tposition: relative;\n\t\tdisplay: inline-block;\n\t\toverflow: hidden;\n\t}\n\t.ml7 .letter {\n\t\ttransform-origin: 0 100%;\n\t\tdisplay: inline-block;\n\t\topacity: 0;\n\t}\n`) {\n\t@property({ type: String }) ease = 'outExpo' // not a built-in string for Web Animations\n\t@property({ type: Number }) delay = 0\n\t@property({ type: Number }) stagger = 50\n\t@property({ type: Number }) duration = 750\n\t@property({ type: Array }) scale = [0, 1]\n\t@property({ type: Array }) opacity = [0, 1]\n\t@property({ type: Array }) translateX = ['0.55em', '0em']\n\t@property({ type: Array }) translateY = ['1.1em', '0em']\n\t@property({ type: Array }) translateZ = [0, 0]\n\t@property({ type: Array }) rotateZ = [180, 0]\n\t@property({ type: Boolean }) resetOnScroll = true\n\n\t@queryAssignedNodes() defaultSlot!: HTMLElement[]\n\t@query('.letters') letters!: HTMLElement\n\t@query('.ml7') ml7!: HTMLElement\n\n\t// Function to check if an element is in the viewport\n\tisInViewport(element: HTMLElement) {\n\t\tconst rect = element.getBoundingClientRect()\n\t\treturn (\n\t\t\trect.top >= 0 &&\n\t\t\trect.left >= 0 &&\n\t\t\trect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n\t\t\trect.right <= (window.innerWidth || document.documentElement.clientWidth)\n\t\t)\n\t}\n\n\tasync firstUpdated() {\n\t\t// Split the text into <span class=\"letter\"> ... </span> elements\n\t\tthis.letters.innerHTML = this.defaultSlot[0].textContent!.replace(/\\S/g, `<span class=\"letter\">$&</span>`)\n\n\t\t// Observe viewport + initial readiness\n\t\tconcat(\n\t\t\t// 1) Wait until the element is rendered (width/height > 0)\n\t\t\tinterval(10).pipe(\n\t\t\t\tstartWith(true),\n\t\t\t\tfilter(() => {\n\t\t\t\t\tconst rect = this.getBoundingClientRect()\n\t\t\t\t\treturn rect.width > 0 && rect.height > 0\n\t\t\t\t}),\n\t\t\t\ttake(1),\n\t\t\t),\n\t\t\t// 2) Then handle scroll events, throttled\n\t\t\tfromEvent(window, 'scroll').pipe(\n\t\t\t\tthrottleTime(0, undefined, {\n\t\t\t\t\tleading: true,\n\t\t\t\t\ttrailing: true,\n\t\t\t\t}),\n\t\t\t\tstartWith(true),\n\t\t\t\tmap(() => this.isInViewport(this)),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(inViewport => {\n\t\t\t\t\t// If leaving viewport and `resetOnScroll` is true, reset letters to opacity 0\n\t\t\t\t\tif (!inViewport && this.resetOnScroll) {\n\t\t\t\t\t\tArray.from(this.letters.children).forEach((letter: HTMLElement) => {\n\t\t\t\t\t\t\tletter.style.opacity = '0'\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tfilter(isInViewport => isInViewport),\n\t\t\t\t// If resetOnScroll = false, animate only the first time inView. If true, repeat.\n\t\t\t\tthis.resetOnScroll ? tap() : take(1),\n\t\t\t\ttap({\n\t\t\t\t\tnext: () => {\n\t\t\t\t\t\t// Animate letters with the native Web Animations API\n\t\t\t\t\t\tconst letters = this.shadowRoot!.querySelectorAll<HTMLElement>('.ml7 .letter')\n\n\t\t\t\t\t\tletters.forEach((letter, i) => {\n\t\t\t\t\t\t\t// Combine all transforms into one CSS transform string\n\t\t\t\t\t\t\t// From\n\t\t\t\t\t\t\tconst fromTransform = `\n translate3d(${this.translateX[0]}, ${this.translateY[0]}, ${this.translateZ[0]}px)\n rotateZ(${this.rotateZ[0]}deg)\n scale(${this.scale[0]})\n `\n\t\t\t\t\t\t\t// To\n\t\t\t\t\t\t\tconst toTransform = `\n translate3d(${this.translateX[1]}, ${this.translateY[1]}, ${this.translateZ[1]}px)\n rotateZ(${this.rotateZ[1]}deg)\n scale(${this.scale[1]})\n `\n\t\t\t\t\t\t\t// Approximate `outExpo` or pick a standard easing (like 'ease-out'):\n\t\t\t\t\t\t\t// outExpo often approximated by cubic-bezier(0.19, 1, 0.22, 1)\n\t\t\t\t\t\t\tconst easingMap: Record<string, string> = {\n\t\t\t\t\t\t\t\toutExpo: 'cubic-bezier(0.19, 1, 0.22, 1)',\n\t\t\t\t\t\t\t\t// add more if you want\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst keyframes: Keyframe[] = [\n\t\t\t\t\t\t\t\t{ transform: fromTransform, opacity: String(this.opacity[0]) },\n\t\t\t\t\t\t\t\t{ transform: toTransform, opacity: String(this.opacity[1]) },\n\t\t\t\t\t\t\t]\n\n\t\t\t\t\t\t\tletter.animate(keyframes, {\n\t\t\t\t\t\t\t\tduration: this.duration,\n\t\t\t\t\t\t\t\teasing: easingMap[this.ease] || 'ease-out',\n\t\t\t\t\t\t\t\tdelay: this.delay + i * this.stagger, // staggered start\n\t\t\t\t\t\t\t\tfill: 'forwards', // so the letters remain visible\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t),\n\t\t).subscribe()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<span class=\"ml7\">\n\t\t\t\t<span class=\"text-wrapper\">\n\t\t\t\t\t<span class=\"letters\">\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-animated-text': SchmancyAnimatedText\n\t}\n}\n"],"names":["SchmancyAnimatedText","$LitElement","css","super","arguments","this","ease","delay","stagger","duration","scale","opacity","translateX","translateY","translateZ","rotateZ","resetOnScroll","element","rect","getBoundingClientRect","top","left","bottom","window","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","firstUpdated","letters","innerHTML","defaultSlot","textContent","replace","concat","interval","pipe","startWith","filter","width","height","take","fromEvent","throttleTime","leading","trailing","map","isInViewport","distinctUntilChanged","tap","inViewport","Array","from","children","forEach","letter","style","next","shadowRoot","querySelectorAll","i","fromTransform","toTransform","keyframes","transform","String","animate","easing","outExpo","fill","subscribe","html","__decorateClass","property","type","prototype","Number","Boolean","queryAssignedNodes","query","customElement"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { concat as u, interval as g, startWith as y, filter as h, take as d, fromEvent as f, throttleTime as w, map as b, distinctUntilChanged as $, tap as c } from "rxjs";
2
2
  import "lit/directives/class-map.js";
3
3
  import "lit/directives/style-map.js";
4
- import { $ as x } from "./litElement.mixin-DoKCdkhO.js";
5
- import "./tailwind.mixin-CHPxMV8E.js";
4
+ import { $ as x } from "./litElement.mixin-D9kneJpW.js";
5
+ import "./tailwind.mixin-BBKdEPAU.js";
6
6
  import { css as S, html as Z } from "lit";
7
7
  import { property as a, queryAssignedNodes as v, query as m, customElement as A } from "lit/decorators.js";
8
8
  var E = Object.defineProperty, O = Object.getOwnPropertyDescriptor, e = (r, s, n, i) => {
@@ -72,4 +72,4 @@ let t = class extends x(S`
72
72
  }
73
73
  };
74
74
  e([a({ type: String })], t.prototype, "ease", 2), e([a({ type: Number })], t.prototype, "delay", 2), e([a({ type: Number })], t.prototype, "stagger", 2), e([a({ type: Number })], t.prototype, "duration", 2), e([a({ type: Array })], t.prototype, "scale", 2), e([a({ type: Array })], t.prototype, "opacity", 2), e([a({ type: Array })], t.prototype, "translateX", 2), e([a({ type: Array })], t.prototype, "translateY", 2), e([a({ type: Array })], t.prototype, "translateZ", 2), e([a({ type: Array })], t.prototype, "rotateZ", 2), e([a({ type: Boolean })], t.prototype, "resetOnScroll", 2), e([v()], t.prototype, "defaultSlot", 2), e([m(".letters")], t.prototype, "letters", 2), e([m(".ml7")], t.prototype, "ml7", 2), t = e([A("schmancy-animated-text")], t);
75
- //# sourceMappingURL=animated-text-D6s-YOrx.js.map
75
+ //# sourceMappingURL=animated-text-D8LhwMLu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"animated-text-D6s-YOrx.js","sources":["../src/animated-text/animated-text.ts"],"sourcesContent":["// Removed: import { createTimeline, stagger } from '@packages/anime-beta-master'\nimport { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, queryAssignedNodes } from 'lit/decorators.js'\nimport {\n\tconcat,\n\tdistinctUntilChanged,\n\tfilter,\n\tfromEvent,\n\tinterval,\n\tmap,\n\tstartWith,\n\ttake,\n\ttap,\n\tthrottleTime,\n} from 'rxjs'\n\n/**\n * @element schmancy-animated-text\n * Inspired by https://tobiasahlin.com/moving-letters/#1\n */\n@customElement('schmancy-animated-text')\nexport default class SchmancyAnimatedText extends $LitElement(css`\n\t:host {\n\t\tfont-family: inherit;\n\t\tdisplay: block;\n\t}\n\t.ml7 {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t}\n\t.ml7 .text-wrapper {\n\t\tposition: relative;\n\t\tdisplay: inline-block;\n\t\toverflow: hidden;\n\t}\n\t.ml7 .letter {\n\t\ttransform-origin: 0 100%;\n\t\tdisplay: inline-block;\n\t\topacity: 0;\n\t}\n`) {\n\t@property({ type: String }) ease = 'outExpo' // not a built-in string for Web Animations\n\t@property({ type: Number }) delay = 0\n\t@property({ type: Number }) stagger = 50\n\t@property({ type: Number }) duration = 750\n\t@property({ type: Array }) scale = [0, 1]\n\t@property({ type: Array }) opacity = [0, 1]\n\t@property({ type: Array }) translateX = ['0.55em', '0em']\n\t@property({ type: Array }) translateY = ['1.1em', '0em']\n\t@property({ type: Array }) translateZ = [0, 0]\n\t@property({ type: Array }) rotateZ = [180, 0]\n\t@property({ type: Boolean }) resetOnScroll = true\n\n\t@queryAssignedNodes() defaultSlot!: HTMLElement[]\n\t@query('.letters') letters!: HTMLElement\n\t@query('.ml7') ml7!: HTMLElement\n\n\t// Function to check if an element is in the viewport\n\tisInViewport(element: HTMLElement) {\n\t\tconst rect = element.getBoundingClientRect()\n\t\treturn (\n\t\t\trect.top >= 0 &&\n\t\t\trect.left >= 0 &&\n\t\t\trect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n\t\t\trect.right <= (window.innerWidth || document.documentElement.clientWidth)\n\t\t)\n\t}\n\n\tasync firstUpdated() {\n\t\t// Split the text into <span class=\"letter\"> ... </span> elements\n\t\tthis.letters.innerHTML = this.defaultSlot[0].textContent!.replace(/\\S/g, `<span class=\"letter\">$&</span>`)\n\n\t\t// Observe viewport + initial readiness\n\t\tconcat(\n\t\t\t// 1) Wait until the element is rendered (width/height > 0)\n\t\t\tinterval(10).pipe(\n\t\t\t\tstartWith(true),\n\t\t\t\tfilter(() => {\n\t\t\t\t\tconst rect = this.getBoundingClientRect()\n\t\t\t\t\treturn rect.width > 0 && rect.height > 0\n\t\t\t\t}),\n\t\t\t\ttake(1),\n\t\t\t),\n\t\t\t// 2) Then handle scroll events, throttled\n\t\t\tfromEvent(window, 'scroll').pipe(\n\t\t\t\tthrottleTime(0, undefined, {\n\t\t\t\t\tleading: true,\n\t\t\t\t\ttrailing: true,\n\t\t\t\t}),\n\t\t\t\tstartWith(true),\n\t\t\t\tmap(() => this.isInViewport(this)),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(inViewport => {\n\t\t\t\t\t// If leaving viewport and `resetOnScroll` is true, reset letters to opacity 0\n\t\t\t\t\tif (!inViewport && this.resetOnScroll) {\n\t\t\t\t\t\tArray.from(this.letters.children).forEach((letter: HTMLElement) => {\n\t\t\t\t\t\t\tletter.style.opacity = '0'\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tfilter(isInViewport => isInViewport),\n\t\t\t\t// If resetOnScroll = false, animate only the first time inView. If true, repeat.\n\t\t\t\tthis.resetOnScroll ? tap() : take(1),\n\t\t\t\ttap({\n\t\t\t\t\tnext: () => {\n\t\t\t\t\t\t// Animate letters with the native Web Animations API\n\t\t\t\t\t\tconst letters = this.shadowRoot!.querySelectorAll<HTMLElement>('.ml7 .letter')\n\n\t\t\t\t\t\tletters.forEach((letter, i) => {\n\t\t\t\t\t\t\t// Combine all transforms into one CSS transform string\n\t\t\t\t\t\t\t// From\n\t\t\t\t\t\t\tconst fromTransform = `\n translate3d(${this.translateX[0]}, ${this.translateY[0]}, ${this.translateZ[0]}px)\n rotateZ(${this.rotateZ[0]}deg)\n scale(${this.scale[0]})\n `\n\t\t\t\t\t\t\t// To\n\t\t\t\t\t\t\tconst toTransform = `\n translate3d(${this.translateX[1]}, ${this.translateY[1]}, ${this.translateZ[1]}px)\n rotateZ(${this.rotateZ[1]}deg)\n scale(${this.scale[1]})\n `\n\t\t\t\t\t\t\t// Approximate `outExpo` or pick a standard easing (like 'ease-out'):\n\t\t\t\t\t\t\t// outExpo often approximated by cubic-bezier(0.19, 1, 0.22, 1)\n\t\t\t\t\t\t\tconst easingMap: Record<string, string> = {\n\t\t\t\t\t\t\t\toutExpo: 'cubic-bezier(0.19, 1, 0.22, 1)',\n\t\t\t\t\t\t\t\t// add more if you want\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst keyframes: Keyframe[] = [\n\t\t\t\t\t\t\t\t{ transform: fromTransform, opacity: String(this.opacity[0]) },\n\t\t\t\t\t\t\t\t{ transform: toTransform, opacity: String(this.opacity[1]) },\n\t\t\t\t\t\t\t]\n\n\t\t\t\t\t\t\tletter.animate(keyframes, {\n\t\t\t\t\t\t\t\tduration: this.duration,\n\t\t\t\t\t\t\t\teasing: easingMap[this.ease] || 'ease-out',\n\t\t\t\t\t\t\t\tdelay: this.delay + i * this.stagger, // staggered start\n\t\t\t\t\t\t\t\tfill: 'forwards', // so the letters remain visible\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t),\n\t\t).subscribe()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<span class=\"ml7\">\n\t\t\t\t<span class=\"text-wrapper\">\n\t\t\t\t\t<span class=\"letters\">\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-animated-text': SchmancyAnimatedText\n\t}\n}\n"],"names":["SchmancyAnimatedText","$LitElement","css","super","arguments","this","ease","delay","stagger","duration","scale","opacity","translateX","translateY","translateZ","rotateZ","resetOnScroll","element","rect","getBoundingClientRect","top","left","bottom","window","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","firstUpdated","letters","innerHTML","defaultSlot","textContent","replace","concat","interval","pipe","startWith","filter","width","height","take","fromEvent","throttleTime","leading","trailing","map","isInViewport","distinctUntilChanged","tap","inViewport","Array","from","children","forEach","letter","style","next","shadowRoot","querySelectorAll","i","fromTransform","toTransform","keyframes","transform","String","animate","easing","outExpo","fill","subscribe","html","__decorateClass","property","type","prototype","Number","Boolean","queryAssignedNodes","query","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"animated-text-D8LhwMLu.js","sources":["../src/animated-text/animated-text.ts"],"sourcesContent":["// Removed: import { createTimeline, stagger } from '@packages/anime-beta-master'\nimport { $LitElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, property, query, queryAssignedNodes } from 'lit/decorators.js'\nimport {\n\tconcat,\n\tdistinctUntilChanged,\n\tfilter,\n\tfromEvent,\n\tinterval,\n\tmap,\n\tstartWith,\n\ttake,\n\ttap,\n\tthrottleTime,\n} from 'rxjs'\n\n/**\n * @element schmancy-animated-text\n * Inspired by https://tobiasahlin.com/moving-letters/#1\n */\n@customElement('schmancy-animated-text')\nexport default class SchmancyAnimatedText extends $LitElement(css`\n\t:host {\n\t\tfont-family: inherit;\n\t\tdisplay: block;\n\t}\n\t.ml7 {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t}\n\t.ml7 .text-wrapper {\n\t\tposition: relative;\n\t\tdisplay: inline-block;\n\t\toverflow: hidden;\n\t}\n\t.ml7 .letter {\n\t\ttransform-origin: 0 100%;\n\t\tdisplay: inline-block;\n\t\topacity: 0;\n\t}\n`) {\n\t@property({ type: String }) ease = 'outExpo' // not a built-in string for Web Animations\n\t@property({ type: Number }) delay = 0\n\t@property({ type: Number }) stagger = 50\n\t@property({ type: Number }) duration = 750\n\t@property({ type: Array }) scale = [0, 1]\n\t@property({ type: Array }) opacity = [0, 1]\n\t@property({ type: Array }) translateX = ['0.55em', '0em']\n\t@property({ type: Array }) translateY = ['1.1em', '0em']\n\t@property({ type: Array }) translateZ = [0, 0]\n\t@property({ type: Array }) rotateZ = [180, 0]\n\t@property({ type: Boolean }) resetOnScroll = true\n\n\t@queryAssignedNodes() defaultSlot!: HTMLElement[]\n\t@query('.letters') letters!: HTMLElement\n\t@query('.ml7') ml7!: HTMLElement\n\n\t// Function to check if an element is in the viewport\n\tisInViewport(element: HTMLElement) {\n\t\tconst rect = element.getBoundingClientRect()\n\t\treturn (\n\t\t\trect.top >= 0 &&\n\t\t\trect.left >= 0 &&\n\t\t\trect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n\t\t\trect.right <= (window.innerWidth || document.documentElement.clientWidth)\n\t\t)\n\t}\n\n\tasync firstUpdated() {\n\t\t// Split the text into <span class=\"letter\"> ... </span> elements\n\t\tthis.letters.innerHTML = this.defaultSlot[0].textContent!.replace(/\\S/g, `<span class=\"letter\">$&</span>`)\n\n\t\t// Observe viewport + initial readiness\n\t\tconcat(\n\t\t\t// 1) Wait until the element is rendered (width/height > 0)\n\t\t\tinterval(10).pipe(\n\t\t\t\tstartWith(true),\n\t\t\t\tfilter(() => {\n\t\t\t\t\tconst rect = this.getBoundingClientRect()\n\t\t\t\t\treturn rect.width > 0 && rect.height > 0\n\t\t\t\t}),\n\t\t\t\ttake(1),\n\t\t\t),\n\t\t\t// 2) Then handle scroll events, throttled\n\t\t\tfromEvent(window, 'scroll').pipe(\n\t\t\t\tthrottleTime(0, undefined, {\n\t\t\t\t\tleading: true,\n\t\t\t\t\ttrailing: true,\n\t\t\t\t}),\n\t\t\t\tstartWith(true),\n\t\t\t\tmap(() => this.isInViewport(this)),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(inViewport => {\n\t\t\t\t\t// If leaving viewport and `resetOnScroll` is true, reset letters to opacity 0\n\t\t\t\t\tif (!inViewport && this.resetOnScroll) {\n\t\t\t\t\t\tArray.from(this.letters.children).forEach((letter: HTMLElement) => {\n\t\t\t\t\t\t\tletter.style.opacity = '0'\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tfilter(isInViewport => isInViewport),\n\t\t\t\t// If resetOnScroll = false, animate only the first time inView. If true, repeat.\n\t\t\t\tthis.resetOnScroll ? tap() : take(1),\n\t\t\t\ttap({\n\t\t\t\t\tnext: () => {\n\t\t\t\t\t\t// Animate letters with the native Web Animations API\n\t\t\t\t\t\tconst letters = this.shadowRoot!.querySelectorAll<HTMLElement>('.ml7 .letter')\n\n\t\t\t\t\t\tletters.forEach((letter, i) => {\n\t\t\t\t\t\t\t// Combine all transforms into one CSS transform string\n\t\t\t\t\t\t\t// From\n\t\t\t\t\t\t\tconst fromTransform = `\n translate3d(${this.translateX[0]}, ${this.translateY[0]}, ${this.translateZ[0]}px)\n rotateZ(${this.rotateZ[0]}deg)\n scale(${this.scale[0]})\n `\n\t\t\t\t\t\t\t// To\n\t\t\t\t\t\t\tconst toTransform = `\n translate3d(${this.translateX[1]}, ${this.translateY[1]}, ${this.translateZ[1]}px)\n rotateZ(${this.rotateZ[1]}deg)\n scale(${this.scale[1]})\n `\n\t\t\t\t\t\t\t// Approximate `outExpo` or pick a standard easing (like 'ease-out'):\n\t\t\t\t\t\t\t// outExpo often approximated by cubic-bezier(0.19, 1, 0.22, 1)\n\t\t\t\t\t\t\tconst easingMap: Record<string, string> = {\n\t\t\t\t\t\t\t\toutExpo: 'cubic-bezier(0.19, 1, 0.22, 1)',\n\t\t\t\t\t\t\t\t// add more if you want\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst keyframes: Keyframe[] = [\n\t\t\t\t\t\t\t\t{ transform: fromTransform, opacity: String(this.opacity[0]) },\n\t\t\t\t\t\t\t\t{ transform: toTransform, opacity: String(this.opacity[1]) },\n\t\t\t\t\t\t\t]\n\n\t\t\t\t\t\t\tletter.animate(keyframes, {\n\t\t\t\t\t\t\t\tduration: this.duration,\n\t\t\t\t\t\t\t\teasing: easingMap[this.ease] || 'ease-out',\n\t\t\t\t\t\t\t\tdelay: this.delay + i * this.stagger, // staggered start\n\t\t\t\t\t\t\t\tfill: 'forwards', // so the letters remain visible\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t),\n\t\t).subscribe()\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<span class=\"ml7\">\n\t\t\t\t<span class=\"text-wrapper\">\n\t\t\t\t\t<span class=\"letters\">\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t</span>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-animated-text': SchmancyAnimatedText\n\t}\n}\n"],"names":["SchmancyAnimatedText","$LitElement","css","super","arguments","this","ease","delay","stagger","duration","scale","opacity","translateX","translateY","translateZ","rotateZ","resetOnScroll","element","rect","getBoundingClientRect","top","left","bottom","window","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","firstUpdated","letters","innerHTML","defaultSlot","textContent","replace","concat","interval","pipe","startWith","filter","width","height","take","fromEvent","throttleTime","leading","trailing","map","isInViewport","distinctUntilChanged","tap","inViewport","Array","from","children","forEach","letter","style","next","shadowRoot","querySelectorAll","i","fromTransform","toTransform","keyframes","transform","String","animate","easing","outExpo","fill","subscribe","html","__decorateClass","property","type","prototype","Number","Boolean","queryAssignedNodes","query","customElement"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";require("./animated-text-B3UYCBgB.cjs");
1
+ "use strict";require("./animated-text-CaUJr-yL.cjs");
2
2
  //# sourceMappingURL=animated-text.cjs.map
@@ -1,2 +1,2 @@
1
- import "./animated-text-D6s-YOrx.js";
1
+ import "./animated-text-D8LhwMLu.js";
2
2
  //# sourceMappingURL=animated-text.js.map
package/dist/area.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./area.component-CNHbzqRX.cjs");exports.FINDING_MORTIES=e.FINDING_MORTIES,exports.HERE_RICKY=e.HERE_RICKY,exports.HISTORY_STRATEGY=e.HISTORY_STRATEGY,Object.defineProperty(exports,"SchmancyArea",{enumerable:!0,get:()=>e.SchmancyArea}),exports.area=e.area,exports.routerHistory=e.routerHistory;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./area.component-DJYgP8NP.cjs");exports.FINDING_MORTIES=e.FINDING_MORTIES,exports.HERE_RICKY=e.HERE_RICKY,exports.HISTORY_STRATEGY=e.HISTORY_STRATEGY,Object.defineProperty(exports,"SchmancyArea",{enumerable:!0,get:()=>e.SchmancyArea}),exports.area=e.area,exports.routerHistory=e.routerHistory;
2
2
  //# sourceMappingURL=area.cjs.map
@@ -1,8 +1,8 @@
1
- "use strict";const n=require("rxjs");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const f=require("./litElement.mixin-CYwiYZyZ.cjs");require("./tailwind.mixin-BmIP1Qzo.cjs");const u=require("lit"),h=require("lit/decorators.js"),g=require("./index-DyJ0oDpR.cjs"),S=new n.Subject,d="FINDING_MORTIES",y="HERE_RICKY";class p{constructor(){this.prettyURL=!1,this.mode="HISTORY",this.request=new n.ReplaySubject(1),this.current=new Map,this.$current=new n.ReplaySubject(1),this.enableHistoryMode=!0,this.findingMortiesEvent=new CustomEvent(d),this.$current.next(this.current)}find(){return n.zip([n.fromEvent(window,y).pipe(n.map(e=>e.detail),n.bufferTime(0),n.tap(console.log)),n.of(1).pipe(n.tap(()=>window.dispatchEvent(this.findingMortiesEvent)))]).pipe(n.map(([e])=>e),n.timeout(1))}push(e){this.request.next(e)}pop(e){const o=JSON.parse(JSON.stringify(s.state));delete o[e],history.replaceState(null,"",encodeURIComponent(JSON.stringify(o)))}static getInstance(){return p.instance||(p.instance=new p),p.instance}get state(){const e=location.pathname.split("/").pop();let o={};try{o=e?JSON.parse(decodeURIComponent(e)):{}}catch{o={}}return o}}const s=p.getInstance();var c=(t=>(t.push="push",t.replace="replace",t.pop="pop",t.silent="silent",t))(c||{}),w=Object.defineProperty,E=Object.getOwnPropertyDescriptor,l=(t,e,o,a)=>{for(var i,r=a>1?void 0:a?E(e,o):e,m=t.length-1;m>=0;m--)(i=t[m])&&(r=(a?i(e,o,r):i(r))||r);return a&&r&&w(e,o,r),r};exports.SchmancyArea=class extends f.$LitElement(u.css`
1
+ "use strict";const n=require("rxjs");require("lit/directives/class-map.js"),require("lit/directives/style-map.js");const f=require("./litElement.mixin-B9kSOE4x.cjs");require("./tailwind.mixin-gE-6eUQA.cjs");const u=require("lit"),h=require("lit/decorators.js"),g=require("./index-DyJ0oDpR.cjs"),S=new n.Subject,d="FINDING_MORTIES",y="HERE_RICKY";class p{constructor(){this.prettyURL=!1,this.mode="HISTORY",this.request=new n.ReplaySubject(1),this.current=new Map,this.$current=new n.ReplaySubject(1),this.enableHistoryMode=!0,this.findingMortiesEvent=new CustomEvent(d),this.$current.next(this.current)}find(){return n.zip([n.fromEvent(window,y).pipe(n.map(e=>e.detail),n.bufferTime(0),n.tap(console.log)),n.of(1).pipe(n.tap(()=>window.dispatchEvent(this.findingMortiesEvent)))]).pipe(n.map(([e])=>e),n.timeout(1))}push(e){this.request.next(e)}pop(e){const o=JSON.parse(JSON.stringify(s.state));delete o[e],history.replaceState(null,"",encodeURIComponent(JSON.stringify(o)))}static getInstance(){return p.instance||(p.instance=new p),p.instance}get state(){const e=location.pathname.split("/").pop();let o={};try{o=e?JSON.parse(decodeURIComponent(e)):{}}catch{o={}}return o}}const s=p.getInstance();var c=(t=>(t.push="push",t.replace="replace",t.pop="pop",t.silent="silent",t))(c||{}),w=Object.defineProperty,E=Object.getOwnPropertyDescriptor,l=(t,e,o,a)=>{for(var i,r=a>1?void 0:a?E(e,o):e,m=t.length-1;m>=0;m--)(i=t[m])&&(r=(a?i(e,o,r):i(r))||r);return a&&r&&w(e,o,r),r};exports.SchmancyArea=class extends f.$LitElement(u.css`
2
2
  :host {
3
3
  position: relative;
4
4
  display: block;
5
5
  inset: 0;
6
6
  }
7
7
  `){getComponentFromPathname(t,e){return n.of(t).pipe(n.map(o=>o.split("/").pop()??""),n.map(o=>decodeURIComponent(o)),n.map(o=>JSON.parse(o)),n.map(o=>o[this.name]),n.map(o=>!o&&this.default?{component:this.default,state:void 0}:o),n.filter(o=>g.libExports.isPresent(o)),n.map(o=>({area:this.name,component:o.component??this.default,state:o.state,historyStrategy:e})),n.map(o=>o),n.catchError(()=>this.default?n.of({area:this.name,component:this.default,historyStrategy:e}):n.EMPTY))}firstUpdated(){if(!this.name)throw new Error("Area name or default component not set");n.merge(n.of(location.pathname).pipe(n.switchMap(t=>this.getComponentFromPathname(t,c.silent)),n.map(t=>t),n.take(1)),s.request.pipe(n.filter(({area:t})=>t===this.name)),n.fromEvent(window,"popstate").pipe(n.map(t=>t.target.location.pathname),n.switchMap(t=>this.getComponentFromPathname(t,c.silent)),n.map(t=>t))).pipe(n.filter(t=>!!t.component),n.takeUntil(this.disconnecting),n.distinctUntilChanged((t,e)=>{let o,a;return typeof t.component!="function"&&(typeof t.component=="string"&&(o=t.component),typeof e.component!="function"&&(typeof e.component=="string"&&(a=e.component),(a==null?void 0:a.replaceAll("-","").toLowerCase())===(o==null?void 0:o.replaceAll("-","").toLowerCase())))})).pipe(n.switchMap(t=>{const e=t.component;return e instanceof Promise?n.from(e).pipe(n.map(o=>({component:o.exports.default,route:t}))):n.of({component:e,route:t})}),n.map(({component:t,route:e})=>typeof t=="string"?{component:document.createElement(t),route:e}:t instanceof HTMLElement?{component:t,route:e}:typeof t=="function"?{component:new t,route:e}:void 0),n.distinctUntilChanged((t,e)=>t.component.tagName===e.component.tagName),n.map(({component:t,route:e})=>{var i,r;const o=(i=this.shadowRoot)==null?void 0:i.children[0],a=!!o;return o.remove(),t.classList.add("opacity-0"),(r=this.shadowRoot)==null||r.append(t),t.animate([{opacity:0},{opacity:1}],{duration:a?150:100,easing:"cubic-bezier(0.25, 0.8, 0.25, 1)",fill:"forwards"}),{component:t,route:e}}),n.tap(({component:t,route:e})=>{e.historyStrategy===void 0||e.historyStrategy==="push"?history.pushState(e.state,"",this.newPath(t.tagName,e)):e.historyStrategy&&["replace","pop"].includes(e.historyStrategy)&&history.replaceState(e.state,"",this.newPath(t.tagName,e)),s.current.set(this.name,{component:t.tagName,state:e.state,area:this.name}),s.$current.next(s.current)}),n.takeUntil(this.disconnecting)).subscribe()}newPath(t,e){const o=location.pathname.split("/").pop();let a={};try{a=o?JSON.parse(decodeURIComponent(o)):{}}catch{a={}}e.state=e.state??{};const i=e.clearQueryParams?this.queryParamClear(e.clearQueryParams):document.location.search;return encodeURIComponent(JSON.stringify({...a,[this.name]:{component:t.toLowerCase(),state:e.state}})).concat(`${i}`)}queryParamClear(t){if(!t)return"";const e=new URLSearchParams(location.search);return t.forEach(o=>e.delete(o)),e.toString()===""?"":`?${e.toString()}`}checkForTeleportationRequests(){return n.fromEvent(window,"FLIP_REQUEST").pipe(n.map(t=>t.detail),n.bufferTime(0),n.tap(()=>{this.dispatchEvent(new CustomEvent("FLIP_STARTED"))}),n.takeUntil(this.disconnecting),n.timeout(0),n.catchError(()=>n.of(null)))}disconnectedCallback(){super.disconnectedCallback(),this.disconnecting.next(!0)}render(){return u.html` <slot> </slot> `}},l([h.property()],exports.SchmancyArea.prototype,"name",2),l([h.property()],exports.SchmancyArea.prototype,"default",2),exports.SchmancyArea=l([h.customElement("schmancy-area")],exports.SchmancyArea),exports.FINDING_MORTIES=d,exports.HERE_RICKY=y,exports.HISTORY_STRATEGY=c,exports.area=s,exports.routerHistory=S;
8
- //# sourceMappingURL=area.component-CNHbzqRX.cjs.map
8
+ //# sourceMappingURL=area.component-DJYgP8NP.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"area.component-CNHbzqRX.cjs","sources":["../src/area/area.service.ts","../src/area/router.types.ts","../src/area/area.component.ts"],"sourcesContent":["import { ReplaySubject, Subject, bufferTime, fromEvent, map, of, tap, timeout, zip } from 'rxjs'\nimport { SchmancyTeleportation } from '../teleport'\nimport { ActiveRoute, 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\nclass AreaService {\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\tpublic enableHistoryMode = true\n\tprivate findingMortiesEvent = new CustomEvent<FINDING_MORTIES_EVENT['detail']>(FINDING_MORTIES)\n\n\tconstructor() {\n\t\tthis.$current.next(this.current)\n\t}\n\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\ttap(console.log),\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)\n\t}\n\n\tpush(r: RouteAction) {\n\t\tthis.request.next(r)\n\t}\n\n\tpop(name: string) {\n\t\tconst newState = JSON.parse(JSON.stringify(area.state))\n\t\tdelete newState[name]\n\t\tconsole.log(area.state, newState)\n\t\thistory.replaceState(null, '', encodeURIComponent(JSON.stringify(newState)))\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\tget state() {\n\t\tconst pathname = location.pathname.split('/').pop()\n\t\tlet areaState = {}\n\t\ttry {\n\t\t\tareaState = pathname ? JSON.parse(decodeURIComponent(pathname)) : {}\n\t\t} catch {\n\t\t\tareaState = {}\n\t\t}\n\t\treturn areaState\n\t}\n}\n\nexport const area = AreaService.getInstance()\nexport default area\n","export type RouteAction = {\n\tcomponent: CustomElementConstructor | string | Promise<NodeModule> | HTMLElement | Promise<NodeModule>\n\tarea: string\n\tstate?: object\n\thistoryStrategy?: THistoryStrategy\n\tclearQueryParams?: string[] | null\n}\n\nexport type ActiveRoute = {\n\tcomponent: string\n\tarea: string\n\tstate?: object\n}\n\nexport type THistoryStrategy = 'push' | 'replace' | 'pop' | 'silent'\n\nexport enum HISTORY_STRATEGY {\n\tpush = 'push',\n\treplace = 'replace',\n\tpop = 'pop',\n\tsilent = 'silent',\n}\n","import { $LitElement } from '@mixins/index'\nimport { TemplateResult, css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport {\n\tEMPTY,\n\tbufferTime,\n\tcatchError,\n\tdistinctUntilChanged,\n\tfilter,\n\tfrom,\n\tfromEvent,\n\tmap,\n\tmerge,\n\tof,\n\tswitchMap,\n\ttake,\n\ttakeUntil,\n\ttap,\n\ttimeout,\n} from 'rxjs'\nimport { isPresent } from 'ts-is-present'\nimport area from './area.service'\nimport { HISTORY_STRATEGY, RouteAction } from './router.types'\n\ntype TRouteArea = {\n\tcomponent: string\n\tstate: object | undefined\n}\n\n@customElement('schmancy-area')\nexport class SchmancyArea extends $LitElement(css`\n\t:host {\n\t\tposition: relative;\n\t\tdisplay: block;\n\t\tinset: 0;\n\t}\n`) {\n\t/**\n\t * The name of the router outlet\n\t * @attr\n\t * @type {string}\n\t * @public\n\t * @required\n\t */\n\t@property() name!: string\n\n\t@property() default!: string | Promise<NodeModule> | CustomElementConstructor | TemplateResult<1>\n\n\t/**\n\t *\n\t * @param pathname pathname from the browser location API\n\t * @param historyStrategy the history strategy to use for the route like PUSH, REPLACE, or SILENT\n\t * @returns rxjs pipes that will return the component to render and the history strategy to use\n\t */\n\tgetComponentFromPathname(pathname: string, historyStrategy: HISTORY_STRATEGY) {\n\t\treturn of(pathname).pipe(\n\t\t\tmap(path => path.split('/').pop() ?? ''),\n\t\t\tmap(path => decodeURIComponent(path)),\n\t\t\tmap(path => JSON.parse(path)),\n\t\t\tmap(routes => routes[this.name] as TRouteArea),\n\t\t\tmap(component =>\n\t\t\t\t!component && this.default\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tcomponent: this.default,\n\t\t\t\t\t\t\tstate: undefined,\n\t\t\t\t\t\t}\n\t\t\t\t\t: component,\n\t\t\t),\n\t\t\tfilter(x => isPresent(x)),\n\t\t\tmap((component: TRouteArea) => ({\n\t\t\t\tarea: this.name,\n\t\t\t\tcomponent: component.component ?? this.default,\n\t\t\t\tstate: component.state,\n\t\t\t\thistoryStrategy,\n\t\t\t})),\n\t\t\tmap(x => x as RouteAction),\n\t\t\tcatchError(() => {\n\t\t\t\treturn this.default\n\t\t\t\t\t? of({\n\t\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t\t\tcomponent: this.default,\n\t\t\t\t\t\t\thistoryStrategy,\n\t\t\t\t\t\t} as RouteAction)\n\t\t\t\t\t: EMPTY\n\t\t\t}),\n\t\t)\n\t}\n\n\tprotected firstUpdated(): void {\n\t\tif (!this.name) {\n\t\t\t// TOOD: maybe enforce this to be unique\n\t\t\tthrow new Error('Area name or default component not set')\n\t\t}\n\n\t\t// active outlet changes\n\t\tmerge(\n\t\t\t// 1) initial load from location.pathname\n\t\t\tof(location.pathname).pipe(\n\t\t\t\tswitchMap(pathname => this.getComponentFromPathname(pathname, HISTORY_STRATEGY.silent)),\n\t\t\t\tmap(route => route as RouteAction),\n\t\t\t\ttake(1),\n\t\t\t),\n\t\t\t// 2) requests to change the route for this area\n\t\t\tarea.request.pipe(filter(({ area }) => area === this.name)),\n\t\t\t// 3) popstate events (back, forward)\n\t\t\tfromEvent<PopStateEvent>(window, 'popstate').pipe(\n\t\t\t\tmap(e => (e.target as Window).location.pathname),\n\t\t\t\tswitchMap(pathname => this.getComponentFromPathname(pathname, HISTORY_STRATEGY.silent)),\n\t\t\t\tmap(route => route as RouteAction),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(\n\t\t\t\tfilter(request => !!request.component),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\tdistinctUntilChanged((a, b) => {\n\t\t\t\t\tlet aComponent, bComponent\n\t\t\t\t\tif (typeof a.component === 'function') return false\n\t\t\t\t\telse if (typeof a.component === 'string') aComponent = a.component\n\n\t\t\t\t\tif (typeof b.component === 'function') return false\n\t\t\t\t\telse if (typeof b.component === 'string') bComponent = b.component\n\n\t\t\t\t\treturn bComponent?.replaceAll('-', '').toLowerCase() === aComponent?.replaceAll('-', '').toLowerCase()\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.pipe(\n\t\t\t\tswitchMap(route => {\n\t\t\t\t\tconst c = route.component\n\t\t\t\t\tif (c instanceof Promise) {\n\t\t\t\t\t\t// Dynamic import module\n\t\t\t\t\t\treturn from(c).pipe(map(x => ({ component: x.exports.default as CustomElementConstructor, route })))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Already a string, function, or element\n\t\t\t\t\t\treturn of({ component: c, route })\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tmap(({ component, route }) => {\n\t\t\t\t\tif (typeof component === 'string') {\n\t\t\t\t\t\t// Tag name\n\t\t\t\t\t\treturn { component: document.createElement(component), route }\n\t\t\t\t\t} else if (component instanceof HTMLElement) {\n\t\t\t\t\t\t// Already an element instance\n\t\t\t\t\t\treturn { component, route }\n\t\t\t\t\t} else if (typeof component === 'function') {\n\t\t\t\t\t\t// Custom element constructor\n\t\t\t\t\t\treturn { component: new component(), route }\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tdistinctUntilChanged((prev, curr) => prev.component.tagName === curr.component.tagName),\n\t\t\t\t// create the new view and add it to the DOM\n\t\t\t\tmap(({ component, route }) => {\n\t\t\t\t\tconst oldView = this.shadowRoot?.children[0]\n\t\t\t\t\tconst oldViewExists = !!oldView\n\n\t\t\t\t\t// Remove the old view (if any)\n\t\t\t\t\toldView.remove()\n\t\t\t\t\t// Native Web Animations API - fade in\n\t\t\t\t\t// \"ease: cubic-bezier(0.25, 0.8, 0.25, 1)\" was used in the old code\n\t\t\t\t\tcomponent.classList.add('opacity-0')\n\t\t\t\t\tthis.shadowRoot?.append(component)\n\t\t\t\t\tcomponent.animate([{ opacity: 0 }, { opacity: 1 }], {\n\t\t\t\t\t\tduration: oldViewExists ? 150 : 100,\n\t\t\t\t\t\teasing: 'cubic-bezier(0.25, 0.8, 0.25, 1)',\n\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t})\n\n\t\t\t\t\t// Insert the new view\n\n\t\t\t\t\treturn { component, route }\n\t\t\t\t}),\n\t\t\t\ttap(({ component, route }) => {\n\t\t\t\t\t// Handle history updates\n\t\t\t\t\tif (typeof route.historyStrategy === 'undefined' || route.historyStrategy === 'push') {\n\t\t\t\t\t\thistory.pushState(route.state, '', this.newPath(component.tagName, route))\n\t\t\t\t\t} else if (route.historyStrategy && ['replace', 'pop'].includes(route.historyStrategy)) {\n\t\t\t\t\t\thistory.replaceState(route.state, '', this.newPath(component.tagName, route))\n\t\t\t\t\t}\n\t\t\t\t\tarea.current.set(this.name, {\n\t\t\t\t\t\tcomponent: component.tagName,\n\t\t\t\t\t\tstate: route.state,\n\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t})\n\n\t\t\t\t\tarea.$current.next(area.current)\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tnewPath(tag: string, route: RouteAction) {\n\t\tconst oldPathname = location.pathname.split('/').pop()\n\t\tlet oldAreaState = {}\n\t\ttry {\n\t\t\toldAreaState = oldPathname ? JSON.parse(decodeURIComponent(oldPathname)) : {}\n\t\t} catch {\n\t\t\toldAreaState = {}\n\t\t}\n\t\troute.state = route.state ?? {}\n\t\tconst queryParams = route.clearQueryParams ? this.queryParamClear(route.clearQueryParams) : document.location.search\n\n\t\treturn encodeURIComponent(\n\t\t\tJSON.stringify({\n\t\t\t\t...oldAreaState,\n\t\t\t\t[this.name]: { component: tag.toLowerCase(), state: route.state },\n\t\t\t}),\n\t\t).concat(`${queryParams}`)\n\t}\n\n\tqueryParamClear(params?: string[]) {\n\t\tif (!params) {\n\t\t\treturn ''\n\t\t}\n\t\t// get query params from url\n\t\tconst urlParams = new URLSearchParams(location.search)\n\t\t// remove query params\n\t\tparams.forEach(param => urlParams.delete(param))\n\t\t// update url\n\t\tif (urlParams.toString() === '') return ''\n\t\treturn `?${urlParams.toString()}`\n\t}\n\n\tcheckForTeleportationRequests() {\n\t\treturn fromEvent<CustomEvent>(window, 'FLIP_REQUEST').pipe(\n\t\t\tmap(e => e.detail),\n\t\t\tbufferTime(0),\n\t\t\ttap(() => {\n\t\t\t\tthis.dispatchEvent(new CustomEvent('FLIP_STARTED'))\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting),\n\t\t\ttimeout(0),\n\t\t\tcatchError(() => of(null)),\n\t\t)\n\t}\n\n\tdisconnectedCallback(): void {\n\t\tsuper.disconnectedCallback()\n\t\tthis.disconnecting.next(true)\n\t}\n\n\trender() {\n\t\treturn html` <slot> </slot> `\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-area': SchmancyArea\n\t}\n}\n"],"names":["routerHistory","Subject","FINDING_MORTIES","HERE_RICKY","AreaService","constructor","this","prettyURL","mode","request","ReplaySubject","current","Map","$current","enableHistoryMode","findingMortiesEvent","CustomEvent","next","zip","fromEvent","window","pipe","map","e","detail","bufferTime","tap","console","log","of","dispatchEvent","component","timeout","r","name","newState","JSON","parse","stringify","area","state","history","replaceState","encodeURIComponent","getInstance","instance","pathname","location","split","pop","areaState","decodeURIComponent","HISTORY_STRATEGY","SchmancyArea","$LitElement","css","historyStrategy","path","routes","default","undefined","filter","x","isPresent","libExports","catchError","EMPTY","Error","merge","switchMap","getComponentFromPathname","silent","route","take","target","takeUntil","disconnecting","distinctUntilChanged","a","b","aComponent","bComponent","replaceAll","toLowerCase","c","Promise","from","exports","document","createElement","HTMLElement","prev","curr","tagName","oldView","shadowRoot","children","oldViewExists","remove","classList","add","append","animate","opacity","duration","easing","fill","pushState","newPath","includes","set","subscribe","tag","oldPathname","oldAreaState","queryParams","clearQueryParams","queryParamClear","search","concat","params","urlParams","URLSearchParams","forEach","param","delete","toString","super","disconnectedCallback","html","__decorateClass","property","prototype","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"area.component-DJYgP8NP.cjs","sources":["../src/area/area.service.ts","../src/area/router.types.ts","../src/area/area.component.ts"],"sourcesContent":["import { ReplaySubject, Subject, bufferTime, fromEvent, map, of, tap, timeout, zip } from 'rxjs'\nimport { SchmancyTeleportation } from '../teleport'\nimport { ActiveRoute, 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\nclass AreaService {\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\tpublic enableHistoryMode = true\n\tprivate findingMortiesEvent = new CustomEvent<FINDING_MORTIES_EVENT['detail']>(FINDING_MORTIES)\n\n\tconstructor() {\n\t\tthis.$current.next(this.current)\n\t}\n\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\ttap(console.log),\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)\n\t}\n\n\tpush(r: RouteAction) {\n\t\tthis.request.next(r)\n\t}\n\n\tpop(name: string) {\n\t\tconst newState = JSON.parse(JSON.stringify(area.state))\n\t\tdelete newState[name]\n\t\tconsole.log(area.state, newState)\n\t\thistory.replaceState(null, '', encodeURIComponent(JSON.stringify(newState)))\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\tget state() {\n\t\tconst pathname = location.pathname.split('/').pop()\n\t\tlet areaState = {}\n\t\ttry {\n\t\t\tareaState = pathname ? JSON.parse(decodeURIComponent(pathname)) : {}\n\t\t} catch {\n\t\t\tareaState = {}\n\t\t}\n\t\treturn areaState\n\t}\n}\n\nexport const area = AreaService.getInstance()\nexport default area\n","export type RouteAction = {\n\tcomponent: CustomElementConstructor | string | Promise<NodeModule> | HTMLElement | Promise<NodeModule>\n\tarea: string\n\tstate?: object\n\thistoryStrategy?: THistoryStrategy\n\tclearQueryParams?: string[] | null\n}\n\nexport type ActiveRoute = {\n\tcomponent: string\n\tarea: string\n\tstate?: object\n}\n\nexport type THistoryStrategy = 'push' | 'replace' | 'pop' | 'silent'\n\nexport enum HISTORY_STRATEGY {\n\tpush = 'push',\n\treplace = 'replace',\n\tpop = 'pop',\n\tsilent = 'silent',\n}\n","import { $LitElement } from '@mixins/index'\nimport { TemplateResult, css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport {\n\tEMPTY,\n\tbufferTime,\n\tcatchError,\n\tdistinctUntilChanged,\n\tfilter,\n\tfrom,\n\tfromEvent,\n\tmap,\n\tmerge,\n\tof,\n\tswitchMap,\n\ttake,\n\ttakeUntil,\n\ttap,\n\ttimeout,\n} from 'rxjs'\nimport { isPresent } from 'ts-is-present'\nimport area from './area.service'\nimport { HISTORY_STRATEGY, RouteAction } from './router.types'\n\ntype TRouteArea = {\n\tcomponent: string\n\tstate: object | undefined\n}\n\n@customElement('schmancy-area')\nexport class SchmancyArea extends $LitElement(css`\n\t:host {\n\t\tposition: relative;\n\t\tdisplay: block;\n\t\tinset: 0;\n\t}\n`) {\n\t/**\n\t * The name of the router outlet\n\t * @attr\n\t * @type {string}\n\t * @public\n\t * @required\n\t */\n\t@property() name!: string\n\n\t@property() default!: string | Promise<NodeModule> | CustomElementConstructor | TemplateResult<1>\n\n\t/**\n\t *\n\t * @param pathname pathname from the browser location API\n\t * @param historyStrategy the history strategy to use for the route like PUSH, REPLACE, or SILENT\n\t * @returns rxjs pipes that will return the component to render and the history strategy to use\n\t */\n\tgetComponentFromPathname(pathname: string, historyStrategy: HISTORY_STRATEGY) {\n\t\treturn of(pathname).pipe(\n\t\t\tmap(path => path.split('/').pop() ?? ''),\n\t\t\tmap(path => decodeURIComponent(path)),\n\t\t\tmap(path => JSON.parse(path)),\n\t\t\tmap(routes => routes[this.name] as TRouteArea),\n\t\t\tmap(component =>\n\t\t\t\t!component && this.default\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tcomponent: this.default,\n\t\t\t\t\t\t\tstate: undefined,\n\t\t\t\t\t\t}\n\t\t\t\t\t: component,\n\t\t\t),\n\t\t\tfilter(x => isPresent(x)),\n\t\t\tmap((component: TRouteArea) => ({\n\t\t\t\tarea: this.name,\n\t\t\t\tcomponent: component.component ?? this.default,\n\t\t\t\tstate: component.state,\n\t\t\t\thistoryStrategy,\n\t\t\t})),\n\t\t\tmap(x => x as RouteAction),\n\t\t\tcatchError(() => {\n\t\t\t\treturn this.default\n\t\t\t\t\t? of({\n\t\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t\t\tcomponent: this.default,\n\t\t\t\t\t\t\thistoryStrategy,\n\t\t\t\t\t\t} as RouteAction)\n\t\t\t\t\t: EMPTY\n\t\t\t}),\n\t\t)\n\t}\n\n\tprotected firstUpdated(): void {\n\t\tif (!this.name) {\n\t\t\t// TOOD: maybe enforce this to be unique\n\t\t\tthrow new Error('Area name or default component not set')\n\t\t}\n\n\t\t// active outlet changes\n\t\tmerge(\n\t\t\t// 1) initial load from location.pathname\n\t\t\tof(location.pathname).pipe(\n\t\t\t\tswitchMap(pathname => this.getComponentFromPathname(pathname, HISTORY_STRATEGY.silent)),\n\t\t\t\tmap(route => route as RouteAction),\n\t\t\t\ttake(1),\n\t\t\t),\n\t\t\t// 2) requests to change the route for this area\n\t\t\tarea.request.pipe(filter(({ area }) => area === this.name)),\n\t\t\t// 3) popstate events (back, forward)\n\t\t\tfromEvent<PopStateEvent>(window, 'popstate').pipe(\n\t\t\t\tmap(e => (e.target as Window).location.pathname),\n\t\t\t\tswitchMap(pathname => this.getComponentFromPathname(pathname, HISTORY_STRATEGY.silent)),\n\t\t\t\tmap(route => route as RouteAction),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(\n\t\t\t\tfilter(request => !!request.component),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\tdistinctUntilChanged((a, b) => {\n\t\t\t\t\tlet aComponent, bComponent\n\t\t\t\t\tif (typeof a.component === 'function') return false\n\t\t\t\t\telse if (typeof a.component === 'string') aComponent = a.component\n\n\t\t\t\t\tif (typeof b.component === 'function') return false\n\t\t\t\t\telse if (typeof b.component === 'string') bComponent = b.component\n\n\t\t\t\t\treturn bComponent?.replaceAll('-', '').toLowerCase() === aComponent?.replaceAll('-', '').toLowerCase()\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.pipe(\n\t\t\t\tswitchMap(route => {\n\t\t\t\t\tconst c = route.component\n\t\t\t\t\tif (c instanceof Promise) {\n\t\t\t\t\t\t// Dynamic import module\n\t\t\t\t\t\treturn from(c).pipe(map(x => ({ component: x.exports.default as CustomElementConstructor, route })))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Already a string, function, or element\n\t\t\t\t\t\treturn of({ component: c, route })\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tmap(({ component, route }) => {\n\t\t\t\t\tif (typeof component === 'string') {\n\t\t\t\t\t\t// Tag name\n\t\t\t\t\t\treturn { component: document.createElement(component), route }\n\t\t\t\t\t} else if (component instanceof HTMLElement) {\n\t\t\t\t\t\t// Already an element instance\n\t\t\t\t\t\treturn { component, route }\n\t\t\t\t\t} else if (typeof component === 'function') {\n\t\t\t\t\t\t// Custom element constructor\n\t\t\t\t\t\treturn { component: new component(), route }\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tdistinctUntilChanged((prev, curr) => prev.component.tagName === curr.component.tagName),\n\t\t\t\t// create the new view and add it to the DOM\n\t\t\t\tmap(({ component, route }) => {\n\t\t\t\t\tconst oldView = this.shadowRoot?.children[0]\n\t\t\t\t\tconst oldViewExists = !!oldView\n\n\t\t\t\t\t// Remove the old view (if any)\n\t\t\t\t\toldView.remove()\n\t\t\t\t\t// Native Web Animations API - fade in\n\t\t\t\t\t// \"ease: cubic-bezier(0.25, 0.8, 0.25, 1)\" was used in the old code\n\t\t\t\t\tcomponent.classList.add('opacity-0')\n\t\t\t\t\tthis.shadowRoot?.append(component)\n\t\t\t\t\tcomponent.animate([{ opacity: 0 }, { opacity: 1 }], {\n\t\t\t\t\t\tduration: oldViewExists ? 150 : 100,\n\t\t\t\t\t\teasing: 'cubic-bezier(0.25, 0.8, 0.25, 1)',\n\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t})\n\n\t\t\t\t\t// Insert the new view\n\n\t\t\t\t\treturn { component, route }\n\t\t\t\t}),\n\t\t\t\ttap(({ component, route }) => {\n\t\t\t\t\t// Handle history updates\n\t\t\t\t\tif (typeof route.historyStrategy === 'undefined' || route.historyStrategy === 'push') {\n\t\t\t\t\t\thistory.pushState(route.state, '', this.newPath(component.tagName, route))\n\t\t\t\t\t} else if (route.historyStrategy && ['replace', 'pop'].includes(route.historyStrategy)) {\n\t\t\t\t\t\thistory.replaceState(route.state, '', this.newPath(component.tagName, route))\n\t\t\t\t\t}\n\t\t\t\t\tarea.current.set(this.name, {\n\t\t\t\t\t\tcomponent: component.tagName,\n\t\t\t\t\t\tstate: route.state,\n\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t})\n\n\t\t\t\t\tarea.$current.next(area.current)\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tnewPath(tag: string, route: RouteAction) {\n\t\tconst oldPathname = location.pathname.split('/').pop()\n\t\tlet oldAreaState = {}\n\t\ttry {\n\t\t\toldAreaState = oldPathname ? JSON.parse(decodeURIComponent(oldPathname)) : {}\n\t\t} catch {\n\t\t\toldAreaState = {}\n\t\t}\n\t\troute.state = route.state ?? {}\n\t\tconst queryParams = route.clearQueryParams ? this.queryParamClear(route.clearQueryParams) : document.location.search\n\n\t\treturn encodeURIComponent(\n\t\t\tJSON.stringify({\n\t\t\t\t...oldAreaState,\n\t\t\t\t[this.name]: { component: tag.toLowerCase(), state: route.state },\n\t\t\t}),\n\t\t).concat(`${queryParams}`)\n\t}\n\n\tqueryParamClear(params?: string[]) {\n\t\tif (!params) {\n\t\t\treturn ''\n\t\t}\n\t\t// get query params from url\n\t\tconst urlParams = new URLSearchParams(location.search)\n\t\t// remove query params\n\t\tparams.forEach(param => urlParams.delete(param))\n\t\t// update url\n\t\tif (urlParams.toString() === '') return ''\n\t\treturn `?${urlParams.toString()}`\n\t}\n\n\tcheckForTeleportationRequests() {\n\t\treturn fromEvent<CustomEvent>(window, 'FLIP_REQUEST').pipe(\n\t\t\tmap(e => e.detail),\n\t\t\tbufferTime(0),\n\t\t\ttap(() => {\n\t\t\t\tthis.dispatchEvent(new CustomEvent('FLIP_STARTED'))\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting),\n\t\t\ttimeout(0),\n\t\t\tcatchError(() => of(null)),\n\t\t)\n\t}\n\n\tdisconnectedCallback(): void {\n\t\tsuper.disconnectedCallback()\n\t\tthis.disconnecting.next(true)\n\t}\n\n\trender() {\n\t\treturn html` <slot> </slot> `\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-area': SchmancyArea\n\t}\n}\n"],"names":["routerHistory","Subject","FINDING_MORTIES","HERE_RICKY","AreaService","constructor","this","prettyURL","mode","request","ReplaySubject","current","Map","$current","enableHistoryMode","findingMortiesEvent","CustomEvent","next","zip","fromEvent","window","pipe","map","e","detail","bufferTime","tap","console","log","of","dispatchEvent","component","timeout","r","name","newState","JSON","parse","stringify","area","state","history","replaceState","encodeURIComponent","getInstance","instance","pathname","location","split","pop","areaState","decodeURIComponent","HISTORY_STRATEGY","SchmancyArea","$LitElement","css","historyStrategy","path","routes","default","undefined","filter","x","isPresent","libExports","catchError","EMPTY","Error","merge","switchMap","getComponentFromPathname","silent","route","take","target","takeUntil","disconnecting","distinctUntilChanged","a","b","aComponent","bComponent","replaceAll","toLowerCase","c","Promise","from","exports","document","createElement","HTMLElement","prev","curr","tagName","oldView","shadowRoot","children","oldViewExists","remove","classList","add","append","animate","opacity","duration","easing","fill","pushState","newPath","includes","set","subscribe","tag","oldPathname","oldAreaState","queryParams","clearQueryParams","queryParamClear","search","concat","params","urlParams","URLSearchParams","forEach","param","delete","toString","super","disconnectedCallback","html","__decorateClass","property","prototype","customElement"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { Subject as I, ReplaySubject as S, zip as b, fromEvent as g, map as o, bufferTime as R, tap as h, of as i, timeout as v, filter as u, catchError as E, EMPTY as O, merge as U, switchMap as d, take as N, takeUntil as f, distinctUntilChanged as C, from as T } from "rxjs";
2
2
  import "lit/directives/class-map.js";
3
3
  import "lit/directives/style-map.js";
4
- import { $ as L } from "./litElement.mixin-DoKCdkhO.js";
5
- import "./tailwind.mixin-CHPxMV8E.js";
4
+ import { $ as L } from "./litElement.mixin-D9kneJpW.js";
5
+ import "./tailwind.mixin-BBKdEPAU.js";
6
6
  import { css as x, html as F } from "lit";
7
7
  import { property as P, customElement as J } from "lit/decorators.js";
8
8
  import { l as M } from "./index-CuY8m6ta.js";
@@ -104,4 +104,4 @@ export {
104
104
  w as b,
105
105
  B as r
106
106
  };
107
- //# sourceMappingURL=area.component-xeDLv_CE.js.map
107
+ //# sourceMappingURL=area.component-FgfXnOUF.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"area.component-xeDLv_CE.js","sources":["../src/area/area.service.ts","../src/area/router.types.ts","../src/area/area.component.ts"],"sourcesContent":["import { ReplaySubject, Subject, bufferTime, fromEvent, map, of, tap, timeout, zip } from 'rxjs'\nimport { SchmancyTeleportation } from '../teleport'\nimport { ActiveRoute, 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\nclass AreaService {\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\tpublic enableHistoryMode = true\n\tprivate findingMortiesEvent = new CustomEvent<FINDING_MORTIES_EVENT['detail']>(FINDING_MORTIES)\n\n\tconstructor() {\n\t\tthis.$current.next(this.current)\n\t}\n\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\ttap(console.log),\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)\n\t}\n\n\tpush(r: RouteAction) {\n\t\tthis.request.next(r)\n\t}\n\n\tpop(name: string) {\n\t\tconst newState = JSON.parse(JSON.stringify(area.state))\n\t\tdelete newState[name]\n\t\tconsole.log(area.state, newState)\n\t\thistory.replaceState(null, '', encodeURIComponent(JSON.stringify(newState)))\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\tget state() {\n\t\tconst pathname = location.pathname.split('/').pop()\n\t\tlet areaState = {}\n\t\ttry {\n\t\t\tareaState = pathname ? JSON.parse(decodeURIComponent(pathname)) : {}\n\t\t} catch {\n\t\t\tareaState = {}\n\t\t}\n\t\treturn areaState\n\t}\n}\n\nexport const area = AreaService.getInstance()\nexport default area\n","export type RouteAction = {\n\tcomponent: CustomElementConstructor | string | Promise<NodeModule> | HTMLElement | Promise<NodeModule>\n\tarea: string\n\tstate?: object\n\thistoryStrategy?: THistoryStrategy\n\tclearQueryParams?: string[] | null\n}\n\nexport type ActiveRoute = {\n\tcomponent: string\n\tarea: string\n\tstate?: object\n}\n\nexport type THistoryStrategy = 'push' | 'replace' | 'pop' | 'silent'\n\nexport enum HISTORY_STRATEGY {\n\tpush = 'push',\n\treplace = 'replace',\n\tpop = 'pop',\n\tsilent = 'silent',\n}\n","import { $LitElement } from '@mixins/index'\nimport { TemplateResult, css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport {\n\tEMPTY,\n\tbufferTime,\n\tcatchError,\n\tdistinctUntilChanged,\n\tfilter,\n\tfrom,\n\tfromEvent,\n\tmap,\n\tmerge,\n\tof,\n\tswitchMap,\n\ttake,\n\ttakeUntil,\n\ttap,\n\ttimeout,\n} from 'rxjs'\nimport { isPresent } from 'ts-is-present'\nimport area from './area.service'\nimport { HISTORY_STRATEGY, RouteAction } from './router.types'\n\ntype TRouteArea = {\n\tcomponent: string\n\tstate: object | undefined\n}\n\n@customElement('schmancy-area')\nexport class SchmancyArea extends $LitElement(css`\n\t:host {\n\t\tposition: relative;\n\t\tdisplay: block;\n\t\tinset: 0;\n\t}\n`) {\n\t/**\n\t * The name of the router outlet\n\t * @attr\n\t * @type {string}\n\t * @public\n\t * @required\n\t */\n\t@property() name!: string\n\n\t@property() default!: string | Promise<NodeModule> | CustomElementConstructor | TemplateResult<1>\n\n\t/**\n\t *\n\t * @param pathname pathname from the browser location API\n\t * @param historyStrategy the history strategy to use for the route like PUSH, REPLACE, or SILENT\n\t * @returns rxjs pipes that will return the component to render and the history strategy to use\n\t */\n\tgetComponentFromPathname(pathname: string, historyStrategy: HISTORY_STRATEGY) {\n\t\treturn of(pathname).pipe(\n\t\t\tmap(path => path.split('/').pop() ?? ''),\n\t\t\tmap(path => decodeURIComponent(path)),\n\t\t\tmap(path => JSON.parse(path)),\n\t\t\tmap(routes => routes[this.name] as TRouteArea),\n\t\t\tmap(component =>\n\t\t\t\t!component && this.default\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tcomponent: this.default,\n\t\t\t\t\t\t\tstate: undefined,\n\t\t\t\t\t\t}\n\t\t\t\t\t: component,\n\t\t\t),\n\t\t\tfilter(x => isPresent(x)),\n\t\t\tmap((component: TRouteArea) => ({\n\t\t\t\tarea: this.name,\n\t\t\t\tcomponent: component.component ?? this.default,\n\t\t\t\tstate: component.state,\n\t\t\t\thistoryStrategy,\n\t\t\t})),\n\t\t\tmap(x => x as RouteAction),\n\t\t\tcatchError(() => {\n\t\t\t\treturn this.default\n\t\t\t\t\t? of({\n\t\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t\t\tcomponent: this.default,\n\t\t\t\t\t\t\thistoryStrategy,\n\t\t\t\t\t\t} as RouteAction)\n\t\t\t\t\t: EMPTY\n\t\t\t}),\n\t\t)\n\t}\n\n\tprotected firstUpdated(): void {\n\t\tif (!this.name) {\n\t\t\t// TOOD: maybe enforce this to be unique\n\t\t\tthrow new Error('Area name or default component not set')\n\t\t}\n\n\t\t// active outlet changes\n\t\tmerge(\n\t\t\t// 1) initial load from location.pathname\n\t\t\tof(location.pathname).pipe(\n\t\t\t\tswitchMap(pathname => this.getComponentFromPathname(pathname, HISTORY_STRATEGY.silent)),\n\t\t\t\tmap(route => route as RouteAction),\n\t\t\t\ttake(1),\n\t\t\t),\n\t\t\t// 2) requests to change the route for this area\n\t\t\tarea.request.pipe(filter(({ area }) => area === this.name)),\n\t\t\t// 3) popstate events (back, forward)\n\t\t\tfromEvent<PopStateEvent>(window, 'popstate').pipe(\n\t\t\t\tmap(e => (e.target as Window).location.pathname),\n\t\t\t\tswitchMap(pathname => this.getComponentFromPathname(pathname, HISTORY_STRATEGY.silent)),\n\t\t\t\tmap(route => route as RouteAction),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(\n\t\t\t\tfilter(request => !!request.component),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\tdistinctUntilChanged((a, b) => {\n\t\t\t\t\tlet aComponent, bComponent\n\t\t\t\t\tif (typeof a.component === 'function') return false\n\t\t\t\t\telse if (typeof a.component === 'string') aComponent = a.component\n\n\t\t\t\t\tif (typeof b.component === 'function') return false\n\t\t\t\t\telse if (typeof b.component === 'string') bComponent = b.component\n\n\t\t\t\t\treturn bComponent?.replaceAll('-', '').toLowerCase() === aComponent?.replaceAll('-', '').toLowerCase()\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.pipe(\n\t\t\t\tswitchMap(route => {\n\t\t\t\t\tconst c = route.component\n\t\t\t\t\tif (c instanceof Promise) {\n\t\t\t\t\t\t// Dynamic import module\n\t\t\t\t\t\treturn from(c).pipe(map(x => ({ component: x.exports.default as CustomElementConstructor, route })))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Already a string, function, or element\n\t\t\t\t\t\treturn of({ component: c, route })\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tmap(({ component, route }) => {\n\t\t\t\t\tif (typeof component === 'string') {\n\t\t\t\t\t\t// Tag name\n\t\t\t\t\t\treturn { component: document.createElement(component), route }\n\t\t\t\t\t} else if (component instanceof HTMLElement) {\n\t\t\t\t\t\t// Already an element instance\n\t\t\t\t\t\treturn { component, route }\n\t\t\t\t\t} else if (typeof component === 'function') {\n\t\t\t\t\t\t// Custom element constructor\n\t\t\t\t\t\treturn { component: new component(), route }\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tdistinctUntilChanged((prev, curr) => prev.component.tagName === curr.component.tagName),\n\t\t\t\t// create the new view and add it to the DOM\n\t\t\t\tmap(({ component, route }) => {\n\t\t\t\t\tconst oldView = this.shadowRoot?.children[0]\n\t\t\t\t\tconst oldViewExists = !!oldView\n\n\t\t\t\t\t// Remove the old view (if any)\n\t\t\t\t\toldView.remove()\n\t\t\t\t\t// Native Web Animations API - fade in\n\t\t\t\t\t// \"ease: cubic-bezier(0.25, 0.8, 0.25, 1)\" was used in the old code\n\t\t\t\t\tcomponent.classList.add('opacity-0')\n\t\t\t\t\tthis.shadowRoot?.append(component)\n\t\t\t\t\tcomponent.animate([{ opacity: 0 }, { opacity: 1 }], {\n\t\t\t\t\t\tduration: oldViewExists ? 150 : 100,\n\t\t\t\t\t\teasing: 'cubic-bezier(0.25, 0.8, 0.25, 1)',\n\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t})\n\n\t\t\t\t\t// Insert the new view\n\n\t\t\t\t\treturn { component, route }\n\t\t\t\t}),\n\t\t\t\ttap(({ component, route }) => {\n\t\t\t\t\t// Handle history updates\n\t\t\t\t\tif (typeof route.historyStrategy === 'undefined' || route.historyStrategy === 'push') {\n\t\t\t\t\t\thistory.pushState(route.state, '', this.newPath(component.tagName, route))\n\t\t\t\t\t} else if (route.historyStrategy && ['replace', 'pop'].includes(route.historyStrategy)) {\n\t\t\t\t\t\thistory.replaceState(route.state, '', this.newPath(component.tagName, route))\n\t\t\t\t\t}\n\t\t\t\t\tarea.current.set(this.name, {\n\t\t\t\t\t\tcomponent: component.tagName,\n\t\t\t\t\t\tstate: route.state,\n\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t})\n\n\t\t\t\t\tarea.$current.next(area.current)\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tnewPath(tag: string, route: RouteAction) {\n\t\tconst oldPathname = location.pathname.split('/').pop()\n\t\tlet oldAreaState = {}\n\t\ttry {\n\t\t\toldAreaState = oldPathname ? JSON.parse(decodeURIComponent(oldPathname)) : {}\n\t\t} catch {\n\t\t\toldAreaState = {}\n\t\t}\n\t\troute.state = route.state ?? {}\n\t\tconst queryParams = route.clearQueryParams ? this.queryParamClear(route.clearQueryParams) : document.location.search\n\n\t\treturn encodeURIComponent(\n\t\t\tJSON.stringify({\n\t\t\t\t...oldAreaState,\n\t\t\t\t[this.name]: { component: tag.toLowerCase(), state: route.state },\n\t\t\t}),\n\t\t).concat(`${queryParams}`)\n\t}\n\n\tqueryParamClear(params?: string[]) {\n\t\tif (!params) {\n\t\t\treturn ''\n\t\t}\n\t\t// get query params from url\n\t\tconst urlParams = new URLSearchParams(location.search)\n\t\t// remove query params\n\t\tparams.forEach(param => urlParams.delete(param))\n\t\t// update url\n\t\tif (urlParams.toString() === '') return ''\n\t\treturn `?${urlParams.toString()}`\n\t}\n\n\tcheckForTeleportationRequests() {\n\t\treturn fromEvent<CustomEvent>(window, 'FLIP_REQUEST').pipe(\n\t\t\tmap(e => e.detail),\n\t\t\tbufferTime(0),\n\t\t\ttap(() => {\n\t\t\t\tthis.dispatchEvent(new CustomEvent('FLIP_STARTED'))\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting),\n\t\t\ttimeout(0),\n\t\t\tcatchError(() => of(null)),\n\t\t)\n\t}\n\n\tdisconnectedCallback(): void {\n\t\tsuper.disconnectedCallback()\n\t\tthis.disconnecting.next(true)\n\t}\n\n\trender() {\n\t\treturn html` <slot> </slot> `\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-area': SchmancyArea\n\t}\n}\n"],"names":["routerHistory","Subject","FINDING_MORTIES","HERE_RICKY","AreaService","constructor","this","prettyURL","mode","request","ReplaySubject","current","Map","$current","enableHistoryMode","findingMortiesEvent","CustomEvent","next","find","zip","fromEvent","window","pipe","map","e","detail","bufferTime","tap","console","log","of","dispatchEvent","component","timeout","r","name","newState","JSON","parse","stringify","area","state","history","replaceState","encodeURIComponent","instance","pathname","location","split","pop","areaState","decodeURIComponent","getInstance","HISTORY_STRATEGY","SchmancyArea","$LitElement","css","historyStrategy","path","routes","default","filter","x","isPresent","catchError","EMPTY","firstUpdated","Error","merge","switchMap","getComponentFromPathname","silent","route","take","target","takeUntil","disconnecting","distinctUntilChanged","a","b","aComponent","bComponent","replaceAll","toLowerCase","c","Promise","from","exports","document","createElement","HTMLElement","prev","curr","tagName","oldView","shadowRoot","children","oldViewExists","remove","classList","add","append","animate","opacity","duration","easing","fill","pushState","newPath","includes","set","subscribe","tag","oldPathname","oldAreaState","queryParams","clearQueryParams","queryParamClear","search","concat","params","urlParams","URLSearchParams","forEach","param","delete","toString","checkForTeleportationRequests","disconnectedCallback","super","html","__decorateClass","property","prototype","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"area.component-FgfXnOUF.js","sources":["../src/area/area.service.ts","../src/area/router.types.ts","../src/area/area.component.ts"],"sourcesContent":["import { ReplaySubject, Subject, bufferTime, fromEvent, map, of, tap, timeout, zip } from 'rxjs'\nimport { SchmancyTeleportation } from '../teleport'\nimport { ActiveRoute, 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\nclass AreaService {\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\tpublic enableHistoryMode = true\n\tprivate findingMortiesEvent = new CustomEvent<FINDING_MORTIES_EVENT['detail']>(FINDING_MORTIES)\n\n\tconstructor() {\n\t\tthis.$current.next(this.current)\n\t}\n\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\ttap(console.log),\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)\n\t}\n\n\tpush(r: RouteAction) {\n\t\tthis.request.next(r)\n\t}\n\n\tpop(name: string) {\n\t\tconst newState = JSON.parse(JSON.stringify(area.state))\n\t\tdelete newState[name]\n\t\tconsole.log(area.state, newState)\n\t\thistory.replaceState(null, '', encodeURIComponent(JSON.stringify(newState)))\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\tget state() {\n\t\tconst pathname = location.pathname.split('/').pop()\n\t\tlet areaState = {}\n\t\ttry {\n\t\t\tareaState = pathname ? JSON.parse(decodeURIComponent(pathname)) : {}\n\t\t} catch {\n\t\t\tareaState = {}\n\t\t}\n\t\treturn areaState\n\t}\n}\n\nexport const area = AreaService.getInstance()\nexport default area\n","export type RouteAction = {\n\tcomponent: CustomElementConstructor | string | Promise<NodeModule> | HTMLElement | Promise<NodeModule>\n\tarea: string\n\tstate?: object\n\thistoryStrategy?: THistoryStrategy\n\tclearQueryParams?: string[] | null\n}\n\nexport type ActiveRoute = {\n\tcomponent: string\n\tarea: string\n\tstate?: object\n}\n\nexport type THistoryStrategy = 'push' | 'replace' | 'pop' | 'silent'\n\nexport enum HISTORY_STRATEGY {\n\tpush = 'push',\n\treplace = 'replace',\n\tpop = 'pop',\n\tsilent = 'silent',\n}\n","import { $LitElement } from '@mixins/index'\nimport { TemplateResult, css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport {\n\tEMPTY,\n\tbufferTime,\n\tcatchError,\n\tdistinctUntilChanged,\n\tfilter,\n\tfrom,\n\tfromEvent,\n\tmap,\n\tmerge,\n\tof,\n\tswitchMap,\n\ttake,\n\ttakeUntil,\n\ttap,\n\ttimeout,\n} from 'rxjs'\nimport { isPresent } from 'ts-is-present'\nimport area from './area.service'\nimport { HISTORY_STRATEGY, RouteAction } from './router.types'\n\ntype TRouteArea = {\n\tcomponent: string\n\tstate: object | undefined\n}\n\n@customElement('schmancy-area')\nexport class SchmancyArea extends $LitElement(css`\n\t:host {\n\t\tposition: relative;\n\t\tdisplay: block;\n\t\tinset: 0;\n\t}\n`) {\n\t/**\n\t * The name of the router outlet\n\t * @attr\n\t * @type {string}\n\t * @public\n\t * @required\n\t */\n\t@property() name!: string\n\n\t@property() default!: string | Promise<NodeModule> | CustomElementConstructor | TemplateResult<1>\n\n\t/**\n\t *\n\t * @param pathname pathname from the browser location API\n\t * @param historyStrategy the history strategy to use for the route like PUSH, REPLACE, or SILENT\n\t * @returns rxjs pipes that will return the component to render and the history strategy to use\n\t */\n\tgetComponentFromPathname(pathname: string, historyStrategy: HISTORY_STRATEGY) {\n\t\treturn of(pathname).pipe(\n\t\t\tmap(path => path.split('/').pop() ?? ''),\n\t\t\tmap(path => decodeURIComponent(path)),\n\t\t\tmap(path => JSON.parse(path)),\n\t\t\tmap(routes => routes[this.name] as TRouteArea),\n\t\t\tmap(component =>\n\t\t\t\t!component && this.default\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tcomponent: this.default,\n\t\t\t\t\t\t\tstate: undefined,\n\t\t\t\t\t\t}\n\t\t\t\t\t: component,\n\t\t\t),\n\t\t\tfilter(x => isPresent(x)),\n\t\t\tmap((component: TRouteArea) => ({\n\t\t\t\tarea: this.name,\n\t\t\t\tcomponent: component.component ?? this.default,\n\t\t\t\tstate: component.state,\n\t\t\t\thistoryStrategy,\n\t\t\t})),\n\t\t\tmap(x => x as RouteAction),\n\t\t\tcatchError(() => {\n\t\t\t\treturn this.default\n\t\t\t\t\t? of({\n\t\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t\t\tcomponent: this.default,\n\t\t\t\t\t\t\thistoryStrategy,\n\t\t\t\t\t\t} as RouteAction)\n\t\t\t\t\t: EMPTY\n\t\t\t}),\n\t\t)\n\t}\n\n\tprotected firstUpdated(): void {\n\t\tif (!this.name) {\n\t\t\t// TOOD: maybe enforce this to be unique\n\t\t\tthrow new Error('Area name or default component not set')\n\t\t}\n\n\t\t// active outlet changes\n\t\tmerge(\n\t\t\t// 1) initial load from location.pathname\n\t\t\tof(location.pathname).pipe(\n\t\t\t\tswitchMap(pathname => this.getComponentFromPathname(pathname, HISTORY_STRATEGY.silent)),\n\t\t\t\tmap(route => route as RouteAction),\n\t\t\t\ttake(1),\n\t\t\t),\n\t\t\t// 2) requests to change the route for this area\n\t\t\tarea.request.pipe(filter(({ area }) => area === this.name)),\n\t\t\t// 3) popstate events (back, forward)\n\t\t\tfromEvent<PopStateEvent>(window, 'popstate').pipe(\n\t\t\t\tmap(e => (e.target as Window).location.pathname),\n\t\t\t\tswitchMap(pathname => this.getComponentFromPathname(pathname, HISTORY_STRATEGY.silent)),\n\t\t\t\tmap(route => route as RouteAction),\n\t\t\t),\n\t\t)\n\t\t\t.pipe(\n\t\t\t\tfilter(request => !!request.component),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\tdistinctUntilChanged((a, b) => {\n\t\t\t\t\tlet aComponent, bComponent\n\t\t\t\t\tif (typeof a.component === 'function') return false\n\t\t\t\t\telse if (typeof a.component === 'string') aComponent = a.component\n\n\t\t\t\t\tif (typeof b.component === 'function') return false\n\t\t\t\t\telse if (typeof b.component === 'string') bComponent = b.component\n\n\t\t\t\t\treturn bComponent?.replaceAll('-', '').toLowerCase() === aComponent?.replaceAll('-', '').toLowerCase()\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.pipe(\n\t\t\t\tswitchMap(route => {\n\t\t\t\t\tconst c = route.component\n\t\t\t\t\tif (c instanceof Promise) {\n\t\t\t\t\t\t// Dynamic import module\n\t\t\t\t\t\treturn from(c).pipe(map(x => ({ component: x.exports.default as CustomElementConstructor, route })))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Already a string, function, or element\n\t\t\t\t\t\treturn of({ component: c, route })\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tmap(({ component, route }) => {\n\t\t\t\t\tif (typeof component === 'string') {\n\t\t\t\t\t\t// Tag name\n\t\t\t\t\t\treturn { component: document.createElement(component), route }\n\t\t\t\t\t} else if (component instanceof HTMLElement) {\n\t\t\t\t\t\t// Already an element instance\n\t\t\t\t\t\treturn { component, route }\n\t\t\t\t\t} else if (typeof component === 'function') {\n\t\t\t\t\t\t// Custom element constructor\n\t\t\t\t\t\treturn { component: new component(), route }\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tdistinctUntilChanged((prev, curr) => prev.component.tagName === curr.component.tagName),\n\t\t\t\t// create the new view and add it to the DOM\n\t\t\t\tmap(({ component, route }) => {\n\t\t\t\t\tconst oldView = this.shadowRoot?.children[0]\n\t\t\t\t\tconst oldViewExists = !!oldView\n\n\t\t\t\t\t// Remove the old view (if any)\n\t\t\t\t\toldView.remove()\n\t\t\t\t\t// Native Web Animations API - fade in\n\t\t\t\t\t// \"ease: cubic-bezier(0.25, 0.8, 0.25, 1)\" was used in the old code\n\t\t\t\t\tcomponent.classList.add('opacity-0')\n\t\t\t\t\tthis.shadowRoot?.append(component)\n\t\t\t\t\tcomponent.animate([{ opacity: 0 }, { opacity: 1 }], {\n\t\t\t\t\t\tduration: oldViewExists ? 150 : 100,\n\t\t\t\t\t\teasing: 'cubic-bezier(0.25, 0.8, 0.25, 1)',\n\t\t\t\t\t\tfill: 'forwards',\n\t\t\t\t\t})\n\n\t\t\t\t\t// Insert the new view\n\n\t\t\t\t\treturn { component, route }\n\t\t\t\t}),\n\t\t\t\ttap(({ component, route }) => {\n\t\t\t\t\t// Handle history updates\n\t\t\t\t\tif (typeof route.historyStrategy === 'undefined' || route.historyStrategy === 'push') {\n\t\t\t\t\t\thistory.pushState(route.state, '', this.newPath(component.tagName, route))\n\t\t\t\t\t} else if (route.historyStrategy && ['replace', 'pop'].includes(route.historyStrategy)) {\n\t\t\t\t\t\thistory.replaceState(route.state, '', this.newPath(component.tagName, route))\n\t\t\t\t\t}\n\t\t\t\t\tarea.current.set(this.name, {\n\t\t\t\t\t\tcomponent: component.tagName,\n\t\t\t\t\t\tstate: route.state,\n\t\t\t\t\t\tarea: this.name,\n\t\t\t\t\t})\n\n\t\t\t\t\tarea.$current.next(area.current)\n\t\t\t\t}),\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\tnewPath(tag: string, route: RouteAction) {\n\t\tconst oldPathname = location.pathname.split('/').pop()\n\t\tlet oldAreaState = {}\n\t\ttry {\n\t\t\toldAreaState = oldPathname ? JSON.parse(decodeURIComponent(oldPathname)) : {}\n\t\t} catch {\n\t\t\toldAreaState = {}\n\t\t}\n\t\troute.state = route.state ?? {}\n\t\tconst queryParams = route.clearQueryParams ? this.queryParamClear(route.clearQueryParams) : document.location.search\n\n\t\treturn encodeURIComponent(\n\t\t\tJSON.stringify({\n\t\t\t\t...oldAreaState,\n\t\t\t\t[this.name]: { component: tag.toLowerCase(), state: route.state },\n\t\t\t}),\n\t\t).concat(`${queryParams}`)\n\t}\n\n\tqueryParamClear(params?: string[]) {\n\t\tif (!params) {\n\t\t\treturn ''\n\t\t}\n\t\t// get query params from url\n\t\tconst urlParams = new URLSearchParams(location.search)\n\t\t// remove query params\n\t\tparams.forEach(param => urlParams.delete(param))\n\t\t// update url\n\t\tif (urlParams.toString() === '') return ''\n\t\treturn `?${urlParams.toString()}`\n\t}\n\n\tcheckForTeleportationRequests() {\n\t\treturn fromEvent<CustomEvent>(window, 'FLIP_REQUEST').pipe(\n\t\t\tmap(e => e.detail),\n\t\t\tbufferTime(0),\n\t\t\ttap(() => {\n\t\t\t\tthis.dispatchEvent(new CustomEvent('FLIP_STARTED'))\n\t\t\t}),\n\t\t\ttakeUntil(this.disconnecting),\n\t\t\ttimeout(0),\n\t\t\tcatchError(() => of(null)),\n\t\t)\n\t}\n\n\tdisconnectedCallback(): void {\n\t\tsuper.disconnectedCallback()\n\t\tthis.disconnecting.next(true)\n\t}\n\n\trender() {\n\t\treturn html` <slot> </slot> `\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-area': SchmancyArea\n\t}\n}\n"],"names":["routerHistory","Subject","FINDING_MORTIES","HERE_RICKY","AreaService","constructor","this","prettyURL","mode","request","ReplaySubject","current","Map","$current","enableHistoryMode","findingMortiesEvent","CustomEvent","next","find","zip","fromEvent","window","pipe","map","e","detail","bufferTime","tap","console","log","of","dispatchEvent","component","timeout","r","name","newState","JSON","parse","stringify","area","state","history","replaceState","encodeURIComponent","instance","pathname","location","split","pop","areaState","decodeURIComponent","getInstance","HISTORY_STRATEGY","SchmancyArea","$LitElement","css","historyStrategy","path","routes","default","filter","x","isPresent","catchError","EMPTY","firstUpdated","Error","merge","switchMap","getComponentFromPathname","silent","route","take","target","takeUntil","disconnecting","distinctUntilChanged","a","b","aComponent","bComponent","replaceAll","toLowerCase","c","Promise","from","exports","document","createElement","HTMLElement","prev","curr","tagName","oldView","shadowRoot","children","oldViewExists","remove","classList","add","append","animate","opacity","duration","easing","fill","pushState","newPath","includes","set","subscribe","tag","oldPathname","oldAreaState","queryParams","clearQueryParams","queryParamClear","search","concat","params","urlParams","URLSearchParams","forEach","param","delete","toString","checkForTeleportationRequests","disconnectedCallback","super","html","__decorateClass","property","prototype","customElement"],"mappings":"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"}
package/dist/area.js CHANGED
@@ -1,4 +1,4 @@
1
- import { F as s, H as I, b as R, S, a as e, r as o } from "./area.component-xeDLv_CE.js";
1
+ import { F as s, H as I, b as R, S, a as e, r as o } from "./area.component-FgfXnOUF.js";
2
2
  export {
3
3
  s as FINDING_MORTIES,
4
4
  I as HERE_RICKY,
@@ -2,8 +2,8 @@ import { computePosition as Y, offset as D, flip as H, shift as M, size as P } f
2
2
  import { Subject as z, fromEvent as N, from as U } from "rxjs";
3
3
  import "lit/directives/class-map.js";
4
4
  import "lit/directives/style-map.js";
5
- import { $ as B } from "./litElement.mixin-DoKCdkhO.js";
6
- import "./tailwind.mixin-CHPxMV8E.js";
5
+ import { $ as B } from "./litElement.mixin-D9kneJpW.js";
6
+ import "./tailwind.mixin-BBKdEPAU.js";
7
7
  import { c as F } from "./ripple-BumgqsDT.js";
8
8
  import { S as R } from "./theme.interface-C5Kj6WjD.js";
9
9
  import { html as L } from "lit";
@@ -222,4 +222,4 @@ let c = class extends B(":host{display:block;border:unset!important;line-height:
222
222
  }
223
223
  };
224
224
  u([$({ type: Boolean })], c.prototype, "required", 2), u([$({ type: String })], c.prototype, "placeholder", 2), u([$({ type: String, reflect: !0 })], c.prototype, "value", 2), u([$({ type: String, reflect: !0 })], c.prototype, "label", 2), u([$({ type: String })], c.prototype, "maxHeight", 2), u([$({ type: Boolean })], c.prototype, "multi", 2), u([V("#options")], c.prototype, "optionsContainer", 2), u([V("#empty")], c.prototype, "empty", 2), u([V("schmancy-input")], c.prototype, "input", 2), u([W({ flatten: !0 })], c.prototype, "options", 2), u([G({ passive: !0 })], c.prototype, "handleOptionClick", 1), c = u([J("schmancy-autocomplete")], c);
225
- //# sourceMappingURL=autocomplete-Cz4oZQBB.js.map
225
+ //# sourceMappingURL=autocomplete-C36FPrMT.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"autocomplete-Cz4oZQBB.js","sources":["../node_modules/fastest-levenshtein/esm/mod.js","../src/autocomplete/autocomplete.ts"],"sourcesContent":["const peq = new Uint32Array(0x10000);\nconst myers_32 = (a, b) => {\n const n = a.length;\n const m = b.length;\n const lst = 1 << (n - 1);\n let pv = -1;\n let mv = 0;\n let sc = n;\n let i = n;\n while (i--) {\n peq[a.charCodeAt(i)] |= 1 << i;\n }\n for (i = 0; i < m; i++) {\n let eq = peq[b.charCodeAt(i)];\n const xv = eq | mv;\n eq |= ((eq & pv) + pv) ^ pv;\n mv |= ~(eq | pv);\n pv &= eq;\n if (mv & lst) {\n sc++;\n }\n if (pv & lst) {\n sc--;\n }\n mv = (mv << 1) | 1;\n pv = (pv << 1) | ~(xv | mv);\n mv &= xv;\n }\n i = n;\n while (i--) {\n peq[a.charCodeAt(i)] = 0;\n }\n return sc;\n};\nconst myers_x = (b, a) => {\n const n = a.length;\n const m = b.length;\n const mhc = [];\n const phc = [];\n const hsize = Math.ceil(n / 32);\n const vsize = Math.ceil(m / 32);\n for (let i = 0; i < hsize; i++) {\n phc[i] = -1;\n mhc[i] = 0;\n }\n let j = 0;\n for (; j < vsize - 1; j++) {\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n }\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m - start) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n let score = m;\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n score += (ph >>> (m - 1)) & 1;\n score -= (mh >>> (m - 1)) & 1;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n return score;\n};\nconst distance = (a, b) => {\n if (a.length < b.length) {\n const tmp = b;\n b = a;\n a = tmp;\n }\n if (b.length === 0) {\n return a.length;\n }\n if (a.length <= 32) {\n return myers_32(a, b);\n }\n return myers_x(a, b);\n};\nconst closest = (str, arr) => {\n let min_distance = Infinity;\n let min_index = 0;\n for (let i = 0; i < arr.length; i++) {\n const dist = distance(str, arr[i]);\n if (dist < min_distance) {\n min_distance = dist;\n min_index = i;\n }\n }\n return arr[min_index];\n};\nexport { closest, distance };\n","import {\n\tcomputePosition,\n\tflip,\n\toffset,\n\tshift,\n\tsize, // <-- NEW\n} from '@floating-ui/dom'\nimport { $LitElement } from '@mixins/index'\nimport { color } from '@schmancy/directives'\nimport SchmancyInput from '@schmancy/input/input'\nimport SchmancyOption from '@schmancy/option/option'\nimport { SchmancyTheme } from '@schmancy/theme/theme.interface'\nimport { distance } from 'fastest-levenshtein'\nimport { html } from 'lit'\nimport { customElement, eventOptions, property, query, queryAssignedElements } from 'lit/decorators.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { from, fromEvent, Subject } from 'rxjs'\nimport { distinctUntilChanged, filter, switchMap, takeUntil, tap } from 'rxjs/operators'\nimport style from './autocomplete.scss?inline'\n\nimport type { SchmancyInputInputEvent } from '@schmancy/input/input'\n\nexport type SchmancyAutocompleteChangeEvent = CustomEvent<{\n\tvalue: string | string[]\n}>\n\n@customElement('schmancy-autocomplete')\nexport default class SchmancyAutocomplete extends $LitElement(style) {\n\t@property({ type: Boolean }) required = false\n\t@property({ type: String }) placeholder = ''\n\t@property({ type: String, reflect: true }) value = ''\n\t@property({ type: String, reflect: true }) label = ''\n\n\t/**\n\t * ⚠️ If you still want an explicit fallback for maximum dropdown height,\n\t * you can keep this, but the `size()` middleware will already set a\n\t * dynamic max-height based on viewport space.\n\t */\n\t@property({ type: String }) maxHeight = '25vh'\n\n\t@property({ type: Boolean }) multi = false\n\n\t/** Direct reference to the <input> inside <schmancy-input>. */\n\tinputRef = createRef<HTMLInputElement>()\n\n\t@query('#options') private optionsContainer!: HTMLUListElement\n\t@query('#empty') private empty!: HTMLLIElement\n\t@query('schmancy-input') private input!: SchmancyInput\n\t@queryAssignedElements({ flatten: true }) private options!: SchmancyOption[]\n\n\tprivate readonly searchTerm$ = new Subject<string>()\n\n\t// iOS scroll-blocking logic\n\tprivate startY = 0\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// 1) Search filtering\n\t\tthis.searchTerm$\n\t\t\t.pipe(\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(term => {\n\t\t\t\t\tconst searchTerm = term.trim().toLowerCase()\n\n\t\t\t\t\t// Filter options using Levenshtein distance\n\t\t\t\t\tconst matches = this.options\n\t\t\t\t\t\t.map(option => {\n\t\t\t\t\t\t\tconst optionText = option.label.toLowerCase()\n\t\t\t\t\t\t\tconst levDistance = distance(searchTerm, optionText)\n\t\t\t\t\t\t\treturn { option, levDistance }\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.filter(({ option, levDistance }) => {\n\t\t\t\t\t\t\t// If very short searchTerm, be lenient\n\t\t\t\t\t\t\tif (searchTerm.length < 3) return true\n\t\t\t\t\t\t\t// Otherwise, filter by distance\n\t\t\t\t\t\t\treturn levDistance <= option.label.toLowerCase().length - searchTerm.length\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.sort((a, b) => a.levDistance - b.levDistance)\n\n\t\t\t\t\t// Show/hide\n\t\t\t\t\tthis.options.forEach(o => (o.hidden = true))\n\t\t\t\t\tfor (const { option } of matches) {\n\t\t\t\t\t\toption.hidden = false\n\t\t\t\t\t}\n\n\t\t\t\t\t// \"No results found\"\n\t\t\t\t\tthis.empty.hidden = matches.length > 0\n\n\t\t\t\t\tthis.requestUpdate()\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\t// Show dropdown on each new term\n\t\t\t\tthis.showOptions()\n\t\t\t})\n\n\t\t// 2) Focus out animation\n\t\tfromEvent<FocusEvent>(this, 'focusout')\n\t\t\t.pipe(\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\tfilter(e => (e.relatedTarget as SchmancyOption)?.tagName !== 'SCHMANCY-OPTION'),\n\t\t\t\tswitchMap(() => {\n\t\t\t\t\tconst animation = this.optionsContainer.animate([{ opacity: 1 }, { opacity: 0 }], {\n\t\t\t\t\t\tduration: 250,\n\t\t\t\t\t\teasing: 'cubic-bezier(0.5, 0.01, 0.25, 1)',\n\t\t\t\t\t})\n\n\t\t\t\t\treturn from(\n\t\t\t\t\t\tnew Promise<void>(resolve => {\n\t\t\t\t\t\t\tanimation.onfinish = () => {\n\t\t\t\t\t\t\t\tthis.optionsContainer.style.display = 'none'\n\t\t\t\t\t\t\t\tthis.optionsContainer.style.opacity = '1'\n\t\t\t\t\t\t\t\tresolve()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe({\n\t\t\t\tnext: () => {\n\t\t\t\t\t// Resync the input after closing\n\t\t\t\t\tif (this.multi) {\n\t\t\t\t\t\tconst selected = this.options.filter(o => o.selected).map(o => o.label)\n\t\t\t\t\t\tthis.input.value = selected.join(', ')\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.input.value = this.options.find(o => o.value === this.value)?.label ?? ''\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t})\n\t}\n\n\tfirstUpdated() {\n\t\tthis.updateInputValue()\n\t}\n\n\tprotected updated(changedProps: Map<string | number | symbol, unknown>) {\n\t\tsuper.updated(changedProps)\n\t\tif (changedProps.has('value')) {\n\t\t\tthis.syncSelectionFromValue()\n\t\t\tthis.updateInputValue()\n\t\t}\n\t}\n\n\tprivate handleSlotChange() {\n\t\t// If no visible options, show \"empty\"\n\t\tthis.empty.hidden = this.options.some(option => !option.hidden)\n\t\tthis.syncSelectionFromValue()\n\t\tthis.updateInputValue()\n\t}\n\n\tprivate syncSelectionFromValue() {\n\t\tif (this.multi) {\n\t\t\tconst values = this.value\n\t\t\t\t.split(',')\n\t\t\t\t.map(v => v.trim())\n\t\t\t\t.filter(Boolean)\n\t\t\tthis.options.forEach(o => {\n\t\t\t\to.selected = values.includes(o.value)\n\t\t\t})\n\t\t} else {\n\t\t\tthis.options.forEach(o => {\n\t\t\t\to.selected = o.value === this.value\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate updateInputValue() {\n\t\trequestAnimationFrame(() => {\n\t\t\tif (this.multi) {\n\t\t\t\tconst selected = this.options.filter(o => o.selected).map(o => o.label)\n\t\t\t\tthis.input.value = selected.join(', ')\n\t\t\t} else {\n\t\t\t\tconst found = this.options.find(o => o.value === this.value)?.label\n\t\t\t\tthis.input.value = found ?? ''\n\t\t\t}\n\t\t})\n\t}\n\n\t/**\n\t * MAIN: Show the dropdown, using Floating UI to size it\n\t * to the available space, and at least as wide as the input.\n\t */\n\tprivate async showOptions() {\n\t\tthis.optionsContainer.removeAttribute('hidden')\n\t\tthis.optionsContainer.style.display = 'block'\n\n\t\tconst { x, y } = await computePosition(this.input, this.optionsContainer, {\n\t\t\tplacement: 'bottom-start',\n\t\t\tmiddleware: [\n\t\t\t\toffset(5),\n\t\t\t\tflip(),\n\t\t\t\tshift({ padding: 5 }),\n\t\t\t\t// NEW: Let the floating element fill available space,\n\t\t\t\t// but be at least as wide as the input.\n\t\t\t\tsize({\n\t\t\t\t\tapply({ availableWidth, availableHeight, elements, rects }) {\n\t\t\t\t\t\t// At least match input width\n\t\t\t\t\t\tconst referenceWidth = rects.reference.width\n\t\t\t\t\t\telements.floating.style.minWidth = `${referenceWidth}px`\n\n\t\t\t\t\t\t// Cap to available viewport space\n\t\t\t\t\t\telements.floating.style.maxWidth = `${availableWidth}px`\n\t\t\t\t\t\telements.floating.style.maxHeight = `${availableHeight}px`\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t],\n\t\t})\n\n\t\tObject.assign(this.optionsContainer.style, {\n\t\t\tleft: `${x}px`,\n\t\t\ttop: `${y}px`,\n\t\t\tposition: 'absolute',\n\t\t\tzIndex: '9999',\n\t\t\toverflowY: 'auto',\n\t\t\t// The middleware is setting max-height, but if you want\n\t\t\t// a fallback you can still do:\n\t\t\t// maxHeight: this.maxHeight,\n\t\t})\n\t}\n\n\tprivate hideOptions() {\n\t\tthis.optionsContainer?.setAttribute('hidden', 'true')\n\t\tif (this.optionsContainer) {\n\t\t\tthis.optionsContainer.style.display = 'none'\n\t\t}\n\t}\n\n\tprivate handleInputChange(event: SchmancyInputInputEvent) {\n\t\tevent.preventDefault()\n\t\tevent.stopPropagation()\n\t\tconst term = event.detail.value\n\t\tthis.searchTerm$.next(term)\n\t}\n\n\t@eventOptions({ passive: true })\n\tprivate handleOptionClick(value: string) {\n\t\tif (this.multi) {\n\t\t\tconst option = this.options.find(o => o.value === value)\n\t\t\tif (option) option.selected = !option.selected\n\t\t\tconst selectedValues = this.options.filter(o => o.selected).map(o => o.value)\n\t\t\tthis.value = selectedValues.join(',')\n\t\t\tthis.updateInputValue()\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent<SchmancyAutocompleteChangeEvent['detail']>('change', {\n\t\t\t\t\tdetail: { value: selectedValues },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t} else {\n\t\t\tthis.hideOptions()\n\t\t\tthis.value = value\n\t\t\tthis.updateInputValue()\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent<SchmancyAutocompleteChangeEvent['detail']>('change', {\n\t\t\t\t\tdetail: { value },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t}\n\n\tpublic checkValidity() {\n\t\treturn this.multi ? this.options.some(o => o.selected) : Boolean(this.value)\n\t}\n\n\tpublic reportValidity() {\n\t\treturn this.inputRef.value?.reportValidity()\n\t}\n\n\tprivate handleTouchStart(event: TouchEvent) {\n\t\tthis.startY = event.touches?.[0]?.clientY ?? 0\n\t}\n\n\tprivate preventScroll(event: TouchEvent) {\n\t\tconst target = event.target as HTMLElement\n\t\tif (!this.optionsContainer.contains(target)) return\n\n\t\tconst scrollTop = this.optionsContainer.scrollTop\n\t\tconst scrollHeight = this.optionsContainer.scrollHeight\n\t\tconst offsetHeight = this.optionsContainer.offsetHeight\n\t\tconst contentHeight = scrollHeight - offsetHeight\n\n\t\tconst currentY = event.touches?.[0]?.clientY ?? 0\n\t\tif ((scrollTop <= 0 && currentY > this.startY) || (scrollTop >= contentHeight && currentY < this.startY)) {\n\t\t\tevent.preventDefault()\n\t\t}\n\t}\n\n\trender() {\n\t\tconst isOpen = !this.optionsContainer?.hasAttribute('hidden')\n\n\t\treturn html`\n\t\t\t<div class=\"relative\">\n\t\t\t\t<!-- The trigger slot (if any) overrides the default SchmancyInput -->\n\t\t\t\t<slot name=\"trigger\">\n\t\t\t\t\t<schmancy-input\n\t\t\t\t\t\t${ref(this.inputRef)}\n\t\t\t\t\t\tid=\"input\"\n\t\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t\t\t.label=${this.label}\n\t\t\t\t\t\t.placeholder=${this.placeholder}\n\t\t\t\t\t\t.required=${this.required}\n\t\t\t\t\t\ttype=\"search\"\n\t\t\t\t\t\tinputmode=\"text\"\n\t\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\t\tclickable\n\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\t\taria-controls=\"options\"\n\t\t\t\t\t\taria-expanded=${isOpen}\n\t\t\t\t\t\t@focus=${() => this.showOptions()}\n\t\t\t\t\t\t@input=${this.handleInputChange}\n\t\t\t\t\t>\n\t\t\t\t\t</schmancy-input>\n\t\t\t\t</slot>\n\n\t\t\t\t<ul\n\t\t\t\t\tid=\"options\"\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\tclass=\"absolute z-30 mt-1 w-full overflow-auto rounded-md shadow-sm\"\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\thidden\n\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t// Each <schmancy-option> dispatches CustomEvent('click', { detail: { value } })\n\t\t\t\t\t\tconst detailVal = (e as CustomEvent).detail?.value\n\t\t\t\t\t\tif (detailVal) this.handleOptionClick(detailVal)\n\t\t\t\t\t}}\n\t\t\t\t\t@touchstart=${this.handleTouchStart}\n\t\t\t\t\t@touchmove=${this.preventScroll}\n\t\t\t\t\t${color({ bgColor: SchmancyTheme.sys.color.surface.container })}\n\t\t\t\t>\n\t\t\t\t\t<!-- \"No results\" option -->\n\t\t\t\t\t<li id=\"empty\" tabindex=\"-1\">\n\t\t\t\t\t\t<schmancy-typography type=\"label\">No results found</schmancy-typography>\n\t\t\t\t\t</li>\n\n\t\t\t\t\t<!-- Slot for the <schmancy-option> elements -->\n\t\t\t\t\t<slot @slotchange=${this.handleSlotChange}> </slot>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-autocomplete': SchmancyAutocomplete\n\t}\n}\n"],"names":["peq","Uint32Array","distance","a","b","length","tmp","n","m","lst","pv","mv","sc","i","charCodeAt","eq","xv","mhc","phc","hsize","Math","ceil","vsize","j","start","vlen","min","k","pb","mb","xh","ph","mh","score","SchmancyAutocomplete","$LitElement","super","arguments","this","required","placeholder","value","label","maxHeight","multi","inputRef","createRef","searchTerm$","Subject","startY","connectedCallback","pipe","takeUntil","disconnecting","distinctUntilChanged","tap","term","searchTerm","trim","toLowerCase","matches","options","map","option","optionText","levDistance","filter","sort","forEach","o","hidden","empty","requestUpdate","subscribe","showOptions","fromEvent","e","relatedTarget","tagName","switchMap","animation","optionsContainer","animate","opacity","duration","easing","from","Promise","resolve","onfinish","style","display","next","selected","input","join","find","updateInputValue","changedProps","updated","has","syncSelectionFromValue","handleSlotChange","some","values","split","v","Boolean","includes","requestAnimationFrame","found","removeAttribute","x","y","computePosition","placement","middleware","offset","flip","shift","padding","size","apply","availableWidth","availableHeight","elements","rects","referenceWidth","reference","width","floating","minWidth","maxWidth","Object","assign","left","top","position","zIndex","overflowY","setAttribute","event","preventDefault","stopPropagation","detail","selectedValues","dispatchEvent","CustomEvent","bubbles","composed","hideOptions","reportValidity","touches","clientY","target","contains","scrollTop","contentHeight","scrollHeight","offsetHeight","currentY","render","isOpen","hasAttribute","html","ref","handleInputChange","detailVal","handleOptionClick","handleTouchStart","preventScroll","color","bgColor","SchmancyTheme","sys","surface","container","__decorateClass","property","type","prototype","String","reflect","query","queryAssignedElements","flatten","eventOptions","passive","customElement"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"autocomplete-C36FPrMT.js","sources":["../node_modules/fastest-levenshtein/esm/mod.js","../src/autocomplete/autocomplete.ts"],"sourcesContent":["const peq = new Uint32Array(0x10000);\nconst myers_32 = (a, b) => {\n const n = a.length;\n const m = b.length;\n const lst = 1 << (n - 1);\n let pv = -1;\n let mv = 0;\n let sc = n;\n let i = n;\n while (i--) {\n peq[a.charCodeAt(i)] |= 1 << i;\n }\n for (i = 0; i < m; i++) {\n let eq = peq[b.charCodeAt(i)];\n const xv = eq | mv;\n eq |= ((eq & pv) + pv) ^ pv;\n mv |= ~(eq | pv);\n pv &= eq;\n if (mv & lst) {\n sc++;\n }\n if (pv & lst) {\n sc--;\n }\n mv = (mv << 1) | 1;\n pv = (pv << 1) | ~(xv | mv);\n mv &= xv;\n }\n i = n;\n while (i--) {\n peq[a.charCodeAt(i)] = 0;\n }\n return sc;\n};\nconst myers_x = (b, a) => {\n const n = a.length;\n const m = b.length;\n const mhc = [];\n const phc = [];\n const hsize = Math.ceil(n / 32);\n const vsize = Math.ceil(m / 32);\n for (let i = 0; i < hsize; i++) {\n phc[i] = -1;\n mhc[i] = 0;\n }\n let j = 0;\n for (; j < vsize - 1; j++) {\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n }\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m - start) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n let score = m;\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n score += (ph >>> (m - 1)) & 1;\n score -= (mh >>> (m - 1)) & 1;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n return score;\n};\nconst distance = (a, b) => {\n if (a.length < b.length) {\n const tmp = b;\n b = a;\n a = tmp;\n }\n if (b.length === 0) {\n return a.length;\n }\n if (a.length <= 32) {\n return myers_32(a, b);\n }\n return myers_x(a, b);\n};\nconst closest = (str, arr) => {\n let min_distance = Infinity;\n let min_index = 0;\n for (let i = 0; i < arr.length; i++) {\n const dist = distance(str, arr[i]);\n if (dist < min_distance) {\n min_distance = dist;\n min_index = i;\n }\n }\n return arr[min_index];\n};\nexport { closest, distance };\n","import {\n\tcomputePosition,\n\tflip,\n\toffset,\n\tshift,\n\tsize, // <-- NEW\n} from '@floating-ui/dom'\nimport { $LitElement } from '@mixins/index'\nimport { color } from '@schmancy/directives'\nimport SchmancyInput from '@schmancy/input/input'\nimport SchmancyOption from '@schmancy/option/option'\nimport { SchmancyTheme } from '@schmancy/theme/theme.interface'\nimport { distance } from 'fastest-levenshtein'\nimport { html } from 'lit'\nimport { customElement, eventOptions, property, query, queryAssignedElements } from 'lit/decorators.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { from, fromEvent, Subject } from 'rxjs'\nimport { distinctUntilChanged, filter, switchMap, takeUntil, tap } from 'rxjs/operators'\nimport style from './autocomplete.scss?inline'\n\nimport type { SchmancyInputInputEvent } from '@schmancy/input/input'\n\nexport type SchmancyAutocompleteChangeEvent = CustomEvent<{\n\tvalue: string | string[]\n}>\n\n@customElement('schmancy-autocomplete')\nexport default class SchmancyAutocomplete extends $LitElement(style) {\n\t@property({ type: Boolean }) required = false\n\t@property({ type: String }) placeholder = ''\n\t@property({ type: String, reflect: true }) value = ''\n\t@property({ type: String, reflect: true }) label = ''\n\n\t/**\n\t * ⚠️ If you still want an explicit fallback for maximum dropdown height,\n\t * you can keep this, but the `size()` middleware will already set a\n\t * dynamic max-height based on viewport space.\n\t */\n\t@property({ type: String }) maxHeight = '25vh'\n\n\t@property({ type: Boolean }) multi = false\n\n\t/** Direct reference to the <input> inside <schmancy-input>. */\n\tinputRef = createRef<HTMLInputElement>()\n\n\t@query('#options') private optionsContainer!: HTMLUListElement\n\t@query('#empty') private empty!: HTMLLIElement\n\t@query('schmancy-input') private input!: SchmancyInput\n\t@queryAssignedElements({ flatten: true }) private options!: SchmancyOption[]\n\n\tprivate readonly searchTerm$ = new Subject<string>()\n\n\t// iOS scroll-blocking logic\n\tprivate startY = 0\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\n\t\t// 1) Search filtering\n\t\tthis.searchTerm$\n\t\t\t.pipe(\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\ttap(term => {\n\t\t\t\t\tconst searchTerm = term.trim().toLowerCase()\n\n\t\t\t\t\t// Filter options using Levenshtein distance\n\t\t\t\t\tconst matches = this.options\n\t\t\t\t\t\t.map(option => {\n\t\t\t\t\t\t\tconst optionText = option.label.toLowerCase()\n\t\t\t\t\t\t\tconst levDistance = distance(searchTerm, optionText)\n\t\t\t\t\t\t\treturn { option, levDistance }\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.filter(({ option, levDistance }) => {\n\t\t\t\t\t\t\t// If very short searchTerm, be lenient\n\t\t\t\t\t\t\tif (searchTerm.length < 3) return true\n\t\t\t\t\t\t\t// Otherwise, filter by distance\n\t\t\t\t\t\t\treturn levDistance <= option.label.toLowerCase().length - searchTerm.length\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.sort((a, b) => a.levDistance - b.levDistance)\n\n\t\t\t\t\t// Show/hide\n\t\t\t\t\tthis.options.forEach(o => (o.hidden = true))\n\t\t\t\t\tfor (const { option } of matches) {\n\t\t\t\t\t\toption.hidden = false\n\t\t\t\t\t}\n\n\t\t\t\t\t// \"No results found\"\n\t\t\t\t\tthis.empty.hidden = matches.length > 0\n\n\t\t\t\t\tthis.requestUpdate()\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\t// Show dropdown on each new term\n\t\t\t\tthis.showOptions()\n\t\t\t})\n\n\t\t// 2) Focus out animation\n\t\tfromEvent<FocusEvent>(this, 'focusout')\n\t\t\t.pipe(\n\t\t\t\ttakeUntil(this.disconnecting),\n\t\t\t\tfilter(e => (e.relatedTarget as SchmancyOption)?.tagName !== 'SCHMANCY-OPTION'),\n\t\t\t\tswitchMap(() => {\n\t\t\t\t\tconst animation = this.optionsContainer.animate([{ opacity: 1 }, { opacity: 0 }], {\n\t\t\t\t\t\tduration: 250,\n\t\t\t\t\t\teasing: 'cubic-bezier(0.5, 0.01, 0.25, 1)',\n\t\t\t\t\t})\n\n\t\t\t\t\treturn from(\n\t\t\t\t\t\tnew Promise<void>(resolve => {\n\t\t\t\t\t\t\tanimation.onfinish = () => {\n\t\t\t\t\t\t\t\tthis.optionsContainer.style.display = 'none'\n\t\t\t\t\t\t\t\tthis.optionsContainer.style.opacity = '1'\n\t\t\t\t\t\t\t\tresolve()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe({\n\t\t\t\tnext: () => {\n\t\t\t\t\t// Resync the input after closing\n\t\t\t\t\tif (this.multi) {\n\t\t\t\t\t\tconst selected = this.options.filter(o => o.selected).map(o => o.label)\n\t\t\t\t\t\tthis.input.value = selected.join(', ')\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.input.value = this.options.find(o => o.value === this.value)?.label ?? ''\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t})\n\t}\n\n\tfirstUpdated() {\n\t\tthis.updateInputValue()\n\t}\n\n\tprotected updated(changedProps: Map<string | number | symbol, unknown>) {\n\t\tsuper.updated(changedProps)\n\t\tif (changedProps.has('value')) {\n\t\t\tthis.syncSelectionFromValue()\n\t\t\tthis.updateInputValue()\n\t\t}\n\t}\n\n\tprivate handleSlotChange() {\n\t\t// If no visible options, show \"empty\"\n\t\tthis.empty.hidden = this.options.some(option => !option.hidden)\n\t\tthis.syncSelectionFromValue()\n\t\tthis.updateInputValue()\n\t}\n\n\tprivate syncSelectionFromValue() {\n\t\tif (this.multi) {\n\t\t\tconst values = this.value\n\t\t\t\t.split(',')\n\t\t\t\t.map(v => v.trim())\n\t\t\t\t.filter(Boolean)\n\t\t\tthis.options.forEach(o => {\n\t\t\t\to.selected = values.includes(o.value)\n\t\t\t})\n\t\t} else {\n\t\t\tthis.options.forEach(o => {\n\t\t\t\to.selected = o.value === this.value\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate updateInputValue() {\n\t\trequestAnimationFrame(() => {\n\t\t\tif (this.multi) {\n\t\t\t\tconst selected = this.options.filter(o => o.selected).map(o => o.label)\n\t\t\t\tthis.input.value = selected.join(', ')\n\t\t\t} else {\n\t\t\t\tconst found = this.options.find(o => o.value === this.value)?.label\n\t\t\t\tthis.input.value = found ?? ''\n\t\t\t}\n\t\t})\n\t}\n\n\t/**\n\t * MAIN: Show the dropdown, using Floating UI to size it\n\t * to the available space, and at least as wide as the input.\n\t */\n\tprivate async showOptions() {\n\t\tthis.optionsContainer.removeAttribute('hidden')\n\t\tthis.optionsContainer.style.display = 'block'\n\n\t\tconst { x, y } = await computePosition(this.input, this.optionsContainer, {\n\t\t\tplacement: 'bottom-start',\n\t\t\tmiddleware: [\n\t\t\t\toffset(5),\n\t\t\t\tflip(),\n\t\t\t\tshift({ padding: 5 }),\n\t\t\t\t// NEW: Let the floating element fill available space,\n\t\t\t\t// but be at least as wide as the input.\n\t\t\t\tsize({\n\t\t\t\t\tapply({ availableWidth, availableHeight, elements, rects }) {\n\t\t\t\t\t\t// At least match input width\n\t\t\t\t\t\tconst referenceWidth = rects.reference.width\n\t\t\t\t\t\telements.floating.style.minWidth = `${referenceWidth}px`\n\n\t\t\t\t\t\t// Cap to available viewport space\n\t\t\t\t\t\telements.floating.style.maxWidth = `${availableWidth}px`\n\t\t\t\t\t\telements.floating.style.maxHeight = `${availableHeight}px`\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t],\n\t\t})\n\n\t\tObject.assign(this.optionsContainer.style, {\n\t\t\tleft: `${x}px`,\n\t\t\ttop: `${y}px`,\n\t\t\tposition: 'absolute',\n\t\t\tzIndex: '9999',\n\t\t\toverflowY: 'auto',\n\t\t\t// The middleware is setting max-height, but if you want\n\t\t\t// a fallback you can still do:\n\t\t\t// maxHeight: this.maxHeight,\n\t\t})\n\t}\n\n\tprivate hideOptions() {\n\t\tthis.optionsContainer?.setAttribute('hidden', 'true')\n\t\tif (this.optionsContainer) {\n\t\t\tthis.optionsContainer.style.display = 'none'\n\t\t}\n\t}\n\n\tprivate handleInputChange(event: SchmancyInputInputEvent) {\n\t\tevent.preventDefault()\n\t\tevent.stopPropagation()\n\t\tconst term = event.detail.value\n\t\tthis.searchTerm$.next(term)\n\t}\n\n\t@eventOptions({ passive: true })\n\tprivate handleOptionClick(value: string) {\n\t\tif (this.multi) {\n\t\t\tconst option = this.options.find(o => o.value === value)\n\t\t\tif (option) option.selected = !option.selected\n\t\t\tconst selectedValues = this.options.filter(o => o.selected).map(o => o.value)\n\t\t\tthis.value = selectedValues.join(',')\n\t\t\tthis.updateInputValue()\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent<SchmancyAutocompleteChangeEvent['detail']>('change', {\n\t\t\t\t\tdetail: { value: selectedValues },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t} else {\n\t\t\tthis.hideOptions()\n\t\t\tthis.value = value\n\t\t\tthis.updateInputValue()\n\t\t\tthis.dispatchEvent(\n\t\t\t\tnew CustomEvent<SchmancyAutocompleteChangeEvent['detail']>('change', {\n\t\t\t\t\tdetail: { value },\n\t\t\t\t\tbubbles: true,\n\t\t\t\t\tcomposed: true,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t}\n\n\tpublic checkValidity() {\n\t\treturn this.multi ? this.options.some(o => o.selected) : Boolean(this.value)\n\t}\n\n\tpublic reportValidity() {\n\t\treturn this.inputRef.value?.reportValidity()\n\t}\n\n\tprivate handleTouchStart(event: TouchEvent) {\n\t\tthis.startY = event.touches?.[0]?.clientY ?? 0\n\t}\n\n\tprivate preventScroll(event: TouchEvent) {\n\t\tconst target = event.target as HTMLElement\n\t\tif (!this.optionsContainer.contains(target)) return\n\n\t\tconst scrollTop = this.optionsContainer.scrollTop\n\t\tconst scrollHeight = this.optionsContainer.scrollHeight\n\t\tconst offsetHeight = this.optionsContainer.offsetHeight\n\t\tconst contentHeight = scrollHeight - offsetHeight\n\n\t\tconst currentY = event.touches?.[0]?.clientY ?? 0\n\t\tif ((scrollTop <= 0 && currentY > this.startY) || (scrollTop >= contentHeight && currentY < this.startY)) {\n\t\t\tevent.preventDefault()\n\t\t}\n\t}\n\n\trender() {\n\t\tconst isOpen = !this.optionsContainer?.hasAttribute('hidden')\n\n\t\treturn html`\n\t\t\t<div class=\"relative\">\n\t\t\t\t<!-- The trigger slot (if any) overrides the default SchmancyInput -->\n\t\t\t\t<slot name=\"trigger\">\n\t\t\t\t\t<schmancy-input\n\t\t\t\t\t\t${ref(this.inputRef)}\n\t\t\t\t\t\tid=\"input\"\n\t\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t\t\t.label=${this.label}\n\t\t\t\t\t\t.placeholder=${this.placeholder}\n\t\t\t\t\t\t.required=${this.required}\n\t\t\t\t\t\ttype=\"search\"\n\t\t\t\t\t\tinputmode=\"text\"\n\t\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\t\tclickable\n\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\t\taria-controls=\"options\"\n\t\t\t\t\t\taria-expanded=${isOpen}\n\t\t\t\t\t\t@focus=${() => this.showOptions()}\n\t\t\t\t\t\t@input=${this.handleInputChange}\n\t\t\t\t\t>\n\t\t\t\t\t</schmancy-input>\n\t\t\t\t</slot>\n\n\t\t\t\t<ul\n\t\t\t\t\tid=\"options\"\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\tclass=\"absolute z-30 mt-1 w-full overflow-auto rounded-md shadow-sm\"\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\thidden\n\t\t\t\t\t@click=${(e: Event) => {\n\t\t\t\t\t\t// Each <schmancy-option> dispatches CustomEvent('click', { detail: { value } })\n\t\t\t\t\t\tconst detailVal = (e as CustomEvent).detail?.value\n\t\t\t\t\t\tif (detailVal) this.handleOptionClick(detailVal)\n\t\t\t\t\t}}\n\t\t\t\t\t@touchstart=${this.handleTouchStart}\n\t\t\t\t\t@touchmove=${this.preventScroll}\n\t\t\t\t\t${color({ bgColor: SchmancyTheme.sys.color.surface.container })}\n\t\t\t\t>\n\t\t\t\t\t<!-- \"No results\" option -->\n\t\t\t\t\t<li id=\"empty\" tabindex=\"-1\">\n\t\t\t\t\t\t<schmancy-typography type=\"label\">No results found</schmancy-typography>\n\t\t\t\t\t</li>\n\n\t\t\t\t\t<!-- Slot for the <schmancy-option> elements -->\n\t\t\t\t\t<slot @slotchange=${this.handleSlotChange}> </slot>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-autocomplete': SchmancyAutocomplete\n\t}\n}\n"],"names":["peq","Uint32Array","distance","a","b","length","tmp","n","m","lst","pv","mv","sc","i","charCodeAt","eq","xv","mhc","phc","hsize","Math","ceil","vsize","j","start","vlen","min","k","pb","mb","xh","ph","mh","score","SchmancyAutocomplete","$LitElement","super","arguments","this","required","placeholder","value","label","maxHeight","multi","inputRef","createRef","searchTerm$","Subject","startY","connectedCallback","pipe","takeUntil","disconnecting","distinctUntilChanged","tap","term","searchTerm","trim","toLowerCase","matches","options","map","option","optionText","levDistance","filter","sort","forEach","o","hidden","empty","requestUpdate","subscribe","showOptions","fromEvent","e","relatedTarget","tagName","switchMap","animation","optionsContainer","animate","opacity","duration","easing","from","Promise","resolve","onfinish","style","display","next","selected","input","join","find","updateInputValue","changedProps","updated","has","syncSelectionFromValue","handleSlotChange","some","values","split","v","Boolean","includes","requestAnimationFrame","found","removeAttribute","x","y","computePosition","placement","middleware","offset","flip","shift","padding","size","apply","availableWidth","availableHeight","elements","rects","referenceWidth","reference","width","floating","minWidth","maxWidth","Object","assign","left","top","position","zIndex","overflowY","setAttribute","event","preventDefault","stopPropagation","detail","selectedValues","dispatchEvent","CustomEvent","bubbles","composed","hideOptions","reportValidity","touches","clientY","target","contains","scrollTop","contentHeight","scrollHeight","offsetHeight","currentY","render","isOpen","hasAttribute","html","ref","handleInputChange","detailVal","handleOptionClick","handleTouchStart","preventScroll","color","bgColor","SchmancyTheme","sys","surface","container","__decorateClass","property","type","prototype","String","reflect","query","queryAssignedElements","flatten","eventOptions","passive","customElement"],"mappings":"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","x_google_ignoreList":[0]}