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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (369) hide show
  1. package/components/checkbox.js +40 -6
  2. package/components/helpers.js +1 -11
  3. package/components/index6.js +11 -3
  4. package/components/index9.js +1 -1
  5. package/components/ion-segment-button.js +9 -40
  6. package/components/ion-select.js +16 -41
  7. package/components/ion-toggle.js +6 -4
  8. package/components/modal.js +259 -35
  9. package/components/toolbar.js +2 -2
  10. package/css/core.css.map +1 -1
  11. package/css/ionic.bundle.css.map +1 -1
  12. package/dist/cjs/{data-21dc0f81.js → data-108e531d.js} +1 -1
  13. package/dist/cjs/{framework-delegate-05579976.js → framework-delegate-55f5683a.js} +1 -1
  14. package/dist/cjs/{helpers-4be3f90d.js → helpers-afaa9001.js} +0 -11
  15. package/dist/cjs/{index-c441c903.js → index-0d762bba.js} +2 -2
  16. package/dist/cjs/{index-5915f9b3.js → index-2a46a047.js} +11 -3
  17. package/dist/cjs/{index-1ae3f40a.js → index-3652c918.js} +2 -2
  18. package/dist/cjs/{index-ad7a712e.js → index-9509ecad.js} +1 -1
  19. package/dist/cjs/{index-4e14a46e.js → index-e975c92b.js} +4 -4
  20. package/dist/cjs/index.cjs.js +8 -8
  21. package/dist/cjs/{input-shims-e748a364.js → input-shims-cd05268a.js} +5 -3
  22. package/dist/cjs/{input.utils-74e4ec28.js → input.utils-ffb2f81b.js} +2 -2
  23. package/dist/cjs/ion-accordion_2.cjs.entry.js +2 -2
  24. package/dist/cjs/ion-action-sheet.cjs.entry.js +4 -4
  25. package/dist/cjs/ion-alert.cjs.entry.js +4 -4
  26. package/dist/cjs/ion-app_8.cjs.entry.js +11 -11
  27. package/dist/cjs/ion-back-button.cjs.entry.js +1 -1
  28. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +1 -1
  29. package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
  30. package/dist/cjs/ion-card_5.cjs.entry.js +1 -1
  31. package/dist/cjs/ion-checkbox.cjs.entry.js +38 -7
  32. package/dist/cjs/ion-datetime-button.cjs.entry.js +3 -3
  33. package/dist/cjs/ion-datetime_3.cjs.entry.js +5 -5
  34. package/dist/cjs/ion-fab_3.cjs.entry.js +1 -1
  35. package/dist/cjs/ion-img.cjs.entry.js +1 -1
  36. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +3 -3
  37. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +1 -1
  38. package/dist/cjs/ion-input.cjs.entry.js +4 -4
  39. package/dist/cjs/ion-item-option_3.cjs.entry.js +3 -3
  40. package/dist/cjs/ion-item_8.cjs.entry.js +1 -1
  41. package/dist/cjs/ion-loading.cjs.entry.js +4 -4
  42. package/dist/cjs/ion-menu_3.cjs.entry.js +5 -5
  43. package/dist/cjs/ion-modal.cjs.entry.js +264 -41
  44. package/dist/cjs/ion-nav_2.cjs.entry.js +5 -5
  45. package/dist/cjs/ion-picker-column-option.cjs.entry.js +1 -1
  46. package/dist/cjs/ion-picker-column.cjs.entry.js +1 -1
  47. package/dist/cjs/ion-picker.cjs.entry.js +1 -1
  48. package/dist/cjs/ion-popover.cjs.entry.js +5 -5
  49. package/dist/cjs/ion-progress-bar.cjs.entry.js +1 -1
  50. package/dist/cjs/ion-radio_2.cjs.entry.js +1 -1
  51. package/dist/cjs/ion-range.cjs.entry.js +3 -3
  52. package/dist/cjs/ion-refresher_2.cjs.entry.js +3 -3
  53. package/dist/cjs/ion-reorder_2.cjs.entry.js +3 -3
  54. package/dist/cjs/ion-route_4.cjs.entry.js +1 -1
  55. package/dist/cjs/ion-searchbar.cjs.entry.js +1 -1
  56. package/dist/cjs/ion-segment_2.cjs.entry.js +9 -40
  57. package/dist/cjs/ion-select-modal.cjs.entry.js +4 -4
  58. package/dist/cjs/ion-select_3.cjs.entry.js +19 -45
  59. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +1 -1
  60. package/dist/cjs/ion-tab_2.cjs.entry.js +2 -2
  61. package/dist/cjs/ion-textarea.cjs.entry.js +4 -4
  62. package/dist/cjs/ion-toast.cjs.entry.js +4 -4
  63. package/dist/cjs/ion-toggle.cjs.entry.js +6 -5
  64. package/dist/cjs/ionic.cjs.js +1 -1
  65. package/dist/cjs/{ios.transition-afdec89f.js → ios.transition-0e664e88.js} +3 -3
  66. package/dist/cjs/loader.cjs.js +1 -1
  67. package/dist/cjs/{md.transition-9f0d3db5.js → md.transition-2e8aef2c.js} +3 -3
  68. package/dist/cjs/{notch-controller-a0c464d1.js → notch-controller-d69150f5.js} +1 -1
  69. package/dist/cjs/{overlays-76b29cd4.js → overlays-65fdaff6.js} +3 -3
  70. package/dist/cjs/{status-tap-fb807fad.js → status-tap-d74f1429.js} +4 -3
  71. package/dist/cjs/{swipe-back-47a52b83.js → swipe-back-0303a5e4.js} +1 -1
  72. package/dist/collection/components/checkbox/checkbox.ios.css +52 -15
  73. package/dist/collection/components/checkbox/checkbox.js +90 -4
  74. package/dist/collection/components/checkbox/checkbox.md.css +52 -15
  75. package/dist/collection/components/modal/animations/ios.enter.js +50 -4
  76. package/dist/collection/components/modal/animations/ios.leave.js +24 -2
  77. package/dist/collection/components/modal/animations/md.enter.js +52 -5
  78. package/dist/collection/components/modal/animations/md.leave.js +26 -3
  79. package/dist/collection/components/modal/animations/sheet.js +11 -2
  80. package/dist/collection/components/modal/gestures/sheet.js +79 -10
  81. package/dist/collection/components/modal/modal.ios.css +16 -0
  82. package/dist/collection/components/modal/modal.js +32 -7
  83. package/dist/collection/components/modal/modal.md.css +6 -0
  84. package/dist/collection/components/segment-button/segment-button.js +9 -40
  85. package/dist/collection/components/select/select.js +32 -40
  86. package/dist/collection/components/toggle/toggle.js +23 -4
  87. package/dist/collection/components/toolbar/toolbar.js +6 -2
  88. package/dist/collection/utils/helpers.js +0 -10
  89. package/dist/collection/utils/logging/index.js +10 -3
  90. package/dist/docs.json +187 -2
  91. package/dist/esm/{data-ae11fd43.js → data-b3284b5e.js} +1 -1
  92. package/dist/esm/{framework-delegate-f683816e.js → framework-delegate-63d1a679.js} +1 -1
  93. package/dist/esm/{helpers-9b49d7d2.js → helpers-da915de8.js} +1 -11
  94. package/dist/esm/{index-7ec5519a.js → index-2f7fde3d.js} +4 -4
  95. package/dist/esm/{index-9b0d46f4.js → index-6ad967f3.js} +11 -3
  96. package/dist/esm/{index-5a0f5fd0.js → index-79b30591.js} +1 -1
  97. package/dist/esm/{index-8785a9c6.js → index-cb21eccb.js} +2 -2
  98. package/dist/esm/{index-33f7e3ff.js → index-efb8ecdf.js} +2 -2
  99. package/dist/esm/index.js +8 -8
  100. package/dist/esm/{input-shims-0e65111b.js → input-shims-2fd7c6ef.js} +5 -3
  101. package/dist/esm/{input.utils-1ad8dafc.js → input.utils-961c9f17.js} +2 -2
  102. package/dist/esm/ion-accordion_2.entry.js +2 -2
  103. package/dist/esm/ion-action-sheet.entry.js +4 -4
  104. package/dist/esm/ion-alert.entry.js +4 -4
  105. package/dist/esm/ion-app_8.entry.js +11 -11
  106. package/dist/esm/ion-back-button.entry.js +1 -1
  107. package/dist/esm/ion-breadcrumb_2.entry.js +1 -1
  108. package/dist/esm/ion-button_2.entry.js +2 -2
  109. package/dist/esm/ion-card_5.entry.js +1 -1
  110. package/dist/esm/ion-checkbox.entry.js +38 -7
  111. package/dist/esm/ion-datetime-button.entry.js +3 -3
  112. package/dist/esm/ion-datetime_3.entry.js +5 -5
  113. package/dist/esm/ion-fab_3.entry.js +1 -1
  114. package/dist/esm/ion-img.entry.js +1 -1
  115. package/dist/esm/ion-infinite-scroll_2.entry.js +3 -3
  116. package/dist/esm/ion-input-password-toggle.entry.js +1 -1
  117. package/dist/esm/ion-input.entry.js +4 -4
  118. package/dist/esm/ion-item-option_3.entry.js +3 -3
  119. package/dist/esm/ion-item_8.entry.js +1 -1
  120. package/dist/esm/ion-loading.entry.js +4 -4
  121. package/dist/esm/ion-menu_3.entry.js +5 -5
  122. package/dist/esm/ion-modal.entry.js +264 -41
  123. package/dist/esm/ion-nav_2.entry.js +5 -5
  124. package/dist/esm/ion-picker-column-option.entry.js +1 -1
  125. package/dist/esm/ion-picker-column.entry.js +1 -1
  126. package/dist/esm/ion-picker.entry.js +1 -1
  127. package/dist/esm/ion-popover.entry.js +5 -5
  128. package/dist/esm/ion-progress-bar.entry.js +1 -1
  129. package/dist/esm/ion-radio_2.entry.js +1 -1
  130. package/dist/esm/ion-range.entry.js +3 -3
  131. package/dist/esm/ion-refresher_2.entry.js +3 -3
  132. package/dist/esm/ion-reorder_2.entry.js +3 -3
  133. package/dist/esm/ion-route_4.entry.js +1 -1
  134. package/dist/esm/ion-searchbar.entry.js +1 -1
  135. package/dist/esm/ion-segment_2.entry.js +9 -40
  136. package/dist/esm/ion-select-modal.entry.js +4 -4
  137. package/dist/esm/ion-select_3.entry.js +19 -45
  138. package/dist/esm/ion-tab-bar_2.entry.js +1 -1
  139. package/dist/esm/ion-tab_2.entry.js +2 -2
  140. package/dist/esm/ion-textarea.entry.js +4 -4
  141. package/dist/esm/ion-toast.entry.js +4 -4
  142. package/dist/esm/ion-toggle.entry.js +6 -5
  143. package/dist/esm/ionic.js +1 -1
  144. package/dist/esm/{ios.transition-085853ff.js → ios.transition-b1da3753.js} +3 -3
  145. package/dist/esm/loader.js +1 -1
  146. package/dist/esm/{md.transition-33826623.js → md.transition-571b3859.js} +3 -3
  147. package/dist/esm/{notch-controller-3dc61260.js → notch-controller-55b09e11.js} +1 -1
  148. package/dist/esm/{overlays-e3d0d356.js → overlays-5deab4de.js} +3 -3
  149. package/dist/esm/{status-tap-163e8128.js → status-tap-79eac0ac.js} +4 -3
  150. package/dist/esm/{swipe-back-23ee7ab1.js → swipe-back-e5394307.js} +1 -1
  151. package/dist/esm-es5/{data-ae11fd43.js → data-b3284b5e.js} +1 -1
  152. package/dist/esm-es5/{framework-delegate-f683816e.js → framework-delegate-63d1a679.js} +1 -1
  153. package/dist/esm-es5/{helpers-9b49d7d2.js → helpers-da915de8.js} +1 -1
  154. package/dist/esm-es5/{index-7ec5519a.js → index-2f7fde3d.js} +1 -1
  155. package/dist/esm-es5/index-6ad967f3.js +4 -0
  156. package/dist/esm-es5/{index-5a0f5fd0.js → index-79b30591.js} +1 -1
  157. package/dist/esm-es5/{index-8785a9c6.js → index-cb21eccb.js} +1 -1
  158. package/dist/esm-es5/{index-33f7e3ff.js → index-efb8ecdf.js} +1 -1
  159. package/dist/esm-es5/index.js +1 -1
  160. package/dist/esm-es5/input-shims-2fd7c6ef.js +4 -0
  161. package/dist/esm-es5/{input.utils-1ad8dafc.js → input.utils-961c9f17.js} +1 -1
  162. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  163. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  164. package/dist/esm-es5/ion-alert.entry.js +1 -1
  165. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  166. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  167. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  168. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  169. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  170. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  171. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  172. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  173. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  174. package/dist/esm-es5/ion-img.entry.js +1 -1
  175. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  176. package/dist/esm-es5/ion-input-password-toggle.entry.js +1 -1
  177. package/dist/esm-es5/ion-input.entry.js +1 -1
  178. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  179. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  180. package/dist/esm-es5/ion-loading.entry.js +1 -1
  181. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  182. package/dist/esm-es5/ion-modal.entry.js +1 -1
  183. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  184. package/dist/esm-es5/ion-picker-column-option.entry.js +1 -1
  185. package/dist/esm-es5/ion-picker-column.entry.js +1 -1
  186. package/dist/esm-es5/ion-picker.entry.js +1 -1
  187. package/dist/esm-es5/ion-popover.entry.js +1 -1
  188. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  189. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  190. package/dist/esm-es5/ion-range.entry.js +1 -1
  191. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  192. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  193. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  194. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  195. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  196. package/dist/esm-es5/ion-select-modal.entry.js +1 -1
  197. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  198. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  199. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  200. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  201. package/dist/esm-es5/ion-toast.entry.js +1 -1
  202. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  203. package/dist/esm-es5/ionic.js +1 -1
  204. package/dist/esm-es5/{ios.transition-085853ff.js → ios.transition-b1da3753.js} +1 -1
  205. package/dist/esm-es5/loader.js +1 -1
  206. package/dist/esm-es5/md.transition-571b3859.js +4 -0
  207. package/dist/esm-es5/{notch-controller-3dc61260.js → notch-controller-55b09e11.js} +1 -1
  208. package/dist/esm-es5/{overlays-e3d0d356.js → overlays-5deab4de.js} +1 -1
  209. package/dist/esm-es5/status-tap-79eac0ac.js +4 -0
  210. package/dist/esm-es5/{swipe-back-23ee7ab1.js → swipe-back-e5394307.js} +1 -1
  211. package/dist/html.html-data.json +24 -0
  212. package/dist/ionic/index.esm.js +1 -1
  213. package/dist/ionic/ionic.esm.js +1 -1
  214. package/dist/ionic/{p-a9e24ae2.system.entry.js → p-01186920.system.entry.js} +1 -1
  215. package/dist/ionic/p-0430c2e0.entry.js +4 -0
  216. package/dist/ionic/{p-3eaf1444.system.entry.js → p-05b74e45.system.entry.js} +1 -1
  217. package/dist/ionic/{p-bb2a6761.entry.js → p-081a4ce4.entry.js} +1 -1
  218. package/dist/ionic/p-0af823e1.js +4 -0
  219. package/dist/ionic/{p-aa63b365.system.js → p-0eb35a7f.system.js} +1 -1
  220. package/dist/ionic/p-1132ffee.entry.js +4 -0
  221. package/dist/ionic/{p-203633d1.entry.js → p-120fb79a.entry.js} +1 -1
  222. package/dist/ionic/{p-5cde8ef3.entry.js → p-15d18206.entry.js} +1 -1
  223. package/dist/ionic/{p-e8f34871.entry.js → p-15e76dd1.entry.js} +1 -1
  224. package/dist/ionic/{p-7b98cebe.entry.js → p-16188af7.entry.js} +1 -1
  225. package/dist/ionic/{p-5126cf1e.system.js → p-19ea7bff.system.js} +1 -1
  226. package/dist/ionic/{p-d60342e3.js → p-1a5bc5f7.js} +1 -1
  227. package/dist/ionic/{p-42808996.js → p-1ab13b2b.js} +1 -1
  228. package/dist/ionic/{p-84d08aae.system.entry.js → p-1e67b266.system.entry.js} +1 -1
  229. package/dist/ionic/{p-e2e19375.system.entry.js → p-2172893e.system.entry.js} +1 -1
  230. package/dist/ionic/{p-0c9b6d3a.system.entry.js → p-2346ab53.system.entry.js} +1 -1
  231. package/dist/ionic/{p-162c8d0c.system.entry.js → p-248318e0.system.entry.js} +1 -1
  232. package/dist/ionic/{p-f5035354.js → p-28706c6f.js} +1 -1
  233. package/dist/ionic/{p-2515cb4d.system.entry.js → p-2b838f86.system.entry.js} +1 -1
  234. package/dist/ionic/{p-4c252070.entry.js → p-2da9c8a7.entry.js} +1 -1
  235. package/dist/ionic/{p-2ef3c7ee.system.entry.js → p-2e46590d.system.entry.js} +1 -1
  236. package/dist/ionic/{p-e265ae18.system.entry.js → p-302b50bb.system.entry.js} +1 -1
  237. package/dist/ionic/p-322c5fb4.system.js +1 -1
  238. package/dist/ionic/{p-f687573e.system.js → p-343b6b1d.system.js} +1 -1
  239. package/dist/ionic/{p-2bc73fb5.js → p-34b11c24.js} +1 -1
  240. package/dist/ionic/{p-b3680e2f.system.js → p-3ad285e3.system.js} +1 -1
  241. package/dist/ionic/{p-d4ca0475.js → p-3cc276f4.js} +1 -1
  242. package/dist/ionic/p-4c2d5b80.system.js +4 -0
  243. package/dist/ionic/p-4c98e2cf.system.js +4 -0
  244. package/dist/ionic/p-4ec778aa.entry.js +4 -0
  245. package/dist/ionic/{p-4ad78edc.entry.js → p-52d7a191.entry.js} +1 -1
  246. package/dist/ionic/{p-92365bc1.system.entry.js → p-567de071.system.entry.js} +1 -1
  247. package/dist/ionic/p-577bc414.entry.js +4 -0
  248. package/dist/ionic/{p-b91acf8d.system.entry.js → p-585b455c.system.entry.js} +1 -1
  249. package/dist/ionic/{p-da8ef548.system.entry.js → p-58d5df0c.system.entry.js} +1 -1
  250. package/dist/ionic/{p-9eee4de1.system.js → p-5c08627a.system.js} +1 -1
  251. package/dist/ionic/{p-cc700b6b.entry.js → p-5c9eb9af.entry.js} +1 -1
  252. package/dist/ionic/{p-6b1bd0c1.entry.js → p-61db139d.entry.js} +1 -1
  253. package/dist/ionic/{p-f89cf011.system.entry.js → p-63b0abde.system.entry.js} +1 -1
  254. package/dist/ionic/p-67222c16.system.js +4 -0
  255. package/dist/ionic/{p-a4575db1.system.entry.js → p-6933c482.system.entry.js} +1 -1
  256. package/dist/ionic/{p-6190d0d6.entry.js → p-6d6cedc5.entry.js} +1 -1
  257. package/dist/ionic/{p-9a1f985d.system.entry.js → p-6dfb0f39.system.entry.js} +1 -1
  258. package/dist/ionic/{p-7a1766d6.js → p-72812e99.js} +1 -1
  259. package/dist/ionic/p-72bc8a1c.js +4 -0
  260. package/dist/ionic/{p-4346c79d.system.entry.js → p-744c8672.system.entry.js} +1 -1
  261. package/dist/ionic/{p-1bbe8665.system.entry.js → p-74e3f0af.system.entry.js} +2 -2
  262. package/dist/ionic/p-7513b0c4.js +4 -0
  263. package/dist/ionic/{p-f78af648.system.entry.js → p-797eeea8.system.entry.js} +1 -1
  264. package/dist/ionic/{p-83e68c71.entry.js → p-7a02f476.entry.js} +1 -1
  265. package/dist/ionic/{p-14143257.entry.js → p-7a6eaf9e.entry.js} +1 -1
  266. package/dist/ionic/{p-fca17935.entry.js → p-7b9a2b23.entry.js} +1 -1
  267. package/dist/ionic/{p-70ccc275.system.entry.js → p-7ddc46c3.system.entry.js} +1 -1
  268. package/dist/ionic/{p-a2b6dd57.system.js → p-7de1e42c.system.js} +1 -1
  269. package/dist/ionic/{p-0eb2553a.system.entry.js → p-7ed1657c.system.entry.js} +1 -1
  270. package/dist/ionic/{p-95da3ae2.system.js → p-8635f5e6.system.js} +1 -1
  271. package/dist/ionic/{p-803f0bc2.entry.js → p-8694928f.entry.js} +1 -1
  272. package/dist/ionic/{p-da074ff7.entry.js → p-89bf08c7.entry.js} +1 -1
  273. package/dist/ionic/{p-c29f8157.system.entry.js → p-8cfba7e9.system.entry.js} +1 -1
  274. package/dist/ionic/{p-82b931e2.entry.js → p-92763d3d.entry.js} +1 -1
  275. package/dist/ionic/{p-561ddcd4.system.entry.js → p-933727f9.system.entry.js} +2 -2
  276. package/dist/ionic/p-9343a445.js +4 -0
  277. package/dist/ionic/{p-02e23f26.entry.js → p-937a7e21.entry.js} +1 -1
  278. package/dist/ionic/{p-57379000.entry.js → p-948e6c6a.entry.js} +1 -1
  279. package/dist/ionic/{p-77e7b7b6.system.entry.js → p-98231c01.system.entry.js} +1 -1
  280. package/dist/ionic/{p-dc146a2a.system.entry.js → p-985a7e17.system.entry.js} +1 -1
  281. package/dist/ionic/{p-76446a85.entry.js → p-98ff6b32.entry.js} +1 -1
  282. package/dist/ionic/{p-a3c78186.system.entry.js → p-9b122e3c.system.entry.js} +1 -1
  283. package/dist/ionic/{p-0397811d.entry.js → p-9b428d25.entry.js} +1 -1
  284. package/dist/ionic/{p-41780810.entry.js → p-9df2c6fb.entry.js} +1 -1
  285. package/dist/ionic/{p-d3b26da4.system.entry.js → p-9f364443.system.entry.js} +1 -1
  286. package/dist/ionic/{p-3572f86a.system.entry.js → p-a090bce8.system.entry.js} +1 -1
  287. package/dist/ionic/{p-1bc65aec.system.entry.js → p-a0eb506c.system.entry.js} +1 -1
  288. package/dist/ionic/{p-4452a8ac.system.js → p-a15ddedb.system.js} +1 -1
  289. package/dist/ionic/p-a3db8ee3.js +4 -0
  290. package/dist/ionic/{p-e456ee59.system.entry.js → p-a4a2420e.system.entry.js} +1 -1
  291. package/dist/ionic/{p-1a790eef.system.js → p-a88dec0d.system.js} +2 -2
  292. package/dist/ionic/{p-b0d8bbee.entry.js → p-a8f2c254.entry.js} +1 -1
  293. package/dist/ionic/{p-3df889b3.system.entry.js → p-ab674093.system.entry.js} +1 -1
  294. package/dist/ionic/{p-c1b51537.system.js → p-ada36597.system.js} +1 -1
  295. package/dist/ionic/{p-45de8d2a.entry.js → p-b1eb86fd.entry.js} +1 -1
  296. package/dist/ionic/{p-e8232807.system.js → p-b3c60433.system.js} +1 -1
  297. package/dist/ionic/{p-bb11d9fb.js → p-b51e4004.js} +1 -1
  298. package/dist/ionic/{p-13dc21b0.js → p-b6efeab8.js} +1 -1
  299. package/dist/ionic/{p-9b3bb24e.entry.js → p-b9d7015f.entry.js} +1 -1
  300. package/dist/ionic/{p-c32644d7.entry.js → p-bb0db172.entry.js} +1 -1
  301. package/dist/ionic/{p-d06601eb.system.entry.js → p-bdf2cb2e.system.entry.js} +1 -1
  302. package/dist/ionic/{p-c8d645b3.entry.js → p-c41ac815.entry.js} +1 -1
  303. package/dist/ionic/{p-340e3f24.system.js → p-c4238c12.system.js} +1 -1
  304. package/dist/ionic/p-c4b53b16.system.entry.js +4 -0
  305. package/dist/ionic/{p-dd0c9350.system.entry.js → p-cac0e0b3.system.entry.js} +1 -1
  306. package/dist/ionic/{p-51dec25d.js → p-cb13696c.js} +1 -1
  307. package/dist/ionic/{p-7b96e5c1.system.entry.js → p-cba1f9bc.system.entry.js} +1 -1
  308. package/dist/ionic/p-cdc83025.entry.js +4 -0
  309. package/dist/ionic/p-d1c5b60e.system.js +4 -0
  310. package/dist/ionic/{p-881d9e52.system.js → p-d22e2a38.system.js} +1 -1
  311. package/dist/ionic/{p-9be5f3ee.system.entry.js → p-d6eaffb1.system.entry.js} +2 -2
  312. package/dist/ionic/{p-955c3eb8.entry.js → p-d7aa6b00.entry.js} +1 -1
  313. package/dist/ionic/p-d7dd8fb1.entry.js +4 -0
  314. package/dist/ionic/{p-265939f0.entry.js → p-de930745.entry.js} +1 -1
  315. package/dist/ionic/{p-57ceead7.entry.js → p-e06057c9.entry.js} +1 -1
  316. package/dist/ionic/{p-91f17b25.system.entry.js → p-e09d6392.system.entry.js} +2 -2
  317. package/dist/ionic/p-e3171ff3.entry.js +4 -0
  318. package/dist/ionic/{p-f301a694.system.entry.js → p-e4ee80be.system.entry.js} +1 -1
  319. package/dist/ionic/p-e4fde4fb.system.entry.js +4 -0
  320. package/dist/ionic/p-e6376b93.system.entry.js +4 -0
  321. package/dist/ionic/{p-f42743d1.entry.js → p-e76dae93.entry.js} +1 -1
  322. package/dist/ionic/p-e8d56122.js +4 -0
  323. package/dist/ionic/{p-e1bbacb7.entry.js → p-eef505e8.entry.js} +1 -1
  324. package/dist/ionic/{p-26194519.entry.js → p-f1060cd8.entry.js} +1 -1
  325. package/dist/ionic/{p-d192fdf7.system.entry.js → p-f1120724.system.entry.js} +1 -1
  326. package/dist/ionic/{p-02e1ebd9.js → p-f1c4dcd4.js} +1 -1
  327. package/dist/ionic/{p-32e99b0a.entry.js → p-f63c2d12.entry.js} +1 -1
  328. package/dist/ionic/{p-ffc48bc5.system.entry.js → p-fbd41a7e.system.entry.js} +1 -1
  329. package/dist/ionic/{p-e97a3f44.entry.js → p-fceec762.entry.js} +1 -1
  330. package/dist/types/components/checkbox/checkbox.d.ts +25 -0
  331. package/dist/types/components/modal/animations/sheet.d.ts +1 -0
  332. package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
  333. package/dist/types/components/modal/modal-interface.d.ts +1 -0
  334. package/dist/types/components/modal/modal.d.ts +11 -0
  335. package/dist/types/components/segment-button/segment-button.d.ts +1 -2
  336. package/dist/types/components/select/select.d.ts +6 -0
  337. package/dist/types/components/toggle/toggle.d.ts +6 -0
  338. package/dist/types/components/toolbar/toolbar.d.ts +4 -0
  339. package/dist/types/components.d.ts +48 -0
  340. package/dist/types/utils/config.d.ts +9 -0
  341. package/dist/types/utils/helpers.d.ts +0 -1
  342. package/dist/types/utils/logging/index.d.ts +13 -1
  343. package/hydrate/index.js +346 -139
  344. package/hydrate/index.mjs +346 -139
  345. package/package.json +3 -3
  346. package/dist/esm-es5/index-9b0d46f4.js +0 -4
  347. package/dist/esm-es5/input-shims-0e65111b.js +0 -4
  348. package/dist/esm-es5/md.transition-33826623.js +0 -4
  349. package/dist/esm-es5/status-tap-163e8128.js +0 -4
  350. package/dist/ionic/p-06fee233.js +0 -4
  351. package/dist/ionic/p-075a94bd.js +0 -4
  352. package/dist/ionic/p-0a59f4fa.entry.js +0 -4
  353. package/dist/ionic/p-0e43be1b.entry.js +0 -4
  354. package/dist/ionic/p-0ee3b5a2.system.js +0 -4
  355. package/dist/ionic/p-135e5731.js +0 -4
  356. package/dist/ionic/p-1f405274.js +0 -4
  357. package/dist/ionic/p-25fa1d30.system.entry.js +0 -4
  358. package/dist/ionic/p-2c9eb774.system.js +0 -4
  359. package/dist/ionic/p-48a8d9b4.system.entry.js +0 -4
  360. package/dist/ionic/p-56da53ad.system.entry.js +0 -4
  361. package/dist/ionic/p-61d044b4.entry.js +0 -4
  362. package/dist/ionic/p-68dc53a5.js +0 -4
  363. package/dist/ionic/p-84b1b9a0.entry.js +0 -4
  364. package/dist/ionic/p-8a836849.entry.js +0 -4
  365. package/dist/ionic/p-af09741c.entry.js +0 -4
  366. package/dist/ionic/p-b7433d7d.js +0 -4
  367. package/dist/ionic/p-df862603.entry.js +0 -4
  368. package/dist/ionic/p-e308de5b.system.js +0 -4
  369. package/dist/ionic/p-ff4b7e40.system.js +0 -4
