@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
@@ -2,48 +2,38 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const index = require('./index-fbf4d3bf.js');
6
- const helpers = require('./helpers-26770c32.js');
5
+ const index = require('./index-bae2a754.js');
6
+ const helpers = require('./helpers-7e28976c.js');
7
7
 
8
+ /*!
9
+ * (C) Ionic http://ionicframework.com - MIT License
10
+ */
8
11
  const ROUTER_INTENT_NONE = 'root';
9
12
  const ROUTER_INTENT_FORWARD = 'forward';
10
13
  const ROUTER_INTENT_BACK = 'back';
11
14
 
15
+ /*!
16
+ * (C) Ionic http://ionicframework.com - MIT License
17
+ */
18
+ /** Join the non empty segments with "/". */
12
19
  const generatePath = (segments) => {
13
20
  const path = segments
14
21
  .filter(s => s.length > 0)
15
22
  .join('/');
16
23
  return '/' + path;
17
24
  };
18
- const chainToPath = (chain) => {
19
- const path = [];
20
- for (const route of chain) {
21
- for (const segment of route.path) {
22
- if (segment[0] === ':') {
23
- const param = route.params && route.params[segment.slice(1)];
24
- if (!param) {
25
- return null;
26
- }
27
- path.push(param);
28
- }
29
- else if (segment !== '') {
30
- path.push(segment);
31
- }
32
- }
33
- }
34
- return path;
35
- };
36
- const writePath = (history, root, useHash, path, direction, state, queryString) => {
37
- let url = generatePath([
38
- ...parsePath(root),
39
- ...path
40
- ]);
25
+ const generateUrl = (segments, useHash, queryString) => {
26
+ let url = generatePath(segments);
41
27
  if (useHash) {
42
28
  url = '#' + url;
43
29
  }
44
30
  if (queryString !== undefined) {
45
- url = url + '?' + queryString;
31
+ url += '?' + queryString;
46
32
  }
33
+ return url;
34
+ };
35
+ const writeSegments = (history, root, useHash, segments, direction, state, queryString) => {
36
+ const url = generateUrl([...parsePath(root).segments, ...segments], useHash, queryString);
47
37
  if (direction === ROUTER_INTENT_FORWARD) {
48
38
  history.pushState(state, '', url);
49
39
  }
@@ -51,58 +41,95 @@ const writePath = (history, root, useHash, path, direction, state, queryString)
51
41
  history.replaceState(state, '', url);
52
42
  }
53
43
  };
