@ionic/core 7.6.1-dev.11702425604.192f1b86 → 7.6.1-dev.11702569564.1746fa9f

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 (351) hide show
  1. package/components/hardware-back-button.js +41 -3
  2. package/components/ion-app.js +3 -1
  3. package/components/ion-input.js +2 -21
  4. package/components/ion-menu.js +5 -4
  5. package/components/ion-split-pane.js +2 -2
  6. package/components/ion-textarea.js +2 -25
  7. package/components/overlays.js +29 -10
  8. package/css/core.css +8 -0
  9. package/css/core.css.map +1 -1
  10. package/css/ionic.bundle.css +1 -1
  11. package/css/ionic.bundle.css.map +1 -1
  12. package/dist/cjs/{app-globals-7def22c8.js → app-globals-0af482c7.js} +1 -1
  13. package/dist/cjs/{button-active-962fe442.js → button-active-a5185907.js} +1 -1
  14. package/dist/cjs/{hardware-back-button-76833cac.js → hardware-back-button-353999c3.js} +42 -2
  15. package/dist/cjs/{index-3b012034.js → index-390a5c73.js} +2 -2
  16. package/dist/cjs/{index-50dcfe2f.js → index-bbb4336c.js} +8 -21
  17. package/dist/cjs/{index-17ab7794.js → index-f8f13389.js} +3 -3
  18. package/dist/cjs/index.cjs.js +8 -8
  19. package/dist/cjs/ion-accordion_2.cjs.entry.js +2 -2
  20. package/dist/cjs/ion-action-sheet.cjs.entry.js +5 -5
  21. package/dist/cjs/ion-alert.cjs.entry.js +5 -5
  22. package/dist/cjs/ion-app_8.cjs.entry.js +9 -7
  23. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
  24. package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
  25. package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
  26. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
  27. package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
  28. package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
  29. package/dist/cjs/ion-checkbox.cjs.entry.js +2 -2
  30. package/dist/cjs/ion-chip.cjs.entry.js +2 -2
  31. package/dist/cjs/ion-col_3.cjs.entry.js +2 -2
  32. package/dist/cjs/ion-datetime-button.cjs.entry.js +2 -2
  33. package/dist/cjs/ion-datetime_3.cjs.entry.js +4 -4
  34. package/dist/cjs/ion-fab_3.cjs.entry.js +2 -2
  35. package/dist/cjs/ion-img.cjs.entry.js +2 -2
  36. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +2 -2
  37. package/dist/cjs/ion-input.cjs.entry.js +4 -23
  38. package/dist/cjs/ion-item-option_3.cjs.entry.js +2 -2
  39. package/dist/cjs/ion-item_8.cjs.entry.js +2 -2
  40. package/dist/cjs/ion-loading.cjs.entry.js +4 -4
  41. package/dist/cjs/ion-menu_3.cjs.entry.js +8 -8
  42. package/dist/cjs/ion-modal.cjs.entry.js +5 -5
  43. package/dist/cjs/ion-nav_2.cjs.entry.js +3 -3
  44. package/dist/cjs/ion-picker-column-internal.cjs.entry.js +2 -2
  45. package/dist/cjs/ion-picker-internal.cjs.entry.js +1 -1
  46. package/dist/cjs/ion-popover.cjs.entry.js +5 -5
  47. package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -2
  48. package/dist/cjs/ion-radio_2.cjs.entry.js +2 -2
  49. package/dist/cjs/ion-range.cjs.entry.js +2 -2
  50. package/dist/cjs/ion-refresher_2.cjs.entry.js +2 -2
  51. package/dist/cjs/ion-reorder_2.cjs.entry.js +2 -2
  52. package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
  53. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  54. package/dist/cjs/ion-searchbar.cjs.entry.js +2 -2
  55. package/dist/cjs/ion-segment_2.cjs.entry.js +2 -2
  56. package/dist/cjs/ion-select_3.cjs.entry.js +4 -4
  57. package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
  58. package/dist/cjs/ion-split-pane.cjs.entry.js +4 -4
  59. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +2 -2
  60. package/dist/cjs/ion-tab_2.cjs.entry.js +1 -1
  61. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  62. package/dist/cjs/ion-textarea.cjs.entry.js +4 -27
  63. package/dist/cjs/ion-toast.cjs.entry.js +4 -4
  64. package/dist/cjs/ion-toggle.cjs.entry.js +2 -2
  65. package/dist/cjs/{ionic-global-a4edbf03.js → ionic-global-f4a2093b.js} +1 -1
  66. package/dist/cjs/ionic.cjs.js +5 -5
  67. package/dist/cjs/{ios.transition-b5353f3e.js → ios.transition-6787b799.js} +2 -2
  68. package/dist/cjs/loader.cjs.js +4 -4
  69. package/dist/cjs/{md.transition-67157dd9.js → md.transition-e033d20a.js} +2 -2
  70. package/dist/cjs/{overlays-e77cc023.js → overlays-5be6b614.js} +30 -11
  71. package/dist/cjs/{status-tap-b5d77c08.js → status-tap-415acac6.js} +1 -1
  72. package/dist/collection/collection-manifest.json +1 -1
  73. package/dist/collection/components/app/app.js +3 -1
  74. package/dist/collection/components/input/input.js +2 -21
  75. package/dist/collection/components/input/test/clear-on-edit/input.e2e.js +8 -28
  76. package/dist/collection/components/menu/menu.ios.css +4 -3
  77. package/dist/collection/components/menu/menu.js +2 -7
  78. package/dist/collection/components/menu/menu.md.css +4 -3
  79. package/dist/collection/components/split-pane/split-pane.ios.css +2 -1
  80. package/dist/collection/components/split-pane/split-pane.md.css +2 -1
  81. package/dist/collection/components/textarea/test/clear-on-edit/textarea.e2e.js +0 -36
  82. package/dist/collection/components/textarea/textarea.js +2 -25
  83. package/dist/collection/utils/hardware-back-button.js +39 -2
  84. package/dist/collection/utils/overlays.js +29 -9
  85. package/dist/docs.json +2 -7
  86. package/dist/esm/{app-globals-8c62bec2.js → app-globals-722340c4.js} +1 -1
  87. package/dist/esm/{button-active-308d3edd.js → button-active-c6ee4f50.js} +1 -1
  88. package/dist/esm/{hardware-back-button-b2bc76db.js → hardware-back-button-2f36ab27.js} +42 -3
  89. package/dist/esm/{index-b7d870cf.js → index-08d686eb.js} +8 -21
  90. package/dist/esm/{index-4743453d.js → index-1932b201.js} +3 -3
  91. package/dist/esm/{index-1193f005.js → index-2c866d2e.js} +2 -2
  92. package/dist/esm/index.js +8 -8
  93. package/dist/esm/ion-accordion_2.entry.js +2 -2
  94. package/dist/esm/ion-action-sheet.entry.js +5 -5
  95. package/dist/esm/ion-alert.entry.js +5 -5
  96. package/dist/esm/ion-app_8.entry.js +9 -7
  97. package/dist/esm/ion-avatar_3.entry.js +2 -2
  98. package/dist/esm/ion-back-button.entry.js +2 -2
  99. package/dist/esm/ion-backdrop.entry.js +2 -2
  100. package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
  101. package/dist/esm/ion-button_2.entry.js +2 -2
  102. package/dist/esm/ion-card_5.entry.js +2 -2
  103. package/dist/esm/ion-checkbox.entry.js +2 -2
  104. package/dist/esm/ion-chip.entry.js +2 -2
  105. package/dist/esm/ion-col_3.entry.js +2 -2
  106. package/dist/esm/ion-datetime-button.entry.js +2 -2
  107. package/dist/esm/ion-datetime_3.entry.js +4 -4
  108. package/dist/esm/ion-fab_3.entry.js +2 -2
  109. package/dist/esm/ion-img.entry.js +2 -2
  110. package/dist/esm/ion-infinite-scroll_2.entry.js +2 -2
  111. package/dist/esm/ion-input.entry.js +4 -23
  112. package/dist/esm/ion-item-option_3.entry.js +2 -2
  113. package/dist/esm/ion-item_8.entry.js +2 -2
  114. package/dist/esm/ion-loading.entry.js +4 -4
  115. package/dist/esm/ion-menu_3.entry.js +8 -8
  116. package/dist/esm/ion-modal.entry.js +5 -5
  117. package/dist/esm/ion-nav_2.entry.js +3 -3
  118. package/dist/esm/ion-picker-column-internal.entry.js +2 -2
  119. package/dist/esm/ion-picker-internal.entry.js +1 -1
  120. package/dist/esm/ion-popover.entry.js +5 -5
  121. package/dist/esm/ion-progress-bar.entry.js +2 -2
  122. package/dist/esm/ion-radio_2.entry.js +2 -2
  123. package/dist/esm/ion-range.entry.js +2 -2
  124. package/dist/esm/ion-refresher_2.entry.js +2 -2
  125. package/dist/esm/ion-reorder_2.entry.js +2 -2
  126. package/dist/esm/ion-ripple-effect.entry.js +2 -2
  127. package/dist/esm/ion-route_4.entry.js +2 -2
  128. package/dist/esm/ion-searchbar.entry.js +2 -2
  129. package/dist/esm/ion-segment_2.entry.js +2 -2
  130. package/dist/esm/ion-select_3.entry.js +4 -4
  131. package/dist/esm/ion-spinner.entry.js +2 -2
  132. package/dist/esm/ion-split-pane.entry.js +4 -4
  133. package/dist/esm/ion-tab-bar_2.entry.js +2 -2
  134. package/dist/esm/ion-tab_2.entry.js +1 -1
  135. package/dist/esm/ion-text.entry.js +2 -2
  136. package/dist/esm/ion-textarea.entry.js +4 -27
  137. package/dist/esm/ion-toast.entry.js +4 -4
  138. package/dist/esm/ion-toggle.entry.js +2 -2
  139. package/dist/esm/{ionic-global-1f99b929.js → ionic-global-c0cda98e.js} +1 -1
  140. package/dist/esm/ionic.js +6 -6
  141. package/dist/esm/{ios.transition-3376ccb2.js → ios.transition-802a84a6.js} +2 -2
  142. package/dist/esm/loader.js +5 -5
  143. package/dist/esm/{md.transition-f992779f.js → md.transition-43c2874d.js} +2 -2
  144. package/dist/esm/{overlays-b33f6bca.js → overlays-6e053935.js} +30 -11
  145. package/dist/esm/{status-tap-16fd8f3d.js → status-tap-2b93b1b5.js} +1 -1
  146. package/dist/esm-es5/app-globals-722340c4.js +4 -0
  147. package/dist/esm-es5/{button-active-308d3edd.js → button-active-c6ee4f50.js} +1 -1
  148. package/dist/esm-es5/hardware-back-button-2f36ab27.js +4 -0
  149. package/dist/esm-es5/index-08d686eb.js +5 -0
  150. package/dist/esm-es5/{index-4743453d.js → index-1932b201.js} +1 -1
  151. package/dist/esm-es5/{index-1193f005.js → index-2c866d2e.js} +1 -1
  152. package/dist/esm-es5/index.js +1 -1
  153. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  154. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  155. package/dist/esm-es5/ion-alert.entry.js +1 -1
  156. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  157. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  158. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  159. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  160. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  161. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  162. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  163. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  164. package/dist/esm-es5/ion-chip.entry.js +1 -1
  165. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  166. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  167. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  168. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  169. package/dist/esm-es5/ion-img.entry.js +1 -1
  170. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  171. package/dist/esm-es5/ion-input.entry.js +1 -1
  172. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  173. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  174. package/dist/esm-es5/ion-loading.entry.js +1 -1
  175. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  176. package/dist/esm-es5/ion-modal.entry.js +1 -1
  177. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  178. package/dist/esm-es5/ion-picker-column-internal.entry.js +1 -1
  179. package/dist/esm-es5/ion-picker-internal.entry.js +1 -1
  180. package/dist/esm-es5/ion-popover.entry.js +1 -1
  181. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  182. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  183. package/dist/esm-es5/ion-range.entry.js +1 -1
  184. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  185. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  186. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  187. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  188. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  189. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  190. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  191. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  192. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  193. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  194. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  195. package/dist/esm-es5/ion-text.entry.js +1 -1
  196. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  197. package/dist/esm-es5/ion-toast.entry.js +1 -1
  198. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  199. package/dist/esm-es5/{ionic-global-1f99b929.js → ionic-global-c0cda98e.js} +1 -1
  200. package/dist/esm-es5/ionic.js +1 -1
  201. package/dist/esm-es5/{ios.transition-3376ccb2.js → ios.transition-802a84a6.js} +1 -1
  202. package/dist/esm-es5/loader.js +1 -1
  203. package/dist/esm-es5/md.transition-43c2874d.js +4 -0
  204. package/dist/esm-es5/overlays-6e053935.js +4 -0
  205. package/dist/esm-es5/{status-tap-16fd8f3d.js → status-tap-2b93b1b5.js} +1 -1
  206. package/dist/ionic/index.esm.js +1 -1
  207. package/dist/ionic/ionic.esm.js +1 -1
  208. package/dist/ionic/ionic.js +1 -1
  209. package/dist/ionic/{p-469dd571.system.entry.js → p-01d14eba.system.entry.js} +1 -1
  210. package/dist/ionic/{p-7e614714.system.entry.js → p-05d83227.system.entry.js} +1 -1
  211. package/dist/ionic/{p-11786dc7.entry.js → p-0add7211.entry.js} +1 -1
  212. package/dist/ionic/{p-1b27ac67.entry.js → p-0c03967a.entry.js} +1 -1
  213. package/dist/ionic/{p-20e0e75d.system.entry.js → p-0e53f8ea.system.entry.js} +1 -1
  214. package/dist/ionic/{p-745e3339.system.entry.js → p-10437cc2.system.entry.js} +1 -1
  215. package/dist/ionic/{p-afa9f205.system.js → p-10469c3c.system.js} +1 -1
  216. package/dist/ionic/{p-3313c481.entry.js → p-1161a793.entry.js} +1 -1
  217. package/dist/ionic/{p-9fb45814.entry.js → p-1208f939.entry.js} +1 -1
  218. package/dist/ionic/p-1786bc72.js +4 -0
  219. package/dist/ionic/{p-a3013394.entry.js → p-17da5ed1.entry.js} +1 -1
  220. package/dist/ionic/{p-507ddbfe.system.entry.js → p-18b8a2f5.system.entry.js} +1 -1
  221. package/dist/ionic/{p-806a9810.entry.js → p-18ba8221.entry.js} +1 -1
  222. package/dist/ionic/{p-767f1a92.entry.js → p-1b19c04b.entry.js} +1 -1
  223. package/dist/ionic/{p-e33d1ebc.entry.js → p-2092f39f.entry.js} +1 -1
  224. package/dist/ionic/{p-06abe918.system.entry.js → p-209e2fc6.system.entry.js} +1 -1
  225. package/dist/ionic/{p-61e4d3ec.entry.js → p-28a2c2a2.entry.js} +1 -1
  226. package/dist/ionic/{p-332ea4d3.system.entry.js → p-2938823a.system.entry.js} +1 -1
  227. package/dist/ionic/{p-ebe8bd8a.entry.js → p-2b7bccc0.entry.js} +1 -1
  228. package/dist/ionic/{p-f434bcf3.system.entry.js → p-2d3b9fa3.system.entry.js} +1 -1
  229. package/dist/ionic/{p-6b0ce9b4.system.entry.js → p-3137c025.system.entry.js} +1 -1
  230. package/dist/ionic/{p-a074be82.system.js → p-31fcb233.system.js} +1 -1
  231. package/dist/ionic/{p-f6e9c227.system.js → p-33a37fad.system.js} +1 -1
  232. package/dist/ionic/p-350f7292.system.entry.js +4 -0
  233. package/dist/ionic/{p-44dc52e5.entry.js → p-353b349d.entry.js} +1 -1
  234. package/dist/ionic/{p-1c249831.entry.js → p-37094951.entry.js} +1 -1
  235. package/dist/ionic/{p-11a3973f.entry.js → p-3dd98a73.entry.js} +1 -1
  236. package/dist/ionic/{p-2a583966.entry.js → p-3f5179b5.entry.js} +1 -1
  237. package/dist/ionic/{p-5ad1fe3b.system.js → p-4155f352.system.js} +1 -1
  238. package/dist/ionic/{p-6e0539ea.system.entry.js → p-46d400b4.system.entry.js} +1 -1
  239. package/dist/ionic/{p-f2bfd3d7.entry.js → p-4f3ae45a.entry.js} +1 -1
  240. package/dist/ionic/{p-69641343.system.entry.js → p-4fb51e61.system.entry.js} +1 -1
  241. package/dist/ionic/{p-6855f26a.entry.js → p-51a087d6.entry.js} +1 -1
  242. package/dist/ionic/{p-a49931aa.system.js → p-54927cc0.system.js} +1 -1
  243. package/dist/ionic/p-564af202.system.entry.js +4 -0
  244. package/dist/ionic/{p-648ad047.system.entry.js → p-57668439.system.entry.js} +1 -1
  245. package/dist/ionic/{p-a06501e3.entry.js → p-588fdf40.entry.js} +1 -1
  246. package/dist/ionic/{p-9f94c72e.system.js → p-5b365ca7.system.js} +1 -1
  247. package/dist/ionic/{p-abd5d0d5.system.entry.js → p-5bebc7b3.system.entry.js} +1 -1
  248. package/dist/ionic/{p-0aa78a8d.system.js → p-5e745192.system.js} +1 -1
  249. package/dist/ionic/{p-7fae5c36.js → p-5ecae037.js} +1 -1
  250. package/dist/ionic/{p-c5acfeb1.entry.js → p-5eda1d7d.entry.js} +1 -1
  251. package/dist/ionic/{p-ddd48faf.system.entry.js → p-6577aea9.system.entry.js} +1 -1
  252. package/dist/ionic/{p-96d4814f.system.entry.js → p-6ad34705.system.entry.js} +1 -1
  253. package/dist/ionic/{p-98f35d98.js → p-6de472cb.js} +1 -1
  254. package/dist/ionic/{p-22827063.system.entry.js → p-6de62649.system.entry.js} +1 -1
  255. package/dist/ionic/{p-beeed22c.system.entry.js → p-6e70dd1a.system.entry.js} +1 -1
  256. package/dist/ionic/{p-ae4b7df8.entry.js → p-6fbecbda.entry.js} +1 -1
  257. package/dist/ionic/p-7195b457.js +4 -0
  258. package/dist/ionic/{p-0550f802.entry.js → p-765f4dde.entry.js} +1 -1
  259. package/dist/ionic/p-76c2040d.entry.js +4 -0
  260. package/dist/ionic/{p-26c4bf85.entry.js → p-78aadecb.entry.js} +1 -1
  261. package/dist/ionic/{p-c1701827.entry.js → p-7b69aaa4.entry.js} +1 -1
  262. package/dist/ionic/{p-dc71e4ef.system.entry.js → p-7d92bf15.system.entry.js} +1 -1
  263. package/dist/ionic/{p-3603c472.entry.js → p-7ee0f3f2.entry.js} +1 -1
  264. package/dist/ionic/{p-47bb15a1.entry.js → p-80fa068e.entry.js} +1 -1
  265. package/dist/ionic/p-88078c81.system.entry.js +4 -0
  266. package/dist/ionic/{p-3e8d5e53.entry.js → p-88fde0e0.entry.js} +1 -1
  267. package/dist/ionic/{p-28740823.system.entry.js → p-8d9bc2ef.system.entry.js} +1 -1
  268. package/dist/ionic/{p-529b24fb.entry.js → p-8f5d30f5.entry.js} +1 -1
  269. package/dist/ionic/{p-8f301ac5.system.entry.js → p-908475e7.system.entry.js} +1 -1
  270. package/dist/ionic/p-91d33c4a.js +4 -0
  271. package/dist/ionic/{p-cb8dff22.system.entry.js → p-9709ebd8.system.entry.js} +1 -1
  272. package/dist/ionic/{p-290d3fe9.js → p-9738fd82.js} +1 -1
  273. package/dist/ionic/{p-3dfc522b.entry.js → p-98f3d827.entry.js} +1 -1
  274. package/dist/ionic/{p-cf53213c.entry.js → p-9b7f0b0f.entry.js} +1 -1
  275. package/dist/ionic/{p-44a56556.js → p-9dd5071f.js} +1 -1
  276. package/dist/ionic/p-9e447eb1.system.js +4 -0
  277. package/dist/ionic/{p-0dfa4ab4.system.entry.js → p-9f6ee2c0.system.entry.js} +2 -2
  278. package/dist/ionic/{p-10ec9af7.system.entry.js → p-a0bb7b92.system.entry.js} +1 -1
  279. package/dist/ionic/{p-2894d5f6.entry.js → p-a1987850.entry.js} +1 -1
  280. package/dist/ionic/{p-7dc892f8.entry.js → p-a2da3efd.entry.js} +1 -1
  281. package/dist/ionic/p-a4afcc88.entry.js +4 -0
  282. package/dist/ionic/p-afd6ca9d.entry.js +4 -0
  283. package/dist/ionic/{p-b8a9e195.system.entry.js → p-b3b3efba.system.entry.js} +1 -1
  284. package/dist/ionic/p-b459a710.js +4 -0
  285. package/dist/ionic/{p-1501b945.system.js → p-b4a51c42.system.js} +1 -1
  286. package/dist/ionic/{p-0ebc87b7.system.entry.js → p-b56d0866.system.entry.js} +1 -1
  287. package/dist/ionic/{p-803efb5d.entry.js → p-b5f9f14c.entry.js} +1 -1
  288. package/dist/ionic/{p-d93eed83.system.entry.js → p-b6f5e4f2.system.entry.js} +1 -1
  289. package/dist/ionic/{p-85f48531.entry.js → p-b6f9d32a.entry.js} +1 -1
  290. package/dist/ionic/{p-4981ea0a.system.entry.js → p-b7010c69.system.entry.js} +1 -1
  291. package/dist/ionic/{p-932f2259.system.entry.js → p-bd9c0936.system.entry.js} +1 -1
  292. package/dist/ionic/{p-0509fd34.js → p-c3c3333a.js} +1 -1
  293. package/dist/ionic/{p-f0504446.system.entry.js → p-c847fb35.system.entry.js} +1 -1
  294. package/dist/ionic/{p-f894e0ad.entry.js → p-c85e04b9.entry.js} +1 -1
  295. package/dist/ionic/{p-b7058a0e.system.entry.js → p-c91ccbfa.system.entry.js} +1 -1
  296. package/dist/ionic/{p-4685218a.system.entry.js → p-c9a21dfd.system.entry.js} +1 -1
  297. package/dist/ionic/p-cae07fc5.system.js +4 -0
  298. package/dist/ionic/{p-4489dd20.system.entry.js → p-caf21b46.system.entry.js} +1 -1
  299. package/dist/ionic/{p-9fda6824.system.entry.js → p-cb8616b5.system.entry.js} +1 -1
  300. package/dist/ionic/{p-b7a2ffc9.system.entry.js → p-cce9f61a.system.entry.js} +1 -1
  301. package/dist/ionic/{p-04377cfa.js → p-cdbeaadc.js} +1 -1
  302. package/dist/ionic/{p-928ee57a.entry.js → p-cfe57b1b.entry.js} +1 -1
  303. package/dist/ionic/{p-a42ef163.system.entry.js → p-d032f825.system.entry.js} +1 -1
  304. package/dist/ionic/{p-60959b71.entry.js → p-d37b441e.entry.js} +1 -1
  305. package/dist/ionic/p-d3b030b8.system.js +5 -0
  306. package/dist/ionic/p-d483dac4.entry.js +4 -0
  307. package/dist/ionic/p-d7142c58.system.js +4 -0
  308. package/dist/ionic/{p-6fba0ce1.system.entry.js → p-dee7c1d0.system.entry.js} +1 -1
  309. package/dist/ionic/p-e3584231.system.js +4 -0
  310. package/dist/ionic/{p-a3ca2e64.entry.js → p-e503165e.entry.js} +1 -1
  311. package/dist/ionic/{p-2cf21a15.system.entry.js → p-e654c9bb.system.entry.js} +1 -1
  312. package/dist/ionic/{p-a821750c.system.entry.js → p-e6d68e02.system.entry.js} +1 -1
  313. package/dist/ionic/{p-19c379da.system.entry.js → p-e7ea9815.system.entry.js} +1 -1
  314. package/dist/ionic/{p-da5e2652.entry.js → p-e94c392d.entry.js} +1 -1
  315. package/dist/ionic/{p-84b567a6.entry.js → p-ea69616e.entry.js} +1 -1
  316. package/dist/ionic/{p-41208f54.system.entry.js → p-ef126ae8.system.entry.js} +1 -1
  317. package/dist/ionic/{p-b964aba3.entry.js → p-f3752035.entry.js} +1 -1
  318. package/dist/ionic/{p-cd1b920b.entry.js → p-f47b499a.entry.js} +1 -1
  319. package/dist/ionic/p-f4b23061.system.entry.js +4 -0
  320. package/dist/ionic/{p-6c277fa2.system.entry.js → p-f5109721.system.entry.js} +1 -1
  321. package/dist/ionic/{p-043aa6cc.system.entry.js → p-f656e032.system.entry.js} +1 -1
  322. package/dist/ionic/{p-0235067a.js → p-f70970cf.js} +1 -1
  323. package/dist/ionic/{p-c08fe2c0.entry.js → p-f8a5bb89.entry.js} +1 -1
  324. package/dist/ionic/{p-b78e6a44.entry.js → p-feae5133.entry.js} +1 -1
  325. package/dist/types/utils/config.d.ts +7 -0
  326. package/dist/types/utils/hardware-back-button.d.ts +7 -0
  327. package/hydrate/index.js +83 -110
  328. package/package.json +2 -2
  329. package/dist/collection/components/menu/test/custom/menu.e2e.js +0 -61
  330. package/dist/esm-es5/app-globals-8c62bec2.js +0 -4
  331. package/dist/esm-es5/hardware-back-button-b2bc76db.js +0 -4
  332. package/dist/esm-es5/index-b7d870cf.js +0 -5
  333. package/dist/esm-es5/md.transition-f992779f.js +0 -4
  334. package/dist/esm-es5/overlays-b33f6bca.js +0 -4
  335. package/dist/ionic/p-19d9ceb8.system.js +0 -4
  336. package/dist/ionic/p-2df97906.system.entry.js +0 -4
  337. package/dist/ionic/p-3671f1b9.system.js +0 -4
  338. package/dist/ionic/p-38531958.system.entry.js +0 -4
  339. package/dist/ionic/p-4b3623da.js +0 -4
  340. package/dist/ionic/p-4d145435.entry.js +0 -4
  341. package/dist/ionic/p-52cfafe9.system.js +0 -5
  342. package/dist/ionic/p-6ab03751.js +0 -4
  343. package/dist/ionic/p-790220fd.system.js +0 -4
  344. package/dist/ionic/p-950c05ad.entry.js +0 -4
  345. package/dist/ionic/p-97174c1e.js +0 -4
  346. package/dist/ionic/p-9a68d8ef.system.js +0 -4
  347. package/dist/ionic/p-aee39e06.entry.js +0 -4
  348. package/dist/ionic/p-cd574dfa.js +0 -4
  349. package/dist/ionic/p-dc6d8647.entry.js +0 -4
  350. package/dist/ionic/p-e2903cdc.system.entry.js +0 -4
  351. package/dist/ionic/p-ec652bc0.system.entry.js +0 -4
