@ionic/core 7.5.8-dev.11701448395.18799530 → 7.5.8-dev.11701788142.11dcb825

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 (330) hide show
  1. package/components/ion-input.js +21 -2
  2. package/components/ion-refresher-content.js +3 -10
  3. package/components/ion-refresher.js +183 -4
  4. package/components/ion-searchbar.js +2 -0
  5. package/components/ion-textarea.js +25 -2
  6. package/dist/cjs/{app-globals-28656db1.js → app-globals-0af482c7.js} +1 -1
  7. package/dist/cjs/{button-active-75b38d77.js → button-active-417ccdcb.js} +1 -1
  8. package/dist/cjs/{index-097270a3.js → index-5cbb20f9.js} +1 -1
  9. package/dist/cjs/{index-b0102f48.js → index-bbb4336c.js} +39 -1
  10. package/dist/cjs/{index-cb3e0ab7.js → index-d4c2e02c.js} +3 -3
  11. package/dist/cjs/index.cjs.js +7 -7
  12. package/dist/cjs/ion-accordion_2.cjs.entry.js +2 -2
  13. package/dist/cjs/ion-action-sheet.cjs.entry.js +4 -4
  14. package/dist/cjs/ion-alert.cjs.entry.js +4 -4
  15. package/dist/cjs/ion-app_8.cjs.entry.js +4 -4
  16. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
  17. package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
  18. package/dist/cjs/ion-backdrop.cjs.entry.js +2 -2
  19. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
  20. package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
  21. package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
  22. package/dist/cjs/ion-checkbox.cjs.entry.js +2 -2
  23. package/dist/cjs/ion-chip.cjs.entry.js +2 -2
  24. package/dist/cjs/ion-col_3.cjs.entry.js +2 -2
  25. package/dist/cjs/ion-datetime-button.cjs.entry.js +2 -2
  26. package/dist/cjs/ion-datetime_3.cjs.entry.js +3 -3
  27. package/dist/cjs/ion-fab_3.cjs.entry.js +2 -2
  28. package/dist/cjs/ion-img.cjs.entry.js +2 -2
  29. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +2 -2
  30. package/dist/cjs/ion-input.cjs.entry.js +23 -4
  31. package/dist/cjs/ion-item-option_3.cjs.entry.js +2 -2
  32. package/dist/cjs/ion-item_8.cjs.entry.js +2 -2
  33. package/dist/cjs/ion-loading.cjs.entry.js +3 -3
  34. package/dist/cjs/ion-menu_3.cjs.entry.js +4 -4
  35. package/dist/cjs/ion-modal.cjs.entry.js +4 -4
  36. package/dist/cjs/ion-nav_2.cjs.entry.js +3 -3
  37. package/dist/cjs/ion-picker-column-internal.cjs.entry.js +2 -2
  38. package/dist/cjs/ion-picker-internal.cjs.entry.js +1 -1
  39. package/dist/cjs/ion-popover.cjs.entry.js +4 -4
  40. package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -2
  41. package/dist/cjs/ion-radio_2.cjs.entry.js +2 -2
  42. package/dist/cjs/ion-range.cjs.entry.js +2 -2
  43. package/dist/cjs/ion-refresher_2.cjs.entry.js +14 -30
  44. package/dist/cjs/ion-reorder_2.cjs.entry.js +2 -2
  45. package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
  46. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  47. package/dist/cjs/ion-searchbar.cjs.entry.js +4 -2
  48. package/dist/cjs/ion-segment_2.cjs.entry.js +2 -2
  49. package/dist/cjs/ion-select_3.cjs.entry.js +3 -3
  50. package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
  51. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  52. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +2 -2
  53. package/dist/cjs/ion-tab_2.cjs.entry.js +1 -1
  54. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  55. package/dist/cjs/ion-textarea.cjs.entry.js +27 -4
  56. package/dist/cjs/ion-toast.cjs.entry.js +3 -3
  57. package/dist/cjs/ion-toggle.cjs.entry.js +2 -2
  58. package/dist/cjs/{ionic-global-62510d64.js → ionic-global-f4a2093b.js} +1 -1
  59. package/dist/cjs/ionic.cjs.js +4 -4
  60. package/dist/cjs/{ios.transition-d9c0e4fb.js → ios.transition-a4ffb5a2.js} +2 -2
  61. package/dist/cjs/loader.cjs.js +3 -3
  62. package/dist/cjs/{md.transition-4fac8a87.js → md.transition-292abe1c.js} +2 -2
  63. package/dist/cjs/{overlays-b1471172.js → overlays-5c379703.js} +1 -1
  64. package/dist/cjs/{status-tap-0aa8e1f2.js → status-tap-415acac6.js} +1 -1
  65. package/dist/collection/collection-manifest.json +1 -1
  66. package/dist/collection/components/input/input.js +23 -4
  67. package/dist/collection/components/input/test/clear-on-edit/input.e2e.js +21 -9
  68. package/dist/collection/components/refresher/refresher.utils.js +10 -20
  69. package/dist/collection/components/refresher-content/refresher-content.js +3 -9
  70. package/dist/collection/components/searchbar/searchbar.js +3 -1
  71. package/dist/collection/components/textarea/test/clear-on-edit/textarea.e2e.js +28 -0
  72. package/dist/collection/components/textarea/textarea.js +27 -4
  73. package/dist/docs.json +7 -7
  74. package/dist/esm/{app-globals-c23144fc.js → app-globals-722340c4.js} +1 -1
  75. package/dist/esm/{button-active-7013b5a1.js → button-active-3fdf3e4f.js} +1 -1
  76. package/dist/esm/{index-39329c6f.js → index-08d686eb.js} +39 -1
  77. package/dist/esm/{index-7a818ed3.js → index-80492ed3.js} +1 -1
  78. package/dist/esm/{index-bebaae5d.js → index-d8817fb0.js} +3 -3
  79. package/dist/esm/index.js +7 -7
  80. package/dist/esm/ion-accordion_2.entry.js +2 -2
  81. package/dist/esm/ion-action-sheet.entry.js +4 -4
  82. package/dist/esm/ion-alert.entry.js +4 -4
  83. package/dist/esm/ion-app_8.entry.js +4 -4
  84. package/dist/esm/ion-avatar_3.entry.js +2 -2
  85. package/dist/esm/ion-back-button.entry.js +2 -2
  86. package/dist/esm/ion-backdrop.entry.js +2 -2
  87. package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
  88. package/dist/esm/ion-button_2.entry.js +2 -2
  89. package/dist/esm/ion-card_5.entry.js +2 -2
  90. package/dist/esm/ion-checkbox.entry.js +2 -2
  91. package/dist/esm/ion-chip.entry.js +2 -2
  92. package/dist/esm/ion-col_3.entry.js +2 -2
  93. package/dist/esm/ion-datetime-button.entry.js +2 -2
  94. package/dist/esm/ion-datetime_3.entry.js +3 -3
  95. package/dist/esm/ion-fab_3.entry.js +2 -2
  96. package/dist/esm/ion-img.entry.js +2 -2
  97. package/dist/esm/ion-infinite-scroll_2.entry.js +2 -2
  98. package/dist/esm/ion-input.entry.js +23 -4
  99. package/dist/esm/ion-item-option_3.entry.js +2 -2
  100. package/dist/esm/ion-item_8.entry.js +2 -2
  101. package/dist/esm/ion-loading.entry.js +3 -3
  102. package/dist/esm/ion-menu_3.entry.js +4 -4
  103. package/dist/esm/ion-modal.entry.js +4 -4
  104. package/dist/esm/ion-nav_2.entry.js +3 -3
  105. package/dist/esm/ion-picker-column-internal.entry.js +2 -2
  106. package/dist/esm/ion-picker-internal.entry.js +1 -1
  107. package/dist/esm/ion-popover.entry.js +4 -4
  108. package/dist/esm/ion-progress-bar.entry.js +2 -2
  109. package/dist/esm/ion-radio_2.entry.js +2 -2
  110. package/dist/esm/ion-range.entry.js +2 -2
  111. package/dist/esm/ion-refresher_2.entry.js +14 -30
  112. package/dist/esm/ion-reorder_2.entry.js +2 -2
  113. package/dist/esm/ion-ripple-effect.entry.js +2 -2
  114. package/dist/esm/ion-route_4.entry.js +2 -2
  115. package/dist/esm/ion-searchbar.entry.js +4 -2
  116. package/dist/esm/ion-segment_2.entry.js +2 -2
  117. package/dist/esm/ion-select_3.entry.js +3 -3
  118. package/dist/esm/ion-spinner.entry.js +2 -2
  119. package/dist/esm/ion-split-pane.entry.js +2 -2
  120. package/dist/esm/ion-tab-bar_2.entry.js +2 -2
  121. package/dist/esm/ion-tab_2.entry.js +1 -1
  122. package/dist/esm/ion-text.entry.js +2 -2
  123. package/dist/esm/ion-textarea.entry.js +27 -4
  124. package/dist/esm/ion-toast.entry.js +3 -3
  125. package/dist/esm/ion-toggle.entry.js +2 -2
  126. package/dist/esm/{ionic-global-6c78e871.js → ionic-global-c0cda98e.js} +1 -1
  127. package/dist/esm/ionic.js +5 -5
  128. package/dist/esm/{ios.transition-daa373e9.js → ios.transition-fd16bec1.js} +2 -2
  129. package/dist/esm/loader.js +4 -4
  130. package/dist/esm/{md.transition-91c3d3cc.js → md.transition-94ac93e1.js} +2 -2
  131. package/dist/esm/{overlays-64e67e2c.js → overlays-abf58489.js} +1 -1
  132. package/dist/esm/{status-tap-9dd45200.js → status-tap-2b93b1b5.js} +1 -1
  133. package/dist/esm-es5/app-globals-722340c4.js +4 -0
  134. package/dist/esm-es5/{button-active-7013b5a1.js → button-active-3fdf3e4f.js} +1 -1
  135. package/dist/esm-es5/{index-39329c6f.js → index-08d686eb.js} +1 -1
  136. package/dist/esm-es5/{index-7a818ed3.js → index-80492ed3.js} +1 -1
  137. package/dist/esm-es5/{index-bebaae5d.js → index-d8817fb0.js} +1 -1
  138. package/dist/esm-es5/index.js +1 -1
  139. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  140. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  141. package/dist/esm-es5/ion-alert.entry.js +1 -1
  142. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  143. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  144. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  145. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  146. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  147. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  148. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  149. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  150. package/dist/esm-es5/ion-chip.entry.js +1 -1
  151. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  152. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  153. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  154. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  155. package/dist/esm-es5/ion-img.entry.js +1 -1
  156. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  157. package/dist/esm-es5/ion-input.entry.js +1 -1
  158. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  159. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  160. package/dist/esm-es5/ion-loading.entry.js +1 -1
  161. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  162. package/dist/esm-es5/ion-modal.entry.js +1 -1
  163. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  164. package/dist/esm-es5/ion-picker-column-internal.entry.js +1 -1
  165. package/dist/esm-es5/ion-picker-internal.entry.js +1 -1
  166. package/dist/esm-es5/ion-popover.entry.js +1 -1
  167. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  168. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  169. package/dist/esm-es5/ion-range.entry.js +1 -1
  170. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  171. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  172. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  173. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  174. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  175. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  176. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  177. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  178. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  179. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  180. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  181. package/dist/esm-es5/ion-text.entry.js +1 -1
  182. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  183. package/dist/esm-es5/ion-toast.entry.js +1 -1
  184. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  185. package/dist/esm-es5/{ionic-global-6c78e871.js → ionic-global-c0cda98e.js} +1 -1
  186. package/dist/esm-es5/ionic.js +1 -1
  187. package/dist/esm-es5/{ios.transition-daa373e9.js → ios.transition-fd16bec1.js} +1 -1
  188. package/dist/esm-es5/loader.js +1 -1
  189. package/dist/esm-es5/{md.transition-91c3d3cc.js → md.transition-94ac93e1.js} +1 -1
  190. package/dist/esm-es5/{overlays-64e67e2c.js → overlays-abf58489.js} +1 -1
  191. package/dist/esm-es5/{status-tap-9dd45200.js → status-tap-2b93b1b5.js} +1 -1
  192. package/dist/html.html-data.json +2 -2
  193. package/dist/ionic/index.esm.js +1 -1
  194. package/dist/ionic/ionic.esm.js +1 -1
  195. package/dist/ionic/ionic.js +1 -1
  196. package/dist/ionic/{p-46dbd723.entry.js → p-0519cd21.entry.js} +1 -1
  197. package/dist/ionic/p-08f196ce.system.entry.js +4 -0
  198. package/dist/ionic/p-093033ee.entry.js +4 -0
  199. package/dist/ionic/{p-f34d6a49.entry.js → p-0add7211.entry.js} +1 -1
  200. package/dist/ionic/{p-e8e530fc.entry.js → p-0b1bc636.entry.js} +1 -1
  201. package/dist/ionic/{p-a0945c3a.system.entry.js → p-0e53f8ea.system.entry.js} +1 -1
  202. package/dist/ionic/{p-161d0916.entry.js → p-1161a793.entry.js} +1 -1
  203. package/dist/ionic/{p-89026d53.entry.js → p-1208f939.entry.js} +1 -1
  204. package/dist/ionic/p-1786bc72.js +4 -0
  205. package/dist/ionic/{p-312221db.entry.js → p-17da5ed1.entry.js} +1 -1
  206. package/dist/ionic/p-17f893be.js +4 -0
  207. package/dist/ionic/{p-83fada9e.system.entry.js → p-18b6bd23.system.entry.js} +1 -1
  208. package/dist/ionic/{p-5fb707e0.entry.js → p-18ba8221.entry.js} +1 -1
  209. package/dist/ionic/{p-d1530ea9.entry.js → p-1d17219f.entry.js} +1 -1
  210. package/dist/ionic/{p-1ff22253.entry.js → p-2092f39f.entry.js} +1 -1
  211. package/dist/ionic/{p-2507b0c0.entry.js → p-25b32c3d.entry.js} +1 -1
  212. package/dist/ionic/{p-b81a8111.system.entry.js → p-2938823a.system.entry.js} +1 -1
  213. package/dist/ionic/{p-df361680.system.entry.js → p-2ab4e925.system.entry.js} +1 -1
  214. package/dist/ionic/{p-45db7949.system.entry.js → p-2ba0657d.system.entry.js} +1 -1
  215. package/dist/ionic/{p-0263eb49.system.js → p-30029cc2.system.js} +1 -1
  216. package/dist/ionic/{p-ac4a7fc0.js → p-31158892.js} +1 -1
  217. package/dist/ionic/{p-18032a93.entry.js → p-34c39c48.entry.js} +1 -1
  218. package/dist/ionic/p-350f7292.system.entry.js +4 -0
  219. package/dist/ionic/{p-86c2bbc8.entry.js → p-353b349d.entry.js} +1 -1
  220. package/dist/ionic/{p-bc97b5cd.system.entry.js → p-3b686a65.system.entry.js} +1 -1
  221. package/dist/ionic/{p-33f3cd49.entry.js → p-3de71759.entry.js} +1 -1
  222. package/dist/ionic/{p-f0384573.system.entry.js → p-3e960213.system.entry.js} +1 -1
  223. package/dist/ionic/{p-a3a145d3.entry.js → p-3f6270b3.entry.js} +1 -1
  224. package/dist/ionic/{p-23a27e78.system.entry.js → p-3fd37993.system.entry.js} +1 -1
  225. package/dist/ionic/{p-426bdba9.system.js → p-3fe96156.system.js} +1 -1
  226. package/dist/ionic/{p-e26030f8.system.js → p-4155f352.system.js} +1 -1
  227. package/dist/ionic/p-4890093d.js +4 -0
  228. package/dist/ionic/{p-5f46d93e.entry.js → p-4a31c99f.entry.js} +1 -1
  229. package/dist/ionic/{p-2cd9cb80.system.entry.js → p-4fb51e61.system.entry.js} +1 -1
  230. package/dist/ionic/{p-71d986ae.entry.js → p-50880712.entry.js} +1 -1
  231. package/dist/ionic/{p-d3e123c0.entry.js → p-51a087d6.entry.js} +1 -1
  232. package/dist/ionic/{p-aac289d2.system.entry.js → p-564af202.system.entry.js} +1 -1
  233. package/dist/ionic/{p-abab375b.system.js → p-57477107.system.js} +1 -1
  234. package/dist/ionic/p-588fdf40.entry.js +4 -0
  235. package/dist/ionic/{p-a5c81b99.entry.js → p-5a68960f.entry.js} +1 -1
  236. package/dist/ionic/{p-34d6f520.system.js → p-5b365ca7.system.js} +1 -1
  237. package/dist/ionic/{p-eef8d7e8.system.entry.js → p-5bebc7b3.system.entry.js} +1 -1
  238. package/dist/ionic/{p-21f015cf.js → p-5ecae037.js} +1 -1
  239. package/dist/ionic/{p-06600f70.js → p-61d7d7fb.js} +1 -1
  240. package/dist/ionic/{p-2657f213.entry.js → p-6470b136.entry.js} +1 -1
  241. package/dist/ionic/{p-5f127075.system.entry.js → p-6577aea9.system.entry.js} +1 -1
  242. package/dist/ionic/{p-d0251fc4.entry.js → p-67da080d.entry.js} +1 -1
  243. package/dist/ionic/{p-2a7e6572.system.entry.js → p-6ad34705.system.entry.js} +1 -1
  244. package/dist/ionic/{p-1cbc21e2.system.entry.js → p-6e70dd1a.system.entry.js} +1 -1
  245. package/dist/ionic/{p-64af4468.entry.js → p-6fbecbda.entry.js} +1 -1
  246. package/dist/ionic/{p-0827d00e.system.entry.js → p-73637557.system.entry.js} +1 -1
  247. package/dist/ionic/{p-fcf49977.system.entry.js → p-73ea8f82.system.entry.js} +1 -1
  248. package/dist/ionic/{p-57c0d5bf.system.entry.js → p-7b8d0af2.system.entry.js} +1 -1
  249. package/dist/ionic/{p-315ad733.system.entry.js → p-7faba551.system.entry.js} +1 -1
  250. package/dist/ionic/{p-bbe3feee.entry.js → p-80fa068e.entry.js} +1 -1
  251. package/dist/ionic/{p-b11ceee2.entry.js → p-82045bc1.entry.js} +1 -1
  252. package/dist/ionic/{p-8c202d6e.system.entry.js → p-868d0165.system.entry.js} +1 -1
  253. package/dist/ionic/{p-ee4a54e3.entry.js → p-88fde0e0.entry.js} +1 -1
  254. package/dist/ionic/{p-67598744.entry.js → p-8f5d30f5.entry.js} +1 -1
  255. package/dist/ionic/{p-edc5c693.system.entry.js → p-908475e7.system.entry.js} +1 -1
  256. package/dist/ionic/{p-3acad8ff.system.entry.js → p-93000a81.system.entry.js} +1 -1
  257. package/dist/ionic/{p-2ac9d078.system.entry.js → p-94389114.system.entry.js} +1 -1
  258. package/dist/ionic/{p-a0db3de9.system.entry.js → p-9709ebd8.system.entry.js} +1 -1
  259. package/dist/ionic/{p-12cdcb59.js → p-9738fd82.js} +1 -1
  260. package/dist/ionic/{p-6cf08720.entry.js → p-98b14ece.entry.js} +1 -1
  261. package/dist/ionic/{p-a70b5d24.entry.js → p-98f3d827.entry.js} +1 -1
  262. package/dist/ionic/{p-58dd7c15.entry.js → p-9c3b6849.entry.js} +1 -1
  263. package/dist/ionic/{p-93dac17a.system.entry.js → p-9eec42cc.system.entry.js} +1 -1
  264. package/dist/ionic/{p-89cfbc88.system.entry.js → p-a0126dd5.system.entry.js} +1 -1
  265. package/dist/ionic/{p-70ecb18b.entry.js → p-a1987850.entry.js} +1 -1
  266. package/dist/ionic/{p-53a3283e.entry.js → p-a4afcc88.entry.js} +1 -1
  267. package/dist/ionic/{p-27e6473f.entry.js → p-a6f9dd7b.entry.js} +1 -1
  268. package/dist/ionic/{p-99fe0543.entry.js → p-a98dc0c1.entry.js} +1 -1
  269. package/dist/ionic/{p-90db28f8.system.entry.js → p-a9e3b5be.system.entry.js} +1 -1
  270. package/dist/ionic/{p-a843a90e.system.entry.js → p-ab9456e9.system.entry.js} +1 -1
  271. package/dist/ionic/p-ad019ef0.entry.js +4 -0
  272. package/dist/ionic/{p-ad78c421.system.js → p-af5cfad2.system.js} +1 -1
  273. package/dist/ionic/{p-a1b4dba7.entry.js → p-b04e4d62.entry.js} +1 -1
  274. package/dist/ionic/{p-1631b52f.system.js → p-b0dc1cf9.system.js} +1 -1
  275. package/dist/ionic/{p-98ac0e27.system.entry.js → p-b3b3efba.system.entry.js} +2 -2
  276. package/dist/ionic/{p-58ff9e5b.system.js → p-b4a51c42.system.js} +1 -1
  277. package/dist/ionic/{p-b5e33ebc.system.entry.js → p-b4bad293.system.entry.js} +1 -1
  278. package/dist/ionic/{p-3cb5466e.entry.js → p-b5f9f14c.entry.js} +1 -1
  279. package/dist/ionic/{p-b0fcf130.system.entry.js → p-b6f5e4f2.system.entry.js} +1 -1
  280. package/dist/ionic/{p-7ae5ca1f.system.entry.js → p-b7010c69.system.entry.js} +1 -1
  281. package/dist/ionic/{p-a99f14a7.system.entry.js → p-b752714f.system.entry.js} +1 -1
  282. package/dist/ionic/{p-f444fea5.entry.js → p-c3289ef2.entry.js} +1 -1
  283. package/dist/ionic/{p-acdd8148.js → p-c3c3333a.js} +1 -1
  284. package/dist/ionic/{p-5a7d5905.system.entry.js → p-c3d09cf2.system.entry.js} +1 -1
  285. package/dist/ionic/{p-8261be6c.system.entry.js → p-c847fb35.system.entry.js} +1 -1
  286. package/dist/ionic/{p-e3c44332.system.entry.js → p-c91ccbfa.system.entry.js} +1 -1
  287. package/dist/ionic/{p-9f376964.system.entry.js → p-c9a21dfd.system.entry.js} +1 -1
  288. package/dist/ionic/{p-ad953217.system.entry.js → p-caf21b46.system.entry.js} +1 -1
  289. package/dist/ionic/{p-19545a49.system.entry.js → p-cce9f61a.system.entry.js} +1 -1
  290. package/dist/ionic/{p-1c6c6098.entry.js → p-cfe57b1b.entry.js} +1 -1
  291. package/dist/ionic/p-cff478d8.entry.js +4 -0
  292. package/dist/ionic/{p-742e11cf.system.entry.js → p-d1cb29a8.system.entry.js} +1 -1
  293. package/dist/ionic/{p-c04accad.entry.js → p-d37b441e.entry.js} +1 -1
  294. package/dist/ionic/{p-f8c5a0dd.system.js → p-d3b030b8.system.js} +1 -1
  295. package/dist/ionic/{p-3f5ae764.entry.js → p-d40a974a.entry.js} +1 -1
  296. package/dist/ionic/{p-91f9e81b.js → p-d662d908.js} +1 -1
  297. package/dist/ionic/{p-41f7af3f.system.entry.js → p-d7be6b7e.system.entry.js} +1 -1
  298. package/dist/ionic/{p-3535a36c.entry.js → p-ddb30596.entry.js} +1 -1
  299. package/dist/ionic/{p-c5ae50be.system.js → p-e3584231.system.js} +1 -1
  300. package/dist/ionic/p-e4d90573.js +4 -0
  301. package/dist/ionic/{p-ca32685b.system.entry.js → p-e553006f.system.entry.js} +1 -1
  302. package/dist/ionic/{p-27a5f2c7.system.entry.js → p-e6d68e02.system.entry.js} +1 -1
  303. package/dist/ionic/{p-8a75f7bf.system.entry.js → p-e7ea9815.system.entry.js} +1 -1
  304. package/dist/ionic/{p-8a10752d.entry.js → p-e94c392d.entry.js} +1 -1
  305. package/dist/ionic/p-ea69616e.entry.js +4 -0
  306. package/dist/ionic/{p-4f71a9cf.system.entry.js → p-ef126ae8.system.entry.js} +1 -1
  307. package/dist/ionic/{p-f10de9d5.system.js → p-f2c21dae.system.js} +1 -1
  308. package/dist/ionic/{p-7484b1d6.system.js → p-f7a36cd0.system.js} +1 -1
  309. package/dist/ionic/{p-e4045e04.entry.js → p-f8a5bb89.entry.js} +1 -1
  310. package/dist/types/components/input/input.d.ts +5 -1
  311. package/dist/types/components/refresher/refresher.utils.d.ts +0 -17
  312. package/dist/types/components/searchbar/searchbar.d.ts +2 -0
  313. package/dist/types/components/textarea/textarea.d.ts +5 -1
  314. package/dist/types/components.d.ts +7 -7
  315. package/hydrate/index.d.ts +1 -1
  316. package/hydrate/index.js +61 -33
  317. package/package.json +2 -2
  318. package/components/refresher.utils.js +0 -198
  319. package/dist/esm-es5/app-globals-c23144fc.js +0 -4
  320. package/dist/ionic/p-079eb722.system.entry.js +0 -4
  321. package/dist/ionic/p-405f1a72.entry.js +0 -4
  322. package/dist/ionic/p-5c7f13cd.system.entry.js +0 -4
  323. package/dist/ionic/p-6744eca5.entry.js +0 -4
  324. package/dist/ionic/p-af959b5d.entry.js +0 -4
  325. package/dist/ionic/p-b8f2134e.js +0 -4
  326. package/dist/ionic/p-c53c8d83.entry.js +0 -4
  327. package/dist/ionic/p-cde72008.js +0 -4
  328. package/dist/ionic/p-ddccf1f4.js +0 -4
  329. package/dist/ionic/p-e145b9f9.entry.js +0 -4
  330. package/dist/ionic/p-eab6401e.js +0 -4
