@ionic/core 7.7.2-dev.11707932366.16baf005 → 7.7.2-dev.11708036667.1fa730de

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 (522) hide show
  1. package/components/checkbox.js +8 -80
  2. package/components/helpers.js +1 -1
  3. package/components/index2.js +107 -1
  4. package/components/index9.js +1 -1
  5. package/components/ion-chip.js +2 -2
  6. package/components/ion-col.js +2 -2
  7. package/components/ion-content.js +4 -4
  8. package/components/ion-datetime-button.js +1 -1
  9. package/components/ion-datetime.js +1 -1
  10. package/components/ion-fab-button.js +2 -2
  11. package/components/ion-fab-list.js +2 -2
  12. package/components/ion-fab.js +2 -2
  13. package/components/ion-footer.js +3 -3
  14. package/components/ion-grid.js +2 -2
  15. package/components/ion-header.js +3 -3
  16. package/components/ion-img.js +1 -1
  17. package/components/ion-infinite-scroll-content.js +2 -2
  18. package/components/ion-infinite-scroll.js +1 -1
  19. package/components/ion-input.js +4 -4
  20. package/components/ion-item-divider.js +2 -2
  21. package/components/ion-item-group.js +1 -1
  22. package/components/ion-item-option.js +2 -2
  23. package/components/ion-item-options.js +2 -2
  24. package/components/ion-item-sliding.js +2 -2
  25. package/components/ion-loading.js +2 -2
  26. package/components/ion-menu-button.js +2 -2
  27. package/components/ion-menu-toggle.js +2 -2
  28. package/components/ion-menu.js +3 -3
  29. package/components/ion-modal.js +4 -4
  30. package/components/ion-nav-link.js +1 -1
  31. package/components/ion-nav.js +2 -2
  32. package/components/ion-picker-legacy.js +2 -2
  33. package/components/ion-progress-bar.js +2 -2
  34. package/components/ion-range.js +34 -88
  35. package/components/ion-refresher-content.js +1 -1
  36. package/components/ion-refresher.js +2 -2
  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 +2 -2
  41. package/components/ion-router.js +1 -1
  42. package/components/ion-row.js +1 -1
  43. package/components/ion-searchbar.js +5 -5
  44. package/components/ion-segment-button.js +3 -3
  45. package/components/ion-segment.js +2 -2
  46. package/components/ion-select-option.js +1 -1
  47. package/components/ion-select.js +3 -3
  48. package/components/ion-skeleton-text.js +2 -2
  49. package/components/ion-split-pane.js +2 -2
  50. package/components/ion-tab-bar.js +2 -2
  51. package/components/ion-tab-button.js +2 -2
  52. package/components/ion-tab.js +2 -2
  53. package/components/ion-tabs.js +1 -1
  54. package/components/ion-text.js +2 -2
  55. package/components/ion-textarea.js +3 -3
  56. package/components/ion-thumbnail.js +1 -1
  57. package/components/ion-title.js +2 -2
  58. package/components/ion-toast.js +2 -2
  59. package/components/ion-toggle.js +3 -3
  60. package/components/ion-toolbar.js +2 -2
  61. package/components/label.js +1 -1
  62. package/components/list-header.js +2 -2
  63. package/components/list.js +1 -1
  64. package/components/note.js +2 -2
  65. package/components/picker-column-option.js +2 -2
  66. package/components/picker-column.js +3 -3
  67. package/components/picker-column2.js +3 -3
  68. package/components/picker.js +2 -2
  69. package/components/popover.js +3 -3
  70. package/components/radio-group.js +1 -1
  71. package/components/radio.js +3 -3
  72. package/components/refresher.utils.js +1 -1
  73. package/components/ripple-effect.js +1 -1
  74. package/components/select-popover.js +1 -1
  75. package/components/spinner.js +1 -1
  76. package/components/swipe-back.js +1 -1
  77. package/css/core.css +10 -0
  78. package/css/core.css.map +1 -1
  79. package/css/ionic.bundle.css +1 -1
  80. package/css/ionic.bundle.css.map +1 -1
  81. package/dist/cjs/{animation-fdab9de5.js → animation-52066ac7.js} +1 -1
  82. package/dist/cjs/{framework-delegate-a3e6d060.js → framework-delegate-0aa2f151.js} +1 -1
  83. package/dist/cjs/{helpers-2e1028fa.js → helpers-3b96a6b0.js} +0 -1
  84. package/dist/cjs/{index-84351d21.js → index-199dfe7c.js} +110 -4
  85. package/dist/cjs/{index-8c679cbf.js → index-8a307f4a.js} +2 -2
  86. package/dist/cjs/{index-10da82ce.js → index-a31d3404.js} +1 -1
  87. package/dist/cjs/{index-53d162b2.js → index-e8a56f40.js} +1 -1
  88. package/dist/cjs/index.cjs.js +9 -9
  89. package/dist/cjs/{input-shims-6f804705.js → input-shims-49caf259.js} +2 -2
  90. package/dist/cjs/{input.utils-d693d18a.js → input.utils-ca76d6e6.js} +1 -1
  91. package/dist/cjs/ion-accordion_2.cjs.entry.js +1 -1
  92. package/dist/cjs/ion-action-sheet.cjs.entry.js +4 -4
  93. package/dist/cjs/ion-alert.cjs.entry.js +4 -4
  94. package/dist/cjs/ion-app_8.cjs.entry.js +20 -20
  95. package/dist/cjs/ion-avatar_3.cjs.entry.js +1 -1
  96. package/dist/cjs/ion-back-button.cjs.entry.js +1 -1
  97. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +1 -1
  98. package/dist/cjs/ion-button_2.cjs.entry.js +1 -1
  99. package/dist/cjs/ion-card_5.cjs.entry.js +1 -1
  100. package/dist/cjs/ion-checkbox.cjs.entry.js +7 -75
  101. package/dist/cjs/ion-chip.cjs.entry.js +2 -2
  102. package/dist/cjs/ion-col_3.cjs.entry.js +5 -5
  103. package/dist/cjs/ion-datetime-button.cjs.entry.js +2 -2
  104. package/dist/cjs/ion-datetime_3.cjs.entry.js +9 -9
  105. package/dist/cjs/ion-fab_3.cjs.entry.js +7 -7
  106. package/dist/cjs/ion-img.cjs.entry.js +2 -2
  107. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +5 -5
  108. package/dist/cjs/ion-input.cjs.entry.js +6 -6
  109. package/dist/cjs/ion-item-option_3.cjs.entry.js +6 -6
  110. package/dist/cjs/ion-item_8.cjs.entry.js +12 -12
  111. package/dist/cjs/ion-loading.cjs.entry.js +6 -6
  112. package/dist/cjs/ion-menu_3.cjs.entry.js +11 -11
  113. package/dist/cjs/ion-modal.cjs.entry.js +9 -9
  114. package/dist/cjs/ion-nav_2.cjs.entry.js +7 -6
  115. package/dist/cjs/ion-picker-column-option.cjs.entry.js +3 -3
  116. package/dist/cjs/ion-picker-column.cjs.entry.js +4 -4
  117. package/dist/cjs/ion-picker.cjs.entry.js +3 -3
  118. package/dist/cjs/ion-popover.cjs.entry.js +7 -7
  119. package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -2
  120. package/dist/cjs/ion-radio_2.cjs.entry.js +5 -5
  121. package/dist/cjs/ion-range.cjs.entry.js +34 -87
  122. package/dist/cjs/ion-refresher_2.cjs.entry.js +5 -5
  123. package/dist/cjs/ion-reorder_2.cjs.entry.js +4 -4
  124. package/dist/cjs/ion-ripple-effect.cjs.entry.js +1 -1
  125. package/dist/cjs/ion-route_4.cjs.entry.js +3 -3
  126. package/dist/cjs/ion-searchbar.cjs.entry.js +5 -5
  127. package/dist/cjs/ion-segment_2.cjs.entry.js +6 -6
  128. package/dist/cjs/ion-select_3.cjs.entry.js +8 -8
  129. package/dist/cjs/ion-spinner.cjs.entry.js +1 -1
  130. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  131. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +5 -5
  132. package/dist/cjs/ion-tab_2.cjs.entry.js +5 -5
  133. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  134. package/dist/cjs/ion-textarea.cjs.entry.js +5 -5
  135. package/dist/cjs/ion-toast.cjs.entry.js +6 -6
  136. package/dist/cjs/ion-toggle.cjs.entry.js +4 -4
  137. package/dist/cjs/ionic.cjs.js +1 -1
  138. package/dist/cjs/{ios.transition-8e40c54e.js → ios.transition-523565cb.js} +5 -3
  139. package/dist/cjs/loader.cjs.js +1 -1
  140. package/dist/cjs/{md.transition-597a2479.js → md.transition-7e3cde49.js} +5 -3
  141. package/dist/cjs/{notch-controller-db0127c4.js → notch-controller-0b7bc5d8.js} +1 -1
  142. package/dist/cjs/{overlays-8f32c4ca.js → overlays-5a110990.js} +2 -2
  143. package/dist/cjs/{status-tap-b0bfea34.js → status-tap-8e84a16d.js} +2 -2
  144. package/dist/cjs/{swipe-back-f93021d8.js → swipe-back-766b4f1c.js} +1 -1
  145. package/dist/collection/components/checkbox/checkbox.ios.css +5 -65
  146. package/dist/collection/components/checkbox/checkbox.js +5 -118
  147. package/dist/collection/components/checkbox/checkbox.md.css +5 -64
  148. package/dist/collection/components/chip/chip.js +2 -2
  149. package/dist/collection/components/col/col.js +2 -2
  150. package/dist/collection/components/content/content.js +3 -3
  151. package/dist/collection/components/datetime/datetime.js +1 -1
  152. package/dist/collection/components/datetime-button/datetime-button.js +1 -1
  153. package/dist/collection/components/fab/fab.js +2 -2
  154. package/dist/collection/components/fab-button/fab-button.js +2 -2
  155. package/dist/collection/components/fab-list/fab-list.js +2 -2
  156. package/dist/collection/components/footer/footer.js +2 -2
  157. package/dist/collection/components/grid/grid.js +2 -2
  158. package/dist/collection/components/header/header.js +2 -2
  159. package/dist/collection/components/img/img.js +1 -1
  160. package/dist/collection/components/infinite-scroll/infinite-scroll.js +1 -1
  161. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +2 -2
  162. package/dist/collection/components/input/input.js +3 -3
  163. package/dist/collection/components/item-divider/item-divider.js +2 -2
  164. package/dist/collection/components/item-group/item-group.js +1 -1
  165. package/dist/collection/components/item-option/item-option.js +2 -2
  166. package/dist/collection/components/item-options/item-options.js +1 -1
  167. package/dist/collection/components/item-sliding/item-sliding.js +1 -1
  168. package/dist/collection/components/label/label.js +1 -1
  169. package/dist/collection/components/list/list.js +1 -1
  170. package/dist/collection/components/list-header/list-header.js +2 -2
  171. package/dist/collection/components/loading/loading.js +2 -2
  172. package/dist/collection/components/menu/menu.js +2 -2
  173. package/dist/collection/components/menu-button/menu-button.js +2 -2
  174. package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
  175. package/dist/collection/components/modal/modal.js +3 -3
  176. package/dist/collection/components/nav/nav.js +1 -1
  177. package/dist/collection/components/nav-link/nav-link.js +1 -1
  178. package/dist/collection/components/note/note.js +2 -2
  179. package/dist/collection/components/picker/picker.js +2 -2
  180. package/dist/collection/components/picker-column/picker-column.js +3 -3
  181. package/dist/collection/components/picker-column-option/picker-column-option.js +2 -2
  182. package/dist/collection/components/picker-legacy/picker.js +2 -2
  183. package/dist/collection/components/picker-legacy-column/picker-column.js +2 -2
  184. package/dist/collection/components/popover/popover.js +2 -2
  185. package/dist/collection/components/progress-bar/progress-bar.js +1 -1
  186. package/dist/collection/components/radio/radio.js +3 -3
  187. package/dist/collection/components/radio-group/radio-group.js +1 -1
  188. package/dist/collection/components/range/range.ios.css +0 -9
  189. package/dist/collection/components/range/range.js +30 -123
  190. package/dist/collection/components/range/range.md.css +3 -17
  191. package/dist/collection/components/range/test/a11y/range.e2e.js +2 -2
  192. package/dist/collection/components/range/test/range-events.e2e.js +1 -1
  193. package/dist/collection/components/range/test/range.spec.js +0 -12
  194. package/dist/collection/components/refresher/refresher.js +1 -1
  195. package/dist/collection/components/refresher-content/refresher-content.js +1 -1
  196. package/dist/collection/components/reorder/reorder.js +1 -1
  197. package/dist/collection/components/reorder-group/reorder-group.js +1 -1
  198. package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
  199. package/dist/collection/components/router-link/router-link.js +2 -2
  200. package/dist/collection/components/router-outlet/router-outlet.js +1 -1
  201. package/dist/collection/components/row/row.js +1 -1
  202. package/dist/collection/components/searchbar/searchbar.js +4 -4
  203. package/dist/collection/components/segment/segment.js +2 -2
  204. package/dist/collection/components/segment-button/segment-button.js +3 -3
  205. package/dist/collection/components/select/select.js +2 -2
  206. package/dist/collection/components/select-option/select-option.js +1 -1
  207. package/dist/collection/components/select-popover/select-popover.js +1 -1
  208. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
  209. package/dist/collection/components/spinner/spinner.js +1 -1
  210. package/dist/collection/components/split-pane/split-pane.js +2 -2
  211. package/dist/collection/components/tab/tab.js +2 -2
  212. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  213. package/dist/collection/components/tab-button/tab-button.js +2 -2
  214. package/dist/collection/components/tabs/tabs.js +1 -1
  215. package/dist/collection/components/text/text.js +2 -2
  216. package/dist/collection/components/textarea/textarea.js +2 -2
  217. package/dist/collection/components/thumbnail/thumbnail.js +1 -1
  218. package/dist/collection/components/title/title.js +2 -2
  219. package/dist/collection/components/toast/toast.js +2 -2
  220. package/dist/collection/components/toggle/toggle.js +3 -3
  221. package/dist/collection/components/toolbar/toolbar.js +2 -2
  222. package/dist/collection/utils/transition/index.js +107 -1
  223. package/dist/docs.json +6 -54
  224. package/dist/esm/{animation-60dbdd13.js → animation-2b6dd235.js} +1 -1
  225. package/dist/esm/{framework-delegate-fed7fe7c.js → framework-delegate-e8bffeeb.js} +1 -1
  226. package/dist/esm/{helpers-c0b9ca37.js → helpers-6f6a912f.js} +1 -1
  227. package/dist/esm/{index-48209844.js → index-02ec07ff.js} +2 -2
  228. package/dist/esm/{index-d64f34ea.js → index-1496c7cd.js} +1 -1
  229. package/dist/esm/{index-4b98143d.js → index-361e1f35.js} +110 -4
  230. package/dist/esm/{index-eb12ef92.js → index-c14233e6.js} +1 -1
  231. package/dist/esm/index.js +9 -9
  232. package/dist/esm/{input-shims-b90ca55f.js → input-shims-dd1a9a98.js} +2 -2
  233. package/dist/esm/{input.utils-6e9b0046.js → input.utils-5fee9f22.js} +1 -1
  234. package/dist/esm/ion-accordion_2.entry.js +1 -1
  235. package/dist/esm/ion-action-sheet.entry.js +4 -4
  236. package/dist/esm/ion-alert.entry.js +4 -4
  237. package/dist/esm/ion-app_8.entry.js +20 -20
  238. package/dist/esm/ion-avatar_3.entry.js +1 -1
  239. package/dist/esm/ion-back-button.entry.js +1 -1
  240. package/dist/esm/ion-breadcrumb_2.entry.js +1 -1
  241. package/dist/esm/ion-button_2.entry.js +1 -1
  242. package/dist/esm/ion-card_5.entry.js +1 -1
  243. package/dist/esm/ion-checkbox.entry.js +7 -75
  244. package/dist/esm/ion-chip.entry.js +2 -2
  245. package/dist/esm/ion-col_3.entry.js +5 -5
  246. package/dist/esm/ion-datetime-button.entry.js +2 -2
  247. package/dist/esm/ion-datetime_3.entry.js +9 -9
  248. package/dist/esm/ion-fab_3.entry.js +7 -7
  249. package/dist/esm/ion-img.entry.js +2 -2
  250. package/dist/esm/ion-infinite-scroll_2.entry.js +5 -5
  251. package/dist/esm/ion-input.entry.js +6 -6
  252. package/dist/esm/ion-item-option_3.entry.js +6 -6
  253. package/dist/esm/ion-item_8.entry.js +12 -12
  254. package/dist/esm/ion-loading.entry.js +6 -6
  255. package/dist/esm/ion-menu_3.entry.js +11 -11
  256. package/dist/esm/ion-modal.entry.js +9 -9
  257. package/dist/esm/ion-nav_2.entry.js +7 -6
  258. package/dist/esm/ion-picker-column-option.entry.js +3 -3
  259. package/dist/esm/ion-picker-column.entry.js +4 -4
  260. package/dist/esm/ion-picker.entry.js +3 -3
  261. package/dist/esm/ion-popover.entry.js +7 -7
  262. package/dist/esm/ion-progress-bar.entry.js +2 -2
  263. package/dist/esm/ion-radio_2.entry.js +5 -5
  264. package/dist/esm/ion-range.entry.js +35 -88
  265. package/dist/esm/ion-refresher_2.entry.js +5 -5
  266. package/dist/esm/ion-reorder_2.entry.js +4 -4
  267. package/dist/esm/ion-ripple-effect.entry.js +1 -1
  268. package/dist/esm/ion-route_4.entry.js +3 -3
  269. package/dist/esm/ion-searchbar.entry.js +5 -5
  270. package/dist/esm/ion-segment_2.entry.js +6 -6
  271. package/dist/esm/ion-select_3.entry.js +8 -8
  272. package/dist/esm/ion-spinner.entry.js +1 -1
  273. package/dist/esm/ion-split-pane.entry.js +2 -2
  274. package/dist/esm/ion-tab-bar_2.entry.js +5 -5
  275. package/dist/esm/ion-tab_2.entry.js +5 -5
  276. package/dist/esm/ion-text.entry.js +2 -2
  277. package/dist/esm/ion-textarea.entry.js +5 -5
  278. package/dist/esm/ion-toast.entry.js +6 -6
  279. package/dist/esm/ion-toggle.entry.js +4 -4
  280. package/dist/esm/ionic.js +1 -1
  281. package/dist/esm/{ios.transition-7ff7381d.js → ios.transition-8853da89.js} +5 -3
  282. package/dist/esm/loader.js +1 -1
  283. package/dist/esm/{md.transition-28a9a26b.js → md.transition-e0cb5ce0.js} +5 -3
  284. package/dist/esm/{notch-controller-15d281a4.js → notch-controller-164523aa.js} +1 -1
  285. package/dist/esm/{overlays-2d8629c6.js → overlays-0552e35b.js} +2 -2
  286. package/dist/esm/{status-tap-2b335fb7.js → status-tap-11f4b446.js} +2 -2
  287. package/dist/esm/{swipe-back-7f7620ca.js → swipe-back-8f9b1f85.js} +1 -1
  288. package/dist/esm-es5/{animation-60dbdd13.js → animation-2b6dd235.js} +1 -1
  289. package/dist/esm-es5/{framework-delegate-fed7fe7c.js → framework-delegate-e8bffeeb.js} +1 -1
  290. package/dist/esm-es5/{helpers-c0b9ca37.js → helpers-6f6a912f.js} +1 -1
  291. package/dist/esm-es5/{index-48209844.js → index-02ec07ff.js} +1 -1
  292. package/dist/esm-es5/{index-d64f34ea.js → index-1496c7cd.js} +1 -1
  293. package/dist/esm-es5/index-361e1f35.js +4 -0
  294. package/dist/esm-es5/{index-eb12ef92.js → index-c14233e6.js} +1 -1
  295. package/dist/esm-es5/index.js +1 -1
  296. package/dist/esm-es5/{input-shims-b90ca55f.js → input-shims-dd1a9a98.js} +1 -1
  297. package/dist/esm-es5/{input.utils-6e9b0046.js → input.utils-5fee9f22.js} +1 -1
  298. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  299. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  300. package/dist/esm-es5/ion-alert.entry.js +1 -1
  301. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  302. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  303. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  304. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  305. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  306. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  307. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  308. package/dist/esm-es5/ion-chip.entry.js +1 -1
  309. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  310. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  311. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  312. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  313. package/dist/esm-es5/ion-img.entry.js +1 -1
  314. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  315. package/dist/esm-es5/ion-input.entry.js +1 -1
  316. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  317. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  318. package/dist/esm-es5/ion-loading.entry.js +1 -1
  319. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  320. package/dist/esm-es5/ion-modal.entry.js +1 -1
  321. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  322. package/dist/esm-es5/ion-picker-column-option.entry.js +1 -1
  323. package/dist/esm-es5/ion-picker-column.entry.js +1 -1
  324. package/dist/esm-es5/ion-picker.entry.js +1 -1
  325. package/dist/esm-es5/ion-popover.entry.js +1 -1
  326. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  327. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  328. package/dist/esm-es5/ion-range.entry.js +1 -1
  329. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  330. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  331. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  332. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  333. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  334. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  335. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  336. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  337. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  338. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  339. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  340. package/dist/esm-es5/ion-text.entry.js +1 -1
  341. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  342. package/dist/esm-es5/ion-toast.entry.js +1 -1
  343. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  344. package/dist/esm-es5/ionic.js +1 -1
  345. package/dist/esm-es5/ios.transition-8853da89.js +4 -0
  346. package/dist/esm-es5/loader.js +1 -1
  347. package/dist/esm-es5/md.transition-e0cb5ce0.js +4 -0
  348. package/dist/esm-es5/{notch-controller-15d281a4.js → notch-controller-164523aa.js} +1 -1
  349. package/dist/esm-es5/{overlays-2d8629c6.js → overlays-0552e35b.js} +1 -1
  350. package/dist/esm-es5/{status-tap-2b335fb7.js → status-tap-11f4b446.js} +1 -1
  351. package/dist/esm-es5/swipe-back-8f9b1f85.js +4 -0
  352. package/dist/html.html-data.json +0 -8
  353. package/dist/ionic/index.esm.js +1 -1
  354. package/dist/ionic/ionic.esm.js +1 -1
  355. package/dist/ionic/{p-90fcbf72.js → p-012136be.js} +1 -1
  356. package/dist/ionic/{p-94be3ad7.js → p-023a5686.js} +1 -1
  357. package/dist/ionic/{p-6f5c2ebd.system.entry.js → p-04625eab.system.entry.js} +1 -1
  358. package/dist/ionic/{p-229d211f.entry.js → p-060ab03e.entry.js} +1 -1
  359. package/dist/ionic/{p-7e230af6.entry.js → p-06d1a11d.entry.js} +1 -1
  360. package/dist/ionic/{p-b46bdb73.system.entry.js → p-07d854da.system.entry.js} +1 -1
  361. package/dist/ionic/p-0b955124.system.js +1 -1
  362. package/dist/ionic/{p-c994c528.system.entry.js → p-0be9430d.system.entry.js} +1 -1
  363. package/dist/ionic/{p-6e8d0527.system.entry.js → p-0ccc3e49.system.entry.js} +1 -1
  364. package/dist/ionic/{p-02bf61be.entry.js → p-11cce714.entry.js} +1 -1
  365. package/dist/ionic/p-12c0fd06.system.entry.js +4 -0
  366. package/dist/ionic/{p-c80c7e90.system.js → p-17907fef.system.js} +1 -1
  367. package/dist/ionic/{p-ab782835.system.entry.js → p-19280211.system.entry.js} +1 -1
  368. package/dist/ionic/{p-814aa0b4.system.entry.js → p-1aa383c4.system.entry.js} +1 -1
  369. package/dist/ionic/{p-3db5b566.system.entry.js → p-1e68eb2d.system.entry.js} +2 -2
  370. package/dist/ionic/{p-2203ea50.system.entry.js → p-20a899d6.system.entry.js} +1 -1
  371. package/dist/ionic/p-217cfd24.entry.js +4 -0
  372. package/dist/ionic/{p-b8e465da.system.entry.js → p-285f83fb.system.entry.js} +1 -1
  373. package/dist/ionic/{p-dd79d499.system.entry.js → p-2a99d6a2.system.entry.js} +1 -1
  374. package/dist/ionic/p-316b88f6.system.entry.js +4 -0
  375. package/dist/ionic/{p-61ba2137.system.js → p-31aad1b8.system.js} +1 -1
  376. package/dist/ionic/{p-5642acf7.system.entry.js → p-32173330.system.entry.js} +1 -1
  377. package/dist/ionic/p-328ca978.system.js +4 -0
  378. package/dist/ionic/{p-aeb2bfc4.entry.js → p-32d31724.entry.js} +1 -1
  379. package/dist/ionic/{p-a6a15217.system.entry.js → p-381d53fe.system.entry.js} +1 -1
  380. package/dist/ionic/{p-3348d9b6.entry.js → p-3bce3d27.entry.js} +1 -1
  381. package/dist/ionic/{p-49cbf8ca.entry.js → p-3f06f873.entry.js} +1 -1
  382. package/dist/ionic/{p-fd8ced99.system.js → p-41fe384b.system.js} +1 -1
  383. package/dist/ionic/{p-e3c13a24.system.entry.js → p-4340cc94.system.entry.js} +1 -1
  384. package/dist/ionic/p-435cdd08.js +4 -0
  385. package/dist/ionic/{p-c8f93816.system.entry.js → p-437a54c3.system.entry.js} +1 -1
  386. package/dist/ionic/p-46cc595c.js +4 -0
  387. package/dist/ionic/{p-8aecc954.system.entry.js → p-487a1d0e.system.entry.js} +1 -1
  388. package/dist/ionic/{p-b8c685a7.system.js → p-492a99b4.system.js} +1 -1
  389. package/dist/ionic/p-4b4253b1.js +4 -0
  390. package/dist/ionic/{p-6ac84217.entry.js → p-4bd628c4.entry.js} +1 -1
  391. package/dist/ionic/p-4d957d64.system.js +4 -0
  392. package/dist/ionic/{p-2fbf97f4.system.entry.js → p-4eb51750.system.entry.js} +1 -1
  393. package/dist/ionic/{p-fd36799d.system.js → p-54325470.system.js} +1 -1
  394. package/dist/ionic/{p-ec4e0057.entry.js → p-56bb3ae7.entry.js} +1 -1
  395. package/dist/ionic/{p-c2938ad7.system.entry.js → p-582ff69e.system.entry.js} +1 -1
  396. package/dist/ionic/p-58cc3084.js +4 -0
  397. package/dist/ionic/{p-1d1ef635.entry.js → p-5998886f.entry.js} +1 -1
  398. package/dist/ionic/{p-6028d77a.entry.js → p-5ab08b08.entry.js} +1 -1
  399. package/dist/ionic/{p-f7d618b7.entry.js → p-5c439e4b.entry.js} +1 -1
  400. package/dist/ionic/{p-31c495c2.js → p-5d908b54.js} +1 -1
  401. package/dist/ionic/{p-9ff0b9d7.entry.js → p-5dde8d3f.entry.js} +1 -1
  402. package/dist/ionic/p-5fb5218b.js +4 -0
  403. package/dist/ionic/{p-37c33319.system.js → p-5fc74894.system.js} +1 -1
  404. package/dist/ionic/{p-6871553b.system.js → p-6754e438.system.js} +1 -1
  405. package/dist/ionic/{p-814129a1.system.entry.js → p-676d3d91.system.entry.js} +1 -1
  406. package/dist/ionic/{p-9c69a78d.system.entry.js → p-68197628.system.entry.js} +2 -2
  407. package/dist/ionic/p-683a7d40.entry.js +4 -0
  408. package/dist/ionic/{p-faea6b57.entry.js → p-68795208.entry.js} +1 -1
  409. package/dist/ionic/{p-46e78ed6.entry.js → p-6dbfb274.entry.js} +1 -1
  410. package/dist/ionic/p-70420d55.entry.js +4 -0
  411. package/dist/ionic/p-705e30ec.system.js +4 -0
  412. package/dist/ionic/{p-1dc24d13.system.entry.js → p-732bbcac.system.entry.js} +1 -1
  413. package/dist/ionic/{p-590ecff0.entry.js → p-7550b7cd.entry.js} +1 -1
  414. package/dist/ionic/{p-743030ee.entry.js → p-75def519.entry.js} +1 -1
  415. package/dist/ionic/{p-1c6bc252.system.entry.js → p-78f825e5.system.entry.js} +1 -1
  416. package/dist/ionic/{p-b5839dc2.js → p-7ab579e4.js} +1 -1
  417. package/dist/ionic/{p-2581c0b4.system.entry.js → p-7c5dc3c2.system.entry.js} +1 -1
  418. package/dist/ionic/{p-2aa9dbb1.entry.js → p-7f378a2a.entry.js} +1 -1
  419. package/dist/ionic/{p-ba7347c4.entry.js → p-85752011.entry.js} +1 -1
  420. package/dist/ionic/{p-73fef0c6.entry.js → p-8705efd9.entry.js} +1 -1
  421. package/dist/ionic/{p-ce1cf1e0.system.entry.js → p-874981aa.system.entry.js} +1 -1
  422. package/dist/ionic/{p-44ba1907.system.entry.js → p-878d5d3c.system.entry.js} +2 -2
  423. package/dist/ionic/p-8ae4d69b.entry.js +4 -0
  424. package/dist/ionic/{p-a3f572a7.js → p-8b213742.js} +1 -1
  425. package/dist/ionic/{p-158e5d3f.entry.js → p-8f68a594.entry.js} +1 -1
  426. package/dist/ionic/p-903305e2.entry.js +4 -0
  427. package/dist/ionic/{p-ef065e0d.system.entry.js → p-9451f3b1.system.entry.js} +2 -2
  428. package/dist/ionic/{p-f3c1bbcb.entry.js → p-945d28b0.entry.js} +1 -1
  429. package/dist/ionic/{p-364fd2ae.system.entry.js → p-95641c85.system.entry.js} +2 -2
  430. package/dist/ionic/{p-ffee8d11.system.entry.js → p-9705cb8a.system.entry.js} +1 -1
  431. package/dist/ionic/{p-50b79c48.entry.js → p-982d43c5.entry.js} +1 -1
  432. package/dist/ionic/{p-b8c4df21.entry.js → p-98d67336.entry.js} +1 -1
  433. package/dist/ionic/{p-41cd4e22.system.entry.js → p-990b12ed.system.entry.js} +1 -1
  434. package/dist/ionic/{p-aca86637.system.entry.js → p-990c4ffc.system.entry.js} +1 -1
  435. package/dist/ionic/{p-156299c1.system.entry.js → p-993e5fa8.system.entry.js} +1 -1
  436. package/dist/ionic/{p-9393a49f.js → p-9b502efc.js} +1 -1
  437. package/dist/ionic/{p-68211d11.entry.js → p-9d043a12.entry.js} +1 -1
  438. package/dist/ionic/{p-2b17eb06.entry.js → p-a1b7245f.entry.js} +1 -1
  439. package/dist/ionic/p-a1daeb4e.js +4 -0
  440. package/dist/ionic/{p-e1386ddc.system.entry.js → p-a5d14e60.system.entry.js} +1 -1
  441. package/dist/ionic/{p-115d351a.entry.js → p-a5dbbe9f.entry.js} +1 -1
  442. package/dist/ionic/{p-58e3ae88.system.entry.js → p-a9401d22.system.entry.js} +1 -1
  443. package/dist/ionic/{p-7f90cee1.entry.js → p-ad2a4aea.entry.js} +1 -1
  444. package/dist/ionic/{p-b253ad7f.js → p-ae965bbd.js} +1 -1
  445. package/dist/ionic/{p-a69ca607.system.entry.js → p-b0309b53.system.entry.js} +1 -1
  446. package/dist/ionic/{p-9d10df75.system.entry.js → p-b10f1da7.system.entry.js} +1 -1
  447. package/dist/ionic/{p-336ef060.entry.js → p-b6f61c31.entry.js} +1 -1
  448. package/dist/ionic/{p-9954f160.entry.js → p-baa8ce33.entry.js} +1 -1
  449. package/dist/ionic/{p-ab722722.system.entry.js → p-bb164152.system.entry.js} +1 -1
  450. package/dist/ionic/{p-416b7011.system.entry.js → p-bb3a4e1c.system.entry.js} +1 -1
  451. package/dist/ionic/{p-48346946.system.entry.js → p-bc5b1ee8.system.entry.js} +1 -1
  452. package/dist/ionic/{p-78aade1a.entry.js → p-beae3f98.entry.js} +1 -1
  453. package/dist/ionic/{p-8ddc00f7.js → p-c7361cf7.js} +1 -1
  454. package/dist/ionic/{p-6e7f5166.entry.js → p-c7691a0d.entry.js} +1 -1
  455. package/dist/ionic/{p-e88ae7f0.system.entry.js → p-ca169c31.system.entry.js} +1 -1
  456. package/dist/ionic/p-cd55d66b.system.js +4 -0
  457. package/dist/ionic/{p-e4162cae.entry.js → p-cdfd75f6.entry.js} +1 -1
  458. package/dist/ionic/{p-0bc978ee.entry.js → p-d59bebec.entry.js} +1 -1
  459. package/dist/ionic/{p-a53d820e.system.entry.js → p-d675b413.system.entry.js} +1 -1
  460. package/dist/ionic/{p-a0da38e6.system.js → p-d86520e8.system.js} +1 -1
  461. package/dist/ionic/{p-e2bb92ed.system.js → p-db501e46.system.js} +1 -1
  462. package/dist/ionic/p-dc0438ee.system.entry.js +4 -0
  463. package/dist/ionic/{p-23771339.entry.js → p-dd3026cb.entry.js} +1 -1
  464. package/dist/ionic/{p-dd2392f1.entry.js → p-df0033ae.entry.js} +1 -1
  465. package/dist/ionic/{p-6c48dd91.system.js → p-e2719d33.system.js} +1 -1
  466. package/dist/ionic/{p-b853d98f.system.entry.js → p-e30ca961.system.entry.js} +1 -1
  467. package/dist/ionic/{p-f83192d4.entry.js → p-e3184698.entry.js} +1 -1
  468. package/dist/ionic/p-ec1b948f.entry.js +4 -0
  469. package/dist/ionic/{p-0a90cc4d.system.entry.js → p-eddae453.system.entry.js} +1 -1
  470. package/dist/ionic/{p-77cf63b4.entry.js → p-f461bf4d.entry.js} +1 -1
  471. package/dist/ionic/{p-3c6f02cf.system.js → p-f4945d0c.system.js} +1 -1
  472. package/dist/ionic/p-f7dc1a03.entry.js +4 -0
  473. package/dist/ionic/{p-c2289cd1.js → p-f9680e94.js} +1 -1
  474. package/dist/ionic/{p-9a71fceb.system.entry.js → p-faa8c9fc.system.entry.js} +1 -1
  475. package/dist/ionic/{p-6b1b24df.entry.js → p-fb3ff439.entry.js} +1 -1
  476. package/dist/ionic/{p-62a3c609.system.js → p-fb62e0e9.system.js} +1 -1
  477. package/dist/ionic/{p-e45248be.entry.js → p-fc3aeb8f.entry.js} +1 -1
  478. package/dist/ionic/p-fd53465c.system.entry.js +4 -0
  479. package/dist/types/components/checkbox/checkbox.d.ts +1 -24
  480. package/dist/types/components/range/range.d.ts +1 -21
  481. package/dist/types/components.d.ts +0 -18
  482. package/dist/types/utils/config.d.ts +6 -0
  483. package/hydrate/index.js +532 -606
  484. package/package.json +1 -1
  485. package/components/form-controller.js +0 -64
  486. package/dist/cjs/form-controller-7b90d7b7.js +0 -66
  487. package/dist/collection/components/checkbox/test/legacy/basic/checkbox.e2e.js +0 -68
  488. package/dist/collection/components/checkbox/test/legacy/indeterminate/checkbox.e2e.js +0 -14
  489. package/dist/collection/components/range/test/legacy/a11y/range.e2e.js +0 -49
  490. package/dist/collection/components/range/test/legacy/active-bar-start/range.e2e.js +0 -14
  491. package/dist/collection/components/range/test/legacy/basic/range.e2e.js +0 -75
  492. package/dist/collection/components/range/test/legacy/range-events.e2e.js +0 -90
  493. package/dist/collection/components/range/test/legacy/scroll-target/range.e2e.js +0 -32
  494. package/dist/esm/form-controller-014aa89f.js +0 -64
  495. package/dist/esm-es5/form-controller-014aa89f.js +0 -4
  496. package/dist/esm-es5/index-4b98143d.js +0 -4
  497. package/dist/esm-es5/ios.transition-7ff7381d.js +0 -4
  498. package/dist/esm-es5/md.transition-28a9a26b.js +0 -4
  499. package/dist/esm-es5/swipe-back-7f7620ca.js +0 -4
  500. package/dist/ionic/p-0d25b742.js +0 -4
  501. package/dist/ionic/p-19385313.entry.js +0 -4
  502. package/dist/ionic/p-1b8684c2.system.entry.js +0 -4
  503. package/dist/ionic/p-25b08bc4.system.js +0 -4
  504. package/dist/ionic/p-2f6b3478.system.entry.js +0 -4
  505. package/dist/ionic/p-30d77a91.system.js +0 -4
  506. package/dist/ionic/p-3eb2da31.js +0 -4
  507. package/dist/ionic/p-4f777b5e.js +0 -4
  508. package/dist/ionic/p-54908979.entry.js +0 -4
  509. package/dist/ionic/p-7d6c9121.entry.js +0 -4
  510. package/dist/ionic/p-8f1ce253.js +0 -4
  511. package/dist/ionic/p-90149377.system.entry.js +0 -4
  512. package/dist/ionic/p-95861049.entry.js +0 -4
  513. package/dist/ionic/p-95c44e02.system.js +0 -4
  514. package/dist/ionic/p-b0ba9ea5.entry.js +0 -4
  515. package/dist/ionic/p-b17f058b.system.js +0 -4
  516. package/dist/ionic/p-b4d8fe47.js +0 -4
  517. package/dist/ionic/p-c5c3710c.js +0 -4
  518. package/dist/ionic/p-c6fef62b.system.js +0 -4
  519. package/dist/ionic/p-c858f685.js +0 -4
  520. package/dist/ionic/p-d2670dd3.entry.js +0 -4
  521. package/dist/ionic/p-d9310104.entry.js +0 -4
  522. package/dist/ionic/p-fe990e42.system.entry.js +0 -4
