@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,16 +1,20 @@
1
- import { r as registerInstance, e as createEvent, w as writeTask, h, H as Host, d as getElement } from './index-55fc9f5e.js';
2
- import { g as getIonMode, c as config } from './ionic-global-1f9287cc.js';
3
- import { j as clamp } from './helpers-e7f66b2b.js';
4
- import { c as createAnimation } from './animation-72fdacfb.js';
5
- import { d as deepReady } from './index-a94619f9.js';
6
- import { g as getTimeGivenProgression } from './cubic-bezier-ed243a9b.js';
7
- import './gesture-controller-604336b7.js';
8
- import { createGesture } from './index-b2ad0f1a.js';
9
- import './hardware-back-button-508e48cf.js';
10
- import { B as BACKDROP, b as prepareOverlay, p as present, f as activeAnimations, d as dismiss, e as eventMethod } from './overlays-8363621c.js';
11
- import { g as getClassMap } from './theme-12606872.js';
12
- import { a as attachComponent, d as detachComponent } from './framework-delegate-2c397da3.js';
1
+ import { r as registerInstance, i as createEvent, w as writeTask, h, H as Host, e as getElement } from './index-5568e3fa.js';
2
+ import { g as getIonMode, c as config } from './ionic-global-0939c477.js';
3
+ import { C as CoreDelegate, a as attachComponent, d as detachComponent } from './framework-delegate-3bc58c27.js';
4
+ import { l as clamp, g as getElementRoot, k as raf } from './helpers-39367fe1.js';
5
+ import { KEYBOARD_DID_OPEN } from './keyboard-2503e874.js';
6
+ import { B as BACKDROP, p as prepareOverlay, b as present, c as activeAnimations, d as dismiss, e as eventMethod } from './overlays-34cfa9e0.js';
7
+ import { g as getClassMap } from './theme-c336c9d9.js';
8
+ import { d as deepReady } from './index-c26d8655.js';
9
+ import { c as createAnimation } from './animation-b306f6c2.js';
10
+ import { g as getTimeGivenProgression } from './cubic-bezier-a7ad9c8e.js';
11
+ import { createGesture } from './index-a12c14bd.js';
12
+ import './hardware-back-button-b6ccf74a.js';
13
+ import './gesture-controller-686622ba.js';
13
14
 
15
+ /*!
16
+ * (C) Ionic http://ionicframework.com - MIT License
17
+ */
14
18
  // Defaults for the card swipe animation