package/hydrate/index.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>";
@@ -3223,9 +3213,12 @@ let accordionIds = 0;
3223
3213
  * @param message - The string message to be logged to the console.
3224
3214
  */
3225
3215
  const printIonWarning = (message, ...params) => {
3226
- 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
+ }
3227
3220
  };
3228
- /*
3221
+ /**
3229
3222
  * Logs an error to the console with an Ionic prefix
3230
3223
  * to indicate the library that is warning the developer.
3231
3224
  *
@@ -3233,7 +3226,10 @@ const printIonWarning = (message, ...params) => {
3233
3226
  * @param params - Additional arguments to supply to the console.error.
3234
3227
  */
3235
3228
  const printIonError = (message, ...params) => {
3236
- 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
+ }
3237
3233
  };
3238
3234
  /**
3239
3235
  * Prints an error informing developers that an implementation requires an element to be used
@@ -8434,10 +8430,10 @@ class CardTitle {
8434
8430
  }; }
8435
8431
  }
8436
8432
 
8437
- const checkboxIosCss = ":host{--checkbox-background-checked:var(--ion-color-primary, #0054e9);--border-color-checked:var(--ion-color-primary, #0054e9);--checkmark-color:var(--ion-color-primary-contrast, #fff);--transition:none;display:inline-block;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:2}:host(.in-item){-ms-flex:1 1 0px;flex:1 1 0;width:100%;height:100%}:host([slot=start]),:host([slot=end]){-ms-flex:initial;flex:initial;width:auto}:host(.ion-color){--checkbox-background-checked:var(--ion-color-base);--border-color-checked:var(--ion-color-base);--checkmark-color:var(--ion-color-contrast)}.checkbox-wrapper{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;height:inherit;cursor:inherit}.label-text-wrapper{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host(.in-item) .label-text-wrapper,:host(.in-item:not(.checkbox-label-placement-stacked):not([slot])) .native-wrapper{margin-top:10px;margin-bottom:10px}:host(.in-item.checkbox-label-placement-stacked) .label-text-wrapper{margin-top:10px;margin-bottom:16px}:host(.in-item.checkbox-label-placement-stacked) .native-wrapper{margin-bottom:10px}.label-text-wrapper-hidden{display:none}input{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;margin:0;padding:0;border:0;outline:0;clip:rect(0 0 0 0);opacity:0;overflow:hidden;-webkit-appearance:none;-moz-appearance:none}.native-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.checkbox-icon{border-radius:var(--border-radius);position:relative;width:var(--size);height:var(--size);-webkit-transition:var(--transition);transition:var(--transition);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--checkbox-background);-webkit-box-sizing:border-box;box-sizing:border-box}.checkbox-icon path{fill:none;stroke:var(--checkmark-color);stroke-width:var(--checkmark-width);opacity:0}: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}";
8438
8434
  var IonCheckboxIosStyle0 = checkboxIosCss;
8439
8435
 
8440
- const checkboxMdCss = ":host{--checkbox-background-checked:var(--ion-color-primary, #0054e9);--border-color-checked:var(--ion-color-primary, #0054e9);--checkmark-color:var(--ion-color-primary-contrast, #fff);--transition:none;display:inline-block;position:relative;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:2}:host(.in-item){-ms-flex:1 1 0px;flex:1 1 0;width:100%;height:100%}:host([slot=start]),:host([slot=end]){-ms-flex:initial;flex:initial;width:auto}:host(.ion-color){--checkbox-background-checked:var(--ion-color-base);--border-color-checked:var(--ion-color-base);--checkmark-color:var(--ion-color-contrast)}.checkbox-wrapper{display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;height:inherit;cursor:inherit}.label-text-wrapper{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}:host(.in-item) .label-text-wrapper,:host(.in-item:not(.checkbox-label-placement-stacked):not([slot])) .native-wrapper{margin-top:10px;margin-bottom:10px}:host(.in-item.checkbox-label-placement-stacked) .label-text-wrapper{margin-top:10px;margin-bottom:16px}:host(.in-item.checkbox-label-placement-stacked) .native-wrapper{margin-bottom:10px}.label-text-wrapper-hidden{display:none}input{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;margin:0;padding:0;border:0;outline:0;clip:rect(0 0 0 0);opacity:0;overflow:hidden;-webkit-appearance:none;-moz-appearance:none}.native-wrapper{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.checkbox-icon{border-radius:var(--border-radius);position:relative;width:var(--size);height:var(--size);-webkit-transition:var(--transition);transition:var(--transition);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--checkbox-background);-webkit-box-sizing:border-box;box-sizing:border-box}.checkbox-icon path{fill:none;stroke:var(--checkmark-color);stroke-width:var(--checkmark-width);opacity:0}: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}";
8441
8437
  var IonCheckboxMdStyle0 = checkboxMdCss;
8442
8438
 
8443
8439
  /**
@@ -8448,6 +8444,9 @@ var IonCheckboxMdStyle0 = checkboxMdCss;
8448
8444
  * @part container - The container for the checkbox mark.
8449
8445
  * @part label - The label text describing the checkbox.
8450
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.
8451
8450
  */
