@ionic/core 8.4.4-dev.11738767677.1295fa00 → 8.4.4-dev.11738863153.1dafb0b9

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 (269) hide show
  1. package/components/checkbox.js +6 -4
  2. package/components/content.js +4 -4
  3. package/components/index6.js +11 -3
  4. package/components/ion-select.js +6 -4
  5. package/components/ion-tab-button.js +1 -1
  6. package/components/ion-tab.js +2 -2
  7. package/components/ion-tabs.js +2 -1
  8. package/components/ion-toggle.js +6 -4
  9. package/components/modal.js +259 -35
  10. package/components/toolbar.js +2 -2
  11. package/css/core.css.map +1 -1
  12. package/css/ionic.bundle.css.map +1 -1
  13. package/dist/cjs/{data-21dc0f81.js → data-108e531d.js} +1 -1
  14. package/dist/cjs/{index-5b6a7459.js → index-0d762bba.js} +1 -1
  15. package/dist/cjs/{index-5915f9b3.js → index-2a46a047.js} +11 -3
  16. package/dist/cjs/{index-8e789962.js → index-3652c918.js} +1 -1
  17. package/dist/cjs/{index-f05acd21.js → index-e975c92b.js} +3 -3
  18. package/dist/cjs/index.cjs.js +6 -6
  19. package/dist/cjs/{input-shims-9e59ef62.js → input-shims-cd05268a.js} +4 -2
  20. package/dist/cjs/{input.utils-611cde0b.js → input.utils-ffb2f81b.js} +1 -1
  21. package/dist/cjs/ion-accordion_2.cjs.entry.js +1 -1
  22. package/dist/cjs/ion-action-sheet.cjs.entry.js +2 -2
  23. package/dist/cjs/ion-alert.cjs.entry.js +2 -2
  24. package/dist/cjs/ion-app_8.cjs.entry.js +11 -11
  25. package/dist/cjs/ion-button_2.cjs.entry.js +1 -1
  26. package/dist/cjs/ion-checkbox.cjs.entry.js +5 -4
  27. package/dist/cjs/ion-datetime-button.cjs.entry.js +2 -2
  28. package/dist/cjs/ion-datetime_3.cjs.entry.js +3 -3
  29. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +2 -2
  30. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +1 -1
  31. package/dist/cjs/ion-input.cjs.entry.js +2 -2
  32. package/dist/cjs/ion-item-option_3.cjs.entry.js +2 -2
  33. package/dist/cjs/ion-loading.cjs.entry.js +2 -2
  34. package/dist/cjs/ion-menu_3.cjs.entry.js +3 -3
  35. package/dist/cjs/ion-modal.cjs.entry.js +262 -39
  36. package/dist/cjs/ion-nav_2.cjs.entry.js +2 -2
  37. package/dist/cjs/ion-popover.cjs.entry.js +3 -3
  38. package/dist/cjs/ion-range.cjs.entry.js +2 -2
  39. package/dist/cjs/ion-refresher_2.cjs.entry.js +2 -2
  40. package/dist/cjs/ion-reorder_2.cjs.entry.js +2 -2
  41. package/dist/cjs/ion-select-modal.cjs.entry.js +2 -2
  42. package/dist/cjs/ion-select_3.cjs.entry.js +7 -6
  43. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +1 -1
  44. package/dist/cjs/ion-tab_2.cjs.entry.js +4 -3
  45. package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
  46. package/dist/cjs/ion-toast.cjs.entry.js +2 -2
  47. package/dist/cjs/ion-toggle.cjs.entry.js +5 -4
  48. package/dist/cjs/ionic.cjs.js +1 -1
  49. package/dist/cjs/{ios.transition-cf40433b.js → ios.transition-0e664e88.js} +2 -2
  50. package/dist/cjs/loader.cjs.js +1 -1
  51. package/dist/cjs/{md.transition-ededf99f.js → md.transition-2e8aef2c.js} +2 -2
  52. package/dist/cjs/{overlays-aa669eb8.js → overlays-65fdaff6.js} +1 -1
  53. package/dist/cjs/{status-tap-37681226.js → status-tap-d74f1429.js} +3 -2
  54. package/dist/collection/components/checkbox/checkbox.js +23 -4
  55. package/dist/collection/components/content/content.js +4 -4
  56. package/dist/collection/components/modal/animations/ios.enter.js +50 -4
  57. package/dist/collection/components/modal/animations/ios.leave.js +24 -2
  58. package/dist/collection/components/modal/animations/md.enter.js +52 -5
  59. package/dist/collection/components/modal/animations/md.leave.js +26 -3
  60. package/dist/collection/components/modal/animations/sheet.js +11 -2
  61. package/dist/collection/components/modal/gestures/sheet.js +79 -10
  62. package/dist/collection/components/modal/modal.ios.css +16 -0
  63. package/dist/collection/components/modal/modal.js +32 -7
  64. package/dist/collection/components/modal/modal.md.css +6 -0
  65. package/dist/collection/components/select/select.js +23 -4
  66. package/dist/collection/components/tab/tab.js +2 -2
  67. package/dist/collection/components/tab-button/tab-button.js +1 -1
  68. package/dist/collection/components/tabs/tabs.js +2 -1
  69. package/dist/collection/components/toggle/toggle.js +23 -4
  70. package/dist/collection/components/toolbar/toolbar.js +6 -2
  71. package/dist/collection/utils/logging/index.js +10 -3
  72. package/dist/docs.json +115 -2
  73. package/dist/esm/{data-ae11fd43.js → data-b3284b5e.js} +1 -1
  74. package/dist/esm/{index-3ad7f18b.js → index-2f7fde3d.js} +3 -3
  75. package/dist/esm/{index-9b0d46f4.js → index-6ad967f3.js} +11 -3
  76. package/dist/esm/{index-24b48b06.js → index-cb21eccb.js} +1 -1
  77. package/dist/esm/{index-5cc724f3.js → index-efb8ecdf.js} +1 -1
  78. package/dist/esm/index.js +6 -6
  79. package/dist/esm/{input-shims-0314bbe5.js → input-shims-2fd7c6ef.js} +4 -2
  80. package/dist/esm/{input.utils-09c71bc7.js → input.utils-961c9f17.js} +1 -1
  81. package/dist/esm/ion-accordion_2.entry.js +1 -1
  82. package/dist/esm/ion-action-sheet.entry.js +2 -2
  83. package/dist/esm/ion-alert.entry.js +2 -2
  84. package/dist/esm/ion-app_8.entry.js +11 -11
  85. package/dist/esm/ion-button_2.entry.js +1 -1
  86. package/dist/esm/ion-checkbox.entry.js +5 -4
  87. package/dist/esm/ion-datetime-button.entry.js +2 -2
  88. package/dist/esm/ion-datetime_3.entry.js +3 -3
  89. package/dist/esm/ion-infinite-scroll_2.entry.js +2 -2
  90. package/dist/esm/ion-input-password-toggle.entry.js +1 -1
  91. package/dist/esm/ion-input.entry.js +2 -2
  92. package/dist/esm/ion-item-option_3.entry.js +2 -2
  93. package/dist/esm/ion-loading.entry.js +2 -2
  94. package/dist/esm/ion-menu_3.entry.js +3 -3
  95. package/dist/esm/ion-modal.entry.js +262 -39
  96. package/dist/esm/ion-nav_2.entry.js +2 -2
  97. package/dist/esm/ion-popover.entry.js +3 -3
  98. package/dist/esm/ion-range.entry.js +2 -2
  99. package/dist/esm/ion-refresher_2.entry.js +2 -2
  100. package/dist/esm/ion-reorder_2.entry.js +2 -2
  101. package/dist/esm/ion-select-modal.entry.js +2 -2
  102. package/dist/esm/ion-select_3.entry.js +7 -6
  103. package/dist/esm/ion-tab-bar_2.entry.js +1 -1
  104. package/dist/esm/ion-tab_2.entry.js +4 -3
  105. package/dist/esm/ion-textarea.entry.js +2 -2
  106. package/dist/esm/ion-toast.entry.js +2 -2
  107. package/dist/esm/ion-toggle.entry.js +5 -4
  108. package/dist/esm/ionic.js +1 -1
  109. package/dist/esm/{ios.transition-4ee1a3af.js → ios.transition-b1da3753.js} +2 -2
  110. package/dist/esm/loader.js +1 -1
  111. package/dist/esm/{md.transition-5106a0d2.js → md.transition-571b3859.js} +2 -2
  112. package/dist/esm/{overlays-e7b9d6d9.js → overlays-5deab4de.js} +1 -1
  113. package/dist/esm/{status-tap-f472b09f.js → status-tap-79eac0ac.js} +3 -2
  114. package/dist/esm-es5/{data-ae11fd43.js → data-b3284b5e.js} +1 -1
  115. package/dist/esm-es5/{index-3ad7f18b.js → index-2f7fde3d.js} +1 -1
  116. package/dist/esm-es5/index-6ad967f3.js +4 -0
  117. package/dist/esm-es5/{index-24b48b06.js → index-cb21eccb.js} +1 -1
  118. package/dist/esm-es5/{index-5cc724f3.js → index-efb8ecdf.js} +1 -1
  119. package/dist/esm-es5/index.js +1 -1
  120. package/dist/esm-es5/input-shims-2fd7c6ef.js +4 -0
  121. package/dist/esm-es5/{input.utils-09c71bc7.js → input.utils-961c9f17.js} +1 -1
  122. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  123. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  124. package/dist/esm-es5/ion-alert.entry.js +1 -1
  125. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  126. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  127. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  128. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  129. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  130. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  131. package/dist/esm-es5/ion-input-password-toggle.entry.js +1 -1
  132. package/dist/esm-es5/ion-input.entry.js +1 -1
  133. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  134. package/dist/esm-es5/ion-loading.entry.js +1 -1
  135. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  136. package/dist/esm-es5/ion-modal.entry.js +1 -1
  137. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  138. package/dist/esm-es5/ion-popover.entry.js +1 -1
  139. package/dist/esm-es5/ion-range.entry.js +1 -1
  140. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  141. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  142. package/dist/esm-es5/ion-select-modal.entry.js +1 -1
  143. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  144. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  145. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  146. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  147. package/dist/esm-es5/ion-toast.entry.js +1 -1
  148. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  149. package/dist/esm-es5/ionic.js +1 -1
  150. package/dist/esm-es5/{ios.transition-4ee1a3af.js → ios.transition-b1da3753.js} +1 -1
  151. package/dist/esm-es5/loader.js +1 -1
  152. package/dist/esm-es5/{md.transition-5106a0d2.js → md.transition-571b3859.js} +1 -1
  153. package/dist/esm-es5/{overlays-e7b9d6d9.js → overlays-5deab4de.js} +1 -1
  154. package/dist/esm-es5/status-tap-79eac0ac.js +4 -0
  155. package/dist/html.html-data.json +16 -0
  156. package/dist/ionic/index.esm.js +1 -1
  157. package/dist/ionic/ionic.esm.js +1 -1
  158. package/dist/ionic/p-0430c2e0.entry.js +4 -0
  159. package/dist/ionic/{p-6499df44.system.entry.js → p-05b74e45.system.entry.js} +1 -1
  160. package/dist/ionic/{p-21e5e7e4.js → p-0af823e1.js} +1 -1
  161. package/dist/ionic/{p-0c06e09b.system.js → p-0eb35a7f.system.js} +1 -1
  162. package/dist/ionic/{p-797eeea8.system.entry.js → p-1199e388.system.entry.js} +1 -1
  163. package/dist/ionic/{p-c9f3a539.entry.js → p-120fb79a.entry.js} +1 -1
  164. package/dist/ionic/p-126be614.system.entry.js +4 -0
  165. package/dist/ionic/{p-e563a35c.entry.js → p-15d18206.entry.js} +1 -1
  166. package/dist/ionic/{p-d60342e3.js → p-1a5bc5f7.js} +1 -1
  167. package/dist/ionic/{p-96cc4814.js → p-1ab13b2b.js} +1 -1
  168. package/dist/ionic/{p-f1acf541.system.entry.js → p-2346ab53.system.entry.js} +1 -1
  169. package/dist/ionic/{p-37cb43bd.system.entry.js → p-248318e0.system.entry.js} +1 -1
  170. package/dist/ionic/{p-e6635685.js → p-28706c6f.js} +1 -1
  171. package/dist/ionic/{p-6b280620.entry.js → p-2da9c8a7.entry.js} +1 -1
  172. package/dist/ionic/{p-b335ffed.system.entry.js → p-302b50bb.system.entry.js} +1 -1
  173. package/dist/ionic/p-322c5fb4.system.js +1 -1
  174. package/dist/ionic/{p-f687573e.system.js → p-343b6b1d.system.js} +1 -1
  175. package/dist/ionic/p-4c98e2cf.system.js +4 -0
  176. package/dist/ionic/p-577bc414.entry.js +4 -0
  177. package/dist/ionic/{p-66640ff7.system.entry.js → p-585b455c.system.entry.js} +1 -1
  178. package/dist/ionic/{p-c449820c.system.js → p-5c08627a.system.js} +1 -1
  179. package/dist/ionic/{p-9ee1e8a6.entry.js → p-5c9eb9af.entry.js} +1 -1
  180. package/dist/ionic/{p-9e33104d.entry.js → p-61db139d.entry.js} +1 -1
  181. package/dist/ionic/p-67222c16.system.js +4 -0
  182. package/dist/ionic/{p-32d44024.system.entry.js → p-6933c482.system.entry.js} +1 -1
  183. package/dist/ionic/p-6c95736e.entry.js +4 -0
  184. package/dist/ionic/{p-12a722b8.system.entry.js → p-6dfb0f39.system.entry.js} +1 -1
  185. package/dist/ionic/p-722ec9c7.entry.js +4 -0
  186. package/dist/ionic/{p-bc36ad98.system.entry.js → p-744c8672.system.entry.js} +1 -1
  187. package/dist/ionic/{p-5823babc.system.entry.js → p-74e3f0af.system.entry.js} +2 -2
  188. package/dist/ionic/p-7513b0c4.js +4 -0
  189. package/dist/ionic/p-783411f1.entry.js +4 -0
  190. package/dist/ionic/{p-508d024a.entry.js → p-7a02f476.entry.js} +1 -1
  191. package/dist/ionic/{p-efaffe74.entry.js → p-7a6eaf9e.entry.js} +1 -1
  192. package/dist/ionic/{p-e7ed4a7f.system.js → p-7de1e42c.system.js} +1 -1
  193. package/dist/ionic/{p-2fc0dafe.entry.js → p-8694928f.entry.js} +1 -1
  194. package/dist/ionic/{p-da074ff7.entry.js → p-89bf08c7.entry.js} +1 -1
  195. package/dist/ionic/{p-69666e8a.system.entry.js → p-8ac07653.system.entry.js} +2 -2
  196. package/dist/ionic/{p-c29f8157.system.entry.js → p-8cfba7e9.system.entry.js} +1 -1
  197. package/dist/ionic/{p-a61cba41.entry.js → p-92763d3d.entry.js} +1 -1
  198. package/dist/ionic/{p-d18ab582.system.entry.js → p-933727f9.system.entry.js} +1 -1
  199. package/dist/ionic/{p-06e58c4e.js → p-9343a445.js} +1 -1
  200. package/dist/ionic/{p-45693d7e.entry.js → p-948e6c6a.entry.js} +1 -1
  201. package/dist/ionic/p-98e41e4f.system.entry.js +4 -0
  202. package/dist/ionic/{p-2799c6d3.system.entry.js → p-9b122e3c.system.entry.js} +1 -1
  203. package/dist/ionic/{p-4439fc2a.entry.js → p-9b428d25.entry.js} +1 -1
  204. package/dist/ionic/{p-b2272f51.system.entry.js → p-9f364443.system.entry.js} +1 -1
  205. package/dist/ionic/{p-ca065903.system.entry.js → p-a090bce8.system.entry.js} +1 -1
  206. package/dist/ionic/p-a3db8ee3.js +4 -0
  207. package/dist/ionic/{p-14e159ea.system.entry.js → p-a4a2420e.system.entry.js} +1 -1
  208. package/dist/ionic/{p-9ea607bd.system.js → p-a88dec0d.system.js} +2 -2
  209. package/dist/ionic/{p-942b5e13.entry.js → p-a8f2c254.entry.js} +1 -1
  210. package/dist/ionic/{p-a49378bb.system.entry.js → p-ab674093.system.entry.js} +1 -1
  211. package/dist/ionic/{p-0aa833fb.system.js → p-ada36597.system.js} +1 -1
  212. package/dist/ionic/{p-9fa07aec.entry.js → p-b1eb86fd.entry.js} +1 -1
  213. package/dist/ionic/{p-a4565eb5.system.js → p-b3c60433.system.js} +1 -1
  214. package/dist/ionic/{p-d6841eac.js → p-b6efeab8.js} +1 -1
  215. package/dist/ionic/{p-ebf042e0.system.entry.js → p-bdf2cb2e.system.entry.js} +1 -1
  216. package/dist/ionic/{p-f9a53abb.system.js → p-c4238c12.system.js} +1 -1
  217. package/dist/ionic/{p-b82d4cab.js → p-cb13696c.js} +1 -1
  218. package/dist/ionic/{p-1046866e.system.entry.js → p-cba1f9bc.system.entry.js} +1 -1
  219. package/dist/ionic/p-d1c5b60e.system.js +4 -0
  220. package/dist/ionic/{p-5da94421.system.js → p-d22e2a38.system.js} +1 -1
  221. package/dist/ionic/p-d57a57d6.entry.js +4 -0
  222. package/dist/ionic/{p-2bd0ae94.system.entry.js → p-d6eaffb1.system.entry.js} +1 -1
  223. package/dist/ionic/p-d7dd8fb1.entry.js +4 -0
  224. package/dist/ionic/{p-1e010627.system.entry.js → p-e09d6392.system.entry.js} +2 -2
  225. package/dist/ionic/p-e3171ff3.entry.js +4 -0
  226. package/dist/ionic/p-e6376b93.system.entry.js +4 -0
  227. package/dist/ionic/{p-a43467d8.entry.js → p-e76dae93.entry.js} +1 -1
  228. package/dist/ionic/p-e8d56122.js +4 -0
  229. package/dist/ionic/{p-b79ba17c.entry.js → p-eef505e8.entry.js} +1 -1
  230. package/dist/ionic/{p-61e3f887.entry.js → p-f1060cd8.entry.js} +1 -1
  231. package/dist/ionic/{p-1fe02220.system.entry.js → p-f1120724.system.entry.js} +1 -1
  232. package/dist/ionic/{p-88e63c7d.js → p-f1c4dcd4.js} +1 -1
  233. package/dist/ionic/{p-982315a6.entry.js → p-f63c2d12.entry.js} +1 -1
  234. package/dist/ionic/{p-e4f69534.system.entry.js → p-fbd41a7e.system.entry.js} +1 -1
  235. package/dist/ionic/{p-19ec4f42.entry.js → p-fceec762.entry.js} +1 -1
  236. package/dist/types/components/checkbox/checkbox.d.ts +6 -0
  237. package/dist/types/components/modal/animations/sheet.d.ts +1 -0
  238. package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
  239. package/dist/types/components/modal/modal-interface.d.ts +1 -0
  240. package/dist/types/components/modal/modal.d.ts +11 -0
  241. package/dist/types/components/select/select.d.ts +6 -0
  242. package/dist/types/components/toggle/toggle.d.ts +6 -0
  243. package/dist/types/components/toolbar/toolbar.d.ts +4 -0
  244. package/dist/types/components.d.ts +32 -0
  245. package/dist/types/utils/config.d.ts +9 -0
  246. package/dist/types/utils/logging/index.d.ts +13 -1
  247. package/hydrate/index.js +301 -60
  248. package/hydrate/index.mjs +301 -60
  249. package/package.json +1 -1
  250. package/dist/esm-es5/index-9b0d46f4.js +0 -4
  251. package/dist/esm-es5/input-shims-0314bbe5.js +0 -4
  252. package/dist/esm-es5/status-tap-f472b09f.js +0 -4
  253. package/dist/ionic/p-0303d0f8.js +0 -4
  254. package/dist/ionic/p-06fee233.js +0 -4
  255. package/dist/ionic/p-17474161.system.js +0 -4
  256. package/dist/ionic/p-19a5be0a.entry.js +0 -4
  257. package/dist/ionic/p-2172893e.system.entry.js +0 -4
  258. package/dist/ionic/p-2690b1de.js +0 -4
  259. package/dist/ionic/p-2b9b78c7.entry.js +0 -4
  260. package/dist/ionic/p-4ec778aa.entry.js +0 -4
  261. package/dist/ionic/p-5ab1b709.entry.js +0 -4
  262. package/dist/ionic/p-8b8be2fd.entry.js +0 -4
  263. package/dist/ionic/p-908d6080.entry.js +0 -4
  264. package/dist/ionic/p-98ff6b32.entry.js +0 -4
  265. package/dist/ionic/p-ddaa748a.system.entry.js +0 -4
  266. package/dist/ionic/p-dfb78785.system.js +0 -4
  267. package/dist/ionic/p-e85d901b.system.entry.js +0 -4
  268. package/dist/ionic/p-eba29931.entry.js +0 -4
  269. package/dist/ionic/p-ff4b7e40.system.js +0 -4
