voyager-ionic-core 8.0.1 → 8.2.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 (601) hide show
  1. package/README.md +1 -1
  2. package/components/checkbox.js +5 -5
  3. package/components/index2.js +119 -1
  4. package/components/ion-accordion-group.js +2 -2
  5. package/components/ion-content.js +6 -4
  6. package/components/ion-datetime-button.js +2 -2
  7. package/components/ion-datetime.js +17 -14
  8. package/components/ion-fab-button.js +2 -2
  9. package/components/ion-fab-list.js +2 -2
  10. package/components/ion-fab.js +2 -2
  11. package/components/ion-footer.js +2 -2
  12. package/components/ion-grid.js +2 -2
  13. package/components/ion-header.js +2 -2
  14. package/components/ion-img.js +1 -1
  15. package/components/ion-infinite-scroll-content.js +2 -2
  16. package/components/ion-infinite-scroll.js +1 -1
  17. package/components/ion-input-password-toggle.js +3 -3
  18. package/components/ion-input.js +8 -4
  19. package/components/ion-item-divider.js +2 -2
  20. package/components/ion-item-group.js +1 -1
  21. package/components/ion-item-option.js +2 -2
  22. package/components/ion-item-options.js +1 -1
  23. package/components/ion-item-sliding.js +1 -1
  24. package/components/ion-loading.js +2 -2
  25. package/components/ion-menu-button.js +2 -2
  26. package/components/ion-menu-toggle.js +2 -2
  27. package/components/ion-menu.js +2 -2
  28. package/components/ion-modal.js +10 -8
  29. package/components/ion-nav-link.js +1 -1
  30. package/components/ion-nav.js +1 -1
  31. package/components/ion-note.js +2 -2
  32. package/components/ion-picker-legacy.js +2 -2
  33. package/components/ion-progress-bar.js +1 -1
  34. package/components/ion-range.js +3 -3
  35. package/components/ion-refresher-content.js +1 -1
  36. package/components/ion-refresher.js +1 -1
  37. package/components/ion-reorder-group.js +1 -1
  38. package/components/ion-reorder.js +1 -1
  39. package/components/ion-router-link.js +2 -2
  40. package/components/ion-router-outlet.js +1 -1
  41. package/components/ion-row.js +1 -1
  42. package/components/ion-searchbar.js +5 -5
  43. package/components/ion-segment-button.js +3 -3
  44. package/components/ion-segment.js +10 -9
  45. package/components/ion-select-option.js +1 -1
  46. package/components/ion-select.js +20 -7
  47. package/components/ion-skeleton-text.js +2 -2
  48. package/components/ion-split-pane.js +2 -2
  49. package/components/ion-tab-bar.js +2 -2
  50. package/components/ion-tab-button.js +2 -2
  51. package/components/ion-tab.js +2 -2
  52. package/components/ion-tabs.js +1 -1
  53. package/components/ion-text.js +2 -2
  54. package/components/ion-textarea.js +2 -2
  55. package/components/ion-thumbnail.js +1 -1
  56. package/components/ion-title.js +2 -2
  57. package/components/ion-toast.js +2 -2
  58. package/components/ion-toggle.js +5 -5
  59. package/components/ion-toolbar.js +2 -2
  60. package/components/ionic-global.js +8 -1
  61. package/components/ios.transition.js +94 -67
  62. package/components/label.js +3 -3
  63. package/components/list-header.js +2 -2
  64. package/components/list.js +1 -1
  65. package/components/overlays.js +3 -2
  66. package/components/picker-column-option.js +2 -2
  67. package/components/picker-column.js +177 -6
  68. package/components/picker-column2.js +2 -2
  69. package/components/picker.js +2 -2
  70. package/components/popover.js +6 -4
  71. package/components/radio-group.js +1 -1
  72. package/components/radio.js +16 -5
  73. package/components/ripple-effect.js +1 -1
  74. package/components/select-popover.js +2 -2
  75. package/components/spinner.js +1 -1
  76. package/css/core.css +1 -1
  77. package/css/core.css.map +1 -1
  78. package/css/global.bundle.css.map +1 -1
  79. package/css/ionic.bundle.css +1 -1
  80. package/css/ionic.bundle.css.map +1 -1
  81. package/css/palettes/dark.always.css +1 -1
  82. package/css/palettes/dark.always.css.map +1 -1
  83. package/css/palettes/dark.class.css +1 -1
  84. package/css/palettes/dark.class.css.map +1 -1
  85. package/css/palettes/dark.system.css +1 -1
  86. package/css/palettes/dark.system.css.map +1 -1
  87. package/css/palettes/high-contrast-dark.always.css.map +1 -1
  88. package/css/palettes/high-contrast-dark.class.css.map +1 -1
  89. package/css/palettes/high-contrast-dark.system.css.map +1 -1
  90. package/css/palettes/high-contrast.always.css.map +1 -1
  91. package/css/palettes/high-contrast.class.css.map +1 -1
  92. package/css/palettes/high-contrast.system.css.map +1 -1
  93. package/css/typography.css.map +1 -1
  94. package/dist/cjs/{app-globals-542c4d91.js → app-globals-1c261a7f.js} +1 -1
  95. package/dist/cjs/{button-active-47528f4c.js → button-active-8da8d63e.js} +1 -1
  96. package/dist/cjs/{hardware-back-button-06ae4d9c.js → hardware-back-button-93f7a8f0.js} +2 -2
  97. package/dist/cjs/{index-57b504ac.js → index-93b3a556.js} +2 -2
  98. package/dist/cjs/index-ceeb4ff8.js +2259 -0
  99. package/dist/cjs/{index-c76a1d14.js → index-fa3cf6ba.js} +124 -6
  100. package/dist/cjs/index.cjs.js +9 -9
  101. package/dist/cjs/ion-accordion_2.cjs.entry.js +4 -4
  102. package/dist/cjs/ion-action-sheet.cjs.entry.js +5 -5
  103. package/dist/cjs/ion-alert.cjs.entry.js +5 -5
  104. package/dist/cjs/ion-app_8.cjs.entry.js +20 -19
  105. package/dist/cjs/ion-avatar_3.cjs.entry.js +3 -3
  106. package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
  107. package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
  108. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
  109. package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
  110. package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
  111. package/dist/cjs/ion-checkbox.cjs.entry.js +7 -7
  112. package/dist/cjs/ion-chip.cjs.entry.js +2 -2
  113. package/dist/cjs/ion-col_3.cjs.entry.js +5 -5
  114. package/dist/cjs/ion-datetime-button.cjs.entry.js +4 -4
  115. package/dist/cjs/ion-datetime_3.cjs.entry.js +25 -22
  116. package/dist/cjs/ion-fab_3.cjs.entry.js +8 -8
  117. package/dist/cjs/ion-img.cjs.entry.js +3 -3
  118. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +5 -5
  119. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +5 -5
  120. package/dist/cjs/ion-input.cjs.entry.js +9 -6
  121. package/dist/cjs/ion-item-option_3.cjs.entry.js +6 -6
  122. package/dist/cjs/ion-item_8.cjs.entry.js +15 -15
  123. package/dist/cjs/ion-loading.cjs.entry.js +6 -6
  124. package/dist/cjs/ion-menu_3.cjs.entry.js +11 -11
  125. package/dist/cjs/ion-modal.cjs.entry.js +13 -12
  126. package/dist/cjs/ion-nav_2.cjs.entry.js +6 -5
  127. package/dist/cjs/ion-picker-column-option.cjs.entry.js +4 -4
  128. package/dist/cjs/ion-picker-column.cjs.entry.js +177 -8
  129. package/dist/cjs/ion-picker.cjs.entry.js +3 -3
  130. package/dist/cjs/ion-popover.cjs.entry.js +9 -8
  131. package/dist/cjs/ion-progress-bar.cjs.entry.js +3 -3
  132. package/dist/cjs/ion-radio_2.cjs.entry.js +19 -8
  133. package/dist/cjs/ion-range.cjs.entry.js +5 -5
  134. package/dist/cjs/ion-refresher_2.cjs.entry.js +4 -4
  135. package/dist/cjs/ion-reorder_2.cjs.entry.js +4 -4
  136. package/dist/cjs/ion-ripple-effect.cjs.entry.js +3 -3
  137. package/dist/cjs/ion-route_4.cjs.entry.js +4 -4
  138. package/dist/cjs/ion-searchbar.cjs.entry.js +7 -7
  139. package/dist/cjs/ion-segment_2.cjs.entry.js +15 -14
  140. package/dist/cjs/ion-select_3.cjs.entry.js +27 -14
  141. package/dist/cjs/ion-spinner.cjs.entry.js +3 -3
  142. package/dist/cjs/ion-split-pane.cjs.entry.js +4 -4
  143. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +6 -6
  144. package/dist/cjs/ion-tab_2.cjs.entry.js +4 -4
  145. package/dist/cjs/ion-text.cjs.entry.js +4 -4
  146. package/dist/cjs/ion-textarea.cjs.entry.js +4 -4
  147. package/dist/cjs/ion-toast.cjs.entry.js +6 -6
  148. package/dist/cjs/ion-toggle.cjs.entry.js +7 -7
  149. package/dist/cjs/{ionic-global-f3622afe.js → ionic-global-f401ca2e.js} +9 -2
  150. package/dist/cjs/ionic.cjs.js +5 -5
  151. package/dist/cjs/{ios.transition-288dfa83.js → ios.transition-ae54d131.js} +98 -69
  152. package/dist/cjs/loader.cjs.js +4 -4
  153. package/dist/cjs/{md.transition-6e5f6a8d.js → md.transition-dbc2d3f3.js} +4 -2
  154. package/dist/cjs/{overlays-32cfd236.js → overlays-d4afb0bd.js} +5 -3
  155. package/dist/cjs/{status-tap-c47ff5f5.js → status-tap-0a82a165.js} +1 -1
  156. package/dist/collection/collection-manifest.json +1 -1
  157. package/dist/collection/components/accordion/test/a11y/accordion.e2e.js +4 -3
  158. package/dist/collection/components/accordion-group/accordion-group.js +3 -3
  159. package/dist/collection/components/alert/test/a11y/alert.e2e.js +3 -1
  160. package/dist/collection/components/breadcrumbs/test/reactive/breadcrumbs.e2e.js +1 -1
  161. package/dist/collection/components/checkbox/checkbox.ios.css +1 -0
  162. package/dist/collection/components/checkbox/checkbox.js +4 -4
  163. package/dist/collection/components/checkbox/checkbox.md.css +1 -0
  164. package/dist/collection/components/content/content.js +23 -4
  165. package/dist/collection/components/content/test/content.spec.js +27 -0
  166. package/dist/collection/components/datetime/datetime.js +18 -15
  167. package/dist/collection/components/datetime/test/overlay-roles/datetime.e2e.js +34 -0
  168. package/dist/collection/components/datetime/test/position/datetime.e2e.js +1 -1
  169. package/dist/collection/components/datetime-button/datetime-button.js +2 -2
  170. package/dist/collection/components/fab/fab.js +2 -2
  171. package/dist/collection/components/fab-button/fab-button.js +2 -2
  172. package/dist/collection/components/fab-list/fab-list.js +2 -2
  173. package/dist/collection/components/footer/footer.js +2 -2
  174. package/dist/collection/components/grid/grid.js +2 -2
  175. package/dist/collection/components/header/header.js +2 -2
  176. package/dist/collection/components/img/img.js +1 -1
  177. package/dist/collection/components/infinite-scroll/infinite-scroll.js +1 -1
  178. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +2 -2
  179. package/dist/collection/components/input/input.js +25 -5
  180. package/dist/collection/components/input/test/input.spec.js +13 -0
  181. package/dist/collection/components/input-password-toggle/input-password-toggle.js +3 -3
  182. package/dist/collection/components/item/test/a11y/item.e2e.js +24 -4
  183. package/dist/collection/components/item/test/inputs/item.e2e.js +46 -0
  184. package/dist/collection/components/item/test/slotted-inputs/item.e2e.js +135 -0
  185. package/dist/collection/components/item-divider/item-divider.js +2 -2
  186. package/dist/collection/components/item-group/item-group.js +1 -1
  187. package/dist/collection/components/item-option/item-option.js +2 -2
  188. package/dist/collection/components/item-options/item-options.js +1 -1
  189. package/dist/collection/components/item-sliding/item-sliding.js +1 -1
  190. package/dist/collection/components/label/label.ios.css +1 -1
  191. package/dist/collection/components/label/label.js +2 -2
  192. package/dist/collection/components/list/list.js +1 -1
  193. package/dist/collection/components/list-header/list-header.js +2 -2
  194. package/dist/collection/components/loading/loading.js +2 -2
  195. package/dist/collection/components/loading/test/basic/loading.e2e.js +1 -1
  196. package/dist/collection/components/menu/menu.js +2 -2
  197. package/dist/collection/components/menu/test/basic/menu.e2e.js +1 -1
  198. package/dist/collection/components/menu-button/menu-button.js +2 -2
  199. package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
  200. package/dist/collection/components/modal/gestures/sheet.js +3 -2
  201. package/dist/collection/components/modal/modal.js +25 -6
  202. package/dist/collection/components/modal/test/basic/modal.spec.js +19 -0
  203. package/dist/collection/components/modal/test/trigger/modal.e2e.js +1 -1
  204. package/dist/collection/components/nav/nav.js +1 -1
  205. package/dist/collection/components/nav/test/basic/nav.e2e.js +5 -5
  206. package/dist/collection/components/nav/test/nested/nav.e2e.js +6 -6
  207. package/dist/collection/components/nav/test/routing/nav.e2e.js +7 -7
  208. package/dist/collection/components/nav-link/nav-link.js +1 -1
  209. package/dist/collection/components/note/note.js +2 -2
  210. package/dist/collection/components/picker/picker.js +2 -2
  211. package/dist/collection/components/picker-column/picker-column.css +19 -0
  212. package/dist/collection/components/picker-column/picker-column.js +180 -6
  213. package/dist/collection/components/picker-column/test/picker-column.spec.js +83 -0
  214. package/dist/collection/components/picker-column-option/picker-column-option.js +2 -2
  215. package/dist/collection/components/picker-legacy/picker.js +2 -2
  216. package/dist/collection/components/picker-legacy-column/picker-column.js +2 -2
  217. package/dist/collection/components/popover/popover.js +23 -4
  218. package/dist/collection/components/popover/test/basic/popover.spec.js +19 -0
  219. package/dist/collection/components/popover/test/trigger/popover.e2e.js +1 -1
  220. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  221. package/dist/collection/components/radio/radio.ios.css +1 -0
  222. package/dist/collection/components/radio/radio.js +14 -3
  223. package/dist/collection/components/radio/radio.md.css +1 -0
  224. package/dist/collection/components/radio-group/radio-group.js +2 -2
  225. package/dist/collection/components/range/range.js +4 -4
  226. package/dist/collection/components/refresher/refresher.js +1 -1
  227. package/dist/collection/components/refresher-content/refresher-content.js +1 -1
  228. package/dist/collection/components/reorder/reorder.js +1 -1
  229. package/dist/collection/components/reorder-group/reorder-group.js +1 -1
  230. package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
  231. package/dist/collection/components/router-link/router-link.js +2 -2
  232. package/dist/collection/components/router-outlet/router-outlet.js +1 -1
  233. package/dist/collection/components/row/row.js +1 -1
  234. package/dist/collection/components/searchbar/searchbar.js +6 -6
  235. package/dist/collection/components/segment/segment.js +11 -10
  236. package/dist/collection/components/segment-button/segment-button.js +3 -3
  237. package/dist/collection/components/select/select.ios.css +1 -0
  238. package/dist/collection/components/select/select.js +19 -6
  239. package/dist/collection/components/select/select.md.css +1 -0
  240. package/dist/collection/components/select/test/basic/select.e2e.js +1 -1
  241. package/dist/collection/components/select/test/disabled/select.e2e.js +1 -1
  242. package/dist/collection/components/select/test/fill/select.e2e.js +25 -0
  243. package/dist/collection/components/select-option/select-option.js +1 -1
  244. package/dist/collection/components/select-popover/select-popover.js +1 -1
  245. package/dist/collection/components/select-popover/select-popover.md.css +8 -1
  246. package/dist/collection/components/select-popover/test/basic/select-popover.e2e.js +2 -2
  247. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
  248. package/dist/collection/components/spinner/spinner.js +1 -1
  249. package/dist/collection/components/split-pane/split-pane.js +2 -2
  250. package/dist/collection/components/tab/tab.js +2 -2
  251. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  252. package/dist/collection/components/tab-button/tab-button.js +2 -2
  253. package/dist/collection/components/tabs/tabs.js +1 -1
  254. package/dist/collection/components/text/text.js +2 -2
  255. package/dist/collection/components/textarea/textarea.js +3 -3
  256. package/dist/collection/components/thumbnail/thumbnail.js +1 -1
  257. package/dist/collection/components/title/title.js +2 -2
  258. package/dist/collection/components/toast/test/basic/toast.e2e.js +1 -0
  259. package/dist/collection/components/toast/toast.js +2 -2
  260. package/dist/collection/components/toggle/toggle.ios.css +1 -0
  261. package/dist/collection/components/toggle/toggle.js +4 -4
  262. package/dist/collection/components/toggle/toggle.md.css +1 -0
  263. package/dist/collection/components/toolbar/toolbar.js +2 -2
  264. package/dist/collection/global/config.js +8 -1
  265. package/dist/collection/global/test/config-controller.spec.js +9 -1
  266. package/dist/collection/utils/focus-controller/index.js +112 -0
  267. package/dist/collection/utils/focus-controller/test/generic/focus-controller.e2e.js +52 -0
  268. package/dist/collection/utils/focus-controller/test/ionic/focus-controller.e2e.js +52 -0
  269. package/dist/collection/utils/overlays.js +2 -1
  270. package/dist/collection/utils/transition/index.js +11 -1
  271. package/dist/collection/utils/transition/ios.transition.js +94 -67
  272. package/dist/docs.d.ts +34 -0
  273. package/dist/docs.json +3616 -497
  274. package/dist/esm/{app-globals-3cbaf9d9.js → app-globals-7c667c11.js} +1 -1
  275. package/dist/esm/{button-active-9e3c1f3b.js → button-active-7c57df95.js} +1 -1
  276. package/dist/esm/{hardware-back-button-804f43bb.js → hardware-back-button-63852d15.js} +2 -2
  277. package/dist/esm/{index-8dbae644.js → index-1e2f8425.js} +2 -2
  278. package/dist/esm/index-8d8c14b0.js +2221 -0
  279. package/dist/esm/{index-f7fbe1fb.js → index-91ed2172.js} +122 -4
  280. package/dist/esm/index.js +9 -9
  281. package/dist/esm/ion-accordion_2.entry.js +4 -4
  282. package/dist/esm/ion-action-sheet.entry.js +5 -5
  283. package/dist/esm/ion-alert.entry.js +5 -5
  284. package/dist/esm/ion-app_8.entry.js +20 -19
  285. package/dist/esm/ion-avatar_3.entry.js +3 -3
  286. package/dist/esm/ion-back-button.entry.js +2 -2
  287. package/dist/esm/ion-backdrop.entry.js +2 -2
  288. package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
  289. package/dist/esm/ion-button_2.entry.js +2 -2
  290. package/dist/esm/ion-card_5.entry.js +2 -2
  291. package/dist/esm/ion-checkbox.entry.js +7 -7
  292. package/dist/esm/ion-chip.entry.js +2 -2
  293. package/dist/esm/ion-col_3.entry.js +5 -5
  294. package/dist/esm/ion-datetime-button.entry.js +4 -4
  295. package/dist/esm/ion-datetime_3.entry.js +25 -22
  296. package/dist/esm/ion-fab_3.entry.js +8 -8
  297. package/dist/esm/ion-img.entry.js +3 -3
  298. package/dist/esm/ion-infinite-scroll_2.entry.js +5 -5
  299. package/dist/esm/ion-input-password-toggle.entry.js +5 -5
  300. package/dist/esm/ion-input.entry.js +9 -6
  301. package/dist/esm/ion-item-option_3.entry.js +6 -6
  302. package/dist/esm/ion-item_8.entry.js +15 -15
  303. package/dist/esm/ion-loading.entry.js +6 -6
  304. package/dist/esm/ion-menu_3.entry.js +11 -11
  305. package/dist/esm/ion-modal.entry.js +13 -12
  306. package/dist/esm/ion-nav_2.entry.js +6 -5
  307. package/dist/esm/ion-picker-column-option.entry.js +4 -4
  308. package/dist/esm/ion-picker-column.entry.js +177 -8
  309. package/dist/esm/ion-picker.entry.js +3 -3
  310. package/dist/esm/ion-popover.entry.js +9 -8
  311. package/dist/esm/ion-progress-bar.entry.js +3 -3
  312. package/dist/esm/ion-radio_2.entry.js +19 -8
  313. package/dist/esm/ion-range.entry.js +5 -5
  314. package/dist/esm/ion-refresher_2.entry.js +4 -4
  315. package/dist/esm/ion-reorder_2.entry.js +4 -4
  316. package/dist/esm/ion-ripple-effect.entry.js +3 -3
  317. package/dist/esm/ion-route_4.entry.js +4 -4
  318. package/dist/esm/ion-searchbar.entry.js +7 -7
  319. package/dist/esm/ion-segment_2.entry.js +15 -14
  320. package/dist/esm/ion-select_3.entry.js +27 -14
  321. package/dist/esm/ion-spinner.entry.js +3 -3
  322. package/dist/esm/ion-split-pane.entry.js +4 -4
  323. package/dist/esm/ion-tab-bar_2.entry.js +6 -6
  324. package/dist/esm/ion-tab_2.entry.js +4 -4
  325. package/dist/esm/ion-text.entry.js +4 -4
  326. package/dist/esm/ion-textarea.entry.js +4 -4
  327. package/dist/esm/ion-toast.entry.js +6 -6
  328. package/dist/esm/ion-toggle.entry.js +7 -7
  329. package/dist/esm/{ionic-global-d2d8f882.js → ionic-global-8180d812.js} +9 -2
  330. package/dist/esm/ionic.js +6 -6
  331. package/dist/esm/{ios.transition-a0041e41.js → ios.transition-140cedc8.js} +98 -69
  332. package/dist/esm/loader.js +5 -5
  333. package/dist/esm/{md.transition-0c0602d9.js → md.transition-4961bea4.js} +4 -2
  334. package/dist/esm/{overlays-696d25f5.js → overlays-e8e5bd06.js} +5 -4
  335. package/dist/esm/{status-tap-37a74d1c.js → status-tap-0502d0fd.js} +1 -1
  336. package/dist/esm-es5/app-globals-7c667c11.js +4 -0
  337. package/dist/esm-es5/{button-active-9e3c1f3b.js → button-active-7c57df95.js} +1 -1
  338. package/dist/esm-es5/{hardware-back-button-804f43bb.js → hardware-back-button-63852d15.js} +1 -1
  339. package/dist/esm-es5/{index-8dbae644.js → index-1e2f8425.js} +1 -1
  340. package/dist/esm-es5/index-8d8c14b0.js +5 -0
  341. package/dist/esm-es5/index-91ed2172.js +4 -0
  342. package/dist/esm-es5/index.js +1 -1
  343. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  344. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  345. package/dist/esm-es5/ion-alert.entry.js +1 -1
  346. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  347. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  348. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  349. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  350. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  351. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  352. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  353. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  354. package/dist/esm-es5/ion-chip.entry.js +1 -1
  355. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  356. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  357. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  358. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  359. package/dist/esm-es5/ion-img.entry.js +1 -1
  360. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  361. package/dist/esm-es5/ion-input-password-toggle.entry.js +1 -1
  362. package/dist/esm-es5/ion-input.entry.js +1 -1
  363. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  364. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  365. package/dist/esm-es5/ion-loading.entry.js +1 -1
  366. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  367. package/dist/esm-es5/ion-modal.entry.js +1 -1
  368. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  369. package/dist/esm-es5/ion-picker-column-option.entry.js +1 -1
  370. package/dist/esm-es5/ion-picker-column.entry.js +1 -1
  371. package/dist/esm-es5/ion-picker.entry.js +1 -1
  372. package/dist/esm-es5/ion-popover.entry.js +1 -1
  373. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  374. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  375. package/dist/esm-es5/ion-range.entry.js +1 -1
  376. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  377. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  378. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  379. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  380. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  381. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  382. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  383. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  384. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  385. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  386. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  387. package/dist/esm-es5/ion-text.entry.js +1 -1
  388. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  389. package/dist/esm-es5/ion-toast.entry.js +1 -1
  390. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  391. package/dist/esm-es5/ionic-global-8180d812.js +4 -0
  392. package/dist/esm-es5/ionic.js +1 -1
  393. package/dist/esm-es5/ios.transition-140cedc8.js +4 -0
  394. package/dist/esm-es5/loader.js +1 -1
  395. package/dist/esm-es5/md.transition-4961bea4.js +4 -0
  396. package/dist/esm-es5/{overlays-696d25f5.js → overlays-e8e5bd06.js} +1 -1
  397. package/dist/esm-es5/{status-tap-37a74d1c.js → status-tap-0502d0fd.js} +1 -1
  398. package/dist/html.html-data.json +115 -91
  399. package/dist/ionic/index.esm.js +1 -1
  400. package/dist/ionic/ionic.esm.js +1 -1
  401. package/dist/ionic/ionic.js +1 -1
  402. package/dist/ionic/{p-e9ef13be.system.entry.js → p-00343522.system.entry.js} +1 -1
  403. package/dist/ionic/{p-bdd3053f.entry.js → p-00f85ca4.entry.js} +1 -1
  404. package/dist/ionic/p-0213e506.entry.js +4 -0
  405. package/dist/ionic/p-036382b2.system.entry.js +4 -0
  406. package/dist/ionic/{p-c7e0b81a.entry.js → p-0617a85d.entry.js} +1 -1
  407. package/dist/ionic/{p-5d3a8503.system.entry.js → p-06330374.system.entry.js} +2 -2
  408. package/dist/ionic/p-0973cae7.entry.js +4 -0
  409. package/dist/ionic/{p-e3005be4.system.entry.js → p-09bd8558.system.entry.js} +1 -1
  410. package/dist/ionic/{p-6e9bd6ba.system.entry.js → p-0a9c8c36.system.entry.js} +1 -1
  411. package/dist/ionic/p-0f89c47c.js +4 -0
  412. package/dist/ionic/{p-2f308f7f.system.entry.js → p-111b0e11.system.entry.js} +2 -2
  413. package/dist/ionic/{p-93e43f42.system.entry.js → p-11feccde.system.entry.js} +1 -1
  414. package/dist/ionic/p-13a736a9.entry.js +4 -0
  415. package/dist/ionic/{p-bbbe3138.system.entry.js → p-18657fab.system.entry.js} +1 -1
  416. package/dist/ionic/p-1ca3679b.entry.js +4 -0
  417. package/dist/ionic/{p-cdee3a44.system.entry.js → p-1dd59f8d.system.entry.js} +1 -1
  418. package/dist/ionic/p-1e5cabf8.entry.js +4 -0
  419. package/dist/ionic/{p-b799a007.entry.js → p-24b0ece0.entry.js} +1 -1
  420. package/dist/ionic/{p-4e5288de.system.js → p-27317f8f.system.js} +1 -1
  421. package/dist/ionic/p-30bbe61c.system.js +4 -0
  422. package/dist/ionic/{p-4e548bd7.system.entry.js → p-34827988.system.entry.js} +1 -1
  423. package/dist/ionic/p-370835b4.system.js +4 -0
  424. package/dist/ionic/p-39303199.system.js +4 -0
  425. package/dist/ionic/{p-aa0ed22b.system.entry.js → p-3b0711a0.system.entry.js} +1 -1
  426. package/dist/ionic/{p-94180ecc.entry.js → p-3d1951f5.entry.js} +1 -1
  427. package/dist/ionic/p-3fd68f4e.system.entry.js +4 -0
  428. package/dist/ionic/{p-b571cab1.entry.js → p-443cbfcb.entry.js} +1 -1
  429. package/dist/ionic/{p-3f5b86b4.entry.js → p-4455daad.entry.js} +1 -1
  430. package/dist/ionic/{p-aa0f60b2.system.js → p-45a51395.system.js} +1 -1
  431. package/dist/ionic/{p-c671b28e.js → p-4691dc8d.js} +1 -1
  432. package/dist/ionic/{p-7f59064a.entry.js → p-4713f5f0.entry.js} +1 -1
  433. package/dist/ionic/p-479e7655.system.js +5 -0
  434. package/dist/ionic/{p-283fd4e1.system.entry.js → p-47ab6574.system.entry.js} +1 -1
  435. package/dist/ionic/{p-c4676693.entry.js → p-4816d827.entry.js} +1 -1
  436. package/dist/ionic/{p-1930d8e7.entry.js → p-4927bd6e.entry.js} +1 -1
  437. package/dist/ionic/p-4fa57f1e.system.entry.js +4 -0
  438. package/dist/ionic/{p-26d33af2.system.entry.js → p-54b04ed1.system.entry.js} +1 -1
  439. package/dist/ionic/{p-c3ca0292.system.entry.js → p-5cd86cdb.system.entry.js} +1 -1
  440. package/dist/ionic/{p-63265e00.system.entry.js → p-5e1094ae.system.entry.js} +2 -2
  441. package/dist/ionic/{p-4c153abb.entry.js → p-5f610767.entry.js} +1 -1
  442. package/dist/ionic/p-65a8336f.entry.js +4 -0
  443. package/dist/ionic/p-66de062f.system.entry.js +4 -0
  444. package/dist/ionic/{p-5a3a3373.entry.js → p-69cc64ab.entry.js} +1 -1
  445. package/dist/ionic/p-6c16d0e8.js +4 -0
  446. package/dist/ionic/p-6e76ed16.entry.js +4 -0
  447. package/dist/ionic/p-7058dfda.entry.js +4 -0
  448. package/dist/ionic/{p-1980c728.system.js → p-7171dbf4.system.js} +1 -1
  449. package/dist/ionic/p-7198726e.entry.js +4 -0
  450. package/dist/ionic/{p-5d4d89e0.system.entry.js → p-71e2f283.system.entry.js} +1 -1
  451. package/dist/ionic/{p-d6229f05.system.entry.js → p-71f25447.system.entry.js} +1 -1
  452. package/dist/ionic/{p-5fbc2eae.system.entry.js → p-750e902d.system.entry.js} +1 -1
  453. package/dist/ionic/{p-53a3b33c.system.entry.js → p-764eb419.system.entry.js} +1 -1
  454. package/dist/ionic/p-76637161.system.entry.js +4 -0
  455. package/dist/ionic/{p-8627f783.system.entry.js → p-78bf8302.system.entry.js} +2 -2
  456. package/dist/ionic/p-79f4cb29.entry.js +4 -0
  457. package/dist/ionic/p-7a416af9.entry.js +4 -0
  458. package/dist/ionic/{p-e49099b0.entry.js → p-80aae5d7.entry.js} +1 -1
  459. package/dist/ionic/{p-819e8479.system.entry.js → p-8890e47f.system.entry.js} +1 -1
  460. package/dist/ionic/{p-8caca06c.system.entry.js → p-8c7490bc.system.entry.js} +1 -1
  461. package/dist/ionic/{p-051d2d23.js → p-8d0eb68d.js} +1 -1
  462. package/dist/ionic/{p-b76bcd9e.system.entry.js → p-935221f8.system.entry.js} +1 -1
  463. package/dist/ionic/{p-70181008.entry.js → p-941ecbba.entry.js} +1 -1
  464. package/dist/ionic/{p-0af79ebd.entry.js → p-94b46442.entry.js} +1 -1
  465. package/dist/ionic/p-967da5f2.system.js +4 -0
  466. package/dist/ionic/{p-1e4d7975.system.js → p-98125393.system.js} +1 -1
  467. package/dist/ionic/{p-08c4d048.entry.js → p-9b46f7e0.entry.js} +1 -1
  468. package/dist/ionic/{p-6730a2f1.entry.js → p-a00a5621.entry.js} +1 -1
  469. package/dist/ionic/{p-a592f1b8.system.entry.js → p-a055fdcf.system.entry.js} +1 -1
  470. package/dist/ionic/{p-2c3c7cb9.system.entry.js → p-a0abe7ab.system.entry.js} +2 -2
  471. package/dist/ionic/p-a4116282.entry.js +4 -0
  472. package/dist/ionic/p-a4a45ad9.system.js +4 -0
  473. package/dist/ionic/p-a5adb027.entry.js +4 -0
  474. package/dist/ionic/{p-8c4fc85f.system.js → p-a82d4913.system.js} +1 -1
  475. package/dist/ionic/{p-23e440b6.entry.js → p-a87b1500.entry.js} +1 -1
  476. package/dist/ionic/{p-2b1e669d.system.entry.js → p-a931cd3e.system.entry.js} +1 -1
  477. package/dist/ionic/{p-748e6b2b.system.entry.js → p-ae3be67f.system.entry.js} +1 -1
  478. package/dist/ionic/{p-9384565a.entry.js → p-aeb61b82.entry.js} +1 -1
  479. package/dist/ionic/{p-33d926c3.entry.js → p-aeef6ac4.entry.js} +1 -1
  480. package/dist/ionic/p-aef1c744.system.js +4 -0
  481. package/dist/ionic/p-b0ff8469.system.entry.js +4 -0
  482. package/dist/ionic/{p-5ff497dc.system.entry.js → p-b7299e38.system.entry.js} +1 -1
  483. package/dist/ionic/{p-c23627c3.entry.js → p-b7eecfa6.entry.js} +1 -1
  484. package/dist/ionic/{p-45034312.system.entry.js → p-b84d9005.system.entry.js} +1 -1
  485. package/dist/ionic/{p-48888af6.system.entry.js → p-bad2e0c8.system.entry.js} +1 -1
  486. package/dist/ionic/p-bd7ad51d.system.entry.js +4 -0
  487. package/dist/ionic/{p-d11c336d.js → p-bdc1b4e3.js} +1 -1
  488. package/dist/ionic/{p-42f00e72.system.entry.js → p-c1d7a187.system.entry.js} +1 -1
  489. package/dist/ionic/p-c4493e98.system.entry.js +4 -0
  490. package/dist/ionic/p-c44efdb8.entry.js +4 -0
  491. package/dist/ionic/p-c5543c41.system.entry.js +4 -0
  492. package/dist/ionic/p-c5c65bbe.js +4 -0
  493. package/dist/ionic/{p-5d80b741.entry.js → p-c6143912.entry.js} +1 -1
  494. package/dist/ionic/{p-bd6d9610.entry.js → p-c623f0d9.entry.js} +1 -1
  495. package/dist/ionic/p-c6d9d978.system.entry.js +4 -0
  496. package/dist/ionic/p-c7717147.js +4 -0
  497. package/dist/ionic/p-c7a015e4.entry.js +4 -0
  498. package/dist/ionic/{p-c07e7a5d.entry.js → p-c89af27e.entry.js} +1 -1
  499. package/dist/ionic/{p-d1a8f599.entry.js → p-cd681265.entry.js} +1 -1
  500. package/dist/ionic/{p-f5c42f72.entry.js → p-cf8ad0c3.entry.js} +1 -1
  501. package/dist/ionic/p-d6dbda17.js +5 -0
  502. package/dist/ionic/{p-e885f3c4.entry.js → p-d7e957e9.entry.js} +1 -1
  503. package/dist/ionic/p-d8a1f0e2.entry.js +4 -0
  504. package/dist/ionic/p-dba2da82.system.entry.js +4 -0
  505. package/dist/ionic/{p-77ce6034.js → p-ddde112a.js} +1 -1
  506. package/dist/ionic/{p-2ab5db0d.system.entry.js → p-e08d9edc.system.entry.js} +1 -1
  507. package/dist/ionic/{p-c9ba1908.entry.js → p-eaab79f3.entry.js} +1 -1
  508. package/dist/ionic/{p-0b12d1ee.system.entry.js → p-ee8bf348.system.entry.js} +1 -1
  509. package/dist/ionic/{p-9b31ebfa.entry.js → p-eea44228.entry.js} +1 -1
  510. package/dist/ionic/{p-c62571da.entry.js → p-eef82267.entry.js} +1 -1
  511. package/dist/ionic/{p-2a3e98fb.system.entry.js → p-f149e6c3.system.entry.js} +1 -1
  512. package/dist/ionic/{p-fd392e7f.system.entry.js → p-f1c090c5.system.entry.js} +1 -1
  513. package/dist/ionic/{p-ebe0aa6d.entry.js → p-f5efe527.entry.js} +1 -1
  514. package/dist/ionic/p-f6a419d2.js +4 -0
  515. package/dist/ionic/p-f896c857.system.entry.js +4 -0
  516. package/dist/ionic/{p-576786c0.system.entry.js → p-f9046353.system.entry.js} +1 -1
  517. package/dist/ionic/p-f9b3ffd6.system.entry.js +4 -0
  518. package/dist/ionic/{p-320cfcab.entry.js → p-fa7234ee.entry.js} +1 -1
  519. package/dist/ionic/{p-470f73c4.entry.js → p-fba8ea9e.entry.js} +1 -1
  520. package/dist/ionic/p-fc6f99be.js +4 -0
  521. package/dist/ionic/{p-b0093947.system.js → p-fcbd65bc.system.js} +1 -1
  522. package/dist/types/components/accordion-group/accordion-group.d.ts +3 -4
  523. package/dist/types/components/checkbox/checkbox.d.ts +3 -4
  524. package/dist/types/components/content/content.d.ts +8 -0
  525. package/dist/types/components/datetime/datetime.d.ts +2 -0
  526. package/dist/types/components/input/input.d.ts +6 -0
  527. package/dist/types/components/modal/modal-interface.d.ts +1 -0
  528. package/dist/types/components/modal/modal.d.ts +18 -0
  529. package/dist/types/components/picker-column/picker-column.d.ts +37 -0
  530. package/dist/types/components/popover/popover-interface.d.ts +1 -0
  531. package/dist/types/components/popover/popover.d.ts +18 -0
  532. package/dist/types/components/radio/radio.d.ts +1 -0
  533. package/dist/types/components/radio-group/radio-group.d.ts +2 -0
  534. package/dist/types/components/range/range.d.ts +1 -1
  535. package/dist/types/components/searchbar/searchbar.d.ts +2 -0
  536. package/dist/types/components/segment/segment.d.ts +4 -2
  537. package/dist/types/components/select/select.d.ts +4 -1
  538. package/dist/types/components/textarea/textarea.d.ts +2 -0
  539. package/dist/types/components/toggle/toggle.d.ts +3 -2
  540. package/dist/types/components.d.ts +44 -12
  541. package/dist/types/stencil-public-runtime.d.ts +1 -0
  542. package/dist/types/utils/config.d.ts +9 -0
  543. package/dist/types/utils/focus-controller/index.d.ts +13 -0
  544. package/dist/types/utils/overlays.d.ts +1 -0
  545. package/hydrate/index.js +43590 -39248
  546. package/loader/cdn.js +1 -1
  547. package/loader/index.cjs.js +1 -1
  548. package/loader/index.es2017.js +1 -1
  549. package/loader/index.js +1 -1
  550. package/package.json +7 -7
  551. package/dist/cjs/index-1437d080.js +0 -11980
  552. package/dist/esm/index-5dc2b88e.js +0 -11942
  553. package/dist/esm-es5/app-globals-3cbaf9d9.js +0 -4
  554. package/dist/esm-es5/index-5dc2b88e.js +0 -18
  555. package/dist/esm-es5/index-f7fbe1fb.js +0 -4
  556. package/dist/esm-es5/ionic-global-d2d8f882.js +0 -4
  557. package/dist/esm-es5/ios.transition-a0041e41.js +0 -4
  558. package/dist/esm-es5/md.transition-0c0602d9.js +0 -4
  559. package/dist/ionic/p-057b5866.entry.js +0 -4
  560. package/dist/ionic/p-06d5221c.js +0 -4
  561. package/dist/ionic/p-06fad524.system.js +0 -4
  562. package/dist/ionic/p-0d56dea9.entry.js +0 -4
  563. package/dist/ionic/p-0d960144.system.entry.js +0 -4
  564. package/dist/ionic/p-13bfcef4.system.entry.js +0 -4
  565. package/dist/ionic/p-16016625.system.js +0 -4
  566. package/dist/ionic/p-1a5227b3.system.entry.js +0 -4
  567. package/dist/ionic/p-20304962.js +0 -4
  568. package/dist/ionic/p-2dfdda15.system.entry.js +0 -4
  569. package/dist/ionic/p-2fa34b5c.entry.js +0 -4
  570. package/dist/ionic/p-32048e4c.system.js +0 -18
  571. package/dist/ionic/p-34511b1d.js +0 -4
  572. package/dist/ionic/p-385964e6.entry.js +0 -4
  573. package/dist/ionic/p-4324e8a4.entry.js +0 -4
  574. package/dist/ionic/p-45664cb9.system.js +0 -4
  575. package/dist/ionic/p-49cdc4f2.entry.js +0 -4
  576. package/dist/ionic/p-4ad48ec9.system.entry.js +0 -4
  577. package/dist/ionic/p-4af0b730.js +0 -8
  578. package/dist/ionic/p-4fcef939.entry.js +0 -4
  579. package/dist/ionic/p-567a21a2.system.entry.js +0 -4
  580. package/dist/ionic/p-583f8865.system.entry.js +0 -4
  581. package/dist/ionic/p-58f89707.js +0 -4
  582. package/dist/ionic/p-720927ad.entry.js +0 -4
  583. package/dist/ionic/p-7536b4b3.system.js +0 -4
  584. package/dist/ionic/p-7ef5bb32.entry.js +0 -4
  585. package/dist/ionic/p-806aad8f.system.js +0 -4
  586. package/dist/ionic/p-80f85095.system.entry.js +0 -4
  587. package/dist/ionic/p-8664c316.entry.js +0 -4
  588. package/dist/ionic/p-8e031d97.entry.js +0 -4
  589. package/dist/ionic/p-8f48c966.system.entry.js +0 -4
  590. package/dist/ionic/p-94731a92.system.entry.js +0 -4
  591. package/dist/ionic/p-a801da4b.system.entry.js +0 -4
  592. package/dist/ionic/p-adb896a0.entry.js +0 -4
  593. package/dist/ionic/p-cb4f96f3.system.js +0 -4
  594. package/dist/ionic/p-cc856712.entry.js +0 -4
  595. package/dist/ionic/p-cd1b9056.js +0 -4
  596. package/dist/ionic/p-d918e7ef.system.entry.js +0 -4
  597. package/dist/ionic/p-df062892.system.entry.js +0 -4
  598. package/dist/ionic/p-ee3bbaf2.entry.js +0 -4
  599. package/dist/ionic/p-f0be340f.entry.js +0 -4
  600. package/dist/ionic/p-fc94e18f.entry.js +0 -4
  601. package/dist/ionic/p-fdf40b09.js +0 -4
