@sparkle-learning/core 0.0.27 → 0.0.30

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 (697) hide show
  1. package/dist/cjs/{PrivateRoute-cee9b061.js → PrivateRoute-043bb7d3.js} +6 -40
  2. package/dist/cjs/{active-router-3bd7b540.js → active-router-eedb3bfe.js} +1 -1
  3. package/dist/cjs/{animation-05337433.js → animation-6132e37f.js} +28 -4
  4. package/dist/cjs/app-globals-9869bf67.js +9 -0
  5. package/dist/cjs/{auth.store-aba3d22f.js → auth.store-ff3fda09.js} +1869 -357
  6. package/dist/cjs/compass-svg.cjs.entry.js +1 -1
  7. package/dist/cjs/context-consumer.cjs.entry.js +1 -1
  8. package/dist/cjs/course-select.cjs.entry.js +1 -1
  9. package/dist/cjs/{cubic-bezier-24e309bf.js → cubic-bezier-293f4663.js} +3 -0
  10. package/dist/cjs/dir-5af5259a.js +20 -0
  11. package/dist/cjs/{facilitator.service-e1e2f719.js → facilitator.service-faac5c0c.js} +1 -1
  12. package/dist/cjs/feed.service-66405969.js +124 -0
  13. package/dist/cjs/focus-visible-ad3828a7.js +63 -0
  14. package/dist/cjs/framework-delegate-2470a246.js +113 -0
  15. package/dist/cjs/{gesture-controller-e824cfb3.js → gesture-controller-07c31f70.js} +3 -0
  16. package/dist/cjs/{haptic-415dac5b.js → haptic-91e86eb7.js} +3 -0
  17. package/dist/cjs/{hardware-back-button-ca468aae.js → hardware-back-button-f7b5d99e.js} +3 -0
  18. package/dist/cjs/header-mobile-collapse_61.cjs.entry.js +18001 -0
  19. package/dist/cjs/{helpers-26770c32.js → helpers-7e28976c.js} +122 -3
  20. package/dist/cjs/{icons-a0fef92b.js → icons-b8a2231a.js} +1 -1
  21. package/dist/cjs/{index-427d03fb.js → index-185f9c5a.js} +3 -0
  22. package/dist/cjs/{index-6eff209d.js → index-43642662.js} +24 -3
  23. package/dist/cjs/{index-7bcd36a0.js → index-459a5fa9.js} +20 -4
  24. package/dist/cjs/index-8540d72e.js +42 -0
  25. package/dist/cjs/{index-58b3ee93.js → index-b12edb26.js} +34 -5
  26. package/dist/cjs/{index-fbf4d3bf.js → index-bae2a754.js} +303 -207
  27. package/dist/cjs/index.cjs.js +8 -7
  28. package/dist/cjs/index.es-ef3efdfb.js +10671 -0
  29. package/dist/cjs/{input-shims-213e83f8.js → input-shims-6c442c9f.js} +34 -10
  30. package/dist/cjs/ion-accordion-group.cjs.entry.js +197 -0
  31. package/dist/cjs/ion-accordion.cjs.entry.js +340 -0
  32. package/dist/cjs/ion-action-sheet_4.cjs.entry.js +2203 -0
  33. package/dist/cjs/ion-app.cjs.entry.js +23 -8
  34. package/dist/cjs/ion-back-button.cjs.entry.js +14 -9
  35. package/dist/cjs/ion-backdrop.cjs.entry.js +3 -3
  36. package/dist/cjs/ion-badge.cjs.entry.js +3 -3
  37. package/dist/cjs/ion-breadcrumb.cjs.entry.js +103 -0
  38. package/dist/cjs/ion-breadcrumbs.cjs.entry.js +135 -0
  39. package/dist/cjs/ion-buttons_3.cjs.entry.js +7 -6
  40. package/dist/cjs/ion-card-header.cjs.entry.js +3 -3
  41. package/dist/cjs/ion-card-subtitle.cjs.entry.js +3 -3
  42. package/dist/cjs/ion-card-title.cjs.entry.js +3 -3
  43. package/dist/cjs/ion-chip.cjs.entry.js +3 -3
  44. package/dist/cjs/ion-content_2.cjs.entry.js +144 -56
  45. package/dist/cjs/ion-datetime.cjs.entry.js +1902 -779
  46. package/dist/cjs/ion-fab-button.cjs.entry.js +5 -4
  47. package/dist/cjs/ion-fab-list.cjs.entry.js +2 -2
  48. package/dist/cjs/ion-fab.cjs.entry.js +2 -2
  49. package/dist/cjs/ion-footer.cjs.entry.js +79 -4
  50. package/dist/cjs/ion-img.cjs.entry.js +33 -7
  51. package/dist/cjs/ion-infinite-scroll-content.cjs.entry.js +3 -3
  52. package/dist/cjs/ion-infinite-scroll.cjs.entry.js +4 -2
  53. package/dist/cjs/ion-item-divider.cjs.entry.js +3 -3
  54. package/dist/cjs/ion-item-group.cjs.entry.js +2 -2
  55. package/dist/cjs/ion-item-option.cjs.entry.js +4 -4
  56. package/dist/cjs/ion-item-options.cjs.entry.js +3 -3
  57. package/dist/cjs/ion-item-sliding.cjs.entry.js +52 -8
  58. package/dist/cjs/ion-loading.cjs.entry.js +23 -11
  59. package/dist/cjs/ion-menu-button.cjs.entry.js +17 -11
  60. package/dist/cjs/ion-menu-toggle.cjs.entry.js +7 -7
  61. package/dist/cjs/ion-menu.cjs.entry.js +141 -29
  62. package/dist/cjs/ion-modal.cjs.entry.js +649 -75
  63. package/dist/cjs/ion-nav-link.cjs.entry.js +4 -1
  64. package/dist/cjs/ion-nav.cjs.entry.js +140 -137
  65. package/dist/cjs/ion-picker-column-internal_2.cjs.entry.js +700 -0
  66. package/dist/cjs/ion-picker-column.cjs.entry.js +5 -5
  67. package/dist/cjs/ion-picker.cjs.entry.js +18 -11
  68. package/dist/cjs/ion-progress-bar.cjs.entry.js +17 -13
  69. package/dist/cjs/ion-refresher-content.cjs.entry.js +7 -6
  70. package/dist/cjs/ion-refresher.cjs.entry.js +83 -84
  71. package/dist/cjs/ion-reorder-group.cjs.entry.js +9 -8
  72. package/dist/cjs/ion-reorder.cjs.entry.js +5 -4
  73. package/dist/cjs/ion-route-redirect.cjs.entry.js +1 -1
  74. package/dist/cjs/ion-route.cjs.entry.js +1 -1
  75. package/dist/cjs/ion-router-link.cjs.entry.js +3 -3
  76. package/dist/cjs/ion-router-outlet.cjs.entry.js +50 -12
  77. package/dist/cjs/ion-router.cjs.entry.js +378 -234
  78. package/dist/cjs/ion-searchbar.cjs.entry.js +50 -17
  79. package/dist/cjs/ion-segment-button.cjs.entry.js +12 -9
  80. package/dist/cjs/ion-segment.cjs.entry.js +89 -10
  81. package/dist/cjs/ion-select_2.cjs.entry.js +64 -30
  82. package/dist/cjs/ion-skeleton-text.cjs.entry.js +4 -4
  83. package/dist/cjs/ion-slide.cjs.entry.js +2 -2
  84. package/dist/cjs/ion-slides.cjs.entry.js +19 -32
  85. package/dist/cjs/ion-split-pane.cjs.entry.js +8 -3
  86. package/dist/cjs/ion-tab-bar.cjs.entry.js +25 -12
  87. package/dist/cjs/ion-tab-button.cjs.entry.js +2 -2
  88. package/dist/cjs/ion-tab.cjs.entry.js +3 -2
  89. package/dist/cjs/ion-tabs.cjs.entry.js +1 -1
  90. package/dist/cjs/ion-textarea.cjs.entry.js +9 -8
  91. package/dist/cjs/ion-thumbnail.cjs.entry.js +2 -2
  92. package/dist/cjs/ion-toast.cjs.entry.js +37 -27
  93. package/dist/cjs/ion-toggle.cjs.entry.js +15 -15
  94. package/dist/cjs/ion-virtual-scroll.cjs.entry.js +13 -3
  95. package/dist/cjs/{ionic-global-4930d319.js → ionic-global-878073d1.js} +103 -77
  96. package/dist/cjs/{ios.transition-6e1fd3d6.js → ios.transition-c3bfb096.js} +8 -5
  97. package/dist/cjs/{keyboard-1dcbde6c.js → keyboard-dfd76ac3.js} +3 -0
  98. package/dist/cjs/loader.cjs.js +5 -5
  99. package/dist/cjs/localstorage.service-6346a41d.js +40 -0
  100. package/dist/cjs/{md.transition-3652ad78.js → md.transition-7eb9a1a7.js} +7 -4
  101. package/dist/cjs/{menu-toggle-util-a8fb4c56.js → menu-toggle-util-cb549c2c.js} +4 -1
  102. package/dist/cjs/{overlays-08a817ea.js → overlays-0a748609.js} +188 -47
  103. package/dist/cjs/{purify-596fc2d6.js → purify-d0ad2883.js} +187 -74
  104. package/dist/cjs/sparkle-animation-player.cjs.entry.js +56 -50
  105. package/dist/cjs/sparkle-character-intro.cjs.entry.js +26 -0
  106. package/dist/cjs/sparkle-code.cjs.entry.js +2 -2
  107. package/dist/cjs/sparkle-compass-post.cjs.entry.js +1 -1
  108. package/dist/cjs/sparkle-compass.cjs.entry.js +1 -1
  109. package/dist/cjs/sparkle-core.cjs.js +7 -7
  110. package/dist/cjs/sparkle-emoji.cjs.entry.js +1 -1
  111. package/dist/cjs/sparkle-facilitator-notes-form.cjs.entry.js +7 -7
  112. package/dist/cjs/sparkle-feed-post.cjs.entry.js +1 -1
  113. package/dist/cjs/sparkle-feedback.cjs.entry.js +7 -7
  114. package/dist/cjs/sparkle-goal-form.cjs.entry.js +15 -14
  115. package/dist/cjs/sparkle-gww-comment-list.cjs.entry.js +1 -1
  116. package/dist/cjs/sparkle-gww-graph.cjs.entry.js +1 -1
  117. package/dist/cjs/sparkle-lower-content-nav.cjs.entry.js +1 -1
  118. package/dist/cjs/sparkle-menu-collapsible.cjs.entry.js +2 -2
  119. package/dist/cjs/sparkle-modal-image.cjs.entry.js +1 -1
  120. package/dist/cjs/sparkle-notfound-page.cjs.entry.js +1 -1
  121. package/dist/cjs/sparkle-overlay.cjs.entry.js +1 -1
  122. package/dist/cjs/sparkle-poll.cjs.entry.js +1 -1
  123. package/dist/cjs/sparkle-quiz-container.cjs.entry.js +1 -1
  124. package/dist/cjs/sparkle-quiz-feedback_5.cjs.entry.js +1 -1
  125. package/dist/cjs/sparkle-quiz.cjs.entry.js +2 -2
  126. package/dist/cjs/sparkle-select.cjs.entry.js +1 -1
  127. package/dist/cjs/sparkle-sidebar.cjs.entry.js +1 -1
  128. package/dist/cjs/sparkle-tab.cjs.entry.js +1 -1
  129. package/dist/cjs/sparkle-table-of-contents.cjs.entry.js +1 -1
  130. package/dist/cjs/sparkle-tabs.cjs.entry.js +1 -1
  131. package/dist/cjs/sparkle-youtube.cjs.entry.js +2 -2
  132. package/dist/cjs/{spinner-configs-559523fd.js → spinner-configs-6f6b7ef0.js} +36 -1
  133. package/dist/cjs/status-tap-8697433c.js +40 -0
  134. package/dist/cjs/stencil-async-content.cjs.entry.js +1 -1
  135. package/dist/cjs/stencil-route-title.cjs.entry.js +2 -2
  136. package/dist/cjs/stencil-router-prompt.cjs.entry.js +2 -2
  137. package/dist/cjs/{student.service-41c7c78d.js → student.service-744c3155.js} +1 -1
  138. package/dist/cjs/{swipe-back-c1951cbd.js → swipe-back-7e08b5e0.js} +32 -8
  139. package/dist/cjs/{swiper.bundle-cbea42d8.js → swiper.bundle-8c897c07.js} +4 -4
  140. package/dist/cjs/{tap-click-cd858b48.js → tap-click-1caf1780.js} +8 -1
  141. package/dist/cjs/{theme-98ccfc24.js → theme-4252ac15.js} +3 -0
  142. package/dist/cjs/util-d383acb8.js +2462 -0
  143. package/dist/collection/collection-manifest.json +9 -2
  144. package/dist/collection/components/layout/page/page.js +1 -0
  145. package/dist/collection/components/sparkle-animation-player/sparkle-animation-player.js +78 -66
  146. package/dist/collection/components/sparkle-character-intro/assets/characters/character-img.jpg +0 -0
  147. package/dist/collection/components/sparkle-character-intro/assets/characters/jen.png +0 -0
  148. package/dist/collection/components/sparkle-character-intro/assets/characters/kimberly.png +0 -0
  149. package/dist/collection/components/sparkle-character-intro/assets/characters/valeria.png +0 -0
  150. package/dist/collection/components/sparkle-character-intro/assets/characters/yuna.png +0 -0
  151. package/dist/collection/components/sparkle-character-intro/assets/characters/zynab.png +0 -0
  152. package/dist/collection/components/sparkle-character-intro/sparkle-character-intro.css +67 -0
  153. package/dist/collection/components/sparkle-character-intro/sparkle-character-intro.js +64 -0
  154. package/dist/collection/components/sparkle-course-root/sparkle-course-root.js +48 -43
  155. package/dist/collection/components/sparkle-youtube/sparkle-youtube.js +6 -2
  156. package/dist/collection/util.js +1 -0
  157. package/dist/esm/{PrivateRoute-9f0973bb.js → PrivateRoute-b9937c45.js} +3 -37
  158. package/dist/esm/{active-router-b3ae32c7.js → active-router-909088d6.js} +1 -1
  159. package/dist/esm/{animation-72fdacfb.js → animation-b306f6c2.js} +28 -4
  160. package/dist/esm/app-globals-5c736ae5.js +7 -0
  161. package/dist/esm/auth.store-3ed2389e.js +4061 -0
  162. package/dist/esm/compass-svg.entry.js +1 -1
  163. package/dist/esm/context-consumer.entry.js +1 -1
  164. package/dist/esm/course-select.entry.js +1 -1
  165. package/dist/esm/{cubic-bezier-ed243a9b.js → cubic-bezier-a7ad9c8e.js} +3 -0
  166. package/dist/esm/dir-03012648.js +18 -0
  167. package/dist/esm/{facilitator.service-cddb2feb.js → facilitator.service-ec0a9739.js} +1 -1
  168. package/dist/esm/feed.service-33b83cb7.js +119 -0
  169. package/dist/esm/focus-visible-40cda868.js +61 -0
  170. package/dist/esm/framework-delegate-3bc58c27.js +109 -0
  171. package/dist/esm/{gesture-controller-604336b7.js → gesture-controller-686622ba.js} +3 -0
  172. package/dist/esm/{haptic-67928174.js → haptic-99c9e346.js} +4 -1
  173. package/dist/esm/{hardware-back-button-508e48cf.js → hardware-back-button-b6ccf74a.js} +3 -0
  174. package/dist/esm/header-mobile-collapse_61.entry.js +17937 -0
  175. package/dist/esm/{helpers-e7f66b2b.js → helpers-39367fe1.js} +119 -4
  176. package/dist/esm/{icons-33e5804c.js → icons-5debfbaf.js} +1 -1
  177. package/dist/esm/{index-cc97b114.js → index-435af8e6.js} +3 -0
  178. package/dist/esm/{index-55fc9f5e.js → index-5568e3fa.js} +303 -208
  179. package/dist/esm/{index-dc09784f.js → index-9594837e.js} +20 -4
  180. package/dist/esm/{index-b2ad0f1a.js → index-a12c14bd.js} +25 -4
  181. package/dist/esm/{index-a94619f9.js → index-c26d8655.js} +34 -5
  182. package/dist/esm/index-dc61f152.js +22 -0
  183. package/dist/esm/index.es-97dd8174.js +10585 -0
  184. package/dist/esm/index.js +8 -7
  185. package/dist/esm/{input-shims-3a97fa86.js → input-shims-cc98ea92.js} +34 -10
  186. package/dist/esm/ion-accordion-group.entry.js +193 -0
  187. package/dist/esm/ion-accordion.entry.js +336 -0
  188. package/dist/esm/ion-action-sheet_4.entry.js +2196 -0
  189. package/dist/esm/ion-app.entry.js +23 -8
  190. package/dist/esm/ion-back-button.entry.js +14 -9
  191. package/dist/esm/ion-backdrop.entry.js +3 -3
  192. package/dist/esm/ion-badge.entry.js +3 -3
  193. package/dist/esm/ion-breadcrumb.entry.js +99 -0
  194. package/dist/esm/ion-breadcrumbs.entry.js +131 -0
  195. package/dist/esm/ion-buttons_3.entry.js +7 -6
  196. package/dist/esm/ion-card-header.entry.js +3 -3
  197. package/dist/esm/ion-card-subtitle.entry.js +3 -3
  198. package/dist/esm/ion-card-title.entry.js +3 -3
  199. package/dist/esm/ion-chip.entry.js +3 -3
  200. package/dist/esm/ion-content_2.entry.js +144 -56
  201. package/dist/esm/ion-datetime.entry.js +1902 -779
  202. package/dist/esm/ion-fab-button.entry.js +5 -4
  203. package/dist/esm/ion-fab-list.entry.js +2 -2
  204. package/dist/esm/ion-fab.entry.js +2 -2
  205. package/dist/esm/ion-footer.entry.js +79 -4
  206. package/dist/esm/ion-img.entry.js +33 -7
  207. package/dist/esm/ion-infinite-scroll-content.entry.js +3 -3
  208. package/dist/esm/ion-infinite-scroll.entry.js +4 -2
  209. package/dist/esm/ion-item-divider.entry.js +3 -3
  210. package/dist/esm/ion-item-group.entry.js +2 -2
  211. package/dist/esm/ion-item-option.entry.js +4 -4
  212. package/dist/esm/ion-item-options.entry.js +3 -3
  213. package/dist/esm/ion-item-sliding.entry.js +52 -8
  214. package/dist/esm/ion-loading.entry.js +23 -11
  215. package/dist/esm/ion-menu-button.entry.js +17 -11
  216. package/dist/esm/ion-menu-toggle.entry.js +7 -7
  217. package/dist/esm/ion-menu.entry.js +141 -29
  218. package/dist/esm/ion-modal.entry.js +649 -75
  219. package/dist/esm/ion-nav-link.entry.js +4 -1
  220. package/dist/esm/ion-nav.entry.js +140 -137
  221. package/dist/esm/ion-picker-column-internal_2.entry.js +695 -0
  222. package/dist/esm/ion-picker-column.entry.js +5 -5
  223. package/dist/esm/ion-picker.entry.js +18 -11
  224. package/dist/esm/ion-progress-bar.entry.js +17 -13
  225. package/dist/esm/ion-refresher-content.entry.js +7 -6
  226. package/dist/esm/ion-refresher.entry.js +82 -83
  227. package/dist/esm/ion-reorder-group.entry.js +9 -8
  228. package/dist/esm/ion-reorder.entry.js +5 -4
  229. package/dist/esm/ion-route-redirect.entry.js +1 -1
  230. package/dist/esm/ion-route.entry.js +1 -1
  231. package/dist/esm/ion-router-link.entry.js +3 -3
  232. package/dist/esm/ion-router-outlet.entry.js +50 -12
  233. package/dist/esm/ion-router.entry.js +378 -234
  234. package/dist/esm/ion-searchbar.entry.js +50 -17
  235. package/dist/esm/ion-segment-button.entry.js +12 -9
  236. package/dist/esm/ion-segment.entry.js +89 -10
  237. package/dist/esm/ion-select_2.entry.js +64 -30
  238. package/dist/esm/ion-skeleton-text.entry.js +4 -4
  239. package/dist/esm/ion-slide.entry.js +2 -2
  240. package/dist/esm/ion-slides.entry.js +19 -32
  241. package/dist/esm/ion-split-pane.entry.js +8 -3
  242. package/dist/esm/ion-tab-bar.entry.js +25 -12
  243. package/dist/esm/ion-tab-button.entry.js +2 -2
  244. package/dist/esm/ion-tab.entry.js +3 -2
  245. package/dist/esm/ion-tabs.entry.js +1 -1
  246. package/dist/esm/ion-textarea.entry.js +9 -8
  247. package/dist/esm/ion-thumbnail.entry.js +2 -2
  248. package/dist/esm/ion-toast.entry.js +37 -27
  249. package/dist/esm/ion-toggle.entry.js +15 -15
  250. package/dist/esm/ion-virtual-scroll.entry.js +13 -3
  251. package/dist/esm/{ionic-global-1f9287cc.js → ionic-global-0939c477.js} +103 -77
  252. package/dist/esm/{ios.transition-d01abefd.js → ios.transition-b4ca8a33.js} +8 -5
  253. package/dist/esm/{keyboard-06906eac.js → keyboard-2503e874.js} +3 -0
  254. package/dist/esm/loader.js +5 -5
  255. package/dist/esm/localstorage.service-4bf408c8.js +36 -0
  256. package/dist/esm/{md.transition-245ffa55.js → md.transition-ca5e0322.js} +7 -4
  257. package/dist/esm/{menu-toggle-util-fe83fcf5.js → menu-toggle-util-7fa22c2f.js} +4 -1
  258. package/dist/esm/{overlays-8363621c.js → overlays-34cfa9e0.js} +187 -47
  259. package/dist/esm/polyfills/css-shim.js +1 -1
  260. package/dist/esm/polyfills/index.js +2 -2
  261. package/dist/esm/{purify-4247e2d0.js → purify-ffce2b4c.js} +185 -72
  262. package/dist/esm/sparkle-animation-player.entry.js +56 -50
  263. package/dist/esm/sparkle-character-intro.entry.js +22 -0
  264. package/dist/esm/sparkle-code.entry.js +2 -2
  265. package/dist/esm/sparkle-compass-post.entry.js +1 -1
  266. package/dist/esm/sparkle-compass.entry.js +1 -1
  267. package/dist/esm/sparkle-core.js +7 -7
  268. package/dist/esm/sparkle-emoji.entry.js +1 -1
  269. package/dist/esm/sparkle-facilitator-notes-form.entry.js +7 -7
  270. package/dist/esm/sparkle-feed-post.entry.js +1 -1
  271. package/dist/esm/sparkle-feedback.entry.js +7 -7
  272. package/dist/esm/sparkle-goal-form.entry.js +8 -7
  273. package/dist/esm/sparkle-gww-comment-list.entry.js +1 -1
  274. package/dist/esm/sparkle-gww-graph.entry.js +1 -1
  275. package/dist/esm/sparkle-lower-content-nav.entry.js +1 -1
  276. package/dist/esm/sparkle-menu-collapsible.entry.js +2 -2
  277. package/dist/esm/sparkle-modal-image.entry.js +1 -1
  278. package/dist/esm/sparkle-notfound-page.entry.js +1 -1
  279. package/dist/esm/sparkle-overlay.entry.js +1 -1
  280. package/dist/esm/sparkle-poll.entry.js +1 -1
  281. package/dist/esm/sparkle-quiz-container.entry.js +1 -1
  282. package/dist/esm/sparkle-quiz-feedback_5.entry.js +1 -1
  283. package/dist/esm/sparkle-quiz.entry.js +2 -2
  284. package/dist/esm/sparkle-select.entry.js +1 -1
  285. package/dist/esm/sparkle-sidebar.entry.js +1 -1
  286. package/dist/esm/sparkle-tab.entry.js +1 -1
  287. package/dist/esm/sparkle-table-of-contents.entry.js +1 -1
  288. package/dist/esm/sparkle-tabs.entry.js +1 -1
  289. package/dist/esm/sparkle-youtube.entry.js +2 -2
  290. package/dist/esm/{spinner-configs-9536fae2.js → spinner-configs-f609a655.js} +36 -1
  291. package/dist/esm/status-tap-6351a0cb.js +38 -0
  292. package/dist/esm/stencil-async-content.entry.js +1 -1
  293. package/dist/esm/stencil-route-title.entry.js +2 -2
  294. package/dist/esm/stencil-router-prompt.entry.js +2 -2
  295. package/dist/esm/{student.service-c36c5a75.js → student.service-29b688ba.js} +1 -1
  296. package/dist/esm/{swipe-back-21f58ecf.js → swipe-back-34251834.js} +32 -8
  297. package/dist/esm/{swiper.bundle-d4422d52.js → swiper.bundle-b6a959de.js} +4 -4
  298. package/dist/esm/{tap-click-8c728329.js → tap-click-13f1fb0d.js} +8 -1
  299. package/dist/esm/{theme-12606872.js → theme-c336c9d9.js} +3 -0
  300. package/dist/esm/util-6ef753e9.js +2451 -0
  301. package/dist/loader/index.d.ts +0 -1
  302. package/dist/node_modules/@ionic/core/dist/collection/components/accordion/accordion.ios.css +75 -0
  303. package/dist/node_modules/@ionic/core/dist/collection/components/accordion/accordion.md.css +72 -0
  304. package/dist/node_modules/@ionic/core/dist/collection/components/accordion-group/accordion-group.ios.css +25 -0
  305. package/dist/node_modules/@ionic/core/dist/collection/components/accordion-group/accordion-group.md.css +59 -0
  306. package/dist/node_modules/@ionic/core/dist/collection/components/action-sheet/action-sheet.ios.css +10 -19
  307. package/dist/node_modules/@ionic/core/dist/collection/components/action-sheet/action-sheet.md.css +19 -16
  308. package/dist/node_modules/@ionic/core/dist/collection/components/alert/alert.md.css +2 -2
  309. package/dist/node_modules/@ionic/core/dist/collection/components/back-button/back-button.ios.css +4 -0
  310. package/dist/node_modules/@ionic/core/dist/collection/components/back-button/back-button.md.css +4 -0
  311. package/dist/node_modules/@ionic/core/dist/collection/components/breadcrumb/breadcrumb.ios.css +234 -0
  312. package/dist/node_modules/@ionic/core/dist/collection/components/breadcrumb/breadcrumb.md.css +237 -0
  313. package/dist/node_modules/@ionic/core/dist/collection/components/breadcrumbs/breadcrumbs.ios.css +38 -0
  314. package/dist/node_modules/@ionic/core/dist/collection/components/breadcrumbs/breadcrumbs.md.css +37 -0
  315. package/dist/node_modules/@ionic/core/dist/collection/components/button/button.ios.css +0 -1
  316. package/dist/node_modules/@ionic/core/dist/collection/components/button/button.md.css +5 -5
  317. package/dist/node_modules/@ionic/core/dist/collection/components/content/content.css +60 -14
  318. package/dist/node_modules/@ionic/core/dist/collection/components/datetime/datetime.ios.css +586 -68
  319. package/dist/node_modules/@ionic/core/dist/collection/components/datetime/datetime.md.css +575 -68
  320. package/dist/node_modules/@ionic/core/dist/collection/components/footer/footer.ios.css +4 -0
  321. package/dist/node_modules/@ionic/core/dist/collection/components/header/header.ios.css +16 -0
  322. package/dist/node_modules/@ionic/core/dist/collection/components/input/input.ios.css +9 -0
  323. package/dist/node_modules/@ionic/core/dist/collection/components/input/input.md.css +9 -0
  324. package/dist/node_modules/@ionic/core/dist/collection/components/item/item.ios.css +105 -17
  325. package/dist/node_modules/@ionic/core/dist/collection/components/item/item.md.css +295 -22
  326. package/dist/node_modules/@ionic/core/dist/collection/components/item-options/item-options.ios.css +6 -6
  327. package/dist/node_modules/@ionic/core/dist/collection/components/item-options/item-options.md.css +6 -6
  328. package/dist/node_modules/@ionic/core/dist/collection/components/item-sliding/item-sliding.css +2 -2
  329. package/dist/node_modules/@ionic/core/dist/collection/components/label/label.ios.css +7 -3
  330. package/dist/node_modules/@ionic/core/dist/collection/components/label/label.md.css +100 -18
  331. package/dist/node_modules/@ionic/core/dist/collection/components/list/list.ios.css +1 -1
  332. package/dist/node_modules/@ionic/core/dist/collection/components/menu/menu.ios.css +2 -2
  333. package/dist/node_modules/@ionic/core/dist/collection/components/menu/menu.md.css +2 -2
  334. package/dist/node_modules/@ionic/core/dist/collection/components/modal/modal.ios.css +74 -11
  335. package/dist/node_modules/@ionic/core/dist/collection/components/modal/modal.md.css +48 -4
  336. package/dist/node_modules/@ionic/core/dist/collection/components/picker-column-internal/picker-column-internal.ios.css +59 -0
  337. package/dist/node_modules/@ionic/core/dist/collection/components/picker-column-internal/picker-column-internal.md.css +62 -0
  338. package/dist/node_modules/@ionic/core/dist/collection/components/picker-internal/picker-internal.ios.css +122 -0
  339. package/dist/node_modules/@ionic/core/dist/collection/components/picker-internal/picker-internal.md.css +118 -0
  340. package/dist/node_modules/@ionic/core/dist/collection/components/popover/popover.ios.css +83 -0
  341. package/dist/node_modules/@ionic/core/dist/collection/components/popover/popover.md.css +49 -0
  342. package/dist/node_modules/@ionic/core/dist/collection/components/progress-bar/progress-bar.ios.css +53 -38
  343. package/dist/node_modules/@ionic/core/dist/collection/components/progress-bar/progress-bar.md.css +53 -38
  344. package/dist/node_modules/@ionic/core/dist/collection/components/range/range.ios.css +3 -3
  345. package/dist/node_modules/@ionic/core/dist/collection/components/range/range.md.css +5 -5
  346. package/dist/node_modules/@ionic/core/dist/collection/components/refresher/refresher.ios.css +12 -0
  347. package/dist/node_modules/@ionic/core/dist/collection/components/refresher/refresher.md.css +2 -2
  348. package/dist/node_modules/@ionic/core/dist/collection/components/searchbar/searchbar.ios.css +1 -1
  349. package/dist/node_modules/@ionic/core/dist/collection/components/searchbar/searchbar.md.css +1 -1
  350. package/dist/node_modules/@ionic/core/dist/collection/components/segment-button/segment-button.ios.css +4 -0
  351. package/dist/node_modules/@ionic/core/dist/collection/components/segment-button/segment-button.md.css +4 -0
  352. package/dist/node_modules/@ionic/core/dist/collection/components/select/select.ios.css +1 -1
  353. package/dist/node_modules/@ionic/core/dist/collection/components/select/select.md.css +30 -2
  354. package/dist/node_modules/@ionic/core/dist/collection/components/select-popover/{select-popover.css → select-popover.ios.css} +4 -4
  355. package/dist/node_modules/@ionic/core/dist/collection/components/select-popover/select-popover.md.css +37 -0
  356. package/dist/node_modules/@ionic/core/dist/collection/components/skeleton-text/skeleton-text.css +4 -4
  357. package/dist/node_modules/@ionic/core/dist/collection/components/spinner/spinner.css +15 -2
  358. package/dist/node_modules/@ionic/core/dist/collection/components/tab-bar/tab-bar.ios.css +2 -1
  359. package/dist/node_modules/@ionic/core/dist/collection/components/tab-bar/tab-bar.md.css +1 -0
  360. package/dist/node_modules/@ionic/core/dist/collection/components/textarea/textarea.ios.css +9 -0
  361. package/dist/node_modules/@ionic/core/dist/collection/components/textarea/textarea.md.css +9 -0
  362. package/dist/node_modules/@ionic/core/dist/collection/components/title/title.ios.css +4 -3
  363. package/dist/node_modules/@ionic/core/dist/collection/components/toast/toast.ios.css +14 -2
  364. package/dist/node_modules/@ionic/core/dist/collection/components/toast/toast.md.css +14 -2
  365. package/dist/node_modules/@ionic/core/dist/collection/components/toggle/toggle.ios.css +1 -0
  366. package/dist/node_modules/@ionic/core/dist/collection/components/toggle/toggle.md.css +1 -0
  367. package/dist/node_modules/@ionic/core/dist/collection/components/toolbar/toolbar.ios.css +3 -2
  368. package/dist/node_modules/@ionic/core/dist/collection/components/toolbar/toolbar.md.css +2 -1
  369. package/dist/node_modules/@ionic/core/dist/collection/components/virtual-scroll/virtual-scroll.css +1 -1
  370. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/button/button.css +49 -0
  371. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/cards/card/card.css +208 -0
  372. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/cards/cards.css +31 -0
  373. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/code/code.css +245 -0
  374. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/dropdown/dropdown.css +115 -0
  375. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/header/header-mobile-collapse/header-mobile-collapse.css +255 -0
  376. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/header/header.css +232 -0
  377. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/menu/collapsible/collapsible.css +3 -0
  378. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/menu/menu-toggle/menu-toggle.css +25 -0
  379. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/menu/menu.css +71 -0
  380. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/nav/nav.css +194 -0
  381. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/notfound-page/notfound-page.css +4 -0
  382. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/overlay/overlay.css +67 -0
  383. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/page-footer/page-footer.css +18 -0
  384. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/pagination/pagination.css +89 -0
  385. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/select/select.css +52 -0
  386. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/sidebar/sidebar.css +98 -0
  387. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/sparkle-lower-content-nav/sparkle-lower-content-nav.css +8 -0
  388. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/table-of-contents/table-of-contents.css +37 -0
  389. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/tabs/tabs.css +64 -0
  390. package/dist/sparkle-core/assets/characters/character-img.jpg +0 -0
  391. package/dist/sparkle-core/assets/characters/jen.png +0 -0
  392. package/dist/sparkle-core/assets/characters/kimberly.png +0 -0
  393. package/dist/sparkle-core/assets/characters/valeria.png +0 -0
  394. package/dist/sparkle-core/assets/characters/yuna.png +0 -0
  395. package/dist/sparkle-core/assets/characters/zynab.png +0 -0
  396. package/dist/sparkle-core/index.esm.js +1 -1
  397. package/dist/sparkle-core/p-0146afa0.entry.js +1 -0
  398. package/dist/sparkle-core/{p-52355989.entry.js → p-016a7aaf.entry.js} +1 -1
  399. package/dist/sparkle-core/p-0187adef.entry.js +1 -0
  400. package/dist/sparkle-core/p-03189863.js +1 -0
  401. package/dist/sparkle-core/{p-d4d9aa4a.entry.js → p-03ec54a8.entry.js} +1 -1
  402. package/dist/sparkle-core/p-04583c51.entry.js +1 -0
  403. package/dist/sparkle-core/{p-6d506f4e.js → p-052caa63.js} +1 -1
  404. package/dist/sparkle-core/{p-016bf847.entry.js → p-057f6a23.entry.js} +1 -1
  405. package/dist/sparkle-core/p-0580419b.entry.js +1 -0
  406. package/dist/sparkle-core/{p-c563b4de.js → p-063cd168.js} +4 -1
  407. package/dist/sparkle-core/p-081968cc.entry.js +1 -0
  408. package/dist/sparkle-core/p-0934f5dd.entry.js +1 -0
  409. package/dist/sparkle-core/{p-3f5d7a08.entry.js → p-11cf398a.entry.js} +1 -1
  410. package/dist/sparkle-core/p-1339830f.entry.js +1 -0
  411. package/dist/sparkle-core/p-145e40f5.entry.js +1 -0
  412. package/dist/sparkle-core/{p-68f3c93d.entry.js → p-1726da2f.entry.js} +1 -1
  413. package/dist/sparkle-core/p-173d5461.entry.js +7 -0
  414. package/dist/sparkle-core/p-18e62133.entry.js +1 -0
  415. package/dist/sparkle-core/p-1af044f7.js +3 -0
  416. package/dist/sparkle-core/p-1b78dea1.entry.js +1 -0
  417. package/dist/sparkle-core/p-1cef8572.js +4 -0
  418. package/dist/sparkle-core/p-1df05176.js +4 -0
  419. package/dist/sparkle-core/p-21bf4ca0.entry.js +1 -0
  420. package/dist/sparkle-core/p-21db4e8e.entry.js +1 -0
  421. package/dist/sparkle-core/p-23a9f7d1.entry.js +1 -0
  422. package/dist/sparkle-core/p-289a35ed.entry.js +1 -0
  423. package/dist/sparkle-core/p-2ee6a5f9.entry.js +1 -0
  424. package/dist/sparkle-core/p-350adbaa.entry.js +1 -0
  425. package/dist/sparkle-core/{p-bccd9036.entry.js → p-35a7bd6c.entry.js} +1 -1
  426. package/dist/sparkle-core/{p-66e3bd1c.entry.js → p-37c00e39.entry.js} +1 -1
  427. package/dist/sparkle-core/p-389500fd.js +4 -0
  428. package/dist/sparkle-core/p-39e5a90f.entry.js +1 -0
  429. package/dist/sparkle-core/{p-ac5e5308.entry.js → p-3a202a38.entry.js} +1 -1
  430. package/dist/sparkle-core/p-3defe550.entry.js +1 -0
  431. package/dist/sparkle-core/p-45e6db62.entry.js +1 -0
  432. package/dist/sparkle-core/{p-581ca370.entry.js → p-48f9b960.entry.js} +1 -1
  433. package/dist/sparkle-core/{p-0efbc0b3.entry.js → p-4dc3ef96.entry.js} +1 -1
  434. package/dist/sparkle-core/p-506221fe.js +4 -0
  435. package/dist/sparkle-core/p-50aac721.entry.js +7 -0
  436. package/dist/sparkle-core/p-513794b0.js +16 -0
  437. package/dist/sparkle-core/{p-2e4e8117.js → p-5264da79.js} +3 -0
  438. package/dist/sparkle-core/{p-40db85ac.entry.js → p-547b70c6.entry.js} +1 -1
  439. package/dist/sparkle-core/p-5598650a.entry.js +1 -0
  440. package/dist/sparkle-core/p-55ae49e1.js +4 -0
  441. package/dist/sparkle-core/p-58e98f89.entry.js +1 -0
  442. package/dist/sparkle-core/p-59f7bf6e.entry.js +1 -0
  443. package/dist/sparkle-core/p-5a3d0e6b.js +4 -0
  444. package/dist/sparkle-core/{p-85d31769.entry.js → p-5b40aae5.entry.js} +1 -1
  445. package/dist/sparkle-core/p-5c9aa1f9.entry.js +4 -0
  446. package/dist/sparkle-core/p-5d2e54ee.entry.js +1 -0
  447. package/dist/sparkle-core/p-5d409601.js +1 -0
  448. package/dist/sparkle-core/{p-afbaad64.entry.js → p-5f45d206.entry.js} +1 -1
  449. package/dist/sparkle-core/p-5ff6416d.entry.js +7 -0
  450. package/dist/sparkle-core/{p-cf2332bb.entry.js → p-62a6c96f.entry.js} +1 -1
  451. package/dist/sparkle-core/p-64e72f8f.js +4 -0
  452. package/dist/sparkle-core/p-660e0742.js +1 -0
  453. package/dist/sparkle-core/{p-d5023db0.entry.js → p-667accac.entry.js} +1 -1
  454. package/dist/sparkle-core/{p-9ca56f5d.entry.js → p-680663a2.entry.js} +1 -1
  455. package/dist/sparkle-core/{p-e975924a.entry.js → p-6823e6c1.entry.js} +1 -1
  456. package/dist/sparkle-core/p-69e7783d.js +4 -0
  457. package/dist/sparkle-core/p-6bbabb80.entry.js +1 -0
  458. package/dist/sparkle-core/p-6bf07a28.js +1 -0
  459. package/dist/sparkle-core/p-6c6145cd.js +4 -0
  460. package/dist/sparkle-core/p-6c90bde6.entry.js +5 -0
  461. package/dist/sparkle-core/p-6e88764b.entry.js +4 -0
  462. package/dist/sparkle-core/p-6ee40949.js +1 -0
  463. package/dist/sparkle-core/p-6fbe3ca3.entry.js +1 -0
  464. package/dist/sparkle-core/{p-f2660943.js → p-6fd4985d.js} +3 -0
  465. package/dist/sparkle-core/{p-8fc9298a.js → p-703ca87c.js} +3 -0
  466. package/dist/sparkle-core/{p-1bf8bed6.entry.js → p-7052c43a.entry.js} +1 -1
  467. package/dist/sparkle-core/{p-111520a0.js → p-70b2452c.js} +3 -0
  468. package/dist/sparkle-core/p-713590fc.js +5 -0
  469. package/dist/sparkle-core/p-7493ee15.entry.js +1 -0
  470. package/dist/sparkle-core/p-75572037.js +1 -0
  471. package/dist/sparkle-core/{p-eb56aa20.entry.js → p-768bcc9e.entry.js} +1 -1
  472. package/dist/sparkle-core/p-797c23ed.entry.js +1 -0
  473. package/dist/sparkle-core/{p-03eb2164.js → p-7c38a70b.js} +1 -1
  474. package/dist/sparkle-core/{p-09d43bee.entry.js → p-7d61177b.entry.js} +1 -1
  475. package/dist/sparkle-core/p-7dbfc316.js +1 -0
  476. package/dist/sparkle-core/p-7e61973d.entry.js +7 -0
  477. package/dist/sparkle-core/{p-3cd28c60.entry.js → p-82e98d07.entry.js} +1 -1
  478. package/dist/sparkle-core/p-838fa86d.entry.js +18 -0
  479. package/dist/sparkle-core/p-855ca600.js +1 -0
  480. package/dist/sparkle-core/p-857f3696.entry.js +1 -0
  481. package/dist/sparkle-core/{p-8f72be08.js → p-8c6b6038.js} +3 -0
  482. package/dist/sparkle-core/p-8fe2e51f.entry.js +4 -0
  483. package/dist/sparkle-core/{p-f72a6e6d.entry.js → p-90389886.entry.js} +1 -1
  484. package/dist/sparkle-core/p-932bfb69.entry.js +1 -0
  485. package/dist/sparkle-core/p-935e7cfc.js +1 -0
  486. package/dist/sparkle-core/{p-c70b9765.entry.js → p-941eaa3a.entry.js} +1 -1
  487. package/dist/sparkle-core/p-95004267.entry.js +1 -0
  488. package/dist/sparkle-core/p-950effe7.entry.js +1 -0
  489. package/dist/sparkle-core/{p-1ca4bf1d.entry.js → p-996361f9.entry.js} +1 -1
  490. package/dist/sparkle-core/p-9a17f2ad.js +4 -0
  491. package/dist/sparkle-core/p-9a443f51.js +1 -1
  492. package/dist/sparkle-core/p-9babd345.js +1 -0
  493. package/dist/sparkle-core/p-9cfdeb18.entry.js +1 -0
  494. package/dist/sparkle-core/p-a080e768.entry.js +1 -0
  495. package/dist/sparkle-core/p-a1cab0f3.js +4 -0
  496. package/dist/sparkle-core/p-a7cc0052.entry.js +4 -0
  497. package/dist/sparkle-core/p-a9ccb0df.js +4 -0
  498. package/dist/sparkle-core/p-a9ee3f6d.entry.js +1 -0
  499. package/dist/sparkle-core/{p-abe2676a.entry.js → p-aa87c7f0.entry.js} +1 -1
  500. package/dist/sparkle-core/{p-e818b11d.entry.js → p-aa9ebc39.entry.js} +1 -1
  501. package/dist/sparkle-core/p-ae1f145d.entry.js +1 -0
  502. package/dist/sparkle-core/{p-73a646fb.entry.js → p-b07a2cf2.entry.js} +1 -1
  503. package/dist/sparkle-core/{p-c82b05e0.entry.js → p-b3909012.entry.js} +1 -1
  504. package/dist/sparkle-core/p-b3e6427d.js +7 -0
  505. package/dist/sparkle-core/p-b49ca0ea.entry.js +1 -0
  506. package/dist/sparkle-core/p-b81e20fe.entry.js +4 -0
  507. package/dist/sparkle-core/p-bca0e465.entry.js +1 -0
  508. package/dist/sparkle-core/p-c1279cc9.entry.js +1 -0
  509. package/dist/sparkle-core/{p-82d95fcd.entry.js → p-c1376096.entry.js} +1 -1
  510. package/dist/sparkle-core/p-c3986a52.entry.js +1 -0
  511. package/dist/sparkle-core/p-c3d3d5c4.entry.js +1 -0
  512. package/dist/sparkle-core/p-c48bbc7c.entry.js +4 -0
  513. package/dist/sparkle-core/p-c5b9bdd6.entry.js +1 -0
  514. package/dist/sparkle-core/{p-15d68269.entry.js → p-c69b0a7a.entry.js} +1 -1
  515. package/dist/sparkle-core/p-cbbeed67.entry.js +1 -0
  516. package/dist/sparkle-core/p-d4a435f8.entry.js +1 -0
  517. package/dist/sparkle-core/p-d4c07aca.js +4 -0
  518. package/dist/sparkle-core/p-d5b05ece.entry.js +5 -0
  519. package/dist/sparkle-core/p-d7baf31e.entry.js +1 -0
  520. package/dist/sparkle-core/p-d8d3524a.js +1 -0
  521. package/dist/sparkle-core/p-df0070c5.entry.js +352 -0
  522. package/dist/sparkle-core/{p-22926eed.entry.js → p-e0fced48.entry.js} +1 -1
  523. package/dist/sparkle-core/p-e1cba44b.entry.js +4 -0
  524. package/dist/sparkle-core/p-e225581a.js +7 -0
  525. package/dist/sparkle-core/{p-4e28ca37.entry.js → p-e3fdd0a8.entry.js} +1 -1
  526. package/dist/sparkle-core/p-e72d4450.js +4 -0
  527. package/dist/sparkle-core/p-eb70a23c.entry.js +1 -0
  528. package/dist/sparkle-core/{p-f9143c5d.entry.js → p-ecd39170.entry.js} +1 -1
  529. package/dist/sparkle-core/{p-151afa9e.entry.js → p-ed0e9d29.entry.js} +1 -1
  530. package/dist/sparkle-core/{p-92d42c10.entry.js → p-ee0d7f19.entry.js} +1 -1
  531. package/dist/sparkle-core/p-f4001fdf.js +4 -0
  532. package/dist/sparkle-core/p-f9b73032.entry.js +1 -0
  533. package/dist/sparkle-core/p-faa912d7.entry.js +1 -0
  534. package/dist/sparkle-core/{p-a250e2ae.entry.js → p-fbd7eeca.entry.js} +1 -1
  535. package/dist/sparkle-core/p-fc933591.entry.js +1 -0
  536. package/dist/sparkle-core/p-fef04ab5.js +4 -0
  537. package/dist/sparkle-core/sparkle-core.css +1 -1
  538. package/dist/sparkle-core/sparkle-core.esm.js +1 -1
  539. package/dist/sparkle-core/svg/balloon-outline.svg +1 -0
  540. package/dist/sparkle-core/svg/balloon-sharp.svg +1 -0
  541. package/dist/sparkle-core/svg/balloon.svg +1 -0
  542. package/dist/sparkle-core/svg/bowling-ball-outline.svg +1 -0
  543. package/dist/sparkle-core/svg/bowling-ball-sharp.svg +1 -0
  544. package/dist/sparkle-core/svg/bowling-ball.svg +1 -0
  545. package/dist/sparkle-core/svg/calendar-number-outline.svg +1 -0
  546. package/dist/sparkle-core/svg/calendar-number-sharp.svg +1 -0
  547. package/dist/sparkle-core/svg/calendar-number.svg +1 -0
  548. package/dist/sparkle-core/svg/diamond-outline.svg +1 -0
  549. package/dist/sparkle-core/svg/diamond-sharp.svg +1 -0
  550. package/dist/sparkle-core/svg/diamond.svg +1 -0
  551. package/dist/sparkle-core/svg/footsteps-outline.svg +1 -0
  552. package/dist/sparkle-core/svg/footsteps-sharp.svg +1 -0
  553. package/dist/sparkle-core/svg/footsteps.svg +1 -0
  554. package/dist/sparkle-core/svg/id-card-outline.svg +1 -0
  555. package/dist/sparkle-core/svg/id-card-sharp.svg +1 -0
  556. package/dist/sparkle-core/svg/id-card.svg +1 -0
  557. package/dist/sparkle-core/svg/logo-apple-ar.svg +1 -0
  558. package/dist/sparkle-core/svg/prism-outline.svg +1 -0
  559. package/dist/sparkle-core/svg/prism-sharp.svg +1 -0
  560. package/dist/sparkle-core/svg/prism.svg +1 -0
  561. package/dist/sparkle-core/svg/scale-outline.svg +1 -0
  562. package/dist/sparkle-core/svg/scale-sharp.svg +1 -0
  563. package/dist/sparkle-core/svg/scale.svg +1 -0
  564. package/dist/sparkle-core/svg/shield-half-outline.svg +1 -0
  565. package/dist/sparkle-core/svg/shield-half-sharp.svg +1 -0
  566. package/dist/sparkle-core/svg/shield-half.svg +1 -0
  567. package/dist/sparkle-core/svg/sparkles-outline.svg +1 -0
  568. package/dist/sparkle-core/svg/sparkles-sharp.svg +1 -0
  569. package/dist/sparkle-core/svg/sparkles.svg +1 -0
  570. package/dist/sparkle-core/swiper/swiper.bundle.js +2 -2
  571. package/dist/types/components/sparkle-animation-player/sparkle-animation-player.d.ts +1 -0
  572. package/dist/types/components/sparkle-character-intro/sparkle-character-intro.d.ts +7 -0
  573. package/dist/types/components/sparkle-course-root/sparkle-course-root.d.ts +2 -2
  574. package/dist/types/components/sparkle-youtube/sparkle-youtube.d.ts +1 -1
  575. package/dist/types/components.d.ts +17 -0
  576. package/dist/types/models/definitions.d.ts +8 -0
  577. package/dist/types/stencil-public-runtime.d.ts +200 -190
  578. package/dist/types/util.d.ts +1 -0
  579. package/package.json +26 -26
  580. package/dist/cjs/app-globals-98121d6d.js +0 -9
  581. package/dist/cjs/button-active-9456fb4d.js +0 -66
  582. package/dist/cjs/feed.service-518d18fd.js +0 -5802
  583. package/dist/cjs/focus-visible-1583bc8e.js +0 -45
  584. package/dist/cjs/framework-delegate-72815681.js +0 -37
  585. package/dist/cjs/header-mobile-collapse_60.cjs.entry.js +0 -86
  586. package/dist/cjs/index.es-baef3314.js +0 -13834
  587. package/dist/cjs/ion-action-sheet.cjs.entry.js +0 -261
  588. package/dist/cjs/ion-alert.cjs.entry.js +0 -455
  589. package/dist/cjs/ion-note.cjs.entry.js +0 -29
  590. package/dist/cjs/ion-popover.cjs.entry.js +0 -365
  591. package/dist/cjs/ion-select-popover.cjs.entry.js +0 -35
  592. package/dist/cjs/status-tap-466a7c6a.js +0 -25
  593. package/dist/esm/app-globals-6451faf3.js +0 -7
  594. package/dist/esm/auth.store-dd944bc2.js +0 -2552
  595. package/dist/esm/button-active-97535443.js +0 -64
  596. package/dist/esm/feed.service-0fda1e36.js +0 -5787
  597. package/dist/esm/focus-visible-abf04ce3.js +0 -43
  598. package/dist/esm/framework-delegate-2c397da3.js +0 -34
  599. package/dist/esm/header-mobile-collapse_60.entry.js +0 -19
  600. package/dist/esm/index.es-a5bf9a49.js +0 -13748
  601. package/dist/esm/ion-action-sheet.entry.js +0 -257
  602. package/dist/esm/ion-alert.entry.js +0 -451
  603. package/dist/esm/ion-note.entry.js +0 -25
  604. package/dist/esm/ion-popover.entry.js +0 -361
  605. package/dist/esm/ion-select-popover.entry.js +0 -31
  606. package/dist/esm/status-tap-9221cd79.js +0 -23
  607. package/dist/sparkle-core/p-019d9d02.entry.js +0 -1
  608. package/dist/sparkle-core/p-02d6d899.js +0 -1
  609. package/dist/sparkle-core/p-03fd27d0.entry.js +0 -1
  610. package/dist/sparkle-core/p-07018d29.js +0 -1
  611. package/dist/sparkle-core/p-083d57a6.entry.js +0 -1
  612. package/dist/sparkle-core/p-090f2624.js +0 -1
  613. package/dist/sparkle-core/p-0e1c7c8c.js +0 -1
  614. package/dist/sparkle-core/p-101feae9.js +0 -1
  615. package/dist/sparkle-core/p-13b0cdfc.entry.js +0 -1
  616. package/dist/sparkle-core/p-13c9bf3a.entry.js +0 -1
  617. package/dist/sparkle-core/p-169920f1.js +0 -1
  618. package/dist/sparkle-core/p-1e1f5e98.entry.js +0 -1
  619. package/dist/sparkle-core/p-1e866c41.entry.js +0 -1
  620. package/dist/sparkle-core/p-2474bf60.entry.js +0 -1
  621. package/dist/sparkle-core/p-25bbf9b4.entry.js +0 -1
  622. package/dist/sparkle-core/p-2a45b732.js +0 -1
  623. package/dist/sparkle-core/p-2abf4d37.entry.js +0 -1
  624. package/dist/sparkle-core/p-2c5edb9f.entry.js +0 -1
  625. package/dist/sparkle-core/p-2d966d35.js +0 -1
  626. package/dist/sparkle-core/p-30b641a4.entry.js +0 -1
  627. package/dist/sparkle-core/p-34ea6639.entry.js +0 -1
  628. package/dist/sparkle-core/p-359422b6.entry.js +0 -1
  629. package/dist/sparkle-core/p-37bfb548.entry.js +0 -1
  630. package/dist/sparkle-core/p-38307b31.js +0 -1
  631. package/dist/sparkle-core/p-3a29a75b.entry.js +0 -1
  632. package/dist/sparkle-core/p-3bb55510.entry.js +0 -1
  633. package/dist/sparkle-core/p-3be0a218.js +0 -1
  634. package/dist/sparkle-core/p-417a8dd6.js +0 -1
  635. package/dist/sparkle-core/p-447163be.entry.js +0 -1
  636. package/dist/sparkle-core/p-49265a8e.entry.js +0 -1
  637. package/dist/sparkle-core/p-4950f841.entry.js +0 -1
  638. package/dist/sparkle-core/p-4b7db0e6.js +0 -1
  639. package/dist/sparkle-core/p-4d8cb365.entry.js +0 -1
  640. package/dist/sparkle-core/p-5073899e.entry.js +0 -1
  641. package/dist/sparkle-core/p-5b366c20.entry.js +0 -1
  642. package/dist/sparkle-core/p-5dce20b9.entry.js +0 -1
  643. package/dist/sparkle-core/p-6006beec.entry.js +0 -1
  644. package/dist/sparkle-core/p-600d04fc.entry.js +0 -1
  645. package/dist/sparkle-core/p-60828739.entry.js +0 -1
  646. package/dist/sparkle-core/p-6112b180.entry.js +0 -1
  647. package/dist/sparkle-core/p-66eb6b7a.entry.js +0 -1
  648. package/dist/sparkle-core/p-67ddec3f.entry.js +0 -1
  649. package/dist/sparkle-core/p-68cb7d41.entry.js +0 -1
  650. package/dist/sparkle-core/p-69cd49de.js +0 -1
  651. package/dist/sparkle-core/p-6edbdde5.entry.js +0 -1
  652. package/dist/sparkle-core/p-6f0ecbe3.js +0 -1
  653. package/dist/sparkle-core/p-765b8593.js +0 -1
  654. package/dist/sparkle-core/p-770128c8.js +0 -1
  655. package/dist/sparkle-core/p-7840618d.js +0 -1
  656. package/dist/sparkle-core/p-7b37d523.entry.js +0 -1
  657. package/dist/sparkle-core/p-7d83d006.entry.js +0 -1
  658. package/dist/sparkle-core/p-7f3d5344.js +0 -1
  659. package/dist/sparkle-core/p-81651f26.entry.js +0 -1
  660. package/dist/sparkle-core/p-86148067.entry.js +0 -1
  661. package/dist/sparkle-core/p-8b5bc1d6.entry.js +0 -1
  662. package/dist/sparkle-core/p-8c3ee44c.entry.js +0 -1
  663. package/dist/sparkle-core/p-9007a06b.entry.js +0 -1
  664. package/dist/sparkle-core/p-90482861.entry.js +0 -1
  665. package/dist/sparkle-core/p-a061537e.entry.js +0 -1
  666. package/dist/sparkle-core/p-a38ea475.js +0 -1
  667. package/dist/sparkle-core/p-ad1ddf1f.js +0 -483
  668. package/dist/sparkle-core/p-aef0bba0.js +0 -1
  669. package/dist/sparkle-core/p-b080c1e3.entry.js +0 -1
  670. package/dist/sparkle-core/p-b11fe0c7.js +0 -1
  671. package/dist/sparkle-core/p-bac45a26.entry.js +0 -1
  672. package/dist/sparkle-core/p-bbe5977b.entry.js +0 -1
  673. package/dist/sparkle-core/p-bc568dcb.js +0 -1
  674. package/dist/sparkle-core/p-bfb55f1d.js +0 -3
  675. package/dist/sparkle-core/p-c163c16d.entry.js +0 -1
  676. package/dist/sparkle-core/p-c3166584.entry.js +0 -1
  677. package/dist/sparkle-core/p-c34269ae.entry.js +0 -1
  678. package/dist/sparkle-core/p-c466ee32.js +0 -1
  679. package/dist/sparkle-core/p-c6710592.entry.js +0 -1
  680. package/dist/sparkle-core/p-c7022391.entry.js +0 -1
  681. package/dist/sparkle-core/p-d4ad796c.js +0 -1
  682. package/dist/sparkle-core/p-d6152660.entry.js +0 -1
  683. package/dist/sparkle-core/p-d63406d8.js +0 -1
  684. package/dist/sparkle-core/p-dba672d5.entry.js +0 -1
  685. package/dist/sparkle-core/p-dd73d01a.entry.js +0 -1
  686. package/dist/sparkle-core/p-de33872d.entry.js +0 -1
  687. package/dist/sparkle-core/p-dee2128a.entry.js +0 -1
  688. package/dist/sparkle-core/p-df07e132.entry.js +0 -1
  689. package/dist/sparkle-core/p-e5d5aaa5.js +0 -1
  690. package/dist/sparkle-core/p-e72c6d87.entry.js +0 -1
  691. package/dist/sparkle-core/p-e8df6ea6.entry.js +0 -1
  692. package/dist/sparkle-core/p-ef2a2172.js +0 -1
  693. package/dist/sparkle-core/p-f1a4ab33.entry.js +0 -1
  694. package/dist/sparkle-core/p-f43ac631.entry.js +0 -1
  695. package/dist/sparkle-core/p-f8063d7b.js +0 -1
  696. package/dist/sparkle-core/p-fd62283e.entry.js +0 -1
  697. package/dist/sparkle-core/p-fef71e0e.entry.js +0 -1
