@ionic/core 8.0.1-dev.11713911458.1ad5f4cf → 8.0.1-dev.11714496052.149681e5

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 (448) hide show
  1. package/components/index2.js +119 -1
  2. package/components/input-shims.js +5 -5
  3. package/components/ion-content.js +6 -4
  4. package/components/ion-datetime-button.js +2 -2
  5. package/components/ion-datetime.js +15 -13
  6. package/components/ion-fab-button.js +2 -2
  7. package/components/ion-fab-list.js +2 -2
  8. package/components/ion-fab.js +2 -2
  9. package/components/ion-footer.js +2 -2
  10. package/components/ion-grid.js +2 -2
  11. package/components/ion-header.js +2 -2
  12. package/components/ion-img.js +1 -1
  13. package/components/ion-infinite-scroll-content.js +2 -2
  14. package/components/ion-infinite-scroll.js +1 -1
  15. package/components/ion-input-password-toggle.js +3 -3
  16. package/components/ion-input.js +8 -12
  17. package/components/ion-item-divider.js +2 -2
  18. package/components/ion-item-group.js +1 -1
  19. package/components/ion-item-option.js +2 -2
  20. package/components/ion-item-options.js +1 -1
  21. package/components/ion-item-sliding.js +1 -1
  22. package/components/ion-loading.js +2 -2
  23. package/components/ion-menu-button.js +2 -2
  24. package/components/ion-menu-toggle.js +2 -2
  25. package/components/ion-menu.js +2 -2
  26. package/components/ion-modal.js +10 -8
  27. package/components/ion-nav-link.js +1 -1
  28. package/components/ion-nav.js +1 -1
  29. package/components/ion-note.js +2 -2
  30. package/components/ion-picker-legacy.js +2 -2
  31. package/components/ion-progress-bar.js +1 -1
  32. package/components/ion-range.js +3 -3
  33. package/components/ion-refresher-content.js +1 -1
  34. package/components/ion-refresher.js +1 -1
  35. package/components/ion-reorder-group.js +1 -1
  36. package/components/ion-reorder.js +1 -1
  37. package/components/ion-router-link.js +2 -2
  38. package/components/ion-router-outlet.js +1 -1
  39. package/components/ion-row.js +1 -1
  40. package/components/ion-searchbar.js +4 -4
  41. package/components/ion-segment-button.js +3 -3
  42. package/components/ion-segment.js +2 -2
  43. package/components/ion-select-option.js +1 -1
  44. package/components/ion-select.js +2 -2
  45. package/components/ion-skeleton-text.js +2 -2
  46. package/components/ion-split-pane.js +2 -2
  47. package/components/ion-tab-bar.js +2 -2
  48. package/components/ion-tab-button.js +2 -2
  49. package/components/ion-tab.js +2 -2
  50. package/components/ion-tabs.js +1 -1
  51. package/components/ion-text.js +2 -2
  52. package/components/ion-textarea.js +2 -2
  53. package/components/ion-thumbnail.js +1 -1
  54. package/components/ion-title.js +2 -2
  55. package/components/ion-toast.js +2 -2
  56. package/components/ion-toggle.js +3 -3
  57. package/components/ion-toolbar.js +2 -2
  58. package/components/label.js +2 -2
  59. package/components/list-header.js +2 -2
  60. package/components/list.js +1 -1
  61. package/components/overlays.js +3 -2
  62. package/components/picker-column-option.js +2 -2
  63. package/components/picker-column.js +156 -4
  64. package/components/picker-column2.js +2 -2
  65. package/components/picker.js +2 -2
  66. package/components/popover.js +6 -4
  67. package/components/radio-group.js +1 -1
  68. package/components/radio.js +3 -3
  69. package/components/ripple-effect.js +1 -1
  70. package/components/select-popover.js +1 -1
  71. package/components/spinner.js +1 -1
  72. package/css/core.css +1 -1
  73. package/css/core.css.map +1 -1
  74. package/css/ionic.bundle.css +1 -1
  75. package/css/ionic.bundle.css.map +1 -1
  76. package/css/palettes/dark.always.css +1 -1
  77. package/css/palettes/dark.always.css.map +1 -1
  78. package/css/palettes/dark.class.css +1 -1
  79. package/css/palettes/dark.class.css.map +1 -1
  80. package/css/palettes/dark.system.css +1 -1
  81. package/css/palettes/dark.system.css.map +1 -1
  82. package/dist/cjs/{index-6d6ac424.js → index-be7cf657.js} +124 -6
  83. package/dist/cjs/index.cjs.js +5 -5
  84. package/dist/cjs/{input-shims-9e59ef62.js → input-shims-20d639e6.js} +5 -5
  85. package/dist/cjs/ion-action-sheet.cjs.entry.js +1 -1
  86. package/dist/cjs/ion-alert.cjs.entry.js +1 -1
  87. package/dist/cjs/ion-app_8.cjs.entry.js +16 -15
  88. package/dist/cjs/ion-avatar_3.cjs.entry.js +1 -1
  89. package/dist/cjs/ion-col_3.cjs.entry.js +3 -3
  90. package/dist/cjs/ion-datetime-button.cjs.entry.js +2 -2
  91. package/dist/cjs/ion-datetime_3.cjs.entry.js +20 -18
  92. package/dist/cjs/ion-fab_3.cjs.entry.js +6 -6
  93. package/dist/cjs/ion-img.cjs.entry.js +1 -1
  94. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +3 -3
  95. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +3 -3
  96. package/dist/cjs/ion-input.cjs.entry.js +7 -12
  97. package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
  98. package/dist/cjs/ion-item_8.cjs.entry.js +12 -12
  99. package/dist/cjs/ion-loading.cjs.entry.js +3 -3
  100. package/dist/cjs/ion-menu_3.cjs.entry.js +7 -7
  101. package/dist/cjs/ion-modal.cjs.entry.js +10 -9
  102. package/dist/cjs/ion-nav_2.cjs.entry.js +4 -3
  103. package/dist/cjs/ion-picker-column-option.cjs.entry.js +2 -2
  104. package/dist/cjs/ion-picker-column.cjs.entry.js +154 -4
  105. package/dist/cjs/ion-picker.cjs.entry.js +2 -2
  106. package/dist/cjs/ion-popover.cjs.entry.js +6 -5
  107. package/dist/cjs/ion-progress-bar.cjs.entry.js +1 -1
  108. package/dist/cjs/ion-radio_2.cjs.entry.js +4 -4
  109. package/dist/cjs/ion-range.cjs.entry.js +3 -3
  110. package/dist/cjs/ion-refresher_2.cjs.entry.js +2 -2
  111. package/dist/cjs/ion-reorder_2.cjs.entry.js +2 -2
  112. package/dist/cjs/ion-ripple-effect.cjs.entry.js +1 -1
  113. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  114. package/dist/cjs/ion-searchbar.cjs.entry.js +4 -4
  115. package/dist/cjs/ion-segment_2.cjs.entry.js +5 -5
  116. package/dist/cjs/ion-select_3.cjs.entry.js +5 -5
  117. package/dist/cjs/ion-spinner.cjs.entry.js +1 -1
  118. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  119. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +4 -4
  120. package/dist/cjs/ion-tab_2.cjs.entry.js +3 -3
  121. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  122. package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
  123. package/dist/cjs/ion-toast.cjs.entry.js +3 -3
  124. package/dist/cjs/ion-toggle.cjs.entry.js +3 -3
  125. package/dist/cjs/ionic.cjs.js +1 -1
  126. package/dist/cjs/{ios.transition-d4f0ca4e.js → ios.transition-b0e0575b.js} +3 -1
  127. package/dist/cjs/loader.cjs.js +1 -1
  128. package/dist/cjs/{md.transition-857328f3.js → md.transition-b22b61b7.js} +3 -1
  129. package/dist/cjs/{overlays-10c452b2.js → overlays-574e681c.js} +3 -1
  130. package/dist/collection/components/content/content.js +23 -4
  131. package/dist/collection/components/content/test/content.spec.js +27 -0
  132. package/dist/collection/components/datetime/datetime.js +15 -13
  133. package/dist/collection/components/datetime/test/overlay-roles/datetime.e2e.js +34 -0
  134. package/dist/collection/components/datetime-button/datetime-button.js +2 -2
  135. package/dist/collection/components/fab/fab.js +2 -2
  136. package/dist/collection/components/fab-button/fab-button.js +2 -2
  137. package/dist/collection/components/fab-list/fab-list.js +2 -2
  138. package/dist/collection/components/footer/footer.js +2 -2
  139. package/dist/collection/components/grid/grid.js +2 -2
  140. package/dist/collection/components/header/header.js +2 -2
  141. package/dist/collection/components/img/img.js +1 -1
  142. package/dist/collection/components/infinite-scroll/infinite-scroll.js +1 -1
  143. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +2 -2
  144. package/dist/collection/components/input/input.js +24 -12
  145. package/dist/collection/components/input/test/input.spec.js +13 -0
  146. package/dist/collection/components/input-password-toggle/input-password-toggle.js +3 -3
  147. package/dist/collection/components/item-divider/item-divider.js +2 -2
  148. package/dist/collection/components/item-group/item-group.js +1 -1
  149. package/dist/collection/components/item-option/item-option.js +2 -2
  150. package/dist/collection/components/item-options/item-options.js +1 -1
  151. package/dist/collection/components/item-sliding/item-sliding.js +1 -1
  152. package/dist/collection/components/label/label.js +2 -2
  153. package/dist/collection/components/list/list.js +1 -1
  154. package/dist/collection/components/list-header/list-header.js +2 -2
  155. package/dist/collection/components/loading/loading.js +2 -2
  156. package/dist/collection/components/menu/menu.js +2 -2
  157. package/dist/collection/components/menu-button/menu-button.js +2 -2
  158. package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
  159. package/dist/collection/components/modal/gestures/sheet.js +3 -2
  160. package/dist/collection/components/modal/modal.js +25 -6
  161. package/dist/collection/components/modal/test/basic/modal.spec.js +19 -0
  162. package/dist/collection/components/nav/nav.js +1 -1
  163. package/dist/collection/components/nav-link/nav-link.js +1 -1
  164. package/dist/collection/components/note/note.js +2 -2
  165. package/dist/collection/components/picker/picker.js +2 -2
  166. package/dist/collection/components/picker-column/picker-column.css +19 -0
  167. package/dist/collection/components/picker-column/picker-column.js +158 -3
  168. package/dist/collection/components/picker-column/test/picker-column.spec.js +83 -0
  169. package/dist/collection/components/picker-column-option/picker-column-option.js +2 -2
  170. package/dist/collection/components/picker-legacy/picker.js +2 -2
  171. package/dist/collection/components/picker-legacy-column/picker-column.js +2 -2
  172. package/dist/collection/components/popover/popover.js +23 -4
  173. package/dist/collection/components/popover/test/basic/popover.spec.js +19 -0
  174. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  175. package/dist/collection/components/radio/radio.js +3 -3
  176. package/dist/collection/components/radio-group/radio-group.js +1 -1
  177. package/dist/collection/components/range/range.js +3 -3
  178. package/dist/collection/components/refresher/refresher.js +1 -1
  179. package/dist/collection/components/refresher-content/refresher-content.js +1 -1
  180. package/dist/collection/components/reorder/reorder.js +1 -1
  181. package/dist/collection/components/reorder-group/reorder-group.js +1 -1
  182. package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
  183. package/dist/collection/components/router-link/router-link.js +2 -2
  184. package/dist/collection/components/router-outlet/router-outlet.js +1 -1
  185. package/dist/collection/components/row/row.js +1 -1
  186. package/dist/collection/components/searchbar/searchbar.js +4 -4
  187. package/dist/collection/components/segment/segment.js +2 -2
  188. package/dist/collection/components/segment-button/segment-button.js +3 -3
  189. package/dist/collection/components/select/select.js +2 -2
  190. package/dist/collection/components/select-option/select-option.js +1 -1
  191. package/dist/collection/components/select-popover/select-popover.js +1 -1
  192. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
  193. package/dist/collection/components/spinner/spinner.js +1 -1
  194. package/dist/collection/components/split-pane/split-pane.js +2 -2
  195. package/dist/collection/components/tab/tab.js +2 -2
  196. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  197. package/dist/collection/components/tab-button/tab-button.js +2 -2
  198. package/dist/collection/components/tabs/tabs.js +1 -1
  199. package/dist/collection/components/text/text.js +2 -2
  200. package/dist/collection/components/textarea/textarea.js +2 -2
  201. package/dist/collection/components/thumbnail/thumbnail.js +1 -1
  202. package/dist/collection/components/title/title.js +2 -2
  203. package/dist/collection/components/toast/toast.js +2 -2
  204. package/dist/collection/components/toggle/toggle.js +3 -3
  205. package/dist/collection/components/toolbar/toolbar.js +2 -2
  206. package/dist/collection/utils/focus-controller/index.js +112 -0
  207. package/dist/collection/utils/focus-controller/test/generic/focus-controller.e2e.js +52 -0
  208. package/dist/collection/utils/focus-controller/test/ionic/focus-controller.e2e.js +52 -0
  209. package/dist/collection/utils/input-shims/hacks/scroll-assist.js +5 -5
  210. package/dist/collection/utils/overlays.js +2 -1
  211. package/dist/collection/utils/transition/index.js +11 -1
  212. package/dist/docs.json +96 -1
  213. package/dist/esm/{index-f0d7371a.js → index-c9a90692.js} +121 -3
  214. package/dist/esm/index.js +5 -5
  215. package/dist/esm/{input-shims-0314bbe5.js → input-shims-4530285e.js} +5 -5
  216. package/dist/esm/ion-action-sheet.entry.js +1 -1
  217. package/dist/esm/ion-alert.entry.js +1 -1
  218. package/dist/esm/ion-app_8.entry.js +16 -15
  219. package/dist/esm/ion-avatar_3.entry.js +1 -1
  220. package/dist/esm/ion-col_3.entry.js +3 -3
  221. package/dist/esm/ion-datetime-button.entry.js +2 -2
  222. package/dist/esm/ion-datetime_3.entry.js +20 -18
  223. package/dist/esm/ion-fab_3.entry.js +6 -6
  224. package/dist/esm/ion-img.entry.js +1 -1
  225. package/dist/esm/ion-infinite-scroll_2.entry.js +3 -3
  226. package/dist/esm/ion-input-password-toggle.entry.js +3 -3
  227. package/dist/esm/ion-input.entry.js +7 -12
  228. package/dist/esm/ion-item-option_3.entry.js +4 -4
  229. package/dist/esm/ion-item_8.entry.js +12 -12
  230. package/dist/esm/ion-loading.entry.js +3 -3
  231. package/dist/esm/ion-menu_3.entry.js +7 -7
  232. package/dist/esm/ion-modal.entry.js +10 -9
  233. package/dist/esm/ion-nav_2.entry.js +4 -3
  234. package/dist/esm/ion-picker-column-option.entry.js +2 -2
  235. package/dist/esm/ion-picker-column.entry.js +154 -4
  236. package/dist/esm/ion-picker.entry.js +2 -2
  237. package/dist/esm/ion-popover.entry.js +6 -5
  238. package/dist/esm/ion-progress-bar.entry.js +1 -1
  239. package/dist/esm/ion-radio_2.entry.js +4 -4
  240. package/dist/esm/ion-range.entry.js +3 -3
  241. package/dist/esm/ion-refresher_2.entry.js +2 -2
  242. package/dist/esm/ion-reorder_2.entry.js +2 -2
  243. package/dist/esm/ion-ripple-effect.entry.js +1 -1
  244. package/dist/esm/ion-route_4.entry.js +2 -2
  245. package/dist/esm/ion-searchbar.entry.js +4 -4
  246. package/dist/esm/ion-segment_2.entry.js +5 -5
  247. package/dist/esm/ion-select_3.entry.js +5 -5
  248. package/dist/esm/ion-spinner.entry.js +1 -1
  249. package/dist/esm/ion-split-pane.entry.js +2 -2
  250. package/dist/esm/ion-tab-bar_2.entry.js +4 -4
  251. package/dist/esm/ion-tab_2.entry.js +3 -3
  252. package/dist/esm/ion-text.entry.js +2 -2
  253. package/dist/esm/ion-textarea.entry.js +2 -2
  254. package/dist/esm/ion-toast.entry.js +3 -3
  255. package/dist/esm/ion-toggle.entry.js +3 -3
  256. package/dist/esm/ionic.js +1 -1
  257. package/dist/esm/{ios.transition-71bfa932.js → ios.transition-0321a527.js} +3 -1
  258. package/dist/esm/loader.js +1 -1
  259. package/dist/esm/{md.transition-86aef3c0.js → md.transition-57a06277.js} +3 -1
  260. package/dist/esm/{overlays-6fb4a2f2.js → overlays-1eac28e2.js} +3 -2
  261. package/dist/esm-es5/index-c9a90692.js +4 -0
  262. package/dist/esm-es5/index.js +1 -1
  263. package/dist/esm-es5/input-shims-4530285e.js +4 -0
  264. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  265. package/dist/esm-es5/ion-alert.entry.js +1 -1
  266. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  267. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  268. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  269. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  270. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  271. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  272. package/dist/esm-es5/ion-img.entry.js +1 -1
  273. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  274. package/dist/esm-es5/ion-input-password-toggle.entry.js +1 -1
  275. package/dist/esm-es5/ion-input.entry.js +1 -1
  276. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  277. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  278. package/dist/esm-es5/ion-loading.entry.js +1 -1
  279. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  280. package/dist/esm-es5/ion-modal.entry.js +1 -1
  281. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  282. package/dist/esm-es5/ion-picker-column-option.entry.js +1 -1
  283. package/dist/esm-es5/ion-picker-column.entry.js +1 -1
  284. package/dist/esm-es5/ion-picker.entry.js +1 -1
  285. package/dist/esm-es5/ion-popover.entry.js +1 -1
  286. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  287. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  288. package/dist/esm-es5/ion-range.entry.js +1 -1
  289. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  290. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  291. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  292. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  293. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  294. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  295. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  296. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  297. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  298. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  299. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  300. package/dist/esm-es5/ion-text.entry.js +1 -1
  301. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  302. package/dist/esm-es5/ion-toast.entry.js +1 -1
  303. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  304. package/dist/esm-es5/ionic.js +1 -1
  305. package/dist/esm-es5/ios.transition-0321a527.js +4 -0
  306. package/dist/esm-es5/loader.js +1 -1
  307. package/dist/esm-es5/md.transition-57a06277.js +4 -0
  308. package/dist/esm-es5/{overlays-6fb4a2f2.js → overlays-1eac28e2.js} +1 -1
  309. package/dist/html.html-data.json +24 -0
  310. package/dist/ionic/index.esm.js +1 -1
  311. package/dist/ionic/ionic.esm.js +1 -1
  312. package/dist/ionic/{p-07584ab4.system.js → p-0cd59e4e.system.js} +1 -1
  313. package/dist/ionic/{p-50205ef9.system.entry.js → p-0d88f9c2.system.entry.js} +1 -1
  314. package/dist/ionic/{p-1fe1f512.entry.js → p-1a8d2fe3.entry.js} +1 -1
  315. package/dist/ionic/{p-3008ca4e.system.entry.js → p-1aff89d0.system.entry.js} +1 -1
  316. package/dist/ionic/p-1fbe9447.system.js +4 -0
  317. package/dist/ionic/{p-4a01cec0.entry.js → p-2185597f.entry.js} +1 -1
  318. package/dist/ionic/{p-7f33a6e2.system.entry.js → p-22d183b4.system.entry.js} +2 -2
  319. package/dist/ionic/{p-5f15ee76.entry.js → p-255b6f01.entry.js} +1 -1
  320. package/dist/ionic/p-282cc565.js +4 -0
  321. package/dist/ionic/{p-4f6ebc2b.entry.js → p-2870db48.entry.js} +1 -1
  322. package/dist/ionic/{p-cbd87df6.entry.js → p-2b45e94f.entry.js} +1 -1
  323. package/dist/ionic/{p-cf8101a6.system.entry.js → p-2c1cc9bf.system.entry.js} +1 -1
  324. package/dist/ionic/p-2e56ebdc.entry.js +4 -0
  325. package/dist/ionic/p-30a1fb3a.js +4 -0
  326. package/dist/ionic/{p-e62d4a6c.entry.js → p-30a40a57.entry.js} +1 -1
  327. package/dist/ionic/{p-98af538a.system.entry.js → p-320f9186.system.entry.js} +2 -2
  328. package/dist/ionic/p-3328cd28.entry.js +4 -0
  329. package/dist/ionic/{p-6ef17d86.system.entry.js → p-3339b5ca.system.entry.js} +1 -1
  330. package/dist/ionic/p-39a3eca2.entry.js +4 -0
  331. package/dist/ionic/{p-703f62c1.entry.js → p-3af6a819.entry.js} +1 -1
  332. package/dist/ionic/p-3ebbbd37.js +4 -0
  333. package/dist/ionic/{p-8a5152e5.entry.js → p-3f7e6661.entry.js} +1 -1
  334. package/dist/ionic/{p-814efd87.system.entry.js → p-4195e4d0.system.entry.js} +1 -1
  335. package/dist/ionic/{p-dbc3e90c.entry.js → p-454c2bfe.entry.js} +1 -1
  336. package/dist/ionic/{p-2690b1de.js → p-46111310.js} +1 -1
  337. package/dist/ionic/p-46f407f0.system.js +4 -0
  338. package/dist/ionic/{p-4809ddae.system.entry.js → p-47915d5c.system.entry.js} +1 -1
  339. package/dist/ionic/{p-5ad55625.entry.js → p-49a47e7c.entry.js} +1 -1
  340. package/dist/ionic/p-4b078620.entry.js +4 -0
  341. package/dist/ionic/{p-332aa81e.entry.js → p-4c24ae09.entry.js} +1 -1
  342. package/dist/ionic/{p-904df2ee.system.entry.js → p-4c3d0457.system.entry.js} +1 -1
  343. package/dist/ionic/{p-530207f9.entry.js → p-4f1d1637.entry.js} +1 -1
  344. package/dist/ionic/{p-341b3f37.entry.js → p-4fc2a1ce.entry.js} +1 -1
  345. package/dist/ionic/{p-53d69c70.system.entry.js → p-5015ef54.system.entry.js} +1 -1
  346. package/dist/ionic/{p-e8a713b5.entry.js → p-5087e4df.entry.js} +1 -1
  347. package/dist/ionic/{p-5895b91d.entry.js → p-5408ee96.entry.js} +1 -1
  348. package/dist/ionic/p-55b9eb6b.system.entry.js +4 -0
  349. package/dist/ionic/{p-987e38ef.system.entry.js → p-56c470c2.system.entry.js} +1 -1
  350. package/dist/ionic/{p-5c26fed5.system.entry.js → p-5983ad03.system.entry.js} +1 -1
  351. package/dist/ionic/p-5a82c7b9.system.entry.js +4 -0
  352. package/dist/ionic/p-5e074809.system.entry.js +4 -0
  353. package/dist/ionic/{p-e81c3ca2.system.entry.js → p-676e0f71.system.entry.js} +1 -1
  354. package/dist/ionic/{p-eac224fa.entry.js → p-70605125.entry.js} +1 -1
  355. package/dist/ionic/{p-9fd3ca09.system.entry.js → p-70e00e9f.system.entry.js} +1 -1
  356. package/dist/ionic/{p-1472c130.entry.js → p-71044f08.entry.js} +1 -1
  357. package/dist/ionic/p-72b181e2.system.entry.js +4 -0
  358. package/dist/ionic/{p-fa0bf39d.system.entry.js → p-75a6989a.system.entry.js} +1 -1
  359. package/dist/ionic/p-7a152fab.entry.js +4 -0
  360. package/dist/ionic/{p-68afa357.system.entry.js → p-7e5972a0.system.entry.js} +2 -2
  361. package/dist/ionic/p-80270af4.system.entry.js +4 -0
  362. package/dist/ionic/p-8134b3c4.entry.js +4 -0
  363. package/dist/ionic/{p-4f77a080.system.entry.js → p-89f2d585.system.entry.js} +1 -1
  364. package/dist/ionic/{p-6cf780b6.system.entry.js → p-8ffff03f.system.entry.js} +1 -1
  365. package/dist/ionic/{p-bc3d649d.entry.js → p-9277e3d2.entry.js} +1 -1
  366. package/dist/ionic/p-944dd52a.system.js +4 -0
  367. package/dist/ionic/{p-ca5bb110.system.entry.js → p-94d20e10.system.entry.js} +1 -1
  368. package/dist/ionic/{p-48f60474.entry.js → p-962f482c.entry.js} +1 -1
  369. package/dist/ionic/p-9832568f.entry.js +4 -0
  370. package/dist/ionic/{p-f956e38a.entry.js → p-9876ce3b.entry.js} +1 -1
  371. package/dist/ionic/{p-151e8afd.entry.js → p-9a06b83d.entry.js} +1 -1
  372. package/dist/ionic/{p-f8f8c5a8.system.entry.js → p-9dbd1f93.system.entry.js} +1 -1
  373. package/dist/ionic/{p-c54b167f.system.entry.js → p-9e829e8f.system.entry.js} +1 -1
  374. package/dist/ionic/p-a0351a92.system.js +4 -0
  375. package/dist/ionic/{p-c927dbe2.system.entry.js → p-a0dd50e4.system.entry.js} +1 -1
  376. package/dist/ionic/{p-2b86020c.system.entry.js → p-a4ce5696.system.entry.js} +1 -1
  377. package/dist/ionic/{p-1ba197b6.entry.js → p-a51785b7.entry.js} +1 -1
  378. package/dist/ionic/{p-e292247e.system.entry.js → p-a6f505f5.system.entry.js} +1 -1
  379. package/dist/ionic/p-aa2c2a8b.system.entry.js +4 -0
  380. package/dist/ionic/{p-d061515d.system.entry.js → p-ac058b0e.system.entry.js} +1 -1
  381. package/dist/ionic/p-ae9ebfd1.entry.js +4 -0
  382. package/dist/ionic/{p-91b568e2.system.entry.js → p-b0fc315c.system.entry.js} +1 -1
  383. package/dist/ionic/p-b79b8d53.js +4 -0
  384. package/dist/ionic/{p-e93cd31c.entry.js → p-b80dfa1b.entry.js} +1 -1
  385. package/dist/ionic/{p-df0d39c7.system.entry.js → p-b8d966bb.system.entry.js} +2 -2
  386. package/dist/ionic/{p-90f8498c.entry.js → p-ba8fd3f7.entry.js} +1 -1
  387. package/dist/ionic/{p-3d977e09.system.entry.js → p-bd62a431.system.entry.js} +2 -2
  388. package/dist/ionic/{p-70f6b982.entry.js → p-bebb01a5.entry.js} +1 -1
  389. package/dist/ionic/p-c27aef92.system.js +4 -0
  390. package/dist/ionic/p-c34a80bd.entry.js +4 -0
  391. package/dist/ionic/{p-ca6decbd.entry.js → p-cfd91e4b.entry.js} +1 -1
  392. package/dist/ionic/p-d38c209e.system.entry.js +4 -0
  393. package/dist/ionic/{p-aa79cc0e.system.entry.js → p-d3a32834.system.entry.js} +2 -2
  394. package/dist/ionic/{p-275dd0ba.system.entry.js → p-d5559e4d.system.entry.js} +1 -1
  395. package/dist/ionic/p-d76c8ebd.entry.js +4 -0
  396. package/dist/ionic/{p-55bc2a11.system.entry.js → p-d833beb7.system.entry.js} +1 -1
  397. package/dist/ionic/p-d8d6ebc0.system.js +1 -1
  398. package/dist/ionic/{p-7c93f00b.system.entry.js → p-da29453c.system.entry.js} +1 -1
  399. package/dist/ionic/{p-e099a6f3.entry.js → p-dffd0e36.entry.js} +1 -1
  400. package/dist/ionic/{p-1c42ad90.entry.js → p-eb1428cc.entry.js} +1 -1
  401. package/dist/ionic/{p-e1ad8e76.entry.js → p-f49da44a.entry.js} +1 -1
  402. package/dist/ionic/p-f5006fa9.system.entry.js +4 -0
  403. package/dist/ionic/p-fe9a80b7.entry.js +4 -0
  404. package/dist/types/components/content/content.d.ts +8 -0
  405. package/dist/types/components/input/input.d.ts +4 -0
  406. package/dist/types/components/modal/modal-interface.d.ts +1 -0
  407. package/dist/types/components/modal/modal.d.ts +18 -0
  408. package/dist/types/components/picker-column/picker-column.d.ts +35 -0
  409. package/dist/types/components/popover/popover-interface.d.ts +1 -0
  410. package/dist/types/components/popover/popover.d.ts +18 -0
  411. package/dist/types/components.d.ts +32 -0
  412. package/dist/types/utils/config.d.ts +9 -0
  413. package/dist/types/utils/focus-controller/index.d.ts +13 -0
  414. package/dist/types/utils/overlays.d.ts +1 -0
  415. package/hydrate/index.js +426 -154
  416. package/package.json +1 -1
  417. package/dist/esm-es5/index-f0d7371a.js +0 -4
  418. package/dist/esm-es5/input-shims-0314bbe5.js +0 -4
  419. package/dist/esm-es5/ios.transition-71bfa932.js +0 -4
  420. package/dist/esm-es5/md.transition-86aef3c0.js +0 -4
  421. package/dist/ionic/p-0e713efe.js +0 -4
  422. package/dist/ionic/p-2613c305.system.js +0 -4
  423. package/dist/ionic/p-34f26d8b.entry.js +0 -4
  424. package/dist/ionic/p-38010e7c.system.entry.js +0 -4
  425. package/dist/ionic/p-4d2b2d23.system.entry.js +0 -4
  426. package/dist/ionic/p-4de53118.js +0 -4
  427. package/dist/ionic/p-510cb8e6.system.js +0 -4
  428. package/dist/ionic/p-582db405.system.entry.js +0 -4
  429. package/dist/ionic/p-5f28cb75.js +0 -4
  430. package/dist/ionic/p-7372cf23.system.entry.js +0 -4
  431. package/dist/ionic/p-84ead641.entry.js +0 -4
  432. package/dist/ionic/p-91dabef7.system.js +0 -4
  433. package/dist/ionic/p-9fa5ff32.system.js +0 -4
  434. package/dist/ionic/p-a28ea4d8.system.entry.js +0 -4
  435. package/dist/ionic/p-a39a73e3.entry.js +0 -4
  436. package/dist/ionic/p-a90201f2.js +0 -4
  437. package/dist/ionic/p-ac045dad.entry.js +0 -4
  438. package/dist/ionic/p-ba35f07f.entry.js +0 -4
  439. package/dist/ionic/p-c2762c6a.system.entry.js +0 -4
  440. package/dist/ionic/p-cc258008.entry.js +0 -4
  441. package/dist/ionic/p-ce5bf737.system.entry.js +0 -4
  442. package/dist/ionic/p-cf45a5c7.system.entry.js +0 -4
  443. package/dist/ionic/p-d277ba16.entry.js +0 -4
  444. package/dist/ionic/p-dfb78785.system.js +0 -4
  445. package/dist/ionic/p-e5f99a0d.entry.js +0 -4
  446. package/dist/ionic/p-e781c893.entry.js +0 -4
  447. package/dist/ionic/p-ec178f19.entry.js +0 -4
  448. package/dist/ionic/p-f6fec6a0.entry.js +0 -4
