voyager-ionic-core 9.0.6 → 9.0.9

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 (497) hide show
  1. package/components/index.js +1 -1
  2. package/components/ion-accordion-group.js +1 -1
  3. package/components/ion-accordion.js +1 -1
  4. package/components/ion-action-sheet.js +1 -1
  5. package/components/ion-alert.js +1 -1
  6. package/components/ion-app.js +1 -1
  7. package/components/ion-avatar.js +1 -1
  8. package/components/ion-back-button.js +1 -1
  9. package/components/ion-backdrop.js +1 -1
  10. package/components/ion-badge.js +1 -1
  11. package/components/ion-breadcrumb.js +1 -1
  12. package/components/ion-breadcrumbs.js +1 -1
  13. package/components/ion-button.js +1 -1
  14. package/components/ion-buttons.js +1 -1
  15. package/components/ion-card-content.js +1 -1
  16. package/components/ion-card-header.js +1 -1
  17. package/components/ion-card-subtitle.js +1 -1
  18. package/components/ion-card-title.js +1 -1
  19. package/components/ion-card.js +1 -1
  20. package/components/ion-checkbox.js +1 -1
  21. package/components/ion-chip.js +1 -1
  22. package/components/ion-col.js +1 -1
  23. package/components/ion-content.js +1 -1
  24. package/components/ion-datetime-button.js +1 -1
  25. package/components/ion-datetime.js +1 -1
  26. package/components/ion-fab-button.js +1 -1
  27. package/components/ion-fab-list.js +1 -1
  28. package/components/ion-fab.js +1 -1
  29. package/components/ion-footer.js +1 -1
  30. package/components/ion-grid.js +1 -1
  31. package/components/ion-header.js +1 -1
  32. package/components/ion-icon.js +1 -1
  33. package/components/ion-img.js +1 -1
  34. package/components/ion-infinite-scroll-content.js +1 -1
  35. package/components/ion-infinite-scroll.js +1 -1
  36. package/components/ion-input-otp.js +1 -1
  37. package/components/ion-input-password-toggle.js +1 -1
  38. package/components/ion-input.js +1 -1
  39. package/components/ion-item-divider.js +1 -1
  40. package/components/ion-item-group.js +1 -1
  41. package/components/ion-item-option.js +1 -1
  42. package/components/ion-item-options.js +1 -1
  43. package/components/ion-item-sliding.js +1 -1
  44. package/components/ion-item.js +1 -1
  45. package/components/ion-label.js +1 -1
  46. package/components/ion-list-header.js +1 -1
  47. package/components/ion-list.js +1 -1
  48. package/components/ion-loading.js +1 -1
  49. package/components/ion-menu-button.js +1 -1
  50. package/components/ion-menu-toggle.js +1 -1
  51. package/components/ion-menu.js +1 -1
  52. package/components/ion-modal.js +1 -1
  53. package/components/ion-nav-link.js +1 -1
  54. package/components/ion-nav.js +1 -1
  55. package/components/ion-note.js +1 -1
  56. package/components/ion-picker-column-option.js +1 -1
  57. package/components/ion-picker-column.js +1 -1
  58. package/components/ion-picker.js +1 -1
  59. package/components/ion-popover.js +1 -1
  60. package/components/ion-progress-bar.js +1 -1
  61. package/components/ion-radio-group.js +1 -1
  62. package/components/ion-radio.js +1 -1
  63. package/components/ion-range.js +1 -1
  64. package/components/ion-refresher-content.js +1 -1
  65. package/components/ion-refresher.js +1 -1
  66. package/components/ion-reorder-group.js +1 -1
  67. package/components/ion-reorder.js +1 -1
  68. package/components/ion-ripple-effect.js +1 -1
  69. package/components/ion-route-redirect.js +1 -1
  70. package/components/ion-route.js +1 -1
  71. package/components/ion-router-link.js +1 -1
  72. package/components/ion-router-outlet.js +1 -1
  73. package/components/ion-router.js +1 -1
  74. package/components/ion-row.js +1 -1
  75. package/components/ion-searchbar.js +1 -1
  76. package/components/ion-segment-button.js +1 -1
  77. package/components/ion-segment-content.js +1 -1
  78. package/components/ion-segment-view.js +1 -1
  79. package/components/ion-segment.js +1 -1
  80. package/components/ion-select-modal.js +1 -1
  81. package/components/ion-select-option.js +1 -1
  82. package/components/ion-select-popover.js +1 -1
  83. package/components/ion-select.js +1 -1
  84. package/components/ion-skeleton-text.js +1 -1
  85. package/components/ion-spinner.js +1 -1
  86. package/components/ion-split-pane.js +1 -1
  87. package/components/ion-tab-bar.js +1 -1
  88. package/components/ion-tab-button.js +1 -1
  89. package/components/ion-tab.js +1 -1
  90. package/components/ion-tabs.js +1 -1
  91. package/components/ion-text.js +1 -1
  92. package/components/ion-textarea.js +1 -1
  93. package/components/ion-thumbnail.js +1 -1
  94. package/components/ion-title.js +1 -1
  95. package/components/ion-toast.js +1 -1
  96. package/components/ion-toggle.js +1 -1
  97. package/components/ion-toolbar.js +1 -1
  98. package/components/{p-D0jSx7rE.js → p--cshUOAU.js} +1 -1
  99. package/components/{p-DSmHJ2DH.js → p-7KepMw9O.js} +1 -1
  100. package/components/p-B-5Z9djt.js +4 -0
  101. package/components/p-B02CcbPD.js +4 -0
  102. package/components/{p-DlUdjUlf.js → p-B4IBdPVJ.js} +1 -1
  103. package/components/{p-BLjEwM6v.js → p-BMHdI-wb.js} +1 -1
  104. package/components/{p-CAQG0btC.js → p-BODcC-C0.js} +1 -1
  105. package/components/{p-Canp1qah.js → p-Ba9_OzSY.js} +1 -1
  106. package/components/{p-CJgshb3W.js → p-Bd8hg9FK.js} +1 -1
  107. package/components/{p-CHHkdXfP.js → p-BqyLLYLm.js} +1 -1
  108. package/components/{p-C_NQIzjP.js → p-C1AxSUnp.js} +1 -1
  109. package/components/{p-BinR4_P7.js → p-CKTjkpAq.js} +1 -1
  110. package/components/{p-y7Nhe3de.js → p-CKiqp4Vl.js} +1 -1
  111. package/components/{p-CiXOsJF2.js → p-CONpe3oX.js} +1 -1
  112. package/components/{p-BSJriPuC.js → p-CW84OFQa.js} +1 -1
  113. package/components/{p-PPagT42x.js → p-CYctYy9B.js} +1 -1
  114. package/components/{p-CvzE7FFp.js → p-C_gnmBt2.js} +1 -1
  115. package/components/{p-C9ioHZq-.js → p-CdrNHfZl.js} +1 -1
  116. package/components/{p-Dlr7b3_2.js → p-ChkSQqfP.js} +1 -1
  117. package/components/{p-LH1I_Zhd.js → p-ChsJlFCQ.js} +1 -1
  118. package/components/{p-DGUed0uX.js → p-CjPRDxby.js} +1 -1
  119. package/components/p-CohRJRIu.js +4 -0
  120. package/components/{p-BrOSQhkA.js → p-CqvARtmt.js} +1 -1
  121. package/components/p-Ct2aBEue.js +4 -0
  122. package/components/{p-6sKRBFnK.js → p-CvyvLbPe.js} +1 -1
  123. package/components/{p-C7rB-0-1.js → p-CwEis84J.js} +1 -1
  124. package/components/p-CxEV3Vwy.js +4 -0
  125. package/components/p-Cyajikho.js +4 -0
  126. package/components/{p-BKxLivx4.js → p-D0nwlsl_.js} +1 -1
  127. package/components/{p-CXy2v7GI.js → p-DBtFJlTi.js} +1 -1
  128. package/components/p-DD92Fw3n.js +4 -0
  129. package/components/{p-DM2jMsSO.js → p-DDI6VLW9.js} +1 -1
  130. package/components/{p-DWGgvN5e.js → p-DHo45oj7.js} +1 -1
  131. package/{dist/ionic/p-Bv-6401R.js → components/p-Dbi3KqKm.js} +1 -1
  132. package/components/p-DfDIY2oP.js +4 -0
  133. package/components/{p-CTUMJM0R.js → p-Drpw2dyl.js} +1 -1
  134. package/components/{p-T2dnrBya.js → p-GpqwNbxf.js} +1 -1
  135. package/components/{p-BEiYs-sz.js → p-HthJZjZ6.js} +1 -1
  136. package/components/p-IQN1T5zw.js +4 -0
  137. package/components/{p-B_tZQKpS.js → p-KbMCbGRA.js} +1 -1
  138. package/components/p-ODGeXc3M.js +4 -0
  139. package/components/p-R4UxBukQ.js +4 -0
  140. package/components/p-SHHIB5F0.js +4 -0
  141. package/components/{p-B8HBLiYi.js → p-V1THdfzs.js} +1 -1
  142. package/components/{p-D4NOsSCE.js → p-YNnH1_Hs.js} +1 -1
  143. package/components/{p-RJT5zTbD.js → p-ZrYBjOcc.js} +1 -1
  144. package/components/{p-eJpG4UbM.js → p-_y7kwBO8.js} +1 -1
  145. package/components/{p-CiFFeRH9.js → p-hLu-eIbb.js} +1 -1
  146. package/components/{p-CQjNc-Pz.js → p-jsVMT15X.js} +1 -1
  147. package/components/{p-CzykzqAO.js → p-r59A3wQk.js} +1 -1
  148. package/components/{p-DPyjiKOq.js → p-yGD6MBgf.js} +1 -1
  149. package/components/p-zQi7R3tS.js +4 -0
  150. package/css/core.css.map +1 -1
  151. package/css/display.css.map +1 -1
  152. package/css/flex-utils.css.map +1 -1
  153. package/css/float-elements.css +1 -1
  154. package/css/float-elements.css.map +1 -1
  155. package/css/global.bundle.css.map +1 -1
  156. package/css/ionic.bundle.css +1 -1
  157. package/css/ionic.bundle.css.map +1 -1
  158. package/css/padding.css.map +1 -1
  159. package/css/structure.css.map +1 -1
  160. package/css/text-alignment.css.map +1 -1
  161. package/css/text-transformation.css.map +1 -1
  162. package/css/typography.css.map +1 -1
  163. package/css/utils.bundle.css +1 -1
  164. package/css/utils.bundle.css.map +1 -1
  165. package/dist/cjs/{animation-BFKyYY11.js → animation-DcgLg_PI.js} +2 -2
  166. package/dist/cjs/{app-globals-BLTzqkrC.js → app-globals-BoFCZq0K.js} +1 -1
  167. package/dist/cjs/{attribute-controller-CXIeB0Mn.js → attribute-controller-BjTE2TOf.js} +1 -1
  168. package/dist/cjs/{button-active-CEQaiV9N.js → button-active-FdsfRDY_.js} +2 -2
  169. package/dist/cjs/{capacitor-BMzmHhwe.js → capacitor-C6Pp4Z7A.js} +1 -1
  170. package/dist/cjs/{format-CdRlDqPs.js → format-CVjpvAl1.js} +1 -1
  171. package/dist/cjs/{framework-delegate-DTLbqaaO.js → framework-delegate-JbKIVMzR.js} +1 -1
  172. package/dist/cjs/{haptic-CJVUv_GB.js → haptic--4QteuuM.js} +1 -1
  173. package/dist/cjs/{helpers-Crluoxqu.js → helpers-Cqr69qxA.js} +1 -1
  174. package/dist/cjs/{index-BSD7toMO.js → index-B4ONUQRp.js} +1 -1
  175. package/dist/cjs/{index-BKpybYNI.js → index-BQpSekmz.js} +2 -2
  176. package/dist/cjs/{index-CElfU-dK.js → index-BhWiDK25.js} +6 -5
  177. package/dist/cjs/{index-SAR1xwtW.js → index-BiQyIvoc.js} +40 -27
  178. package/dist/cjs/{index-BAM4223M.js → index-CNaZ6SYM.js} +2 -2
  179. package/dist/cjs/{index-CgXTRA_-.js → index-DCfr5hz-.js} +16 -4
  180. package/dist/cjs/index.cjs.js +11 -11
  181. package/dist/cjs/{input-shims-CHghGZe-.js → input-shims-2AsXPZ5m.js} +5 -5
  182. package/dist/cjs/{input.utils-BBZr0wjw.js → input.utils-Becpo0ax.js} +1 -1
  183. package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
  184. package/dist/cjs/ion-action-sheet.cjs.entry.js +11 -11
  185. package/dist/cjs/ion-alert.cjs.entry.js +11 -11
  186. package/dist/cjs/ion-app_8.cjs.entry.js +46 -18
  187. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
  188. package/dist/cjs/ion-back-button.cjs.entry.js +3 -3
  189. package/dist/cjs/ion-backdrop.cjs.entry.js +7 -3
  190. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +3 -3
  191. package/dist/cjs/ion-button_2.cjs.entry.js +4 -4
  192. package/dist/cjs/ion-card_5.cjs.entry.js +4 -4
  193. package/dist/cjs/ion-checkbox.cjs.entry.js +4 -4
  194. package/dist/cjs/ion-chip.cjs.entry.js +2 -2
  195. package/dist/cjs/ion-col_3.cjs.entry.js +2 -2
  196. package/dist/cjs/ion-datetime-button.cjs.entry.js +4 -4
  197. package/dist/cjs/ion-datetime.cjs.entry.js +61 -15
  198. package/dist/cjs/ion-fab_3.cjs.entry.js +3 -3
  199. package/dist/cjs/ion-img.cjs.entry.js +3 -3
  200. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +5 -5
  201. package/dist/cjs/ion-input-otp.cjs.entry.js +33 -8
  202. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +2 -2
  203. package/dist/cjs/ion-input.cjs.entry.js +17 -17
  204. package/dist/cjs/ion-item-option_3.cjs.entry.js +4 -4
  205. package/dist/cjs/ion-item_8.cjs.entry.js +4 -4
  206. package/dist/cjs/ion-loading.cjs.entry.js +7 -7
  207. package/dist/cjs/ion-menu_3.cjs.entry.js +10 -9
  208. package/dist/cjs/ion-modal.cjs.entry.js +41 -91
  209. package/dist/cjs/ion-nav_2.cjs.entry.js +29 -7
  210. package/dist/cjs/ion-picker-column-option.cjs.entry.js +3 -3
  211. package/dist/cjs/ion-picker-column.cjs.entry.js +5 -5
  212. package/dist/cjs/ion-picker.cjs.entry.js +2 -2
  213. package/dist/cjs/ion-popover.cjs.entry.js +7 -7
  214. package/dist/cjs/ion-progress-bar.cjs.entry.js +3 -3
  215. package/dist/cjs/ion-radio_2.cjs.entry.js +4 -4
  216. package/dist/cjs/ion-range.cjs.entry.js +4 -4
  217. package/dist/cjs/ion-refresher_2.cjs.entry.js +8 -8
  218. package/dist/cjs/ion-reorder_2.cjs.entry.js +6 -6
  219. package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
  220. package/dist/cjs/ion-route_4.cjs.entry.js +4 -4
  221. package/dist/cjs/ion-searchbar.cjs.entry.js +3 -3
  222. package/dist/cjs/ion-segment-content.cjs.entry.js +1 -1
  223. package/dist/cjs/ion-segment-view.cjs.entry.js +1 -1
  224. package/dist/cjs/ion-segment_2.cjs.entry.js +3 -3
  225. package/dist/cjs/ion-select-modal.cjs.entry.js +7 -7
  226. package/dist/cjs/ion-select_3.cjs.entry.js +19 -19
  227. package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
  228. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  229. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +6 -6
  230. package/dist/cjs/ion-tab_2.cjs.entry.js +3 -3
  231. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  232. package/dist/cjs/ion-textarea.cjs.entry.js +16 -16
  233. package/dist/cjs/ion-toast.cjs.entry.js +7 -7
  234. package/dist/cjs/ion-toggle.cjs.entry.js +6 -6
  235. package/dist/cjs/{ionic-global-C1h8Yi_K.js → ionic-global-48ceLiJ6.js} +1 -1
  236. package/dist/cjs/ionic.cjs.js +5 -5
  237. package/dist/cjs/{ios.transition-YFSxiyP_.js → ios.transition-Ca6XODo9.js} +4 -4
  238. package/dist/cjs/{item-multiple-inputs-h2PyAFzG.js → item-multiple-inputs-C-hz7xrh.js} +1 -1
  239. package/dist/cjs/{keyboard-C-C7xMKk.js → keyboard-BlHp4a_c.js} +1 -1
  240. package/dist/cjs/{keyboard-Cv-LNReK.js → keyboard-c2_I35b-.js} +4 -4
  241. package/dist/cjs/{keyboard-controller-CLcFxSnb.js → keyboard-controller-DHS0BgXp.js} +2 -2
  242. package/dist/cjs/loader.cjs.js +4 -4
  243. package/dist/cjs/{md.transition-Cm8yg0UK.js → md.transition-D8SfNYEp.js} +4 -4
  244. package/dist/cjs/{overlays-C68wNDWY.js → overlays-CLld3axA.js} +79 -20
  245. package/dist/cjs/{select-option-render-C-Yh9yZG.js → select-option-render-CzyhrkOu.js} +2 -2
  246. package/dist/cjs/{slot-mutation-controller-zixZ5LyH.js → slot-mutation-controller-B2OfJEBH.js} +68 -34
  247. package/dist/cjs/{status-tap-C3frTJ4c.js → status-tap-CDA0Y3Ad.js} +3 -3
  248. package/dist/cjs/{swipe-back-ChrfFzIe.js → swipe-back-Dy8pxJCF.js} +2 -2
  249. package/dist/collection/collection-manifest.json +1 -1
  250. package/dist/collection/components/backdrop/backdrop.js +6 -2
  251. package/dist/collection/components/datetime/datetime.js +56 -10
  252. package/dist/collection/components/input/input.ios.css +7 -3
  253. package/dist/collection/components/input/input.js +11 -11
  254. package/dist/collection/components/input/input.md.css +28 -15
  255. package/dist/collection/components/input-otp/input-otp.js +29 -3
  256. package/dist/collection/components/menu/menu.js +4 -3
  257. package/dist/collection/components/modal/gestures/sheet.js +30 -80
  258. package/dist/collection/components/nav/nav.js +24 -2
  259. package/dist/collection/components/router-outlet/router-outlet.js +31 -3
  260. package/dist/collection/components/select/select.ios.css +7 -3
  261. package/dist/collection/components/select/select.js +10 -10
  262. package/dist/collection/components/select/select.md.css +28 -15
  263. package/dist/collection/components/textarea/textarea.ios.css +7 -3
  264. package/dist/collection/components/textarea/textarea.js +10 -10
  265. package/dist/collection/components/textarea/textarea.md.css +28 -17
  266. package/dist/collection/utils/forms/index.js +1 -1
  267. package/dist/collection/utils/forms/{start-container-controller.js → start-end-container-controller.js} +66 -32
  268. package/dist/collection/utils/hardware-back-button.js +41 -12
  269. package/dist/collection/utils/menu-controller/index.js +2 -1
  270. package/dist/collection/utils/overlays.js +30 -4
  271. package/dist/collection/utils/transition/index.js +11 -0
  272. package/dist/docs.json +4 -4
  273. package/dist/esm/{animation-CFd8Olt3.js → animation-DmtJpz89.js} +2 -2
  274. package/dist/esm/{app-globals-7GHLBkwd.js → app-globals-CNfpAPW6.js} +1 -1
  275. package/dist/esm/{attribute-controller-Cn665x42.js → attribute-controller-DPMIcbef.js} +1 -1
  276. package/dist/esm/{button-active-DMuYeDQN.js → button-active-DVk40Sjl.js} +2 -2
  277. package/dist/esm/{capacitor-CoEgIpR9.js → capacitor-CHJaJ9aX.js} +1 -1
  278. package/dist/esm/{format-C9zPmwKU.js → format-Ck1cw5z7.js} +1 -1
  279. package/dist/esm/{framework-delegate-DeT5pmPB.js → framework-delegate-CDjM1vRH.js} +1 -1
  280. package/dist/esm/{haptic-Dxm7ZmT5.js → haptic-WXfMCob9.js} +1 -1
  281. package/dist/esm/{helpers-B54ynME_.js → helpers-BJqKF1pr.js} +1 -1
  282. package/dist/esm/{index-D9OR05yj.js → index-BpRUsN_W.js} +40 -27
  283. package/dist/esm/{index-D4ZMZz_3.js → index-CK8uF0iB.js} +1 -1
  284. package/dist/esm/{index-D_xZtbw6.js → index-Clv8QC5L.js} +2 -2
  285. package/dist/esm/{index-B9jhwvmO.js → index-DIouXecD.js} +6 -5
  286. package/dist/esm/{index--21qeSt0.js → index-TkLga3ma.js} +2 -2
  287. package/dist/esm/{index-B8iieOdw.js → index-z9vdZN7I.js} +16 -5
  288. package/dist/esm/index.js +11 -11
  289. package/dist/esm/{input-shims-MCrhq67U.js → input-shims-C1iYF5JK.js} +5 -5
  290. package/dist/esm/{input.utils-B-IIWrwT.js → input.utils-DZY_K8Po.js} +1 -1
  291. package/dist/esm/ion-accordion_2.entry.js +3 -3
  292. package/dist/esm/ion-action-sheet.entry.js +11 -11
  293. package/dist/esm/ion-alert.entry.js +11 -11
  294. package/dist/esm/ion-app_8.entry.js +46 -18
  295. package/dist/esm/ion-avatar_3.entry.js +2 -2
  296. package/dist/esm/ion-back-button.entry.js +3 -3
  297. package/dist/esm/ion-backdrop.entry.js +7 -3
  298. package/dist/esm/ion-breadcrumb_2.entry.js +3 -3
  299. package/dist/esm/ion-button_2.entry.js +4 -4
  300. package/dist/esm/ion-card_5.entry.js +4 -4
  301. package/dist/esm/ion-checkbox.entry.js +4 -4
  302. package/dist/esm/ion-chip.entry.js +2 -2
  303. package/dist/esm/ion-col_3.entry.js +2 -2
  304. package/dist/esm/ion-datetime-button.entry.js +4 -4
  305. package/dist/esm/ion-datetime.entry.js +61 -15
  306. package/dist/esm/ion-fab_3.entry.js +3 -3
  307. package/dist/esm/ion-img.entry.js +3 -3
  308. package/dist/esm/ion-infinite-scroll_2.entry.js +5 -5
  309. package/dist/esm/ion-input-otp.entry.js +33 -8
  310. package/dist/esm/ion-input-password-toggle.entry.js +2 -2
  311. package/dist/esm/ion-input.entry.js +17 -17
  312. package/dist/esm/ion-item-option_3.entry.js +4 -4
  313. package/dist/esm/ion-item_8.entry.js +4 -4
  314. package/dist/esm/ion-loading.entry.js +7 -7
  315. package/dist/esm/ion-menu_3.entry.js +10 -9
  316. package/dist/esm/ion-modal.entry.js +41 -91
  317. package/dist/esm/ion-nav_2.entry.js +29 -7
  318. package/dist/esm/ion-picker-column-option.entry.js +3 -3
  319. package/dist/esm/ion-picker-column.entry.js +5 -5
  320. package/dist/esm/ion-picker.entry.js +2 -2
  321. package/dist/esm/ion-popover.entry.js +7 -7
  322. package/dist/esm/ion-progress-bar.entry.js +3 -3
  323. package/dist/esm/ion-radio_2.entry.js +4 -4
  324. package/dist/esm/ion-range.entry.js +4 -4
  325. package/dist/esm/ion-refresher_2.entry.js +8 -8
  326. package/dist/esm/ion-reorder_2.entry.js +6 -6
  327. package/dist/esm/ion-ripple-effect.entry.js +2 -2
  328. package/dist/esm/ion-route_4.entry.js +4 -4
  329. package/dist/esm/ion-searchbar.entry.js +3 -3
  330. package/dist/esm/ion-segment-content.entry.js +1 -1
  331. package/dist/esm/ion-segment-view.entry.js +1 -1
  332. package/dist/esm/ion-segment_2.entry.js +3 -3
  333. package/dist/esm/ion-select-modal.entry.js +7 -7
  334. package/dist/esm/ion-select_3.entry.js +19 -19
  335. package/dist/esm/ion-spinner.entry.js +2 -2
  336. package/dist/esm/ion-split-pane.entry.js +2 -2
  337. package/dist/esm/ion-tab-bar_2.entry.js +6 -6
  338. package/dist/esm/ion-tab_2.entry.js +3 -3
  339. package/dist/esm/ion-text.entry.js +2 -2
  340. package/dist/esm/ion-textarea.entry.js +16 -16
  341. package/dist/esm/ion-toast.entry.js +7 -7
  342. package/dist/esm/ion-toggle.entry.js +6 -6
  343. package/dist/esm/{ionic-global-B-G43ddm.js → ionic-global-Cep6oYzK.js} +1 -1
  344. package/dist/esm/ionic.js +6 -6
  345. package/dist/esm/{ios.transition-CRfGj4Mo.js → ios.transition-BkUGiDUz.js} +4 -4
  346. package/dist/esm/{item-multiple-inputs-BSD9wGHO.js → item-multiple-inputs-Bd2LO7qK.js} +1 -1
  347. package/dist/esm/{keyboard-DDw62P0D.js → keyboard-B4Y-Gph8.js} +4 -4
  348. package/dist/esm/{keyboard-ly3M0GO7.js → keyboard-Cmqp5iZD.js} +1 -1
  349. package/dist/esm/{keyboard-controller-Dzjet5wD.js → keyboard-controller-B2NoF7bV.js} +2 -2
  350. package/dist/esm/loader.js +5 -5
  351. package/dist/esm/{md.transition-wqThNy_C.js → md.transition-B6hlrWjR.js} +4 -4
  352. package/dist/esm/{overlays-BQnV0HAU.js → overlays-DmDY-El7.js} +78 -21
  353. package/dist/esm/{select-option-render-CGxPejmz.js → select-option-render-BSDT9oSA.js} +2 -2
  354. package/dist/esm/{slot-mutation-controller-C3s4-_YN.js → slot-mutation-controller-Btpr9-9O.js} +68 -34
  355. package/dist/esm/{status-tap-DRx9wSD_.js → status-tap-VGRBYwiC.js} +3 -3
  356. package/dist/esm/{swipe-back-CXmdi75W.js → swipe-back-tCNYR9ZM.js} +2 -2
  357. package/dist/html.html-data.json +1 -1
  358. package/dist/ionic/index.esm.js +1 -1
  359. package/dist/ionic/ionic.esm.js +1 -1
  360. package/dist/ionic/{p-378341d1.entry.js → p-00cd107d.entry.js} +1 -1
  361. package/dist/ionic/{p-e7414c33.entry.js → p-01b7e3f2.entry.js} +1 -1
  362. package/dist/ionic/{p-f99cf5aa.entry.js → p-0a789930.entry.js} +1 -1
  363. package/dist/ionic/{p-624f2fa8.entry.js → p-0b09c60e.entry.js} +1 -1
  364. package/dist/ionic/{p-150f350e.entry.js → p-0c32c626.entry.js} +1 -1
  365. package/dist/ionic/{p-30dcf43b.entry.js → p-0f97175e.entry.js} +1 -1
  366. package/dist/ionic/{p-e1969fd1.entry.js → p-107a81a6.entry.js} +1 -1
  367. package/dist/ionic/{p-c2a23101.entry.js → p-28251c5c.entry.js} +1 -1
  368. package/dist/ionic/p-293cb1d5.entry.js +4 -0
  369. package/dist/ionic/{p-93cd738b.entry.js → p-362dcd86.entry.js} +1 -1
  370. package/dist/ionic/{p-42b2a992.entry.js → p-4bd80334.entry.js} +1 -1
  371. package/dist/ionic/{p-3c4b0ba7.entry.js → p-4e4e5919.entry.js} +1 -1
  372. package/dist/ionic/{p-6865f0e1.entry.js → p-4f25b926.entry.js} +1 -1
  373. package/dist/ionic/{p-1110da0d.entry.js → p-539d6c8e.entry.js} +1 -1
  374. package/dist/ionic/{p-9dd9788c.entry.js → p-5bb24bce.entry.js} +1 -1
  375. package/dist/ionic/{p-f19e50f8.entry.js → p-60780b88.entry.js} +1 -1
  376. package/dist/ionic/p-61321cfa.entry.js +4 -0
  377. package/dist/ionic/{p-fee863dc.entry.js → p-62c87f3d.entry.js} +1 -1
  378. package/dist/ionic/{p-58f914ee.entry.js → p-64ac3864.entry.js} +1 -1
  379. package/dist/ionic/p-657239f5.entry.js +4 -0
  380. package/dist/ionic/p-67f004eb.entry.js +4 -0
  381. package/dist/ionic/{p-37f46670.entry.js → p-6c7b5930.entry.js} +1 -1
  382. package/dist/ionic/{p-b710b4b8.entry.js → p-76c189e7.entry.js} +1 -1
  383. package/dist/ionic/{p-e338693a.entry.js → p-77252596.entry.js} +1 -1
  384. package/dist/ionic/p-7ce9c6f8.entry.js +4 -0
  385. package/dist/ionic/{p-0517aec4.entry.js → p-7db20410.entry.js} +1 -1
  386. package/dist/ionic/{p-834afcf7.entry.js → p-7e9c2a97.entry.js} +1 -1
  387. package/dist/ionic/p-7l6ENjIV.js +4 -0
  388. package/dist/ionic/{p-daaecea3.entry.js → p-82abf431.entry.js} +1 -1
  389. package/dist/ionic/{p-b9659d21.entry.js → p-8c85e250.entry.js} +1 -1
  390. package/dist/ionic/{p-e137f724.entry.js → p-8d651adb.entry.js} +1 -1
  391. package/dist/ionic/{p-eb762f80.entry.js → p-8db08782.entry.js} +1 -1
  392. package/dist/ionic/{p-76309bab.entry.js → p-91f3cd8b.entry.js} +1 -1
  393. package/dist/ionic/{p-2e6e933d.entry.js → p-930c3538.entry.js} +1 -1
  394. package/dist/ionic/p-94f1f7df.entry.js +4 -0
  395. package/dist/ionic/{p-083b1119.entry.js → p-9ffccbf1.entry.js} +1 -1
  396. package/dist/ionic/{p-DffXRKHu.js → p-B0jcOZOE.js} +1 -1
  397. package/dist/ionic/p-BNXIurCt.js +4 -0
  398. package/dist/ionic/{p-BUB5OrpU.js → p-BO10QT9r.js} +1 -1
  399. package/dist/ionic/p-BOLqP2-V.js +4 -0
  400. package/dist/ionic/{p-DxvRP6ld.js → p-BY4FwwBp.js} +1 -1
  401. package/dist/ionic/{p-BVEsh7-M.js → p-BZTgGzGK.js} +1 -1
  402. package/dist/ionic/p-BdHBcCZF.js +4 -0
  403. package/dist/ionic/p-BexAj0yw.js +4 -0
  404. package/dist/ionic/p-BpED_ep_.js +4 -0
  405. package/dist/ionic/p-BpRUsN_W.js +6 -0
  406. package/dist/ionic/p-BuLlVedw.js +4 -0
  407. package/dist/ionic/{p-CsWrz1c2.js → p-Bx5x5GJV.js} +1 -1
  408. package/dist/ionic/p-C1WYZOZj.js +4 -0
  409. package/dist/ionic/p-C2LaBx3E.js +4 -0
  410. package/dist/ionic/{p-DNxEB9-T.js → p-CXs4J83x.js} +1 -1
  411. package/dist/ionic/{p-kKvGoaEe.js → p-CgcGX08t.js} +1 -1
  412. package/dist/ionic/{p-B4xjg_Qu.js → p-Co7eql8D.js} +1 -1
  413. package/dist/ionic/p-D13gXhdC.js +4 -0
  414. package/dist/ionic/{p-BtHAx8im.js → p-D926OmIX.js} +1 -1
  415. package/dist/ionic/{p-BCgqWm-V.js → p-DPNVo1nr.js} +1 -1
  416. package/dist/ionic/p-DXXGkPA8.js +4 -0
  417. package/dist/ionic/{p-CCik51Nv.js → p-DfvWlTdB.js} +1 -1
  418. package/dist/ionic/p-Dk4Mdaru.js +4 -0
  419. package/dist/ionic/p-DriE1ZAo.js +4 -0
  420. package/dist/ionic/{p-BhMQahM6.js → p-DxftXYZp.js} +1 -1
  421. package/dist/ionic/{p-CrAPHbJ3.js → p-SEecsUh7.js} +1 -1
  422. package/dist/ionic/{p-5c19330c.entry.js → p-a4389f13.entry.js} +1 -1
  423. package/dist/ionic/{p-4dbb2f4f.entry.js → p-a7d368b5.entry.js} +1 -1
  424. package/dist/ionic/p-af11d3c6.entry.js +4 -0
  425. package/dist/ionic/{p-5b9666be.entry.js → p-b3aadfe8.entry.js} +1 -1
  426. package/dist/ionic/p-b5bcbbc1.entry.js +4 -0
  427. package/dist/ionic/{p-3a5faaa8.entry.js → p-b9ed3a52.entry.js} +1 -1
  428. package/dist/ionic/{p-61b304c8.entry.js → p-bfdbe24b.entry.js} +1 -1
  429. package/dist/ionic/{p-b0a3dd1a.entry.js → p-c250b6b0.entry.js} +1 -1
  430. package/dist/ionic/{p-20d1ac29.entry.js → p-c293f854.entry.js} +1 -1
  431. package/dist/ionic/p-c83dbc12.entry.js +4 -0
  432. package/dist/ionic/{p-0ab133d6.entry.js → p-d0e374f8.entry.js} +1 -1
  433. package/dist/ionic/{p-24b0a961.entry.js → p-d72accc4.entry.js} +1 -1
  434. package/dist/ionic/p-e1haAYzm.js +4 -0
  435. package/dist/ionic/{p-e05073f6.entry.js → p-e7ab4def.entry.js} +1 -1
  436. package/dist/ionic/p-e8e69c21.entry.js +4 -0
  437. package/dist/ionic/{p-9b78fedf.entry.js → p-eb989dc9.entry.js} +1 -1
  438. package/dist/ionic/{p-b1164028.entry.js → p-ec259ac5.entry.js} +1 -1
  439. package/dist/ionic/{p-f9057f70.entry.js → p-f2116a54.entry.js} +1 -1
  440. package/dist/ionic/{p-B4ELlbJE.js → p-nCAPr1Ah.js} +1 -1
  441. package/dist/types/components/backdrop/backdrop.d.ts +4 -0
  442. package/dist/types/components/datetime/datetime.d.ts +20 -3
  443. package/dist/types/components/input/input.d.ts +2 -1
  444. package/dist/types/components/input-otp/input-otp.d.ts +7 -0
  445. package/dist/types/components/nav/nav.d.ts +1 -0
  446. package/dist/types/components/router-outlet/router-outlet.d.ts +1 -0
  447. package/dist/types/components/select/select.d.ts +2 -1
  448. package/dist/types/components/textarea/textarea.d.ts +2 -1
  449. package/dist/types/components.d.ts +3 -3
  450. package/dist/types/utils/config.d.ts +4 -1
  451. package/dist/types/utils/forms/index.d.ts +1 -1
  452. package/dist/types/utils/forms/start-end-container-controller.d.ts +44 -0
  453. package/dist/types/utils/hardware-back-button.d.ts +11 -0
  454. package/dist/types/utils/overlays.d.ts +5 -2
  455. package/dist/types/utils/transition/index.d.ts +6 -0
  456. package/hydrate/index.js +698 -354
  457. package/hydrate/index.mjs +698 -354
  458. package/package.json +4 -4
  459. package/components/p-BKeulLTJ.js +0 -4
  460. package/components/p-BNnmwjuy.js +0 -4
  461. package/components/p-BUVGbkSc.js +0 -4
  462. package/components/p-BexLz2XV.js +0 -4
  463. package/components/p-BriaEJK8.js +0 -4
  464. package/components/p-BsLM9eQu.js +0 -4
  465. package/components/p-Bu6O-veK.js +0 -4
  466. package/components/p-CVVUo4J1.js +0 -4
  467. package/components/p-CcQQ8oRo.js +0 -4
  468. package/components/p-Ctw69DyZ.js +0 -4
  469. package/components/p-F1rV0pyK.js +0 -4
  470. package/components/p-WMQuK_Tj.js +0 -4
  471. package/components/p-fFx6WCTj.js +0 -4
  472. package/components/p-q2WJ5Igc.js +0 -4
  473. package/dist/ionic/p-1213b719.entry.js +0 -4
  474. package/dist/ionic/p-336ea4b8.entry.js +0 -4
  475. package/dist/ionic/p-49a16200.entry.js +0 -4
  476. package/dist/ionic/p-52dc3309.entry.js +0 -4
  477. package/dist/ionic/p-636349e2.entry.js +0 -4
  478. package/dist/ionic/p-7441ed2b.entry.js +0 -4
  479. package/dist/ionic/p-83448626.entry.js +0 -4
  480. package/dist/ionic/p-B4wzg4z4.js +0 -4
  481. package/dist/ionic/p-BChRVdVv.js +0 -4
  482. package/dist/ionic/p-Ba6ZV-qU.js +0 -4
  483. package/dist/ionic/p-CTmJSZcs.js +0 -4
  484. package/dist/ionic/p-CVwXN07G.js +0 -4
  485. package/dist/ionic/p-CgQdInM0.js +0 -4
  486. package/dist/ionic/p-D5akOqD0.js +0 -4
  487. package/dist/ionic/p-D9OR05yj.js +0 -6
  488. package/dist/ionic/p-DHf9V6zI.js +0 -4
  489. package/dist/ionic/p-DZUqAr_6.js +0 -4
  490. package/dist/ionic/p-Dzew6Qv7.js +0 -4
  491. package/dist/ionic/p-PkaVMJga.js +0 -4
  492. package/dist/ionic/p-ba7bd621.entry.js +0 -4
  493. package/dist/ionic/p-e4c3f17f.entry.js +0 -4
  494. package/dist/ionic/p-edcb63e5.entry.js +0 -4
  495. package/dist/ionic/p-tXpzvta8.js +0 -4
  496. package/dist/ionic/p-vPo3vRFc.js +0 -4
  497. package/dist/types/utils/forms/start-container-controller.d.ts +0 -34
