@ionic/core 8.4.4-dev.11741032668.18899f9b → 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 (436) 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 +6 -4
  7. package/components/ion-toggle.js +6 -4
  8. package/components/ionic-global.js +1 -2
  9. package/components/modal.js +259 -35
  10. package/components/toolbar.js +2 -2
  11. package/css/core.css.map +1 -1
  12. package/css/ionic.bundle.css.map +1 -1
  13. package/dist/cjs/{app-globals-4283fe37.js → app-globals-21afee77.js} +1 -1
  14. package/dist/cjs/{data-21dc0f81.js → data-108e531d.js} +1 -1
  15. package/dist/cjs/{framework-delegate-05579976.js → framework-delegate-55f5683a.js} +1 -1
  16. package/dist/cjs/{hardware-back-button-f2cbbdce.js → hardware-back-button-9e8a2c4f.js} +1 -1
  17. package/dist/cjs/{helpers-4be3f90d.js → helpers-afaa9001.js} +0 -11
  18. package/dist/cjs/{index-c441c903.js → index-0d762bba.js} +2 -2
  19. package/dist/cjs/{index-5915f9b3.js → index-2a46a047.js} +11 -3
  20. package/dist/cjs/{index-9c6c9e9c.js → index-3652c918.js} +4 -4
  21. package/dist/cjs/{index-ad7a712e.js → index-9509ecad.js} +1 -1
  22. package/dist/cjs/{index-90ec3b6c.js → index-e975c92b.js} +5 -5
  23. package/dist/cjs/index.cjs.js +10 -10
  24. package/dist/cjs/{input-shims-e748a364.js → input-shims-cd05268a.js} +5 -3
  25. package/dist/cjs/{input.utils-74e4ec28.js → input.utils-ffb2f81b.js} +2 -2
  26. package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
  27. package/dist/cjs/ion-action-sheet.cjs.entry.js +6 -6
  28. package/dist/cjs/ion-alert.cjs.entry.js +6 -6
  29. package/dist/cjs/ion-app_8.cjs.entry.js +14 -14
  30. package/dist/cjs/ion-avatar_3.cjs.entry.js +1 -1
  31. package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
  32. package/dist/cjs/ion-backdrop.cjs.entry.js +1 -1
  33. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
  34. package/dist/cjs/ion-button_2.cjs.entry.js +3 -3
  35. package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
  36. package/dist/cjs/ion-checkbox.cjs.entry.js +39 -8
  37. package/dist/cjs/ion-chip.cjs.entry.js +1 -1
  38. package/dist/cjs/ion-col_3.cjs.entry.js +1 -1
  39. package/dist/cjs/ion-datetime-button.cjs.entry.js +4 -4
  40. package/dist/cjs/ion-datetime_3.cjs.entry.js +7 -7
  41. package/dist/cjs/ion-fab_3.cjs.entry.js +2 -2
  42. package/dist/cjs/ion-img.cjs.entry.js +2 -2
  43. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +4 -4
  44. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +2 -2
  45. package/dist/cjs/ion-input.cjs.entry.js +5 -5
  46. package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
  47. package/dist/cjs/ion-item_8.cjs.entry.js +2 -2
  48. package/dist/cjs/ion-loading.cjs.entry.js +6 -6
  49. package/dist/cjs/ion-menu_3.cjs.entry.js +7 -7
  50. package/dist/cjs/ion-modal.cjs.entry.js +266 -43
  51. package/dist/cjs/ion-nav_2.cjs.entry.js +6 -6
  52. package/dist/cjs/ion-picker-column-option.cjs.entry.js +2 -2
  53. package/dist/cjs/ion-picker-column.cjs.entry.js +2 -2
  54. package/dist/cjs/ion-picker.cjs.entry.js +1 -1
  55. package/dist/cjs/ion-popover.cjs.entry.js +7 -7
  56. package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -2
  57. package/dist/cjs/ion-radio_2.cjs.entry.js +2 -2
  58. package/dist/cjs/ion-range.cjs.entry.js +4 -4
  59. package/dist/cjs/ion-refresher_2.cjs.entry.js +4 -4
  60. package/dist/cjs/ion-reorder_2.cjs.entry.js +4 -4
  61. package/dist/cjs/ion-ripple-effect.cjs.entry.js +1 -1
  62. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  63. package/dist/cjs/ion-searchbar.cjs.entry.js +2 -2
  64. package/dist/cjs/ion-segment_2.cjs.entry.js +10 -41
  65. package/dist/cjs/ion-select-modal.cjs.entry.js +6 -6
  66. package/dist/cjs/ion-select_3.cjs.entry.js +12 -11
  67. package/dist/cjs/ion-spinner.cjs.entry.js +1 -1
  68. package/dist/cjs/ion-split-pane.cjs.entry.js +1 -1
  69. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +2 -2
  70. package/dist/cjs/ion-tab_2.cjs.entry.js +2 -2
  71. package/dist/cjs/ion-text.cjs.entry.js +1 -1
  72. package/dist/cjs/ion-textarea.cjs.entry.js +5 -5
  73. package/dist/cjs/ion-toast.cjs.entry.js +6 -6
  74. package/dist/cjs/ion-toggle.cjs.entry.js +7 -6
  75. package/dist/cjs/{ionic-global-96da1b2e.js → ionic-global-d9a8bb5b.js} +1 -2
  76. package/dist/cjs/ionic.cjs.js +3 -3
  77. package/dist/cjs/{ios.transition-2dae3b92.js → ios.transition-0e664e88.js} +4 -4
  78. package/dist/cjs/loader.cjs.js +3 -3
  79. package/dist/cjs/{md.transition-ea3260a7.js → md.transition-2e8aef2c.js} +4 -4
  80. package/dist/cjs/{notch-controller-a0c464d1.js → notch-controller-d69150f5.js} +1 -1
  81. package/dist/cjs/{overlays-3880b5b5.js → overlays-65fdaff6.js} +5 -5
  82. package/dist/cjs/{status-tap-fb807fad.js → status-tap-d74f1429.js} +4 -3
  83. package/dist/cjs/{swipe-back-47a52b83.js → swipe-back-0303a5e4.js} +1 -1
  84. package/dist/collection/components/checkbox/checkbox.ios.css +52 -15
  85. package/dist/collection/components/checkbox/checkbox.js +90 -4
  86. package/dist/collection/components/checkbox/checkbox.md.css +52 -15
  87. package/dist/collection/components/modal/animations/ios.enter.js +50 -4
  88. package/dist/collection/components/modal/animations/ios.leave.js +24 -2
  89. package/dist/collection/components/modal/animations/md.enter.js +52 -5
  90. package/dist/collection/components/modal/animations/md.leave.js +26 -3
  91. package/dist/collection/components/modal/animations/sheet.js +11 -2
  92. package/dist/collection/components/modal/gestures/sheet.js +79 -10
  93. package/dist/collection/components/modal/modal.ios.css +16 -0
  94. package/dist/collection/components/modal/modal.js +32 -7
  95. package/dist/collection/components/modal/modal.md.css +6 -0
  96. package/dist/collection/components/segment-button/segment-button.js +9 -40
  97. package/dist/collection/components/select/select.js +23 -4
  98. package/dist/collection/components/toggle/toggle.js +23 -4
  99. package/dist/collection/components/toolbar/toolbar.js +6 -2
  100. package/dist/collection/utils/helpers.js +0 -10
  101. package/dist/collection/utils/logging/index.js +10 -3
  102. package/dist/collection/utils/platform.js +1 -2
  103. package/dist/collection/utils/test/platform.utils.js +1 -1
  104. package/dist/docs.json +187 -2
  105. package/dist/esm/{app-globals-c10a1137.js → app-globals-5dbb61a5.js} +1 -1
  106. package/dist/esm/{data-ae11fd43.js → data-b3284b5e.js} +1 -1
  107. package/dist/esm/{framework-delegate-f683816e.js → framework-delegate-63d1a679.js} +1 -1
  108. package/dist/esm/{hardware-back-button-44195e92.js → hardware-back-button-06ef3c3e.js} +1 -1
  109. package/dist/esm/{helpers-9b49d7d2.js → helpers-da915de8.js} +1 -11
  110. package/dist/esm/{index-b019fc18.js → index-2f7fde3d.js} +5 -5
  111. package/dist/esm/{index-9b0d46f4.js → index-6ad967f3.js} +11 -3
  112. package/dist/esm/{index-5a0f5fd0.js → index-79b30591.js} +1 -1
  113. package/dist/esm/{index-e1e9a0d3.js → index-cb21eccb.js} +4 -4
  114. package/dist/esm/{index-33f7e3ff.js → index-efb8ecdf.js} +2 -2
  115. package/dist/esm/index.js +10 -10
  116. package/dist/esm/{input-shims-0e65111b.js → input-shims-2fd7c6ef.js} +5 -3
  117. package/dist/esm/{input.utils-1ad8dafc.js → input.utils-961c9f17.js} +2 -2
  118. package/dist/esm/ion-accordion_2.entry.js +3 -3
  119. package/dist/esm/ion-action-sheet.entry.js +6 -6
  120. package/dist/esm/ion-alert.entry.js +6 -6
  121. package/dist/esm/ion-app_8.entry.js +14 -14
  122. package/dist/esm/ion-avatar_3.entry.js +1 -1
  123. package/dist/esm/ion-back-button.entry.js +2 -2
  124. package/dist/esm/ion-backdrop.entry.js +1 -1
  125. package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
  126. package/dist/esm/ion-button_2.entry.js +3 -3
  127. package/dist/esm/ion-card_5.entry.js +2 -2
  128. package/dist/esm/ion-checkbox.entry.js +39 -8
  129. package/dist/esm/ion-chip.entry.js +1 -1
  130. package/dist/esm/ion-col_3.entry.js +1 -1
  131. package/dist/esm/ion-datetime-button.entry.js +4 -4
  132. package/dist/esm/ion-datetime_3.entry.js +7 -7
  133. package/dist/esm/ion-fab_3.entry.js +2 -2
  134. package/dist/esm/ion-img.entry.js +2 -2
  135. package/dist/esm/ion-infinite-scroll_2.entry.js +4 -4
  136. package/dist/esm/ion-input-password-toggle.entry.js +2 -2
  137. package/dist/esm/ion-input.entry.js +5 -5
  138. package/dist/esm/ion-item-option_3.entry.js +4 -4
  139. package/dist/esm/ion-item_8.entry.js +2 -2
  140. package/dist/esm/ion-loading.entry.js +6 -6
  141. package/dist/esm/ion-menu_3.entry.js +7 -7
  142. package/dist/esm/ion-modal.entry.js +266 -43
  143. package/dist/esm/ion-nav_2.entry.js +6 -6
  144. package/dist/esm/ion-picker-column-option.entry.js +2 -2
  145. package/dist/esm/ion-picker-column.entry.js +2 -2
  146. package/dist/esm/ion-picker.entry.js +1 -1
  147. package/dist/esm/ion-popover.entry.js +7 -7
  148. package/dist/esm/ion-progress-bar.entry.js +2 -2
  149. package/dist/esm/ion-radio_2.entry.js +2 -2
  150. package/dist/esm/ion-range.entry.js +4 -4
  151. package/dist/esm/ion-refresher_2.entry.js +4 -4
  152. package/dist/esm/ion-reorder_2.entry.js +4 -4
  153. package/dist/esm/ion-ripple-effect.entry.js +1 -1
  154. package/dist/esm/ion-route_4.entry.js +2 -2
  155. package/dist/esm/ion-searchbar.entry.js +2 -2
  156. package/dist/esm/ion-segment_2.entry.js +10 -41
  157. package/dist/esm/ion-select-modal.entry.js +6 -6
  158. package/dist/esm/ion-select_3.entry.js +12 -11
  159. package/dist/esm/ion-spinner.entry.js +1 -1
  160. package/dist/esm/ion-split-pane.entry.js +1 -1
  161. package/dist/esm/ion-tab-bar_2.entry.js +2 -2
  162. package/dist/esm/ion-tab_2.entry.js +2 -2
  163. package/dist/esm/ion-text.entry.js +1 -1
  164. package/dist/esm/ion-textarea.entry.js +5 -5
  165. package/dist/esm/ion-toast.entry.js +6 -6
  166. package/dist/esm/ion-toggle.entry.js +7 -6
  167. package/dist/esm/{ionic-global-bf78a847.js → ionic-global-c81d82ab.js} +1 -2
  168. package/dist/esm/ionic.js +3 -3
  169. package/dist/esm/{ios.transition-b7103952.js → ios.transition-b1da3753.js} +4 -4
  170. package/dist/esm/loader.js +3 -3
  171. package/dist/esm/{md.transition-e4034e0a.js → md.transition-571b3859.js} +4 -4
  172. package/dist/esm/{notch-controller-3dc61260.js → notch-controller-55b09e11.js} +1 -1
  173. package/dist/esm/{overlays-aea27b63.js → overlays-5deab4de.js} +5 -5
  174. package/dist/esm/{status-tap-163e8128.js → status-tap-79eac0ac.js} +4 -3
  175. package/dist/esm/{swipe-back-23ee7ab1.js → swipe-back-e5394307.js} +1 -1
  176. package/dist/esm-es5/app-globals-5dbb61a5.js +4 -0
  177. package/dist/esm-es5/{data-ae11fd43.js → data-b3284b5e.js} +1 -1
  178. package/dist/esm-es5/{framework-delegate-f683816e.js → framework-delegate-63d1a679.js} +1 -1
  179. package/dist/esm-es5/{hardware-back-button-44195e92.js → hardware-back-button-06ef3c3e.js} +1 -1
  180. package/dist/esm-es5/{helpers-9b49d7d2.js → helpers-da915de8.js} +1 -1
  181. package/dist/esm-es5/{index-b019fc18.js → index-2f7fde3d.js} +1 -1
  182. package/dist/esm-es5/index-6ad967f3.js +4 -0
  183. package/dist/esm-es5/{index-5a0f5fd0.js → index-79b30591.js} +1 -1
  184. package/dist/esm-es5/{index-e1e9a0d3.js → index-cb21eccb.js} +1 -1
  185. package/dist/esm-es5/{index-33f7e3ff.js → index-efb8ecdf.js} +1 -1
  186. package/dist/esm-es5/index.js +1 -1
  187. package/dist/esm-es5/input-shims-2fd7c6ef.js +4 -0
  188. package/dist/esm-es5/{input.utils-1ad8dafc.js → input.utils-961c9f17.js} +1 -1
  189. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  190. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  191. package/dist/esm-es5/ion-alert.entry.js +1 -1
  192. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  193. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  194. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  195. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  196. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  197. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  198. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  199. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  200. package/dist/esm-es5/ion-chip.entry.js +1 -1
  201. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  202. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  203. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  204. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  205. package/dist/esm-es5/ion-img.entry.js +1 -1
  206. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  207. package/dist/esm-es5/ion-input-password-toggle.entry.js +1 -1
  208. package/dist/esm-es5/ion-input.entry.js +1 -1
  209. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  210. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  211. package/dist/esm-es5/ion-loading.entry.js +1 -1
  212. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  213. package/dist/esm-es5/ion-modal.entry.js +1 -1
  214. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  215. package/dist/esm-es5/ion-picker-column-option.entry.js +1 -1
  216. package/dist/esm-es5/ion-picker-column.entry.js +1 -1
  217. package/dist/esm-es5/ion-picker.entry.js +1 -1
  218. package/dist/esm-es5/ion-popover.entry.js +1 -1
  219. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  220. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  221. package/dist/esm-es5/ion-range.entry.js +1 -1
  222. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  223. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  224. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  225. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  226. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  227. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  228. package/dist/esm-es5/ion-select-modal.entry.js +1 -1
  229. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  230. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  231. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  232. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  233. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  234. package/dist/esm-es5/ion-text.entry.js +1 -1
  235. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  236. package/dist/esm-es5/ion-toast.entry.js +1 -1
  237. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  238. package/dist/esm-es5/{ionic-global-bf78a847.js → ionic-global-c81d82ab.js} +1 -1
  239. package/dist/esm-es5/ionic.js +1 -1
  240. package/dist/esm-es5/{ios.transition-b7103952.js → ios.transition-b1da3753.js} +1 -1
  241. package/dist/esm-es5/loader.js +1 -1
  242. package/dist/esm-es5/md.transition-571b3859.js +4 -0
  243. package/dist/esm-es5/{notch-controller-3dc61260.js → notch-controller-55b09e11.js} +1 -1
  244. package/dist/esm-es5/{overlays-aea27b63.js → overlays-5deab4de.js} +1 -1
  245. package/dist/esm-es5/status-tap-79eac0ac.js +4 -0
  246. package/dist/esm-es5/{swipe-back-23ee7ab1.js → swipe-back-e5394307.js} +1 -1
  247. package/dist/html.html-data.json +24 -0
  248. package/dist/ionic/index.esm.js +1 -1
  249. package/dist/ionic/ionic.esm.js +1 -1
  250. package/dist/ionic/ionic.js +1 -1
  251. package/dist/ionic/{p-3c6d2c1e.system.entry.js → p-01186920.system.entry.js} +1 -1
  252. package/dist/ionic/p-0430c2e0.entry.js +4 -0
  253. package/dist/ionic/p-0574e87e.js +4 -0
  254. package/dist/ionic/{p-77b1bb00.system.entry.js → p-05b74e45.system.entry.js} +1 -1
  255. package/dist/ionic/{p-b7d2ba68.entry.js → p-081a4ce4.entry.js} +1 -1
  256. package/dist/ionic/p-0af823e1.js +4 -0
  257. package/dist/ionic/{p-aa63b365.system.js → p-0eb35a7f.system.js} +1 -1
  258. package/dist/ionic/p-1132ffee.entry.js +4 -0
  259. package/dist/ionic/{p-60f1b2fa.entry.js → p-120fb79a.entry.js} +1 -1
  260. package/dist/ionic/{p-98c08d09.entry.js → p-15d18206.entry.js} +1 -1
  261. package/dist/ionic/{p-035c0885.entry.js → p-15e76dd1.entry.js} +1 -1
  262. package/dist/ionic/{p-6b1f082e.entry.js → p-16188af7.entry.js} +1 -1
  263. package/dist/ionic/p-16bfb979.system.entry.js +4 -0
  264. package/dist/ionic/{p-5126cf1e.system.js → p-19ea7bff.system.js} +1 -1
  265. package/dist/ionic/{p-d60342e3.js → p-1a5bc5f7.js} +1 -1
  266. package/dist/ionic/{p-42808996.js → p-1ab13b2b.js} +1 -1
  267. package/dist/ionic/{p-13892787.system.entry.js → p-1e67b266.system.entry.js} +1 -1
  268. package/dist/ionic/{p-e2e19375.system.entry.js → p-2172893e.system.entry.js} +1 -1
  269. package/dist/ionic/{p-ea7c658c.system.entry.js → p-2346ab53.system.entry.js} +2 -2
  270. package/dist/ionic/{p-944d66b5.system.entry.js → p-248318e0.system.entry.js} +1 -1
  271. package/dist/ionic/{p-a873feda.system.entry.js → p-2507278c.system.entry.js} +1 -1
  272. package/dist/ionic/{p-eb599bcb.js → p-28706c6f.js} +1 -1
  273. package/dist/ionic/{p-4eed0eb2.system.entry.js → p-2abae1cc.system.entry.js} +1 -1
  274. package/dist/ionic/{p-a197ff3b.system.entry.js → p-2b838f86.system.entry.js} +1 -1
  275. package/dist/ionic/{p-a3705e10.entry.js → p-2da9c8a7.entry.js} +1 -1
  276. package/dist/ionic/{p-92e4df0c.system.entry.js → p-2e46590d.system.entry.js} +1 -1
  277. package/dist/ionic/{p-e78bff37.system.entry.js → p-302b50bb.system.entry.js} +1 -1
  278. package/dist/ionic/p-322c5fb4.system.js +4 -0
  279. package/dist/ionic/{p-c66604e4.entry.js → p-33a8a71b.entry.js} +1 -1
  280. package/dist/ionic/{p-f687573e.system.js → p-343b6b1d.system.js} +1 -1
  281. package/dist/ionic/{p-2bc73fb5.js → p-34b11c24.js} +1 -1
  282. package/dist/ionic/{p-b3680e2f.system.js → p-3ad285e3.system.js} +1 -1
  283. package/dist/ionic/{p-8911101b.system.js → p-3c8e5c23.system.js} +1 -1
  284. package/dist/ionic/{p-d4ca0475.js → p-3cc276f4.js} +1 -1
  285. package/dist/ionic/p-49a0e74c.entry.js +4 -0
  286. package/dist/ionic/p-4c2d5b80.system.js +4 -0
  287. package/dist/ionic/p-4c98e2cf.system.js +4 -0
  288. package/dist/ionic/p-4ec778aa.entry.js +4 -0
  289. package/dist/ionic/{p-4ad78edc.entry.js → p-52d7a191.entry.js} +1 -1
  290. package/dist/ionic/{p-1543d6b2.system.entry.js → p-567de071.system.entry.js} +1 -1
  291. package/dist/ionic/p-577bc414.entry.js +4 -0
  292. package/dist/ionic/{p-22e4210e.system.entry.js → p-585b455c.system.entry.js} +1 -1
  293. package/dist/ionic/{p-42585688.system.entry.js → p-58d5df0c.system.entry.js} +1 -1
  294. package/dist/ionic/{p-026517fb.entry.js → p-5b932840.entry.js} +1 -1
  295. package/dist/ionic/{p-97acff20.system.js → p-5c08627a.system.js} +1 -1
  296. package/dist/ionic/{p-eb6f173b.entry.js → p-5c9eb9af.entry.js} +1 -1
  297. package/dist/ionic/{p-9c7efe25.system.entry.js → p-5fce0c0b.system.entry.js} +1 -1
  298. package/dist/ionic/{p-f00ba947.entry.js → p-61db139d.entry.js} +1 -1
  299. package/dist/ionic/{p-85b1ffae.entry.js → p-62af944c.entry.js} +1 -1
  300. package/dist/ionic/{p-4c9ccc7f.system.entry.js → p-63b0abde.system.entry.js} +1 -1
  301. package/dist/ionic/p-67222c16.system.js +4 -0
  302. package/dist/ionic/{p-ca908a50.system.entry.js → p-6933c482.system.entry.js} +1 -1
  303. package/dist/ionic/{p-c2583512.entry.js → p-6d32975a.entry.js} +1 -1
  304. package/dist/ionic/{p-dd0cad9c.entry.js → p-6d6cedc5.entry.js} +1 -1
  305. package/dist/ionic/{p-9c82a07c.system.entry.js → p-6dfb0f39.system.entry.js} +1 -1
  306. package/dist/ionic/{p-7a1766d6.js → p-72812e99.js} +1 -1
  307. package/dist/ionic/p-72bc8a1c.js +4 -0
  308. package/dist/ionic/{p-c3f4ea6c.system.entry.js → p-744c8672.system.entry.js} +1 -1
  309. package/dist/ionic/{p-d4896d36.system.entry.js → p-7458862e.system.entry.js} +1 -1
  310. package/dist/ionic/{p-d0a7f584.system.entry.js → p-74e3f0af.system.entry.js} +2 -2
  311. package/dist/ionic/p-7513b0c4.js +4 -0
  312. package/dist/ionic/{p-5a8efe64.system.entry.js → p-797eeea8.system.entry.js} +1 -1
  313. package/dist/ionic/{p-fd988d29.entry.js → p-7a02f476.entry.js} +1 -1
  314. package/dist/ionic/{p-0dc23518.entry.js → p-7a6eaf9e.entry.js} +1 -1
  315. package/dist/ionic/{p-288a2cff.entry.js → p-7b9a2b23.entry.js} +1 -1
  316. package/dist/ionic/{p-b637aa3f.system.entry.js → p-7ddc46c3.system.entry.js} +1 -1
  317. package/dist/ionic/p-7de1e42c.system.js +4 -0
  318. package/dist/ionic/{p-0eb2553a.system.entry.js → p-7ed1657c.system.entry.js} +1 -1
  319. package/dist/ionic/{p-95da3ae2.system.js → p-8635f5e6.system.js} +1 -1
  320. package/dist/ionic/{p-5bc12439.entry.js → p-8694928f.entry.js} +1 -1
  321. package/dist/ionic/{p-ebd0a280.entry.js → p-89bf08c7.entry.js} +1 -1
  322. package/dist/ionic/{p-830f1a37.system.entry.js → p-8cfba7e9.system.entry.js} +1 -1
  323. package/dist/ionic/{p-4f2f4e3b.entry.js → p-92763d3d.entry.js} +1 -1
  324. package/dist/ionic/{p-0d0a6fb9.system.entry.js → p-933727f9.system.entry.js} +1 -1
  325. package/dist/ionic/p-9343a445.js +4 -0
  326. package/dist/ionic/{p-656516a2.entry.js → p-937a7e21.entry.js} +1 -1
  327. package/dist/ionic/{p-2c9abc61.entry.js → p-948e6c6a.entry.js} +1 -1
  328. package/dist/ionic/{p-56a8aa85.entry.js → p-95775830.entry.js} +1 -1
  329. package/dist/ionic/{p-9065e1ed.system.entry.js → p-98231c01.system.entry.js} +1 -1
  330. package/dist/ionic/{p-808c9efc.system.entry.js → p-985a7e17.system.entry.js} +1 -1
  331. package/dist/ionic/{p-703d60a2.entry.js → p-98ff6b32.entry.js} +1 -1
  332. package/dist/ionic/{p-28cb707b.system.entry.js → p-9b122e3c.system.entry.js} +1 -1
  333. package/dist/ionic/{p-b609d03b.entry.js → p-9b428d25.entry.js} +1 -1
  334. package/dist/ionic/{p-85632b54.entry.js → p-9df2c6fb.entry.js} +1 -1
  335. package/dist/ionic/{p-eb4ac14d.system.js → p-9f3008d4.system.js} +1 -1
  336. package/dist/ionic/{p-d17f0dca.system.entry.js → p-9f364443.system.entry.js} +1 -1
  337. package/dist/ionic/{p-50c24ade.system.entry.js → p-a090bce8.system.entry.js} +1 -1
  338. package/dist/ionic/{p-5b03d498.system.entry.js → p-a0eb506c.system.entry.js} +1 -1
  339. package/dist/ionic/{p-4452a8ac.system.js → p-a15ddedb.system.js} +1 -1
  340. package/dist/ionic/p-a3db8ee3.js +4 -0
  341. package/dist/ionic/{p-9393bfbe.system.entry.js → p-a4a2420e.system.entry.js} +1 -1
  342. package/dist/ionic/{p-d86d7845.system.js → p-a69b9fc5.system.js} +1 -1
  343. package/dist/ionic/{p-1a790eef.system.js → p-a88dec0d.system.js} +2 -2
  344. package/dist/ionic/{p-c15a77e2.entry.js → p-a8f2c254.entry.js} +1 -1
  345. package/dist/ionic/{p-1c2f74e4.system.entry.js → p-ab674093.system.entry.js} +1 -1
  346. package/dist/ionic/{p-647b0625.system.js → p-ada36597.system.js} +1 -1
  347. package/dist/ionic/{p-42a9bb35.entry.js → p-afecb188.entry.js} +1 -1
  348. package/dist/ionic/{p-5b867a40.entry.js → p-b1eb86fd.entry.js} +1 -1
  349. package/dist/ionic/{p-c6ff3239.system.js → p-b3c60433.system.js} +1 -1
  350. package/dist/ionic/{p-bb11d9fb.js → p-b51e4004.js} +1 -1
  351. package/dist/ionic/{p-8db44ad3.js → p-b6efeab8.js} +1 -1
  352. package/dist/ionic/{p-406f9aa1.entry.js → p-b9d7015f.entry.js} +1 -1
  353. package/dist/ionic/{p-200dfb8f.entry.js → p-bb0db172.entry.js} +1 -1
  354. package/dist/ionic/{p-9d4a8059.entry.js → p-bdad26e3.entry.js} +1 -1
  355. package/dist/ionic/{p-842bb3c8.system.entry.js → p-bdf2cb2e.system.entry.js} +1 -1
  356. package/dist/ionic/{p-b5639a4f.entry.js → p-c41ac815.entry.js} +1 -1
  357. package/dist/ionic/{p-f1d1c614.system.js → p-c4238c12.system.js} +1 -1
  358. package/dist/ionic/p-c4b53b16.system.entry.js +4 -0
  359. package/dist/ionic/{p-dcc9aaf1.system.entry.js → p-cac0e0b3.system.entry.js} +1 -1
  360. package/dist/ionic/p-cb13696c.js +4 -0
  361. package/dist/ionic/{p-ef144104.system.entry.js → p-cba1f9bc.system.entry.js} +1 -1
  362. package/dist/ionic/p-cdc83025.entry.js +4 -0
  363. package/dist/ionic/p-d1c5b60e.system.js +4 -0
  364. package/dist/ionic/{p-881d9e52.system.js → p-d22e2a38.system.js} +1 -1
  365. package/dist/ionic/{p-8154947f.system.entry.js → p-d6eaffb1.system.entry.js} +2 -2
  366. package/dist/ionic/{p-e25cd3c7.js → p-d743e981.js} +1 -1
  367. package/dist/ionic/{p-72b65035.entry.js → p-d7aa6b00.entry.js} +1 -1
  368. package/dist/ionic/p-d7dd8fb1.entry.js +4 -0
  369. package/dist/ionic/{p-c3f5dcf9.entry.js → p-de930745.entry.js} +1 -1
  370. package/dist/ionic/{p-9fe2050a.entry.js → p-e06057c9.entry.js} +1 -1
  371. package/dist/ionic/{p-4a465405.system.entry.js → p-e09d6392.system.entry.js} +2 -2
  372. package/dist/ionic/p-e3171ff3.entry.js +4 -0
  373. package/dist/ionic/{p-16f1ba65.system.entry.js → p-e4ee80be.system.entry.js} +1 -1
  374. package/dist/ionic/p-e4fde4fb.system.entry.js +4 -0
  375. package/dist/ionic/p-e6376b93.system.entry.js +4 -0
  376. package/dist/ionic/{p-faa5e2b9.entry.js → p-e76dae93.entry.js} +1 -1
  377. package/dist/ionic/p-e8d56122.js +4 -0
  378. package/dist/ionic/{p-6f3d8334.js → p-ecceeb90.js} +1 -1
  379. package/dist/ionic/{p-d7fef52e.system.entry.js → p-ed75fcfb.system.entry.js} +1 -1
  380. package/dist/ionic/{p-acc78e36.entry.js → p-eef505e8.entry.js} +1 -1
  381. package/dist/ionic/{p-a33837c9.entry.js → p-f1060cd8.entry.js} +1 -1
  382. package/dist/ionic/{p-9ce56f65.system.entry.js → p-f1120724.system.entry.js} +1 -1
  383. package/dist/ionic/{p-0a499487.js → p-f1c4dcd4.js} +1 -1
  384. package/dist/ionic/{p-478dfa8c.system.entry.js → p-f3102647.system.entry.js} +1 -1
  385. package/dist/ionic/{p-13052792.entry.js → p-f63c2d12.entry.js} +1 -1
  386. package/dist/ionic/{p-5976e3b7.system.entry.js → p-fbd41a7e.system.entry.js} +1 -1
  387. package/dist/ionic/{p-712b57f9.system.entry.js → p-fca6ef5f.system.entry.js} +1 -1
  388. package/dist/ionic/{p-bed40aa8.entry.js → p-fceec762.entry.js} +1 -1
  389. package/dist/types/components/checkbox/checkbox.d.ts +25 -0
  390. package/dist/types/components/modal/animations/sheet.d.ts +1 -0
  391. package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
  392. package/dist/types/components/modal/modal-interface.d.ts +1 -0
  393. package/dist/types/components/modal/modal.d.ts +11 -0
  394. package/dist/types/components/segment-button/segment-button.d.ts +1 -2
  395. package/dist/types/components/select/select.d.ts +6 -0
  396. package/dist/types/components/toggle/toggle.d.ts +6 -0
  397. package/dist/types/components/toolbar/toolbar.d.ts +4 -0
  398. package/dist/types/components.d.ts +48 -0
  399. package/dist/types/utils/config.d.ts +9 -0
  400. package/dist/types/utils/helpers.d.ts +0 -1
  401. package/dist/types/utils/logging/index.d.ts +13 -1
  402. package/dist/types/utils/test/platform.utils.d.ts +1 -1
  403. package/hydrate/index.js +338 -105
  404. package/hydrate/index.mjs +338 -105
  405. package/package.json +1 -1
  406. package/dist/esm-es5/app-globals-c10a1137.js +0 -4
  407. package/dist/esm-es5/index-9b0d46f4.js +0 -4
  408. package/dist/esm-es5/input-shims-0e65111b.js +0 -4
  409. package/dist/esm-es5/md.transition-e4034e0a.js +0 -4
  410. package/dist/esm-es5/status-tap-163e8128.js +0 -4
  411. package/dist/ionic/p-0440660b.js +0 -4
  412. package/dist/ionic/p-06fee233.js +0 -4
  413. package/dist/ionic/p-075a94bd.js +0 -4
  414. package/dist/ionic/p-0ee3b5a2.system.js +0 -4
  415. package/dist/ionic/p-135e5731.js +0 -4
  416. package/dist/ionic/p-1f405274.js +0 -4
  417. package/dist/ionic/p-2c9eb774.system.js +0 -4
  418. package/dist/ionic/p-30ec5574.entry.js +0 -4
  419. package/dist/ionic/p-3667bc71.system.js +0 -4
  420. package/dist/ionic/p-3c7371c4.system.entry.js +0 -4
  421. package/dist/ionic/p-47e6c342.js +0 -4
  422. package/dist/ionic/p-4e8946f7.js +0 -4
  423. package/dist/ionic/p-51f13ac7.entry.js +0 -4
  424. package/dist/ionic/p-6167f80e.entry.js +0 -4
  425. package/dist/ionic/p-627c1f42.entry.js +0 -4
  426. package/dist/ionic/p-68dc53a5.js +0 -4
  427. package/dist/ionic/p-699c97a3.entry.js +0 -4
  428. package/dist/ionic/p-6bc9998f.entry.js +0 -4
  429. package/dist/ionic/p-75a0fffe.system.entry.js +0 -4
  430. package/dist/ionic/p-af09741c.entry.js +0 -4
  431. package/dist/ionic/p-c42a4dad.system.entry.js +0 -4
  432. package/dist/ionic/p-cc964e4f.system.js +0 -4
  433. package/dist/ionic/p-ddc058a7.system.entry.js +0 -4
  434. package/dist/ionic/p-e3357909.entry.js +0 -4
  435. package/dist/ionic/p-f4f255cb.system.js +0 -4
  436. 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>";