package/hydrate/index.mjs CHANGED
@@ -3213,9 +3213,12 @@ let accordionIds = 0;
3213
3213
  * @param message - The string message to be logged to the console.
3214
3214
  */
3215
3215
  const printIonWarning = (message, ...params) => {
3216
- return console.warn(`[Ionic Warning]: ${message}`, ...params);
3216
+ const logLevel = config.get('logLevel', "WARN" /* LogLevel.WARN */);
3217
+ if (["WARN" /* LogLevel.WARN */].includes(logLevel)) {
3218
+ return console.warn(`[Ionic Warning]: ${message}`, ...params);
3219
+ }
3217
3220
  };
3218
- /*
3221
+ /**
3219
3222
  * Logs an error to the console with an Ionic prefix
3220
3223
  * to indicate the library that is warning the developer.
3221
3224
  *
@@ -3223,7 +3226,10 @@ const printIonWarning = (message, ...params) => {
3223
3226
  * @param params - Additional arguments to supply to the console.error.
3224
3227
  */
3225
3228
  const printIonError = (message, ...params) => {
3226
- return console.error(`[Ionic Error]: ${message}`, ...params);
3229
+ const logLevel = config.get('logLevel', "ERROR" /* LogLevel.ERROR */);
3230
+ if (["ERROR" /* LogLevel.ERROR */, "WARN" /* LogLevel.WARN */].includes(logLevel)) {
3231
+ return console.error(`[Ionic Error]: ${message}`, ...params);
3232
+ }
3227
3233
  };
