voyager-ionic-core 8.0.1 → 8.1.0

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 (554) hide show
  1. package/components/checkbox.js +3 -3
  2. package/components/index2.js +119 -1
  3. package/components/ion-accordion-group.js +2 -2
  4. package/components/ion-content.js +6 -4
  5. package/components/ion-datetime-button.js +2 -2
  6. package/components/ion-datetime.js +17 -14
  7. package/components/ion-fab-button.js +2 -2
  8. package/components/ion-fab-list.js +2 -2
  9. package/components/ion-fab.js +2 -2
  10. package/components/ion-footer.js +2 -2
  11. package/components/ion-grid.js +2 -2
  12. package/components/ion-header.js +2 -2
  13. package/components/ion-img.js +1 -1
  14. package/components/ion-infinite-scroll-content.js +2 -2
  15. package/components/ion-infinite-scroll.js +1 -1
  16. package/components/ion-input-password-toggle.js +3 -3
  17. package/components/ion-input.js +8 -4
  18. package/components/ion-item-divider.js +2 -2
  19. package/components/ion-item-group.js +1 -1
  20. package/components/ion-item-option.js +2 -2
  21. package/components/ion-item-options.js +1 -1
  22. package/components/ion-item-sliding.js +1 -1
  23. package/components/ion-loading.js +2 -2
  24. package/components/ion-menu-button.js +2 -2
  25. package/components/ion-menu-toggle.js +2 -2
  26. package/components/ion-menu.js +2 -2
  27. package/components/ion-modal.js +10 -8
  28. package/components/ion-nav-link.js +1 -1
  29. package/components/ion-nav.js +1 -1
  30. package/components/ion-note.js +2 -2
  31. package/components/ion-picker-legacy.js +2 -2
  32. package/components/ion-progress-bar.js +1 -1
  33. package/components/ion-range.js +3 -3
  34. package/components/ion-refresher-content.js +1 -1
  35. package/components/ion-refresher.js +1 -1
  36. package/components/ion-reorder-group.js +1 -1
  37. package/components/ion-reorder.js +1 -1
  38. package/components/ion-router-link.js +2 -2
  39. package/components/ion-router-outlet.js +1 -1
  40. package/components/ion-row.js +1 -1
  41. package/components/ion-searchbar.js +4 -4
  42. package/components/ion-segment-button.js +3 -3
  43. package/components/ion-segment.js +2 -2
  44. package/components/ion-select-option.js +1 -1
  45. package/components/ion-select.js +2 -2
  46. package/components/ion-skeleton-text.js +2 -2
  47. package/components/ion-split-pane.js +2 -2
  48. package/components/ion-tab-bar.js +2 -2
  49. package/components/ion-tab-button.js +2 -2
  50. package/components/ion-tab.js +2 -2
  51. package/components/ion-tabs.js +1 -1
  52. package/components/ion-text.js +2 -2
  53. package/components/ion-textarea.js +2 -2
  54. package/components/ion-thumbnail.js +1 -1
  55. package/components/ion-title.js +2 -2
  56. package/components/ion-toast.js +2 -2
  57. package/components/ion-toggle.js +3 -3
  58. package/components/ion-toolbar.js +2 -2
  59. package/components/ios.transition.js +94 -67
  60. package/components/label.js +3 -3
  61. package/components/list-header.js +2 -2
  62. package/components/list.js +1 -1
  63. package/components/overlays.js +3 -2
  64. package/components/picker-column-option.js +2 -2
  65. package/components/picker-column.js +156 -4
  66. package/components/picker-column2.js +2 -2
  67. package/components/picker.js +2 -2
  68. package/components/popover.js +6 -4
  69. package/components/radio-group.js +1 -1
  70. package/components/radio.js +3 -3
  71. package/components/ripple-effect.js +1 -1
  72. package/components/select-popover.js +2 -2
  73. package/components/spinner.js +1 -1
  74. package/css/core.css +1 -1
  75. package/css/core.css.map +1 -1
  76. package/css/global.bundle.css.map +1 -1
  77. package/css/ionic.bundle.css +1 -1
  78. package/css/ionic.bundle.css.map +1 -1
  79. package/css/palettes/dark.always.css +1 -1
  80. package/css/palettes/dark.always.css.map +1 -1
  81. package/css/palettes/dark.class.css +1 -1
  82. package/css/palettes/dark.class.css.map +1 -1
  83. package/css/palettes/dark.system.css +1 -1
  84. package/css/palettes/dark.system.css.map +1 -1
  85. package/css/palettes/high-contrast-dark.always.css.map +1 -1
  86. package/css/palettes/high-contrast-dark.class.css.map +1 -1
  87. package/css/palettes/high-contrast-dark.system.css.map +1 -1
  88. package/css/palettes/high-contrast.always.css.map +1 -1
  89. package/css/palettes/high-contrast.class.css.map +1 -1
  90. package/css/palettes/high-contrast.system.css.map +1 -1
  91. package/css/typography.css.map +1 -1
  92. package/dist/cjs/{app-globals-542c4d91.js → app-globals-66b7dc06.js} +1 -1
  93. package/dist/cjs/{button-active-47528f4c.js → button-active-9135c809.js} +1 -1
  94. package/dist/cjs/{hardware-back-button-06ae4d9c.js → hardware-back-button-ed931127.js} +2 -2
  95. package/dist/cjs/index-8709af32.js +2234 -0
  96. package/dist/cjs/{index-c76a1d14.js → index-c0b7f8f4.js} +124 -6
  97. package/dist/cjs/{index-57b504ac.js → index-c54654c6.js} +2 -2
  98. package/dist/cjs/index.cjs.js +9 -9
  99. package/dist/cjs/ion-accordion_2.cjs.entry.js +4 -4
  100. package/dist/cjs/ion-action-sheet.cjs.entry.js +5 -5
  101. package/dist/cjs/ion-alert.cjs.entry.js +5 -5
  102. package/dist/cjs/ion-app_8.cjs.entry.js +20 -19
  103. package/dist/cjs/ion-avatar_3.cjs.entry.js +3 -3
  104. package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
  105. package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
  106. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
  107. package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
  108. package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
  109. package/dist/cjs/ion-checkbox.cjs.entry.js +5 -5
  110. package/dist/cjs/ion-chip.cjs.entry.js +2 -2
  111. package/dist/cjs/ion-col_3.cjs.entry.js +5 -5
  112. package/dist/cjs/ion-datetime-button.cjs.entry.js +4 -4
  113. package/dist/cjs/ion-datetime_3.cjs.entry.js +25 -22
  114. package/dist/cjs/ion-fab_3.cjs.entry.js +8 -8
  115. package/dist/cjs/ion-img.cjs.entry.js +3 -3
  116. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +5 -5
  117. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +5 -5
  118. package/dist/cjs/ion-input.cjs.entry.js +9 -6
  119. package/dist/cjs/ion-item-option_3.cjs.entry.js +6 -6
  120. package/dist/cjs/ion-item_8.cjs.entry.js +15 -15
  121. package/dist/cjs/ion-loading.cjs.entry.js +6 -6
  122. package/dist/cjs/ion-menu_3.cjs.entry.js +11 -11
  123. package/dist/cjs/ion-modal.cjs.entry.js +13 -12
  124. package/dist/cjs/ion-nav_2.cjs.entry.js +6 -5
  125. package/dist/cjs/ion-picker-column-option.cjs.entry.js +4 -4
  126. package/dist/cjs/ion-picker-column.cjs.entry.js +156 -6
  127. package/dist/cjs/ion-picker.cjs.entry.js +3 -3
  128. package/dist/cjs/ion-popover.cjs.entry.js +9 -8
  129. package/dist/cjs/ion-progress-bar.cjs.entry.js +3 -3
  130. package/dist/cjs/ion-radio_2.cjs.entry.js +6 -6
  131. package/dist/cjs/ion-range.cjs.entry.js +5 -5
  132. package/dist/cjs/ion-refresher_2.cjs.entry.js +4 -4
  133. package/dist/cjs/ion-reorder_2.cjs.entry.js +4 -4
  134. package/dist/cjs/ion-ripple-effect.cjs.entry.js +3 -3
  135. package/dist/cjs/ion-route_4.cjs.entry.js +4 -4
  136. package/dist/cjs/ion-searchbar.cjs.entry.js +6 -6
  137. package/dist/cjs/ion-segment_2.cjs.entry.js +7 -7
  138. package/dist/cjs/ion-select_3.cjs.entry.js +9 -9
  139. package/dist/cjs/ion-spinner.cjs.entry.js +3 -3
  140. package/dist/cjs/ion-split-pane.cjs.entry.js +4 -4
  141. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +6 -6
  142. package/dist/cjs/ion-tab_2.cjs.entry.js +4 -4
  143. package/dist/cjs/ion-text.cjs.entry.js +4 -4
  144. package/dist/cjs/ion-textarea.cjs.entry.js +4 -4
  145. package/dist/cjs/ion-toast.cjs.entry.js +6 -6
  146. package/dist/cjs/ion-toggle.cjs.entry.js +5 -5
  147. package/dist/cjs/{ionic-global-f3622afe.js → ionic-global-35b86a09.js} +1 -1
  148. package/dist/cjs/ionic.cjs.js +5 -5
  149. package/dist/cjs/{ios.transition-288dfa83.js → ios.transition-5ddf92f1.js} +98 -69
  150. package/dist/cjs/loader.cjs.js +4 -4
  151. package/dist/cjs/{md.transition-6e5f6a8d.js → md.transition-047c18c5.js} +4 -2
  152. package/dist/cjs/{overlays-32cfd236.js → overlays-cb04d075.js} +5 -3
  153. package/dist/cjs/{status-tap-c47ff5f5.js → status-tap-5b2775cd.js} +1 -1
  154. package/dist/collection/collection-manifest.json +1 -1
  155. package/dist/collection/components/accordion-group/accordion-group.js +3 -3
  156. package/dist/collection/components/checkbox/checkbox.js +4 -4
  157. package/dist/collection/components/content/content.js +23 -4
  158. package/dist/collection/components/content/test/content.spec.js +27 -0
  159. package/dist/collection/components/datetime/datetime.js +18 -15
  160. package/dist/collection/components/datetime/test/overlay-roles/datetime.e2e.js +34 -0
  161. package/dist/collection/components/datetime-button/datetime-button.js +2 -2
  162. package/dist/collection/components/fab/fab.js +2 -2
  163. package/dist/collection/components/fab-button/fab-button.js +2 -2
  164. package/dist/collection/components/fab-list/fab-list.js +2 -2
  165. package/dist/collection/components/footer/footer.js +2 -2
  166. package/dist/collection/components/grid/grid.js +2 -2
  167. package/dist/collection/components/header/header.js +2 -2
  168. package/dist/collection/components/img/img.js +1 -1
  169. package/dist/collection/components/infinite-scroll/infinite-scroll.js +1 -1
  170. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +2 -2
  171. package/dist/collection/components/input/input.js +25 -5
  172. package/dist/collection/components/input/test/input.spec.js +13 -0
  173. package/dist/collection/components/input-password-toggle/input-password-toggle.js +3 -3
  174. package/dist/collection/components/item/test/a11y/item.e2e.js +24 -4
  175. package/dist/collection/components/item-divider/item-divider.js +2 -2
  176. package/dist/collection/components/item-group/item-group.js +1 -1
  177. package/dist/collection/components/item-option/item-option.js +2 -2
  178. package/dist/collection/components/item-options/item-options.js +1 -1
  179. package/dist/collection/components/item-sliding/item-sliding.js +1 -1
  180. package/dist/collection/components/label/label.ios.css +1 -1
  181. package/dist/collection/components/label/label.js +2 -2
  182. package/dist/collection/components/list/list.js +1 -1
  183. package/dist/collection/components/list-header/list-header.js +2 -2
  184. package/dist/collection/components/loading/loading.js +2 -2
  185. package/dist/collection/components/menu/menu.js +2 -2
  186. package/dist/collection/components/menu-button/menu-button.js +2 -2
  187. package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
  188. package/dist/collection/components/modal/gestures/sheet.js +3 -2
  189. package/dist/collection/components/modal/modal.js +25 -6
  190. package/dist/collection/components/modal/test/basic/modal.spec.js +19 -0
  191. package/dist/collection/components/nav/nav.js +1 -1
  192. package/dist/collection/components/nav-link/nav-link.js +1 -1
  193. package/dist/collection/components/note/note.js +2 -2
  194. package/dist/collection/components/picker/picker.js +2 -2
  195. package/dist/collection/components/picker-column/picker-column.css +19 -0
  196. package/dist/collection/components/picker-column/picker-column.js +159 -4
  197. package/dist/collection/components/picker-column/test/picker-column.spec.js +83 -0
  198. package/dist/collection/components/picker-column-option/picker-column-option.js +2 -2
  199. package/dist/collection/components/picker-legacy/picker.js +2 -2
  200. package/dist/collection/components/picker-legacy-column/picker-column.js +2 -2
  201. package/dist/collection/components/popover/popover.js +23 -4
  202. package/dist/collection/components/popover/test/basic/popover.spec.js +19 -0
  203. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  204. package/dist/collection/components/radio/radio.js +3 -3
  205. package/dist/collection/components/radio-group/radio-group.js +2 -2
  206. package/dist/collection/components/range/range.js +4 -4
  207. package/dist/collection/components/refresher/refresher.js +1 -1
  208. package/dist/collection/components/refresher-content/refresher-content.js +1 -1
  209. package/dist/collection/components/reorder/reorder.js +1 -1
  210. package/dist/collection/components/reorder-group/reorder-group.js +1 -1
  211. package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
  212. package/dist/collection/components/router-link/router-link.js +2 -2
  213. package/dist/collection/components/router-outlet/router-outlet.js +1 -1
  214. package/dist/collection/components/row/row.js +1 -1
  215. package/dist/collection/components/searchbar/searchbar.js +5 -5
  216. package/dist/collection/components/segment/segment.js +3 -3
  217. package/dist/collection/components/segment-button/segment-button.js +3 -3
  218. package/dist/collection/components/select/select.js +3 -3
  219. package/dist/collection/components/select/test/fill/select.e2e.js +25 -0
  220. package/dist/collection/components/select-option/select-option.js +1 -1
  221. package/dist/collection/components/select-popover/select-popover.js +1 -1
  222. package/dist/collection/components/select-popover/select-popover.md.css +8 -1
  223. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
  224. package/dist/collection/components/spinner/spinner.js +1 -1
  225. package/dist/collection/components/split-pane/split-pane.js +2 -2
  226. package/dist/collection/components/tab/tab.js +2 -2
  227. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  228. package/dist/collection/components/tab-button/tab-button.js +2 -2
  229. package/dist/collection/components/tabs/tabs.js +1 -1
  230. package/dist/collection/components/text/text.js +2 -2
  231. package/dist/collection/components/textarea/textarea.js +3 -3
  232. package/dist/collection/components/thumbnail/thumbnail.js +1 -1
  233. package/dist/collection/components/title/title.js +2 -2
  234. package/dist/collection/components/toast/toast.js +2 -2
  235. package/dist/collection/components/toggle/toggle.js +4 -4
  236. package/dist/collection/components/toolbar/toolbar.js +2 -2
  237. package/dist/collection/utils/focus-controller/index.js +112 -0
  238. package/dist/collection/utils/focus-controller/test/generic/focus-controller.e2e.js +52 -0
  239. package/dist/collection/utils/focus-controller/test/ionic/focus-controller.e2e.js +52 -0
  240. package/dist/collection/utils/overlays.js +2 -1
  241. package/dist/collection/utils/transition/index.js +11 -1
  242. package/dist/collection/utils/transition/ios.transition.js +94 -67
  243. package/dist/docs.json +109 -14
  244. package/dist/esm/{app-globals-3cbaf9d9.js → app-globals-b99e6d29.js} +1 -1
  245. package/dist/esm/{button-active-9e3c1f3b.js → button-active-920addb8.js} +1 -1
  246. package/dist/esm/{hardware-back-button-804f43bb.js → hardware-back-button-2d9760b6.js} +2 -2
  247. package/dist/esm/{index-8dbae644.js → index-7ae7186a.js} +2 -2
  248. package/dist/esm/{index-f7fbe1fb.js → index-8e6b6a24.js} +122 -4
  249. package/dist/esm/index-9aab3bcf.js +2196 -0
  250. package/dist/esm/index.js +9 -9
  251. package/dist/esm/ion-accordion_2.entry.js +4 -4
  252. package/dist/esm/ion-action-sheet.entry.js +5 -5
  253. package/dist/esm/ion-alert.entry.js +5 -5
  254. package/dist/esm/ion-app_8.entry.js +20 -19
  255. package/dist/esm/ion-avatar_3.entry.js +3 -3
  256. package/dist/esm/ion-back-button.entry.js +2 -2
  257. package/dist/esm/ion-backdrop.entry.js +2 -2
  258. package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
  259. package/dist/esm/ion-button_2.entry.js +2 -2
  260. package/dist/esm/ion-card_5.entry.js +2 -2
  261. package/dist/esm/ion-checkbox.entry.js +5 -5
  262. package/dist/esm/ion-chip.entry.js +2 -2
  263. package/dist/esm/ion-col_3.entry.js +5 -5
  264. package/dist/esm/ion-datetime-button.entry.js +4 -4
  265. package/dist/esm/ion-datetime_3.entry.js +25 -22
  266. package/dist/esm/ion-fab_3.entry.js +8 -8
  267. package/dist/esm/ion-img.entry.js +3 -3
  268. package/dist/esm/ion-infinite-scroll_2.entry.js +5 -5
  269. package/dist/esm/ion-input-password-toggle.entry.js +5 -5
  270. package/dist/esm/ion-input.entry.js +9 -6
  271. package/dist/esm/ion-item-option_3.entry.js +6 -6
  272. package/dist/esm/ion-item_8.entry.js +15 -15
  273. package/dist/esm/ion-loading.entry.js +6 -6
  274. package/dist/esm/ion-menu_3.entry.js +11 -11
  275. package/dist/esm/ion-modal.entry.js +13 -12
  276. package/dist/esm/ion-nav_2.entry.js +6 -5
  277. package/dist/esm/ion-picker-column-option.entry.js +4 -4
  278. package/dist/esm/ion-picker-column.entry.js +156 -6
  279. package/dist/esm/ion-picker.entry.js +3 -3
  280. package/dist/esm/ion-popover.entry.js +9 -8
  281. package/dist/esm/ion-progress-bar.entry.js +3 -3
  282. package/dist/esm/ion-radio_2.entry.js +6 -6
  283. package/dist/esm/ion-range.entry.js +5 -5
  284. package/dist/esm/ion-refresher_2.entry.js +4 -4
  285. package/dist/esm/ion-reorder_2.entry.js +4 -4
  286. package/dist/esm/ion-ripple-effect.entry.js +3 -3
  287. package/dist/esm/ion-route_4.entry.js +4 -4
  288. package/dist/esm/ion-searchbar.entry.js +6 -6
  289. package/dist/esm/ion-segment_2.entry.js +7 -7
  290. package/dist/esm/ion-select_3.entry.js +9 -9
  291. package/dist/esm/ion-spinner.entry.js +3 -3
  292. package/dist/esm/ion-split-pane.entry.js +4 -4
  293. package/dist/esm/ion-tab-bar_2.entry.js +6 -6
  294. package/dist/esm/ion-tab_2.entry.js +4 -4
  295. package/dist/esm/ion-text.entry.js +4 -4
  296. package/dist/esm/ion-textarea.entry.js +4 -4
  297. package/dist/esm/ion-toast.entry.js +6 -6
  298. package/dist/esm/ion-toggle.entry.js +5 -5
  299. package/dist/esm/{ionic-global-d2d8f882.js → ionic-global-4528d288.js} +1 -1
  300. package/dist/esm/ionic.js +6 -6
  301. package/dist/esm/{ios.transition-a0041e41.js → ios.transition-e35d0940.js} +98 -69
  302. package/dist/esm/loader.js +5 -5
  303. package/dist/esm/{md.transition-0c0602d9.js → md.transition-4b90a1f0.js} +4 -2
  304. package/dist/esm/{overlays-696d25f5.js → overlays-df2c06b2.js} +5 -4
  305. package/dist/esm/{status-tap-37a74d1c.js → status-tap-12c27922.js} +1 -1
  306. package/dist/esm-es5/app-globals-b99e6d29.js +4 -0
  307. package/dist/esm-es5/{button-active-9e3c1f3b.js → button-active-920addb8.js} +1 -1
  308. package/dist/esm-es5/{hardware-back-button-804f43bb.js → hardware-back-button-2d9760b6.js} +1 -1
  309. package/dist/esm-es5/{index-8dbae644.js → index-7ae7186a.js} +1 -1
  310. package/dist/esm-es5/index-8e6b6a24.js +4 -0
  311. package/dist/esm-es5/index-9aab3bcf.js +5 -0
  312. package/dist/esm-es5/index.js +1 -1
  313. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  314. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  315. package/dist/esm-es5/ion-alert.entry.js +1 -1
  316. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  317. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  318. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  319. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  320. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  321. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  322. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  323. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  324. package/dist/esm-es5/ion-chip.entry.js +1 -1
  325. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  326. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  327. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  328. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  329. package/dist/esm-es5/ion-img.entry.js +1 -1
  330. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  331. package/dist/esm-es5/ion-input-password-toggle.entry.js +1 -1
  332. package/dist/esm-es5/ion-input.entry.js +1 -1
  333. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  334. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  335. package/dist/esm-es5/ion-loading.entry.js +1 -1
  336. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  337. package/dist/esm-es5/ion-modal.entry.js +1 -1
  338. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  339. package/dist/esm-es5/ion-picker-column-option.entry.js +1 -1
  340. package/dist/esm-es5/ion-picker-column.entry.js +1 -1
  341. package/dist/esm-es5/ion-picker.entry.js +1 -1
  342. package/dist/esm-es5/ion-popover.entry.js +1 -1
  343. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  344. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  345. package/dist/esm-es5/ion-range.entry.js +1 -1
  346. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  347. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  348. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  349. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  350. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  351. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  352. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  353. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  354. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  355. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  356. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  357. package/dist/esm-es5/ion-text.entry.js +1 -1
  358. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  359. package/dist/esm-es5/ion-toast.entry.js +1 -1
  360. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  361. package/dist/esm-es5/{ionic-global-d2d8f882.js → ionic-global-4528d288.js} +1 -1
  362. package/dist/esm-es5/ionic.js +1 -1
  363. package/dist/esm-es5/ios.transition-e35d0940.js +4 -0
  364. package/dist/esm-es5/loader.js +1 -1
  365. package/dist/esm-es5/md.transition-4b90a1f0.js +4 -0
  366. package/dist/esm-es5/{overlays-696d25f5.js → overlays-df2c06b2.js} +1 -1
  367. package/dist/esm-es5/{status-tap-37a74d1c.js → status-tap-12c27922.js} +1 -1
  368. package/dist/html.html-data.json +24 -0
  369. package/dist/ionic/index.esm.js +1 -1
  370. package/dist/ionic/ionic.esm.js +1 -1
  371. package/dist/ionic/ionic.js +1 -1
  372. package/dist/ionic/{p-94731a92.system.entry.js → p-01a27023.system.entry.js} +1 -1
  373. package/dist/ionic/p-0395be73.entry.js +4 -0
  374. package/dist/ionic/p-03b86a5e.js +4 -0
  375. package/dist/ionic/{p-057b5866.entry.js → p-049d43bd.entry.js} +1 -1
  376. package/dist/ionic/p-0536574e.entry.js +4 -0
  377. package/dist/ionic/{p-e3005be4.system.entry.js → p-08ea3402.system.entry.js} +1 -1
  378. package/dist/ionic/{p-3f5b86b4.entry.js → p-09538818.entry.js} +1 -1
  379. package/dist/ionic/{p-470f73c4.entry.js → p-09b4e9ec.entry.js} +1 -1
  380. package/dist/ionic/{p-aa0ed22b.system.entry.js → p-0a6d801e.system.entry.js} +1 -1
  381. package/dist/ionic/{p-53a3b33c.system.entry.js → p-0b007acc.system.entry.js} +1 -1
  382. package/dist/ionic/{p-b76bcd9e.system.entry.js → p-10feef7e.system.entry.js} +1 -1
  383. package/dist/ionic/p-130299c9.entry.js +4 -0
  384. package/dist/ionic/p-15d1ddba.js +4 -0
  385. package/dist/ionic/{p-c3ca0292.system.entry.js → p-199f826f.system.entry.js} +1 -1
  386. package/dist/ionic/p-1b435d20.entry.js +4 -0
  387. package/dist/ionic/{p-c671b28e.js → p-1cc0b31f.js} +1 -1
  388. package/dist/ionic/{p-c4676693.entry.js → p-1eb63fa4.entry.js} +1 -1
  389. package/dist/ionic/{p-9b31ebfa.entry.js → p-207e11dc.entry.js} +1 -1
  390. package/dist/ionic/p-26bb6bb8.entry.js +4 -0
  391. package/dist/ionic/{p-5d3a8503.system.entry.js → p-279f3bac.system.entry.js} +1 -1
  392. package/dist/ionic/{p-e49099b0.entry.js → p-29de09dd.entry.js} +1 -1
  393. package/dist/ionic/{p-6730a2f1.entry.js → p-2c588aa2.entry.js} +1 -1
  394. package/dist/ionic/p-2ff0e0aa.system.js +4 -0
  395. package/dist/ionic/p-30baae57.system.js +4 -0
  396. package/dist/ionic/{p-806aad8f.system.js → p-31d27232.system.js} +1 -1
  397. package/dist/ionic/p-33e10509.system.js +4 -0
  398. package/dist/ionic/{p-a592f1b8.system.entry.js → p-380efbfa.system.entry.js} +1 -1
  399. package/dist/ionic/p-3c27be4a.entry.js +4 -0
  400. package/dist/ionic/p-3d015cdb.system.js +5 -0
  401. package/dist/ionic/{p-70181008.entry.js → p-3f53a0b1.entry.js} +1 -1
  402. package/dist/ionic/p-433157a4.entry.js +4 -0
  403. package/dist/ionic/{p-fc94e18f.entry.js → p-4824398b.entry.js} +1 -1
  404. package/dist/ionic/p-498eb648.system.entry.js +4 -0
  405. package/dist/ionic/{p-8caca06c.system.entry.js → p-4d8f408d.system.entry.js} +1 -1
  406. package/dist/ionic/{p-4c153abb.entry.js → p-5091f63c.entry.js} +1 -1
  407. package/dist/ionic/{p-42f00e72.system.entry.js → p-509620b8.system.entry.js} +1 -1
  408. package/dist/ionic/{p-d1a8f599.entry.js → p-5109a566.entry.js} +1 -1
  409. package/dist/ionic/{p-7f59064a.entry.js → p-52ce473d.entry.js} +1 -1
  410. package/dist/ionic/{p-33d926c3.entry.js → p-52f53904.entry.js} +1 -1
  411. package/dist/ionic/{p-4e548bd7.system.entry.js → p-55f99a39.system.entry.js} +1 -1
  412. package/dist/ionic/{p-1e4d7975.system.js → p-5734ac17.system.js} +1 -1
  413. package/dist/ionic/{p-2b1e669d.system.entry.js → p-57bc32e2.system.entry.js} +1 -1
  414. package/dist/ionic/{p-d11c336d.js → p-5cc6dcf5.js} +1 -1
  415. package/dist/ionic/p-5dc9f99a.entry.js +4 -0
  416. package/dist/ionic/p-5ec3bb70.system.entry.js +4 -0
  417. package/dist/ionic/{p-ebe0aa6d.entry.js → p-606f069c.entry.js} +1 -1
  418. package/dist/ionic/{p-93e43f42.system.entry.js → p-628967e3.system.entry.js} +1 -1
  419. package/dist/ionic/{p-5fbc2eae.system.entry.js → p-62e44e4a.system.entry.js} +1 -1
  420. package/dist/ionic/p-66ed603b.js +4 -0
  421. package/dist/ionic/{p-a801da4b.system.entry.js → p-670c9f57.system.entry.js} +1 -1
  422. package/dist/ionic/{p-fd392e7f.system.entry.js → p-6a2cf398.system.entry.js} +1 -1
  423. package/dist/ionic/{p-5a3a3373.entry.js → p-6c3666d5.entry.js} +1 -1
  424. package/dist/ionic/{p-1a5227b3.system.entry.js → p-6df12af0.system.entry.js} +1 -1
  425. package/dist/ionic/{p-bd6d9610.entry.js → p-6ec88301.entry.js} +1 -1
  426. package/dist/ionic/p-6f008ad2.js +4 -0
  427. package/dist/ionic/{p-2ab5db0d.system.entry.js → p-700567ab.system.entry.js} +1 -1
  428. package/dist/ionic/p-712d54ae.js +4 -0
  429. package/dist/ionic/{p-94180ecc.entry.js → p-7349de07.entry.js} +1 -1
  430. package/dist/ionic/p-7402fcdf.entry.js +4 -0
  431. package/dist/ionic/{p-5ff497dc.system.entry.js → p-77731f19.system.entry.js} +1 -1
  432. package/dist/ionic/{p-c07e7a5d.entry.js → p-78405458.entry.js} +1 -1
  433. package/dist/ionic/{p-748e6b2b.system.entry.js → p-7d6fd45f.system.entry.js} +1 -1
  434. package/dist/ionic/{p-720927ad.entry.js → p-7eb47906.entry.js} +1 -1
  435. package/dist/ionic/p-80265a58.entry.js +4 -0
  436. package/dist/ionic/{p-8627f783.system.entry.js → p-83d748f8.system.entry.js} +2 -2
  437. package/dist/ionic/p-842c9fca.system.js +4 -0
  438. package/dist/ionic/{p-c7e0b81a.entry.js → p-8a03fbee.entry.js} +1 -1
  439. package/dist/ionic/{p-576786c0.system.entry.js → p-8cb80f83.system.entry.js} +1 -1
  440. package/dist/ionic/{p-cdee3a44.system.entry.js → p-8d14ee8c.system.entry.js} +2 -2
  441. package/dist/ionic/p-90dfc454.system.entry.js +4 -0
  442. package/dist/ionic/{p-819e8479.system.entry.js → p-9213681c.system.entry.js} +1 -1
  443. package/dist/ionic/p-92d7e99d.system.js +4 -0
  444. package/dist/ionic/{p-d6229f05.system.entry.js → p-9664a1a2.system.entry.js} +1 -1
  445. package/dist/ionic/{p-b799a007.entry.js → p-9797f6eb.entry.js} +1 -1
  446. package/dist/ionic/{p-5d4d89e0.system.entry.js → p-9848d7be.system.entry.js} +1 -1
  447. package/dist/ionic/{p-9384565a.entry.js → p-98f6116f.entry.js} +1 -1
  448. package/dist/ionic/{p-c62571da.entry.js → p-99884813.entry.js} +1 -1
  449. package/dist/ionic/{p-48888af6.system.entry.js → p-99ca9787.system.entry.js} +1 -1
  450. package/dist/ionic/{p-45034312.system.entry.js → p-9bfd7cda.system.entry.js} +1 -1
  451. package/dist/ionic/p-9c6dcf78.system.entry.js +4 -0
  452. package/dist/ionic/{p-051d2d23.js → p-9da86308.js} +1 -1
  453. package/dist/ionic/{p-34511b1d.js → p-9ec42be0.js} +1 -1
  454. package/dist/ionic/{p-0d960144.system.entry.js → p-a2e94ade.system.entry.js} +1 -1
  455. package/dist/ionic/{p-1980c728.system.js → p-a39d3482.system.js} +1 -1
  456. package/dist/ionic/p-a488b7ab.system.js +4 -0
  457. package/dist/ionic/{p-5d80b741.entry.js → p-a4ab7449.entry.js} +1 -1
  458. package/dist/ionic/{p-2c3c7cb9.system.entry.js → p-a50f23bf.system.entry.js} +2 -2
  459. package/dist/ionic/{p-80f85095.system.entry.js → p-a76ab3ea.system.entry.js} +1 -1
  460. package/dist/ionic/{p-77ce6034.js → p-a953ef66.js} +1 -1
  461. package/dist/ionic/{p-08c4d048.entry.js → p-aaaaaea1.entry.js} +1 -1
  462. package/dist/ionic/{p-c23627c3.entry.js → p-b02eda30.entry.js} +1 -1
  463. package/dist/ionic/{p-49cdc4f2.entry.js → p-b04c27d8.entry.js} +1 -1
  464. package/dist/ionic/{p-0b12d1ee.system.entry.js → p-b07affd5.system.entry.js} +1 -1
  465. package/dist/ionic/{p-2f308f7f.system.entry.js → p-b28d3ccb.system.entry.js} +2 -2
  466. package/dist/ionic/{p-320cfcab.entry.js → p-b563b6ac.entry.js} +1 -1
  467. package/dist/ionic/p-b62ae60a.system.entry.js +4 -0
  468. package/dist/ionic/p-b9181033.system.entry.js +4 -0
  469. package/dist/ionic/{p-1930d8e7.entry.js → p-ba70039f.entry.js} +1 -1
  470. package/dist/ionic/{p-b571cab1.entry.js → p-bbbe869e.entry.js} +1 -1
  471. package/dist/ionic/{p-283fd4e1.system.entry.js → p-c41435e6.system.entry.js} +1 -1
  472. package/dist/ionic/p-cec8589b.system.js +4 -0
  473. package/dist/ionic/{p-bbbe3138.system.entry.js → p-d69b26d9.system.entry.js} +1 -1
  474. package/dist/ionic/p-d73a16e6.system.entry.js +4 -0
  475. package/dist/ionic/p-dba5cb84.js +5 -0
  476. package/dist/ionic/{p-63265e00.system.entry.js → p-dc0d9ff5.system.entry.js} +2 -2
  477. package/dist/ionic/{p-f5c42f72.entry.js → p-dc1e363a.entry.js} +1 -1
  478. package/dist/ionic/{p-c9ba1908.entry.js → p-df517d1f.entry.js} +1 -1
  479. package/dist/ionic/{p-2a3e98fb.system.entry.js → p-e0a8ffd0.system.entry.js} +1 -1
  480. package/dist/ionic/{p-e9ef13be.system.entry.js → p-e6e197f5.system.entry.js} +1 -1
  481. package/dist/ionic/{p-0af79ebd.entry.js → p-e6e88ab9.entry.js} +1 -1
  482. package/dist/ionic/{p-4e5288de.system.js → p-e81f22e3.system.js} +1 -1
  483. package/dist/ionic/{p-aa0f60b2.system.js → p-eb3023c9.system.js} +1 -1
  484. package/dist/ionic/p-ecbdbf25.system.entry.js +4 -0
  485. package/dist/ionic/{p-26d33af2.system.entry.js → p-ed5aebaa.system.entry.js} +1 -1
  486. package/dist/ionic/{p-23e440b6.entry.js → p-f357707e.entry.js} +1 -1
  487. package/dist/ionic/{p-e885f3c4.entry.js → p-f53bcebd.entry.js} +1 -1
  488. package/dist/ionic/p-f9baf25c.entry.js +4 -0
  489. package/dist/ionic/{p-ee3bbaf2.entry.js → p-fa8f2e62.entry.js} +1 -1
  490. package/dist/ionic/{p-6e9bd6ba.system.entry.js → p-fb21fd1c.system.entry.js} +1 -1
  491. package/dist/ionic/{p-bdd3053f.entry.js → p-fcecca8f.entry.js} +1 -1
  492. package/dist/types/components/accordion-group/accordion-group.d.ts +3 -4
  493. package/dist/types/components/checkbox/checkbox.d.ts +3 -4
  494. package/dist/types/components/content/content.d.ts +8 -0
  495. package/dist/types/components/datetime/datetime.d.ts +2 -0
  496. package/dist/types/components/input/input.d.ts +6 -0
  497. package/dist/types/components/modal/modal-interface.d.ts +1 -0
  498. package/dist/types/components/modal/modal.d.ts +18 -0
  499. package/dist/types/components/picker-column/picker-column.d.ts +37 -0
  500. package/dist/types/components/popover/popover-interface.d.ts +1 -0
  501. package/dist/types/components/popover/popover.d.ts +18 -0
  502. package/dist/types/components/radio-group/radio-group.d.ts +2 -0
  503. package/dist/types/components/range/range.d.ts +1 -1
  504. package/dist/types/components/searchbar/searchbar.d.ts +2 -0
  505. package/dist/types/components/segment/segment.d.ts +3 -2
  506. package/dist/types/components/select/select.d.ts +2 -0
  507. package/dist/types/components/textarea/textarea.d.ts +2 -0
  508. package/dist/types/components/toggle/toggle.d.ts +3 -2
  509. package/dist/types/components.d.ts +44 -12
  510. package/dist/types/utils/config.d.ts +9 -0
  511. package/dist/types/utils/focus-controller/index.d.ts +13 -0
  512. package/dist/types/utils/overlays.d.ts +1 -0
  513. package/hydrate/index.js +43566 -39256
  514. package/package.json +6 -6
  515. package/dist/cjs/index-1437d080.js +0 -11980
  516. package/dist/esm/index-5dc2b88e.js +0 -11942
  517. package/dist/esm-es5/app-globals-3cbaf9d9.js +0 -4
  518. package/dist/esm-es5/index-5dc2b88e.js +0 -18
  519. package/dist/esm-es5/index-f7fbe1fb.js +0 -4
  520. package/dist/esm-es5/ios.transition-a0041e41.js +0 -4
  521. package/dist/esm-es5/md.transition-0c0602d9.js +0 -4
  522. package/dist/ionic/p-06d5221c.js +0 -4
  523. package/dist/ionic/p-06fad524.system.js +0 -4
  524. package/dist/ionic/p-0d56dea9.entry.js +0 -4
  525. package/dist/ionic/p-13bfcef4.system.entry.js +0 -4
  526. package/dist/ionic/p-16016625.system.js +0 -4
  527. package/dist/ionic/p-20304962.js +0 -4
  528. package/dist/ionic/p-2dfdda15.system.entry.js +0 -4
  529. package/dist/ionic/p-2fa34b5c.entry.js +0 -4
  530. package/dist/ionic/p-32048e4c.system.js +0 -18
  531. package/dist/ionic/p-385964e6.entry.js +0 -4
  532. package/dist/ionic/p-4324e8a4.entry.js +0 -4
  533. package/dist/ionic/p-45664cb9.system.js +0 -4
  534. package/dist/ionic/p-4ad48ec9.system.entry.js +0 -4
  535. package/dist/ionic/p-4af0b730.js +0 -8
  536. package/dist/ionic/p-4fcef939.entry.js +0 -4
  537. package/dist/ionic/p-567a21a2.system.entry.js +0 -4
  538. package/dist/ionic/p-583f8865.system.entry.js +0 -4
  539. package/dist/ionic/p-58f89707.js +0 -4
  540. package/dist/ionic/p-7536b4b3.system.js +0 -4
  541. package/dist/ionic/p-7ef5bb32.entry.js +0 -4
  542. package/dist/ionic/p-8664c316.entry.js +0 -4
  543. package/dist/ionic/p-8c4fc85f.system.js +0 -4
  544. package/dist/ionic/p-8e031d97.entry.js +0 -4
  545. package/dist/ionic/p-8f48c966.system.entry.js +0 -4
  546. package/dist/ionic/p-adb896a0.entry.js +0 -4
  547. package/dist/ionic/p-b0093947.system.js +0 -4
  548. package/dist/ionic/p-cb4f96f3.system.js +0 -4
  549. package/dist/ionic/p-cc856712.entry.js +0 -4
  550. package/dist/ionic/p-cd1b9056.js +0 -4
  551. package/dist/ionic/p-d918e7ef.system.entry.js +0 -4
  552. package/dist/ionic/p-df062892.system.entry.js +0 -4
  553. package/dist/ionic/p-f0be340f.entry.js +0 -4
  554. package/dist/ionic/p-fdf40b09.js +0 -4
