@ionic/core 8.4.4-dev.11741030124.1142ac6a → 8.4.4-dev.11741046329.16b83b14

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 (369) hide show
  1. package/components/checkbox.js +40 -6
  2. package/components/helpers.js +1 -11
  3. package/components/index6.js +11 -3
  4. package/components/index9.js +1 -1
  5. package/components/ion-segment-button.js +9 -40
  6. package/components/ion-select.js +16 -41
  7. package/components/ion-toggle.js +6 -4
  8. package/components/modal.js +259 -35
  9. package/components/toolbar.js +2 -2
  10. package/css/core.css.map +1 -1
  11. package/css/ionic.bundle.css.map +1 -1
  12. package/dist/cjs/{data-21dc0f81.js → data-108e531d.js} +1 -1
  13. package/dist/cjs/{framework-delegate-05579976.js → framework-delegate-55f5683a.js} +1 -1
  14. package/dist/cjs/{helpers-4be3f90d.js → helpers-afaa9001.js} +0 -11
  15. package/dist/cjs/{index-c441c903.js → index-0d762bba.js} +2 -2
  16. package/dist/cjs/{index-5915f9b3.js → index-2a46a047.js} +11 -3
  17. package/dist/cjs/{index-1ae3f40a.js → index-3652c918.js} +2 -2
  18. package/dist/cjs/{index-ad7a712e.js → index-9509ecad.js} +1 -1
  19. package/dist/cjs/{index-4e14a46e.js → index-e975c92b.js} +4 -4
  20. package/dist/cjs/index.cjs.js +8 -8
  21. package/dist/cjs/{input-shims-e748a364.js → input-shims-cd05268a.js} +5 -3
  22. package/dist/cjs/{input.utils-74e4ec28.js → input.utils-ffb2f81b.js} +2 -2
  23. package/dist/cjs/ion-accordion_2.cjs.entry.js +2 -2
  24. package/dist/cjs/ion-action-sheet.cjs.entry.js +4 -4
  25. package/dist/cjs/ion-alert.cjs.entry.js +4 -4
  26. package/dist/cjs/ion-app_8.cjs.entry.js +11 -11
  27. package/dist/cjs/ion-back-button.cjs.entry.js +1 -1
  28. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +1 -1
  29. package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
  30. package/dist/cjs/ion-card_5.cjs.entry.js +1 -1
  31. package/dist/cjs/ion-checkbox.cjs.entry.js +38 -7
  32. package/dist/cjs/ion-datetime-button.cjs.entry.js +3 -3
  33. package/dist/cjs/ion-datetime_3.cjs.entry.js +5 -5
  34. package/dist/cjs/ion-fab_3.cjs.entry.js +1 -1
  35. package/dist/cjs/ion-img.cjs.entry.js +1 -1
  36. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +3 -3
  37. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +1 -1
  38. package/dist/cjs/ion-input.cjs.entry.js +4 -4
  39. package/dist/cjs/ion-item-option_3.cjs.entry.js +3 -3
  40. package/dist/cjs/ion-item_8.cjs.entry.js +1 -1
  41. package/dist/cjs/ion-loading.cjs.entry.js +4 -4
  42. package/dist/cjs/ion-menu_3.cjs.entry.js +5 -5
  43. package/dist/cjs/ion-modal.cjs.entry.js +264 -41
  44. package/dist/cjs/ion-nav_2.cjs.entry.js +5 -5
  45. package/dist/cjs/ion-picker-column-option.cjs.entry.js +1 -1
  46. package/dist/cjs/ion-picker-column.cjs.entry.js +1 -1
  47. package/dist/cjs/ion-picker.cjs.entry.js +1 -1
  48. package/dist/cjs/ion-popover.cjs.entry.js +5 -5
  49. package/dist/cjs/ion-progress-bar.cjs.entry.js +1 -1
  50. package/dist/cjs/ion-radio_2.cjs.entry.js +1 -1
  51. package/dist/cjs/ion-range.cjs.entry.js +3 -3
  52. package/dist/cjs/ion-refresher_2.cjs.entry.js +3 -3
  53. package/dist/cjs/ion-reorder_2.cjs.entry.js +3 -3
  54. package/dist/cjs/ion-route_4.cjs.entry.js +1 -1
  55. package/dist/cjs/ion-searchbar.cjs.entry.js +1 -1
  56. package/dist/cjs/ion-segment_2.cjs.entry.js +9 -40
  57. package/dist/cjs/ion-select-modal.cjs.entry.js +4 -4
  58. package/dist/cjs/ion-select_3.cjs.entry.js +19 -45
  59. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +1 -1
  60. package/dist/cjs/ion-tab_2.cjs.entry.js +2 -2
  61. package/dist/cjs/ion-textarea.cjs.entry.js +4 -4
  62. package/dist/cjs/ion-toast.cjs.entry.js +4 -4
  63. package/dist/cjs/ion-toggle.cjs.entry.js +6 -5
  64. package/dist/cjs/ionic.cjs.js +1 -1
  65. package/dist/cjs/{ios.transition-afdec89f.js → ios.transition-0e664e88.js} +3 -3
  66. package/dist/cjs/loader.cjs.js +1 -1
  67. package/dist/cjs/{md.transition-9f0d3db5.js → md.transition-2e8aef2c.js} +3 -3
  68. package/dist/cjs/{notch-controller-a0c464d1.js → notch-controller-d69150f5.js} +1 -1
  69. package/dist/cjs/{overlays-76b29cd4.js → overlays-65fdaff6.js} +3 -3
  70. package/dist/cjs/{status-tap-fb807fad.js → status-tap-d74f1429.js} +4 -3
  71. package/dist/cjs/{swipe-back-47a52b83.js → swipe-back-0303a5e4.js} +1 -1
  72. package/dist/collection/components/checkbox/checkbox.ios.css +52 -15
  73. package/dist/collection/components/checkbox/checkbox.js +90 -4
  74. package/dist/collection/components/checkbox/checkbox.md.css +52 -15
  75. package/dist/collection/components/modal/animations/ios.enter.js +50 -4
  76. package/dist/collection/components/modal/animations/ios.leave.js +24 -2
  77. package/dist/collection/components/modal/animations/md.enter.js +52 -5
  78. package/dist/collection/components/modal/animations/md.leave.js +26 -3
  79. package/dist/collection/components/modal/animations/sheet.js +11 -2
  80. package/dist/collection/components/modal/gestures/sheet.js +79 -10
  81. package/dist/collection/components/modal/modal.ios.css +16 -0
  82. package/dist/collection/components/modal/modal.js +32 -7
  83. package/dist/collection/components/modal/modal.md.css +6 -0
  84. package/dist/collection/components/segment-button/segment-button.js +9 -40
  85. package/dist/collection/components/select/select.js +32 -40
  86. package/dist/collection/components/toggle/toggle.js +23 -4
  87. package/dist/collection/components/toolbar/toolbar.js +6 -2
  88. package/dist/collection/utils/helpers.js +0 -10
  89. package/dist/collection/utils/logging/index.js +10 -3
  90. package/dist/docs.json +187 -2
  91. package/dist/esm/{data-ae11fd43.js → data-b3284b5e.js} +1 -1
  92. package/dist/esm/{framework-delegate-f683816e.js → framework-delegate-63d1a679.js} +1 -1
  93. package/dist/esm/{helpers-9b49d7d2.js → helpers-da915de8.js} +1 -11
  94. package/dist/esm/{index-7ec5519a.js → index-2f7fde3d.js} +4 -4
  95. package/dist/esm/{index-9b0d46f4.js → index-6ad967f3.js} +11 -3
  96. package/dist/esm/{index-5a0f5fd0.js → index-79b30591.js} +1 -1
  97. package/dist/esm/{index-8785a9c6.js → index-cb21eccb.js} +2 -2
  98. package/dist/esm/{index-33f7e3ff.js → index-efb8ecdf.js} +2 -2
  99. package/dist/esm/index.js +8 -8
  100. package/dist/esm/{input-shims-0e65111b.js → input-shims-2fd7c6ef.js} +5 -3
  101. package/dist/esm/{input.utils-1ad8dafc.js → input.utils-961c9f17.js} +2 -2
  102. package/dist/esm/ion-accordion_2.entry.js +2 -2
  103. package/dist/esm/ion-action-sheet.entry.js +4 -4
  104. package/dist/esm/ion-alert.entry.js +4 -4
  105. package/dist/esm/ion-app_8.entry.js +11 -11
  106. package/dist/esm/ion-back-button.entry.js +1 -1
  107. package/dist/esm/ion-breadcrumb_2.entry.js +1 -1
  108. package/dist/esm/ion-button_2.entry.js +2 -2
  109. package/dist/esm/ion-card_5.entry.js +1 -1
  110. package/dist/esm/ion-checkbox.entry.js +38 -7
  111. package/dist/esm/ion-datetime-button.entry.js +3 -3
  112. package/dist/esm/ion-datetime_3.entry.js +5 -5
  113. package/dist/esm/ion-fab_3.entry.js +1 -1
  114. package/dist/esm/ion-img.entry.js +1 -1
  115. package/dist/esm/ion-infinite-scroll_2.entry.js +3 -3
  116. package/dist/esm/ion-input-password-toggle.entry.js +1 -1
  117. package/dist/esm/ion-input.entry.js +4 -4
  118. package/dist/esm/ion-item-option_3.entry.js +3 -3
  119. package/dist/esm/ion-item_8.entry.js +1 -1
  120. package/dist/esm/ion-loading.entry.js +4 -4
  121. package/dist/esm/ion-menu_3.entry.js +5 -5
  122. package/dist/esm/ion-modal.entry.js +264 -41
  123. package/dist/esm/ion-nav_2.entry.js +5 -5
  124. package/dist/esm/ion-picker-column-option.entry.js +1 -1
  125. package/dist/esm/ion-picker-column.entry.js +1 -1
  126. package/dist/esm/ion-picker.entry.js +1 -1
  127. package/dist/esm/ion-popover.entry.js +5 -5
  128. package/dist/esm/ion-progress-bar.entry.js +1 -1
  129. package/dist/esm/ion-radio_2.entry.js +1 -1
  130. package/dist/esm/ion-range.entry.js +3 -3
  131. package/dist/esm/ion-refresher_2.entry.js +3 -3
  132. package/dist/esm/ion-reorder_2.entry.js +3 -3
  133. package/dist/esm/ion-route_4.entry.js +1 -1
  134. package/dist/esm/ion-searchbar.entry.js +1 -1
  135. package/dist/esm/ion-segment_2.entry.js +9 -40
  136. package/dist/esm/ion-select-modal.entry.js +4 -4
  137. package/dist/esm/ion-select_3.entry.js +19 -45
  138. package/dist/esm/ion-tab-bar_2.entry.js +1 -1
  139. package/dist/esm/ion-tab_2.entry.js +2 -2
  140. package/dist/esm/ion-textarea.entry.js +4 -4
  141. package/dist/esm/ion-toast.entry.js +4 -4
  142. package/dist/esm/ion-toggle.entry.js +6 -5
  143. package/dist/esm/ionic.js +1 -1
  144. package/dist/esm/{ios.transition-085853ff.js → ios.transition-b1da3753.js} +3 -3
  145. package/dist/esm/loader.js +1 -1
  146. package/dist/esm/{md.transition-33826623.js → md.transition-571b3859.js} +3 -3
  147. package/dist/esm/{notch-controller-3dc61260.js → notch-controller-55b09e11.js} +1 -1
  148. package/dist/esm/{overlays-e3d0d356.js → overlays-5deab4de.js} +3 -3
  149. package/dist/esm/{status-tap-163e8128.js → status-tap-79eac0ac.js} +4 -3
  150. package/dist/esm/{swipe-back-23ee7ab1.js → swipe-back-e5394307.js} +1 -1
  151. package/dist/esm-es5/{data-ae11fd43.js → data-b3284b5e.js} +1 -1
  152. package/dist/esm-es5/{framework-delegate-f683816e.js → framework-delegate-63d1a679.js} +1 -1
  153. package/dist/esm-es5/{helpers-9b49d7d2.js → helpers-da915de8.js} +1 -1
  154. package/dist/esm-es5/{index-7ec5519a.js → index-2f7fde3d.js} +1 -1
  155. package/dist/esm-es5/index-6ad967f3.js +4 -0
  156. package/dist/esm-es5/{index-5a0f5fd0.js → index-79b30591.js} +1 -1
  157. package/dist/esm-es5/{index-8785a9c6.js → index-cb21eccb.js} +1 -1
  158. package/dist/esm-es5/{index-33f7e3ff.js → index-efb8ecdf.js} +1 -1
  159. package/dist/esm-es5/index.js +1 -1
  160. package/dist/esm-es5/input-shims-2fd7c6ef.js +4 -0
  161. package/dist/esm-es5/{input.utils-1ad8dafc.js → input.utils-961c9f17.js} +1 -1
  162. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  163. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  164. package/dist/esm-es5/ion-alert.entry.js +1 -1
  165. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  166. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  167. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  168. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  169. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  170. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  171. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  172. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  173. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  174. package/dist/esm-es5/ion-img.entry.js +1 -1
  175. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  176. package/dist/esm-es5/ion-input-password-toggle.entry.js +1 -1
  177. package/dist/esm-es5/ion-input.entry.js +1 -1
  178. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  179. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  180. package/dist/esm-es5/ion-loading.entry.js +1 -1
  181. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  182. package/dist/esm-es5/ion-modal.entry.js +1 -1
  183. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  184. package/dist/esm-es5/ion-picker-column-option.entry.js +1 -1
  185. package/dist/esm-es5/ion-picker-column.entry.js +1 -1
  186. package/dist/esm-es5/ion-picker.entry.js +1 -1
  187. package/dist/esm-es5/ion-popover.entry.js +1 -1
  188. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  189. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  190. package/dist/esm-es5/ion-range.entry.js +1 -1
  191. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  192. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  193. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  194. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  195. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  196. package/dist/esm-es5/ion-select-modal.entry.js +1 -1
  197. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  198. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  199. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  200. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  201. package/dist/esm-es5/ion-toast.entry.js +1 -1
  202. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  203. package/dist/esm-es5/ionic.js +1 -1
  204. package/dist/esm-es5/{ios.transition-085853ff.js → ios.transition-b1da3753.js} +1 -1
  205. package/dist/esm-es5/loader.js +1 -1
  206. package/dist/esm-es5/md.transition-571b3859.js +4 -0
  207. package/dist/esm-es5/{notch-controller-3dc61260.js → notch-controller-55b09e11.js} +1 -1
  208. package/dist/esm-es5/{overlays-e3d0d356.js → overlays-5deab4de.js} +1 -1
  209. package/dist/esm-es5/status-tap-79eac0ac.js +4 -0
  210. package/dist/esm-es5/{swipe-back-23ee7ab1.js → swipe-back-e5394307.js} +1 -1
  211. package/dist/html.html-data.json +24 -0
  212. package/dist/ionic/index.esm.js +1 -1
  213. package/dist/ionic/ionic.esm.js +1 -1
  214. package/dist/ionic/{p-a9e24ae2.system.entry.js → p-01186920.system.entry.js} +1 -1
  215. package/dist/ionic/p-0430c2e0.entry.js +4 -0
  216. package/dist/ionic/{p-3eaf1444.system.entry.js → p-05b74e45.system.entry.js} +1 -1
  217. package/dist/ionic/{p-bb2a6761.entry.js → p-081a4ce4.entry.js} +1 -1
  218. package/dist/ionic/p-0af823e1.js +4 -0
  219. package/dist/ionic/{p-aa63b365.system.js → p-0eb35a7f.system.js} +1 -1
  220. package/dist/ionic/p-1132ffee.entry.js +4 -0
  221. package/dist/ionic/{p-203633d1.entry.js → p-120fb79a.entry.js} +1 -1
  222. package/dist/ionic/{p-5cde8ef3.entry.js → p-15d18206.entry.js} +1 -1
  223. package/dist/ionic/{p-e8f34871.entry.js → p-15e76dd1.entry.js} +1 -1
  224. package/dist/ionic/{p-7b98cebe.entry.js → p-16188af7.entry.js} +1 -1
  225. package/dist/ionic/{p-5126cf1e.system.js → p-19ea7bff.system.js} +1 -1
  226. package/dist/ionic/{p-d60342e3.js → p-1a5bc5f7.js} +1 -1
  227. package/dist/ionic/{p-42808996.js → p-1ab13b2b.js} +1 -1
  228. package/dist/ionic/{p-84d08aae.system.entry.js → p-1e67b266.system.entry.js} +1 -1
  229. package/dist/ionic/{p-e2e19375.system.entry.js → p-2172893e.system.entry.js} +1 -1
  230. package/dist/ionic/{p-0c9b6d3a.system.entry.js → p-2346ab53.system.entry.js} +1 -1
  231. package/dist/ionic/{p-162c8d0c.system.entry.js → p-248318e0.system.entry.js} +1 -1
  232. package/dist/ionic/{p-f5035354.js → p-28706c6f.js} +1 -1
  233. package/dist/ionic/{p-2515cb4d.system.entry.js → p-2b838f86.system.entry.js} +1 -1
  234. package/dist/ionic/{p-4c252070.entry.js → p-2da9c8a7.entry.js} +1 -1
  235. package/dist/ionic/{p-2ef3c7ee.system.entry.js → p-2e46590d.system.entry.js} +1 -1
  236. package/dist/ionic/{p-e265ae18.system.entry.js → p-302b50bb.system.entry.js} +1 -1
  237. package/dist/ionic/p-322c5fb4.system.js +1 -1
  238. package/dist/ionic/{p-f687573e.system.js → p-343b6b1d.system.js} +1 -1
  239. package/dist/ionic/{p-2bc73fb5.js → p-34b11c24.js} +1 -1
  240. package/dist/ionic/{p-b3680e2f.system.js → p-3ad285e3.system.js} +1 -1
  241. package/dist/ionic/{p-d4ca0475.js → p-3cc276f4.js} +1 -1
  242. package/dist/ionic/p-4c2d5b80.system.js +4 -0
  243. package/dist/ionic/p-4c98e2cf.system.js +4 -0
  244. package/dist/ionic/p-4ec778aa.entry.js +4 -0
  245. package/dist/ionic/{p-4ad78edc.entry.js → p-52d7a191.entry.js} +1 -1
  246. package/dist/ionic/{p-92365bc1.system.entry.js → p-567de071.system.entry.js} +1 -1
  247. package/dist/ionic/p-577bc414.entry.js +4 -0
  248. package/dist/ionic/{p-b91acf8d.system.entry.js → p-585b455c.system.entry.js} +1 -1
  249. package/dist/ionic/{p-da8ef548.system.entry.js → p-58d5df0c.system.entry.js} +1 -1
  250. package/dist/ionic/{p-9eee4de1.system.js → p-5c08627a.system.js} +1 -1
  251. package/dist/ionic/{p-cc700b6b.entry.js → p-5c9eb9af.entry.js} +1 -1
  252. package/dist/ionic/{p-6b1bd0c1.entry.js → p-61db139d.entry.js} +1 -1
  253. package/dist/ionic/{p-f89cf011.system.entry.js → p-63b0abde.system.entry.js} +1 -1
  254. package/dist/ionic/p-67222c16.system.js +4 -0
  255. package/dist/ionic/{p-a4575db1.system.entry.js → p-6933c482.system.entry.js} +1 -1
  256. package/dist/ionic/{p-6190d0d6.entry.js → p-6d6cedc5.entry.js} +1 -1
  257. package/dist/ionic/{p-9a1f985d.system.entry.js → p-6dfb0f39.system.entry.js} +1 -1
  258. package/dist/ionic/{p-7a1766d6.js → p-72812e99.js} +1 -1
  259. package/dist/ionic/p-72bc8a1c.js +4 -0
  260. package/dist/ionic/{p-4346c79d.system.entry.js → p-744c8672.system.entry.js} +1 -1
  261. package/dist/ionic/{p-1bbe8665.system.entry.js → p-74e3f0af.system.entry.js} +2 -2
  262. package/dist/ionic/p-7513b0c4.js +4 -0
  263. package/dist/ionic/{p-f78af648.system.entry.js → p-797eeea8.system.entry.js} +1 -1
  264. package/dist/ionic/{p-83e68c71.entry.js → p-7a02f476.entry.js} +1 -1
  265. package/dist/ionic/{p-14143257.entry.js → p-7a6eaf9e.entry.js} +1 -1
  266. package/dist/ionic/{p-fca17935.entry.js → p-7b9a2b23.entry.js} +1 -1
  267. package/dist/ionic/{p-70ccc275.system.entry.js → p-7ddc46c3.system.entry.js} +1 -1
  268. package/dist/ionic/{p-a2b6dd57.system.js → p-7de1e42c.system.js} +1 -1
  269. package/dist/ionic/{p-0eb2553a.system.entry.js → p-7ed1657c.system.entry.js} +1 -1
  270. package/dist/ionic/{p-95da3ae2.system.js → p-8635f5e6.system.js} +1 -1
  271. package/dist/ionic/{p-803f0bc2.entry.js → p-8694928f.entry.js} +1 -1
  272. package/dist/ionic/{p-da074ff7.entry.js → p-89bf08c7.entry.js} +1 -1
  273. package/dist/ionic/{p-c29f8157.system.entry.js → p-8cfba7e9.system.entry.js} +1 -1
  274. package/dist/ionic/{p-82b931e2.entry.js → p-92763d3d.entry.js} +1 -1
  275. package/dist/ionic/{p-561ddcd4.system.entry.js → p-933727f9.system.entry.js} +2 -2
  276. package/dist/ionic/p-9343a445.js +4 -0
  277. package/dist/ionic/{p-02e23f26.entry.js → p-937a7e21.entry.js} +1 -1
  278. package/dist/ionic/{p-57379000.entry.js → p-948e6c6a.entry.js} +1 -1
  279. package/dist/ionic/{p-77e7b7b6.system.entry.js → p-98231c01.system.entry.js} +1 -1
  280. package/dist/ionic/{p-dc146a2a.system.entry.js → p-985a7e17.system.entry.js} +1 -1
  281. package/dist/ionic/{p-76446a85.entry.js → p-98ff6b32.entry.js} +1 -1
  282. package/dist/ionic/{p-a3c78186.system.entry.js → p-9b122e3c.system.entry.js} +1 -1
  283. package/dist/ionic/{p-0397811d.entry.js → p-9b428d25.entry.js} +1 -1
  284. package/dist/ionic/{p-41780810.entry.js → p-9df2c6fb.entry.js} +1 -1
  285. package/dist/ionic/{p-d3b26da4.system.entry.js → p-9f364443.system.entry.js} +1 -1
  286. package/dist/ionic/{p-3572f86a.system.entry.js → p-a090bce8.system.entry.js} +1 -1
  287. package/dist/ionic/{p-1bc65aec.system.entry.js → p-a0eb506c.system.entry.js} +1 -1
  288. package/dist/ionic/{p-4452a8ac.system.js → p-a15ddedb.system.js} +1 -1
  289. package/dist/ionic/p-a3db8ee3.js +4 -0
  290. package/dist/ionic/{p-e456ee59.system.entry.js → p-a4a2420e.system.entry.js} +1 -1
  291. package/dist/ionic/{p-1a790eef.system.js → p-a88dec0d.system.js} +2 -2
  292. package/dist/ionic/{p-b0d8bbee.entry.js → p-a8f2c254.entry.js} +1 -1
  293. package/dist/ionic/{p-3df889b3.system.entry.js → p-ab674093.system.entry.js} +1 -1
  294. package/dist/ionic/{p-c1b51537.system.js → p-ada36597.system.js} +1 -1
  295. package/dist/ionic/{p-45de8d2a.entry.js → p-b1eb86fd.entry.js} +1 -1
  296. package/dist/ionic/{p-e8232807.system.js → p-b3c60433.system.js} +1 -1
  297. package/dist/ionic/{p-bb11d9fb.js → p-b51e4004.js} +1 -1
  298. package/dist/ionic/{p-13dc21b0.js → p-b6efeab8.js} +1 -1
  299. package/dist/ionic/{p-9b3bb24e.entry.js → p-b9d7015f.entry.js} +1 -1
  300. package/dist/ionic/{p-c32644d7.entry.js → p-bb0db172.entry.js} +1 -1
  301. package/dist/ionic/{p-d06601eb.system.entry.js → p-bdf2cb2e.system.entry.js} +1 -1
  302. package/dist/ionic/{p-c8d645b3.entry.js → p-c41ac815.entry.js} +1 -1
  303. package/dist/ionic/{p-340e3f24.system.js → p-c4238c12.system.js} +1 -1
  304. package/dist/ionic/p-c4b53b16.system.entry.js +4 -0
  305. package/dist/ionic/{p-dd0c9350.system.entry.js → p-cac0e0b3.system.entry.js} +1 -1
  306. package/dist/ionic/{p-51dec25d.js → p-cb13696c.js} +1 -1
  307. package/dist/ionic/{p-7b96e5c1.system.entry.js → p-cba1f9bc.system.entry.js} +1 -1
  308. package/dist/ionic/p-cdc83025.entry.js +4 -0
  309. package/dist/ionic/p-d1c5b60e.system.js +4 -0
  310. package/dist/ionic/{p-881d9e52.system.js → p-d22e2a38.system.js} +1 -1
  311. package/dist/ionic/{p-9be5f3ee.system.entry.js → p-d6eaffb1.system.entry.js} +2 -2
  312. package/dist/ionic/{p-955c3eb8.entry.js → p-d7aa6b00.entry.js} +1 -1
  313. package/dist/ionic/p-d7dd8fb1.entry.js +4 -0
  314. package/dist/ionic/{p-265939f0.entry.js → p-de930745.entry.js} +1 -1
  315. package/dist/ionic/{p-57ceead7.entry.js → p-e06057c9.entry.js} +1 -1
  316. package/dist/ionic/{p-91f17b25.system.entry.js → p-e09d6392.system.entry.js} +2 -2
  317. package/dist/ionic/p-e3171ff3.entry.js +4 -0
  318. package/dist/ionic/{p-f301a694.system.entry.js → p-e4ee80be.system.entry.js} +1 -1
  319. package/dist/ionic/p-e4fde4fb.system.entry.js +4 -0
  320. package/dist/ionic/p-e6376b93.system.entry.js +4 -0
  321. package/dist/ionic/{p-f42743d1.entry.js → p-e76dae93.entry.js} +1 -1
  322. package/dist/ionic/p-e8d56122.js +4 -0
  323. package/dist/ionic/{p-e1bbacb7.entry.js → p-eef505e8.entry.js} +1 -1
  324. package/dist/ionic/{p-26194519.entry.js → p-f1060cd8.entry.js} +1 -1
  325. package/dist/ionic/{p-d192fdf7.system.entry.js → p-f1120724.system.entry.js} +1 -1
  326. package/dist/ionic/{p-02e1ebd9.js → p-f1c4dcd4.js} +1 -1
  327. package/dist/ionic/{p-32e99b0a.entry.js → p-f63c2d12.entry.js} +1 -1
  328. package/dist/ionic/{p-ffc48bc5.system.entry.js → p-fbd41a7e.system.entry.js} +1 -1
  329. package/dist/ionic/{p-e97a3f44.entry.js → p-fceec762.entry.js} +1 -1
  330. package/dist/types/components/checkbox/checkbox.d.ts +25 -0
  331. package/dist/types/components/modal/animations/sheet.d.ts +1 -0
  332. package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
  333. package/dist/types/components/modal/modal-interface.d.ts +1 -0
  334. package/dist/types/components/modal/modal.d.ts +11 -0
  335. package/dist/types/components/segment-button/segment-button.d.ts +1 -2
  336. package/dist/types/components/select/select.d.ts +6 -0
  337. package/dist/types/components/toggle/toggle.d.ts +6 -0
  338. package/dist/types/components/toolbar/toolbar.d.ts +4 -0
  339. package/dist/types/components.d.ts +48 -0
  340. package/dist/types/utils/config.d.ts +9 -0
  341. package/dist/types/utils/helpers.d.ts +0 -1
  342. package/dist/types/utils/logging/index.d.ts +13 -1
  343. package/hydrate/index.js +346 -139
  344. package/hydrate/index.mjs +346 -139
  345. package/package.json +3 -3
  346. package/dist/esm-es5/index-9b0d46f4.js +0 -4
  347. package/dist/esm-es5/input-shims-0e65111b.js +0 -4
  348. package/dist/esm-es5/md.transition-33826623.js +0 -4
  349. package/dist/esm-es5/status-tap-163e8128.js +0 -4
  350. package/dist/ionic/p-06fee233.js +0 -4
  351. package/dist/ionic/p-075a94bd.js +0 -4
  352. package/dist/ionic/p-0a59f4fa.entry.js +0 -4
  353. package/dist/ionic/p-0e43be1b.entry.js +0 -4
  354. package/dist/ionic/p-0ee3b5a2.system.js +0 -4
  355. package/dist/ionic/p-135e5731.js +0 -4
  356. package/dist/ionic/p-1f405274.js +0 -4
  357. package/dist/ionic/p-25fa1d30.system.entry.js +0 -4
  358. package/dist/ionic/p-2c9eb774.system.js +0 -4
  359. package/dist/ionic/p-48a8d9b4.system.entry.js +0 -4
  360. package/dist/ionic/p-56da53ad.system.entry.js +0 -4
  361. package/dist/ionic/p-61d044b4.entry.js +0 -4
  362. package/dist/ionic/p-68dc53a5.js +0 -4
  363. package/dist/ionic/p-84b1b9a0.entry.js +0 -4
  364. package/dist/ionic/p-8a836849.entry.js +0 -4
  365. package/dist/ionic/p-af09741c.entry.js +0 -4
  366. package/dist/ionic/p-b7433d7d.js +0 -4
  367. package/dist/ionic/p-df862603.entry.js +0 -4
  368. package/dist/ionic/p-e308de5b.system.js +0 -4
  369. package/dist/ionic/p-ff4b7e40.system.js +0 -4