3228
3234
  /**
3229
3235
  * Prints an error informing developers that an implementation requires an element to be used
@@ -8487,6 +8493,7 @@ class Checkbox {
8487
8493
  this.labelPlacement = 'start';
8488
8494
  this.justify = undefined;
8489
8495
  this.alignment = undefined;
8496
+ this.required = false;
8490
8497
  }
8491
8498
  componentWillLoad() {
8492
8499
  this.inheritedAttributes = Object.assign({}, inheritAriaAttributes(this.el));
@@ -8498,11 +8505,11 @@ class Checkbox {
8498
8505
  }
8499
8506
  }
8500
8507
  render() {
8501
- const { color, checked, disabled, el, getSVGPath, indeterminate, inheritedAttributes, inputId, justify, labelPlacement, name, value, alignment, } = this;
8508
+ const { color, checked, disabled, el, getSVGPath, indeterminate, inheritedAttributes, inputId, justify, labelPlacement, name, value, alignment, required, } = this;
8502
8509
  const mode = getIonMode$1(this);
8503
8510
  const path = getSVGPath(mode, indeterminate);
8504
8511
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
8505
- return (hAsync(Host, { key: '6dc787e1100521d08c4900104e1a3e2f594e919f', "aria-checked": indeterminate ? 'mixed' : `${checked}`, class: createColorClasses$1(color, {
8512
+ return (hAsync(Host, { key: '07a5884062dd256b570e856270c74a5a09d2f2a5', "aria-checked": indeterminate ? 'mixed' : `${checked}`, class: createColorClasses$1(color, {
8506
8513
  [mode]: true,
8507
8514
  'in-item': hostContext('ion-item', el),
8508
8515
  'checkbox-checked': checked,
@@ -8512,10 +8519,10 @@ class Checkbox {
8512
8519
  [`checkbox-justify-${justify}`]: justify !== undefined,
8513
8520
  [`checkbox-alignment-${alignment}`]: alignment !== undefined,
8514
8521
  [`checkbox-label-placement-${labelPlacement}`]: true,
8515
- }), onClick: this.onClick }, hAsync("label", { key: '68222fb736a5ec3f2e488649b0e2ce0417dcb224', class: "checkbox-wrapper" }, hAsync("input", Object.assign({ key: 'f12962d7e9b19c744cfdbdeccc67ae7f5d080281', type: "checkbox", checked: checked ? true : undefined, disabled: disabled, id: inputId, onChange: this.toggleChecked, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl) }, inheritedAttributes)), hAsync("div", { key: 'c72df2699414b1e5a41a1bc267bc634f0c93dcff', class: {
8522
+ }), onClick: this.onClick }, hAsync("label", { key: '3439d546e8b60187421db698eab63a0bdd31c973', class: "checkbox-wrapper" }, hAsync("input", Object.assign({ key: '9f45cf7dbdedcf01ec132c11e16979adb1aa102f', type: "checkbox", checked: checked ? true : undefined, disabled: disabled, id: inputId, onChange: this.toggleChecked, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl), required: required }, inheritedAttributes)), hAsync("div", { key: '4e882f98939cc4b7c7ab7459c751d3f4bb2023fe', class: {
8516
8523
  'label-text-wrapper': true,
8517
8524
  'label-text-wrapper-hidden': el.textContent === '',
8518
- }, part: "label" }, hAsync("slot", { key: 'a2a80285178a7e0e3b536fc9ca26b8b444aa4307' })), hAsync("div", { key: 'c2b05e0d1fe8df5dcd72858220b5ff51ecaee4cc', class: "native-wrapper" }, hAsync("svg", { key: 'ee24913fded72258ebd9713654a6dba92a18fcf7', class: "checkbox-icon", viewBox: "0 0 24 24", part: "container" }, path)))));
8525
+ }, part: "label" }, hAsync("slot", { key: '0abda81297a086d02c4a56af75005547971dfcfe' })), hAsync("div", { key: '36489ea3f48a7d0ec46b77c243f9f253ef5c2b3b', class: "native-wrapper" }, hAsync("svg", { key: '4c53b52f5e93752672a34eb6f180b75fa9af9046', class: "checkbox-icon", viewBox: "0 0 24 24", part: "container" }, path)))));
8519
8526
  }
8520
8527
  getSVGPath(mode, indeterminate) {
8521
8528
  let path = indeterminate ? (hAsync("path", { d: "M6 12L18 12", part: "mark" })) : (hAsync("path", { d: "M5.9,12.5l3.8,3.8l8.8-8.8", part: "mark" }));
@@ -8542,6 +8549,7 @@ class Checkbox {
8542
8549
  "labelPlacement": [1, "label-placement"],
8543
8550
  "justify": [1],
8544
8551
  "alignment": [1],
8552
+ "required": [4],
8545
8553
  "setFocus": [64]
8546
8554
  },
8547
8555
  "$listeners$": undefined,
@@ -9101,20 +9109,20 @@ class Content {
9101
9109
  const forceOverscroll = this.shouldForceOverscroll();
9102
9110
  const transitionShadow = mode === 'ios';
9103
9111
  this.resize();
9104
- return (hAsync(Host, Object.assign({ key: 'f2a24aa66dbf5c76f9d4b06f708eb73cadc239df', role: isMainContent ? 'main' : undefined, class: createColorClasses$1(this.color, {
9112
+ return (hAsync(Host, Object.assign({ key: 'e3241b81c97aa6187c43397006fd1136e8c7a1b5', role: isMainContent ? 'main' : undefined, class: createColorClasses$1(this.color, {
9105
9113
  [mode]: true,
9106
9114
  'content-sizing': hostContext('ion-popover', this.el),
9107
9115
  overscroll: forceOverscroll,
9108
9116
  [`content-${rtl}`]: true,
9109
- }), style: {
9117
+ }), tabIndex: '0', style: {
9110
9118
  '--offset-top': `${this.cTop}px`,
9111
9119
  '--offset-bottom': `${this.cBottom}px`,
9112
- } }, inheritedAttributes), hAsync("div", { key: '6480ca7648b278abb36477b3838bccbcd4995e2a', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? hAsync("slot", { name: "fixed" }) : null, hAsync("div", { key: '29a23b663f5f0215bb000820c01e1814c0d55985', class: {
9120
+ } }, inheritedAttributes), hAsync("div", { key: 'b2e0837fd5cb59de4306bf1ea7b115f4fd43f6f9', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? hAsync("slot", { name: "fixed" }) : null, hAsync("div", { key: 'b66cfe79487ba5a6b06da1580514c7406f2293c9', class: {
9113
9121
  'inner-scroll': true,
9114
9122
  'scroll-x': scrollX,
9115
9123
  'scroll-y': scrollY,
9116
9124
  overscroll: (scrollX || scrollY) && forceOverscroll,
9117
- }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, hAsync("slot", { key: '0fe1bd05609a4b88ae2ce9addf5d5dc5dc1806f0' })), transitionShadow ? (hAsync("div", { class: "transition-effect" }, hAsync("div", { class: "transition-cover" }), hAsync("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? hAsync("slot", { name: "fixed" }) : null));
9125
+ }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, hAsync("slot", { key: '30ae38ae7d5dc407af5cd432e577a8013996e523' })), transitionShadow ? (hAsync("div", { class: "transition-effect" }, hAsync("div", { class: "transition-cover" }), hAsync("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? hAsync("slot", { name: "fixed" }) : null));
9118
9126
  }
9119
9127
  get el() { return getElement(this); }
9120
9128
  static get style() { return IonContentStyle0; }
@@ -19017,7 +19025,7 @@ const computeDuration = (remaining, velocity) => {
19017
19025
  };
19018
19026
 
19019
19027
  const createSheetEnterAnimation = (opts) => {
19020
- const { currentBreakpoint, backdropBreakpoint } = opts;
19028
+ const { currentBreakpoint, backdropBreakpoint, expandToScroll } = opts;
19021
19029
  /**
19022
19030
  * If the backdropBreakpoint is undefined, then the backdrop
19023
19031
  * should always fade in. If the backdropBreakpoint came before the
@@ -19037,7 +19045,16 @@ const createSheetEnterAnimation = (opts) => {
19037
19045
  { offset: 0, opacity: 1, transform: 'translateY(100%)' },
19038
19046
  { offset: 1, opacity: 1, transform: `translateY(${100 - currentBreakpoint * 100}%)` },
19039
19047
  ]);
19040
- return { wrapperAnimation, backdropAnimation };
19048
+ /**
19049
+ * This allows the content to be scrollable at any breakpoint.
19050
+ */
19051
+ const contentAnimation = !expandToScroll
19052
+ ? createAnimation('contentAnimation').keyframes([
19053
+ { offset: 0, opacity: 1, maxHeight: `${(1 - currentBreakpoint) * 100}%` },
19054
+ { offset: 1, opacity: 1, maxHeight: `${currentBreakpoint * 100}%` },
19055
+ ])
19056
+ : undefined;
19057
+ return { wrapperAnimation, backdropAnimation, contentAnimation };
19041
19058
  };