15
19
  const SwipeToCloseDefaults = {
16
20
  MIN_PRESENTING_SCALE: 0.93,
@@ -24,11 +28,11 @@ const createSwipeToCloseGesture = (el, animation, onDismiss) => {
24
28
  !target.closest) {
25
29
  return true;
26
30
  }
27
- const content = target.closest('ion-content');
28
- if (content === null) {
31
+ const contentOrFooter = target.closest('ion-content, ion-footer');
32
+ if (contentOrFooter === null) {
29
33
  return true;
30
34
  }
31
- // Target is in the content so we don't start the gesture.
35
+ // Target is in the content or the footer so do not start the gesture.
32
36
  // We could be more nuanced here and allow it for content that
33
37
  // does not need to scroll.
34
38
  return false;
@@ -85,22 +89,140 @@ const computeDuration = (remaining, velocity) => {
85
89
  return clamp(400, remaining / Math.abs(velocity * 1.1), 500);
86
90
  };
87
91
 
92
+ /*!
93
+ * (C) Ionic http://ionicframework.com - MIT License
94
+ */
88
95
  /**
89
- * iOS Modal Enter Animation for the Card presentation style
96
+ * Use y = mx + b to
97
+ * figure out the backdrop value
98
+ * at a particular x coordinate. This
99
+ * is useful when the backdrop does
100
+ * not begin to fade in until after
101
+ * the 0 breakpoint.
102
+ */
103
+ const getBackdropValueForSheet = (x, backdropBreakpoint) => {
104
+ /**
105
+ * We will use these points:
106
+ * (backdropBreakpoint, 0)
107
+ * (maxBreakpoint, 1)
108
+ * We know that at the beginning breakpoint,
109
+ * the backdrop will be hidden. We also
110
+ * know that at the maxBreakpoint, the backdrop
111
+ * must be fully visible. maxBreakpoint should
112
+ * always be 1 even if the maximum value
113
+ * of the breakpoints array is not 1 since
114
+ * the animation runs from a progress of 0
115
+ * to a progress of 1.
116
+ * m = (y2 - y1) / (x2 - x1)
117
+ *
118
+ * This is simplified from:
119
+ * m = (1 - 0) / (maxBreakpoint - backdropBreakpoint)
120
+ */
121
+ const slope = 1 / (1 - backdropBreakpoint);
122
+ /**
123
+ * From here, compute b which is
124
+ * the backdrop opacity if the offset
125
+ * is 0. If the backdrop does not
126
+ * begin to fade in until after the
127
+ * 0 breakpoint, this b value will be
128
+ * negative. This is fine as we never pass
129
+ * b directly into the animation keyframes.
130
+ * b = y - mx
131
+ * Use a known point: (backdropBreakpoint, 0)
132
+ * This is simplified from:
133
+ * b = 0 - (backdropBreakpoint * slope)
134
+ */
135
+ const b = -(backdropBreakpoint * slope);
136
+ /**
137
+ * Finally, we can now determine the
138
+ * backdrop offset given an arbitrary
139
+ * gesture offset.
140
+ */
141
+ return (x * slope) + b;
142
+ };
143
+
144
+ /*!
145
+ * (C) Ionic http://ionicframework.com - MIT License
146
+ */
147
+ const createSheetEnterAnimation = (opts) => {
148
+ const { currentBreakpoint, backdropBreakpoint } = opts;
149
+ /**
150
+ * If the backdropBreakpoint is undefined, then the backdrop
151
+ * should always fade in. If the backdropBreakpoint came before the
152
+ * current breakpoint, then the backdrop should be fading in.
153
+ */
154
+ const shouldShowBackdrop = backdropBreakpoint === undefined || backdropBreakpoint < currentBreakpoint;
155
+ const initialBackdrop = shouldShowBackdrop ? `calc(var(--backdrop-opacity) * ${currentBreakpoint})` : '0';
156
+ const backdropAnimation = createAnimation('backdropAnimation')
157
+ .fromTo('opacity', 0, initialBackdrop);
158
+ if (shouldShowBackdrop) {
159
+ backdropAnimation
160
+ .beforeStyles({
161
+ 'pointer-events': 'none'
162
+ })
163
+ .afterClearStyles(['pointer-events']);
164
+ }
165
+ const wrapperAnimation = createAnimation('wrapperAnimation')
166
+ .keyframes([
167
+ { offset: 0, opacity: 1, transform: 'translateY(100%)' },
168
+ { offset: 1, opacity: 1, transform: `translateY(${100 - (currentBreakpoint * 100)}%)` }
169
+ ]);
170
+ return { wrapperAnimation, backdropAnimation };
171
+ };
172
+ const createSheetLeaveAnimation = (opts) => {
173
+ const { currentBreakpoint, backdropBreakpoint } = opts;
174
+ /**
175
+ * Backdrop does not always fade in from 0 to 1 if backdropBreakpoint
176
+ * is defined, so we need to account for that offset by figuring out
177
+ * what the current backdrop value should be.
178
+ */
179
+ const backdropValue = `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(currentBreakpoint, backdropBreakpoint)})`;
180
+ const defaultBackdrop = [
181
+ { offset: 0, opacity: backdropValue },
182
+ { offset: 1, opacity: 0 }
183
+ ];
184
+ const customBackdrop = [
185
+ { offset: 0, opacity: backdropValue },
186
+ { offset: backdropBreakpoint, opacity: 0 },
187
+ { offset: 1, opacity: 0 }
188
+ ];
189
+ const backdropAnimation = createAnimation('backdropAnimation')
190
+ .keyframes(backdropBreakpoint !== 0 ? customBackdrop : defaultBackdrop);
191
+ const wrapperAnimation = createAnimation('wrapperAnimation')
192
+ .keyframes([
193
+ { offset: 0, opacity: 1, transform: `translateY(${100 - (currentBreakpoint * 100)}%)` },
194
+ { offset: 1, opacity: 1, transform: `translateY(100%)` }
195
+ ]);
196
+ return { wrapperAnimation, backdropAnimation };
197
+ };
198
+
199
+ /*!
200
+ * (C) Ionic http://ionicframework.com - MIT License
90
201
  */
91
- const iosEnterAnimation = (baseEl, presentingEl) => {
202
+ const createEnterAnimation$1 = () => {
92
203
  const backdropAnimation = createAnimation()
93
- .addElement(baseEl.querySelector('ion-backdrop'))
94
204
  .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
95
205
  .beforeStyles({
96
206
  'pointer-events': 'none'
97
207
  })
98
208
  .afterClearStyles(['pointer-events']);
99
209
  const wrapperAnimation = createAnimation()
100
- .addElement(baseEl.querySelectorAll('.modal-wrapper, .modal-shadow'))
101
- .beforeStyles({ 'opacity': 1 })
102
210
  .fromTo('transform', 'translateY(100vh)', 'translateY(0vh)');
103
- const baseAnimation = createAnimation()
211
+ return { backdropAnimation, wrapperAnimation };
212
+ };
213
+ /**
214
+ * iOS Modal Enter Animation for the Card presentation style
215
+ */
216
+ const iosEnterAnimation = (baseEl, opts) => {
217
+ const { presentingEl, currentBreakpoint } = opts;
218
+ const root = getElementRoot(baseEl);
219
+ const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation$1();
220
+ backdropAnimation
221
+ .addElement(root.querySelector('ion-backdrop'));
222
+ wrapperAnimation
223
+ .addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow'))
224
+ .beforeStyles({ 'opacity': 1 });
225
+ const baseAnimation = createAnimation('entering-base')
104
226
  .addElement(baseEl)
105
227
  .easing('cubic-bezier(0.32,0.72,0,1)')
106
228
  .duration(500)
@@ -108,6 +230,7 @@ const iosEnterAnimation = (baseEl, presentingEl) => {
108
230
  if (presentingEl) {
109
231
  const isMobile = window.innerWidth < 768;
110
232
  const hasCardModal = (presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined);
233
+ const presentingElRoot = getElementRoot(presentingEl);
111
234
  const presentingAnimation = createAnimation()
112
235
  .beforeStyles({
113
236
  'transform': 'translateY(0)',
@@ -119,7 +242,7 @@ const iosEnterAnimation = (baseEl, presentingEl) => {
119
242
  /**
120
243
  * Fallback for browsers that does not support `max()` (ex: Firefox)
121
244
  * No need to worry about statusbar padding since engines like Gecko
122
- * are not used as the engine for standlone Cordova/Capacitor apps
245
+ * are not used as the engine for standalone Cordova/Capacitor apps
123
246
  */
124
247
  const transformOffset = (!CSS.supports('width', 'max(0px, 1px)')) ? '30px' : 'max(30px, var(--ion-safe-area-top))';
125
248
  const modalTransform = hasCardModal ? '-10px' : transformOffset;
@@ -149,7 +272,7 @@ const iosEnterAnimation = (baseEl, presentingEl) => {
149
272
  .afterStyles({
150
273
  'transform': finalTransform
151
274
  })
152
- .addElement(presentingEl.querySelector('.modal-wrapper'))
275
+ .addElement(presentingElRoot.querySelector('.modal-wrapper'))
153
276
  .keyframes([
154
277
  { offset: 0, filter: 'contrast(1)', transform: 'translateY(0) scale(1)' },
155
278
  { offset: 1, filter: 'contrast(0.85)', transform: finalTransform }
@@ -158,7 +281,7 @@ const iosEnterAnimation = (baseEl, presentingEl) => {
158
281
  .afterStyles({
159
282
  'transform': finalTransform
160
283
  })
161
- .addElement(presentingEl.querySelector('.modal-shadow'))
284
+ .addElement(presentingElRoot.querySelector('.modal-shadow'))
162
285
  .keyframes([
163
286
  { offset: 0, opacity: '1', transform: 'translateY(0) scale(1)' },
164
287
  { offset: 1, opacity: '0', transform: finalTransform }
@@ -173,18 +296,28 @@ const iosEnterAnimation = (baseEl, presentingEl) => {
173
296
  return baseAnimation;
174
297
  };
175
298
 
176
- /**
177
- * iOS Modal Leave Animation
299
+ /*!
300
+ * (C) Ionic http://ionicframework.com - MIT License
178
301
  */
179
- const iosLeaveAnimation = (baseEl, presentingEl, duration = 500) => {
302
+ const createLeaveAnimation$1 = () => {
180
303
  const backdropAnimation = createAnimation()
181
- .addElement(baseEl.querySelector('ion-backdrop'))
182
- .fromTo('opacity', 'var(--backdrop-opacity)', 0.0);
304
+ .fromTo('opacity', 'var(--backdrop-opacity)', 0);
183
305
  const wrapperAnimation = createAnimation()
184
- .addElement(baseEl.querySelectorAll('.modal-wrapper, .modal-shadow'))
185
- .beforeStyles({ 'opacity': 1 })
186
306
  .fromTo('transform', 'translateY(0vh)', 'translateY(100vh)');
187
- const baseAnimation = createAnimation()
307
+ return { backdropAnimation, wrapperAnimation };
308
+ };
309
+ /**
310
+ * iOS Modal Leave Animation
311
+ */
312
+ const iosLeaveAnimation = (baseEl, opts, duration = 500) => {
313
+ const { presentingEl, currentBreakpoint } = opts;
314
+ const root = getElementRoot(baseEl);
315
+ const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation$1();
316
+ backdropAnimation.addElement(root.querySelector('ion-backdrop'));
317
+ wrapperAnimation
318
+ .addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow'))
319
+ .beforeStyles({ 'opacity': 1 });
320
+ const baseAnimation = createAnimation('leaving-base')
188
321
  .addElement(baseEl)
189
322
  .easing('cubic-bezier(0.32,0.72,0,1)')
190
323
  .duration(duration)
@@ -192,6 +325,7 @@ const iosLeaveAnimation = (baseEl, presentingEl, duration = 500) => {
192
325
  if (presentingEl) {
193
326
  const isMobile = window.innerWidth < 768;
194
327
  const hasCardModal = (presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined);
328
+ const presentingElRoot = getElementRoot(presentingEl);
195
329
  const presentingAnimation = createAnimation()
196
330
  .beforeClearStyles(['transform'])
197
331
  .afterClearStyles(['transform'])
@@ -229,7 +363,7 @@ const iosLeaveAnimation = (baseEl, presentingEl, duration = 500) => {
229
363
  const toPresentingScale = (hasCardModal) ? SwipeToCloseDefaults.MIN_PRESENTING_SCALE : 1;
230
364
  const finalTransform = `translateY(-10px) scale(${toPresentingScale})`;
231
365
  presentingAnimation
232
- .addElement(presentingEl.querySelector('.modal-wrapper'))
366
+ .addElement(presentingElRoot.querySelector('.modal-wrapper'))
233
367
  .afterStyles({
234
368
  'transform': 'translate3d(0, 0, 0)'
235
369
  })
@@ -238,7 +372,7 @@ const iosLeaveAnimation = (baseEl, presentingEl, duration = 500) => {
238
372
  { offset: 1, filter: 'contrast(1)', transform: 'translateY(0) scale(1)' }
239
373
  ]);
240
374
  const shadowAnimation = createAnimation()
241
- .addElement(presentingEl.querySelector('.modal-shadow'))
375
+ .addElement(presentingElRoot.querySelector('.modal-shadow'))
242
376
  .afterStyles({
243
377
  'transform': 'translateY(0) scale(1)'
244
378
  })
@@ -256,60 +390,293 @@ const iosLeaveAnimation = (baseEl, presentingEl, duration = 500) => {
256
390
  return baseAnimation;
257
391
  };
258
392
 
259
- /**
260
- * Md Modal Enter Animation
393
+ /*!
394
+ * (C) Ionic http://ionicframework.com - MIT License
261
395
  */
262
- const mdEnterAnimation = (baseEl) => {
263
- const baseAnimation = createAnimation();
264
- const backdropAnimation = createAnimation();
265
- const wrapperAnimation = createAnimation();
266
- backdropAnimation
267
- .addElement(baseEl.querySelector('ion-backdrop'))
396
+ const createEnterAnimation = () => {
397
+ const backdropAnimation = createAnimation()
268
398
  .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
269
399
  .beforeStyles({
270
400
  'pointer-events': 'none'
271
401
  })
272
402
  .afterClearStyles(['pointer-events']);
273
- wrapperAnimation
274
- .addElement(baseEl.querySelector('.modal-wrapper'))
403
+ const wrapperAnimation = createAnimation()
275
404
  .keyframes([
276
405
  { offset: 0, opacity: 0.01, transform: 'translateY(40px)' },
277
- { offset: 1, opacity: 1, transform: 'translateY(0px)' }
406
+ { offset: 1, opacity: 1, transform: `translateY(0px)` }
278
407
  ]);
279
- return baseAnimation
408
+ return { backdropAnimation, wrapperAnimation };
409
+ };
410
+ /**
411
+ * Md Modal Enter Animation
412
+ */
413
+ const mdEnterAnimation = (baseEl, opts) => {
414
+ const { currentBreakpoint } = opts;
415
+ const root = getElementRoot(baseEl);
416
+ const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
417
+ backdropAnimation
418
+ .addElement(root.querySelector('ion-backdrop'));
419
+ wrapperAnimation
420
+ .addElement(root.querySelector('.modal-wrapper'));
421
+ return createAnimation()
280
422
  .addElement(baseEl)
281
423
  .easing('cubic-bezier(0.36,0.66,0.04,1)')
282
424
  .duration(280)
283
425
  .addAnimation([backdropAnimation, wrapperAnimation]);
284
426
  };
285
427
 
286
- /**
287
- * Md Modal Leave Animation
428
+ /*!
429
+ * (C) Ionic http://ionicframework.com - MIT License
288
430
  */
289
- const mdLeaveAnimation = (baseEl) => {
290
- const baseAnimation = createAnimation();
291
- const backdropAnimation = createAnimation();
292
- const wrapperAnimation = createAnimation();
293
- const wrapperEl = baseEl.querySelector('.modal-wrapper');
294
- backdropAnimation
295
- .addElement(baseEl.querySelector('ion-backdrop'))
296
- .fromTo('opacity', 'var(--backdrop-opacity)', 0.0);
297
- wrapperAnimation
298
- .addElement(wrapperEl)
431
+ const createLeaveAnimation = () => {
432
+ const backdropAnimation = createAnimation()
433
+ .fromTo('opacity', 'var(--backdrop-opacity)', 0);
434
+ const wrapperAnimation = createAnimation()
299
435
  .keyframes([
300
- { offset: 0, opacity: 0.99, transform: 'translateY(0px)' },
436
+ { offset: 0, opacity: 0.99, transform: `translateY(0px)` },
301
437
  { offset: 1, opacity: 0, transform: 'translateY(40px)' }
302
438
  ]);
303
- return baseAnimation
304
- .addElement(baseEl)
439
+ return { backdropAnimation, wrapperAnimation };
440
+ };
441
+ /**
442
+ * Md Modal Leave Animation
443
+ */
444
+ const mdLeaveAnimation = (baseEl, opts) => {
445
+ const { currentBreakpoint } = opts;
446
+ const root = getElementRoot(baseEl);
447
+ const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation();
448
+ backdropAnimation.addElement(root.querySelector('ion-backdrop'));
449
+ wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
450
+ return createAnimation()
305
451
  .easing('cubic-bezier(0.47,0,0.745,0.715)')
306
452
  .duration(200)
307
453
  .addAnimation([backdropAnimation, wrapperAnimation]);
308
454
  };
309
455
 
310
- const modalIosCss = ".sc-ion-modal-ios-h{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-radius:0;--border-width:0;--border-style:none;--border-color:transparent;--background:var(--ion-background-color, #fff);--box-shadow:none;--backdrop-opacity:0;left:0;right:0;top:0;bottom:0;display:flex;position:absolute;align-items:center;justify-content:center;outline:none;contain:strict}.overlay-hidden.sc-ion-modal-ios-h{display:none}.modal-wrapper.sc-ion-modal-ios,.modal-shadow.sc-ion-modal-ios{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);box-shadow:var(--box-shadow);overflow:var(--overflow);z-index:10}.modal-shadow.sc-ion-modal-ios{position:absolute;background:transparent}@media only screen and (min-width: 768px) and (min-height: 600px){.sc-ion-modal-ios-h{--width:600px;--height:500px;--ion-safe-area-top:0px;--ion-safe-area-bottom:0px;--ion-safe-area-right:0px;--ion-safe-area-left:0px}}@media only screen and (min-width: 768px) and (min-height: 768px){.sc-ion-modal-ios-h{--width:600px;--height:600px}}.sc-ion-modal-ios-h:first-of-type{--backdrop-opacity:var(--ion-backdrop-opacity, 0.4)}@media only screen and (min-width: 768px) and (min-height: 600px){.sc-ion-modal-ios-h{--border-radius:10px}}.modal-wrapper.sc-ion-modal-ios{transform:translate3d(0, 100%, 0)}@media screen and (max-width: 767px){@supports (width: max(0px, 1px)){.modal-card.sc-ion-modal-ios-h{--height:calc(100% - max(30px, var(--ion-safe-area-top)) - 10px)}}@supports not (width: max(0px, 1px)){.modal-card.sc-ion-modal-ios-h{--height:calc(100% - 40px)}}.modal-card.sc-ion-modal-ios-h .modal-wrapper.sc-ion-modal-ios{border-top-left-radius:10px;border-top-right-radius:10px;border-bottom-right-radius:0;border-bottom-left-radius:0}[dir=rtl].sc-ion-modal-ios-h -no-combinator.modal-card.sc-ion-modal-ios-h .modal-wrapper.sc-ion-modal-ios,[dir=rtl] .sc-ion-modal-ios-h -no-combinator.modal-card.sc-ion-modal-ios-h .modal-wrapper.sc-ion-modal-ios,[dir=rtl].modal-card.sc-ion-modal-ios-h .modal-wrapper.sc-ion-modal-ios,[dir=rtl] .modal-card.sc-ion-modal-ios-h .modal-wrapper.sc-ion-modal-ios{border-top-left-radius:10px;border-top-right-radius:10px;border-bottom-right-radius:0;border-bottom-left-radius:0}.modal-card.sc-ion-modal-ios-h{--backdrop-opacity:0;--width:100%;align-items:flex-end}.modal-card.sc-ion-modal-ios-h .modal-shadow.sc-ion-modal-ios{display:none}.modal-card.sc-ion-modal-ios-h ion-backdrop.sc-ion-modal-ios{pointer-events:none}}@media screen and (min-width: 768px){.modal-card.sc-ion-modal-ios-h{--width:calc(100% - 120px);--height:calc(100% - (120px + var(--ion-safe-area-top) + var(--ion-safe-area-bottom)));--max-width:720px;--max-height:1000px}.modal-card.sc-ion-modal-ios-h{--backdrop-opacity:0;transition:all 0.5s ease-in-out}.modal-card.sc-ion-modal-ios-h:first-of-type{--backdrop-opacity:0.18}.modal-card.sc-ion-modal-ios-h .modal-shadow.sc-ion-modal-ios{box-shadow:0px 0px 30px 10px rgba(0, 0, 0, 0.1)}}";
456
+ /*!
457
+ * (C) Ionic http://ionicframework.com - MIT License
458
+ */
459
+ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], onDismiss, onBreakpointChange) => {
460
+ // Defaults for the sheet swipe animation
461
+ const defaultBackdrop = [
462
+ { offset: 0, opacity: 'var(--backdrop-opacity)' },
463
+ { offset: 1, opacity: 0.01 }
464
+ ];
465
+ const customBackdrop = [
466
+ { offset: 0, opacity: 'var(--backdrop-opacity)' },
467
+ { offset: 1 - backdropBreakpoint, opacity: 0 },
468
+ { offset: 1, opacity: 0 }
469
+ ];
470
+ const SheetDefaults = {
471
+ WRAPPER_KEYFRAMES: [
472
+ { offset: 0, transform: 'translateY(0%)' },
473
+ { offset: 1, transform: 'translateY(100%)' }
474
+ ],
475
+ BACKDROP_KEYFRAMES: (backdropBreakpoint !== 0) ? customBackdrop : defaultBackdrop
476
+ };
477
+ const contentEl = baseEl.querySelector('ion-content');
478
+ const height = wrapperEl.clientHeight;
479
+ let currentBreakpoint = initialBreakpoint;
480
+ let offset = 0;
481
+ const wrapperAnimation = animation.childAnimations.find(ani => ani.id === 'wrapperAnimation');
482
+ const backdropAnimation = animation.childAnimations.find(ani => ani.id === 'backdropAnimation');
483
+ const maxBreakpoint = breakpoints[breakpoints.length - 1];
484
+ const enableBackdrop = () => {
485
+ baseEl.style.setProperty('pointer-events', 'auto');
486
+ backdropEl.style.setProperty('pointer-events', 'auto');
487
+ /**
488
+ * When the backdrop is enabled, elements such
489
+ * as inputs should not be focusable outside
490
+ * the sheet.
491
+ */
492
+ baseEl.classList.remove('ion-disable-focus-trap');
493
+ };
494
+ const disableBackdrop = () => {
495
+ baseEl.style.setProperty('pointer-events', 'none');
496
+ backdropEl.style.setProperty('pointer-events', 'none');
497
+ /**
498
+ * When the backdrop is enabled, elements such
499
+ * as inputs should not be focusable outside
500
+ * the sheet.
501
+ * Adding this class disables focus trapping
502
+ * for the sheet temporarily.
503
+ */
504
+ baseEl.classList.add('ion-disable-focus-trap');
505
+ };
506
+ /**
507
+ * After the entering animation completes,
508
+ * we need to set the animation to go from
509
+ * offset 0 to offset 1 so that users can
510
+ * swipe in any direction. We then set the
511
+ * animation offset to the current breakpoint
512
+ * so there is no flickering.
513
+ */
514
+ if (wrapperAnimation && backdropAnimation) {
515
+ wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
516
+ backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
517
+ animation.progressStart(true, 1 - currentBreakpoint);
518
+ /**
519
+ * If backdrop is not enabled, then content
520
+ * behind modal should be clickable. To do this, we need
521
+ * to remove pointer-events from ion-modal as a whole.
522
+ * ion-backdrop and .modal-wrapper always have pointer-events: auto
523
+ * applied, so the modal content can still be interacted with.
524
+ */
525
+ const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint;
526
+ if (shouldEnableBackdrop) {
527
+ enableBackdrop();
528
+ }
529
+ else {
530
+ disableBackdrop();
531
+ }
532
+ }
533
+ if (contentEl && currentBreakpoint !== maxBreakpoint) {
534
+ contentEl.scrollY = false;
535
+ }
536
+ const canStart = (detail) => {
537
+ /**
538
+ * If the sheet is fully expanded and
539
+ * the user is swiping on the content,
540
+ * the gesture should not start to
541
+ * allow for scrolling on the content.
542
+ */
543
+ const content = detail.event.target.closest('ion-content');
544
+ if (currentBreakpoint === 1 && content) {
545
+ return false;
546
+ }
547
+ return true;
548
+ };
549
+ const onStart = () => {
550
+ /**
551
+ * If swiping on the content
552
+ * we should disable scrolling otherwise
553
+ * the sheet will expand and the content will scroll.
554
+ */
555
+ if (contentEl) {
556
+ contentEl.scrollY = false;
557
+ }
558
+ raf(() => {
559
+ /**
560
+ * Dismisses the open keyboard when the sheet drag gesture is started.
561
+ * Sets the focus onto the modal element.
562
+ */
563
+ baseEl.focus();
564
+ });
565
+ animation.progressStart(true, 1 - currentBreakpoint);
566
+ };
567
+ const onMove = (detail) => {
568
+ /**
569
+ * Given the change in gesture position on the Y axis,
570
+ * compute where the offset of the animation should be
571
+ * relative to where the user dragged.
572
+ */
573
+ const initialStep = 1 - currentBreakpoint;
574
+ offset = clamp(0.0001, initialStep + (detail.deltaY / height), 0.9999);
575
+ animation.progressStep(offset);
576
+ };
577
+ const onEnd = (detail) => {
578
+ /**
579
+ * When the gesture releases, we need to determine
580
+ * the closest breakpoint to snap to.
581
+ */
582
+ const velocity = detail.velocityY;
583
+ const threshold = (detail.deltaY + velocity * 100) / height;
584
+ const diff = currentBreakpoint - threshold;
585
+ const closest = breakpoints.reduce((a, b) => {
586
+ return Math.abs(b - diff) < Math.abs(a - diff) ? b : a;
587
+ });
588
+ const shouldRemainOpen = closest !== 0;
589
+ currentBreakpoint = 0;
590
+ /**
591
+ * Update the animation so that it plays from
592
+ * the last offset to the closest snap point.
593
+ */
594
+ if (wrapperAnimation && backdropAnimation) {
595
+ wrapperAnimation.keyframes([
596
+ { offset: 0, transform: `translateY(${offset * 100}%)` },
597
+ { offset: 1, transform: `translateY(${(1 - closest) * 100}%)` }
598
+ ]);
599
+ backdropAnimation.keyframes([
600
+ { offset: 0, opacity: `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(1 - offset, backdropBreakpoint)})` },
601
+ { offset: 1, opacity: `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(closest, backdropBreakpoint)})` }
602
+ ]);
603
+ animation.progressStep(0);
604
+ }
605
+ /**
606
+ * Gesture should remain disabled until the
607
+ * snapping animation completes.
608
+ */
609
+ gesture.enable(false);
610
+ animation
611
+ .onFinish(() => {
612
+ if (shouldRemainOpen) {
613
+ /**
614
+ * Once the snapping animation completes,
615
+ * we need to reset the animation to go
616
+ * from 0 to 1 so users can swipe in any direction.
617
+ * We then set the animation offset to the current
618
+ * breakpoint so that it starts at the snapped position.
619
+ */
620
+ if (wrapperAnimation && backdropAnimation) {
621
+ raf(() => {
622
+ wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
623
+ backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
624
+ animation.progressStart(true, 1 - closest);
625
+ currentBreakpoint = closest;
626
+ onBreakpointChange(currentBreakpoint);
627
+ /**
628
+ * If the sheet is fully expanded, we can safely
629
+ * enable scrolling again.
630
+ */
631
+ if (contentEl && currentBreakpoint === breakpoints[breakpoints.length - 1]) {
632
+ contentEl.scrollY = true;
633
+ }
634
+ /**
635
+ * Backdrop should become enabled
636
+ * after the backdropBreakpoint value
637
+ */
638
+ const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint;
639
+ if (shouldEnableBackdrop) {
640
+ enableBackdrop();
641
+ }
642
+ else {
643
+ disableBackdrop();
644
+ }
645
+ gesture.enable(true);
646
+ });
647
+ }
648
+ else {
649
+ gesture.enable(true);
650
+ }
651
+ }
652
+ /**
653
+ * This must be a one time callback
654
+ * otherwise a new callback will
655
+ * be added every time onEnd runs.
656
+ */
657
+ }, { oneTimeCallback: true })
658
+ .progressEnd(1, 0, 500);
659
+ if (!shouldRemainOpen) {
660
+ onDismiss();
661
+ }
662
+ };
663
+ const gesture = createGesture({
664
+ el: wrapperEl,
665
+ gestureName: 'modalSheet',
666
+ gesturePriority: 40,
667
+ direction: 'y',
668
+ threshold: 10,
669
+ canStart,
670
+ onStart,
671
+ onMove,
672
+ onEnd
673
+ });
674
+ return gesture;
675
+ };
676
+
677
+ const modalIosCss = ":host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-radius:0;--border-width:0;--border-style:none;--border-color:transparent;--background:var(--ion-background-color, #fff);--box-shadow:none;--backdrop-opacity:0;left:0;right:0;top:0;bottom:0;display:flex;position:absolute;align-items:center;justify-content:center;outline:none;contain:strict}.modal-wrapper,ion-backdrop{pointer-events:auto}:host(.overlay-hidden){display:none}.modal-wrapper,.modal-shadow{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);box-shadow:var(--box-shadow);overflow:var(--overflow);z-index:10}.modal-shadow{position:absolute;background:transparent}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--width:600px;--height:500px;--ion-safe-area-top:0px;--ion-safe-area-bottom:0px;--ion-safe-area-right:0px;--ion-safe-area-left:0px}}@media only screen and (min-width: 768px) and (min-height: 768px){:host{--width:600px;--height:600px}}.modal-handle{left:0px;right:0px;top:5px;border-radius:8px;margin-left:auto;margin-right:auto;position:absolute;width:36px;height:5px;transform:translateZ(0);background:var(--ion-color-step-350, #c0c0be);z-index:11}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){.modal-handle{margin-left:unset;margin-right:unset;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto}}:host(.modal-sheet){--height:calc(100% - (var(--ion-safe-area-top) + 10px))}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}:host{--backdrop-opacity:var(--ion-backdrop-opacity, 0.4)}:host(.modal-card),:host(.modal-sheet){--border-radius:10px}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--border-radius:10px}}.modal-wrapper{transform:translate3d(0, 100%, 0)}@media screen and (max-width: 767px){@supports (width: max(0px, 1px)){:host(.modal-card){--height:calc(100% - max(30px, var(--ion-safe-area-top)) - 10px)}}@supports not (width: max(0px, 1px)){:host(.modal-card){--height:calc(100% - 40px)}}:host(.modal-card) .modal-wrapper{border-top-left-radius:var(--border-radius);border-top-right-radius:var(--border-radius);border-bottom-right-radius:0;border-bottom-left-radius:0}:host-context([dir=rtl]):host(.modal-card) .modal-wrapper,:host-context([dir=rtl]).modal-card .modal-wrapper{border-top-left-radius:var(--border-radius);border-top-right-radius:var(--border-radius);border-bottom-right-radius:0;border-bottom-left-radius:0}:host(.modal-card){--backdrop-opacity:0;--width:100%;align-items:flex-end}:host(.modal-card) .modal-shadow{display:none}:host(.modal-card) ion-backdrop{pointer-events:none}}@media screen and (min-width: 768px){:host(.modal-card){--width:calc(100% - 120px);--height:calc(100% - (120px + var(--ion-safe-area-top) + var(--ion-safe-area-bottom)));--max-width:720px;--max-height:1000px;--backdrop-opacity:0;--box-shadow:0px 0px 30px 10px rgba(0, 0, 0, 0.1);transition:all 0.5s ease-in-out}:host(.modal-card) .modal-wrapper{box-shadow:none}:host(.modal-card) .modal-shadow{box-shadow:var(--box-shadow)}}:host(.modal-sheet) .modal-wrapper{border-top-left-radius:var(--border-radius);border-top-right-radius:var(--border-radius);border-bottom-right-radius:0;border-bottom-left-radius:0}:host-context([dir=rtl]):host(.modal-sheet) .modal-wrapper,:host-context([dir=rtl]).modal-sheet .modal-wrapper{border-top-left-radius:var(--border-radius);border-top-right-radius:var(--border-radius);border-bottom-right-radius:0;border-bottom-left-radius:0}";
311
678
 
312
- const modalMdCss = ".sc-ion-modal-md-h{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-radius:0;--border-width:0;--border-style:none;--border-color:transparent;--background:var(--ion-background-color, #fff);--box-shadow:none;--backdrop-opacity:0;left:0;right:0;top:0;bottom:0;display:flex;position:absolute;align-items:center;justify-content:center;outline:none;contain:strict}.overlay-hidden.sc-ion-modal-md-h{display:none}.modal-wrapper.sc-ion-modal-md,.modal-shadow.sc-ion-modal-md{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);box-shadow:var(--box-shadow);overflow:var(--overflow);z-index:10}.modal-shadow.sc-ion-modal-md{position:absolute;background:transparent}@media only screen and (min-width: 768px) and (min-height: 600px){.sc-ion-modal-md-h{--width:600px;--height:500px;--ion-safe-area-top:0px;--ion-safe-area-bottom:0px;--ion-safe-area-right:0px;--ion-safe-area-left:0px}}@media only screen and (min-width: 768px) and (min-height: 768px){.sc-ion-modal-md-h{--width:600px;--height:600px}}.sc-ion-modal-md-h:first-of-type{--backdrop-opacity:var(--ion-backdrop-opacity, 0.32)}@media only screen and (min-width: 768px) and (min-height: 600px){.sc-ion-modal-md-h{--border-radius:2px}.sc-ion-modal-md-h:first-of-type{--box-shadow:0 28px 48px rgba(0, 0, 0, 0.4)}}.modal-wrapper.sc-ion-modal-md{transform:translate3d(0, 40px, 0);opacity:0.01}";
679
+ const modalMdCss = ":host{--width:100%;--min-width:auto;--max-width:auto;--height:100%;--min-height:auto;--max-height:auto;--overflow:hidden;--border-radius:0;--border-width:0;--border-style:none;--border-color:transparent;--background:var(--ion-background-color, #fff);--box-shadow:none;--backdrop-opacity:0;left:0;right:0;top:0;bottom:0;display:flex;position:absolute;align-items:center;justify-content:center;outline:none;contain:strict}.modal-wrapper,ion-backdrop{pointer-events:auto}:host(.overlay-hidden){display:none}.modal-wrapper,.modal-shadow{border-radius:var(--border-radius);width:var(--width);min-width:var(--min-width);max-width:var(--max-width);height:var(--height);min-height:var(--min-height);max-height:var(--max-height);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);box-shadow:var(--box-shadow);overflow:var(--overflow);z-index:10}.modal-shadow{position:absolute;background:transparent}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--width:600px;--height:500px;--ion-safe-area-top:0px;--ion-safe-area-bottom:0px;--ion-safe-area-right:0px;--ion-safe-area-left:0px}}@media only screen and (min-width: 768px) and (min-height: 768px){:host{--width:600px;--height:600px}}.modal-handle{left:0px;right:0px;top:5px;border-radius:8px;margin-left:auto;margin-right:auto;position:absolute;width:36px;height:5px;transform:translateZ(0);background:var(--ion-color-step-350, #c0c0be);z-index:11}@supports (margin-inline-start: 0) or (-webkit-margin-start: 0){.modal-handle{margin-left:unset;margin-right:unset;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto}}:host(.modal-sheet){--height:calc(100% - (var(--ion-safe-area-top) + 10px))}:host(.modal-sheet) .modal-wrapper,:host(.modal-sheet) .modal-shadow{position:absolute;bottom:0}:host{--backdrop-opacity:var(--ion-backdrop-opacity, 0.32)}@media only screen and (min-width: 768px) and (min-height: 600px){:host{--border-radius:2px;--box-shadow:0 28px 48px rgba(0, 0, 0, 0.4)}}.modal-wrapper{transform:translate3d(0, 40px, 0);opacity:0.01}";
313
680
 
314
681
  const Modal = class {
315
682
  constructor(hostRef) {
@@ -318,13 +685,33 @@ const Modal = class {
318
685
  this.willPresent = createEvent(this, "ionModalWillPresent", 7);
319
686
  this.willDismiss = createEvent(this, "ionModalWillDismiss", 7);
320
687
  this.didDismiss = createEvent(this, "ionModalDidDismiss", 7);
688
+ this.didPresentShorthand = createEvent(this, "didPresent", 7);
689
+ this.willPresentShorthand = createEvent(this, "willPresent", 7);
690
+ this.willDismissShorthand = createEvent(this, "willDismiss", 7);
691
+ this.didDismissShorthand = createEvent(this, "didDismiss", 7);
692
+ this.modalIndex = modalIds++;
693
+ this.coreDelegate = CoreDelegate();
694
+ this.isSheetModal = false;
695
+ this.inline = false;
321
696
  // Whether or not modal is being dismissed via gesture
322
697
  this.gestureAnimationDismissing = false;
323
698
  this.presented = false;
699
+ /** @internal */
700
+ this.hasController = false;
324
701
  /**
325
702
  * If `true`, the keyboard will be automatically dismissed when the overlay is presented.
326
703
  */
327
704
  this.keyboardClose = true;
705
+ /**
706
+ * A decimal value between 0 and 1 that indicates the
707
+ * point after which the backdrop will begin to fade in
708
+ * when using a sheet modal. Prior to this point, the
709
+ * backdrop will be hidden and the content underneath
710
+ * the sheet can be interacted with. This value is exclusive
711
+ * meaning the backdrop will become active after the value
712
+ * specified.
713
+ */
714
+ this.backdropBreakpoint = 0;
328
715
  /**
329
716
  * If `true`, the modal will be dismissed when the backdrop is clicked.
330
717
  */
@@ -341,6 +728,34 @@ const Modal = class {
341
728
  * If `true`, the modal can be swiped to dismiss. Only applies in iOS mode.
342
729
  */
343
730
  this.swipeToClose = false;
731
+ /**
732
+ * If `true`, the modal will open. If `false`, the modal will close.
733
+ * Use this if you need finer grained control over presentation, otherwise
734
+ * just use the modalController or the `trigger` property.
735
+ * Note: `isOpen` will not automatically be set back to `false` when
736
+ * the modal dismisses. You will need to do that in your code.
737
+ */
738
+ this.isOpen = false;
739
+ this.configureTriggerInteraction = () => {
740
+ const { trigger, el, destroyTriggerInteraction } = this;
741
+ if (destroyTriggerInteraction) {
742
+ destroyTriggerInteraction();
743
+ }
744
+ const triggerEl = (trigger !== undefined) ? document.getElementById(trigger) : null;
745
+ if (!triggerEl) {
746
+ return;
747
+ }
748
+ const configureTriggerInteraction = (trigEl, modalEl) => {
749
+ const openModal = () => {
750
+ modalEl.present();
751
+ };
752
+ trigEl.addEventListener('click', openModal);
753
+ return () => {
754
+ trigEl.removeEventListener('click', openModal);
755
+ };
756
+ };
757
+ this.destroyTriggerInteraction = configureTriggerInteraction(triggerEl, el);
758
+ };
344
759
  this.onBackdropTap = () => {
345
760
  this.dismiss(undefined, BACKDROP);
346
761
  };
@@ -362,6 +777,17 @@ const Modal = class {
362
777
  }
363
778
  };
364
779
  }
780
+ onIsOpenChange(newValue, oldValue) {
781
+ if (newValue === true && oldValue === false) {
782
+ this.present();
783
+ }
784
+ else if (newValue === false && oldValue === true) {
785
+ this.dismiss();
786
+ }
787
+ }
788
+ onTriggerChange() {
789
+ this.configureTriggerInteraction();
790
+ }
365
791
  swipeToCloseChanged(enable) {
366
792
  if (this.gesture) {
367
793
  this.gesture.enable(enable);
@@ -373,6 +799,58 @@ const Modal = class {
373
799
  connectedCallback() {
374
800
  prepareOverlay(this.el);
375
801
  }
802
+ componentWillLoad() {
803
+ const { breakpoints, initialBreakpoint } = this;
804
+ /**
805
+ * If user has custom ID set then we should
806
+ * not assign the default incrementing ID.
807
+ */
808
+ this.modalId = (this.el.hasAttribute('id')) ? this.el.getAttribute('id') : `ion-modal-${this.modalIndex}`;
809
+ this.isSheetModal = breakpoints !== undefined && initialBreakpoint !== undefined;
810
+ if (breakpoints !== undefined && initialBreakpoint !== undefined && !breakpoints.includes(initialBreakpoint)) {
811
+ console.warn('[Ionic Warning]: Your breakpoints array must include the initialBreakpoint value.');
812
+ }
813
+ }
814
+ componentDidLoad() {
815
+ /**
816
+ * If modal was rendered with isOpen="true"
817
+ * then we should open modal immediately.
818
+ */
819
+ if (this.isOpen === true) {
820
+ raf(() => this.present());
821
+ }
822
+ this.configureTriggerInteraction();
823
+ }
824
+ /**
825
+ * Determines whether or not an overlay
826
+ * is being used inline or via a controller/JS
827
+ * and returns the correct delegate.
828
+ * By default, subsequent calls to getDelegate
829
+ * will use a cached version of the delegate.
830
+ * This is useful for calling dismiss after
831
+ * present so that the correct delegate is given.
832
+ */
833
+ getDelegate(force = false) {
834
+ if (this.workingDelegate && !force) {
835
+ return {
836
+ delegate: this.workingDelegate,
837
+ inline: this.inline
838
+ };
839
+ }
840
+ /**
841
+ * If using overlay inline
842
+ * we potentially need to use the coreDelegate
843
+ * so that this works in vanilla JS apps.
844
+ * If a developer has presented this component
845
+ * via a controller, then we can assume
846
+ * the component is already in the
847
+ * correct place.
848
+ */
849
+ const parentEl = this.el.parentNode;
850
+ const inline = this.inline = parentEl !== null && !this.hasController;
851
+ const delegate = this.workingDelegate = (inline) ? this.delegate || this.coreDelegate : this.delegate;
852
+ return { inline, delegate };
853
+ }
376
854
  /**
377
855
  * Present the modal overlay after it has been created.
378
856
  */
@@ -380,18 +858,54 @@ const Modal = class {
380
858
  if (this.presented) {
381
859
  return;
382
860
  }
383
- const container = this.el.querySelector(`.modal-wrapper`);
384
- if (!container) {
385
- throw new Error('container is undefined');
861
+ /**
862
+ * When using an inline modal
863
+ * and dismissing a modal it is possible to
864
+ * quickly present the modal while it is
865
+ * dismissing. We need to await any current
866
+ * transition to allow the dismiss to finish
867
+ * before presenting again.
868
+ */
869
+ if (this.currentTransition !== undefined) {
870
+ await this.currentTransition;
386
871
  }
387
- const componentProps = Object.assign(Object.assign({}, this.componentProps), { modal: this.el });
388
- this.usersElement = await attachComponent(this.delegate, container, this.component, ['ion-page'], componentProps);
872
+ const data = Object.assign(Object.assign({}, this.componentProps), { modal: this.el });
873
+ const { inline, delegate } = this.getDelegate(true);
874
+ this.usersElement = await attachComponent(delegate, this.el, this.component, ['ion-page'], data, inline);
389
875
  await deepReady(this.usersElement);
390
876
  writeTask(() => this.el.classList.add('show-modal'));
391
- await present(this, 'modalEnter', iosEnterAnimation, mdEnterAnimation, this.presentingElement);
392
- if (this.swipeToClose) {
877
+ this.currentTransition = present(this, 'modalEnter', iosEnterAnimation, mdEnterAnimation, { presentingEl: this.presentingElement, currentBreakpoint: this.initialBreakpoint, backdropBreakpoint: this.backdropBreakpoint });
878
+ await this.currentTransition;
879
+ if (this.isSheetModal) {
880
+ this.initSheetGesture();
881
+ }
882
+ else if (this.swipeToClose) {
393
883
  this.initSwipeToClose();
394
884
  }
885
+ /* tslint:disable-next-line */
886
+ if (typeof window !== 'undefined') {
887
+ this.keyboardOpenCallback = () => {
888
+ if (this.gesture) {
889
+ /**
890
+ * When the native keyboard is opened and the webview
891
+ * is resized, the gesture implementation will become unresponsive
892
+ * and enter a free-scroll mode.
893
+ *
894
+ * When the keyboard is opened, we disable the gesture for
895
+ * a single frame and re-enable once the contents have repositioned
896
+ * from the keyboard placement.
897
+ */
898
+ this.gesture.enable(false);
899
+ raf(() => {
900
+ if (this.gesture) {
901
+ this.gesture.enable(true);
902
+ }
903
+ });
904
+ }
905
+ };
906
+ window.addEventListener(KEYBOARD_DID_OPEN, this.keyboardOpenCallback);
907
+ }
908
+ this.currentTransition = undefined;
395
909
  }
396
910
  initSwipeToClose() {
397
911
  if (getIonMode(this) !== 'ios') {
@@ -401,7 +915,7 @@ const Modal = class {
401
915
  // should be in the DOM and referenced by now, except
402
916
  // for the presenting el
403
917
  const animationBuilder = this.leaveAnimation || config.get('modalLeave', iosLeaveAnimation);
404
- const ani = this.animation = animationBuilder(this.el, this.presentingElement);
918
+ const ani = this.animation = animationBuilder(this.el, { presentingEl: this.presentingElement });
405
919
  this.gesture = createSwipeToCloseGesture(this.el, ani, () => {
406
920
  /**
407
921
  * While the gesture animation is finishing
@@ -421,6 +935,37 @@ const Modal = class {
421
935
  });
422
936
  this.gesture.enable(true);
423
937
  }
938
+ initSheetGesture() {
939
+ var _a;
940
+ const { wrapperEl, initialBreakpoint, backdropBreakpoint } = this;
941
+ if (!wrapperEl || initialBreakpoint === undefined) {
942
+ return;
943
+ }
944
+ const animationBuilder = this.enterAnimation || config.get('modalEnter', iosEnterAnimation);
945
+ const ani = this.animation = animationBuilder(this.el, { presentingEl: this.presentingElement, currentBreakpoint: initialBreakpoint, backdropBreakpoint });
946
+ ani.progressStart(true, 1);
947
+ const sortedBreakpoints = ((_a = this.breakpoints) === null || _a === void 0 ? void 0 : _a.sort((a, b) => a - b)) || [];
948
+ this.gesture = createSheetGesture(this.el, this.backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, ani, sortedBreakpoints, () => {
949
+ /**
950
+ * While the gesture animation is finishing
951
+ * it is possible for a user to tap the backdrop.
952
+ * This would result in the dismiss animation
953
+ * being played again. Typically this is avoided
954
+ * by setting `presented = false` on the overlay
955
+ * component; however, we cannot do that here as
956
+ * that would prevent the element from being
957
+ * removed from the DOM.
958
+ */
959
+ this.gestureAnimationDismissing = true;
960
+ this.animation.onFinish(async () => {
961
+ await this.dismiss(undefined, 'gesture');
962
+ this.gestureAnimationDismissing = false;
963
+ });
964
+ }, (breakpoint) => {
965
+ this.currentBreakpoint = breakpoint;
966
+ });
967
+ this.gesture.enable(true);
968
+ }
424
969
  /**
425
970
  * Dismiss the modal overlay after it has been presented.
426
971
  *
@@ -431,15 +976,37 @@ const Modal = class {
431
976
  if (this.gestureAnimationDismissing && role !== 'gesture') {
432
977
  return false;
433
978
  }
979
+ /* tslint:disable-next-line */
980
+ if (typeof window !== 'undefined' && this.keyboardOpenCallback) {
981
+ window.removeEventListener(KEYBOARD_DID_OPEN, this.keyboardOpenCallback);
982
+ }
983
+ /**
984
+ * When using an inline modal
985
+ * and presenting a modal it is possible to
986
+ * quickly dismiss the modal while it is
987
+ * presenting. We need to await any current
988
+ * transition to allow the present to finish
989
+ * before dismissing again.
990
+ */
991
+ if (this.currentTransition !== undefined) {
992
+ await this.currentTransition;
993
+ }
434
994
  const enteringAnimation = activeAnimations.get(this) || [];
435
- const dismissed = await dismiss(this, data, role, 'modalLeave', iosLeaveAnimation, mdLeaveAnimation, this.presentingElement);
995
+ this.currentTransition = dismiss(this, data, role, 'modalLeave', iosLeaveAnimation, mdLeaveAnimation, { presentingEl: this.presentingElement, currentBreakpoint: this.currentBreakpoint || this.initialBreakpoint, backdropBreakpoint: this.backdropBreakpoint });
996
+ const dismissed = await this.currentTransition;
436
997
  if (dismissed) {
437
- await detachComponent(this.delegate, this.usersElement);
998
+ const { delegate } = this.getDelegate();
999
+ await detachComponent(delegate, this.usersElement);
1000
+ writeTask(() => this.el.classList.remove('show-modal'));
438
1001
  if (this.animation) {
439
1002
  this.animation.destroy();
440
1003
  }
1004
+ if (this.gesture) {
1005
+ this.gesture.destroy();
1006
+ }
441
1007
  enteringAnimation.forEach(ani => ani.destroy());
442
1008
  }
1009
+ this.currentTransition = undefined;
443
1010
  this.animation = undefined;
444
1011
  return dismissed;
445
1012
  }
@@ -456,13 +1023,19 @@ const Modal = class {
456
1023
  return eventMethod(this.el, 'ionModalWillDismiss');
457
1024
  }
458
1025
  render() {
1026
+ const { handle, isSheetModal, presentingElement, htmlAttributes } = this;
1027
+ const showHandle = handle !== false && isSheetModal;
459
1028
  const mode = getIonMode(this);
460
- return (h(Host, { "no-router": true, "aria-modal": "true", tabindex: "-1", class: Object.assign({ [mode]: true, [`modal-card`]: this.presentingElement !== undefined && mode === 'ios' }, getClassMap(this.cssClass)), style: {
1029
+ const { modalId } = this;
1030
+ const isCardModal = presentingElement !== undefined && mode === 'ios';
1031
+ return (h(Host, Object.assign({ "no-router": true, "aria-modal": "true", tabindex: "-1" }, htmlAttributes, { style: {
461
1032
  zIndex: `${20000 + this.overlayIndex}`,
462
- }, onIonBackdropTap: this.onBackdropTap, onIonDismiss: this.onDismiss, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle }, h("ion-backdrop", { visible: this.showBackdrop, tappable: this.backdropDismiss }), mode === 'ios' && h("div", { class: "modal-shadow" }), h("div", { tabindex: "0" }), h("div", { role: "dialog", class: "modal-wrapper ion-overlay-wrapper" }), h("div", { tabindex: "0" })));
1033
+ }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, 'overlay-hidden': true }, getClassMap(this.cssClass)), id: modalId, onIonBackdropTap: this.onBackdropTap, onIonDismiss: this.onDismiss, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle }), h("ion-backdrop", { ref: el => this.backdropEl = el, visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && h("div", { class: "modal-shadow" }), h("div", { role: "dialog", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: el => this.wrapperEl = el }, showHandle && h("div", { class: "modal-handle", part: "handle" }), h("slot", null))));
463
1034
  }
464
1035
  get el() { return getElement(this); }
465
1036
  static get watchers() { return {
1037
+ "isOpen": ["onIsOpenChange"],
1038
+ "trigger": ["onTriggerChange"],
466
1039
  "swipeToClose": ["swipeToCloseChanged"]
467
1040
  }; }
468
1041
  };
@@ -472,6 +1045,7 @@ const LIFECYCLE_MAP = {
472
1045
  'ionModalWillDismiss': 'ionViewWillLeave',
473
1046
  'ionModalDidDismiss': 'ionViewDidLeave',
474
1047
  };
1048
+ let modalIds = 0;
475
1049
  Modal.style = {
476
1050
  ios: modalIosCss,
477
1051
  md: modalMdCss