package/hydrate/index.js CHANGED
@@ -2710,16 +2710,6 @@ const shallowEqualStringMap = (map1, map2) => {
2710
2710
  }
2711
2711
  return true;
2712
2712
  };
2713
- const getNextSiblingOfType = (element) => {
2714
- let sibling = element.nextSibling;
2715
- while (sibling) {
2716
- if (sibling.nodeType === Node.ELEMENT_NODE && sibling !== null) {
2717
- return sibling;
2718
- }
2719
- sibling = sibling.nextSibling;
2720
- }
2721
- return null;
2722
- };
2723
2713
 
2724
2714
  /* Ionicons v7.2.2, ES Modules */
2725
2715
  const arrowBackSharp = "data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='square' stroke-miterlimit='10' stroke-width='48' d='M244 400L100 256l144-144M120 256h292' class='ionicon-fill-none'/></svg>";
@@ -3227,9 +3217,12 @@ let accordionIds = 0;
3227
3217
  * @param message - The string message to be logged to the console.
3228
3218
  */
3229
3219
  const printIonWarning = (message, ...params) => {
3230
- return console.warn(`[Ionic Warning]: ${message}`, ...params);
3220
+ const logLevel = config.get('logLevel', "WARN" /* LogLevel.WARN */);
3221
+ if (["WARN" /* LogLevel.WARN */].includes(logLevel)) {
3222
+ return console.warn(`[Ionic Warning]: ${message}`, ...params);
3223
+ }
3231
3224
  };