@@ -3,10 +3,10 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- var helpers = require('./helpers-Crluoxqu.js');
7
- var index = require('./index-SAR1xwtW.js');
8
- var ionicGlobal = require('./ionic-global-C1h8Yi_K.js');
9
- var frameworkDelegate = require('./framework-delegate-DTLbqaaO.js');
6
+ var helpers = require('./helpers-Cqr69qxA.js');
7
+ var index = require('./index-BiQyIvoc.js');
8
+ var ionicGlobal = require('./ionic-global-48ceLiJ6.js');
9
+ var frameworkDelegate = require('./framework-delegate-JbKIVMzR.js');
10
10
  var gestureController = require('./gesture-controller-CeJslptU.js');
11
11
 
12
12
  /**
@@ -35,6 +35,23 @@ const shouldUseCloseWatcher = () => index.config.get('experimentalCloseWatcher',
35
35
  const blockHardwareBackButton = () => {
36
36
  document.addEventListener('backbutton', () => { });
37
37
  };
38
+ const closeWatcherConditions = [];
39
+ let syncCloseWatcher;
40
+ /**
41
+ * Registers a check for whether the back button
42
+ * has something to close. The CloseWatcher is only
43
+ * active while one of these checks passes.
44
+ */
45
+ const addCloseWatcherCondition = (condition) => {
46
+ closeWatcherConditions.push(condition);
47
+ };
48
+ /**
49
+ * Call this whenever something the back button
50
+ * can close opens or closes.
51
+ */
52
+ const updateCloseWatcher = () => {
53
+ syncCloseWatcher?.();
54
+ };
38
55
  const startHardwareBackButton = () => {
39
56
  const doc = document;
40
57
  let busy = false;
@@ -86,32 +103,44 @@ const startHardwareBackButton = () => {
86
103
  processHandlers();
87
104
  };
88
105
  /**
89
- * If the CloseWatcher is defined then
90
- * we don't want to also listen for the native
91
- * backbutton event otherwise we may get duplicate
92
- * events firing.
106
+ * Android WebView never sends the hardware back
107
+ * button to a CloseWatcher, so hybrid apps still
108
+ * need this. Browsers never fire backbutton.
93
109
  */
110
+ doc.addEventListener('backbutton', backButtonCallback);
94
111
  if (shouldUseCloseWatcher()) {
95
112
  let watcher;
96
- const configureWatcher = () => {
97
- watcher?.destroy();
113
+ /**
114
+ * An active CloseWatcher stops the back button from
115
+ * navigating, so only keep one while there's something to close.
116
+ */
117
+ syncCloseWatcher = () => {
118
+ const canClose = closeWatcherConditions.some((condition) => condition());
119
+ if (!canClose) {
120
+ watcher?.destroy();
121
+ watcher = undefined;
122
+ return;
123
+ }
124
+ if (watcher !== undefined) {
125
+ return;
126
+ }
98
127
  watcher = new helpers.win.CloseWatcher();
99
128
  /**
100
129
  * Once a close request happens
101
130
  * the watcher gets destroyed.
102
131
  * As a result, we need to re-configure
103
132
  * the watcher so we can respond to other
104
- * close requests.
133
+ * close requests, including after one that
134
+ * closed nothing, like a modal whose canDismiss
135
+ * returned false.
105
136
  */
106
137
  watcher.onclose = () => {
138
+ watcher = undefined;
107
139
  backButtonCallback();
108
- configureWatcher();
140
+ syncCloseWatcher?.();
109
141
  };
110
142
  };
111
- configureWatcher();
112
- }
113
- else {
114
- doc.addEventListener('backbutton', backButtonCallback);
143
+ syncCloseWatcher();
115
144
  }
116
145
  };
117
146
  const OVERLAY_BACK_BUTTON_PRIORITY = 100;
@@ -121,9 +150,11 @@ var hardwareBackButton = /*#__PURE__*/Object.freeze({
121
150
  __proto__: null,
122
151
  MENU_BACK_BUTTON_PRIORITY: MENU_BACK_BUTTON_PRIORITY,
123
152
  OVERLAY_BACK_BUTTON_PRIORITY: OVERLAY_BACK_BUTTON_PRIORITY,
153
+ addCloseWatcherCondition: addCloseWatcherCondition,
124
154
  blockHardwareBackButton: blockHardwareBackButton,
125
155
  shouldUseCloseWatcher: shouldUseCloseWatcher,
126
- startHardwareBackButton: startHardwareBackButton
156
+ startHardwareBackButton: startHardwareBackButton,
157
+ updateCloseWatcher: updateCloseWatcher
127
158
  });
128
159
 
129
160
  /**
@@ -209,6 +240,11 @@ const focusElementInContext = (hostToFocus, fallbackElement) => {
209
240
 
210
241
  let lastOverlayIndex = 0;
211
242
  let lastId = 0;
243
+ /**
244
+ * Every overlay except toast, which doesn't trap
245
+ * focus or close on back.
246
+ */
247
+ const NON_TOAST_OVERLAYS = 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-popover';
212
248
  const activeAnimations = new WeakMap();
213
249
  /**
214
250
  * Determines if the overlay's backdrop is always blocking (no background interaction).
@@ -335,7 +371,7 @@ const focusElementInOverlay = (hostToFocus, overlay) => {
335
371
  * Should NOT include: Toast
336
372
  */
337
373
  const trapKeyboardFocus = (ev, doc) => {
338
- const lastOverlay = getPresentedOverlay(doc, 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-popover');
374
+ const lastOverlay = getPresentedOverlay(doc, NON_TOAST_OVERLAYS);
339
375
  const target = ev.target;
340
376
  /**
341
377
  * If no active overlay, ignore this event.
@@ -518,6 +554,11 @@ const connectListeners = (doc) => {
518
554
  doc.addEventListener('focus', (ev) => {
519
555
  trapKeyboardFocus(ev, doc);
520
556
  }, true);
557
+ /**
558
+ * Whether the overlay actually dismisses is checked at press time,
559
+ * since `backdropDismiss` can change while it's open.
560
+ */
561
+ addCloseWatcherCondition(() => getPresentedOverlay(doc, NON_TOAST_OVERLAYS) !== undefined);
521
562
  // handle back-button click
522
563
  doc.addEventListener('ionBackButton', (ev) => {
523
564
  const lastOverlay = getPresentedOverlay(doc);
@@ -641,7 +682,8 @@ const setRootAriaHidden = (hidden = false) => {
641
682
  * Cleans up root `aria-hidden` and `backdrop-no-scroll` when
642
683
  * an overlay is removed from the DOM without going through
643
684
  * the `dismiss()` flow (e.g., when a framework unmounts the
644
- * overlay during a route change).
685
+ * overlay during a route change). Also releases the
686
+ * CloseWatcher if nothing is left to close.
645
687
  *
646
688
  * Should be called from an overlay's `disconnectedCallback`
647
689
  * when the overlay was still presented at the time of removal.
@@ -650,6 +692,7 @@ const cleanupRootFocusTrapAccessibility = () => {
650
692
  if (typeof document === 'undefined') {
651
693
  return;
652
694
  }
695
+ updateCloseWatcher();
653
696
  const remainingOverlays = getPresentedOverlays(document);
654
697
  const hasRemainingLocking = remainingOverlays.some((o) => locksAppRoot(o));
655
698
  if (!hasRemainingLocking) {
@@ -671,7 +714,9 @@ const applyRootLock = (el) => {
671
714
  };
672
715
  /**
673
716
  * Re-applies the root lock that `cleanupRootFocusTrapAccessibility()` released.
674
- * Call from `connectedCallback` when the overlay is still presented.
717
+ * Call from `connectedCallback` when the overlay is still presented. Also
718
+ * re-arms the CloseWatcher, which every overlay needs, so that happens
719
+ * before the `locksAppRoot` check.
675
720
  *
676
721
  * A synchronous move keeps the overlay connected, so the lock survives. A
677
722
  * detach with a re-insert in a later task releases it, which is the shape a
@@ -681,6 +726,7 @@ const restoreRootFocusTrapAccessibility = (overlayEl) => {
681
726
  if (typeof document === 'undefined') {
682
727
  return;
683
728
  }
729
+ updateCloseWatcher();
684
730
  const el = overlayEl;
685
731
  if (!locksAppRoot(el)) {
686
732
  return;
@@ -894,6 +940,11 @@ const dismiss = async (overlay, data, role, name, iosLeaveAnimation, mdLeaveAnim
894
940
  index.printIonError(`[${overlay.el.tagName.toLowerCase()}] - `, err);
895
941
  }
896
942
  overlay.el.remove();
943
+ /**
944
+ * Release the back button if nothing
945
+ * else is left to close.
946
+ */
947
+ updateCloseWatcher();
897
948
  return true;
898
949
  };
899
950
  const getAppRoot = (doc) => {
@@ -902,6 +953,12 @@ const getAppRoot = (doc) => {
902
953
  const overlayAnimation = async (overlay, animationBuilder, baseEl, opts) => {
903
954
  // Make overlay visible in case it's hidden
904
955
  baseEl.classList.remove('overlay-hidden');
956
+ /**
957
+ * Removing `overlay-hidden` makes the overlay count
958
+ * as presented, so back can dismiss it while it
959
+ * animates in.
960
+ */
961
+ updateCloseWatcher();
905
962
  const aniRoot = overlay.el;
906
963
  const animation = animationBuilder(aniRoot, opts);
907
964
  if (!overlay.animated || !index.config.getBoolean('animated', true)) {
@@ -1131,6 +1188,7 @@ exports.GESTURE = GESTURE;
1131
1188
  exports.MENU_BACK_BUTTON_PRIORITY = MENU_BACK_BUTTON_PRIORITY;
1132
1189
  exports.OVERLAY_GESTURE_PRIORITY = OVERLAY_GESTURE_PRIORITY;
1133
1190
  exports.actionSheetController = actionSheetController;
1191
+ exports.addCloseWatcherCondition = addCloseWatcherCondition;
1134
1192
  exports.alertController = alertController;
1135
1193
  exports.cleanupRootFocusTrapAccessibility = cleanupRootFocusTrapAccessibility;
1136
1194
  exports.createDelegateController = createDelegateController;
@@ -1153,3 +1211,4 @@ exports.safeCall = safeCall;
1153
1211
  exports.setOverlayId = setOverlayId;
1154
1212
  exports.shouldUseCloseWatcher = shouldUseCloseWatcher;
1155
1213
  exports.toastController = toastController;
1214
+ exports.updateCloseWatcher = updateCloseWatcher;
@@ -3,8 +3,8 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- var index = require('./index-SAR1xwtW.js');
7
- var index$1 = require('./index-BSD7toMO.js');
6
+ var index = require('./index-BiQyIvoc.js');
7
+ var index$1 = require('./index-B4ONUQRp.js');
8
8
 
9
9
  /**
10
10
  * Converts a DOM node into a Stencil VNode (or text string) so the
@@ -3,7 +3,7 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- var helpers = require('./helpers-Crluoxqu.js');
6
+ var helpers = require('./helpers-Cqr69qxA.js');
7
7
  var dir = require('./dir-zwDPRE5K.js');
8
8
 
9
9
  /**
@@ -167,10 +167,19 @@ const SKIP_LABEL_TRANSITION_CLASS = 'skip-label-transition';
167
167
  */
168
168
  const START_CONTAINER_ADJUSTMENT_VAR = '--internal-start-container-adjustment';
169
169
  /**
170
- * A utility to measure and update the start container width adjustment
171
- * for form components (input, textarea, select) with `fill="outline"`.
172
- * This adjustment compensates for the start container width when
173
- * positioning floating/stacked labels within the outline border.
170
+ * Set on the host as an inline style. The component stylesheets declare
171
+ * this property and read it with `var()`, so it must stay in sync with
172
+ * the `--internal-start-end-container-width` references in those files.
173
+ * Renaming it here requires renaming it there too.
174
+ */
175
+ const START_END_CONTAINER_WIDTH_VAR = '--internal-start-end-container-width';
176
+ /**
177
+ * A utility to measure the start and end containers of form components
178
+ * (input, textarea, select) with `fill="outline"` and write the results
179
+ * to the host. The start container width offsets floating/stacked labels
180
+ * so they line up with the outline border. The combined start and end
181
+ * container width lets the floating label size itself to the full width
182
+ * of the outline while still being positioned relative to the control.
174
183
  *
175
184
  * Measurement is deferred with raf() to avoid forcing layout during
176
185
  * component updates, and a ResizeObserver watches for dynamic width
@@ -179,29 +188,36 @@ const START_CONTAINER_ADJUSTMENT_VAR = '--internal-start-container-adjustment';
179
188
  * @internal
180
189
  * @param el - The host element (ion-input, ion-textarea, or ion-select).
181
190
  * @param getStartContainer - A callback that returns the start container element.
182
- * @param shouldApplyAdjustment - A callback that determines whether the adjustment should be applied.
191
+ * @param getEndContainer - A callback that returns the end container element.
192
+ * @param shouldMeasure - A callback that determines whether the containers should be measured.
183
193
  */
184
- const createStartContainerController = (el, getStartContainer, shouldApplyAdjustment) => {
194
+ const createStartEndContainerController = (el, getStartContainer, getEndContainer, shouldMeasure) => {
185
195
  let resizeObserver;
186
- let observedContainer;
196
+ let observedStartContainer;
197
+ let observedEndContainer;
187
198
  let measurementRaf;
188
199
  let transitionRaf;
189
200
  let appliedAdjustment;
190
- const calculateAdjustment = () => {
191
- const startSlot = getStartContainer();
192
- if (!startSlot || !shouldApplyAdjustment()) {
193
- return '';
201
+ let appliedStartEndWidth;
202
+ /*
203
+ * Round to one decimal place so fractional widths produce a stable
204
+ * label offset and width when a container is added, removed, or resized.
205
+ */
206
+ const roundWidth = (width) => Math.round(width * 10) / 10;
207
+ const measureContainers = () => {
208
+ const startContainer = getStartContainer();
209
+ if (!startContainer || !shouldMeasure()) {
210
+ return { adjustment: '', startEndWidth: '' };
194
211
  }
195
- /*
196
- * Round to one decimal place so fractional widths produce a stable
197
- * label offset when the start container is added, removed, or resized.
198
- */
199
- const startContainerWidth = startSlot.getBoundingClientRect().width;
200
- const roundedWidth = Math.round(startContainerWidth * 10) / 10;
212
+ const startContainerWidth = roundWidth(startContainer.getBoundingClientRect().width);
213
+ const endContainerWidth = roundWidth(getEndContainer()?.getBoundingClientRect().width ?? 0);
201
214
  const sign = dir.isRTL(el) ? '' : '-';
202
- return roundedWidth ? `${sign}${roundedWidth}px` : '0px';
215
+ return {
216
+ adjustment: startContainerWidth ? `${sign}${startContainerWidth}px` : '0px',
217
+ startEndWidth: `${roundWidth(startContainerWidth + endContainerWidth)}px`,
218
+ };
203
219
  };
204
- const scheduleAdjustmentUpdate = () => {
220
+ const scheduleMeasurement = () => {
205
221
  // Return if there is already a measurement queued to avoid a flicker
206
222
  if (measurementRaf !== undefined) {
207
223
  return;
@@ -212,7 +228,17 @@ const createStartContainerController = (el, getStartContainer, shouldApplyAdjust
212
228
  */
213
229
  measurementRaf = helpers.raf(() => {
214
230
  measurementRaf = undefined;
215
- const adjustment = calculateAdjustment();
231
+ const { adjustment, startEndWidth } = measureContainers();
232
+ /*
233
+ * The width only changes how much of the label fits, so it can
234
+ * animate. The transition is not suppressed here because the end
235
+ * container can change size while the label is floating, such as
236
+ * when async content loads, and that should not cut the float short.
237
+ */
238
+ if (startEndWidth !== appliedStartEndWidth) {
239
+ el.style.setProperty(START_END_CONTAINER_WIDTH_VAR, startEndWidth);
240
+ appliedStartEndWidth = startEndWidth;
241
+ }
216
242
  // Only suppress the label transition when the label has to move
217
243
  if (adjustment !== appliedAdjustment) {
218
244
  // Discard a removal queued by an earlier change
@@ -235,29 +261,36 @@ const createStartContainerController = (el, getStartContainer, shouldApplyAdjust
235
261
  if (resizeObserver) {
236
262
  resizeObserver.disconnect();
237
263
  resizeObserver = undefined;
238
- observedContainer = undefined;
264
+ observedStartContainer = undefined;
265
+ observedEndContainer = undefined;
239
266
  }
240
267
  };
241
268
  const setupResizeObserver = () => {
242
- const startSlot = getStartContainer();
243
- // Stop watching once the adjustment no longer applies
244
- if (!startSlot || !shouldApplyAdjustment()) {
269
+ const startContainer = getStartContainer();
270
+ const endContainer = getEndContainer();
271
+ // Stop watching once the measurements no longer apply
272
+ if (!startContainer || !shouldMeasure()) {
245
273
  disconnectResizeObserver();
246
274
  return;
247
275
  }
248
- // Return when prerendering or already watching this container
249
- if (typeof ResizeObserver !== 'function' || (resizeObserver && observedContainer === startSlot)) {
276
+ // Return when prerendering or already watching these containers
277
+ if (typeof ResizeObserver !== 'function' ||
278
+ (resizeObserver && observedStartContainer === startContainer && observedEndContainer === endContainer)) {
250
279
  return;
251
280
  }
252
281
  disconnectResizeObserver();
253
282
  resizeObserver = new ResizeObserver(() => {
254
- scheduleAdjustmentUpdate();
283
+ scheduleMeasurement();
255
284
  });
256
- observedContainer = startSlot;
257
- resizeObserver.observe(startSlot);
285
+ observedStartContainer = startContainer;
286
+ resizeObserver.observe(startContainer);
287
+ if (endContainer) {
288
+ observedEndContainer = endContainer;
289
+ resizeObserver.observe(endContainer);
290
+ }
258
291
  };
259
- const calculateStartContainerWidth = () => {
260
- scheduleAdjustmentUpdate();
292
+ const calculateContainerWidths = () => {
293
+ scheduleMeasurement();
261
294
  };
262
295
  const destroy = () => {
263
296
  disconnectResizeObserver();
@@ -273,9 +306,10 @@ const createStartContainerController = (el, getStartContainer, shouldApplyAdjust
273
306
  }
274
307
  // Re-apply from scratch if the element is connected again
275
308
  appliedAdjustment = undefined;
309
+ appliedStartEndWidth = undefined;
276
310
  };
277
311
  return {
278
- calculateStartContainerWidth,
312
+ calculateContainerWidths,
279
313
  destroy,
280
314
  };
281
315
  };
@@ -461,5 +495,5 @@ const createSlotMutationController = (el, slotName, mutationCallback) => {
461
495
  exports.createClickController = createClickController;
462
496
  exports.createNotchController = createNotchController;
463
497
  exports.createSlotMutationController = createSlotMutationController;
464
- exports.createStartContainerController = createStartContainerController;
498
+ exports.createStartEndContainerController = createStartEndContainerController;
465
499
  exports.getSlottedClickContent = getSlottedClickContent;
@@ -3,9 +3,9 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- var index = require('./index-SAR1xwtW.js');
7
- var index$1 = require('./index-BAM4223M.js');
8
- var helpers = require('./helpers-Crluoxqu.js');
6
+ var index = require('./index-BiQyIvoc.js');
7
+ var index$1 = require('./index-CNaZ6SYM.js');
8
+ var helpers = require('./helpers-Cqr69qxA.js');
9
9
  require('./dir-zwDPRE5K.js');
10
10
 
11
11
  const startStatusTap = () => {
@@ -3,10 +3,10 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- var helpers = require('./helpers-Crluoxqu.js');
6
+ var helpers = require('./helpers-Cqr69qxA.js');
7
7
  var dir = require('./dir-zwDPRE5K.js');
8
8
  var index = require('./index-DRPqwSvU.js');
9
- require('./index-SAR1xwtW.js');
9
+ require('./index-BiQyIvoc.js');
10
10
  require('./gesture-controller-CeJslptU.js');
11
11
 
12
12
  const createSwipeBackGesture = (el, canStartHandler, onStartHandler, onMoveHandler, onEndHandler) => {
@@ -99,7 +99,7 @@
99
99
  "mixins": [],
100
100
  "compiler": {
101
101
  "name": "@stencil/core",
102
- "version": "4.45.1",
102
+ "version": "4.45.2",
103
103
  "typescriptVersion": "5.8.3"
104
104
  },
105
105
  "collections": [
@@ -7,6 +7,10 @@ export class Backdrop {
7
7
  constructor() {
8
8
  /**
9
9
  * If `true`, the backdrop will be visible.
10
+ * This property controls whether or not the backdrop's
11
+ * default background is shown. It does not control whether
12
+ * or not the backdrop blocks interaction, and it does not
13
+ * override a custom background set on `ion-backdrop`.
10
14
  */
11
15
  this.visible = true;
12
16
  /**
@@ -32,7 +36,7 @@ export class Backdrop {
32
36
  }
33
37
  render() {
34
38
  const mode = getIonMode(this);
35
- return (h(Host, { key: '7abaf2c310aa399607451b14063265e8a5846938', "aria-hidden": "true", class: {
39
+ return (h(Host, { key: '14141148f4a22371b8ad7cb9dcdc32398ec109aa', "aria-hidden": "true", class: {
36
40
  [mode]: true,
37
41
  'backdrop-hide': !this.visible,
38
42
  'backdrop-no-tappable': !this.tappable,
@@ -66,7 +70,7 @@ export class Backdrop {
66
70
  "optional": false,
67
71
  "docs": {
68
72
  "tags": [],
69
- "text": "If `true`, the backdrop will be visible."
73
+ "text": "If `true`, the backdrop will be visible.\nThis property controls whether or not the backdrop's\ndefault background is shown. It does not control whether\nor not the backdrop blocks interaction, and it does not\noverride a custom background set on `ion-backdrop`."
70
74
  },
71
75
  "getter": false,
72
76
  "setter": false,
@@ -56,6 +56,13 @@ import { checkForPresentationFormatMismatch, warnIfTimeZoneProvided } from "./ut
56
56
  export class Datetime {
57
57
  constructor() {
58
58
  this.inputId = `ion-dt-${datetimeIds++}`;
59
+ /**
60
+ * Set when the user selects a value, cleared when it's confirmed
61
+ * or `processValue` runs (`reset()`, or `value` being set to a
62
+ * non-empty value). The overlay present listener only discards a
63
+ * selection while this is set.
64
+ */
65
+ this.hasUnconfirmedSelection = false;
59
66
  this.prevPresentation = null;
60
67
  this.showMonthAndYear = false;
61
68
  this.activeParts = [];
@@ -219,6 +226,7 @@ export class Datetime {
219
226
  if (popoverOrModal) {
220
227
  popoverOrModal.dismiss(undefined, role);
221
228
  }
229
+ return popoverOrModal !== null;
222
230
  };
223
231
  this.setWorkingParts = (parts) => {
224
232
  this.workingParts = {
@@ -233,6 +241,7 @@ export class Datetime {
233
241
  if (this.readonly) {
234
242
  return;
235
243
  }
244
+ this.hasUnconfirmedSelection = true;
236
245
  const { multiple, minParts, maxParts, activeParts } = this;
237
246
  /**
238
247
  * When setting the active parts, it is possible
@@ -653,7 +662,8 @@ export class Datetime {
653
662
  this.loadTimeout = undefined;
654
663
  }
655
664
  };
656
- this.processValue = (value) => {
665
+ this.processValue = (value, animated = true) => {
666
+ this.hasUnconfirmedSelection = false;
657
667
  const hasValue = value !== null && value !== undefined && value !== '' && (!Array.isArray(value) || value.length > 0);
658
668
  const valueToProcess = hasValue ? parseDate(value) : this.defaultParts;
659
669
  const { minParts, maxParts, workingParts, el } = this;
@@ -716,13 +726,14 @@ export class Datetime {
716
726
  const didChangeMonth = (month !== undefined && month !== workingParts.month) || (year !== undefined && year !== workingParts.year);
717
727
  const bodyIsVisible = el.classList.contains('datetime-ready');
718
728
  const { isGridStyle, showMonthAndYear } = this;
719
- if (isGridStyle && didChangeMonth && bodyIsVisible && !showMonthAndYear) {
729
+ if (isGridStyle && didChangeMonth && bodyIsVisible && !showMonthAndYear && animated) {
720
730
  /**
721
731
  * Only animate if:
722
732
  * 1. We're using grid style (wheel style pickers should just jump to new value)
723
733
  * 2. The month and/or year actually changed, and both are defined (otherwise there's nothing to animate to)
724
734
  * 3. The calendar body is visible (prevents animation when in collapsed datetime-button, for example)
725
735
  * 4. The month/year picker is not open (since you wouldn't see the animation anyway)
736
+ * 5. The caller did not opt out (e.g. the parent overlay is still hidden)
726
737
  */
727
738
  this.animateToDate(targetValue);
728
739
  }
@@ -893,6 +904,7 @@ export class Datetime {
893
904
  this.setValue(convertDataToISO(activeParts));
894
905
  }
895
906
  }
907
+ this.hasUnconfirmedSelection = false;
896
908
  if (closeOverlay) {
897
909
  this.closeParentOverlay(CONFIRM_ROLE);
898
910
  }
@@ -908,17 +920,22 @@ export class Datetime {
908
920
  this.processValue(startDate);
909
921
  }
910
922
  /**
911
- * Emits the ionCancel event and
912
- * optionally closes the popover
913
- * or modal that the datetime was
923
+ * Emits the ionCancel event, discards
924
+ * any unconfirmed selection, and
925
+ * optionally closes the popover or
926
+ * modal that the datetime was
914
927
  * presented in.
915
928
  *
916
929
  * @param closeOverlay If `true`, closes the parent overlay. Defaults to `false`.
917
930
  */
918
931
  async cancel(closeOverlay = false) {
919
932
  this.ionCancel.emit();
920
- if (closeOverlay) {
921
- this.closeParentOverlay(CANCEL_ROLE);
933
+ /**
934
+ * When a parent overlay closes, the present listener discards
935
+ * the selection on the next open. Otherwise discard it now.
936
+ */
937
+ if (!closeOverlay || !this.closeParentOverlay(CANCEL_ROLE)) {
938
+ this.processValue(this.value);
922
939
  }
923
940
  }
924
941
  /**
@@ -940,6 +957,7 @@ export class Datetime {
940
957
  this.loadTimeout = setTimeout(() => {
941
958
  this.ensureReadyIfVisible();
942
959
  }, 100);
960
+ this.initializeOverlayPresentListener();
943
961
  }
944
962
  disconnectedCallback() {
945
963
  if (this.clearFocusVisible) {
@@ -947,6 +965,34 @@ export class Datetime {
947
965
  this.clearFocusVisible = undefined;
948
966
  }
949
967
  this.loadTimeoutCleanup();
968
+ if (this.destroyOverlayPresentListener) {
969
+ this.destroyOverlayPresentListener();
970
+ this.destroyOverlayPresentListener = undefined;
971
+ }
972
+ }
973
+ /**
974
+ * A datetime in a modal or popover stays mounted between
975
+ * presentations, so an unconfirmed selection would still show when
976
+ * it reopens. Discarding on present rather than dismiss lets app
977
+ * code that runs on dismiss still confirm or reset the selection,
978
+ * whatever order its listeners were added in.
979
+ */
980
+ initializeOverlayPresentListener() {
981
+ const overlay = this.el.closest('ion-modal, ion-popover');
982
+ if (!overlay) {
983
+ return;
984
+ }
985
+ const eventName = overlay.tagName === 'ION-MODAL' ? 'ionModalWillPresent' : 'ionPopoverWillPresent';
986
+ const onPresent = (ev) => {
987
+ // Ignore nested overlays and skip when there's nothing to discard.
988
+ if (ev.target !== overlay || !this.hasUnconfirmedSelection) {
989
+ return;
990
+ }
991
+ // The overlay is still hidden, so skip the month animation.
992
+ this.processValue(this.value, false);
993
+ };
994
+ overlay.addEventListener(eventName, onPresent);
995
+ this.destroyOverlayPresentListener = () => overlay.removeEventListener(eventName, onPresent);
950
996
  }
951
997
  initializeListeners() {
952
998
  this.initializeCalendarListener();
@@ -1829,7 +1875,7 @@ export class Datetime {
1829
1875
  const hasDatePresentation = presentation === 'date' || presentation === 'date-time' || presentation === 'time-date';
1830
1876
  const hasWheelVariant = hasDatePresentation && preferWheel;
1831
1877
  renderHiddenInput(true, el, name, formatValue(value), disabled);
1832
- return (h(Host, { key: 'a9128b5c55464e30a269daf9d725bf430c8c655c', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: {
1878
+ return (h(Host, { key: 'e9b99bb5610fc7fe879200a56dcc865c6e2f1404', "aria-disabled": disabled ? 'true' : null, onFocus: this.onFocus, onBlur: this.onBlur, class: {
1833
1879
  ...createColorClasses(color, {
1834
1880
  [mode]: true,
1835
1881
  ['datetime-readonly']: readonly,
@@ -1841,7 +1887,7 @@ export class Datetime {
1841
1887
  [`datetime-prefer-wheel`]: hasWheelVariant,
1842
1888
  [`datetime-grid`]: isGridStyle,
1843
1889
  }),
1844
- } }, h("div", { key: 'b49f3a98db2b7cf535d7ea894d518f75f8a1fefb', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1890
+ } }, h("div", { key: 'a5e61be2989468dc24ec8fb394116d9339b7824c', class: "intersection-tracker", ref: (el) => (this.intersectionTrackerRef = el) }), this.renderDatetime(mode)));
1845
1891
  }
1846
1892
  static get is() { return "ion-datetime"; }
1847
1893
  static get encapsulation() { return "shadow"; }
@@ -2721,7 +2767,7 @@ export class Datetime {
2721
2767
  "return": "Promise<void>"
2722
2768
  },
2723
2769
  "docs": {
2724
- "text": "Emits the ionCancel event and\noptionally closes the popover\nor modal that the datetime was\npresented in.",
2770
+ "text": "Emits the ionCancel event, discards\nany unconfirmed selection, and\noptionally closes the popover or\nmodal that the datetime was\npresented in.",
2725
2771
  "tags": [{
2726
2772
  "name": "param",
2727
2773
  "text": "closeOverlay If `true`, closes the parent overlay. Defaults to `false`."
@@ -425,7 +425,11 @@
425
425
  * would not be able to see what they are typing.
426
426
  */
427
427
  max-width: 200px;
428
- transition: color 150ms cubic-bezier(0.4, 0, 0.2, 1), transform 150ms cubic-bezier(0.4, 0, 0.2, 1);
428
+ /**
429
+ * The max-width animates with the transform so the label does not
430
+ * reveal its full floating width while it is still at full size.
431
+ */
432
+ transition: color 150ms cubic-bezier(0.4, 0, 0.2, 1), transform 150ms cubic-bezier(0.4, 0, 0.2, 1), max-width 150ms cubic-bezier(0.4, 0, 0.2, 1);
429
433
  /**
430
434
  * This ensures that double tapping this text
431
435
  * clicks the <label> and focuses the input
@@ -439,8 +443,8 @@
439
443
  * disable the label transition to prevent the floating label
440
444
  * from animating as its position is adjusted.
441
445
  *
442
- * This class is applied by the start container controller, so
443
- * renaming it here requires renaming it there too.
446
+ * This class is applied by the start and end container controller,
447
+ * so renaming it here requires renaming it there too.
444
448
  */
445
449
  :host(.skip-label-transition) .label-text-wrapper {
446
450
  transition: none;