@@ -3,7 +3,6 @@
3
3
  */
4
4
  import { expect } from "@playwright/test";
5
5
  import { test, configs } from "../../../../utils/test/playwright/index";
6
- const IGNORED_KEYS = ['Enter', 'Tab', 'Shift', 'Meta', 'Alt', 'Control'];
7
6
  configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
8
7
  test.describe(title('input: clearOnEdit'), () => {
9
8
  test('should clear when typed into', async ({ page }) => {
@@ -14,40 +13,21 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) =>
14
13
  await ionInput.next();
15
14
  await expect(input).toHaveJSProperty('value', 'h');
16
15
  });
17
- test('should not clear the input if it does not have an initial value when typing', async ({ page }) => {
18
- await page.setContent(`<ion-input label="input" value="" clear-on-edit="true"></ion-input>`, config);
16
+ test('should not clear when enter is pressed', async ({ page }) => {
17
+ await page.setContent(`<ion-input value="abc" clear-on-edit="true" aria-label="input"></ion-input>`, config);
19
18
  const input = page.locator('ion-input');
20
- await input.click();
21
- await input.type('hello world');
22
- await expect(input).toHaveJSProperty('value', 'hello world');
23
- });
24
- IGNORED_KEYS.forEach((ignoredKey) => {
25
- test(`should not clear when ${ignoredKey} is pressed`, async ({ page, skip }) => {
26
- skip.browser((browserName) => browserName === 'firefox' && ignoredKey === 'Meta', 'Firefox incorrectly adds "OS" to the input when pressing the Meta key on Linux');
27
- await page.setContent(`<ion-input value="abc" clear-on-edit="true" aria-label="input"></ion-input>`, config);
28
- const input = page.locator('ion-input');
29
- await input.locator('input').focus();
30
- await page.keyboard.press(ignoredKey);
31
- await page.waitForChanges();
32
- await expect(input).toHaveJSProperty('value', 'abc');
33
- });
19
+ await input.locator('input').focus();
20
+ await page.keyboard.press('Enter');
21
+ await page.waitForChanges();
22
+ await expect(input).toHaveJSProperty('value', 'abc');
34
23
  });
35
- test('should clear after when pressing valid key after pressing ignored key', async ({ page }) => {
36
- test.info().annotations.push({
37
- type: 'issue',
38
- description: 'https://github.com/ionic-team/ionic-framework/issues/28633',
39
- });
24
+ test('should not clear when tab is pressed', async ({ page }) => {
40
25
  await page.setContent(`<ion-input value="abc" clear-on-edit="true" aria-label="input"></ion-input>`, config);
41
26
  const input = page.locator('ion-input');
42
27
  await input.locator('input').focus();
43
- // ignored
44
- await page.keyboard.press('Shift');
28
+ await page.keyboard.press('Tab');
45
29
  await page.waitForChanges();
46
30
  await expect(input).toHaveJSProperty('value', 'abc');
47
- // allowed
48
- await page.keyboard.press('a');
49
- await page.waitForChanges();
50
- await expect(input).toHaveJSProperty('value', 'a');
51
31
  });
52
32
  });
53
33
  });
@@ -305,13 +305,14 @@ ion-backdrop {
305
305
  left: 0;
306
306
  right: 0;
307
307
  width: auto;
308
- transform: none;
309
- box-shadow: none;
308
+ /* stylelint-disable declaration-no-important */
309
+ transform: none !important;
310
+ box-shadow: none !important;
310
311
  }
311
312
 
312
313
  :host(.menu-pane-visible) ion-backdrop {
313
- /* stylelint-disable-next-line declaration-no-important */
314
314
  display: hidden !important;
315
+ /* stylelint-enable declaration-no-important */
315
316
  }
316
317
 
317
318
  /**
@@ -4,6 +4,7 @@
4
4
  import { Build, Host, h } from "@stencil/core";
5
5
  import { getTimeGivenProgression } from "../../utils/animation/cubic-bezier";
6
6
  import { GESTURE_CONTROLLER } from "../../utils/gesture/index";
7
+ import { shoudUseCloseWatcher } from "../../utils/hardware-back-button";
7
8
  import { inheritAriaAttributes, assert, clamp, isEndSide as isEnd } from "../../utils/helpers";
8
9
  import { menuController } from "../../utils/menu-controller/index";
9
10
  import { getPresentedOverlay } from "../../utils/overlays";
@@ -595,7 +596,7 @@ export class Menu {
595
596
  render() {
596
597
  const { type, disabled, isPaneVisible, inheritedAttributes, side } = this;
597
598
  const mode = getIonMode(this);
598
- return (h(Host, { role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
599
+ return (h(Host, { onKeyDown: shoudUseCloseWatcher ? null : this.onKeydown, role: "navigation", "aria-label": inheritedAttributes['aria-label'] || 'menu', class: {
599
600
  [mode]: true,
600
601
  [`menu-type-${type}`]: true,
601
602
  'menu-enabled': !disabled,
@@ -993,12 +994,6 @@ export class Menu {
993
994
  "target": undefined,
994
995
  "capture": true,
995
996
  "passive": false
996
- }, {
997
- "name": "keydown",
998
- "method": "onKeydown",
999
- "target": undefined,
1000
- "capture": false,
1001
- "passive": false
1002
997
  }];
1003
998
  }
1004
999
  }
@@ -305,13 +305,14 @@ ion-backdrop {
305
305
  left: 0;
306
306
  right: 0;
307
307
  width: auto;
308
- transform: none;
309
- box-shadow: none;
308
+ /* stylelint-disable declaration-no-important */
309
+ transform: none !important;
310
+ box-shadow: none !important;
310
311
  }
