@sparkle-learning/core 0.0.27 → 0.0.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (697) hide show
  1. package/dist/cjs/{PrivateRoute-cee9b061.js → PrivateRoute-043bb7d3.js} +6 -40
  2. package/dist/cjs/{active-router-3bd7b540.js → active-router-eedb3bfe.js} +1 -1
  3. package/dist/cjs/{animation-05337433.js → animation-6132e37f.js} +28 -4
  4. package/dist/cjs/app-globals-9869bf67.js +9 -0
  5. package/dist/cjs/{auth.store-aba3d22f.js → auth.store-ff3fda09.js} +1869 -357
  6. package/dist/cjs/compass-svg.cjs.entry.js +1 -1
  7. package/dist/cjs/context-consumer.cjs.entry.js +1 -1
  8. package/dist/cjs/course-select.cjs.entry.js +1 -1
  9. package/dist/cjs/{cubic-bezier-24e309bf.js → cubic-bezier-293f4663.js} +3 -0
  10. package/dist/cjs/dir-5af5259a.js +20 -0
  11. package/dist/cjs/{facilitator.service-e1e2f719.js → facilitator.service-faac5c0c.js} +1 -1
  12. package/dist/cjs/feed.service-66405969.js +124 -0
  13. package/dist/cjs/focus-visible-ad3828a7.js +63 -0
  14. package/dist/cjs/framework-delegate-2470a246.js +113 -0
  15. package/dist/cjs/{gesture-controller-e824cfb3.js → gesture-controller-07c31f70.js} +3 -0
  16. package/dist/cjs/{haptic-415dac5b.js → haptic-91e86eb7.js} +3 -0
  17. package/dist/cjs/{hardware-back-button-ca468aae.js → hardware-back-button-f7b5d99e.js} +3 -0
  18. package/dist/cjs/header-mobile-collapse_61.cjs.entry.js +18001 -0
  19. package/dist/cjs/{helpers-26770c32.js → helpers-7e28976c.js} +122 -3
  20. package/dist/cjs/{icons-a0fef92b.js → icons-b8a2231a.js} +1 -1
  21. package/dist/cjs/{index-427d03fb.js → index-185f9c5a.js} +3 -0
  22. package/dist/cjs/{index-6eff209d.js → index-43642662.js} +24 -3
  23. package/dist/cjs/{index-7bcd36a0.js → index-459a5fa9.js} +20 -4
  24. package/dist/cjs/index-8540d72e.js +42 -0
  25. package/dist/cjs/{index-58b3ee93.js → index-b12edb26.js} +34 -5
  26. package/dist/cjs/{index-fbf4d3bf.js → index-bae2a754.js} +303 -207
  27. package/dist/cjs/index.cjs.js +8 -7
  28. package/dist/cjs/index.es-ef3efdfb.js +10671 -0
  29. package/dist/cjs/{input-shims-213e83f8.js → input-shims-6c442c9f.js} +34 -10
  30. package/dist/cjs/ion-accordion-group.cjs.entry.js +197 -0
  31. package/dist/cjs/ion-accordion.cjs.entry.js +340 -0
  32. package/dist/cjs/ion-action-sheet_4.cjs.entry.js +2203 -0
  33. package/dist/cjs/ion-app.cjs.entry.js +23 -8
  34. package/dist/cjs/ion-back-button.cjs.entry.js +14 -9
  35. package/dist/cjs/ion-backdrop.cjs.entry.js +3 -3
  36. package/dist/cjs/ion-badge.cjs.entry.js +3 -3
  37. package/dist/cjs/ion-breadcrumb.cjs.entry.js +103 -0
  38. package/dist/cjs/ion-breadcrumbs.cjs.entry.js +135 -0
  39. package/dist/cjs/ion-buttons_3.cjs.entry.js +7 -6
  40. package/dist/cjs/ion-card-header.cjs.entry.js +3 -3
  41. package/dist/cjs/ion-card-subtitle.cjs.entry.js +3 -3
  42. package/dist/cjs/ion-card-title.cjs.entry.js +3 -3
  43. package/dist/cjs/ion-chip.cjs.entry.js +3 -3
  44. package/dist/cjs/ion-content_2.cjs.entry.js +144 -56
  45. package/dist/cjs/ion-datetime.cjs.entry.js +1902 -779
  46. package/dist/cjs/ion-fab-button.cjs.entry.js +5 -4
  47. package/dist/cjs/ion-fab-list.cjs.entry.js +2 -2
  48. package/dist/cjs/ion-fab.cjs.entry.js +2 -2
  49. package/dist/cjs/ion-footer.cjs.entry.js +79 -4
  50. package/dist/cjs/ion-img.cjs.entry.js +33 -7
  51. package/dist/cjs/ion-infinite-scroll-content.cjs.entry.js +3 -3
  52. package/dist/cjs/ion-infinite-scroll.cjs.entry.js +4 -2
  53. package/dist/cjs/ion-item-divider.cjs.entry.js +3 -3
  54. package/dist/cjs/ion-item-group.cjs.entry.js +2 -2
  55. package/dist/cjs/ion-item-option.cjs.entry.js +4 -4
  56. package/dist/cjs/ion-item-options.cjs.entry.js +3 -3
  57. package/dist/cjs/ion-item-sliding.cjs.entry.js +52 -8
  58. package/dist/cjs/ion-loading.cjs.entry.js +23 -11
  59. package/dist/cjs/ion-menu-button.cjs.entry.js +17 -11
  60. package/dist/cjs/ion-menu-toggle.cjs.entry.js +7 -7
  61. package/dist/cjs/ion-menu.cjs.entry.js +141 -29
  62. package/dist/cjs/ion-modal.cjs.entry.js +649 -75
  63. package/dist/cjs/ion-nav-link.cjs.entry.js +4 -1
  64. package/dist/cjs/ion-nav.cjs.entry.js +140 -137
  65. package/dist/cjs/ion-picker-column-internal_2.cjs.entry.js +700 -0
  66. package/dist/cjs/ion-picker-column.cjs.entry.js +5 -5
  67. package/dist/cjs/ion-picker.cjs.entry.js +18 -11
  68. package/dist/cjs/ion-progress-bar.cjs.entry.js +17 -13
  69. package/dist/cjs/ion-refresher-content.cjs.entry.js +7 -6
  70. package/dist/cjs/ion-refresher.cjs.entry.js +83 -84
  71. package/dist/cjs/ion-reorder-group.cjs.entry.js +9 -8
  72. package/dist/cjs/ion-reorder.cjs.entry.js +5 -4
  73. package/dist/cjs/ion-route-redirect.cjs.entry.js +1 -1
  74. package/dist/cjs/ion-route.cjs.entry.js +1 -1
  75. package/dist/cjs/ion-router-link.cjs.entry.js +3 -3
  76. package/dist/cjs/ion-router-outlet.cjs.entry.js +50 -12
  77. package/dist/cjs/ion-router.cjs.entry.js +378 -234
  78. package/dist/cjs/ion-searchbar.cjs.entry.js +50 -17
  79. package/dist/cjs/ion-segment-button.cjs.entry.js +12 -9
  80. package/dist/cjs/ion-segment.cjs.entry.js +89 -10
  81. package/dist/cjs/ion-select_2.cjs.entry.js +64 -30
  82. package/dist/cjs/ion-skeleton-text.cjs.entry.js +4 -4
  83. package/dist/cjs/ion-slide.cjs.entry.js +2 -2
  84. package/dist/cjs/ion-slides.cjs.entry.js +19 -32
  85. package/dist/cjs/ion-split-pane.cjs.entry.js +8 -3
  86. package/dist/cjs/ion-tab-bar.cjs.entry.js +25 -12
  87. package/dist/cjs/ion-tab-button.cjs.entry.js +2 -2
  88. package/dist/cjs/ion-tab.cjs.entry.js +3 -2
  89. package/dist/cjs/ion-tabs.cjs.entry.js +1 -1
  90. package/dist/cjs/ion-textarea.cjs.entry.js +9 -8
  91. package/dist/cjs/ion-thumbnail.cjs.entry.js +2 -2
  92. package/dist/cjs/ion-toast.cjs.entry.js +37 -27
  93. package/dist/cjs/ion-toggle.cjs.entry.js +15 -15
  94. package/dist/cjs/ion-virtual-scroll.cjs.entry.js +13 -3
  95. package/dist/cjs/{ionic-global-4930d319.js → ionic-global-878073d1.js} +103 -77
  96. package/dist/cjs/{ios.transition-6e1fd3d6.js → ios.transition-c3bfb096.js} +8 -5
  97. package/dist/cjs/{keyboard-1dcbde6c.js → keyboard-dfd76ac3.js} +3 -0
  98. package/dist/cjs/loader.cjs.js +5 -5
  99. package/dist/cjs/localstorage.service-6346a41d.js +40 -0
  100. package/dist/cjs/{md.transition-3652ad78.js → md.transition-7eb9a1a7.js} +7 -4
  101. package/dist/cjs/{menu-toggle-util-a8fb4c56.js → menu-toggle-util-cb549c2c.js} +4 -1
  102. package/dist/cjs/{overlays-08a817ea.js → overlays-0a748609.js} +188 -47
  103. package/dist/cjs/{purify-596fc2d6.js → purify-d0ad2883.js} +187 -74
  104. package/dist/cjs/sparkle-animation-player.cjs.entry.js +56 -50
  105. package/dist/cjs/sparkle-character-intro.cjs.entry.js +26 -0
  106. package/dist/cjs/sparkle-code.cjs.entry.js +2 -2
  107. package/dist/cjs/sparkle-compass-post.cjs.entry.js +1 -1
  108. package/dist/cjs/sparkle-compass.cjs.entry.js +1 -1
  109. package/dist/cjs/sparkle-core.cjs.js +7 -7
  110. package/dist/cjs/sparkle-emoji.cjs.entry.js +1 -1
  111. package/dist/cjs/sparkle-facilitator-notes-form.cjs.entry.js +7 -7
  112. package/dist/cjs/sparkle-feed-post.cjs.entry.js +1 -1
  113. package/dist/cjs/sparkle-feedback.cjs.entry.js +7 -7
  114. package/dist/cjs/sparkle-goal-form.cjs.entry.js +15 -14
  115. package/dist/cjs/sparkle-gww-comment-list.cjs.entry.js +1 -1
  116. package/dist/cjs/sparkle-gww-graph.cjs.entry.js +1 -1
  117. package/dist/cjs/sparkle-lower-content-nav.cjs.entry.js +1 -1
  118. package/dist/cjs/sparkle-menu-collapsible.cjs.entry.js +2 -2
  119. package/dist/cjs/sparkle-modal-image.cjs.entry.js +1 -1
  120. package/dist/cjs/sparkle-notfound-page.cjs.entry.js +1 -1
  121. package/dist/cjs/sparkle-overlay.cjs.entry.js +1 -1
  122. package/dist/cjs/sparkle-poll.cjs.entry.js +1 -1
  123. package/dist/cjs/sparkle-quiz-container.cjs.entry.js +1 -1
  124. package/dist/cjs/sparkle-quiz-feedback_5.cjs.entry.js +1 -1
  125. package/dist/cjs/sparkle-quiz.cjs.entry.js +2 -2
  126. package/dist/cjs/sparkle-select.cjs.entry.js +1 -1
  127. package/dist/cjs/sparkle-sidebar.cjs.entry.js +1 -1
  128. package/dist/cjs/sparkle-tab.cjs.entry.js +1 -1
  129. package/dist/cjs/sparkle-table-of-contents.cjs.entry.js +1 -1
  130. package/dist/cjs/sparkle-tabs.cjs.entry.js +1 -1
  131. package/dist/cjs/sparkle-youtube.cjs.entry.js +2 -2
  132. package/dist/cjs/{spinner-configs-559523fd.js → spinner-configs-6f6b7ef0.js} +36 -1
  133. package/dist/cjs/status-tap-8697433c.js +40 -0
  134. package/dist/cjs/stencil-async-content.cjs.entry.js +1 -1
  135. package/dist/cjs/stencil-route-title.cjs.entry.js +2 -2
  136. package/dist/cjs/stencil-router-prompt.cjs.entry.js +2 -2
  137. package/dist/cjs/{student.service-41c7c78d.js → student.service-744c3155.js} +1 -1
  138. package/dist/cjs/{swipe-back-c1951cbd.js → swipe-back-7e08b5e0.js} +32 -8
  139. package/dist/cjs/{swiper.bundle-cbea42d8.js → swiper.bundle-8c897c07.js} +4 -4
  140. package/dist/cjs/{tap-click-cd858b48.js → tap-click-1caf1780.js} +8 -1
  141. package/dist/cjs/{theme-98ccfc24.js → theme-4252ac15.js} +3 -0
  142. package/dist/cjs/util-d383acb8.js +2462 -0
  143. package/dist/collection/collection-manifest.json +9 -2
  144. package/dist/collection/components/layout/page/page.js +1 -0
  145. package/dist/collection/components/sparkle-animation-player/sparkle-animation-player.js +78 -66
  146. package/dist/collection/components/sparkle-character-intro/assets/characters/character-img.jpg +0 -0
  147. package/dist/collection/components/sparkle-character-intro/assets/characters/jen.png +0 -0
  148. package/dist/collection/components/sparkle-character-intro/assets/characters/kimberly.png +0 -0
  149. package/dist/collection/components/sparkle-character-intro/assets/characters/valeria.png +0 -0
  150. package/dist/collection/components/sparkle-character-intro/assets/characters/yuna.png +0 -0
  151. package/dist/collection/components/sparkle-character-intro/assets/characters/zynab.png +0 -0
  152. package/dist/collection/components/sparkle-character-intro/sparkle-character-intro.css +67 -0
  153. package/dist/collection/components/sparkle-character-intro/sparkle-character-intro.js +64 -0
  154. package/dist/collection/components/sparkle-course-root/sparkle-course-root.js +48 -43
  155. package/dist/collection/components/sparkle-youtube/sparkle-youtube.js +6 -2
  156. package/dist/collection/util.js +1 -0
  157. package/dist/esm/{PrivateRoute-9f0973bb.js → PrivateRoute-b9937c45.js} +3 -37
  158. package/dist/esm/{active-router-b3ae32c7.js → active-router-909088d6.js} +1 -1
  159. package/dist/esm/{animation-72fdacfb.js → animation-b306f6c2.js} +28 -4
  160. package/dist/esm/app-globals-5c736ae5.js +7 -0
  161. package/dist/esm/auth.store-3ed2389e.js +4061 -0
  162. package/dist/esm/compass-svg.entry.js +1 -1
  163. package/dist/esm/context-consumer.entry.js +1 -1
  164. package/dist/esm/course-select.entry.js +1 -1
  165. package/dist/esm/{cubic-bezier-ed243a9b.js → cubic-bezier-a7ad9c8e.js} +3 -0
  166. package/dist/esm/dir-03012648.js +18 -0
  167. package/dist/esm/{facilitator.service-cddb2feb.js → facilitator.service-ec0a9739.js} +1 -1
  168. package/dist/esm/feed.service-33b83cb7.js +119 -0
  169. package/dist/esm/focus-visible-40cda868.js +61 -0
  170. package/dist/esm/framework-delegate-3bc58c27.js +109 -0
  171. package/dist/esm/{gesture-controller-604336b7.js → gesture-controller-686622ba.js} +3 -0
  172. package/dist/esm/{haptic-67928174.js → haptic-99c9e346.js} +4 -1
  173. package/dist/esm/{hardware-back-button-508e48cf.js → hardware-back-button-b6ccf74a.js} +3 -0
  174. package/dist/esm/header-mobile-collapse_61.entry.js +17937 -0
  175. package/dist/esm/{helpers-e7f66b2b.js → helpers-39367fe1.js} +119 -4
  176. package/dist/esm/{icons-33e5804c.js → icons-5debfbaf.js} +1 -1
  177. package/dist/esm/{index-cc97b114.js → index-435af8e6.js} +3 -0
  178. package/dist/esm/{index-55fc9f5e.js → index-5568e3fa.js} +303 -208
  179. package/dist/esm/{index-dc09784f.js → index-9594837e.js} +20 -4
  180. package/dist/esm/{index-b2ad0f1a.js → index-a12c14bd.js} +25 -4
  181. package/dist/esm/{index-a94619f9.js → index-c26d8655.js} +34 -5
  182. package/dist/esm/index-dc61f152.js +22 -0
  183. package/dist/esm/index.es-97dd8174.js +10585 -0
  184. package/dist/esm/index.js +8 -7
  185. package/dist/esm/{input-shims-3a97fa86.js → input-shims-cc98ea92.js} +34 -10
  186. package/dist/esm/ion-accordion-group.entry.js +193 -0
  187. package/dist/esm/ion-accordion.entry.js +336 -0
  188. package/dist/esm/ion-action-sheet_4.entry.js +2196 -0
  189. package/dist/esm/ion-app.entry.js +23 -8
  190. package/dist/esm/ion-back-button.entry.js +14 -9
  191. package/dist/esm/ion-backdrop.entry.js +3 -3
  192. package/dist/esm/ion-badge.entry.js +3 -3
  193. package/dist/esm/ion-breadcrumb.entry.js +99 -0
  194. package/dist/esm/ion-breadcrumbs.entry.js +131 -0
  195. package/dist/esm/ion-buttons_3.entry.js +7 -6
  196. package/dist/esm/ion-card-header.entry.js +3 -3
  197. package/dist/esm/ion-card-subtitle.entry.js +3 -3
  198. package/dist/esm/ion-card-title.entry.js +3 -3
  199. package/dist/esm/ion-chip.entry.js +3 -3
  200. package/dist/esm/ion-content_2.entry.js +144 -56
  201. package/dist/esm/ion-datetime.entry.js +1902 -779
  202. package/dist/esm/ion-fab-button.entry.js +5 -4
  203. package/dist/esm/ion-fab-list.entry.js +2 -2
  204. package/dist/esm/ion-fab.entry.js +2 -2
  205. package/dist/esm/ion-footer.entry.js +79 -4
  206. package/dist/esm/ion-img.entry.js +33 -7
  207. package/dist/esm/ion-infinite-scroll-content.entry.js +3 -3
  208. package/dist/esm/ion-infinite-scroll.entry.js +4 -2
  209. package/dist/esm/ion-item-divider.entry.js +3 -3
  210. package/dist/esm/ion-item-group.entry.js +2 -2
  211. package/dist/esm/ion-item-option.entry.js +4 -4
  212. package/dist/esm/ion-item-options.entry.js +3 -3
  213. package/dist/esm/ion-item-sliding.entry.js +52 -8
  214. package/dist/esm/ion-loading.entry.js +23 -11
  215. package/dist/esm/ion-menu-button.entry.js +17 -11
  216. package/dist/esm/ion-menu-toggle.entry.js +7 -7
  217. package/dist/esm/ion-menu.entry.js +141 -29
  218. package/dist/esm/ion-modal.entry.js +649 -75
  219. package/dist/esm/ion-nav-link.entry.js +4 -1
  220. package/dist/esm/ion-nav.entry.js +140 -137
  221. package/dist/esm/ion-picker-column-internal_2.entry.js +695 -0
  222. package/dist/esm/ion-picker-column.entry.js +5 -5
  223. package/dist/esm/ion-picker.entry.js +18 -11
  224. package/dist/esm/ion-progress-bar.entry.js +17 -13
  225. package/dist/esm/ion-refresher-content.entry.js +7 -6
  226. package/dist/esm/ion-refresher.entry.js +82 -83
  227. package/dist/esm/ion-reorder-group.entry.js +9 -8
  228. package/dist/esm/ion-reorder.entry.js +5 -4
  229. package/dist/esm/ion-route-redirect.entry.js +1 -1
  230. package/dist/esm/ion-route.entry.js +1 -1
  231. package/dist/esm/ion-router-link.entry.js +3 -3
  232. package/dist/esm/ion-router-outlet.entry.js +50 -12
  233. package/dist/esm/ion-router.entry.js +378 -234
  234. package/dist/esm/ion-searchbar.entry.js +50 -17
  235. package/dist/esm/ion-segment-button.entry.js +12 -9
  236. package/dist/esm/ion-segment.entry.js +89 -10
  237. package/dist/esm/ion-select_2.entry.js +64 -30
  238. package/dist/esm/ion-skeleton-text.entry.js +4 -4
  239. package/dist/esm/ion-slide.entry.js +2 -2
  240. package/dist/esm/ion-slides.entry.js +19 -32
  241. package/dist/esm/ion-split-pane.entry.js +8 -3
  242. package/dist/esm/ion-tab-bar.entry.js +25 -12
  243. package/dist/esm/ion-tab-button.entry.js +2 -2
  244. package/dist/esm/ion-tab.entry.js +3 -2
  245. package/dist/esm/ion-tabs.entry.js +1 -1
  246. package/dist/esm/ion-textarea.entry.js +9 -8
  247. package/dist/esm/ion-thumbnail.entry.js +2 -2
  248. package/dist/esm/ion-toast.entry.js +37 -27
  249. package/dist/esm/ion-toggle.entry.js +15 -15
  250. package/dist/esm/ion-virtual-scroll.entry.js +13 -3
  251. package/dist/esm/{ionic-global-1f9287cc.js → ionic-global-0939c477.js} +103 -77
  252. package/dist/esm/{ios.transition-d01abefd.js → ios.transition-b4ca8a33.js} +8 -5
  253. package/dist/esm/{keyboard-06906eac.js → keyboard-2503e874.js} +3 -0
  254. package/dist/esm/loader.js +5 -5
  255. package/dist/esm/localstorage.service-4bf408c8.js +36 -0
  256. package/dist/esm/{md.transition-245ffa55.js → md.transition-ca5e0322.js} +7 -4
  257. package/dist/esm/{menu-toggle-util-fe83fcf5.js → menu-toggle-util-7fa22c2f.js} +4 -1
  258. package/dist/esm/{overlays-8363621c.js → overlays-34cfa9e0.js} +187 -47
  259. package/dist/esm/polyfills/css-shim.js +1 -1
  260. package/dist/esm/polyfills/index.js +2 -2
  261. package/dist/esm/{purify-4247e2d0.js → purify-ffce2b4c.js} +185 -72
  262. package/dist/esm/sparkle-animation-player.entry.js +56 -50
  263. package/dist/esm/sparkle-character-intro.entry.js +22 -0
  264. package/dist/esm/sparkle-code.entry.js +2 -2
  265. package/dist/esm/sparkle-compass-post.entry.js +1 -1
  266. package/dist/esm/sparkle-compass.entry.js +1 -1
  267. package/dist/esm/sparkle-core.js +7 -7
  268. package/dist/esm/sparkle-emoji.entry.js +1 -1
  269. package/dist/esm/sparkle-facilitator-notes-form.entry.js +7 -7
  270. package/dist/esm/sparkle-feed-post.entry.js +1 -1
  271. package/dist/esm/sparkle-feedback.entry.js +7 -7
  272. package/dist/esm/sparkle-goal-form.entry.js +8 -7
  273. package/dist/esm/sparkle-gww-comment-list.entry.js +1 -1
  274. package/dist/esm/sparkle-gww-graph.entry.js +1 -1
  275. package/dist/esm/sparkle-lower-content-nav.entry.js +1 -1
  276. package/dist/esm/sparkle-menu-collapsible.entry.js +2 -2
  277. package/dist/esm/sparkle-modal-image.entry.js +1 -1
  278. package/dist/esm/sparkle-notfound-page.entry.js +1 -1
  279. package/dist/esm/sparkle-overlay.entry.js +1 -1
  280. package/dist/esm/sparkle-poll.entry.js +1 -1
  281. package/dist/esm/sparkle-quiz-container.entry.js +1 -1
  282. package/dist/esm/sparkle-quiz-feedback_5.entry.js +1 -1
  283. package/dist/esm/sparkle-quiz.entry.js +2 -2
  284. package/dist/esm/sparkle-select.entry.js +1 -1
  285. package/dist/esm/sparkle-sidebar.entry.js +1 -1
  286. package/dist/esm/sparkle-tab.entry.js +1 -1
  287. package/dist/esm/sparkle-table-of-contents.entry.js +1 -1
  288. package/dist/esm/sparkle-tabs.entry.js +1 -1
  289. package/dist/esm/sparkle-youtube.entry.js +2 -2
  290. package/dist/esm/{spinner-configs-9536fae2.js → spinner-configs-f609a655.js} +36 -1
  291. package/dist/esm/status-tap-6351a0cb.js +38 -0
  292. package/dist/esm/stencil-async-content.entry.js +1 -1
  293. package/dist/esm/stencil-route-title.entry.js +2 -2
  294. package/dist/esm/stencil-router-prompt.entry.js +2 -2
  295. package/dist/esm/{student.service-c36c5a75.js → student.service-29b688ba.js} +1 -1
  296. package/dist/esm/{swipe-back-21f58ecf.js → swipe-back-34251834.js} +32 -8
  297. package/dist/esm/{swiper.bundle-d4422d52.js → swiper.bundle-b6a959de.js} +4 -4
  298. package/dist/esm/{tap-click-8c728329.js → tap-click-13f1fb0d.js} +8 -1
  299. package/dist/esm/{theme-12606872.js → theme-c336c9d9.js} +3 -0
  300. package/dist/esm/util-6ef753e9.js +2451 -0
  301. package/dist/loader/index.d.ts +0 -1
  302. package/dist/node_modules/@ionic/core/dist/collection/components/accordion/accordion.ios.css +75 -0
  303. package/dist/node_modules/@ionic/core/dist/collection/components/accordion/accordion.md.css +72 -0
  304. package/dist/node_modules/@ionic/core/dist/collection/components/accordion-group/accordion-group.ios.css +25 -0
  305. package/dist/node_modules/@ionic/core/dist/collection/components/accordion-group/accordion-group.md.css +59 -0
  306. package/dist/node_modules/@ionic/core/dist/collection/components/action-sheet/action-sheet.ios.css +10 -19
  307. package/dist/node_modules/@ionic/core/dist/collection/components/action-sheet/action-sheet.md.css +19 -16
  308. package/dist/node_modules/@ionic/core/dist/collection/components/alert/alert.md.css +2 -2
  309. package/dist/node_modules/@ionic/core/dist/collection/components/back-button/back-button.ios.css +4 -0
  310. package/dist/node_modules/@ionic/core/dist/collection/components/back-button/back-button.md.css +4 -0
  311. package/dist/node_modules/@ionic/core/dist/collection/components/breadcrumb/breadcrumb.ios.css +234 -0
  312. package/dist/node_modules/@ionic/core/dist/collection/components/breadcrumb/breadcrumb.md.css +237 -0
  313. package/dist/node_modules/@ionic/core/dist/collection/components/breadcrumbs/breadcrumbs.ios.css +38 -0
  314. package/dist/node_modules/@ionic/core/dist/collection/components/breadcrumbs/breadcrumbs.md.css +37 -0
  315. package/dist/node_modules/@ionic/core/dist/collection/components/button/button.ios.css +0 -1
  316. package/dist/node_modules/@ionic/core/dist/collection/components/button/button.md.css +5 -5
  317. package/dist/node_modules/@ionic/core/dist/collection/components/content/content.css +60 -14
  318. package/dist/node_modules/@ionic/core/dist/collection/components/datetime/datetime.ios.css +586 -68
  319. package/dist/node_modules/@ionic/core/dist/collection/components/datetime/datetime.md.css +575 -68
  320. package/dist/node_modules/@ionic/core/dist/collection/components/footer/footer.ios.css +4 -0
  321. package/dist/node_modules/@ionic/core/dist/collection/components/header/header.ios.css +16 -0
  322. package/dist/node_modules/@ionic/core/dist/collection/components/input/input.ios.css +9 -0
  323. package/dist/node_modules/@ionic/core/dist/collection/components/input/input.md.css +9 -0
  324. package/dist/node_modules/@ionic/core/dist/collection/components/item/item.ios.css +105 -17
  325. package/dist/node_modules/@ionic/core/dist/collection/components/item/item.md.css +295 -22
  326. package/dist/node_modules/@ionic/core/dist/collection/components/item-options/item-options.ios.css +6 -6
  327. package/dist/node_modules/@ionic/core/dist/collection/components/item-options/item-options.md.css +6 -6
  328. package/dist/node_modules/@ionic/core/dist/collection/components/item-sliding/item-sliding.css +2 -2
  329. package/dist/node_modules/@ionic/core/dist/collection/components/label/label.ios.css +7 -3
  330. package/dist/node_modules/@ionic/core/dist/collection/components/label/label.md.css +100 -18
  331. package/dist/node_modules/@ionic/core/dist/collection/components/list/list.ios.css +1 -1
  332. package/dist/node_modules/@ionic/core/dist/collection/components/menu/menu.ios.css +2 -2
  333. package/dist/node_modules/@ionic/core/dist/collection/components/menu/menu.md.css +2 -2
  334. package/dist/node_modules/@ionic/core/dist/collection/components/modal/modal.ios.css +74 -11
  335. package/dist/node_modules/@ionic/core/dist/collection/components/modal/modal.md.css +48 -4
  336. package/dist/node_modules/@ionic/core/dist/collection/components/picker-column-internal/picker-column-internal.ios.css +59 -0
  337. package/dist/node_modules/@ionic/core/dist/collection/components/picker-column-internal/picker-column-internal.md.css +62 -0
  338. package/dist/node_modules/@ionic/core/dist/collection/components/picker-internal/picker-internal.ios.css +122 -0
  339. package/dist/node_modules/@ionic/core/dist/collection/components/picker-internal/picker-internal.md.css +118 -0
  340. package/dist/node_modules/@ionic/core/dist/collection/components/popover/popover.ios.css +83 -0
  341. package/dist/node_modules/@ionic/core/dist/collection/components/popover/popover.md.css +49 -0
  342. package/dist/node_modules/@ionic/core/dist/collection/components/progress-bar/progress-bar.ios.css +53 -38
  343. package/dist/node_modules/@ionic/core/dist/collection/components/progress-bar/progress-bar.md.css +53 -38
  344. package/dist/node_modules/@ionic/core/dist/collection/components/range/range.ios.css +3 -3
  345. package/dist/node_modules/@ionic/core/dist/collection/components/range/range.md.css +5 -5
  346. package/dist/node_modules/@ionic/core/dist/collection/components/refresher/refresher.ios.css +12 -0
  347. package/dist/node_modules/@ionic/core/dist/collection/components/refresher/refresher.md.css +2 -2
  348. package/dist/node_modules/@ionic/core/dist/collection/components/searchbar/searchbar.ios.css +1 -1
  349. package/dist/node_modules/@ionic/core/dist/collection/components/searchbar/searchbar.md.css +1 -1
  350. package/dist/node_modules/@ionic/core/dist/collection/components/segment-button/segment-button.ios.css +4 -0
  351. package/dist/node_modules/@ionic/core/dist/collection/components/segment-button/segment-button.md.css +4 -0
  352. package/dist/node_modules/@ionic/core/dist/collection/components/select/select.ios.css +1 -1
  353. package/dist/node_modules/@ionic/core/dist/collection/components/select/select.md.css +30 -2
  354. package/dist/node_modules/@ionic/core/dist/collection/components/select-popover/{select-popover.css → select-popover.ios.css} +4 -4
  355. package/dist/node_modules/@ionic/core/dist/collection/components/select-popover/select-popover.md.css +37 -0
  356. package/dist/node_modules/@ionic/core/dist/collection/components/skeleton-text/skeleton-text.css +4 -4
  357. package/dist/node_modules/@ionic/core/dist/collection/components/spinner/spinner.css +15 -2
  358. package/dist/node_modules/@ionic/core/dist/collection/components/tab-bar/tab-bar.ios.css +2 -1
  359. package/dist/node_modules/@ionic/core/dist/collection/components/tab-bar/tab-bar.md.css +1 -0
  360. package/dist/node_modules/@ionic/core/dist/collection/components/textarea/textarea.ios.css +9 -0
  361. package/dist/node_modules/@ionic/core/dist/collection/components/textarea/textarea.md.css +9 -0
  362. package/dist/node_modules/@ionic/core/dist/collection/components/title/title.ios.css +4 -3
  363. package/dist/node_modules/@ionic/core/dist/collection/components/toast/toast.ios.css +14 -2
  364. package/dist/node_modules/@ionic/core/dist/collection/components/toast/toast.md.css +14 -2
  365. package/dist/node_modules/@ionic/core/dist/collection/components/toggle/toggle.ios.css +1 -0
  366. package/dist/node_modules/@ionic/core/dist/collection/components/toggle/toggle.md.css +1 -0
  367. package/dist/node_modules/@ionic/core/dist/collection/components/toolbar/toolbar.ios.css +3 -2
  368. package/dist/node_modules/@ionic/core/dist/collection/components/toolbar/toolbar.md.css +2 -1
  369. package/dist/node_modules/@ionic/core/dist/collection/components/virtual-scroll/virtual-scroll.css +1 -1
  370. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/button/button.css +49 -0
  371. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/cards/card/card.css +208 -0
  372. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/cards/cards.css +31 -0
  373. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/code/code.css +245 -0
  374. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/dropdown/dropdown.css +115 -0
  375. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/header/header-mobile-collapse/header-mobile-collapse.css +255 -0
  376. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/header/header.css +232 -0
  377. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/menu/collapsible/collapsible.css +3 -0
  378. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/menu/menu-toggle/menu-toggle.css +25 -0
  379. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/menu/menu.css +71 -0
  380. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/nav/nav.css +194 -0
  381. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/notfound-page/notfound-page.css +4 -0
  382. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/overlay/overlay.css +67 -0
  383. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/page-footer/page-footer.css +18 -0
  384. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/pagination/pagination.css +89 -0
  385. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/select/select.css +52 -0
  386. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/sidebar/sidebar.css +98 -0
  387. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/sparkle-lower-content-nav/sparkle-lower-content-nav.css +8 -0
  388. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/table-of-contents/table-of-contents.css +37 -0
  389. package/dist/node_modules/@sparkle-learning/components/dist/collection/components/tabs/tabs.css +64 -0
  390. package/dist/sparkle-core/assets/characters/character-img.jpg +0 -0
  391. package/dist/sparkle-core/assets/characters/jen.png +0 -0
  392. package/dist/sparkle-core/assets/characters/kimberly.png +0 -0
  393. package/dist/sparkle-core/assets/characters/valeria.png +0 -0
  394. package/dist/sparkle-core/assets/characters/yuna.png +0 -0
  395. package/dist/sparkle-core/assets/characters/zynab.png +0 -0
  396. package/dist/sparkle-core/index.esm.js +1 -1
  397. package/dist/sparkle-core/p-0146afa0.entry.js +1 -0
  398. package/dist/sparkle-core/{p-52355989.entry.js → p-016a7aaf.entry.js} +1 -1
  399. package/dist/sparkle-core/p-0187adef.entry.js +1 -0
  400. package/dist/sparkle-core/p-03189863.js +1 -0
  401. package/dist/sparkle-core/{p-d4d9aa4a.entry.js → p-03ec54a8.entry.js} +1 -1
  402. package/dist/sparkle-core/p-04583c51.entry.js +1 -0
  403. package/dist/sparkle-core/{p-6d506f4e.js → p-052caa63.js} +1 -1
  404. package/dist/sparkle-core/{p-016bf847.entry.js → p-057f6a23.entry.js} +1 -1
  405. package/dist/sparkle-core/p-0580419b.entry.js +1 -0
  406. package/dist/sparkle-core/{p-c563b4de.js → p-063cd168.js} +4 -1
  407. package/dist/sparkle-core/p-081968cc.entry.js +1 -0
  408. package/dist/sparkle-core/p-0934f5dd.entry.js +1 -0
  409. package/dist/sparkle-core/{p-3f5d7a08.entry.js → p-11cf398a.entry.js} +1 -1
  410. package/dist/sparkle-core/p-1339830f.entry.js +1 -0
  411. package/dist/sparkle-core/p-145e40f5.entry.js +1 -0
  412. package/dist/sparkle-core/{p-68f3c93d.entry.js → p-1726da2f.entry.js} +1 -1
  413. package/dist/sparkle-core/p-173d5461.entry.js +7 -0
  414. package/dist/sparkle-core/p-18e62133.entry.js +1 -0
  415. package/dist/sparkle-core/p-1af044f7.js +3 -0
  416. package/dist/sparkle-core/p-1b78dea1.entry.js +1 -0
  417. package/dist/sparkle-core/p-1cef8572.js +4 -0
  418. package/dist/sparkle-core/p-1df05176.js +4 -0
  419. package/dist/sparkle-core/p-21bf4ca0.entry.js +1 -0
  420. package/dist/sparkle-core/p-21db4e8e.entry.js +1 -0
  421. package/dist/sparkle-core/p-23a9f7d1.entry.js +1 -0
  422. package/dist/sparkle-core/p-289a35ed.entry.js +1 -0
  423. package/dist/sparkle-core/p-2ee6a5f9.entry.js +1 -0
  424. package/dist/sparkle-core/p-350adbaa.entry.js +1 -0
  425. package/dist/sparkle-core/{p-bccd9036.entry.js → p-35a7bd6c.entry.js} +1 -1
  426. package/dist/sparkle-core/{p-66e3bd1c.entry.js → p-37c00e39.entry.js} +1 -1
  427. package/dist/sparkle-core/p-389500fd.js +4 -0
  428. package/dist/sparkle-core/p-39e5a90f.entry.js +1 -0
  429. package/dist/sparkle-core/{p-ac5e5308.entry.js → p-3a202a38.entry.js} +1 -1
  430. package/dist/sparkle-core/p-3defe550.entry.js +1 -0
  431. package/dist/sparkle-core/p-45e6db62.entry.js +1 -0
  432. package/dist/sparkle-core/{p-581ca370.entry.js → p-48f9b960.entry.js} +1 -1
  433. package/dist/sparkle-core/{p-0efbc0b3.entry.js → p-4dc3ef96.entry.js} +1 -1
  434. package/dist/sparkle-core/p-506221fe.js +4 -0
  435. package/dist/sparkle-core/p-50aac721.entry.js +7 -0
  436. package/dist/sparkle-core/p-513794b0.js +16 -0
  437. package/dist/sparkle-core/{p-2e4e8117.js → p-5264da79.js} +3 -0
  438. package/dist/sparkle-core/{p-40db85ac.entry.js → p-547b70c6.entry.js} +1 -1
  439. package/dist/sparkle-core/p-5598650a.entry.js +1 -0
  440. package/dist/sparkle-core/p-55ae49e1.js +4 -0
  441. package/dist/sparkle-core/p-58e98f89.entry.js +1 -0
  442. package/dist/sparkle-core/p-59f7bf6e.entry.js +1 -0
  443. package/dist/sparkle-core/p-5a3d0e6b.js +4 -0
  444. package/dist/sparkle-core/{p-85d31769.entry.js → p-5b40aae5.entry.js} +1 -1
  445. package/dist/sparkle-core/p-5c9aa1f9.entry.js +4 -0
  446. package/dist/sparkle-core/p-5d2e54ee.entry.js +1 -0
  447. package/dist/sparkle-core/p-5d409601.js +1 -0
  448. package/dist/sparkle-core/{p-afbaad64.entry.js → p-5f45d206.entry.js} +1 -1
  449. package/dist/sparkle-core/p-5ff6416d.entry.js +7 -0
  450. package/dist/sparkle-core/{p-cf2332bb.entry.js → p-62a6c96f.entry.js} +1 -1
  451. package/dist/sparkle-core/p-64e72f8f.js +4 -0
  452. package/dist/sparkle-core/p-660e0742.js +1 -0
  453. package/dist/sparkle-core/{p-d5023db0.entry.js → p-667accac.entry.js} +1 -1
  454. package/dist/sparkle-core/{p-9ca56f5d.entry.js → p-680663a2.entry.js} +1 -1
  455. package/dist/sparkle-core/{p-e975924a.entry.js → p-6823e6c1.entry.js} +1 -1
  456. package/dist/sparkle-core/p-69e7783d.js +4 -0
  457. package/dist/sparkle-core/p-6bbabb80.entry.js +1 -0
  458. package/dist/sparkle-core/p-6bf07a28.js +1 -0
  459. package/dist/sparkle-core/p-6c6145cd.js +4 -0
  460. package/dist/sparkle-core/p-6c90bde6.entry.js +5 -0
  461. package/dist/sparkle-core/p-6e88764b.entry.js +4 -0
  462. package/dist/sparkle-core/p-6ee40949.js +1 -0
  463. package/dist/sparkle-core/p-6fbe3ca3.entry.js +1 -0
  464. package/dist/sparkle-core/{p-f2660943.js → p-6fd4985d.js} +3 -0
  465. package/dist/sparkle-core/{p-8fc9298a.js → p-703ca87c.js} +3 -0
  466. package/dist/sparkle-core/{p-1bf8bed6.entry.js → p-7052c43a.entry.js} +1 -1
  467. package/dist/sparkle-core/{p-111520a0.js → p-70b2452c.js} +3 -0
  468. package/dist/sparkle-core/p-713590fc.js +5 -0
  469. package/dist/sparkle-core/p-7493ee15.entry.js +1 -0
  470. package/dist/sparkle-core/p-75572037.js +1 -0
  471. package/dist/sparkle-core/{p-eb56aa20.entry.js → p-768bcc9e.entry.js} +1 -1
  472. package/dist/sparkle-core/p-797c23ed.entry.js +1 -0
  473. package/dist/sparkle-core/{p-03eb2164.js → p-7c38a70b.js} +1 -1
  474. package/dist/sparkle-core/{p-09d43bee.entry.js → p-7d61177b.entry.js} +1 -1
  475. package/dist/sparkle-core/p-7dbfc316.js +1 -0
  476. package/dist/sparkle-core/p-7e61973d.entry.js +7 -0
  477. package/dist/sparkle-core/{p-3cd28c60.entry.js → p-82e98d07.entry.js} +1 -1
  478. package/dist/sparkle-core/p-838fa86d.entry.js +18 -0
  479. package/dist/sparkle-core/p-855ca600.js +1 -0
  480. package/dist/sparkle-core/p-857f3696.entry.js +1 -0
  481. package/dist/sparkle-core/{p-8f72be08.js → p-8c6b6038.js} +3 -0
  482. package/dist/sparkle-core/p-8fe2e51f.entry.js +4 -0
  483. package/dist/sparkle-core/{p-f72a6e6d.entry.js → p-90389886.entry.js} +1 -1
  484. package/dist/sparkle-core/p-932bfb69.entry.js +1 -0
  485. package/dist/sparkle-core/p-935e7cfc.js +1 -0
  486. package/dist/sparkle-core/{p-c70b9765.entry.js → p-941eaa3a.entry.js} +1 -1
  487. package/dist/sparkle-core/p-95004267.entry.js +1 -0
  488. package/dist/sparkle-core/p-950effe7.entry.js +1 -0
  489. package/dist/sparkle-core/{p-1ca4bf1d.entry.js → p-996361f9.entry.js} +1 -1
  490. package/dist/sparkle-core/p-9a17f2ad.js +4 -0
  491. package/dist/sparkle-core/p-9a443f51.js +1 -1
  492. package/dist/sparkle-core/p-9babd345.js +1 -0
  493. package/dist/sparkle-core/p-9cfdeb18.entry.js +1 -0
  494. package/dist/sparkle-core/p-a080e768.entry.js +1 -0
  495. package/dist/sparkle-core/p-a1cab0f3.js +4 -0
  496. package/dist/sparkle-core/p-a7cc0052.entry.js +4 -0
  497. package/dist/sparkle-core/p-a9ccb0df.js +4 -0
  498. package/dist/sparkle-core/p-a9ee3f6d.entry.js +1 -0
  499. package/dist/sparkle-core/{p-abe2676a.entry.js → p-aa87c7f0.entry.js} +1 -1
  500. package/dist/sparkle-core/{p-e818b11d.entry.js → p-aa9ebc39.entry.js} +1 -1
  501. package/dist/sparkle-core/p-ae1f145d.entry.js +1 -0
  502. package/dist/sparkle-core/{p-73a646fb.entry.js → p-b07a2cf2.entry.js} +1 -1
  503. package/dist/sparkle-core/{p-c82b05e0.entry.js → p-b3909012.entry.js} +1 -1
  504. package/dist/sparkle-core/p-b3e6427d.js +7 -0
  505. package/dist/sparkle-core/p-b49ca0ea.entry.js +1 -0
  506. package/dist/sparkle-core/p-b81e20fe.entry.js +4 -0
  507. package/dist/sparkle-core/p-bca0e465.entry.js +1 -0
  508. package/dist/sparkle-core/p-c1279cc9.entry.js +1 -0
  509. package/dist/sparkle-core/{p-82d95fcd.entry.js → p-c1376096.entry.js} +1 -1
  510. package/dist/sparkle-core/p-c3986a52.entry.js +1 -0
  511. package/dist/sparkle-core/p-c3d3d5c4.entry.js +1 -0
  512. package/dist/sparkle-core/p-c48bbc7c.entry.js +4 -0
  513. package/dist/sparkle-core/p-c5b9bdd6.entry.js +1 -0
  514. package/dist/sparkle-core/{p-15d68269.entry.js → p-c69b0a7a.entry.js} +1 -1
  515. package/dist/sparkle-core/p-cbbeed67.entry.js +1 -0
  516. package/dist/sparkle-core/p-d4a435f8.entry.js +1 -0
  517. package/dist/sparkle-core/p-d4c07aca.js +4 -0
  518. package/dist/sparkle-core/p-d5b05ece.entry.js +5 -0
  519. package/dist/sparkle-core/p-d7baf31e.entry.js +1 -0
  520. package/dist/sparkle-core/p-d8d3524a.js +1 -0
  521. package/dist/sparkle-core/p-df0070c5.entry.js +352 -0
  522. package/dist/sparkle-core/{p-22926eed.entry.js → p-e0fced48.entry.js} +1 -1
  523. package/dist/sparkle-core/p-e1cba44b.entry.js +4 -0
  524. package/dist/sparkle-core/p-e225581a.js +7 -0
  525. package/dist/sparkle-core/{p-4e28ca37.entry.js → p-e3fdd0a8.entry.js} +1 -1
  526. package/dist/sparkle-core/p-e72d4450.js +4 -0
  527. package/dist/sparkle-core/p-eb70a23c.entry.js +1 -0
  528. package/dist/sparkle-core/{p-f9143c5d.entry.js → p-ecd39170.entry.js} +1 -1
  529. package/dist/sparkle-core/{p-151afa9e.entry.js → p-ed0e9d29.entry.js} +1 -1
  530. package/dist/sparkle-core/{p-92d42c10.entry.js → p-ee0d7f19.entry.js} +1 -1
  531. package/dist/sparkle-core/p-f4001fdf.js +4 -0
  532. package/dist/sparkle-core/p-f9b73032.entry.js +1 -0
  533. package/dist/sparkle-core/p-faa912d7.entry.js +1 -0
  534. package/dist/sparkle-core/{p-a250e2ae.entry.js → p-fbd7eeca.entry.js} +1 -1
  535. package/dist/sparkle-core/p-fc933591.entry.js +1 -0
  536. package/dist/sparkle-core/p-fef04ab5.js +4 -0
  537. package/dist/sparkle-core/sparkle-core.css +1 -1
  538. package/dist/sparkle-core/sparkle-core.esm.js +1 -1
  539. package/dist/sparkle-core/svg/balloon-outline.svg +1 -0
  540. package/dist/sparkle-core/svg/balloon-sharp.svg +1 -0
  541. package/dist/sparkle-core/svg/balloon.svg +1 -0
  542. package/dist/sparkle-core/svg/bowling-ball-outline.svg +1 -0
  543. package/dist/sparkle-core/svg/bowling-ball-sharp.svg +1 -0
  544. package/dist/sparkle-core/svg/bowling-ball.svg +1 -0
  545. package/dist/sparkle-core/svg/calendar-number-outline.svg +1 -0
  546. package/dist/sparkle-core/svg/calendar-number-sharp.svg +1 -0
  547. package/dist/sparkle-core/svg/calendar-number.svg +1 -0
  548. package/dist/sparkle-core/svg/diamond-outline.svg +1 -0
  549. package/dist/sparkle-core/svg/diamond-sharp.svg +1 -0
  550. package/dist/sparkle-core/svg/diamond.svg +1 -0
  551. package/dist/sparkle-core/svg/footsteps-outline.svg +1 -0
  552. package/dist/sparkle-core/svg/footsteps-sharp.svg +1 -0
  553. package/dist/sparkle-core/svg/footsteps.svg +1 -0
  554. package/dist/sparkle-core/svg/id-card-outline.svg +1 -0
  555. package/dist/sparkle-core/svg/id-card-sharp.svg +1 -0
  556. package/dist/sparkle-core/svg/id-card.svg +1 -0
  557. package/dist/sparkle-core/svg/logo-apple-ar.svg +1 -0
  558. package/dist/sparkle-core/svg/prism-outline.svg +1 -0
  559. package/dist/sparkle-core/svg/prism-sharp.svg +1 -0
  560. package/dist/sparkle-core/svg/prism.svg +1 -0
  561. package/dist/sparkle-core/svg/scale-outline.svg +1 -0
  562. package/dist/sparkle-core/svg/scale-sharp.svg +1 -0
  563. package/dist/sparkle-core/svg/scale.svg +1 -0
  564. package/dist/sparkle-core/svg/shield-half-outline.svg +1 -0
  565. package/dist/sparkle-core/svg/shield-half-sharp.svg +1 -0
  566. package/dist/sparkle-core/svg/shield-half.svg +1 -0
  567. package/dist/sparkle-core/svg/sparkles-outline.svg +1 -0
  568. package/dist/sparkle-core/svg/sparkles-sharp.svg +1 -0
  569. package/dist/sparkle-core/svg/sparkles.svg +1 -0
  570. package/dist/sparkle-core/swiper/swiper.bundle.js +2 -2
  571. package/dist/types/components/sparkle-animation-player/sparkle-animation-player.d.ts +1 -0
  572. package/dist/types/components/sparkle-character-intro/sparkle-character-intro.d.ts +7 -0
  573. package/dist/types/components/sparkle-course-root/sparkle-course-root.d.ts +2 -2
  574. package/dist/types/components/sparkle-youtube/sparkle-youtube.d.ts +1 -1
  575. package/dist/types/components.d.ts +17 -0
  576. package/dist/types/models/definitions.d.ts +8 -0
  577. package/dist/types/stencil-public-runtime.d.ts +200 -190
  578. package/dist/types/util.d.ts +1 -0
  579. package/package.json +26 -26
  580. package/dist/cjs/app-globals-98121d6d.js +0 -9
  581. package/dist/cjs/button-active-9456fb4d.js +0 -66
  582. package/dist/cjs/feed.service-518d18fd.js +0 -5802
  583. package/dist/cjs/focus-visible-1583bc8e.js +0 -45
  584. package/dist/cjs/framework-delegate-72815681.js +0 -37
  585. package/dist/cjs/header-mobile-collapse_60.cjs.entry.js +0 -86
  586. package/dist/cjs/index.es-baef3314.js +0 -13834
  587. package/dist/cjs/ion-action-sheet.cjs.entry.js +0 -261
  588. package/dist/cjs/ion-alert.cjs.entry.js +0 -455
  589. package/dist/cjs/ion-note.cjs.entry.js +0 -29
  590. package/dist/cjs/ion-popover.cjs.entry.js +0 -365
  591. package/dist/cjs/ion-select-popover.cjs.entry.js +0 -35
  592. package/dist/cjs/status-tap-466a7c6a.js +0 -25
  593. package/dist/esm/app-globals-6451faf3.js +0 -7
  594. package/dist/esm/auth.store-dd944bc2.js +0 -2552
  595. package/dist/esm/button-active-97535443.js +0 -64
  596. package/dist/esm/feed.service-0fda1e36.js +0 -5787
  597. package/dist/esm/focus-visible-abf04ce3.js +0 -43
  598. package/dist/esm/framework-delegate-2c397da3.js +0 -34
  599. package/dist/esm/header-mobile-collapse_60.entry.js +0 -19
  600. package/dist/esm/index.es-a5bf9a49.js +0 -13748
  601. package/dist/esm/ion-action-sheet.entry.js +0 -257
  602. package/dist/esm/ion-alert.entry.js +0 -451
  603. package/dist/esm/ion-note.entry.js +0 -25
  604. package/dist/esm/ion-popover.entry.js +0 -361
  605. package/dist/esm/ion-select-popover.entry.js +0 -31
  606. package/dist/esm/status-tap-9221cd79.js +0 -23
  607. package/dist/sparkle-core/p-019d9d02.entry.js +0 -1
  608. package/dist/sparkle-core/p-02d6d899.js +0 -1
  609. package/dist/sparkle-core/p-03fd27d0.entry.js +0 -1
  610. package/dist/sparkle-core/p-07018d29.js +0 -1
  611. package/dist/sparkle-core/p-083d57a6.entry.js +0 -1
  612. package/dist/sparkle-core/p-090f2624.js +0 -1
  613. package/dist/sparkle-core/p-0e1c7c8c.js +0 -1
  614. package/dist/sparkle-core/p-101feae9.js +0 -1
  615. package/dist/sparkle-core/p-13b0cdfc.entry.js +0 -1
  616. package/dist/sparkle-core/p-13c9bf3a.entry.js +0 -1
  617. package/dist/sparkle-core/p-169920f1.js +0 -1
  618. package/dist/sparkle-core/p-1e1f5e98.entry.js +0 -1
  619. package/dist/sparkle-core/p-1e866c41.entry.js +0 -1
  620. package/dist/sparkle-core/p-2474bf60.entry.js +0 -1
  621. package/dist/sparkle-core/p-25bbf9b4.entry.js +0 -1
  622. package/dist/sparkle-core/p-2a45b732.js +0 -1
  623. package/dist/sparkle-core/p-2abf4d37.entry.js +0 -1
  624. package/dist/sparkle-core/p-2c5edb9f.entry.js +0 -1
  625. package/dist/sparkle-core/p-2d966d35.js +0 -1
  626. package/dist/sparkle-core/p-30b641a4.entry.js +0 -1
  627. package/dist/sparkle-core/p-34ea6639.entry.js +0 -1
  628. package/dist/sparkle-core/p-359422b6.entry.js +0 -1
  629. package/dist/sparkle-core/p-37bfb548.entry.js +0 -1
  630. package/dist/sparkle-core/p-38307b31.js +0 -1
  631. package/dist/sparkle-core/p-3a29a75b.entry.js +0 -1
  632. package/dist/sparkle-core/p-3bb55510.entry.js +0 -1
  633. package/dist/sparkle-core/p-3be0a218.js +0 -1
  634. package/dist/sparkle-core/p-417a8dd6.js +0 -1
  635. package/dist/sparkle-core/p-447163be.entry.js +0 -1
  636. package/dist/sparkle-core/p-49265a8e.entry.js +0 -1
  637. package/dist/sparkle-core/p-4950f841.entry.js +0 -1
  638. package/dist/sparkle-core/p-4b7db0e6.js +0 -1
  639. package/dist/sparkle-core/p-4d8cb365.entry.js +0 -1
  640. package/dist/sparkle-core/p-5073899e.entry.js +0 -1
  641. package/dist/sparkle-core/p-5b366c20.entry.js +0 -1
  642. package/dist/sparkle-core/p-5dce20b9.entry.js +0 -1
  643. package/dist/sparkle-core/p-6006beec.entry.js +0 -1
  644. package/dist/sparkle-core/p-600d04fc.entry.js +0 -1
  645. package/dist/sparkle-core/p-60828739.entry.js +0 -1
  646. package/dist/sparkle-core/p-6112b180.entry.js +0 -1
  647. package/dist/sparkle-core/p-66eb6b7a.entry.js +0 -1
  648. package/dist/sparkle-core/p-67ddec3f.entry.js +0 -1
  649. package/dist/sparkle-core/p-68cb7d41.entry.js +0 -1
  650. package/dist/sparkle-core/p-69cd49de.js +0 -1
  651. package/dist/sparkle-core/p-6edbdde5.entry.js +0 -1
  652. package/dist/sparkle-core/p-6f0ecbe3.js +0 -1
  653. package/dist/sparkle-core/p-765b8593.js +0 -1
  654. package/dist/sparkle-core/p-770128c8.js +0 -1
  655. package/dist/sparkle-core/p-7840618d.js +0 -1
  656. package/dist/sparkle-core/p-7b37d523.entry.js +0 -1
  657. package/dist/sparkle-core/p-7d83d006.entry.js +0 -1
  658. package/dist/sparkle-core/p-7f3d5344.js +0 -1
  659. package/dist/sparkle-core/p-81651f26.entry.js +0 -1
  660. package/dist/sparkle-core/p-86148067.entry.js +0 -1
  661. package/dist/sparkle-core/p-8b5bc1d6.entry.js +0 -1
  662. package/dist/sparkle-core/p-8c3ee44c.entry.js +0 -1
  663. package/dist/sparkle-core/p-9007a06b.entry.js +0 -1
  664. package/dist/sparkle-core/p-90482861.entry.js +0 -1
  665. package/dist/sparkle-core/p-a061537e.entry.js +0 -1
  666. package/dist/sparkle-core/p-a38ea475.js +0 -1
  667. package/dist/sparkle-core/p-ad1ddf1f.js +0 -483
  668. package/dist/sparkle-core/p-aef0bba0.js +0 -1
  669. package/dist/sparkle-core/p-b080c1e3.entry.js +0 -1
  670. package/dist/sparkle-core/p-b11fe0c7.js +0 -1
  671. package/dist/sparkle-core/p-bac45a26.entry.js +0 -1
  672. package/dist/sparkle-core/p-bbe5977b.entry.js +0 -1
  673. package/dist/sparkle-core/p-bc568dcb.js +0 -1
  674. package/dist/sparkle-core/p-bfb55f1d.js +0 -3
  675. package/dist/sparkle-core/p-c163c16d.entry.js +0 -1
  676. package/dist/sparkle-core/p-c3166584.entry.js +0 -1
  677. package/dist/sparkle-core/p-c34269ae.entry.js +0 -1
  678. package/dist/sparkle-core/p-c466ee32.js +0 -1
  679. package/dist/sparkle-core/p-c6710592.entry.js +0 -1
  680. package/dist/sparkle-core/p-c7022391.entry.js +0 -1
  681. package/dist/sparkle-core/p-d4ad796c.js +0 -1
  682. package/dist/sparkle-core/p-d6152660.entry.js +0 -1
  683. package/dist/sparkle-core/p-d63406d8.js +0 -1
  684. package/dist/sparkle-core/p-dba672d5.entry.js +0 -1
  685. package/dist/sparkle-core/p-dd73d01a.entry.js +0 -1
  686. package/dist/sparkle-core/p-de33872d.entry.js +0 -1
  687. package/dist/sparkle-core/p-dee2128a.entry.js +0 -1
  688. package/dist/sparkle-core/p-df07e132.entry.js +0 -1
  689. package/dist/sparkle-core/p-e5d5aaa5.js +0 -1
  690. package/dist/sparkle-core/p-e72c6d87.entry.js +0 -1
  691. package/dist/sparkle-core/p-e8df6ea6.entry.js +0 -1
  692. package/dist/sparkle-core/p-ef2a2172.js +0 -1
  693. package/dist/sparkle-core/p-f1a4ab33.entry.js +0 -1
  694. package/dist/sparkle-core/p-f43ac631.entry.js +0 -1
  695. package/dist/sparkle-core/p-f8063d7b.js +0 -1
  696. package/dist/sparkle-core/p-fd62283e.entry.js +0 -1
  697. package/dist/sparkle-core/p-fef71e0e.entry.js +0 -1