@@ -56,20 +56,22 @@ const createLargeTitleTransition = (rootAnimation, rtl, backDirection, enteringE
56
56
  const leavingLargeTitleBox = leavingLargeTitle.getBoundingClientRect();
57
57
  const enteringBackButtonBox = enteringBackButton.getBoundingClientRect();
58
58
  const enteringBackButtonTextEl = shadow(enteringBackButton).querySelector('.button-text');
59
- const enteringBackButtonTextBox = enteringBackButtonTextEl.getBoundingClientRect();
59
+ // Text element not rendered if developers pass text="" to the back button
60
+ const enteringBackButtonTextBox = enteringBackButtonTextEl === null || enteringBackButtonTextEl === void 0 ? void 0 : enteringBackButtonTextEl.getBoundingClientRect();
60
61
  const leavingLargeTitleTextEl = shadow(leavingLargeTitle).querySelector('.toolbar-title');
61
62
  const leavingLargeTitleTextBox = leavingLargeTitleTextEl.getBoundingClientRect();
62
- animateLargeTitle(rootAnimation, rtl, backDirection, leavingLargeTitle, leavingLargeTitleBox, leavingLargeTitleTextBox, enteringBackButtonTextEl, enteringBackButtonTextBox);
63
+ animateLargeTitle(rootAnimation, rtl, backDirection, leavingLargeTitle, leavingLargeTitleBox, leavingLargeTitleTextBox, enteringBackButtonBox, enteringBackButtonTextEl, enteringBackButtonTextBox);
63
64
  animateBackButton(rootAnimation, rtl, backDirection, enteringBackButton, enteringBackButtonBox, enteringBackButtonTextEl, enteringBackButtonTextBox, leavingLargeTitle, leavingLargeTitleTextBox);
64
65
  }