311
312
 
312
313
  :host(.menu-pane-visible) ion-backdrop {
313
- /* stylelint-disable-next-line declaration-no-important */
314
314
  display: hidden !important;
315
+ /* stylelint-enable declaration-no-important */
315
316
  }
316
317
 
317
318
  /**
@@ -146,7 +146,8 @@
146
146
  top: 0;
147
147
  bottom: 0;
148
148
  position: relative;
149
- box-shadow: none;
149
+ /* stylelint-disable-next-line declaration-no-important */
150
+ box-shadow: none !important;
150
151
  z-index: 0;
151
152
  }
152
153
 
@@ -146,7 +146,8 @@
146
146
  top: 0;
147
147
  bottom: 0;
148
148
  position: relative;
149
- box-shadow: none;
149
+ /* stylelint-disable-next-line declaration-no-important */
150
+ box-shadow: none !important;
150
151
  z-index: 0;
151
152
  }
152
153
 
@@ -3,7 +3,6 @@
3
3
  */
4
4
  import { expect } from "@playwright/test";
5
5
  import { test, configs } from "../../../../utils/test/playwright/index";
6
- const IGNORED_KEYS = ['Tab', 'Shift', 'Meta', 'Alt', 'Control'];
7
6
  configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
8
7
  test.describe(title('textarea: clearOnEdit'), () => {
9
8
  test('should clear when typed into', async ({ page }) => {
@@ -22,40 +21,5 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) =>
22
21
  await page.waitForChanges();
23
22
  await expect(textarea).toHaveJSProperty('value', 'abc');
24
23
  });
25
- test('should not clear the textarea if it does not have an initial value when typing', async ({ page }) => {
26
- await page.setContent(`<ion-textarea label="textarea" value="" clear-on-edit="true"></ion-textarea>`, config);
27
- const textarea = page.locator('ion-textarea');
28
- await textarea.click();
29
- await textarea.type('hello world');
30
- await expect(textarea).toHaveJSProperty('value', 'hello world');
31
- });
32
- IGNORED_KEYS.forEach((ignoredKey) => {
33
- test(`should not clear when ${ignoredKey} is pressed`, async ({ page, skip }) => {
34
- skip.browser((browserName) => browserName === 'firefox' && ignoredKey === 'Meta', 'Firefox incorrectly adds "OS" to the textarea when pressing the Meta key on Linux');
35
- await page.setContent(`<ion-textarea value="abc" clear-on-edit="true" aria-label="textarea"></ion-textarea>`, config);
36
- const textarea = page.locator('ion-textarea');
37
- await textarea.locator('textarea').focus();
38
- await page.keyboard.press(ignoredKey);
39
- await page.waitForChanges();
40
- await expect(textarea).toHaveJSProperty('value', 'abc');
41
- });
42
- });
43
- test('should clear after when pressing valid key after pressing ignored key', async ({ page }) => {
44
- test.info().annotations.push({
45
- type: 'issue',
46
- description: 'https://github.com/ionic-team/ionic-framework/issues/28633',
47
- });
48
- await page.setContent(`<ion-textarea value="abc" clear-on-edit="true" aria-label="textarea"></ion-textarea>`, config);
49
- const textarea = page.locator('ion-textarea');
50
- await textarea.locator('textarea').focus();
51
- // ignored
52
- await page.keyboard.press('Shift');
53
- await page.waitForChanges();
54
- await expect(textarea).toHaveJSProperty('value', 'abc');
55
- // allowed
56
- await page.keyboard.press('a');
57
- await page.waitForChanges();
58
- await expect(textarea).toHaveJSProperty('value', 'a');
59
- });
60
24
  });