@@ -2,19 +2,23 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const index$1 = require('./index-fbf4d3bf.js');
6
- const ionicGlobal = require('./ionic-global-4930d319.js');
7
- const helpers = require('./helpers-26770c32.js');
8
- const animation = require('./animation-05337433.js');
9
- const index$2 = require('./index-58b3ee93.js');
10
- const cubicBezier = require('./cubic-bezier-24e309bf.js');
11
- require('./gesture-controller-e824cfb3.js');
12
- const index = require('./index-6eff209d.js');
13
- require('./hardware-back-button-ca468aae.js');
14
- const overlays = require('./overlays-08a817ea.js');
15
- const theme = require('./theme-98ccfc24.js');
16
- const frameworkDelegate = require('./framework-delegate-72815681.js');
5
+ const index$1 = require('./index-bae2a754.js');
6
+ const ionicGlobal = require('./ionic-global-878073d1.js');
7
+ const frameworkDelegate = require('./framework-delegate-2470a246.js');
8
+ const helpers = require('./helpers-7e28976c.js');
9
+ const keyboard = require('./keyboard-dfd76ac3.js');
10
+ const overlays = require('./overlays-0a748609.js');
11
+ const theme = require('./theme-4252ac15.js');
12
+ const index$2 = require('./index-b12edb26.js');
13
+ const animation = require('./animation-6132e37f.js');
14
+ const cubicBezier = require('./cubic-bezier-293f4663.js');
15
+ const index = require('./index-43642662.js');
16
+ require('./hardware-back-button-f7b5d99e.js');
17
+ require('./gesture-controller-07c31f70.js');
17
18
 