@@ -3,6 +3,7 @@
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'];
6
7
  configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
7
8
  test.describe(title('input: clearOnEdit'), () => {
8
9
  test('should clear when typed into', async ({ page }) => {
@@ -13,21 +14,32 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) =>
13
14
  await ionInput.next();
14
15
  await expect(input).toHaveJSProperty('value', 'h');
15
16
  });
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);
18
- const input = page.locator('ion-input');
19
- await input.locator('input').focus();
20
- await page.keyboard.press('Enter');
21
- await page.waitForChanges();
22
- await expect(input).toHaveJSProperty('value', 'abc');
17
+ IGNORED_KEYS.forEach((ignoredKey) => {
18
+ test(`should not clear when ${ignoredKey} is pressed`, async ({ page }) => {
19
+ await page.setContent(`<ion-input value="abc" clear-on-edit="true" aria-label="input"></ion-input>`, config);
20
+ const input = page.locator('ion-input');
21
+ await input.locator('input').focus();
22
+ await page.keyboard.press(ignoredKey);
23
+ await page.waitForChanges();
24
+ await expect(input).toHaveJSProperty('value', 'abc');
25
+ });
23
26
  });
24
- test('should not clear when tab is pressed', async ({ page }) => {
27
+ test('should clear after when pressing valid key after pressing ignored key', async ({ page }) => {
28
+ test.info().annotations.push({
29
+ type: 'issue',
30
+ description: 'https://github.com/ionic-team/ionic-framework/issues/28633',
31
+ });
25
32
  await page.setContent(`<ion-input value="abc" clear-on-edit="true" aria-label="input"></ion-input>`, config);
26
33
  const input = page.locator('ion-input');
27
34
  await input.locator('input').focus();
28
- await page.keyboard.press('Tab');
35
+ // ignored
36
+ await page.keyboard.press('Shift');
29
37
  await page.waitForChanges();
30
38
  await expect(input).toHaveJSProperty('value', 'abc');
39
+ // allowed
40
+ await page.keyboard.press('a');
41
+ await page.waitForChanges();
42
+ await expect(input).toHaveJSProperty('value', 'a');
31
43
  });
32
44
  });