61
25
  });
@@ -238,38 +238,15 @@ export class Textarea {
238
238
  if (!this.clearOnEdit) {
239
239
  return;
240
240
  }
241
- /**
242
- * The following keys do not modify the
243
- * contents of the input. As a result, pressing
244
- * them should not edit the textarea.
245
- *
246
- * We can't check to see if the value of the textarea
247
- * was changed because we call checkClearOnEdit
248
- * in a keydown listener, and the key has not yet
249
- * been added to the textarea.
250
- *
251
- * Unlike ion-input, the "Enter" key does modify the
252
- * textarea by adding a new line, so "Enter" is not
253
- * included in the IGNORED_KEYS array.
254
- */
255
- const IGNORED_KEYS = ['Tab', 'Shift', 'Meta', 'Alt', 'Control'];
256
- const pressedIgnoredKey = IGNORED_KEYS.includes(ev.key);
257
241
  /**
258
242
  * Clear the textarea if the control has not been previously cleared
259
243
  * during focus.
260
244
  */
261
- if (!this.didTextareaClearOnEdit && this.hasValue() && !pressedIgnoredKey) {
245
+ if (!this.didTextareaClearOnEdit && this.hasValue() && ev.key !== 'Tab') {
262
246
  this.value = '';
263
247
  this.emitInputChange(ev);
264
248
  }
265
- /**
266
- * Pressing an IGNORED_KEYS first and
267
- * then an allowed key will cause the input to not
268
- * be cleared.
269
- */
270
- if (!pressedIgnoredKey) {
271
- this.didTextareaClearOnEdit = true;
272
- }
249
+ this.didTextareaClearOnEdit = true;
273
250
  }
274
251
  focusChange() {
275
252
  this.emitStyle();
@@ -1,6 +1,15 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
+ import { win } from "./browser/index";
5
+ import { config } from "../global/config";
6
+ /**
7
+ * CloseWatcher is a newer API that lets
8
+ * use detect the hardware back button event
9
+ * in a web browser: https://caniuse.com/?search=closewatcher
10
+ * However, not every browser supports it yet.
11
+ */
12
+ export const shoudUseCloseWatcher = config.get('experimentalCloseWatcher', false) && win !== undefined && 'CloseWatcher' in win;
4
13
  /**
5
14
  * When hardwareBackButton: false in config,
6
15
  * we need to make sure we also block the default
@@ -17,7 +26,7 @@ export const blockHardwareBackButton = () => {
17
26
  export const startHardwareBackButton = () => {
18
27
  const doc = document;
19
28
  let busy = false;
20
- doc.addEventListener('backbutton', () => {
29
+ const backButtonCallback = () => {
21
30
  if (busy) {
22
31
  return;
23
32
  }
@@ -63,7 +72,35 @@ export const startHardwareBackButton = () => {
63
72
  }
64
73
  };
65
74
  processHandlers();
66
- });
75
+ };
76
+ /**
77
+ * If the CloseWatcher is defined then
78
+ * we don't want to also listen for the native
79
+ * backbutton event otherwise we may get duplicate
80
+ * events firing.
81
+ */
82
+ if (shoudUseCloseWatcher) {
83
+ let watcher;
84
+ const configureWatcher = () => {
85
+ watcher === null || watcher === void 0 ? void 0 : watcher.destroy();
86
+ watcher = new win.CloseWatcher();
87
+ /**
88
+ * Once a close request happens
89
+ * the watcher gets destroyed.
90
+ * As a result, we need to re-configure
91
+ * the watcher so we can respond to other
92
+ * close requests.
93
+ */
94
+ watcher.onclose = () => {
95
+ backButtonCallback();
96
+ configureWatcher();
97
+ };
98
+ };
99
+ configureWatcher();
100
+ }
101
+ else {
102
+ doc.addEventListener('backbutton', backButtonCallback);
103
+ }
67
104
  };
68
105
  export const OVERLAY_BACK_BUTTON_PRIORITY = 100;
69
106
  export const MENU_BACK_BUTTON_PRIORITY = 99; // 1 less than overlay priority since menu is displayed behind overlays
@@ -2,6 +2,7 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { doc } from "./browser/index";
5
+ import { shoudUseCloseWatcher } from "./hardware-back-button";
5
6
  import { config } from "../global/config";
6
7
  import { getIonMode } from "../global/ionic-global";
7
8
  import { CoreDelegate } from "./framework-delegate";
@@ -296,19 +297,38 @@ const connectListeners = (doc) => {
296
297
  const lastOverlay = getPresentedOverlay(doc);
297
298
  if (lastOverlay === null || lastOverlay === void 0 ? void 0 : lastOverlay.backdropDismiss) {
298
299
  ev.detail.register(OVERLAY_BACK_BUTTON_PRIORITY, () => {
299
- return lastOverlay.dismiss(undefined, BACKDROP);
300
+ /**
301
+ * Do not return this promise otherwise
302
+ * the hardware back button utility will
303
+ * be blocked until the overlay dismisses.
304
+ * This is important for a modal with canDismiss.
305
+ * If the application presents a confirmation alert
306
+ * in the "canDismiss" callback, then it will be impossible
307
+ * to use the hardware back button to dismiss the alert
308
+ * dialog because the hardware back button utility
309
+ * is blocked on waiting for the modal to dismiss.
310
+ */
311
+ lastOverlay.dismiss(undefined, BACKDROP);
300
312
  });
301
313
  }
302
314
  });