@@ -70,7 +70,7 @@ export class TabButton {
70
70
  rel,
71
71
  target,
72
72
  };
73
- return (h(Host, { key: '1a3c381bb81e1c0dfcdfb2e58e1fe74c2c7a56ac', onClick: this.onClick, onKeyup: this.onKeyUp, id: tab !== undefined ? `tab-button-${tab}` : null, class: {
73
+ return (h(Host, { key: 'b37743b20b93c27ffb0094b35545292533f9d30f', onClick: this.onClick, onKeyup: this.onKeyUp, id: tab !== undefined ? `tab-button-${tab}` : null, class: {
74
74
  [mode]: true,
75
75
  'tab-selected': selected,
76
76
  'tab-disabled': disabled,
@@ -82,7 +82,7 @@ export class TabButton {
82
82
  'ion-activatable': true,
83
83
  'ion-selectable': true,
84
84
  'ion-focusable': true,
85
- } }, h("a", Object.assign({ key: 'f12a66bc4f869a25d203a042757ecb331cb1598c' }, attrs, { class: "button-native", part: "native", role: "tab", "aria-selected": selected ? 'true' : null, "aria-disabled": disabled ? 'true' : null, tabindex: disabled ? '-1' : undefined }, inheritedAttributes), h("span", { key: 'e7a5bdec004ae80cc479911ad2aab1e4decff3bc', class: "button-inner" }, h("slot", { key: '07f1d1704fdf3ef45da4b698eaec1164b3fc0bf4' })), mode === 'md' && h("ion-ripple-effect", { type: "unbounded" }))));
85
+ } }, h("a", Object.assign({ key: '7dd2b3aaa96f64a8b7411730ed8b201466a97162' }, attrs, { class: "button-native", part: "native", role: "tab", "aria-selected": selected ? 'true' : null, "aria-disabled": disabled ? 'true' : null, tabindex: disabled ? '-1' : undefined }, inheritedAttributes), h("span", { key: 'cb328541793b6aa469d5d3bff662d2efa56dc977', class: "button-inner" }, h("slot", { key: '904a1b063f481ac86d5bea967a375addc9c96471' })), mode === 'md' && h("ion-ripple-effect", { type: "unbounded" }))));
86
86
  }