54
- const removePrefix = (prefix, path) => {
55
- if (prefix.length > path.length) {
44
+ /**
45
+ * Transforms a chain to a list of segments.
46
+ *
47
+ * Notes:
48
+ * - parameter segments of the form :param are replaced with their value,
49
+ * - null is returned when a value is missing for any parameter segment.
50
+ */
51
+ const chainToSegments = (chain) => {
52
+ const segments = [];
53
+ for (const route of chain) {
54
+ for (const segment of route.segments) {
55
+ if (segment[0] === ':') {
56
+ const param = route.params && route.params[segment.slice(1)];
57
+ if (!param) {
58
+ return null;
59
+ }
60
+ segments.push(param);
61
+ }
62
+ else if (segment !== '') {
63
+ segments.push(segment);
64
+ }
65
+ }
66
+ }
67
+ return segments;
68
+ };
69
+ /**
70
+ * Removes the prefix segments from the path segments.
71
+ *
72
+ * Return:
73
+ * - null when the path segments do not start with the passed prefix,
74
+ * - the path segments after the prefix otherwise.
75
+ */
76
+ const removePrefix = (prefix, segments) => {
77
+ if (prefix.length > segments.length) {
56
78
  return null;
57
79
  }
58
80
  if (prefix.length <= 1 && prefix[0] === '') {
59
- return path;
81
+ return segments;
60
82
  }
61
83
  for (let i = 0; i < prefix.length; i++) {
62
- if (prefix[i].length > 0 && prefix[i] !== path[i]) {
84
+ if (prefix[i] !== segments[i]) {
63
85
  return null;
64
86
  }
65
87
  }
66
- if (path.length === prefix.length) {
88
+ if (segments.length === prefix.length) {
67
89
  return [''];
68
90
  }
69
- return path.slice(prefix.length);
91
+ return segments.slice(prefix.length);
70
92
  };
71
- const readPath = (loc, root, useHash) => {
72
- let pathname = loc.pathname;
73
- if (useHash) {
74
- const hash = loc.hash;
75
- pathname = (hash[0] === '#')
76
- ? hash.slice(1)
77
- : '';
78
- }
79
- const prefix = parsePath(root);
80
- const path = parsePath(pathname);
81
- return removePrefix(prefix, path);
93
+ const readSegments = (loc, root, useHash) => {
94
+ const prefix = parsePath(root).segments;
95
+ const pathname = useHash ? loc.hash.slice(1) : loc.pathname;
96
+ const segments = parsePath(pathname).segments;
97
+ return removePrefix(prefix, segments);
82
98
  };
99
+ /**
100
+ * Parses the path to:
101
+ * - segments an array of '/' separated parts,
102
+ * - queryString (undefined when no query string).
103
+ */
83
104
  const parsePath = (path) => {
84
- if (path == null) {
85
- return [''];
86
- }
87
- const removeQueryString = path.split('?')[0];
88
- const segments = removeQueryString.split('/')
89
- .map(s => s.trim())
90
- .filter(s => s.length > 0);
91
- if (segments.length === 0) {
92
- return [''];
93
- }
94
- else {
95
- return segments;
105
+ let segments = [''];
106
+ let queryString;
107
+ if (path != null) {
108
+ const qsStart = path.indexOf('?');
109
+ if (qsStart > -1) {
110
+ queryString = path.substring(qsStart + 1);
111
+ path = path.substring(0, qsStart);
112
+ }
113
+ segments = path.split('/')
114
+ .map(s => s.trim())
115
+ .filter(s => s.length > 0);
116
+ if (segments.length === 0) {
117
+ segments = [''];
118
+ }
96
119
  }
120
+ return { segments, queryString };
97
121
  };
98
122
 
123
+ /*!
124
+ * (C) Ionic http://ionicframework.com - MIT License
125
+ */
99
126
  const printRoutes = (routes) => {
100
127
  console.group(`[ion-core] ROUTES[${routes.length}]`);
101
128
  for (const chain of routes) {
102
- const path = [];
103
- chain.forEach(r => path.push(...r.path));
129
+ const segments = [];
130
+ chain.forEach(r => segments.push(...r.segments));
104
131
  const ids = chain.map(r => r.id);
105
- console.debug(`%c ${generatePath(path)}`, 'font-weight: bold; padding-left: 20px', '=>\t', `(${ids.join(', ')})`);
132
+ console.debug(`%c ${generatePath(segments)}`, 'font-weight: bold; padding-left: 20px', '=>\t', `(${ids.join(', ')})`);
106
133
  }
107
134
  console.groupEnd();
108
135
  };
@@ -110,12 +137,23 @@ const printRedirects = (redirects) => {
110
137
  console.group(`[ion-core] REDIRECTS[${redirects.length}]`);
111
138
  for (const redirect of redirects) {
112
139
  if (redirect.to) {
113
- console.debug('FROM: ', `$c ${generatePath(redirect.from)}`, 'font-weight: bold', ' TO: ', `$c ${generatePath(redirect.to)}`, 'font-weight: bold');
140
+ console.debug('FROM: ', `$c ${generatePath(redirect.from)}`, 'font-weight: bold', ' TO: ', `$c ${generatePath(redirect.to.segments)}`, 'font-weight: bold');
114
141
  }
115
142
  }
116
143
  console.groupEnd();
117
144
  };
118
145
 
146
+ /*!
147
+ * (C) Ionic http://ionicframework.com - MIT License
148
+ */
149
+ /**
150
+ * Activates the passed route chain.
151
+ *
152
+ * There must be exactly one outlet per route entry in the chain.
153
+ *
154
+ * The methods calls setRouteId on each of the outlet with the corresponding route entry in the chain.
155
+ * setRouteId will create or select the view in the outlet.
156
+ */
119
157
  const writeNavState = async (root, chain, direction, index, changed = false, animation) => {
120
158
  try {
121
159
  // find next navigation outlet in the DOM
@@ -124,7 +162,7 @@ const writeNavState = async (root, chain, direction, index, changed = false, ani
124
162
  if (index >= chain.length || !outlet) {
125
163
  return changed;
126
164
  }
127
- await outlet.componentOnReady();
165
+ await new Promise(resolve => helpers.componentOnReady(outlet, resolve));
128
166
  const route = chain[index];
129
167
  const result = await outlet.setRouteId(route.id, route.params, direction, animation);
130
168
  // if the outlet changed the page, reset navigation to neutral (no direction)
@@ -147,23 +185,21 @@ const writeNavState = async (root, chain, direction, index, changed = false, ani
147
185
  return false;
148
186
  }
149
187
  };
188
+ /**
189
+ * Recursively walks the outlet in the DOM.
190
+ *
191
+ * The function returns a list of RouteID corresponding to each of the outlet and the last outlet without a RouteID.
192
+ */
150
193
  const readNavState = async (root) => {
151
194
  const ids = [];
152
195
  let outlet;
153
196
  let node = root;
154
- // tslint:disable-next-line:no-constant-condition
155
- while (true) {
156
- outlet = searchNavNode(node);
157
- if (outlet) {
158
- const id = await outlet.getRouteId();
159
- if (id) {
160
- node = id.element;
161
- id.element = undefined;
162
- ids.push(id);
163
- }
164
- else {
165
- break;
166
- }
197
+ while (outlet = searchNavNode(node)) {
198
+ const id = await outlet.getRouteId();
199
+ if (id) {
200
+ node = id.element;
201
+ id.element = undefined;
202
+ ids.push(id);
167
203
  }
168
204
  else {
169
205
  break;
@@ -176,27 +212,38 @@ const waitUntilNavNode = () => {
176
212
  return Promise.resolve();
177
213
  }
178
214
  return new Promise(resolve => {
179
- window.addEventListener('ionNavWillLoad', resolve, { once: true });
215
+ window.addEventListener('ionNavWillLoad', () => resolve(), { once: true });
180
216
  });
181
217
  };
182
- const QUERY = ':not([no-router]) ion-nav, :not([no-router]) ion-tabs, :not([no-router]) ion-router-outlet';
218
+ /** Selector for all the outlets supported by the router. */
219
+ const OUTLET_SELECTOR = ':not([no-router]) ion-nav, :not([no-router]) ion-tabs, :not([no-router]) ion-router-outlet';
183
220
  const searchNavNode = (root) => {
184
221
  if (!root) {
185
222
  return undefined;
186
223
  }
187
- if (root.matches(QUERY)) {
224
+ if (root.matches(OUTLET_SELECTOR)) {
188
225
  return root;
189
226
  }
190
- const outlet = root.querySelector(QUERY);
191
- return outlet ? outlet : undefined;
227
+ const outlet = root.querySelector(OUTLET_SELECTOR);
228
+ return outlet !== null && outlet !== void 0 ? outlet : undefined;
192
229
  };
193
230
 
194
- const matchesRedirect = (input, route) => {
195
- const { from, to } = route;
231
+ /*!
232
+ * (C) Ionic http://ionicframework.com - MIT License
233
+ */
234
+ /**
235
+ * Returns whether the given redirect matches the given path segments.
236
+ *
237
+ * A redirect matches when the segments of the path and redirect.from are equal.
238
+ * Note that segments are only checked until redirect.from contains a '*' which matches any path segment.
239
+ * The path ['some', 'path', 'to', 'page'] matches both ['some', 'path', 'to', 'page'] and ['some', 'path', '*'].
240
+ */
241
+ const matchesRedirect = (segments, redirect) => {
242
+ const { from, to } = redirect;
196
243
  if (to === undefined) {
197
244
  return false;
198
245
  }
199
- if (from.length > input.length) {
246
+ if (from.length > segments.length) {
200
247
  return false;
201
248
  }
202
249
  for (let i = 0; i < from.length; i++) {
@@ -204,37 +251,83 @@ const matchesRedirect = (input, route) => {
204
251
  if (expected === '*') {
205
252
  return true;
206
253
  }
207
- if (expected !== input[i]) {
254
+ if (expected !== segments[i]) {
208
255
  return false;
209
256
  }
210
257
  }
211
- return from.length === input.length;
258
+ return from.length === segments.length;
212
259
  };
213
- const routeRedirect = (path, routes) => {
214
- return routes.find(route => matchesRedirect(path, route));
260
+ /** Returns the first redirect matching the path segments or undefined when no match found. */
261
+ const findRouteRedirect = (segments, redirects) => {
262
+ return redirects.find(redirect => matchesRedirect(segments, redirect));
215
263
  };
216
264
  const matchesIDs = (ids, chain) => {
217
265
  const len = Math.min(ids.length, chain.length);
218
- let i = 0;
219
- for (; i < len; i++) {
220
- if (ids[i].toLowerCase() !== chain[i].id) {
266
+ let score = 0;
267
+ for (let i = 0; i < len; i++) {
268
+ const routeId = ids[i];
269
+ const routeChain = chain[i];
270
+ // Skip results where the route id does not match the chain at the same index
271
+ if (routeId.id.toLowerCase() !== routeChain.id) {
221
272
  break;
222
273
  }
274
+ if (routeId.params) {
275
+ const routeIdParams = Object.keys(routeId.params);
276
+ // Only compare routes with the chain that have the same number of parameters.
277
+ if (routeIdParams.length === routeChain.segments.length) {
278
+ // Maps the route's params into a path based on the path variable names,
279
+ // to compare against the route chain format.
280
+ //
281
+ // Before:
282
+ // ```ts
283
+ // {
284
+ // params: {
285
+ // s1: 'a',
286
+ // s2: 'b'
287
+ // }
288
+ // }
289
+ // ```
290
+ //
291
+ // After:
292
+ // ```ts
293
+ // [':s1',':s2']
294
+ // ```
295
+ //
296
+ const pathWithParams = routeIdParams.map(key => `:${key}`);
297
+ for (let j = 0; j < pathWithParams.length; j++) {
298
+ // Skip results where the path variable is not a match
299
+ if (pathWithParams[j].toLowerCase() !== routeChain.segments[j]) {
300
+ break;
301
+ }
302
+ // Weight path matches for the same index higher.
303
+ score++;
304
+ }
305
+ }
306
+ }
307
+ // Weight id matches
308
+ score++;
223
309
  }
224
- return i;
310
+ return score;
225
311
  };
226
- const matchesPath = (inputPath, chain) => {
227
- const segments = new RouterSegments(inputPath);
312
+ /**
313
+ * Matches the segments against the chain.
314
+ *
315
+ * Returns:
316
+ * - null when there is no match,
317
+ * - a chain with the params properties updated with the parameter segments on match.
318
+ */
319
+ const matchesSegments = (segments, chain) => {
320
+ const inputSegments = new RouterSegments(segments);
228
321
  let matchesDefault = false;
229
322
  let allparams;
230
323
  for (let i = 0; i < chain.length; i++) {
231
- const path = chain[i].path;
232
- if (path[0] === '') {
324
+ const chainSegments = chain[i].segments;
325
+ if (chainSegments[0] === '') {
233
326
  matchesDefault = true;
234
327
  }
235
328
  else {
236
- for (const segment of path) {
237
- const data = segments.next();
329
+ for (const segment of chainSegments) {
330
+ const data = inputSegments.next();
238
331
  // data param
239
332
  if (segment[0] === ':') {
240
333
  if (data === '') {
@@ -252,7 +345,7 @@ const matchesPath = (inputPath, chain) => {
252
345
  }
253
346
  }
254
347
  const matches = (matchesDefault)
255
- ? matchesDefault === (segments.next() === '')
348
+ ? matchesDefault === (inputSegments.next() === '')
256
349
  : true;
257
350
  if (!matches) {
258
351
  return null;
@@ -260,7 +353,7 @@ const matchesPath = (inputPath, chain) => {
260
353
  if (allparams) {
261
354
  return chain.map((route, i) => ({
262
355
  id: route.id,
263
- path: route.path,
356
+ segments: route.segments,
264
357
  params: mergeParams(route.params, allparams[i]),
265
358
  beforeEnter: route.beforeEnter,
266
359
  beforeLeave: route.beforeLeave
@@ -268,62 +361,84 @@ const matchesPath = (inputPath, chain) => {
268
361
  }
269
362
  return chain;
270
363
  };
364
+ /**
365
+ * Merges the route parameter objects.
366
+ * Returns undefined when both parameters are undefined.
367
+ */
271
368
  const mergeParams = (a, b) => {
272
- if (!a && b) {
273
- return b;
274
- }
275
- else if (a && !b) {
276
- return a;
277
- }
278
- else if (a && b) {
279
- return Object.assign(Object.assign({}, a), b);
280
- }
281
- return undefined;
369
+ return a || b ? Object.assign(Object.assign({}, a), b) : undefined;
282
370
  };
283
- const routerIDsToChain = (ids, chains) => {
371
+ /**
372
+ * Finds the best match for the ids in the chains.
373
+ *
374
+ * Returns the best match or null when no match is found.
375
+ * When a chain is returned the parameters are updated from the RouteIDs.
376
+ * That is they contain both the componentProps of the <ion-route> and the parameter segment.
377
+ */
378
+ const findChainForIDs = (ids, chains) => {
284
379
  let match = null;
285
380
  let maxMatches = 0;
286
- const plainIDs = ids.map(i => i.id);
287
381
  for (const chain of chains) {
288
- const score = matchesIDs(plainIDs, chain);
382
+ const score = matchesIDs(ids, chain);
289
383
  if (score > maxMatches) {
290
384
  match = chain;
291
385
  maxMatches = score;
292
386
  }
293
387
  }
294
388
  if (match) {
295
- return match.map((route, i) => ({
296
- id: route.id,
297
- path: route.path,
298
- params: mergeParams(route.params, ids[i] && ids[i].params)
299
- }));
389
+ return match.map((route, i) => {
390
+ var _a;
391
+ return ({
392
+ id: route.id,
393
+ segments: route.segments,
394
+ params: mergeParams(route.params, (_a = ids[i]) === null || _a === void 0 ? void 0 : _a.params)
395
+ });
396
+ });
300
397
  }
301
398
  return null;
302
399
  };
303
- const routerPathToChain = (path, chains) => {
400
+ /**
401
+ * Finds the best match for the segments in the chains.
402
+ *
403
+ * Returns the best match or null when no match is found.
404
+ * When a chain is returned the parameters are updated from the segments.
405
+ * That is they contain both the componentProps of the <ion-route> and the parameter segments.
406
+ */
407
+ const findChainForSegments = (segments, chains) => {
304
408
  let match = null;
305
- let matches = 0;
409
+ let bestScore = 0;
306
410
  for (const chain of chains) {
307
- const matchedChain = matchesPath(path, chain);
411
+ const matchedChain = matchesSegments(segments, chain);
308
412
  if (matchedChain !== null) {
309
413
  const score = computePriority(matchedChain);
310
- if (score > matches) {
311
- matches = score;
414
+ if (score > bestScore) {
415
+ bestScore = score;
312
416
  match = matchedChain;
313
417
  }
314
418
  }
315
419
  }
316
420
  return match;
317
421
  };
422
+ /**
423
+ * Computes the priority of a chain.
424
+ *
425
+ * Parameter segments are given a lower priority over fixed segments.
426
+ *
427
+ * Considering the following 2 chains matching the path /path/to/page:
428
+ * - /path/to/:where
429
+ * - /path/to/page
430
+ *
431
+ * The second one will be given a higher priority because "page" is a fixed segment (vs ":where", a parameter segment).
432
+ */
318
433
  const computePriority = (chain) => {
319
434
  let score = 1;
320
435
  let level = 1;
321
436
  for (const route of chain) {
322
- for (const path of route.path) {
323
- if (path[0] === ':') {
437
+ for (const segment of route.segments) {
438
+ if (segment[0] === ':') {
324
439
  score += Math.pow(1, level);
325
440
  }
326
- else if (path !== '') {
441
+ else if (segment !== '') {
327
442
  score += Math.pow(2, level);
328
443
  }
329
444
  level++;
@@ -332,80 +447,100 @@ const computePriority = (chain) => {
332
447
  return score;
333
448
  };
334
449
  class RouterSegments {
335
- constructor(path) {
336
- this.path = path.slice();
450
+ constructor(segments) {
451
+ this.segments = segments.slice();
337
452
  }
338
453
  next() {
339
- if (this.path.length > 0) {
340
- return this.path.shift();
454
+ if (this.segments.length > 0) {
455
+ return this.segments.shift();
341
456
  }
342
457
  return '';
343
458
  }
344
459
  }
345
460
 
461
+ /*!
462
+ * (C) Ionic http://ionicframework.com - MIT License
463
+ */
464
+ const readProp = (el, prop) => {
465
+ if (prop in el) {
466
+ return el[prop];
467
+ }
468
+ if (el.hasAttribute(prop)) {
469
+ return el.getAttribute(prop);
470
+ }
471
+ return null;
472
+ };
473
+ /**
474
+ * Extracts the redirects (that is <ion-route-redirect> elements inside the root).
475
+ *
476
+ * The redirects are returned as a list of RouteRedirect.
477
+ */
346
478
  const readRedirects = (root) => {
347
479
  return Array.from(root.children)
348
480
  .filter(el => el.tagName === 'ION-ROUTE-REDIRECT')
349
481
  .map(el => {
350
482
  const to = readProp(el, 'to');
351
483
  return {
352
- from: parsePath(readProp(el, 'from')),
484
+ from: parsePath(readProp(el, 'from')).segments,
353
485
  to: to == null ? undefined : parsePath(to),
354
486
  };
355
487
  });
356
488
  };
489
+ /**
490
+ * Extracts all the routes (that is <ion-route> elements inside the root).
491
+ *
492
+ * The routes are returned as a list of chains - the flattened tree.
493
+ */
357
494
  const readRoutes = (root) => {
358
495
  return flattenRouterTree(readRouteNodes(root));
359
496
  };
360
- const readRouteNodes = (root, node = root) => {
497
+ /**
498
+ * Reads the route nodes as a tree modeled after the DOM tree of <ion-route> elements.
499
+ *
500
+ * Note: routes without a component are ignored together with their children.
501
+ */
502
+ const readRouteNodes = (node) => {
361
503
  return Array.from(node.children)
362
504
  .filter(el => el.tagName === 'ION-ROUTE' && el.component)
363
505
  .map(el => {
364
506
  const component = readProp(el, 'component');
365
- if (component == null) {
366
- throw new Error('component missing in ion-route');
367
- }
368
507
  return {
369
- path: parsePath(readProp(el, 'url')),
508
+ segments: parsePath(readProp(el, 'url')).segments,
370
509
  id: component.toLowerCase(),
371
510
  params: el.componentProps,
372
511
  beforeLeave: el.beforeLeave,
373
512
  beforeEnter: el.beforeEnter,
374
- children: readRouteNodes(root, el)
513
+ children: readRouteNodes(el)
375
514
  };
376
515
  });
377
516
  };
378
- const readProp = (el, prop) => {
379
- if (prop in el) {
380
- return el[prop];
381
- }
382
- if (el.hasAttribute(prop)) {
383
- return el.getAttribute(prop);
384
- }
385
- return null;
386
- };
517
+ /**
518
+ * Flattens a RouterTree in a list of chains.
519
+ *
520
+ * Each chain represents a path from the root node to a terminal node.
521
+ */
387
522
  const flattenRouterTree = (nodes) => {
388
- const routes = [];
523
+ const chains = [];
389
524
  for (const node of nodes) {
390
- flattenNode([], routes, node);
525
+ flattenNode([], chains, node);
391
526
  }
392
- return routes;
527
+ return chains;
393
528
  };
394
- const flattenNode = (chain, routes, node) => {
395
- const s = chain.slice();
396
- s.push({
397
- id: node.id,
398
- path: node.path,
399
- params: node.params,
400
- beforeLeave: node.beforeLeave,
401
- beforeEnter: node.beforeEnter
402
- });
529
+ /** Flattens a route node recursively and push each branch to the chains list. */
530
+ const flattenNode = (chain, chains, node) => {
531
+ chain = [...chain, {
532
+ id: node.id,
533
+ segments: node.segments,
534
+ params: node.params,
535
+ beforeLeave: node.beforeLeave,
536
+ beforeEnter: node.beforeEnter
537
+ }];
403
538
  if (node.children.length === 0) {
404
- routes.push(s);
539
+ chains.push(chain);
405
540
  return;
406
541
  }
407
- for (const sub of node.children) {
408
- flattenNode(s, routes, sub);
542
+ for (const child of node.children) {
543
+ flattenNode(chain, chains, child);
409
544
  }
410
545
  };
411
546
 
@@ -419,9 +554,8 @@ const Router = class {
419
554
  this.state = 0;
420
555
  this.lastState = 0;
421
556
  /**
422
- * By default `ion-router` will match the routes at the root path ("/").
423
- * That can be changed when
424
- *
557
+ * The root path to use when matching URLs. By default, this is set to "/", but you can specify
558
+ * an alternate prefix for all URL paths.
425
559
  */
426
560
  this.root = '/';
427
561
  /**
@@ -434,17 +568,26 @@ const Router = class {
434
568
  * Usually "hash-less" navigation works better for SEO and it's more user friendly too, but it might
435
569
  * requires additional server-side configuration in order to properly work.
436
570
  *
437
- * On the otherside hash-navigation is much easier to deploy, it even works over the file protocol.
571
+ * On the other side hash-navigation is much easier to deploy, it even works over the file protocol.
438
572
  *
439
573
  * By default, this property is `true`, change to `false` to allow hash-less URLs.
440
574
  */
441
575
  this.useHash = true;
442
576
  }
443
577
  async componentWillLoad() {
444
- console.debug('[ion-router] router will load');
445
578
  await waitUntilNavNode();
446
- console.debug('[ion-router] found nav');
447
- await this.onRoutesChanged();
579
+ const canProceed = await this.runGuards(this.getSegments());
580
+ if (canProceed !== true) {
581
+ if (typeof canProceed === 'object') {
582
+ const { redirect } = canProceed;
583
+ const path = parsePath(redirect);
584
+ this.setSegments(path.segments, ROUTER_INTENT_NONE, path.queryString);
585
+ await this.writeNavStateRoot(path.segments, ROUTER_INTENT_NONE);
586
+ }
587
+ }
588
+ else {
589
+ await this.onRoutesChanged();
590
+ }
448
591
  }
449
592
  componentDidLoad() {
450
593
  window.addEventListener('ionRouteRedirectChanged', helpers.debounce(this.onRedirectChanged.bind(this), 10));
@@ -452,16 +595,17 @@ const Router = class {
452
595
  }
453
596
  async onPopState() {
454
597
  const direction = this.historyDirection();
455
- let path = this.getPath();
456
- const canProceed = await this.runGuards(path);
598
+ let segments = this.getSegments();
599
+ const canProceed = await this.runGuards(segments);
457
600
  if (canProceed !== true) {
458
601
  if (typeof canProceed === 'object') {
459
- path = parsePath(canProceed.redirect);
602
+ segments = parsePath(canProceed.redirect).segments;
603
+ }
604
+ else {
605
+ return false;
460
606
  }
461
- return false;
462
607
  }
463
- console.debug('[ion-router] URL changed -> update nav', path, direction);
464
- return this.writeNavStateRoot(path, direction);
608
+ return this.writeNavStateRoot(segments, direction);
465
609
  }
466
610
  onBackButton(ev) {
467
611
  ev.detail.register(0, processNextHandler => {
@@ -483,42 +627,39 @@ const Router = class {
483
627
  return true;
484
628
  }
485
629
  /**
486
- * Navigate to the specified URL.
630
+ * Navigate to the specified path.
487
631
  *
488
- * @param url The url to navigate to.
632
+ * @param path The path to navigate to.
489
633
  * @param direction The direction of the animation. Defaults to `"forward"`.
490
634
  */
491
- async push(url, direction = 'forward', animation) {
492
- if (url.startsWith('.')) {
493
- url = (new URL(url, window.location.href)).pathname;
635
+ async push(path, direction = 'forward', animation) {
636
+ var _a;
637
+ if (path.startsWith('.')) {
638
+ const currentPath = (_a = this.previousPath) !== null && _a !== void 0 ? _a : '/';
639
+ // Convert currentPath to an URL by pre-pending a protocol and a host to resolve the relative path.
640
+ const url = new URL(path, `https://host/${currentPath}`);
641
+ path = url.pathname + url.search;
494
642
  }
495
- console.debug('[ion-router] URL pushed -> updating nav', url, direction);
496
- let path = parsePath(url);
497
- let queryString = url.split('?')[1];
498
- const canProceed = await this.runGuards(path);
643
+ let parsedPath = parsePath(path);
644
+ const canProceed = await this.runGuards(parsedPath.segments);
499
645
  if (canProceed !== true) {
500
646
  if (typeof canProceed === 'object') {
501
- path = parsePath(canProceed.redirect);
502
- queryString = canProceed.redirect.split('?')[1];
647
+ parsedPath = parsePath(canProceed.redirect);
503
648
  }
504
649
  else {
505
650
  return false;
506
651
  }
507
652
  }
508
- this.setPath(path, direction, queryString);
509
- return this.writeNavStateRoot(path, direction, animation);
653
+ this.setSegments(parsedPath.segments, direction, parsedPath.queryString);
654
+ return this.writeNavStateRoot(parsedPath.segments, direction, animation);
510
655
  }
511
- /**
512
- * Go back to previous page in the window.history.
513
- */
656
+ /** Go back to previous page in the window.history. */
514
657
  back() {
515
658
  window.history.back();
516
659
  return Promise.resolve(this.waitPromise);
517
660
  }
518
661
  /** @internal */
519
662
  async printDebug() {
520
- console.debug('CURRENT PATH', this.getPath());
521
- console.debug('PREVIOUS PATH', this.previousPath);
522
663
  printRoutes(readRoutes(this.el));
523
664
  printRedirects(readRedirects(this.el));
524
665
  }
@@ -530,35 +671,37 @@ const Router = class {
530
671
  }
531
672
  const { ids, outlet } = await readNavState(window.document.body);
532
673
  const routes = readRoutes(this.el);
533
- const chain = routerIDsToChain(ids, routes);
674
+ const chain = findChainForIDs(ids, routes);
534
675
  if (!chain) {
535
676
  console.warn('[ion-router] no matching URL for ', ids.map(i => i.id));
536
677
  return false;
537
678
  }
538
- const path = chainToPath(chain);
539
- if (!path) {
679
+ const segments = chainToSegments(chain);
680
+ if (!segments) {
540
681
  console.warn('[ion-router] router could not match path because some required param is missing');
541
682
  return false;
542
683
  }
543
- console.debug('[ion-router] nav changed -> update URL', ids, path);
544
- this.setPath(path, direction);
545
- await this.safeWriteNavState(outlet, chain, ROUTER_INTENT_NONE, path, null, ids.length);
684
+ this.setSegments(segments, direction);
685
+ await this.safeWriteNavState(outlet, chain, ROUTER_INTENT_NONE, segments, null, ids.length);
546
686
  return true;
547
687
  }
688
+ /** 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. */
548
689
  onRedirectChanged() {
549
- const path = this.getPath();
550
- if (path && routeRedirect(path, readRedirects(this.el))) {
551
- this.writeNavStateRoot(path, ROUTER_INTENT_NONE);
690
+ const segments = this.getSegments();
691
+ if (segments && findRouteRedirect(segments, readRedirects(this.el))) {
692
+ this.writeNavStateRoot(segments, ROUTER_INTENT_NONE);
552
693
  }
553
694
  }
695
+ /** 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. */
554
696
  onRoutesChanged() {
555
- return this.writeNavStateRoot(this.getPath(), ROUTER_INTENT_NONE);
697
+ return this.writeNavStateRoot(this.getSegments(), ROUTER_INTENT_NONE);
556
698
  }
557
699
  historyDirection() {
700
+ var _a;
558
701
  const win = window;
559
702
  if (win.history.state === null) {
560
703
  this.state++;
561
- win.history.replaceState(this.state, win.document.title, win.document.location && win.document.location.href);
704
+ win.history.replaceState(this.state, win.document.title, (_a = win.document.location) === null || _a === void 0 ? void 0 : _a.href);
562
705
  }
563
706
  const state = win.history.state;
564
707
  const lastState = this.lastState;
@@ -566,42 +709,41 @@ const Router = class {
566
709
  if (state > lastState || (state >= lastState && lastState > 0)) {
567
710
  return ROUTER_INTENT_FORWARD;
568
711
  }
569
- else if (state < lastState) {
712
+ if (state < lastState) {
570
713
  return ROUTER_INTENT_BACK;
571
714
  }
572
- else {
573
- return ROUTER_INTENT_NONE;
574
- }
715
+ return ROUTER_INTENT_NONE;
575
716
  }
576
- async writeNavStateRoot(path, direction, animation) {
577
- if (!path) {
717
+ async writeNavStateRoot(segments, direction, animation) {
718
+ if (!segments) {
578
719
  console.error('[ion-router] URL is not part of the routing set');
579
720
  return false;
580
721
  }
581
722
  // lookup redirect rule
582
723
  const redirects = readRedirects(this.el);
583
- const redirect = routeRedirect(path, redirects);
724
+ const redirect = findRouteRedirect(segments, redirects);
584
725
  let redirectFrom = null;
585
726
  if (redirect) {
586
- this.setPath(redirect.to, direction);
727
+ const { segments: toSegments, queryString } = redirect.to;
728
+ this.setSegments(toSegments, direction, queryString);
587
729
  redirectFrom = redirect.from;
588
- path = redirect.to;
730
+ segments = toSegments;
589
731
  }
590
732
  // lookup route chain
591
733
  const routes = readRoutes(this.el);
592
- const chain = routerPathToChain(path, routes);
734
+ const chain = findChainForSegments(segments, routes);
593
735
  if (!chain) {
594
736
  console.error('[ion-router] the path does not match any route');
595
737
  return false;
596
738
  }
597
739
  // write DOM give
598
- return this.safeWriteNavState(document.body, chain, direction, path, redirectFrom, 0, animation);
740
+ return this.safeWriteNavState(document.body, chain, direction, segments, redirectFrom, 0, animation);
599
741
  }
600
- async safeWriteNavState(node, chain, direction, path, redirectFrom, index = 0, animation) {
742
+ async safeWriteNavState(node, chain, direction, segments, redirectFrom, index = 0, animation) {
601
743
  const unlock = await this.lock();
602
744
  let changed = false;
603
745
  try {
604
- changed = await this.writeNavState(node, chain, direction, path, redirectFrom, index, animation);
746
+ changed = await this.writeNavState(node, chain, direction, segments, redirectFrom, index, animation);
605
747
  }
606
748
  catch (e) {
607
749
  console.error(e);
@@ -618,62 +760,64 @@ const Router = class {
618
760
  }
619
761
  return resolve;
620
762
  }
621
- async runGuards(to = this.getPath(), from = parsePath(this.previousPath)) {
763
+ /**
764
+ * Executes the beforeLeave hook of the source route and the beforeEnter hook of the target route if they exist.
765
+ *
766
+ * When the beforeLeave hook does not return true (to allow navigating) then that value is returned early and the beforeEnter is executed.
767
+ * Otherwise the beforeEnterHook hook of the target route is executed.
768
+ */
769
+ async runGuards(to = this.getSegments(), from) {
770
+ if (from === undefined) {
771
+ from = parsePath(this.previousPath).segments;
772
+ }
622
773
  if (!to || !from) {
623
774
  return true;
624
775
  }
625
776
  const routes = readRoutes(this.el);
626
- const toChain = routerPathToChain(to, routes);
627
- const fromChain = routerPathToChain(from, routes);
628
- const beforeEnterHook = toChain && toChain[toChain.length - 1].beforeEnter;
777
+ const fromChain = findChainForSegments(from, routes);
629
778
  const beforeLeaveHook = fromChain && fromChain[fromChain.length - 1].beforeLeave;
630
779
  const canLeave = beforeLeaveHook ? await beforeLeaveHook() : true;
631
780
  if (canLeave === false || typeof canLeave === 'object') {
632
781
  return canLeave;
633
782
  }
634
- const canEnter = beforeEnterHook ? await beforeEnterHook() : true;
635
- if (canEnter === false || typeof canEnter === 'object') {
636
- return canEnter;
637
- }
638
- return true;
783
+ const toChain = findChainForSegments(to, routes);
784
+ const beforeEnterHook = toChain && toChain[toChain.length - 1].beforeEnter;
785
+ return beforeEnterHook ? beforeEnterHook() : true;
639
786
  }
640
- async writeNavState(node, chain, direction, path, redirectFrom, index = 0, animation) {
787
+ async writeNavState(node, chain, direction, segments, redirectFrom, index = 0, animation) {
641
788
  if (this.busy) {
642
789
  console.warn('[ion-router] router is busy, transition was cancelled');
643
790
  return false;
644
791
  }
645
792
  this.busy = true;
646
793
  // generate route event and emit will change
647
- const routeEvent = this.routeChangeEvent(path, redirectFrom);
794
+ const routeEvent = this.routeChangeEvent(segments, redirectFrom);
648
795
  if (routeEvent) {
649
796
  this.ionRouteWillChange.emit(routeEvent);
650
797
  }
651
798
  const changed = await writeNavState(node, chain, direction, index, false, animation);
652
799
  this.busy = false;
653
- if (changed) {
654
- console.debug('[ion-router] route changed', path);
655
- }
656
800
  // emit did change
657
801
  if (routeEvent) {
658
802
  this.ionRouteDidChange.emit(routeEvent);
659
803
  }
660
804
  return changed;
661
805
  }
662
- setPath(path, direction, queryString) {
806
+ setSegments(segments, direction, queryString) {
663
807
  this.state++;
664
- writePath(window.history, this.root, this.useHash, path, direction, this.state, queryString);
808
+ writeSegments(window.history, this.root, this.useHash, segments, direction, this.state, queryString);
665
809
  }
666
- getPath() {
667
- return readPath(window.location, this.root, this.useHash);
810
+ getSegments() {
811
+ return readSegments(window.location, this.root, this.useHash);
668
812
  }
669
- routeChangeEvent(path, redirectFromPath) {
813
+ routeChangeEvent(toSegments, redirectFromSegments) {
670
814
  const from = this.previousPath;
671
- const to = generatePath(path);
815
+ const to = generatePath(toSegments);
672
816
  this.previousPath = to;
673
817
  if (to === from) {
674
818
  return null;
675
819
  }
676
- const redirectedFrom = redirectFromPath ? generatePath(redirectFromPath) : null;
820
+ const redirectedFrom = redirectFromSegments ? generatePath(redirectFromSegments) : null;
677
821
  return {
678
822
  from,
679
823
  redirectedFrom,