303
- // handle ESC to close overlay
304
- doc.addEventListener('keydown', (ev) => {
305
- if (ev.key === 'Escape') {
306
- const lastOverlay = getPresentedOverlay(doc);
307
- if (lastOverlay === null || lastOverlay === void 0 ? void 0 : lastOverlay.backdropDismiss) {
308
- lastOverlay.dismiss(undefined, BACKDROP);
315
+ /**
316
+ * Handle ESC to close overlay
317
+ * CloseWatcher also handles pressing the Esc
318
+ * key, so if a browser supports CloseWatcher then
319
+ * this behavior will be handled via the ionBackButton
320
+ * event.
321
+ */
322
+ if (!shoudUseCloseWatcher) {
323
+ doc.addEventListener('keydown', (ev) => {
324
+ if (ev.key === 'Escape') {
325
+ const lastOverlay = getPresentedOverlay(doc);
326
+ if (lastOverlay === null || lastOverlay === void 0 ? void 0 : lastOverlay.backdropDismiss) {
327
+ lastOverlay.dismiss(undefined, BACKDROP);
328
+ }
309
329
  }
310
- }
311
- });
330
+ });
331
+ }
312
332
  }
313
333
  };
314
334
  export const dismissOverlay = (doc, data, role, overlayTag, id) => {
package/dist/docs.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
- "timestamp": "2023-12-13T00:01:55",
2
+ "timestamp": "2023-12-14T16:01:24",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
- "version": "4.8.2",
5
+ "version": "4.8.1",
6
6
  "typescriptVersion": "5.2.2"
7
7
  },
