@ionic/core 8.7.18 → 8.7.19-dev.11772655618.1af0949f

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 (587) hide show
  1. package/components/index.d.ts +2 -0
  2. package/components/index.js +1 -114
  3. package/components/ion-accordion-group.js +1 -268
  4. package/components/ion-accordion.js +1 -456
  5. package/components/ion-action-sheet.js +1 -6
  6. package/components/ion-alert.js +1 -6
  7. package/components/ion-app.js +1 -132
  8. package/components/ion-avatar.js +1 -41
  9. package/components/ion-back-button.js +1 -130
  10. package/components/ion-backdrop.js +1 -6
  11. package/components/ion-badge.js +1 -47
  12. package/components/ion-breadcrumb.js +1 -137
  13. package/components/ion-breadcrumbs.js +1 -164
  14. package/components/ion-button.js +1 -6
  15. package/components/ion-buttons.js +1 -6
  16. package/components/ion-card-content.js +1 -45
  17. package/components/ion-card-header.js +1 -56
  18. package/components/ion-card-subtitle.js +1 -48
  19. package/components/ion-card-title.js +1 -48
  20. package/components/ion-card.js +1 -107
  21. package/components/ion-checkbox.js +1 -6
  22. package/components/ion-chip.js +1 -66
  23. package/components/ion-col.js +1 -163
  24. package/components/ion-content.js +1 -6
  25. package/components/ion-datetime-button.js +1 -383
  26. package/components/ion-datetime.js +1 -2047
  27. package/components/ion-fab-button.js +1 -151
  28. package/components/ion-fab-list.js +1 -73
  29. package/components/ion-fab.js +1 -101
  30. package/components/ion-footer.js +1 -179
  31. package/components/ion-grid.js +1 -46
  32. package/components/ion-header.js +1 -6
  33. package/components/ion-icon.js +1 -6
  34. package/components/ion-img.js +1 -133
  35. package/components/ion-infinite-scroll-content.js +1 -69
  36. package/components/ion-infinite-scroll.js +1 -236
  37. package/components/ion-input-otp.js +1 -682
  38. package/components/ion-input-password-toggle.js +1 -128
  39. package/components/ion-input.js +1 -646
  40. package/components/ion-item-divider.js +1 -59
  41. package/components/ion-item-group.js +1 -46
  42. package/components/ion-item-option.js +1 -91
  43. package/components/ion-item-options.js +1 -73
  44. package/components/ion-item-sliding.js +1 -457
  45. package/components/ion-item.js +1 -6
  46. package/components/ion-label.js +1 -6
  47. package/components/ion-list-header.js +1 -6
  48. package/components/ion-list.js +1 -6
  49. package/components/ion-loading.js +1 -343
  50. package/components/ion-menu-button.js +1 -109
  51. package/components/ion-menu-toggle.js +1 -64
  52. package/components/ion-menu.js +1 -741
  53. package/components/ion-modal.js +1 -6
  54. package/components/ion-nav-link.js +1 -64
  55. package/components/ion-nav.js +1 -951
  56. package/components/ion-note.js +1 -47
  57. package/components/ion-picker-column-option.js +1 -6
  58. package/components/ion-picker-column.js +1 -6
  59. package/components/ion-picker-legacy-column.js +1 -6
  60. package/components/ion-picker-legacy.js +1 -342
  61. package/components/ion-picker.js +1 -6
  62. package/components/ion-popover.js +1 -6
  63. package/components/ion-progress-bar.js +1 -100
  64. package/components/ion-radio-group.js +1 -6
  65. package/components/ion-radio.js +1 -6
  66. package/components/ion-range.js +1 -844
  67. package/components/ion-refresher-content.js +1 -88
  68. package/components/ion-refresher.js +1 -750
  69. package/components/ion-reorder-group.js +1 -322
  70. package/components/ion-reorder.js +1 -60
  71. package/components/ion-ripple-effect.js +1 -6
  72. package/components/ion-route-redirect.js +1 -45
  73. package/components/ion-route.js +1 -74
  74. package/components/ion-router-link.js +1 -61
  75. package/components/ion-router-outlet.js +1 -226
  76. package/components/ion-router.js +1 -840
  77. package/components/ion-row.js +1 -36
  78. package/components/ion-searchbar.js +1 -540
  79. package/components/ion-segment-button.js +1 -173
  80. package/components/ion-segment-content.js +1 -35
  81. package/components/ion-segment-view.js +1 -142
  82. package/components/ion-segment.js +1 -602
  83. package/components/ion-select-modal.js +1 -6
  84. package/components/ion-select-option.js +1 -46
  85. package/components/ion-select-popover.js +1 -6
  86. package/components/ion-select.js +1 -1035
  87. package/components/ion-skeleton-text.js +1 -64
  88. package/components/ion-spinner.js +1 -6
  89. package/components/ion-split-pane.js +1 -190
  90. package/components/ion-tab-bar.js +1 -135
  91. package/components/ion-tab-button.js +1 -127
  92. package/components/ion-tab.js +1 -82
  93. package/components/ion-tabs.js +1 -204
  94. package/components/ion-text.js +1 -42
  95. package/components/ion-textarea.js +1 -554
  96. package/components/ion-thumbnail.js +1 -36
  97. package/components/ion-title.js +1 -6
  98. package/components/ion-toast.js +1 -938
  99. package/components/ion-toggle.js +1 -360
  100. package/components/ion-toolbar.js +1 -6
  101. package/components/p-1KVKSLu5.js +4 -0
  102. package/{dist/ionic/p-DUt5fQmA.js → components/p-9VcRUwdB.js} +1 -1
  103. package/components/p-ApmKVjaE.js +4 -0
  104. package/components/p-B-hirT0v.js +1 -35
  105. package/components/p-B6FQ0cKR.js +4 -0
  106. package/components/p-B6HaBl3o.js +4 -0
  107. package/components/p-B8b1Ukl9.js +4 -0
  108. package/components/p-BFxT89Wl.js +4 -0
  109. package/components/p-BJoMtgfR.js +4 -0
  110. package/components/p-BNAG-aVv.js +4 -0
  111. package/{dist/ionic/p-D-eFFUkA.js → components/p-BR3tZJmu.js} +1 -1
  112. package/{dist/ionic/p-D0dMcSkw.js → components/p-BS1TtEiJ.js} +1 -1
  113. package/components/p-BSB38Tek.js +4 -0
  114. package/components/p-BTEOs1at.js +1 -192
  115. package/components/p-BTeL5HCK.js +4 -0
  116. package/{dist/ionic/p-DbQ5QkTP.js → components/p-BUbsoBOV.js} +1 -1
  117. package/components/p-BVnB3eEn.js +4 -0
  118. package/components/p-BYDc3hSE.js +4 -0
  119. package/components/p-BagjAGC0.js +4 -0
  120. package/components/p-BegtE7nr.js +4 -0
  121. package/components/p-BgwEQWW6.js +4 -0
  122. package/components/p-Bk2zuNWT.js +4 -0
  123. package/components/p-BmVRXR1y.js +1 -72
  124. package/components/p-Bum_LjMh.js +4 -0
  125. package/components/p-BxwWvu-b.js +4 -0
  126. package/components/p-C4jPsTQa.js +4 -0
  127. package/components/p-C53feagD.js +1 -15
  128. package/{dist/ionic/p-CwgG81ZD.js → components/p-C59ryAuS.js} +1 -1
  129. package/components/p-C7AoMl7c.js +4 -0
  130. package/components/p-CBzELu-H.js +4 -0
  131. package/components/p-CDfQnFrd.js +4 -0
  132. package/components/p-CH0NYjKq.js +4 -0
  133. package/components/p-CIGNaXM1.js +1 -10
  134. package/components/p-CO7fmmxt.js +1 -29
  135. package/components/p-CU1SSH8_.js +4 -0
  136. package/components/p-CVF7ukTk.js +4 -0
  137. package/components/p-CgfaEEem.js +4 -0
  138. package/components/p-CgqKJg96.js +4 -0
  139. package/components/p-Cl0B-RWe.js +1 -452
  140. package/components/p-CneGxKsZ.js +4 -0
  141. package/components/p-CoA-aqGF.js +4 -0
  142. package/{dist/ionic/p-DdR6rpbR.js → components/p-Cq8cQ0NL.js} +1 -1
  143. package/components/p-Csw8xuz4.js +4 -0
  144. package/components/p-CtWGkNnJ.js +1 -162
  145. package/components/p-Cwv-vmkN.js +4 -0
  146. package/{dist/ionic/p-BYEqWnSg.js → components/p-Cy5XSfIk.js} +1 -1
  147. package/components/p-Cyxa_4PV.js +4 -0
  148. package/components/p-Cz5nLPGT.js +4 -0
  149. package/components/p-D13Eaw-8.js +1 -76
  150. package/components/p-D6NJwNJN.js +4 -0
  151. package/components/p-D6Ynv7Xh.js +1 -141
  152. package/components/p-DHsZWn1l.js +4 -0
  153. package/components/p-DJMZehmW.js +4 -0
  154. package/components/p-DJztqcrH.js +1 -14
  155. package/components/p-DYdpXONG.js +4 -0
  156. package/components/p-DgbT0exM.js +4 -0
  157. package/components/p-DiVJyqlX.js +1 -40
  158. package/components/p-Dtdm8lKC.js +1 -44
  159. package/components/p-YLXPWgVj.js +4 -0
  160. package/components/p-ZjP4CjeZ.js +1 -4
  161. package/{dist/ionic/p-DCv9sLH2.js → components/p-ak_d-z48.js} +1 -1
  162. package/components/p-cyNmxje6.js +1 -155
  163. package/components/p-fpbh6w3f.js +4 -0
  164. package/components/p-hHmYLOfE.js +1 -87
  165. package/components/p-kvaDs24J.js +4 -0
  166. package/components/p-vEbVo2hO.js +4 -0
  167. package/dist/cjs/{animation-Bt3H9L1C.js → animation-Dg4yiuR2.js} +1 -1
  168. package/dist/cjs/app-globals-CLI8xCmk.js +11 -0
  169. package/dist/cjs/{button-active-CMc8cD90.js → button-active-FscMI17-.js} +1 -1
  170. package/dist/cjs/{config-C5fsO43a.js → config-BukYi_pW.js} +1 -1
  171. package/dist/cjs/{data-JwZKaIQB.js → data-BYlBjkMU.js} +1 -1
  172. package/dist/cjs/{framework-delegate-DMJRBuDi.js → framework-delegate-CRgp8o_p.js} +1 -1
  173. package/dist/cjs/{hardware-back-button-VCK4V3mG.js → hardware-back-button-C4rMJ5uI.js} +1 -1
  174. package/dist/cjs/{helpers-DrTqNghc.js → helpers-CxTYJdbT.js} +1 -1
  175. package/dist/cjs/{index-094mMFB-.js → index-C845Ti6K.js} +4 -4
  176. package/dist/cjs/{index-DrMUZJj6.js → index-CFUwM5x_.js} +5 -5
  177. package/dist/cjs/{index-D6Wc6v08.js → index-CqT-2gKy.js} +503 -382
  178. package/dist/cjs/{index-CO6eryBo.js → index-MbaBbWXk.js} +2 -2
  179. package/dist/cjs/{index-C534ULug.js → index-YcSftOMz.js} +2 -2
  180. package/dist/cjs/index.cjs.js +12 -12
  181. package/dist/cjs/{input-shims-CuMghsQ-.js → input-shims-Dl5cnc_e.js} +3 -3
  182. package/dist/cjs/{input.utils-B_QROI2g.js → input.utils-DmeJ8dmo.js} +2 -2
  183. package/dist/cjs/ion-accordion_2.cjs.entry.js +23 -15
  184. package/dist/cjs/ion-action-sheet.cjs.entry.js +21 -15
  185. package/dist/cjs/ion-alert.cjs.entry.js +25 -17
  186. package/dist/cjs/ion-app_8.cjs.entry.js +48 -43
  187. package/dist/cjs/ion-avatar_3.cjs.entry.js +12 -12
  188. package/dist/cjs/ion-back-button.cjs.entry.js +7 -7
  189. package/dist/cjs/ion-backdrop.cjs.entry.js +6 -6
  190. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +20 -14
  191. package/dist/cjs/ion-button_2.cjs.entry.js +36 -18
  192. package/dist/cjs/ion-card_5.cjs.entry.js +23 -23
  193. package/dist/cjs/ion-checkbox.cjs.entry.js +7 -7
  194. package/dist/cjs/ion-chip.cjs.entry.js +6 -6
  195. package/dist/cjs/ion-col_3.cjs.entry.js +8 -8
  196. package/dist/cjs/ion-datetime-button.cjs.entry.js +8 -8
  197. package/dist/cjs/ion-datetime_3.cjs.entry.js +75 -46
  198. package/dist/cjs/ion-fab_3.cjs.entry.js +17 -13
  199. package/dist/cjs/ion-img.cjs.entry.js +8 -6
  200. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +17 -13
  201. package/dist/cjs/ion-input-otp.cjs.entry.js +16 -10
  202. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +9 -7
  203. package/dist/cjs/ion-input.cjs.entry.js +21 -13
  204. package/dist/cjs/ion-item-option_3.cjs.entry.js +19 -17
  205. package/dist/cjs/ion-item_8.cjs.entry.js +48 -42
  206. package/dist/cjs/ion-loading.cjs.entry.js +18 -14
  207. package/dist/cjs/ion-menu_3.cjs.entry.js +30 -22
  208. package/dist/cjs/ion-modal.cjs.entry.js +237 -59
  209. package/dist/cjs/ion-nav_2.cjs.entry.js +14 -10
  210. package/dist/cjs/ion-picker-column-option.cjs.entry.js +10 -8
  211. package/dist/cjs/ion-picker-column.cjs.entry.js +11 -7
  212. package/dist/cjs/ion-picker.cjs.entry.js +6 -6
  213. package/dist/cjs/ion-popover.cjs.entry.js +21 -15
  214. package/dist/cjs/ion-progress-bar.cjs.entry.js +7 -7
  215. package/dist/cjs/ion-radio_2.cjs.entry.js +17 -13
  216. package/dist/cjs/ion-range.cjs.entry.js +205 -57
  217. package/dist/cjs/ion-refresher_2.cjs.entry.js +45 -14
  218. package/dist/cjs/ion-reorder_2.cjs.entry.js +13 -11
  219. package/dist/cjs/ion-ripple-effect.cjs.entry.js +4 -4
  220. package/dist/cjs/ion-route_4.cjs.entry.js +20 -10
  221. package/dist/cjs/ion-searchbar.cjs.entry.js +22 -12
  222. package/dist/cjs/ion-segment-content.cjs.entry.js +3 -3
  223. package/dist/cjs/ion-segment-view.cjs.entry.js +13 -8
  224. package/dist/cjs/ion-segment_2.cjs.entry.js +26 -16
  225. package/dist/cjs/ion-select-modal.cjs.entry.js +17 -13
  226. package/dist/cjs/ion-select_3.cjs.entry.js +33 -24
  227. package/dist/cjs/ion-spinner.cjs.entry.js +4 -4
  228. package/dist/cjs/ion-split-pane.cjs.entry.js +15 -9
  229. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +14 -12
  230. package/dist/cjs/ion-tab_2.cjs.entry.js +10 -8
  231. package/dist/cjs/ion-text.cjs.entry.js +4 -4
  232. package/dist/cjs/ion-textarea.cjs.entry.js +20 -14
  233. package/dist/cjs/ion-toast.cjs.entry.js +21 -15
  234. package/dist/cjs/ion-toggle.cjs.entry.js +10 -8
  235. package/dist/cjs/{ionic-global-HMVqOFGO.js → ionic-global-Bc3kJi1Z.js} +1 -1
  236. package/dist/cjs/ionic.cjs.js +5 -5
  237. package/dist/cjs/{ios.transition-BOt_uW73.js → ios.transition-trBiC95R.js} +4 -4
  238. package/dist/cjs/loader.cjs.js +4 -4
  239. package/dist/cjs/{md.transition-Dt968VXB.js → md.transition-CUQECuvD.js} +4 -4
  240. package/dist/cjs/{notch-controller-Bzqhjm4f.js → notch-controller-sD-lTpdc.js} +1 -1
  241. package/dist/cjs/{overlays-B2b-TTbl.js → overlays-C2jiBSNQ.js} +5 -5
  242. package/dist/cjs/{status-tap-g0sWWkXk.js → status-tap-CCJk5VgT.js} +3 -3
  243. package/dist/cjs/{swipe-back-BIayeNOD.js → swipe-back-BGhTQ1CU.js} +2 -2
  244. package/dist/collection/collection-manifest.json +2 -2
  245. package/dist/collection/components/accordion-group/accordion-group.js +4 -2
  246. package/dist/collection/components/action-sheet/action-sheet.js +20 -10
  247. package/dist/collection/components/alert/alert.js +24 -12
  248. package/dist/collection/components/back-button/back-button.js +4 -2
  249. package/dist/collection/components/badge/badge.js +2 -1
  250. package/dist/collection/components/breadcrumb/breadcrumb.js +8 -4
  251. package/dist/collection/components/breadcrumbs/breadcrumbs.js +4 -2
  252. package/dist/collection/components/button/button.js +6 -3
  253. package/dist/collection/components/card/card.js +6 -3
  254. package/dist/collection/components/card-header/card-header.js +2 -1
  255. package/dist/collection/components/card-subtitle/card-subtitle.js +2 -1
  256. package/dist/collection/components/card-title/card-title.js +2 -1
  257. package/dist/collection/components/checkbox/checkbox.js +4 -2
  258. package/dist/collection/components/chip/chip.js +2 -1
  259. package/dist/collection/components/content/content.js +12 -7
  260. package/dist/collection/components/datetime/datetime.js +43 -22
  261. package/dist/collection/components/datetime-button/datetime-button.js +2 -1
  262. package/dist/collection/components/fab-button/fab-button.js +6 -3
  263. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +4 -2
  264. package/dist/collection/components/input/input.js +11 -6
  265. package/dist/collection/components/input-otp/input-otp.js +8 -4
  266. package/dist/collection/components/input-password-toggle/input-password-toggle.js +4 -2
  267. package/dist/collection/components/item/item.js +10 -5
  268. package/dist/collection/components/item-divider/item-divider.js +7 -3
  269. package/dist/collection/components/item-option/item-option.js +6 -3
  270. package/dist/collection/components/item-options/item-options.js +2 -1
  271. package/dist/collection/components/item-sliding/item-sliding.js +2 -1
  272. package/dist/collection/components/label/label.js +6 -3
  273. package/dist/collection/components/list-header/list-header.js +6 -3
  274. package/dist/collection/components/loading/loading.js +22 -11
  275. package/dist/collection/components/menu/menu.js +10 -5
  276. package/dist/collection/components/menu-button/menu-button.js +2 -1
  277. package/dist/collection/components/modal/gestures/sheet.js +120 -12
  278. package/dist/collection/components/modal/gestures/swipe-to-close.js +54 -1
  279. package/dist/collection/components/modal/modal.js +127 -45
  280. package/dist/collection/components/nav/nav.js +89 -45
  281. package/dist/collection/components/nav-link/nav-link.js +9 -5
  282. package/dist/collection/components/note/note.js +2 -1
  283. package/dist/collection/components/picker/picker.js +2 -1
  284. package/dist/collection/components/picker-column/picker-column.js +6 -3
  285. package/dist/collection/components/picker-column-option/picker-column-option.js +2 -1
  286. package/dist/collection/components/picker-legacy/picker.js +24 -12
  287. package/dist/collection/components/picker-legacy-column/picker-column.js +4 -2
  288. package/dist/collection/components/popover/popover.js +33 -17
  289. package/dist/collection/components/progress-bar/progress-bar.js +2 -1
  290. package/dist/collection/components/radio/radio.js +2 -1
  291. package/dist/collection/components/radio-group/radio-group.js +6 -3
  292. package/dist/collection/components/range/range.js +214 -53
  293. package/dist/collection/components/refresher/refresher.js +73 -5
  294. package/dist/collection/components/refresher-content/refresher-content.js +8 -4
  295. package/dist/collection/components/reorder-group/reorder-group.js +6 -3
  296. package/dist/collection/components/route/route.js +4 -2
  297. package/dist/collection/components/router/router.js +10 -5
  298. package/dist/collection/components/router-link/router-link.js +6 -3
  299. package/dist/collection/components/router-outlet/router-outlet.js +18 -9
  300. package/dist/collection/components/searchbar/searchbar.js +11 -6
  301. package/dist/collection/components/segment/segment.js +10 -5
  302. package/dist/collection/components/segment-button/segment-button.js +4 -2
  303. package/dist/collection/components/segment-view/segment-view.ios.css +2 -1
  304. package/dist/collection/components/segment-view/segment-view.js +30 -4
  305. package/dist/collection/components/segment-view/segment-view.md.css +2 -1
  306. package/dist/collection/components/select/select.js +17 -8
  307. package/dist/collection/components/select-modal/select-modal.js +27 -2
  308. package/dist/collection/components/select-popover/select-popover.js +2 -1
  309. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -1
  310. package/dist/collection/components/spinner/spinner.js +4 -2
  311. package/dist/collection/components/tab/tab.js +4 -2
  312. package/dist/collection/components/tab-bar/tab-bar.js +4 -2
  313. package/dist/collection/components/tab-button/tab-button.js +4 -2
  314. package/dist/collection/components/tabs/tabs.js +4 -2
  315. package/dist/collection/components/text/text.js +2 -1
  316. package/dist/collection/components/textarea/textarea.js +10 -7
  317. package/dist/collection/components/title/title.js +4 -2
  318. package/dist/collection/components/toast/toast.js +34 -17
  319. package/dist/collection/components/toggle/toggle.js +4 -2
  320. package/dist/collection/components/toolbar/toolbar.js +2 -1
  321. package/dist/docs.d.ts +37 -0
  322. package/dist/docs.json +1186 -389
  323. package/dist/esm/{animation-Dt8bGnA-.js → animation-CnGMT4ji.js} +1 -1
  324. package/dist/esm/app-globals-DhZjtldk.js +9 -0
  325. package/dist/esm/{button-active-L570Swow.js → button-active-BBx21brx.js} +1 -1
  326. package/dist/esm/{config-mCdtaoPe.js → config-TO1rZH52.js} +1 -1
  327. package/dist/esm/{data-DCORV9FH.js → data-B9iGR5YO.js} +1 -1
  328. package/dist/esm/{framework-delegate-BYawdMXj.js → framework-delegate-CyxE1S_P.js} +1 -1
  329. package/dist/esm/{hardware-back-button-CPLxO-Ev.js → hardware-back-button-CTe4XmL7.js} +1 -1
  330. package/dist/esm/{helpers-DEn3pfjm.js → helpers-Tl8jw6S2.js} +1 -1
  331. package/dist/esm/{index-r2D9DEro.js → index-B-hkiOUh.js} +4 -4
  332. package/dist/esm/{index-CvDIirVx.js → index-B2KwgBLx.js} +5 -5
  333. package/dist/esm/{index-ceb5RaMT.js → index-BtUdxPjv.js} +2 -2
  334. package/dist/esm/{index-C8IsBmNU.js → index-IGIE5vDm.js} +503 -382
  335. package/dist/esm/{index-Bs3kT4bc.js → index-hW6eNZ3o.js} +2 -2
  336. package/dist/esm/index.js +12 -12
  337. package/dist/esm/{input-shims-D6H3ZaWt.js → input-shims-AaDhOpKN.js} +3 -3
  338. package/dist/esm/{input.utils-DrvTa8gz.js → input.utils-Bxa_DQ7-.js} +2 -2
  339. package/dist/esm/ion-accordion_2.entry.js +23 -15
  340. package/dist/esm/ion-action-sheet.entry.js +21 -15
  341. package/dist/esm/ion-alert.entry.js +25 -17
  342. package/dist/esm/ion-app_8.entry.js +48 -43
  343. package/dist/esm/ion-avatar_3.entry.js +12 -12
  344. package/dist/esm/ion-back-button.entry.js +7 -7
  345. package/dist/esm/ion-backdrop.entry.js +6 -6
  346. package/dist/esm/ion-breadcrumb_2.entry.js +20 -14
  347. package/dist/esm/ion-button_2.entry.js +36 -18
  348. package/dist/esm/ion-card_5.entry.js +23 -23
  349. package/dist/esm/ion-checkbox.entry.js +7 -7
  350. package/dist/esm/ion-chip.entry.js +6 -6
  351. package/dist/esm/ion-col_3.entry.js +8 -8
  352. package/dist/esm/ion-datetime-button.entry.js +8 -8
  353. package/dist/esm/ion-datetime_3.entry.js +75 -46
  354. package/dist/esm/ion-fab_3.entry.js +17 -13
  355. package/dist/esm/ion-img.entry.js +8 -6
  356. package/dist/esm/ion-infinite-scroll_2.entry.js +17 -13
  357. package/dist/esm/ion-input-otp.entry.js +16 -10
  358. package/dist/esm/ion-input-password-toggle.entry.js +9 -7
  359. package/dist/esm/ion-input.entry.js +21 -13
  360. package/dist/esm/ion-item-option_3.entry.js +19 -17
  361. package/dist/esm/ion-item_8.entry.js +48 -42
  362. package/dist/esm/ion-loading.entry.js +18 -14
  363. package/dist/esm/ion-menu_3.entry.js +30 -22
  364. package/dist/esm/ion-modal.entry.js +237 -59
  365. package/dist/esm/ion-nav_2.entry.js +14 -10
  366. package/dist/esm/ion-picker-column-option.entry.js +10 -8
  367. package/dist/esm/ion-picker-column.entry.js +11 -7
  368. package/dist/esm/ion-picker.entry.js +6 -6
  369. package/dist/esm/ion-popover.entry.js +21 -15
  370. package/dist/esm/ion-progress-bar.entry.js +7 -7
  371. package/dist/esm/ion-radio_2.entry.js +17 -13
  372. package/dist/esm/ion-range.entry.js +205 -57
  373. package/dist/esm/ion-refresher_2.entry.js +45 -14
  374. package/dist/esm/ion-reorder_2.entry.js +13 -11
  375. package/dist/esm/ion-ripple-effect.entry.js +4 -4
  376. package/dist/esm/ion-route_4.entry.js +20 -10
  377. package/dist/esm/ion-searchbar.entry.js +22 -12
  378. package/dist/esm/ion-segment-content.entry.js +3 -3
  379. package/dist/esm/ion-segment-view.entry.js +13 -8
  380. package/dist/esm/ion-segment_2.entry.js +26 -16
  381. package/dist/esm/ion-select-modal.entry.js +17 -13
  382. package/dist/esm/ion-select_3.entry.js +33 -24
  383. package/dist/esm/ion-spinner.entry.js +4 -4
  384. package/dist/esm/ion-split-pane.entry.js +15 -9
  385. package/dist/esm/ion-tab-bar_2.entry.js +14 -12
  386. package/dist/esm/ion-tab_2.entry.js +10 -8
  387. package/dist/esm/ion-text.entry.js +4 -4
  388. package/dist/esm/ion-textarea.entry.js +20 -14
  389. package/dist/esm/ion-toast.entry.js +21 -15
  390. package/dist/esm/ion-toggle.entry.js +10 -8
  391. package/dist/esm/{ionic-global-CDrldh-5.js → ionic-global-DfbeLwcV.js} +1 -1
  392. package/dist/esm/ionic.js +6 -6
  393. package/dist/esm/{ios.transition-BDzw0_Hm.js → ios.transition--aMF-pDH.js} +4 -4
  394. package/dist/esm/loader.js +5 -5
  395. package/dist/esm/{md.transition-BzDYi3qq.js → md.transition-BEVbfm8j.js} +4 -4
  396. package/dist/esm/{notch-controller-BwelN_JM.js → notch-controller-DAcvKU57.js} +1 -1
  397. package/dist/esm/{overlays-D5YkFThA.js → overlays-F8GHPo-e.js} +5 -5
  398. package/dist/esm/{status-tap-5DQ7Fc4V.js → status-tap-BfJqFSLF.js} +3 -3
  399. package/dist/esm/{swipe-back-BKw2CAHc.js → swipe-back-BZBFwTQV.js} +2 -2
  400. package/dist/html.html-data.json +117 -109
  401. package/dist/ionic/index.esm.js +1 -1
  402. package/dist/ionic/ionic.esm.js +1 -1
  403. package/dist/ionic/p-031b76f7.entry.js +4 -0
  404. package/dist/ionic/p-045a6a42.entry.js +4 -0
  405. package/dist/ionic/p-07506134.entry.js +4 -0
  406. package/dist/ionic/p-084c25b2.entry.js +4 -0
  407. package/dist/ionic/p-0d8b5c38.entry.js +4 -0
  408. package/dist/ionic/p-16813ce7.entry.js +4 -0
  409. package/dist/ionic/p-16b65553.entry.js +4 -0
  410. package/dist/ionic/p-1b02923f.entry.js +4 -0
  411. package/dist/ionic/{p-5c8f7253.entry.js → p-1b169fb6.entry.js} +1 -1
  412. package/dist/ionic/{p-915b3e3d.entry.js → p-23fac490.entry.js} +1 -1
  413. package/dist/ionic/{p-b8551510.entry.js → p-294f4bb5.entry.js} +1 -1
  414. package/dist/ionic/p-2a68388b.entry.js +4 -0
  415. package/dist/ionic/p-2f5a8140.entry.js +4 -0
  416. package/dist/ionic/{p-49d06882.entry.js → p-301c43f8.entry.js} +1 -1
  417. package/dist/ionic/{p-79bd78f9.entry.js → p-370a60ee.entry.js} +1 -1
  418. package/dist/ionic/p-3e143d1d.entry.js +4 -0
  419. package/dist/ionic/p-4819b469.entry.js +4 -0
  420. package/dist/ionic/p-4dd5e8e0.entry.js +4 -0
  421. package/dist/ionic/p-51c11c47.entry.js +4 -0
  422. package/dist/ionic/p-53f750a5.entry.js +4 -0
  423. package/dist/ionic/{p-7cad388a.entry.js → p-6af16209.entry.js} +1 -1
  424. package/dist/ionic/{p-7f98e710.entry.js → p-6b701daa.entry.js} +1 -1
  425. package/dist/ionic/p-6b97f2a3.entry.js +4 -0
  426. package/dist/ionic/p-71e322f7.entry.js +4 -0
  427. package/dist/ionic/p-7620be24.entry.js +4 -0
  428. package/dist/ionic/p-771b27a5.entry.js +4 -0
  429. package/dist/ionic/{p-906bb44d.entry.js → p-7ca71c83.entry.js} +1 -1
  430. package/dist/ionic/{p-11aa58d6.entry.js → p-80cac7a2.entry.js} +1 -1
  431. package/dist/ionic/p-96a2e768.entry.js +4 -0
  432. package/dist/ionic/{p-582824c5.entry.js → p-9833cf63.entry.js} +1 -1
  433. package/dist/ionic/p-9cbc6f1f.entry.js +4 -0
  434. package/dist/ionic/p-9cdbabbb.entry.js +4 -0
  435. package/dist/ionic/p-9eac4eb1.entry.js +4 -0
  436. package/dist/ionic/{p-675b1a31.entry.js → p-9fae83d8.entry.js} +1 -1
  437. package/dist/ionic/p-B8xlpH8p.js +4 -0
  438. package/dist/ionic/{p-C7hRNDhM.js → p-BAt5H1ac.js} +1 -1
  439. package/dist/ionic/p-BW_TRJm8.js +4 -0
  440. package/dist/ionic/{p-DDb5r57F.js → p-Bum7H1fw.js} +1 -1
  441. package/dist/ionic/p-BvFYtOdE.js +4 -0
  442. package/dist/ionic/{p-Dc45iWE4.js → p-BxIcPWoV.js} +1 -1
  443. package/dist/ionic/p-C0JvVFMv.js +4 -0
  444. package/dist/ionic/{p-CTfR9YZG.js → p-CGmVTdWh.js} +1 -1
  445. package/dist/ionic/{p-BOVrCkpJ.js → p-CYbRmDdy.js} +1 -1
  446. package/dist/ionic/{p-MUoJJJwd.js → p-CYvM5g3q.js} +1 -1
  447. package/dist/ionic/p-CmFz1Mjc.js +4 -0
  448. package/dist/ionic/p-CtA-yJYy.js +4 -0
  449. package/dist/ionic/p-D8HJQ1qq.js +4 -0
  450. package/dist/ionic/{p-B0q1YL7N.js → p-DB_iPQC-.js} +1 -1
  451. package/dist/ionic/{p-DNcfiJwE.js → p-DLbbmF9h.js} +1 -1
  452. package/dist/ionic/p-DTPR1Wpn.js +4 -0
  453. package/dist/ionic/p-DjriolRs.js +4 -0
  454. package/dist/ionic/p-DtVZDHlS.js +4 -0
  455. package/dist/ionic/p-IGIE5vDm.js +5 -0
  456. package/dist/ionic/{p-BFvmZNyx.js → p-NFFyoJ4Q.js} +1 -1
  457. package/dist/ionic/p-a805674e.entry.js +4 -0
  458. package/dist/ionic/{p-da7d04cc.entry.js → p-a84f2d21.entry.js} +1 -1
  459. package/dist/ionic/p-aa47f46e.entry.js +4 -0
  460. package/dist/ionic/{p-2668188b.entry.js → p-b325a113.entry.js} +1 -1
  461. package/dist/ionic/{p-d1f54e28.entry.js → p-b440381f.entry.js} +1 -1
  462. package/dist/ionic/p-b6e0ff03.entry.js +4 -0
  463. package/dist/ionic/{p-6f37536a.entry.js → p-bcaa827e.entry.js} +1 -1
  464. package/dist/ionic/{p-fb0271ae.entry.js → p-c3cce9d8.entry.js} +1 -1
  465. package/dist/ionic/{p-b0a7585c.entry.js → p-ca31010f.entry.js} +1 -1
  466. package/dist/ionic/p-d4e8b473.entry.js +4 -0
  467. package/dist/ionic/{p-9575b654.entry.js → p-e663bc5a.entry.js} +1 -1
  468. package/dist/ionic/p-e6c5f060.entry.js +4 -0
  469. package/dist/ionic/{p-652318c3.entry.js → p-e6cedcd7.entry.js} +1 -1
  470. package/dist/ionic/{p-fbb00634.entry.js → p-e863ffe8.entry.js} +1 -1
  471. package/dist/ionic/{p-0ca0fe9c.entry.js → p-f2deaceb.entry.js} +1 -1
  472. package/dist/ionic/{p-ac4eb91d.entry.js → p-f5dfb9a3.entry.js} +1 -1
  473. package/dist/ionic/{p-bce86e56.entry.js → p-f8186550.entry.js} +1 -1
  474. package/dist/ionic/p-fdbc90d4.entry.js +4 -0
  475. package/dist/ionic/p-gbVXD275.js +4 -0
  476. package/dist/ionic/p-hNN3VvaC.js +4 -0
  477. package/dist/types/components/datetime/datetime.d.ts +10 -0
  478. package/dist/types/components/header/header.utils.d.ts +2 -1
  479. package/dist/types/components/item/item.d.ts +2 -0
  480. package/dist/types/components/item-divider/item-divider.d.ts +3 -0
  481. package/dist/types/components/item-option/item-option.d.ts +2 -0
  482. package/dist/types/components/list-header/list-header.d.ts +2 -0
  483. package/dist/types/components/modal/gestures/sheet.d.ts +2 -2
  484. package/dist/types/components/modal/gestures/swipe-to-close.d.ts +2 -2
  485. package/dist/types/components/modal/modal-interface.d.ts +25 -0
  486. package/dist/types/components/modal/modal.d.ts +22 -1
  487. package/dist/types/components/range/range-interface.d.ts +1 -0
  488. package/dist/types/components/range/range.d.ts +44 -4
  489. package/dist/types/components/refresher/refresher-interface.d.ts +7 -0
  490. package/dist/types/components/refresher/refresher.d.ts +16 -3
  491. package/dist/types/components/segment-view/segment-view.d.ts +4 -0
  492. package/dist/types/components/select/select.d.ts +3 -0
  493. package/dist/types/components/select-modal/select-modal.d.ts +4 -0
  494. package/dist/types/components.d.ts +964 -191
  495. package/dist/types/interface.d.ts +2 -2
  496. package/dist/types/stencil-public-runtime.d.ts +126 -14
  497. package/dist/types/utils/gesture/listener.d.ts +2 -1
  498. package/hydrate/index.d.ts +12 -0
  499. package/hydrate/index.js +5632 -1421
  500. package/hydrate/index.mjs +5631 -1422
  501. package/package.json +2 -2
  502. package/components/p-B25GjpND.js +0 -71
  503. package/components/p-BANeLH_G.js +0 -290
  504. package/components/p-BBFQmhcD.js +0 -59
  505. package/components/p-BC-awmYt.js +0 -306
  506. package/components/p-BHbOsu99.js +0 -501
  507. package/components/p-BTlwXR9e.js +0 -73
  508. package/components/p-BcazQttQ.js +0 -612
  509. package/components/p-BdGshsIJ.js +0 -226
  510. package/components/p-BfS7vSpC.js +0 -147
  511. package/components/p-BhRFCLuX.js +0 -675
  512. package/components/p-Bhnhnzjz.js +0 -75
  513. package/components/p-BmcqD0EN.js +0 -153
  514. package/components/p-Boi6hecl.js +0 -115
  515. package/components/p-Bt_moUyl.js +0 -232
  516. package/components/p-Bxl5etF4.js +0 -146
  517. package/components/p-ByjmWt3s.js +0 -139
  518. package/components/p-C04oPyjT.js +0 -54
  519. package/components/p-C6dkQWq2.js +0 -1626
  520. package/components/p-CFZWrvIQ.js +0 -194
  521. package/components/p-CIJwkzL6.js +0 -195
  522. package/components/p-CL12ApCQ.js +0 -820
  523. package/components/p-CXJR56Oq.js +0 -564
  524. package/components/p-Cdm3dKWf.js +0 -108
  525. package/components/p-CslsoGzv.js +0 -192
  526. package/components/p-Cyd00tgZ.js +0 -167
  527. package/components/p-CzAJ3ArC.js +0 -380
  528. package/components/p-CzW34QBh.js +0 -12
  529. package/components/p-D0zXRwcr.js +0 -196
  530. package/components/p-D5hF6rwn.js +0 -339
  531. package/components/p-D8eD2iBA.js +0 -67
  532. package/components/p-DGOrLIyS.js +0 -481
  533. package/components/p-DK2Bn1Mc.js +0 -305
  534. package/components/p-DKRQWlK2.js +0 -598
  535. package/components/p-DNDUsygf.js +0 -128
  536. package/components/p-DTWZF6wg.js +0 -418
  537. package/components/p-DWoUQeZ3.js +0 -3012
  538. package/components/p-DX0w75a9.js +0 -420
  539. package/components/p-Dt8zaCLQ.js +0 -92
  540. package/components/p-DyFBFrV7.js +0 -264
  541. package/components/p-DyHPCMyn.js +0 -39
  542. package/components/p-LgLeKTkH.js +0 -112
  543. package/components/p-NhiRFRn9.js +0 -50
  544. package/components/p-OuiHmXO5.js +0 -646
  545. package/components/p-Wro9IPHE.js +0 -459
  546. package/components/p-aIWC4ZEV.js +0 -305
  547. package/components/p-c-XJ9XhZ.js +0 -915
  548. package/components/p-fVuFT3Wd.js +0 -78
  549. package/components/p-iyo0Toaz.js +0 -2822
  550. package/components/p-l_lso3Zl.js +0 -140
  551. package/components/p-mQp4lwQD.js +0 -1638
  552. package/dist/cjs/app-globals-Ciccnk9_.js +0 -10
  553. package/dist/esm/app-globals-BDSf8fOA.js +0 -8
  554. package/dist/ionic/p-11518b31.entry.js +0 -4
  555. package/dist/ionic/p-221a3d8c.entry.js +0 -4
  556. package/dist/ionic/p-2ac254dc.entry.js +0 -4
  557. package/dist/ionic/p-2bd1ea35.entry.js +0 -4
  558. package/dist/ionic/p-30333874.entry.js +0 -4
  559. package/dist/ionic/p-31db96da.entry.js +0 -4
  560. package/dist/ionic/p-34642fa1.entry.js +0 -4
  561. package/dist/ionic/p-35696017.entry.js +0 -4
  562. package/dist/ionic/p-363d1209.entry.js +0 -4
  563. package/dist/ionic/p-46a38cfd.entry.js +0 -4
  564. package/dist/ionic/p-4eec1a5e.entry.js +0 -4
  565. package/dist/ionic/p-530fcd71.entry.js +0 -4
  566. package/dist/ionic/p-5d6fb6e3.entry.js +0 -4
  567. package/dist/ionic/p-66fbe052.entry.js +0 -4
  568. package/dist/ionic/p-7babec72.entry.js +0 -4
  569. package/dist/ionic/p-82d5bb3d.entry.js +0 -4
  570. package/dist/ionic/p-97eb0812.entry.js +0 -4
  571. package/dist/ionic/p-9b6d46f2.entry.js +0 -4
  572. package/dist/ionic/p-BKc55Xev.js +0 -4
  573. package/dist/ionic/p-Bmgaetn_.js +0 -4
  574. package/dist/ionic/p-C8IsBmNU.js +0 -5
  575. package/dist/ionic/p-CJxh_yLS.js +0 -4
  576. package/dist/ionic/p-DZRJwG4S.js +0 -4
  577. package/dist/ionic/p-a4a9f5ae.entry.js +0 -4
  578. package/dist/ionic/p-b0ebf9f8.entry.js +0 -4
  579. package/dist/ionic/p-be263062.entry.js +0 -4
  580. package/dist/ionic/p-c175d792.entry.js +0 -4
  581. package/dist/ionic/p-cc2a9936.entry.js +0 -4
  582. package/dist/ionic/p-cc45bcbc.entry.js +0 -4
  583. package/dist/ionic/p-d0a2a1ab.entry.js +0 -4
  584. package/dist/ionic/p-e4c57008.entry.js +0 -4
  585. package/dist/ionic/p-e5d6d0f0.entry.js +0 -4
  586. package/dist/ionic/p-f1dfee25.entry.js +0 -4
  587. package/dist/ionic/p-f9f7b9db.entry.js +0 -4
