@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.mjs CHANGED
@@ -2706,16 +2706,6 @@ const shallowEqualStringMap = (map1, map2) => {
2706
2706
  }
2707
2707
  return true;
2708
2708
  };
2709
- const getNextSiblingOfType = (element) => {
2710
- let sibling = element.nextSibling;
2711
- while (sibling) {
2712
- if (sibling.nodeType === Node.ELEMENT_NODE && sibling !== null) {
2713
- return sibling;
2714
- }
2715
- sibling = sibling.nextSibling;
2716
- }
2717
- return null;
2718
- };
2719
2709
 
2720
2710
  /* Ionicons v7.2.2, ES Modules */
2721
2711
  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>";
@@ -2841,8 +2831,7 @@ const isHybrid = (win) => isCordova(win) || isCapacitorNative(win);
2841
2831
  const isCordova = (win) => !!(win['cordova'] || win['phonegap'] || win['PhoneGap']);
2842
2832
  const isCapacitorNative = (win) => {
2843
2833
  const capacitor = win['Capacitor'];
2844
- // TODO(ROU-11693): Remove when we no longer support Capacitor 2, which does not have isNativePlatform
2845
- return !!((capacitor === null || capacitor === void 0 ? void 0 : capacitor.isNative) || ((capacitor === null || capacitor === void 0 ? void 0 : capacitor.isNativePlatform) && !!capacitor.isNativePlatform()));
2834
+ return !!(capacitor === null || capacitor === void 0 ? void 0 : capacitor.isNative);
2846
2835
  };
2847
2836
  const isElectron = (win) => testUserAgent(win, /electron/i);
2848
2837
  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); };
@@ -3224,9 +3213,12 @@ let accordionIds = 0;
3224
3213
  * @param message - The string message to be logged to the console.
3225
3214
  */
3226
3215
  const printIonWarning = (message, ...params) => {
3227
- return console.warn(`[Ionic Warning]: ${message}`, ...params);
3216
+ const logLevel = config.get('logLevel', "WARN" /* LogLevel.WARN */);
3217
+ if (["WARN" /* LogLevel.WARN */].includes(logLevel)) {
3218
+ return console.warn(`[Ionic Warning]: ${message}`, ...params);
3219
+ }
3228
3220
  };
3229
- /*
3221
+ /**
3230
3222
  * Logs an error to the console with an Ionic prefix
3231
3223
  * to indicate the library that is warning the developer.
3232
3224
  *
@@ -3234,7 +3226,10 @@ const printIonWarning = (message, ...params) => {
3234
3226
  * @param params - Additional arguments to supply to the console.error.
3235
3227
  */
3236
3228
  const printIonError = (message, ...params) => {
3237
- return console.error(`[Ionic Error]: ${message}`, ...params);
3229
+ const logLevel = config.get('logLevel', "ERROR" /* LogLevel.ERROR */);
3230
+ if (["ERROR" /* LogLevel.ERROR */, "WARN" /* LogLevel.WARN */].includes(logLevel)) {
3231
+ return console.error(`[Ionic Error]: ${message}`, ...params);
3232
+ }
3238
3233
  };
3239
3234
  /**
3240
3235
  * Prints an error informing developers that an implementation requires an element to be used
@@ -8435,10 +8430,10 @@ class CardTitle {
8435
8430
  }; }
8436
8431
  }
8437
8432
 
8438
- 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}";
8433
+ 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}";
8439
8434
  var IonCheckboxIosStyle0 = checkboxIosCss;
8440
8435
 
8441
- 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}";
8436
+ 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}";
8442
8437
  var IonCheckboxMdStyle0 = checkboxMdCss;
8443
8438
 
8444
8439
  /**
@@ -8449,6 +8444,9 @@ var IonCheckboxMdStyle0 = checkboxMdCss;
8449
8444
  * @part container - The container for the checkbox mark.
8450
8445
  * @part label - The label text describing the checkbox.
8451
8446
  * @part mark - The checkmark used to indicate the checked state.
8447
+ * @part supporting-text - Supporting text displayed beneath the checkbox label.
8448
+ * @part helper-text - Supporting text displayed beneath the checkbox label when the checkbox is valid.
8449
+ * @part error-text - Supporting text displayed beneath the checkbox label when the checkbox is invalid and touched.
8452
8450
  */