87
87
  static get is() { return "ion-tab-button"; }
88
88
  static get encapsulation() { return "shadow"; }
@@ -135,7 +135,7 @@ export class Tabs {
135
135
  return Array.from(this.el.querySelectorAll('ion-tab'));
136
136
  }
137
137
  render() {
138
- return (h(Host, { key: '27416d233c9b2b14498f7d77cd809b26a37da75b', onIonTabButtonClick: this.onTabClicked }, h("slot", { key: '19f237ba72e75f5bb7fbe35bee7e91a19566a724', name: "top" }), h("div", { key: '01143ca8a853eec525311c9f9fa521867f06f767', class: "tabs-inner" }, h("slot", { key: '790f8c417135a64e6ee4c8fa5ad309d6d0cd00de' })), h("slot", { key: '016959a52e07dcff0b86e7db0794e2d1747b3609', name: "bottom" })));
138
+ return (h(Host, { key: 'e2cac6a2e54514f31cfe65692e34e88d530b204f', onIonTabButtonClick: this.onTabClicked }, h("slot", { key: '53bc64f37aebb9a68c6e2db2c89ec6d39cd64bbd', name: "top" }), h("div", { key: '72f4f0ae53518631d6c1b6276da3f63147c28cfc', class: "tabs-inner" }, h("slot", { key: '79f1eece652cf00a3dd8359b68e68059816ff704' })), h("slot", { key: '3fbaf52447720ee14c7db06f2bf71a92093847f4', name: "bottom" })));
139
139
  }