@@ -1,45 +1,35 @@
1
- import { r as registerInstance, e as createEvent, d as getElement } from './index-55fc9f5e.js';
2
- import { m as debounce } from './helpers-e7f66b2b.js';
1
+ import { r as registerInstance, i as createEvent, e as getElement } from './index-5568e3fa.js';
2
+ import { c as componentOnReady, o as debounce } from './helpers-39367fe1.js';
3
3
 
4
+ /*!
5
+ * (C) Ionic http://ionicframework.com - MIT License
6
+ */
4
7
  const ROUTER_INTENT_NONE = 'root';
5
8
  const ROUTER_INTENT_FORWARD = 'forward';
6
9
  const ROUTER_INTENT_BACK = 'back';
7
10
 
11
+ /*!
12
+ * (C) Ionic http://ionicframework.com - MIT License
13
+ */
14
+ /** Join the non empty segments with "/". */
8
15
  const generatePath = (segments) => {
9
16
  const path = segments
10
17
  .filter(s => s.length > 0)
11
18
  .join('/');
12
19
  return '/' + path;
13
20
  };
14
- const chainToPath = (chain) => {
15
- const path = [];
16
- for (const route of chain) {
17
- for (const segment of route.path) {
18
- if (segment[0] === ':') {
19
- const param = route.params && route.params[segment.slice(1)];
20
- if (!param) {
21
- return null;
22
- }
23
- path.push(param);
24
- }
25
- else if (segment !== '') {
26
- path.push(segment);
27
- }
28
- }
29
- }
30
- return path;
31
- };
32
- const writePath = (history, root, useHash, path, direction, state, queryString) => {
33
- let url = generatePath([
34
- ...parsePath(root),
35
- ...path
36
- ]);
21
+ const generateUrl = (segments, useHash, queryString) => {
22
+ let url = generatePath(segments);
37
23
  if (useHash) {
38
24
  url = '#' + url;
39
25
  }
40
26
  if (queryString !== undefined) {
41
- url = url + '?' + queryString;
27
+ url += '?' + queryString;
42
28
  }
29
+ return url;
30
+ };
31
+ const writeSegments = (history, root, useHash, segments, direction, state, queryString) => {
32
+ const url = generateUrl([...parsePath(root).segments, ...segments], useHash, queryString);
43
33
  if (direction === ROUTER_INTENT_FORWARD) {
44
34
  history.pushState(state, '', url);
45
35
  }
@@ -47,58 +37,95 @@ const writePath = (history, root, useHash, path, direction, state, queryString)
47
37
  history.replaceState(state, '', url);
48
38
  }
49
39
  };