33
45
  });
@@ -162,25 +162,6 @@ export const translateElement = (el, value, duration = 200) => {
162
162
  };
163
163
  // Utils
164
164
  // -----------------------------
165
- /**
166
- * In order to use the native iOS refresher the device must support rubber band scrolling.
167
- * The ios + mobile platform check ensures that desktop Safari is not included. Desktop Safari
168
- * has a slightly different rubber band effect that is not compatible with the native refresher
169
- * in Ionic.
170
- *
171
- * We also need to be careful not to include devices that spoof their user agent.
172
- * For example, when using iOS emulation in Chrome the user agent will be spoofed such that
173
- * isPlatform('ios') and isPlatform('mobile') both return true. To work around this,
174
- * we check to see if the apple-pay-logo is supported as a named image which is only
175
- * true on Apple devices.
176
- *
177
- * We previously checked referencEl.style.webkitOverflowScrolling to explicitly check
178
- * for rubber band support. However, this property was removed on iPadOS and it's possible
179
- * that this will be removed on iOS in the future too.
180
- */
181
- export const supportsRubberBandScrolling = () => {
182
- return (isPlatform('ios') && isPlatform('mobile') && CSS.supports('background: -webkit-named-image(apple-pay-logo-black)'));
183
- };
184
165
  export const shouldUseNativeRefresher = async (referenceEl, mode) => {
185
166
  const refresherContent = referenceEl.querySelector('ion-refresher-content');
186
167
  if (!refresherContent) {
@@ -191,5 +172,14 @@ export const shouldUseNativeRefresher = async (referenceEl, mode) => {
191
172
  const refreshingSpinner = referenceEl.querySelector('ion-refresher-content .refresher-refreshing ion-spinner');
192
173
  return (pullingSpinner !== null &&
193
174
  refreshingSpinner !== null &&
194
- ((mode === 'ios' && supportsRubberBandScrolling()) || mode === 'md'));
175
+ /**
176
+ * We use webkitOverflowScrolling for feature detection with rubber band scrolling
177
+ * on iOS. When doing referenceEl.style, webkitOverflowScrolling is undefined on non-iOS platforms.
178
+ * However, it will be the empty string on iOS.
179
+ * Note that we do not use getPropertyValue (and thus need to cast as any) because calling
180
+ * getPropertyValue('-webkit-overflow-scrolling') will return the empty string if it is not
181
+ * set on the element, even if the platform does not support that.
182
+ */
183
+ ((mode === 'ios' && isPlatform('mobile') && referenceEl.style.webkitOverflowScrolling !== undefined) ||
184
+ mode === 'md'));
195
185
  };
@@ -3,11 +3,11 @@
3
3
  */
4
4
  import { Host, h } from "@stencil/core";
5
5
  import { ENABLE_HTML_CONTENT_DEFAULT } from "../../utils/config";
6
+ import { isPlatform } from "../../utils/platform";
6
7
  import { sanitizeDOMString } from "../../utils/sanitization/index";
7
8
  import { arrowDown, caretBackSharp } from "ionicons/icons";
8
9
  import { config } from "../../global/config";
9
10
  import { getIonMode } from "../../global/ionic-global";
10
- import { supportsRubberBandScrolling } from "../refresher/refresher.utils";
11
11
  import { SPINNERS } from "../spinner/spinner-configs";
12
12
  export class RefresherContent {
13
13
  constructor() {
@@ -19,15 +19,9 @@ export class RefresherContent {
19
19
  }
20
20
  componentWillLoad() {
21
21
  if (this.pullingIcon === undefined) {
22
- /**
23
- * The native iOS refresher uses a spinner instead of
24
- * an icon, so we need to see if this device supports
25
- * the native iOS refresher.
26
- */
27
- const hasRubberBandScrolling = supportsRubberBandScrolling();
28
22
  const mode = getIonMode(this);
29
- const overflowRefresher = hasRubberBandScrolling ? 'lines' : arrowDown;
30
- this.pullingIcon = config.get('refreshingIcon', mode === 'ios' && hasRubberBandScrolling ? config.get('spinner', overflowRefresher) : 'circular');
23
+ const overflowRefresher = this.el.style.webkitOverflowScrolling !== undefined ? 'lines' : arrowDown;
24
+ this.pullingIcon = config.get('refreshingIcon', mode === 'ios' && isPlatform('mobile') ? config.get('spinner', overflowRefresher) : 'circular');
31
25
  }
32
26
  if (this.refreshingSpinner === undefined) {
33
27
  const mode = getIonMode(this);
@@ -180,6 +180,8 @@ export class Searchbar {
180
180
  *
181
181
  * Developers who wish to focus an input when an overlay is presented
182
182
  * should call `setFocus` after `didPresent` has resolved.
183
+ *
184
+ * See [managing focus](/docs/developing/managing-focus) for more information.
183
185
  */
184
186
  async setFocus() {
185
187
  if (this.nativeInput) {
@@ -890,7 +892,7 @@ export class Searchbar {
890
892
  "return": "Promise<void>"
891
893
  },
892
894
  "docs": {
893
- "text": "Sets focus on the native `input` in `ion-searchbar`. Use this method instead of the global\n`input.focus()`.\n\nDevelopers who wish to focus an input when a page enters\nshould call `setFocus()` in the `ionViewDidEnter()` lifecycle method.\n\nDevelopers who wish to focus an input when an overlay is presented\nshould call `setFocus` after `didPresent` has resolved.",
895
+ "text": "Sets focus on the native `input` in `ion-searchbar`. Use this method instead of the global\n`input.focus()`.\n\nDevelopers who wish to focus an input when a page enters\nshould call `setFocus()` in the `ionViewDidEnter()` lifecycle method.\n\nDevelopers who wish to focus an input when an overlay is presented\nshould call `setFocus` after `didPresent` has resolved.\n\nSee [managing focus](/docs/developing/managing-focus) for more information.",
894
896
  "tags": []
895
897
  }
896
898
  },
@@ -3,6 +3,7 @@
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'];
6
7
  configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
7
8
  test.describe(title('textarea: clearOnEdit'), () => {
8
9
  test('should clear when typed into', async ({ page }) => {
@@ -21,5 +22,32 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) =>
21
22
  await page.waitForChanges();
22
23
  await expect(textarea).toHaveJSProperty('value', 'abc');
23
24
  });
25
+ IGNORED_KEYS.forEach((ignoredKey) => {
26
+ test(`should not clear when ${ignoredKey} is pressed`, async ({ page }) => {
27
+ await page.setContent(`<ion-textarea value="abc" clear-on-edit="true" aria-label="textarea"></ion-textarea>`, config);
28
+ const textarea = page.locator('ion-textarea');
29
+ await textarea.locator('textarea').focus();
30
+ await page.keyboard.press(ignoredKey);
31
+ await page.waitForChanges();
32
+ await expect(textarea).toHaveJSProperty('value', 'abc');
33
+ });
34
+ });
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
+ });
40
+ await page.setContent(`<ion-textarea value="abc" clear-on-edit="true" aria-label="textarea"></ion-textarea>`, config);
41
+ const textarea = page.locator('ion-textarea');
42
+ await textarea.locator('textarea').focus();
43
+ // ignored
44
+ await page.keyboard.press('Shift');
45
+ await page.waitForChanges();
46
+ await expect(textarea).toHaveJSProperty('value', 'abc');
47
+ // allowed
48
+ await page.keyboard.press('a');
49
+ await page.waitForChanges();
50
+ await expect(textarea).toHaveJSProperty('value', 'a');
51
+ });
24
52
  });
25
53
  });