65
66
  else if (shouldAnimationBackward) {
66
67
  const enteringLargeTitleBox = enteringLargeTitle.getBoundingClientRect();
67
68
  const leavingBackButtonBox = leavingBackButton.getBoundingClientRect();
68
69
  const leavingBackButtonTextEl = shadow(leavingBackButton).querySelector('.button-text');
69
- const leavingBackButtonTextBox = leavingBackButtonTextEl.getBoundingClientRect();
70
+ // Text element not rendered if developers pass text="" to the back button
71
+ const leavingBackButtonTextBox = leavingBackButtonTextEl === null || leavingBackButtonTextEl === void 0 ? void 0 : leavingBackButtonTextEl.getBoundingClientRect();
70
72
  const enteringLargeTitleTextEl = shadow(enteringLargeTitle).querySelector('.toolbar-title');
71
73
  const enteringLargeTitleTextBox = enteringLargeTitleTextEl.getBoundingClientRect();
72
- animateLargeTitle(rootAnimation, rtl, backDirection, enteringLargeTitle, enteringLargeTitleBox, enteringLargeTitleTextBox, leavingBackButtonTextEl, leavingBackButtonTextBox);
74
+ animateLargeTitle(rootAnimation, rtl, backDirection, enteringLargeTitle, enteringLargeTitleBox, enteringLargeTitleTextBox, leavingBackButtonBox, leavingBackButtonTextEl, leavingBackButtonTextBox);
73
75
  animateBackButton(rootAnimation, rtl, backDirection, leavingBackButton, leavingBackButtonBox, leavingBackButtonTextEl, leavingBackButtonTextBox, enteringLargeTitle, enteringLargeTitleTextBox);
74
76
  }