8453
8451
  class Checkbox {
8454
8452
  constructor(hostRef) {
@@ -8457,6 +8455,8 @@ class Checkbox {
8457
8455
  this.ionFocus = createEvent(this, "ionFocus", 7);
8458
8456
  this.ionBlur = createEvent(this, "ionBlur", 7);
8459
8457
  this.inputId = `ion-cb-${checkboxIds++}`;
8458
+ this.helperTextId = `${this.inputId}-helper-text`;
8459
+ this.errorTextId = `${this.inputId}-error-text`;
8460
8460
  this.inheritedAttributes = {};
8461
8461
  /**
8462
8462
  * Sets the checked property and emits
@@ -8494,10 +8494,13 @@ class Checkbox {
8494
8494
  this.checked = false;
8495
8495
  this.indeterminate = false;
8496
8496
  this.disabled = false;
8497
+ this.errorText = undefined;
8498
+ this.helperText = undefined;
8497
8499
  this.value = 'on';
8498
8500
  this.labelPlacement = 'start';
8499
8501
  this.justify = undefined;
8500
8502
  this.alignment = undefined;
8503
+ this.required = false;
8501
8504
  }
8502
8505
  componentWillLoad() {
8503
8506
  this.inheritedAttributes = Object.assign({}, inheritAriaAttributes(this.el));
@@ -8508,12 +8511,38 @@ class Checkbox {
8508
8511
  this.focusEl.focus();
8509
8512
  }
8510
8513
  }
8514
+ getHintTextID() {
8515
+ const { el, helperText, errorText, helperTextId, errorTextId } = this;
8516
+ if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) {
8517
+ return errorTextId;
8518
+ }
8519
+ if (helperText) {
8520
+ return helperTextId;
8521
+ }
8522
+ return undefined;
8523
+ }
8524
+ /**
8525
+ * Responsible for rendering helper text and error text.
8526
+ * This element should only be rendered if hint text is set.
8527
+ */
8528
+ renderHintText() {
8529
+ const { helperText, errorText, helperTextId, errorTextId } = this;
8530
+ /**
8531
+ * undefined and empty string values should
8532
+ * be treated as not having helper/error text.
8533
+ */
8534
+ const hasHintText = !!helperText || !!errorText;
8535
+ if (!hasHintText) {
8536
+ return;
8537
+ }
8538
+ 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)));
8539
+ }
8511
8540
  render() {
8512
- const { color, checked, disabled, el, getSVGPath, indeterminate, inheritedAttributes, inputId, justify, labelPlacement, name, value, alignment, } = this;
8541
+ const { color, checked, disabled, el, getSVGPath, indeterminate, inheritedAttributes, inputId, justify, labelPlacement, name, value, alignment, required, } = this;
8513
8542
  const mode = getIonMode$1(this);
8514
8543
  const path = getSVGPath(mode, indeterminate);
8515
8544
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
8516
- return (hAsync(Host, { key: '6dc787e1100521d08c4900104e1a3e2f594e919f', "aria-checked": indeterminate ? 'mixed' : `${checked}`, class: createColorClasses$1(color, {
8545
+ return (hAsync(Host, { key: '7ac31df89b07c781ddcd30a6a8c109494d0c500a', "aria-checked": indeterminate ? 'mixed' : `${checked}`, "aria-describedby": this.getHintTextID(), "aria-invalid": this.getHintTextID() === this.errorTextId, class: createColorClasses$1(color, {
8517
8546
  [mode]: true,
8518
8547
  'in-item': hostContext('ion-item', el),
8519
8548
  'checkbox-checked': checked,
@@ -8523,10 +8552,10 @@ class Checkbox {
8523
8552
  [`checkbox-justify-${justify}`]: justify !== undefined,
8524
8553
  [`checkbox-alignment-${alignment}`]: alignment !== undefined,
8525
8554
  [`checkbox-label-placement-${labelPlacement}`]: true,
8526
- }), 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: {
8555
+ }), 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: {
8527
8556
  'label-text-wrapper': true,
8528
8557
  'label-text-wrapper-hidden': el.textContent === '',
8529
- }, 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)))));
8558
+ }, 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)))));
8530
8559
  }
8531
8560
  getSVGPath(mode, indeterminate) {
8532
8561
  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" }));
@@ -8549,10 +8578,13 @@ class Checkbox {
8549
8578
  "checked": [1028],
8550
8579
  "indeterminate": [1028],
8551
8580
  "disabled": [4],
8581
+ "errorText": [1, "error-text"],
8582
+ "helperText": [1, "helper-text"],
8552
8583
  "value": [8],
8553
8584
  "labelPlacement": [1, "label-placement"],
8554
8585
  "justify": [1],
8555
8586
  "alignment": [1],
8587
+ "required": [4],
8556
8588
  "setFocus": [64]
8557
8589
  },
8558
8590
  "$listeners$": undefined,
@@ -19028,7 +19060,7 @@ const computeDuration = (remaining, velocity) => {
19028
19060
  };
19029
19061
 
19030
19062
  const createSheetEnterAnimation = (opts) => {
19031
- const { currentBreakpoint, backdropBreakpoint } = opts;
19063
+ const { currentBreakpoint, backdropBreakpoint, expandToScroll } = opts;
19032
19064
  /**
19033
19065
  * If the backdropBreakpoint is undefined, then the backdrop
19034
19066
  * should always fade in. If the backdropBreakpoint came before the
@@ -19048,7 +19080,16 @@ const createSheetEnterAnimation = (opts) => {
19048
19080
  { offset: 0, opacity: 1, transform: 'translateY(100%)' },
19049
19081
  { offset: 1, opacity: 1, transform: `translateY(${100 - currentBreakpoint * 100}%)` },
19050
19082
  ]);
19051
- return { wrapperAnimation, backdropAnimation };
19083
+ /**
19084
+ * This allows the content to be scrollable at any breakpoint.
19085
+ */
19086
+ const contentAnimation = !expandToScroll
19087
+ ? createAnimation('contentAnimation').keyframes([
19088
+ { offset: 0, opacity: 1, maxHeight: `${(1 - currentBreakpoint) * 100}%` },
19089
+ { offset: 1, opacity: 1, maxHeight: `${currentBreakpoint * 100}%` },
19090
+ ])
19091
+ : undefined;
19092
+ return { wrapperAnimation, backdropAnimation, contentAnimation };
19052
19093
  };
19053
19094
  const createSheetLeaveAnimation = (opts) => {
19054
19095
  const { currentBreakpoint, backdropBreakpoint } = opts;
@@ -19083,22 +19124,68 @@ const createEnterAnimation$1 = () => {
19083
19124
  })
19084
19125
  .afterClearStyles(['pointer-events']);
19085
19126
  const wrapperAnimation = createAnimation().fromTo('transform', 'translateY(100vh)', 'translateY(0vh)');
19086
- return { backdropAnimation, wrapperAnimation };
19127
+ return { backdropAnimation, wrapperAnimation, contentAnimation: undefined };
19087
19128
  };
19088
19129
  /**
19089
19130
  * iOS Modal Enter Animation for the Card presentation style
19090
19131
  */