3232
- /*
3225
+ /**
3233
3226
  * Logs an error to the console with an Ionic prefix
3234
3227
  * to indicate the library that is warning the developer.
3235
3228
  *
@@ -3237,7 +3230,10 @@ const printIonWarning = (message, ...params) => {
3237
3230
  * @param params - Additional arguments to supply to the console.error.
3238
3231
  */
3239
3232
  const printIonError = (message, ...params) => {
3240
- return console.error(`[Ionic Error]: ${message}`, ...params);
3233
+ const logLevel = config.get('logLevel', "ERROR" /* LogLevel.ERROR */);
3234
+ if (["ERROR" /* LogLevel.ERROR */, "WARN" /* LogLevel.WARN */].includes(logLevel)) {
3235
+ return console.error(`[Ionic Error]: ${message}`, ...params);
3236
+ }
3241
3237
  };
3242
3238
  /**
3243
3239
  * Prints an error informing developers that an implementation requires an element to be used
@@ -8438,10 +8434,10 @@ class CardTitle {
8438
8434
  }; }
8439
8435
  }
8440
8436
 
8441
- const checkboxIosCss = ":host{--checkbox-background-checked:var(--ion-color-primary, #0054e9);--border-color-checked:var(--ion-color-primary, #0054e9);--checkmark-color:var(--ion-color-primary-contrast, #fff);--transition:none;display:inline-block;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:2}:host(.in-item){-ms-flex:1 1 0px;flex:1 1 0;width:100%;height:100%}:host([slot=start]),:host([slot=end]){-ms-flex:initial;flex:initial;width:auto}:host(.ion-color){--checkbox-background-checked:var(--ion-color-base);--border-color-checked:var(--ion-color-base);--checkmark-color:var(--ion-color-contrast)}.checkbox-wrapper{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;height:inherit;cursor:inherit}.label-text-wrapper{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host(.in-item) .label-text-wrapper,:host(.in-item:not(.checkbox-label-placement-stacked):not([slot])) .native-wrapper{margin-top:10px;margin-bottom:10px}:host(.in-item.checkbox-label-placement-stacked) .label-text-wrapper{margin-top:10px;margin-bottom:16px}:host(.in-item.checkbox-label-placement-stacked) .native-wrapper{margin-bottom:10px}.label-text-wrapper-hidden{display:none}input{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;margin:0;padding:0;border:0;outline:0;clip:rect(0 0 0 0);opacity:0;overflow:hidden;-webkit-appearance:none;-moz-appearance:none}.native-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.checkbox-icon{border-radius:var(--border-radius);position:relative;width:var(--size);height:var(--size);-webkit-transition:var(--transition);transition:var(--transition);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--checkbox-background);-webkit-box-sizing:border-box;box-sizing:border-box}.checkbox-icon path{fill:none;stroke:var(--checkmark-color);stroke-width:var(--checkmark-width);opacity:0}:host(.checkbox-justify-space-between) .checkbox-wrapper{-ms-flex-pack:justify;justify-content:space-between}:host(.checkbox-justify-start) .checkbox-wrapper{-ms-flex-pack:start;justify-content:start}:host(.checkbox-justify-end) .checkbox-wrapper{-ms-flex-pack:end;justify-content:end}:host(.checkbox-alignment-start) .checkbox-wrapper{-ms-flex-align:start;align-items:start}:host(.checkbox-alignment-center) .checkbox-wrapper{-ms-flex-align:center;align-items:center}:host(.checkbox-justify-space-between),:host(.checkbox-justify-start),:host(.checkbox-justify-end),:host(.checkbox-alignment-start),:host(.checkbox-alignment-center){display:block}:host(.checkbox-label-placement-start) .checkbox-wrapper{-ms-flex-direction:row;flex-direction:row}:host(.checkbox-label-placement-start) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-end) .checkbox-wrapper{-ms-flex-direction:row-reverse;flex-direction:row-reverse}:host(.checkbox-label-placement-end) .label-text-wrapper{-webkit-margin-start:16px;margin-inline-start:16px;-webkit-margin-end:0;margin-inline-end:0}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}:host(.checkbox-label-placement-stacked) .checkbox-wrapper{-ms-flex-direction:column;flex-direction:column}:host(.checkbox-label-placement-stacked) .label-text-wrapper{-webkit-transform:scale(0.75);transform:scale(0.75);margin-left:0;margin-right:0;margin-bottom:16px;max-width:calc(100% / 0.75)}:host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper{-webkit-transform-origin:left top;transform-origin:left top}:host-context([dir=rtl]):host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper,:host-context([dir=rtl]).checkbox-label-placement-stacked.checkbox-alignment-start .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}@supports selector(:dir(rtl)){:host(.checkbox-label-placement-stacked.checkbox-alignment-start:dir(rtl)) .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}}:host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper{-webkit-transform-origin:center top;transform-origin:center top}:host-context([dir=rtl]):host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper,:host-context([dir=rtl]).checkbox-label-placement-stacked.checkbox-alignment-center .label-text-wrapper{-webkit-transform-origin:calc(100% - center) top;transform-origin:calc(100% - center) top}@supports selector(:dir(rtl)){:host(.checkbox-label-placement-stacked.checkbox-alignment-center:dir(rtl)) .label-text-wrapper{-webkit-transform-origin:calc(100% - center) top;transform-origin:calc(100% - center) top}}:host(.checkbox-checked) .checkbox-icon,:host(.checkbox-indeterminate) .checkbox-icon{border-color:var(--border-color-checked);background:var(--checkbox-background-checked)}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{opacity:1}:host(.checkbox-disabled){pointer-events:none}:host{--border-radius:50%;--border-width:0.125rem;--border-style:solid;--border-color:rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.23);--checkbox-background:var(--ion-item-background, var(--ion-background-color, #fff));--size:min(1.375rem, 55.836px);--checkmark-width:1.5px}:host(.checkbox-disabled){opacity:0.3}";
8437
+ const checkboxIosCss = ":host{--checkbox-background-checked:var(--ion-color-primary, #0054e9);--border-color-checked:var(--ion-color-primary, #0054e9);--checkmark-color:var(--ion-color-primary-contrast, #fff);--transition:none;display:inline-block;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:2}:host(.in-item){-ms-flex:1 1 0px;flex:1 1 0;width:100%;height:100%}:host([slot=start]),:host([slot=end]){-ms-flex:initial;flex:initial;width:auto}:host(.ion-color){--checkbox-background-checked:var(--ion-color-base);--border-color-checked:var(--ion-color-base);--checkmark-color:var(--ion-color-contrast)}.checkbox-wrapper{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;height:inherit;cursor:inherit}.label-text-wrapper{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host(.in-item) .label-text-wrapper,:host(.in-item:not(.checkbox-label-placement-stacked):not([slot])) .native-wrapper{margin-top:10px;margin-bottom:10px}:host(.in-item.checkbox-label-placement-stacked) .label-text-wrapper{margin-top:10px;margin-bottom:16px}:host(.in-item.checkbox-label-placement-stacked) .native-wrapper{margin-bottom:10px}.label-text-wrapper-hidden{display:none}input{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;margin:0;padding:0;border:0;outline:0;clip:rect(0 0 0 0);opacity:0;overflow:hidden;-webkit-appearance:none;-moz-appearance:none}.native-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.checkbox-icon{border-radius:var(--border-radius);position:relative;width:var(--size);height:var(--size);-webkit-transition:var(--transition);transition:var(--transition);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--checkbox-background);-webkit-box-sizing:border-box;box-sizing:border-box}.checkbox-icon path{fill:none;stroke:var(--checkmark-color);stroke-width:var(--checkmark-width);opacity:0}.checkbox-bottom{padding-top:4px;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;font-size:0.75rem;white-space:normal}:host(.checkbox-label-placement-stacked) .checkbox-bottom{font-size:1rem}.checkbox-bottom .error-text{display:none;color:var(--ion-color-danger, #c5000f)}.checkbox-bottom .helper-text{display:block;color:var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d))}:host(.ion-touched.ion-invalid) .checkbox-bottom .error-text{display:block}:host(.ion-touched.ion-invalid) .checkbox-bottom .helper-text{display:none}:host(.checkbox-label-placement-start) .checkbox-wrapper{-ms-flex-direction:row;flex-direction:row}:host(.checkbox-label-placement-start) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-end) .checkbox-wrapper{-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex-pack:start;justify-content:start}:host(.checkbox-label-placement-end) .label-text-wrapper{-webkit-margin-start:16px;margin-inline-start:16px;-webkit-margin-end:0;margin-inline-end:0}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}:host(.checkbox-label-placement-stacked) .checkbox-wrapper{-ms-flex-direction:column;flex-direction:column;text-align:center}:host(.checkbox-label-placement-stacked) .label-text-wrapper{-webkit-transform:scale(0.75);transform:scale(0.75);margin-left:0;margin-right:0;margin-bottom:16px;max-width:calc(100% / 0.75)}:host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper{-webkit-transform-origin:left top;transform-origin:left top}:host-context([dir=rtl]):host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper,:host-context([dir=rtl]).checkbox-label-placement-stacked.checkbox-alignment-start .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}@supports selector(:dir(rtl)){:host(.checkbox-label-placement-stacked.checkbox-alignment-start:dir(rtl)) .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}}:host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper{-webkit-transform-origin:center top;transform-origin:center top}:host-context([dir=rtl]):host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper,:host-context([dir=rtl]).checkbox-label-placement-stacked.checkbox-alignment-center .label-text-wrapper{-webkit-transform-origin:calc(100% - center) top;transform-origin:calc(100% - center) top}@supports selector(:dir(rtl)){:host(.checkbox-label-placement-stacked.checkbox-alignment-center:dir(rtl)) .label-text-wrapper{-webkit-transform-origin:calc(100% - center) top;transform-origin:calc(100% - center) top}}:host(.checkbox-justify-space-between) .checkbox-wrapper{-ms-flex-pack:justify;justify-content:space-between}:host(.checkbox-justify-start) .checkbox-wrapper{-ms-flex-pack:start;justify-content:start}:host(.checkbox-justify-end) .checkbox-wrapper{-ms-flex-pack:end;justify-content:end}:host(.checkbox-alignment-start) .checkbox-wrapper{-ms-flex-align:start;align-items:start}:host(.checkbox-alignment-center) .checkbox-wrapper{-ms-flex-align:center;align-items:center}:host(.checkbox-justify-space-between),:host(.checkbox-justify-start),:host(.checkbox-justify-end),:host(.checkbox-alignment-start),:host(.checkbox-alignment-center){display:block}:host(.checkbox-checked) .checkbox-icon,:host(.checkbox-indeterminate) .checkbox-icon{border-color:var(--border-color-checked);background:var(--checkbox-background-checked)}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{opacity:1}:host(.checkbox-disabled){pointer-events:none}:host{--border-radius:50%;--border-width:0.125rem;--border-style:solid;--border-color:rgba(var(--ion-text-color-rgb, 0, 0, 0), 0.23);--checkbox-background:var(--ion-item-background, var(--ion-background-color, #fff));--size:min(1.375rem, 55.836px);--checkmark-width:1.5px}:host(.checkbox-disabled){opacity:0.3}";
8442
8438
  var IonCheckboxIosStyle0 = checkboxIosCss;
8443
8439
 
8444
- const checkboxMdCss = ":host{--checkbox-background-checked:var(--ion-color-primary, #0054e9);--border-color-checked:var(--ion-color-primary, #0054e9);--checkmark-color:var(--ion-color-primary-contrast, #fff);--transition:none;display:inline-block;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:2}:host(.in-item){-ms-flex:1 1 0px;flex:1 1 0;width:100%;height:100%}:host([slot=start]),:host([slot=end]){-ms-flex:initial;flex:initial;width:auto}:host(.ion-color){--checkbox-background-checked:var(--ion-color-base);--border-color-checked:var(--ion-color-base);--checkmark-color:var(--ion-color-contrast)}.checkbox-wrapper{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;height:inherit;cursor:inherit}.label-text-wrapper{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host(.in-item) .label-text-wrapper,:host(.in-item:not(.checkbox-label-placement-stacked):not([slot])) .native-wrapper{margin-top:10px;margin-bottom:10px}:host(.in-item.checkbox-label-placement-stacked) .label-text-wrapper{margin-top:10px;margin-bottom:16px}:host(.in-item.checkbox-label-placement-stacked) .native-wrapper{margin-bottom:10px}.label-text-wrapper-hidden{display:none}input{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;margin:0;padding:0;border:0;outline:0;clip:rect(0 0 0 0);opacity:0;overflow:hidden;-webkit-appearance:none;-moz-appearance:none}.native-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.checkbox-icon{border-radius:var(--border-radius);position:relative;width:var(--size);height:var(--size);-webkit-transition:var(--transition);transition:var(--transition);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--checkbox-background);-webkit-box-sizing:border-box;box-sizing:border-box}.checkbox-icon path{fill:none;stroke:var(--checkmark-color);stroke-width:var(--checkmark-width);opacity:0}:host(.checkbox-justify-space-between) .checkbox-wrapper{-ms-flex-pack:justify;justify-content:space-between}:host(.checkbox-justify-start) .checkbox-wrapper{-ms-flex-pack:start;justify-content:start}:host(.checkbox-justify-end) .checkbox-wrapper{-ms-flex-pack:end;justify-content:end}:host(.checkbox-alignment-start) .checkbox-wrapper{-ms-flex-align:start;align-items:start}:host(.checkbox-alignment-center) .checkbox-wrapper{-ms-flex-align:center;align-items:center}:host(.checkbox-justify-space-between),:host(.checkbox-justify-start),:host(.checkbox-justify-end),:host(.checkbox-alignment-start),:host(.checkbox-alignment-center){display:block}:host(.checkbox-label-placement-start) .checkbox-wrapper{-ms-flex-direction:row;flex-direction:row}:host(.checkbox-label-placement-start) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-end) .checkbox-wrapper{-ms-flex-direction:row-reverse;flex-direction:row-reverse}:host(.checkbox-label-placement-end) .label-text-wrapper{-webkit-margin-start:16px;margin-inline-start:16px;-webkit-margin-end:0;margin-inline-end:0}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}:host(.checkbox-label-placement-stacked) .checkbox-wrapper{-ms-flex-direction:column;flex-direction:column}:host(.checkbox-label-placement-stacked) .label-text-wrapper{-webkit-transform:scale(0.75);transform:scale(0.75);margin-left:0;margin-right:0;margin-bottom:16px;max-width:calc(100% / 0.75)}:host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper{-webkit-transform-origin:left top;transform-origin:left top}:host-context([dir=rtl]):host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper,:host-context([dir=rtl]).checkbox-label-placement-stacked.checkbox-alignment-start .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}@supports selector(:dir(rtl)){:host(.checkbox-label-placement-stacked.checkbox-alignment-start:dir(rtl)) .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}}:host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper{-webkit-transform-origin:center top;transform-origin:center top}:host-context([dir=rtl]):host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper,:host-context([dir=rtl]).checkbox-label-placement-stacked.checkbox-alignment-center .label-text-wrapper{-webkit-transform-origin:calc(100% - center) top;transform-origin:calc(100% - center) top}@supports selector(:dir(rtl)){:host(.checkbox-label-placement-stacked.checkbox-alignment-center:dir(rtl)) .label-text-wrapper{-webkit-transform-origin:calc(100% - center) top;transform-origin:calc(100% - center) top}}:host(.checkbox-checked) .checkbox-icon,:host(.checkbox-indeterminate) .checkbox-icon{border-color:var(--border-color-checked);background:var(--checkbox-background-checked)}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{opacity:1}:host(.checkbox-disabled){pointer-events:none}:host{--border-radius:calc(var(--size) * .125);--border-width:2px;--border-style:solid;--border-color:rgb(var(--ion-text-color-rgb, 0, 0, 0), 0.6);--checkmark-width:3;--checkbox-background:var(--ion-item-background, var(--ion-background-color, #fff));--transition:background 180ms cubic-bezier(0.4, 0, 0.2, 1);--size:18px}.checkbox-icon path{stroke-dasharray:30;stroke-dashoffset:30}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{stroke-dashoffset:0;-webkit-transition:stroke-dashoffset 90ms linear 90ms;transition:stroke-dashoffset 90ms linear 90ms}:host(.checkbox-disabled) .label-text-wrapper{opacity:0.38}:host(.checkbox-disabled) .native-wrapper{opacity:0.63}";
8440
+ const checkboxMdCss = ":host{--checkbox-background-checked:var(--ion-color-primary, #0054e9);--border-color-checked:var(--ion-color-primary, #0054e9);--checkmark-color:var(--ion-color-primary-contrast, #fff);--transition:none;display:inline-block;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:2}:host(.in-item){-ms-flex:1 1 0px;flex:1 1 0;width:100%;height:100%}:host([slot=start]),:host([slot=end]){-ms-flex:initial;flex:initial;width:auto}:host(.ion-color){--checkbox-background-checked:var(--ion-color-base);--border-color-checked:var(--ion-color-base);--checkmark-color:var(--ion-color-contrast)}.checkbox-wrapper{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;height:inherit;cursor:inherit}.label-text-wrapper{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host(.in-item) .label-text-wrapper,:host(.in-item:not(.checkbox-label-placement-stacked):not([slot])) .native-wrapper{margin-top:10px;margin-bottom:10px}:host(.in-item.checkbox-label-placement-stacked) .label-text-wrapper{margin-top:10px;margin-bottom:16px}:host(.in-item.checkbox-label-placement-stacked) .native-wrapper{margin-bottom:10px}.label-text-wrapper-hidden{display:none}input{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;margin:0;padding:0;border:0;outline:0;clip:rect(0 0 0 0);opacity:0;overflow:hidden;-webkit-appearance:none;-moz-appearance:none}.native-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.checkbox-icon{border-radius:var(--border-radius);position:relative;width:var(--size);height:var(--size);-webkit-transition:var(--transition);transition:var(--transition);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--checkbox-background);-webkit-box-sizing:border-box;box-sizing:border-box}.checkbox-icon path{fill:none;stroke:var(--checkmark-color);stroke-width:var(--checkmark-width);opacity:0}.checkbox-bottom{padding-top:4px;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;font-size:0.75rem;white-space:normal}:host(.checkbox-label-placement-stacked) .checkbox-bottom{font-size:1rem}.checkbox-bottom .error-text{display:none;color:var(--ion-color-danger, #c5000f)}.checkbox-bottom .helper-text{display:block;color:var(--ion-color-step-700, var(--ion-text-color-step-300, #4d4d4d))}:host(.ion-touched.ion-invalid) .checkbox-bottom .error-text{display:block}:host(.ion-touched.ion-invalid) .checkbox-bottom .helper-text{display:none}:host(.checkbox-label-placement-start) .checkbox-wrapper{-ms-flex-direction:row;flex-direction:row}:host(.checkbox-label-placement-start) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-end) .checkbox-wrapper{-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex-pack:start;justify-content:start}:host(.checkbox-label-placement-end) .label-text-wrapper{-webkit-margin-start:16px;margin-inline-start:16px;-webkit-margin-end:0;margin-inline-end:0}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-webkit-margin-start:0;margin-inline-start:0;-webkit-margin-end:16px;margin-inline-end:16px}:host(.checkbox-label-placement-fixed) .label-text-wrapper{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}:host(.checkbox-label-placement-stacked) .checkbox-wrapper{-ms-flex-direction:column;flex-direction:column;text-align:center}:host(.checkbox-label-placement-stacked) .label-text-wrapper{-webkit-transform:scale(0.75);transform:scale(0.75);margin-left:0;margin-right:0;margin-bottom:16px;max-width:calc(100% / 0.75)}:host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper{-webkit-transform-origin:left top;transform-origin:left top}:host-context([dir=rtl]):host(.checkbox-label-placement-stacked.checkbox-alignment-start) .label-text-wrapper,:host-context([dir=rtl]).checkbox-label-placement-stacked.checkbox-alignment-start .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}@supports selector(:dir(rtl)){:host(.checkbox-label-placement-stacked.checkbox-alignment-start:dir(rtl)) .label-text-wrapper{-webkit-transform-origin:right top;transform-origin:right top}}:host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper{-webkit-transform-origin:center top;transform-origin:center top}:host-context([dir=rtl]):host(.checkbox-label-placement-stacked.checkbox-alignment-center) .label-text-wrapper,:host-context([dir=rtl]).checkbox-label-placement-stacked.checkbox-alignment-center .label-text-wrapper{-webkit-transform-origin:calc(100% - center) top;transform-origin:calc(100% - center) top}@supports selector(:dir(rtl)){:host(.checkbox-label-placement-stacked.checkbox-alignment-center:dir(rtl)) .label-text-wrapper{-webkit-transform-origin:calc(100% - center) top;transform-origin:calc(100% - center) top}}:host(.checkbox-justify-space-between) .checkbox-wrapper{-ms-flex-pack:justify;justify-content:space-between}:host(.checkbox-justify-start) .checkbox-wrapper{-ms-flex-pack:start;justify-content:start}:host(.checkbox-justify-end) .checkbox-wrapper{-ms-flex-pack:end;justify-content:end}:host(.checkbox-alignment-start) .checkbox-wrapper{-ms-flex-align:start;align-items:start}:host(.checkbox-alignment-center) .checkbox-wrapper{-ms-flex-align:center;align-items:center}:host(.checkbox-justify-space-between),:host(.checkbox-justify-start),:host(.checkbox-justify-end),:host(.checkbox-alignment-start),:host(.checkbox-alignment-center){display:block}:host(.checkbox-checked) .checkbox-icon,:host(.checkbox-indeterminate) .checkbox-icon{border-color:var(--border-color-checked);background:var(--checkbox-background-checked)}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{opacity:1}:host(.checkbox-disabled){pointer-events:none}:host{--border-radius:calc(var(--size) * .125);--border-width:2px;--border-style:solid;--border-color:rgb(var(--ion-text-color-rgb, 0, 0, 0), 0.6);--checkmark-width:3;--checkbox-background:var(--ion-item-background, var(--ion-background-color, #fff));--transition:background 180ms cubic-bezier(0.4, 0, 0.2, 1);--size:18px}.checkbox-icon path{stroke-dasharray:30;stroke-dashoffset:30}:host(.checkbox-checked) .checkbox-icon path,:host(.checkbox-indeterminate) .checkbox-icon path{stroke-dashoffset:0;-webkit-transition:stroke-dashoffset 90ms linear 90ms;transition:stroke-dashoffset 90ms linear 90ms}:host(.checkbox-disabled) .label-text-wrapper{opacity:0.38}:host(.checkbox-disabled) .native-wrapper{opacity:0.63}";
8445
8441
  var IonCheckboxMdStyle0 = checkboxMdCss;
8446
8442
 
8447
8443
  /**
@@ -8452,6 +8448,9 @@ var IonCheckboxMdStyle0 = checkboxMdCss;
8452
8448
  * @part container - The container for the checkbox mark.
8453
8449
  * @part label - The label text describing the checkbox.
8454
8450
  * @part mark - The checkmark used to indicate the checked state.
8451
+ * @part supporting-text - Supporting text displayed beneath the checkbox label.
8452
+ * @part helper-text - Supporting text displayed beneath the checkbox label when the checkbox is valid.
8453
+ * @part error-text - Supporting text displayed beneath the checkbox label when the checkbox is invalid and touched.
8455
8454
  */