50
- const removePrefix = (prefix, path) => {
51
- if (prefix.length > path.length) {
40
+ /**
41
+ * Transforms a chain to a list of segments.
42
+ *
43
+ * Notes:
44
+ * - parameter segments of the form :param are replaced with their value,
45
+ * - null is returned when a value is missing for any parameter segment.
46
+ */
47
+ const chainToSegments = (chain) => {
48
+ const segments = [];
49
+ for (const route of chain) {
50
+ for (const segment of route.segments) {
51
+ if (segment[0] === ':') {
52
+ const param = route.params && route.params[segment.slice(1)];
53
+ if (!param) {
54
+ return null;
55
+ }
56
+ segments.push(param);
57
+ }
58
+ else if (segment !== '') {
59
+ segments.push(segment);
60
+ }
61
+ }
62
+ }
63
+ return segments;
64
+ };
65
+ /**
66
+ * Removes the prefix segments from the path segments.
67
+ *
68
+ * Return:
69
+ * - null when the path segments do not start with the passed prefix,
70
+ * - the path segments after the prefix otherwise.
71
+ */
72
+ const removePrefix = (prefix, segments) => {
73
+ if (prefix.length > segments.length) {
52
74
  return null;
53
75
  }
54
76
  if (prefix.length <= 1 && prefix[0] === '') {
55
- return path;
77
+ return segments;
56
78
  }
57
79
  for (let i = 0; i < prefix.length; i++) {
58
- if (prefix[i].length > 0 && prefix[i] !== path[i]) {
80
+ if (prefix[i] !== segments[i]) {
59
81
  return null;
60
82
  }
61
83
  }
62
- if (path.length === prefix.length) {
84
+ if (segments.length === prefix.length) {
63
85
  return [''];
64
86
  }
65
- return path.slice(prefix.length);
87
+ return segments.slice(prefix.length);
66
88
  };
67
- const readPath = (loc, root, useHash) => {
68
- let pathname = loc.pathname;
69
- if (useHash) {
70
- const hash = loc.hash;
71
- pathname = (hash[0] === '#')
72
- ? hash.slice(1)
73
- : '';
74
- }
75
- const prefix = parsePath(root);
76
- const path = parsePath(pathname);
77
- return removePrefix(prefix, path);
89
+ const readSegments = (loc, root, useHash) => {
90
+ const prefix = parsePath(root).segments;
91
+ const pathname = useHash ? loc.hash.slice(1) : loc.pathname;
92
+ const segments = parsePath(pathname).segments;
93
+ return removePrefix(prefix, segments);
78
94
  };
95
+ /**
96
+ * Parses the path to:
97
+ * - segments an array of '/' separated parts,
98
+ * - queryString (undefined when no query string).
99
+ */
79
100
  const parsePath = (path) => {
80
- if (path == null) {
81
- return [''];
82
- }
83
- const removeQueryString = path.split('?')[0];
84
- const segments = removeQueryString.split('/')
85
- .map(s => s.trim())
86
- .filter(s => s.length > 0);
87
- if (segments.length === 0) {
88
- return [''];
89
- }
90
- else {
91
- return segments;
101
+ let segments = [''];
102
+ let queryString;
103
+ if (path != null) {
104
+ const qsStart = path.indexOf('?');
105
+ if (qsStart > -1) {
106
+ queryString = path.substring(qsStart + 1);
107
+ path = path.substring(0, qsStart);
108
+ }
109
+ segments = path.split('/')
110
+ .map(s => s.trim())
111
+ .filter(s => s.length > 0);
112
+ if (segments.length === 0) {
113
+ segments = [''];
114
+ }
92
115
  }
116
+ return { segments, queryString };
93
117
  };
94
118
 
119
+ /*!
120
+ * (C) Ionic http://ionicframework.com - MIT License
121
+ */
95
122
  const printRoutes = (routes) => {
96
123
  console.group(`[ion-core] ROUTES[${routes.length}]`);
97
124
  for (const chain of routes) {
98
- const path = [];
99
- chain.forEach(r => path.push(...r.path));
125
+ const segments = [];
126
+ chain.forEach(r => segments.push(...r.segments));
100
127
  const ids = chain.map(r => r.id);
101
- console.debug(`%c ${generatePath(path)}`, 'font-weight: bold; padding-left: 20px', '=>\t', `(${ids.join(', ')})`);
128
+ console.debug(`%c ${generatePath(segments)}`, 'font-weight: bold; padding-left: 20px', '=>\t', `(${ids.join(', ')})`);
102
129
  }
103
130
  console.groupEnd();
104
131
  };
@@ -106,12 +133,23 @@ const printRedirects = (redirects) => {
106
133
  console.group(`[ion-core] REDIRECTS[${redirects.length}]`);
107
134
  for (const redirect of redirects) {
108
135
  if (redirect.to) {
109
- console.debug('FROM: ', `$c ${generatePath(redirect.from)}`, 'font-weight: bold', ' TO: ', `$c ${generatePath(redirect.to)}`, 'font-weight: bold');
136
+ console.debug('FROM: ', `$c ${generatePath(redirect.from)}`, 'font-weight: bold', ' TO: ', `$c ${generatePath(redirect.to.segments)}`, 'font-weight: bold');
110
137
  }
111
138
  }
112
139
  console.groupEnd();
113
140
  };
114
141
 
142
+ /*!
143
+ * (C) Ionic http://ionicframework.com - MIT License
144
+ */
145
+ /**
146
+ * Activates the passed route chain.
147
+ *
148
+ * There must be exactly one outlet per route entry in the chain.
149
+ *
150
+ * The methods calls setRouteId on each of the outlet with the corresponding route entry in the chain.
151
+ * setRouteId will create or select the view in the outlet.
152
+ */
115
153
  const writeNavState = async (root, chain, direction, index, changed = false, animation) => {
116
154
  try {
117
155
  // find next navigation outlet in the DOM
@@ -120,7 +158,7 @@ const writeNavState = async (root, chain, direction, index, changed = false, ani
120
158
  if (index >= chain.length || !outlet) {
121
159
  return changed;
122
160
  }
123
- await outlet.componentOnReady();
161
+ await new Promise(resolve => componentOnReady(outlet, resolve));
124
162
  const route = chain[index];
125
163
  const result = await outlet.setRouteId(route.id, route.params, direction, animation);
126
164
  // if the outlet changed the page, reset navigation to neutral (no direction)
@@ -143,23 +181,21 @@ const writeNavState = async (root, chain, direction, index, changed = false, ani
143
181
  return false;
144
182
  }
145
183
  };
184
+ /**
185
+ * Recursively walks the outlet in the DOM.
186
+ *
187
+ * The function returns a list of RouteID corresponding to each of the outlet and the last outlet without a RouteID.
188
+ */
146
189
  const readNavState = async (root) => {
147
190
  const ids = [];
148
191
  let outlet;
149
192
  let node = root;
150
- // tslint:disable-next-line:no-constant-condition
151
- while (true) {
152
- outlet = searchNavNode(node);
153
- if (outlet) {
154
- const id = await outlet.getRouteId();
155
- if (id) {
156
- node = id.element;
157
- id.element = undefined;
158
- ids.push(id);
159
- }
160
- else {
161
- break;
162
- }
193
+ while (outlet = searchNavNode(node)) {
194
+ const id = await outlet.getRouteId();
195
+ if (id) {
196
+ node = id.element;
197
+ id.element = undefined;
198
+ ids.push(id);
163
199
  }
164
200
  else {
165
201
  break;
@@ -172,27 +208,38 @@ const waitUntilNavNode = () => {
172
208
  return Promise.resolve();
173
209
  }
174
210
  return new Promise(resolve => {
175
- window.addEventListener('ionNavWillLoad', resolve, { once: true });
211
+ window.addEventListener('ionNavWillLoad', () => resolve(), { once: true });
176
212
  });
177
213
  };
178
- const QUERY = ':not([no-router]) ion-nav, :not([no-router]) ion-tabs, :not([no-router]) ion-router-outlet';
214
+ /** Selector for all the outlets supported by the router. */
215
+ const OUTLET_SELECTOR = ':not([no-router]) ion-nav, :not([no-router]) ion-tabs, :not([no-router]) ion-router-outlet';
179
216
  const searchNavNode = (root) => {
180
217
  if (!root) {
181
218
  return undefined;
182
219
  }
183
- if (root.matches(QUERY)) {
220
+ if (root.matches(OUTLET_SELECTOR)) {
184
221
  return root;
185
222
  }
186
- const outlet = root.querySelector(QUERY);
187
- return outlet ? outlet : undefined;
223
+ const outlet = root.querySelector(OUTLET_SELECTOR);
224
+ return outlet !== null && outlet !== void 0 ? outlet : undefined;
188
225
  };
189
226
 
190
- const matchesRedirect = (input, route) => {
191
- const { from, to } = route;
227
+ /*!
228
+ * (C) Ionic http://ionicframework.com - MIT License
229
+ */
230
+ /**
231
+ * Returns whether the given redirect matches the given path segments.
232
+ *
233
+ * A redirect matches when the segments of the path and redirect.from are equal.
234
+ * Note that segments are only checked until redirect.from contains a '*' which matches any path segment.
235
+ * The path ['some', 'path', 'to', 'page'] matches both ['some', 'path', 'to', 'page'] and ['some', 'path', '*'].
236
+ */
237
+ const matchesRedirect = (segments, redirect) => {
238
+ const { from, to } = redirect;
192
239
  if (to === undefined) {
193
240
  return false;
194
241
  }
195
- if (from.length > input.length) {
242
+ if (from.length > segments.length) {
196
243
  return false;
197
244
  }
198
245
  for (let i = 0; i < from.length; i++) {
@@ -200,37 +247,83 @@ const matchesRedirect = (input, route) => {
200
247
  if (expected === '*') {
201
248
  return true;
202
249
  }
203
- if (expected !== input[i]) {
250
+ if (expected !== segments[i]) {
204
251
  return false;
205
252
  }
206
253
  }
207
- return from.length === input.length;
254
+ return from.length === segments.length;
208
255
  };
209
- const routeRedirect = (path, routes) => {
210
- return routes.find(route => matchesRedirect(path, route));
256
+ /** Returns the first redirect matching the path segments or undefined when no match found. */
257
+ const findRouteRedirect = (segments, redirects) => {
258
+ return redirects.find(redirect => matchesRedirect(segments, redirect));
211
259
  };
212
260
  const matchesIDs = (ids, chain) => {
213
261
  const len = Math.min(ids.length, chain.length);
214
- let i = 0;
215
- for (; i < len; i++) {
216
- if (ids[i].toLowerCase() !== chain[i].id) {
262
+ let score = 0;
263
+ for (let i = 0; i < len; i++) {
264
+ const routeId = ids[i];
265
+ const routeChain = chain[i];
266
+ // Skip results where the route id does not match the chain at the same index
267
+ if (routeId.id.toLowerCase() !== routeChain.id) {
217
268
  break;
218
269
  }
270
+ if (routeId.params) {
271
+ const routeIdParams = Object.keys(routeId.params);
272
+ // Only compare routes with the chain that have the same number of parameters.
273
+ if (routeIdParams.length === routeChain.segments.length) {
274
+ // Maps the route's params into a path based on the path variable names,
275
+ // to compare against the route chain format.
276
+ //
277
+ // Before:
278
+ // ```ts
279
+ // {
280
+ // params: {
281
+ // s1: 'a',
282
+ // s2: 'b'
283
+ // }
284
+ // }
285
+ // ```
286
+ //
287
+ // After:
288
+ // ```ts
289
+ // [':s1',':s2']
290
+ // ```
291
+ //
292
+ const pathWithParams = routeIdParams.map(key => `:${key}`);
293
+ for (let j = 0; j < pathWithParams.length; j++) {
294
+ // Skip results where the path variable is not a match
295
+ if (pathWithParams[j].toLowerCase() !== routeChain.segments[j]) {
296
+ break;
297
+ }
298
+ // Weight path matches for the same index higher.
299
+ score++;
300
+ }
301
+ }
302
+ }
303
+ // Weight id matches
304
+ score++;
219
305
  }
220
- return i;
306
+ return score;
221
307
  };
222
- const matchesPath = (inputPath, chain) => {
223
- const segments = new RouterSegments(inputPath);
308
+ /**
309
+ * Matches the segments against the chain.
310
+ *
311
+ * Returns:
312
+ * - null when there is no match,
313
+ * - a chain with the params properties updated with the parameter segments on match.
314
+ */
315
+ const matchesSegments = (segments, chain) => {
316
+ const inputSegments = new RouterSegments(segments);
224
317
  let matchesDefault = false;
225
318
  let allparams;
226
319
  for (let i = 0; i < chain.length; i++) {
227
- const path = chain[i].path;
228
- if (path[0] === '') {
320
+ const chainSegments = chain[i].segments;
321
+ if (chainSegments[0] === '') {
229
322
  matchesDefault = true;
230
323
  }
231
324
  else {
232
- for (const segment of path) {
233
- const data = segments.next();
325
+ for (const segment of chainSegments) {
326
+ const data = inputSegments.next();
234
327
  // data param
235
328
  if (segment[0] === ':') {
236
329
  if (data === '') {
@@ -248,7 +341,7 @@ const matchesPath = (inputPath, chain) => {
248
341
  }
249
342
  }
250
343
  const matches = (matchesDefault)
251
- ? matchesDefault === (segments.next() === '')
344
+ ? matchesDefault === (inputSegments.next() === '')
252
345
  : true;
253
346
  if (!matches) {
254
347
  return null;
@@ -256,7 +349,7 @@ const matchesPath = (inputPath, chain) => {
256
349
  if (allparams) {
257
350
  return chain.map((route, i) => ({
258
351
  id: route.id,
259
- path: route.path,
352
+ segments: route.segments,
260
353
  params: mergeParams(route.params, allparams[i]),
261
354
  beforeEnter: route.beforeEnter,
262
355
  beforeLeave: route.beforeLeave
@@ -264,62 +357,84 @@ const matchesPath = (inputPath, chain) => {
264
357
  }
265
358
  return chain;
266
359
  };
360
+ /**
361
+ * Merges the route parameter objects.
362
+ * Returns undefined when both parameters are undefined.
363
+ */
267
364
  const mergeParams = (a, b) => {
268
- if (!a && b) {
269
- return b;
270
- }
271
- else if (a && !b) {
272
- return a;
273
- }
274
- else if (a && b) {
275
- return Object.assign(Object.assign({}, a), b);
276
- }
277
- return undefined;
365
+ return a || b ? Object.assign(Object.assign({}, a), b) : undefined;
278
366
  };
279
- const routerIDsToChain = (ids, chains) => {
367
+ /**
368
+ * Finds the best match for the ids in the chains.
369
+ *
370
+ * Returns the best match or null when no match is found.
371
+ * When a chain is returned the parameters are updated from the RouteIDs.
372
+ * That is they contain both the componentProps of the <ion-route> and the parameter segment.
373
+ */
374
+ const findChainForIDs = (ids, chains) => {
280
375
  let match = null;
281
376
  let maxMatches = 0;
282
- const plainIDs = ids.map(i => i.id);
283
377
  for (const chain of chains) {
284
- const score = matchesIDs(plainIDs, chain);
378
+ const score = matchesIDs(ids, chain);
285
379
  if (score > maxMatches) {
286
380
  match = chain;
287
381
  maxMatches = score;
288
382
  }
289
383
  }
290
384
  if (match) {
291
- return match.map((route, i) => ({
292
- id: route.id,
293
- path: route.path,
294
- params: mergeParams(route.params, ids[i] && ids[i].params)
295
- }));
385
+ return match.map((route, i) => {
386
+ var _a;
387
+ return ({
388
+ id: route.id,
389
+ segments: route.segments,
390
+ params: mergeParams(route.params, (_a = ids[i]) === null || _a === void 0 ? void 0 : _a.params)
391
+ });
392
+ });
296
393
  }
297
394
  return null;
298
395
  };
299
- const routerPathToChain = (path, chains) => {
396
+ /**
397
+ * Finds the best match for the segments in the chains.
398
+ *
399
+ * Returns the best match or null when no match is found.
400
+ * When a chain is returned the parameters are updated from the segments.
401
+ * That is they contain both the componentProps of the <ion-route> and the parameter segments.
402
+ */
403
+ const findChainForSegments = (segments, chains) => {
300
404
  let match = null;
301
- let matches = 0;
405
+ let bestScore = 0;
302
406
  for (const chain of chains) {
303
- const matchedChain = matchesPath(path, chain);
407
+ const matchedChain = matchesSegments(segments, chain);
304
408
  if (matchedChain !== null) {
305
409
  const score = computePriority(matchedChain);
306
- if (score > matches) {
307
- matches = score;
410
+ if (score > bestScore) {
411
+ bestScore = score;
308
412
  match = matchedChain;
309
413
  }
310
414
  }
311
415
  }
312
416
  return match;
313
417
  };
418
+ /**
419
+ * Computes the priority of a chain.
420
+ *
421
+ * Parameter segments are given a lower priority over fixed segments.
422
+ *
423
+ * Considering the following 2 chains matching the path /path/to/page:
424
+ * - /path/to/:where
425
+ * - /path/to/page
426
+ *
427
+ * The second one will be given a higher priority because "page" is a fixed segment (vs ":where", a parameter segment).
428
+ */
314
429
  const computePriority = (chain) => {
315
430
  let score = 1;
316
431
  let level = 1;
317
432
  for (const route of chain) {
318
- for (const path of route.path) {
319
- if (path[0] === ':') {
433
+ for (const segment of route.segments) {
434
+ if (segment[0] === ':') {
320
435
  score += Math.pow(1, level);
321
436
  }
322
- else if (path !== '') {
437
+ else if (segment !== '') {
323
438
  score += Math.pow(2, level);
324
439
  }
325
440
  level++;
@@ -328,80 +443,100 @@ const computePriority = (chain) => {
328
443
  return score;
329
444
  };
330
445
  class RouterSegments {
331
- constructor(path) {
332
- this.path = path.slice();
446
+ constructor(segments) {
447
+ this.segments = segments.slice();
333
448
  }
334
449
  next() {
335
- if (this.path.length > 0) {
336
- return this.path.shift();
450
+ if (this.segments.length > 0) {
451
+ return this.segments.shift();
337
452
  }
338
453
  return '';
339
454
  }
340
455
  }
341
456
 
457
+ /*!
458
+ * (C) Ionic http://ionicframework.com - MIT License
459
+ */
460
+ const readProp = (el, prop) => {
461
+ if (prop in el) {
462
+ return el[prop];
463
+ }
464
+ if (el.hasAttribute(prop)) {
465
+ return el.getAttribute(prop);
466
+ }
467
+ return null;
468
+ };
469
+ /**
470
+ * Extracts the redirects (that is <ion-route-redirect> elements inside the root).
471
+ *
472
+ * The redirects are returned as a list of RouteRedirect.
473
+ */
342
474
  const readRedirects = (root) => {
343
475
  return Array.from(root.children)
344
476
  .filter(el => el.tagName === 'ION-ROUTE-REDIRECT')
345
477
  .map(el => {
346
478
  const to = readProp(el, 'to');
347
479
  return {
348
- from: parsePath(readProp(el, 'from')),
480
+ from: parsePath(readProp(el, 'from')).segments,
349
481
  to: to == null ? undefined : parsePath(to),
350
482
  };
351
483
  });
352
484
  };
485
+ /**
486
+ * Extracts all the routes (that is <ion-route> elements inside the root).
487
+ *
488
+ * The routes are returned as a list of chains - the flattened tree.
489
+ */
353
490
  const readRoutes = (root) => {
354
491
  return flattenRouterTree(readRouteNodes(root));
355
492
  };
356
- const readRouteNodes = (root, node = root) => {
493
+ /**
494
+ * Reads the route nodes as a tree modeled after the DOM tree of <ion-route> elements.
495
+ *
496
+ * Note: routes without a component are ignored together with their children.
497
+ */
498
+ const readRouteNodes = (node) => {
357
499
  return Array.from(node.children)
358
500
  .filter(el => el.tagName === 'ION-ROUTE' && el.component)
359
501
  .map(el => {
360
502
  const component = readProp(el, 'component');
361
- if (component == null) {
362
- throw new Error('component missing in ion-route');
363
- }
364
503
  return {
365
- path: parsePath(readProp(el, 'url')),
504
+ segments: parsePath(readProp(el, 'url')).segments,
366
505
  id: component.toLowerCase(),
367
506
  params: el.componentProps,
368
507
  beforeLeave: el.beforeLeave,
369
508
  beforeEnter: el.beforeEnter,
370
- children: readRouteNodes(root, el)
509
+ children: readRouteNodes(el)
371
510
  };
372
511
  });
373
512
  };
374
- const readProp = (el, prop) => {
375
- if (prop in el) {
376
- return el[prop];
377
- }
378
- if (el.hasAttribute(prop)) {
379
- return el.getAttribute(prop);
380
- }
381
- return null;
382
- };
513
+ /**
514
+ * Flattens a RouterTree in a list of chains.
515
+ *
516
+ * Each chain represents a path from the root node to a terminal node.
517
+ */
383
518
  const flattenRouterTree = (nodes) => {
384
- const routes = [];
519
+ const chains = [];
385
520
  for (const node of nodes) {
386
- flattenNode([], routes, node);
521
+ flattenNode([], chains, node);
387
522
  }
388
- return routes;
523
+ return chains;
389
524
  };
390
- const flattenNode = (chain, routes, node) => {
391
- const s = chain.slice();
392
- s.push({
393
- id: node.id,
394
- path: node.path,
395
- params: node.params,
396
- beforeLeave: node.beforeLeave,
397
- beforeEnter: node.beforeEnter
398
- });
525
+ /** Flattens a route node recursively and push each branch to the chains list. */
526
+ const flattenNode = (chain, chains, node) => {
527
+ chain = [...chain, {
528
+ id: node.id,
529
+ segments: node.segments,
530
+ params: node.params,
531
+ beforeLeave: node.beforeLeave,
532
+ beforeEnter: node.beforeEnter
533
+ }];
399
534
  if (node.children.length === 0) {
400
- routes.push(s);
535
+ chains.push(chain);
401
536
  return;
402
537
  }
403
- for (const sub of node.children) {
404
- flattenNode(s, routes, sub);
538
+ for (const child of node.children) {
539
+ flattenNode(chain, chains, child);
405
540
  }
406
541
  };
407
542
 
@@ -415,9 +550,8 @@ const Router = class {
415
550
  this.state = 0;
416
551
  this.lastState = 0;
417
552
  /**
418
- * By default `ion-router` will match the routes at the root path ("/").
419
- * That can be changed when
420
- *
553
+ * The root path to use when matching URLs. By default, this is set to "/", but you can specify
554
+ * an alternate prefix for all URL paths.
421
555
  */
422
556
  this.root = '/';
423
557
  /**
@@ -430,17 +564,26 @@ const Router = class {
430
564
  * Usually "hash-less" navigation works better for SEO and it's more user friendly too, but it might
431
565
  * requires additional server-side configuration in order to properly work.
432
566
  *
433
- * On the otherside hash-navigation is much easier to deploy, it even works over the file protocol.
567
+ * On the other side hash-navigation is much easier to deploy, it even works over the file protocol.
434
568
  *
435
569
  * By default, this property is `true`, change to `false` to allow hash-less URLs.
436
570
  */
437
571
  this.useHash = true;
438
572
  }
439
573
  async componentWillLoad() {
440
- console.debug('[ion-router] router will load');
441
574
  await waitUntilNavNode();
442
- console.debug('[ion-router] found nav');
443
- await this.onRoutesChanged();
575
+ const canProceed = await this.runGuards(this.getSegments());
576
+ if (canProceed !== true) {
577
+ if (typeof canProceed === 'object') {
578
+ const { redirect } = canProceed;
579
+ const path = parsePath(redirect);
580
+ this.setSegments(path.segments, ROUTER_INTENT_NONE, path.queryString);
581
+ await this.writeNavStateRoot(path.segments, ROUTER_INTENT_NONE);
582
+ }
583
+ }
584
+ else {
585
+ await this.onRoutesChanged();
586
+ }
444
587
  }
445
588
  componentDidLoad() {
446
589
  window.addEventListener('ionRouteRedirectChanged', debounce(this.onRedirectChanged.bind(this), 10));
@@ -448,16 +591,17 @@ const Router = class {
448
591
  }
449
592
  async onPopState() {
450
593
  const direction = this.historyDirection();
451
- let path = this.getPath();
452
- const canProceed = await this.runGuards(path);
594
+ let segments = this.getSegments();
595
+ const canProceed = await this.runGuards(segments);
453
596
  if (canProceed !== true) {
454
597
  if (typeof canProceed === 'object') {
455
- path = parsePath(canProceed.redirect);
598
+ segments = parsePath(canProceed.redirect).segments;
599
+ }
600
+ else {
601
+ return false;
456
602
  }
457
- return false;
458
603
  }
459
- console.debug('[ion-router] URL changed -> update nav', path, direction);
460
- return this.writeNavStateRoot(path, direction);
604
+ return this.writeNavStateRoot(segments, direction);
461
605
  }
462
606
  onBackButton(ev) {
463
607
  ev.detail.register(0, processNextHandler => {
@@ -479,42 +623,39 @@ const Router = class {
479
623
  return true;
480
624
  }
481
625
  /**
482
- * Navigate to the specified URL.
626
+ * Navigate to the specified path.
483
627
  *
484
- * @param url The url to navigate to.
628
+ * @param path The path to navigate to.
485
629
  * @param direction The direction of the animation. Defaults to `"forward"`.
486
630
  */
487
- async push(url, direction = 'forward', animation) {
488
- if (url.startsWith('.')) {
489
- url = (new URL(url, window.location.href)).pathname;
631
+ async push(path, direction = 'forward', animation) {
632
+ var _a;
633
+ if (path.startsWith('.')) {
634
+ const currentPath = (_a = this.previousPath) !== null && _a !== void 0 ? _a : '/';
635
+ // Convert currentPath to an URL by pre-pending a protocol and a host to resolve the relative path.
636
+ const url = new URL(path, `https://host/${currentPath}`);
637
+ path = url.pathname + url.search;
490
638
  }
491
- console.debug('[ion-router] URL pushed -> updating nav', url, direction);
492
- let path = parsePath(url);
493
- let queryString = url.split('?')[1];
494
- const canProceed = await this.runGuards(path);
639
+ let parsedPath = parsePath(path);
640
+ const canProceed = await this.runGuards(parsedPath.segments);
495
641
  if (canProceed !== true) {
496
642
  if (typeof canProceed === 'object') {
497
- path = parsePath(canProceed.redirect);
498
- queryString = canProceed.redirect.split('?')[1];
643
+ parsedPath = parsePath(canProceed.redirect);
499
644
  }
500
645
  else {
501
646
  return false;
502
647
  }
503
648
  }
504
- this.setPath(path, direction, queryString);
505
- return this.writeNavStateRoot(path, direction, animation);
649
+ this.setSegments(parsedPath.segments, direction, parsedPath.queryString);
650
+ return this.writeNavStateRoot(parsedPath.segments, direction, animation);
506
651
  }
507
- /**
508
- * Go back to previous page in the window.history.
509
- */
652
+ /** Go back to previous page in the window.history. */
510
653
  back() {
511
654
  window.history.back();
512
655
  return Promise.resolve(this.waitPromise);
513
656
  }
514
657
  /** @internal */
515
658
  async printDebug() {
516
- console.debug('CURRENT PATH', this.getPath());
517
- console.debug('PREVIOUS PATH', this.previousPath);
518
659
  printRoutes(readRoutes(this.el));
519
660
  printRedirects(readRedirects(this.el));
520
661
  }
@@ -526,35 +667,37 @@ const Router = class {
526
667
  }
527
668
  const { ids, outlet } = await readNavState(window.document.body);
528
669
  const routes = readRoutes(this.el);
529
- const chain = routerIDsToChain(ids, routes);
670
+ const chain = findChainForIDs(ids, routes);
530
671
  if (!chain) {
531
672
  console.warn('[ion-router] no matching URL for ', ids.map(i => i.id));
532
673
  return false;
533
674
  }
534
- const path = chainToPath(chain);
535
- if (!path) {
675
+ const segments = chainToSegments(chain);
676
+ if (!segments) {
536
677
  console.warn('[ion-router] router could not match path because some required param is missing');
537
678
  return false;
538
679
  }
539
- console.debug('[ion-router] nav changed -> update URL', ids, path);
540
- this.setPath(path, direction);
541
- await this.safeWriteNavState(outlet, chain, ROUTER_INTENT_NONE, path, null, ids.length);
680
+ this.setSegments(segments, direction);
681
+ await this.safeWriteNavState(outlet, chain, ROUTER_INTENT_NONE, segments, null, ids.length);
542
682
  return true;
543
683
  }
684
+ /** This handler gets called when a `ion-route-redirect` component is added to the DOM or if the from or to property of such node changes. */
544
685
  onRedirectChanged() {
545
- const path = this.getPath();
546
- if (path && routeRedirect(path, readRedirects(this.el))) {
547
- this.writeNavStateRoot(path, ROUTER_INTENT_NONE);
686
+ const segments = this.getSegments();
687
+ if (segments && findRouteRedirect(segments, readRedirects(this.el))) {
688
+ this.writeNavStateRoot(segments, ROUTER_INTENT_NONE);
548
689
  }
549
690
  }
691
+ /** This handler gets called when a `ion-route` component is added to the DOM or if the from or to property of such node changes. */
550
692
  onRoutesChanged() {
551
- return this.writeNavStateRoot(this.getPath(), ROUTER_INTENT_NONE);
693
+ return this.writeNavStateRoot(this.getSegments(), ROUTER_INTENT_NONE);
552
694
  }
553
695
  historyDirection() {
696
+ var _a;
554
697
  const win = window;
555
698
  if (win.history.state === null) {
556
699
  this.state++;
557
- win.history.replaceState(this.state, win.document.title, win.document.location && win.document.location.href);
700
+ win.history.replaceState(this.state, win.document.title, (_a = win.document.location) === null || _a === void 0 ? void 0 : _a.href);
558
701
  }
559
702
  const state = win.history.state;
560
703
  const lastState = this.lastState;
@@ -562,42 +705,41 @@ const Router = class {
562
705
  if (state > lastState || (state >= lastState && lastState > 0)) {
563
706
  return ROUTER_INTENT_FORWARD;
564
707
  }
565
- else if (state < lastState) {
708
+ if (state < lastState) {
566
709
  return ROUTER_INTENT_BACK;
567
710
  }
568
- else {
569
- return ROUTER_INTENT_NONE;
570
- }
711
+ return ROUTER_INTENT_NONE;
571
712
  }
572
- async writeNavStateRoot(path, direction, animation) {
573
- if (!path) {
713
+ async writeNavStateRoot(segments, direction, animation) {
714
+ if (!segments) {
574
715
  console.error('[ion-router] URL is not part of the routing set');
575
716
  return false;
576
717
  }
577
718
  // lookup redirect rule
578
719
  const redirects = readRedirects(this.el);
579
- const redirect = routeRedirect(path, redirects);
720
+ const redirect = findRouteRedirect(segments, redirects);
580
721
  let redirectFrom = null;
581
722
  if (redirect) {
582
- this.setPath(redirect.to, direction);
723
+ const { segments: toSegments, queryString } = redirect.to;
724
+ this.setSegments(toSegments, direction, queryString);
583
725
  redirectFrom = redirect.from;
584
- path = redirect.to;
726
+ segments = toSegments;
585
727
  }
586
728
  // lookup route chain
587
729
  const routes = readRoutes(this.el);
588
- const chain = routerPathToChain(path, routes);
730
+ const chain = findChainForSegments(segments, routes);
589
731
  if (!chain) {
590
732
  console.error('[ion-router] the path does not match any route');
591
733
  return false;
592
734
  }
593
735
  // write DOM give
594
- return this.safeWriteNavState(document.body, chain, direction, path, redirectFrom, 0, animation);
736
+ return this.safeWriteNavState(document.body, chain, direction, segments, redirectFrom, 0, animation);
595
737
  }
596
- async safeWriteNavState(node, chain, direction, path, redirectFrom, index = 0, animation) {
738
+ async safeWriteNavState(node, chain, direction, segments, redirectFrom, index = 0, animation) {
597
739
  const unlock = await this.lock();
598
740
  let changed = false;
599
741
  try {
600
- changed = await this.writeNavState(node, chain, direction, path, redirectFrom, index, animation);
742
+ changed = await this.writeNavState(node, chain, direction, segments, redirectFrom, index, animation);
601
743
  }
602
744
  catch (e) {
603
745
  console.error(e);
@@ -614,62 +756,64 @@ const Router = class {
614
756
  }
615
757
  return resolve;
616
758
  }
617
- async runGuards(to = this.getPath(), from = parsePath(this.previousPath)) {
759
+ /**
760
+ * Executes the beforeLeave hook of the source route and the beforeEnter hook of the target route if they exist.
761
+ *
762
+ * When the beforeLeave hook does not return true (to allow navigating) then that value is returned early and the beforeEnter is executed.
763
+ * Otherwise the beforeEnterHook hook of the target route is executed.
764
+ */
765
+ async runGuards(to = this.getSegments(), from) {
766
+ if (from === undefined) {
767
+ from = parsePath(this.previousPath).segments;
768
+ }
618
769
  if (!to || !from) {
619
770
  return true;
620
771
  }
621
772
  const routes = readRoutes(this.el);
622
- const toChain = routerPathToChain(to, routes);
623
- const fromChain = routerPathToChain(from, routes);
624
- const beforeEnterHook = toChain && toChain[toChain.length - 1].beforeEnter;
773
+ const fromChain = findChainForSegments(from, routes);
625
774
  const beforeLeaveHook = fromChain && fromChain[fromChain.length - 1].beforeLeave;
626
775
  const canLeave = beforeLeaveHook ? await beforeLeaveHook() : true;
627
776
  if (canLeave === false || typeof canLeave === 'object') {
628
777
  return canLeave;
629
778
  }
630
- const canEnter = beforeEnterHook ? await beforeEnterHook() : true;
631
- if (canEnter === false || typeof canEnter === 'object') {
632
- return canEnter;
633
- }
634
- return true;
779
+ const toChain = findChainForSegments(to, routes);
780
+ const beforeEnterHook = toChain && toChain[toChain.length - 1].beforeEnter;
781
+ return beforeEnterHook ? beforeEnterHook() : true;
635
782
  }
636
- async writeNavState(node, chain, direction, path, redirectFrom, index = 0, animation) {
783
+ async writeNavState(node, chain, direction, segments, redirectFrom, index = 0, animation) {
637
784
  if (this.busy) {
638
785
  console.warn('[ion-router] router is busy, transition was cancelled');
639
786
  return false;
640
787
  }
641
788
  this.busy = true;
642
789
  // generate route event and emit will change
643
- const routeEvent = this.routeChangeEvent(path, redirectFrom);
790
+ const routeEvent = this.routeChangeEvent(segments, redirectFrom);
644
791
  if (routeEvent) {
645
792
  this.ionRouteWillChange.emit(routeEvent);
646
793
  }
647
794
  const changed = await writeNavState(node, chain, direction, index, false, animation);
648
795
  this.busy = false;
649
- if (changed) {
650
- console.debug('[ion-router] route changed', path);
651
- }
652
796
  // emit did change
653
797
  if (routeEvent) {
654
798
  this.ionRouteDidChange.emit(routeEvent);
655
799
  }
656
800
  return changed;
657
801
  }
658
- setPath(path, direction, queryString) {
802
+ setSegments(segments, direction, queryString) {
659
803
  this.state++;
660
- writePath(window.history, this.root, this.useHash, path, direction, this.state, queryString);
804
+ writeSegments(window.history, this.root, this.useHash, segments, direction, this.state, queryString);
661
805
  }
662
- getPath() {
663
- return readPath(window.location, this.root, this.useHash);
806
+ getSegments() {
807
+ return readSegments(window.location, this.root, this.useHash);
664
808
  }
665
- routeChangeEvent(path, redirectFromPath) {
809
+ routeChangeEvent(toSegments, redirectFromSegments) {
666
810
  const from = this.previousPath;
667
- const to = generatePath(path);
811
+ const to = generatePath(toSegments);
668
812
  this.previousPath = to;
669
813
  if (to === from) {
670
814
  return null;
671
815
  }
672
- const redirectedFrom = redirectFromPath ? generatePath(redirectFromPath) : null;
816
+ const redirectedFrom = redirectFromSegments ? generatePath(redirectFromSegments) : null;
673
817
  return {
674
818
  from,
675
819
  redirectedFrom,