@ionic/core 7.4.4-dev.11699472805.157e2476 → 7.4.4-dev.11699475060.1eee2115

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 (404) hide show
  1. package/components/alert.js +0 -8
  2. package/components/checkbox.js +3 -0
  3. package/components/data.js +22 -96
  4. package/components/haptic.js +0 -1
  5. package/components/icon.js +5 -9
  6. package/components/index.js +0 -1
  7. package/components/index4.js +19 -26
  8. package/components/index7.js +1 -1
  9. package/components/ion-datetime-button.js +4 -4
  10. package/components/ion-datetime.js +3 -3
  11. package/components/ion-menu.js +12 -0
  12. package/components/ion-nav.js +0 -1
  13. package/components/ion-router.js +0 -3
  14. package/components/ion-select.js +32 -18
  15. package/components/ion-toast.js +13 -157
  16. package/components/ion-toggle.js +3 -0
  17. package/components/ios.transition.js +0 -1
  18. package/components/overlays.js +0 -1
  19. package/components/radio-group.js +1 -1
  20. package/components/radio.js +4 -1
  21. package/dist/cjs/{app-globals-84b6a756.js → app-globals-fe1ad535.js} +1 -1
  22. package/dist/cjs/{button-active-f2147e85.js → button-active-0932cee9.js} +2 -2
  23. package/dist/cjs/{data-c8d21093.js → data-db832785.js} +22 -96
  24. package/dist/cjs/{haptic-678abc9f.js → haptic-c5f6b4d5.js} +0 -1
  25. package/dist/cjs/{index-14a4821e.js → index-305a23dc.js} +95 -51
  26. package/dist/cjs/{index-33d2809c.js → index-d3568232.js} +3 -3
  27. package/dist/cjs/{index-d8f84c5a.js → index-d8d1fc0b.js} +1 -1
  28. package/dist/cjs/{index-2e612e35.js → index-f94cbab1.js} +20 -27
  29. package/dist/cjs/index.cjs.js +8 -10
  30. package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
  31. package/dist/cjs/ion-action-sheet.cjs.entry.js +5 -5
  32. package/dist/cjs/ion-alert.cjs.entry.js +5 -13
  33. package/dist/cjs/ion-app_8.cjs.entry.js +4 -4
  34. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
  35. package/dist/cjs/ion-back-button.cjs.entry.js +3 -3
  36. package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
  37. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +3 -3
  38. package/dist/cjs/ion-button_2.cjs.entry.js +7 -11
  39. package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
  40. package/dist/cjs/ion-checkbox.cjs.entry.js +5 -2
  41. package/dist/cjs/ion-chip.cjs.entry.js +2 -2
  42. package/dist/cjs/ion-col_3.cjs.entry.js +2 -2
  43. package/dist/cjs/ion-datetime-button.cjs.entry.js +6 -6
  44. package/dist/cjs/ion-datetime_3.cjs.entry.js +8 -8
  45. package/dist/cjs/ion-fab_3.cjs.entry.js +3 -3
  46. package/dist/cjs/ion-img.cjs.entry.js +2 -2
  47. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +2 -2
  48. package/dist/cjs/ion-input.cjs.entry.js +3 -3
  49. package/dist/cjs/ion-item-option_3.cjs.entry.js +2 -2
  50. package/dist/cjs/ion-item_8.cjs.entry.js +3 -3
  51. package/dist/cjs/ion-loading.cjs.entry.js +3 -3
  52. package/dist/cjs/ion-menu_3.cjs.entry.js +19 -8
  53. package/dist/cjs/ion-modal.cjs.entry.js +4 -4
  54. package/dist/cjs/ion-nav_2.cjs.entry.js +3 -4
  55. package/dist/cjs/ion-picker-column-internal.cjs.entry.js +3 -3
  56. package/dist/cjs/ion-picker-internal.cjs.entry.js +1 -1
  57. package/dist/cjs/ion-popover.cjs.entry.js +4 -4
  58. package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -2
  59. package/dist/cjs/ion-radio_2.cjs.entry.js +7 -4
  60. package/dist/cjs/ion-range.cjs.entry.js +2 -2
  61. package/dist/cjs/ion-refresher_2.cjs.entry.js +4 -4
  62. package/dist/cjs/ion-reorder_2.cjs.entry.js +4 -4
  63. package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
  64. package/dist/cjs/ion-route_4.cjs.entry.js +2 -5
  65. package/dist/cjs/ion-searchbar.cjs.entry.js +3 -3
  66. package/dist/cjs/ion-segment_2.cjs.entry.js +2 -2
  67. package/dist/cjs/ion-select_3.cjs.entry.js +36 -22
  68. package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
  69. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  70. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +2 -2
  71. package/dist/cjs/ion-tab_2.cjs.entry.js +1 -1
  72. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  73. package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
  74. package/dist/cjs/ion-toast.cjs.entry.js +33 -175
  75. package/dist/cjs/ion-toggle.cjs.entry.js +7 -4
  76. package/dist/cjs/{ionic-global-a71608df.js → ionic-global-fb752503.js} +1 -1
  77. package/dist/cjs/ionic.cjs.js +5 -5
  78. package/dist/cjs/{ios.transition-8ddf91e6.js → ios.transition-7d688757.js} +2 -3
  79. package/dist/cjs/loader.cjs.js +4 -4
  80. package/dist/cjs/{md.transition-44ff8566.js → md.transition-d77d3c2e.js} +2 -2
  81. package/dist/cjs/{overlays-9cab437c.js → overlays-7e1a08fa.js} +1 -2
  82. package/dist/cjs/{status-tap-8c22e017.js → status-tap-778e8054.js} +1 -1
  83. package/dist/collection/collection-manifest.json +1 -1
  84. package/dist/collection/components/alert/alert.js +0 -8
  85. package/dist/collection/components/alert/test/a11y/alert.e2e.js +0 -11
  86. package/dist/collection/components/checkbox/checkbox.js +3 -0
  87. package/dist/collection/components/datetime/datetime.js +6 -12
  88. package/dist/collection/components/datetime/test/hour-cycle/datetime.e2e.js +0 -14
  89. package/dist/collection/components/datetime/utils/data.js +7 -33
  90. package/dist/collection/components/datetime/utils/format.js +10 -27
  91. package/dist/collection/components/datetime/utils/helpers.js +5 -37
  92. package/dist/collection/components/datetime-button/datetime-button.js +4 -4
  93. package/dist/collection/components/menu/menu.js +12 -0
  94. package/dist/collection/components/nav/nav.js +0 -1
  95. package/dist/collection/components/radio/radio.js +4 -1
  96. package/dist/collection/components/radio-group/radio-group.js +1 -1
  97. package/dist/collection/components/router/router.js +0 -2
  98. package/dist/collection/components/router/utils/path.js +0 -1
  99. package/dist/collection/components/select/select.js +32 -18
  100. package/dist/collection/components/select/test/disabled/select.e2e.js +30 -0
  101. package/dist/collection/components/toast/animations/ios.enter.js +3 -2
  102. package/dist/collection/components/toast/animations/ios.leave.js +3 -2
  103. package/dist/collection/components/toast/animations/md.enter.js +3 -2
  104. package/dist/collection/components/toast/toast.js +9 -98
  105. package/dist/collection/components/toggle/toggle.js +3 -0
  106. package/dist/collection/index.js +0 -1
  107. package/dist/collection/utils/menu-controller/index.js +19 -26
  108. package/dist/collection/utils/native/haptic.js +0 -1
  109. package/dist/collection/utils/overlays.js +0 -1
  110. package/dist/collection/utils/transition/ios.transition.js +0 -1
  111. package/dist/docs.json +11 -74
  112. package/dist/esm/{app-globals-df292a32.js → app-globals-ec816a70.js} +1 -1
  113. package/dist/esm/{button-active-3dd473a1.js → button-active-5136c12d.js} +2 -2
  114. package/dist/esm/{data-44d9e816.js → data-009dbf15.js} +22 -96
  115. package/dist/esm/{haptic-1243b917.js → haptic-6447af60.js} +0 -1
  116. package/dist/esm/{index-6e10cd02.js → index-641aeeed.js} +3 -3
  117. package/dist/esm/{index-cb894020.js → index-b49b173c.js} +95 -51
  118. package/dist/esm/{index-c3e624b7.js → index-d78b533e.js} +20 -27
  119. package/dist/esm/{index-504b03f0.js → index-ecfc2c9f.js} +1 -1
  120. package/dist/esm/index.js +8 -9
  121. package/dist/esm/ion-accordion_2.entry.js +3 -3
  122. package/dist/esm/ion-action-sheet.entry.js +5 -5
  123. package/dist/esm/ion-alert.entry.js +5 -13
  124. package/dist/esm/ion-app_8.entry.js +4 -4
  125. package/dist/esm/ion-avatar_3.entry.js +2 -2
  126. package/dist/esm/ion-back-button.entry.js +3 -3
  127. package/dist/esm/ion-backdrop.entry.js +2 -2
  128. package/dist/esm/ion-breadcrumb_2.entry.js +3 -3
  129. package/dist/esm/ion-button_2.entry.js +7 -11
  130. package/dist/esm/ion-card_5.entry.js +2 -2
  131. package/dist/esm/ion-checkbox.entry.js +5 -2
  132. package/dist/esm/ion-chip.entry.js +2 -2
  133. package/dist/esm/ion-col_3.entry.js +2 -2
  134. package/dist/esm/ion-datetime-button.entry.js +6 -6
  135. package/dist/esm/ion-datetime_3.entry.js +8 -8
  136. package/dist/esm/ion-fab_3.entry.js +3 -3
  137. package/dist/esm/ion-img.entry.js +2 -2
  138. package/dist/esm/ion-infinite-scroll_2.entry.js +2 -2
  139. package/dist/esm/ion-input.entry.js +3 -3
  140. package/dist/esm/ion-item-option_3.entry.js +2 -2
  141. package/dist/esm/ion-item_8.entry.js +3 -3
  142. package/dist/esm/ion-loading.entry.js +3 -3
  143. package/dist/esm/ion-menu_3.entry.js +18 -7
  144. package/dist/esm/ion-modal.entry.js +4 -4
  145. package/dist/esm/ion-nav_2.entry.js +3 -4
  146. package/dist/esm/ion-picker-column-internal.entry.js +3 -3
  147. package/dist/esm/ion-picker-internal.entry.js +1 -1
  148. package/dist/esm/ion-popover.entry.js +4 -4
  149. package/dist/esm/ion-progress-bar.entry.js +2 -2
  150. package/dist/esm/ion-radio_2.entry.js +7 -4
  151. package/dist/esm/ion-range.entry.js +2 -2
  152. package/dist/esm/ion-refresher_2.entry.js +4 -4
  153. package/dist/esm/ion-reorder_2.entry.js +4 -4
  154. package/dist/esm/ion-ripple-effect.entry.js +2 -2
  155. package/dist/esm/ion-route_4.entry.js +2 -5
  156. package/dist/esm/ion-searchbar.entry.js +3 -3
  157. package/dist/esm/ion-segment_2.entry.js +2 -2
  158. package/dist/esm/ion-select_3.entry.js +36 -22
  159. package/dist/esm/ion-spinner.entry.js +2 -2
  160. package/dist/esm/ion-split-pane.entry.js +2 -2
  161. package/dist/esm/ion-tab-bar_2.entry.js +2 -2
  162. package/dist/esm/ion-tab_2.entry.js +1 -1
  163. package/dist/esm/ion-text.entry.js +2 -2
  164. package/dist/esm/ion-textarea.entry.js +2 -2
  165. package/dist/esm/ion-toast.entry.js +17 -159
  166. package/dist/esm/ion-toggle.entry.js +7 -4
  167. package/dist/esm/{ionic-global-63a8d8c9.js → ionic-global-246ca78f.js} +1 -1
  168. package/dist/esm/ionic.js +6 -6
  169. package/dist/esm/{ios.transition-6707a3a1.js → ios.transition-04c9a97a.js} +2 -3
  170. package/dist/esm/loader.js +5 -5
  171. package/dist/esm/{md.transition-957964fd.js → md.transition-67a8aabd.js} +2 -2
  172. package/dist/esm/{overlays-753933fc.js → overlays-2fa52617.js} +1 -2
  173. package/dist/esm/{status-tap-73e982b6.js → status-tap-9aeeaca5.js} +1 -1
  174. package/dist/esm-es5/app-globals-ec816a70.js +4 -0
  175. package/dist/esm-es5/{button-active-3dd473a1.js → button-active-5136c12d.js} +1 -1
  176. package/dist/esm-es5/data-009dbf15.js +4 -0
  177. package/dist/esm-es5/{index-6e10cd02.js → index-641aeeed.js} +1 -1
  178. package/dist/esm-es5/index-b49b173c.js +5 -0
  179. package/dist/esm-es5/index-d78b533e.js +4 -0
  180. package/dist/esm-es5/index.js +1 -1
  181. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  182. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  183. package/dist/esm-es5/ion-alert.entry.js +1 -1
  184. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  185. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  186. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  187. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  188. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  189. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  190. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  191. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  192. package/dist/esm-es5/ion-chip.entry.js +1 -1
  193. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  194. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  195. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  196. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  197. package/dist/esm-es5/ion-img.entry.js +1 -1
  198. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  199. package/dist/esm-es5/ion-input.entry.js +1 -1
  200. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  201. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  202. package/dist/esm-es5/ion-loading.entry.js +1 -1
  203. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  204. package/dist/esm-es5/ion-modal.entry.js +1 -1
  205. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  206. package/dist/esm-es5/ion-picker-column-internal.entry.js +1 -1
  207. package/dist/esm-es5/ion-picker-internal.entry.js +1 -1
  208. package/dist/esm-es5/ion-popover.entry.js +1 -1
  209. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  210. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  211. package/dist/esm-es5/ion-range.entry.js +1 -1
  212. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  213. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  214. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  215. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  216. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  217. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  218. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  219. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  220. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  221. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  222. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  223. package/dist/esm-es5/ion-text.entry.js +1 -1
  224. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  225. package/dist/esm-es5/ion-toast.entry.js +1 -1
  226. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  227. package/dist/esm-es5/{ionic-global-63a8d8c9.js → ionic-global-246ca78f.js} +1 -1
  228. package/dist/esm-es5/ionic.js +1 -1
  229. package/dist/esm-es5/{ios.transition-6707a3a1.js → ios.transition-04c9a97a.js} +1 -1
  230. package/dist/esm-es5/loader.js +1 -1
  231. package/dist/esm-es5/{md.transition-957964fd.js → md.transition-67a8aabd.js} +1 -1
  232. package/dist/esm-es5/{overlays-753933fc.js → overlays-2fa52617.js} +1 -1
  233. package/dist/esm-es5/{status-tap-73e982b6.js → status-tap-9aeeaca5.js} +1 -1
  234. package/dist/html.html-data.json +1 -11
  235. package/dist/ionic/index.esm.js +1 -1
  236. package/dist/ionic/ionic.esm.js +1 -1
  237. package/dist/ionic/ionic.js +1 -1
  238. package/dist/ionic/{p-9dbc208c.js → p-02a4e81a.js} +1 -1
  239. package/dist/ionic/{p-89e3d112.system.entry.js → p-03c381ec.system.entry.js} +1 -1
  240. package/dist/ionic/{p-44fa0a61.entry.js → p-048f1ebe.entry.js} +1 -1
  241. package/dist/ionic/{p-b7ac706d.entry.js → p-04e7c8fd.entry.js} +1 -1
  242. package/dist/ionic/p-05ae600a.system.js +4 -0
  243. package/dist/ionic/p-06ac429a.js +5 -0
  244. package/dist/ionic/p-0c37546b.system.entry.js +4 -0
  245. package/dist/ionic/{p-5b5311f6.system.entry.js → p-0d74acfb.system.entry.js} +1 -1
  246. package/dist/ionic/{p-7887ac7a.entry.js → p-108f9d49.entry.js} +1 -1
  247. package/dist/ionic/{p-ccdd595c.system.entry.js → p-117cd69f.system.entry.js} +1 -1
  248. package/dist/ionic/{p-e263255c.system.entry.js → p-1289b3b5.system.entry.js} +1 -1
  249. package/dist/ionic/p-13d6e57a.js +4 -0
  250. package/dist/ionic/{p-da024961.entry.js → p-164b0e76.entry.js} +1 -1
  251. package/dist/ionic/{p-8957b1de.system.entry.js → p-170e9de0.system.entry.js} +1 -1
  252. package/dist/ionic/{p-8a289322.js → p-181b7c2a.js} +1 -1
  253. package/dist/ionic/p-1c82e9ff.js +4 -0
  254. package/dist/ionic/{p-48159bfc.system.entry.js → p-1d0aa82f.system.entry.js} +1 -1
  255. package/dist/ionic/{p-9201a4d3.entry.js → p-1ecba429.entry.js} +1 -1
  256. package/dist/ionic/{p-3db27dec.entry.js → p-1f81b5be.entry.js} +1 -1
  257. package/dist/ionic/{p-db8b267a.system.entry.js → p-238f0ac5.system.entry.js} +1 -1
  258. package/dist/ionic/{p-0d3d44e7.entry.js → p-257cf0b7.entry.js} +1 -1
  259. package/dist/ionic/{p-37fc0d22.system.entry.js → p-2784263e.system.entry.js} +1 -1
  260. package/dist/ionic/{p-8f36cde3.system.entry.js → p-29073efe.system.entry.js} +1 -1
  261. package/dist/ionic/p-29e3a9bb.entry.js +4 -0
  262. package/dist/ionic/{p-3634b770.system.entry.js → p-32717950.system.entry.js} +1 -1
  263. package/dist/ionic/p-32d364f0.entry.js +4 -0
  264. package/dist/ionic/{p-c09e1da9.system.entry.js → p-33a8349a.system.entry.js} +1 -1
  265. package/dist/ionic/{p-4555335a.entry.js → p-35818410.entry.js} +1 -1
  266. package/dist/ionic/{p-b4f14d9e.entry.js → p-35eb1d95.entry.js} +1 -1
  267. package/dist/ionic/p-37448ac1.entry.js +4 -0
  268. package/dist/ionic/{p-3e6b0330.system.entry.js → p-38ccfd71.system.entry.js} +1 -1
  269. package/dist/ionic/{p-6f3099b6.system.entry.js → p-3a58e3a4.system.entry.js} +1 -1
  270. package/dist/ionic/{p-c0c794dd.entry.js → p-3c2c6fce.entry.js} +1 -1
  271. package/dist/ionic/{p-9a6f6789.system.entry.js → p-3f3da911.system.entry.js} +1 -1
  272. package/dist/ionic/p-44ef7224.system.js +4 -0
  273. package/dist/ionic/{p-efd574eb.system.entry.js → p-45f5c8ba.system.entry.js} +1 -1
  274. package/dist/ionic/{p-bc7420cc.entry.js → p-4b8db805.entry.js} +1 -1
  275. package/dist/ionic/{p-ec451ef7.system.entry.js → p-4bb26b01.system.entry.js} +1 -1
  276. package/dist/ionic/{p-6a92db9d.system.entry.js → p-4d6ac0fe.system.entry.js} +1 -1
  277. package/dist/ionic/p-4dd96c8d.entry.js +4 -0
  278. package/dist/ionic/{p-0793ebfd.entry.js → p-4e6e43c1.entry.js} +1 -1
  279. package/dist/ionic/{p-e0f66356.system.js → p-51269f3b.system.js} +1 -1
  280. package/dist/ionic/{p-14fd96a2.system.entry.js → p-5403baaa.system.entry.js} +1 -1
  281. package/dist/ionic/{p-abfd1f2e.system.entry.js → p-54f6cd27.system.entry.js} +1 -1
  282. package/dist/ionic/{p-b27772bf.entry.js → p-55d3a9b2.entry.js} +1 -1
  283. package/dist/ionic/{p-10fcb3a3.system.entry.js → p-576e6d0f.system.entry.js} +1 -1
  284. package/dist/ionic/{p-6a3c14d1.entry.js → p-5b32b053.entry.js} +1 -1
  285. package/dist/ionic/{p-b79eb3cd.entry.js → p-5b976d70.entry.js} +1 -1
  286. package/dist/ionic/p-5bc5008c.entry.js +4 -0
  287. package/dist/ionic/p-5c3e72a8.system.js +4 -0
  288. package/dist/ionic/p-5c651aab.system.entry.js +4 -0
  289. package/dist/ionic/{p-ae57449e.system.entry.js → p-5cd791b3.system.entry.js} +1 -1
  290. package/dist/ionic/p-5ece7025.system.js +4 -0
  291. package/dist/ionic/{p-70441a5b.entry.js → p-5efb899f.entry.js} +1 -1
  292. package/dist/ionic/{p-6c7d61b9.system.entry.js → p-6129af0a.system.entry.js} +1 -1
  293. package/dist/ionic/{p-26fbffd4.system.js → p-629aa3fd.system.js} +1 -1
  294. package/dist/ionic/{p-ee8881d0.js → p-63505fbb.js} +1 -1
  295. package/dist/ionic/{p-ef4408d6.entry.js → p-64e20cd9.entry.js} +1 -1
  296. package/dist/ionic/p-65a5761f.js +4 -0
  297. package/dist/ionic/{p-416d7f8d.system.entry.js → p-6ac3e877.system.entry.js} +1 -1
  298. package/dist/ionic/{p-82c72668.system.js → p-6ba7fad7.system.js} +1 -1
  299. package/dist/ionic/{p-92d72ad8.entry.js → p-6ea2e653.entry.js} +1 -1
  300. package/dist/ionic/{p-a9b13f18.system.entry.js → p-6f8a95a3.system.entry.js} +1 -1
  301. package/dist/ionic/{p-a60cff26.system.entry.js → p-6fb80ef3.system.entry.js} +1 -1
  302. package/dist/ionic/{p-b4c0e9ee.entry.js → p-706a0391.entry.js} +1 -1
  303. package/dist/ionic/{p-f48af9da.system.entry.js → p-72aea40e.system.entry.js} +1 -1
  304. package/dist/ionic/p-73ed9a91.js +4 -0
  305. package/dist/ionic/{p-7a590a28.js → p-76378400.js} +1 -1
  306. package/dist/ionic/p-7cfd253c.js +4 -0
  307. package/dist/ionic/{p-3dce88bf.entry.js → p-818b2e75.entry.js} +1 -1
  308. package/dist/ionic/p-8297652e.entry.js +4 -0
  309. package/dist/ionic/{p-b9e2aede.entry.js → p-839276d4.entry.js} +1 -1
  310. package/dist/ionic/{p-b4daca17.system.entry.js → p-8a2801f1.system.entry.js} +1 -1
  311. package/dist/ionic/{p-00cf2d6c.js → p-8e24ebbc.js} +1 -1
  312. package/dist/ionic/{p-037e2738.system.entry.js → p-8ee012cb.system.entry.js} +1 -1
  313. package/dist/ionic/{p-d8eeabae.system.entry.js → p-908720f3.system.entry.js} +1 -1
  314. package/dist/ionic/{p-03f7e3cc.entry.js → p-914ac0fc.entry.js} +1 -1
  315. package/dist/ionic/{p-88a1a4fe.system.entry.js → p-9173418c.system.entry.js} +1 -1
  316. package/dist/ionic/{p-9f9efb31.system.js → p-939e0fa1.system.js} +1 -1
  317. package/dist/ionic/{p-e6d2cca2.system.entry.js → p-95b14c73.system.entry.js} +1 -1
  318. package/dist/ionic/{p-ca655a7c.entry.js → p-96ba8eac.entry.js} +1 -1
  319. package/dist/ionic/{p-dcfea01f.system.entry.js → p-99dfa53f.system.entry.js} +1 -1
  320. package/dist/ionic/{p-9736406a.system.entry.js → p-9b4a77fc.system.entry.js} +1 -1
  321. package/dist/ionic/{p-50d83224.entry.js → p-a04bfada.entry.js} +1 -1
  322. package/dist/ionic/p-a18ec02b.entry.js +4 -0
  323. package/dist/ionic/{p-2acea831.entry.js → p-a7eec917.entry.js} +1 -1
  324. package/dist/ionic/{p-00f709ca.system.entry.js → p-b109a3d7.system.entry.js} +1 -1
  325. package/dist/ionic/{p-fbc7995a.system.entry.js → p-b3690814.system.entry.js} +1 -1
  326. package/dist/ionic/{p-534a1cbc.system.js → p-b3c68723.system.js} +1 -1
  327. package/dist/ionic/{p-4e76e29a.system.entry.js → p-b61a2fa0.system.entry.js} +1 -1
  328. package/dist/ionic/{p-f37d6823.system.entry.js → p-beb864e4.system.entry.js} +1 -1
  329. package/dist/ionic/{p-b25a96b7.system.js → p-c3efbcf5.system.js} +1 -1
  330. package/dist/ionic/{p-a157df46.system.entry.js → p-c48fc95d.system.entry.js} +1 -1
  331. package/dist/ionic/{p-5c24c115.system.js → p-c49672d8.system.js} +1 -1
  332. package/dist/ionic/{p-57743e20.entry.js → p-c4a5de01.entry.js} +1 -1
  333. package/dist/ionic/{p-7520e873.system.entry.js → p-c7428627.system.entry.js} +1 -1
  334. package/dist/ionic/{p-84549737.system.entry.js → p-cf0c93e3.system.entry.js} +1 -1
  335. package/dist/ionic/{p-7b15d413.entry.js → p-d35217be.entry.js} +1 -1
  336. package/dist/ionic/{p-5cafe439.system.entry.js → p-d55c9f92.system.entry.js} +1 -1
  337. package/dist/ionic/{p-06756f31.entry.js → p-d7b8d224.entry.js} +1 -1
  338. package/dist/ionic/{p-9b796813.entry.js → p-d89d0de0.entry.js} +1 -1
  339. package/dist/ionic/{p-fa06c407.entry.js → p-db1a1e00.entry.js} +1 -1
  340. package/dist/ionic/{p-0023e6eb.entry.js → p-deb6ddad.entry.js} +1 -1
  341. package/dist/ionic/{p-90012797.system.js → p-df5fe0be.system.js} +1 -1
  342. package/dist/ionic/{p-d90f0779.system.entry.js → p-e0f52215.system.entry.js} +1 -1
  343. package/dist/ionic/{p-a99e7e72.entry.js → p-e1ac688a.entry.js} +1 -1
  344. package/dist/ionic/{p-d2a278b1.entry.js → p-e2fd0895.entry.js} +1 -1
  345. package/dist/ionic/{p-9e91c83f.system.entry.js → p-eab10949.system.entry.js} +1 -1
  346. package/dist/ionic/{p-ac32f6ce.entry.js → p-eac263dd.entry.js} +1 -1
  347. package/dist/ionic/{p-0459db58.entry.js → p-ec9052a4.entry.js} +1 -1
  348. package/dist/ionic/{p-a7361c85.entry.js → p-f588e951.entry.js} +1 -1
  349. package/dist/ionic/{p-60dee335.entry.js → p-f623aa6d.entry.js} +1 -1
  350. package/dist/ionic/{p-ae8121f5.system.entry.js → p-f960fd84.system.entry.js} +1 -1
  351. package/dist/ionic/p-fbcb157b.system.js +4 -0
  352. package/dist/ionic/{p-4c20879c.entry.js → p-fccfe602.entry.js} +1 -1
  353. package/dist/ionic/{p-3bf7c0dc.entry.js → p-fcf47f80.entry.js} +1 -1
  354. package/dist/node_modules/ionicons/dist/collection/components/icon/icon.css +4 -46
  355. package/dist/types/components/datetime/datetime-interface.d.ts +0 -1
  356. package/dist/types/components/datetime/datetime.d.ts +2 -2
  357. package/dist/types/components/datetime/utils/data.d.ts +3 -3
  358. package/dist/types/components/datetime/utils/format.d.ts +3 -3
  359. package/dist/types/components/datetime/utils/helpers.d.ts +1 -15
  360. package/dist/types/components/menu/menu-interface.d.ts +1 -0
  361. package/dist/types/components/toast/animations/ios.enter.d.ts +1 -2
  362. package/dist/types/components/toast/animations/ios.leave.d.ts +2 -2
  363. package/dist/types/components/toast/animations/md.enter.d.ts +1 -2
  364. package/dist/types/components/toast/toast-interface.d.ts +0 -11
  365. package/dist/types/components/toast/toast.d.ts +1 -21
  366. package/dist/types/components.d.ts +8 -16
  367. package/dist/types/index.d.ts +0 -1
  368. package/dist/types/utils/menu-controller/index.d.ts +2 -1
  369. package/hydrate/index.js +158 -359
  370. package/package.json +7 -6
  371. package/dist/collection/components/menu/test/multiple/menu.e2e.js +0 -60
  372. package/dist/collection/components/toast/animations/utils.js +0 -85
  373. package/dist/collection/components/toast/test/position-anchor/toast.e2e.js +0 -45
  374. package/dist/esm-es5/app-globals-df292a32.js +0 -4
  375. package/dist/esm-es5/data-44d9e816.js +0 -4
  376. package/dist/esm-es5/index-c3e624b7.js +0 -4
  377. package/dist/esm-es5/index-cb894020.js +0 -5
  378. package/dist/ionic/p-0779a5c8.system.js +0 -4
  379. package/dist/ionic/p-0d198537.js +0 -4
  380. package/dist/ionic/p-100ea813.system.entry.js +0 -4
  381. package/dist/ionic/p-17240d90.js +0 -4
  382. package/dist/ionic/p-1d9b39f3.js +0 -4
  383. package/dist/ionic/p-2b47b2ce.entry.js +0 -4
  384. package/dist/ionic/p-32b5f10e.entry.js +0 -4
  385. package/dist/ionic/p-469d6a98.entry.js +0 -4
  386. package/dist/ionic/p-50125c8c.js +0 -4
  387. package/dist/ionic/p-520789c2.js +0 -4
  388. package/dist/ionic/p-68b405cc.entry.js +0 -4
  389. package/dist/ionic/p-6cfcb294.system.js +0 -4
  390. package/dist/ionic/p-73eba881.system.js +0 -4
  391. package/dist/ionic/p-903c36fe.js +0 -5
  392. package/dist/ionic/p-a4ce3b06.system.entry.js +0 -4
  393. package/dist/ionic/p-aae05032.entry.js +0 -4
  394. package/dist/ionic/p-b8c3f071.system.js +0 -4
  395. package/dist/ionic/p-d0d59328.entry.js +0 -4
  396. package/dist/ionic/p-d1df86ff.entry.js +0 -4
  397. package/dist/ionic/p-ec25d547.system.js +0 -4
  398. package/dist/types/components/toast/animations/utils.d.ts +0 -18
  399. /package/dist/esm-es5/{haptic-1243b917.js → haptic-6447af60.js} +0 -0
  400. /package/dist/esm-es5/{index-504b03f0.js → index-ecfc2c9f.js} +0 -0
  401. /package/dist/ionic/{p-15bae383.js → p-0a87858b.js} +0 -0
  402. /package/dist/ionic/{p-b4b4bb29.system.js → p-14d7b7e2.system.js} +0 -0
  403. /package/dist/ionic/{p-3f919368.system.js → p-8985b268.system.js} +0 -0
  404. /package/dist/ionic/{p-b923f3d7.js → p-bb6f38ed.js} +0 -0