140
140
  static get is() { return "ion-tabs"; }
141
141
  static get encapsulation() { return "shadow"; }
@@ -13,9 +13,9 @@ export class Text {
13
13
  }
14
14
  render() {
15
15
  const mode = getIonMode(this);
16
- return (h(Host, { key: '03c3424a63ff7c436d73f759c6e5a30133e1871f', class: createColorClasses(this.color, {
16
+ return (h(Host, { key: '9b5decc6dfca4fbaf0fe42696a9833ffee269a7d', class: createColorClasses(this.color, {
17
17
  [mode]: true,
18
- }) }, h("slot", { key: '0c6c873cf28a093dd45441dff7c3a5b382bc2a9b' })));
18
+ }) }, h("slot", { key: '5b822dcc0f6255819cec7626d0c0f7f9873aaab9' })));
19
19
  }
20
20
  static get is() { return "ion-text"; }
21
21
  static get encapsulation() { return "shadow"; }
@@ -359,7 +359,7 @@ export class Textarea {
359
359
  * TODO(FW-5592): Remove hasStartEndSlots condition
360
360
  */
361
361
  const labelShouldFloat = labelPlacement === 'stacked' || (labelPlacement === 'floating' && (hasValue || hasFocus || hasStartEndSlots));
362
- return (h(Host, { key: '1994b7a16356fc5fcaead042588ceaafcb80a894', class: createColorClasses(this.color, {
362
+ return (h(Host, { key: '3adbec7986ecb5a274ecf341b938432c3d04705a', class: createColorClasses(this.color, {
363
363
  [mode]: true,
364
364
  'has-value': hasValue,
365
365
  'has-focus': hasFocus,
@@ -368,7 +368,7 @@ export class Textarea {
368
368
  [`textarea-shape-${shape}`]: shape !== undefined,
369
369
  [`textarea-label-placement-${labelPlacement}`]: true,
370
370
  'textarea-disabled': disabled,
371
- }) }, h("label", { key: 'e7b8610e92ceebe19fd1d17c80134acb5d4f52d1', class: "textarea-wrapper", htmlFor: inputId }, this.renderLabelContainer(), h("div", { key: '522308f0d38c481b56ed99f43fc7c3747f9c1263', class: "textarea-wrapper-inner" }, h("div", { key: '0e65d62e91815cbb954d3a286813ed75b4dc1500', class: "start-slot-wrapper" }, h("slot", { key: 'e88f83ec1c62c7e9d97837dc9fdcc6f30be6dacc', name: "start" })), h("div", { key: '4d26c34c2468acfd962c6a4a73ad6057342aef44', class: "native-wrapper", ref: (el) => (this.textareaWrapper = el) }, h("textarea", Object.assign({ key: 'e6135e0a61fb5eb2b4f8f7da70ee49a28567c954', class: "native-textarea", ref: (el) => (this.nativeInput = el), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, minLength: this.minlength, maxLength: this.maxlength, name: this.name, placeholder: this.placeholder || '', readOnly: this.readonly, required: this.required, spellcheck: this.spellcheck, cols: this.cols, rows: this.rows, wrap: this.wrap, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeyDown }, this.inheritedAttributes), value)), h("div", { key: '1946c844cdbeefb989b1a4033050a851b367084f', class: "end-slot-wrapper" }, h("slot", { key: 'ac34fa1edaddb8b377310a2ce88fa651a6e73d3c', name: "end" }))), shouldRenderHighlight && h("div", { class: "textarea-highlight" })), this.renderBottomContent()));
371
+ }) }, h("label", { key: '9df12985193c4fa6a277b71bcac668d7e61f02ac', class: "textarea-wrapper", htmlFor: inputId }, this.renderLabelContainer(), h("div", { key: 'b39ac1d580d3bcaad8cc028e703960cd2277fa10', class: "textarea-wrapper-inner" }, h("div", { key: 'b2d6971c51683fe67121c4d0e4ac8e17723fa59d', class: "start-slot-wrapper" }, h("slot", { key: 'b229d482a4ff208858dffc6ff3a5ad661a2a7288', name: "start" })), h("div", { key: 'b2d2770afa7012f055463df6a302bed685b46107', class: "native-wrapper", ref: (el) => (this.textareaWrapper = el) }, h("textarea", Object.assign({ key: 'a18150f8d381e0569f6d71867451ce8176157521', class: "native-textarea", ref: (el) => (this.nativeInput = el), id: inputId, disabled: disabled, autoCapitalize: this.autocapitalize, autoFocus: this.autofocus, enterKeyHint: this.enterkeyhint, inputMode: this.inputmode, minLength: this.minlength, maxLength: this.maxlength, name: this.name, placeholder: this.placeholder || '', readOnly: this.readonly, required: this.required, spellcheck: this.spellcheck, cols: this.cols, rows: this.rows, wrap: this.wrap, onInput: this.onInput, onChange: this.onChange, onBlur: this.onBlur, onFocus: this.onFocus, onKeyDown: this.onKeyDown }, this.inheritedAttributes), value)), h("div", { key: 'f20f6e5c9b339cff4bdd7bffe59afd27b05ce8b9', class: "end-slot-wrapper" }, h("slot", { key: '64a10ebdb4a89ec1c3d34c29e8c9403d3d788f3b', name: "end" }))), shouldRenderHighlight && h("div", { class: "textarea-highlight" })), this.renderBottomContent()));
372
372
  }
373
373
  static get is() { return "ion-textarea"; }
374
374
  static get encapsulation() { return "scoped"; }
@@ -5,7 +5,7 @@ import { Host, h } from "@stencil/core";
5
5
  import { getIonMode } from "../../global/ionic-global";
6
6
  export class Thumbnail {
7
7
  render() {
8
- return (h(Host, { key: 'a68f3a4857f63f4cf06ec89932e9dc4c434d4a9b', class: getIonMode(this) }, h("slot", { key: 'fd132f56a3ba8928d32d952b27ceb342a0e59aed' })));
8
+ return (h(Host, { key: '68bac4e80f5d27131690fd20dfabff2618743206', class: getIonMode(this) }, h("slot", { key: '89f46a686288428391cdfaef3384824751ae3d05' })));
9
9
  }
10
10
  static get is() { return "ion-thumbnail"; }
11
11
  static get encapsulation() { return "shadow"; }
@@ -27,11 +27,11 @@ export class ToolbarTitle {
27
27
  render() {
28
28
  const mode = getIonMode(this);
29
29
  const size = this.getSize();
30
- return (h(Host, { key: 'bb4edf1ed209af94f6db20de9a7523c3500f6e32', class: createColorClasses(this.color, {
30
+ return (h(Host, { key: '53fb524f6763307bd0a1f077ada8e9ee82c865c0', class: createColorClasses(this.color, {
31
31
  [mode]: true,
32
32
  [`title-${size}`]: true,
33
33
  'title-rtl': document.dir === 'rtl',
34
- }) }, h("div", { key: 'd5857d84670a792aa74096a2efe03c3f17b98417', class: "toolbar-title" }, h("slot", { key: '596f3361b3182df48fbc14ef57c11702fac12cd1' }))));
34
+ }) }, h("div", { key: '5957214d78b666fd0ba988c3f4cc18368a92deac', class: "toolbar-title" }, h("slot", { key: '444b2019e079d5ed6decbfc4db488757fcf70094' }))));
35
35
  }
36
36
  static get is() { return "ion-title"; }
37
37
  static get encapsulation() { return "shadow"; }
@@ -384,9 +384,9 @@ export class Toast {
384
384
  if (layout === 'stacked' && startButtons.length > 0 && endButtons.length > 0) {
385
385
  printIonWarning('This toast is using start and end buttons with the stacked toast layout. We recommend following the best practice of using either start or end buttons with the stacked toast layout.', el);
386
386
  }
387
- return (h(Host, Object.assign({ key: '9575ee7d0195f7f2a95486d4b193beb58d966941', tabindex: "-1" }, this.htmlAttributes, { style: {
387
+ return (h(Host, Object.assign({ key: '883ac055d9c73336b8912bdf25e18d16cc6b81fe', tabindex: "-1" }, this.htmlAttributes, { style: {
388
388
  zIndex: `${60000 + this.overlayIndex}`,
389
- }, class: createColorClasses(this.color, Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'toast-translucent': this.translucent })), onIonToastWillDismiss: this.dispatchCancelHandler }), h("div", { key: 'cf152835fe8d8cc499214443b5fa23bf5ef076a1', class: wrapperClass }, h("div", { key: 'c0d331df574399e541fcefb3987777692be10e6c', class: "toast-container", part: "container" }, this.renderButtons(startButtons, 'start'), this.icon !== undefined && (h("ion-icon", { class: "toast-icon", part: "icon", icon: this.icon, lazy: false, "aria-hidden": "true" })), h("div", { key: '3d6ffa739935f5c92d81ccaccb673cb46b794472', class: "toast-content", role: "status", "aria-atomic": "true", "aria-live": "polite" }, !revealContentToScreenReader && header !== undefined && this.renderHeader('oldHeader', 'true'), !revealContentToScreenReader && message !== undefined && this.renderToastMessage('oldMessage', 'true'), revealContentToScreenReader && header !== undefined && this.renderHeader('header'), revealContentToScreenReader && message !== undefined && this.renderToastMessage('header')), this.renderButtons(endButtons, 'end')))));
389
+ }, class: createColorClasses(this.color, Object.assign(Object.assign({ [mode]: true }, getClassMap(this.cssClass)), { 'overlay-hidden': true, 'toast-translucent': this.translucent })), onIonToastWillDismiss: this.dispatchCancelHandler }), h("div", { key: 'b34cc9f7cfa69a8d9ce343686aa14d0d0c174e97', class: wrapperClass }, h("div", { key: '08ff305e319454116f24a4d354c50949905411d6', class: "toast-container", part: "container" }, this.renderButtons(startButtons, 'start'), this.icon !== undefined && (h("ion-icon", { class: "toast-icon", part: "icon", icon: this.icon, lazy: false, "aria-hidden": "true" })), h("div", { key: '854f71fc8a2ed078626011b07ee599cd17312a86', class: "toast-content", role: "status", "aria-atomic": "true", "aria-live": "polite" }, !revealContentToScreenReader && header !== undefined && this.renderHeader('oldHeader', 'true'), !revealContentToScreenReader && message !== undefined && this.renderToastMessage('oldMessage', 'true'), revealContentToScreenReader && header !== undefined && this.renderHeader('header'), revealContentToScreenReader && message !== undefined && this.renderToastMessage('header')), this.renderButtons(endButtons, 'end')))));
390
390
  }
391
391
  static get is() { return "ion-toast"; }
392
392
  static get encapsulation() { return "shadow"; }
@@ -157,7 +157,7 @@ export class Toggle {
157
157
  const value = this.getValue();
158
158
  const rtl = isRTL(el) ? 'rtl' : 'ltr';
159
159
  renderHiddenInput(true, el, name, checked ? value : '', disabled);
160
- return (h(Host, { key: '1ff490557ae9f695646fab73f4e8eb5479c39194', onClick: this.onClick, class: createColorClasses(color, {
160
+ return (h(Host, { key: '3c0acc5498682a610e7a6f095590ad79391e1ba4', onClick: this.onClick, class: createColorClasses(color, {
161
161
  [mode]: true,
162
162
  'in-item': hostContext('ion-item', el),
163
163
  'toggle-activated': activated,
@@ -167,10 +167,10 @@ export class Toggle {
167
167
  [`toggle-alignment-${alignment}`]: true,
168
168
  [`toggle-label-placement-${labelPlacement}`]: true,
169
169
  [`toggle-${rtl}`]: true,
170
- }) }, h("label", { key: '9ef2ac21e677ef8e06e6265578e84c65268e2f73', class: "toggle-wrapper" }, h("input", Object.assign({ key: 'c39eb29126454211a99be4fad6e421dcdebdae71', type: "checkbox", role: "switch", "aria-checked": `${checked}`, checked: checked, disabled: disabled, id: inputId, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl) }, this.inheritedAttributes)), h("div", { key: '379d33ef5714e1d69aa7dd4a6fd2576647e768ad', class: {
170
+ }) }, h("label", { key: '68133afe76d290ebcb8f05883a27875529f0bfff', class: "toggle-wrapper" }, h("input", Object.assign({ key: 'abd6aad2a3e62fbffb80d5c3dbdc57182bc97fab', type: "checkbox", role: "switch", "aria-checked": `${checked}`, checked: checked, disabled: disabled, id: inputId, onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), ref: (focusEl) => (this.focusEl = focusEl) }, this.inheritedAttributes)), h("div", { key: '8e70ddd2b4daada4bf16e85e56df9078116933f9', class: {
171
171
  'label-text-wrapper': true,
172
172
  'label-text-wrapper-hidden': !this.hasLabel,
173
- }, part: "label" }, h("slot", { key: '7dc7e14558361468d5d842e4235b18e09bdd3805' })), h("div", { key: 'ac1cd965163dff435d76db51c69b2285770a1ea0', class: "native-wrapper" }, this.renderToggleControl()))));
173
+ }, part: "label" }, h("slot", { key: 'eae25cdeefe1e6589f06b3a2568522e74cf44d66' })), h("div", { key: 'df9adddd1d8d73c8a23e1e91261d84c876ac5935', class: "native-wrapper" }, this.renderToggleControl()))));
174
174
  }