@@ -2845,8 +2835,7 @@ const isHybrid = (win) => isCordova(win) || isCapacitorNative(win);
2845
2835
  const isCordova = (win) => !!(win['cordova'] || win['phonegap'] || win['PhoneGap']);
2846
2836
  const isCapacitorNative = (win) => {
2847
2837
  const capacitor = win['Capacitor'];
2848
- // TODO(ROU-11693): Remove when we no longer support Capacitor 2, which does not have isNativePlatform
2849
- return !!((capacitor === null || capacitor === void 0 ? void 0 : capacitor.isNative) || ((capacitor === null || capacitor === void 0 ? void 0 : capacitor.isNativePlatform) && !!capacitor.isNativePlatform()));
2838
+ return !!(capacitor === null || capacitor === void 0 ? void 0 : capacitor.isNative);
2850
2839
  };
2851
2840
  const isElectron = (win) => testUserAgent(win, /electron/i);
2852
2841
  const isPWA = (win) => { var _a; return !!(((_a = win.matchMedia) === null || _a === void 0 ? void 0 : _a.call(win, '(display-mode: standalone)').matches) || win.navigator.standalone); };
@@ -3228,9 +3217,12 @@ let accordionIds = 0;
3228
3217
  * @param message - The string message to be logged to the console.