8456
8455
  class Checkbox {
8457
8456
  constructor(hostRef) {
@@ -8460,6 +8459,8 @@ class Checkbox {
8460
8459
  this.ionFocus = createEvent(this, "ionFocus", 7);
8461
8460
  this.ionBlur = createEvent(this, "ionBlur", 7);
8462
8461
  this.inputId = `ion-cb-${checkboxIds++}`;
8462
+ this.helperTextId = `${this.inputId}-helper-text`;
8463
+ this.errorTextId = `${this.inputId}-error-text`;
8463
8464
  this.inheritedAttributes = {};
8464
8465
  /**
8465
8466
  * Sets the checked property and emits
@@ -8497,10 +8498,13 @@ class Checkbox {
8497
8498
  this.checked = false;
8498
8499
  this.indeterminate = false;
8499
8500
  this.disabled = false;
8501
+ this.errorText = undefined;
8502
+ this.helperText = undefined;
8500
8503
  this.value = 'on';
8501
8504
  this.labelPlacement = 'start';
8502
8505
  this.justify = undefined;
8503
8506
  this.alignment = undefined;
8507
+ this.required = false;
8504
8508
  }
8505
8509
  componentWillLoad() {
8506
8510
  this.inheritedAttributes = Object.assign({}, inheritAriaAttributes(this.el));
@@ -8511,12 +8515,38 @@ class Checkbox {
8511
8515
  this.focusEl.focus();
8512
8516
  }
8513
8517
  }
8518
+ getHintTextID() {
8519
+ const { el, helperText, errorText, helperTextId, errorTextId } = this;
8520
+ if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
8521
+ return errorTextId;
8522
+ }
8523
+ if (helperText) {
8524
+ return helperTextId;
8525
+ }
8526
+ return undefined;
8527
+ }
8528
+ /**
8529
+ * Responsible for rendering helper text and error text.
8530
+ * This element should only be rendered if hint text is set.
8531
+ */
8532
+ renderHintText() {
8533
+ const { helperText, errorText, helperTextId, errorTextId } = this;
8534
+ /**
8535
+ * undefined and empty string values should
8536
+ * be treated as not having helper/error text.
8537
+ */
8538
+ const hasHintText = !!helperText || !!errorText;
8539
+ if (!hasHintText) {
8540
+ return;
8541
+ }
8542
+ return (hAsync("div", { class: "checkbox-bottom" }, hAsync("div", { id: helperTextId, class: "helper-text", part: "supporting-text helper-text" }, helperText), hAsync("div", { id: errorTextId, class: "error-text", part: "supporting-text error-text" }, errorText)));
8543
+ }
8514
8544
  render() {
8515
- const { color, checked, disabled, el, getSVGPath, indeterminate, inheritedAttributes, inputId, justify, labelPlacement, name, value, alignment, } = this;
8545
+ const { color, checked, disabled, el, getSVGPath, indeterminate, inheritedAttributes, inputId, justify, labelPlacement, name, value, alignment, required, } = this;
8516
8546
  const mode = getIonMode$1(this);
8517
8547
  const path = getSVGPath(mode, indeterminate);
8518
8548
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
8519
- return (hAsync(Host, { key: '6dc787e1100521d08c4900104e1a3e2f594e919f', "aria-checked": indeterminate ? 'mixed' : `${checked}`, class: createColorClasses$1(color, {
8549
+ return (hAsync(Host, { key: '7ac31df89b07c781ddcd30a6a8c109494d0c500a', "aria-checked": indeterminate ? 'mixed' : `${checked}`, "aria-describedby": this.getHintTextID(), "aria-invalid": this.getHintTextID() === this.errorTextId, class: createColorClasses$1(color, {
8520
8550
  [mode]: true,
8521
8551
  'in-item': hostContext('ion-item', el),
8522
8552
  'checkbox-checked': checked,
@@ -8526,10 +8556,10 @@ class Checkbox {
8526
8556
  [`checkbox-justify-${justify}`]: justify !== undefined,
8527
8557
  [`checkbox-alignment-${alignment}`]: alignment !== undefined,
8528
8558
  [`checkbox-label-placement-${labelPlacement}`]: true,
8529
- }), 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: {
8559
+ }), onClick: this.onClick }, hAsync("label", { key: '674e923fe1ec83a33c31d67b0d414d61ba8f9e4b', class: "checkbox-wrapper" }, hAsync("input", Object.assign({ key: 'c4866e392fbdf3b76edcd1507cb67f40a213a4e7', 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: '79cb96e5963b9331a760438ec8cc9e456215de91', class: {
8530
8560
  'label-text-wrapper': true,
8531
8561
  'label-text-wrapper-hidden': el.textContent === '',
8532
- }, 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)))));
8562
+ }, part: "label" }, hAsync("slot", { key: '896cb26292c9a4a6c105afb39611472b93bf5e90' }), this.renderHintText()), hAsync("div", { key: '52cd22e79fd5db30b45d7b092aa5af3944392336', class: "native-wrapper" }, hAsync("svg", { key: '18d862ab7cc32055eaf200eea560ff1b2b6cbde0', class: "checkbox-icon", viewBox: "0 0 24 24", part: "container" }, path)))));
8533
8563
  }
8534
8564
  getSVGPath(mode, indeterminate) {
8535
8565
  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" }));
@@ -8552,10 +8582,13 @@ class Checkbox {
8552
8582
  "checked": [1028],
8553
8583
  "indeterminate": [1028],
8554
8584
  "disabled": [4],
8585
+ "errorText": [1, "error-text"],
8586
+ "helperText": [1, "helper-text"],
8555
8587
  "value": [8],
8556
8588
  "labelPlacement": [1, "label-placement"],
8557
8589
  "justify": [1],
8558
8590
  "alignment": [1],
8591
+ "required": [4],
8559
8592
  "setFocus": [64]
8560
8593
  },
8561
8594
  "$listeners$": undefined,
@@ -19031,7 +19064,7 @@ const computeDuration = (remaining, velocity) => {
19031
19064
  };
19032
19065
 
19033
19066
  const createSheetEnterAnimation = (opts) => {
19034
- const { currentBreakpoint, backdropBreakpoint } = opts;
19067
+ const { currentBreakpoint, backdropBreakpoint, expandToScroll } = opts;
19035
19068
  /**
19036
19069
  * If the backdropBreakpoint is undefined, then the backdrop
19037
19070
  * should always fade in. If the backdropBreakpoint came before the
@@ -19051,7 +19084,16 @@ const createSheetEnterAnimation = (opts) => {
19051
19084
  { offset: 0, opacity: 1, transform: 'translateY(100%)' },
19052
19085
  { offset: 1, opacity: 1, transform: `translateY(${100 - currentBreakpoint * 100}%)` },
19053
19086
  ]);
19054
- return { wrapperAnimation, backdropAnimation };
19087
+ /**
19088
+ * This allows the content to be scrollable at any breakpoint.
19089
+ */
19090
+ const contentAnimation = !expandToScroll
19091
+ ? createAnimation('contentAnimation').keyframes([
19092
+ { offset: 0, opacity: 1, maxHeight: `${(1 - currentBreakpoint) * 100}%` },
19093
+ { offset: 1, opacity: 1, maxHeight: `${currentBreakpoint * 100}%` },
19094
+ ])
19095
+ : undefined;
19096
+ return { wrapperAnimation, backdropAnimation, contentAnimation };
19055
19097
  };
19056
19098
  const createSheetLeaveAnimation = (opts) => {
19057
19099
  const { currentBreakpoint, backdropBreakpoint } = opts;
@@ -19086,22 +19128,68 @@ const createEnterAnimation$1 = () => {
19086
19128
  })
19087
19129
  .afterClearStyles(['pointer-events']);
19088
19130
  const wrapperAnimation = createAnimation().fromTo('transform', 'translateY(100vh)', 'translateY(0vh)');
19089
- return { backdropAnimation, wrapperAnimation };
19131
+ return { backdropAnimation, wrapperAnimation, contentAnimation: undefined };
19090
19132
  };
19091
19133
  /**
19092
19134
  * iOS Modal Enter Animation for the Card presentation style
19093
19135
  */
19094
19136
  const iosEnterAnimation$3 = (baseEl, opts) => {
19095
- const { presentingEl, currentBreakpoint } = opts;
19137
+ const { presentingEl, currentBreakpoint, expandToScroll } = opts;
19096
19138
  const root = getElementRoot(baseEl);
19097
- const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation$1();
19139
+ const { wrapperAnimation, backdropAnimation, contentAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation$1();
19098
19140
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
19099
19141
  wrapperAnimation.addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow')).beforeStyles({ opacity: 1 });
19142
+ // The content animation is only added if scrolling is enabled for
19143
+ // all the breakpoints.
19144
+ !expandToScroll && (contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.addElement(baseEl.querySelector('.ion-page')));
19100
19145
  const baseAnimation = createAnimation('entering-base')
19101
19146
  .addElement(baseEl)
19102
19147
  .easing('cubic-bezier(0.32,0.72,0,1)')
19103
19148
  .duration(500)
19104
- .addAnimation(wrapperAnimation);
19149
+ .addAnimation([wrapperAnimation])
19150
+ .beforeAddWrite(() => {
19151
+ if (expandToScroll) {
19152
+ // Scroll can only be done when the modal is fully expanded.
19153
+ return;
19154
+ }
19155
+ /**
19156
+ * There are some browsers that causes flickering when
19157
+ * dragging the content when scroll is enabled at every
19158
+ * breakpoint. This is due to the wrapper element being
19159
+ * transformed off the screen and having a snap animation.
19160
+ *
19161
+ * A workaround is to clone the footer element and append
19162
+ * it outside of the wrapper element. This way, the footer
19163
+ * is still visible and the drag can be done without
19164
+ * flickering. The original footer is hidden until the modal
19165
+ * is dismissed. This maintains the animation of the footer
19166
+ * when the modal is dismissed.
19167
+ *
19168
+ * The workaround needs to be done before the animation starts
19169
+ * so there are no flickering issues.
19170
+ */
19171
+ const ionFooter = baseEl.querySelector('ion-footer');
19172
+ /**
19173
+ * This check is needed to prevent more than one footer
19174
+ * from being appended to the shadow root.
19175
+ * Otherwise, iOS and MD enter animations would append
19176
+ * the footer twice.
19177
+ */
19178
+ const ionFooterAlreadyAppended = baseEl.shadowRoot.querySelector('ion-footer');
19179
+ if (ionFooter && !ionFooterAlreadyAppended) {
19180
+ const footerHeight = ionFooter.clientHeight;
19181
+ const clonedFooter = ionFooter.cloneNode(true);
19182
+ baseEl.shadowRoot.appendChild(clonedFooter);
19183
+ ionFooter.style.setProperty('display', 'none');
19184
+ ionFooter.setAttribute('aria-hidden', 'true');
19185
+ // Padding is added to prevent some content from being hidden.
19186
+ const page = baseEl.querySelector('.ion-page');
19187
+ page.style.setProperty('padding-bottom', `${footerHeight}px`);
19188
+ }
19189
+ });
19190
+ if (contentAnimation) {
19191
+ baseAnimation.addAnimation(contentAnimation);
19192
+ }
19105
19193
  if (presentingEl) {
19106
19194
  const isMobile = window.innerWidth < 768;
19107
19195
  const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
@@ -19179,7 +19267,7 @@ const createLeaveAnimation$1 = () => {
19179
19267
  * iOS Modal Leave Animation
19180
19268
  */
19181
19269
  const iosLeaveAnimation$3 = (baseEl, opts, duration = 500) => {
19182
- const { presentingEl, currentBreakpoint } = opts;
19270
+ const { presentingEl, currentBreakpoint, expandToScroll } = opts;
19183
19271
  const root = getElementRoot(baseEl);
19184
19272
  const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation$1();
19185
19273
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
@@ -19188,7 +19276,29 @@ const iosLeaveAnimation$3 = (baseEl, opts, duration = 500) => {
19188
19276
  .addElement(baseEl)
19189
19277
  .easing('cubic-bezier(0.32,0.72,0,1)')
19190
19278
  .duration(duration)
19191
- .addAnimation(wrapperAnimation);
19279
+ .addAnimation(wrapperAnimation)
19280
+ .beforeAddWrite(() => {
19281
+ if (expandToScroll) {
19282
+ // Scroll can only be done when the modal is fully expanded.
19283
+ return;
19284
+ }
19285
+ /**
19286
+ * If expandToScroll is disabled, we need to swap
19287
+ * the visibility to the original, so the footer
19288
+ * dismisses with the modal and doesn't stay
19289
+ * until the modal is removed from the DOM.
19290
+ */
19291
+ const ionFooter = baseEl.querySelector('ion-footer');
19292
+ if (ionFooter) {
19293
+ const clonedFooter = baseEl.shadowRoot.querySelector('ion-footer');
19294
+ ionFooter.style.removeProperty('display');
19295
+ ionFooter.removeAttribute('aria-hidden');
19296
+ clonedFooter.style.setProperty('display', 'none');
19297
+ clonedFooter.setAttribute('aria-hidden', 'true');
19298
+ const page = baseEl.querySelector('.ion-page');
19299
+ page.style.removeProperty('padding-bottom');
19300
+ }
19301
+ });
19192
19302
  if (presentingEl) {
19193
19303
  const isMobile = window.innerWidth < 768;
19194
19304
  const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
@@ -19266,22 +19376,69 @@ const createEnterAnimation = () => {
19266
19376
  { offset: 0, opacity: 0.01, transform: 'translateY(40px)' },
19267
19377
  { offset: 1, opacity: 1, transform: `translateY(0px)` },
19268
19378
  ]);
19269
- return { backdropAnimation, wrapperAnimation };
19379
+ return { backdropAnimation, wrapperAnimation, contentAnimation: undefined };
19270
19380
  };
19271
19381
  /**
19272
19382
  * Md Modal Enter Animation
19273
19383
  */
19274
19384
  const mdEnterAnimation$2 = (baseEl, opts) => {
19275
- const { currentBreakpoint } = opts;
19385
+ const { currentBreakpoint, expandToScroll } = opts;
19276
19386
  const root = getElementRoot(baseEl);
19277
- const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
19387
+ const { wrapperAnimation, backdropAnimation, contentAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
19278
19388
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
19279
19389
  wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
19280
- return createAnimation()
19390
+ // The content animation is only added if scrolling is enabled for
19391
+ // all the breakpoints.
19392
+ expandToScroll && (contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.addElement(baseEl.querySelector('.ion-page')));
19393
+ const baseAnimation = createAnimation()
19281
19394
  .addElement(baseEl)
19282
19395
  .easing('cubic-bezier(0.36,0.66,0.04,1)')
19283
19396
  .duration(280)
19284
- .addAnimation([backdropAnimation, wrapperAnimation]);
19397
+ .addAnimation([backdropAnimation, wrapperAnimation])
19398
+ .beforeAddWrite(() => {
19399
+ if (expandToScroll) {
19400
+ // Scroll can only be done when the modal is fully expanded.
19401
+ return;
19402
+ }
19403
+ /**
19404
+ * There are some browsers that causes flickering when
19405
+ * dragging the content when scroll is enabled at every
19406
+ * breakpoint. This is due to the wrapper element being
19407
+ * transformed off the screen and having a snap animation.
19408
+ *
19409
+ * A workaround is to clone the footer element and append
19410
+ * it outside of the wrapper element. This way, the footer
19411
+ * is still visible and the drag can be done without
19412
+ * flickering. The original footer is hidden until the modal
19413
+ * is dismissed. This maintains the animation of the footer
19414
+ * when the modal is dismissed.
19415
+ *
19416
+ * The workaround needs to be done before the animation starts
19417
+ * so there are no flickering issues.
19418
+ */
19419
+ const ionFooter = baseEl.querySelector('ion-footer');
19420
+ /**
19421
+ * This check is needed to prevent more than one footer
19422
+ * from being appended to the shadow root.
19423
+ * Otherwise, iOS and MD enter animations would append
19424
+ * the footer twice.
19425
+ */
19426
+ const ionFooterAlreadyAppended = baseEl.shadowRoot.querySelector('ion-footer');
19427
+ if (ionFooter && !ionFooterAlreadyAppended) {
19428
+ const footerHeight = ionFooter.clientHeight;
19429
+ const clonedFooter = ionFooter.cloneNode(true);
19430
+ baseEl.shadowRoot.appendChild(clonedFooter);
19431
+ ionFooter.style.setProperty('display', 'none');
19432
+ ionFooter.setAttribute('aria-hidden', 'true');
19433
+ // Padding is added to prevent some content from being hidden.
19434
+ const page = baseEl.querySelector('.ion-page');
19435
+ page.style.setProperty('padding-bottom', `${footerHeight}px`);
19436
+ }
19437
+ });
19438
+ if (contentAnimation) {
19439
+ baseAnimation.addAnimation(contentAnimation);
19440
+ }
19441
+ return baseAnimation;
19285
19442
  };
19286
19443
 
19287
19444
  const createLeaveAnimation = () => {
@@ -19296,18 +19453,41 @@ const createLeaveAnimation = () => {
19296
19453
  * Md Modal Leave Animation
19297
19454
  */
19298
19455
  const mdLeaveAnimation$2 = (baseEl, opts) => {
19299
- const { currentBreakpoint } = opts;
19456
+ const { currentBreakpoint, expandToScroll } = opts;
19300
19457
  const root = getElementRoot(baseEl);
19301
19458
  const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation();
19302
19459
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
19303
19460
  wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
19304
- return createAnimation()
19461
+ const baseAnimation = createAnimation()
19305
19462
  .easing('cubic-bezier(0.47,0,0.745,0.715)')
19306
19463
  .duration(200)
19307
- .addAnimation([backdropAnimation, wrapperAnimation]);
19464
+ .addAnimation([backdropAnimation, wrapperAnimation])
19465
+ .beforeAddWrite(() => {
19466
+ if (expandToScroll) {
19467
+ // Scroll can only be done when the modal is fully expanded.
19468
+ return;
19469
+ }
19470
+ /**
19471
+ * If expandToScroll is disabled, we need to swap
19472
+ * the visibility to the original, so the footer
19473
+ * dismisses with the modal and doesn't stay
19474
+ * until the modal is removed from the DOM.
19475
+ */
19476
+ const ionFooter = baseEl.querySelector('ion-footer');
19477
+ if (ionFooter) {
19478
+ const clonedFooter = baseEl.shadowRoot.querySelector('ion-footer');
19479
+ ionFooter.style.removeProperty('display');
19480
+ ionFooter.removeAttribute('aria-hidden');
19481
+ clonedFooter.style.setProperty('display', 'none');
19482
+ clonedFooter.setAttribute('aria-hidden', 'true');
19483
+ const page = baseEl.querySelector('.ion-page');
19484
+ page.style.removeProperty('padding-bottom');
19485
+ }
19486
+ });
19487
+ return baseAnimation;
19308
19488
  };
19309
19489
 
19310
- const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], getCurrentBreakpoint, onDismiss, onBreakpointChange) => {
19490
+ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], expandToScroll, getCurrentBreakpoint, onDismiss, onBreakpointChange) => {
19311
19491
  // Defaults for the sheet swipe animation
19312
19492
  const defaultBackdrop = [
19313
19493
  { offset: 0, opacity: 'var(--backdrop-opacity)' },
@@ -19324,6 +19504,10 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19324
19504
  { offset: 1, transform: 'translateY(100%)' },
19325
19505
  ],
19326
19506
  BACKDROP_KEYFRAMES: backdropBreakpoint !== 0 ? customBackdrop : defaultBackdrop,
19507
+ CONTENT_KEYFRAMES: [
19508
+ { offset: 0, maxHeight: '100%' },
19509
+ { offset: 1, maxHeight: '0%' },
19510
+ ],
19327
19511
  };
19328
19512
  const contentEl = baseEl.querySelector('ion-content');
19329
19513
  const height = wrapperEl.clientHeight;
@@ -19331,10 +19515,11 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19331
19515
  let offset = 0;
19332
19516
  let canDismissBlocksGesture = false;
19333
19517
  const canDismissMaxStep = 0.95;
19334
- const wrapperAnimation = animation.childAnimations.find((ani) => ani.id === 'wrapperAnimation');
19335
- const backdropAnimation = animation.childAnimations.find((ani) => ani.id === 'backdropAnimation');
19336
19518
  const maxBreakpoint = breakpoints[breakpoints.length - 1];
19337
19519
  const minBreakpoint = breakpoints[0];
19520
+ const wrapperAnimation = animation.childAnimations.find((ani) => ani.id === 'wrapperAnimation');
19521
+ const backdropAnimation = animation.childAnimations.find((ani) => ani.id === 'backdropAnimation');
19522
+ const contentAnimation = animation.childAnimations.find((ani) => ani.id === 'contentAnimation');
19338
19523
  const enableBackdrop = () => {
19339
19524
  baseEl.style.setProperty('pointer-events', 'auto');
19340
19525
  backdropEl.style.setProperty('pointer-events', 'auto');
@@ -19357,6 +19542,31 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19357
19542
  */
19358
19543
  baseEl.classList.add(FOCUS_TRAP_DISABLE_CLASS);
19359
19544
  };
19545
+ /**
19546
+ * Toggles the visible modal footer when `expandToScroll` is disabled.
19547
+ * @param footer The footer to show.
19548
+ */
19549
+ const swapFooterVisibility = (footer) => {
19550
+ const originalFooter = baseEl.querySelector('ion-footer');
19551
+ if (!originalFooter) {
19552
+ return;
19553
+ }
19554
+ const clonedFooter = wrapperEl.nextElementSibling;
19555
+ const footerToHide = footer === 'original' ? clonedFooter : originalFooter;
19556
+ const footerToShow = footer === 'original' ? originalFooter : clonedFooter;
19557
+ footerToShow.style.removeProperty('display');
19558
+ footerToShow.removeAttribute('aria-hidden');
19559
+ const page = baseEl.querySelector('.ion-page');
19560
+ if (footer === 'original') {
19561
+ page.style.removeProperty('padding-bottom');
19562
+ }
19563
+ else {
19564
+ const pagePadding = footerToShow.clientHeight;
19565
+ page.style.setProperty('padding-bottom', `${pagePadding}px`);
19566
+ }
19567
+ footerToHide.style.setProperty('display', 'none');
19568
+ footerToHide.setAttribute('aria-hidden', 'true');
19569
+ };
19360
19570
  /**
19361
19571
  * After the entering animation completes,
19362
19572
  * we need to set the animation to go from
@@ -19368,6 +19578,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19368
19578
  if (wrapperAnimation && backdropAnimation) {
19369
19579
  wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
19370
19580
  backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
19581
+ contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.keyframes([...SheetDefaults.CONTENT_KEYFRAMES]);
19371
19582
  animation.progressStart(true, 1 - currentBreakpoint);
19372
19583
  /**
19373
19584
  * If backdrop is not enabled, then content
@@ -19384,7 +19595,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19384
19595
  disableBackdrop();
19385
19596
  }
19386
19597
  }
19387
- if (contentEl && currentBreakpoint !== maxBreakpoint) {
19598
+ if (contentEl && currentBreakpoint !== maxBreakpoint && expandToScroll) {
19388
19599
  contentEl.scrollY = false;
19389
19600
  }
19390
19601
  const canStart = (detail) => {
@@ -19398,6 +19609,13 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19398
19609
  */
19399
19610
  const contentEl = findClosestIonContent(detail.event.target);
19400
19611
  currentBreakpoint = getCurrentBreakpoint();
19612
+ /**
19613
+ * If we have expandToScroll disabled, we should not allow the swipe gesture to start
19614
+ * if the content is being swiped.
19615
+ */
19616
+ if (!expandToScroll && contentEl) {
19617
+ return false;
19618
+ }
19401
19619
  if (currentBreakpoint === 1 && contentEl) {
19402
19620
  /**
19403
19621
  * The modal should never swipe to close on the content with a refresher.
@@ -19428,6 +19646,15 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19428
19646
  * Remove undefined check
19429
19647
  */
19430
19648
  canDismissBlocksGesture = baseEl.canDismiss !== undefined && baseEl.canDismiss !== true && minBreakpoint === 0;
19649
+ /**
19650
+ * If expandToScroll is disabled, we need to swap
19651
+ * the footer visibility to the original, so if the modal
19652
+ * is dismissed, the footer dismisses with the modal
19653
+ * and doesn't stay on the screen after the modal is gone.
19654
+ */
19655
+ if (!expandToScroll) {
19656
+ swapFooterVisibility('original');
19657
+ }
19431
19658
  /**
19432
19659
  * If we are pulling down, then it is possible we are pulling on the content.
19433
19660
  * We do not want scrolling to happen at the same time as the gesture.
@@ -19543,6 +19770,19 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19543
19770
  opacity: `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(snapToBreakpoint, backdropBreakpoint)})`,
19544
19771
  },
19545
19772
  ]);
19773
+ if (contentAnimation) {
19774
+ /**
19775
+ * The modal content should scroll at any breakpoint when expandToScroll
19776
+ * is disabled. In order to do this, the content needs to be completely
19777
+ * viewable so scrolling can access everything. Otherwise, the default
19778
+ * behavior would show the content off the screen and only allow
19779
+ * scrolling when the sheet is fully expanded.
19780
+ */
19781
+ contentAnimation.keyframes([
19782
+ { offset: 0, maxHeight: `${(1 - breakpointOffset) * 100}%` },
19783
+ { offset: 1, maxHeight: `${snapToBreakpoint * 100}%` },
19784
+ ]);
19785
+ }
19546
19786
  animation.progressStep(0);
19547
19787
  }
19548
19788
  /**
@@ -19550,6 +19790,14 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19550
19790
  * snapping animation completes.
19551
19791
  */
19552
19792
  gesture.enable(false);
19793
+ /**
19794
+ * If expandToScroll is disabled, we need to swap
19795
+ * the footer visibility to the cloned one so the footer
19796
+ * doesn't flicker when the sheet's height is animated.
19797
+ */
19798
+ if (!expandToScroll && shouldRemainOpen) {
19799
+ swapFooterVisibility('cloned');
19800
+ }
19553
19801
  if (shouldPreventDismiss) {
19554
19802
  handleCanDismiss(baseEl, animation);
19555
19803
  }
@@ -19557,13 +19805,13 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19557
19805
  onDismiss();
19558
19806
  }
19559
19807
  /**
19560
- * If the sheet is going to be fully expanded then we should enable
19561
- * scrolling immediately. The sheet modal animation takes ~500ms to finish
19562
- * so if we wait until then there is a visible delay for when scrolling is
19563
- * re-enabled. Native iOS allows for scrolling on the sheet modal as soon
19564
- * as the gesture is released, so we align with that.
19808
+ * Enables scrolling immediately if the sheet is about to fully expand
19809
+ * or if it allows scrolling at any breakpoint. Without this, there would
19810
+ * be a ~500ms delay while the modal animation completes, causing a
19811
+ * noticeable lag. Native iOS allows scrolling as soon as the gesture is
19812
+ * released, so we align with that behavior.
19565
19813
  */
19566
- if (contentEl && snapToBreakpoint === breakpoints[breakpoints.length - 1]) {
19814
+ if (contentEl && (snapToBreakpoint === breakpoints[breakpoints.length - 1] || !expandToScroll)) {
19567
19815
  contentEl.scrollY = true;
19568
19816
  }
19569
19817
  return new Promise((resolve) => {
@@ -19581,6 +19829,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19581
19829
  raf(() => {
19582
19830
  wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
19583
19831
  backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
19832
+ contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.keyframes([...SheetDefaults.CONTENT_KEYFRAMES]);
19584
19833
  animation.progressStart(true, 1 - snapToBreakpoint);
19585
19834
  currentBreakpoint = snapToBreakpoint;
19586
19835
  onBreakpointChange(currentBreakpoint);
@@ -19633,10 +19882,10 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19633
19882
  };
19634
19883
  };
19635
19884
 
19636
- 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}";
19885
+ 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}";
19637
19886
  var IonModalIosStyle0 = modalIosCss;
19638
19887
 
19639
- 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}";
19888
+ 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}";
19640
19889
  var IonModalMdStyle0 = modalMdCss;
19641
19890
 
19642
19891
  // TODO(FW-2832): types
@@ -19715,6 +19964,7 @@ class Modal {
19715
19964
  this.enterAnimation = undefined;
19716
19965
  this.leaveAnimation = undefined;
19717
19966
  this.breakpoints = undefined;
19967
+ this.expandToScroll = true;
19718
19968
  this.initialBreakpoint = undefined;
19719
19969
  this.backdropBreakpoint = 0;
19720
19970
  this.handle = undefined;
@@ -19930,6 +20180,7 @@ class Modal {
19930
20180
  presentingEl: presentingElement,
19931
20181
  currentBreakpoint: this.initialBreakpoint,
19932
20182
  backdropBreakpoint: this.backdropBreakpoint,
20183
+ expandToScroll: this.expandToScroll,
19933
20184
  });
19934
20185
  /* tslint:disable-next-line */
19935
20186
  if (typeof window !== 'undefined') {
@@ -19980,7 +20231,10 @@ class Modal {
19980
20231
  // should be in the DOM and referenced by now, except
19981
20232
  // for the presenting el
19982
20233
  const animationBuilder = this.leaveAnimation || config.get('modalLeave', iosLeaveAnimation$3);
19983
- const ani = (this.animation = animationBuilder(el, { presentingEl: this.presentingElement }));
20234
+ const ani = (this.animation = animationBuilder(el, {
20235
+ presentingEl: this.presentingElement,
20236
+ expandToScroll: this.expandToScroll,
20237
+ }));
19984
20238
  const contentEl = findIonContent(el);
19985
20239
  if (!contentEl) {
19986
20240
  printIonContentErrorMsg(el);
@@ -20025,9 +20279,10 @@ class Modal {
20025
20279
  presentingEl: this.presentingElement,
20026
20280
  currentBreakpoint: initialBreakpoint,
20027
20281
  backdropBreakpoint,
20282
+ expandToScroll: this.expandToScroll,
20028
20283
  }));
20029
20284
  ani.progressStart(true, 1);
20030
- 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) => {
20285
+ 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) => {
20031
20286
  if (this.currentBreakpoint !== breakpoint) {
20032
20287
  this.currentBreakpoint = breakpoint;
20033
20288
  this.ionBreakpointDidChange.emit({ breakpoint });
@@ -20105,6 +20360,7 @@ class Modal {
20105
20360
  presentingEl: presentingElement,
20106
20361
  currentBreakpoint: (_a = this.currentBreakpoint) !== null && _a !== void 0 ? _a : this.initialBreakpoint,
20107
20362
  backdropBreakpoint: this.backdropBreakpoint,
20363
+ expandToScroll: this.expandToScroll,
20108
20364
  });
20109
20365
  if (dismissed) {
20110
20366
  const { delegate } = this.getDelegate();
@@ -20190,23 +20446,23 @@ class Modal {
20190
20446
  return true;
20191
20447
  }
20192
20448
  render() {
20193
- const { handle, isSheetModal, presentingElement, htmlAttributes, handleBehavior, inheritedAttributes, focusTrap } = this;
20449
+ const { handle, isSheetModal, presentingElement, htmlAttributes, handleBehavior, inheritedAttributes, focusTrap, expandToScroll, } = this;
20194
20450
  const showHandle = handle !== false && isSheetModal;
20195
20451
  const mode = getIonMode$1(this);
20196
20452
  const isCardModal = presentingElement !== undefined && mode === 'ios';
20197
20453
  const isHandleCycle = handleBehavior === 'cycle';
20198
- return (hAsync(Host, Object.assign({ key: 'b4da5111fe4719fa450c39b2d4bd884a302a7924', "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
20454
+ return (hAsync(Host, Object.assign({ key: 'ff15df63e72caaeb0a4ad68e9eedeaaa7d3f3bde', "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
20199
20455
  zIndex: `${20000 + this.overlayIndex}`,
20200
- }, 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',
20456
+ }, 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',
20201
20457
  /*
20202
20458
  role and aria-modal must be used on the
20203
20459
  same element. They must also be set inside the
20204
20460
  shadow DOM otherwise ion-button will not be highlighted
20205
20461
  when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
20206
20462
  */
20207
- 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",
20463
+ 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",
20208
20464
  // Prevents the handle from receiving keyboard focus when it does not cycle
20209
- 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' }))));
20465
+ 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' }))));
20210
20466
  }
20211
20467
  get el() { return getElement(this); }
20212
20468
  static get watchers() { return {
@@ -20228,6 +20484,7 @@ class Modal {
20228
20484
  "enterAnimation": [16],
20229
20485
  "leaveAnimation": [16],
20230
20486
  "breakpoints": [16],
20487
+ "expandToScroll": [4, "expand-to-scroll"],
20231
20488
  "initialBreakpoint": [2, "initial-breakpoint"],
20232
20489
  "backdropBreakpoint": [2, "backdrop-breakpoint"],
20233
20490
  "handle": [4],
@@ -29328,35 +29585,7 @@ class SegmentButton {
29328
29585
  valueChanged() {
29329
29586
  this.updateState();
29330
29587
  }
29331
- waitForSegmentContent(ionSegment, contentId) {
29332
- return new Promise((resolve, reject) => {
29333
- let timeoutId = undefined;
29334
- let animationFrameId;
29335
- const check = () => {
29336
- if (!ionSegment) {
29337
- reject(new Error(`Segment not found when looking for Segment Content`));
29338
- return;
29339
- }
29340
- const segmentView = getNextSiblingOfType(ionSegment); // Skip the text nodes
29341
- const segmentContent = segmentView === null || segmentView === void 0 ? void 0 : segmentView.querySelector(`ion-segment-content[id="${contentId}"]`);
29342
- if (segmentContent && timeoutId) {
29343
- clearTimeout(timeoutId); // Clear the timeout if the segmentContent is found
29344
- cancelAnimationFrame(animationFrameId);
29345
- resolve(segmentContent);
29346
- }
29347
- else {
29348
- animationFrameId = requestAnimationFrame(check); // Keep checking on the next animation frame
29349
- }
29350
- };
29351
- check();
29352
- // Set a timeout to reject the promise
29353
- timeoutId = setTimeout(() => {
29354
- cancelAnimationFrame(animationFrameId);
29355
- reject(new Error(`Unable to find Segment Content with id="${contentId} within 1000 ms`));
29356
- }, 1000);
29357
- });
29358
- }
29359
- async connectedCallback() {
29588
+ connectedCallback() {
29360
29589
  const segmentEl = (this.segmentEl = this.el.closest('ion-segment'));
29361
29590
  if (segmentEl) {
29362
29591
  this.updateState();
@@ -29366,14 +29595,11 @@ class SegmentButton {
29366
29595
  // Return if there is no contentId defined
29367
29596
  if (!this.contentId)
29368
29597
  return;
29369
- let segmentContent;
29370
- try {
29371
- // Attempt to find the Segment Content by its contentId
29372
- segmentContent = await this.waitForSegmentContent(segmentEl, this.contentId);
29373
- }
29374
- catch (error) {
29375
- // If no associated Segment Content exists, log an error and return
29376
- console.error('Segment Button: ', error.message);
29598
+ // Attempt to find the Segment Content by its contentId
29599
+ const segmentContent = document.getElementById(this.contentId);
29600
+ // If no associated Segment Content exists, log an error and return
29601
+ if (!segmentContent) {
29602
+ console.error(`Segment Button: Unable to find Segment Content with id="${this.contentId}".`);
29377
29603
  return;
29378
29604
  }
29379
29605
  // Ensure the found element is a valid ION-SEGMENT-CONTENT
@@ -29419,7 +29645,7 @@ class SegmentButton {
29419
29645
  const { checked, type, disabled, hasIcon, hasLabel, layout, segmentEl } = this;
29420
29646
  const mode = getIonMode$1(this);
29421
29647
  const hasSegmentColor = () => (segmentEl === null || segmentEl === void 0 ? void 0 : segmentEl.color) !== undefined;
29422
- return (hAsync(Host, { key: 'f9da656c8eccb80e4ef30e3fa977f2dbbefbc988', class: {
29648
+ return (hAsync(Host, { key: 'd50a5d5e2f6206e8523598f258d8217d2903f69b', class: {
29423
29649
  [mode]: true,
29424
29650
  'in-toolbar': hostContext('ion-toolbar', this.el),
29425
29651
  'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
@@ -29435,7 +29661,7 @@ class SegmentButton {
29435
29661
  'ion-activatable': true,
29436
29662
  'ion-activatable-instant': true,
29437
29663
  'ion-focusable': true,
29438
- } }, hAsync("button", Object.assign({ key: '00dbcdbd81cd74abdd39803f6840a6e477cc7b0c', "aria-selected": checked ? 'true' : 'false', role: "tab", ref: (el) => (this.nativeEl = el), type: type, class: "button-native", part: "native", disabled: disabled }, this.inheritedAttributes), hAsync("span", { key: '5200c082a9c4788010c4fc33fe75e2b2ad28364a', class: "button-inner" }, hAsync("slot", { key: 'cf3fce2b5d22436b84cd4367a5885df7d6a2715f' })), mode === 'md' && hAsync("ion-ripple-effect", { key: 'f1a2816465f4c2c06644be07315bff2da77e2342' })), hAsync("div", { key: 'aaf31c0ed39641fca698ee98d0773131f4eea6bd', part: "indicator", class: "segment-button-indicator segment-button-indicator-animated" }, hAsync("div", { key: 'fc556651361b7ac305aaedd25ea4afe3173abd20', part: "indicator-background", class: "segment-button-indicator-background" }))));
29664
+ } }, hAsync("button", Object.assign({ key: 'b4f6f145286ba8ab79669e11035b906daa85ae7e', "aria-selected": checked ? 'true' : 'false', role: "tab", ref: (el) => (this.nativeEl = el), type: type, class: "button-native", part: "native", disabled: disabled }, this.inheritedAttributes), hAsync("span", { key: '67965996c9ffe70553875e00d3da0ae5b2b1d814', class: "button-inner" }, hAsync("slot", { key: '5087988fe45a8fdf388ec44c395d0b745b207806' })), mode === 'md' && hAsync("ion-ripple-effect", { key: 'b24858de0750bbc769b3183fac0077dfe817ba27' })), hAsync("div", { key: '97b4359432acd1c9da0816360cd1df9472e183f7', part: "indicator", class: "segment-button-indicator segment-button-indicator-animated" }, hAsync("div", { key: '0561738ea15b0986f4ed3d8276d5e6f2d13f7e51', part: "indicator-background", class: "segment-button-indicator-background" }))));
29439
29665
  }
29440
29666
  get el() { return getElement(this); }
29441
29667
  static get watchers() { return {
@@ -29702,6 +29928,7 @@ class Select {
29702
29928
  this.expandedIcon = undefined;
29703
29929
  this.shape = undefined;
29704
29930
  this.value = undefined;
29931
+ this.required = false;
29705
29932
  }
29706
29933
  styleChanged() {
29707
29934
  this.emitStyle();
@@ -29757,8 +29984,15 @@ class Select {
29757
29984
  }
29758
29985
  this.isExpanded = true;
29759
29986
  const overlay = (this.overlay = await this.createOverlay(event));
29760
- // Add logic to scroll selected item into view before presenting
29761
- const scrollSelectedIntoView = () => {
29987
+ overlay.onDidDismiss().then(() => {
29988
+ this.overlay = undefined;
29989
+ this.isExpanded = false;
29990
+ this.ionDismiss.emit();
29991
+ this.setFocus();
29992
+ });
29993
+ await overlay.present();
29994
+ // focus selected option for popovers and modals
29995
+ if (this.interface === 'popover' || this.interface === 'modal') {
29762
29996
  const indexOfSelected = this.childOpts.findIndex((o) => o.value === this.value);
29763
29997
  if (indexOfSelected > -1) {
29764
29998
  const selectedItem = overlay.querySelector(`.select-interface-option:nth-child(${indexOfSelected + 1})`);
@@ -29776,7 +30010,6 @@ class Select {
29776
30010
  */
29777
30011
  const interactiveEl = selectedItem.querySelector('ion-radio, ion-checkbox');
29778
30012
  if (interactiveEl) {
29779
- selectedItem.scrollIntoView({ block: 'nearest' });
29780
30013
  // Needs to be called before `focusVisibleElement` to prevent issue with focus event bubbling
29781
30014
  // and removing `ion-focused` style
29782
30015
  interactiveEl.setFocus();
@@ -29800,40 +30033,7 @@ class Select {
29800
30033
  focusVisibleElement(firstEnabledOption.closest('ion-item'));
29801
30034
  }
29802
30035
  }
29803
- };
29804
- // For modals and popovers, we can scroll before they're visible
29805
- if (this.interface === 'modal') {
29806
- overlay.addEventListener('ionModalWillPresent', scrollSelectedIntoView, { once: true });
29807
- }
29808
- else if (this.interface === 'popover') {
29809
- overlay.addEventListener('ionPopoverWillPresent', scrollSelectedIntoView, { once: true });
29810
- }
29811
- else {
29812
- /**
29813
- * For alerts and action sheets, we need to wait a frame after willPresent
29814
- * because these overlays don't have their content in the DOM immediately
29815
- * when willPresent fires. By waiting a frame, we ensure the content is
29816
- * rendered and can be properly scrolled into view.
29817
- */
29818
- const scrollAfterRender = () => {
29819
- requestAnimationFrame(() => {
29820
- scrollSelectedIntoView();
29821
- });
29822
- };
29823
- if (this.interface === 'alert') {
29824
- overlay.addEventListener('ionAlertWillPresent', scrollAfterRender, { once: true });
29825
- }
29826
- else if (this.interface === 'action-sheet') {
29827
- overlay.addEventListener('ionActionSheetWillPresent', scrollAfterRender, { once: true });
29828
- }
29829
30036
  }
29830
- overlay.onDidDismiss().then(() => {
29831
- this.overlay = undefined;
29832
- this.isExpanded = false;
29833
- this.ionDismiss.emit();
29834
- this.setFocus();
29835
- });
29836
- await overlay.present();
29837
30037
  return overlay;
29838
30038
  }
29839
30039
  createOverlay(ev) {
@@ -30213,8 +30413,8 @@ class Select {
30213
30413
  return renderedLabel;
30214
30414
  }
30215
30415
  renderListbox() {
30216
- const { disabled, inputId, isExpanded } = this;
30217
- 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) }));
30416
+ const { disabled, inputId, isExpanded, required } = this;
30417
+ 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) }));
30218
30418
  }
30219
30419
  render() {
30220
30420
  const { disabled, el, isExpanded, expandedIcon, labelPlacement, justify, placeholder, fill, shape, name, value } = this;
@@ -30245,7 +30445,7 @@ class Select {
30245
30445
  * TODO(FW-5592): Remove hasStartEndSlots condition
30246
30446
  */
30247
30447
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || isExpanded || hasStartEndSlots));
30248
- return (hAsync(Host, { key: 'b2dca9ae25d88e4d9fdb55003041a66be5668fcf', onClick: this.onClick, class: createColorClasses$1(this.color, {
30448
+ return (hAsync(Host, { key: '491cf1b0e3aa31e7c9cfad3e87d83eb54272312a', onClick: this.onClick, class: createColorClasses$1(this.color, {
30249
30449
  [mode]: true,
30250
30450
  'in-item': inItem,
30251
30451
  'in-item-color': hostContext('ion-item.ion-color', el),
@@ -30261,7 +30461,7 @@ class Select {
30261
30461
  [`select-justify-${justify}`]: justifyEnabled,
30262
30462
  [`select-shape-${shape}`]: shape !== undefined,
30263
30463
  [`select-label-placement-${labelPlacement}`]: true,
30264
- }) }, hAsync("label", { key: 'c22fe9aee8cd448223497ef143e89529fcef8af6', class: "select-wrapper", id: "select-label" }, this.renderLabelContainer(), hAsync("div", { key: '601972df4579f4fa6a9c2c12865593e807decb72', class: "select-wrapper-inner" }, hAsync("slot", { key: '5f7b1261862f74b978b26f026533e3fd1cc666ba', name: "start" }), hAsync("div", { key: '39616da89f4b4b78432f6da85116a7de2ca589e7', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), hAsync("slot", { key: '1d7b3601b73af7c05b3627cfc8e5147ea379bb03', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && hAsync("div", { key: 'b0344f0ac15003e22fee66d3d7ed03a07da7e8b7', class: "select-highlight" }))));
30464
+ }) }, 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" }))));
30265
30465
  }
30266
30466
  get el() { return getElement(this); }
30267
30467
  static get watchers() { return {
@@ -30297,6 +30497,7 @@ class Select {
30297
30497
  "expandedIcon": [1, "expanded-icon"],
30298
30498
  "shape": [1],
30299
30499
  "value": [1032],
30500
+ "required": [4],
30300
30501
  "isExpanded": [32],
30301
30502
  "open": [64]
30302
30503
  },
@@ -32693,6 +32894,7 @@ class Toggle {
32693
32894
  this.labelPlacement = 'start';
32694
32895
  this.justify = undefined;
32695
32896
  this.alignment = undefined;
32897
+ this.required = false;
32696
32898
  }
32697
32899
  disabledChanged() {
32698
32900
  if (this.gesture) {
@@ -32774,12 +32976,12 @@ class Toggle {
32774
32976
  return this.el.textContent !== '';
32775
32977
  }
32776
32978
  render() {
32777
- const { activated, color, checked, disabled, el, justify, labelPlacement, inputId, name, alignment } = this;
32979
+ const { activated, color, checked, disabled, el, justify, labelPlacement, inputId, name, alignment, required } = this;
32778
32980
  const mode = getIonMode$1(this);
32779
32981
  const value = this.getValue();
32780
32982
  const rtl = isRTL$1(el) ? 'rtl' : 'ltr';
32781
32983
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
32782
- return (hAsync(Host, { key: 'f52195ec3bc14c024647cb41319c32a4cd330e19', onClick: this.onClick, class: createColorClasses$1(color, {
32984
+ return (hAsync(Host, { key: 'ed75573caa6e37011f1453dd7f723fb9bd8a3656', onClick: this.onClick, class: createColorClasses$1(color, {
32783
32985
  [mode]: true,
32784
32986
  'in-item': hostContext('ion-item', el),
32785
32987
  'toggle-activated': activated,
@@ -32789,10 +32991,10 @@ class Toggle {
32789
32991
  [`toggle-alignment-${alignment}`]: alignment !== undefined,
32790
32992
  [`toggle-label-placement-${labelPlacement}`]: true,
32791
32993
  [`toggle-${rtl}`]: true,
32792
- }) }, 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: {
32994
+ }) }, 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: {
32793
32995
  'label-text-wrapper': true,
32794
32996
  'label-text-wrapper-hidden': !this.hasLabel,
32795
- }, part: "label" }, hAsync("slot", { key: '80a6672e2e792c15011a9496dcd75363cdba31c6' })), hAsync("div", { key: '2b2b318b38ab27b194c0dab4cecd77d9d780f2ca', class: "native-wrapper" }, this.renderToggleControl()))));
32997
+ }, part: "label" }, hAsync("slot", { key: '9495a4a39889822ee68e0d89dc5a2f863d1feb3c' })), hAsync("div", { key: '55f1eb08c4b705e94fbcf02220bbe1d292f06155', class: "native-wrapper" }, this.renderToggleControl()))));
32796
32998
  }
32797
32999
  get el() { return getElement(this); }
32798
33000
  static get watchers() { return {
@@ -32815,6 +33017,7 @@ class Toggle {
32815
33017
  "labelPlacement": [1, "label-placement"],
32816
33018
  "justify": [1],
32817
33019
  "alignment": [1],
33020
+ "required": [4],
32818
33021
  "activated": [32]
32819
33022
  },
32820
33023
  "$listeners$": undefined,
@@ -32846,6 +33049,10 @@ var IonToolbarMdStyle0 = toolbarMdCss;
32846
33049
  * @slot secondary - Content is placed to the left of the toolbar text in `ios` mode, and directly to the right in `md` mode.
32847
33050
  * @slot primary - Content is placed to the right of the toolbar text in `ios` mode, and to the far right in `md` mode.
32848
33051
  * @slot end - Content is placed to the right of the toolbar text in LTR, and to the left in RTL.
33052
+ *
33053
+ * @part background - The background of the toolbar, covering the entire area behind the toolbar content.
33054
+ * @part container - The container that wraps all toolbar content, including the default slot and named slot content.
33055
+ * @part content - The container for the default slot, wrapping content provided without a named slot.
32849
33056
  */
32850
33057
  class Toolbar {
32851
33058
  constructor(hostRef) {
@@ -32896,10 +33103,10 @@ class Toolbar {
32896
33103
  this.childrenStyles.forEach((value) => {
32897
33104
  Object.assign(childStyles, value);
32898
33105
  });
32899
- return (hAsync(Host, { key: '462538a5ecd01baf3cde116c9f029aeda26c81be', class: Object.assign(Object.assign({}, childStyles), createColorClasses$1(this.color, {
33106
+ return (hAsync(Host, { key: '4fdc9ae82a93237cc28ceb95b0ebd8069b62839d', class: Object.assign(Object.assign({}, childStyles), createColorClasses$1(this.color, {
32900
33107
  [mode]: true,
32901
33108
  'in-toolbar': hostContext('ion-toolbar', this.el),
32902
- })) }, 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" }))));
33109
+ })) }, 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" }))));
32903
33110
  }
32904
33111
  get el() { return getElement(this); }
32905
33112
  static get style() { return {