175
175
  static get is() { return "ion-toggle"; }
176
176
  static get encapsulation() { return "shadow"; }
@@ -62,10 +62,10 @@ export class Toolbar {
62
62
  this.childrenStyles.forEach((value) => {
63
63
  Object.assign(childStyles, value);
64
64
  });
65
- return (h(Host, { key: 'da75d7f5702b0afe180387f65ce9e7f9c8309ccc', class: Object.assign(Object.assign({}, childStyles), createColorClasses(this.color, {
65
+ return (h(Host, { key: 'f72d6a7ed20c88ba15d64050acfc20f320569862', class: Object.assign(Object.assign({}, childStyles), createColorClasses(this.color, {
66
66
  [mode]: true,
67
67
  'in-toolbar': hostContext('ion-toolbar', this.el),
68
- })) }, h("div", { key: '9c443426f88e2f9be54267ed47f4383c4dfeec7b', class: "toolbar-background" }), h("div", { key: '7c316762df2b307121d6dc596cb3cde9e38242dd', class: "toolbar-container" }, h("slot", { key: '96d29f9768ef136c5f60f69e669e19c44ef9cc05', name: "start" }), h("slot", { key: '5192bf9c9b4c4e4d2025a0e10708360514d42d2b', name: "secondary" }), h("div", { key: '7ba4288f9a2fb6c4e31b22ff9c385252a2827abf', class: "toolbar-content" }, h("slot", { key: 'ad4ffe0ef333456b1369f57952a367b786d9e148' })), h("slot", { key: '633735d0fb620d828e98b1c1eebfd0985a09db6c', name: "primary" }), h("slot", { key: '91af4b9c44e897ecc974a8cc2725791e1939367f', name: "end" }))));
68
+ })) }, h("div", { key: 'ccf18eea9756ca56ca828b05bd3f86cf8a32e24c', class: "toolbar-background" }), h("div", { key: '1fa699d8e17f57b42a52d47a1bdb793f2cbbfe5d', class: "toolbar-container" }, h("slot", { key: 'ef4d877bad0918eefdc67fa7aa258024a58d26ef', name: "start" }), h("slot", { key: '41858db7a8d58c9165952c9336731d621ec3c2b8', name: "secondary" }), h("div", { key: '577770b9346b48a0fa1412cbdbd9393d553d2286', class: "toolbar-content" }, h("slot", { key: 'ae47b29e1f7d2c3dde7a170c9737b48f075139c2' })), h("slot", { key: 'cfbf7879daf1a38fee434335abff936d8f3690e0', name: "primary" }), h("slot", { key: 'ed3a66248f43e0749f6aef9fb78ea4f5034c0774', name: "end" }))));
69
69
  }