3229
3218
  */
3230
3219
  const printIonWarning = (message, ...params) => {
3231
- 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
+ }
3232
3224
  };
3233
- /*
3225
+ /**
3234
3226
  * Logs an error to the console with an Ionic prefix
3235
3227
  * to indicate the library that is warning the developer.
3236
3228
  *
@@ -3238,7 +3230,10 @@ const printIonWarning = (message, ...params) => {
3238
3230
  * @param params - Additional arguments to supply to the console.error.
3239
3231
  */
3240
3232
  const printIonError = (message, ...params) => {
3241
- 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
+ }
3242
3237
  };
3243
3238
  /**
3244
3239
  * Prints an error informing developers that an implementation requires an element to be used
@@ -8439,10 +8434,10 @@ class CardTitle {
8439
8434
  }; }
8440
8435
  }
8441
8436
 
8442
- 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}";
8443
8438
  var IonCheckboxIosStyle0 = checkboxIosCss;
8444
8439
 
8445
- 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}";
8446
8441
  var IonCheckboxMdStyle0 = checkboxMdCss;
8447
8442
 
8448
8443
  /**
@@ -8453,6 +8448,9 @@ var IonCheckboxMdStyle0 = checkboxMdCss;
8453
8448
  * @part container - The container for the checkbox mark.
8454
8449
  * @part label - The label text describing the checkbox.
8455
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.
8456
8454
  */