@@ -160,6 +160,8 @@ export class Textarea {
160
160
  /**
161
161
  * Sets focus on the native `textarea` in `ion-textarea`. Use this method instead of the global
162
162
  * `textarea.focus()`.
163
+ *
164
+ * See [managing focus](/docs/developing/managing-focus) for more information.
163
165
  */
164
166
  async setFocus() {
165
167
  if (this.nativeInput) {
@@ -232,15 +234,36 @@ export class Textarea {
232
234
  if (!this.clearOnEdit) {
233
235
  return;
234
236
  }
237
+ /**
238
+ * The following keys do not modify the
239
+ * contents of the input. As a result, pressing
240
+ * them should not edit the textarea.
241
+ *
242
+ * We can't check to see if the value of the textarea
243
+ * was changed because we call checkClearOnEdit
244
+ * in a keydown listener, and the key has not yet
245
+ * been added to the textarea.
246
+ *
247
+ * Unlike ion-input, the "Enter" key does modify the
248
+ * textarea by adding a new line, so "Enter" is not
249
+ * included in the IGNORED_KEYS array.
250
+ */
251
+ const IGNORED_KEYS = ['Tab', 'Shift', 'Meta', 'Alt', 'Control'];
235
252
  /**
236
253
  * Clear the textarea if the control has not been previously cleared
237
254
  * during focus.
238
255
  */
239
- if (!this.didTextareaClearOnEdit && this.hasValue() && ev.key !== 'Tab') {
256
+ if (!this.didTextareaClearOnEdit && this.hasValue() && !IGNORED_KEYS.includes(ev.key)) {
240
257
  this.value = '';
241
258
  this.emitInputChange(ev);
259
+ /**
260
+ * Only set this flag if we cleared the input.
261
+ * Otherwise pressing an IGNORED_KEYS first and
262
+ * then an allowed key will cause the input to not
263
+ * be cleared.
264
+ */
265
+ this.didTextareaClearOnEdit = true;
242
266
  }
243
- this.didTextareaClearOnEdit = true;
244
267
  }
245
268
  focusChange() {
246
269
  this.emitStyle();
@@ -448,7 +471,7 @@ Developers can use the "legacy" property to continue using the legacy form marku
448
471
  "optional": false,
449
472
  "docs": {
450
473
  "tags": [],
451
- "text": "This Boolean attribute lets you specify that a form control should have input focus when the page loads."
474
+ "text": "Sets the [`autofocus` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/autofocus) on the native input element.\n\nThis may not be sufficient for the element to be focused on page load. See [managing focus](/docs/developing/managing-focus) for more information."
452
475
  },
453
476
  "attribute": "autofocus",
454
477
  "reflect": false,
@@ -1035,7 +1058,7 @@ Developers can use the "legacy" property to continue using the legacy form marku
1035
1058
  "return": "Promise<void>"
1036
1059
  },
1037
1060
  "docs": {
1038
- "text": "Sets focus on the native `textarea` in `ion-textarea`. Use this method instead of the global\n`textarea.focus()`.",
1061
+ "text": "Sets focus on the native `textarea` in `ion-textarea`. Use this method instead of the global\n`textarea.focus()`.\n\nSee [managing focus](/docs/developing/managing-focus) for more information.",
1039
1062
  "tags": []
1040
1063
  }
1041
1064
  },
package/dist/docs.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
- "timestamp": "2023-12-01T16:36:44",
2
+ "timestamp": "2023-12-05T14:57:32",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
- "version": "4.8.0",
5
+ "version": "4.8.1",
6
6
  "typescriptVersion": "5.2.2"
7
7
  },
8
8
  "components": [
@@ -9991,7 +9991,7 @@
9991
9991
  "mutable": false,
9992
9992
  "attr": "autofocus",
9993
9993
  "reflectToAttr": false,
9994
- "docs": "This Boolean attribute lets you specify that a form control should have input focus when the page loads.",
9994
+ "docs": "Sets the [`autofocus` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/autofocus) on the native input element.\n\nThis may not be sufficient for the element to be focused on page load. See [managing focus](/docs/developing/managing-focus) for more information.",
9995
9995
  "docsTags": [],
9996
9996
  "default": "false",
9997
9997
  "values": [
@@ -10978,7 +10978,7 @@
10978
10978
  },
10979
10979
  "signature": "setFocus() => Promise<void>",
10980
10980
  "parameters": [],
10981
- "docs": "Sets focus on the native `input` in `ion-input`. Use this method instead of the global\n`input.focus()`.\n\nDevelopers who wish to focus an input when a page enters\nshould call `setFocus()` in the `ionViewDidEnter()` lifecycle method.\n\nDevelopers who wish to focus an input when an overlay is presented\nshould call `setFocus` after `didPresent` has resolved.",
10981
+ "docs": "Sets focus on the native `input` in `ion-input`. Use this method instead of the global\n`input.focus()`.\n\nDevelopers who wish to focus an input when a page enters\nshould call `setFocus()` in the `ionViewDidEnter()` lifecycle method.\n\nDevelopers who wish to focus an input when an overlay is presented\nshould call `setFocus` after `didPresent` has resolved.\n\nSee [managing focus](/docs/developing/managing-focus) for more information.",
10982
10982
  "docsTags": []
10983
10983
  }
10984
10984
  ],
@@ -22977,7 +22977,7 @@
22977
22977
  },