19091
19132
  const iosEnterAnimation$3 = (baseEl, opts) => {
19092
- const { presentingEl, currentBreakpoint } = opts;
19133
+ const { presentingEl, currentBreakpoint, expandToScroll } = opts;
19093
19134
  const root = getElementRoot(baseEl);
19094
- const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation$1();
19135
+ const { wrapperAnimation, backdropAnimation, contentAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation$1();
19095
19136
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
19096
19137
  wrapperAnimation.addElement(root.querySelectorAll('.modal-wrapper, .modal-shadow')).beforeStyles({ opacity: 1 });
19138
+ // The content animation is only added if scrolling is enabled for
19139
+ // all the breakpoints.
19140
+ !expandToScroll && (contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.addElement(baseEl.querySelector('.ion-page')));
19097
19141
  const baseAnimation = createAnimation('entering-base')
19098
19142
  .addElement(baseEl)
19099
19143
  .easing('cubic-bezier(0.32,0.72,0,1)')
19100
19144
  .duration(500)
19101
- .addAnimation(wrapperAnimation);
19145
+ .addAnimation([wrapperAnimation])
19146
+ .beforeAddWrite(() => {
19147
+ if (expandToScroll) {
19148
+ // Scroll can only be done when the modal is fully expanded.
19149
+ return;
19150
+ }
19151
+ /**
19152
+ * There are some browsers that causes flickering when
19153
+ * dragging the content when scroll is enabled at every
19154
+ * breakpoint. This is due to the wrapper element being
19155
+ * transformed off the screen and having a snap animation.
19156
+ *
19157
+ * A workaround is to clone the footer element and append
19158
+ * it outside of the wrapper element. This way, the footer
19159
+ * is still visible and the drag can be done without
19160
+ * flickering. The original footer is hidden until the modal
19161
+ * is dismissed. This maintains the animation of the footer
19162
+ * when the modal is dismissed.
19163
+ *
19164
+ * The workaround needs to be done before the animation starts
19165
+ * so there are no flickering issues.
19166
+ */
19167
+ const ionFooter = baseEl.querySelector('ion-footer');
19168
+ /**
19169
+ * This check is needed to prevent more than one footer
19170
+ * from being appended to the shadow root.
19171
+ * Otherwise, iOS and MD enter animations would append
19172
+ * the footer twice.
19173
+ */
19174
+ const ionFooterAlreadyAppended = baseEl.shadowRoot.querySelector('ion-footer');
19175
+ if (ionFooter && !ionFooterAlreadyAppended) {
19176
+ const footerHeight = ionFooter.clientHeight;
19177
+ const clonedFooter = ionFooter.cloneNode(true);
19178
+ baseEl.shadowRoot.appendChild(clonedFooter);
19179
+ ionFooter.style.setProperty('display', 'none');
19180
+ ionFooter.setAttribute('aria-hidden', 'true');
19181
+ // Padding is added to prevent some content from being hidden.
19182
+ const page = baseEl.querySelector('.ion-page');
19183
+ page.style.setProperty('padding-bottom', `${footerHeight}px`);
19184
+ }
19185
+ });
19186
+ if (contentAnimation) {
19187
+ baseAnimation.addAnimation(contentAnimation);
19188
+ }
19102
19189
  if (presentingEl) {
19103
19190
  const isMobile = window.innerWidth < 768;
19104
19191
  const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
@@ -19176,7 +19263,7 @@ const createLeaveAnimation$1 = () => {
19176
19263
  * iOS Modal Leave Animation
19177
19264
  */
19178
19265
  const iosLeaveAnimation$3 = (baseEl, opts, duration = 500) => {
19179
- const { presentingEl, currentBreakpoint } = opts;
19266
+ const { presentingEl, currentBreakpoint, expandToScroll } = opts;
19180
19267
  const root = getElementRoot(baseEl);
19181
19268
  const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation$1();
19182
19269
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
@@ -19185,7 +19272,29 @@ const iosLeaveAnimation$3 = (baseEl, opts, duration = 500) => {
19185
19272
  .addElement(baseEl)
19186
19273
  .easing('cubic-bezier(0.32,0.72,0,1)')
19187
19274
  .duration(duration)
19188
- .addAnimation(wrapperAnimation);
19275
+ .addAnimation(wrapperAnimation)
19276
+ .beforeAddWrite(() => {
19277
+ if (expandToScroll) {
19278
+ // Scroll can only be done when the modal is fully expanded.
19279
+ return;
19280
+ }
19281
+ /**
19282
+ * If expandToScroll is disabled, we need to swap
19283
+ * the visibility to the original, so the footer
19284
+ * dismisses with the modal and doesn't stay
19285
+ * until the modal is removed from the DOM.
19286
+ */
19287
+ const ionFooter = baseEl.querySelector('ion-footer');
19288
+ if (ionFooter) {
19289
+ const clonedFooter = baseEl.shadowRoot.querySelector('ion-footer');
19290
+ ionFooter.style.removeProperty('display');
19291
+ ionFooter.removeAttribute('aria-hidden');
19292
+ clonedFooter.style.setProperty('display', 'none');
19293
+ clonedFooter.setAttribute('aria-hidden', 'true');
19294
+ const page = baseEl.querySelector('.ion-page');
19295
+ page.style.removeProperty('padding-bottom');
19296
+ }
19297
+ });
19189
19298
  if (presentingEl) {
19190
19299
  const isMobile = window.innerWidth < 768;
19191
19300
  const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
@@ -19263,22 +19372,69 @@ const createEnterAnimation = () => {
19263
19372
  { offset: 0, opacity: 0.01, transform: 'translateY(40px)' },
19264
19373
  { offset: 1, opacity: 1, transform: `translateY(0px)` },
19265
19374
  ]);
19266
- return { backdropAnimation, wrapperAnimation };
19375
+ return { backdropAnimation, wrapperAnimation, contentAnimation: undefined };
19267
19376
  };
19268
19377
  /**
19269
19378
  * Md Modal Enter Animation
19270
19379
  */
19271
19380
  const mdEnterAnimation$2 = (baseEl, opts) => {
19272
- const { currentBreakpoint } = opts;
19381
+ const { currentBreakpoint, expandToScroll } = opts;
19273
19382
  const root = getElementRoot(baseEl);
19274
- const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
19383
+ const { wrapperAnimation, backdropAnimation, contentAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
19275
19384
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
19276
19385
  wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
19277
- return createAnimation()
19386
+ // The content animation is only added if scrolling is enabled for
19387
+ // all the breakpoints.
19388
+ expandToScroll && (contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.addElement(baseEl.querySelector('.ion-page')));
19389
+ const baseAnimation = createAnimation()
19278
19390
  .addElement(baseEl)
19279
19391
  .easing('cubic-bezier(0.36,0.66,0.04,1)')
19280
19392
  .duration(280)
19281
- .addAnimation([backdropAnimation, wrapperAnimation]);
19393
+ .addAnimation([backdropAnimation, wrapperAnimation])
19394
+ .beforeAddWrite(() => {
19395
+ if (expandToScroll) {
19396
+ // Scroll can only be done when the modal is fully expanded.
19397
+ return;
19398
+ }
19399
+ /**
19400
+ * There are some browsers that causes flickering when
19401
+ * dragging the content when scroll is enabled at every
19402
+ * breakpoint. This is due to the wrapper element being
19403
+ * transformed off the screen and having a snap animation.
19404
+ *
19405
+ * A workaround is to clone the footer element and append
19406
+ * it outside of the wrapper element. This way, the footer
19407
+ * is still visible and the drag can be done without
19408
+ * flickering. The original footer is hidden until the modal
19409
+ * is dismissed. This maintains the animation of the footer
19410
+ * when the modal is dismissed.
19411
+ *
19412
+ * The workaround needs to be done before the animation starts
19413
+ * so there are no flickering issues.
19414
+ */
19415
+ const ionFooter = baseEl.querySelector('ion-footer');
19416
+ /**
19417
+ * This check is needed to prevent more than one footer
19418
+ * from being appended to the shadow root.
19419
+ * Otherwise, iOS and MD enter animations would append
19420
+ * the footer twice.
19421
+ */
19422
+ const ionFooterAlreadyAppended = baseEl.shadowRoot.querySelector('ion-footer');
19423
+ if (ionFooter && !ionFooterAlreadyAppended) {
19424
+ const footerHeight = ionFooter.clientHeight;
19425
+ const clonedFooter = ionFooter.cloneNode(true);
19426
+ baseEl.shadowRoot.appendChild(clonedFooter);
19427
+ ionFooter.style.setProperty('display', 'none');
19428
+ ionFooter.setAttribute('aria-hidden', 'true');
19429
+ // Padding is added to prevent some content from being hidden.
19430
+ const page = baseEl.querySelector('.ion-page');
19431
+ page.style.setProperty('padding-bottom', `${footerHeight}px`);
19432
+ }
19433
+ });
19434
+ if (contentAnimation) {
19435
+ baseAnimation.addAnimation(contentAnimation);
19436
+ }
19437
+ return baseAnimation;
19282
19438
  };
19283
19439
 
19284
19440
  const createLeaveAnimation = () => {
@@ -19293,18 +19449,41 @@ const createLeaveAnimation = () => {
19293
19449
  * Md Modal Leave Animation
19294
19450
  */
19295
19451
  const mdLeaveAnimation$2 = (baseEl, opts) => {
19296
- const { currentBreakpoint } = opts;
19452
+ const { currentBreakpoint, expandToScroll } = opts;
19297
19453
  const root = getElementRoot(baseEl);
19298
19454
  const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation();
19299
19455
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
19300
19456
  wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
19301
- return createAnimation()
19457
+ const baseAnimation = createAnimation()
19302
19458
  .easing('cubic-bezier(0.47,0,0.745,0.715)')
19303
19459
  .duration(200)
19304
- .addAnimation([backdropAnimation, wrapperAnimation]);
19460
+ .addAnimation([backdropAnimation, wrapperAnimation])
19461
+ .beforeAddWrite(() => {
19462
+ if (expandToScroll) {
19463
+ // Scroll can only be done when the modal is fully expanded.
19464
+ return;
19465
+ }
19466
+ /**
19467
+ * If expandToScroll is disabled, we need to swap
19468
+ * the visibility to the original, so the footer
19469
+ * dismisses with the modal and doesn't stay
19470
+ * until the modal is removed from the DOM.
19471
+ */
19472
+ const ionFooter = baseEl.querySelector('ion-footer');
19473
+ if (ionFooter) {
19474
+ const clonedFooter = baseEl.shadowRoot.querySelector('ion-footer');
19475
+ ionFooter.style.removeProperty('display');
19476
+ ionFooter.removeAttribute('aria-hidden');
19477
+ clonedFooter.style.setProperty('display', 'none');
19478
+ clonedFooter.setAttribute('aria-hidden', 'true');
19479
+ const page = baseEl.querySelector('.ion-page');
19480
+ page.style.removeProperty('padding-bottom');
19481
+ }
19482
+ });
19483
+ return baseAnimation;
19305
19484
  };
19306
19485
 
19307
- const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], getCurrentBreakpoint, onDismiss, onBreakpointChange) => {
19486
+ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, backdropBreakpoint, animation, breakpoints = [], expandToScroll, getCurrentBreakpoint, onDismiss, onBreakpointChange) => {
19308
19487
  // Defaults for the sheet swipe animation
19309
19488
  const defaultBackdrop = [
19310
19489
  { offset: 0, opacity: 'var(--backdrop-opacity)' },
@@ -19321,6 +19500,10 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19321
19500
  { offset: 1, transform: 'translateY(100%)' },
19322
19501
  ],
19323
19502
  BACKDROP_KEYFRAMES: backdropBreakpoint !== 0 ? customBackdrop : defaultBackdrop,
19503
+ CONTENT_KEYFRAMES: [
19504
+ { offset: 0, maxHeight: '100%' },
19505
+ { offset: 1, maxHeight: '0%' },
19506
+ ],
19324
19507
  };
19325
19508
  const contentEl = baseEl.querySelector('ion-content');
19326
19509
  const height = wrapperEl.clientHeight;
@@ -19328,10 +19511,11 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19328
19511
  let offset = 0;
19329
19512
  let canDismissBlocksGesture = false;
19330
19513
  const canDismissMaxStep = 0.95;
19331
- const wrapperAnimation = animation.childAnimations.find((ani) => ani.id === 'wrapperAnimation');
19332
- const backdropAnimation = animation.childAnimations.find((ani) => ani.id === 'backdropAnimation');
19333
19514
  const maxBreakpoint = breakpoints[breakpoints.length - 1];
19334
19515
  const minBreakpoint = breakpoints[0];
19516
+ const wrapperAnimation = animation.childAnimations.find((ani) => ani.id === 'wrapperAnimation');
19517
+ const backdropAnimation = animation.childAnimations.find((ani) => ani.id === 'backdropAnimation');
19518
+ const contentAnimation = animation.childAnimations.find((ani) => ani.id === 'contentAnimation');
19335
19519
  const enableBackdrop = () => {
19336
19520
  baseEl.style.setProperty('pointer-events', 'auto');
19337
19521
  backdropEl.style.setProperty('pointer-events', 'auto');
@@ -19354,6 +19538,31 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19354
19538
  */
19355
19539
  baseEl.classList.add(FOCUS_TRAP_DISABLE_CLASS);
19356
19540
  };
19541
+ /**
19542
+ * Toggles the visible modal footer when `expandToScroll` is disabled.
19543
+ * @param footer The footer to show.
19544
+ */
19545
+ const swapFooterVisibility = (footer) => {
19546
+ const originalFooter = baseEl.querySelector('ion-footer');
19547
+ if (!originalFooter) {
19548
+ return;
19549
+ }
19550
+ const clonedFooter = wrapperEl.nextElementSibling;
19551
+ const footerToHide = footer === 'original' ? clonedFooter : originalFooter;
19552
+ const footerToShow = footer === 'original' ? originalFooter : clonedFooter;
19553
+ footerToShow.style.removeProperty('display');
19554
+ footerToShow.removeAttribute('aria-hidden');
19555
+ const page = baseEl.querySelector('.ion-page');
19556
+ if (footer === 'original') {
19557
+ page.style.removeProperty('padding-bottom');
19558
+ }
19559
+ else {
19560
+ const pagePadding = footerToShow.clientHeight;
19561
+ page.style.setProperty('padding-bottom', `${pagePadding}px`);
19562
+ }
19563
+ footerToHide.style.setProperty('display', 'none');
19564
+ footerToHide.setAttribute('aria-hidden', 'true');
19565
+ };
19357
19566
  /**
19358
19567
  * After the entering animation completes,
19359
19568
  * we need to set the animation to go from
@@ -19365,6 +19574,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19365
19574
  if (wrapperAnimation && backdropAnimation) {
19366
19575
  wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
19367
19576
  backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
19577
+ contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.keyframes([...SheetDefaults.CONTENT_KEYFRAMES]);
19368
19578
  animation.progressStart(true, 1 - currentBreakpoint);
19369
19579
  /**
19370
19580
  * If backdrop is not enabled, then content
@@ -19381,7 +19591,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19381
19591
  disableBackdrop();
19382
19592
  }
19383
19593
  }
19384
- if (contentEl && currentBreakpoint !== maxBreakpoint) {
19594
+ if (contentEl && currentBreakpoint !== maxBreakpoint && expandToScroll) {
19385
19595
  contentEl.scrollY = false;
19386
19596
  }
19387
19597
  const canStart = (detail) => {
@@ -19395,6 +19605,13 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19395
19605
  */
19396
19606
  const contentEl = findClosestIonContent(detail.event.target);
19397
19607
  currentBreakpoint = getCurrentBreakpoint();
19608
+ /**
19609
+ * If we have expandToScroll disabled, we should not allow the swipe gesture to start
19610
+ * if the content is being swiped.
19611
+ */
19612
+ if (!expandToScroll && contentEl) {
19613
+ return false;
19614
+ }
19398
19615
  if (currentBreakpoint === 1 && contentEl) {
19399
19616
  /**
19400
19617
  * The modal should never swipe to close on the content with a refresher.
@@ -19425,6 +19642,15 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19425
19642
  * Remove undefined check
19426
19643
  */
19427
19644
  canDismissBlocksGesture = baseEl.canDismiss !== undefined && baseEl.canDismiss !== true && minBreakpoint === 0;
19645
+ /**
19646
+ * If expandToScroll is disabled, we need to swap
19647
+ * the footer visibility to the original, so if the modal
19648
+ * is dismissed, the footer dismisses with the modal
19649
+ * and doesn't stay on the screen after the modal is gone.
19650
+ */
19651
+ if (!expandToScroll) {
19652
+ swapFooterVisibility('original');
19653
+ }
19428
19654
  /**
19429
19655
  * If we are pulling down, then it is possible we are pulling on the content.
19430
19656
  * We do not want scrolling to happen at the same time as the gesture.
@@ -19540,6 +19766,19 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19540
19766
  opacity: `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(snapToBreakpoint, backdropBreakpoint)})`,
19541
19767
  },
19542
19768
  ]);
19769
+ if (contentAnimation) {
19770
+ /**
19771
+ * The modal content should scroll at any breakpoint when expandToScroll
19772
+ * is disabled. In order to do this, the content needs to be completely
19773
+ * viewable so scrolling can access everything. Otherwise, the default
19774
+ * behavior would show the content off the screen and only allow
19775
+ * scrolling when the sheet is fully expanded.
19776
+ */
19777
+ contentAnimation.keyframes([
19778
+ { offset: 0, maxHeight: `${(1 - breakpointOffset) * 100}%` },
19779
+ { offset: 1, maxHeight: `${snapToBreakpoint * 100}%` },
19780
+ ]);
19781
+ }
19543
19782
  animation.progressStep(0);
19544
19783
  }
19545
19784
  /**
@@ -19547,6 +19786,14 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19547
19786
  * snapping animation completes.
19548
19787
  */
19549
19788
  gesture.enable(false);
19789
+ /**
19790
+ * If expandToScroll is disabled, we need to swap
19791
+ * the footer visibility to the cloned one so the footer
19792
+ * doesn't flicker when the sheet's height is animated.
19793
+ */
19794
+ if (!expandToScroll && shouldRemainOpen) {
19795
+ swapFooterVisibility('cloned');
19796
+ }
19550
19797
  if (shouldPreventDismiss) {
19551
19798
  handleCanDismiss(baseEl, animation);
19552
19799
  }
@@ -19554,13 +19801,13 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19554
19801
  onDismiss();
19555
19802
  }
19556
19803
  /**
19557
- * If the sheet is going to be fully expanded then we should enable
19558
- * scrolling immediately. The sheet modal animation takes ~500ms to finish
19559
- * so if we wait until then there is a visible delay for when scrolling is
19560
- * re-enabled. Native iOS allows for scrolling on the sheet modal as soon
19561
- * as the gesture is released, so we align with that.
19804
+ * Enables scrolling immediately if the sheet is about to fully expand
19805
+ * or if it allows scrolling at any breakpoint. Without this, there would
19806
+ * be a ~500ms delay while the modal animation completes, causing a
19807
+ * noticeable lag. Native iOS allows scrolling as soon as the gesture is
19808
+ * released, so we align with that behavior.
19562
19809
  */
19563
- if (contentEl && snapToBreakpoint === breakpoints[breakpoints.length - 1]) {
19810
+ if (contentEl && (snapToBreakpoint === breakpoints[breakpoints.length - 1] || !expandToScroll)) {
19564
19811
  contentEl.scrollY = true;
19565
19812
  }
19566
19813
  return new Promise((resolve) => {
@@ -19578,6 +19825,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19578
19825
  raf(() => {
19579
19826
  wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
19580
19827
  backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
19828
+ contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.keyframes([...SheetDefaults.CONTENT_KEYFRAMES]);
19581
19829
  animation.progressStart(true, 1 - snapToBreakpoint);
19582
19830
  currentBreakpoint = snapToBreakpoint;
19583
19831
  onBreakpointChange(currentBreakpoint);
@@ -19630,10 +19878,10 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19630
19878
  };
19631
19879
  };
19632
19880
 
19633
- 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}";
19881
+ 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}";
19634
19882
  var IonModalIosStyle0 = modalIosCss;
19635
19883
 
19636
- 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}";
19884
+ 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}";
19637
19885
  var IonModalMdStyle0 = modalMdCss;
19638
19886
 
19639
19887
  // TODO(FW-2832): types
@@ -19712,6 +19960,7 @@ class Modal {
19712
19960
  this.enterAnimation = undefined;
19713
19961
  this.leaveAnimation = undefined;
19714
19962
  this.breakpoints = undefined;
19963
+ this.expandToScroll = true;
19715
19964
  this.initialBreakpoint = undefined;
19716
19965
  this.backdropBreakpoint = 0;
19717
19966
  this.handle = undefined;
@@ -19927,6 +20176,7 @@ class Modal {
19927
20176
  presentingEl: presentingElement,
19928
20177
  currentBreakpoint: this.initialBreakpoint,
19929
20178
  backdropBreakpoint: this.backdropBreakpoint,
20179
+ expandToScroll: this.expandToScroll,
19930
20180
  });
19931
20181
  /* tslint:disable-next-line */
19932
20182
  if (typeof window !== 'undefined') {
@@ -19977,7 +20227,10 @@ class Modal {
19977
20227
  // should be in the DOM and referenced by now, except
19978
20228
  // for the presenting el
19979
20229
  const animationBuilder = this.leaveAnimation || config.get('modalLeave', iosLeaveAnimation$3);
19980
- const ani = (this.animation = animationBuilder(el, { presentingEl: this.presentingElement }));
20230
+ const ani = (this.animation = animationBuilder(el, {
20231
+ presentingEl: this.presentingElement,
20232
+ expandToScroll: this.expandToScroll,
20233
+ }));
19981
20234
  const contentEl = findIonContent(el);
19982
20235
  if (!contentEl) {
19983
20236
  printIonContentErrorMsg(el);
@@ -20022,9 +20275,10 @@ class Modal {
20022
20275
  presentingEl: this.presentingElement,
20023
20276
  currentBreakpoint: initialBreakpoint,
20024
20277
  backdropBreakpoint,
20278
+ expandToScroll: this.expandToScroll,
20025
20279
  }));
20026
20280
  ani.progressStart(true, 1);
20027
- 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) => {
20281
+ 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) => {
20028
20282
  if (this.currentBreakpoint !== breakpoint) {
20029
20283
  this.currentBreakpoint = breakpoint;
20030
20284
  this.ionBreakpointDidChange.emit({ breakpoint });
@@ -20102,6 +20356,7 @@ class Modal {
20102
20356
  presentingEl: presentingElement,
20103
20357
  currentBreakpoint: (_a = this.currentBreakpoint) !== null && _a !== void 0 ? _a : this.initialBreakpoint,
20104
20358
  backdropBreakpoint: this.backdropBreakpoint,
20359
+ expandToScroll: this.expandToScroll,
20105
20360
  });
20106
20361
  if (dismissed) {
20107
20362
  const { delegate } = this.getDelegate();
@@ -20187,23 +20442,23 @@ class Modal {
20187
20442
  return true;
20188
20443
  }
20189
20444
  render() {
20190
- const { handle, isSheetModal, presentingElement, htmlAttributes, handleBehavior, inheritedAttributes, focusTrap } = this;
20445
+ const { handle, isSheetModal, presentingElement, htmlAttributes, handleBehavior, inheritedAttributes, focusTrap, expandToScroll, } = this;
20191
20446
  const showHandle = handle !== false && isSheetModal;
20192
20447
  const mode = getIonMode$1(this);
20193
20448
  const isCardModal = presentingElement !== undefined && mode === 'ios';
20194
20449
  const isHandleCycle = handleBehavior === 'cycle';
20195
- return (hAsync(Host, Object.assign({ key: 'b4da5111fe4719fa450c39b2d4bd884a302a7924', "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
20450
+ return (hAsync(Host, Object.assign({ key: 'ff15df63e72caaeb0a4ad68e9eedeaaa7d3f3bde', "no-router": true, tabindex: "-1" }, htmlAttributes, { style: {
20196
20451
  zIndex: `${20000 + this.overlayIndex}`,
20197
- }, 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',
20452
+ }, 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',
20198
20453
  /*
20199
20454
  role and aria-modal must be used on the
20200
20455
  same element. They must also be set inside the
20201
20456
  shadow DOM otherwise ion-button will not be highlighted
20202
20457
  when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
20203
20458
  */
20204
- 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",
20459
+ 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",
20205
20460
  // Prevents the handle from receiving keyboard focus when it does not cycle
20206
- 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' }))));
20461
+ 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' }))));
20207
20462
  }
20208
20463
  get el() { return getElement(this); }
20209
20464
  static get watchers() { return {
@@ -20225,6 +20480,7 @@ class Modal {
20225
20480
  "enterAnimation": [16],
20226
20481
  "leaveAnimation": [16],
20227
20482
  "breakpoints": [16],
20483
+ "expandToScroll": [4, "expand-to-scroll"],
20228
20484
  "initialBreakpoint": [2, "initial-breakpoint"],
20229
20485
  "backdropBreakpoint": [2, "backdrop-breakpoint"],
20230
20486
  "handle": [4],
@@ -29325,35 +29581,7 @@ class SegmentButton {
29325
29581
  valueChanged() {
29326
29582
  this.updateState();
29327
29583
  }
29328
- waitForSegmentContent(ionSegment, contentId) {
29329
- return new Promise((resolve, reject) => {
29330
- let timeoutId = undefined;
29331
- let animationFrameId;
29332
- const check = () => {
29333
- if (!ionSegment) {
29334
- reject(new Error(`Segment not found when looking for Segment Content`));
29335
- return;
29336
- }
29337
- const segmentView = getNextSiblingOfType(ionSegment); // Skip the text nodes
29338
- const segmentContent = segmentView === null || segmentView === void 0 ? void 0 : segmentView.querySelector(`ion-segment-content[id="${contentId}"]`);
29339
- if (segmentContent && timeoutId) {
29340
- clearTimeout(timeoutId); // Clear the timeout if the segmentContent is found
29341
- cancelAnimationFrame(animationFrameId);
29342
- resolve(segmentContent);
29343
- }
29344
- else {
29345
- animationFrameId = requestAnimationFrame(check); // Keep checking on the next animation frame
29346
- }
29347
- };
29348
- check();
29349
- // Set a timeout to reject the promise
29350
- timeoutId = setTimeout(() => {
29351
- cancelAnimationFrame(animationFrameId);
29352
- reject(new Error(`Unable to find Segment Content with id="${contentId} within 1000 ms`));
29353
- }, 1000);
29354
- });
29355
- }
29356
- async connectedCallback() {
29584
+ connectedCallback() {
29357
29585
  const segmentEl = (this.segmentEl = this.el.closest('ion-segment'));
29358
29586
  if (segmentEl) {
29359
29587
  this.updateState();
@@ -29363,14 +29591,11 @@ class SegmentButton {
29363
29591
  // Return if there is no contentId defined
29364
29592
  if (!this.contentId)
29365
29593
  return;
29366
- let segmentContent;
29367
- try {
29368
- // Attempt to find the Segment Content by its contentId
29369
- segmentContent = await this.waitForSegmentContent(segmentEl, this.contentId);
29370
- }
29371
- catch (error) {
29372
- // If no associated Segment Content exists, log an error and return
29373
- console.error('Segment Button: ', error.message);
29594
+ // Attempt to find the Segment Content by its contentId
29595
+ const segmentContent = document.getElementById(this.contentId);
29596
+ // If no associated Segment Content exists, log an error and return
29597
+ if (!segmentContent) {
29598
+ console.error(`Segment Button: Unable to find Segment Content with id="${this.contentId}".`);
29374
29599
  return;
29375
29600
  }
29376
29601
  // Ensure the found element is a valid ION-SEGMENT-CONTENT
@@ -29416,7 +29641,7 @@ class SegmentButton {
29416
29641
  const { checked, type, disabled, hasIcon, hasLabel, layout, segmentEl } = this;
29417
29642
  const mode = getIonMode$1(this);
29418
29643
  const hasSegmentColor = () => (segmentEl === null || segmentEl === void 0 ? void 0 : segmentEl.color) !== undefined;
29419
- return (hAsync(Host, { key: 'f9da656c8eccb80e4ef30e3fa977f2dbbefbc988', class: {
29644
+ return (hAsync(Host, { key: 'd50a5d5e2f6206e8523598f258d8217d2903f69b', class: {
29420
29645
  [mode]: true,
29421
29646
  'in-toolbar': hostContext('ion-toolbar', this.el),
29422
29647
  'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
@@ -29432,7 +29657,7 @@ class SegmentButton {
29432
29657
  'ion-activatable': true,
29433
29658
  'ion-activatable-instant': true,
29434
29659
  'ion-focusable': true,
29435
- } }, 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" }))));
29660
+ } }, 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" }))));
29436
29661
  }
29437
29662
  get el() { return getElement(this); }
29438
29663
  static get watchers() { return {
@@ -29699,6 +29924,7 @@ class Select {
29699
29924
  this.expandedIcon = undefined;
29700
29925
  this.shape = undefined;
29701
29926
  this.value = undefined;
29927
+ this.required = false;
29702
29928
  }
29703
29929
  styleChanged() {
29704
29930
  this.emitStyle();
@@ -30183,8 +30409,8 @@ class Select {
30183
30409
  return renderedLabel;
30184
30410
  }
30185
30411
  renderListbox() {
30186
- const { disabled, inputId, isExpanded } = this;
30187
- 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) }));
30412
+ const { disabled, inputId, isExpanded, required } = this;
30413
+ 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) }));
30188
30414
  }
30189
30415
  render() {
30190
30416
  const { disabled, el, isExpanded, expandedIcon, labelPlacement, justify, placeholder, fill, shape, name, value } = this;
@@ -30215,7 +30441,7 @@ class Select {
30215
30441
  * TODO(FW-5592): Remove hasStartEndSlots condition
30216
30442
  */
30217
30443
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || isExpanded || hasStartEndSlots));
30218
- return (hAsync(Host, { key: '144dfa5c49549a74fe516c65b9b8104a477ac789', onClick: this.onClick, class: createColorClasses$1(this.color, {
30444
+ return (hAsync(Host, { key: '491cf1b0e3aa31e7c9cfad3e87d83eb54272312a', onClick: this.onClick, class: createColorClasses$1(this.color, {
30219
30445
  [mode]: true,
30220
30446
  'in-item': inItem,
30221
30447
  'in-item-color': hostContext('ion-item.ion-color', el),
@@ -30231,7 +30457,7 @@ class Select {
30231
30457
  [`select-justify-${justify}`]: justifyEnabled,
30232
30458
  [`select-shape-${shape}`]: shape !== undefined,
30233
30459
  [`select-label-placement-${labelPlacement}`]: true,
30234
- }) }, 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" }))));
30460
+ }) }, 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" }))));
30235
30461
  }
30236
30462
  get el() { return getElement(this); }
30237
30463
  static get watchers() { return {
@@ -30267,6 +30493,7 @@ class Select {
30267
30493
  "expandedIcon": [1, "expanded-icon"],
30268
30494
  "shape": [1],
30269
30495
  "value": [1032],
30496
+ "required": [4],
30270
30497
  "isExpanded": [32],
30271
30498
  "open": [64]
30272
30499
  },
@@ -32663,6 +32890,7 @@ class Toggle {
32663
32890
  this.labelPlacement = 'start';
32664
32891
  this.justify = undefined;
32665
32892
  this.alignment = undefined;
32893
+ this.required = false;
32666
32894
  }
32667
32895
  disabledChanged() {
32668
32896
  if (this.gesture) {
@@ -32744,12 +32972,12 @@ class Toggle {
32744
32972
  return this.el.textContent !== '';
32745
32973
  }
32746
32974
  render() {
32747
- const { activated, color, checked, disabled, el, justify, labelPlacement, inputId, name, alignment } = this;
32975
+ const { activated, color, checked, disabled, el, justify, labelPlacement, inputId, name, alignment, required } = this;
32748
32976
  const mode = getIonMode$1(this);
32749
32977
  const value = this.getValue();
32750
32978
  const rtl = isRTL$1(el) ? 'rtl' : 'ltr';
32751
32979
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
32752
- return (hAsync(Host, { key: 'f52195ec3bc14c024647cb41319c32a4cd330e19', onClick: this.onClick, class: createColorClasses$1(color, {
32980
+ return (hAsync(Host, { key: 'ed75573caa6e37011f1453dd7f723fb9bd8a3656', onClick: this.onClick, class: createColorClasses$1(color, {
32753
32981
  [mode]: true,
32754
32982
  'in-item': hostContext('ion-item', el),
32755
32983
  'toggle-activated': activated,
@@ -32759,10 +32987,10 @@ class Toggle {
32759
32987
  [`toggle-alignment-${alignment}`]: alignment !== undefined,
32760
32988
  [`toggle-label-placement-${labelPlacement}`]: true,
32761
32989
  [`toggle-${rtl}`]: true,
32762
- }) }, 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: {
32990
+ }) }, 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: {
32763
32991
  'label-text-wrapper': true,
32764
32992
  'label-text-wrapper-hidden': !this.hasLabel,
32765
- }, part: "label" }, hAsync("slot", { key: '80a6672e2e792c15011a9496dcd75363cdba31c6' })), hAsync("div", { key: '2b2b318b38ab27b194c0dab4cecd77d9d780f2ca', class: "native-wrapper" }, this.renderToggleControl()))));
32993
+ }, part: "label" }, hAsync("slot", { key: '9495a4a39889822ee68e0d89dc5a2f863d1feb3c' })), hAsync("div", { key: '55f1eb08c4b705e94fbcf02220bbe1d292f06155', class: "native-wrapper" }, this.renderToggleControl()))));
32766
32994
  }
32767
32995
  get el() { return getElement(this); }
32768
32996
  static get watchers() { return {
@@ -32785,6 +33013,7 @@ class Toggle {
32785
33013
  "labelPlacement": [1, "label-placement"],
32786
33014
  "justify": [1],
32787
33015
  "alignment": [1],
33016
+ "required": [4],
32788
33017
  "activated": [32]
32789
33018
  },
32790
33019
  "$listeners$": undefined,
@@ -32816,6 +33045,10 @@ var IonToolbarMdStyle0 = toolbarMdCss;
32816
33045
  * @slot secondary - Content is placed to the left of the toolbar text in `ios` mode, and directly to the right in `md` mode.
32817
33046
  * @slot primary - Content is placed to the right of the toolbar text in `ios` mode, and to the far right in `md` mode.
32818
33047
  * @slot end - Content is placed to the right of the toolbar text in LTR, and to the left in RTL.
33048
+ *
33049
+ * @part background - The background of the toolbar, covering the entire area behind the toolbar content.
33050
+ * @part container - The container that wraps all toolbar content, including the default slot and named slot content.
33051
+ * @part content - The container for the default slot, wrapping content provided without a named slot.
32819
33052
  */
32820
33053
  class Toolbar {
32821
33054
  constructor(hostRef) {
@@ -32866,10 +33099,10 @@ class Toolbar {
32866
33099
  this.childrenStyles.forEach((value) => {
32867
33100
  Object.assign(childStyles, value);
32868
33101
  });
32869
- return (hAsync(Host, { key: '462538a5ecd01baf3cde116c9f029aeda26c81be', class: Object.assign(Object.assign({}, childStyles), createColorClasses$1(this.color, {
33102
+ return (hAsync(Host, { key: '4fdc9ae82a93237cc28ceb95b0ebd8069b62839d', class: Object.assign(Object.assign({}, childStyles), createColorClasses$1(this.color, {
32870
33103
  [mode]: true,
32871
33104
  'in-toolbar': hostContext('ion-toolbar', this.el),
32872
- })) }, 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" }))));
33105
+ })) }, 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" }))));
32873
33106
  }
32874
33107
  get el() { return getElement(this); }
32875
33108
  static get style() { return {