@@ -672,7 +672,6 @@ export class Nav {
672
672
  : undefined;
673
673
  const mode = getIonMode(this);
674
674
  const enteringEl = enteringView.element;
675
- // eslint-disable-next-line @typescript-eslint/prefer-optional-chain
676
675
  const leavingEl = leavingView && leavingView.element;
677
676
  const animationOpts = Object.assign(Object.assign({ mode, showGoBack: this.canGoBackSync(enteringView), baseEl: this.el, progressCallback, animated: this.animated && config.getBoolean('animated', true), enteringEl,
678
677
  leavingEl }, opts), { animationBuilder: opts.animationBuilder || this.animation || config.get('navAnimation') });
@@ -27,7 +27,10 @@ export class Radio {
27
27
  }
28
28
  };
29
29
  this.onClick = () => {
30
- const { radioGroup, checked } = this;
30
+ const { radioGroup, checked, disabled } = this;
31
+ if (disabled) {
32
+ return;
33
+ }
31
34
  /**
32
35
  * The legacy control uses a native input inside
33
36
  * of the radio host, so we can set this.checked
@@ -33,7 +33,7 @@ export class RadioGroup {
33
33
  * using the `name` attribute.
34
34
  */
35
35
  const selectedRadio = ev.target && ev.target.closest('ion-radio');
36
- if (selectedRadio) {
36
+ if (selectedRadio && selectedRadio.disabled === false) {
37
37
  const currentValue = this.value;
38
38
  const newValue = selectedRadio.value;
39
39
  if (newValue !== currentValue) {
@@ -215,14 +215,12 @@ export class Router {
215
215
  }
216
216
  const routes = readRoutes(this.el);
217
217
  const fromChain = findChainForSegments(from, routes);
218
- // eslint-disable-next-line @typescript-eslint/prefer-optional-chain
219
218
  const beforeLeaveHook = fromChain && fromChain[fromChain.length - 1].beforeLeave;
220
219
  const canLeave = beforeLeaveHook ? await beforeLeaveHook() : true;
221
220
  if (canLeave === false || typeof canLeave === 'object') {
222
221
  return canLeave;
223
222
  }
224
223
  const toChain = findChainForSegments(to, routes);
225
- // eslint-disable-next-line @typescript-eslint/prefer-optional-chain
226
224
  const beforeEnterHook = toChain && toChain[toChain.length - 1].beforeEnter;
227
225
  return beforeEnterHook ? beforeEnterHook() : true;
228
226
  }
@@ -38,7 +38,6 @@ export const chainToSegments = (chain) => {
38
38
  for (const route of chain) {
39
39
  for (const segment of route.segments) {
40
40
  if (segment[0] === ':') {
41
- // eslint-disable-next-line @typescript-eslint/prefer-optional-chain
42
41
  const param = route.params && route.params[segment.slice(1)];
43
42
  if (!param) {
44
43
  return null;
@@ -119,25 +119,39 @@ export class Select {
119
119
  await overlay.present();
120
120
  // focus selected option for popovers
121
121
  if (this.interface === 'popover') {
122
- let indexOfSelected = this.childOpts.map((o) => o.value).indexOf(this.value);
123
- indexOfSelected = indexOfSelected > -1 ? indexOfSelected : 0; // default to first option if nothing selected
124
- const selectedItem = overlay.querySelector(`.select-interface-option:nth-child(${indexOfSelected + 1})`);
125
- if (selectedItem) {
126
- focusElement(selectedItem);
122
+ const indexOfSelected = this.childOpts.map((o) => o.value).indexOf(this.value);
123
+ if (indexOfSelected > -1) {
124
+ const selectedItem = overlay.querySelector(`.select-interface-option:nth-child(${indexOfSelected + 1})`);
125
+ if (selectedItem) {
126
+ focusElement(selectedItem);
127
+ /**
128
+ * Browsers such as Firefox do not
129
+ * correctly delegate focus when manually
130
+ * focusing an element with delegatesFocus.
131
+ * We work around this by manually focusing
132
+ * the interactive element.
133
+ * ion-radio and ion-checkbox are the only
134
+ * elements that ion-select-popover uses, so
135
+ * we only need to worry about those two components
136
+ * when focusing.
137
+ */
138
+ const interactiveEl = selectedItem.querySelector('ion-radio, ion-checkbox');
139
+ if (interactiveEl) {
140
+ interactiveEl.focus();
141
+ }
142
+ }
143
+ }
144
+ else {
127
145
  /**
128
- * Browsers such as Firefox do not
129
- * correctly delegate focus when manually
130
- * focusing an element with delegatesFocus.
131
- * We work around this by manually focusing
132
- * the interactive element.
133
- * ion-radio and ion-checkbox are the only
134
- * elements that ion-select-popover uses, so
135
- * we only need to worry about those two components
136
- * when focusing.
146
+ * If no value is set then focus the first enabled option.
137
147
  */
138
- const interactiveEl = selectedItem.querySelector('ion-radio, ion-checkbox');
139
- if (interactiveEl) {
140
- interactiveEl.focus();
148
+ const firstEnabledOption = overlay.querySelector('ion-radio:not(.radio-disabled), ion-checkbox:not(.checkbox-disabled)');
149
+ if (firstEnabledOption) {
150
+ focusElement(firstEnabledOption.closest('ion-item'));
151
+ /**
152
+ * Focus the option for the same reason as we do above.
153
+ */
154
+ firstEnabledOption.focus();
141
155
  }
142
156
  }
143
157
  }
@@ -642,7 +656,7 @@ Developers can use the "legacy" property to continue using the legacy form marku
642
656
  }
643
657
  renderListbox() {
644
658
  const { disabled, inputId, isExpanded } = this;
645
- return (h("button", { disabled: disabled, id: inputId, "aria-label": this.ariaLabel, "aria-haspopup": "dialog", "aria-expanded": `${isExpanded}`, onFocus: this.onFocus, onBlur: this.onBlur, ref: (focusEl) => (this.focusEl = focusEl) }));
659
+ return (h("button", { disabled: disabled, id: inputId, "aria-label": this.ariaLabel, "aria-haspopup": "listbox", "aria-expanded": `${isExpanded}`, onFocus: this.onFocus, onBlur: this.onBlur, ref: (focusEl) => (this.focusEl = focusEl) }));
646
660
  }
647
661
  render() {
648
662
  const { legacyFormController } = this;
@@ -0,0 +1,30 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { expect } from "@playwright/test";
5
+ import { configs, test } from "../../../../utils/test/playwright/index";
6
+ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
7
+ test.describe(title('select: disabled options'), () => {
8
+ test('should not focus a disabled option when no value is set', async ({ page, skip }) => {
9
+ // TODO (FW-2979)
10
+ skip.browser('webkit', 'Safari 16 only allows text fields and pop-up menus to be focused.');
11
+ test.info().annotations.push({
12
+ type: 'issue',
13
+ description: 'https://github.com/ionic-team/ionic-framework/issues/28284',
14
+ });
15
+ await page.setContent(`
16
+ <ion-select interface="popover">
17
+ <ion-select-option value="a" disabled="true">A</ion-select-option>
18
+ <ion-select-option value="b">B</ion-select-option>
19
+ </ion-select>
20
+ `, config);
21
+ const select = page.locator('ion-select');
22
+ const popover = page.locator('ion-popover');
23
+ const ionPopoverDidPresent = await page.spyOnEvent('ionPopoverDidPresent');
24
+ await select.click();
25
+ await ionPopoverDidPresent.next();
26
+ const popoverOption = popover.locator('.select-interface-option:nth-of-type(2) ion-radio');
27
+ await expect(popoverOption).toBeFocused();
28
+ });
29
+ });
30
+ });
@@ -6,12 +6,13 @@ import { getElementRoot } from "../../../utils/helpers";
6
6
  /**
7
7
  * iOS Toast Enter Animation
8
8
  */
9
- export const iosEnterAnimation = (baseEl, opts) => {
9
+ export const iosEnterAnimation = (baseEl, position) => {
10
10
  const baseAnimation = createAnimation();
11
11
  const wrapperAnimation = createAnimation();
12
- const { position, top, bottom } = opts;
13
12
  const root = getElementRoot(baseEl);
14
13
  const wrapperEl = root.querySelector('.toast-wrapper');
14
+ const bottom = `calc(-10px - var(--ion-safe-area-bottom, 0px))`;
15
+ const top = `calc(10px + var(--ion-safe-area-top, 0px))`;
15
16
  wrapperAnimation.addElement(wrapperEl);
16
17
  switch (position) {
17
18
  case 'top':
@@ -6,12 +6,13 @@ import { getElementRoot } from "../../../utils/helpers";
6
6
  /**
7
7
  * iOS Toast Leave Animation
8
8
  */
9
- export const iosLeaveAnimation = (baseEl, opts) => {
9
+ export const iosLeaveAnimation = (baseEl, position) => {
10
10
  const baseAnimation = createAnimation();
11
11
  const wrapperAnimation = createAnimation();
12
- const { position, top, bottom } = opts;
13
12
  const root = getElementRoot(baseEl);
14
13
  const wrapperEl = root.querySelector('.toast-wrapper');
14
+ const bottom = `calc(-10px - var(--ion-safe-area-bottom, 0px))`;
15
+ const top = `calc(10px + var(--ion-safe-area-top, 0px))`;
15
16
  wrapperAnimation.addElement(wrapperEl);
16
17
  switch (position) {
17
18
  case 'top':
@@ -6,12 +6,13 @@ import { getElementRoot } from "../../../utils/helpers";
6
6
  /**
7
7
  * MD Toast Enter Animation
8
8
  */
9
- export const mdEnterAnimation = (baseEl, opts) => {
9
+ export const mdEnterAnimation = (baseEl, position) => {
10
10
  const baseAnimation = createAnimation();
11
11
  const wrapperAnimation = createAnimation();
12
- const { position, top, bottom } = opts;
13
12
  const root = getElementRoot(baseEl);
14
13
  const wrapperEl = root.querySelector('.toast-wrapper');
14
+ const bottom = `calc(8px + var(--ion-safe-area-bottom, 0px))`;
15
+ const top = `calc(8px + var(--ion-safe-area-top, 0px))`;
15
16
  wrapperAnimation.addElement(wrapperEl);
16
17
  switch (position) {
17
18
  case 'top':
@@ -15,7 +15,6 @@ import { iosEnterAnimation } from "./animations/ios.enter";
15
15
  import { iosLeaveAnimation } from "./animations/ios.leave";
16
16
  import { mdEnterAnimation } from "./animations/md.enter";
17
17
  import { mdLeaveAnimation } from "./animations/md.leave";
18
- import { getAnimationPosition } from "./animations/utils";
19
18
  // TODO(FW-2832): types
20
19
  /**
21
20
  * @virtualProp {"ios" | "md"} mode - The mode determines which platform styles to use.
@@ -55,7 +54,6 @@ export class Toast {
55
54
  this.message = undefined;
56
55
  this.keyboardClose = false;
57
56
  this.position = 'bottom';
58
- this.positionAnchor = undefined;
59
57
  this.buttons = undefined;
60
58
  this.translucent = false;
61
59
  this.animated = true;
@@ -103,19 +101,7 @@ export class Toast {
103
101
  async present() {
104
102
  const unlock = await this.lockController.lock();
105
103
  await this.delegateController.attachViewToDom();
106
- const { el, position } = this;
107
- const anchor = this.getAnchorElement();
108
- const animationPosition = getAnimationPosition(position, anchor, getIonMode(this), el);
109
- /**
110
- * Cache the calculated position of the toast, so we can re-use it
111
- * in the dismiss animation.
112
- */
113
- this.lastPresentedPosition = animationPosition;
114
- await present(this, 'toastEnter', iosEnterAnimation, mdEnterAnimation, {
115
- position,
116
- top: animationPosition.top,
117
- bottom: animationPosition.bottom,
118
- });
104
+ await present(this, 'toastEnter', iosEnterAnimation, mdEnterAnimation, this.position);
119
105
  /**
120
106
  * Content is revealed to screen readers after
121
107
  * the transition to avoid jank since this
@@ -137,28 +123,15 @@ export class Toast {
137
123
  * Some examples include: ``"cancel"`, `"destructive"`, "selected"`, and `"backdrop"`.
138
124
  */
139
125
  async dismiss(data, role) {
140
- var _a, _b;
141
126
  const unlock = await this.lockController.lock();
142
- const { durationTimeout, position, lastPresentedPosition } = this;
143
- if (durationTimeout) {
144
- clearTimeout(durationTimeout);
127
+ if (this.durationTimeout) {
128
+ clearTimeout(this.durationTimeout);
145
129
  }
146
- const dismissed = await dismiss(this, data, role, 'toastLeave', iosLeaveAnimation, mdLeaveAnimation,
147
- /**
148
- * Fetch the cached position that was calculated back in the present
149
- * animation. We always want to animate the dismiss from the same
150
- * position the present stopped at, so the animation looks continuous.
151
- */
152
- {
153
- position,
154
- top: (_a = lastPresentedPosition === null || lastPresentedPosition === void 0 ? void 0 : lastPresentedPosition.top) !== null && _a !== void 0 ? _a : '',
155
- bottom: (_b = lastPresentedPosition === null || lastPresentedPosition === void 0 ? void 0 : lastPresentedPosition.bottom) !== null && _b !== void 0 ? _b : '',
156
- });
130
+ const dismissed = await dismiss(this, data, role, 'toastLeave', iosLeaveAnimation, mdLeaveAnimation, this.position);
157
131
  if (dismissed) {
158
132
  this.delegateController.removeViewFromDom();
159
133
  this.revealContentToScreenReader = false;
160
134
  }
161
- this.lastPresentedPosition = undefined;
162
135
  unlock();
163
136
  return dismissed;
164
137
  }
@@ -182,44 +155,6 @@ export class Toast {
182
155
  : [];
183
156
  return buttons;
184
157
  }
185
- /**
186
- * Returns the element specified by the positionAnchor prop,
187
- * or undefined if prop's value is an ID string and the element
188
- * is not found in the DOM.
189
- */
190
- getAnchorElement() {
191
- const { position, positionAnchor, el } = this;
192
- /**
193
- * If positionAnchor is undefined then
194
- * no anchor should be used when presenting the toast.
195
- */
196
- if (positionAnchor === undefined) {
197
- return;
198
- }
199
- if (position === 'middle' && positionAnchor !== undefined) {
200
- printIonWarning('The positionAnchor property is ignored when using position="middle".', this.el);
201
- return undefined;
202
- }
203
- if (typeof positionAnchor === 'string') {
204
- /**
205
- * If the anchor is defined as an ID, find the element.
206
- * We do this on every present so the toast doesn't need
207
- * to account for the surrounding DOM changing since the
208
- * last time it was presented.
209
- */
210
- const foundEl = document.getElementById(positionAnchor);
211
- if (foundEl === null) {
212
- printIonWarning(`An anchor element with an ID of "${positionAnchor}" was not found in the DOM.`, el);
213
- return undefined;
214
- }
215
- return foundEl;
216
- }
217
- if (positionAnchor instanceof HTMLElement) {
218
- return positionAnchor;
219
- }
220
- printIonWarning('Invalid positionAnchor value:', positionAnchor, el);
221
- return undefined;
222
- }
223
158
  async buttonClick(button) {
224
159
  const role = button.role;
225
160
  if (isCancel(role)) {
@@ -582,34 +517,12 @@ export class Toast {
582
517
  "optional": false,
583
518
  "docs": {
584
519
  "tags": [],
585
- "text": "The starting position of the toast on the screen. Can be tweaked further\nusing the `positionAnchor` property."
520
+ "text": "The position of the toast on the screen."
586
521
  },
587
522
  "attribute": "position",
588
523
  "reflect": false,
589
524
  "defaultValue": "'bottom'"
590
525
  },
591
- "positionAnchor": {
592
- "type": "string",
593
- "mutable": false,
594
- "complexType": {
595
- "original": "HTMLElement | string",
596
- "resolved": "HTMLElement | string | undefined",
597
- "references": {
598
- "HTMLElement": {
599
- "location": "global",
600
- "id": "global::HTMLElement"
601
- }
602
- }
603
- },
604
- "required": false,
605
- "optional": true,
606
- "docs": {
607
- "tags": [],
608
- "text": "The element to anchor the toast's position to. Can be set as a direct reference\nor the ID of the element. With `position=\"bottom\"`, the toast will sit above the\nchosen element. With `position=\"top\"`, the toast will sit below the chosen element.\nWith `position=\"middle\"`, the value of `positionAnchor` is ignored."
609
- },
610
- "attribute": "position-anchor",
611
- "reflect": false
612
- },
613
526
  "buttons": {
614
527
  "type": "unknown",
615
528
  "mutable": false,
@@ -900,9 +813,8 @@ export class Toast {
900
813
  "id": "global::Promise"
901
814
  },
902
815
  "ToastPresentOptions": {
903
- "location": "import",
904
- "path": "./toast-interface",
905
- "id": "src/components/toast/toast-interface.ts::ToastPresentOptions"
816
+ "location": "global",
817
+ "id": "global::ToastPresentOptions"
906
818
  }
907
819
  },
908
820
  "return": "Promise<void>"
@@ -934,9 +846,8 @@ export class Toast {
934
846
  "id": "global::Promise"
935
847
  },
936
848
  "ToastDismissOptions": {
937
- "location": "import",
938
- "path": "./toast-interface",
939
- "id": "src/components/toast/toast-interface.ts::ToastDismissOptions"
849
+ "location": "global",
850
+ "id": "global::ToastDismissOptions"
940
851
  }
941
852
  },
942
853
  "return": "Promise<boolean>"
@@ -44,6 +44,9 @@ export class Toggle {
44
44
  }
45
45
  };
46
46
  this.onClick = (ev) => {
47
+ if (this.disabled) {
48
+ return;
49
+ }
47
50
  ev.preventDefault();
48
51
  if (this.lastDrag + 300 < Date.now()) {
49
52
  this.toggleChecked();
@@ -13,7 +13,6 @@ export { componentOnReady } from './utils/helpers';
13
13
  export { isPlatform, getPlatforms } from './utils/platform';
14
14
  export { IonicSafeString } from './utils/sanitization';
15
15
  export { getMode, setupConfig } from './utils/config';
16
- export { openURL } from './utils/theme';
17
16
  export { LIFECYCLE_WILL_ENTER, LIFECYCLE_DID_ENTER, LIFECYCLE_WILL_LEAVE, LIFECYCLE_DID_LEAVE, LIFECYCLE_WILL_UNLOAD, } from './components/nav/constants';
18
17
  export { menuController } from './utils/menu-controller';
19
18
  export { alertController, actionSheetController, modalController, loadingController, pickerController, popoverController, toastController, } from './utils/overlays';
@@ -1,7 +1,6 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { printIonWarning } from "../logging/index";
5
4
  import { MENU_BACK_BUTTON_PRIORITY } from "../hardware-back-button";
6
5
  import { componentOnReady } from "../helpers";
7
6
  import { menuOverlayAnimation } from "./animations/overlay";
@@ -11,21 +10,21 @@ const createMenuController = () => {
11
10
  const menuAnimations = new Map();
12
11
  const menus = [];
13
12
  const open = async (menu) => {
14
- const menuEl = await get(menu, true);
13
+ const menuEl = await get(menu);
15
14
  if (menuEl) {
16
15
  return menuEl.open();
17
16
  }
18
17
  return false;
19
18
  };
20
19
  const close = async (menu) => {
21
- const menuEl = await (menu !== undefined ? get(menu, true) : getOpen());
20
+ const menuEl = await (menu !== undefined ? get(menu) : getOpen());
22
21
  if (menuEl !== undefined) {
23
22
  return menuEl.close();
24
23
  }
25
24
  return false;
26
25
  };
27
26
  const toggle = async (menu) => {
28
- const menuEl = await get(menu, true);
27
+ const menuEl = await get(menu);
29
28
  if (menuEl) {
30
29
  return menuEl.toggle();
31
30
  }
@@ -63,35 +62,18 @@ const createMenuController = () => {
63
62
  }
64
63
  return false;
65
64
  };
66
- /**
67
- * Finds and returns the menu specified by "menu" if registered.
68
- * @param menu - The side or ID of the desired menu
69
- * @param logOnMultipleSideMenus - If true, this function will log a warning
70
- * if "menu" is a side but multiple menus on the same side were found. Since this function
71
- * is used in multiple places, we default this log to false so that the calling
72
- * functions can choose whether or not it is appropriate to log this warning.
73
- */
74
- const get = async (menu, logOnMultipleSideMenus = false) => {
65
+ const get = async (menu) => {
75
66
  await waitUntilReady();
76
67
  if (menu === 'start' || menu === 'end') {
77
68
  // there could be more than one menu on the same side
78
69
  // so first try to get the enabled one
79
- const menuRefs = menus.filter((m) => m.side === menu && !m.disabled);
80
- if (menuRefs.length >= 1) {
81
- if (menuRefs.length > 1 && logOnMultipleSideMenus) {
82
- printIonWarning(`menuController queried for a menu on the "${menu}" side, but ${menuRefs.length} menus were found. The first menu reference will be used. If this is not the behavior you want then pass the ID of the menu instead of its side.`, menuRefs.map((m) => m.el));
83
- }
84
- return menuRefs[0].el;
70
+ const menuRef = find((m) => m.side === menu && !m.disabled);
71
+ if (menuRef) {
72
+ return menuRef;
85
73
  }
86
74
  // didn't find a menu side that is enabled
87
75
  // so try to get the first menu side found
88
- const sideMenuRefs = menus.filter((m) => m.side === menu);
89
- if (sideMenuRefs.length >= 1) {
90
- if (sideMenuRefs.length > 1 && logOnMultipleSideMenus) {
91
- printIonWarning(`menuController queried for a menu on the "${menu}" side, but ${sideMenuRefs.length} menus were found. The first menu reference will be used. If this is not the behavior you want then pass the ID of the menu instead of its side.`, sideMenuRefs.map((m) => m.el));
92
- }
93
- return sideMenuRefs[0].el;
94
- }
76
+ return find((m) => m.side === menu);
95
77
  }
96
78
  else if (menu != null) {
97
79
  // the menuId was not left or right
@@ -133,6 +115,9 @@ const createMenuController = () => {
133
115
  };
134
116
  const _register = (menu) => {
135
117
  if (menus.indexOf(menu) < 0) {
118
+ if (!menu.disabled) {
119
+ _setActiveMenu(menu);
120
+ }
136
121
  menus.push(menu);
137
122
  }
138
123
  };
@@ -142,6 +127,13 @@ const createMenuController = () => {
142
127
  menus.splice(index, 1);
143
128
  }
144
129
  };
130
+ const _setActiveMenu = (menu) => {
131
+ // if this menu should be enabled
132
+ // then find all the other menus on this same side
133
+ // and automatically disable other same side menus
134
+ const side = menu.side;
135
+ menus.filter((m) => m.side === side && m !== menu).forEach((m) => (m.disabled = true));
136
+ };
145
137
  const _setOpen = async (menu, shouldOpen, animated) => {
146
138
  if (isAnimatingSync()) {
147
139
  return false;
@@ -213,6 +205,7 @@ const createMenuController = () => {
213
205
  _register,
214
206
  _unregister,
215
207
  _setOpen,
208
+ _setActiveMenu,
216
209
  };
217
210
  };
218
211
  export const menuController = /*@__PURE__*/ createMenuController();
@@ -75,7 +75,6 @@ const HapticEngine = {
75
75
  * if the browser does not support the Vibrate API.
76
76
  */
77
77
  if ((capacitor === null || capacitor === void 0 ? void 0 : capacitor.getPlatform()) === 'web') {
78
- // eslint-disable-next-line @typescript-eslint/prefer-optional-chain
79
78
  return typeof navigator !== 'undefined' && navigator.vibrate !== undefined;
80
79
  }
81
80
  return true;
@@ -68,7 +68,6 @@ export const setOverlayId = (el) => {
68
68
  return el.id;
69
69
  };
70
70
  export const createOverlay = (tagName, opts) => {
71
- // eslint-disable-next-line @typescript-eslint/prefer-optional-chain
72
71
  if (typeof window !== 'undefined' && typeof window.customElements !== 'undefined') {
73
72
  return window.customElements.whenDefined(tagName).then(() => {
74
73
  const element = document.createElement(tagName);
@@ -202,7 +202,6 @@ export const iosTransitionAnimation = (navEl, opts) => {
202
202
  .easing(opts.easing || EASING)
203
203
  .fill('both')
204
204
  .beforeRemoveClass('ion-page-invisible');
205
- // eslint-disable-next-line @typescript-eslint/prefer-optional-chain
206
205
  if (leavingEl && navEl !== null && navEl !== undefined) {
207
206
  const navDecorAnimation = createAnimation();
208
207
  navDecorAnimation.addElement(navEl);