22978
22978
  "signature": "setFocus() => Promise<void>",
22979
22979
  "parameters": [],
22980
- "docs": "Sets focus on the native `input` in `ion-searchbar`. Use this method instead of the global\n`input.focus()`.\n\nDevelopers who wish to focus an input when a page enters\nshould call `setFocus()` in the `ionViewDidEnter()` lifecycle method.\n\nDevelopers who wish to focus an input when an overlay is presented\nshould call `setFocus` after `didPresent` has resolved.",
22980
+ "docs": "Sets focus on the native `input` in `ion-searchbar`. Use this method instead of the global\n`input.focus()`.\n\nDevelopers who wish to focus an input when a page enters\nshould call `setFocus()` in the `ionViewDidEnter()` lifecycle method.\n\nDevelopers who wish to focus an input when an overlay is presented\nshould call `setFocus` after `didPresent` has resolved.\n\nSee [managing focus](/docs/developing/managing-focus) for more information.",
22981
22981
  "docsTags": []
22982
22982
  }
22983
22983
  ],
@@ -26100,7 +26100,7 @@
26100
26100
  "mutable": false,
26101
26101
  "attr": "autofocus",
26102
26102
  "reflectToAttr": false,
26103
- "docs": "This Boolean attribute lets you specify that a form control should have input focus when the page loads.",
26103
+ "docs": "Sets the [`autofocus` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/autofocus) on the native input element.\n\nThis may not be sufficient for the element to be focused on page load. See [managing focus](/docs/developing/managing-focus) for more information.",
26104
26104
  "docsTags": [],