8452
8451
  class Checkbox {
8453
8452
  constructor(hostRef) {
@@ -8456,6 +8455,8 @@ class Checkbox {
8456
8455
  this.ionFocus = createEvent(this, "ionFocus", 7);
8457
8456
  this.ionBlur = createEvent(this, "ionBlur", 7);
8458
8457
  this.inputId = `ion-cb-${checkboxIds++}`;
8458
+ this.helperTextId = `${this.inputId}-helper-text`;
8459
+ this.errorTextId = `${this.inputId}-error-text`;
8459
8460
  this.inheritedAttributes = {};
8460
8461
  /**
8461
8462
  * Sets the checked property and emits
@@ -8493,10 +8494,13 @@ class Checkbox {
8493
8494
  this.checked = false;
8494
8495
  this.indeterminate = false;
8495
8496
  this.disabled = false;
8497
+ this.errorText = undefined;
8498
+ this.helperText = undefined;
8496
8499
  this.value = 'on';
8497
8500
  this.labelPlacement = 'start';
8498
8501
  this.justify = undefined;
8499
8502
  this.alignment = undefined;
8503
+ this.required = false;
8500
8504
  }
8501
8505
  componentWillLoad() {
8502
8506
  this.inheritedAttributes = Object.assign({}, inheritAriaAttributes(this.el));
@@ -8507,12 +8511,38 @@ class Checkbox {
8507
8511
  this.focusEl.focus();
8508
8512
  }
8509
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
+ }
8510
8540
  render() {
8511
- 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;
8512
8542
  const mode = getIonMode$1(this);
8513
8543
  const path = getSVGPath(mode, indeterminate);
8514
8544
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
8515
- 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, {
8516
8546
  [mode]: true,
8517
8547
  'in-item': hostContext('ion-item', el),
8518
8548
  'checkbox-checked': checked,
@@ -8522,10 +8552,10 @@ class Checkbox {
8522
8552
  [`checkbox-justify-${justify}`]: justify !== undefined,
8523
8553
  [`checkbox-alignment-${alignment}`]: alignment !== undefined,
8524
8554
  [`checkbox-label-placement-${labelPlacement}`]: true,
8525
- }), 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: {
8526
8556
  'label-text-wrapper': true,
8527
8557
  'label-text-wrapper-hidden': el.textContent === '',
8528
- }, 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)))));
8529
8559
  }
8530
8560
  getSVGPath(mode, indeterminate) {
8531
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" }));
@@ -8548,10 +8578,13 @@ class Checkbox {
8548
8578
  "checked": [1028],
8549
8579
  "indeterminate": [1028],
8550
8580
  "disabled": [4],
8581
+ "errorText": [1, "error-text"],
8582
+ "helperText": [1, "helper-text"],
8551
8583
  "value": [8],
8552
8584
  "labelPlacement": [1, "label-placement"],
8553
8585
  "justify": [1],
8554
8586
  "alignment": [1],
8587
+ "required": [4],
8555
8588
  "setFocus": [64]
8556
8589
  },
8557
8590
  "$listeners$": undefined,
@@ -19027,7 +19060,7 @@ const computeDuration = (remaining, velocity) => {
19027
19060
  };
19028
19061
 
19029
19062
  const createSheetEnterAnimation = (opts) => {
19030
- const { currentBreakpoint, backdropBreakpoint } = opts;
19063
+ const { currentBreakpoint, backdropBreakpoint, expandToScroll } = opts;
19031
19064
  /**
19032
19065
  * If the backdropBreakpoint is undefined, then the backdrop
19033
19066
  * should always fade in. If the backdropBreakpoint came before the
@@ -19047,7 +19080,16 @@ const createSheetEnterAnimation = (opts) => {
19047
19080
  { offset: 0, opacity: 1, transform: 'translateY(100%)' },
19048
19081
  { offset: 1, opacity: 1, transform: `translateY(${100 - currentBreakpoint * 100}%)` },
19049
19082
  ]);
19050
- 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 };
19051
19093
  };
19052
19094
  const createSheetLeaveAnimation = (opts) => {
19053
19095
  const { currentBreakpoint, backdropBreakpoint } = opts;
@@ -19082,22 +19124,68 @@ const createEnterAnimation$1 = () => {
19082
19124
  })
19083
19125
  .afterClearStyles(['pointer-events']);
19084
19126
  const wrapperAnimation = createAnimation().fromTo('transform', 'translateY(100vh)', 'translateY(0vh)');
19085
- return { backdropAnimation, wrapperAnimation };
19127
+ return { backdropAnimation, wrapperAnimation, contentAnimation: undefined };
19086
19128
  };
19087
19129
  /**
19088
19130
  * iOS Modal Enter Animation for the Card presentation style
19089
19131
  */
19090
19132
  const iosEnterAnimation$3 = (baseEl, opts) => {
19091
- const { presentingEl, currentBreakpoint } = opts;
19133
+ const { presentingEl, currentBreakpoint, expandToScroll } = opts;
19092
19134
  const root = getElementRoot(baseEl);
19093
- const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation$1();
19135
+ const { wrapperAnimation, backdropAnimation, contentAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation$1();
19094
19136
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
19095
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')));
19096
19141
  const baseAnimation = createAnimation('entering-base')
19097
19142
  .addElement(baseEl)
19098
19143
  .easing('cubic-bezier(0.32,0.72,0,1)')
19099
19144
  .duration(500)
19100
- .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
+ }
19101
19189
  if (presentingEl) {
19102
19190
  const isMobile = window.innerWidth < 768;
19103
19191
  const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
@@ -19175,7 +19263,7 @@ const createLeaveAnimation$1 = () => {
19175
19263
  * iOS Modal Leave Animation
19176
19264
  */
19177
19265
  const iosLeaveAnimation$3 = (baseEl, opts, duration = 500) => {
19178
- const { presentingEl, currentBreakpoint } = opts;
19266
+ const { presentingEl, currentBreakpoint, expandToScroll } = opts;
19179
19267
  const root = getElementRoot(baseEl);
19180
19268
  const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation$1();
19181
19269
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
@@ -19184,7 +19272,29 @@ const iosLeaveAnimation$3 = (baseEl, opts, duration = 500) => {
19184
19272
  .addElement(baseEl)
19185
19273
  .easing('cubic-bezier(0.32,0.72,0,1)')
19186
19274
  .duration(duration)
19187
- .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
+ });
19188
19298
  if (presentingEl) {
19189
19299
  const isMobile = window.innerWidth < 768;
19190
19300
  const hasCardModal = presentingEl.tagName === 'ION-MODAL' && presentingEl.presentingElement !== undefined;
@@ -19262,22 +19372,69 @@ const createEnterAnimation = () => {
19262
19372
  { offset: 0, opacity: 0.01, transform: 'translateY(40px)' },
19263
19373
  { offset: 1, opacity: 1, transform: `translateY(0px)` },
19264
19374
  ]);
19265
- return { backdropAnimation, wrapperAnimation };
19375
+ return { backdropAnimation, wrapperAnimation, contentAnimation: undefined };
19266
19376
  };
19267
19377
  /**
19268
19378
  * Md Modal Enter Animation
19269
19379
  */
19270
19380
  const mdEnterAnimation$2 = (baseEl, opts) => {
19271
- const { currentBreakpoint } = opts;
19381
+ const { currentBreakpoint, expandToScroll } = opts;
19272
19382
  const root = getElementRoot(baseEl);
19273
- const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
19383
+ const { wrapperAnimation, backdropAnimation, contentAnimation } = currentBreakpoint !== undefined ? createSheetEnterAnimation(opts) : createEnterAnimation();
19274
19384
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
19275
19385
  wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
19276
- 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()
19277
19390
  .addElement(baseEl)
19278
19391
  .easing('cubic-bezier(0.36,0.66,0.04,1)')
19279
19392
  .duration(280)
19280
- .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;
19281
19438
  };
19282
19439
 
19283
19440
  const createLeaveAnimation = () => {
@@ -19292,18 +19449,41 @@ const createLeaveAnimation = () => {
19292
19449
  * Md Modal Leave Animation
19293
19450
  */
19294
19451
  const mdLeaveAnimation$2 = (baseEl, opts) => {
19295
- const { currentBreakpoint } = opts;
19452
+ const { currentBreakpoint, expandToScroll } = opts;
19296
19453
  const root = getElementRoot(baseEl);
19297
19454
  const { wrapperAnimation, backdropAnimation } = currentBreakpoint !== undefined ? createSheetLeaveAnimation(opts) : createLeaveAnimation();
19298
19455
  backdropAnimation.addElement(root.querySelector('ion-backdrop'));
19299
19456
  wrapperAnimation.addElement(root.querySelector('.modal-wrapper'));
19300
- return createAnimation()
19457
+ const baseAnimation = createAnimation()
19301
19458
  .easing('cubic-bezier(0.47,0,0.745,0.715)')
19302
19459
  .duration(200)
19303
- .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;
19304
19484
  };
19305
19485
 
19306
- 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) => {
19307
19487
  // Defaults for the sheet swipe animation
19308
19488
  const defaultBackdrop = [
19309
19489
  { offset: 0, opacity: 'var(--backdrop-opacity)' },
@@ -19320,6 +19500,10 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19320
19500
  { offset: 1, transform: 'translateY(100%)' },
19321
19501
  ],
19322
19502
  BACKDROP_KEYFRAMES: backdropBreakpoint !== 0 ? customBackdrop : defaultBackdrop,
19503
+ CONTENT_KEYFRAMES: [
19504
+ { offset: 0, maxHeight: '100%' },
19505
+ { offset: 1, maxHeight: '0%' },
19506
+ ],
19323
19507
  };
19324
19508
  const contentEl = baseEl.querySelector('ion-content');
19325
19509
  const height = wrapperEl.clientHeight;
@@ -19327,10 +19511,11 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19327
19511
  let offset = 0;
19328
19512
  let canDismissBlocksGesture = false;
19329
19513
  const canDismissMaxStep = 0.95;
19330
- const wrapperAnimation = animation.childAnimations.find((ani) => ani.id === 'wrapperAnimation');
19331
- const backdropAnimation = animation.childAnimations.find((ani) => ani.id === 'backdropAnimation');
19332
19514
  const maxBreakpoint = breakpoints[breakpoints.length - 1];
19333
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');
19334
19519
  const enableBackdrop = () => {
19335
19520
  baseEl.style.setProperty('pointer-events', 'auto');
19336
19521
  backdropEl.style.setProperty('pointer-events', 'auto');
@@ -19353,6 +19538,31 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19353
19538
  */
19354
19539
  baseEl.classList.add(FOCUS_TRAP_DISABLE_CLASS);
19355
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
+ };
19356
19566
  /**
19357
19567
  * After the entering animation completes,
19358
19568
  * we need to set the animation to go from
@@ -19364,6 +19574,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19364
19574
  if (wrapperAnimation && backdropAnimation) {
19365
19575
  wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
19366
19576
  backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
19577
+ contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.keyframes([...SheetDefaults.CONTENT_KEYFRAMES]);
19367
19578
  animation.progressStart(true, 1 - currentBreakpoint);
19368
19579
  /**
19369
19580
  * If backdrop is not enabled, then content
@@ -19380,7 +19591,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19380
19591
  disableBackdrop();
19381
19592
  }
19382
19593
  }
19383
- if (contentEl && currentBreakpoint !== maxBreakpoint) {
19594
+ if (contentEl && currentBreakpoint !== maxBreakpoint && expandToScroll) {
19384
19595
  contentEl.scrollY = false;
19385
19596
  }
19386
19597
  const canStart = (detail) => {
@@ -19394,6 +19605,13 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19394
19605
  */
19395
19606
  const contentEl = findClosestIonContent(detail.event.target);
19396
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
+ }
19397
19615
  if (currentBreakpoint === 1 && contentEl) {
19398
19616
  /**
19399
19617
  * The modal should never swipe to close on the content with a refresher.
@@ -19424,6 +19642,15 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19424
19642
  * Remove undefined check
19425
19643
  */
19426
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
+ }
19427
19654
  /**
19428
19655
  * If we are pulling down, then it is possible we are pulling on the content.
19429
19656
  * We do not want scrolling to happen at the same time as the gesture.
@@ -19539,6 +19766,19 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19539
19766
  opacity: `calc(var(--backdrop-opacity) * ${getBackdropValueForSheet(snapToBreakpoint, backdropBreakpoint)})`,
19540
19767
  },
19541
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
+ }
19542
19782
  animation.progressStep(0);
19543
19783
  }
19544
19784
  /**
@@ -19546,6 +19786,14 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19546
19786
  * snapping animation completes.
19547
19787
  */
19548
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
+ }
19549
19797
  if (shouldPreventDismiss) {
19550
19798
  handleCanDismiss(baseEl, animation);
19551
19799
  }
@@ -19553,13 +19801,13 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19553
19801
  onDismiss();
19554
19802
  }
19555
19803
  /**
19556
- * If the sheet is going to be fully expanded then we should enable
19557
- * scrolling immediately. The sheet modal animation takes ~500ms to finish
19558
- * so if we wait until then there is a visible delay for when scrolling is
19559
- * re-enabled. Native iOS allows for scrolling on the sheet modal as soon
19560
- * 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.
19561
19809
  */
19562
- if (contentEl && snapToBreakpoint === breakpoints[breakpoints.length - 1]) {
19810
+ if (contentEl && (snapToBreakpoint === breakpoints[breakpoints.length - 1] || !expandToScroll)) {
19563
19811
  contentEl.scrollY = true;
19564
19812
  }
19565
19813
  return new Promise((resolve) => {
@@ -19577,6 +19825,7 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19577
19825
  raf(() => {
19578
19826
  wrapperAnimation.keyframes([...SheetDefaults.WRAPPER_KEYFRAMES]);
19579
19827
  backdropAnimation.keyframes([...SheetDefaults.BACKDROP_KEYFRAMES]);
19828
+ contentAnimation === null || contentAnimation === void 0 ? void 0 : contentAnimation.keyframes([...SheetDefaults.CONTENT_KEYFRAMES]);
19580
19829
  animation.progressStart(true, 1 - snapToBreakpoint);
19581
19830
  currentBreakpoint = snapToBreakpoint;
19582
19831
  onBreakpointChange(currentBreakpoint);
@@ -19629,10 +19878,10 @@ const createSheetGesture = (baseEl, backdropEl, wrapperEl, initialBreakpoint, ba
19629
19878
  };
19630
19879
  };
19631
19880
 
19632
- 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}";
19633
19882
  var IonModalIosStyle0 = modalIosCss;
19634
19883
 
19635
- 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}";
19636
19885
  var IonModalMdStyle0 = modalMdCss;
19637
19886
 
19638
19887
  // TODO(FW-2832): types
@@ -19711,6 +19960,7 @@ class Modal {
19711
19960
  this.enterAnimation = undefined;
19712
19961
  this.leaveAnimation = undefined;
19713
19962
  this.breakpoints = undefined;
19963
+ this.expandToScroll = true;
19714
19964
  this.initialBreakpoint = undefined;
19715
19965
  this.backdropBreakpoint = 0;
19716
19966
  this.handle = undefined;
@@ -19926,6 +20176,7 @@ class Modal {
19926
20176
  presentingEl: presentingElement,
19927
20177
  currentBreakpoint: this.initialBreakpoint,
19928
20178
  backdropBreakpoint: this.backdropBreakpoint,
20179
+ expandToScroll: this.expandToScroll,
19929
20180
  });
19930
20181
  /* tslint:disable-next-line */
19931
20182
  if (typeof window !== 'undefined') {
@@ -19976,7 +20227,10 @@ class Modal {
19976
20227
  // should be in the DOM and referenced by now, except
19977
20228
  // for the presenting el
19978
20229
  const animationBuilder = this.leaveAnimation || config.get('modalLeave', iosLeaveAnimation$3);
19979
- 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
+ }));
19980
20234
  const contentEl = findIonContent(el);
19981
20235
  if (!contentEl) {
19982
20236
  printIonContentErrorMsg(el);
@@ -20021,9 +20275,10 @@ class Modal {
20021
20275
  presentingEl: this.presentingElement,
20022
20276
  currentBreakpoint: initialBreakpoint,
20023
20277
  backdropBreakpoint,
20278
+ expandToScroll: this.expandToScroll,
20024
20279
  }));
20025
20280
  ani.progressStart(true, 1);
20026
- 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) => {
20027
20282
  if (this.currentBreakpoint !== breakpoint) {
20028
20283
  this.currentBreakpoint = breakpoint;
20029
20284
  this.ionBreakpointDidChange.emit({ breakpoint });
@@ -20101,6 +20356,7 @@ class Modal {
20101
20356
  presentingEl: presentingElement,
20102
20357
  currentBreakpoint: (_a = this.currentBreakpoint) !== null && _a !== void 0 ? _a : this.initialBreakpoint,
20103
20358
  backdropBreakpoint: this.backdropBreakpoint,
20359
+ expandToScroll: this.expandToScroll,
20104
20360
  });
20105
20361
  if (dismissed) {
20106
20362
  const { delegate } = this.getDelegate();
@@ -20186,23 +20442,23 @@ class Modal {
20186
20442
  return true;
20187
20443
  }
20188
20444
  render() {
20189
- const { handle, isSheetModal, presentingElement, htmlAttributes, handleBehavior, inheritedAttributes, focusTrap } = this;
20445
+ const { handle, isSheetModal, presentingElement, htmlAttributes, handleBehavior, inheritedAttributes, focusTrap, expandToScroll, } = this;
20190
20446
  const showHandle = handle !== false && isSheetModal;
20191
20447
  const mode = getIonMode$1(this);
20192
20448
  const isCardModal = presentingElement !== undefined && mode === 'ios';
20193
20449
  const isHandleCycle = handleBehavior === 'cycle';
20194
- 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: {
20195
20451
  zIndex: `${20000 + this.overlayIndex}`,
20196
- }, 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',
20197
20453
  /*
20198
20454
  role and aria-modal must be used on the
20199
20455
  same element. They must also be set inside the
20200
20456
  shadow DOM otherwise ion-button will not be highlighted
20201
20457
  when using VoiceOver: https://bugs.webkit.org/show_bug.cgi?id=247134
20202
20458
  */
20203
- 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",
20204
20460
  // Prevents the handle from receiving keyboard focus when it does not cycle
20205
- 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' }))));
20206
20462
  }
20207
20463
  get el() { return getElement(this); }
20208
20464
  static get watchers() { return {
@@ -20224,6 +20480,7 @@ class Modal {
20224
20480
  "enterAnimation": [16],
20225
20481
  "leaveAnimation": [16],
20226
20482
  "breakpoints": [16],
20483
+ "expandToScroll": [4, "expand-to-scroll"],
20227
20484
  "initialBreakpoint": [2, "initial-breakpoint"],
20228
20485
  "backdropBreakpoint": [2, "backdrop-breakpoint"],
20229
20486
  "handle": [4],
@@ -29324,35 +29581,7 @@ class SegmentButton {
29324
29581
  valueChanged() {
29325
29582
  this.updateState();
29326
29583
  }
29327
- waitForSegmentContent(ionSegment, contentId) {
29328
- return new Promise((resolve, reject) => {
29329
- let timeoutId = undefined;
29330
- let animationFrameId;
29331
- const check = () => {
29332
- if (!ionSegment) {
29333
- reject(new Error(`Segment not found when looking for Segment Content`));
29334
- return;
29335
- }
29336
- const segmentView = getNextSiblingOfType(ionSegment); // Skip the text nodes
29337
- const segmentContent = segmentView === null || segmentView === void 0 ? void 0 : segmentView.querySelector(`ion-segment-content[id="${contentId}"]`);
29338
- if (segmentContent && timeoutId) {
29339
- clearTimeout(timeoutId); // Clear the timeout if the segmentContent is found
29340
- cancelAnimationFrame(animationFrameId);
29341
- resolve(segmentContent);
29342
- }
29343
- else {
29344
- animationFrameId = requestAnimationFrame(check); // Keep checking on the next animation frame
29345
- }
29346
- };
29347
- check();
29348
- // Set a timeout to reject the promise
29349
- timeoutId = setTimeout(() => {
29350
- cancelAnimationFrame(animationFrameId);
29351
- reject(new Error(`Unable to find Segment Content with id="${contentId} within 1000 ms`));
29352
- }, 1000);
29353
- });
29354
- }
29355
- async connectedCallback() {
29584
+ connectedCallback() {
29356
29585
  const segmentEl = (this.segmentEl = this.el.closest('ion-segment'));
29357
29586
  if (segmentEl) {
29358
29587
  this.updateState();
@@ -29362,14 +29591,11 @@ class SegmentButton {
29362
29591
  // Return if there is no contentId defined
29363
29592
  if (!this.contentId)
29364
29593
  return;
29365
- let segmentContent;
29366
- try {
29367
- // Attempt to find the Segment Content by its contentId
29368
- segmentContent = await this.waitForSegmentContent(segmentEl, this.contentId);
29369
- }
29370
- catch (error) {
29371
- // If no associated Segment Content exists, log an error and return
29372
- 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}".`);
29373
29599
  return;
29374
29600
  }
29375
29601
  // Ensure the found element is a valid ION-SEGMENT-CONTENT
@@ -29415,7 +29641,7 @@ class SegmentButton {
29415
29641
  const { checked, type, disabled, hasIcon, hasLabel, layout, segmentEl } = this;
29416
29642
  const mode = getIonMode$1(this);
29417
29643
  const hasSegmentColor = () => (segmentEl === null || segmentEl === void 0 ? void 0 : segmentEl.color) !== undefined;
29418
- return (hAsync(Host, { key: 'f9da656c8eccb80e4ef30e3fa977f2dbbefbc988', class: {
29644
+ return (hAsync(Host, { key: 'd50a5d5e2f6206e8523598f258d8217d2903f69b', class: {
29419
29645
  [mode]: true,
29420
29646
  'in-toolbar': hostContext('ion-toolbar', this.el),
29421
29647
  'in-toolbar-color': hostContext('ion-toolbar[color]', this.el),
@@ -29431,7 +29657,7 @@ class SegmentButton {
29431
29657
  'ion-activatable': true,
29432
29658
  'ion-activatable-instant': true,
29433
29659
  'ion-focusable': true,
29434
- } }, 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" }))));
29435
29661
  }
29436
29662
  get el() { return getElement(this); }
29437
29663
  static get watchers() { return {
@@ -29698,6 +29924,7 @@ class Select {
29698
29924
  this.expandedIcon = undefined;
29699
29925
  this.shape = undefined;
29700
29926
  this.value = undefined;
29927
+ this.required = false;
29701
29928
  }
29702
29929
  styleChanged() {
29703
29930
  this.emitStyle();
@@ -29753,8 +29980,15 @@ class Select {
29753
29980
  }
29754
29981
  this.isExpanded = true;
29755
29982
  const overlay = (this.overlay = await this.createOverlay(event));
29756
- // Add logic to scroll selected item into view before presenting
29757
- const scrollSelectedIntoView = () => {
29983
+ overlay.onDidDismiss().then(() => {
29984
+ this.overlay = undefined;
29985
+ this.isExpanded = false;
29986
+ this.ionDismiss.emit();
29987
+ this.setFocus();
29988
+ });
29989
+ await overlay.present();
29990
+ // focus selected option for popovers and modals
29991
+ if (this.interface === 'popover' || this.interface === 'modal') {
29758
29992
  const indexOfSelected = this.childOpts.findIndex((o) => o.value === this.value);
29759
29993
  if (indexOfSelected > -1) {
29760
29994
  const selectedItem = overlay.querySelector(`.select-interface-option:nth-child(${indexOfSelected + 1})`);
@@ -29772,7 +30006,6 @@ class Select {
29772
30006
  */
29773
30007
  const interactiveEl = selectedItem.querySelector('ion-radio, ion-checkbox');
29774
30008
  if (interactiveEl) {
29775
- selectedItem.scrollIntoView({ block: 'nearest' });
29776
30009
  // Needs to be called before `focusVisibleElement` to prevent issue with focus event bubbling
29777
30010
  // and removing `ion-focused` style
29778
30011
  interactiveEl.setFocus();
@@ -29796,40 +30029,7 @@ class Select {
29796
30029
  focusVisibleElement(firstEnabledOption.closest('ion-item'));
29797
30030
  }
29798
30031
  }
29799
- };
29800
- // For modals and popovers, we can scroll before they're visible
29801
- if (this.interface === 'modal') {
29802
- overlay.addEventListener('ionModalWillPresent', scrollSelectedIntoView, { once: true });
29803
- }
29804
- else if (this.interface === 'popover') {
29805
- overlay.addEventListener('ionPopoverWillPresent', scrollSelectedIntoView, { once: true });
29806
- }
29807
- else {
29808
- /**
29809
- * For alerts and action sheets, we need to wait a frame after willPresent
29810
- * because these overlays don't have their content in the DOM immediately
29811
- * when willPresent fires. By waiting a frame, we ensure the content is
29812
- * rendered and can be properly scrolled into view.
29813
- */
29814
- const scrollAfterRender = () => {
29815
- requestAnimationFrame(() => {
29816
- scrollSelectedIntoView();
29817
- });
29818
- };
29819
- if (this.interface === 'alert') {
29820
- overlay.addEventListener('ionAlertWillPresent', scrollAfterRender, { once: true });
29821
- }
29822
- else if (this.interface === 'action-sheet') {
29823
- overlay.addEventListener('ionActionSheetWillPresent', scrollAfterRender, { once: true });
29824
- }
29825
30032
  }
29826
- overlay.onDidDismiss().then(() => {
29827
- this.overlay = undefined;
29828
- this.isExpanded = false;
29829
- this.ionDismiss.emit();
29830
- this.setFocus();
29831
- });
29832
- await overlay.present();
29833
30033
  return overlay;
29834
30034
  }
29835
30035
  createOverlay(ev) {
@@ -30209,8 +30409,8 @@ class Select {
30209
30409
  return renderedLabel;
30210
30410
  }
30211
30411
  renderListbox() {
30212
- const { disabled, inputId, isExpanded } = this;
30213
- 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) }));
30214
30414
  }
30215
30415
  render() {
30216
30416
  const { disabled, el, isExpanded, expandedIcon, labelPlacement, justify, placeholder, fill, shape, name, value } = this;
@@ -30241,7 +30441,7 @@ class Select {
30241
30441
  * TODO(FW-5592): Remove hasStartEndSlots condition
30242
30442
  */
30243
30443
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || isExpanded || hasStartEndSlots));
30244
- return (hAsync(Host, { key: 'b2dca9ae25d88e4d9fdb55003041a66be5668fcf', onClick: this.onClick, class: createColorClasses$1(this.color, {
30444
+ return (hAsync(Host, { key: '491cf1b0e3aa31e7c9cfad3e87d83eb54272312a', onClick: this.onClick, class: createColorClasses$1(this.color, {
30245
30445
  [mode]: true,
30246
30446
  'in-item': inItem,
30247
30447
  'in-item-color': hostContext('ion-item.ion-color', el),
@@ -30257,7 +30457,7 @@ class Select {
30257
30457
  [`select-justify-${justify}`]: justifyEnabled,
30258
30458
  [`select-shape-${shape}`]: shape !== undefined,
30259
30459
  [`select-label-placement-${labelPlacement}`]: true,
30260
- }) }, hAsync("label", { key: 'c22fe9aee8cd448223497ef143e89529fcef8af6', class: "select-wrapper", id: "select-label" }, this.renderLabelContainer(), hAsync("div", { key: '601972df4579f4fa6a9c2c12865593e807decb72', class: "select-wrapper-inner" }, hAsync("slot", { key: '5f7b1261862f74b978b26f026533e3fd1cc666ba', name: "start" }), hAsync("div", { key: '39616da89f4b4b78432f6da85116a7de2ca589e7', class: "native-wrapper", ref: (el) => (this.nativeWrapperEl = el), part: "container" }, this.renderSelectText(), this.renderListbox()), hAsync("slot", { key: '1d7b3601b73af7c05b3627cfc8e5147ea379bb03', name: "end" }), !hasFloatingOrStackedLabel && this.renderSelectIcon()), hasFloatingOrStackedLabel && this.renderSelectIcon(), shouldRenderHighlight && hAsync("div", { key: 'b0344f0ac15003e22fee66d3d7ed03a07da7e8b7', class: "select-highlight" }))));
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" }))));
30261
30461
  }
30262
30462
  get el() { return getElement(this); }
30263
30463
  static get watchers() { return {
@@ -30293,6 +30493,7 @@ class Select {
30293
30493
  "expandedIcon": [1, "expanded-icon"],
30294
30494
  "shape": [1],
30295
30495
  "value": [1032],
30496
+ "required": [4],
30296
30497
  "isExpanded": [32],
30297
30498
  "open": [64]
30298
30499
  },
@@ -32689,6 +32890,7 @@ class Toggle {
32689
32890
  this.labelPlacement = 'start';
32690
32891
  this.justify = undefined;
32691
32892
  this.alignment = undefined;
32893
+ this.required = false;
32692
32894
  }
32693
32895
  disabledChanged() {
32694
32896
  if (this.gesture) {
@@ -32770,12 +32972,12 @@ class Toggle {
32770
32972
  return this.el.textContent !== '';
32771
32973
  }
32772
32974
  render() {
32773
- 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;
32774
32976
  const mode = getIonMode$1(this);
32775
32977
  const value = this.getValue();
32776
32978
  const rtl = isRTL$1(el) ? 'rtl' : 'ltr';
32777
32979
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
32778
- 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, {
32779
32981
  [mode]: true,
32780
32982
  'in-item': hostContext('ion-item', el),
32781
32983
  'toggle-activated': activated,
@@ -32785,10 +32987,10 @@ class Toggle {
32785
32987
  [`toggle-alignment-${alignment}`]: alignment !== undefined,
32786
32988
  [`toggle-label-placement-${labelPlacement}`]: true,
32787
32989
  [`toggle-${rtl}`]: true,
32788
- }) }, 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: {
32789
32991
  'label-text-wrapper': true,
32790
32992
  'label-text-wrapper-hidden': !this.hasLabel,
32791
- }, 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()))));
32792
32994
  }
32793
32995
  get el() { return getElement(this); }
32794
32996
  static get watchers() { return {
@@ -32811,6 +33013,7 @@ class Toggle {
32811
33013
  "labelPlacement": [1, "label-placement"],
32812
33014
  "justify": [1],
32813
33015
  "alignment": [1],
33016
+ "required": [4],
32814
33017
  "activated": [32]
32815
33018
  },
32816
33019
  "$listeners$": undefined,
@@ -32842,6 +33045,10 @@ var IonToolbarMdStyle0 = toolbarMdCss;
32842
33045
  * @slot secondary - Content is placed to the left of the toolbar text in `ios` mode, and directly to the right in `md` mode.
32843
33046
  * @slot primary - Content is placed to the right of the toolbar text in `ios` mode, and to the far right in `md` mode.
32844
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.
32845
33052
  */
32846
33053
  class Toolbar {
32847
33054
  constructor(hostRef) {
@@ -32892,10 +33099,10 @@ class Toolbar {
32892
33099
  this.childrenStyles.forEach((value) => {
32893
33100
  Object.assign(childStyles, value);
32894
33101
  });
32895
- 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, {
32896
33103
  [mode]: true,
32897
33104
  'in-toolbar': hostContext('ion-toolbar', this.el),
32898
- })) }, 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" }))));
32899
33106
  }
32900
33107
  get el() { return getElement(this); }
32901
33108
  static get style() { return {