@@ -1,7 +1,9 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
+ import { c as config } from './ionic-global-e6c98cd0.js';
4
5
  import { w as writeTask, B as Build } from './index-bcd8859b.js';
6
+ import { p as printIonWarning } from './index-9b0d46f4.js';
5
7
  import { r as raf } from './helpers-da915de8.js';
6
8
 
7
9
  const LIFECYCLE_WILL_ENTER = 'ionViewWillEnter';
@@ -10,8 +12,117 @@ const LIFECYCLE_WILL_LEAVE = 'ionViewWillLeave';
10
12
  const LIFECYCLE_DID_LEAVE = 'ionViewDidLeave';
11
13
  const LIFECYCLE_WILL_UNLOAD = 'ionViewWillUnload';
12
14
 
13
- const iosTransitionAnimation = () => import('./ios.transition-71bfa932.js');
14
- const mdTransitionAnimation = () => import('./md.transition-86aef3c0.js');
15
+ /**
16
+ * Moves focus to a specified element. Note that we do not remove the tabindex
17
+ * because that can result in an unintentional blur. Non-focusables can't be
18
+ * focused, so the body will get focused again.
19
+ */
20
+ const moveFocus = (el) => {
21
+ el.tabIndex = -1;
22
+ el.focus();
23
+ };
24
+ /**
25
+ * Elements that are hidden using `display: none` should not be focused even if
26
+ * they are present in the DOM.
27
+ */
28
+ const isVisible = (el) => {
29
+ return el.offsetParent !== null;
30
+ };
31
+ /**
32
+ * The focus controller allows us to manage focus within a view so assistive
33
+ * technologies can inform users of changes to the navigation state. Traditional
34
+ * native apps have a way of informing assistive technology about a navigation
35
+ * state change. Mobile browsers have this too, but only when doing a full page
36
+ * load. In a single page app we do not do that, so we need to build this
37
+ * integration ourselves.
38
+ */
39
+ const createFocusController = () => {
40
+ const saveViewFocus = (referenceEl) => {
41
+ const focusManagerEnabled = config.get('focusManagerPriority', false);
42
+ /**
43
+ * When going back to a previously visited page focus should typically be moved
44
+ * back to the element that was last focused when the user was on this view.
45
+ */
46
+ if (focusManagerEnabled) {
47
+ const activeEl = document.activeElement;
48
+ if (activeEl !== null && (referenceEl === null || referenceEl === void 0 ? void 0 : referenceEl.contains(activeEl))) {
49
+ activeEl.setAttribute(LAST_FOCUS, 'true');
50
+ }
51
+ }
52
+ };
53
+ const setViewFocus = (referenceEl) => {
54
+ const focusManagerPriorities = config.get('focusManagerPriority', false);
55
+ /**
56
+ * If the focused element is a descendant of the referenceEl then it's possible
57
+ * that the app developer manually moved focus, so we do not want to override that.
58
+ * This can happen with inputs the are focused when a view transitions in.
59
+ */
60
+ if (Array.isArray(focusManagerPriorities) && !referenceEl.contains(document.activeElement)) {
61
+ /**
62
+ * When going back to a previously visited view focus should always be moved back
63
+ * to the element that the user was last focused on when they were on this view.
64
+ */
65
+ const lastFocus = referenceEl.querySelector(`[${LAST_FOCUS}]`);
66
+ if (lastFocus && isVisible(lastFocus)) {
67
+ moveFocus(lastFocus);
68
+ return;
69
+ }
70
+ for (const priority of focusManagerPriorities) {
71
+ /**
72
+ * For each recognized case (excluding the default case) make sure to return
73
+ * so that the fallback focus behavior does not run.
74
+ *
75
+ * We intentionally query for specific roles/semantic elements so that the
76
+ * transition manager can work with both Ionic and non-Ionic UI components.
77
+ *
78
+ * If new selectors are added, be sure to remove the outline ring by adding
79
+ * new selectors to rule in core.scss.
80
+ */
81
+ switch (priority) {
82
+ case 'content':
83
+ const content = referenceEl.querySelector('main, [role="main"]');
84
+ if (content && isVisible(content)) {
85
+ moveFocus(content);
86
+ return;
87
+ }
88
+ break;
89
+ case 'heading':
90
+ const headingOne = referenceEl.querySelector('h1, [role="heading"][aria-level="1"]');
91
+ if (headingOne && isVisible(headingOne)) {
92
+ moveFocus(headingOne);
93
+ return;
94
+ }
95
+ break;
96
+ case 'banner':
97
+ const header = referenceEl.querySelector('header, [role="banner"]');
98
+ if (header && isVisible(header)) {
99
+ moveFocus(header);
100
+ return;
101
+ }
102
+ break;
103
+ default:
104
+ printIonWarning(`Unrecognized focus manager priority value ${priority}`);
105
+ break;
106
+ }
107
+ }
108
+ /**
109
+ * If there is nothing to focus then focus the page so focus at least moves to
110
+ * the correct view. The browser will then determine where within the page to
111
+ * move focus to.
112
+ */
113
+ moveFocus(referenceEl);
114
+ }
115
+ };
116
+ return {
117
+ saveViewFocus,
118
+ setViewFocus,
119
+ };
120
+ };
121
+ const LAST_FOCUS = 'ion-last-focus';
122
+
123
+ const iosTransitionAnimation = () => import('./ios.transition-0321a527.js');
124
+ const mdTransitionAnimation = () => import('./md.transition-57a06277.js');
125
+ const focusController = createFocusController();
15
126
  // TODO(FW-2832): types