70
70
  static get is() { return "ion-toolbar"; }
71
71
  static get encapsulation() { return "shadow"; }
@@ -2,7 +2,9 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { Build, writeTask } from "@stencil/core";
5
+ import { printIonWarning } from "../logging/index";
5
6
  import { LIFECYCLE_DID_ENTER, LIFECYCLE_DID_LEAVE, LIFECYCLE_WILL_ENTER, LIFECYCLE_WILL_LEAVE, } from "../../components/nav/constants";
7
+ import { config } from "../../global/config";
6
8
  import { raf } from "../helpers";
7
9
  const iosTransitionAnimation = () => import('./ios.transition');
8
10
  const mdTransitionAnimation = () => import('./md.transition');
@@ -24,9 +26,23 @@ export const transition = (opts) => {
24
26
  });
25
27
  });
26
28
  };
29
+ const LAST_FOCUS = 'ion-last-focus';
27
30
  const beforeTransition = (opts) => {
28
31
  const enteringEl = opts.enteringEl;
29
32
  const leavingEl = opts.leavingEl;
33
+ const focusManagerEnabled = config.get('experimentalFocusManagerPriority', false);
34
+ /**
35
+ * When going back to a previously visited page
36
+ * focus should typically be moved back to the
37
+ * element that was last focused when the user
38
+ * was on this view.
39
+ */
40
+ if (focusManagerEnabled) {
41
+ const activeEl = document.activeElement;
42
+ if (activeEl !== null && (leavingEl === null || leavingEl === void 0 ? void 0 : leavingEl.contains(activeEl))) {
43
+ activeEl.setAttribute(LAST_FOCUS, 'true');
44
+ }
45
+ }
30
46
  setZIndex(enteringEl, leavingEl, opts.direction);
31
47
  if (opts.showGoBack) {
32
48
  enteringEl.classList.add('can-go-back');
@@ -52,6 +68,24 @@ const runTransition = async (opts) => {
52
68
  const ani = animationBuilder && Build.isBrowser ? animation(animationBuilder, opts) : noAnimation(opts); // fast path for no animation
53
69
  return ani;
54
70
  };
71
+ /**
72
+ * Moves focus to a specified element.
73
+ * Note that we do not remove the tabindex
74
+ * because that can result in an unintentional
75
+ * blur. Non-focusables can't be focused, so the
76
+ * body will get focused again.
77
+ */
78
+ const moveFocus = (el) => {
79
+ el.tabIndex = -1;
80
+ el.focus();
81
+ };
82
+ /**
83
+ * Elements that are hidden using `display: none` should
84
+ * not be focused even if they are present in the DOM.
85
+ */
86
+ const isVisible = (el) => {
87
+ return el.offsetParent !== null;
88
+ };
55
89
  const afterTransition = (opts) => {
56
90
  const enteringEl = opts.enteringEl;
57
91
  const leavingEl = opts.leavingEl;
@@ -61,6 +95,69 @@ const afterTransition = (opts) => {
61
95
  leavingEl.classList.remove('ion-page-invisible');
62
96
  leavingEl.style.removeProperty('pointer-events');
63
97
  }
98
+ const focusManagerPriorities = config.get('experimentalFocusManagerPriority', false);
99
+ if (Array.isArray(focusManagerPriorities) && !enteringEl.contains(document.activeElement)) {
100
+ /**
101
+ * When going back to a previously visited view
102
+ * focus should always be moved back to the element
103
+ * that the user was last focused on when they were on this view.
104
+ */
105
+ const lastFocus = enteringEl.querySelector(`[${LAST_FOCUS}]`);
106
+ if (lastFocus && isVisible(lastFocus)) {
107
+ moveFocus(lastFocus);
108
+ return;
109
+ }
110
+ for (const priority of focusManagerPriorities) {
111
+ switch (priority) {
112
+ case 'content':
113
+ /**
114
+ * If no level one heading exists then we should at least focus the
115
+ * header so focus starts at the top of the page.
116
+ */
117
+ const content = enteringEl.querySelector('main, [role="main"]');
118
+ if (content && isVisible(content)) {
119
+ moveFocus(content);
120
+ return;
121
+ }
122
+ break;
123
+ case 'heading':
124
+ /**
125
+ * If no last focus exists then we should prefer to focus
126
+ * level one headings. We do not prioritize the header yet
127
+ * because the header can have non-title elements such as
128
+ * a back button which is not necessarily helpful
129
+ * to focus first.
130
+ */
131
+ const headingOne = enteringEl.querySelector('h1, [role="heading"][aria-level="1"]');
132
+ if (headingOne && isVisible(headingOne)) {
133
+ moveFocus(headingOne);
134
+ return;
135
+ }
136
+ break;
137
+ case 'banner':
138
+ /**
139
+ * If no level one heading exists then we should at least focus the
140
+ * header so focus starts at the top of the page.
141
+ */
142
+ const header = enteringEl.querySelector('header, [role="banner"]');
143
+ if (header && isVisible(header)) {
144
+ moveFocus(header);
145
+ return;
146
+ }
147
+ break;
148
+ default:
149
+ printIonWarning(`Unrecognized focus manager priority value ${priority}`);
150
+ break;
151
+ }
152
+ }
153
+ /**
154
+ * If there is no header then focus the page
155
+ * so focus at least moves to the correct view.
156
+ * The browser will then determine where within the
157
+ * page to move focus to.
158
+ */
159
+ moveFocus(enteringEl);
160
+ }
64
161
  };
65
162
  const getAnimationBuilder = async (opts) => {
66
163
  if (!opts.leavingEl || !opts.animated || opts.duration === 0) {
@@ -93,7 +190,16 @@ const animation = async (animationBuilder, opts) => {
93
190
  const noAnimation = async (opts) => {
94
191
  const enteringEl = opts.enteringEl;
95
192
  const leavingEl = opts.leavingEl;
96
- await waitForReady(opts, false);
193
+ const focusManagerEnabled = config.get('experimentalFocusManagerPriority', false);
194
+ /**
195
+ * If the focus manager is enabled then we
196
+ * need to wait for Ionic components to be rendered
197
+ * otherwise the correct component to focus may not
198
+ * be focused because it is still hidden.
199
+ * However, if the manager is not enabled
200
+ * then there's no need to wait since there will be no animation.
201
+ */
202
+ await waitForReady(opts, focusManagerEnabled);
97
203
  fireWillEvents(enteringEl, leavingEl);
98
204
  fireDidEvents(enteringEl, leavingEl);
99
205
  return {
package/dist/docs.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2024-02-14T17:41:16",
2
+ "timestamp": "2024-02-15T22:39:30",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.12.0",
@@ -5199,30 +5199,6 @@
5199
5199
  "optional": false,
5200
5200
  "required": false
5201
5201
  },
5202
- {
5203
- "name": "legacy",
5204
- "type": "boolean | undefined",
5205
- "complexType": {
5206
- "original": "boolean",
5207
- "resolved": "boolean | undefined",
5208
- "references": {}
5209
- },
5210
- "mutable": false,
5211
- "attr": "legacy",
5212
- "reflectToAttr": false,
5213
- "docs": "Set the `legacy` property to `true` to forcibly use the legacy form control markup.\nIonic will only opt checkboxes in to the modern form markup when they are\nusing either the `aria-label` attribute or have text in the default slot. As a result,\nthe `legacy` property should only be used as an escape hatch when you want to\navoid this automatic opt-in behavior.\n\nNote that this property will be removed in an upcoming major release\nof Ionic, and all form components will be opted-in to using the modern form markup.",
5214
- "docsTags": [],
5215
- "values": [
5216
- {
5217
- "type": "boolean"
5218
- },
5219
- {
5220
- "type": "undefined"
5221
- }
5222
- ],
5223
- "optional": true,
5224
- "required": false
5225
- },
5226
5202
  {
5227
5203
  "name": "mode",
5228
5204
  "type": "\"ios\" | \"md\"",
@@ -20631,30 +20607,6 @@
20631
20607
  "optional": false,
20632
20608
  "required": false
20633
20609
  },
20634
- {
20635
- "name": "legacy",
20636
- "type": "boolean | undefined",
20637
- "complexType": {
20638
- "original": "boolean",
20639
- "resolved": "boolean | undefined",
20640
- "references": {}
20641
- },
20642
- "mutable": false,
20643
- "attr": "legacy",
20644
- "reflectToAttr": false,
20645
- "docs": "Set the `legacy` property to `true` to forcibly use the legacy form control markup.\nIonic will only opt components in to the modern form markup when they are\nusing either the `aria-label` attribute or the `label` property. As a result,\nthe `legacy` property should only be used as an escape hatch when you want to\navoid this automatic opt-in behavior.\nNote that this property will be removed in an upcoming major release\nof Ionic, and all form components will be opted-in to using the modern form markup.",
20646
- "docsTags": [],
20647
- "values": [
20648
- {
20649
- "type": "boolean"
20650
- },
20651
- {
20652
- "type": "undefined"
20653
- }
20654
- ],
20655
- "optional": true,
20656
- "required": false
20657
- },
20658
20610
  {
20659
20611
  "name": "max",
20660
20612
  "type": "number",
@@ -29635,11 +29587,6 @@
29635
29587
  "docstring": "",
29636
29588
  "path": "src/components/checkbox/checkbox-interface.ts"
29637
29589
  },
29638
- "src/interface.d.ts::StyleEventDetail": {
29639
- "declaration": "export interface StyleEventDetail {\n [styleName: string]: boolean;\n}",
29640
- "docstring": "",
29641
- "path": "src/interface.d.ts"
29642
- },
29643
29590
  "src/components/content/content-interface.ts::ScrollBaseDetail": {
29644
29591
  "declaration": "export interface ScrollBaseDetail {\n isScrolling: boolean;\n}",
29645
29592
  "docstring": "",
@@ -29680,6 +29627,11 @@
29680
29627
  "docstring": "",
29681
29628
  "path": "src/components/datetime/datetime-interface.ts"
29682
29629
  },
29630
+ "src/interface.d.ts::StyleEventDetail": {
29631
+ "declaration": "export interface StyleEventDetail {\n [styleName: string]: boolean;\n}",
29632
+ "docstring": "",
29633
+ "path": "src/interface.d.ts"
29634
+ },
29683
29635
  "src/components/picker-column/picker-column-interfaces.ts::PickerColumnChangeEventDetail": {
29684
29636
  "declaration": "export interface PickerColumnChangeEventDetail {\n value: PickerColumnValue;\n}",
29685
29637
  "docstring": "",
@@ -2,7 +2,7 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { w as win } from './index-a5d50daf.js';
5
- import { r as raf } from './helpers-c0b9ca37.js';
5
+ import { r as raf } from './helpers-6f6a912f.js';
6
6
 
7
7
  let animationPrefix;
8
8
  /**
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { c as componentOnReady } from './helpers-c0b9ca37.js';
4
+ import { c as componentOnReady } from './helpers-6f6a912f.js';
5
5
 
6
6
  // TODO(FW-2832): types
7
7
  const attachComponent = async (delegate, container, component, cssClasses, componentProps, inline) => {
@@ -415,4 +415,4 @@ const shallowEqualStringMap = (map1, map2) => {
415
415
  return true;
416
416
  };
417
417
 
418
- export { addEventListener as a, removeEventListener as b, componentOnReady as c, renderHiddenInput as d, getAriaLabel as e, focusElement as f, getElementRoot as g, findItemLabel as h, inheritAriaAttributes as i, debounceEvent as j, inheritAttributes as k, clamp as l, hasLazyBuild as m, hasShadowDom as n, assert as o, isEndSide as p, debounce as q, raf as r, shallowEqualStringMap as s, transitionEndAsync as t, now as u, pointerCoord as v };
418
+ export { addEventListener as a, removeEventListener as b, componentOnReady as c, renderHiddenInput as d, debounceEvent as e, focusElement as f, getElementRoot as g, inheritAttributes as h, inheritAriaAttributes as i, clamp as j, hasLazyBuild as k, getAriaLabel as l, hasShadowDom as m, assert as n, isEndSide as o, debounce as p, now as q, raf as r, shallowEqualStringMap as s, transitionEndAsync as t, pointerCoord as u };
@@ -4,9 +4,9 @@
4
4
  import { d as doc } from './index-a5d50daf.js';
5
5
  import { MENU_BACK_BUTTON_PRIORITY } from './hardware-back-button-f42b9c80.js';
6
6
  import { p as printIonWarning } from './index-9b0d46f4.js';
7
- import { c as componentOnReady } from './helpers-c0b9ca37.js';
7
+ import { c as componentOnReady } from './helpers-6f6a912f.js';
8
8
  import { b as getIonMode } from './ionic-global-778b7863.js';
9
- import { c as createAnimation } from './animation-60dbdd13.js';
9
+ import { c as createAnimation } from './animation-2b6dd235.js';
10
10
 
11
11
  /**
12
12
  * baseAnimation
@@ -2,7 +2,7 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { d as doc } from './index-a5d50daf.js';
5
- import { u as now, v as pointerCoord } from './helpers-c0b9ca37.js';
5
+ import { q as now, u as pointerCoord } from './helpers-6f6a912f.js';
6
6
 
7
7
  const startTapClick = (config) => {
8
8
  if (doc === undefined) {
@@ -2,7 +2,9 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { w as writeTask, B as Build } from './index-73881b51.js';
5
- import { r as raf } from './helpers-c0b9ca37.js';
5
+ import { p as printIonWarning } from './index-9b0d46f4.js';
6
+ import { c as config } from './ionic-global-778b7863.js';
7
+ import { r as raf } from './helpers-6f6a912f.js';
6
8
 
7
9
  const LIFECYCLE_WILL_ENTER = 'ionViewWillEnter';
8
10
  const LIFECYCLE_DID_ENTER = 'ionViewDidEnter';
@@ -10,8 +12,8 @@ const LIFECYCLE_WILL_LEAVE = 'ionViewWillLeave';
10
12
  const LIFECYCLE_DID_LEAVE = 'ionViewDidLeave';
11
13
  const LIFECYCLE_WILL_UNLOAD = 'ionViewWillUnload';
12
14
 
13
- const iosTransitionAnimation = () => import('./ios.transition-7ff7381d.js');
14
- const mdTransitionAnimation = () => import('./md.transition-28a9a26b.js');
15
+ const iosTransitionAnimation = () => import('./ios.transition-8853da89.js');
16
+ const mdTransitionAnimation = () => import('./md.transition-e0cb5ce0.js');
15
17
  // TODO(FW-2832): types
16
18
  const transition = (opts) => {
17
19
  return new Promise((resolve, reject) => {
@@ -30,9 +32,23 @@ const transition = (opts) => {
30
32
  });
31
33
  });
32
34
  };
35
+ const LAST_FOCUS = 'ion-last-focus';
33
36
  const beforeTransition = (opts) => {
34
37
  const enteringEl = opts.enteringEl;
35
38
  const leavingEl = opts.leavingEl;
39
+ const focusManagerEnabled = config.get('experimentalFocusManagerPriority', false);
40
+ /**
41
+ * When going back to a previously visited page
42
+ * focus should typically be moved back to the
43
+ * element that was last focused when the user
44
+ * was on this view.
45
+ */
46
+ if (focusManagerEnabled) {
47
+ const activeEl = document.activeElement;
48
+ if (activeEl !== null && (leavingEl === null || leavingEl === void 0 ? void 0 : leavingEl.contains(activeEl))) {
49
+ activeEl.setAttribute(LAST_FOCUS, 'true');
50
+ }
51
+ }
36
52
  setZIndex(enteringEl, leavingEl, opts.direction);
37
53
  if (opts.showGoBack) {
38
54
  enteringEl.classList.add('can-go-back');
@@ -58,6 +74,24 @@ const runTransition = async (opts) => {
58
74
  const ani = animationBuilder && Build.isBrowser ? animation(animationBuilder, opts) : noAnimation(opts); // fast path for no animation
59
75
  return ani;
60
76
  };
77
+ /**
78
+ * Moves focus to a specified element.
79
+ * Note that we do not remove the tabindex
80
+ * because that can result in an unintentional
81
+ * blur. Non-focusables can't be focused, so the
82
+ * body will get focused again.
83
+ */
84
+ const moveFocus = (el) => {
85
+ el.tabIndex = -1;
86
+ el.focus();
87
+ };
88
+ /**
89
+ * Elements that are hidden using `display: none` should
90
+ * not be focused even if they are present in the DOM.
91
+ */
92
+ const isVisible = (el) => {
93
+ return el.offsetParent !== null;
94
+ };
61
95
  const afterTransition = (opts) => {
62
96
  const enteringEl = opts.enteringEl;
63
97
  const leavingEl = opts.leavingEl;
@@ -67,6 +101,69 @@ const afterTransition = (opts) => {
67
101
  leavingEl.classList.remove('ion-page-invisible');
68
102
  leavingEl.style.removeProperty('pointer-events');
69
103
  }
104
+ const focusManagerPriorities = config.get('experimentalFocusManagerPriority', false);
105
+ if (Array.isArray(focusManagerPriorities) && !enteringEl.contains(document.activeElement)) {
106
+ /**
107
+ * When going back to a previously visited view
108
+ * focus should always be moved back to the element
109
+ * that the user was last focused on when they were on this view.
110
+ */
111
+ const lastFocus = enteringEl.querySelector(`[${LAST_FOCUS}]`);
112
+ if (lastFocus && isVisible(lastFocus)) {
113
+ moveFocus(lastFocus);
114
+ return;
115
+ }
116
+ for (const priority of focusManagerPriorities) {
117
+ switch (priority) {
118
+ case 'content':
119
+ /**
120
+ * If no level one heading exists then we should at least focus the
121
+ * header so focus starts at the top of the page.
122
+ */
123
+ const content = enteringEl.querySelector('main, [role="main"]');
124
+ if (content && isVisible(content)) {
125
+ moveFocus(content);
126
+ return;
127
+ }
128
+ break;
129
+ case 'heading':
130
+ /**
131
+ * If no last focus exists then we should prefer to focus
132
+ * level one headings. We do not prioritize the header yet
133
+ * because the header can have non-title elements such as
134
+ * a back button which is not necessarily helpful
135
+ * to focus first.
136
+ */
137
+ const headingOne = enteringEl.querySelector('h1, [role="heading"][aria-level="1"]');
138
+ if (headingOne && isVisible(headingOne)) {
139
+ moveFocus(headingOne);
140
+ return;
141
+ }
142
+ break;
143
+ case 'banner':
144
+ /**
145
+ * If no level one heading exists then we should at least focus the
146
+ * header so focus starts at the top of the page.
147
+ */
148
+ const header = enteringEl.querySelector('header, [role="banner"]');
149
+ if (header && isVisible(header)) {
150
+ moveFocus(header);
151
+ return;
152
+ }
153
+ break;
154
+ default:
155
+ printIonWarning(`Unrecognized focus manager priority value ${priority}`);
156
+ break;
157
+ }
158
+ }
159
+ /**
160
+ * If there is no header then focus the page
161
+ * so focus at least moves to the correct view.
162
+ * The browser will then determine where within the
163
+ * page to move focus to.
164
+ */
165
+ moveFocus(enteringEl);
166
+ }
70
167
  };
71
168
  const getAnimationBuilder = async (opts) => {
72
169
  if (!opts.leavingEl || !opts.animated || opts.duration === 0) {
@@ -99,7 +196,16 @@ const animation = async (animationBuilder, opts) => {
99
196
  const noAnimation = async (opts) => {
100
197
  const enteringEl = opts.enteringEl;
101
198
  const leavingEl = opts.leavingEl;
102
- await waitForReady(opts, false);
199
+ const focusManagerEnabled = config.get('experimentalFocusManagerPriority', false);
200
+ /**
201
+ * If the focus manager is enabled then we
202
+ * need to wait for Ionic components to be rendered
203
+ * otherwise the correct component to focus may not
204
+ * be focused because it is still hidden.
205
+ * However, if the manager is not enabled
206
+ * then there's no need to wait since there will be no animation.
207
+ */
208
+ await waitForReady(opts, focusManagerEnabled);
103
209
  fireWillEvents(enteringEl, leavingEl);
104
210
  fireDidEvents(enteringEl, leavingEl);
105
211
  return {
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { c as componentOnReady } from './helpers-c0b9ca37.js';
4
+ import { c as componentOnReady } from './helpers-6f6a912f.js';
5
5
  import { b as printRequiredElementError } from './index-9b0d46f4.js';
6
6
 
7
7
  const ION_CONTENT_TAG_NAME = 'ION-CONTENT';