@@ -76,7 +76,7 @@ const Checkbox = /*@__PURE__*/ proxyCustomElement(class Checkbox extends HTMLEle
76
76
  const mode = getIonMode(this);
77
77
  const path = getSVGPath(mode, indeterminate);
78
78
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
79
- return (h(Host, { key: '52064869f18f6762802a783ba9ee37433d2a2981', "aria-checked": indeterminate ? 'mixed' : `${checked}`, class: createColorClasses(color, {
79
+ return (h(Host, { key: '0ac95890562c7f035704c40959c69f8c8ca4bc9f', "aria-checked": indeterminate ? 'mixed' : `${checked}`, class: createColorClasses(color, {
80
80
  [mode]: true,
81
81
  'in-item': hostContext('ion-item', el),
82
82
  'checkbox-checked': checked,
@@ -86,10 +86,10 @@ const Checkbox = /*@__PURE__*/ proxyCustomElement(class Checkbox extends HTMLEle
86
86
  [`checkbox-justify-${justify}`]: true,
87
87
  [`checkbox-alignment-${alignment}`]: true,
88
88
  [`checkbox-label-placement-${labelPlacement}`]: true,
89
- }), onClick: this.onClick }, h("label", { key: '800b3521fe809423b9eee7ab9d220255cc6ffdff', class: "checkbox-wrapper" }, h("input", Object.assign({ key: '3e254b29bb1fc3951691a255a20cfd65360be510', 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)), h("div", { key: '19ff4b1115c3bc9c2ceed045fbc4e970f77d9e0d', class: {
89
+ }), onClick: this.onClick }, h("label", { key: '3f9f7c8383dded8f7997086b25399d052df76b5c', class: "checkbox-wrapper" }, h("input", Object.assign({ key: '6fb11d06c424c289357d5d7c1a4d1b967be231d0', 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)), h("div", { key: 'f577a272e5e3f9f1852fc95e40466c80b76309c7', class: {
90
90
  'label-text-wrapper': true,
91
91
  'label-text-wrapper-hidden': el.textContent === '',
92
- }, part: "label" }, h("slot", { key: 'e4f07b55826fb1b3a80e0428873fbdf06bf92978' })), h("div", { key: '5134cf088c93f36b00d3848b573a148f2d9fb806', class: "native-wrapper" }, h("svg", { key: 'd00733f071d6da47e1a6e5c89cb6aab1a7b0ef74', class: "checkbox-icon", viewBox: "0 0 24 24", part: "container" }, path)))));
92
+ }, part: "label" }, h("slot", { key: '7c9b0b4513e797a1acdf55a5f286563e5f397e9c' })), h("div", { key: 'e47c50a078b8d761ddc5efcb9a9635281b5818f6', class: "native-wrapper" }, h("svg", { key: '4dca47179ae15e9094e01c799ef4ed25fbb0d840', class: "checkbox-icon", viewBox: "0 0 24 24", part: "container" }, path)))));
93
93
  }
94
94
  getSVGPath(mode, indeterminate) {
95
95
  let path = indeterminate ? (h("path", { d: "M6 12L18 12", part: "mark" })) : (h("path", { d: "M5.9,12.5l3.8,3.8l8.8-8.8", part: "mark" }));
@@ -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.js';
4
5
  import { writeTask, Build } from '@stencil/core/internal/client';
6
+ import { p as printIonWarning } from './index6.js';
5
7
  import { r as raf } from './helpers.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
 
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
+
13
123
  const iosTransitionAnimation = () => import('./ios.transition.js');
14
124
  const mdTransitionAnimation = () => import('./md.transition.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 {
@@ -206,12 +206,12 @@ const AccordionGroup = /*@__PURE__*/ proxyCustomElement(class AccordionGroup ext
206
206
  render() {
207
207
  const { disabled, readonly, expand } = this;
208
208
  const mode = getIonMode(this);
209
- return (h(Host, { key: 'ac2e26ac91c95d08172bd2b51daa7a711c21db9e', class: {
209
+ return (h(Host, { key: '82f3e77066fabb4736638ee4c487ad56efd39c63', class: {
210
210
  [mode]: true,
211
211
  'accordion-group-disabled': disabled,
212
212
  'accordion-group-readonly': readonly,
213
213
  [`accordion-group-expand-${expand}`]: true,
214
- }, role: "presentation" }, h("slot", { key: '444adc2af5730897eba57095da046d6bdb5af70f' })));
214
+ }, role: "presentation" }, h("slot", { key: 'a3c791ea887fc640b512f81d429be465ae902b3d' })));
215
215
  }
216
216
  get el() { return this; }
217
217
  static get watchers() { return {
@@ -50,6 +50,7 @@ const Content = /*@__PURE__*/ proxyCustomElement(class Content extends HTMLEleme
50
50
  };
51
51
  this.color = undefined;
52
52
  this.fullscreen = false;
53
+ this.fixedSlotPlacement = 'after';
53
54
  this.forceOverscroll = undefined;
54
55
  this.scrollX = false;
55
56
  this.scrollY = true;
@@ -331,13 +332,13 @@ const Content = /*@__PURE__*/ proxyCustomElement(class Content extends HTMLEleme
331
332
  }
332
333
  }
333
334
  render() {
334
- const { isMainContent, scrollX, scrollY, el } = this;
335
+ const { fixedSlotPlacement, isMainContent, scrollX, scrollY, el } = this;
335
336
  const rtl = isRTL(el) ? 'rtl' : 'ltr';
336
337
  const mode = getIonMode(this);
337
338
  const forceOverscroll = this.shouldForceOverscroll();
338
339
  const transitionShadow = mode === 'ios';
339
340
  this.resize();
340
- return (h(Host, { key: '98e9658e69c0bbe0113e4c1b89dd7b240334c039', role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
341
+ return (h(Host, { key: 'f599a7da14969df38c20a6f650179d2a319fb58b', role: isMainContent ? 'main' : undefined, class: createColorClasses(this.color, {
341
342
  [mode]: true,
342
343
  'content-sizing': hostContext('ion-popover', this.el),
343
344
  overscroll: forceOverscroll,
@@ -345,18 +346,19 @@ const Content = /*@__PURE__*/ proxyCustomElement(class Content extends HTMLEleme
345
346
  }), style: {
346
347
  '--offset-top': `${this.cTop}px`,
347
348
  '--offset-bottom': `${this.cBottom}px`,
348
- } }, h("div", { key: 'e89aa6ea09625846db52d63bdbf06c3c279a5ba4', ref: (el) => (this.backgroundContentEl = el), id: "background-content", part: "background" }), h("div", { key: '37925cf9d898ede58d5ac7b5a650c648033602a3', class: {
349
+ } }, 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: {
349
350
  'inner-scroll': true,
350
351
  'scroll-x': scrollX,
351
352
  'scroll-y': scrollY,
352
353
  overscroll: (scrollX || scrollY) && forceOverscroll,
353
- }, 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" })));
354
+ }, 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));
354
355
  }
355
356
  get el() { return this; }
356
357
  static get style() { return IonContentStyle0; }
357
358
  }, [1, "ion-content", {
358
359
  "color": [513],
359
360
  "fullscreen": [4],
361
+ "fixedSlotPlacement": [1, "fixed-slot-placement"],
360
362
  "forceOverscroll": [1028, "force-overscroll"],
361
363
  "scrollX": [4, "scroll-x"],
362
364
  "scrollY": [4, "scroll-y"],
@@ -337,11 +337,11 @@ const DatetimeButton = /*@__PURE__*/ proxyCustomElement(class DatetimeButton ext
337
337
  render() {
338
338
  const { color, dateText, timeText, selectedButton, datetimeActive, disabled } = this;
339
339
  const mode = getIonMode(this);
340
- return (h(Host, { key: '26e606af6f067a5774db37ed41387ffebb941777', class: createColorClasses(color, {
340
+ return (h(Host, { key: '0be955404133adbb31ae16a6599014bb29765f19', class: createColorClasses(color, {
341
341
  [mode]: true,
342
342
  [`${selectedButton}-active`]: datetimeActive,
343
343
  ['datetime-button-disabled']: disabled,
344
- }) }, 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' })))));
344
+ }) }, 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' })))));
345
345
  }
346
346
  get el() { return this; }
347
347
  static get style() { return {
@@ -289,10 +289,10 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
289
289
  const { activeParts } = this;
290
290
  return Array.isArray(activeParts) ? activeParts[0] : activeParts;
291
291
  };
292
- this.closeParentOverlay = () => {
292
+ this.closeParentOverlay = (role) => {
293
293
  const popoverOrModal = this.el.closest('ion-modal, ion-popover');
294
294
  if (popoverOrModal) {
295
- popoverOrModal.dismiss();
295
+ popoverOrModal.dismiss(undefined, role);
296
296
  }
297
297
  };
298
298
  this.setWorkingParts = (parts) => {
@@ -523,7 +523,8 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
523
523
  * Check below the next line ensures that we did not
524
524
  * swipe and abort (i.e. we swiped but we are still on the current month).
525
525
  */
526
- const month = calendarBodyRef.scrollLeft <= 2 ? startMonth : endMonth;
526
+ const condition = isRTL(this.el) ? calendarBodyRef.scrollLeft >= -2 : calendarBodyRef.scrollLeft <= 2;
527
+ const month = condition ? startMonth : endMonth;
527
528
  /**
528
529
  * The edge of the month must be lined up with
529
530
  * the edge of the calendar body in order for
@@ -962,7 +963,7 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
962
963
  }
963
964
  }
964
965
  if (closeOverlay) {
965
- this.closeParentOverlay();
966
+ this.closeParentOverlay(CONFIRM_ROLE);
966
967
  }
967
968
  }
968
969
  /**
@@ -982,7 +983,7 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
982
983
  async cancel(closeOverlay = false) {
983
984
  this.ionCancel.emit();
984
985
  if (closeOverlay) {
985
- this.closeParentOverlay();
986
+ this.closeParentOverlay(CANCEL_ROLE);
986
987
  }
987
988
  }
988
989
  get isCalendarPicker() {
@@ -1294,7 +1295,7 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
1294
1295
  const todayString = workingParts.day !== null
1295
1296
  ? `${workingParts.year}-${workingParts.month}-${workingParts.day}`
1296
1297
  : `${defaultParts.year}-${defaultParts.month}-${defaultParts.day}`;
1297
- return (h("ion-picker-column", { class: "date-column", color: this.color, disabled: disabled, value: todayString, onIonChange: (ev) => {
1298
+ return (h("ion-picker-column", { "aria-label": "Select a date", class: "date-column", color: this.color, disabled: disabled, value: todayString, onIonChange: (ev) => {
1298
1299
  const { value } = ev.detail;
1299
1300
  const findPart = parts.find(({ month, day, year }) => value === `${year}-${month}-${day}`);
1300
1301
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), findPart));
@@ -1369,7 +1370,7 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
1369
1370
  const { disabled, workingParts } = this;
1370
1371
  const activePart = this.getActivePartsWithFallback();
1371
1372
  const pickerColumnValue = (_a = (workingParts.day !== null ? workingParts.day : this.defaultParts.day)) !== null && _a !== void 0 ? _a : undefined;
1372
- return (h("ion-picker-column", { class: "day-column", color: this.color, disabled: disabled, value: pickerColumnValue, onIonChange: (ev) => {
1373
+ return (h("ion-picker-column", { "aria-label": "Select a day", class: "day-column", color: this.color, disabled: disabled, value: pickerColumnValue, onIonChange: (ev) => {
1373
1374
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { day: ev.detail.value }));
1374
1375
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { day: ev.detail.value }));
1375
1376
  ev.stopPropagation();
@@ -1381,7 +1382,7 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
1381
1382
  }
1382
1383
  const { disabled, workingParts } = this;
1383
1384
  const activePart = this.getActivePartsWithFallback();
1384
- return (h("ion-picker-column", { class: "month-column", color: this.color, disabled: disabled, value: workingParts.month, onIonChange: (ev) => {
1385
+ return (h("ion-picker-column", { "aria-label": "Select a month", class: "month-column", color: this.color, disabled: disabled, value: workingParts.month, onIonChange: (ev) => {
1385
1386
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { month: ev.detail.value }));
1386
1387
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { month: ev.detail.value }));
1387
1388
  ev.stopPropagation();
@@ -1393,7 +1394,7 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
1393
1394
  }
1394
1395
  const { disabled, workingParts } = this;
1395
1396
  const activePart = this.getActivePartsWithFallback();
1396
- return (h("ion-picker-column", { class: "year-column", color: this.color, disabled: disabled, value: workingParts.year, onIonChange: (ev) => {
1397
+ return (h("ion-picker-column", { "aria-label": "Select a year", class: "year-column", color: this.color, disabled: disabled, value: workingParts.year, onIonChange: (ev) => {
1397
1398
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { year: ev.detail.value }));
1398
1399
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { year: ev.detail.value }));
1399
1400
  ev.stopPropagation();
@@ -1426,7 +1427,7 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
1426
1427
  if (hoursData.length === 0)
1427
1428
  return [];
1428
1429
  const activePart = this.getActivePartsWithFallback();
1429
- return (h("ion-picker-column", { color: this.color, disabled: disabled, value: activePart.hour, numericInput: true, onIonChange: (ev) => {
1430
+ return (h("ion-picker-column", { "aria-label": "Select an hour", color: this.color, disabled: disabled, value: activePart.hour, numericInput: true, onIonChange: (ev) => {
1430
1431
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { hour: ev.detail.value }));
1431
1432
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { hour: ev.detail.value }));
1432
1433
  ev.stopPropagation();
@@ -1437,7 +1438,7 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
1437
1438
  if (minutesData.length === 0)
1438
1439
  return [];
1439
1440
  const activePart = this.getActivePartsWithFallback();
1440
- return (h("ion-picker-column", { color: this.color, disabled: disabled, value: activePart.minute, numericInput: true, onIonChange: (ev) => {
1441
+ return (h("ion-picker-column", { "aria-label": "Select a minute", color: this.color, disabled: disabled, value: activePart.minute, numericInput: true, onIonChange: (ev) => {
1441
1442
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { minute: ev.detail.value }));
1442
1443
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { minute: ev.detail.value }));
1443
1444
  ev.stopPropagation();
@@ -1450,7 +1451,7 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
1450
1451
  }
1451
1452
  const activePart = this.getActivePartsWithFallback();
1452
1453
  const isDayPeriodRTL = isLocaleDayPeriodRTL(this.locale);
1453
- return (h("ion-picker-column", { style: isDayPeriodRTL ? { order: '-1' } : {}, color: this.color, disabled: disabled, value: activePart.ampm, onIonChange: (ev) => {
1454
+ 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) => {
1454
1455
  const hour = calculateHourFromAMPM(workingParts, ev.detail.value);
1455
1456
  this.setWorkingParts(Object.assign(Object.assign({}, workingParts), { ampm: ev.detail.value, hour }));
1456
1457
  this.setActiveParts(Object.assign(Object.assign({}, activePart), { ampm: ev.detail.value, hour }));
@@ -1760,7 +1761,7 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
1760
1761
  const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
1761
1762
  const hasWheelVariant = hasDatePresentation && preferWheel;
1762
1763
  renderHiddenInput(true, el, name, formatValue(value), disabled);
1763
- return (h(Host, { key: 'f1f8ca52cdd9cfc8394b0365c89c0d30cd7316e7', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
1764
+ return (h(Host, { key: '48313af4ec8e2a2666cd8c89932c5131dfa7b556', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: Object.assign({}, createColorClasses(color, {
1764
1765
  [mode]: true,
1765
1766
  ['datetime-readonly']: readonly,
1766
1767
  ['datetime-disabled']: disabled,
@@ -1770,7 +1771,7 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
1770
1771
  [`datetime-size-${size}`]: true,
1771
1772
  [`datetime-prefer-wheel`]: hasWheelVariant,
1772
1773
  [`datetime-grid`]: isGridStyle,
1773
- })) }, h("div", { key: '480068aa8072b60ac521646dfa82480c5f6ce6ef', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1774
+ })) }, h("div", { key: 'b72570048236415aed915488305046d987d51dcf', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1774
1775
  }
1775
1776
  get el() { return this; }
1776
1777
  static get watchers() { return {
@@ -1843,6 +1844,8 @@ const Datetime = /*@__PURE__*/ proxyCustomElement(class Datetime extends HTMLEle
1843
1844
  "value": ["valueChanged"]
1844
1845
  }]);
1845
1846
  let datetimeIds = 0;
1847
+ const CANCEL_ROLE = 'datetime-cancel';
1848
+ const CONFIRM_ROLE = 'datetime-confirm';
1846
1849
  const WHEEL_ITEM_PART = 'wheel-item';
1847
1850
  const WHEEL_ITEM_ACTIVE_PART = `active`;
1848
1851
  function defineCustomElement$1() {
@@ -71,7 +71,7 @@ const FabButton = /*@__PURE__*/ proxyCustomElement(class FabButton extends HTMLE
71
71
  rel: this.rel,
72
72
  target: this.target,
73
73
  };
74
- return (h(Host, { key: '4eee204d20b0e2ffed49a88f6cb3e04b6697965c', onClick: this.onClick, "aria-disabled": disabled ? 'true' : null, class: createColorClasses(color, {
74
+ return (h(Host, { key: 'eb347f7d6749c40637540d84778eb8d1b667a947', onClick: this.onClick, "aria-disabled": disabled ? 'true' : null, class: createColorClasses(color, {
75
75
  [mode]: true,
76
76
  'fab-button-in-list': inList,
77
77
  'fab-button-translucent-in-list': inList && translucent,
@@ -82,7 +82,7 @@ const FabButton = /*@__PURE__*/ proxyCustomElement(class FabButton extends HTMLE
82
82
  'ion-activatable': true,
83
83
  'ion-focusable': true,
84
84
  [`fab-button-${size}`]: size !== undefined,
85
- }) }, 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' }))));
85
+ }) }, 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' }))));
86
86
  }
87
87
  get el() { return this; }
88
88
  static get style() { return {
@@ -25,11 +25,11 @@ const FabList = /*@__PURE__*/ proxyCustomElement(class FabList extends HTMLEleme
25
25
  }
26
26
  render() {
27
27
  const mode = getIonMode(this);
28
- return (h(Host, { key: '64b33366447f66c7f979cfac56307fbb1a6fac1c', class: {
28
+ return (h(Host, { key: 'fa1d195b9950654ba0e984bf61d981c977d05275', class: {
29
29
  [mode]: true,
30
30
  'fab-list-active': this.activated,
31
31
  [`fab-list-side-${this.side}`]: true,
32
- } }, h("slot", { key: 'd9f474f7f20fd7e813db358fddc720534ca05bb6' })));
32
+ } }, h("slot", { key: '2ec738c66c05112e1e2521155d6adfc36d2fd1db' })));
33
33
  }
34
34
  get el() { return this; }
35
35
  static get watchers() { return {
@@ -54,12 +54,12 @@ const Fab = /*@__PURE__*/ proxyCustomElement(class Fab extends HTMLElement {
54
54
  render() {
55
55
  const { horizontal, vertical, edge } = this;
56
56
  const mode = getIonMode(this);
57
- return (h(Host, { key: '8a310806d0e748d7ebb0ed3d9a2652038e0f2960', class: {
57
+ return (h(Host, { key: 'cb44cf6486b0a6439b99da87c065b0b52e2514f4', class: {
58
58
  [mode]: true,
59
59
  [`fab-horizontal-${horizontal}`]: horizontal !== undefined,
60
60
  [`fab-vertical-${vertical}`]: vertical !== undefined,
61
61
  'fab-edge': edge,
62
- } }, h("slot", { key: '9394ef6d6e5b0410fa6ba212171f687fb178ce2d' })));
62
+ } }, h("slot", { key: '1ed484c7ecb10cd81fbca9a4f5c4049bf82f9f8a' })));
63
63
  }
64
64
  get el() { return this; }
65
65
  static get watchers() { return {
@@ -115,7 +115,7 @@ const Footer = /*@__PURE__*/ proxyCustomElement(class Footer extends HTMLElement
115
115
  const mode = getIonMode(this);
116
116
  const tabs = this.el.closest('ion-tabs');
117
117
  const tabBar = tabs === null || tabs === void 0 ? void 0 : tabs.querySelector(':scope > ion-tab-bar');
118
- return (h(Host, { key: 'ddc228f1a1e7fa4f707dccf74db2490ca3241137', role: "contentinfo", class: {
118
+ return (h(Host, { key: '5da19dc38ba73e1ddfd1bef3ebd485105d77c751', role: "contentinfo", class: {
119
119
  [mode]: true,
120
120
  // Used internally for styling
121
121
  [`footer-${mode}`]: true,
@@ -123,7 +123,7 @@ const Footer = /*@__PURE__*/ proxyCustomElement(class Footer extends HTMLElement
123
123
  [`footer-translucent-${mode}`]: translucent,
124
124
  ['footer-toolbar-padding']: !this.keyboardVisible && (!tabBar || tabBar.slot !== 'bottom'),
125
125
  [`footer-collapse-${collapse}`]: collapse !== undefined,
126
- } }, mode === 'ios' && translucent && h("div", { key: 'e16ed4963ff94e06de77eb8038201820af73937c', class: "footer-background" }), h("slot", { key: 'f186934febf85d37133d9351a96c1a64b0a4b203' })));
126
+ } }, mode === 'ios' && translucent && h("div", { key: 'fafad08090a33d8c4e8a5b63d61929dcb89aab47', class: "footer-background" }), h("slot", { key: 'e0a443d346afa55e4317c0bc1263fdbe3c619559' })));
127
127
  }
128
128
  get el() { return this; }
129
129
  static get style() { return {
@@ -16,10 +16,10 @@ const Grid = /*@__PURE__*/ proxyCustomElement(class Grid extends HTMLElement {
16
16
  }
17
17
  render() {
18
18
  const mode = getIonMode(this);
19
- return (h(Host, { key: '617127ecfabf9bf615bef1dda1be3fed5a065949', class: {
19
+ return (h(Host, { key: '930ce78b02f8360fbca08a35d364d2c09128c6c8', class: {
20
20
  [mode]: true,
21
21
  'grid-fixed': this.fixed,
22
- } }, h("slot", { key: 'c781fff853b093d8f44bdb7943bbc4f17c903803' })));
22
+ } }, h("slot", { key: 'c47bf7ef2197f5ebc42d3e2c55044276fb0db393' })));
23
23
  }
24
24
  static get style() { return IonGridStyle0; }
25
25
  }, [1, "ion-grid", {
@@ -321,14 +321,14 @@ const Header = /*@__PURE__*/ proxyCustomElement(class Header extends HTMLElement
321
321
  const collapse = this.collapse || 'none';
322
322
  // banner role must be at top level, so remove role if inside a menu
323
323
  const roleType = hostContext('ion-menu', this.el) ? 'none' : 'banner';
324
- return (h(Host, Object.assign({ key: 'b6cc27f0b08afc9fcc889683525da765d80ba672', role: roleType, class: {
324
+ return (h(Host, Object.assign({ key: 'c687314ef290793a9d633ad20cfc5eeb47621e31', role: roleType, class: {
325
325
  [mode]: true,
326
326
  // Used internally for styling
327
327
  [`header-${mode}`]: true,
328
328
  [`header-translucent`]: this.translucent,
329
329
  [`header-collapse-${collapse}`]: true,
330
330
  [`header-translucent-${mode}`]: this.translucent,
331
- } }, inheritedAttributes), mode === 'ios' && translucent && h("div", { key: '395766d4dcee3398bc91960db21f922095292f14', class: "header-background" }), h("slot", { key: '09a67ece27b258ff1248805d43d92a49b2c6859a' })));
331
+ } }, inheritedAttributes), mode === 'ios' && translucent && h("div", { key: 'b429996046082405a91e7c23f95516db0b736f12', class: "header-background" }), h("slot", { key: 'e17a8965f8d3a33c1bfcb056c153d8242e5229fa' })));
332
332
  }
333
333
  get el() { return this; }
334
334
  static get style() { return {
@@ -78,7 +78,7 @@ const Img = /*@__PURE__*/ proxyCustomElement(class Img extends HTMLElement {
78
78
  render() {
79
79
  const { loadSrc, alt, onLoad, loadError, inheritedAttributes } = this;
80
80
  const { draggable } = inheritedAttributes;
81
- return (h(Host, { key: 'da600442894427dee1974a28e545613afac69fca', class: getIonMode(this) }, h("img", { key: '16df0c7069af86c0fa7ce5af598bc0f63b4eb71a', decoding: "async", src: loadSrc, alt: alt, onLoad: onLoad, onError: loadError, part: "image", draggable: isDraggable(draggable) })));
81
+ return (h(Host, { key: '14d24d65ec8e5522192ca58035264971b1ab883b', class: getIonMode(this) }, h("img", { key: '345ba155a5fdce5e66c397a599b7333d37d9cb1d', decoding: "async", src: loadSrc, alt: alt, onLoad: onLoad, onError: loadError, part: "image", draggable: isDraggable(draggable) })));
82
82
  }
83
83
  get el() { return this; }
84
84
  static get watchers() { return {
@@ -35,11 +35,11 @@ const InfiniteScrollContent = /*@__PURE__*/ proxyCustomElement(class InfiniteScr
35
35
  }
36
36
  render() {
37
37
  const mode = getIonMode(this);
38
- return (h(Host, { key: '7c16060dcfe2a0b0fb3e2f8f4c449589a76f1baa', class: {
38
+ return (h(Host, { key: '060278bf9cb0321e182352f9613be4ebbb028259', class: {
39
39
  [mode]: true,
40
40
  // Used internally for styling
41
41
  [`infinite-scroll-content-${mode}`]: true,
42
- } }, h("div", { key: 'a94f4d8746e053dc718f97520bd7e48cb316443a', class: "infinite-loading" }, this.loadingSpinner && (h("div", { key: '10143d5d2a50a2a2bc5de1cee8e7ab51263bcf23', class: "infinite-loading-spinner" }, h("ion-spinner", { key: '8846e88191690d9c61a0b462889ed56fbfed8b0d', name: this.loadingSpinner }))), this.loadingText !== undefined && this.renderLoadingText())));
42
+ } }, h("div", { key: '07d3cada920145f979ad315bd187fb878e0c3da3', class: "infinite-loading" }, this.loadingSpinner && (h("div", { key: '6254f175d7543d09f3dd47cd0589a2809182cd8c', class: "infinite-loading-spinner" }, h("ion-spinner", { key: 'a6a816d1c65b60b786333b209b63492aa716a283', name: this.loadingSpinner }))), this.loadingText !== undefined && this.renderLoadingText())));
43
43
  }
44
44
  static get style() { return {
45
45
  ios: IonInfiniteScrollContentIosStyle0,
@@ -174,7 +174,7 @@ const InfiniteScroll = /*@__PURE__*/ proxyCustomElement(class InfiniteScroll ext
174
174
  render() {
175
175
  const mode = getIonMode(this);
176
176
  const disabled = this.disabled;
177
- return (h(Host, { key: 'e844956795f69be33396ce4480aa7a54ad01b28c', class: {
177
+ return (h(Host, { key: '1444429a86950c449953cbf578436cc8cabf40ec', class: {
178
178
  [mode]: true,
179
179
  'infinite-scroll-loading': this.isLoading,
180
180
  'infinite-scroll-enabled': !disabled,
@@ -70,16 +70,16 @@ const InputPasswordToggle = /*@__PURE__*/ proxyCustomElement(class InputPassword
70
70
  const showPasswordIcon = (_a = this.showIcon) !== null && _a !== void 0 ? _a : eye;
71
71
  const hidePasswordIcon = (_b = this.hideIcon) !== null && _b !== void 0 ? _b : eyeOff;
72
72
  const isPasswordVisible = type === 'text';
73
- return (h(Host, { key: 'd9811e25bfeb2aa197352bb9be852e9e420739d5', class: createColorClasses(color, {
73
+ return (h(Host, { key: 'ed1c29726ce0c91548f0e2ada61e3f8b5c813d2d', class: createColorClasses(color, {
74
74
  [mode]: true,
75
- }) }, h("ion-button", { key: '1eaea1442b248fb2b8d61538b27274e647a07804', mode: mode, color: color, fill: "clear", shape: "round", "aria-checked": isPasswordVisible ? 'true' : 'false', "aria-label": "show password", role: "switch", type: "button", onPointerDown: (ev) => {
75
+ }) }, h("ion-button", { key: '9698eccdaedb86cf12d20acc53660371b3af3c55', mode: mode, color: color, fill: "clear", shape: "round", "aria-checked": isPasswordVisible ? 'true' : 'false', "aria-label": "show password", role: "switch", type: "button", onPointerDown: (ev) => {
76
76
  /**
77
77
  * This prevents mobile browsers from
78
78
  * blurring the input when the password toggle
79
79
  * button is activated.
80
80
  */
81
81
  ev.preventDefault();
82
- }, onClick: this.togglePasswordVisibility }, h("ion-icon", { key: '9c88de8f4631d9bde222ce2edf6950d639e04773', slot: "icon-only", "aria-hidden": "true", icon: isPasswordVisible ? hidePasswordIcon : showPasswordIcon }))));
82
+ }, onClick: this.togglePasswordVisibility }, h("ion-icon", { key: '1f2119c30b56c800d9af44e6499445a0ebb466cf', slot: "icon-only", "aria-hidden": "true", icon: isPasswordVisible ? hidePasswordIcon : showPasswordIcon }))));
83
83
  }
84
84
  get el() { return this; }
85
85
  static get watchers() { return {
@@ -87,6 +87,7 @@ const Input = /*@__PURE__*/ proxyCustomElement(class Input extends HTMLElement {
87
87
  this.autocorrect = 'off';
88
88
  this.autofocus = false;
89
89
  this.clearInput = false;
90
+ this.clearInputIcon = undefined;
90
91
  this.clearOnEdit = undefined;
91
92
  this.counter = false;
92
93
  this.counterFormatter = undefined;
@@ -377,11 +378,13 @@ const Input = /*@__PURE__*/ proxyCustomElement(class Input extends HTMLElement {
377
378
  return this.renderLabel();
378
379
  }
379
380
  render() {
380
- const { disabled, fill, readonly, shape, inputId, labelPlacement, el, hasFocus } = this;
381
+ const { disabled, fill, readonly, shape, inputId, labelPlacement, el, hasFocus, clearInputIcon } = this;
381
382
  const mode = getIonMode(this);
382
383
  const value = this.getValue();
383
384
  const inItem = hostContext('ion-item', this.el);
384
385
  const shouldRenderHighlight = mode === 'md' && fill !== 'outline' && !inItem;
386
+ const defaultClearIcon = mode === 'ios' ? closeCircle : closeSharp;
387
+ const clearIconData = clearInputIcon !== null && clearInputIcon !== void 0 ? clearInputIcon : defaultClearIcon;
385
388
  const hasValue = this.hasValue();
386
389
  const hasStartEndSlots = el.querySelector('[slot="start"], [slot="end"]') !== null;
387
390
  /**
@@ -402,7 +405,7 @@ const Input = /*@__PURE__*/ proxyCustomElement(class Input extends HTMLElement {
402
405
  * TODO(FW-5592): Remove hasStartEndSlots condition
403
406
  */
404
407
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
405
- return (h(Host, { key: '083568e68a2970485e93a84ad3b837c117e03fed', class: createColorClasses(this.color, {
408
+ return (h(Host, { key: '907ce98a82b5cfae5a08504cd79e00a2330b7444', class: createColorClasses(this.color, {
406
409
  [mode]: true,
407
410
  'has-value': hasValue,
408
411
  'has-focus': hasFocus,
@@ -413,7 +416,7 @@ const Input = /*@__PURE__*/ proxyCustomElement(class Input extends HTMLElement {
413
416
  'in-item': inItem,
414
417
  'in-item-color': hostContext('ion-item.ion-color', this.el),
415
418
  'input-disabled': disabled,
416
- }) }, h("label", { key: '5e6767a20b8ac61d5df69106f4ce11ecc46ae5bf', class: "input-wrapper", htmlFor: inputId }, this.renderLabelContainer(), h("div", { key: '4af8df127e8194b4eeb8b16936a36489aee17009', class: "native-wrapper" }, h("slot", { key: '90e925fa36a5c057a4ca5e03d5fcaf8e12e711ad', name: "start" }), h("input", Object.assign({ key: '0a5455e8c31beca48e08b97faa5e3e069822248f', class: "native-input", ref: (input) => (this.nativeInput = input), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, min: this.min, max: this.max, minLength: this.minlength, maxLength: this.maxlength, multiple: this.multiple, name: this.name, pattern: this.pattern, placeholder: this.placeholder || '', readOnly: readonly, required: this.required, spellcheck: this.spellcheck, step: this.step, type: this.type, value: value, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeydown, onCompositionstart: this.onCompositionStart, onCompositionend: this.onCompositionEnd }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (h("button", { key: 'b9eab01b390581d20c861ae6a4c49bde0841f14c', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
419
+ }) }, h("label", { key: '59d5bb45d2a5b828bba0ed8687a632a551e2f4d8', class: "input-wrapper", htmlFor: inputId }, this.renderLabelContainer(), h("div", { key: 'f93f129d08246d0e9a601c100d718534d6403853', class: "native-wrapper" }, h("slot", { key: '54eeb1a6bace662b7eb0d7e27180ea3d7e3a3729', name: "start" }), h("input", Object.assign({ key: 'b3e0be55bc1a4a539ae3b0fdcf7fc078723cca16', class: "native-input", ref: (input) => (this.nativeInput = input), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoComplete: this.autocomplete, autoCorrect: this.autocorrect, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, min: this.min, max: this.max, minLength: this.minlength, maxLength: this.maxlength, multiple: this.multiple, name: this.name, pattern: this.pattern, placeholder: this.placeholder || '', readOnly: readonly, required: this.required, spellcheck: this.spellcheck, step: this.step, type: this.type, value: value, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeydown, onCompositionstart: this.onCompositionStart, onCompositionend: this.onCompositionEnd }, this.inheritedAttributes)), this.clearInput && !readonly && !disabled && (h("button", { key: '5f6373504a6d0d074bfbf875c794d45ea2748175', "aria-label": "reset", type: "button", class: "input-clear-icon", onPointerDown: (ev) => {
417
420
  /**
418
421
  * This prevents mobile browsers from
419
422
  * blurring the input when the clear
@@ -428,7 +431,7 @@ const Input = /*@__PURE__*/ proxyCustomElement(class Input extends HTMLElement {
428
431
  * for screen readers as it means users would be unable to swipe past the clear button.
429
432
  */
430
433
  ev.stopPropagation();
431
- }, onClick: this.clearTextInput }, h("ion-icon", { key: '8284ba60924a42fd6d352d23441524f8a027e0ce', "aria-hidden": "true", icon: mode === 'ios' ? closeCircle : closeSharp }))), h("slot", { key: '8f3c04ecc32cb04a06ebb916b79071414b2a5263', name: "end" })), shouldRenderHighlight && h("div", { key: '7e97782b292fd140b3fe7f13de05dfafb4b0fa28', class: "input-highlight" })), this.renderBottomContent()));
434
+ }, onClick: this.clearTextInput }, h("ion-icon", { key: '230d77973aa83458ceb32bf52e3abe9bc322cfe6', "aria-hidden": "true", icon: clearIconData }))), h("slot", { key: '9d69ac6e8a3c4b2b303dba2478f82695d5755ed2', name: "end" })), shouldRenderHighlight && h("div", { key: 'ac61f16237ce731e0745ab72d0fc3f066252464a', class: "input-highlight" })), this.renderBottomContent()));
432
435
  }
433
436
  get el() { return this; }
434
437
  static get watchers() { return {
@@ -447,6 +450,7 @@ const Input = /*@__PURE__*/ proxyCustomElement(class Input extends HTMLElement {
447
450
  "autocorrect": [1],
448
451
  "autofocus": [4],
449
452
  "clearInput": [4, "clear-input"],
453
+ "clearInputIcon": [1, "clear-input-icon"],
450
454
  "clearOnEdit": [4, "clear-on-edit"],
451
455
  "counter": [4],
452
456
  "counterFormatter": [16],