16
127
  const transition = (opts) => {
17
128
  return new Promise((resolve, reject) => {
@@ -33,6 +144,7 @@ const transition = (opts) => {
33
144
  const beforeTransition = (opts) => {
34
145
  const enteringEl = opts.enteringEl;
35
146
  const leavingEl = opts.leavingEl;
147
+ focusController.saveViewFocus(leavingEl);
36
148
  setZIndex(enteringEl, leavingEl, opts.direction);
37
149
  if (opts.showGoBack) {
38
150
  enteringEl.classList.add('can-go-back');
@@ -67,6 +179,7 @@ const afterTransition = (opts) => {
67
179
  leavingEl.classList.remove('ion-page-invisible');
68
180
  leavingEl.style.removeProperty('pointer-events');
69
181
  }
182
+ focusController.setViewFocus(enteringEl);
70
183
  };
71
184
  const getAnimationBuilder = async (opts) => {
72
185
  if (!opts.leavingEl || !opts.animated || opts.duration === 0) {
@@ -99,7 +212,12 @@ const animation = async (animationBuilder, opts) => {
99
212
  const noAnimation = async (opts) => {
100
213
  const enteringEl = opts.enteringEl;
101
214
  const leavingEl = opts.leavingEl;
102
- await waitForReady(opts, false);
215
+ const focusManagerEnabled = config.get('focusManagerPriority', false);
216
+ /**
217
+ * If the focus manager is enabled then we need to wait for Ionic components to be
218
+ * rendered otherwise the component to focus may not be focused because it is hidden.
219
+ */
220
+ await waitForReady(opts, focusManagerEnabled);
103
221
  fireWillEvents(enteringEl, leavingEl);
104
222
  fireDidEvents(enteringEl, leavingEl);
105
223
  return {
package/dist/esm/index.js CHANGED
@@ -2,9 +2,9 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  export { c as createAnimation } from './animation-eab5a4ca.js';
5
- export { a as LIFECYCLE_DID_ENTER, c as LIFECYCLE_DID_LEAVE, L as LIFECYCLE_WILL_ENTER, b as LIFECYCLE_WILL_LEAVE, d as LIFECYCLE_WILL_UNLOAD, g as getIonPageElement } from './index-f0d7371a.js';
6
- export { iosTransitionAnimation } from './ios.transition-71bfa932.js';
7
- export { mdTransitionAnimation } from './md.transition-86aef3c0.js';
5
+ export { a as LIFECYCLE_DID_ENTER, c as LIFECYCLE_DID_LEAVE, L as LIFECYCLE_WILL_ENTER, b as LIFECYCLE_WILL_LEAVE, d as LIFECYCLE_WILL_UNLOAD, g as getIonPageElement } from './index-c9a90692.js';
6
+ export { iosTransitionAnimation } from './ios.transition-0321a527.js';
7
+ export { mdTransitionAnimation } from './md.transition-57a06277.js';
8
8
  export { g as getTimeGivenProgression } from './cubic-bezier-fe2083dc.js';
9
9
  export { createGesture } from './index-39782642.js';
10
10
  export { g as getPlatforms, i as initialize, a as isPlatform } from './ionic-global-e6c98cd0.js';
@@ -12,12 +12,12 @@ export { c as componentOnReady } from './helpers-da915de8.js';
12
12
  export { I as IonicSafeString, g as getMode, s as setupConfig } from './config-49c88215.js';
13
13
  export { o as openURL } from './theme-01f3f29c.js';
14
14
  export { m as menuController } from './index-56d90da9.js';
15
- export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as pickerController, c as popoverController, t as toastController } from './overlays-6fb4a2f2.js';
15
+ export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as pickerController, c as popoverController, t as toastController } from './overlays-1eac28e2.js';
16
16
  import './index-a5d50daf.js';
17
17
  import './index-bcd8859b.js';
18
+ import './index-9b0d46f4.js';
18
19
  import './gesture-controller-314a54f6.js';
19
20
  import './hardware-back-button-ba8f64c2.js';
20
- import './index-9b0d46f4.js';
21
21
  import './framework-delegate-63d1a679.js';
22
22
 
23
23
  const IonicSlides = (opts) => {
@@ -338,7 +338,7 @@ const enableScrollAssist = (componentEl, inputEl, contentEl, footerEl, keyboardH
338
338
  const focusOut = () => {
339
339
  hasKeyboardBeenPresentedForTextField = false;
340
340
  win === null || win === void 0 ? void 0 : win.removeEventListener('ionKeyboardDidShow', keyboardShow);
341
- componentEl.removeEventListener('focusout', focusOut);
341
+ componentEl.removeEventListener('focusout', focusOut, true);
342
342
  };
343
343
  /**
344
344
  * When the input is about to receive
@@ -358,13 +358,13 @@ const enableScrollAssist = (componentEl, inputEl, contentEl, footerEl, keyboardH
358
358
  }
359
359
  jsSetFocus(componentEl, inputEl, contentEl, footerEl, keyboardHeight, addScrollPadding, disableClonedInput, platformHeight);
360
360
  win === null || win === void 0 ? void 0 : win.addEventListener('ionKeyboardDidShow', keyboardShow);
361
- componentEl.addEventListener('focusout', focusOut);
361
+ componentEl.addEventListener('focusout', focusOut, true);
362
362
  };
363
- componentEl.addEventListener('focusin', focusIn);
363
+ componentEl.addEventListener('focusin', focusIn, true);
364
364
  return () => {
365
- componentEl.removeEventListener('focusin', focusIn);
365
+ componentEl.removeEventListener('focusin', focusIn, true);
366
366
  win === null || win === void 0 ? void 0 : win.removeEventListener('ionKeyboardDidShow', keyboardShow);
367
- componentEl.removeEventListener('focusout', focusOut);
367
+ componentEl.removeEventListener('focusout', focusOut, true);
368
368
  };
369
369
  };
370
370
  /**
@@ -5,7 +5,7 @@ import { r as registerInstance, d as createEvent, e as readTask, h, f as Host, i
5
5
  import { c as createButtonActiveGesture } from './button-active-46df59c1.js';
6
6
  import { r as raf } from './helpers-da915de8.js';
7
7
  import { c as createLockController } from './lock-controller-316928be.js';
8
- import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, f as present, g as dismiss, h as eventMethod, s as safeCall, j as prepareOverlay, k as setOverlayId } from './overlays-6fb4a2f2.js';
8
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, f as present, g as dismiss, h as eventMethod, s as safeCall, j as prepareOverlay, k as setOverlayId } from './overlays-1eac28e2.js';
9
9
  import { g as getClassMap } from './theme-01f3f29c.js';
10
10
  import { b as getIonMode } from './ionic-global-e6c98cd0.js';
11
11
  import { c as createAnimation } from './animation-eab5a4ca.js';
@@ -6,7 +6,7 @@ import { E as ENABLE_HTML_CONTENT_DEFAULT, a as sanitizeDOMString } from './conf
6
6
  import { c as createButtonActiveGesture } from './button-active-46df59c1.js';
7
7
  import { r as raf } from './helpers-da915de8.js';
8
8
  import { c as createLockController } from './lock-controller-316928be.js';
9
- import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-6fb4a2f2.js';
9
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-1eac28e2.js';
10
10
  import { g as getClassMap } from './theme-01f3f29c.js';
11
11
  import { c as config, b as getIonMode } from './ionic-global-e6c98cd0.js';
12
12
  import { c as createAnimation } from './animation-eab5a4ca.js';
@@ -13,7 +13,7 @@ import { c as createKeyboardController } from './keyboard-controller-ec5c2bfa.js
13
13
  import { g as getTimeGivenProgression } from './cubic-bezier-fe2083dc.js';
14
14
  import { a as attachComponent, d as detachComponent } from './framework-delegate-63d1a679.js';
15
15
  import { c as createLockController } from './lock-controller-316928be.js';
16
- import { t as transition } from './index-f0d7371a.js';
16
+ import { t as transition } from './index-c9a90692.js';
17
17
  import './index-a5d50daf.js';
18
18
  import './keyboard-73175e24.js';
19
19
  import './capacitor-59395cbd.js';
@@ -41,7 +41,7 @@ const App = class {
41
41
  * platforms proceed into this block.
42
42
  */
43
43
  const platform = isPlatform(window, 'ios') ? 'ios' : 'android';
44
- import('./input-shims-0314bbe5.js').then((module) => module.startInputShims(config, platform));
44
+ import('./input-shims-4530285e.js').then((module) => module.startInputShims(config, platform));
45
45
  }
46
46
  const hardwareBackButtonModule = await import('./hardware-back-button-ba8f64c2.js');
47
47
  const supportsHardwareBackButtonEvents = isHybrid || shouldUseCloseWatcher();
@@ -184,6 +184,7 @@ const Content = class {
184
184
  };
185
185
  this.color = undefined;
186
186
  this.fullscreen = false;
187
+ this.fixedSlotPlacement = 'after';
187
188
  this.forceOverscroll = undefined;
188
189
  this.scrollX = false;
189
190
  this.scrollY = true;
@@ -465,13 +466,13 @@ const Content = class {
465
466
  }
466
467
  }
467
468
  render() {
468
- const { isMainContent, scrollX, scrollY, el } = this;
469
+ const { fixedSlotPlacement, isMainContent, scrollX, scrollY, el } = this;
469
470
  const rtl = isRTL(el) ? 'rtl' : 'ltr';
470
471
  const mode = getIonMode(this);
471
472
  const forceOverscroll = this.shouldForceOverscroll();
472
473
  const transitionShadow = mode === 'ios';
473
474
  this.resize();
474
- return (h(Host, { key: '98e9658e69c0bbe0113e4c1b89dd7b240334c039', role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
475
+ return (h(Host, { key: 'f599a7da14969df38c20a6f650179d2a319fb58b', role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
475
476
  [mode]: true,
476
477
  'content-sizing': hostContext('ion-popover', this.el),
477
478
  overscroll: forceOverscroll,
@@ -479,12 +480,12 @@ const Content = class {
479
480
  }), style: {
480
481
  '--offset-top': `${this.cTop}px`,
481
482
  '--offset-bottom': `${this.cBottom}px`,
482
- } }, h("div", { key: 'e89aa6ea09625846db52d63bdbf06c3c279a5ba4', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), h("div", { key: '37925cf9d898ede58d5ac7b5a650c648033602a3', class: {
483
+ } }, h("div", { key: '7c545c3c95ea05abd036d0462936ac153d2a8fc6', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), fixedSlotPlacement === 'before' ? h("slot", { name: "fixed" }) : null, h("div", { key: 'a67ab7438466c99f74b7ba59964802c3ba86ac5b', class: {
483
484
  'inner-scroll': true,
484
485
  'scroll-x': scrollX,
485
486
  'scroll-y': scrollY,
486
487
  overscroll: (scrollX || scrollY) && forceOverscroll,
487
- }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: 'a40f964cacf0c2e2bdcf962791aaadb386d44323' })), transitionShadow ? (h("div", { class: "transition-effect" }, h("div", { class: "transition-cover" }), h("div", { class: "transition-shadow" }))) : null, h("slot", { key: 'd21886cff0bc417e1f5e3a436dddc079e967579b', name: "fixed" })));
488
+ }, ref: (scrollEl) => (this.scrollEl = scrollEl), onScroll: this.scrollEvents ? (ev) => this.onScroll(ev) : undefined, part: "scroll" }, h("slot", { key: '6d10fcac2e40b4dd6c20d91a8957ac07251d2fa7' })), transitionShadow ? (h("div", { class: "transition-effect" }, h("div", { class: "transition-cover" }), h("div", { class: "transition-shadow" }))) : null, fixedSlotPlacement === 'after' ? h("slot", { name: "fixed" }) : null));
488
489
  }
489
490
  get el() { return getElement(this); }
490
491
  };
@@ -652,7 +653,7 @@ const Footer = class {
652
653
  const mode = getIonMode(this);
653
654
  const tabs = this.el.closest('ion-tabs');
654
655
  const tabBar = tabs === null || tabs === void 0 ? void 0 : tabs.querySelector(':scope > ion-tab-bar');
655
- return (h(Host, { key: 'ddc228f1a1e7fa4f707dccf74db2490ca3241137', role: "contentinfo", class: {
656
+ return (h(Host, { key: '5da19dc38ba73e1ddfd1bef3ebd485105d77c751', role: "contentinfo", class: {
656
657
  [mode]: true,
657
658
  // Used internally for styling
658
659
  [`footer-${mode}`]: true,
@@ -660,7 +661,7 @@ const Footer = class {
660
661
  [`footer-translucent-${mode}`]: translucent,
661
662
  ['footer-toolbar-padding']: !this.keyboardVisible && (!tabBar || tabBar.slot !== 'bottom'),
662
663
  [`footer-collapse-${collapse}`]: collapse !== undefined,
663
- } }, mode === 'ios' && translucent && h("div", { key: 'e16ed4963ff94e06de77eb8038201820af73937c', class: "footer-background" }), h("slot", { key: 'f186934febf85d37133d9351a96c1a64b0a4b203' })));
664
+ } }, mode === 'ios' && translucent && h("div", { key: 'fafad08090a33d8c4e8a5b63d61929dcb89aab47', class: "footer-background" }), h("slot", { key: 'e0a443d346afa55e4317c0bc1263fdbe3c619559' })));
664
665
  }
665
666
  get el() { return getElement(this); }
666
667
  };
@@ -982,14 +983,14 @@ const Header = class {
982
983
  const collapse = this.collapse || 'none';
983
984
  // banner role must be at top level, so remove role if inside a menu
984
985
  const roleType = hostContext('ion-menu', this.el) ? 'none' : 'banner';
985
- return (h(Host, Object.assign({ key: 'b6cc27f0b08afc9fcc889683525da765d80ba672', role: roleType, class: {
986
+ return (h(Host, Object.assign({ key: 'c687314ef290793a9d633ad20cfc5eeb47621e31', role: roleType, class: {
986
987
  [mode]: true,
987
988
  // Used internally for styling
988
989
  [`header-${mode}`]: true,
989
990
  [`header-translucent`]: this.translucent,
990
991
  [`header-collapse-${collapse}`]: true,
991
992
  [`header-translucent-${mode}`]: this.translucent,
992
- } }, inheritedAttributes), mode === 'ios' && translucent && h("div", { key: '395766d4dcee3398bc91960db21f922095292f14', class: "header-background" }), h("slot", { key: '09a67ece27b258ff1248805d43d92a49b2c6859a' })));
993
+ } }, inheritedAttributes), mode === 'ios' && translucent && h("div", { key: 'b429996046082405a91e7c23f95516db0b736f12', class: "header-background" }), h("slot", { key: 'e17a8965f8d3a33c1bfcb056c153d8242e5229fa' })));
993
994
  }
994
995
  get el() { return getElement(this); }
995
996
  };
@@ -1173,7 +1174,7 @@ const RouterOutlet = class {
1173
1174
  return true;
1174
1175
  }
1175
1176
  render() {
1176
- return h("slot", { key: 'a70341f58d19df55de1dad00e3464388e446aa2a' });
1177
+ return h("slot", { key: '8279a453c66a766e6e383ff59842b4ae070c13a9' });
1177
1178
  }
1178
1179
  get el() { return getElement(this); }
1179
1180
  static get watchers() { return {
@@ -1213,11 +1214,11 @@ const ToolbarTitle = class {
1213
1214
  render() {
1214
1215
  const mode = getIonMode(this);
1215
1216
  const size = this.getSize();
1216
- return (h(Host, { key: '5cb49f3642fb3c937cdba729ab7d561213d9bce5', class: createColorClasses(this.color, {
1217
+ return (h(Host, { key: '5a58dc437a6f4257244bbdd7e9a682a17d8c9a6b', class: createColorClasses(this.color, {
1217
1218
  [mode]: true,
1218
1219
  [`title-${size}`]: true,
1219
1220
  'title-rtl': document.dir === 'rtl',
1220
- }) }, h("div", { key: 'f089bf6cff17ab109fec7de8b1bf96bf33bede1f', class: "toolbar-title" }, h("slot", { key: 'ed74c4e77126a309970ff719baa6ebaebb00d2e6' }))));
1221
+ }) }, h("div", { key: '58682ea7b8f47a08adfad419b5c76b34784c6501', class: "toolbar-title" }, h("slot", { key: '8a9248534e4c3076f5e2dfda38ef86069796851c' }))));
1221
1222
  }
1222
1223
  get el() { return getElement(this); }
1223
1224
  static get watchers() { return {
@@ -1285,10 +1286,10 @@ const Toolbar = class {
1285
1286
  this.childrenStyles.forEach((value) => {
1286
1287
  Object.assign(childStyles, value);
1287
1288
  });
1288
- return (h(Host, { key: 'af016bf9981a2d6182783c6643e2d460245ecc2f', class: Object.assign(Object.assign({}, childStyles), createColorClasses(this.color, {
1289
+ return (h(Host, { key: '4bb3a55001408a3bdf033af76b9196cb96c07c09', class: Object.assign(Object.assign({}, childStyles), createColorClasses(this.color, {
1289
1290
  [mode]: true,
1290
1291
  'in-toolbar': hostContext('ion-toolbar', this.el),
1291
- })) }, h("div", { key: '437debb5b7c561b315d887ae8d47186cba5521ce', class: "toolbar-background" }), h("div", { key: '4c2429fa3e8526fedf456e4658be92d5dce8ca34', class: "toolbar-container" }, h("slot", { key: '4c07db12cfc48b4836b566449b854c24db308e3a', name: "start" }), h("slot", { key: '12855ec04622c09cc404f9b4f07f57a73e5770a0', name: "secondary" }), h("div", { key: '56f37d52c91de2b76910defbc9e5b7c1def3861c', class: "toolbar-content" }, h("slot", { key: 'c10ec3fdbea10a6388f4f510d45188f7fda1a371' })), h("slot", { key: 'c8ed49c6888faf35e71f2a8f4f6bf98fb0c34a25', name: "primary" }), h("slot", { key: '0251f3980082a092304f95cbc002bc8c633c5739', name: "end" }))));
1292
+ })) }, h("div", { key: '0891db157d6e028c6d03696f13fb510ea91b0296', class: "toolbar-background" }), h("div", { key: '95fbc870d808f74af4bb18cd8f8ec8c7828a9e0b', class: "toolbar-container" }, h("slot", { key: '84d4a9644660fe00ca085055ca8d12f3647531ad', name: "start" }), h("slot", { key: 'fd361dc9c9979f59aed2fedcf94629506fae62b0', name: "secondary" }), h("div", { key: '54d2b28616a4627c55766f66dc453707752758a6', class: "toolbar-content" }, h("slot", { key: '8f65e0830cce7135640b90eb694e282cb7e5efd2' })), h("slot", { key: 'c78be11a207c8674f222543646398636956087e6', name: "primary" }), h("slot", { key: 'ab25e1601ccaa8cb0d81921b849bcb7402aa7826', name: "end" }))));
1292
1293
  }
1293
1294
  get el() { return getElement(this); }
1294
1295
  };
@@ -55,7 +55,7 @@ const Thumbnail = class {
55
55
  registerInstance(this, hostRef);
56
56
  }
57
57
  render() {
58
- return (h(Host, { key: '29ed7678be93e55afad58bd37a61db3a289a5d76', class: getIonMode(this) }, h("slot", { key: 'da1eb174d2544b9d452c98076f6e0abcda60099d' })));
58
+ return (h(Host, { key: 'ea55000055f941b0c79561e8934be6242ec8e114', class: getIonMode(this) }, h("slot", { key: 'a4f934f442797f5c66a77e0ef8920fdd07c204f2' })));
59
59
  }
60
60
  };
61
61
  Thumbnail.style = IonThumbnailStyle0;
@@ -153,10 +153,10 @@ const Grid = class {
153
153
  }
154
154
  render() {
155
155
  const mode = getIonMode(this);
156
- return (h(Host, { key: '617127ecfabf9bf615bef1dda1be3fed5a065949', class: {
156
+ return (h(Host, { key: '930ce78b02f8360fbca08a35d364d2c09128c6c8', class: {
157
157
  [mode]: true,
158
158
  'grid-fixed': this.fixed,
159
- } }, h("slot", { key: 'c781fff853b093d8f44bdb7943bbc4f17c903803' })));
159
+ } }, h("slot", { key: 'c47bf7ef2197f5ebc42d3e2c55044276fb0db393' })));
160
160
  }
161
161
  };
162
162
  Grid.style = IonGridStyle0;
@@ -169,7 +169,7 @@ const Row = class {
169
169
  registerInstance(this, hostRef);
170
170
  }
171
171
  render() {
172
- return (h(Host, { key: 'aea072a5005e3f1f309f0d1ae5be5ee19869b035', class: getIonMode(this) }, h("slot", { key: '2a481c2126ac6ca65f0a1bbd07c2d3365409cb78' })));
172
+ return (h(Host, { key: '813c9a7f6782d2cf8eb27f30d3ab28e6f3122868', class: getIonMode(this) }, h("slot", { key: '356bec4d4d408ea63d6b431b06465d5b7bcbff71' })));
173
173
  }
174
174
  };
175
175
  Row.style = IonRowStyle0;
@@ -334,11 +334,11 @@ const DatetimeButton = class {
334
334
  render() {
335
335
  const { color, dateText, timeText, selectedButton, datetimeActive, disabled } = this;
336
336
  const mode = getIonMode(this);
337
- return (h(Host, { key: '26e606af6f067a5774db37ed41387ffebb941777', class: createColorClasses(color, {
337
+ return (h(Host, { key: '0be955404133adbb31ae16a6599014bb29765f19', class: createColorClasses(color, {
338
338
  [mode]: true,
339
339
  [`${selectedButton}-active`]: datetimeActive,
340
340
  ['datetime-button-disabled']: disabled,
341
- }) }, dateText && (h("button", { key: '6b7aa66a15b4a6d89d411e40586de28a2ac9f343', class: "ion-activatable", id: "date-button", "aria-expanded": datetimeActive ? 'true' : 'false', onClick: this.handleDateClick, disabled: disabled, part: "native", ref: (el) => (this.dateTargetEl = el) }, h("slot", { key: 'd42f34fd167be34386319e7ea788c2ab03c90b87', name: "date-target" }, dateText), mode === 'md' && h("ion-ripple-effect", { key: '47dd34f3c2799064cac7a5fe25440ecc043950f0' }))), timeText && (h("button", { key: 'd77424a20fae320654774c7bfc8a8e2369d3afe3', class: "ion-activatable", id: "time-button", "aria-expanded": datetimeActive ? 'true' : 'false', onClick: this.handleTimeClick, disabled: disabled, part: "native", ref: (el) => (this.timeTargetEl = el) }, h("slot", { key: 'ac088a78141bb53f2efd48dd7745f8954c92378b', name: "time-target" }, timeText), mode === 'md' && h("ion-ripple-effect", { key: 'b3a58ddfd28b9396e2518ffd62a045ec13d8b9d0' })))));
341
+ }) }, dateText && (h("button", { key: '812dcb50b17768cc13a5cfa0bcce8b113cee0f09', class: "ion-activatable", id: "date-button", "aria-expanded": datetimeActive ? 'true' : 'false', onClick: this.handleDateClick, disabled: disabled, part: "native", ref: (el) => (this.dateTargetEl = el) }, h("slot", { key: '46930c740a32a78502df9e651f9bd5914d6a9fea', name: "date-target" }, dateText), mode === 'md' && h("ion-ripple-effect", { key: '0602999cc8435dc37aa22da7f5531bc8cb71e1b4' }))), timeText && (h("button", { key: 'ecdd21da5181ecbdce03209f9f6673b7dcbc1f78', class: "ion-activatable", id: "time-button", "aria-expanded": datetimeActive ? 'true' : 'false', onClick: this.handleTimeClick, disabled: disabled, part: "native", ref: (el) => (this.timeTargetEl = el) }, h("slot", { key: 'b5b093b5166d12d11e27360788edaac916d44390', name: "time-target" }, timeText), mode === 'md' && h("ion-ripple-effect", { key: '70bb3a04f4748d13233eeb257503968dbd1161a9' })))));
342
342
  }
343
343
  get el() { return getElement(this); }
344
344
  };
@@ -11,7 +11,7 @@ import { c as chevronBack, o as chevronForward, l as chevronDown, p as caretUpSh
11
11
  import { b as getIonMode } from './ionic-global-e6c98cd0.js';
12
12
  import { g as generateDayAriaLabel, a as getDay, i as isBefore, b as isAfter, c as isSameDay, d as getPreviousMonth, e as getNextMonth, v as validateParts, f as getPartsFromCalendarDay, h as getNextYear, j as getPreviousYear, k as getEndOfWeek, l as getStartOfWeek, m as getPreviousDay, n as getNextDay, o as getPreviousWeek, p as getNextWeek, q as parseMinParts, r as parseMaxParts, s as parseDate, w as warnIfValueOutOfBounds, t as convertToArrayOfNumbers, u as convertDataToISO, x as getToday, y as getClosestValidDate, z as generateMonths, A as getNumDaysInMonth, B as getCombinedDateColumnData, C as getMonthColumnData, D as getDayColumnData, E as getYearColumnData, F as isMonthFirstLocale, G as getTimeColumnsData, H as isLocaleDayPeriodRTL, I as getDaysOfWeek, J as getMonthAndYear, K as getDaysOfMonth, L as getHourCycle, M as getLocalizedTime, N as getLocalizedDateTime, O as formatValue, P as clampDate, Q as parseAmPm, R as calculateHourFromAMPM } from './data-ae11fd43.js';
13
13
  import { c as createLockController } from './lock-controller-316928be.js';
14
- import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-6fb4a2f2.js';
14
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-1eac28e2.js';
15
15
  import { c as createAnimation } from './animation-eab5a4ca.js';
16
16
  import { b as hapticSelectionChanged, h as hapticSelectionEnd, a as hapticSelectionStart } from './haptic-ac164e4c.js';
17
17
  import './index-a5d50daf.js';
@@ -287,10 +287,10 @@ const Datetime = class {
287
287
  const { activeParts } = this;
288
288
  return Array.isArray(activeParts) ? activeParts[0] : activeParts;
289
289
  };
290
- this.closeParentOverlay = () => {
290
+ this.closeParentOverlay = (role) => {
291
291
  const popoverOrModal = this.el.closest('ion-modal, ion-popover');
292
292
  if (popoverOrModal) {
293
- popoverOrModal.dismiss();
293
+ popoverOrModal.dismiss(undefined, role);
294
294
  }
295
295
  };
296
296
  this.setWorkingParts = (parts) => {
@@ -960,7 +960,7 @@ const Datetime = class {
960
960
  }
961
961
  }
962
962
  if (closeOverlay) {
963
- this.closeParentOverlay();
963
+ this.closeParentOverlay(CONFIRM_ROLE);
964
964
  }
965
965
  }
966
966
  /**
@@ -980,7 +980,7 @@ const Datetime = class {
980
980
  async cancel(closeOverlay = false) {
981
981
  this.ionCancel.emit();
982
982
  if (closeOverlay) {
983
- this.closeParentOverlay();
983
+ this.closeParentOverlay(CANCEL_ROLE);
984
984
  }
985
985
  }
986
986
  get isCalendarPicker() {
@@ -1292,7 +1292,7 @@ const Datetime = class {
1292
1292
  const todayString = workingParts.day !== null
1293
1293
  ? `${workingParts.year}-${workingParts.month}-${workingParts.day}`
1294
1294
  : `${defaultParts.year}-${defaultParts.month}-${defaultParts.day}`;
1295
- return (h("ion-picker-column", { class: "date-column", color: this.color, disabled: disabled, value: todayString, onIonChange: (ev) => {
1295
+ return (h("ion-picker-column", { "aria-label": "Select a date", class: "date-column", color: this.color, disabled: disabled, value: todayString, onIonChange: (ev) => {
1296
1296
  const { value } = ev.detail;
1297
1297
  const findPart = parts.find(({ month, day, year }) => value === `${year}-${month}-${day}`);
1298
1298
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), findPart));
@@ -1367,7 +1367,7 @@ const Datetime = class {
1367
1367
  const { disabled, workingParts } = this;
1368
1368
  const activePart = this.getActivePartsWithFallback();
1369
1369
  const pickerColumnValue = (_a = (workingParts.day !== null ? workingParts.day : this.defaultParts.day)) !== null && _a !== void 0 ? _a : undefined;
1370
- return (h("ion-picker-column", { class: "day-column", color: this.color, disabled: disabled, value: pickerColumnValue, onIonChange: (ev) => {
1370
+ return (h("ion-picker-column", { "aria-label": "Select a day", class: "day-column", color: this.color, disabled: disabled, value: pickerColumnValue, onIonChange: (ev) => {
1371
1371
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { day: ev.detail.value }));
1372
1372
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { day: ev.detail.value }));
1373
1373
  ev.stopPropagation();
@@ -1379,7 +1379,7 @@ const Datetime = class {
1379
1379
  }
1380
1380
  const { disabled, workingParts } = this;
1381
1381
  const activePart = this.getActivePartsWithFallback();
1382
- return (h("ion-picker-column", { class: "month-column", color: this.color, disabled: disabled, value: workingParts.month, onIonChange: (ev) => {
1382
+ return (h("ion-picker-column", { "aria-label": "Select a month", class: "month-column", color: this.color, disabled: disabled, value: workingParts.month, onIonChange: (ev) => {
1383
1383
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { month: ev.detail.value }));
1384
1384
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { month: ev.detail.value }));
1385
1385
  ev.stopPropagation();
@@ -1391,7 +1391,7 @@ const Datetime = class {
1391
1391
  }
1392
1392
  const { disabled, workingParts } = this;
1393
1393
  const activePart = this.getActivePartsWithFallback();
1394
- return (h("ion-picker-column", { class: "year-column", color: this.color, disabled: disabled, value: workingParts.year, onIonChange: (ev) => {
1394
+ return (h("ion-picker-column", { "aria-label": "Select a year", class: "year-column", color: this.color, disabled: disabled, value: workingParts.year, onIonChange: (ev) => {
1395
1395
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { year: ev.detail.value }));
1396
1396
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { year: ev.detail.value }));
1397
1397
  ev.stopPropagation();
@@ -1424,7 +1424,7 @@ const Datetime = class {
1424
1424
  if (hoursData.length === 0)
1425
1425
  return [];
1426
1426
  const activePart = this.getActivePartsWithFallback();
1427
- return (h("ion-picker-column", { color: this.color, disabled: disabled, value: activePart.hour, numericInput: true, onIonChange: (ev) => {
1427
+ return (h("ion-picker-column", { "aria-label": "Select an hour", color: this.color, disabled: disabled, value: activePart.hour, numericInput: true, onIonChange: (ev) => {
1428
1428
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { hour: ev.detail.value }));
1429
1429
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { hour: ev.detail.value }));
1430
1430
  ev.stopPropagation();
@@ -1435,7 +1435,7 @@ const Datetime = class {
1435
1435
  if (minutesData.length === 0)
1436
1436
  return [];
1437
1437
  const activePart = this.getActivePartsWithFallback();
1438
- return (h("ion-picker-column", { color: this.color, disabled: disabled, value: activePart.minute, numericInput: true, onIonChange: (ev) => {
1438
+ return (h("ion-picker-column", { "aria-label": "Select a minute", color: this.color, disabled: disabled, value: activePart.minute, numericInput: true, onIonChange: (ev) => {
1439
1439
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { minute: ev.detail.value }));
1440
1440
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { minute: ev.detail.value }));
1441
1441
  ev.stopPropagation();
@@ -1448,7 +1448,7 @@ const Datetime = class {
1448
1448
  }
1449
1449
  const activePart = this.getActivePartsWithFallback();
1450
1450
  const isDayPeriodRTL = isLocaleDayPeriodRTL(this.locale);
1451
- return (h("ion-picker-column", { style: isDayPeriodRTL ? { order: '-1' } : {}, color: this.color, disabled: disabled, value: activePart.ampm, onIonChange: (ev) => {
1451
+ return (h("ion-picker-column", { "aria-label": "Select a day period", style: isDayPeriodRTL ? { order: '-1' } : {}, color: this.color, disabled: disabled, value: activePart.ampm, onIonChange: (ev) => {
1452
1452
  const hour = calculateHourFromAMPM(workingParts, ev.detail.value);
1453
1453
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { ampm: ev.detail.value, hour }));
1454
1454
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { ampm: ev.detail.value, hour }));
@@ -1758,7 +1758,7 @@ const Datetime = class {
1758
1758
  const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
1759
1759
  const hasWheelVariant = hasDatePresentation && preferWheel;
1760
1760
  renderHiddenInput(true, el, name, formatValue(value), disabled);
1761
- return (h(Host, { key: 'f1f8ca52cdd9cfc8394b0365c89c0d30cd7316e7', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
1761
+ return (h(Host, { key: '4e247382419e963381c8dcde52ba5aaaae0e6cee', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
1762
1762
  [mode]: true,
1763
1763
  ['datetime-readonly']: readonly,
1764
1764
  ['datetime-disabled']: disabled,
@@ -1768,7 +1768,7 @@ const Datetime = class {
1768
1768
  [`datetime-size-${size}`]: true,
1769
1769
  [`datetime-prefer-wheel`]: hasWheelVariant,
1770
1770
  [`datetime-grid`]: isGridStyle,
1771
- })) }, h("div", { key: '480068aa8072b60ac521646dfa82480c5f6ce6ef', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1771
+ })) }, h("div", { key: '27bc39dd318bab9dc4078eedc4fc1b4842f145e6', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1772
1772
  }
1773
1773
  get el() { return getElement(this); }
1774
1774
  static get watchers() { return {
@@ -1786,6 +1786,8 @@ const Datetime = class {
1786
1786
  }; }
1787
1787
  };
1788
1788
  let datetimeIds = 0;
1789
+ const CANCEL_ROLE = 'datetime-cancel';
1790
+ const CONFIRM_ROLE = 'datetime-confirm';
1789
1791
  const WHEEL_ITEM_PART = 'wheel-item';
1790
1792
  const WHEEL_ITEM_ACTIVE_PART = `active`;
1791
1793
  Datetime.style = {
@@ -2020,11 +2022,11 @@ const Picker = class {
2020
2022
  render() {
2021
2023
  const { htmlAttributes } = this;
2022
2024
  const mode = getIonMode(this);
2023
- return (h(Host, Object.assign({ key: 'cb1495acc8842c00e9f51ae792a01f769e36b0c6', "aria-modal": "true", tabindex: "-1" }, htmlAttributes, { style: {
2025
+ return (h(Host, Object.assign({ key: '26e3144adcdf01605271d01e468bb4a75ce854b1', "aria-modal": "true", tabindex: "-1" }, htmlAttributes, { style: {
2024
2026
  zIndex: `${20000 + this.overlayIndex}`,
2025
2027
  }, class: Object.assign({ [mode]: true,
2026
2028
  // Used internally for styling
2027
- [`picker-${mode}`]: true, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonPickerWillDismiss: this.dispatchCancelHandler }), h("ion-backdrop", { key: 'eecbcdfd474f5ab2f9962a030b1dcbf7714fe938', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: '262e1d3bc916b30068f7be1edbc73283a815fc0f', tabindex: "0" }), h("div", { key: 'a036cf789ab768428aae26a19dbd0c5cb696188c', class: "picker-wrapper ion-overlay-wrapper", role: "dialog" }, h("div", { key: '6be7a8986976ead39611ce398ed6ad71f3b7427e', class: "picker-toolbar" }, this.buttons.map((b) => (h("div", { class: buttonWrapperClass(b) }, h("button", { type: "button", onClick: () => this.buttonClick(b), class: buttonClass(b) }, b.text))))), h("div", { key: '66a1d99aebf48219cab4177d06d893fe1d458a1f', class: "picker-columns" }, h("div", { key: 'ed7fd940c5f54453587e13ab52cbfd4122a397c6', class: "picker-above-highlight" }), this.presented && this.columns.map((c) => h("ion-picker-legacy-column", { col: c })), h("div", { key: '21c491c08bce126dde03196b21e28d903e157e1f', class: "picker-below-highlight" }))), h("div", { key: 'bd892f74b886ae1bfd010d687a2b9741213b246c', tabindex: "0" })));
2029
+ [`picker-${mode}`]: true, 'overlay-hidden': true }, getClassMap(this.cssClass)), onIonBackdropTap: this.onBackdropTap, onIonPickerWillDismiss: this.dispatchCancelHandler }), h("ion-backdrop", { key: 'fa212d21406606186cd95f8c7a4f119696ac8d4a', visible: this.showBackdrop, tappable: this.backdropDismiss }), h("div", { key: '19ea889f65cb6a68a9db26cf9f83c6587cfcf07e', tabindex: "0" }), h("div", { key: '5fc0f5d26915ba353b9f0335946f94b6fda95e1e', class: "picker-wrapper ion-overlay-wrapper", role: "dialog" }, h("div", { key: '3fa5bff4ac0013ef31845482a27a14caebbdcd2f', class: "picker-toolbar" }, this.buttons.map((b) => (h("div", { class: buttonWrapperClass(b) }, h("button", { type: "button", onClick: () => this.buttonClick(b), class: buttonClass(b) }, b.text))))), h("div", { key: '2ff6376956d01dcd9ec01b8d6972dd4b37ffb1a1', class: "picker-columns" }, h("div", { key: '4adcef77429f10a3faa50b41d1eaf3404387997c', class: "picker-above-highlight" }), this.presented && this.columns.map((c) => h("ion-picker-legacy-column", { col: c })), h("div", { key: 'e0f37d3e9896eb2bc0f0aef4762a897130851963', class: "picker-below-highlight" }))), h("div", { key: '671bb7d0f487b0d7c7fa70388f8fa1de77448b9f', tabindex: "0" })));
2028
2030
  }
2029
2031
  get el() { return getElement(this); }
2030
2032
  static get watchers() { return {
@@ -2381,9 +2383,9 @@ const PickerColumnCmp = class {
2381
2383
  render() {
2382
2384
  const col = this.col;
2383
2385
  const mode = getIonMode(this);
2384
- return (h(Host, { key: 'c015eb8bc01b3287cbd1d71af0aa311b6be89d36', class: Object.assign({ [mode]: true, 'picker-col': true, 'picker-opts-left': this.col.align === 'left', 'picker-opts-right': this.col.align === 'right' }, getClassMap(col.cssClass)), style: {
2386
+ return (h(Host, { key: '56289a294e5c580f3e7fe5fc12777aa7f80ad19b', class: Object.assign({ [mode]: true, 'picker-col': true, 'picker-opts-left': this.col.align === 'left', 'picker-opts-right': this.col.align === 'right' }, getClassMap(col.cssClass)), style: {
2385
2387
  'max-width': this.col.columnWidth,
2386
- } }, col.prefix && (h("div", { key: 'f9de3fe2f5c7ad3256d6e5f44b6d03a2b1f96ffb', class: "picker-prefix", style: { width: col.prefixWidth } }, col.prefix)), h("div", { key: '10f9c12aa174f96c7cf9adc30efbb26695c0aa64', class: "picker-opts", style: { maxWidth: col.optionsWidth }, ref: (el) => (this.optsEl = el) }, col.options.map((o, index) => (h("button", { "aria-label": o.ariaLabel, class: { 'picker-opt': true, 'picker-opt-disabled': !!o.disabled }, "opt-index": index }, o.text)))), col.suffix && (h("div", { key: '1d9c0892ce56e0da9044c79eb953827166f5190b', class: "picker-suffix", style: { width: col.suffixWidth } }, col.suffix))));
2388
+ } }, col.prefix && (h("div", { key: 'd21f44667b5df567d6879723fe643ea7c2c60bef', class: "picker-prefix", style: { width: col.prefixWidth } }, col.prefix)), h("div", { key: 'bb427e5f24fd832703926e0e847ad05567597262', class: "picker-opts", style: { maxWidth: col.optionsWidth }, ref: (el) => (this.optsEl = el) }, col.options.map((o, index) => (h("button", { "aria-label": o.ariaLabel, class: { 'picker-opt': true, 'picker-opt-disabled': !!o.disabled }, "opt-index": index }, o.text)))), col.suffix && (h("div", { key: '0413f7c074b6534b8967387ecb9957a79a267aff', class: "picker-suffix", style: { width: col.suffixWidth } }, col.suffix))));
2387
2389
  }
2388
2390
  get el() { return getElement(this); }
2389
2391
  static get watchers() { return {
@@ -55,12 +55,12 @@ const Fab = class {
55
55
  render() {
56
56
  const { horizontal, vertical, edge } = this;
57
57
  const mode = getIonMode(this);
58
- return (h(Host, { key: '8a310806d0e748d7ebb0ed3d9a2652038e0f2960', class: {
58
+ return (h(Host, { key: 'cb44cf6486b0a6439b99da87c065b0b52e2514f4', class: {
59
59
  [mode]: true,
60
60
  [`fab-horizontal-${horizontal}`]: horizontal !== undefined,
61
61
  [`fab-vertical-${vertical}`]: vertical !== undefined,
62
62
  'fab-edge': edge,
63
- } }, h("slot", { key: '9394ef6d6e5b0410fa6ba212171f687fb178ce2d' })));
63
+ } }, h("slot", { key: '1ed484c7ecb10cd81fbca9a4f5c4049bf82f9f8a' })));
64
64
  }
65
65
  get el() { return getElement(this); }
66
66
  static get watchers() { return {
@@ -129,7 +129,7 @@ const FabButton = class {
129
129
  rel: this.rel,
130
130
  target: this.target,
131
131
  };
132
- return (h(Host, { key: '4eee204d20b0e2ffed49a88f6cb3e04b6697965c', onClick: this.onClick, "aria-disabled": disabled ? 'true' : null, class: createColorClasses(color, {
132
+ return (h(Host, { key: 'eb347f7d6749c40637540d84778eb8d1b667a947', onClick: this.onClick, "aria-disabled": disabled ? 'true' : null, class: createColorClasses(color, {
133
133
  [mode]: true,
134
134
  'fab-button-in-list': inList,
135
135
  'fab-button-translucent-in-list': inList && translucent,
@@ -140,7 +140,7 @@ const FabButton = class {
140
140
  'ion-activatable': true,
141
141
  'ion-focusable': true,
142
142
  [`fab-button-${size}`]: size !== undefined,
143
- }) }, h(TagType, Object.assign({ key: '914561622c0c6bd41453e828a7d8a39f924875ac' }, attrs, { class: "button-native", part: "native", disabled: disabled, onFocus: this.onFocus, onBlur: this.onBlur, onClick: (ev) => openURL(href, ev, this.routerDirection, this.routerAnimation) }, inheritedAttributes), h("ion-icon", { key: '2c8090742a64c62a79243667027a195cca9d5912', "aria-hidden": "true", icon: this.closeIcon, part: "close-icon", class: "close-icon", lazy: false }), h("span", { key: 'c3e55291e4c4d306d34a4b95dd2e727e87bdf39c', class: "button-inner" }, h("slot", { key: 'f8e57f71d8f8878d9746cfece82f57f19ef9e988' })), mode === 'md' && h("ion-ripple-effect", { key: 'a5e94fa0bb9836072300617245ed0c1b4887bac6' }))));
143
+ }) }, h(TagType, Object.assign({ key: '83e853c8815f41543c848eb2e05ec2bb1716110a' }, attrs, { class: "button-native", part: "native", disabled: disabled, onFocus: this.onFocus, onBlur: this.onBlur, onClick: (ev) => openURL(href, ev, this.routerDirection, this.routerAnimation) }, inheritedAttributes), h("ion-icon", { key: '798deede94de658e4345acf7c2aafe2ab2567b0b', "aria-hidden": "true", icon: this.closeIcon, part: "close-icon", class: "close-icon", lazy: false }), h("span", { key: '99252fde6de1aca73fc240a6da7e29acac9acb18', class: "button-inner" }, h("slot", { key: 'dc73e9b41bf1f0e385e5784f975dfb81e37c8dfb' })), mode === 'md' && h("ion-ripple-effect", { key: '8413e162f44a0350f54dff06cff7aad101de3549' }))));
144
144
  }
145
145
  get el() { return getElement(this); }
146
146
  };
@@ -168,11 +168,11 @@ const FabList = class {
168
168
  }
169
169
  render() {
170
170
  const mode = getIonMode(this);
171
- return (h(Host, { key: '64b33366447f66c7f979cfac56307fbb1a6fac1c', class: {
171
+ return (h(Host, { key: 'fa1d195b9950654ba0e984bf61d981c977d05275', class: {
172
172
  [mode]: true,
173
173
  'fab-list-active': this.activated,
174
174
  [`fab-list-side-${this.side}`]: true,
175
- } }, h("slot", { key: 'd9f474f7f20fd7e813db358fddc720534ca05bb6' })));
175
+ } }, h("slot", { key: '2ec738c66c05112e1e2521155d6adfc36d2fd1db' })));
176
176
  }
177
177
  get el() { return getElement(this); }
178
178
  static get watchers() { return {