75
77
  return {
@@ -83,26 +85,31 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
83
85
  const TEXT_ORIGIN_X = rtl ? 'right' : 'left';
84
86
  const ICON_ORIGIN_X = rtl ? 'left' : 'right';
85
87
  const CONTAINER_ORIGIN_X = rtl ? 'right' : 'left';
86
- /**
87
- * When the title and back button texts match
88
- * then they should overlap during the page transition.
89
- * If the texts do not match up then the back button text scale adjusts
90
- * to not perfectly match the large title text otherwise the
91
- * proportions will be incorrect.
92
- * When the texts match we scale both the width and height to account for
93
- * font weight differences between the title and back button.
94
- */
95
- const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
96
- const WIDTH_SCALE = largeTitleTextBox.width / backButtonTextBox.width;
97
- /**
98
- * We subtract an offset to account for slight sizing/padding
99
- * differences between the title and the back button.
100
- */
101
- const HEIGHT_SCALE = (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET) / backButtonTextBox.height;
102
- const TEXT_START_SCALE = doTitleAndButtonTextsMatch
103
- ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})`
104
- : `scale(${HEIGHT_SCALE})`;
88
+ let WIDTH_SCALE = 1;
89
+ let HEIGHT_SCALE = 1;
90
+ let TEXT_START_SCALE = `scale(${HEIGHT_SCALE})`;
105
91
  const TEXT_END_SCALE = 'scale(1)';
92
+ if (backButtonTextEl && backButtonTextBox) {
93
+ /**
94
+ * When the title and back button texts match then they should overlap during the
95
+ * page transition. If the texts do not match up then the back button text scale
96
+ * adjusts to not perfectly match the large title text otherwise the proportions
97
+ * will be incorrect. When the texts match we scale both the width and height to
98
+ * account for font weight differences between the title and back button.
99
+ */
100
+ const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
101
+ WIDTH_SCALE = largeTitleTextBox.width / backButtonTextBox.width;
102
+ /**
103
+ * Subtract an offset to account for slight sizing/padding differences between the
104
+ * title and the back button.
105
+ */
106
+ HEIGHT_SCALE = (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET) / backButtonTextBox.height;
107
+ /**
108
+ * Even though we set TEXT_START_SCALE to HEIGHT_SCALE above, we potentially need
109
+ * to re-compute this here since the HEIGHT_SCALE may have changed.
110
+ */
111
+ TEXT_START_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
112
+ }
106
113
  const backButtonIconEl = shadow(backButtonEl).querySelector('ion-icon');
107
114
  const backButtonIconBox = backButtonIconEl.getBoundingClientRect();
108
115
  /**
@@ -199,11 +206,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
199
206
  top: '0px',
200
207
  [CONTAINER_ORIGIN_X]: '0px',
201
208
  })
202
- .keyframes(CONTAINER_KEYFRAMES);
203
- enteringBackButtonTextAnimation
204
- .beforeStyles({
205
- 'transform-origin': `${TEXT_ORIGIN_X} top`,
206
- })
209
+ /**
210
+ * The write hooks must be set on this animation as it is guaranteed to run. Other
211
+ * animations such as the back button text animation will not run if the back button
212
+ * has no visible text.
213
+ */
207
214
  .beforeAddWrite(() => {
208
215
  backButtonEl.style.setProperty('display', 'none');
209
216
  clonedBackButtonEl.style.setProperty(TEXT_ORIGIN_X, BACK_BUTTON_START_OFFSET);
@@ -212,6 +219,11 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
212
219
  backButtonEl.style.setProperty('display', '');
213
220
  clonedBackButtonEl.style.setProperty('display', 'none');
214
221
  clonedBackButtonEl.style.removeProperty(TEXT_ORIGIN_X);
222
+ })
223
+ .keyframes(CONTAINER_KEYFRAMES);
224
+ enteringBackButtonTextAnimation
225
+ .beforeStyles({
226
+ 'transform-origin': `${TEXT_ORIGIN_X} top`,
215
227
  })
216
228
  .keyframes(TEXT_KEYFRAMES);
217
229
  enteringBackButtonIconAnimation
@@ -225,7 +237,7 @@ const animateBackButton = (rootAnimation, rtl, backDirection, backButtonEl, back
225
237
  enteringBackButtonAnimation,
226
238
  ]);
227
239
  };
228
- const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonTextEl, backButtonTextBox) => {
240
+ const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, largeTitleBox, largeTitleTextBox, backButtonBox, backButtonTextEl, backButtonTextBox) => {
229
241
  var _a, _b;
230
242
  /**
231
243
  * The horizontal transform origin for the large title
@@ -245,52 +257,67 @@ const animateLargeTitle = (rootAnimation, rtl, backDirection, largeTitleEl, larg
245
257
  * title and the back button due to padding and font weight.
246
258
  */
247
259
  const LARGE_TITLE_TRANSLATION_OFFSET = 8;
260
+ let END_TRANSLATE_X = rtl
261
+ ? `-${window.innerWidth - backButtonBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
262
+ : `${backButtonBox.x + LARGE_TITLE_TRANSLATION_OFFSET}px`;
248
263
  /**
249
- * The scaled title should (roughly) overlap the back button.
250
- * This ensures that the back button and title overlap during
251
- * the animation. Note that since both elements either fade in
252
- * or fade out over the course of the animation, neither element
253
- * will be fully visible on top of the other. As a result, the overlap
254
- * does not need to be perfect, so approximate values are acceptable here.
264
+ * How much to scale the large title up/down by.
255
265
  */
256
- const END_TRANSLATE_X = rtl
257
- ? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
258
- : `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
266
+ let HEIGHT_SCALE = 0.5;
259
267
  /**
260
- * The top of the scaled large title
261
- * should match with the top of the
262
- * back button text element.
263
- * We subtract 2px to account for the top padding
264
- * on the large title element.
268
+ * The large title always starts full size.
265
269
  */
266
- const LARGE_TITLE_TOP_PADDING = 2;
267
- const END_TRANSLATE_Y = `${backButtonTextBox.y - LARGE_TITLE_TOP_PADDING}px`;
270
+ const START_SCALE = 'scale(1)';
268
271
  /**
269
- * In the forward direction, the large title should start at its
270
- * normal size and then scale down to be (roughly) the size of the
271
- * back button on the other view. In the backward direction, the
272
- * large title should start at (roughly) the size of the back button
273
- * and then scale up to its original size.
274
- *
275
- * Note that since both elements either fade in
276
- * or fade out over the course of the animation, neither element
277
- * will be fully visible on top of the other. As a result, the overlap
278
- * does not need to be perfect, so approximate values are acceptable here.
272
+ * By default, we don't worry about having the large title scaled to perfectly
273
+ * match the back button because we don't know if the back button's text matches
274
+ * the large title's text.
279
275
  */
276
+ let END_SCALE = `scale(${HEIGHT_SCALE})`;
277
+ // Text element not rendered if developers pass text="" to the back button
278
+ if (backButtonTextEl && backButtonTextBox) {
279
+ /**
280
+ * The scaled title should (roughly) overlap the back button. This ensures that
281
+ * the back button and title overlap during the animation. Note that since both
282
+ * elements either fade in or fade out over the course of the animation, neither
283
+ * element will be fully visible on top of the other. As a result, the overlap
284
+ * does not need to be perfect, so approximate values are acceptable here.
285
+ */
286
+ END_TRANSLATE_X = rtl
287
+ ? `-${window.innerWidth - backButtonTextBox.right - LARGE_TITLE_TRANSLATION_OFFSET}px`
288
+ : `${backButtonTextBox.x - LARGE_TITLE_TRANSLATION_OFFSET}px`;
289
+ /**
290
+ * In the forward direction, the large title should start at its normal size and
291
+ * then scale down to be (roughly) the size of the back button on the other view.
292
+ * In the backward direction, the large title should start at (roughly) the size
293
+ * of the back button and then scale up to its original size.
294
+ * Note that since both elements either fade in or fade out over the course of the
295
+ * animation, neither element will be fully visible on top of the other. As a result,
296
+ * the overlap does not need to be perfect, so approximate values are acceptable here.
297
+ */
298
+ /**
299
+ * When the title and back button texts match then they should overlap during the
300
+ * page transition. If the texts do not match up then the large title text scale
301
+ * adjusts to not perfectly match the back button text otherwise the proportions
302
+ * will be incorrect. When the texts match we scale both the width and height to
303
+ * account for font weight differences between the title and back button.
304
+ */
305
+ const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
306
+ const WIDTH_SCALE = backButtonTextBox.width / largeTitleTextBox.width;
307
+ HEIGHT_SCALE = backButtonTextBox.height / (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET);
308
+ /**
309
+ * Even though we set TEXT_START_SCALE to HEIGHT_SCALE above, we potentially need
310
+ * to re-compute this here since the HEIGHT_SCALE may have changed.
311
+ */
312
+ END_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
313
+ }
280
314
  /**
281
- * When the title and back button texts match
282
- * then they should overlap during the page transition.
283
- * If the texts do not match up then the large title text scale adjusts
284
- * to not perfectly match the back button text otherwise the
285
- * proportions will be incorrect.
286
- * When the texts match we scale both the width and height to account for
287
- * font weight differences between the title and back button.
315
+ * The midpoints of the back button and the title should align such that the back
316
+ * button and title appear to be centered with each other.
288
317
  */
289
- const doTitleAndButtonTextsMatch = ((_a = backButtonTextEl.textContent) === null || _a === void 0 ? void 0 : _a.trim()) === ((_b = largeTitleEl.textContent) === null || _b === void 0 ? void 0 : _b.trim());
290
- const WIDTH_SCALE = backButtonTextBox.width / largeTitleTextBox.width;
291
- const HEIGHT_SCALE = backButtonTextBox.height / (largeTitleTextBox.height - LARGE_TITLE_SIZE_OFFSET);
292
- const START_SCALE = 'scale(1)';
293
- const END_SCALE = doTitleAndButtonTextsMatch ? `scale(${WIDTH_SCALE}, ${HEIGHT_SCALE})` : `scale(${HEIGHT_SCALE})`;
318
+ const backButtonMidPoint = backButtonBox.top + backButtonBox.height / 2;
319
+ const titleMidPoint = (largeTitleBox.height * HEIGHT_SCALE) / 2;
320
+ const END_TRANSLATE_Y = `${backButtonMidPoint - titleMidPoint}px`;
294
321
  const BACKWARDS_KEYFRAMES = [
295
322
  { offset: 0, opacity: 0, transform: `translate3d(${END_TRANSLATE_X}, ${END_TRANSLATE_Y}, 0) ${END_SCALE}` },
296
323
  { offset: 0.1, opacity: 0 },
@@ -5,7 +5,7 @@ import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/
5
5
  import { c as createColorClasses, h as hostContext } from './theme.js';
6
6
  import { b as getIonMode } from './ionic-global.js';
7
7
 
8
- const labelIosCss = ".item.sc-ion-label-ios-h,.item .sc-ion-label-ios-h{--color:initial;display:block;color:var(--color);font-family:var(--ion-font-family, inherit);font-size:inherit;text-overflow:ellipsis;-webkit-box-sizing:border-box;box-sizing:border-box}.ion-color.sc-ion-label-ios-h{color:var(--ion-color-base)}.ion-text-nowrap.sc-ion-label-ios-h{overflow:hidden}.item-interactive-disabled.sc-ion-label-ios-h:not(.item-multiple-inputs),.item-interactive-disabled:not(.item-multiple-inputs) .sc-ion-label-ios-h{cursor:default;opacity:0.3;pointer-events:none}.item-input.sc-ion-label-ios-h,.item-input .sc-ion-label-ios-h{-ms-flex:initial;flex:initial;max-width:200px;pointer-events:none}.item-textarea.sc-ion-label-ios-h,.item-textarea .sc-ion-label-ios-h{-ms-flex-item-align:baseline;align-self:baseline}.item-skeleton-text.sc-ion-label-ios-h,.item-skeleton-text .sc-ion-label-ios-h{overflow:hidden}.label-fixed.sc-ion-label-ios-h{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}.label-stacked.sc-ion-label-ios-h,.label-floating.sc-ion-label-ios-h{margin-bottom:0;-ms-flex-item-align:stretch;align-self:stretch;width:auto;max-width:100%}.label-no-animate.label-floating.sc-ion-label-ios-h{-webkit-transition:none;transition:none}.sc-ion-label-ios-s h1,.sc-ion-label-ios-s h2,.sc-ion-label-ios-s h3,.sc-ion-label-ios-s h4,.sc-ion-label-ios-s h5,.sc-ion-label-ios-s h6{text-overflow:inherit;overflow:inherit}.ion-text-wrap.sc-ion-label-ios-h{font-size:0.875rem;line-height:1.5}.label-stacked.sc-ion-label-ios-h{margin-bottom:4px;font-size:0.875rem}.label-floating.sc-ion-label-ios-h{margin-bottom:0;-webkit-transform:translate(0, 29px);transform:translate(0, 29px);-webkit-transform-origin:left top;transform-origin:left top;-webkit-transition:-webkit-transform 150ms ease-in-out;transition:-webkit-transform 150ms ease-in-out;transition:transform 150ms ease-in-out;transition:transform 150ms ease-in-out, -webkit-transform 150ms ease-in-out}[dir=rtl].sc-ion-label-ios-h -no-combinator.label-floating.sc-ion-label-ios-h,[dir=rtl] .sc-ion-label-ios-h -no-combinator.label-floating.sc-ion-label-ios-h,[dir=rtl].label-floating.sc-ion-label-ios-h,[dir=rtl] .label-floating.sc-ion-label-ios-h{-webkit-transform-origin:right top;transform-origin:right top}@supports selector(:dir(rtl)){.label-floating.sc-ion-label-ios-h:dir(rtl){-webkit-transform-origin:right top;transform-origin:right top}}.item-textarea.label-floating.sc-ion-label-ios-h,.item-textarea .label-floating.sc-ion-label-ios-h{-webkit-transform:translate(0, 28px);transform:translate(0, 28px)}.item-has-focus.label-floating.sc-ion-label-ios-h,.item-has-focus .label-floating.sc-ion-label-ios-h,.item-has-placeholder.sc-ion-label-ios-h:not(.item-input).label-floating,.item-has-placeholder:not(.item-input) .label-floating.sc-ion-label-ios-h,.item-has-value.label-floating.sc-ion-label-ios-h,.item-has-value .label-floating.sc-ion-label-ios-h{-webkit-transform:scale(0.82);transform:scale(0.82)}.sc-ion-label-ios-s h1{margin-left:0;margin-right:0;margin-top:3px;margin-bottom:2px;font-size:1.375rem;font-weight:normal}.sc-ion-label-ios-s h2{margin-left:0;margin-right:0;margin-top:0;margin-bottom:2px;font-size:1.0625rem;font-weight:normal}.sc-ion-label-ios-s h3,.sc-ion-label-ios-s h4,.sc-ion-label-ios-s h5,.sc-ion-label-ios-s h6{margin-left:0;margin-right:0;margin-top:0;margin-bottom:3px;font-size:0.875rem;font-weight:normal;line-height:normal}.sc-ion-label-ios-s p{margin-left:0;margin-right:0;margin-top:0;margin-bottom:2px;font-size:0.875rem;line-height:normal;text-overflow:inherit;overflow:inherit}.sc-ion-label-ios-s>p{color:var(--ion-text-color-step-550, #a3a3a3)}.sc-ion-label-ios-h.in-item-color.sc-ion-label-ios-s>p{color:inherit}.sc-ion-label-ios-s h2:last-child,.sc-ion-label-ios-s h3:last-child,.sc-ion-label-ios-s h4:last-child,.sc-ion-label-ios-s h5:last-child,.sc-ion-label-ios-s h6:last-child,.sc-ion-label-ios-s p:last-child{margin-bottom:0}";
8
+ const labelIosCss = ".item.sc-ion-label-ios-h,.item .sc-ion-label-ios-h{--color:initial;display:block;color:var(--color);font-family:var(--ion-font-family, inherit);font-size:inherit;text-overflow:ellipsis;-webkit-box-sizing:border-box;box-sizing:border-box}.ion-color.sc-ion-label-ios-h{color:var(--ion-color-base)}.ion-text-nowrap.sc-ion-label-ios-h{overflow:hidden}.item-interactive-disabled.sc-ion-label-ios-h:not(.item-multiple-inputs),.item-interactive-disabled:not(.item-multiple-inputs) .sc-ion-label-ios-h{cursor:default;opacity:0.3;pointer-events:none}.item-input.sc-ion-label-ios-h,.item-input .sc-ion-label-ios-h{-ms-flex:initial;flex:initial;max-width:200px;pointer-events:none}.item-textarea.sc-ion-label-ios-h,.item-textarea .sc-ion-label-ios-h{-ms-flex-item-align:baseline;align-self:baseline}.item-skeleton-text.sc-ion-label-ios-h,.item-skeleton-text .sc-ion-label-ios-h{overflow:hidden}.label-fixed.sc-ion-label-ios-h{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}.label-stacked.sc-ion-label-ios-h,.label-floating.sc-ion-label-ios-h{margin-bottom:0;-ms-flex-item-align:stretch;align-self:stretch;width:auto;max-width:100%}.label-no-animate.label-floating.sc-ion-label-ios-h{-webkit-transition:none;transition:none}.sc-ion-label-ios-s h1,.sc-ion-label-ios-s h2,.sc-ion-label-ios-s h3,.sc-ion-label-ios-s h4,.sc-ion-label-ios-s h5,.sc-ion-label-ios-s h6{text-overflow:inherit;overflow:inherit}.ion-text-wrap.sc-ion-label-ios-h{font-size:0.875rem;line-height:1.5}.label-stacked.sc-ion-label-ios-h{margin-bottom:4px;font-size:0.875rem}.label-floating.sc-ion-label-ios-h{margin-bottom:0;-webkit-transform:translate(0, 29px);transform:translate(0, 29px);-webkit-transform-origin:left top;transform-origin:left top;-webkit-transition:-webkit-transform 150ms ease-in-out;transition:-webkit-transform 150ms ease-in-out;transition:transform 150ms ease-in-out;transition:transform 150ms ease-in-out, -webkit-transform 150ms ease-in-out}[dir=rtl].sc-ion-label-ios-h -no-combinator.label-floating.sc-ion-label-ios-h,[dir=rtl] .sc-ion-label-ios-h -no-combinator.label-floating.sc-ion-label-ios-h,[dir=rtl].label-floating.sc-ion-label-ios-h,[dir=rtl] .label-floating.sc-ion-label-ios-h{-webkit-transform-origin:right top;transform-origin:right top}@supports selector(:dir(rtl)){.label-floating.sc-ion-label-ios-h:dir(rtl){-webkit-transform-origin:right top;transform-origin:right top}}.item-textarea.label-floating.sc-ion-label-ios-h,.item-textarea .label-floating.sc-ion-label-ios-h{-webkit-transform:translate(0, 28px);transform:translate(0, 28px)}.item-has-focus.label-floating.sc-ion-label-ios-h,.item-has-focus .label-floating.sc-ion-label-ios-h,.item-has-placeholder.sc-ion-label-ios-h:not(.item-input).label-floating,.item-has-placeholder:not(.item-input) .label-floating.sc-ion-label-ios-h,.item-has-value.label-floating.sc-ion-label-ios-h,.item-has-value .label-floating.sc-ion-label-ios-h{-webkit-transform:scale(0.82);transform:scale(0.82)}.sc-ion-label-ios-s h1{margin-left:0;margin-right:0;margin-top:3px;margin-bottom:2px;font-size:1.375rem;font-weight:normal}.sc-ion-label-ios-s h2{margin-left:0;margin-right:0;margin-top:0;margin-bottom:2px;font-size:1.0625rem;font-weight:normal}.sc-ion-label-ios-s h3,.sc-ion-label-ios-s h4,.sc-ion-label-ios-s h5,.sc-ion-label-ios-s h6{margin-left:0;margin-right:0;margin-top:0;margin-bottom:3px;font-size:0.875rem;font-weight:normal;line-height:normal}.sc-ion-label-ios-s p{margin-left:0;margin-right:0;margin-top:0;margin-bottom:2px;font-size:0.875rem;line-height:normal;text-overflow:inherit;overflow:inherit}.sc-ion-label-ios-s>p{color:var(--ion-color-step-400, var(--ion-text-color-step-600, #999999))}.sc-ion-label-ios-h.in-item-color.sc-ion-label-ios-s>p{color:inherit}.sc-ion-label-ios-s h2:last-child,.sc-ion-label-ios-s h3:last-child,.sc-ion-label-ios-s h4:last-child,.sc-ion-label-ios-s h5:last-child,.sc-ion-label-ios-s h6:last-child,.sc-ion-label-ios-s p:last-child{margin-bottom:0}";
9
9
  const IonLabelIosStyle0 = labelIosCss;
10
10
 
11
11
  const labelMdCss = ".item.sc-ion-label-md-h,.item .sc-ion-label-md-h{--color:initial;display:block;color:var(--color);font-family:var(--ion-font-family, inherit);font-size:inherit;text-overflow:ellipsis;-webkit-box-sizing:border-box;box-sizing:border-box}.ion-color.sc-ion-label-md-h{color:var(--ion-color-base)}.ion-text-nowrap.sc-ion-label-md-h{overflow:hidden}.item-interactive-disabled.sc-ion-label-md-h:not(.item-multiple-inputs),.item-interactive-disabled:not(.item-multiple-inputs) .sc-ion-label-md-h{cursor:default;opacity:0.3;pointer-events:none}.item-input.sc-ion-label-md-h,.item-input .sc-ion-label-md-h{-ms-flex:initial;flex:initial;max-width:200px;pointer-events:none}.item-textarea.sc-ion-label-md-h,.item-textarea .sc-ion-label-md-h{-ms-flex-item-align:baseline;align-self:baseline}.item-skeleton-text.sc-ion-label-md-h,.item-skeleton-text .sc-ion-label-md-h{overflow:hidden}.label-fixed.sc-ion-label-md-h{-ms-flex:0 0 100px;flex:0 0 100px;width:100px;min-width:100px;max-width:200px}.label-stacked.sc-ion-label-md-h,.label-floating.sc-ion-label-md-h{margin-bottom:0;-ms-flex-item-align:stretch;align-self:stretch;width:auto;max-width:100%}.label-no-animate.label-floating.sc-ion-label-md-h{-webkit-transition:none;transition:none}.sc-ion-label-md-s h1,.sc-ion-label-md-s h2,.sc-ion-label-md-s h3,.sc-ion-label-md-s h4,.sc-ion-label-md-s h5,.sc-ion-label-md-s h6{text-overflow:inherit;overflow:inherit}.ion-text-wrap.sc-ion-label-md-h{line-height:1.5}.label-stacked.sc-ion-label-md-h,.label-floating.sc-ion-label-md-h{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-transform-origin:top left;transform-origin:top left}.label-stacked.label-rtl.sc-ion-label-md-h,.label-floating.label-rtl.sc-ion-label-md-h{-webkit-transform-origin:top right;transform-origin:top right}.label-stacked.sc-ion-label-md-h{-webkit-transform:translateY(50%) scale(0.75);transform:translateY(50%) scale(0.75);-webkit-transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1)}.label-floating.sc-ion-label-md-h{-webkit-transform:translateY(96%);transform:translateY(96%);-webkit-transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), transform 150ms cubic-bezier(0.4, 0, 0.2, 1);transition:color 150ms cubic-bezier(0.4, 0, 0.2, 1), transform 150ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 150ms cubic-bezier(0.4, 0, 0.2, 1)}.ion-focused.label-floating.sc-ion-label-md-h,.ion-focused .label-floating.sc-ion-label-md-h,.item-has-focus.label-floating.sc-ion-label-md-h,.item-has-focus .label-floating.sc-ion-label-md-h,.item-has-placeholder.sc-ion-label-md-h:not(.item-input).label-floating,.item-has-placeholder:not(.item-input) .label-floating.sc-ion-label-md-h,.item-has-value.label-floating.sc-ion-label-md-h,.item-has-value .label-floating.sc-ion-label-md-h{-webkit-transform:translateY(50%) scale(0.75);transform:translateY(50%) scale(0.75)}.ion-focused.label-stacked.sc-ion-label-md-h:not(.ion-color),.ion-focused .label-stacked.sc-ion-label-md-h:not(.ion-color),.ion-focused.label-floating.sc-ion-label-md-h:not(.ion-color),.ion-focused .label-floating.sc-ion-label-md-h:not(.ion-color),.item-has-focus.label-stacked.sc-ion-label-md-h:not(.ion-color),.item-has-focus .label-stacked.sc-ion-label-md-h:not(.ion-color),.item-has-focus.label-floating.sc-ion-label-md-h:not(.ion-color),.item-has-focus .label-floating.sc-ion-label-md-h:not(.ion-color){color:var(--ion-color-primary, #0054e9)}.ion-focused.ion-color.label-stacked.sc-ion-label-md-h:not(.ion-color),.ion-focused.ion-color .label-stacked.sc-ion-label-md-h:not(.ion-color),.ion-focused.ion-color.label-floating.sc-ion-label-md-h:not(.ion-color),.ion-focused.ion-color .label-floating.sc-ion-label-md-h:not(.ion-color),.item-has-focus.ion-color.label-stacked.sc-ion-label-md-h:not(.ion-color),.item-has-focus.ion-color .label-stacked.sc-ion-label-md-h:not(.ion-color),.item-has-focus.ion-color.label-floating.sc-ion-label-md-h:not(.ion-color),.item-has-focus.ion-color .label-floating.sc-ion-label-md-h:not(.ion-color){color:var(--ion-color-contrast)}.ion-invalid.ion-touched.label-stacked.sc-ion-label-md-h:not(.ion-color),.ion-invalid.ion-touched .label-stacked.sc-ion-label-md-h:not(.ion-color),.ion-invalid.ion-touched.label-floating.sc-ion-label-md-h:not(.ion-color),.ion-invalid.ion-touched .label-floating.sc-ion-label-md-h:not(.ion-color){color:var(--highlight-color-invalid)}.sc-ion-label-md-s h1{margin-left:0;margin-right:0;margin-top:0;margin-bottom:2px;font-size:1.5rem;font-weight:normal}.sc-ion-label-md-s h2{margin-left:0;margin-right:0;margin-top:2px;margin-bottom:2px;font-size:1rem;font-weight:normal}.sc-ion-label-md-s h3,.sc-ion-label-md-s h4,.sc-ion-label-md-s h5,.sc-ion-label-md-s h6{margin-left:0;margin-right:0;margin-top:2px;margin-bottom:2px;font-size:0.875rem;font-weight:normal;line-height:normal}.sc-ion-label-md-s p{margin-left:0;margin-right:0;margin-top:0;margin-bottom:2px;font-size:0.875rem;line-height:1.25rem;text-overflow:inherit;overflow:inherit}.sc-ion-label-md-s>p{color:var(--ion-color-step-600, var(--ion-text-color-step-400, #666666))}.sc-ion-label-md-h.in-item-color.sc-ion-label-md-s>p{color:inherit}";
@@ -63,13 +63,13 @@ const Label = /*@__PURE__*/ proxyCustomElement(class Label extends HTMLElement {
63
63
  render() {
64
64
  const position = this.position;
65
65
  const mode = getIonMode(this);
66
- return (h(Host, { key: '6353a70565ef6fbbbf4042b000e536c61bcf99a9', class: createColorClasses(this.color, {
66
+ return (h(Host, { key: 'c2c0f388dab910d294efb9fbb409ee4ef829c1ed', class: createColorClasses(this.color, {
67
67
  [mode]: true,
68
68
  'in-item-color': hostContext('ion-item.ion-color', this.el),
69
69
  [`label-${position}`]: position !== undefined,
70
70
  [`label-no-animate`]: this.noAnimate,
71
71
  'label-rtl': document.dir === 'rtl',
72
- }) }, h("slot", { key: '6ef9c2758c0168442aa84941af0a6cec1ef1ec21' })));
72
+ }) }, h("slot", { key: '4de6b69950f417873a13c851018ec31ea2686f0a' })));
73
73
  }
74
74
  get el() { return this; }
75
75
  static get watchers() { return {
@@ -22,10 +22,10 @@ const ListHeader = /*@__PURE__*/ proxyCustomElement(class ListHeader extends HTM
22
22
  render() {
23
23
  const { lines } = this;
24
24
  const mode = getIonMode(this);
25
- return (h(Host, { key: 'fb78bd8601cbd7b90ec84a96e0c8325be1132b1e', class: createColorClasses(this.color, {
25
+ return (h(Host, { key: '7e2e050f13722f2b870a2415d99a9e631e9ca267', class: createColorClasses(this.color, {
26
26
  [mode]: true,
27
27
  [`list-header-lines-${lines}`]: lines !== undefined,
28
- }) }, h("div", { key: '2580ad49f3a54973e15f14d645a1e55a6fa066ac', class: "list-header-inner" }, h("slot", { key: '677b2e2ec8eeb3ae6ad329e86c76451cf3ae6c2f' }))));
28
+ }) }, h("div", { key: '6117bebc45800d874e9b75355476fbced5cc8398', class: "list-header-inner" }, h("slot", { key: '9165fb274cd2c45a5a65c271d8b1f30e8a00c890' }))));
29
29
  }
30
30
  static get style() { return {
31
31
  ios: IonListHeaderIosStyle0,
@@ -33,7 +33,7 @@ const List = /*@__PURE__*/ proxyCustomElement(class List extends HTMLElement {
33
33
  render() {
34
34
  const mode = getIonMode(this);
35
35
  const { lines, inset } = this;
36
- return (h(Host, { key: '5ff2b0b3989cc99ce17abb8bcd7ec1847940d1ec', role: "list", class: {
36
+ return (h(Host, { key: '8bde220025a7eeca6da075379c6487c4c9bdddc1', role: "list", class: {
37
37
  [mode]: true,
38
38
  // Used internally for styling
39
39
  [`list-${mode}`]: true,
@@ -225,7 +225,7 @@ const trapKeyboardFocus = (ev, doc) => {
225
225
  * behind the sheet should be focusable until
226
226
  * the backdrop is enabled.
227
227
  */
228
- if (lastOverlay.classList.contains('ion-disable-focus-trap')) {
228
+ if (lastOverlay.classList.contains(FOCUS_TRAP_DISABLE_CLASS)) {
229
229
  return;
230
230
  }
231
231
  const trapScopedFocus = () => {
@@ -900,5 +900,6 @@ const revealOverlaysToScreenReaders = () => {
900
900
  }
901
901
  }
902
902
  };
903
+ const FOCUS_TRAP_DISABLE_CLASS = 'ion-disable-focus-trap';
903
904
 
904
- export { BACKDROP as B, GESTURE as G, OVERLAY_GESTURE_PRIORITY as O, alertController as a, actionSheetController as b, popoverController as c, createDelegateController as d, createTriggerController as e, present as f, dismiss as g, eventMethod as h, isCancel as i, prepareOverlay as j, setOverlayId as k, loadingController as l, modalController as m, focusFirstDescendant as n, getPresentedOverlay as o, pickerController as p, focusLastDescendant as q, safeCall as s, toastController as t };
905
+ export { BACKDROP as B, FOCUS_TRAP_DISABLE_CLASS as F, GESTURE as G, OVERLAY_GESTURE_PRIORITY as O, alertController as a, actionSheetController as b, popoverController as c, createDelegateController as d, createTriggerController as e, present as f, dismiss as g, eventMethod as h, isCancel as i, prepareOverlay as j, setOverlayId as k, loadingController as l, modalController as m, focusFirstDescendant as n, getPresentedOverlay as o, pickerController as p, focusLastDescendant as q, safeCall as s, toastController as t };
@@ -86,10 +86,10 @@ const PickerColumnOption = /*@__PURE__*/ proxyCustomElement(class PickerColumnOp
86
86
  render() {
87
87
  const { color, disabled, ariaLabel } = this;
88
88
  const mode = getIonMode(this);
89
- return (h(Host, { key: 'c743c6ef44bb9f765cc15b3b5d2864de6520203a', class: createColorClasses(color, {
89
+ return (h(Host, { key: 'cc4435a0ce0e55be1321bcabaf342ed68cf5ba1e', class: createColorClasses(color, {
90
90
  [mode]: true,
91
91
  ['option-disabled']: disabled,
92
- }) }, h("button", { key: '4c3d9eb245c52b2c007f727e145cfb55759bd7a9', tabindex: "-1", "aria-label": ariaLabel, disabled: disabled, onClick: () => this.onClick() }, h("slot", { key: '4c907d2187cbe9d5941e27f2b12578e2b7271461' }))));
92
+ }) }, h("button", { key: '0187fb967771e0787807a8538dce4e59f6a98565', tabindex: "-1", "aria-label": ariaLabel, disabled: disabled, onClick: () => this.onClick() }, h("slot", { key: 'dbe52552f3f27332816748c12d929cc81060841d' }))));
93
93
  }
94
94
  get el() { return this; }
95
95
  static get watchers() { return {
@@ -8,7 +8,7 @@ import { a as hapticSelectionStart, b as hapticSelectionChanged, h as hapticSele
8
8
  import { a as isPlatform, b as getIonMode } from './ionic-global.js';
9
9
  import { c as createColorClasses } from './theme.js';
10
10
 
11
- const pickerColumnCss = ":host{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;max-width:100%;height:200px;font-size:22px;text-align:center}.picker-opts{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0px;padding-bottom:0px;min-width:26px;max-height:200px;outline:none;text-align:inherit;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;overflow-x:hidden;overflow-y:scroll;scrollbar-width:none}.picker-item-empty{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;display:block;width:100%;height:34px;border:0px;outline:none;background:transparent;color:inherit;font-family:var(--ion-font-family, inherit);font-size:inherit;line-height:34px;text-align:inherit;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.picker-opts::-webkit-scrollbar{display:none}::slotted(ion-picker-column-option){display:block;scroll-snap-align:center}.picker-item-empty,:host(:not([disabled])) ::slotted(ion-picker-column-option.option-disabled){scroll-snap-align:none}::slotted([slot=prefix]),::slotted([slot=suffix]){max-width:200px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::slotted([slot=prefix]){-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0;padding-bottom:0;-ms-flex-pack:end;justify-content:end}::slotted([slot=suffix]){-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0;padding-bottom:0;-ms-flex-pack:start;justify-content:start}:host(.picker-column-disabled) .picker-opts{overflow-y:hidden}:host(.picker-column-disabled) ::slotted(ion-picker-column-option){cursor:default;opacity:0.4;pointer-events:none}@media (any-hover: hover){:host(:focus) .picker-opts{outline:none;background:rgba(var(--ion-color-base-rgb), 0.2)}}";
11
+ const pickerColumnCss = ":host{display:-ms-flexbox;display:flex;position:relative;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;max-width:100%;height:200px;font-size:22px;text-align:center}.assistive-focusable{left:0;right:0;top:0;bottom:0;position:absolute;z-index:1;pointer-events:none}.assistive-focusable:focus{outline:none}.picker-opts{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0px;padding-bottom:0px;min-width:26px;max-height:200px;outline:none;text-align:inherit;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;overflow-x:hidden;overflow-y:scroll;scrollbar-width:none}.picker-item-empty{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;display:block;width:100%;height:34px;border:0px;outline:none;background:transparent;color:inherit;font-family:var(--ion-font-family, inherit);font-size:inherit;line-height:34px;text-align:inherit;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.picker-opts::-webkit-scrollbar{display:none}::slotted(ion-picker-column-option){display:block;scroll-snap-align:center}.picker-item-empty,:host(:not([disabled])) ::slotted(ion-picker-column-option.option-disabled){scroll-snap-align:none}::slotted([slot=prefix]),::slotted([slot=suffix]){max-width:200px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::slotted([slot=prefix]){-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0;padding-bottom:0;-ms-flex-pack:end;justify-content:end}::slotted([slot=suffix]){-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0;padding-bottom:0;-ms-flex-pack:start;justify-content:start}:host(.picker-column-disabled) .picker-opts{overflow-y:hidden}:host(.picker-column-disabled) ::slotted(ion-picker-column-option){cursor:default;opacity:0.4;pointer-events:none}@media (any-hover: hover){:host(:focus) .picker-opts{outline:none;background:rgba(var(--ion-color-base-rgb), 0.2)}}";
12
12
  const IonPickerColumnStyle0 = pickerColumnCss;
13
13
 
14
14
  const PickerColumn = /*@__PURE__*/ proxyCustomElement(class PickerColumn extends HTMLElement {
@@ -20,6 +20,7 @@ const PickerColumn = /*@__PURE__*/ proxyCustomElement(class PickerColumn extends
20
20
  this.isScrolling = false;
21
21
  this.isColumnVisible = false;
22
22
  this.canExitInputMode = true;
23
+ this.updateValueTextOnScroll = false;
23
24
  this.centerPickerItemInView = (target, smooth = true, canExitInputMode = true) => {
24
25
  const { isColumnVisible, scrollEl } = this;
25
26
  if (isColumnVisible && scrollEl) {
@@ -34,6 +35,7 @@ const PickerColumn = /*@__PURE__*/ proxyCustomElement(class PickerColumn extends
34
35
  * of these can cause a scroll to occur.
35
36
  */
36
37
  this.canExitInputMode = canExitInputMode;
38
+ this.updateValueTextOnScroll = false;
37
39
  scrollEl.scroll({
38
40
  top,
39
41
  left: 0,
@@ -106,6 +108,7 @@ const PickerColumn = /*@__PURE__*/ proxyCustomElement(class PickerColumn extends
106
108
  let activeEl = this.activeItem;
107
109
  const scrollCallback = () => {
108
110
  raf(() => {
111
+ var _a;
109
112
  if (!scrollEl)
110
113
  return;
111
114
  if (timeout) {
@@ -186,8 +189,23 @@ const PickerColumn = /*@__PURE__*/ proxyCustomElement(class PickerColumn extends
186
189
  }
187
190
  activeEl = newActiveElement;
188
191
  this.setPickerItemActiveState(newActiveElement, true);
192
+ /**
193
+ * Set the aria-valuetext even though the value prop has not been updated yet.
194
+ * This enables some screen readers to announce the value as the users drag
195
+ * as opposed to when their release their pointer from the screen.
196
+ *
197
+ * When the value is programmatically updated, we will smoothly scroll
198
+ * to the new option. However, we do not want to update aria-valuetext mid-scroll
199
+ * as that can cause the old value to be briefly set before being set to the
200
+ * correct option. This will cause some screen readers to announce the old value
201
+ * again before announcing the new value. The correct valuetext will be set on render.
202
+ */
203
+ if (this.updateValueTextOnScroll) {
204
+ (_a = this.assistiveFocusable) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-valuetext', this.getOptionValueText(newActiveElement));
205
+ }
189
206
  timeout = setTimeout(() => {
190
207
  this.isScrolling = false;
208
+ this.updateValueTextOnScroll = true;
191
209
  enableHaptics && hapticSelectionEnd();
192
210
  /**
193
211
  * Certain tasks (such as those that
@@ -246,12 +264,139 @@ const PickerColumn = /*@__PURE__*/ proxyCustomElement(class PickerColumn extends
246
264
  */
247
265
  this.el.classList.remove('picker-column-active');
248
266
  };
267
+ /**
268
+ * Find the next enabled option after the active option.
269
+ * @param stride - How many options to "jump" over in order to select the next option.
270
+ * This can be used to implement PageUp/PageDown behaviors where pressing these keys
271
+ * scrolls the picker by more than 1 option. For example, a stride of 5 means select
272
+ * the enabled option 5 options after the active one. Note that the actual option selected
273
+ * may be past the stride if the option at the stride is disabled.
274
+ */
275
+ this.findNextOption = (stride = 1) => {
276
+ const { activeItem } = this;
277
+ if (!activeItem)
278
+ return null;
279
+ let prevNode = activeItem;
280
+ let node = activeItem.nextElementSibling;
281
+ while (node != null) {
282
+ if (stride > 0) {
283
+ stride--;
284
+ }
285
+ if (node.tagName === 'ION-PICKER-COLUMN-OPTION' && !node.disabled && stride === 0) {
286
+ return node;
287
+ }
288
+ prevNode = node;
289
+ // Use nextElementSibling instead of nextSibling to avoid text/comment nodes
290
+ node = node.nextElementSibling;
291
+ }
292
+ return prevNode;
293
+ };
294
+ /**
295
+ * Find the next enabled option after the active option.
296
+ * @param stride - How many options to "jump" over in order to select the next option.
297
+ * This can be used to implement PageUp/PageDown behaviors where pressing these keys
298
+ * scrolls the picker by more than 1 option. For example, a stride of 5 means select
299
+ * the enabled option 5 options before the active one. Note that the actual option selected
300
+ * may be past the stride if the option at the stride is disabled.
301
+ */
302
+ this.findPreviousOption = (stride = 1) => {
303
+ const { activeItem } = this;
304
+ if (!activeItem)
305
+ return null;
306
+ let nextNode = activeItem;
307
+ let node = activeItem.previousElementSibling;
308
+ while (node != null) {
309
+ if (stride > 0) {
310
+ stride--;
311
+ }
312
+ if (node.tagName === 'ION-PICKER-COLUMN-OPTION' && !node.disabled && stride === 0) {
313
+ return node;
314
+ }
315
+ nextNode = node;
316
+ // Use previousElementSibling instead of previousSibling to avoid text/comment nodes
317
+ node = node.previousElementSibling;
318
+ }
319
+ return nextNode;
320
+ };
321
+ this.onKeyDown = (ev) => {
322
+ /**
323
+ * The below operations should be inverted when running on a mobile device.
324
+ * For example, swiping up will dispatch an "ArrowUp" event. On desktop,
325
+ * this should cause the previous option to be selected. On mobile, swiping
326
+ * up causes a view to scroll down. As a result, swiping up on mobile should
327
+ * cause the next option to be selected. The Home/End operations remain
328
+ * unchanged because those always represent the first/last options, respectively.
329
+ */
330
+ const mobile = isPlatform('mobile');
331
+ let newOption = null;
332
+ switch (ev.key) {
333
+ case 'ArrowDown':
334
+ newOption = mobile ? this.findPreviousOption() : this.findNextOption();
335
+ break;
336
+ case 'ArrowUp':
337
+ newOption = mobile ? this.findNextOption() : this.findPreviousOption();
338
+ break;
339
+ case 'PageUp':
340
+ newOption = mobile ? this.findNextOption(5) : this.findPreviousOption(5);
341
+ break;
342
+ case 'PageDown':
343
+ newOption = mobile ? this.findPreviousOption(5) : this.findNextOption(5);
344
+ break;
345
+ case 'Home':
346
+ /**
347
+ * There is no guarantee that the first child will be an ion-picker-column-option,
348
+ * so we do not use firstElementChild.
349
+ */
350
+ newOption = this.el.querySelector('ion-picker-column-option:first-of-type');
351
+ break;
352
+ case 'End':
353
+ /**
354
+ * There is no guarantee that the last child will be an ion-picker-column-option,
355
+ * so we do not use lastElementChild.
356
+ */
357
+ newOption = this.el.querySelector('ion-picker-column-option:last-of-type');
358
+ break;
359
+ }
360
+ if (newOption !== null) {
361
+ this.setValue(newOption.value);
362
+ // This stops any default browser behavior such as scrolling
363
+ ev.preventDefault();
364
+ }
365
+ };
366
+ /**
367
+ * Utility to generate the correct text for aria-valuetext.
368
+ */
369
+ this.getOptionValueText = (el) => {
370
+ var _a;
371
+ return el ? (_a = el.getAttribute('aria-label')) !== null && _a !== void 0 ? _a : el.innerText : '';
372
+ };
373
+ /**
374
+ * Render an element that overlays the column. This element is for assistive
375
+ * tech to allow users to navigate the column up/down. This element should receive
376
+ * focus as it listens for synthesized keyboard events as required by the
377
+ * slider role: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/slider_role
378
+ */
379
+ this.renderAssistiveFocusable = () => {
380
+ const { activeItem } = this;
381
+ const valueText = this.getOptionValueText(activeItem);
382
+ /**
383
+ * When using the picker, the valuetext provides important context that valuenow
384
+ * does not. Additionally, using non-zero valuemin/valuemax values can cause
385
+ * WebKit to incorrectly announce numeric valuetext values (such as a year
386
+ * like "2024") as percentages: https://bugs.webkit.org/show_bug.cgi?id=273126
387
+ */
388
+ return (h("div", { ref: (el) => (this.assistiveFocusable = el), class: "assistive-focusable", role: "slider", tabindex: this.disabled ? undefined : 0, "aria-label": this.ariaLabel, "aria-valuemin": 0, "aria-valuemax": 0, "aria-valuenow": 0, "aria-valuetext": valueText, "aria-orientation": "vertical", onKeyDown: (ev) => this.onKeyDown(ev) }));
389
+ };
390
+ this.ariaLabel = null;
249
391
  this.isActive = false;
250
392
  this.disabled = false;
251
393
  this.value = undefined;
252
394
  this.color = 'primary';
253
395
  this.numericInput = false;
254
396
  }
397
+ ariaLabelChanged(newValue) {
398
+ this.ariaLabel = newValue;
399
+ }
255
400
  valueChange() {
256
401
  if (this.isColumnVisible) {
257
402
  /**
@@ -363,10 +508,14 @@ const PickerColumn = /*@__PURE__*/ proxyCustomElement(class PickerColumn extends
363
508
  * Use this method instead of the global `pickerColumn.focus()`.
364
509
  */
365
510
  async setFocus() {
366
- if (this.scrollEl) {
367
- this.scrollEl.focus();
511
+ if (this.assistiveFocusable) {
512
+ this.assistiveFocusable.focus();
368
513
  }
369
514
  }
515
+ connectedCallback() {
516
+ var _a;
517
+ this.ariaLabel = (_a = this.el.getAttribute('aria-label')) !== null && _a !== void 0 ? _a : 'Select a value';
518
+ }
370
519
  get activeItem() {
371
520
  const { value } = this;
372
521
  const options = Array.from(this.el.querySelectorAll('ion-picker-column-option'));
@@ -384,17 +533,37 @@ const PickerColumn = /*@__PURE__*/ proxyCustomElement(class PickerColumn extends
384
533
  render() {
385
534
  const { color, disabled, isActive, numericInput } = this;
386
535
  const mode = getIonMode(this);
387
- return (h(Host, { key: '59648ef23cef1ab6d30955bb95bc23e670ec7256', class: createColorClasses(color, {
536
+ return (h(Host, { key: 'd60736ce74c0e8c774a163272b78fbad32993ec2', class: createColorClasses(color, {
388
537
  [mode]: true,
389
538
  ['picker-column-active']: isActive,
390
539
  ['picker-column-numeric-input']: numericInput,
391
540
  ['picker-column-disabled']: disabled,
392
- }) }, h("slot", { key: 'fd93192d4945b2c33e0fe93cc90b505f2cec12fc', name: "prefix" }), h("div", { key: '99e49c6d58badd2fe5e75f0ebcd4bc00eb50aa58', class: "picker-opts", tabindex: disabled ? undefined : 0, ref: (el) => {
541
+ }) }, this.renderAssistiveFocusable(), h("slot", { key: '74611112ef154b343ae29a773f8cd8a01cc1447d', name: "prefix" }), h("div", { key: 'af772d2b61b7eb41a567593d290b80a50b7caa72', "aria-hidden": "true", class: "picker-opts", ref: (el) => {
393
542
  this.scrollEl = el;
394
- } }, h("div", { key: 'bb44892ef179b25373e45e4b4bc4d1fa617b1ea1', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '9ee7aeb8468bbb03f7192d56849dae089b7a0250', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '0baa4bda4bf02a8d06dbf3392b1516ca8ea8d26a', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("slot", { key: 'ff4cad20fd82ab66599473f60d10c18dc1dc76d8' }), h("div", { key: '04dcb0390209081e6223b90e45b8f2ef0fdf94bd', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '734e3b431a30ce93957e1452516efc86e29ff9c9', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '1c68dcf9a029e607bb6bc9c19cd02214914eb6d7', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0")), h("slot", { key: 'd85210cc99c8c1bf83eb1cd51540ebe875d4adeb', name: "suffix" })));
543
+ },
544
+ /**
545
+ * When an element has an overlay scroll style and
546
+ * a fixed height, Firefox will focus the scrollable
547
+ * container if the content exceeds the container's
548
+ * dimensions.
549
+ *
550
+ * This causes keyboard navigation to focus to this
551
+ * element instead of going to the next element in
552
+ * the tab order.
553
+ *
554
+ * The desired behavior is for the user to be able to
555
+ * focus the assistive focusable element and tab to
556
+ * the next element in the tab order. Instead of tabbing
557
+ * to this element.
558
+ *
559
+ * To prevent this, we set the tabIndex to -1. This
560
+ * will match the behavior of the other browsers.
561
+ */
562
+ tabIndex: -1 }, h("div", { key: '4b646ee97bcf8ed541b9798c91dff189eec41dd1', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: 'a44d1a10d20a13aeb47f9871b09e291aa7f216bd', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '6a481715bd68fa68dc2a76c2e867ce771ea680b0', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("slot", { key: '23236e731b1ad432c104761ebeec91697a6b7643' }), h("div", { key: '58a6c1f35a3ff0b26acaceebfd477d74b6dcfd6d', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: 'ea864872dec6dc363406d1bd9101b1bf21944db6', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '28cc4c570d0dd59f491eef2b15a5ed706d28b7bb', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0")), h("slot", { key: 'cff1cc0bea732a5ce22bb451c5ea404a84af1993', name: "suffix" })));
395
563
  }
396
564
  get el() { return this; }
397
565
  static get watchers() { return {
566
+ "aria-label": ["ariaLabelChanged"],
398
567
  "value": ["valueChange"]
399
568
  }; }
400
569
  static get style() { return IonPickerColumnStyle0; }
@@ -403,11 +572,13 @@ const PickerColumn = /*@__PURE__*/ proxyCustomElement(class PickerColumn extends
403
572
  "value": [1032],
404
573
  "color": [513],
405
574
  "numericInput": [4, "numeric-input"],
575
+ "ariaLabel": [32],
406
576
  "isActive": [32],
407
577
  "scrollActiveItemIntoView": [64],
408
578
  "setValue": [64],
409
579
  "setFocus": [64]
410
580
  }, undefined, {
581
+ "aria-label": ["ariaLabelChanged"],
411
582
  "value": ["valueChange"]
412
583
  }]);
413
584
  const PICKER_ITEM_ACTIVE_CLASS = 'option-active';
@@ -343,9 +343,9 @@ const PickerColumnCmp = /*@__PURE__*/ proxyCustomElement(class PickerColumnCmp e
343
343
  render() {
344
344
  const col = this.col;
345
345
  const mode = getIonMode(this);
346
- 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: {
346
+ 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: {
347
347
  'max-width': this.col.columnWidth,
348
- } }, 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))));
348
+ } }, 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))));
349
349
  }
350
350
  get el() { return this; }
351
351
  static get watchers() { return {