8457
8455
  class Checkbox {
8458
8456
  constructor(hostRef) {
@@ -8461,6 +8459,8 @@ class Checkbox {
8461
8459
  this.ionFocus = createEvent(this, "ionFocus", 7);
8462
8460
  this.ionBlur = createEvent(this, "ionBlur", 7);
8463
8461
  this.inputId = `ion-cb-${checkboxIds++}`;
8462
+ this.helperTextId = `${this.inputId}-helper-text`;
8463
+ this.errorTextId = `${this.inputId}-error-text`;
8464
8464
  this.inheritedAttributes = {};
8465
8465
  /**
8466
8466
  * Sets the checked property and emits
@@ -8498,10 +8498,13 @@ class Checkbox {
8498
8498
  this.checked = false;
8499
8499
  this.indeterminate = false;
8500
8500
  this.disabled = false;
8501
+ this.errorText = undefined;
8502
+ this.helperText = undefined;
8501
8503
  this.value = 'on';
8502
8504
  this.labelPlacement = 'start';
8503
8505
  this.justify = undefined;
8504
8506
  this.alignment = undefined;
8507
+ this.required = false;
8505
8508
  }
8506
8509
  componentWillLoad() {
8507
8510
  this.inheritedAttributes = Object.assign({}, inheritAriaAttributes(this.el));
@@ -8512,12 +8515,38 @@ class Checkbox {
8512
8515
  this.focusEl.focus();
8513
8516
  }
8514
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
+ }
8515
8544
  render() {
8516
- 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;
8517
8546
  const mode = getIonMode$1(this);
8518
8547
  const path = getSVGPath(mode, indeterminate);
8519
8548
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
8520
- 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, {
8521
8550
  [mode]: true,
8522
8551
  'in-item': hostContext('ion-item', el),
8523
8552
  'checkbox-checked': checked,
@@ -8527,10 +8556,10 @@ class Checkbox {
8527
8556
  [`checkbox-justify-${justify}`]: justify !== undefined,
8528
8557
  [`checkbox-alignment-${alignment}`]: alignment !== undefined,
8529
8558
  [`checkbox-label-placement-${labelPlacement}`]: true,
8530
- }), 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: {
8531
8560
  'label-text-wrapper': true,
8532
8561
  'label-text-wrapper-hidden': el.textContent === '',
8533
- }, 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)))));
8534
8563
  }
8535
8564
  getSVGPath(mode, indeterminate) {
8536
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" }));
@@ -8553,10 +8582,13 @@ class Checkbox {
8553
8582
  "checked": [1028],
8554
8583
  "indeterminate": [1028],
8555
8584
  "disabled": [4],
8585
+ "errorText": [1, "error-text"],
8586
+ "helperText": [1, "helper-text"],
8556
8587
  "value": [8],
8557
8588
  "labelPlacement": [1, "label-placement"],
8558
8589
  "justify": [1],
8559
8590
  "alignment": [1],
8591
+ "required": [4],
8560
8592
  "setFocus": [64]
8561
8593
  },
8562
8594
  "$listeners$": undefined,
@@ -19032,7 +19064,7 @@ const computeDuration = (remaining, velocity) => {
19032
19064
  };
19033
19065
 
19034
19066
  const createSheetEnterAnimation = (opts) => {
19035
- const { currentBreakpoint, backdropBreakpoint } = opts;
19067
+ const { currentBreakpoint, backdropBreakpoint, expandToScroll } = opts;
19036
19068
  /**
19037
19069
  * If the backdropBreakpoint is undefined, then the backdrop
19038
19070
  * should always fade in. If the backdropBreakpoint came before the
@@ -19052,7 +19084,16 @@ const createSheetEnterAnimation = (opts) => {
19052
19084
  { offset: 0, opacity: 1, transform: 'translateY(100%)' },
19053
19085
  { offset: 1, opacity: 1, transform: `translateY(${100 - currentBreakpoint * 100}%)` },
19054
19086
  ]);
19055
- 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 };
19056
19097
  };
19057
19098
  const createSheetLeaveAnimation = (opts) => {
19058
19099
  const { currentBreakpoint, backdropBreakpoint } = opts;
@@ -19087,22 +19128,68 @@ const createEnterAnimation$1 = () => {
19087
19128
  })
19088
19129
  .afterClearStyles(['pointer-events']);
19089
19130
  const wrapperAnimation = createAnimation().fromTo('transform', 'translateY(100vh)', 'translateY(0vh)');
19090
- return { backdropAnimation, wrapperAnimation };
19131
+ return { backdropAnimation, wrapperAnimation, contentAnimation: undefined };
19091
19132
  };
19092
19133
  /**
19093
19134
  * iOS Modal Enter Animation for the Card presentation style
19094
19135
  */
19095
19136
  const iosEnterAnimation$3 = (baseEl, opts) => {
19096
- const { presentingEl, currentBreakpoint } = opts;
19137
+ const { presentingEl, currentBreakpoint, expandToScroll } = opts;
19097
19138
  const root = getElementRoot(baseEl);
19098
- const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation$1();
19139
+ const { wrapperAnimation, backdropAnimation, contentAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation$1();
19099
19140
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
19100
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')));
19101
19145
  const baseAnimation = createAnimation('entering-base')
19102
19146
  .addElement(baseEl)
19103
19147
  .easing('cubic-bezier(0.32,0.72,0,1)')
19104
19148
  .duration(500)
19105
- .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
+ }
19106
19193
  if (presentingEl) {
19107
19194
  const isMobile = window.innerWidth < 768;
19108
19195
  const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
@@ -19180,7 +19267,7 @@ const createLeaveAnimation$1 = () => {
19180
19267
  * iOS Modal Leave Animation
19181
19268
  */
19182
19269
  const iosLeaveAnimation$3 = (baseEl, opts, duration = 500) => {
19183
- const { presentingEl, currentBreakpoint } = opts;
19270
+ const { presentingEl, currentBreakpoint, expandToScroll } = opts;
19184
19271
  const root = getElementRoot(baseEl);
19185
19272
  const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation$1();
19186
19273
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
@@ -19189,7 +19276,29 @@ const iosLeaveAnimation$3 = (baseEl, opts, duration = 500) => {
19189
19276
  .addElement(baseEl)
19190
19277
  .easing('cubic-bezier(0.32,0.72,0,1)')
19191
19278
  .duration(duration)
19192
- .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
+ });
19193
19302
  if (presentingEl) {
19194
19303
  const isMobile = window.innerWidth < 768;
19195
19304
  const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
@@ -19267,22 +19376,69 @@ const createEnterAnimation = () => {
19267
19376
  { offset: 0, opacity: 0.01, transform: 'translateY(40px)' },
19268
19377
  { offset: 1, opacity: 1, transform: `translateY(0px)` },
19269
19378
  ]);
19270
- return { backdropAnimation, wrapperAnimation };
19379
+ return { backdropAnimation, wrapperAnimation, contentAnimation: undefined };
19271
19380
  };
19272
19381
  /**
19273
19382
  * Md Modal Enter Animation
19274
19383
  */
19275
19384
  const mdEnterAnimation$2 = (baseEl, opts) => {
19276
- const { currentBreakpoint } = opts;
19385
+ const { currentBreakpoint, expandToScroll } = opts;
19277
19386
  const root = getElementRoot(baseEl);
19278
- const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
19387
+ const { wrapperAnimation, backdropAnimation, contentAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
19279
19388
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
19280
19389
  wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
19281
- 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()
19282
19394
  .addElement(baseEl)
19283
19395
  .easing('cubic-bezier(0.36,0.66,0.04,1)')
19284
19396
  .duration(280)
19285
- .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;
19286
19442
  };
19287
19443
 
19288
19444
  const createLeaveAnimation = () => {
@@ -19297,18 +19453,41 @@ const createLeaveAnimation = () => {
19297
19453
  * Md Modal Leave Animation
19298
19454
  */
19299
19455
  const mdLeaveAnimation$2 = (baseEl, opts) => {
19300
- const { currentBreakpoint } = opts;
19456
+ const { currentBreakpoint, expandToScroll } = opts;
19301
19457
  const root = getElementRoot(baseEl);
19302
19458
  const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation();
19303
19459
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
19304
19460
  wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
19305
- return createAnimation()
19461
+ const baseAnimation = createAnimation()
19306
19462
  .easing('cubic-bezier(0.47,0,0.745,0.715)')
19307
19463
  .duration(200)
19308
- .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;
19309
19488
  };
19310
19489
 
19311
- 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) => {
19312
19491
  // Defaults for the sheet swipe animation
19313
19492
  const defaultBackdrop = [
19314
19493
  { offset: 0, opacity: 'var(--backdrop-opacity)' },
@@ -19325,6 +19504,10 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19325
19504
  { offset: 1, transform: 'translateY(100%)' },
19326
19505
  ],
19327
19506
  BACKDROP_KEYFRAMES: backdropBreakpoint !== 0 ? customBackdrop : defaultBackdrop,
19507
+ CONTENT_KEYFRAMES: [
19508
+ { offset: 0, maxHeight: '100%' },
19509
+ { offset: 1, maxHeight: '0%' },
19510
+ ],
19328
19511
  };
19329
19512
  const contentEl = baseEl.querySelector('ion-content');
19330
19513
  const height = wrapperEl.clientHeight;
@@ -19332,10 +19515,11 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19332
19515
  let offset = 0;
19333
19516
  let canDismissBlocksGesture = false;
19334
19517
  const canDismissMaxStep = 0.95;
19335
- const wrapperAnimation = animation.childAnimations.find((ani) => ani.id === 'wrapperAnimation');
19336
- const backdropAnimation = animation.childAnimations.find((ani) => ani.id === 'backdropAnimation');
19337
19518
  const maxBreakpoint = breakpoints[breakpoints.length - 1];
19338
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');
19339
19523
  const enableBackdrop = () => {
19340
19524
  baseEl.style.setProperty('pointer-events', 'auto');
19341
19525
  backdropEl.style.setProperty('pointer-events', 'auto');
@@ -19358,6 +19542,31 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19358
19542
  */
19359
19543
  baseEl.classList.add(FOCUS_TRAP_DISABLE_CLASS);
19360
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
+ };
19361
19570
  /**
19362
19571
  * After the entering animation completes,
19363
19572
  * we need to set the animation to go from
@@ -19369,6 +19578,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19369
19578
  if (wrapperAnimation && backdropAnimation) {
19370
19579
  wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
19371
19580
  backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
19581
+ contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.keyframes([...SheetDefaults.CONTENT_KEYFRAMES]);
19372
19582
  animation.progressStart(true, 1 - currentBreakpoint);
19373
19583
  /**
19374
19584
  * If backdrop is not enabled, then content
@@ -19385,7 +19595,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19385
19595
  disableBackdrop();
19386
19596
  }
19387
19597
  }
19388
- if (contentEl && currentBreakpoint !== maxBreakpoint) {
19598
+ if (contentEl && currentBreakpoint !== maxBreakpoint && expandToScroll) {
19389
19599
  contentEl.scrollY = false;
19390
19600
  }
19391
19601
  const canStart = (detail) => {
@@ -19399,6 +19609,13 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19399
19609
  */
19400
19610
  const contentEl = findClosestIonContent(detail.event.target);
19401
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
+ }
19402
19619
  if (currentBreakpoint === 1 && contentEl) {
19403
19620
  /**
19404
19621
  * The modal should never swipe to close on the content with a refresher.
@@ -19429,6 +19646,15 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19429
19646
  * Remove undefined check
19430
19647
  */
19431
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
+ }
19432
19658
  /**
19433
19659
  * If we are pulling down, then it is possible we are pulling on the content.
19434
19660
  * We do not want scrolling to happen at the same time as the gesture.
@@ -19544,6 +19770,19 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19544
19770
  opacity: `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(snapToBreakpoint, backdropBreakpoint)})`,
19545
19771
  },
19546
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
+ }
19547
19786
  animation.progressStep(0);
19548
19787
  }
19549
19788
  /**
@@ -19551,6 +19790,14 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19551
19790
  * snapping animation completes.
19552
19791
  */
19553
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
+ }
19554
19801
  if (shouldPreventDismiss) {
19555
19802
  handleCanDismiss(baseEl, animation);
19556
19803
  }
@@ -19558,13 +19805,13 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19558
19805
  onDismiss();
19559
19806
  }
19560
19807
  /**
19561
- * If the sheet is going to be fully expanded then we should enable
19562
- * scrolling immediately. The sheet modal animation takes ~500ms to finish
19563
- * so if we wait until then there is a visible delay for when scrolling is
19564
- * re-enabled. Native iOS allows for scrolling on the sheet modal as soon
19565
- * 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.
19566
19813
  */
19567
- if (contentEl && snapToBreakpoint === breakpoints[breakpoints.length - 1]) {
19814
+ if (contentEl && (snapToBreakpoint === breakpoints[breakpoints.length - 1] || !expandToScroll)) {
19568
19815
  contentEl.scrollY = true;
19569
19816
  }
19570
19817
  return new Promise((resolve) => {
@@ -19582,6 +19829,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19582
19829
  raf(() => {
19583
19830
  wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
19584
19831
  backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
19832
+ contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.keyframes([...SheetDefaults.CONTENT_KEYFRAMES]);
19585
19833
  animation.progressStart(true, 1 - snapToBreakpoint);
19586
19834
  currentBreakpoint = snapToBreakpoint;
19587
19835
  onBreakpointChange(currentBreakpoint);
@@ -19634,10 +19882,10 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19634
19882
  };
19635
19883
  };
19636
19884
 
19637
- 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}";
19638
19886
  var IonModalIosStyle0 = modalIosCss;
19639
19887
 
19640
- 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}";
19641
19889
  var IonModalMdStyle0 = modalMdCss;
19642
19890
 
19643
19891
  // TODO(FW-2832): types
@@ -19716,6 +19964,7 @@ class Modal {
19716
19964
  this.enterAnimation = undefined;
19717
19965
  this.leaveAnimation = undefined;
19718
19966
  this.breakpoints = undefined;
19967
+ this.expandToScroll = true;
19719
19968
  this.initialBreakpoint = undefined;
19720
19969
  this.backdropBreakpoint = 0;
19721
19970
  this.handle = undefined;
@@ -19931,6 +20180,7 @@ class Modal {
19931
20180
  presentingEl: presentingElement,
19932
20181
  currentBreakpoint: this.initialBreakpoint,
19933
20182
  backdropBreakpoint: this.backdropBreakpoint,
20183
+ expandToScroll: this.expandToScroll,
19934
20184
  });
19935
20185
  /* tslint:disable-next-line */
19936
20186
  if (typeof window !== 'undefined') {
@@ -19981,7 +20231,10 @@ class Modal {
19981
20231
  // should be in the DOM and referenced by now, except
19982
20232
  // for the presenting el
19983
20233
  const animationBuilder = this.leaveAnimation || config.get('modalLeave', iosLeaveAnimation$3);
19984
- 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
+ }));
19985
20238
  const contentEl = findIonContent(el);
19986
20239
  if (!contentEl) {
19987
20240
  printIonContentErrorMsg(el);
@@ -20026,9 +20279,10 @@ class Modal {
20026
20279
  presentingEl: this.presentingElement,
20027
20280
  currentBreakpoint: initialBreakpoint,
20028
20281
  backdropBreakpoint,
20282
+ expandToScroll: this.expandToScroll,
20029
20283
  }));
20030
20284
  ani.progressStart(true, 1);
20031
- 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) => {
20032
20286
  if (this.currentBreakpoint !== breakpoint) {
20033
20287
  this.currentBreakpoint = breakpoint;
20034
20288
  this.ionBreakpointDidChange.emit({ breakpoint });
@@ -20106,6 +20360,7 @@ class Modal {
20106
20360
  presentingEl: presentingElement,
20107
20361
  currentBreakpoint: (_a = this.currentBreakpoint) !== null && _a !== void 0 ? _a : this.initialBreakpoint,
20108
20362
  backdropBreakpoint: this.backdropBreakpoint,
20363
+ expandToScroll: this.expandToScroll,
20109
20364
  });
20110
20365
  if (dismissed) {
20111
20366
  const { delegate } = this.getDelegate();
@@ -20191,23 +20446,23 @@ class Modal {
20191
20446
  return true;
20192
20447
  }
20193
20448
  render() {
20194
- const { handle, isSheetModal, presentingElement, htmlAttributes, handleBehavior, inheritedAttributes, focusTrap } = this;
20449
+ const { handle, isSheetModal, presentingElement, htmlAttributes, handleBehavior, inheritedAttributes, focusTrap, expandToScroll, } = this;
20195
20450
  const showHandle = handle !== false && isSheetModal;
20196
20451
  const mode = getIonMode$1(this);
20197
20452
  const isCardModal = presentingElement !== undefined && mode === 'ios';
20198
20453
  const isHandleCycle = handleBehavior === 'cycle';
20199
- 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: {
20200
20455
  zIndex: `${20000 + this.overlayIndex}`,
20201
- }, 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',
20202
20457
  /*
20203
20458
  role and aria-modal must be used on the
20204
20459
  same element. They must also be set inside the
20205
20460
  shadow DOM otherwise ion-button will not be highlighted
20206
20461
  when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
20207
20462
  */
20208
- 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",
20209
20464
  // Prevents the handle from receiving keyboard focus when it does not cycle
20210
- 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' }))));
20211
20466
  }
20212
20467
  get el() { return getElement(this); }
20213
20468
  static get watchers() { return {
@@ -20229,6 +20484,7 @@ class Modal {
20229
20484
  "enterAnimation": [16],
20230
20485
  "leaveAnimation": [16],
20231
20486
  "breakpoints": [16],
20487
+ "expandToScroll": [4, "expand-to-scroll"],
20232
20488
  "initialBreakpoint": [2, "initial-breakpoint"],
20233
20489
  "backdropBreakpoint": [2, "backdrop-breakpoint"],
20234
20490
  "handle": [4],
@@ -29329,35 +29585,7 @@ class SegmentButton {
29329
29585
  valueChanged() {
29330
29586
  this.updateState();
29331
29587
  }
29332
- waitForSegmentContent(ionSegment, contentId) {
29333
- return new Promise((resolve, reject) => {
29334
- let timeoutId = undefined;
29335
- let animationFrameId;
29336
- const check = () => {
29337
- if (!ionSegment) {
29338
- reject(new Error(`Segment not found when looking for Segment Content`));
29339
- return;
29340
- }
29341
- const segmentView = getNextSiblingOfType(ionSegment); // Skip the text nodes
29342
- const segmentContent = segmentView === null || segmentView === void 0 ? void 0 : segmentView.querySelector(`ion-segment-content[id="${contentId}"]`);
29343
- if (segmentContent && timeoutId) {
29344
- clearTimeout(timeoutId); // Clear the timeout if the segmentContent is found
29345
- cancelAnimationFrame(animationFrameId);
29346
- resolve(segmentContent);
29347
- }
29348
- else {
29349
- animationFrameId = requestAnimationFrame(check); // Keep checking on the next animation frame
29350
- }
29351
- };
29352
- check();
29353
- // Set a timeout to reject the promise
29354
- timeoutId = setTimeout(() => {
29355
- cancelAnimationFrame(animationFrameId);
29356
- reject(new Error(`Unable to find Segment Content with id="${contentId} within 1000 ms`));
29357
- }, 1000);
29358
- });
29359
- }
29360
- async connectedCallback() {
29588
+ connectedCallback() {
29361
29589
  const segmentEl = (this.segmentEl = this.el.closest('ion-segment'));
29362
29590
  if (segmentEl) {
29363
29591
  this.updateState();
@@ -29367,14 +29595,11 @@ class SegmentButton {
29367
29595
  // Return if there is no contentId defined
29368
29596
  if (!this.contentId)
29369
29597
  return;
29370
- let segmentContent;
29371
- try {
29372
- // Attempt to find the Segment Content by its contentId
29373
- segmentContent = await this.waitForSegmentContent(segmentEl, this.contentId);
29374
- }
29375
- catch (error) {
29376
- // If no associated Segment Content exists, log an error and return
29377
- 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}".`);
29378
29603
  return;
29379
29604
  }
29380
29605
  // Ensure the found element is a valid ION-SEGMENT-CONTENT
@@ -29420,7 +29645,7 @@ class SegmentButton {
29420
29645
  const { checked, type, disabled, hasIcon, hasLabel, layout, segmentEl } = this;
29421
29646
  const mode = getIonMode$1(this);
29422
29647
  const hasSegmentColor = () => (segmentEl === null || segmentEl === void 0 ? void 0 : segmentEl.color) !== undefined;
29423
- return (hAsync(Host, { key: 'f9da656c8eccb80e4ef30e3fa977f2dbbefbc988', class: {
29648
+ return (hAsync(Host, { key: 'd50a5d5e2f6206e8523598f258d8217d2903f69b', class: {
29424
29649
  [mode]: true,
29425
29650
  'in-toolbar': hostContext('ion-toolbar', this.el),
29426
29651
  'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
@@ -29436,7 +29661,7 @@ class SegmentButton {
29436
29661
  'ion-activatable': true,
29437
29662
  'ion-activatable-instant': true,
29438
29663
  'ion-focusable': true,
29439
- } }, 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" }))));
29440
29665
  }
29441
29666
  get el() { return getElement(this); }
29442
29667
  static get watchers() { return {
@@ -29703,6 +29928,7 @@ class Select {
29703
29928
  this.expandedIcon = undefined;
29704
29929
  this.shape = undefined;
29705
29930
  this.value = undefined;
29931
+ this.required = false;
29706
29932
  }
29707
29933
  styleChanged() {
29708
29934
  this.emitStyle();
@@ -30187,8 +30413,8 @@ class Select {
30187
30413
  return renderedLabel;
30188
30414
  }
30189
30415
  renderListbox() {
30190
- const { disabled, inputId, isExpanded } = this;
30191
- 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) }));
30192
30418
  }
30193
30419
  render() {
30194
30420
  const { disabled, el, isExpanded, expandedIcon, labelPlacement, justify, placeholder, fill, shape, name, value } = this;
@@ -30219,7 +30445,7 @@ class Select {
30219
30445
  * TODO(FW-5592): Remove hasStartEndSlots condition
30220
30446
  */
30221
30447
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || isExpanded || hasStartEndSlots));
30222
- return (hAsync(Host, { key: '144dfa5c49549a74fe516c65b9b8104a477ac789', onClick: this.onClick, class: createColorClasses$1(this.color, {
30448
+ return (hAsync(Host, { key: '491cf1b0e3aa31e7c9cfad3e87d83eb54272312a', onClick: this.onClick, class: createColorClasses$1(this.color, {
30223
30449
  [mode]: true,
30224
30450
  'in-item': inItem,
30225
30451
  'in-item-color': hostContext('ion-item.ion-color', el),
@@ -30235,7 +30461,7 @@ class Select {
30235
30461
  [`select-justify-${justify}`]: justifyEnabled,
30236
30462
  [`select-shape-${shape}`]: shape !== undefined,
30237
30463
  [`select-label-placement-${labelPlacement}`]: true,
30238
- }) }, hAsync("label", { key: '0edcfcbac575a9dccc77991531b6980d1caebf42', class: "select-wrapper", id: "select-label" }, this.renderLabelContainer(), hAsync("div", { key: '348151d90cb093f5d21c7d4a834264ac4a312c40', class: "select-wrapper-inner" }, hAsync("slot", { key: '8b7708c7f81217435c58276da0c08bba766d9500', name: "start" }), hAsync("div", { key: '10c520a335da0a0d1cf40f9365597beb244d3b48', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), hAsync("slot", { key: '0f15c40a5495e98e29d2a21ba21e0bc6f1c0125a', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && hAsync("div", { key: 'c87faad2e5ebf7f9453397d7ede43abd64d21294', class: "select-highlight" }))));
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" }))));
30239
30465
  }
30240
30466
  get el() { return getElement(this); }
30241
30467
  static get watchers() { return {
@@ -30271,6 +30497,7 @@ class Select {
30271
30497
  "expandedIcon": [1, "expanded-icon"],
30272
30498
  "shape": [1],
30273
30499
  "value": [1032],
30500
+ "required": [4],
30274
30501
  "isExpanded": [32],
30275
30502
  "open": [64]
30276
30503
  },
@@ -32667,6 +32894,7 @@ class Toggle {
32667
32894
  this.labelPlacement = 'start';
32668
32895
  this.justify = undefined;
32669
32896
  this.alignment = undefined;
32897
+ this.required = false;
32670
32898
  }
32671
32899
  disabledChanged() {
32672
32900
  if (this.gesture) {
@@ -32748,12 +32976,12 @@ class Toggle {
32748
32976
  return this.el.textContent !== '';
32749
32977
  }
32750
32978
  render() {
32751
- 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;
32752
32980
  const mode = getIonMode$1(this);
32753
32981
  const value = this.getValue();
32754
32982
  const rtl = isRTL$1(el) ? 'rtl' : 'ltr';
32755
32983
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
32756
- 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, {
32757
32985
  [mode]: true,
32758
32986
  'in-item': hostContext('ion-item', el),
32759
32987
  'toggle-activated': activated,
@@ -32763,10 +32991,10 @@ class Toggle {
32763
32991
  [`toggle-alignment-${alignment}`]: alignment !== undefined,
32764
32992
  [`toggle-label-placement-${labelPlacement}`]: true,
32765
32993
  [`toggle-${rtl}`]: true,
32766
- }) }, 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: {
32767
32995
  'label-text-wrapper': true,
32768
32996
  'label-text-wrapper-hidden': !this.hasLabel,
32769
- }, 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()))));
32770
32998
  }
32771
32999
  get el() { return getElement(this); }
32772
33000
  static get watchers() { return {
@@ -32789,6 +33017,7 @@ class Toggle {
32789
33017
  "labelPlacement": [1, "label-placement"],
32790
33018
  "justify": [1],
32791
33019
  "alignment": [1],
33020
+ "required": [4],
32792
33021
  "activated": [32]
32793
33022
  },
32794
33023
  "$listeners$": undefined,
@@ -32820,6 +33049,10 @@ var IonToolbarMdStyle0 = toolbarMdCss;
32820
33049
  * @slot secondary - Content is placed to the left of the toolbar text in `ios` mode, and directly to the right in `md` mode.
32821
33050
  * @slot primary - Content is placed to the right of the toolbar text in `ios` mode, and to the far right in `md` mode.
32822
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.
32823
33056
  */
32824
33057
  class Toolbar {
32825
33058
  constructor(hostRef) {
@@ -32870,10 +33103,10 @@ class Toolbar {
32870
33103
  this.childrenStyles.forEach((value) => {
32871
33104
  Object.assign(childStyles, value);
32872
33105
  });
32873
- 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, {
32874
33107
  [mode]: true,
32875
33108
  'in-toolbar': hostContext('ion-toolbar', this.el),
32876
- })) }, 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" }))));
32877
33110
  }
32878
33111
  get el() { return getElement(this); }
32879
33112
  static get style() { return {