19
+ /*!
20
+ * (C) Ionic http://ionicframework.com - MIT License
21
+ */
18
22
  // Defaults for the card swipe animation
19
23
  const SwipeToCloseDefaults = {
20
24
  MIN_PRESENTING_SCALE: 0.93,
@@ -28,11 +32,11 @@ const createSwipeToCloseGesture = (el, animation, onDismiss) => {
28
32
  !target.closest) {
29
33
  return true;
30
34
  }
31
- const content = target.closest('ion-content');
32
- if (content === null) {
35
+ const contentOrFooter = target.closest('ion-content, ion-footer');
36
+ if (contentOrFooter === null) {
33
37
  return true;
34
38
  }
35
- // Target is in the content so we don't start the gesture.
39
+ // Target is in the content or the footer so do not start the gesture.
36
40
  // We could be more nuanced here and allow it for content that
37
41
  // does not need to scroll.
38
42
  return false;
@@ -89,22 +93,140 @@ const computeDuration = (remaining, velocity) => {
89
93
  return helpers.clamp(400, remaining / Math.abs(velocity * 1.1), 500);
90
94
  };
91
95
 
96
+ /*!
97
+ * (C) Ionic http://ionicframework.com - MIT License
98
+ */
92
99
  /**
93
- * iOS Modal Enter Animation for the Card presentation style
100
+ * Use y = mx + b to
101
+ * figure out the backdrop value
102
+ * at a particular x coordinate. This
103
+ * is useful when the backdrop does
104
+ * not begin to fade in until after
105
+ * the 0 breakpoint.
106
+ */
107
+ const getBackdropValueForSheet = (x, backdropBreakpoint) => {
108
+ /**
109
+ * We will use these points:
110
+ * (backdropBreakpoint, 0)
111
+ * (maxBreakpoint, 1)
112
+ * We know that at the beginning breakpoint,
113
+ * the backdrop will be hidden. We also
114
+ * know that at the maxBreakpoint, the backdrop
115
+ * must be fully visible. maxBreakpoint should
116
+ * always be 1 even if the maximum value
117
+ * of the breakpoints array is not 1 since
118
+ * the animation runs from a progress of 0
119
+ * to a progress of 1.
120
+ * m = (y2 - y1) / (x2 - x1)
121
+ *
122
+ * This is simplified from:
123
+ * m = (1 - 0) / (maxBreakpoint - backdropBreakpoint)
124
+ */
125
+ const slope = 1 / (1 - backdropBreakpoint);
126
+ /**
127
+ * From here, compute b which is
128
+ * the backdrop opacity if the offset
129
+ * is 0. If the backdrop does not
130
+ * begin to fade in until after the
131
+ * 0 breakpoint, this b value will be
132
+ * negative. This is fine as we never pass
133
+ * b directly into the animation keyframes.
134
+ * b = y - mx
135
+ * Use a known point: (backdropBreakpoint, 0)
136
+ * This is simplified from:
137
+ * b = 0 - (backdropBreakpoint * slope)
138
+ */
139
+ const b = -(backdropBreakpoint * slope);
140
+ /**
141
+ * Finally, we can now determine the
142
+ * backdrop offset given an arbitrary
143
+ * gesture offset.
144
+ */
145
+ return (x * slope) + b;
146
+ };
147
+
148
+ /*!
149
+ * (C) Ionic http://ionicframework.com - MIT License
150
+ */
151
+ const createSheetEnterAnimation = (opts) => {
152
+ const { currentBreakpoint, backdropBreakpoint } = opts;
153
+ /**
154
+ * If the backdropBreakpoint is undefined, then the backdrop
155
+ * should always fade in. If the backdropBreakpoint came before the
156
+ * current breakpoint, then the backdrop should be fading in.
157
+ */
158
+ const shouldShowBackdrop = backdropBreakpoint === undefined || backdropBreakpoint < currentBreakpoint;
159
+ const initialBackdrop = shouldShowBackdrop ? `calc(var(--backdrop-opacity) * ${currentBreakpoint})` : '0';
160
+ const backdropAnimation = animation.createAnimation('backdropAnimation')
161
+ .fromTo('opacity', 0, initialBackdrop);
162
+ if (shouldShowBackdrop) {
163
+ backdropAnimation
164
+ .beforeStyles({
165
+ 'pointer-events': 'none'
166
+ })
167
+ .afterClearStyles(['pointer-events']);
168
+ }
169
+ const wrapperAnimation = animation.createAnimation('wrapperAnimation')
170
+ .keyframes([
171
+ { offset: 0, opacity: 1, transform: 'translateY(100%)' },
172
+ { offset: 1, opacity: 1, transform: `translateY(${100 - (currentBreakpoint * 100)}%)` }
173
+ ]);
174
+ return { wrapperAnimation, backdropAnimation };
175
+ };
176
+ const createSheetLeaveAnimation = (opts) => {
177
+ const { currentBreakpoint, backdropBreakpoint } = opts;
178
+ /**
179
+ * Backdrop does not always fade in from 0 to 1 if backdropBreakpoint
180
+ * is defined, so we need to account for that offset by figuring out
181
+ * what the current backdrop value should be.
182
+ */
183
+ const backdropValue = `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(currentBreakpoint, backdropBreakpoint)})`;
184
+ const defaultBackdrop = [
185
+ { offset: 0, opacity: backdropValue },
186
+ { offset: 1, opacity: 0 }
187
+ ];
188
+ const customBackdrop = [
189
+ { offset: 0, opacity: backdropValue },
190
+ { offset: backdropBreakpoint, opacity: 0 },
191
+ { offset: 1, opacity: 0 }
192
+ ];
193
+ const backdropAnimation = animation.createAnimation('backdropAnimation')
194
+ .keyframes(backdropBreakpoint !== 0 ? customBackdrop : defaultBackdrop);
195
+ const wrapperAnimation = animation.createAnimation('wrapperAnimation')
196
+ .keyframes([
197
+ { offset: 0, opacity: 1, transform: `translateY(${100 - (currentBreakpoint * 100)}%)` },
198
+ { offset: 1, opacity: 1, transform: `translateY(100%)` }
199
+ ]);
200
+ return { wrapperAnimation, backdropAnimation };
201
+ };
202
+
203
+ /*!
204
+ * (C) Ionic http://ionicframework.com - MIT License
94
205
  */
95
- const iosEnterAnimation = (baseEl, presentingEl) => {
206
+ const createEnterAnimation$1 = () => {
96
207
  const backdropAnimation = animation.createAnimation()
97
- .addElement(baseEl.querySelector('ion-backdrop'))
98
208
  .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
99
209
  .beforeStyles({
100
210
  'pointer-events': 'none'
101
211
  })
102
212
  .afterClearStyles(['pointer-events']);
103
213
  const wrapperAnimation = animation.createAnimation()
104
- .addElement(baseEl.querySelectorAll('.modal-wrapper, .modal-shadow'))
105
- .beforeStyles({ 'opacity': 1 })
106
214
  .fromTo('transform', 'translateY(100vh)', 'translateY(0vh)');
107
- const baseAnimation = animation.createAnimation()
215
+ return { backdropAnimation, wrapperAnimation };
216
+ };
217
+ /**
218
+ * iOS Modal Enter Animation for the Card presentation style
219
+ */
220
+ const iosEnterAnimation = (baseEl, opts) => {
221
+ const { presentingEl, currentBreakpoint } = opts;
222
+ const root = helpers.getElementRoot(baseEl);
223
+ const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation$1();
224
+ backdropAnimation
225
+ .addElement(root.querySelector('ion-backdrop'));
226
+ wrapperAnimation
227
+ .addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow'))
228
+ .beforeStyles({ 'opacity': 1 });
229
+ const baseAnimation = animation.createAnimation('entering-base')
108
230
  .addElement(baseEl)
109
231
  .easing('cubic-bezier(0.32,0.72,0,1)')
110
232
  .duration(500)
@@ -112,6 +234,7 @@ const iosEnterAnimation = (baseEl, presentingEl) => {
112
234
  if (presentingEl) {
113
235
  const isMobile = window.innerWidth < 768;
114
236
  const hasCardModal = (presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined);
237
+ const presentingElRoot = helpers.getElementRoot(presentingEl);
115
238
  const presentingAnimation = animation.createAnimation()
116
239
  .beforeStyles({
117
240
  'transform': 'translateY(0)',
@@ -123,7 +246,7 @@ const iosEnterAnimation = (baseEl, presentingEl) => {
123
246
  /**
124
247
  * Fallback for browsers that does not support `max()` (ex: Firefox)
125
248
  * No need to worry about statusbar padding since engines like Gecko
126
- * are not used as the engine for standlone Cordova/Capacitor apps
249
+ * are not used as the engine for standalone Cordova/Capacitor apps
127
250
  */
128
251
  const transformOffset = (!CSS.supports('width', 'max(0px, 1px)')) ? '30px' : 'max(30px, var(--ion-safe-area-top))';
129
252
  const modalTransform = hasCardModal ? '-10px' : transformOffset;
@@ -153,7 +276,7 @@ const iosEnterAnimation = (baseEl, presentingEl) => {
153
276
  .afterStyles({
154
277
  'transform': finalTransform
155
278
  })
156
- .addElement(presentingEl.querySelector('.modal-wrapper'))
279
+ .addElement(presentingElRoot.querySelector('.modal-wrapper'))
157
280
  .keyframes([
158
281
  { offset: 0, filter: 'contrast(1)', transform: 'translateY(0) scale(1)' },
159
282
  { offset: 1, filter: 'contrast(0.85)', transform: finalTransform }
@@ -162,7 +285,7 @@ const iosEnterAnimation = (baseEl, presentingEl) => {
162
285
  .afterStyles({
163
286
  'transform': finalTransform
164
287
  })
165
- .addElement(presentingEl.querySelector('.modal-shadow'))
288
+ .addElement(presentingElRoot.querySelector('.modal-shadow'))
166
289
  .keyframes([
167
290
  { offset: 0, opacity: '1', transform: 'translateY(0) scale(1)' },
168
291
  { offset: 1, opacity: '0', transform: finalTransform }
@@ -177,18 +300,28 @@ const iosEnterAnimation = (baseEl, presentingEl) => {
177
300
  return baseAnimation;
178
301
  };
179
302
 
180
- /**
181
- * iOS Modal Leave Animation
303
+ /*!
304
+ * (C) Ionic http://ionicframework.com - MIT License
182
305
  */
183
- const iosLeaveAnimation = (baseEl, presentingEl, duration = 500) => {
306
+ const createLeaveAnimation$1 = () => {
184
307
  const backdropAnimation = animation.createAnimation()
185
- .addElement(baseEl.querySelector('ion-backdrop'))
186
- .fromTo('opacity', 'var(--backdrop-opacity)', 0.0);
308
+ .fromTo('opacity', 'var(--backdrop-opacity)', 0);
187
309
  const wrapperAnimation = animation.createAnimation()
188
- .addElement(baseEl.querySelectorAll('.modal-wrapper, .modal-shadow'))
189
- .beforeStyles({ 'opacity': 1 })
190
310
  .fromTo('transform', 'translateY(0vh)', 'translateY(100vh)');
191
- const baseAnimation = animation.createAnimation()
311
+ return { backdropAnimation, wrapperAnimation };
312
+ };
313
+ /**
314
+ * iOS Modal Leave Animation
315
+ */
316
+ const iosLeaveAnimation = (baseEl, opts, duration = 500) => {
317
+ const { presentingEl, currentBreakpoint } = opts;
318
+ const root = helpers.getElementRoot(baseEl);
319
+ const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation$1();
320
+ backdropAnimation.addElement(root.querySelector('ion-backdrop'));
321
+ wrapperAnimation
322
+ .addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow'))
323
+ .beforeStyles({ 'opacity': 1 });
324
+ const baseAnimation = animation.createAnimation('leaving-base')
192
325
  .addElement(baseEl)
193
326
  .easing('cubic-bezier(0.32,0.72,0,1)')
194
327
  .duration(duration)
@@ -196,6 +329,7 @@ const iosLeaveAnimation = (baseEl, presentingEl, duration = 500) => {
196
329
  if (presentingEl) {
197
330
  const isMobile = window.innerWidth < 768;
198
331
  const hasCardModal = (presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined);
332
+ const presentingElRoot = helpers.getElementRoot(presentingEl);
199
333
  const presentingAnimation = animation.createAnimation()
200
334
  .beforeClearStyles(['transform'])
201
335
  .afterClearStyles(['transform'])
@@ -233,7 +367,7 @@ const iosLeaveAnimation = (baseEl, presentingEl, duration = 500) => {
233
367
  const toPresentingScale = (hasCardModal) ? SwipeToCloseDefaults.MIN_PRESENTING_SCALE : 1;
234
368
  const finalTransform = `translateY(-10px) scale(${toPresentingScale})`;
235
369
  presentingAnimation
236
- .addElement(presentingEl.querySelector('.modal-wrapper'))
370
+ .addElement(presentingElRoot.querySelector('.modal-wrapper'))
237
371
  .afterStyles({
238
372
  'transform': 'translate3d(0, 0, 0)'
239
373
  })
@@ -242,7 +376,7 @@ const iosLeaveAnimation = (baseEl, presentingEl, duration = 500) => {
242
376
  { offset: 1, filter: 'contrast(1)', transform: 'translateY(0) scale(1)' }
243
377
  ]);
244
378
  const shadowAnimation = animation.createAnimation()
245
- .addElement(presentingEl.querySelector('.modal-shadow'))
379
+ .addElement(presentingElRoot.querySelector('.modal-shadow'))
246
380
  .afterStyles({
247
381
  'transform': 'translateY(0) scale(1)'
248
382
  })
@@ -260,60 +394,293 @@ const iosLeaveAnimation = (baseEl, presentingEl, duration = 500) => {
260
394
  return baseAnimation;
261
395
  };
262
396
 
263
- /**
264
- * Md Modal Enter Animation
397
+ /*!
398
+ * (C) Ionic http://ionicframework.com - MIT License
265
399
  */
266
- const mdEnterAnimation = (baseEl) => {
267
- const baseAnimation = animation.createAnimation();
268
- const backdropAnimation = animation.createAnimation();
269
- const wrapperAnimation = animation.createAnimation();
270
- backdropAnimation
271
- .addElement(baseEl.querySelector('ion-backdrop'))
400
+ const createEnterAnimation = () => {
401
+ const backdropAnimation = animation.createAnimation()
272
402
  .fromTo('opacity', 0.01, 'var(--backdrop-opacity)')
273
403
  .beforeStyles({
274
404
  'pointer-events': 'none'
275
405
  })
276
406
  .afterClearStyles(['pointer-events']);
277
- wrapperAnimation
278
- .addElement(baseEl.querySelector('.modal-wrapper'))
407
+ const wrapperAnimation = animation.createAnimation()
279
408
  .keyframes([
280
409
  { offset: 0, opacity: 0.01, transform: 'translateY(40px)' },
281
- { offset: 1, opacity: 1, transform: 'translateY(0px)' }
410
+ { offset: 1, opacity: 1, transform: `translateY(0px)` }
282
411
  ]);
283
- return baseAnimation
412
+ return { backdropAnimation, wrapperAnimation };
413
+ };
414
+ /**
415
+ * Md Modal Enter Animation
416
+ */
417
+ const mdEnterAnimation = (baseEl, opts) => {
418
+ const { currentBreakpoint } = opts;
419
+ const root = helpers.getElementRoot(baseEl);
420
+ const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
421
+ backdropAnimation
422
+ .addElement(root.querySelector('ion-backdrop'));
423
+ wrapperAnimation
424
+ .addElement(root.querySelector('.modal-wrapper'));
425
+ return animation.createAnimation()
284
426
  .addElement(baseEl)
285
427
  .easing('cubic-bezier(0.36,0.66,0.04,1)')
286
428
  .duration(280)
287
429
  .addAnimation([backdropAnimation, wrapperAnimation]);
288
430
  };
289
431
 
290
- /**
291
- * Md Modal Leave Animation
432
+ /*!
433
+ * (C) Ionic http://ionicframework.com - MIT License
292
434
  */
293
- const mdLeaveAnimation = (baseEl) => {
294
- const baseAnimation = animation.createAnimation();
295
- const backdropAnimation = animation.createAnimation();
296
- const wrapperAnimation = animation.createAnimation();
297
- const wrapperEl = baseEl.querySelector('.modal-wrapper');
298
- backdropAnimation
299
- .addElement(baseEl.querySelector('ion-backdrop'))
300
- .fromTo('opacity', 'var(--backdrop-opacity)', 0.0);
301
- wrapperAnimation
302
- .addElement(wrapperEl)
435
+ const createLeaveAnimation = () => {
436
+ const backdropAnimation = animation.createAnimation()
437
+ .fromTo('opacity', 'var(--backdrop-opacity)', 0);
438
+ const wrapperAnimation = animation.createAnimation()
303
439
  .keyframes([
304
- { offset: 0, opacity: 0.99, transform: 'translateY(0px)' },
440
+ { offset: 0, opacity: 0.99, transform: `translateY(0px)` },
305
441
  { offset: 1, opacity: 0, transform: 'translateY(40px)' }
306
442
  ]);
307
- return baseAnimation
308
- .addElement(baseEl)
443
+ return { backdropAnimation, wrapperAnimation };
444
+ };
445
+ /**
446
+ * Md Modal Leave Animation
447
+ */
448
+ const mdLeaveAnimation = (baseEl, opts) => {
449
+ const { currentBreakpoint } = opts;
450
+ const root = helpers.getElementRoot(baseEl);
451
+ const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation();
452
+ backdropAnimation.addElement(root.querySelector('ion-backdrop'));
453
+ wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
454
+ return animation.createAnimation()
309
455
  .easing('cubic-bezier(0.47,0,0.745,0.715)')
310
456
  .duration(200)
311
457
  .addAnimation([backdropAnimation, wrapperAnimation]);
312
458
  };
313
459
 
314
- 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)}}";
460
+ /*!
461
+ * (C) Ionic http://ionicframework.com - MIT License
462
+ */
463
+ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], onDismiss, onBreakpointChange) => {
464
+ // Defaults for the sheet swipe animation
465
+ const defaultBackdrop = [
466
+ { offset: 0, opacity: 'var(--backdrop-opacity)' },
467
+ { offset: 1, opacity: 0.01 }
468
+ ];
469
+ const customBackdrop = [
470
+ { offset: 0, opacity: 'var(--backdrop-opacity)' },
471
+ { offset: 1 - backdropBreakpoint, opacity: 0 },
472
+ { offset: 1, opacity: 0 }
473
+ ];
474
+ const SheetDefaults = {
475
+ WRAPPER_KEYFRAMES: [
476
+ { offset: 0, transform: 'translateY(0%)' },
477
+ { offset: 1, transform: 'translateY(100%)' }
478
+ ],
479
+ BACKDROP_KEYFRAMES: (backdropBreakpoint !== 0) ? customBackdrop : defaultBackdrop
480
+ };
481
+ const contentEl = baseEl.querySelector('ion-content');
482
+ const height = wrapperEl.clientHeight;
483
+ let currentBreakpoint = initialBreakpoint;
484
+ let offset = 0;
485
+ const wrapperAnimation = animation.childAnimations.find(ani => ani.id === 'wrapperAnimation');
486
+ const backdropAnimation = animation.childAnimations.find(ani => ani.id === 'backdropAnimation');
487
+ const maxBreakpoint = breakpoints[breakpoints.length - 1];
488
+ const enableBackdrop = () => {
489
+ baseEl.style.setProperty('pointer-events', 'auto');
490
+ backdropEl.style.setProperty('pointer-events', 'auto');
491
+ /**
492
+ * When the backdrop is enabled, elements such
493
+ * as inputs should not be focusable outside
494
+ * the sheet.
495
+ */
496
+ baseEl.classList.remove('ion-disable-focus-trap');
497
+ };
498
+ const disableBackdrop = () => {
499
+ baseEl.style.setProperty('pointer-events', 'none');
500
+ backdropEl.style.setProperty('pointer-events', 'none');
501
+ /**
502
+ * When the backdrop is enabled, elements such
503
+ * as inputs should not be focusable outside
504
+ * the sheet.
505
+ * Adding this class disables focus trapping
506
+ * for the sheet temporarily.
507
+ */
508
+ baseEl.classList.add('ion-disable-focus-trap');
509
+ };
510
+ /**
511
+ * After the entering animation completes,
512
+ * we need to set the animation to go from
513
+ * offset 0 to offset 1 so that users can
514
+ * swipe in any direction. We then set the
515
+ * animation offset to the current breakpoint
516
+ * so there is no flickering.
517
+ */
518
+ if (wrapperAnimation && backdropAnimation) {
519
+ wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
520
+ backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
521
+ animation.progressStart(true, 1 - currentBreakpoint);
522
+ /**
523
+ * If backdrop is not enabled, then content
524
+ * behind modal should be clickable. To do this, we need
525
+ * to remove pointer-events from ion-modal as a whole.
526
+ * ion-backdrop and .modal-wrapper always have pointer-events: auto
527
+ * applied, so the modal content can still be interacted with.
528
+ */
529
+ const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint;
530
+ if (shouldEnableBackdrop) {
531
+ enableBackdrop();
532
+ }
533
+ else {
534
+ disableBackdrop();
535
+ }
536
+ }
537
+ if (contentEl && currentBreakpoint !== maxBreakpoint) {
538
+ contentEl.scrollY = false;
539
+ }
540
+ const canStart = (detail) => {
541
+ /**
542
+ * If the sheet is fully expanded and
543
+ * the user is swiping on the content,
544
+ * the gesture should not start to
545
+ * allow for scrolling on the content.
546
+ */
547
+ const content = detail.event.target.closest('ion-content');
548
+ if (currentBreakpoint === 1 && content) {
549
+ return false;
550
+ }
551
+ return true;
552
+ };
553
+ const onStart = () => {
554
+ /**
555
+ * If swiping on the content
556
+ * we should disable scrolling otherwise
557
+ * the sheet will expand and the content will scroll.
558
+ */
559
+ if (contentEl) {
560
+ contentEl.scrollY = false;
561
+ }
562
+ helpers.raf(() => {
563
+ /**
564
+ * Dismisses the open keyboard when the sheet drag gesture is started.
565
+ * Sets the focus onto the modal element.
566
+ */
567
+ baseEl.focus();
568
+ });
569
+ animation.progressStart(true, 1 - currentBreakpoint);
570
+ };
571
+ const onMove = (detail) => {
572
+ /**
573
+ * Given the change in gesture position on the Y axis,
574
+ * compute where the offset of the animation should be
575
+ * relative to where the user dragged.
576
+ */
577
+ const initialStep = 1 - currentBreakpoint;
578
+ offset = helpers.clamp(0.0001, initialStep + (detail.deltaY / height), 0.9999);
579
+ animation.progressStep(offset);
580
+ };
581
+ const onEnd = (detail) => {
582
+ /**
583
+ * When the gesture releases, we need to determine
584
+ * the closest breakpoint to snap to.
585
+ */
586
+ const velocity = detail.velocityY;
587
+ const threshold = (detail.deltaY + velocity * 100) / height;
588
+ const diff = currentBreakpoint - threshold;
589
+ const closest = breakpoints.reduce((a, b) => {
590
+ return Math.abs(b - diff) < Math.abs(a - diff) ? b : a;
591
+ });
592
+ const shouldRemainOpen = closest !== 0;
593
+ currentBreakpoint = 0;
594
+ /**
595
+ * Update the animation so that it plays from
596
+ * the last offset to the closest snap point.
597
+ */
598
+ if (wrapperAnimation && backdropAnimation) {
599
+ wrapperAnimation.keyframes([
600
+ { offset: 0, transform: `translateY(${offset * 100}%)` },
601
+ { offset: 1, transform: `translateY(${(1 - closest) * 100}%)` }
602
+ ]);
603
+ backdropAnimation.keyframes([
604
+ { offset: 0, opacity: `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(1 - offset, backdropBreakpoint)})` },
605
+ { offset: 1, opacity: `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(closest, backdropBreakpoint)})` }
606
+ ]);
607
+ animation.progressStep(0);
608
+ }
609
+ /**
610
+ * Gesture should remain disabled until the
611
+ * snapping animation completes.
612
+ */
613
+ gesture.enable(false);
614
+ animation
615
+ .onFinish(() => {
616
+ if (shouldRemainOpen) {
617
+ /**
618
+ * Once the snapping animation completes,
619
+ * we need to reset the animation to go
620
+ * from 0 to 1 so users can swipe in any direction.
621
+ * We then set the animation offset to the current
622
+ * breakpoint so that it starts at the snapped position.
623
+ */
624
+ if (wrapperAnimation && backdropAnimation) {
625
+ helpers.raf(() => {
626
+ wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
627
+ backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
628
+ animation.progressStart(true, 1 - closest);
629
+ currentBreakpoint = closest;
630
+ onBreakpointChange(currentBreakpoint);
631
+ /**
632
+ * If the sheet is fully expanded, we can safely
633
+ * enable scrolling again.
634
+ */
635
+ if (contentEl && currentBreakpoint === breakpoints[breakpoints.length - 1]) {
636
+ contentEl.scrollY = true;
637
+ }
638
+ /**
639
+ * Backdrop should become enabled
640
+ * after the backdropBreakpoint value
641
+ */
642
+ const shouldEnableBackdrop = currentBreakpoint > backdropBreakpoint;
643
+ if (shouldEnableBackdrop) {
644
+ enableBackdrop();
645
+ }
646
+ else {
647
+ disableBackdrop();
648
+ }
649
+ gesture.enable(true);
650
+ });
651
+ }
652
+ else {
653
+ gesture.enable(true);
654
+ }
655
+ }
656
+ /**
657
+ * This must be a one time callback
658
+ * otherwise a new callback will
659
+ * be added every time onEnd runs.
660
+ */
661
+ }, { oneTimeCallback: true })
662
+ .progressEnd(1, 0, 500);
663
+ if (!shouldRemainOpen) {
664
+ onDismiss();
665
+ }
666
+ };
667
+ const gesture = index.createGesture({
668
+ el: wrapperEl,
669
+ gestureName: 'modalSheet',
670
+ gesturePriority: 40,
671
+ direction: 'y',
672
+ threshold: 10,
673
+ canStart,
674
+ onStart,
675
+ onMove,
676
+ onEnd
677
+ });
678
+ return gesture;
679
+ };
680
+
681
+ 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}";
315
682
 
316
- 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}";
683
+ 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}";
317
684
 
318
685
  const Modal = class {
319
686
  constructor(hostRef) {
@@ -322,13 +689,33 @@ const Modal = class {
322
689
  this.willPresent = index$1.createEvent(this, "ionModalWillPresent", 7);
323
690
  this.willDismiss = index$1.createEvent(this, "ionModalWillDismiss", 7);
324
691
  this.didDismiss = index$1.createEvent(this, "ionModalDidDismiss", 7);
692
+ this.didPresentShorthand = index$1.createEvent(this, "didPresent", 7);
693
+ this.willPresentShorthand = index$1.createEvent(this, "willPresent", 7);
694
+ this.willDismissShorthand = index$1.createEvent(this, "willDismiss", 7);
695
+ this.didDismissShorthand = index$1.createEvent(this, "didDismiss", 7);
696
+ this.modalIndex = modalIds++;
697
+ this.coreDelegate = frameworkDelegate.CoreDelegate();
698
+ this.isSheetModal = false;
699
+ this.inline = false;
325
700
  // Whether or not modal is being dismissed via gesture
326
701
  this.gestureAnimationDismissing = false;
327
702
  this.presented = false;
703
+ /** @internal */
704
+ this.hasController = false;
328
705
  /**
329
706
  * If `true`, the keyboard will be automatically dismissed when the overlay is presented.
330
707
  */
331
708
  this.keyboardClose = true;
709
+ /**
710
+ * A decimal value between 0 and 1 that indicates the
711
+ * point after which the backdrop will begin to fade in
712
+ * when using a sheet modal. Prior to this point, the
713
+ * backdrop will be hidden and the content underneath
714
+ * the sheet can be interacted with. This value is exclusive
715
+ * meaning the backdrop will become active after the value
716
+ * specified.
717
+ */
718
+ this.backdropBreakpoint = 0;
332
719
  /**
333
720
  * If `true`, the modal will be dismissed when the backdrop is clicked.
334
721
  */
@@ -345,6 +732,34 @@ const Modal = class {
345
732
  * If `true`, the modal can be swiped to dismiss. Only applies in iOS mode.
346
733
  */
347
734
  this.swipeToClose = false;
735
+ /**
736
+ * If `true`, the modal will open. If `false`, the modal will close.
737
+ * Use this if you need finer grained control over presentation, otherwise
738
+ * just use the modalController or the `trigger` property.
739
+ * Note: `isOpen` will not automatically be set back to `false` when
740
+ * the modal dismisses. You will need to do that in your code.
741
+ */
742
+ this.isOpen = false;
743
+ this.configureTriggerInteraction = () => {
744
+ const { trigger, el, destroyTriggerInteraction } = this;
745
+ if (destroyTriggerInteraction) {
746
+ destroyTriggerInteraction();
747
+ }
748
+ const triggerEl = (trigger !== undefined) ? document.getElementById(trigger) : null;
749
+ if (!triggerEl) {
750
+ return;
751
+ }
752
+ const configureTriggerInteraction = (trigEl, modalEl) => {
753
+ const openModal = () => {
754
+ modalEl.present();
755
+ };
756
+ trigEl.addEventListener('click', openModal);
757
+ return () => {
758
+ trigEl.removeEventListener('click', openModal);
759
+ };
760
+ };
761
+ this.destroyTriggerInteraction = configureTriggerInteraction(triggerEl, el);
762
+ };
348
763
  this.onBackdropTap = () => {
349
764
  this.dismiss(undefined, overlays.BACKDROP);
350
765
  };
@@ -366,6 +781,17 @@ const Modal = class {
366
781
  }
367
782
  };
368
783
  }
784
+ onIsOpenChange(newValue, oldValue) {
785
+ if (newValue === true && oldValue === false) {
786
+ this.present();
787
+ }
788
+ else if (newValue === false && oldValue === true) {
789
+ this.dismiss();
790
+ }
791
+ }
792
+ onTriggerChange() {
793
+ this.configureTriggerInteraction();
794
+ }
369
795
  swipeToCloseChanged(enable) {
370
796
  if (this.gesture) {
371
797
  this.gesture.enable(enable);
@@ -377,6 +803,58 @@ const Modal = class {
377
803
  connectedCallback() {
378
804
  overlays.prepareOverlay(this.el);
379
805
  }
806
+ componentWillLoad() {
807
+ const { breakpoints, initialBreakpoint } = this;
808
+ /**
809
+ * If user has custom ID set then we should
810
+ * not assign the default incrementing ID.
811
+ */
812
+ this.modalId = (this.el.hasAttribute('id')) ? this.el.getAttribute('id') : `ion-modal-${this.modalIndex}`;
813
+ this.isSheetModal = breakpoints !== undefined && initialBreakpoint !== undefined;
814
+ if (breakpoints !== undefined && initialBreakpoint !== undefined && !breakpoints.includes(initialBreakpoint)) {
815
+ console.warn('[Ionic Warning]: Your breakpoints array must include the initialBreakpoint value.');
816
+ }
817
+ }
818
+ componentDidLoad() {
819
+ /**
820
+ * If modal was rendered with isOpen="true"
821
+ * then we should open modal immediately.
822
+ */
823
+ if (this.isOpen === true) {
824
+ helpers.raf(() => this.present());
825
+ }
826
+ this.configureTriggerInteraction();
827
+ }
828
+ /**
829
+ * Determines whether or not an overlay
830
+ * is being used inline or via a controller/JS
831
+ * and returns the correct delegate.
832
+ * By default, subsequent calls to getDelegate
833
+ * will use a cached version of the delegate.
834
+ * This is useful for calling dismiss after
835
+ * present so that the correct delegate is given.
836
+ */
837
+ getDelegate(force = false) {
838
+ if (this.workingDelegate && !force) {
839
+ return {
840
+ delegate: this.workingDelegate,
841
+ inline: this.inline
842
+ };
843
+ }
844
+ /**
845
+ * If using overlay inline
846
+ * we potentially need to use the coreDelegate
847
+ * so that this works in vanilla JS apps.
848
+ * If a developer has presented this component
849
+ * via a controller, then we can assume
850
+ * the component is already in the
851
+ * correct place.
852
+ */
853
+ const parentEl = this.el.parentNode;
854
+ const inline = this.inline = parentEl !== null && !this.hasController;
855
+ const delegate = this.workingDelegate = (inline) ? this.delegate || this.coreDelegate : this.delegate;
856
+ return { inline, delegate };
857
+ }
380
858
  /**
381
859
  * Present the modal overlay after it has been created.
382
860
  */
@@ -384,18 +862,54 @@ const Modal = class {
384
862
  if (this.presented) {
385
863
  return;
386
864
  }
387
- const container = this.el.querySelector(`.modal-wrapper`);
388
- if (!container) {
389
- throw new Error('container is undefined');
865
+ /**
866
+ * When using an inline modal
867
+ * and dismissing a modal it is possible to
868
+ * quickly present the modal while it is
869
+ * dismissing. We need to await any current
870
+ * transition to allow the dismiss to finish
871
+ * before presenting again.
872
+ */
873
+ if (this.currentTransition !== undefined) {
874
+ await this.currentTransition;
390
875
  }
391
- const componentProps = Object.assign(Object.assign({}, this.componentProps), { modal: this.el });
392
- this.usersElement = await frameworkDelegate.attachComponent(this.delegate, container, this.component, ['ion-page'], componentProps);
876
+ const data = Object.assign(Object.assign({}, this.componentProps), { modal: this.el });
877
+ const { inline, delegate } = this.getDelegate(true);
878
+ this.usersElement = await frameworkDelegate.attachComponent(delegate, this.el, this.component, ['ion-page'], data, inline);
393
879
  await index$2.deepReady(this.usersElement);
394
880
  index$1.writeTask(() => this.el.classList.add('show-modal'));
395
- await overlays.present(this, 'modalEnter', iosEnterAnimation, mdEnterAnimation, this.presentingElement);
396
- if (this.swipeToClose) {
881
+ this.currentTransition = overlays.present(this, 'modalEnter', iosEnterAnimation, mdEnterAnimation, { presentingEl: this.presentingElement, currentBreakpoint: this.initialBreakpoint, backdropBreakpoint: this.backdropBreakpoint });
882
+ await this.currentTransition;
883
+ if (this.isSheetModal) {
884
+ this.initSheetGesture();
885
+ }
886
+ else if (this.swipeToClose) {
397
887
  this.initSwipeToClose();
398
888
  }
889
+ /* tslint:disable-next-line */
890
+ if (typeof window !== 'undefined') {
891
+ this.keyboardOpenCallback = () => {
892
+ if (this.gesture) {
893
+ /**
894
+ * When the native keyboard is opened and the webview
895
+ * is resized, the gesture implementation will become unresponsive
896
+ * and enter a free-scroll mode.
897
+ *
898
+ * When the keyboard is opened, we disable the gesture for
899
+ * a single frame and re-enable once the contents have repositioned
900
+ * from the keyboard placement.
901
+ */
902
+ this.gesture.enable(false);
903
+ helpers.raf(() => {
904
+ if (this.gesture) {
905
+ this.gesture.enable(true);
906
+ }
907
+ });
908
+ }
909
+ };
910
+ window.addEventListener(keyboard.KEYBOARD_DID_OPEN, this.keyboardOpenCallback);
911
+ }
912
+ this.currentTransition = undefined;
399
913
  }
400
914
  initSwipeToClose() {
401
915
  if (ionicGlobal.getIonMode(this) !== 'ios') {
@@ -405,7 +919,7 @@ const Modal = class {
405
919
  // should be in the DOM and referenced by now, except
406
920
  // for the presenting el
407
921
  const animationBuilder = this.leaveAnimation || ionicGlobal.config.get('modalLeave', iosLeaveAnimation);
408
- const ani = this.animation = animationBuilder(this.el, this.presentingElement);
922
+ const ani = this.animation = animationBuilder(this.el, { presentingEl: this.presentingElement });
409
923
  this.gesture = createSwipeToCloseGesture(this.el, ani, () => {
410
924
  /**
411
925
  * While the gesture animation is finishing
@@ -425,6 +939,37 @@ const Modal = class {
425
939
  });
426
940
  this.gesture.enable(true);
427
941
  }
942
+ initSheetGesture() {
943
+ var _a;
944
+ const { wrapperEl, initialBreakpoint, backdropBreakpoint } = this;
945
+ if (!wrapperEl || initialBreakpoint === undefined) {
946
+ return;
947
+ }
948
+ const animationBuilder = this.enterAnimation || ionicGlobal.config.get('modalEnter', iosEnterAnimation);
949
+ const ani = this.animation = animationBuilder(this.el, { presentingEl: this.presentingElement, currentBreakpoint: initialBreakpoint, backdropBreakpoint });
950
+ ani.progressStart(true, 1);
951
+ const sortedBreakpoints = ((_a = this.breakpoints) === null || _a === void 0 ? void 0 : _a.sort((a, b) => a - b)) || [];
952
+ this.gesture = createSheetGesture(this.el, this.backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, ani, sortedBreakpoints, () => {
953
+ /**
954
+ * While the gesture animation is finishing
955
+ * it is possible for a user to tap the backdrop.
956
+ * This would result in the dismiss animation
957
+ * being played again. Typically this is avoided
958
+ * by setting `presented = false` on the overlay
959
+ * component; however, we cannot do that here as
960
+ * that would prevent the element from being
961
+ * removed from the DOM.
962
+ */
963
+ this.gestureAnimationDismissing = true;
964
+ this.animation.onFinish(async () => {
965
+ await this.dismiss(undefined, 'gesture');
966
+ this.gestureAnimationDismissing = false;
967
+ });
968
+ }, (breakpoint) => {
969
+ this.currentBreakpoint = breakpoint;
970
+ });
971
+ this.gesture.enable(true);
972
+ }
428
973
  /**
429
974
  * Dismiss the modal overlay after it has been presented.
430
975
  *
@@ -435,15 +980,37 @@ const Modal = class {
435
980
  if (this.gestureAnimationDismissing && role !== 'gesture') {
436
981
  return false;
437
982
  }
983
+ /* tslint:disable-next-line */
984
+ if (typeof window !== 'undefined' && this.keyboardOpenCallback) {
985
+ window.removeEventListener(keyboard.KEYBOARD_DID_OPEN, this.keyboardOpenCallback);
986
+ }
987
+ /**
988
+ * When using an inline modal
989
+ * and presenting a modal it is possible to
990
+ * quickly dismiss the modal while it is
991
+ * presenting. We need to await any current
992
+ * transition to allow the present to finish
993
+ * before dismissing again.
994
+ */
995
+ if (this.currentTransition !== undefined) {
996
+ await this.currentTransition;
997
+ }
438
998
  const enteringAnimation = overlays.activeAnimations.get(this) || [];
439
- const dismissed = await overlays.dismiss(this, data, role, 'modalLeave', iosLeaveAnimation, mdLeaveAnimation, this.presentingElement);
999
+ this.currentTransition = overlays.dismiss(this, data, role, 'modalLeave', iosLeaveAnimation, mdLeaveAnimation, { presentingEl: this.presentingElement, currentBreakpoint: this.currentBreakpoint || this.initialBreakpoint, backdropBreakpoint: this.backdropBreakpoint });
1000
+ const dismissed = await this.currentTransition;
440
1001
  if (dismissed) {
441
- await frameworkDelegate.detachComponent(this.delegate, this.usersElement);
1002
+ const { delegate } = this.getDelegate();
1003
+ await frameworkDelegate.detachComponent(delegate, this.usersElement);
1004
+ index$1.writeTask(() => this.el.classList.remove('show-modal'));
442
1005
  if (this.animation) {
443
1006
  this.animation.destroy();
444
1007
  }
1008
+ if (this.gesture) {
1009
+ this.gesture.destroy();
1010
+ }
445
1011
  enteringAnimation.forEach(ani => ani.destroy());
446
1012
  }
1013
+ this.currentTransition = undefined;
447
1014
  this.animation = undefined;
448
1015
  return dismissed;
449
1016
  }
@@ -460,13 +1027,19 @@ const Modal = class {
460
1027
  return overlays.eventMethod(this.el, 'ionModalWillDismiss');
461
1028
  }
462
1029
  render() {
1030
+ const { handle, isSheetModal, presentingElement, htmlAttributes } = this;
1031
+ const showHandle = handle !== false && isSheetModal;
463
1032
  const mode = ionicGlobal.getIonMode(this);
464
- return (index$1.h(index$1.Host, { "no-router": true, "aria-modal": "true", tabindex: "-1", class: Object.assign({ [mode]: true, [`modal-card`]: this.presentingElement !== undefined && mode === 'ios' }, theme.getClassMap(this.cssClass)), style: {
1033
+ const { modalId } = this;
1034
+ const isCardModal = presentingElement !== undefined && mode === 'ios';
1035
+ return (index$1.h(index$1.Host, Object.assign({ "no-router": true, "aria-modal": "true", tabindex: "-1" }, htmlAttributes, { style: {
465
1036
  zIndex: `${20000 + this.overlayIndex}`,
466
- }, onIonBackdropTap: this.onBackdropTap, onIonDismiss: this.onDismiss, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle }, index$1.h("ion-backdrop", { visible: this.showBackdrop, tappable: this.backdropDismiss }), mode === 'ios' && index$1.h("div", { class: "modal-shadow" }), index$1.h("div", { tabindex: "0" }), index$1.h("div", { role: "dialog", class: "modal-wrapper ion-overlay-wrapper" }), index$1.h("div", { tabindex: "0" })));
1037
+ }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, 'overlay-hidden': true }, theme.getClassMap(this.cssClass)), id: modalId, onIonBackdropTap: this.onBackdropTap, onIonDismiss: this.onDismiss, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle }), index$1.h("ion-backdrop", { ref: el => this.backdropEl = el, visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && index$1.h("div", { class: "modal-shadow" }), index$1.h("div", { role: "dialog", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: el => this.wrapperEl = el }, showHandle && index$1.h("div", { class: "modal-handle", part: "handle" }), index$1.h("slot", null))));
467
1038
  }
468
1039
  get el() { return index$1.getElement(this); }
469
1040
  static get watchers() { return {
1041
+ "isOpen": ["onIsOpenChange"],
1042
+ "trigger": ["onTriggerChange"],
470
1043
  "swipeToClose": ["swipeToCloseChanged"]
471
1044
  }; }
472
1045
  };
@@ -476,6 +1049,7 @@ const LIFECYCLE_MAP = {
476
1049
  'ionModalWillDismiss': 'ionViewWillLeave',
477
1050
  'ionModalDidDismiss': 'ionViewDidLeave',
478
1051
  };
1052
+ let modalIds = 0;
479
1053
  Modal.style = {
480
1054
  ios: modalIosCss,
481
1055
  md: modalMdCss