@@ -1,646 +0,0 @@
1
- /*!
2
- * (C) Ionic http://ionicframework.com - MIT License
3
- */
4
- import { w as win, d as doc } from './p-ZjP4CjeZ.js';
5
- import { g as getScrollElement, c as scrollByPoint, a as findClosestIonContent } from './p-DNDUsygf.js';
6
- import { a as addEventListener, b as removeEventListener, r as raf, c as componentOnReady } from './p-D5hF6rwn.js';
7
- import { a as KeyboardResize, K as Keyboard } from './p-D13Eaw-8.js';
8
-
9
- const cloneMap = new WeakMap();
10
- const relocateInput = (componentEl, inputEl, shouldRelocate, inputRelativeY = 0, disabledClonedInput = false) => {
11
- if (cloneMap.has(componentEl) === shouldRelocate) {
12
- return;
13
- }
14
- if (shouldRelocate) {
15
- addClone(componentEl, inputEl, inputRelativeY, disabledClonedInput);
16
- }
17
- else {
18
- removeClone(componentEl, inputEl);
19
- }
20
- };
21
- const isFocused = (input) => {
22
- /**
23
- * https://developer.mozilla.org/en-US/docs/Web/API/Node/getRootNode
24
- * Calling getRootNode on an element in standard web page will return HTMLDocument.
25
- * Calling getRootNode on an element inside of the Shadow DOM will return the associated ShadowRoot.
26
- * Calling getRootNode on an element that is not attached to a document/shadow tree will return
27
- * the root of the DOM tree it belongs to.
28
- * isFocused is used for the hide-caret utility which only considers input/textarea elements
29
- * that are present in the DOM, so we don't set types for that final case since it does not apply.
30
- */
31
- return input === input.getRootNode().activeElement;
32
- };
33
- const addClone = (componentEl, inputEl, inputRelativeY, disabledClonedInput = false) => {
34
- // this allows for the actual input to receive the focus from
35
- // the user's touch event, but before it receives focus, it
36
- // moves the actual input to a location that will not screw
37
- // up the app's layout, and does not allow the native browser
38
- // to attempt to scroll the input into place (messing up headers/footers)
39
- // the cloned input fills the area of where native input should be
40
- // while the native input fakes out the browser by relocating itself
41
- // before it receives the actual focus event
42
- // We hide the focused input (with the visible caret) invisible by making it scale(0),
43
- const parentEl = inputEl.parentNode;
44
- // DOM WRITES
45
- const clonedEl = inputEl.cloneNode(false);
46
- clonedEl.classList.add('cloned-input');
47
- clonedEl.tabIndex = -1;
48
- /**
49
- * Making the cloned input disabled prevents
50
- * Chrome for Android from still scrolling
51
- * the entire page since this cloned input
52
- * will briefly be hidden by the keyboard
53
- * even though it is not focused.
54
- *
55
- * This is not needed on iOS. While this
56
- * does not cause functional issues on iOS,
57
- * the input still appears slightly dimmed even
58
- * if we set opacity: 1.
59
- */
60
- if (disabledClonedInput) {
61
- clonedEl.disabled = true;
62
- }
63
- /**
64
- * Position the clone at the same horizontal offset as the native input
65
- * to prevent the placeholder from overlapping start slot content (e.g., icons).
66
- */
67
- const doc = componentEl.ownerDocument;
68
- const isRTL = doc.dir === 'rtl';
69
- if (isRTL) {
70
- const parentWidth = parentEl.offsetWidth;
71
- const startOffset = parentWidth - inputEl.offsetLeft - inputEl.offsetWidth;
72
- clonedEl.style.insetInlineStart = `${startOffset}px`;
73
- }
74
- else {
75
- clonedEl.style.insetInlineStart = `${inputEl.offsetLeft}px`;
76
- }
77
- parentEl.appendChild(clonedEl);
78
- cloneMap.set(componentEl, clonedEl);
79
- const tx = isRTL ? 9999 : -9999;
80
- componentEl.style.pointerEvents = 'none';
81
- inputEl.style.transform = `translate3d(${tx}px,${inputRelativeY}px,0) scale(0)`;
82
- };
83
- const removeClone = (componentEl, inputEl) => {
84
- const clone = cloneMap.get(componentEl);
85
- if (clone) {
86
- cloneMap.delete(componentEl);
87
- clone.remove();
88
- }
89
- componentEl.style.pointerEvents = '';
90
- inputEl.style.transform = '';
91
- };
92
- /**
93
- * Factoring in 50px gives us some room
94
- * in case the keyboard shows password/autofill bars
95
- * asynchronously.
96
- */
97
- const SCROLL_AMOUNT_PADDING = 50;
98
-
99
- const enableHideCaretOnScroll = (componentEl, inputEl, scrollEl) => {
100
- if (!scrollEl || !inputEl) {
101
- return () => {
102
- return;
103
- };
104
- }
105
- const scrollHideCaret = (shouldHideCaret) => {
106
- if (isFocused(inputEl)) {
107
- relocateInput(componentEl, inputEl, shouldHideCaret);
108
- }
109
- };
110
- const onBlur = () => relocateInput(componentEl, inputEl, false);
111
- const hideCaret = () => scrollHideCaret(true);
112
- const showCaret = () => scrollHideCaret(false);
113
- addEventListener(scrollEl, 'ionScrollStart', hideCaret);
114
- addEventListener(scrollEl, 'ionScrollEnd', showCaret);
115
- inputEl.addEventListener('blur', onBlur);
116
- return () => {
117
- removeEventListener(scrollEl, 'ionScrollStart', hideCaret);
118
- removeEventListener(scrollEl, 'ionScrollEnd', showCaret);
119
- inputEl.removeEventListener('blur', onBlur);
120
- };
121
- };
122
-
123
- const SKIP_SELECTOR = 'input, textarea, [no-blur], [contenteditable]';
124
- const enableInputBlurring = () => {
125
- let focused = true;
126
- let didScroll = false;
127
- const doc = document;
128
- const onScroll = () => {
129
- didScroll = true;
130
- };
131
- const onFocusin = () => {
132
- focused = true;
133
- };
134
- const onTouchend = (ev) => {
135
- // if app did scroll return early
136
- if (didScroll) {
137
- didScroll = false;
138
- return;
139
- }
140
- const active = doc.activeElement;
141
- if (!active) {
142
- return;
143
- }
144
- // only blur if the active element is a text-input or a textarea
145
- if (active.matches(SKIP_SELECTOR)) {
146
- return;
147
- }
148
- // if the selected target is the active element, do not blur
149
- const tapped = ev.target;
150
- if (tapped === active) {
151
- return;
152
- }
153
- if (tapped.matches(SKIP_SELECTOR) || tapped.closest(SKIP_SELECTOR)) {
154
- return;
155
- }
156
- focused = false;
157
- // TODO FW-2796: find a better way, why 50ms?
158
- setTimeout(() => {
159
- if (!focused) {
160
- active.blur();
161
- }
162
- }, 50);
163
- };
164
- addEventListener(doc, 'ionScrollStart', onScroll);
165
- doc.addEventListener('focusin', onFocusin, true);
166
- doc.addEventListener('touchend', onTouchend, false);
167
- return () => {
168
- removeEventListener(doc, 'ionScrollStart', onScroll, true);
169
- doc.removeEventListener('focusin', onFocusin, true);
170
- doc.removeEventListener('touchend', onTouchend, false);
171
- };
172
- };
173
-
174
- const SCROLL_ASSIST_SPEED = 0.3;
175
- const getScrollData = (componentEl, contentEl, keyboardHeight, platformHeight) => {
176
- var _a;
177
- const itemEl = (_a = componentEl.closest('ion-item,[ion-item]')) !== null && _a !== void 0 ? _a : componentEl;
178
- return calcScrollData(itemEl.getBoundingClientRect(), contentEl.getBoundingClientRect(), keyboardHeight, platformHeight);
179
- };
180
- const calcScrollData = (inputRect, contentRect, keyboardHeight, platformHeight) => {
181
- // compute input's Y values relative to the body
182
- const inputTop = inputRect.top;
183
- const inputBottom = inputRect.bottom;
184
- // compute visible area
185
- const visibleAreaTop = contentRect.top;
186
- const visibleAreaBottom = Math.min(contentRect.bottom, platformHeight - keyboardHeight);
187
- // compute safe area
188
- const safeAreaTop = visibleAreaTop + 15;
189
- const safeAreaBottom = visibleAreaBottom - SCROLL_AMOUNT_PADDING;
190
- // figure out if each edge of the input is within the safe area
191
- const distanceToBottom = safeAreaBottom - inputBottom;
192
- const distanceToTop = safeAreaTop - inputTop;
193
- // desiredScrollAmount is the negated distance to the safe area according to our calculations.
194
- const desiredScrollAmount = Math.round(distanceToBottom < 0 ? -distanceToBottom : distanceToTop > 0 ? -distanceToTop : 0);
195
- // our calculations make some assumptions that aren't always true, like the keyboard being closed when an input
196
- // gets focus, so make sure we don't scroll the input above the visible area
197
- const scrollAmount = Math.min(desiredScrollAmount, inputTop - visibleAreaTop);
198
- const distance = Math.abs(scrollAmount);
199
- const duration = distance / SCROLL_ASSIST_SPEED;
200
- const scrollDuration = Math.min(400, Math.max(150, duration));
201
- return {
202
- scrollAmount,
203
- scrollDuration,
204
- scrollPadding: keyboardHeight,
205
- inputSafeY: -(inputTop - safeAreaTop) + 4,
206
- };
207
- };
208
-
209
- const PADDING_TIMER_KEY = '$ionPaddingTimer';
210
- /**
211
- * Scroll padding adds additional padding to the bottom
212
- * of ion-content so that there is enough scroll space
213
- * for an input to be scrolled above the keyboard. This
214
- * is needed in environments where the webview does not
215
- * resize when the keyboard opens.
216
- *
217
- * Example: If an input at the bottom of ion-content is
218
- * focused, there is no additional scrolling space below
219
- * it, so the input cannot be scrolled above the keyboard.
220
- * Scroll padding fixes this by adding padding equal to the
221
- * height of the keyboard to the bottom of the content.
222
- *
223
- * Common environments where this is needed:
224
- * - Mobile Safari: The keyboard overlays the content
225
- * - Capacitor/Cordova on iOS: The keyboard overlays the content
226
- * when the KeyboardResize mode is set to 'none'.
227
- */
228
- const setScrollPadding = (contentEl, paddingAmount, clearCallback) => {
229
- const timer = contentEl[PADDING_TIMER_KEY];
230
- if (timer) {
231
- clearTimeout(timer);
232
- }
233
- if (paddingAmount > 0) {
234
- contentEl.style.setProperty('--keyboard-offset', `${paddingAmount}px`);
235
- }
236
- else {
237
- contentEl[PADDING_TIMER_KEY] = setTimeout(() => {
238
- contentEl.style.setProperty('--keyboard-offset', '0px');
239
- if (clearCallback) {
240
- clearCallback();
241
- }
242
- }, 120);
243
- }
244
- };
245
- /**
246
- * When an input is about to be focused,
247
- * set a timeout to clear any scroll padding
248
- * on the content. Note: The clearing
249
- * is done on a timeout so that if users
250
- * are moving focus from one input to the next
251
- * then re-adding scroll padding to the new
252
- * input with cancel the timeout to clear the
253
- * scroll padding.
254
- */
255
- const setClearScrollPaddingListener = (inputEl, contentEl, doneCallback) => {
256
- const clearScrollPadding = () => {
257
- if (contentEl) {
258
- setScrollPadding(contentEl, 0, doneCallback);
259
- }
260
- };
261
- inputEl.addEventListener('focusout', clearScrollPadding, { once: true });
262
- };
263
-
264
- let currentPadding = 0;
265
- const SKIP_SCROLL_ASSIST = 'data-ionic-skip-scroll-assist';
266
- const enableScrollAssist = (componentEl, inputEl, contentEl, footerEl, keyboardHeight, enableScrollPadding, keyboardResize, disableClonedInput = false) => {
267
- /**
268
- * Scroll padding should only be added if:
269
- * 1. The global scrollPadding config option
270
- * is set to true.
271
- * 2. The native keyboard resize mode is either "none"
272
- * (keyboard overlays webview) or undefined (resize
273
- * information unavailable)
274
- * Resize info is available on Capacitor 4+
275
- */
276
- const addScrollPadding = enableScrollPadding && (keyboardResize === undefined || keyboardResize.mode === KeyboardResize.None);
277
- /**
278
- * This tracks whether or not the keyboard has been
279
- * presented for a single focused text field. Note
280
- * that it does not track if the keyboard is open
281
- * in general such as if the keyboard is open for
282
- * a different focused text field.
283
- */
284
- let hasKeyboardBeenPresentedForTextField = false;
285
- /**
286
- * When adding scroll padding we need to know
287
- * how much of the viewport the keyboard obscures.
288
- * We do this by subtracting the keyboard height
289
- * from the platform height.
290
- *
291
- * If we compute this value when switching between
292
- * inputs then the webview may already be resized.
293
- * At this point, `win.innerHeight` has already accounted
294
- * for the keyboard meaning we would then subtract
295
- * the keyboard height again. This will result in the input
296
- * being scrolled more than it needs to.
297
- */
298
- const platformHeight = win !== undefined ? win.innerHeight : 0;
299
- /**
300
- * Scroll assist is run when a text field
301
- * is focused. However, it may need to
302
- * re-run when the keyboard size changes
303
- * such that the text field is now hidden
304
- * underneath the keyboard.
305
- * This function re-runs scroll assist
306
- * when that happens.
307
- *
308
- * One limitation of this is on a web browser
309
- * where native keyboard APIs do not have cross-browser
310
- * support. `ionKeyboardDidShow` relies on the Visual Viewport API.
311
- * This means that if the keyboard changes but does not change
312
- * geometry, then scroll assist will not re-run even if
313
- * the user has scrolled the text field under the keyboard.
314
- * This is not a problem when running in Cordova/Capacitor
315
- * because `ionKeyboardDidShow` uses the native events
316
- * which fire every time the keyboard changes.
317
- */
318
- const keyboardShow = (ev) => {
319
- /**
320
- * If the keyboard has not yet been presented
321
- * for this text field then the text field has just
322
- * received focus. In that case, the focusin listener
323
- * will run scroll assist.
324
- */
325
- if (hasKeyboardBeenPresentedForTextField === false) {
326
- hasKeyboardBeenPresentedForTextField = true;
327
- return;
328
- }
329
- /**
330
- * Otherwise, the keyboard has already been presented
331
- * for the focused text field.
332
- * This means that the keyboard likely changed
333
- * geometry, and we need to re-run scroll assist.
334
- * This can happen when the user rotates their device
335
- * or when they switch keyboards.
336
- *
337
- * Make sure we pass in the computed keyboard height
338
- * rather than the estimated keyboard height.
339
- *
340
- * Since the keyboard is already open then we do not
341
- * need to wait for the webview to resize, so we pass
342
- * "waitForResize: false".
343
- */
344
- jsSetFocus(componentEl, inputEl, contentEl, footerEl, ev.detail.keyboardHeight, addScrollPadding, disableClonedInput, platformHeight, false);
345
- };
346
- /**
347
- * Reset the internal state when the text field loses focus.
348
- */
349
- const focusOut = () => {
350
- hasKeyboardBeenPresentedForTextField = false;
351
- win === null || win === void 0 ? void 0 : win.removeEventListener('ionKeyboardDidShow', keyboardShow);
352
- componentEl.removeEventListener('focusout', focusOut);
353
- };
354
- /**
355
- * When the input is about to receive
356
- * focus, we need to move it to prevent
357
- * mobile Safari from adjusting the viewport.
358
- */
359
- const focusIn = async () => {
360
- /**
361
- * Scroll assist should not run again
362
- * on inputs that have been manually
363
- * focused inside of the scroll assist
364
- * implementation.
365
- */
366
- if (inputEl.hasAttribute(SKIP_SCROLL_ASSIST)) {
367
- inputEl.removeAttribute(SKIP_SCROLL_ASSIST);
368
- return;
369
- }
370
- jsSetFocus(componentEl, inputEl, contentEl, footerEl, keyboardHeight, addScrollPadding, disableClonedInput, platformHeight);
371
- win === null || win === void 0 ? void 0 : win.addEventListener('ionKeyboardDidShow', keyboardShow);
372
- componentEl.addEventListener('focusout', focusOut);
373
- };
374
- componentEl.addEventListener('focusin', focusIn);
375
- return () => {
376
- componentEl.removeEventListener('focusin', focusIn);
377
- win === null || win === void 0 ? void 0 : win.removeEventListener('ionKeyboardDidShow', keyboardShow);
378
- componentEl.removeEventListener('focusout', focusOut);
379
- };
380
- };
381
- /**
382
- * Use this function when you want to manually
383
- * focus an input but not have scroll assist run again.
384
- */
385
- const setManualFocus = (el) => {
386
- var _a;
387
- /**
388
- * If element is already focused then
389
- * a new focusin event will not be dispatched
390
- * to remove the SKIL_SCROLL_ASSIST attribute.
391
- */
392
- if (document.activeElement === el) {
393
- return;
394
- }
395
- /**
396
- * Optimization for scenarios where the currently focused element is a sibling
397
- * of the target element. In such cases, we avoid setting `SKIP_SCROLL_ASSIST`.
398
- *
399
- * This is crucial for accessibility: input elements can now contain focusable
400
- * siblings (e.g., clear buttons, slotted elements). If we didn't skip setting
401
- * the attribute here, screen readers would be unable to navigate to and interact
402
- * with these sibling elements.
403
- *
404
- * Without this check, we would need to call `ev.stopPropagation()` on the
405
- * 'focusin' event of each focusable sibling to prevent the scroll assist
406
- * listener from incorrectly moving focus back to the input. That approach
407
- * would be less maintainable and more error-prone.
408
- */
409
- const inputId = el.getAttribute('id');
410
- const label = el.closest(`label[for="${inputId}"]`);
411
- const activeElLabel = (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.closest(`label[for="${inputId}"]`);
412
- if (label !== null && label === activeElLabel) {
413
- // If the label is the same as the active element label, then
414
- // we don't need to set the `SKIP_SCROLL_ASSIST` and reset focus.
415
- return;
416
- }
417
- el.setAttribute(SKIP_SCROLL_ASSIST, 'true');
418
- el.focus();
419
- };
420
- const jsSetFocus = async (componentEl, inputEl, contentEl, footerEl, keyboardHeight, enableScrollPadding, disableClonedInput = false, platformHeight = 0, waitForResize = true) => {
421
- if (!contentEl && !footerEl) {
422
- return;
423
- }
424
- const scrollData = getScrollData(componentEl, (contentEl || footerEl), keyboardHeight, platformHeight);
425
- if (contentEl && Math.abs(scrollData.scrollAmount) < 4) {
426
- // the text input is in a safe position that doesn't
427
- // require it to be scrolled into view, just set focus now
428
- setManualFocus(inputEl);
429
- /**
430
- * Even though the input does not need
431
- * scroll assist, we should preserve the
432
- * the scroll padding as users could be moving
433
- * focus from an input that needs scroll padding
434
- * to an input that does not need scroll padding.
435
- * If we remove the scroll padding now, users will
436
- * see the page jump.
437
- */
438
- if (enableScrollPadding && contentEl !== null) {
439
- setScrollPadding(contentEl, currentPadding);
440
- setClearScrollPaddingListener(inputEl, contentEl, () => (currentPadding = 0));
441
- }
442
- return;
443
- }
444
- // temporarily move the focus to the focus holder so the browser
445
- // doesn't freak out while it's trying to get the input in place
446
- // at this point the native text input still does not have focus
447
- relocateInput(componentEl, inputEl, true, scrollData.inputSafeY, disableClonedInput);
448
- setManualFocus(inputEl);
449
- /**
450
- * Relocating/Focusing input causes the
451
- * click event to be cancelled, so
452
- * manually fire one here.
453
- */
454
- raf(() => componentEl.click());
455
- /**
456
- * If enabled, we can add scroll padding to
457
- * the bottom of the content so that scroll assist
458
- * has enough room to scroll the input above
459
- * the keyboard.
460
- */
461
- if (enableScrollPadding && contentEl) {
462
- currentPadding = scrollData.scrollPadding;
463
- setScrollPadding(contentEl, currentPadding);
464
- }
465
- if (typeof window !== 'undefined') {
466
- let scrollContentTimeout;
467
- const scrollContent = async () => {
468
- // clean up listeners and timeouts
469
- if (scrollContentTimeout !== undefined) {
470
- clearTimeout(scrollContentTimeout);
471
- }
472
- window.removeEventListener('ionKeyboardDidShow', doubleKeyboardEventListener);
473
- window.removeEventListener('ionKeyboardDidShow', scrollContent);
474
- // scroll the input into place
475
- if (contentEl) {
476
- await scrollByPoint(contentEl, 0, scrollData.scrollAmount, scrollData.scrollDuration);
477
- }
478
- // the scroll view is in the correct position now
479
- // give the native text input focus
480
- relocateInput(componentEl, inputEl, false, scrollData.inputSafeY);
481
- /**
482
- * If focus has moved to another element while scroll assist was running,
483
- * don't steal focus back. This prevents focus jumping when users
484
- * quickly switch between inputs or tap other elements.
485
- */
486
- if (document.activeElement === inputEl) {
487
- setManualFocus(inputEl);
488
- }
489
- /**
490
- * When the input is about to be blurred
491
- * we should set a timeout to remove
492
- * any scroll padding.
493
- */
494
- if (enableScrollPadding) {
495
- setClearScrollPaddingListener(inputEl, contentEl, () => (currentPadding = 0));
496
- }
497
- };
498
- const doubleKeyboardEventListener = () => {
499
- window.removeEventListener('ionKeyboardDidShow', doubleKeyboardEventListener);
500
- window.addEventListener('ionKeyboardDidShow', scrollContent);
501
- };
502
- if (contentEl) {
503
- const scrollEl = await getScrollElement(contentEl);
504
- /**
505
- * scrollData will only consider the amount we need
506
- * to scroll in order to properly bring the input
507
- * into view. It will not consider the amount
508
- * we can scroll in the content element.
509
- * As a result, scrollData may request a greater
510
- * scroll position than is currently available
511
- * in the DOM. If this is the case, we need to
512
- * wait for the webview to resize/the keyboard
513
- * to show in order for additional scroll
514
- * bandwidth to become available.
515
- */
516
- const totalScrollAmount = scrollEl.scrollHeight - scrollEl.clientHeight;
517
- if (waitForResize && scrollData.scrollAmount > totalScrollAmount - scrollEl.scrollTop) {
518
- /**
519
- * On iOS devices, the system will show a "Passwords" bar above the keyboard
520
- * after the initial keyboard is shown. This prevents the webview from resizing
521
- * until the "Passwords" bar is shown, so we need to wait for that to happen first.
522
- */
523
- if (inputEl.type === 'password') {
524
- // Add 50px to account for the "Passwords" bar
525
- scrollData.scrollAmount += SCROLL_AMOUNT_PADDING;
526
- window.addEventListener('ionKeyboardDidShow', doubleKeyboardEventListener);
527
- }
528
- else {
529
- window.addEventListener('ionKeyboardDidShow', scrollContent);
530
- }
531
- /**
532
- * This should only fire in 2 instances:
533
- * 1. The app is very slow.
534
- * 2. The app is running in a browser on an old OS
535
- * that does not support Ionic Keyboard Events
536
- */
537
- scrollContentTimeout = setTimeout(scrollContent, 1000);
538
- return;
539
- }
540
- }
541
- scrollContent();
542
- }
543
- };
544
-
545
- const INPUT_BLURRING = true;
546
- const startInputShims = async (config, platform) => {
547
- /**
548
- * If doc is undefined then we are in an SSR environment
549
- * where input shims do not apply.
550
- */
551
- if (doc === undefined) {
552
- return;
553
- }
554
- const isIOS = platform === 'ios';
555
- const isAndroid = platform === 'android';
556
- /**
557
- * Hide Caret and Input Blurring are needed on iOS.
558
- * Scroll Assist and Scroll Padding are needed on iOS and Android
559
- * with Chrome web browser (not Chrome webview).
560
- */
561
- const keyboardHeight = config.getNumber('keyboardHeight', 290);
562
- const scrollAssist = config.getBoolean('scrollAssist', true);
563
- const hideCaret = config.getBoolean('hideCaretOnScroll', isIOS);
564
- /**
565
- * The team is evaluating if inputBlurring is still needed. As a result
566
- * this feature is disabled by default as of Ionic 8.0. Developers are
567
- * able to re-enable it temporarily. The team may remove this utility
568
- * if it is determined that doing so would not bring any adverse side effects.
569
- * TODO FW-6014 remove input blurring utility (including implementation)
570
- */
571
- const inputBlurring = config.getBoolean('inputBlurring', false);
572
- const scrollPadding = config.getBoolean('scrollPadding', true);
573
- const inputs = Array.from(doc.querySelectorAll('ion-input, ion-textarea'));
574
- const hideCaretMap = new WeakMap();
575
- const scrollAssistMap = new WeakMap();
576
- /**
577
- * Grab the native keyboard resize configuration
578
- * and pass it to scroll assist. Scroll assist requires
579
- * that we adjust the input right before the input
580
- * is about to be focused. If we called `Keyboard.getResizeMode`
581
- * on focusin in scroll assist, we could potentially adjust the
582
- * input too late since this call is async.
583
- */
584
- const keyboardResizeMode = await Keyboard.getResizeMode();
585
- const registerInput = async (componentEl) => {
586
- await new Promise((resolve) => componentOnReady(componentEl, resolve));
587
- const inputRoot = componentEl.shadowRoot || componentEl;
588
- const inputEl = inputRoot.querySelector('input') || inputRoot.querySelector('textarea');
589
- const scrollEl = findClosestIonContent(componentEl);
590
- const footerEl = !scrollEl ? componentEl.closest('ion-footer') : null;
591
- if (!inputEl) {
592
- return;
593
- }
594
- if (!!scrollEl && hideCaret && !hideCaretMap.has(componentEl)) {
595
- const rmFn = enableHideCaretOnScroll(componentEl, inputEl, scrollEl);
596
- hideCaretMap.set(componentEl, rmFn);
597
- }
598
- /**
599
- * date/datetime-locale inputs on mobile devices show date picker
600
- * overlays instead of keyboards. As a result, scroll assist is
601
- * not needed. This also works around a bug in iOS <16 where
602
- * scroll assist causes the browser to lock up. See FW-1997.
603
- */
604
- const isDateInput = inputEl.type === 'date' || inputEl.type === 'datetime-local';
605
- if (!isDateInput &&
606
- (!!scrollEl || !!footerEl) &&
607
- scrollAssist &&
608
- !scrollAssistMap.has(componentEl)) {
609
- const rmFn = enableScrollAssist(componentEl, inputEl, scrollEl, footerEl, keyboardHeight, scrollPadding, keyboardResizeMode, isAndroid);
610
- scrollAssistMap.set(componentEl, rmFn);
611
- }
612
- };
613
- const unregisterInput = (componentEl) => {
614
- if (hideCaret) {
615
- const fn = hideCaretMap.get(componentEl);
616
- if (fn) {
617
- fn();
618
- }
619
- hideCaretMap.delete(componentEl);
620
- }
621
- if (scrollAssist) {
622
- const fn = scrollAssistMap.get(componentEl);
623
- if (fn) {
624
- fn();
625
- }
626
- scrollAssistMap.delete(componentEl);
627
- }
628
- };
629
- if (inputBlurring && INPUT_BLURRING) {
630
- enableInputBlurring();
631
- }
632
- // Input might be already loaded in the DOM before ion-device-hacks did.
633
- // At this point we need to look for all of the inputs not registered yet
634
- // and register them.
635
- for (const input of inputs) {
636
- registerInput(input);
637
- }
638
- doc.addEventListener('ionInputDidLoad', (ev) => {
639
- registerInput(ev.detail);
640
- });
641
- doc.addEventListener('ionInputDidUnload', (ev) => {
642
- unregisterInput(ev.detail);
643
- });
644
- };
645
-
646
- export { startInputShims };