19042
19059
  const createSheetLeaveAnimation = (opts) => {
19043
19060
  const { currentBreakpoint, backdropBreakpoint } = opts;
@@ -19072,22 +19089,68 @@ const createEnterAnimation$1 = () => {
19072
19089
  })
19073
19090
  .afterClearStyles(['pointer-events']);
19074
19091
  const wrapperAnimation = createAnimation().fromTo('transform', 'translateY(100vh)', 'translateY(0vh)');
19075
- return { backdropAnimation, wrapperAnimation };
19092
+ return { backdropAnimation, wrapperAnimation, contentAnimation: undefined };
19076
19093
  };
19077
19094
  /**
19078
19095
  * iOS Modal Enter Animation for the Card presentation style
19079
19096
  */
19080
19097
  const iosEnterAnimation$3 = (baseEl, opts) => {
19081
- const { presentingEl, currentBreakpoint } = opts;
19098
+ const { presentingEl, currentBreakpoint, expandToScroll } = opts;
19082
19099
  const root = getElementRoot(baseEl);
19083
- const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation$1();
19100
+ const { wrapperAnimation, backdropAnimation, contentAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation$1();
19084
19101
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
19085
19102
  wrapperAnimation.addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow')).beforeStyles({ opacity: 1 });
19103
+ // The content animation is only added if scrolling is enabled for
19104
+ // all the breakpoints.
19105
+ !expandToScroll && (contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.addElement(baseEl.querySelector('.ion-page')));
19086
19106
  const baseAnimation = createAnimation('entering-base')
19087
19107
  .addElement(baseEl)
19088
19108
  .easing('cubic-bezier(0.32,0.72,0,1)')
19089
19109
  .duration(500)
19090
- .addAnimation(wrapperAnimation);
19110
+ .addAnimation([wrapperAnimation])
19111
+ .beforeAddWrite(() => {
19112
+ if (expandToScroll) {
19113
+ // Scroll can only be done when the modal is fully expanded.
19114
+ return;
19115
+ }
19116
+ /**
19117
+ * There are some browsers that causes flickering when
19118
+ * dragging the content when scroll is enabled at every
19119
+ * breakpoint. This is due to the wrapper element being
19120
+ * transformed off the screen and having a snap animation.
19121
+ *
19122
+ * A workaround is to clone the footer element and append
19123
+ * it outside of the wrapper element. This way, the footer
19124
+ * is still visible and the drag can be done without
19125
+ * flickering. The original footer is hidden until the modal
19126
+ * is dismissed. This maintains the animation of the footer
19127
+ * when the modal is dismissed.
19128
+ *
19129
+ * The workaround needs to be done before the animation starts
19130
+ * so there are no flickering issues.
19131
+ */
19132
+ const ionFooter = baseEl.querySelector('ion-footer');
19133
+ /**
19134
+ * This check is needed to prevent more than one footer
19135
+ * from being appended to the shadow root.
19136
+ * Otherwise, iOS and MD enter animations would append
19137
+ * the footer twice.
19138
+ */
19139
+ const ionFooterAlreadyAppended = baseEl.shadowRoot.querySelector('ion-footer');
19140
+ if (ionFooter && !ionFooterAlreadyAppended) {
19141
+ const footerHeight = ionFooter.clientHeight;
19142
+ const clonedFooter = ionFooter.cloneNode(true);
19143
+ baseEl.shadowRoot.appendChild(clonedFooter);
19144
+ ionFooter.style.setProperty('display', 'none');
19145
+ ionFooter.setAttribute('aria-hidden', 'true');
19146
+ // Padding is added to prevent some content from being hidden.
19147
+ const page = baseEl.querySelector('.ion-page');
19148
+ page.style.setProperty('padding-bottom', `${footerHeight}px`);
19149
+ }
19150
+ });
19151
+ if (contentAnimation) {
19152
+ baseAnimation.addAnimation(contentAnimation);
19153
+ }
19091
19154
  if (presentingEl) {
19092
19155
  const isMobile = window.innerWidth < 768;
19093
19156
  const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
@@ -19165,7 +19228,7 @@ const createLeaveAnimation$1 = () => {
19165
19228
  * iOS Modal Leave Animation
19166
19229
  */
19167
19230
  const iosLeaveAnimation$3 = (baseEl, opts, duration = 500) => {
19168
- const { presentingEl, currentBreakpoint } = opts;
19231
+ const { presentingEl, currentBreakpoint, expandToScroll } = opts;
19169
19232
  const root = getElementRoot(baseEl);
19170
19233
  const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation$1();
19171
19234
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
@@ -19174,7 +19237,29 @@ const iosLeaveAnimation$3 = (baseEl, opts, duration = 500) => {
19174
19237
  .addElement(baseEl)
19175
19238
  .easing('cubic-bezier(0.32,0.72,0,1)')
19176
19239
  .duration(duration)
19177
- .addAnimation(wrapperAnimation);
19240
+ .addAnimation(wrapperAnimation)
19241
+ .beforeAddWrite(() => {
19242
+ if (expandToScroll) {
19243
+ // Scroll can only be done when the modal is fully expanded.
19244
+ return;
19245
+ }
19246
+ /**
19247
+ * If expandToScroll is disabled, we need to swap
19248
+ * the visibility to the original, so the footer
19249
+ * dismisses with the modal and doesn't stay
19250
+ * until the modal is removed from the DOM.
19251
+ */
19252
+ const ionFooter = baseEl.querySelector('ion-footer');
19253
+ if (ionFooter) {
19254
+ const clonedFooter = baseEl.shadowRoot.querySelector('ion-footer');
19255
+ ionFooter.style.removeProperty('display');
19256
+ ionFooter.removeAttribute('aria-hidden');
19257
+ clonedFooter.style.setProperty('display', 'none');
19258
+ clonedFooter.setAttribute('aria-hidden', 'true');
19259
+ const page = baseEl.querySelector('.ion-page');
19260
+ page.style.removeProperty('padding-bottom');
19261
+ }
19262
+ });
19178
19263
  if (presentingEl) {
19179
19264
  const isMobile = window.innerWidth < 768;
19180
19265
  const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
@@ -19252,22 +19337,69 @@ const createEnterAnimation = () => {
19252
19337
  { offset: 0, opacity: 0.01, transform: 'translateY(40px)' },
19253
19338
  { offset: 1, opacity: 1, transform: `translateY(0px)` },
19254
19339
  ]);
19255
- return { backdropAnimation, wrapperAnimation };
19340
+ return { backdropAnimation, wrapperAnimation, contentAnimation: undefined };
19256
19341
  };
19257
19342
  /**
19258
19343
  * Md Modal Enter Animation
19259
19344
  */
19260
19345
  const mdEnterAnimation$2 = (baseEl, opts) => {
19261
- const { currentBreakpoint } = opts;
19346
+ const { currentBreakpoint, expandToScroll } = opts;
19262
19347
  const root = getElementRoot(baseEl);
19263
- const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
19348
+ const { wrapperAnimation, backdropAnimation, contentAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
19264
19349
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
19265
19350
  wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
19266
- return createAnimation()
19351
+ // The content animation is only added if scrolling is enabled for
19352
+ // all the breakpoints.
19353
+ expandToScroll && (contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.addElement(baseEl.querySelector('.ion-page')));
19354
+ const baseAnimation = createAnimation()
19267
19355
  .addElement(baseEl)
19268
19356
  .easing('cubic-bezier(0.36,0.66,0.04,1)')
19269
19357
  .duration(280)
19270
- .addAnimation([backdropAnimation, wrapperAnimation]);
19358
+ .addAnimation([backdropAnimation, wrapperAnimation])
19359
+ .beforeAddWrite(() => {
19360
+ if (expandToScroll) {
19361
+ // Scroll can only be done when the modal is fully expanded.
19362
+ return;
19363
+ }
19364
+ /**
19365
+ * There are some browsers that causes flickering when
19366
+ * dragging the content when scroll is enabled at every
19367
+ * breakpoint. This is due to the wrapper element being
19368
+ * transformed off the screen and having a snap animation.
19369
+ *
19370
+ * A workaround is to clone the footer element and append
19371
+ * it outside of the wrapper element. This way, the footer
19372
+ * is still visible and the drag can be done without
19373
+ * flickering. The original footer is hidden until the modal
19374
+ * is dismissed. This maintains the animation of the footer
19375
+ * when the modal is dismissed.
19376
+ *
19377
+ * The workaround needs to be done before the animation starts
19378
+ * so there are no flickering issues.
19379
+ */
19380
+ const ionFooter = baseEl.querySelector('ion-footer');
19381
+ /**
19382
+ * This check is needed to prevent more than one footer
19383
+ * from being appended to the shadow root.
19384
+ * Otherwise, iOS and MD enter animations would append
19385
+ * the footer twice.
19386
+ */
19387
+ const ionFooterAlreadyAppended = baseEl.shadowRoot.querySelector('ion-footer');
19388
+ if (ionFooter && !ionFooterAlreadyAppended) {
19389
+ const footerHeight = ionFooter.clientHeight;
19390
+ const clonedFooter = ionFooter.cloneNode(true);
19391
+ baseEl.shadowRoot.appendChild(clonedFooter);
19392
+ ionFooter.style.setProperty('display', 'none');
19393
+ ionFooter.setAttribute('aria-hidden', 'true');
19394
+ // Padding is added to prevent some content from being hidden.
19395
+ const page = baseEl.querySelector('.ion-page');
19396
+ page.style.setProperty('padding-bottom', `${footerHeight}px`);
19397
+ }
19398
+ });
19399
+ if (contentAnimation) {
19400
+ baseAnimation.addAnimation(contentAnimation);
19401
+ }
19402
+ return baseAnimation;
19271
19403
  };
19272
19404
 
19273
19405
  const createLeaveAnimation = () => {
@@ -19282,18 +19414,41 @@ const createLeaveAnimation = () => {
19282
19414
  * Md Modal Leave Animation
19283
19415
  */
19284
19416
  const mdLeaveAnimation$2 = (baseEl, opts) => {
19285
- const { currentBreakpoint } = opts;
19417
+ const { currentBreakpoint, expandToScroll } = opts;
19286
19418
  const root = getElementRoot(baseEl);
19287
19419
  const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation();
19288
19420
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
19289
19421
  wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
19290
- return createAnimation()
19422
+ const baseAnimation = createAnimation()
19291
19423
  .easing('cubic-bezier(0.47,0,0.745,0.715)')
19292
19424
  .duration(200)
19293
- .addAnimation([backdropAnimation, wrapperAnimation]);
19425
+ .addAnimation([backdropAnimation, wrapperAnimation])
19426
+ .beforeAddWrite(() => {
19427
+ if (expandToScroll) {
19428
+ // Scroll can only be done when the modal is fully expanded.
19429
+ return;
19430
+ }
19431
+ /**
19432
+ * If expandToScroll is disabled, we need to swap
19433
+ * the visibility to the original, so the footer
19434
+ * dismisses with the modal and doesn't stay
19435
+ * until the modal is removed from the DOM.
19436
+ */
19437
+ const ionFooter = baseEl.querySelector('ion-footer');
19438
+ if (ionFooter) {
19439
+ const clonedFooter = baseEl.shadowRoot.querySelector('ion-footer');
19440
+ ionFooter.style.removeProperty('display');
19441
+ ionFooter.removeAttribute('aria-hidden');
19442
+ clonedFooter.style.setProperty('display', 'none');
19443
+ clonedFooter.setAttribute('aria-hidden', 'true');
19444
+ const page = baseEl.querySelector('.ion-page');
19445
+ page.style.removeProperty('padding-bottom');
19446
+ }
19447
+ });
19448
+ return baseAnimation;
19294
19449
  };
19295
19450
 
19296
- const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], getCurrentBreakpoint, onDismiss, onBreakpointChange) => {
19451
+ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], expandToScroll, getCurrentBreakpoint, onDismiss, onBreakpointChange) => {
19297
19452
  // Defaults for the sheet swipe animation
19298
19453
  const defaultBackdrop = [
19299
19454
  { offset: 0, opacity: 'var(--backdrop-opacity)' },
@@ -19310,6 +19465,10 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19310
19465
  { offset: 1, transform: 'translateY(100%)' },
19311
19466
  ],
19312
19467
  BACKDROP_KEYFRAMES: backdropBreakpoint !== 0 ? customBackdrop : defaultBackdrop,
19468
+ CONTENT_KEYFRAMES: [
19469
+ { offset: 0, maxHeight: '100%' },
19470
+ { offset: 1, maxHeight: '0%' },
19471
+ ],
19313
19472
  };
19314
19473
  const contentEl = baseEl.querySelector('ion-content');
19315
19474
  const height = wrapperEl.clientHeight;
@@ -19317,10 +19476,11 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19317
19476
  let offset = 0;
19318
19477
  let canDismissBlocksGesture = false;
19319
19478
  const canDismissMaxStep = 0.95;
19320
- const wrapperAnimation = animation.childAnimations.find((ani) => ani.id === 'wrapperAnimation');
19321
- const backdropAnimation = animation.childAnimations.find((ani) => ani.id === 'backdropAnimation');
19322
19479
  const maxBreakpoint = breakpoints[breakpoints.length - 1];
19323
19480
  const minBreakpoint = breakpoints[0];
19481
+ const wrapperAnimation = animation.childAnimations.find((ani) => ani.id === 'wrapperAnimation');
19482
+ const backdropAnimation = animation.childAnimations.find((ani) => ani.id === 'backdropAnimation');
19483
+ const contentAnimation = animation.childAnimations.find((ani) => ani.id === 'contentAnimation');
19324
19484
  const enableBackdrop = () => {
19325
19485
  baseEl.style.setProperty('pointer-events', 'auto');
19326
19486
  backdropEl.style.setProperty('pointer-events', 'auto');
@@ -19343,6 +19503,31 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19343
19503
  */
19344
19504
  baseEl.classList.add(FOCUS_TRAP_DISABLE_CLASS);
19345
19505
  };
19506
+ /**
19507
+ * Toggles the visible modal footer when `expandToScroll` is disabled.
19508
+ * @param footer The footer to show.
19509
+ */
19510
+ const swapFooterVisibility = (footer) => {
19511
+ const originalFooter = baseEl.querySelector('ion-footer');
19512
+ if (!originalFooter) {
19513
+ return;
19514
+ }
19515
+ const clonedFooter = wrapperEl.nextElementSibling;
19516
+ const footerToHide = footer === 'original' ? clonedFooter : originalFooter;
19517
+ const footerToShow = footer === 'original' ? originalFooter : clonedFooter;
19518
+ footerToShow.style.removeProperty('display');
19519
+ footerToShow.removeAttribute('aria-hidden');
19520
+ const page = baseEl.querySelector('.ion-page');
19521
+ if (footer === 'original') {
19522
+ page.style.removeProperty('padding-bottom');
19523
+ }
19524
+ else {
19525
+ const pagePadding = footerToShow.clientHeight;
19526
+ page.style.setProperty('padding-bottom', `${pagePadding}px`);
19527
+ }
19528
+ footerToHide.style.setProperty('display', 'none');
19529
+ footerToHide.setAttribute('aria-hidden', 'true');
19530
+ };
19346
19531
  /**
19347
19532
  * After the entering animation completes,
19348
19533
  * we need to set the animation to go from
@@ -19354,6 +19539,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19354
19539
  if (wrapperAnimation && backdropAnimation) {
19355
19540
  wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
19356
19541
  backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
19542
+ contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.keyframes([...SheetDefaults.CONTENT_KEYFRAMES]);
19357
19543
  animation.progressStart(true, 1 - currentBreakpoint);
19358
19544
  /**
19359
19545
  * If backdrop is not enabled, then content
@@ -19370,7 +19556,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19370
19556
  disableBackdrop();
19371
19557
  }
19372
19558
  }
19373
- if (contentEl && currentBreakpoint !== maxBreakpoint) {
19559
+ if (contentEl && currentBreakpoint !== maxBreakpoint && expandToScroll) {
19374
19560
  contentEl.scrollY = false;
19375
19561
  }
19376
19562
  const canStart = (detail) => {
@@ -19384,6 +19570,13 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19384
19570
  */
19385
19571
  const contentEl = findClosestIonContent(detail.event.target);
19386
19572
  currentBreakpoint = getCurrentBreakpoint();
19573
+ /**
19574
+ * If we have expandToScroll disabled, we should not allow the swipe gesture to start
19575
+ * if the content is being swiped.
19576
+ */
19577
+ if (!expandToScroll && contentEl) {
19578
+ return false;
19579
+ }
19387
19580
  if (currentBreakpoint === 1 && contentEl) {
19388
19581
  /**
19389
19582
  * The modal should never swipe to close on the content with a refresher.
@@ -19414,6 +19607,15 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19414
19607
  * Remove undefined check
19415
19608
  */
19416
19609
  canDismissBlocksGesture = baseEl.canDismiss !== undefined && baseEl.canDismiss !== true && minBreakpoint === 0;
19610
+ /**
19611
+ * If expandToScroll is disabled, we need to swap
19612
+ * the footer visibility to the original, so if the modal
19613
+ * is dismissed, the footer dismisses with the modal
19614
+ * and doesn't stay on the screen after the modal is gone.
19615
+ */
19616
+ if (!expandToScroll) {
19617
+ swapFooterVisibility('original');
19618
+ }
19417
19619
  /**
19418
19620
  * If we are pulling down, then it is possible we are pulling on the content.
19419
19621
  * We do not want scrolling to happen at the same time as the gesture.
@@ -19529,6 +19731,19 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19529
19731
  opacity: `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(snapToBreakpoint, backdropBreakpoint)})`,
19530
19732
  },
19531
19733
  ]);
19734
+ if (contentAnimation) {
19735
+ /**
19736
+ * The modal content should scroll at any breakpoint when expandToScroll
19737
+ * is disabled. In order to do this, the content needs to be completely
19738
+ * viewable so scrolling can access everything. Otherwise, the default
19739
+ * behavior would show the content off the screen and only allow
19740
+ * scrolling when the sheet is fully expanded.
19741
+ */
19742
+ contentAnimation.keyframes([
19743
+ { offset: 0, maxHeight: `${(1 - breakpointOffset) * 100}%` },
19744
+ { offset: 1, maxHeight: `${snapToBreakpoint * 100}%` },
19745
+ ]);
19746
+ }
19532
19747
  animation.progressStep(0);
19533
19748
  }
19534
19749
  /**
@@ -19536,6 +19751,14 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19536
19751
  * snapping animation completes.
19537
19752
  */
19538
19753
  gesture.enable(false);
19754
+ /**
19755
+ * If expandToScroll is disabled, we need to swap
19756
+ * the footer visibility to the cloned one so the footer
19757
+ * doesn't flicker when the sheet's height is animated.
19758
+ */
19759
+ if (!expandToScroll && shouldRemainOpen) {
19760
+ swapFooterVisibility('cloned');
19761
+ }
19539
19762
  if (shouldPreventDismiss) {
19540
19763
  handleCanDismiss(baseEl, animation);
19541
19764
  }
@@ -19543,13 +19766,13 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19543
19766
  onDismiss();
19544
19767
  }
19545
19768
  /**
19546
- * If the sheet is going to be fully expanded then we should enable
19547
- * scrolling immediately. The sheet modal animation takes ~500ms to finish
19548
- * so if we wait until then there is a visible delay for when scrolling is
19549
- * re-enabled. Native iOS allows for scrolling on the sheet modal as soon
19550
- * as the gesture is released, so we align with that.
19769
+ * Enables scrolling immediately if the sheet is about to fully expand
19770
+ * or if it allows scrolling at any breakpoint. Without this, there would
19771
+ * be a ~500ms delay while the modal animation completes, causing a
19772
+ * noticeable lag. Native iOS allows scrolling as soon as the gesture is
19773
+ * released, so we align with that behavior.
19551
19774
  */
19552
- if (contentEl && snapToBreakpoint === breakpoints[breakpoints.length - 1]) {
19775
+ if (contentEl && (snapToBreakpoint === breakpoints[breakpoints.length - 1] || !expandToScroll)) {
19553
19776
  contentEl.scrollY = true;
19554
19777
  }
19555
19778
  return new Promise((resolve) => {
@@ -19567,6 +19790,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19567
19790
  raf(() => {
19568
19791
  wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
19569
19792
  backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
19793
+ contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.keyframes([...SheetDefaults.CONTENT_KEYFRAMES]);
19570
19794
  animation.progressStart(true, 1 - snapToBreakpoint);
19571
19795
  currentBreakpoint = snapToBreakpoint;
19572
19796
  onBreakpointChange(currentBreakpoint);
@@ -19619,10 +19843,10 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19619
19843
  };
19620
19844
  };
19621
19845
 
19622
- 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:-ms-flexbox;display:flex;position:absolute;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;outline:none;color:var(--ion-text-color, #000);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);-webkit-box-shadow:var(--box-shadow);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;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;width:36px;height:5px;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;background:var(--ion-color-step-350, var(--ion-background-color-step-350, #c0c0be));cursor:pointer;z-index:11}.modal-handle::before{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:4px;padding-bottom:4px;position:absolute;width:36px;height:5px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:\"\"}: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{-webkit-transform:translate3d(0, 100%, 0);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-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0;border-end-start-radius:0}:host(.modal-card){--backdrop-opacity:0;--width:100%;-ms-flex-align:end;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);-webkit-transition:all 0.5s ease-in-out;transition:all 0.5s ease-in-out}:host(.modal-card) .modal-wrapper{-webkit-box-shadow:none;box-shadow:none}:host(.modal-card) .modal-shadow{-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow)}}:host(.modal-sheet) .modal-wrapper{border-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0;border-end-start-radius:0}";
19846
+ 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:-ms-flexbox;display:flex;position:absolute;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;outline:none;color:var(--ion-text-color, #000);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);-webkit-box-shadow:var(--box-shadow);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;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;width:36px;height:5px;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;background:var(--ion-color-step-350, var(--ion-background-color-step-350, #c0c0be));cursor:pointer;z-index:11}.modal-handle::before{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:4px;padding-bottom:4px;position:absolute;width:36px;height:5px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:\"\"}: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(.modal-sheet.modal-no-expand-scroll) ion-footer{position:absolute;bottom:0;width:var(--width)}: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{-webkit-transform:translate3d(0, 100%, 0);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-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0;border-end-start-radius:0}:host(.modal-card){--backdrop-opacity:0;--width:100%;-ms-flex-align:end;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);-webkit-transition:all 0.5s ease-in-out;transition:all 0.5s ease-in-out}:host(.modal-card) .modal-wrapper{-webkit-box-shadow:none;box-shadow:none}:host(.modal-card) .modal-shadow{-webkit-box-shadow:var(--box-shadow);box-shadow:var(--box-shadow)}}:host(.modal-sheet) .modal-wrapper{border-start-start-radius:var(--border-radius);border-start-end-radius:var(--border-radius);border-end-end-radius:0;border-end-start-radius:0}:host(.modal-sheet.modal-no-expand-scroll) ion-footer ion-toolbar:first-of-type{padding-top:6px}";
19623
19847
  var IonModalIosStyle0 = modalIosCss;
19624
19848
 
19625
- 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:-ms-flexbox;display:flex;position:absolute;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;outline:none;color:var(--ion-text-color, #000);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);-webkit-box-shadow:var(--box-shadow);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;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;width:36px;height:5px;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;background:var(--ion-color-step-350, var(--ion-background-color-step-350, #c0c0be));cursor:pointer;z-index:11}.modal-handle::before{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:4px;padding-bottom:4px;position:absolute;width:36px;height:5px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:\"\"}: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{-webkit-transform:translate3d(0, 40px, 0);transform:translate3d(0, 40px, 0);opacity:0.01}";
19849
+ 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:-ms-flexbox;display:flex;position:absolute;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;outline:none;color:var(--ion-text-color, #000);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);-webkit-box-shadow:var(--box-shadow);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;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;position:absolute;width:36px;height:5px;-webkit-transform:translateZ(0);transform:translateZ(0);border:0;background:var(--ion-color-step-350, var(--ion-background-color-step-350, #c0c0be));cursor:pointer;z-index:11}.modal-handle::before{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:4px;padding-bottom:4px;position:absolute;width:36px;height:5px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);content:\"\"}: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(.modal-sheet.modal-no-expand-scroll) ion-footer{position:absolute;bottom:0;width:var(--width)}: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{-webkit-transform:translate3d(0, 40px, 0);transform:translate3d(0, 40px, 0);opacity:0.01}";
19626
19850
  var IonModalMdStyle0 = modalMdCss;
19627
19851
 
19628
19852
  // TODO(FW-2832): types
@@ -19701,6 +19925,7 @@ class Modal {
19701
19925
  this.enterAnimation = undefined;
19702
19926
  this.leaveAnimation = undefined;
19703
19927
  this.breakpoints = undefined;
19928
+ this.expandToScroll = true;
19704
19929
  this.initialBreakpoint = undefined;
19705
19930
  this.backdropBreakpoint = 0;
19706
19931
  this.handle = undefined;
@@ -19916,6 +20141,7 @@ class Modal {
19916
20141
  presentingEl: presentingElement,
19917
20142
  currentBreakpoint: this.initialBreakpoint,
19918
20143
  backdropBreakpoint: this.backdropBreakpoint,
20144
+ expandToScroll: this.expandToScroll,
19919
20145
  });
19920
20146
  /* tslint:disable-next-line */
19921
20147
  if (typeof window !== 'undefined') {
@@ -19966,7 +20192,10 @@ class Modal {
19966
20192
  // should be in the DOM and referenced by now, except
19967
20193
  // for the presenting el
19968
20194
  const animationBuilder = this.leaveAnimation || config.get('modalLeave', iosLeaveAnimation$3);
19969
- const ani = (this.animation = animationBuilder(el, { presentingEl: this.presentingElement }));
20195
+ const ani = (this.animation = animationBuilder(el, {
20196
+ presentingEl: this.presentingElement,
20197
+ expandToScroll: this.expandToScroll,
20198
+ }));
19970
20199
  const contentEl = findIonContent(el);
19971
20200
  if (!contentEl) {
19972
20201
  printIonContentErrorMsg(el);
@@ -20011,9 +20240,10 @@ class Modal {
20011
20240
  presentingEl: this.presentingElement,
20012
20241
  currentBreakpoint: initialBreakpoint,
20013
20242
  backdropBreakpoint,
20243
+ expandToScroll: this.expandToScroll,
20014
20244
  }));
20015
20245
  ani.progressStart(true, 1);
20016
- const { gesture, moveSheetToBreakpoint } = createSheetGesture(this.el, this.backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, ani, this.sortedBreakpoints, () => { var _a; return (_a = this.currentBreakpoint) !== null && _a !== void 0 ? _a : 0; }, () => this.sheetOnDismiss(), (breakpoint) => {
20246
+ const { gesture, moveSheetToBreakpoint } = createSheetGesture(this.el, this.backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, ani, this.sortedBreakpoints, this.expandToScroll, () => { var _a; return (_a = this.currentBreakpoint) !== null && _a !== void 0 ? _a : 0; }, () => this.sheetOnDismiss(), (breakpoint) => {
20017
20247
  if (this.currentBreakpoint !== breakpoint) {
20018
20248
  this.currentBreakpoint = breakpoint;
20019
20249
  this.ionBreakpointDidChange.emit({ breakpoint });
@@ -20091,6 +20321,7 @@ class Modal {
20091
20321
  presentingEl: presentingElement,
20092
20322
  currentBreakpoint: (_a = this.currentBreakpoint) !== null && _a !== void 0 ? _a : this.initialBreakpoint,
20093
20323
  backdropBreakpoint: this.backdropBreakpoint,
20324
+ expandToScroll: this.expandToScroll,
20094
20325
  });
20095
20326
  if (dismissed) {
20096
20327
  const { delegate } = this.getDelegate();
@@ -20176,23 +20407,23 @@ class Modal {
20176
20407
  return true;
20177
20408
  }
20178
20409
  render() {
20179
- const { handle, isSheetModal, presentingElement, htmlAttributes, handleBehavior, inheritedAttributes, focusTrap } = this;
20410
+ const { handle, isSheetModal, presentingElement, htmlAttributes, handleBehavior, inheritedAttributes, focusTrap, expandToScroll, } = this;
20180
20411
  const showHandle = handle !== false && isSheetModal;
20181
20412
  const mode = getIonMode$1(this);
20182
20413
  const isCardModal = presentingElement !== undefined && mode === 'ios';
20183
20414
  const isHandleCycle = handleBehavior === 'cycle';
20184
- return (hAsync(Host, Object.assign({ key: 'b4da5111fe4719fa450c39b2d4bd884a302a7924', "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
20415
+ return (hAsync(Host, Object.assign({ key: 'ff15df63e72caaeb0a4ad68e9eedeaaa7d3f3bde', "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
20185
20416
  zIndex: `${20000 + this.overlayIndex}`,
20186
- }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle }), hAsync("ion-backdrop", { key: 'c12dbf747e0eb914eaf1331798548ffc7e147763', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && hAsync("div", { key: 'da546ee80c6576b5acc66e959fd5009e0b9a8160', class: "modal-shadow" }), hAsync("div", Object.assign({ key: '306ebe6427440ad5f7ed36d590e562d15a503b75',
20417
+ }, class: Object.assign({ [mode]: true, ['modal-default']: !isCardModal && !isSheetModal, [`modal-card`]: isCardModal, [`modal-sheet`]: isSheetModal, [`modal-no-expand-scroll`]: isSheetModal && !expandToScroll, 'overlay-hidden': true, [FOCUS_TRAP_DISABLE_CLASS]: focusTrap === false }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonModalDidPresent: this.onLifecycle, onIonModalWillPresent: this.onLifecycle, onIonModalWillDismiss: this.onLifecycle, onIonModalDidDismiss: this.onLifecycle }), hAsync("ion-backdrop", { key: '27a73655779af9d175a829d3d2d29e42fd2a63ee', ref: (el) => (this.backdropEl = el), visible: this.showBackdrop, tappable: this.backdropDismiss, part: "backdrop" }), mode === 'ios' && hAsync("div", { key: '406a65080087e7895026ecc2f04e9d707439e86f', class: "modal-shadow" }), hAsync("div", Object.assign({ key: '8e410eb925374158996c82cbbd522f07d741679e',
20187
20418
  /*
20188
20419
  role and aria-modal must be used on the
20189
20420
  same element. They must also be set inside the
20190
20421
  shadow DOM otherwise ion-button will not be highlighted
20191
20422
  when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
20192
20423
  */
20193
- role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (hAsync("button", { key: 'c5d17e346fe255a7c0cacbbf15c0083f2d09c488', class: "modal-handle",
20424
+ role: "dialog" }, inheritedAttributes, { "aria-modal": "true", class: "modal-wrapper ion-overlay-wrapper", part: "content", ref: (el) => (this.wrapperEl = el) }), showHandle && (hAsync("button", { key: '7326c969ebe5a70a35e83b09d3db2bb848c90e47', class: "modal-handle",
20194
20425
  // Prevents the handle from receiving keyboard focus when it does not cycle
20195
- tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle" })), hAsync("slot", { key: '5cc714170a00b67f3eda0cd1d6f37c1489a99c83' }))));
20426
+ tabIndex: !isHandleCycle ? -1 : 0, "aria-label": "Activate to adjust the size of the dialog overlaying the screen", onClick: isHandleCycle ? this.onHandleClick : undefined, part: "handle" })), hAsync("slot", { key: '0b65cdb9e337a27edf437b9e754e79f1449c217d' }))));
20196
20427
  }
20197
20428
  get el() { return getElement(this); }
20198
20429
  static get watchers() { return {
@@ -20214,6 +20445,7 @@ class Modal {
20214
20445
  "enterAnimation": [16],
20215
20446
  "leaveAnimation": [16],
20216
20447
  "breakpoints": [16],
20448
+ "expandToScroll": [4, "expand-to-scroll"],
20217
20449
  "initialBreakpoint": [2, "initial-breakpoint"],
20218
20450
  "backdropBreakpoint": [2, "backdrop-breakpoint"],
20219
20451
  "handle": [4],
@@ -29657,6 +29889,7 @@ class Select {
29657
29889
  this.expandedIcon = undefined;
29658
29890
  this.shape = undefined;
29659
29891
  this.value = undefined;
29892
+ this.required = false;
29660
29893
  }
29661
29894
  styleChanged() {
29662
29895
  this.emitStyle();
@@ -30141,8 +30374,8 @@ class Select {
30141
30374
  return renderedLabel;
30142
30375
  }
30143
30376
  renderListbox() {
30144
- const { disabled, inputId, isExpanded } = this;
30145
- return (hAsync("button", { disabled: disabled, id: inputId, "aria-label": this.ariaLabel, "aria-haspopup": "dialog", "aria-expanded": `${isExpanded}`, onFocus: this.onFocus, onBlur: this.onBlur, ref: (focusEl) => (this.focusEl = focusEl) }));
30377
+ const { disabled, inputId, isExpanded, required } = this;
30378
+ return (hAsync("button", { disabled: disabled, id: inputId, "aria-label": this.ariaLabel, "aria-haspopup": "dialog", "aria-expanded": `${isExpanded}`, "aria-required": `${required}`, onFocus: this.onFocus, onBlur: this.onBlur, ref: (focusEl) => (this.focusEl = focusEl) }));
30146
30379
  }
30147
30380
  render() {
30148
30381
  const { disabled, el, isExpanded, expandedIcon, labelPlacement, justify, placeholder, fill, shape, name, value } = this;
@@ -30173,7 +30406,7 @@ class Select {
30173
30406
  * TODO(FW-5592): Remove hasStartEndSlots condition
30174
30407
  */
30175
30408
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || isExpanded || hasStartEndSlots));
30176
- return (hAsync(Host, { key: '144dfa5c49549a74fe516c65b9b8104a477ac789', onClick: this.onClick, class: createColorClasses$1(this.color, {
30409
+ return (hAsync(Host, { key: '491cf1b0e3aa31e7c9cfad3e87d83eb54272312a', onClick: this.onClick, class: createColorClasses$1(this.color, {
30177
30410
  [mode]: true,
30178
30411
  'in-item': inItem,
30179
30412
  'in-item-color': hostContext('ion-item.ion-color', el),
@@ -30189,7 +30422,7 @@ class Select {
30189
30422
  [`select-justify-${justify}`]: justifyEnabled,
30190
30423
  [`select-shape-${shape}`]: shape !== undefined,
30191
30424
  [`select-label-placement-${labelPlacement}`]: true,
30192
- }) }, hAsync("label", { key: '0edcfcbac575a9dccc77991531b6980d1caebf42', class: "select-wrapper", id: "select-label" }, this.renderLabelContainer(), hAsync("div", { key: '348151d90cb093f5d21c7d4a834264ac4a312c40', class: "select-wrapper-inner" }, hAsync("slot", { key: '8b7708c7f81217435c58276da0c08bba766d9500', name: "start" }), hAsync("div", { key: '10c520a335da0a0d1cf40f9365597beb244d3b48', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), hAsync("slot", { key: '0f15c40a5495e98e29d2a21ba21e0bc6f1c0125a', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && hAsync("div", { key: 'c87faad2e5ebf7f9453397d7ede43abd64d21294', class: "select-highlight" }))));
30425
+ }) }, hAsync("label", { key: '07bf3cb57bd1121383d8c746e3ac49da38300082', class: "select-wrapper", id: "select-label" }, this.renderLabelContainer(), hAsync("div", { key: '884facd18342797576bbacc761d18d83c52762e3', class: "select-wrapper-inner" }, hAsync("slot", { key: 'c4f2a2a7a76f52db15f9a0b806017caea443c47a', name: "start" }), hAsync("div", { key: '235cf383f268cc74412722cd31e246cbd4c2abe5', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), hAsync("slot", { key: '1481302e11c494d49dfd80a7aaf743f7e851558f', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && hAsync("div", { key: '8a45ea9280651695c8e5435f266c286f3e3f6a18', class: "select-highlight" }))));
30193
30426
  }
30194
30427
  get el() { return getElement(this); }
30195
30428
  static get watchers() { return {
@@ -30225,6 +30458,7 @@ class Select {
30225
30458
  "expandedIcon": [1, "expanded-icon"],
30226
30459
  "shape": [1],
30227
30460
  "value": [1032],
30461
+ "required": [4],
30228
30462
  "isExpanded": [32],
30229
30463
  "open": [64]
30230
30464
  },
@@ -30781,10 +31015,10 @@ class Tab {
30781
31015
  }
30782
31016
  render() {
30783
31017
  const { tab, active, component } = this;
30784
- return (hAsync(Host, { key: 'cb75d0877979b3b8df8f7e1952bfa9677da1eaa5', role: "tabpanel", "aria-hidden": !active ? 'true' : null, "aria-labelledby": `tab-button-${tab}`, class: {
31018
+ return (hAsync(Host, { key: 'c8d049c74c66a2748f3ec81d2855446acf114abe', role: "tabpanel", "aria-hidden": !active ? 'true' : null, "aria-labelledby": `tab-button-${tab}`, class: {
30785
31019
  'ion-page': component === undefined,
30786
31020
  'tab-hidden': !active,
30787
- } }, hAsync("slot", { key: '37fbb7b7a6b03eb93b1dacd2dc1025b78eb2aa6b' })));
31021
+ } }, hAsync("slot", { key: 'fba1ddc9aefb2711e13d43734f606b493ce8380a' })));
30788
31022
  }
30789
31023
  get el() { return getElement(this); }
30790
31024
  static get watchers() { return {
@@ -30976,7 +31210,7 @@ class TabButton {
30976
31210
  'ion-activatable': true,
30977
31211
  'ion-selectable': true,
30978
31212
  'ion-focusable': true,
30979
- } }, hAsync("a", Object.assign({ key: '1db09d861b67ff292018fb4b0dc7b85bd4677eb8' }, attrs, { class: "button-native", part: "native", role: "tab", "aria-selected": selected ? 'true' : null, "aria-disabled": disabled ? 'true' : null, tabindex: disabled ? '-1' : undefined }, inheritedAttributes), hAsync("span", { key: '4381eafcb27e8c7bb0d86d4f115ceb0caf03b9b4', class: "button-inner" }, hAsync("slot", { key: '1981135f6fbb88376c1bd923c55c70fe8b5c5159' })), mode === 'md' && hAsync("ion-ripple-effect", { key: '0509bc7155d055d1ed710600e9cf4df135881491', type: "unbounded" }))));
31213
+ } }, hAsync("a", Object.assign({ key: '2f32e70232c7872b14e9ead1d1c31c98ad3577b4' }, attrs, { class: "button-native", part: "native", role: "tab", "aria-selected": selected ? 'true' : null, "aria-disabled": disabled ? 'true' : null, tabindex: disabled ? '-1' : '0' }, inheritedAttributes), hAsync("span", { key: '5c9467b16e36a526a20f460980ec45022f464c3a', class: "button-inner" }, hAsync("slot", { key: 'eefd60fac84ff01366a0f82f6ad71782ee7351e9' })), mode === 'md' && hAsync("ion-ripple-effect", { key: '0d3452ae46e47f2d50c0198668c42e00e1a4d7bf', type: "unbounded" }))));
30980
31214
  }
30981
31215
  get el() { return getElement(this); }
30982
31216
  static get style() { return {
@@ -31018,6 +31252,7 @@ class Tabs {
31018
31252
  this.ionTabsDidChange = createEvent(this, "ionTabsDidChange", 3);
31019
31253
  this.transitioning = false;
31020
31254
  this.onTabClicked = (ev) => {
31255
+ console.log("onTabClicked");
31021
31256
  const { href, tab } = ev.detail;
31022
31257
  if (this.useRouter && href !== undefined) {
31023
31258
  const router = document.querySelector('ion-router');
@@ -31152,7 +31387,7 @@ class Tabs {
31152
31387
  return Array.from(this.el.querySelectorAll('ion-tab'));
31153
31388
  }
31154
31389
  render() {
31155
- return (hAsync(Host, { key: 'e01ccf6bfaccad094515be50e407399c733fc226', onIonTabButtonClick: this.onTabClicked }, hAsync("slot", { key: '38d2d01dbfd8a08f01e6f0e27274b21d75424e37', name: "top" }), hAsync("div", { key: '7e894f0f423e2d43e1c68daff5f9f6c442fad237', class: "tabs-inner" }, hAsync("slot", { key: 'df16be529a0370a26d0adf850530b31607507c23' })), hAsync("slot", { key: '44642e1cb24c3281c43db75fd69a32fe0defe40a', name: "bottom" })));
31390
+ return (hAsync(Host, { key: '6c9bb24efdbb7d2135097dbaf200b9d9a106eba0', onIonTabButtonClick: this.onTabClicked }, hAsync("slot", { key: '7e29a9895b183269b3e293c3f70c9644324215ad', name: "top" }), hAsync("div", { key: '02d3c0685ff01dff1a0e0663aaec55552a24acd9', class: "tabs-inner" }, hAsync("slot", { key: 'e7b6928b811caae14f8981b1da65d1d487bd74e8' })), hAsync("slot", { key: 'd4464bcf631c7ff7afc96d95942a4af1fda64919', name: "bottom" })));
31156
31391
  }
31157
31392
  get el() { return getElement(this); }
31158
31393
  static get style() { return IonTabsStyle0; }
@@ -32621,6 +32856,7 @@ class Toggle {
32621
32856
  this.labelPlacement = 'start';
32622
32857
  this.justify = undefined;
32623
32858
  this.alignment = undefined;
32859
+ this.required = false;
32624
32860
  }
32625
32861
  disabledChanged() {
32626
32862
  if (this.gesture) {
@@ -32702,12 +32938,12 @@ class Toggle {
32702
32938
  return this.el.textContent !== '';
32703
32939
  }
32704
32940
  render() {
32705
- const { activated, color, checked, disabled, el, justify, labelPlacement, inputId, name, alignment } = this;
32941
+ const { activated, color, checked, disabled, el, justify, labelPlacement, inputId, name, alignment, required } = this;
32706
32942
  const mode = getIonMode$1(this);
32707
32943
  const value = this.getValue();
32708
32944
  const rtl = isRTL$1(el) ? 'rtl' : 'ltr';
32709
32945
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
32710
- return (hAsync(Host, { key: 'f52195ec3bc14c024647cb41319c32a4cd330e19', onClick: this.onClick, class: createColorClasses$1(color, {
32946
+ return (hAsync(Host, { key: 'ed75573caa6e37011f1453dd7f723fb9bd8a3656', onClick: this.onClick, class: createColorClasses$1(color, {
32711
32947
  [mode]: true,
32712
32948
  'in-item': hostContext('ion-item', el),
32713
32949
  'toggle-activated': activated,
@@ -32717,10 +32953,10 @@ class Toggle {
32717
32953
  [`toggle-alignment-${alignment}`]: alignment !== undefined,
32718
32954
  [`toggle-label-placement-${labelPlacement}`]: true,
32719
32955
  [`toggle-${rtl}`]: true,
32720
- }) }, hAsync("label", { key: 'f8b3a215ad85b2cee611ad63449b584e1640f27f', class: "toggle-wrapper" }, hAsync("input", Object.assign({ key: 'f387b1ea840737a9737917e516834c887be99c09', type: "checkbox", role: "switch", "aria-checked": `${checked}`, checked: checked, disabled: disabled, id: inputId, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl) }, this.inheritedAttributes)), hAsync("div", { key: '936af880db59fe377cd2de9101eb28a1c4fb8914', class: {
32956
+ }) }, hAsync("label", { key: '484860e2a33f4d123904edb96159f0e1972d3add', class: "toggle-wrapper" }, hAsync("input", Object.assign({ key: '360b53080aacfd99a9ff60ffb5219816bd4163ee', type: "checkbox", role: "switch", "aria-checked": `${checked}`, checked: checked, disabled: disabled, id: inputId, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl), required: required }, this.inheritedAttributes)), hAsync("div", { key: 'f7239fa668fe11257239ea30cf0198e4f3274f6b', class: {
32721
32957
  'label-text-wrapper': true,
32722
32958
  'label-text-wrapper-hidden': !this.hasLabel,
32723
- }, part: "label" }, hAsync("slot", { key: '80a6672e2e792c15011a9496dcd75363cdba31c6' })), hAsync("div", { key: '2b2b318b38ab27b194c0dab4cecd77d9d780f2ca', class: "native-wrapper" }, this.renderToggleControl()))));
32959
+ }, part: "label" }, hAsync("slot", { key: '9495a4a39889822ee68e0d89dc5a2f863d1feb3c' })), hAsync("div", { key: '55f1eb08c4b705e94fbcf02220bbe1d292f06155', class: "native-wrapper" }, this.renderToggleControl()))));
32724
32960
  }
32725
32961
  get el() { return getElement(this); }
32726
32962
  static get watchers() { return {
@@ -32743,6 +32979,7 @@ class Toggle {
32743
32979
  "labelPlacement": [1, "label-placement"],
32744
32980
  "justify": [1],
32745
32981
  "alignment": [1],
32982
+ "required": [4],
32746
32983
  "activated": [32]
32747
32984
  },
32748
32985
  "$listeners$": undefined,
@@ -32774,6 +33011,10 @@ var IonToolbarMdStyle0 = toolbarMdCss;
32774
33011
  * @slot secondary - Content is placed to the left of the toolbar text in `ios` mode, and directly to the right in `md` mode.
32775
33012
  * @slot primary - Content is placed to the right of the toolbar text in `ios` mode, and to the far right in `md` mode.
32776
33013
  * @slot end - Content is placed to the right of the toolbar text in LTR, and to the left in RTL.
33014
+ *
33015
+ * @part background - The background of the toolbar, covering the entire area behind the toolbar content.
33016
+ * @part container - The container that wraps all toolbar content, including the default slot and named slot content.
33017
+ * @part content - The container for the default slot, wrapping content provided without a named slot.
32777
33018
  */
32778
33019
  class Toolbar {
32779
33020
  constructor(hostRef) {
@@ -32824,10 +33065,10 @@ class Toolbar {
32824
33065
  this.childrenStyles.forEach((value) => {
32825
33066
  Object.assign(childStyles, value);
32826
33067
  });
32827
- return (hAsync(Host, { key: '462538a5ecd01baf3cde116c9f029aeda26c81be', class: Object.assign(Object.assign({}, childStyles), createColorClasses$1(this.color, {
33068
+ return (hAsync(Host, { key: '4fdc9ae82a93237cc28ceb95b0ebd8069b62839d', class: Object.assign(Object.assign({}, childStyles), createColorClasses$1(this.color, {
32828
33069
  [mode]: true,
32829
33070
  'in-toolbar': hostContext('ion-toolbar', this.el),
32830
- })) }, hAsync("div", { key: 'c0b4415d3b2472de643a9be7cb3b13b3b628621b', class: "toolbar-background" }), hAsync("div", { key: '0ccb8a2dbeaa28d8f9bed87629c0c097446690c2', class: "toolbar-container" }, hAsync("slot", { key: '3e726dac359e923df21d80301651f16063a3de20', name: "start" }), hAsync("slot", { key: 'cd799330b56a7f8833bc61bb2807aafb21846f71', name: "secondary" }), hAsync("div", { key: '395282e6ac8c53576922dcdb5f08c25d34638c86', class: "toolbar-content" }, hAsync("slot", { key: 'a437c60e4ba5aae65e55169ae82a6f379868ec1d' })), hAsync("slot", { key: '711af9b9d321a7b31ede924c9bdcad767aa9a1ca', name: "primary" }), hAsync("slot", { key: 'ecc02edeaf80a837890bcb08d5096df1e22a0b9a', name: "end" }))));
33071
+ })) }, hAsync("div", { key: '443a216362bbbf1c149ed12140d52b0f0ea2d664', class: "toolbar-background", part: "background" }), hAsync("div", { key: '1df87f4027d605e42757a13d4828df45b90a4fdc', class: "toolbar-container", part: "container" }, hAsync("slot", { key: 'f66f34972be8e3f4915b9c6f5808600dbaedb1ea', name: "start" }), hAsync("slot", { key: '14f38b0975e956f404c4eb3ee56f2055c6615276', name: "secondary" }), hAsync("div", { key: '75ba5953a25c7544793484d2b245792cb0a5af75', class: "toolbar-content", part: "content" }, hAsync("slot", { key: '149dfa58ff7106f318fecb4134e7c69edf8bc231' })), hAsync("slot", { key: '807ab9ad21d7f1d9d427a4086460bcb9e5e8c019', name: "primary" }), hAsync("slot", { key: 'bd2f9da95d2fa8e74dc6e0666587ceecbba99d9f', name: "end" }))));
32831
33072
  }
32832
33073
  get el() { return getElement(this); }
32833
33074
  static get style() { return {