8
8
  "components": [
@@ -14490,11 +14490,6 @@
14490
14490
  "event": "click",
14491
14491
  "capture": true,
14492
14492
  "passive": false
14493
- },
14494
- {
14495
- "event": "keydown",
14496
- "capture": false,
14497
- "passive": false
14498
14493
  }
14499
14494
  ],
14500
14495
  "styles": [
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { i as initialize } from './ionic-global-1f99b929.js';
4
+ import { i as initialize } from './ionic-global-c0cda98e.js';
5
5
 
6
6
  const globalScripts = initialize;
7
7
 
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { w as writeTask } from './index-b7d870cf.js';
4
+ import { w as writeTask } from './index-08d686eb.js';
5
5
  import { h as hapticSelectionEnd, a as hapticSelectionStart, b as hapticSelectionChanged } from './haptic-554688a5.js';
6
6
  import { createGesture } from './index-2cf77112.js';
7
7
 
@@ -1,6 +1,17 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
+ import { w as win } from './index-a5d50daf.js';
5
+ import { c as config } from './ionic-global-c0cda98e.js';
6
+ import './index-08d686eb.js';
7
+
8
+ /**
9
+ * CloseWatcher is a newer API that lets
10
+ * use detect the hardware back button event
11
+ * in a web browser: https://caniuse.com/?search=closewatcher
12
+ * However, not every browser supports it yet.
13
+ */
14
+ const shoudUseCloseWatcher = config.get('experimentalCloseWatcher', false) && win !== undefined && 'CloseWatcher' in win;
4
15
  /**
5
16
  * When hardwareBackButton: false in config,
6
17
  * we need to make sure we also block the default
@@ -17,7 +28,7 @@ const blockHardwareBackButton = () => {
17
28
  const startHardwareBackButton = () => {
18
29
  const doc = document;
19
30
  let busy = false;
20
- doc.addEventListener('backbutton', () => {
31
+ const backButtonCallback = () => {
21
32
  if (busy) {
22
33
  return;
23
34
  }
@@ -63,9 +74,37 @@ const startHardwareBackButton = () => {
63
74
  }
64
75
  };
65
76
  processHandlers();
66
- });
77
+ };
78
+ /**
79
+ * If the CloseWatcher is defined then
80
+ * we don't want to also listen for the native
81
+ * backbutton event otherwise we may get duplicate
82
+ * events firing.
83
+ */
84
+ if (shoudUseCloseWatcher) {
85
+ let watcher;
86
+ const configureWatcher = () => {
87
+ watcher === null || watcher === void 0 ? void 0 : watcher.destroy();
88
+ watcher = new win.CloseWatcher();
89
+ /**
90
+ * Once a close request happens
91
+ * the watcher gets destroyed.
92
+ * As a result, we need to re-configure
93
+ * the watcher so we can respond to other
94
+ * close requests.
95
+ */
96
+ watcher.onclose = () => {
97
+ backButtonCallback();
98
+ configureWatcher();
99
+ };
100
+ };
101
+ configureWatcher();
102
+ }
103
+ else {
104
+ doc.addEventListener('backbutton', backButtonCallback);
105
+ }
67
106
  };