26105
26105
  "default": "false",
26106
26106
  "values": [
@@ -26918,7 +26918,7 @@
26918
26918
  },
26919
26919
  "signature": "setFocus() => Promise<void>",
26920
26920
  "parameters": [],
26921
- "docs": "Sets focus on the native `textarea` in `ion-textarea`. Use this method instead of the global\n`textarea.focus()`.",
26921
+ "docs": "Sets focus on the native `textarea` in `ion-textarea`. Use this method instead of the global\n`textarea.focus()`.\n\nSee [managing focus](/docs/developing/managing-focus) for more information.",
26922
26922
  "docsTags": []
26923
26923
  }
26924
26924
  ],
@@ -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-6c78e871.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-39329c6f.js';
4
+ import { w as writeTask } from './index-08d686eb.js';
5
5
  import { h as hapticSelectionEnd, a as hapticSelectionStart, b as hapticSelectionChanged } from './haptic-152c4172.js';
6
6
  import { createGesture } from './index-2cf77112.js';
7
7
 
@@ -263,6 +263,17 @@ const convertToPrivate = (node) => {
263
263
  vnode.$name$ = node.vname;
264
264
  return vnode;
265
265
  };
266
+ /**
267
+ * Entrypoint of the client-side hydration process. Facilitates calls to hydrate the
268
+ * document and all its nodes.
269
+ *
270
+ * This process will also reconstruct the shadow root and slot DOM nodes for components using shadow DOM.
271
+ *
272
+ * @param hostElm The element to hydrate.
273
+ * @param tagName The element's tag name.
274
+ * @param hostId The host ID assigned to the element by the server.
275
+ * @param hostRef The host reference for the element.
276
+ */
266
277
  const initializeClientHydrate = (hostElm, tagName, hostId, hostRef) => {
267
278
  const endHydrate = createTime('hydrateClient', tagName);
268
279
  const shadowRoot = hostElm.shadowRoot;
@@ -280,6 +291,8 @@ const initializeClientHydrate = (hostElm, tagName, hostId, hostRef) => {
280
291
  const orgLocationId = c.$hostId$ + '.' + c.$nodeId$;
281
292
  const orgLocationNode = plt.$orgLocNodes$.get(orgLocationId);
282
293
  const node = c.$elm$;
294
+ // Put the node back in its original location since the native Shadow DOM
295
+ // can handle rendering it its correct location now
283
296
  if (orgLocationNode && supportsShadow && orgLocationNode['s-en'] === '') {
284
297
  orgLocationNode.parentNode.insertBefore(node, orgLocationNode.nextSibling);
285
298
  }
@@ -301,6 +314,22 @@ const initializeClientHydrate = (hostElm, tagName, hostId, hostRef) => {
301
314
  }
302
315
  endHydrate();
303
316
  };
317
+ /**
318
+ * Recursively constructs the virtual node tree for a host element and its children.
319
+ * The tree is constructed by parsing the annotations set on the nodes by the server.
320
+ *
321
+ * In addition to constructing the vNode tree, we also track information about the node's
322
+ * descendants like which are slots, which should exist in the shadow root, and which
323
+ * are nodes that should be rendered as children of the parent node.
324
+ *
325
+ * @param parentVNode The vNode representing the parent node.
326
+ * @param childRenderNodes An array of all child nodes in the parent's node tree.
327
+ * @param slotNodes An array of all slot nodes in the parent's node tree.
328
+ * @param shadowRootNodes An array all nodes that should be rendered in the shadow root in the parent's node tree.
329
+ * @param hostElm The parent element.
330
+ * @param node The node to construct the vNode tree for.
331
+ * @param hostId The host ID assigned to the element by the server.
332
+ */
304
333
  const clientHydrate = (parentVNode, childRenderNodes, slotNodes, shadowRootNodes, hostElm, node, hostId) => {
305
334
  let childNodeType;
306
335
  let childIdSplt;
@@ -445,6 +474,13 @@ const clientHydrate = (parentVNode, childRenderNodes, slotNodes, shadowRootNodes
445
474
  parentVNode.$children$ = [vnode];
446
475
  }
447
476
  };
477
+ /**
478
+ * Recursively locate any comments representing an original location for a node in a node's
479
+ * children or shadowRoot children.
480
+ *
481
+ * @param node The node to search.
482
+ * @param orgLocNodes A map of the original location annotation and the current node being searched.
483
+ */
448
484
  const initializeDocumentHydrate = (node, orgLocNodes) => {
449
485
  if (node.nodeType === 1 /* NODE_TYPE.ElementNode */) {
450
486
  let i = 0;
@@ -2527,12 +2563,14 @@ const bootstrapLazy = (lazyBundles, options = {}) => {
2527
2563
  // If we have styles, add them to the DOM
2528
2564
  if (dataStyles.innerHTML.length) {
2529
2565
  dataStyles.setAttribute('data-styles', '');
2530
- head.insertBefore(dataStyles, metaCharset ? metaCharset.nextSibling : head.firstChild);
2531
2566
  // Apply CSP nonce to the style tag if it exists
2532
2567
  const nonce = (_a = plt.$nonce$) !== null && _a !== void 0 ? _a : queryNonceMetaTagContent(doc);
2533
2568
  if (nonce != null) {
2534
2569
  dataStyles.setAttribute('nonce', nonce);
2535
2570
  }
2571
+ // Insert the styles into the document head
2572
+ // NOTE: this _needs_ to happen last so we can ensure the nonce (and other attributes) are applied
2573
+ head.insertBefore(dataStyles, metaCharset ? metaCharset.nextSibling : head.firstChild);
2536
2574
  }
2537
2575
  // Process deferred connectedCallbacks now all components have been registered
2538
2576
  isBootstrapping = false;
@@ -4,7 +4,7 @@
4
4
  import { p as printIonWarning } from './index-9b0d46f4.js';
5
5
  import { MENU_BACK_BUTTON_PRIORITY } from './hardware-back-button-b2bc76db.js';
6
6
  import { c as componentOnReady } from './helpers-ae653409.js';
7
- import { b as getIonMode } from './ionic-global-6c78e871.js';
7
+ import { b as getIonMode } from './ionic-global-c0cda98e.js';
8
8
  import { c as createAnimation } from './animation-fb0e0f6f.js';
9
9
 
10
10
  /**
@@ -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-39329c6f.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-daa373e9.js');
14
- const mdTransitionAnimation = () => import('./md.transition-91c3d3cc.js');
13
+ const iosTransitionAnimation = () => import('./ios.transition-fd16bec1.js');
14
+ const mdTransitionAnimation = () => import('./md.transition-94ac93e1.js');
15
15
  // TODO(FW-2832): types
16
16
  const transition = (opts) => {
17
17
  return new Promise((resolve, reject) => {
package/dist/esm/index.js CHANGED
@@ -2,19 +2,19 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  export { c as createAnimation } from './animation-fb0e0f6f.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-bebaae5d.js';
6
- export { iosTransitionAnimation } from './ios.transition-daa373e9.js';
7
- export { mdTransitionAnimation } from './md.transition-91c3d3cc.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-d8817fb0.js';
6
+ export { iosTransitionAnimation } from './ios.transition-fd16bec1.js';
7
+ export { mdTransitionAnimation } from './md.transition-94ac93e1.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-6c78e871.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-7a818ed3.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-64e67e2c.js';
14
+ export { m as menuController } from './index-80492ed3.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-abf58489.js';
16
16
  import './index-7a14ecec.js';
17
- import './index-39329c6f.js';
17
+ import './index-08d686eb.js';
18
18
  import './gesture-controller-1bf57181.js';
19
19
  import './index-9b0d46f4.js';
20
20
  import './hardware-back-button-b2bc76db.js';
@@ -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-39329c6f.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-6c78e871.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}";
@@ -1,13 +1,13 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { r as registerInstance, d as createEvent, e as readTask, h, H as Host, f as getElement } from './index-39329c6f.js';
5
- import { c as createButtonActiveGesture } from './button-active-7013b5a1.js';
4
+ import { r as registerInstance, d as createEvent, e as readTask, h, H as Host, f as getElement } from './index-08d686eb.js';
5
+ import { c as createButtonActiveGesture } from './button-active-3fdf3e4f.js';
6
6
  import { r as raf } from './helpers-ae653409.js';
7
7
  import { c as createLockController } from './lock-controller-316928be.js';
8
- import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, f as present, g as dismiss, h as eventMethod, s as safeCall, j as prepareOverlay, k as setOverlayId } from './overlays-64e67e2c.js';
8
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, f as present, g as dismiss, h as eventMethod, s as safeCall, j as prepareOverlay, k as setOverlayId } from './overlays-abf58489.js';
9
9
  import { g as getClassMap } from './theme-01f3f29c.js';
10
- import { b as getIonMode } from './ionic-global-6c78e871.js';
10
+ import { b as getIonMode } from './ionic-global-c0cda98e.js';
11
11
  import { c as createAnimation } from './animation-fb0e0f6f.js';
12
12
  import './haptic-152c4172.js';
13
13
  import './capacitor-b0e5fe83.js';
@@ -1,14 +1,14 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { r as registerInstance, d as createEvent, i as forceUpdate, h, H as Host, f as getElement } from './index-39329c6f.js';
4
+ import { r as registerInstance, d as createEvent, i as forceUpdate, h, H as Host, f as getElement } from './index-08d686eb.js';
5
5
  import { E as ENABLE_HTML_CONTENT_DEFAULT, a as sanitizeDOMString } from './config-49c88215.js';
6
- import { c as createButtonActiveGesture } from './button-active-7013b5a1.js';
6
+ import { c as createButtonActiveGesture } from './button-active-3fdf3e4f.js';
7
7
  import { r as raf } from './helpers-ae653409.js';
8
8
  import { c as createLockController } from './lock-controller-316928be.js';
9
- import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-64e67e2c.js';
9
+ import { d as createDelegateController, e as createTriggerController, B as BACKDROP, i as isCancel, j as prepareOverlay, k as setOverlayId, f as present, g as dismiss, h as eventMethod, s as safeCall } from './overlays-abf58489.js';
10
10
  import { g as getClassMap } from './theme-01f3f29c.js';
11
- import { c as config, b as getIonMode } from './ionic-global-6c78e871.js';
11
+ import { c as config, b as getIonMode } from './ionic-global-c0cda98e.js';
12
12
  import { c as createAnimation } from './animation-fb0e0f6f.js';
13
13
  import './haptic-152c4172.js';
14
14
  import './capacitor-b0e5fe83.js';
@@ -1,8 +1,8 @@
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, e as readTask, i as forceUpdate, w as writeTask } from './index-39329c6f.js';
5
- import { b as getIonMode, c as config, a as isPlatform } from './ionic-global-6c78e871.js';
4
+ import { r as registerInstance, h, H as Host, f as getElement, d as createEvent, e as readTask, i as forceUpdate, w as writeTask } from './index-08d686eb.js';
5
+ import { b as getIonMode, c as config, a as isPlatform } from './ionic-global-c0cda98e.js';
6
6
  import { m as hasLazyBuild, c as componentOnReady, l as clamp, i as inheritAriaAttributes, s as shallowEqualStringMap } from './helpers-ae653409.js';
7
7
  import { i as isRTL } from './dir-babeabeb.js';
8
8
  import { c as createColorClasses, h as hostContext } from './theme-01f3f29c.js';
@@ -11,7 +11,7 @@ import { c as createKeyboardController } from './keyboard-controller-5d90929a.js
11
11
  import { g as getTimeGivenProgression } from './cubic-bezier-fe2083dc.js';
12
12
  import { a as attachComponent, d as detachComponent } from './framework-delegate-bc1fd82a.js';
13
13
  import { c as createLockController } from './lock-controller-316928be.js';
14
- import { t as transition } from './index-bebaae5d.js';
14
+ import { t as transition } from './index-d8817fb0.js';
15
15
  import './index-9b0d46f4.js';
16
16
  import './index-7a14ecec.js';
17
17
  import './keyboard-dbb05fb9.js';
@@ -31,7 +31,7 @@ const App = class {
31
31
  import('./index-ba9976bb.js').then((module) => module.startTapClick(config));
32
32
  }
33
33
  if (config.getBoolean('statusTap', isHybrid)) {
34
- import('./status-tap-9dd45200.js').then((module) => module.startStatusTap());
34
+ import('./status-tap-2b93b1b5.js').then((module) => module.startStatusTap());
35
35
  }
36
36
  if (config.getBoolean('inputShims', needInputShims())) {
37
37
  /**
@@ -1,8 +1,8 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { r as registerInstance, h, H as Host } from './index-39329c6f.js';
5
- import { b as getIonMode } from './ionic-global-6c78e871.js';
4
+ import { r as registerInstance, h, H as Host } from './index-08d686eb.js';
5
+ import { b as getIonMode } from './ionic-global-c0cda98e.js';
6
6
  import { c as createColorClasses } from './theme-01f3f29c.js';
7
7
 
8
8
  const avatarIosCss = ":host{border-radius:var(--border-radius);display:block}::slotted(ion-img),::slotted(img){border-radius:var(--border-radius);width:100%;height:100%;-o-object-fit:cover;object-fit:cover;overflow:hidden}:host{--border-radius:50%;width:48px;height:48px}";
@@ -1,11 +1,11 @@
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 } from './index-39329c6f.js';
4
+ import { r as registerInstance, h, H as Host, f as getElement } from './index-08d686eb.js';
5
5
  import { i as inheritAriaAttributes } from './helpers-ae653409.js';
6
6
  import { o as openURL, c as createColorClasses, h as hostContext } from './theme-01f3f29c.js';
7
7
  import { c as chevronBack, a as arrowBackSharp } from './index-c132c5f1.js';
8
- import { c as config, b as getIonMode } from './ionic-global-6c78e871.js';
8
+ import { c as config, b as getIonMode } from './ionic-global-c0cda98e.js';
9
9
 
10
10
  const backButtonIosCss = ":host{--background:transparent;--color-focused:currentColor;--color-hover:currentColor;--icon-margin-top:0;--icon-margin-bottom:0;--icon-padding-top:0;--icon-padding-end:0;--icon-padding-bottom:0;--icon-padding-start:0;--margin-top:0;--margin-end:0;--margin-bottom:0;--margin-start:0;--min-width:auto;--min-height:auto;--padding-top:0;--padding-end:0;--padding-bottom:0;--padding-start:0;--opacity:1;--ripple-color:currentColor;--transition:background-color, opacity 100ms linear;display:none;min-width:var(--min-width);min-height:var(--min-height);color:var(--color);font-family:var(--ion-font-family, inherit);text-align:center;text-decoration:none;text-overflow:ellipsis;text-transform:none;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-font-kerning:none;font-kerning:none}ion-ripple-effect{color:var(--ripple-color)}:host(.ion-color) .button-native{color:var(--ion-color-base)}:host(.show-back-button){display:block}:host(.back-button-disabled){cursor:default;opacity:0.5;pointer-events:none}.button-native{border-radius:var(--border-radius);-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;-webkit-margin-start:var(--margin-start);margin-inline-start:var(--margin-start);-webkit-margin-end:var(--margin-end);margin-inline-end:var(--margin-end);margin-top:var(--margin-top);margin-bottom:var(--margin-bottom);-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end);padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;text-decoration:inherit;text-indent:inherit;text-overflow:inherit;text-transform:inherit;text-align:inherit;white-space:inherit;color:inherit;display:block;position:relative;width:100%;height:100%;min-height:inherit;-webkit-transition:var(--transition);transition:var(--transition);border:0;outline:none;background:var(--background);line-height:1;cursor:pointer;opacity:var(--opacity);overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.button-inner{display:-ms-flexbox;display:flex;position:relative;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-negative:0;flex-shrink:0;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;z-index:1}ion-icon{-webkit-padding-start:var(--icon-padding-start);padding-inline-start:var(--icon-padding-start);-webkit-padding-end:var(--icon-padding-end);padding-inline-end:var(--icon-padding-end);padding-top:var(--icon-padding-top);padding-bottom:var(--icon-padding-bottom);-webkit-margin-start:var(--icon-margin-start);margin-inline-start:var(--icon-margin-start);-webkit-margin-end:var(--icon-margin-end);margin-inline-end:var(--icon-margin-end);margin-top:var(--icon-margin-top);margin-bottom:var(--icon-margin-bottom);display:inherit;font-size:var(--icon-font-size);font-weight:var(--icon-font-weight);pointer-events:none}:host(.ion-focused) .button-native{color:var(--color-focused)}:host(.ion-focused) .button-native::after{background:var(--background-focused);opacity:var(--background-focused-opacity)}.button-native::after{left:0;right:0;top:0;bottom:0;position:absolute;content:\"\";opacity:0}@media (any-hover: hover){:host(:hover) .button-native{color:var(--color-hover)}:host(:hover) .button-native::after{background:var(--background-hover);opacity:var(--background-hover-opacity)}}:host(.ion-color.ion-focused) .button-native{color:var(--ion-color-base)}@media (any-hover: hover){:host(.ion-color:hover) .button-native{color:var(--ion-color-base)}}:host(.in-toolbar:not(.in-toolbar-color)){color:var(--ion-toolbar-color, var(--color))}:host{--background-hover:transparent;--background-hover-opacity:1;--background-focused:currentColor;--background-focused-opacity:.1;--border-radius:4px;--color:var(--ion-color-primary, #3880ff);--icon-margin-end:1px;--icon-margin-start:-4px;--icon-font-size:1.6em;--min-height:32px;font-size:clamp(17px, 1.0625rem, 21.998px)}.button-native{-webkit-transform:translateZ(0);transform:translateZ(0);overflow:visible;z-index:99}:host(.ion-activated) .button-native{opacity:0.4}@media (any-hover: hover){:host(:hover){opacity:0.6}}";
11
11
 
@@ -1,9 +1,9 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { r as registerInstance, d as createEvent, h, H as Host } from './index-39329c6f.js';
4
+ import { r as registerInstance, d as createEvent, h, H as Host } from './index-08d686eb.js';
5
5
  import { G as GESTURE_CONTROLLER } from './gesture-controller-1bf57181.js';
6
- import { b as getIonMode } from './ionic-global-6c78e871.js';
6
+ import { b as getIonMode } from './ionic-global-c0cda98e.js';
7
7
 
8
8
  const backdropIosCss = ":host{left:0;right:0;top:0;bottom:0;display:block;position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0);contain:strict;cursor:pointer;opacity:0.01;-ms-touch-action:none;touch-action:none;z-index:2}:host(.backdrop-hide){background:transparent}:host(.backdrop-no-tappable){cursor:auto}:host{background-color:var(--ion-backdrop-color, #000)}";
9
9