68
107
  const OVERLAY_BACK_BUTTON_PRIORITY = 100;
69
108
  const MENU_BACK_BUTTON_PRIORITY = 99; // 1 less than overlay priority since menu is displayed behind overlays
70
109
 
71
- export { MENU_BACK_BUTTON_PRIORITY, OVERLAY_BACK_BUTTON_PRIORITY, blockHardwareBackButton, startHardwareBackButton };
110
+ export { MENU_BACK_BUTTON_PRIORITY, OVERLAY_BACK_BUTTON_PRIORITY, blockHardwareBackButton, shoudUseCloseWatcher, startHardwareBackButton };
@@ -960,10 +960,8 @@ const createElm = (oldParentVNode, newParentVNode, childIndex, parentElm) => {
960
960
  }
961
961
  }
962
962
  }
963
- // This needs to always happen so we can hide nodes that are projected
964
- // to another component but don't end up in a slot
965
- elm['s-hn'] = hostTagName;
966
963
  {
964
+ elm['s-hn'] = hostTagName;
967
965
  if (newVNode.$flags$ & (2 /* VNODE_FLAGS.isSlotFallback */ | 1 /* VNODE_FLAGS.isSlotReference */)) {
968
966
  // remember the content reference comment
969
967
  elm['s-sr'] = true;
@@ -976,11 +974,9 @@ const createElm = (oldParentVNode, newParentVNode, childIndex, parentElm) => {
976
974
  // check if we've got an old vnode for this slot
977
975
  oldVNode = oldParentVNode && oldParentVNode.$children$ && oldParentVNode.$children$[childIndex];
978
976
  if (oldVNode && oldVNode.$tag$ === newVNode.$tag$ && oldParentVNode.$elm$) {
979
- {
980
- // we've got an old slot vnode and the wrapper is being replaced
981
- // so let's move the old slot content back to its original location
982
- putBackInOriginalLocation(oldParentVNode.$elm$, false);
983
- }
977
+ // we've got an old slot vnode and the wrapper is being replaced
978
+ // so let's move the old slot content back to it's original location
979
+ putBackInOriginalLocation(oldParentVNode.$elm$, false);
984
980
  }
985
981
  }
986
982
  }
@@ -993,6 +989,9 @@ const putBackInOriginalLocation = (parentElm, recursive) => {
993
989
  for (let i = oldSlotChildNodes.length - 1; i >= 0; i--) {
994
990
  const childNode = oldSlotChildNodes[i];
995
991
  if (childNode['s-hn'] !== hostTagName && childNode['s-ol']) {
992
+ // // this child node in the old element is from another component
993
+ // // remove this node from the old slot's parent
994
+ // childNode.remove();
996
995
  // and relocate it back to it's original location
997
996
  parentReferenceNode(childNode).insertBefore(childNode, referenceNode(childNode));
998
997
  // remove the old original location comment entirely
@@ -1635,7 +1634,7 @@ const nullifyVNodeRefs = (vNode) => {
1635
1634
  * @param isInitialLoad whether or not this is the first call after page load
1636
1635
  */
1637
1636
  const renderVdom = (hostRef, renderFnResults, isInitialLoad = false) => {
1638
- var _a, _b, _c, _d;
1637
+ var _a, _b;
1639
1638
  const hostElm = hostRef.$hostElement$;
1640
1639
  const cmpMeta = hostRef.$cmpMeta$;
1641
1640
  const oldVNode = hostRef.$vnode$ || newVNode(null, null);
@@ -1750,24 +1749,12 @@ const renderVdom = (hostRef, renderFnResults, isInitialLoad = false) => {
1750
1749
  // we're just going to append the node as the last child of the parent. Passing
1751
1750
  // `null` as the second arg here will trigger that behavior.
1752
1751
  parentNodeRef.insertBefore(nodeToRelocate, insertBeforeNode);
1753
- // Reset the `hidden` value back to what it was defined as originally
1754
- // This solves a problem where a `slot` is dynamically rendered and `hidden` may have
1755
- // been set on content originally, but now it has a slot to go to so it should have
1756
- // the value it was defined as having in the DOM, not what we overrode it to.
1757
- if (nodeToRelocate.nodeType === 1 /* NODE_TYPE.ElementNode */) {
1758
- nodeToRelocate.hidden = (_c = nodeToRelocate['s-ih']) !== null && _c !== void 0 ? _c : false;
1759
- }
1760
1752
  }
1761
1753
  }
1762
1754
  }
1763
1755
  else {
1764
1756
  // this node doesn't have a slot home to go to, so let's hide it
1765
1757
  if (nodeToRelocate.nodeType === 1 /* NODE_TYPE.ElementNode */) {
1766
- // Store the initial value of `hidden` so we can reset it later when
1767
- // moving nodes around.
1768
- if (isInitialLoad) {
1769
- nodeToRelocate['s-ih'] = (_d = nodeToRelocate.hidden) !== null && _d !== void 0 ? _d : false;
1770
- }
1771
1758
  nodeToRelocate.hidden = true;
1772
1759
  }
1773
1760
  }
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { w as writeTask, B as Build } from './index-b7d870cf.js';
4
+ import { w as writeTask, B as Build } from './index-08d686eb.js';
5
5
  import { r as raf } from './helpers-ae653409.js';
6
6
 
7
7
  const LIFECYCLE_WILL_ENTER = 'ionViewWillEnter';
@@ -10,8 +10,8 @@ const LIFECYCLE_WILL_LEAVE = 'ionViewWillLeave';
10
10
  const LIFECYCLE_DID_LEAVE = 'ionViewDidLeave';
11
11
  const LIFECYCLE_WILL_UNLOAD = 'ionViewWillUnload';
12
12
 
13
- const iosTransitionAnimation = () => import('./ios.transition-3376ccb2.js');
14
- const mdTransitionAnimation = () => import('./md.transition-f992779f.js');
13
+ const iosTransitionAnimation = () => import('./ios.transition-802a84a6.js');
14
+ const mdTransitionAnimation = () => import('./md.transition-43c2874d.js');
15
15
  // TODO(FW-2832): types
16
16
  const transition = (opts) => {
17
17
  return new Promise((resolve, reject) => {
@@ -2,10 +2,10 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { d as doc } from './index-a5d50daf.js';
5
- import { MENU_BACK_BUTTON_PRIORITY } from './hardware-back-button-b2bc76db.js';
5
+ import { MENU_BACK_BUTTON_PRIORITY } from './hardware-back-button-2f36ab27.js';
6
6
  import { p as printIonWarning } from './index-9b0d46f4.js';
7
7
  import { c as componentOnReady } from './helpers-ae653409.js';
8
- import { b as getIonMode } from './ionic-global-1f99b929.js';
8
+ import { b as getIonMode } from './ionic-global-c0cda98e.js';
9
9
  import { c as createAnimation } from './animation-dde8cc0d.js';
10
10
 
11
11
  /**
package/dist/esm/index.js CHANGED
@@ -2,21 +2,21 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  export { c as createAnimation } from './animation-dde8cc0d.js';
5
- export { a as LIFECYCLE_DID_ENTER, c as LIFECYCLE_DID_LEAVE, L as LIFECYCLE_WILL_ENTER, b as LIFECYCLE_WILL_LEAVE, d as LIFECYCLE_WILL_UNLOAD, g as getIonPageElement } from './index-4743453d.js';
6
- export { iosTransitionAnimation } from './ios.transition-3376ccb2.js';
7
- export { mdTransitionAnimation } from './md.transition-f992779f.js';
5
+ export { a as LIFECYCLE_DID_ENTER, c as LIFECYCLE_DID_LEAVE, L as LIFECYCLE_WILL_ENTER, b as LIFECYCLE_WILL_LEAVE, d as LIFECYCLE_WILL_UNLOAD, g as getIonPageElement } from './index-1932b201.js';
6
+ export { iosTransitionAnimation } from './ios.transition-802a84a6.js';
7
+ export { mdTransitionAnimation } from './md.transition-43c2874d.js';
8
8
  export { g as getTimeGivenProgression } from './cubic-bezier-fe2083dc.js';
9
9
  export { createGesture } from './index-2cf77112.js';
10
- export { g as getPlatforms, i as initialize, a as isPlatform } from './ionic-global-1f99b929.js';
10
+ export { g as getPlatforms, i as initialize, a as isPlatform } from './ionic-global-c0cda98e.js';
11
11
  export { c as componentOnReady } from './helpers-ae653409.js';
12
12
  export { I as IonicSafeString, g as getMode, s as setupConfig } from './config-49c88215.js';
13
13
  export { o as openURL } from './theme-01f3f29c.js';
14
- export { m as menuController } from './index-1193f005.js';
15
- export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as pickerController, c as popoverController, t as toastController } from './overlays-b33f6bca.js';
14
+ export { m as menuController } from './index-2c866d2e.js';
15
+ export { b as actionSheetController, a as alertController, l as loadingController, m as modalController, p as pickerController, c as popoverController, t as toastController } from './overlays-6e053935.js';
16
16
  import './index-a5d50daf.js';
17
- import './index-b7d870cf.js';
17
+ import './index-08d686eb.js';
18
18
  import './gesture-controller-1bf57181.js';
19
- import './hardware-back-button-b2bc76db.js';
19
+ import './hardware-back-button-2f36ab27.js';
20
20
  import './index-9b0d46f4.js';
21
21
  import './framework-delegate-bc1fd82a.js';
22
22
 
@@ -1,10 +1,10 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { r as registerInstance, h, H as Host, f as getElement, d as createEvent } from './index-b7d870cf.js';
4
+ import { r as registerInstance, h, H as Host, f as getElement, d as createEvent } from './index-08d686eb.js';
5
5
  import { r as raf, t as transitionEndAsync, a as addEventListener, b as removeEventListener, g as getElementRoot } from './helpers-ae653409.js';
6
6
  import { l as chevronDown } from './index-c132c5f1.js';
7
- import { c as config, b as getIonMode } from './ionic-global-1f99b929.js';
7
+ import { c as config, b as getIonMode } from './ionic-global-c0cda98e.js';
8
8
  import { p as printIonWarning } from './index-9b0d46f4.js';
9
9
 
10
10
  const accordionIosCss = ":host{display:block;position:relative;width:100%;background-color:var(--ion-background-color, #ffffff);overflow:hidden;z-index:0}:host(.accordion-expanding) ::slotted(ion-item[slot=header]),:host(.accordion-expanded) ::slotted(ion-item[slot=header]){--border-width:0px}:host(.accordion-animated){-webkit-transition:all 300ms cubic-bezier(0.25, 0.8, 0.5, 1);transition:all 300ms cubic-bezier(0.25, 0.8, 0.5, 1)}:host(.accordion-animated) #content{-webkit-transition:max-height 300ms cubic-bezier(0.25, 0.8, 0.5, 1);transition:max-height 300ms cubic-bezier(0.25, 0.8, 0.5, 1)}#content{overflow:hidden;will-change:max-height}:host(.accordion-collapsing) #content{max-height:0 !important}:host(.accordion-collapsed) #content{display:none}:host(.accordion-expanding) #content{max-height:0}:host(.accordion-expanding) #content-wrapper{overflow:auto}:host(.accordion-disabled) #header,:host(.accordion-readonly) #header,:host(.accordion-disabled) #content,:host(.accordion-readonly) #content{pointer-events:none}:host(.accordion-disabled) #header,:host(.accordion-disabled) #content{opacity:0.4}@media (prefers-reduced-motion: reduce){:host,#content{-webkit-transition:none !important;transition:none !important}}:host(.accordion-next) ::slotted(ion-item[slot=header]){--border-width:0.55px 0px 0.55px 0px}";