@ionic/core 8.8.19-dev.11786610762.137bbb21 → 8.8.19-dev.11786735826.1fad7c0a

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 (1240) hide show
  1. package/components/index.js +1 -1
  2. package/components/ion-accordion-group.js +1 -1
  3. package/components/ion-accordion.js +1 -1
  4. package/components/ion-action-sheet.js +1 -1
  5. package/components/ion-alert.js +1 -1
  6. package/components/ion-app.js +1 -1
  7. package/components/ion-avatar.js +1 -1
  8. package/components/ion-back-button.js +1 -1
  9. package/components/ion-backdrop.js +1 -1
  10. package/components/ion-badge.js +1 -1
  11. package/components/ion-breadcrumb.js +1 -1
  12. package/components/ion-breadcrumbs.js +1 -1
  13. package/components/ion-button.js +1 -1
  14. package/components/ion-buttons.js +1 -1
  15. package/components/ion-card-content.js +1 -1
  16. package/components/ion-card-header.js +1 -1
  17. package/components/ion-card-subtitle.js +1 -1
  18. package/components/ion-card-title.js +1 -1
  19. package/components/ion-card.js +1 -1
  20. package/components/ion-checkbox.js +1 -1
  21. package/components/ion-chip.js +1 -1
  22. package/components/ion-col.js +1 -1
  23. package/components/ion-content.js +1 -1
  24. package/components/ion-datetime-button.js +1 -1
  25. package/components/ion-datetime.js +1 -1
  26. package/components/ion-fab-button.js +1 -1
  27. package/components/ion-fab-list.js +1 -1
  28. package/components/ion-fab.js +1 -1
  29. package/components/ion-footer.js +1 -1
  30. package/components/ion-grid.js +1 -1
  31. package/components/ion-header.js +1 -1
  32. package/components/ion-icon.js +1 -1
  33. package/components/ion-img.js +1 -1
  34. package/components/ion-infinite-scroll-content.js +1 -1
  35. package/components/ion-infinite-scroll.js +1 -1
  36. package/components/ion-input-otp.js +1 -1
  37. package/components/ion-input-password-toggle.js +1 -1
  38. package/components/ion-input.js +1 -1
  39. package/components/ion-item-divider.js +1 -1
  40. package/components/ion-item-group.js +1 -1
  41. package/components/ion-item-option.js +1 -1
  42. package/components/ion-item-options.js +1 -1
  43. package/components/ion-item-sliding.js +1 -1
  44. package/components/ion-item.js +1 -1
  45. package/components/ion-label.js +1 -1
  46. package/components/ion-list-header.js +1 -1
  47. package/components/ion-list.js +1 -1
  48. package/components/ion-loading.js +1 -1
  49. package/components/ion-menu-button.js +1 -1
  50. package/components/ion-menu-toggle.js +1 -1
  51. package/components/ion-menu.js +1 -1
  52. package/components/ion-modal.js +1 -1
  53. package/components/ion-nav-link.js +1 -1
  54. package/components/ion-nav.js +1 -1
  55. package/components/ion-note.js +1 -1
  56. package/components/ion-picker-column-option.js +1 -1
  57. package/components/ion-picker-column.js +1 -1
  58. package/components/ion-picker.js +1 -1
  59. package/components/ion-popover.js +1 -1
  60. package/components/ion-progress-bar.js +1 -1
  61. package/components/ion-radio-group.js +1 -1
  62. package/components/ion-radio.js +1 -1
  63. package/components/ion-range.js +1 -1
  64. package/components/ion-refresher-content.js +1 -1
  65. package/components/ion-refresher.js +1 -1
  66. package/components/ion-reorder-group.js +1 -1
  67. package/components/ion-reorder.js +1 -1
  68. package/components/ion-ripple-effect.js +1 -1
  69. package/components/ion-route-redirect.js +1 -1
  70. package/components/ion-route.js +1 -1
  71. package/components/ion-router-link.js +1 -1
  72. package/components/ion-router-outlet.js +1 -1
  73. package/components/ion-router.js +1 -1
  74. package/components/ion-row.js +1 -1
  75. package/components/ion-searchbar.js +1 -1
  76. package/components/ion-segment-button.js +1 -1
  77. package/components/ion-segment-content.js +1 -1
  78. package/components/ion-segment-view.js +1 -1
  79. package/components/ion-segment.js +1 -1
  80. package/components/ion-select-modal.js +1 -1
  81. package/components/ion-select-option.js +1 -1
  82. package/components/ion-select-popover.js +1 -1
  83. package/components/ion-select.js +1 -1
  84. package/components/ion-skeleton-text.js +1 -1
  85. package/components/ion-spinner.js +1 -1
  86. package/components/ion-split-pane.js +1 -1
  87. package/components/ion-tab-bar.js +1 -1
  88. package/components/ion-tab-button.js +1 -1
  89. package/components/ion-tab.js +1 -1
  90. package/components/ion-tabs.js +1 -1
  91. package/components/ion-text.js +1 -1
  92. package/components/ion-textarea.js +1 -1
  93. package/components/ion-thumbnail.js +1 -1
  94. package/components/ion-title.js +1 -1
  95. package/components/ion-toast.js +1 -1
  96. package/components/ion-toggle.js +1 -1
  97. package/components/ion-toolbar.js +1 -1
  98. package/components/p--m5cCjbK.js +4 -0
  99. package/components/{p-CpHPq11n.js → p-30_sZS2V.js} +1 -1
  100. package/components/p-8FN7p701.js +4 -0
  101. package/components/p-B-FxiyeI.js +4 -0
  102. package/components/p-B4uHHhPK.js +4 -0
  103. package/components/p-BMPN55of.js +4 -0
  104. package/components/p-BMS4t-kJ.js +4 -0
  105. package/components/p-BOvLNVKq.js +4 -0
  106. package/components/p-BSQPZ79H.js +4 -0
  107. package/components/p-BWBigMsI.js +4 -0
  108. package/components/p-BZ4-QTes.js +4 -0
  109. package/components/p-BhamHSw3.js +4 -0
  110. package/components/p-BjluhQMI.js +4 -0
  111. package/components/p-BlsIikdZ.js +4 -0
  112. package/components/p-Blug1Vxu.js +4 -0
  113. package/components/p-BmVRXR1y.js +4 -0
  114. package/components/p-BpG8kBfD.js +4 -0
  115. package/components/p-BqPNzJf6.js +4 -0
  116. package/components/p-C5KYjZWD.js +4 -0
  117. package/components/p-C91npEel.js +4 -0
  118. package/components/p-C9BGR5fy.js +4 -0
  119. package/components/p-CD4fmpem.js +4 -0
  120. package/components/p-CEW4RXZO.js +4 -0
  121. package/components/p-CIGNaXM1.js +4 -0
  122. package/components/p-CKhiNOEg.js +4 -0
  123. package/components/p-CO2zzh3W.js +4 -0
  124. package/components/p-CVb3x_r3.js +4 -0
  125. package/components/p-CWLrHG8Y.js +4 -0
  126. package/components/p-CbhUdtjf.js +4 -0
  127. package/components/p-CejmQs3h.js +4 -0
  128. package/components/p-CfnNZz_d.js +4 -0
  129. package/components/p-CmKf4pgI.js +4 -0
  130. package/components/p-Cs5f-uOS.js +4 -0
  131. package/components/p-D7-vHX0A.js +4 -0
  132. package/components/p-DJztqcrH.js +4 -0
  133. package/components/p-DKrhJJV0.js +4 -0
  134. package/components/p-DRfgH82D.js +4 -0
  135. package/components/p-DSzSbVP2.js +4 -0
  136. package/components/p-DV85C0e0.js +4 -0
  137. package/components/p-DVKS-ovH.js +4 -0
  138. package/components/p-DWCzVL3Y.js +4 -0
  139. package/components/p-Dd8ajo9a.js +4 -0
  140. package/components/p-DdnhY_oj.js +4 -0
  141. package/components/p-DgZOZQjJ.js +4 -0
  142. package/components/p-Dmd2xqCe.js +4 -0
  143. package/components/{p-B2SvA6NE.js → p-DwpKZ6rl.js} +1 -1
  144. package/components/p-G0TxqHfe.js +4 -0
  145. package/components/p-GG5GhznE.js +4 -0
  146. package/components/{p-Ch8jco3x.js → p-J-p0EtHR.js} +1 -1
  147. package/components/p-LXu5-6Ti.js +4 -0
  148. package/components/p-LpMHEu3v.js +4 -0
  149. package/components/p-TXPDHL13.js +4 -0
  150. package/components/p-UQSiXX2Z.js +4 -0
  151. package/components/p-UuPYCOZE.js +4 -0
  152. package/components/p-WeeS7GvC.js +4 -0
  153. package/components/p-ZjP4CjeZ.js +4 -0
  154. package/components/{p-CzlL9T_X.js → p-_0JhwClE.js} +1 -1
  155. package/components/p-_IKFD3ID.js +4 -0
  156. package/components/p-byZM6qHV.js +4 -0
  157. package/components/p-hh7qIC-X.js +4 -0
  158. package/components/p-idq4JFo2.js +4 -0
  159. package/components/p-qT1szVjw.js +4 -0
  160. package/components/{p-BZwQa9ey.js → p-ryyf_ItD.js} +1 -1
  161. package/components/p-wzAhIh03.js +4 -0
  162. package/components/p-ypuYdSDB.js +4 -0
  163. package/components/{p-Dovs7FIs.js → p-yuj4Nkm_.js} +1 -1
  164. package/css/core.css +1 -1
  165. package/css/core.css.map +1 -1
  166. package/css/display.css +1 -1
  167. package/css/display.css.map +1 -1
  168. package/css/flex-utils.css +1 -1
  169. package/css/flex-utils.css.map +1 -1
  170. package/css/float-elements.css.map +1 -1
  171. package/css/global.bundle.css.map +1 -1
  172. package/css/ionic-swiper.css +1 -1
  173. package/css/ionic-swiper.css.map +1 -1
  174. package/css/ionic.bundle.css +1 -1
  175. package/css/ionic.bundle.css.map +1 -1
  176. package/css/normalize.css.map +1 -1
  177. package/css/padding.css.map +1 -1
  178. package/css/palettes/dark.always.css.map +1 -1
  179. package/css/palettes/dark.class.css.map +1 -1
  180. package/css/palettes/dark.system.css.map +1 -1
  181. package/css/palettes/high-contrast-dark.always.css.map +1 -1
  182. package/css/palettes/high-contrast-dark.class.css.map +1 -1
  183. package/css/palettes/high-contrast-dark.system.css.map +1 -1
  184. package/css/palettes/high-contrast.always.css.map +1 -1
  185. package/css/palettes/high-contrast.class.css.map +1 -1
  186. package/css/palettes/high-contrast.system.css.map +1 -1
  187. package/css/structure.css.map +1 -1
  188. package/css/text-alignment.css.map +1 -1
  189. package/css/text-transformation.css.map +1 -1
  190. package/css/typography.css.map +1 -1
  191. package/css/utils.bundle.css +1 -1
  192. package/css/utils.bundle.css.map +1 -1
  193. package/dist/cjs/{animation-qlGmEn5Y.js → animation-C0mOHzej.js} +6 -6
  194. package/dist/cjs/{app-globals-CtK-3pCu.js → app-globals-BREG4twP.js} +1 -1
  195. package/dist/cjs/{button-active-CugpWmFI.js → button-active-BKj1rdFx.js} +3 -3
  196. package/dist/cjs/{capacitor-BixsAzyb.js → capacitor-DmA66EwP.js} +3 -3
  197. package/dist/cjs/{config-DWdFbSNK.js → config-CjUbvdPW.js} +5 -4
  198. package/dist/cjs/{dir-Cn0z1rJH.js → dir-Brx7VkvP.js} +1 -1
  199. package/dist/{esm/focus-visible-vXpMhGrs.js → cjs/focus-visible-CCvKiLh3.js} +3 -23
  200. package/dist/cjs/{format-COAsdjOc.js → format-pp0Du3K-.js} +40 -30
  201. package/dist/cjs/{framework-delegate-CJT_QJQI.js → framework-delegate-NTLQ5YzV.js} +6 -10
  202. package/dist/cjs/{gesture-controller-dtqlP_q4.js → gesture-controller-BDUH7687.js} +15 -8
  203. package/dist/cjs/{haptic-BFgF-QCg.js → haptic-Ch-X4gRx.js} +3 -4
  204. package/dist/cjs/hardware-back-button-fqpYh-kd.js +121 -0
  205. package/dist/cjs/{helpers-Fh1iXsX9.js → helpers-CaLhEmTE.js} +6 -73
  206. package/dist/cjs/{index-YYUVCfP-.js → index-B7zJsYWS.js} +3 -3
  207. package/dist/cjs/{index-CNicxECl.js → index-BlshL9ib.js} +8 -9
  208. package/dist/cjs/{index-D94mERjz.js → index-Ck9advCT.js} +5 -5
  209. package/dist/cjs/{index-CM8iGvyx.js → index-D2X6b92x.js} +15 -16
  210. package/dist/cjs/{index-DRFkZu3V.js → index-D48vawBq.js} +2 -2
  211. package/dist/cjs/index-DkNv4J_i.js +10 -0
  212. package/dist/cjs/{index-CAvQ7Tka.js → index-P1nQxrpZ.js} +10 -4
  213. package/dist/cjs/{index-C1knGA9x.js → index-uvry__L4.js} +33 -65
  214. package/dist/cjs/{index-CxDnX7hd.js → index-wOmugbdg.js} +0 -2
  215. package/dist/cjs/index.cjs.js +17 -17
  216. package/dist/cjs/{input-shims-C8NCYfWv.js → input-shims-DvHAFqiP.js} +19 -22
  217. package/dist/cjs/input.utils-BZdMWVrt.js +35 -0
  218. package/dist/cjs/ion-accordion_2.cjs.entry.js +378 -382
  219. package/dist/cjs/ion-action-sheet.cjs.entry.js +178 -86
  220. package/dist/cjs/ion-alert.cjs.entry.js +250 -125
  221. package/dist/cjs/ion-app_8.cjs.entry.js +461 -608
  222. package/dist/cjs/ion-avatar_3.cjs.entry.js +19 -125
  223. package/dist/cjs/ion-back-button.cjs.entry.js +64 -49
  224. package/dist/cjs/ion-backdrop.cjs.entry.js +23 -22
  225. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +211 -169
  226. package/dist/cjs/ion-button_2.cjs.entry.js +152 -117
  227. package/dist/cjs/ion-card_5.cjs.entry.js +109 -79
  228. package/dist/cjs/ion-checkbox.cjs.entry.js +163 -129
  229. package/dist/cjs/ion-chip.cjs.entry.js +21 -56
  230. package/dist/cjs/ion-col_3.cjs.entry.js +186 -61
  231. package/dist/cjs/ion-datetime-button.cjs.entry.js +255 -247
  232. package/dist/cjs/ion-datetime.cjs.entry.js +2770 -0
  233. package/dist/cjs/ion-fab_3.cjs.entry.js +154 -112
  234. package/dist/cjs/ion-img.cjs.entry.js +34 -16
  235. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +108 -156
  236. package/dist/cjs/ion-input-otp.cjs.entry.js +435 -437
  237. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +40 -64
  238. package/dist/cjs/ion-input.cjs.entry.js +351 -311
  239. package/dist/cjs/ion-item-option_3.cjs.entry.js +136 -511
  240. package/dist/cjs/ion-item_8.cjs.entry.js +217 -189
  241. package/dist/cjs/ion-loading.cjs.entry.js +151 -68
  242. package/dist/cjs/ion-menu_3.cjs.entry.js +181 -137
  243. package/dist/cjs/ion-modal.cjs.entry.js +570 -500
  244. package/dist/cjs/ion-nav_2.cjs.entry.js +103 -163
  245. package/dist/cjs/ion-picker-column-option.cjs.entry.js +39 -39
  246. package/dist/cjs/ion-picker-column.cjs.entry.js +421 -409
  247. package/dist/cjs/ion-picker.cjs.entry.js +405 -400
  248. package/dist/cjs/ion-popover.cjs.entry.js +323 -211
  249. package/dist/cjs/ion-progress-bar.cjs.entry.js +35 -47
  250. package/dist/cjs/ion-radio_2.cjs.entry.js +216 -161
  251. package/dist/cjs/ion-range.cjs.entry.js +307 -249
  252. package/dist/cjs/ion-refresher_2.cjs.entry.js +174 -121
  253. package/dist/cjs/ion-reorder_2.cjs.entry.js +59 -53
  254. package/dist/cjs/ion-ripple-effect.cjs.entry.js +18 -26
  255. package/dist/cjs/ion-route_4.cjs.entry.js +178 -75
  256. package/dist/cjs/ion-searchbar.cjs.entry.js +308 -331
  257. package/dist/cjs/ion-segment-content.cjs.entry.js +2 -2
  258. package/dist/cjs/ion-segment-view.cjs.entry.js +28 -27
  259. package/dist/cjs/ion-segment_2.cjs.entry.js +177 -141
  260. package/dist/cjs/ion-select-modal.cjs.entry.js +49 -69
  261. package/dist/cjs/ion-select_3.cjs.entry.js +507 -429
  262. package/dist/cjs/ion-spinner.cjs.entry.js +28 -36
  263. package/dist/cjs/ion-split-pane.cjs.entry.js +34 -25
  264. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +116 -179
  265. package/dist/cjs/ion-tab_2.cjs.entry.js +54 -29
  266. package/dist/cjs/ion-text.cjs.entry.js +13 -7
  267. package/dist/cjs/ion-textarea.cjs.entry.js +303 -309
  268. package/dist/cjs/ion-toast.cjs.entry.js +264 -169
  269. package/dist/cjs/ion-toggle.cjs.entry.js +184 -187
  270. package/dist/cjs/ionic-global-k6hOWWpn.js +156 -0
  271. package/dist/cjs/ionic.cjs.js +4 -4
  272. package/dist/cjs/{ios.transition-BgDCUY4Y.js → ios.transition-KvuRAe2W.js} +14 -20
  273. package/dist/cjs/{item-multiple-inputs-DKn76MYO.js → item-multiple-inputs-BdYSbfKN.js} +1 -1
  274. package/dist/cjs/{keyboard-nne7rvBK.js → keyboard-Cix5TVkD.js} +4 -5
  275. package/dist/cjs/{keyboard-BbZXOwZg.js → keyboard-cHxZlTyz.js} +3 -3
  276. package/dist/cjs/keyboard-controller-PtZoN2GS.js +167 -0
  277. package/dist/cjs/loader.cjs.js +4 -4
  278. package/dist/cjs/{md.transition-Debf4tYr.js → md.transition-Bjl5Ozph.js} +8 -10
  279. package/dist/cjs/{overlay-control-label-DnRLQR1t.js → overlay-control-label-D2sdL2O8.js} +11 -13
  280. package/dist/cjs/{overlays-DYBUkNQu.js → overlays-IlP4H2Gn.js} +60 -336
  281. package/dist/cjs/{select-option-render-BqJEK1N1.js → select-option-render-pULCGldr.js} +3 -4
  282. package/dist/cjs/slot-mutation-controller-CgTGFqlW.js +397 -0
  283. package/dist/cjs/{status-tap-hwqc0yb_.js → status-tap-BR_ujYHg.js} +3 -4
  284. package/dist/cjs/{swipe-back-DqQx5QCp.js → swipe-back-DzQKEl5g.js} +5 -6
  285. package/dist/cjs/{theme-IlOsGAz7.js → theme-Bw0rpaNN.js} +7 -26
  286. package/dist/cjs/validity-BpS37YFM.js +19 -0
  287. package/dist/collection/collection-manifest.json +1 -13
  288. package/dist/collection/components/accordion/accordion.ios.css +58 -73
  289. package/dist/collection/components/accordion/accordion.js +327 -338
  290. package/dist/collection/components/accordion/accordion.md.css +59 -67
  291. package/dist/collection/components/accordion-group/accordion-group.ios.css +4 -16
  292. package/dist/collection/components/accordion-group/accordion-group.js +56 -69
  293. package/dist/collection/components/accordion-group/accordion-group.md.css +4 -22
  294. package/dist/collection/components/action-sheet/action-sheet.ios.css +54 -184
  295. package/dist/collection/components/action-sheet/action-sheet.js +166 -76
  296. package/dist/collection/components/action-sheet/action-sheet.md.css +55 -179
  297. package/dist/collection/components/action-sheet/test/basic/fixture.js +3 -0
  298. package/dist/collection/components/alert/alert.ios.css +54 -247
  299. package/dist/collection/components/alert/alert.js +236 -113
  300. package/dist/collection/components/alert/alert.md.css +56 -243
  301. package/dist/collection/components/app/app.js +86 -15
  302. package/dist/collection/components/avatar/avatar.ios.css +33 -7
  303. package/dist/collection/components/avatar/avatar.js +4 -120
  304. package/dist/collection/components/avatar/avatar.md.css +0 -51
  305. package/dist/collection/components/back-button/back-button.ios.css +48 -60
  306. package/dist/collection/components/back-button/back-button.js +61 -46
  307. package/dist/collection/components/back-button/back-button.md.css +48 -60
  308. package/dist/collection/components/backdrop/backdrop.ios.css +19 -56
  309. package/dist/collection/components/backdrop/backdrop.js +22 -26
  310. package/dist/collection/components/backdrop/backdrop.md.css +19 -56
  311. package/dist/collection/components/badge/badge.ios.css +12 -137
  312. package/dist/collection/components/badge/badge.js +15 -145
  313. package/dist/collection/components/badge/badge.md.css +12 -122
  314. package/dist/collection/components/breadcrumb/breadcrumb.ios.css +8 -20
  315. package/dist/collection/components/breadcrumb/breadcrumb.js +101 -72
  316. package/dist/collection/components/breadcrumb/breadcrumb.md.css +8 -20
  317. package/dist/collection/components/breadcrumbs/breadcrumbs.ios.css +0 -6
  318. package/dist/collection/components/breadcrumbs/breadcrumbs.js +112 -99
  319. package/dist/collection/components/breadcrumbs/breadcrumbs.md.css +0 -6
  320. package/dist/collection/components/button/button.ios.css +46 -154
  321. package/dist/collection/components/button/button.js +157 -122
  322. package/dist/collection/components/button/button.md.css +50 -150
  323. package/dist/collection/components/buttons/buttons.ios.css +7 -59
  324. package/dist/collection/components/buttons/buttons.js +21 -29
  325. package/dist/collection/components/buttons/buttons.md.css +3 -55
  326. package/dist/collection/components/card/card.ios.css +14 -65
  327. package/dist/collection/components/card/card.js +63 -61
  328. package/dist/collection/components/card/card.md.css +14 -65
  329. package/dist/collection/components/card-content/card-content.ios.css +35 -20
  330. package/dist/collection/components/card-content/card-content.js +10 -12
  331. package/dist/collection/components/card-content/card-content.md.css +35 -20
  332. package/dist/collection/components/card-header/card-header.ios.css +15 -27
  333. package/dist/collection/components/card-header/card-header.js +21 -20
  334. package/dist/collection/components/card-header/card-header.md.css +15 -27
  335. package/dist/collection/components/card-subtitle/card-subtitle.ios.css +0 -12
  336. package/dist/collection/components/card-subtitle/card-subtitle.js +14 -11
  337. package/dist/collection/components/card-subtitle/card-subtitle.md.css +0 -12
  338. package/dist/collection/components/card-title/card-title.ios.css +0 -73
  339. package/dist/collection/components/card-title/card-title.js +14 -11
  340. package/dist/collection/components/card-title/card-title.md.css +0 -73
  341. package/dist/collection/components/checkbox/checkbox.ios.css +117 -242
  342. package/dist/collection/components/checkbox/checkbox.js +160 -165
  343. package/dist/collection/components/checkbox/checkbox.md.css +118 -243
  344. package/dist/collection/components/chip/chip.ios.css +14 -67
  345. package/dist/collection/components/chip/chip.js +20 -116
  346. package/dist/collection/components/chip/chip.md.css +14 -67
  347. package/dist/collection/components/col/col.css +4 -192
  348. package/dist/collection/components/col/col.js +186 -212
  349. package/dist/collection/components/content/content.css +2 -47
  350. package/dist/collection/components/content/content.js +102 -78
  351. package/dist/collection/components/datetime/datetime.ios.css +148 -304
  352. package/dist/collection/components/datetime/datetime.js +1068 -910
  353. package/dist/collection/components/datetime/datetime.md.css +138 -294
  354. package/dist/collection/components/datetime/utils/data.js +18 -19
  355. package/dist/collection/components/datetime/utils/format.js +21 -11
  356. package/dist/collection/components/datetime/utils/manipulation.js +8 -8
  357. package/dist/collection/components/datetime/utils/parse.js +10 -10
  358. package/dist/collection/components/datetime/utils/state.js +8 -2
  359. package/dist/collection/components/datetime/utils/validate.js +4 -5
  360. package/dist/collection/components/datetime-button/datetime-button.ios.css +5 -6
  361. package/dist/collection/components/datetime-button/datetime-button.js +253 -246
  362. package/dist/collection/components/datetime-button/datetime-button.md.css +5 -6
  363. package/dist/collection/components/fab/fab.css +1 -25
  364. package/dist/collection/components/fab/fab.js +25 -22
  365. package/dist/collection/components/fab-button/fab-button.ios.css +6 -18
  366. package/dist/collection/components/fab-button/fab-button.js +117 -83
  367. package/dist/collection/components/fab-button/fab-button.md.css +8 -20
  368. package/dist/collection/components/fab-list/fab-list.css +0 -12
  369. package/dist/collection/components/fab-list/fab-list.js +15 -20
  370. package/dist/collection/components/footer/footer.ios.css +6 -33
  371. package/dist/collection/components/footer/footer.js +65 -151
  372. package/dist/collection/components/footer/footer.md.css +0 -40
  373. package/dist/collection/components/grid/grid.css +0 -12
  374. package/dist/collection/components/grid/grid.js +9 -15
  375. package/dist/collection/components/header/header.ios.css +133 -178
  376. package/dist/collection/components/header/header.js +70 -202
  377. package/dist/collection/components/header/header.md.css +9 -199
  378. package/dist/collection/components/header/header.utils.js +13 -6
  379. package/dist/collection/components/img/img.js +34 -16
  380. package/dist/collection/components/infinite-scroll/infinite-scroll.js +76 -164
  381. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.ios.css +0 -12
  382. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +30 -19
  383. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.md.css +0 -12
  384. package/dist/collection/components/input/input.ios.css +191 -247
  385. package/dist/collection/components/input/input.js +357 -340
  386. package/dist/collection/components/input/input.md.css +285 -234
  387. package/dist/collection/components/input-otp/input-otp.ios.css +60 -105
  388. package/dist/collection/components/input-otp/input-otp.js +432 -437
  389. package/dist/collection/components/input-otp/input-otp.md.css +60 -105
  390. package/dist/collection/components/input-password-toggle/input-password-toggle.js +37 -60
  391. package/dist/collection/components/item/item.ios.css +80 -120
  392. package/dist/collection/components/item/item.js +113 -102
  393. package/dist/collection/components/item/item.md.css +79 -131
  394. package/dist/collection/components/item-divider/item-divider.ios.css +0 -18
  395. package/dist/collection/components/item-divider/item-divider.js +23 -21
  396. package/dist/collection/components/item-divider/item-divider.md.css +0 -18
  397. package/dist/collection/components/item-group/item-group.ios.css +0 -12
  398. package/dist/collection/components/item-group/item-group.js +7 -13
  399. package/dist/collection/components/item-group/item-group.md.css +0 -12
  400. package/dist/collection/components/item-option/item-option.ios.css +29 -136
  401. package/dist/collection/components/item-option/item-option.js +56 -92
  402. package/dist/collection/components/item-option/item-option.md.css +29 -136
  403. package/dist/collection/components/item-options/item-options.ios.css +34 -77
  404. package/dist/collection/components/item-options/item-options.js +17 -20
  405. package/dist/collection/components/item-options/item-options.md.css +34 -77
  406. package/dist/collection/components/item-sliding/{item-sliding.native.css → item-sliding.css} +9 -84
  407. package/dist/collection/components/item-sliding/item-sliding.js +61 -441
  408. package/dist/collection/components/item-sliding/test/test.utils.js +0 -13
  409. package/dist/collection/components/label/label.ios.css +0 -18
  410. package/dist/collection/components/label/label.js +32 -15
  411. package/dist/collection/components/label/label.md.css +0 -18
  412. package/dist/collection/components/list/list.ios.css +14 -54
  413. package/dist/collection/components/list/list.js +19 -55
  414. package/dist/collection/components/list/list.md.css +16 -56
  415. package/dist/collection/components/list-header/list-header.ios.css +38 -82
  416. package/dist/collection/components/list-header/list-header.js +18 -11
  417. package/dist/collection/components/list-header/list-header.md.css +38 -82
  418. package/dist/collection/components/loading/loading.ios.css +1 -13
  419. package/dist/collection/components/loading/loading.js +143 -62
  420. package/dist/collection/components/loading/loading.md.css +1 -13
  421. package/dist/collection/components/menu/menu.ios.css +3 -15
  422. package/dist/collection/components/menu/menu.js +108 -71
  423. package/dist/collection/components/menu/menu.md.css +3 -15
  424. package/dist/collection/components/menu-button/menu-button.ios.css +14 -48
  425. package/dist/collection/components/menu-button/menu-button.js +38 -45
  426. package/dist/collection/components/menu-button/menu-button.md.css +15 -49
  427. package/dist/collection/components/menu-toggle/menu-toggle.js +25 -21
  428. package/dist/collection/components/modal/animations/ios.enter.js +1 -1
  429. package/dist/collection/components/modal/animations/md.enter.js +1 -1
  430. package/dist/collection/components/modal/animations/sheet.js +2 -8
  431. package/dist/collection/components/modal/gestures/sheet.js +32 -86
  432. package/dist/collection/components/modal/gestures/swipe-to-close.js +15 -3
  433. package/dist/collection/components/modal/modal.ios.css +70 -178
  434. package/dist/collection/components/modal/modal.js +404 -272
  435. package/dist/collection/components/modal/modal.md.css +70 -178
  436. package/dist/collection/components/modal/safe-area-utils.js +6 -7
  437. package/dist/collection/components/modal/test/fixtures.js +3 -0
  438. package/dist/collection/components/nav/nav.css +1 -7
  439. package/dist/collection/components/nav/nav.js +72 -256
  440. package/dist/collection/components/nav/view-controller.js +7 -1
  441. package/dist/collection/components/nav-link/nav-link.js +21 -14
  442. package/dist/collection/components/note/note.ios.css +0 -12
  443. package/dist/collection/components/note/note.js +14 -11
  444. package/dist/collection/components/note/note.md.css +0 -12
  445. package/dist/collection/components/picker/picker.ios.css +3 -15
  446. package/dist/collection/components/picker/picker.js +403 -398
  447. package/dist/collection/components/picker/picker.md.css +3 -15
  448. package/dist/collection/components/picker-column/picker-column.css +5 -9
  449. package/dist/collection/components/picker-column/picker-column.js +418 -409
  450. package/dist/collection/components/picker-column-option/picker-column-option.ios.css +0 -6
  451. package/dist/collection/components/picker-column-option/picker-column-option.js +38 -42
  452. package/dist/collection/components/picker-column-option/picker-column-option.md.css +6 -7
  453. package/dist/collection/components/popover/animations/ios.enter.js +1 -2
  454. package/dist/collection/components/popover/animations/md.enter.js +1 -2
  455. package/dist/collection/components/popover/popover.ios.css +2 -15
  456. package/dist/collection/components/popover/popover.js +313 -199
  457. package/dist/collection/components/popover/popover.md.css +2 -15
  458. package/dist/collection/components/popover/test/fixture.js +1 -0
  459. package/dist/collection/components/popover/utils.js +4 -6
  460. package/dist/collection/components/progress-bar/progress-bar.ios.css +17 -48
  461. package/dist/collection/components/progress-bar/progress-bar.js +33 -65
  462. package/dist/collection/components/progress-bar/progress-bar.md.css +17 -48
  463. package/dist/collection/components/radio/radio.ios.css +102 -207
  464. package/dist/collection/components/radio/radio.js +108 -77
  465. package/dist/collection/components/radio/radio.md.css +102 -207
  466. package/dist/collection/components/radio-group/radio-group.ios.css +19 -43
  467. package/dist/collection/components/radio-group/radio-group.js +107 -113
  468. package/dist/collection/components/radio-group/radio-group.md.css +19 -43
  469. package/dist/collection/components/radio-group/test/fixtures.js +2 -0
  470. package/dist/collection/components/range/range.ios.css +85 -128
  471. package/dist/collection/components/range/range.js +303 -245
  472. package/dist/collection/components/range/range.md.css +85 -128
  473. package/dist/collection/components/refresher/refresher.ios.css +1 -14
  474. package/dist/collection/components/refresher/refresher.js +117 -88
  475. package/dist/collection/components/refresher/refresher.md.css +2 -15
  476. package/dist/collection/components/refresher-content/refresher-content.js +47 -31
  477. package/dist/collection/components/reorder/reorder.ios.css +0 -6
  478. package/dist/collection/components/reorder/reorder.js +7 -33
  479. package/dist/collection/components/reorder/reorder.md.css +0 -6
  480. package/dist/collection/components/reorder-group/reorder-group.css +0 -6
  481. package/dist/collection/components/reorder-group/reorder-group.js +47 -22
  482. package/dist/collection/components/ripple-effect/{ripple-effect.common.css → ripple-effect.css} +1 -7
  483. package/dist/collection/components/ripple-effect/ripple-effect.js +17 -26
  484. package/dist/collection/components/route/route.js +39 -14
  485. package/dist/collection/components/route-redirect/route-redirect.js +31 -0
  486. package/dist/collection/components/router/router.js +37 -37
  487. package/dist/collection/components/router/utils/dom.js +25 -7
  488. package/dist/collection/components/router/utils/matching.js +7 -9
  489. package/dist/collection/components/router/utils/parser.js +1 -1
  490. package/dist/collection/components/router/utils/path.js +0 -1
  491. package/dist/collection/components/router-link/router-link.css +2 -8
  492. package/dist/collection/components/router-link/router-link.js +40 -19
  493. package/dist/collection/components/router-outlet/router-outlet.css +1 -7
  494. package/dist/collection/components/router-outlet/router-outlet.js +83 -25
  495. package/dist/collection/components/row/row.css +0 -16
  496. package/dist/collection/components/row/row.js +2 -9
  497. package/dist/collection/components/searchbar/searchbar.ios.css +18 -56
  498. package/dist/collection/components/searchbar/searchbar.js +321 -380
  499. package/dist/collection/components/searchbar/searchbar.md.css +18 -56
  500. package/dist/collection/components/segment/segment.ios.css +2 -45
  501. package/dist/collection/components/segment/segment.js +126 -94
  502. package/dist/collection/components/segment/segment.md.css +2 -45
  503. package/dist/collection/components/segment-button/segment-button.ios.css +105 -146
  504. package/dist/collection/components/segment-button/segment-button.js +49 -46
  505. package/dist/collection/components/segment-button/segment-button.md.css +107 -148
  506. package/dist/collection/components/segment-content/segment-content.js +1 -1
  507. package/dist/collection/components/segment-view/segment-view.ios.css +0 -6
  508. package/dist/collection/components/segment-view/segment-view.js +28 -27
  509. package/dist/collection/components/segment-view/segment-view.md.css +0 -6
  510. package/dist/collection/components/select/select.ios.css +206 -351
  511. package/dist/collection/components/select/select.js +431 -444
  512. package/dist/collection/components/select/select.md.css +230 -383
  513. package/dist/collection/components/select-modal/select-modal.ios.css +45 -293
  514. package/dist/collection/components/select-modal/select-modal.js +37 -79
  515. package/dist/collection/components/select-modal/select-modal.md.css +43 -273
  516. package/dist/collection/components/select-modal/test/fixtures.js +8 -1
  517. package/dist/collection/components/select-option/select-option.js +48 -15
  518. package/dist/collection/components/select-popover/select-popover.ios.css +124 -188
  519. package/dist/collection/components/select-popover/select-popover.js +44 -37
  520. package/dist/collection/components/select-popover/select-popover.md.css +47 -228
  521. package/dist/collection/components/select-popover/test/fixtures.js +8 -1
  522. package/dist/collection/components/skeleton-text/skeleton-text.css +0 -6
  523. package/dist/collection/components/skeleton-text/skeleton-text.js +15 -15
  524. package/dist/collection/components/spinner/{spinner.ionic.css → spinner.css} +10 -78
  525. package/dist/collection/components/spinner/spinner.js +26 -55
  526. package/dist/collection/components/split-pane/split-pane.ios.css +2 -20
  527. package/dist/collection/components/split-pane/split-pane.js +33 -28
  528. package/dist/collection/components/split-pane/split-pane.md.css +2 -20
  529. package/dist/collection/components/tab/tab.js +17 -10
  530. package/dist/collection/components/tab-bar/tab-bar.ios.css +43 -86
  531. package/dist/collection/components/tab-bar/tab-bar.js +44 -190
  532. package/dist/collection/components/tab-bar/tab-bar.md.css +43 -86
  533. package/dist/collection/components/tab-button/tab-button.ios.css +95 -171
  534. package/dist/collection/components/tab-button/tab-button.js +68 -74
  535. package/dist/collection/components/tab-button/tab-button.md.css +93 -137
  536. package/dist/collection/components/tabs/tabs.css +1 -7
  537. package/dist/collection/components/tabs/tabs.js +33 -23
  538. package/dist/collection/components/text/text.css +0 -6
  539. package/dist/collection/components/text/text.js +12 -7
  540. package/dist/collection/components/textarea/textarea.ios.css +221 -329
  541. package/dist/collection/components/textarea/textarea.js +302 -334
  542. package/dist/collection/components/textarea/textarea.md.css +231 -358
  543. package/dist/collection/components/thumbnail/thumbnail.css +0 -6
  544. package/dist/collection/components/thumbnail/thumbnail.js +2 -9
  545. package/dist/collection/components/title/title.ios.css +4 -32
  546. package/dist/collection/components/title/title.js +23 -13
  547. package/dist/collection/components/title/title.md.css +4 -39
  548. package/dist/collection/components/toast/animations/utils.js +1 -1
  549. package/dist/collection/components/toast/toast.ios.css +45 -84
  550. package/dist/collection/components/toast/toast.js +232 -178
  551. package/dist/collection/components/toast/toast.md.css +45 -84
  552. package/dist/collection/components/toggle/toggle.ios.css +127 -247
  553. package/dist/collection/components/toggle/toggle.js +175 -177
  554. package/dist/collection/components/toggle/toggle.md.css +127 -245
  555. package/dist/collection/components/toolbar/toolbar.ios.css +47 -90
  556. package/dist/collection/components/toolbar/toolbar.js +25 -222
  557. package/dist/collection/components/toolbar/toolbar.md.css +47 -90
  558. package/dist/collection/global/config.js +4 -6
  559. package/dist/collection/global/ionic-global.js +20 -242
  560. package/dist/collection/index.js +1 -1
  561. package/dist/collection/utils/animation/animation.js +3 -3
  562. package/dist/collection/utils/config.js +5 -4
  563. package/dist/collection/utils/focus-controller/index.js +1 -1
  564. package/dist/collection/utils/focus-trap.js +5 -16
  565. package/dist/collection/utils/focus-visible.js +0 -22
  566. package/dist/collection/utils/forms/index.js +1 -1
  567. package/dist/collection/utils/forms/start-container-controller.js +132 -0
  568. package/dist/collection/utils/forms/validity.js +0 -31
  569. package/dist/collection/utils/framework-delegate.js +5 -9
  570. package/dist/collection/utils/gesture/gesture-controller.js +15 -8
  571. package/dist/collection/utils/gesture/index.js +10 -2
  572. package/dist/collection/utils/gesture/listener.js +1 -1
  573. package/dist/collection/utils/hardware-back-button.js +3 -18
  574. package/dist/collection/utils/helpers.js +5 -72
  575. package/dist/collection/utils/input-shims/hacks/scroll-assist.js +4 -5
  576. package/dist/collection/utils/input-shims/hacks/scroll-data.js +1 -2
  577. package/dist/collection/utils/keyboard/keyboard-controller.js +6 -8
  578. package/dist/collection/utils/keyboard/keyboard.js +1 -1
  579. package/dist/collection/utils/logging/index.js +23 -4
  580. package/dist/collection/utils/media.js +0 -1
  581. package/dist/collection/utils/menu-controller/animations/overlay.js +3 -3
  582. package/dist/collection/utils/menu-controller/animations/push.js +1 -2
  583. package/dist/collection/utils/menu-controller/animations/reveal.js +1 -2
  584. package/dist/collection/utils/menu-controller/index.js +1 -2
  585. package/dist/collection/utils/native/haptic.js +2 -3
  586. package/dist/collection/utils/native/keyboard.js +2 -2
  587. package/dist/collection/utils/native/status-bar.js +1 -1
  588. package/dist/collection/utils/overlay-control-label.js +11 -13
  589. package/dist/collection/utils/overlays.js +45 -312
  590. package/dist/collection/utils/platform.js +4 -5
  591. package/dist/collection/utils/rtl/dir.js +1 -1
  592. package/dist/collection/utils/sanitization/index.js +2 -2
  593. package/dist/collection/utils/select-option-render.js +1 -2
  594. package/dist/collection/utils/slot-mutation-controller.js +1 -2
  595. package/dist/collection/utils/test/playwright/apply-keyboard-focus.js +1 -1
  596. package/dist/collection/utils/test/playwright/drag-element.js +11 -35
  597. package/dist/collection/utils/test/playwright/generator.js +25 -51
  598. package/dist/collection/utils/test/playwright/page/event-spy.js +11 -12
  599. package/dist/collection/utils/test/playwright/page/utils/goto.js +5 -15
  600. package/dist/collection/utils/test/playwright/page/utils/set-content.js +4 -27
  601. package/dist/collection/utils/test/playwright/page/utils/set-ion-viewport.js +2 -3
  602. package/dist/collection/utils/test/press-keys.js +10 -17
  603. package/dist/collection/utils/theme.js +7 -26
  604. package/dist/collection/utils/transition/ios.transition.js +9 -14
  605. package/dist/collection/utils/transition/md.transition.js +3 -4
  606. package/dist/docs.json +524 -10028
  607. package/dist/esm/{animation-ChfHU0RG.js → animation-CGFdmGk9.js} +5 -5
  608. package/dist/esm/{app-globals-D1OOQlqq.js → app-globals-CYmMeGdU.js} +1 -1
  609. package/dist/esm/{button-active-CPYK0dNo.js → button-active--80YqSHA.js} +3 -3
  610. package/dist/esm/{capacitor-DG_4yVXz.js → capacitor-CFERIeaU.js} +1 -1
  611. package/dist/esm/{config-BwKpO3Is.js → config-DWCzVL3Y.js} +5 -4
  612. package/dist/esm/{dir-C53feagD.js → dir-B-FxiyeI.js} +1 -1
  613. package/dist/{cjs/focus-visible-BIj-I3-C.js → esm/focus-visible-BmVRXR1y.js} +1 -27
  614. package/dist/esm/{format-2WlZcMvG.js → format-Dcwga61t.js} +41 -31
  615. package/dist/esm/{framework-delegate-DO2QXccA.js → framework-delegate--ajhSeKH.js} +6 -10
  616. package/dist/esm/{gesture-controller-BTEOs1at.js → gesture-controller-TXPDHL13.js} +15 -8
  617. package/dist/esm/{haptic-BWlRCqa-.js → haptic-Cq4UAeka.js} +3 -4
  618. package/dist/esm/hardware-back-button-gLJHMX_F.js +115 -0
  619. package/dist/esm/{helpers-DfF5_wJc.js → helpers-DexiPLIC.js} +7 -73
  620. package/dist/esm/{index-BSDDOljg.js → index-8s8kZKJ7.js} +5 -5
  621. package/dist/esm/{index-DNY2GOUg.js → index-BCgUwrV0.js} +3 -4
  622. package/dist/esm/{index-B4Kq2YNk.js → index-BvabGprD.js} +1 -2
  623. package/dist/esm/{index-Mq5pCWmZ.js → index-CKM1DdGm.js} +3 -3
  624. package/dist/esm/{index-C0EQceqV.js → index-ChhhtsGZ.js} +34 -66
  625. package/dist/esm/{index-7eS8XtuU.js → index-CumkqGQF.js} +12 -13
  626. package/dist/esm/{index-CfgBF1SE.js → index-DppOcPFQ.js} +10 -4
  627. package/dist/esm/index-ZjP4CjeZ.js +7 -0
  628. package/dist/esm/{index-taYRjZGp.js → index-_Za5VB9w.js} +2 -2
  629. package/dist/esm/index.js +17 -16
  630. package/dist/esm/{input-shims-tZfqB5a5.js → input-shims-BB0AKb_k.js} +11 -14
  631. package/dist/esm/input.utils-B1ValN_N.js +33 -0
  632. package/dist/esm/ion-accordion_2.entry.js +378 -382
  633. package/dist/esm/ion-action-sheet.entry.js +178 -86
  634. package/dist/esm/ion-alert.entry.js +250 -125
  635. package/dist/esm/ion-app_8.entry.js +460 -607
  636. package/dist/esm/ion-avatar_3.entry.js +19 -125
  637. package/dist/esm/ion-back-button.entry.js +64 -49
  638. package/dist/esm/ion-backdrop.entry.js +23 -22
  639. package/dist/esm/ion-breadcrumb_2.entry.js +211 -169
  640. package/dist/esm/ion-button_2.entry.js +152 -117
  641. package/dist/esm/ion-card_5.entry.js +109 -79
  642. package/dist/esm/ion-checkbox.entry.js +163 -129
  643. package/dist/esm/ion-chip.entry.js +21 -56
  644. package/dist/esm/ion-col_3.entry.js +186 -61
  645. package/dist/esm/ion-datetime-button.entry.js +255 -247
  646. package/dist/esm/ion-datetime.entry.js +2768 -0
  647. package/dist/esm/ion-fab_3.entry.js +154 -112
  648. package/dist/esm/ion-img.entry.js +34 -16
  649. package/dist/esm/ion-infinite-scroll_2.entry.js +108 -156
  650. package/dist/esm/ion-input-otp.entry.js +435 -437
  651. package/dist/esm/ion-input-password-toggle.entry.js +40 -64
  652. package/dist/esm/ion-input.entry.js +349 -309
  653. package/dist/esm/ion-item-option_3.entry.js +136 -511
  654. package/dist/esm/ion-item_8.entry.js +217 -189
  655. package/dist/esm/ion-loading.entry.js +151 -68
  656. package/dist/esm/ion-menu_3.entry.js +181 -137
  657. package/dist/esm/ion-modal.entry.js +528 -458
  658. package/dist/esm/ion-nav_2.entry.js +103 -163
  659. package/dist/esm/ion-picker-column-option.entry.js +39 -39
  660. package/dist/esm/ion-picker-column.entry.js +421 -409
  661. package/dist/esm/ion-picker.entry.js +405 -400
  662. package/dist/esm/ion-popover.entry.js +323 -211
  663. package/dist/esm/ion-progress-bar.entry.js +35 -47
  664. package/dist/esm/ion-radio_2.entry.js +216 -161
  665. package/dist/esm/ion-range.entry.js +307 -249
  666. package/dist/esm/ion-refresher_2.entry.js +174 -121
  667. package/dist/esm/ion-reorder_2.entry.js +59 -53
  668. package/dist/esm/ion-ripple-effect.entry.js +18 -26
  669. package/dist/esm/ion-route_4.entry.js +178 -75
  670. package/dist/esm/ion-searchbar.entry.js +308 -331
  671. package/dist/esm/ion-segment-content.entry.js +2 -2
  672. package/dist/esm/ion-segment-view.entry.js +28 -27
  673. package/dist/esm/ion-segment_2.entry.js +177 -141
  674. package/dist/esm/ion-select-modal.entry.js +49 -69
  675. package/dist/esm/ion-select_3.entry.js +507 -429
  676. package/dist/esm/ion-spinner.entry.js +28 -36
  677. package/dist/esm/ion-split-pane.entry.js +34 -25
  678. package/dist/esm/ion-tab-bar_2.entry.js +115 -178
  679. package/dist/esm/ion-tab_2.entry.js +54 -29
  680. package/dist/esm/ion-text.entry.js +13 -7
  681. package/dist/esm/ion-textarea.entry.js +302 -308
  682. package/dist/esm/ion-toast.entry.js +243 -148
  683. package/dist/esm/ion-toggle.entry.js +184 -187
  684. package/dist/esm/ionic-global-BVB7BrLT.js +151 -0
  685. package/dist/esm/ionic.js +5 -5
  686. package/dist/esm/{ios.transition-C3r-0w96.js → ios.transition-BdhybwLl.js} +14 -20
  687. package/dist/esm/{item-multiple-inputs-C6onMFOo.js → item-multiple-inputs-rU8VaNNg.js} +1 -1
  688. package/dist/esm/{keyboard-BzbtCDwZ.js → keyboard-Cj8mLJeq.js} +4 -5
  689. package/dist/esm/{keyboard-DYGmALa7.js → keyboard-DAF8GNJ9.js} +3 -3
  690. package/dist/esm/keyboard-controller-DEwoa1ev.js +165 -0
  691. package/dist/esm/loader.js +5 -5
  692. package/dist/esm/{md.transition-CPHOF5T9.js → md.transition-B5lqKGCs.js} +8 -10
  693. package/dist/esm/{overlay-control-label-CODBQrPj.js → overlay-control-label-BSQPZ79H.js} +11 -13
  694. package/dist/esm/{overlays-C1NQMs9y.js → overlays-CjWwtvf1.js} +57 -333
  695. package/dist/esm/{select-option-render-BlKZ2H83.js → select-option-render-C4m76VGH.js} +3 -4
  696. package/dist/esm/slot-mutation-controller-u741eD3Z.js +393 -0
  697. package/dist/esm/{status-tap-BueE8Coq.js → status-tap-DpLhkDWs.js} +3 -4
  698. package/dist/esm/{swipe-back-qmvTRnSq.js → swipe-back-cz4-lyG3.js} +5 -6
  699. package/dist/esm/theme-byZM6qHV.js +48 -0
  700. package/dist/esm/validity-DJztqcrH.js +17 -0
  701. package/dist/html.html-data.json +146 -2713
  702. package/dist/ionic/index.esm.js +1 -1
  703. package/dist/ionic/ionic.esm.js +1 -1
  704. package/dist/ionic/p-06533d51.entry.js +4 -0
  705. package/dist/ionic/p-08443c08.entry.js +4 -0
  706. package/dist/ionic/p-0FNc80PN.js +4 -0
  707. package/dist/ionic/p-141f5b47.entry.js +4 -0
  708. package/dist/ionic/p-14a5e8f5.entry.js +4 -0
  709. package/dist/ionic/p-19269e04.entry.js +4 -0
  710. package/dist/ionic/p-19abbc33.entry.js +4 -0
  711. package/dist/ionic/p-1edf0573.entry.js +4 -0
  712. package/dist/ionic/p-40424a88.entry.js +4 -0
  713. package/dist/ionic/p-4204184c.entry.js +4 -0
  714. package/dist/ionic/p-4bc3ecdb.entry.js +4 -0
  715. package/dist/ionic/p-4eOQC00Z.js +4 -0
  716. package/dist/ionic/p-4eed9ca1.entry.js +4 -0
  717. package/dist/ionic/p-53bac1c9.entry.js +4 -0
  718. package/dist/ionic/p-5506caeb.entry.js +4 -0
  719. package/dist/ionic/p-5521dc1f.entry.js +4 -0
  720. package/dist/ionic/p-5993a77f.entry.js +4 -0
  721. package/dist/ionic/p-5c3626de.entry.js +4 -0
  722. package/dist/ionic/p-5d3b411c.entry.js +4 -0
  723. package/dist/ionic/p-60576951.entry.js +4 -0
  724. package/dist/ionic/p-7116e558.entry.js +4 -0
  725. package/dist/ionic/p-711a8319.entry.js +4 -0
  726. package/dist/ionic/p-71419a55.entry.js +4 -0
  727. package/dist/ionic/p-79325ffe.entry.js +4 -0
  728. package/dist/ionic/p-7bb3e957.entry.js +4 -0
  729. package/dist/ionic/p-82525fb0.entry.js +4 -0
  730. package/dist/ionic/p-84a38904.entry.js +4 -0
  731. package/dist/ionic/p-865fa114.entry.js +4 -0
  732. package/dist/ionic/p-8e1d9e3a.entry.js +4 -0
  733. package/dist/ionic/p-8f204f1e.entry.js +4 -0
  734. package/dist/ionic/p-9055e897.entry.js +4 -0
  735. package/dist/ionic/p-9658e083.entry.js +4 -0
  736. package/dist/ionic/p-988baee1.entry.js +4 -0
  737. package/dist/ionic/p-9nmHvEvw.js +4 -0
  738. package/dist/ionic/p-B-FxiyeI.js +4 -0
  739. package/dist/ionic/p-BB0LlG4y.js +4 -0
  740. package/dist/ionic/p-BMPN55of.js +4 -0
  741. package/dist/ionic/p-BQ8oNV0v.js +4 -0
  742. package/dist/ionic/p-BSQPZ79H.js +4 -0
  743. package/dist/ionic/p-BhamHSw3.js +4 -0
  744. package/dist/ionic/p-BjvtSsVI.js +4 -0
  745. package/dist/ionic/p-BkfAWuv6.js +4 -0
  746. package/dist/ionic/p-BmVRXR1y.js +4 -0
  747. package/dist/ionic/p-BvabGprD.js +4 -0
  748. package/{components/p-Va26YR7l.js → dist/ionic/p-BwIp10KV.js} +1 -1
  749. package/dist/ionic/p-C-94tAim.js +4 -0
  750. package/dist/ionic/p-C6eME8Ey.js +4 -0
  751. package/dist/ionic/p-CIGNaXM1.js +4 -0
  752. package/dist/ionic/p-CKUuSnDR.js +4 -0
  753. package/dist/ionic/p-CMRtMbJc.js +4 -0
  754. package/dist/ionic/p-CPcPmkGv.js +4 -0
  755. package/dist/ionic/p-CQ_4TirR.js +4 -0
  756. package/dist/ionic/p-CaRuIadB.js +4 -0
  757. package/dist/ionic/p-Cdjxf_yg.js +4 -0
  758. package/dist/ionic/p-ChhhtsGZ.js +5 -0
  759. package/dist/ionic/p-CmKf4pgI.js +4 -0
  760. package/dist/ionic/p-D5t_-oMk.js +4 -0
  761. package/dist/ionic/p-D94b61er.js +4 -0
  762. package/dist/ionic/p-DAztxQR0.js +4 -0
  763. package/dist/ionic/p-DCI3rXQo.js +4 -0
  764. package/dist/ionic/p-DDhtUaaA.js +4 -0
  765. package/dist/ionic/p-DJztqcrH.js +4 -0
  766. package/dist/ionic/p-DWCzVL3Y.js +4 -0
  767. package/dist/ionic/p-DkUB-ROc.js +4 -0
  768. package/dist/ionic/p-Dn0mqQ_R.js +4 -0
  769. package/dist/ionic/p-I3In7hMC.js +4 -0
  770. package/dist/ionic/p-T71k3C35.js +4 -0
  771. package/dist/ionic/p-TXPDHL13.js +4 -0
  772. package/dist/ionic/p-ZjP4CjeZ.js +4 -0
  773. package/dist/ionic/p-a71232d6.entry.js +4 -0
  774. package/dist/ionic/p-a73d8742.entry.js +4 -0
  775. package/dist/ionic/p-a8421d18.entry.js +4 -0
  776. package/dist/ionic/p-a8c2c343.entry.js +4 -0
  777. package/dist/ionic/p-acf0a6af.entry.js +4 -0
  778. package/dist/ionic/p-ad98e3ff.entry.js +4 -0
  779. package/dist/ionic/p-af5166f5.entry.js +4 -0
  780. package/dist/ionic/p-bc2bad5f.entry.js +4 -0
  781. package/dist/ionic/p-be08d500.entry.js +4 -0
  782. package/dist/ionic/p-be9a4f51.entry.js +4 -0
  783. package/dist/ionic/p-byZM6qHV.js +4 -0
  784. package/dist/ionic/p-ccc5044d.entry.js +4 -0
  785. package/dist/ionic/p-ce32912b.entry.js +4 -0
  786. package/dist/ionic/p-ded69ceb.entry.js +4 -0
  787. package/dist/ionic/p-e0c6e31e.entry.js +4 -0
  788. package/dist/ionic/p-e1e5b507.entry.js +4 -0
  789. package/dist/ionic/p-e8c3e08a.entry.js +4 -0
  790. package/dist/ionic/p-ed5d540d.entry.js +4 -0
  791. package/dist/ionic/p-f046aa37.entry.js +4 -0
  792. package/dist/ionic/p-f2802440.entry.js +4 -0
  793. package/dist/ionic/p-f402f5a4.entry.js +4 -0
  794. package/dist/ionic/p-fe1bfbcf.entry.js +4 -0
  795. package/dist/types/components/accordion/accordion.d.ts +3 -6
  796. package/dist/types/components/accordion-group/accordion-group.d.ts +1 -12
  797. package/dist/types/components/action-sheet/action-sheet-interface.d.ts +7 -3
  798. package/dist/types/components/action-sheet/action-sheet.d.ts +2 -3
  799. package/dist/types/components/alert/alert-interface.d.ts +7 -3
  800. package/dist/types/components/alert/alert.d.ts +2 -3
  801. package/dist/types/components/app/app.d.ts +5 -4
  802. package/dist/types/components/avatar/avatar.d.ts +0 -32
  803. package/dist/types/components/back-button/back-button.d.ts +1 -2
  804. package/dist/types/components/backdrop/backdrop.d.ts +0 -4
  805. package/dist/types/components/badge/badge.d.ts +1 -34
  806. package/dist/types/components/breadcrumb/breadcrumb.d.ts +1 -4
  807. package/dist/types/components/breadcrumbs/breadcrumbs.d.ts +2 -2
  808. package/dist/types/components/button/button.d.ts +8 -23
  809. package/dist/types/components/buttons/buttons.d.ts +1 -5
  810. package/dist/types/components/card/card.d.ts +1 -8
  811. package/dist/types/components/card-content/card-content.d.ts +1 -2
  812. package/dist/types/components/card-header/card-header.d.ts +2 -3
  813. package/dist/types/components/card-subtitle/card-subtitle.d.ts +1 -2
  814. package/dist/types/components/card-title/card-title.d.ts +1 -2
  815. package/dist/types/components/checkbox/checkbox.d.ts +4 -14
  816. package/dist/types/components/chip/chip.d.ts +1 -26
  817. package/dist/types/components/col/col.d.ts +5 -52
  818. package/dist/types/components/content/content.d.ts +0 -3
  819. package/dist/types/components/datetime/datetime.d.ts +1 -26
  820. package/dist/types/components/datetime/utils/data.d.ts +5 -5
  821. package/dist/types/components/datetime-button/datetime-button.d.ts +1 -2
  822. package/dist/types/components/fab/fab.d.ts +0 -4
  823. package/dist/types/components/fab-button/fab-button.d.ts +3 -5
  824. package/dist/types/components/fab-list/fab-list.d.ts +0 -4
  825. package/dist/types/components/footer/footer.d.ts +3 -20
  826. package/dist/types/components/grid/grid.d.ts +0 -4
  827. package/dist/types/components/header/header.d.ts +3 -26
  828. package/dist/types/components/header/header.utils.d.ts +5 -4
  829. package/dist/types/components/img/img.d.ts +1 -2
  830. package/dist/types/components/infinite-scroll/infinite-scroll.d.ts +0 -21
  831. package/dist/types/components/infinite-scroll-content/infinite-scroll-content.d.ts +0 -4
  832. package/dist/types/components/input/input.d.ts +17 -40
  833. package/dist/types/components/input-otp/input-otp.d.ts +0 -37
  834. package/dist/types/components/input-password-toggle/input-password-toggle.d.ts +0 -2
  835. package/dist/types/components/item/item.d.ts +4 -11
  836. package/dist/types/components/item-divider/item-divider.d.ts +1 -2
  837. package/dist/types/components/item-group/item-group.d.ts +0 -4
  838. package/dist/types/components/item-option/item-option.d.ts +1 -18
  839. package/dist/types/components/item-options/item-options.d.ts +0 -4
  840. package/dist/types/components/item-sliding/item-sliding.d.ts +1 -47
  841. package/dist/types/components/item-sliding/test/test.utils.d.ts +0 -13
  842. package/dist/types/components/label/label.d.ts +1 -2
  843. package/dist/types/components/list/list.d.ts +1 -15
  844. package/dist/types/components/list-header/list-header.d.ts +1 -2
  845. package/dist/types/components/loading/loading-interface.d.ts +7 -2
  846. package/dist/types/components/loading/loading.d.ts +2 -3
  847. package/dist/types/components/menu/menu.d.ts +0 -3
  848. package/dist/types/components/menu-button/menu-button.d.ts +1 -3
  849. package/dist/types/components/menu-toggle/menu-toggle.d.ts +0 -3
  850. package/dist/types/components/modal/gestures/sheet.d.ts +1 -1
  851. package/dist/types/components/modal/modal-interface.d.ts +16 -4
  852. package/dist/types/components/modal/modal.d.ts +12 -15
  853. package/dist/types/components/nav/nav-interface.d.ts +1 -10
  854. package/dist/types/components/nav/nav.d.ts +3 -27
  855. package/dist/types/components/nav-link/nav-link.d.ts +0 -4
  856. package/dist/types/components/note/note.d.ts +1 -2
  857. package/dist/types/components/picker/picker.d.ts +1 -2
  858. package/dist/types/components/picker-column/picker-column.d.ts +1 -2
  859. package/dist/types/components/picker-column-option/picker-column-option.d.ts +0 -4
  860. package/dist/types/components/popover/popover-interface.d.ts +6 -3
  861. package/dist/types/components/popover/popover.d.ts +5 -6
  862. package/dist/types/components/progress-bar/progress-bar.d.ts +1 -10
  863. package/dist/types/components/radio/radio.d.ts +1 -2
  864. package/dist/types/components/radio-group/radio-group.d.ts +0 -12
  865. package/dist/types/components/range/range.d.ts +1 -2
  866. package/dist/types/components/refresher/refresher.d.ts +1 -2
  867. package/dist/types/components/refresher-content/refresher-content.d.ts +0 -4
  868. package/dist/types/components/reorder/reorder.d.ts +0 -9
  869. package/dist/types/components/reorder-group/reorder-group.d.ts +0 -4
  870. package/dist/types/components/ripple-effect/ripple-effect.d.ts +0 -4
  871. package/dist/types/components/route/route.d.ts +1 -5
  872. package/dist/types/components/router/router.d.ts +0 -4
  873. package/dist/types/components/router-link/router-link.d.ts +0 -4
  874. package/dist/types/components/router-outlet/router-outlet.d.ts +8 -4
  875. package/dist/types/components/row/row.d.ts +0 -4
  876. package/dist/types/components/searchbar/searchbar.d.ts +11 -57
  877. package/dist/types/components/segment/segment.d.ts +1 -2
  878. package/dist/types/components/segment-button/segment-button.d.ts +1 -2
  879. package/dist/types/components/select/select.d.ts +26 -55
  880. package/dist/types/components/select-modal/select-modal.d.ts +0 -8
  881. package/dist/types/components/select-option/select-option.d.ts +4 -7
  882. package/dist/types/components/select-popover/select-popover.d.ts +0 -3
  883. package/dist/types/components/skeleton-text/skeleton-text.d.ts +0 -4
  884. package/dist/types/components/spinner/spinner.d.ts +0 -15
  885. package/dist/types/components/split-pane/split-pane.d.ts +0 -4
  886. package/dist/types/components/tab/tab.d.ts +0 -4
  887. package/dist/types/components/tab-bar/tab-bar-interface.d.ts +0 -1
  888. package/dist/types/components/tab-bar/tab-bar.d.ts +3 -41
  889. package/dist/types/components/tab-button/tab-button.d.ts +1 -12
  890. package/dist/types/components/tabs/tabs.d.ts +0 -3
  891. package/dist/types/components/text/text.d.ts +1 -2
  892. package/dist/types/components/textarea/textarea.d.ts +16 -58
  893. package/dist/types/components/thumbnail/thumbnail.d.ts +0 -4
  894. package/dist/types/components/title/title.d.ts +0 -4
  895. package/dist/types/components/toast/animations/utils.d.ts +2 -2
  896. package/dist/types/components/toast/toast-interface.d.ts +7 -3
  897. package/dist/types/components/toast/toast.d.ts +2 -19
  898. package/dist/types/components/toggle/toggle.d.ts +1 -15
  899. package/dist/types/components/toolbar/toolbar.d.ts +3 -43
  900. package/dist/types/components.d.ts +263 -2171
  901. package/dist/types/global/ionic-global.d.ts +2 -28
  902. package/dist/types/index.d.ts +1 -1
  903. package/dist/types/interface.d.ts +0 -4
  904. package/dist/types/utils/config.d.ts +3 -114
  905. package/dist/types/utils/focus-trap.d.ts +1 -1
  906. package/dist/types/utils/focus-visible.d.ts +0 -13
  907. package/dist/types/utils/forms/index.d.ts +1 -1
  908. package/dist/types/utils/forms/start-container-controller.d.ts +34 -0
  909. package/dist/types/utils/forms/validity.d.ts +0 -7
  910. package/dist/types/utils/helpers.d.ts +0 -22
  911. package/dist/types/utils/logging/index.d.ts +2 -1
  912. package/dist/types/utils/overlay-control-label.d.ts +9 -11
  913. package/dist/types/utils/overlays-interface.d.ts +1 -31
  914. package/dist/types/utils/overlays.d.ts +12 -10
  915. package/dist/types/utils/test/playwright/drag-element.d.ts +3 -16
  916. package/dist/types/utils/test/playwright/generator.d.ts +2 -31
  917. package/dist/types/utils/test/playwright/playwright-page.d.ts +1 -1
  918. package/dist/types/utils/test/playwright/testExpect.d.ts +1 -1
  919. package/dist/types/utils/theme.d.ts +0 -9
  920. package/hydrate/index.js +10577 -12217
  921. package/hydrate/index.mjs +10577 -12217
  922. package/package.json +56 -17
  923. package/components/ion-divider.d.ts +0 -11
  924. package/components/ion-divider.js +0 -4
  925. package/components/ion-gallery-item.d.ts +0 -11
  926. package/components/ion-gallery-item.js +0 -4
  927. package/components/ion-gallery.d.ts +0 -11
  928. package/components/ion-gallery.js +0 -4
  929. package/components/ion-picker-legacy-column.d.ts +0 -11
  930. package/components/ion-picker-legacy-column.js +0 -4
  931. package/components/ion-picker-legacy.d.ts +0 -11
  932. package/components/ion-picker-legacy.js +0 -4
  933. package/components/p-6hUZIMBp.js +0 -4
  934. package/components/p-9mfpAwJh.js +0 -4
  935. package/components/p-B2aAAEfp.js +0 -4
  936. package/components/p-B2lpqDWK.js +0 -4
  937. package/components/p-BDoEcs72.js +0 -4
  938. package/components/p-BDqjX7Z_.js +0 -4
  939. package/components/p-BE21dB_a.js +0 -4
  940. package/components/p-BFpXpzD-.js +0 -4
  941. package/components/p-BTEOs1at.js +0 -4
  942. package/components/p-BUNIyvqe.js +0 -4
  943. package/components/p-BYSs-jZz.js +0 -4
  944. package/components/p-BYoGvMgh.js +0 -4
  945. package/components/p-BYrCPOBM.js +0 -4
  946. package/components/p-BbVhJs-a.js +0 -4
  947. package/components/p-BhRXIcSN.js +0 -4
  948. package/components/p-BjW8SOqw.js +0 -4
  949. package/components/p-BsiHrVPa.js +0 -4
  950. package/components/p-BwKpO3Is.js +0 -4
  951. package/components/p-Bz8jnuiy.js +0 -4
  952. package/components/p-C-Ea1l5K.js +0 -4
  953. package/components/p-C3X10Pc6.js +0 -4
  954. package/components/p-C53feagD.js +0 -4
  955. package/components/p-CA4M5WkT.js +0 -4
  956. package/components/p-CH6jbAEI.js +0 -4
  957. package/components/p-CJE5t2qs.js +0 -4
  958. package/components/p-CODBQrPj.js +0 -4
  959. package/components/p-CUbb1HkU.js +0 -4
  960. package/components/p-CVYFPBs-.js +0 -4
  961. package/components/p-CVoLDZ7z.js +0 -4
  962. package/components/p-CZrORZXS.js +0 -4
  963. package/components/p-Cc3oC60a.js +0 -4
  964. package/components/p-Cl0B-RWe.js +0 -4
  965. package/components/p-CmoUesXp.js +0 -4
  966. package/components/p-CyNW8ypn.js +0 -4
  967. package/components/p-CzxyxYID.js +0 -4
  968. package/components/p-D0Iqw6OZ.js +0 -4
  969. package/components/p-D0LT3Z3i.js +0 -4
  970. package/components/p-D1t981Ih.js +0 -4
  971. package/components/p-D6tqrIYY.js +0 -4
  972. package/components/p-D9C5yWpF.js +0 -4
  973. package/components/p-DCRXgAoM.js +0 -4
  974. package/components/p-DL5wyRub.js +0 -4
  975. package/components/p-DQlXUUDh.js +0 -4
  976. package/components/p-DRWN7QM2.js +0 -4
  977. package/components/p-DaJxRxSQ.js +0 -4
  978. package/components/p-DbmfFkd1.js +0 -4
  979. package/components/p-Dhi5xtNS.js +0 -4
  980. package/components/p-DnwLgh9U.js +0 -4
  981. package/components/p-DoZB3DcY.js +0 -4
  982. package/components/p-DrrpZB81.js +0 -4
  983. package/components/p-DrzWRqnG.js +0 -4
  984. package/components/p-DylrHLJF.js +0 -4
  985. package/components/p-Dypq4kXE.js +0 -4
  986. package/components/p-DzeMJvWL.js +0 -4
  987. package/components/p-Dzk4Tr0X.js +0 -4
  988. package/components/p-Rkm2AOZ2.js +0 -4
  989. package/components/p-UYngqo1f.js +0 -4
  990. package/components/p-asUhrzOB.js +0 -4
  991. package/components/p-fIOYmaqA.js +0 -4
  992. package/components/p-jlwpz7Ms.js +0 -4
  993. package/components/p-kInyVu79.js +0 -4
  994. package/components/p-miSYSxcc.js +0 -4
  995. package/components/p-paDbTUL9.js +0 -4
  996. package/components/p-vXpMhGrs.js +0 -4
  997. package/components/p-znZTPd7u.js +0 -4
  998. package/css/ionic/bundle.ionic.css +0 -1
  999. package/css/ionic/bundle.ionic.css.map +0 -1
  1000. package/css/ionic/core.ionic.css +0 -1
  1001. package/css/ionic/core.ionic.css.map +0 -1
  1002. package/css/ionic/global.bundle.ionic.css +0 -1
  1003. package/css/ionic/global.bundle.ionic.css.map +0 -1
  1004. package/css/ionic/ionic-swiper.ionic.css +0 -1
  1005. package/css/ionic/ionic-swiper.ionic.css.map +0 -1
  1006. package/css/ionic/link.ionic.css +0 -1
  1007. package/css/ionic/link.ionic.css.map +0 -1
  1008. package/css/ionic/structure.ionic.css +0 -1
  1009. package/css/ionic/structure.ionic.css.map +0 -1
  1010. package/css/ionic/typography.ionic.css +0 -1
  1011. package/css/ionic/typography.ionic.css.map +0 -1
  1012. package/css/ionic/utils.bundle.ionic.css +0 -1
  1013. package/css/ionic/utils.bundle.ionic.css.map +0 -1
  1014. package/dist/cjs/caret-down-vtVgfXIs.js +0 -8
  1015. package/dist/cjs/caret-left-CxZXLRv5.js +0 -8
  1016. package/dist/cjs/caret-right-CRCgv98E.js +0 -8
  1017. package/dist/cjs/clear-button-press-controller-2hAy_qdm.js +0 -45
  1018. package/dist/cjs/input.utils-CYZZsbdf.js +0 -150
  1019. package/dist/cjs/ion-datetime_3.cjs.entry.js +0 -3242
  1020. package/dist/cjs/ion-divider.cjs.entry.js +0 -51
  1021. package/dist/cjs/ion-gallery-item.cjs.entry.js +0 -59
  1022. package/dist/cjs/ion-gallery.cjs.entry.js +0 -607
  1023. package/dist/cjs/ionic-global-DvEcO0tQ.js +0 -519
  1024. package/dist/cjs/list-a-7GSA6K.js +0 -8
  1025. package/dist/cjs/notch-controller-CFlPw7ER.js +0 -155
  1026. package/dist/cjs/scroll-hide-controller-DAf_DwKc.js +0 -345
  1027. package/dist/cjs/validity-QmuwEptc.js +0 -51
  1028. package/dist/cjs/x-BTF99yFH.js +0 -8
  1029. package/dist/collection/components/accordion/accordion.ionic.css +0 -201
  1030. package/dist/collection/components/accordion-group/accordion-group.ionic.css +0 -93
  1031. package/dist/collection/components/action-sheet/action-sheet.ionic.css +0 -494
  1032. package/dist/collection/components/alert/alert.ionic.css +0 -787
  1033. package/dist/collection/components/avatar/avatar.ionic.css +0 -385
  1034. package/dist/collection/components/backdrop/backdrop.ionic.css +0 -109
  1035. package/dist/collection/components/badge/badge.ionic.css +0 -272
  1036. package/dist/collection/components/button/button.ionic.css +0 -644
  1037. package/dist/collection/components/buttons/buttons.ionic.css +0 -97
  1038. package/dist/collection/components/card/card.ionic.css +0 -144
  1039. package/dist/collection/components/card-content/card-content.ionic.css +0 -89
  1040. package/dist/collection/components/card-header/card-header.ionic.css +0 -85
  1041. package/dist/collection/components/card-subtitle/card-subtitle.ionic.css +0 -144
  1042. package/dist/collection/components/checkbox/checkbox.ionic.css +0 -543
  1043. package/dist/collection/components/chip/chip.ionic.css +0 -217
  1044. package/dist/collection/components/datetime/datetime.ionic.css +0 -703
  1045. package/dist/collection/components/divider/divider.ionic.css +0 -148
  1046. package/dist/collection/components/divider/divider.ios.css +0 -87
  1047. package/dist/collection/components/divider/divider.js +0 -94
  1048. package/dist/collection/components/divider/divider.md.css +0 -87
  1049. package/dist/collection/components/footer/footer-interface.js +0 -1
  1050. package/dist/collection/components/gallery/gallery-constants.js +0 -12
  1051. package/dist/collection/components/gallery/gallery-interface.js +0 -1
  1052. package/dist/collection/components/gallery/gallery.css +0 -15
  1053. package/dist/collection/components/gallery/gallery.js +0 -679
  1054. package/dist/collection/components/gallery/test/utils.js +0 -100
  1055. package/dist/collection/components/gallery-item/gallery-item.css +0 -49
  1056. package/dist/collection/components/gallery-item/gallery-item.js +0 -99
  1057. package/dist/collection/components/header/header-interface.js +0 -1
  1058. package/dist/collection/components/header/header.ionic.css +0 -250
  1059. package/dist/collection/components/input/input.ionic.css +0 -891
  1060. package/dist/collection/components/input-otp/input-otp.ionic.css +0 -371
  1061. package/dist/collection/components/input-password-toggle/input-password-toggle.ionic.css +0 -78
  1062. package/dist/collection/components/input-password-toggle/input-password-toggle.native.css +0 -61
  1063. package/dist/collection/components/item/item.ionic.css +0 -496
  1064. package/dist/collection/components/item-option/item-option.ionic.css +0 -277
  1065. package/dist/collection/components/item-options/item-options.ionic.css +0 -221
  1066. package/dist/collection/components/item-sliding/item-sliding.ionic.css +0 -211
  1067. package/dist/collection/components/list/list.ionic.css +0 -212
  1068. package/dist/collection/components/list-header/list-header.ionic.css +0 -190
  1069. package/dist/collection/components/menu-button/menu-button.ionic.css +0 -236
  1070. package/dist/collection/components/modal/animations/ionic.enter.js +0 -40
  1071. package/dist/collection/components/modal/animations/ionic.leave.js +0 -28
  1072. package/dist/collection/components/modal/modal.ionic.css +0 -255
  1073. package/dist/collection/components/picker-legacy/animations/ios.enter.js +0 -27
  1074. package/dist/collection/components/picker-legacy/animations/ios.leave.js +0 -23
  1075. package/dist/collection/components/picker-legacy/picker-interface.js +0 -1
  1076. package/dist/collection/components/picker-legacy/picker.ios.css +0 -312
  1077. package/dist/collection/components/picker-legacy/picker.js +0 -891
  1078. package/dist/collection/components/picker-legacy/picker.md.css +0 -299
  1079. package/dist/collection/components/picker-legacy-column/picker-column.ios.css +0 -243
  1080. package/dist/collection/components/picker-legacy-column/picker-column.js +0 -422
  1081. package/dist/collection/components/picker-legacy-column/picker-column.md.css +0 -234
  1082. package/dist/collection/components/picker-legacy-column/test/test.utils.js +0 -43
  1083. package/dist/collection/components/popover/popover.ionic.css +0 -290
  1084. package/dist/collection/components/progress-bar/progress-bar.ionic.css +0 -287
  1085. package/dist/collection/components/radio/radio.ionic.css +0 -422
  1086. package/dist/collection/components/radio-group/radio-group.ionic.css +0 -119
  1087. package/dist/collection/components/range/range.ionic.css +0 -567
  1088. package/dist/collection/components/ripple-effect/ripple-effect.ionic.css +0 -215
  1089. package/dist/collection/components/searchbar/searchbar.ionic.css +0 -622
  1090. package/dist/collection/components/segment/segment.ionic.css +0 -115
  1091. package/dist/collection/components/segment-button/segment-button.ionic.css +0 -352
  1092. package/dist/collection/components/select/select.ionic.css +0 -809
  1093. package/dist/collection/components/select-modal/select-modal.ionic.css +0 -257
  1094. package/dist/collection/components/select-popover/select-popover.ionic.css +0 -255
  1095. package/dist/collection/components/spinner/spinner.native.css +0 -199
  1096. package/dist/collection/components/tab-bar/tab-bar.ionic.css +0 -249
  1097. package/dist/collection/components/tab-button/tab-button.ionic.css +0 -373
  1098. package/dist/collection/components/textarea/textarea.ionic.css +0 -898
  1099. package/dist/collection/components/title/title.ionic.css +0 -127
  1100. package/dist/collection/components/toast/toast.ionic.css +0 -394
  1101. package/dist/collection/components/toggle/toggle.ionic.css +0 -512
  1102. package/dist/collection/components/toolbar/test/image.svg +0 -1
  1103. package/dist/collection/components/toolbar/toolbar.ionic.css +0 -249
  1104. package/dist/collection/utils/css-value-validation.js +0 -39
  1105. package/dist/collection/utils/forms/clear-button-press-controller.js +0 -40
  1106. package/dist/collection/utils/scroll-hide-controller.js +0 -178
  1107. package/dist/esm/caret-down-D1t981Ih.js +0 -6
  1108. package/dist/esm/caret-left-fIOYmaqA.js +0 -6
  1109. package/dist/esm/caret-right-BYSs-jZz.js +0 -6
  1110. package/dist/esm/clear-button-press-controller-C79TPm5p.js +0 -43
  1111. package/dist/esm/input.utils-fs4B7WL5.js +0 -147
  1112. package/dist/esm/ion-datetime_3.entry.js +0 -3238
  1113. package/dist/esm/ion-divider.entry.js +0 -49
  1114. package/dist/esm/ion-gallery-item.entry.js +0 -57
  1115. package/dist/esm/ion-gallery.entry.js +0 -605
  1116. package/dist/esm/ionic-global-CEwbmRLz.js +0 -508
  1117. package/dist/esm/list-Dhi5xtNS.js +0 -6
  1118. package/dist/esm/notch-controller-CsbpmbOz.js +0 -153
  1119. package/dist/esm/scroll-hide-controller-CfbtPBWv.js +0 -342
  1120. package/dist/esm/theme-DaJxRxSQ.js +0 -67
  1121. package/dist/esm/validity-BjW8SOqw.js +0 -48
  1122. package/dist/esm/x-BDqjX7Z_.js +0 -6
  1123. package/dist/ionic/p--sroV-k-.js +0 -4
  1124. package/dist/ionic/p-00731d20.entry.js +0 -4
  1125. package/dist/ionic/p-03c20a50.entry.js +0 -4
  1126. package/dist/ionic/p-03ec6673.entry.js +0 -4
  1127. package/dist/ionic/p-0405ec57.entry.js +0 -4
  1128. package/dist/ionic/p-04f16322.entry.js +0 -4
  1129. package/dist/ionic/p-09123f89.entry.js +0 -4
  1130. package/dist/ionic/p-15028853.entry.js +0 -4
  1131. package/dist/ionic/p-16c5db90.entry.js +0 -4
  1132. package/dist/ionic/p-1d1dfb68.entry.js +0 -4
  1133. package/dist/ionic/p-231572a0.entry.js +0 -4
  1134. package/dist/ionic/p-2740db6e.entry.js +0 -4
  1135. package/dist/ionic/p-2a6d4601.entry.js +0 -4
  1136. package/dist/ionic/p-2d8fe33c.entry.js +0 -4
  1137. package/dist/ionic/p-2dbc50d9.entry.js +0 -4
  1138. package/dist/ionic/p-32d3095c.entry.js +0 -4
  1139. package/dist/ionic/p-356cd619.entry.js +0 -4
  1140. package/dist/ionic/p-391bdb60.entry.js +0 -4
  1141. package/dist/ionic/p-3b2ab5b4.entry.js +0 -4
  1142. package/dist/ionic/p-4e3e750a.entry.js +0 -4
  1143. package/dist/ionic/p-4fee0df6.entry.js +0 -4
  1144. package/dist/ionic/p-547d010c.entry.js +0 -4
  1145. package/dist/ionic/p-54895118.entry.js +0 -4
  1146. package/dist/ionic/p-6163d04d.entry.js +0 -4
  1147. package/dist/ionic/p-679c1448.entry.js +0 -4
  1148. package/dist/ionic/p-6de524e5.entry.js +0 -4
  1149. package/dist/ionic/p-764d7ea2.entry.js +0 -4
  1150. package/dist/ionic/p-7k7Q1A38.js +0 -4
  1151. package/dist/ionic/p-81BMEE8Q.js +0 -4
  1152. package/dist/ionic/p-8d6d7acb.entry.js +0 -4
  1153. package/dist/ionic/p-96732fe2.entry.js +0 -4
  1154. package/dist/ionic/p-96c4c1b9.entry.js +0 -4
  1155. package/dist/ionic/p-9745f518.entry.js +0 -4
  1156. package/dist/ionic/p-9a40af3c.entry.js +0 -4
  1157. package/dist/ionic/p-9e725104.entry.js +0 -4
  1158. package/dist/ionic/p-B4Kq2YNk.js +0 -4
  1159. package/dist/ionic/p-BDqjX7Z_.js +0 -4
  1160. package/dist/ionic/p-BTEOs1at.js +0 -4
  1161. package/dist/ionic/p-BYSs-jZz.js +0 -4
  1162. package/dist/ionic/p-BbWo-T8F.js +0 -4
  1163. package/dist/ionic/p-BjW8SOqw.js +0 -4
  1164. package/dist/ionic/p-Bvz8PHo5.js +0 -4
  1165. package/dist/ionic/p-BwKpO3Is.js +0 -4
  1166. package/dist/ionic/p-C0EQceqV.js +0 -5
  1167. package/dist/ionic/p-C1_a9uRb.js +0 -4
  1168. package/dist/ionic/p-C53feagD.js +0 -4
  1169. package/dist/ionic/p-C6WD6qSF.js +0 -4
  1170. package/dist/ionic/p-C7urd_wE.js +0 -4
  1171. package/dist/ionic/p-CCgRIJJv.js +0 -4
  1172. package/dist/ionic/p-CEkwLb3L.js +0 -4
  1173. package/dist/ionic/p-CGFf6My7.js +0 -4
  1174. package/dist/ionic/p-CLUwRxij.js +0 -4
  1175. package/dist/ionic/p-CODBQrPj.js +0 -4
  1176. package/dist/ionic/p-CP_sVwEm.js +0 -4
  1177. package/dist/ionic/p-CSMWpRc0.js +0 -4
  1178. package/dist/ionic/p-CYYo93al.js +0 -4
  1179. package/dist/ionic/p-Cipl19Qe.js +0 -4
  1180. package/dist/ionic/p-Cl0B-RWe.js +0 -4
  1181. package/dist/ionic/p-CnIzWLAn.js +0 -4
  1182. package/dist/ionic/p-Cvvva6Z7.js +0 -4
  1183. package/dist/ionic/p-D1t981Ih.js +0 -4
  1184. package/dist/ionic/p-DINFwXlp.js +0 -4
  1185. package/dist/ionic/p-DIvCXVmD.js +0 -4
  1186. package/dist/ionic/p-DTsDGZPd.js +0 -4
  1187. package/dist/ionic/p-DaJxRxSQ.js +0 -4
  1188. package/dist/ionic/p-Dhi5xtNS.js +0 -4
  1189. package/dist/ionic/p-DtQgCTtW.js +0 -4
  1190. package/dist/ionic/p-DuRx6DeQ.js +0 -4
  1191. package/dist/ionic/p-YGLqXqFd.js +0 -4
  1192. package/dist/ionic/p-YIsE5bNG.js +0 -4
  1193. package/dist/ionic/p-a61c2ace.entry.js +0 -4
  1194. package/dist/ionic/p-abb516e3.entry.js +0 -4
  1195. package/dist/ionic/p-b54edee6.entry.js +0 -4
  1196. package/dist/ionic/p-c076ac5c.entry.js +0 -4
  1197. package/dist/ionic/p-c4ff25cb.entry.js +0 -4
  1198. package/dist/ionic/p-c7279756.entry.js +0 -4
  1199. package/dist/ionic/p-c7ebed50.entry.js +0 -4
  1200. package/dist/ionic/p-cd0037e4.entry.js +0 -4
  1201. package/dist/ionic/p-d261938d.entry.js +0 -4
  1202. package/dist/ionic/p-d33dfc12.entry.js +0 -4
  1203. package/dist/ionic/p-d7764330.entry.js +0 -4
  1204. package/dist/ionic/p-defb23a2.entry.js +0 -4
  1205. package/dist/ionic/p-df642ef5.entry.js +0 -4
  1206. package/dist/ionic/p-e2a35249.entry.js +0 -4
  1207. package/dist/ionic/p-e2b952ef.entry.js +0 -4
  1208. package/dist/ionic/p-e77cfd1e.entry.js +0 -4
  1209. package/dist/ionic/p-ecb9d3d3.entry.js +0 -4
  1210. package/dist/ionic/p-efd13adf.entry.js +0 -4
  1211. package/dist/ionic/p-f0904c1d.entry.js +0 -4
  1212. package/dist/ionic/p-f33689f7.entry.js +0 -4
  1213. package/dist/ionic/p-f693efe9.entry.js +0 -4
  1214. package/dist/ionic/p-f788396b.entry.js +0 -4
  1215. package/dist/ionic/p-fIOYmaqA.js +0 -4
  1216. package/dist/ionic/p-fa16fad8.entry.js +0 -4
  1217. package/dist/ionic/p-lMb_45ax.js +0 -4
  1218. package/dist/ionic/p-oadJNPuo.js +0 -4
  1219. package/dist/ionic/p-vXpMhGrs.js +0 -4
  1220. package/dist/ionic/p-wNjWCZVO.js +0 -4
  1221. package/dist/types/components/divider/divider.d.ts +0 -20
  1222. package/dist/types/components/footer/footer-interface.d.ts +0 -1
  1223. package/dist/types/components/gallery/gallery-constants.d.ts +0 -9
  1224. package/dist/types/components/gallery/gallery-interface.d.ts +0 -10
  1225. package/dist/types/components/gallery/gallery.d.ts +0 -218
  1226. package/dist/types/components/gallery/test/utils.d.ts +0 -3
  1227. package/dist/types/components/gallery-item/gallery-item.d.ts +0 -33
  1228. package/dist/types/components/header/header-interface.d.ts +0 -1
  1229. package/dist/types/components/modal/animations/ionic.enter.d.ts +0 -6
  1230. package/dist/types/components/modal/animations/ionic.leave.d.ts +0 -6
  1231. package/dist/types/components/picker-legacy/animations/ios.enter.d.ts +0 -5
  1232. package/dist/types/components/picker-legacy/animations/ios.leave.d.ts +0 -5
  1233. package/dist/types/components/picker-legacy/picker-interface.d.ts +0 -52
  1234. package/dist/types/components/picker-legacy/picker.d.ts +0 -159
  1235. package/dist/types/components/picker-legacy-column/picker-column.d.ts +0 -46
  1236. package/dist/types/components/picker-legacy-column/test/test.utils.d.ts +0 -9
  1237. package/dist/types/utils/css-value-validation.d.ts +0 -21
  1238. package/dist/types/utils/forms/clear-button-press-controller.d.ts +0 -20
  1239. package/dist/types/utils/scroll-hide-controller.d.ts +0 -56
  1240. /package/dist/collection/components/{refresher-content/refresher-content.css → input-password-toggle/input-password-toggle.css} +0 -0
@@ -1,384 +1,140 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { Fragment, Host, h, } from "@stencil/core";
5
- import { reportValidityToElementInternals } from "../../utils/forms/index";
4
+ import { Fragment, Host, h } from "@stencil/core";
6
5
  import { inheritAriaAttributes } from "../../utils/helpers";
7
6
  import { printIonWarning } from "../../utils/logging/index";
8
7
  import { isRTL } from "../../utils/rtl/index";
9
8
  import { createColorClasses } from "../../utils/theme";
10
9
  import { getIonMode } from "../../global/ionic-global";
11
- /**
12
- * @virtualProp {"ios" | "md"} mode - The mode determines the platform behaviors of the component.
13
- * @virtualProp {"ios" | "md" | "ionic"} theme - The theme determines the visual appearance of the component.
14
- *
15
- * @part group - The container element that wraps all input boxes.
16
- * @part container - The wrapper element for each individual input box.
17
- * @part native - The native input element.
18
- * @part separator - The separator element displayed between input boxes.
19
- * @part description - The container element for the description text.
20
- */
21
10
  export class InputOTP {
22
- constructor() {
23
- this.inheritedAttributes = {};
24
- this.inputRefs = [];
25
- this.inputId = `ion-input-otp-${inputIds++}`;
26
- this.parsedSeparators = [];
27
- /**
28
- * Tracks whether the user is navigating through input boxes using keyboard navigation
29
- * (arrow keys, tab) versus mouse clicks. This is used to determine the appropriate
30
- * focus behavior when an input box is focused.
31
- */
32
- this.isKeyboardNavigation = false;
33
- this.inputValues = [];
34
- this.hasFocus = false;
35
- this.previousInputValues = [];
36
- /**
37
- * Indicates whether and how the text value should be automatically capitalized as it is entered/edited by the user.
38
- * Available options: `"off"`, `"none"`, `"on"`, `"sentences"`, `"words"`, `"characters"`.
39
- */
40
- this.autocapitalize = 'off';
41
- /**
42
- * If `true`, the user cannot interact with the input.
43
- */
44
- this.disabled = false;
45
- /**
46
- * The fill for the input boxes. If `"solid"` the input boxes will have a background. If
47
- * `"outline"` the input boxes will be transparent with a border.
48
- */
49
- this.fill = 'outline';
50
- /**
51
- * The number of input boxes to display.
52
- */
53
- this.length = 4;
54
- /**
55
- * If `true`, the user cannot modify the value.
56
- */
57
- this.readonly = false;
58
- /**
59
- * The shape of the input boxes.
60
- * If "round" they will have an increased border radius.
61
- * If "rectangular" they will have no border radius.
62
- * If "soft" they will have a soft border radius.
63
- */
64
- this.shape = 'round';
65
- /**
66
- * The size of the input boxes.
67
- */
68
- this.size = 'medium';
69
- /**
70
- * The type of input allowed in the input boxes.
71
- */
72
- this.type = 'number';
73
- /**
74
- * The value of the input group.
75
- */
76
- this.value = '';
77
- /**
78
- * Handles the focus behavior for the input OTP component.
79
- *
80
- * Focus behavior:
81
- * 1. Keyboard navigation: Allow normal focus movement
82
- * 2. Mouse click:
83
- * - If clicked box has value: Focus that box
84
- * - If clicked box is empty: Focus first empty box
85
- *
86
- * Emits the `ionFocus` event when the input group gains focus.
87
- */
88
- this.onFocus = (index) => (event) => {
89
- var _a;
90
- const { inputRefs } = this;
91
- // Only emit ionFocus and set the focusedValue when the
92
- // component first gains focus
93
- if (!this.hasFocus) {
94
- this.ionFocus.emit(event);
95
- this.focusedValue = this.value;
96
- }
97
- this.hasFocus = true;
98
- let finalIndex = index;
99
- if (!this.isKeyboardNavigation) {
100
- // If the clicked box has a value, focus it
101
- // Otherwise focus the first empty box
102
- const targetIndex = this.inputValues[index] ? index : this.getFirstEmptyIndex();
103
- finalIndex = targetIndex === -1 ? this.length - 1 : targetIndex;
104
- // Focus the target box
105
- (_a = this.inputRefs[finalIndex]) === null || _a === void 0 ? void 0 : _a.focus();
106
- }
107
- // Update tabIndexes to match the focused box
108
- inputRefs.forEach((input, i) => {
109
- input.tabIndex = i === finalIndex ? 0 : -1;
110
- });
111
- // Reset the keyboard navigation flag
112
- this.isKeyboardNavigation = false;
113
- };
114
- /**
115
- * Handles the blur behavior for the input OTP component.
116
- * Emits the `ionBlur` event when the input group loses focus.
117
- */
118
- this.onBlur = (event) => {
119
- const { inputRefs } = this;
120
- const relatedTarget = event.relatedTarget;
121
- // Do not emit blur if we're moving to another input box in the same component
122
- const isInternalFocus = relatedTarget != null && inputRefs.includes(relatedTarget);
123
- if (!isInternalFocus) {
124
- this.hasFocus = false;
125
- // Reset tabIndexes when focus leaves the component
126
- this.updateTabIndexes();
127
- // Always emit ionBlur when focus leaves the component
128
- this.ionBlur.emit(event);
129
- // Only emit ionChange if the value has actually changed
130
- if (this.focusedValue !== this.value) {
131
- this.emitIonChange(event);
132
- }
133
- }
134
- };
135
- /**
136
- * Handles keyboard navigation for the OTP component.
137
- *
138
- * Navigation:
139
- * - Backspace: Clears current input and moves to previous box if empty
140
- * - Arrow Left/Right: Moves focus between input boxes
141
- * - Tab: Allows normal tab navigation between components
142
- */
143
- this.onKeyDown = (index) => (event) => {
144
- const { disabled, length, readonly } = this;
145
- const rtl = isRTL(this.el);
146
- const input = event.target;
147
- if (disabled) {
148
- return;
149
- }
150
- if (readonly) {
151
- if (event.key === 'Backspace' || event.key === 'Delete') {
152
- event.preventDefault();
153
- return;
154
- }
155
- }
156
- // Meta shortcuts are used to copy, paste, and select text
157
- // We don't want to handle these keys here
158
- const metaShortcuts = ['a', 'c', 'v', 'x', 'r', 'z', 'y'];
159
- const isTextSelection = input.selectionStart !== input.selectionEnd;
160
- // Return if the key is a meta shortcut or the input value
161
- // text is selected and let the onPaste / onInput handler manage it
162
- if (isTextSelection || ((event.metaKey || event.ctrlKey) && metaShortcuts.includes(event.key.toLowerCase()))) {
163
- return;
164
- }
165
- if (event.key === 'Backspace') {
166
- if (this.inputValues[index]) {
167
- // Shift all values to the right of the current index left by one
168
- for (let i = index; i < length - 1; i++) {
169
- this.inputValues[i] = this.inputValues[i + 1];
170
- }
171
- // Clear the last box
172
- this.inputValues[length - 1] = '';
173
- // Update all inputRefs to match inputValues
174
- for (let i = 0; i < length; i++) {
175
- this.inputRefs[i].value = this.inputValues[i] || '';
176
- }
177
- this.updateValue(event);
178
- event.preventDefault();
179
- }
180
- else if (!this.inputValues[index] && index > 0) {
181
- // If current input is empty, move to previous input
182
- this.focusPrevious(index);
183
- }
184
- }
185
- else if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {
186
- this.isKeyboardNavigation = true;
187
- event.preventDefault();
188
- const isLeft = event.key === 'ArrowLeft';
189
- const shouldMoveNext = (isLeft && rtl) || (!isLeft && !rtl);
190
- // Only allow moving to the next input if the current has a value
191
- if (shouldMoveNext) {
192
- if (this.inputValues[index] && index < length - 1) {
193
- this.focusNext(index);
194
- }
195
- }
196
- else {
197
- this.focusPrevious(index);
198
- }
199
- }
200
- else if (event.key === 'Tab') {
201
- this.isKeyboardNavigation = true;
202
- // Let all tab events proceed normally
203
- return;
204
- }
205
- };
206
- /**
207
- * Processes all input scenarios for each input box.
208
- *
209
- * This function manages:
210
- * 1. Autofill handling
211
- * 2. Input validation
212
- * 3. Full selection replacement or typing in an empty box
213
- * 4. Inserting in the middle with available space (shifting)
214
- * 5. Single character replacement
215
- */
216
- this.onInput = (index) => (event) => {
217
- var _a, _b;
218
- const { disabled, length, readonly, validKeyPattern } = this;
219
- const input = event.target;
220
- const value = input.value;
221
- const previousValue = this.previousInputValues[index] || '';
222
- if (disabled || readonly) {
223
- return;
224
- }
225
- // 1. Autofill handling
226
- // If the length of the value increases by more than 1 from the previous
227
- // value, treat this as autofill. This is to prevent the case where the
228
- // user is typing a single character into an input box containing a value
229
- // as that will trigger this function with a value length of 2 characters.
230
- const isAutofill = value.length - previousValue.length > 1;
231
- if (isAutofill) {
232
- // Distribute valid characters across input boxes
233
- const validChars = value
234
- .split('')
235
- .filter((char) => validKeyPattern.test(char))
236
- .slice(0, length);
237
- // If there are no valid characters coming from the
238
- // autofill, all input refs have to be cleared after the
239
- // browser has finished the autofill behavior
240
- if (validChars.length === 0) {
241
- requestAnimationFrame(() => {
242
- this.inputRefs.forEach((input) => {
243
- input.value = '';
244
- });
245
- });
246
- }
247
- for (let i = 0; i < length; i++) {
248
- this.inputValues[i] = validChars[i] || '';
249
- this.inputRefs[i].value = validChars[i] || '';
250
- }
251
- this.updateValue(event);
252
- // Focus the first empty input box or the last input box if all boxes
253
- // are filled after a small delay to ensure the input boxes have been
254
- // updated before moving the focus
255
- setTimeout(() => {
256
- var _a;
257
- const nextIndex = validChars.length < length ? validChars.length : length - 1;
258
- (_a = this.inputRefs[nextIndex]) === null || _a === void 0 ? void 0 : _a.focus();
259
- }, 20);
260
- this.previousInputValues = [...this.inputValues];
261
- return;
262
- }
263
- // 2. Input validation
264
- // If the character entered is invalid (does not match the pattern),
265
- // restore the previous value and exit
266
- if (value.length > 0 && !validKeyPattern.test(value[value.length - 1])) {
267
- input.value = this.inputValues[index] || '';
268
- this.previousInputValues = [...this.inputValues];
269
- return;
270
- }
271
- // 3. Full selection replacement or typing in an empty box
272
- // If the user selects all text in the input box and types, or if the
273
- // input box is empty, replace only this input box. If the box is empty,
274
- // move to the next box, otherwise stay focused on this box.
275
- const isAllSelected = input.selectionStart === 0 && input.selectionEnd === value.length;
276
- const isEmpty = !this.inputValues[index];
277
- if (isAllSelected || isEmpty) {
278
- this.inputValues[index] = value;
279
- input.value = value;
280
- this.updateValue(event);
281
- this.focusNext(index);
282
- this.previousInputValues = [...this.inputValues];
283
- return;
284
- }
285
- // 4. Inserting in the middle with available space (shifting)
286
- // If typing in a filled input box and there are empty boxes at the end,
287
- // shift all values starting at the current box to the right, and insert
288
- // the new character at the current box.
289
- const hasAvailableBoxAtEnd = this.inputValues[this.inputValues.length - 1] === '';
290
- if (this.inputValues[index] && hasAvailableBoxAtEnd && value.length === 2) {
291
- // Get the inserted character (from event or by diffing value/previousValue)
292
- let newChar = event.data;
293
- if (!newChar) {
294
- newChar = value.split('').find((c, i) => c !== previousValue[i]) || value[value.length - 1];
295
- }
296
- // Validate the new character before shifting
297
- if (!validKeyPattern.test(newChar)) {
298
- input.value = this.inputValues[index] || '';
299
- this.previousInputValues = [...this.inputValues];
300
- return;
301
- }
302
- // Shift values right from the end to the insertion point
303
- for (let i = this.inputValues.length - 1; i > index; i--) {
304
- this.inputValues[i] = this.inputValues[i - 1];
305
- this.inputRefs[i].value = this.inputValues[i] || '';
306
- }
307
- this.inputValues[index] = newChar;
308
- this.inputRefs[index].value = newChar;
309
- this.updateValue(event);
310
- this.previousInputValues = [...this.inputValues];
311
- return;
312
- }
313
- // 5. Single character replacement
314
- // Handles replacing a single character in a box containing a value based
315
- // on the cursor position. We need the cursor position to determine which
316
- // character was the last character typed. For example, if the user types "2"
317
- // in an input box with the cursor at the beginning of the value of "6",
318
- // the value will be "26", but we want to grab the "2" as the last character
319
- // typed.
320
- const cursorPos = (_a = input.selectionStart) !== null && _a !== void 0 ? _a : value.length;
321
- const newCharIndex = cursorPos - 1;
322
- const newChar = (_b = value[newCharIndex]) !== null && _b !== void 0 ? _b : value[0];
323
- // Check if the new character is valid before updating the value
324
- if (!validKeyPattern.test(newChar)) {
325
- input.value = this.inputValues[index] || '';
326
- this.previousInputValues = [...this.inputValues];
327
- return;
328
- }
329
- this.inputValues[index] = newChar;
330
- input.value = newChar;
331
- this.updateValue(event);
332
- this.previousInputValues = [...this.inputValues];
333
- };
334
- /**
335
- * Handles pasting text into the input OTP component.
336
- * This function prevents the default paste behavior and
337
- * validates the pasted text against the allowed pattern.
338
- * It then updates the value of the input group and focuses
339
- * the next empty input after pasting.
340
- */
341
- this.onPaste = (event) => {
342
- var _a, _b;
343
- const { disabled, inputRefs, length, readonly, validKeyPattern } = this;
344
- event.preventDefault();
345
- if (disabled || readonly) {
346
- return;
347
- }
348
- const pastedText = (_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.getData('text');
349
- // If there is no pasted text, still emit the input change event
350
- // because this is how the native input element behaves
351
- // but return early because there is nothing to paste.
352
- if (!pastedText) {
353
- this.emitIonInput(event);
354
- return;
355
- }
356
- const validChars = pastedText
357
- .split('')
358
- .filter((char) => validKeyPattern.test(char))
359
- .slice(0, length);
360
- // Always paste starting at the first box
361
- validChars.forEach((char, index) => {
362
- if (index < length) {
363
- this.inputRefs[index].value = char;
364
- this.inputValues[index] = char;
365
- }
366
- });
367
- // Update the value so that all input boxes are updated
368
- this.value = validChars.join('');
369
- this.updateValue(event);
370
- // Focus the next empty input after pasting
371
- // If all boxes are filled, focus the last input
372
- const nextEmptyIndex = validChars.length < length ? validChars.length : length - 1;
373
- (_b = inputRefs[nextEmptyIndex]) === null || _b === void 0 ? void 0 : _b.focus();
374
- };
375
- }
11
+ inheritedAttributes = {};
12
+ inputRefs = [];
13
+ inputId = `ion-input-otp-${inputIds++}`;
14
+ parsedSeparators = [];
376
15
  /**
377
- * Update element internals when disabled prop changes
16
+ * Stores the initial value of the input when it receives focus.
17
+ * Used to determine if the value changed during the focus session
18
+ * to avoid emitting unnecessary change events on blur.
378
19
  */
379
- disabledChanged() {
380
- this.updateElementInternals();
381
- }
20
+ focusedValue;
21
+ /**
22
+ * Tracks whether the user is navigating through input boxes using keyboard navigation
23
+ * (arrow keys, tab) versus mouse clicks. This is used to determine the appropriate
24
+ * focus behavior when an input box is focused.
25
+ */
26
+ isKeyboardNavigation = false;
27
+ el;
28
+ inputValues = [];
29
+ hasFocus = false;
30
+ previousInputValues = [];
31
+ /**
32
+ * Indicates whether and how the text value should be automatically capitalized as it is entered/edited by the user.
33
+ * Available options: `"off"`, `"none"`, `"on"`, `"sentences"`, `"words"`, `"characters"`.
34
+ */
35
+ autocapitalize = 'off';
36
+ /**
37
+ * The color to use from your application's color palette.
38
+ * Default options are: `"primary"`, `"secondary"`, `"tertiary"`, `"success"`, `"warning"`, `"danger"`, `"light"`, `"medium"`, and `"dark"`.
39
+ * For more information on colors, see [theming](/docs/theming/basics).
40
+ */
41
+ color;
42
+ /**
43
+ * If `true`, the user cannot interact with the input.
44
+ */
45
+ disabled = false;
46
+ /**
47
+ * The fill for the input boxes. If `"solid"` the input boxes will have a background. If
48
+ * `"outline"` the input boxes will be transparent with a border.
49
+ */
50
+ fill = 'outline';
51
+ /**
52
+ * A hint to the browser for which keyboard to display.
53
+ * Possible values: `"none"`, `"text"`, `"tel"`, `"url"`,
54
+ * `"email"`, `"numeric"`, `"decimal"`, and `"search"`.
55
+ *
56
+ * For numbers (type="number"): "numeric"
57
+ * For text (type="text"): "text"
58
+ */
59
+ inputmode;
60
+ /**
61
+ * The number of input boxes to display.
62
+ */
63
+ length = 4;
64
+ /**
65
+ * A regex pattern string for allowed characters. Defaults based on type.
66
+ *
67
+ * For numbers (`type="number"`): `"[\p{N}]"`
68
+ * For text (`type="text"`): `"[\p{L}\p{N}]"`
69
+ */
70
+ pattern;
71
+ /**
72
+ * If `true`, the user cannot modify the value.
73
+ */
74
+ readonly = false;
75
+ /**
76
+ * Where separators should be shown between input boxes.
77
+ * Can be a comma-separated string or an array of numbers.
78
+ *
79
+ * For example:
80
+ * `"3"` will show a separator after the 3rd input box.
81
+ * `[1,4]` will show a separator after the 1st and 4th input boxes.
82
+ * `"all"` will show a separator between every input box.
83
+ */
84
+ separators;
85
+ /**
86
+ * The shape of the input boxes.
87
+ * If "round" they will have an increased border radius.
88
+ * If "rectangular" they will have no border radius.
89
+ * If "soft" they will have a soft border radius.
90
+ */
91
+ shape = 'round';
92
+ /**
93
+ * The size of the input boxes.
94
+ */
95
+ size = 'medium';
96
+ /**
97
+ * The type of input allowed in the input boxes.
98
+ */
99
+ type = 'number';
100
+ /**
101
+ * The value of the input group.
102
+ */
103
+ value = '';
104
+ /**
105
+ * The `ionInput` event is fired each time the user modifies the input's value.
106
+ * Unlike the `ionChange` event, the `ionInput` event is fired for each alteration
107
+ * to the input's value. This typically happens for each keystroke as the user types.
108
+ *
109
+ * For elements that accept text input (`type=text`, `type=tel`, etc.), the interface
110
+ * is [`InputEvent`](https://developer.mozilla.org/en-US/docs/Web/API/InputEvent); for others,
111
+ * the interface is [`Event`](https://developer.mozilla.org/en-US/docs/Web/API/Event). If
112
+ * the input is cleared on edit, the type is `null`.
113
+ */
114
+ ionInput;
115
+ /**
116
+ * The `ionChange` event is fired when the user modifies the input's value.
117
+ * Unlike the `ionInput` event, the `ionChange` event is only fired when changes
118
+ * are committed, not as the user types.
119
+ *
120
+ * The `ionChange` event fires when the `<ion-input-otp>` component loses
121
+ * focus after its value has changed.
122
+ *
123
+ * This event will not emit when programmatically setting the `value` property.
124
+ */
125
+ ionChange;
126
+ /**
127
+ * Emitted when all input boxes have been filled with valid values.
128
+ */
129
+ ionComplete;
130
+ /**
131
+ * Emitted when the input group loses focus.
132
+ */
133
+ ionBlur;
134
+ /**
135
+ * Emitted when the input group has focus.
136
+ */
137
+ ionFocus;
382
138
  /**
383
139
  * Sets focus to an input box.
384
140
  * @param index - The index of the input box to focus (0-based).
@@ -386,20 +142,18 @@ export class InputOTP {
386
142
  * Otherwise, the first empty input box or the last input if all are filled will be focused.
387
143
  */
388
144
  async setFocus(index) {
389
- var _a, _b;
390
145
  if (typeof index === 'number') {
391
146
  const validIndex = Math.max(0, Math.min(index, this.length - 1));
392
- (_a = this.inputRefs[validIndex]) === null || _a === void 0 ? void 0 : _a.focus();
147
+ this.inputRefs[validIndex]?.focus();
393
148
  }
394
149
  else {
395
150
  const tabbableIndex = this.getTabbableIndex();
396
- (_b = this.inputRefs[tabbableIndex]) === null || _b === void 0 ? void 0 : _b.focus();
151
+ this.inputRefs[tabbableIndex]?.focus();
397
152
  }
398
153
  }
399
154
  valueChanged() {
400
155
  this.initializeValues();
401
156
  this.updateTabIndexes();
402
- this.updateElementInternals();
403
157
  }
404
158
  /**
405
159
  * Processes the separators prop into an array of numbers.
@@ -456,7 +210,6 @@ export class InputOTP {
456
210
  }
457
211
  componentDidLoad() {
458
212
  this.updateTabIndexes();
459
- this.updateElementInternals();
460
213
  }
461
214
  /**
462
215
  * Get the regex pattern for allowed characters.
@@ -533,47 +286,6 @@ export class InputOTP {
533
286
  this.ionComplete.emit({ value: newValue });
534
287
  }
535
288
  }
536
- /**
537
- * Gets the value of the input group as a string for form submission.
538
- * Returns an empty string if the value is null or undefined.
539
- */
540
- getValue() {
541
- return this.value != null ? this.value.toString() : '';
542
- }
543
- /**
544
- * Called when the form state is restored.
545
- * Restores the component's value.
546
- */
547
- formStateRestoreCallback(value) {
548
- this.value = value;
549
- }
550
- /**
551
- * Called when the form is reset.
552
- * Resets the component's value.
553
- */
554
- formResetCallback() {
555
- this.value = '';
556
- }
557
- /**
558
- * Updates the form value and reports validity state to the browser via
559
- * ElementInternals. This should be called when the component loads, when
560
- * the disabled prop changes, and when the value changes to ensure the form
561
- * value stays in sync and validation state is updated.
562
- */
563
- updateElementInternals() {
564
- var _a;
565
- // Disabled form controls should not be included in form data
566
- // Pass null to setFormValue when disabled to exclude it from form submission
567
- const value = this.disabled ? null : this.getValue();
568
- // ElementInternals may not be fully available in test environments
569
- // so we need to check if the method exists before calling it
570
- if (typeof this.internals.setFormValue === 'function') {
571
- this.internals.setFormValue(value);
572
- }
573
- // Use the first input element for validity reporting since all inputs
574
- // share the same validation state
575
- reportValidityToElementInternals((_a = this.inputRefs[0]) !== null && _a !== void 0 ? _a : null, this.internals);
576
- }
577
289
  /**
578
290
  * Emits an `ionChange` event.
579
291
  * This API should be called for user committed changes.
@@ -596,24 +308,79 @@ export class InputOTP {
596
308
  const newValue = value == null ? value : value.toString();
597
309
  this.ionInput.emit({ value: newValue, event });
598
310
  }
311
+ /**
312
+ * Handles the focus behavior for the input OTP component.
313
+ *
314
+ * Focus behavior:
315
+ * 1. Keyboard navigation: Allow normal focus movement
316
+ * 2. Mouse click:
317
+ * - If clicked box has value: Focus that box
318
+ * - If clicked box is empty: Focus first empty box
319
+ *
320
+ * Emits the `ionFocus` event when the input group gains focus.
321
+ */
322
+ onFocus = (index) => (event) => {
323
+ const { inputRefs } = this;
324
+ // Only emit ionFocus and set the focusedValue when the
325
+ // component first gains focus
326
+ if (!this.hasFocus) {
327
+ this.ionFocus.emit(event);
328
+ this.focusedValue = this.value;
329
+ }
330
+ this.hasFocus = true;
331
+ let finalIndex = index;
332
+ if (!this.isKeyboardNavigation) {
333
+ // If the clicked box has a value, focus it
334
+ // Otherwise focus the first empty box
335
+ const targetIndex = this.inputValues[index] ? index : this.getFirstEmptyIndex();
336
+ finalIndex = targetIndex === -1 ? this.length - 1 : targetIndex;
337
+ // Focus the target box
338
+ this.inputRefs[finalIndex]?.focus();
339
+ }
340
+ // Update tabIndexes to match the focused box
341
+ inputRefs.forEach((input, i) => {
342
+ input.tabIndex = i === finalIndex ? 0 : -1;
343
+ });
344
+ // Reset the keyboard navigation flag
345
+ this.isKeyboardNavigation = false;
346
+ };
347
+ /**
348
+ * Handles the blur behavior for the input OTP component.
349
+ * Emits the `ionBlur` event when the input group loses focus.
350
+ */
351
+ onBlur = (event) => {
352
+ const { inputRefs } = this;
353
+ const relatedTarget = event.relatedTarget;
354
+ // Do not emit blur if we're moving to another input box in the same component
355
+ const isInternalFocus = relatedTarget != null && inputRefs.includes(relatedTarget);
356
+ if (!isInternalFocus) {
357
+ this.hasFocus = false;
358
+ // Reset tabIndexes when focus leaves the component
359
+ this.updateTabIndexes();
360
+ // Always emit ionBlur when focus leaves the component
361
+ this.ionBlur.emit(event);
362
+ // Only emit ionChange if the value has actually changed
363
+ if (this.focusedValue !== this.value) {
364
+ this.emitIonChange(event);
365
+ }
366
+ }
367
+ };
599
368
  /**
600
369
  * Focuses the next input box.
601
370
  */
602
371
  focusNext(currentIndex) {
603
- var _a;
604
372
  const { inputRefs, length } = this;
605
373
  if (currentIndex < length - 1) {
606
- (_a = inputRefs[currentIndex + 1]) === null || _a === void 0 ? void 0 : _a.focus();
374
+ inputRefs[currentIndex + 1]?.focus();
607
375
  }
608
376
  }
609
377
  /**
610
378
  * Focuses the previous input box.
611
379
  */
612
380
  focusPrevious(currentIndex) {
613
- var _a;
614
381
  const { inputRefs } = this;
615
382
  if (currentIndex > 0) {
616
- (_a = inputRefs[currentIndex - 1]) === null || _a === void 0 ? void 0 : _a.focus();
383
+ inputRefs[currentIndex - 1]?.focus();
617
384
  }
618
385
  }
619
386
  /**
@@ -622,12 +389,11 @@ export class InputOTP {
622
389
  * Returns -1 if all inputs are filled.
623
390
  */
624
391
  getFirstEmptyIndex() {
625
- var _a;
626
392
  const { inputValues, length } = this;
627
393
  // Create an array of the same length as the input OTP
628
394
  // and fill it with the input values
629
395
  const values = Array.from({ length }, (_, i) => inputValues[i] || '');
630
- return (_a = values.findIndex((value) => !value || value === '')) !== null && _a !== void 0 ? _a : -1;
396
+ return values.findIndex((value) => !value || value === '') ?? -1;
631
397
  }
632
398
  /**
633
399
  * Returns the index of the input that should be tabbed to.
@@ -664,6 +430,243 @@ export class InputOTP {
664
430
  input.setAttribute('aria-hidden', isEmpty && !shouldBeTabbable ? 'true' : 'false');
665
431
  });
666
432
  }
433
+ /**
434
+ * Handles keyboard navigation for the OTP component.
435
+ *
436
+ * Navigation:
437
+ * - Backspace: Clears current input and moves to previous box if empty
438
+ * - Arrow Left/Right: Moves focus between input boxes
439
+ * - Tab: Allows normal tab navigation between components
440
+ */
441
+ onKeyDown = (index) => (event) => {
442
+ const { disabled, length, readonly } = this;
443
+ const rtl = isRTL(this.el);
444
+ const input = event.target;
445
+ if (disabled) {
446
+ return;
447
+ }
448
+ if (readonly) {
449
+ if (event.key === 'Backspace' || event.key === 'Delete') {
450
+ event.preventDefault();
451
+ return;
452
+ }
453
+ }
454
+ // Meta shortcuts are used to copy, paste, and select text
455
+ // We don't want to handle these keys here
456
+ const metaShortcuts = ['a', 'c', 'v', 'x', 'r', 'z', 'y'];
457
+ const isTextSelection = input.selectionStart !== input.selectionEnd;
458
+ // Return if the key is a meta shortcut or the input value
459
+ // text is selected and let the onPaste / onInput handler manage it
460
+ if (isTextSelection || ((event.metaKey || event.ctrlKey) && metaShortcuts.includes(event.key.toLowerCase()))) {
461
+ return;
462
+ }
463
+ if (event.key === 'Backspace') {
464
+ if (this.inputValues[index]) {
465
+ // Shift all values to the right of the current index left by one
466
+ for (let i = index; i < length - 1; i++) {
467
+ this.inputValues[i] = this.inputValues[i + 1];
468
+ }
469
+ // Clear the last box
470
+ this.inputValues[length - 1] = '';
471
+ // Update all inputRefs to match inputValues
472
+ for (let i = 0; i < length; i++) {
473
+ this.inputRefs[i].value = this.inputValues[i] || '';
474
+ }
475
+ this.updateValue(event);
476
+ event.preventDefault();
477
+ }
478
+ else if (!this.inputValues[index] && index > 0) {
479
+ // If current input is empty, move to previous input
480
+ this.focusPrevious(index);
481
+ }
482
+ }
483
+ else if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {
484
+ this.isKeyboardNavigation = true;
485
+ event.preventDefault();
486
+ const isLeft = event.key === 'ArrowLeft';
487
+ const shouldMoveNext = (isLeft && rtl) || (!isLeft && !rtl);
488
+ // Only allow moving to the next input if the current has a value
489
+ if (shouldMoveNext) {
490
+ if (this.inputValues[index] && index < length - 1) {
491
+ this.focusNext(index);
492
+ }
493
+ }
494
+ else {
495
+ this.focusPrevious(index);
496
+ }
497
+ }
498
+ else if (event.key === 'Tab') {
499
+ this.isKeyboardNavigation = true;
500
+ // Let all tab events proceed normally
501
+ return;
502
+ }
503
+ };
504
+ /**
505
+ * Processes all input scenarios for each input box.
506
+ *
507
+ * This function manages:
508
+ * 1. Autofill handling
509
+ * 2. Input validation
510
+ * 3. Full selection replacement or typing in an empty box
511
+ * 4. Inserting in the middle with available space (shifting)
512
+ * 5. Single character replacement
513
+ */
514
+ onInput = (index) => (event) => {
515
+ const { disabled, length, readonly, validKeyPattern } = this;
516
+ const input = event.target;
517
+ const value = input.value;
518
+ const previousValue = this.previousInputValues[index] || '';
519
+ if (disabled || readonly) {
520
+ return;
521
+ }
522
+ // 1. Autofill handling
523
+ // If the length of the value increases by more than 1 from the previous
524
+ // value, treat this as autofill. This is to prevent the case where the
525
+ // user is typing a single character into an input box containing a value
526
+ // as that will trigger this function with a value length of 2 characters.
527
+ const isAutofill = value.length - previousValue.length > 1;
528
+ if (isAutofill) {
529
+ // Distribute valid characters across input boxes
530
+ const validChars = value
531
+ .split('')
532
+ .filter((char) => validKeyPattern.test(char))
533
+ .slice(0, length);
534
+ // If there are no valid characters coming from the
535
+ // autofill, all input refs have to be cleared after the
536
+ // browser has finished the autofill behavior
537
+ if (validChars.length === 0) {
538
+ requestAnimationFrame(() => {
539
+ this.inputRefs.forEach((input) => {
540
+ input.value = '';
541
+ });
542
+ });
543
+ }
544
+ for (let i = 0; i < length; i++) {
545
+ this.inputValues[i] = validChars[i] || '';
546
+ this.inputRefs[i].value = validChars[i] || '';
547
+ }
548
+ this.updateValue(event);
549
+ // Focus the first empty input box or the last input box if all boxes
550
+ // are filled after a small delay to ensure the input boxes have been
551
+ // updated before moving the focus
552
+ setTimeout(() => {
553
+ const nextIndex = validChars.length < length ? validChars.length : length - 1;
554
+ this.inputRefs[nextIndex]?.focus();
555
+ }, 20);
556
+ this.previousInputValues = [...this.inputValues];
557
+ return;
558
+ }
559
+ // 2. Input validation
560
+ // If the character entered is invalid (does not match the pattern),
561
+ // restore the previous value and exit
562
+ if (value.length > 0 && !validKeyPattern.test(value[value.length - 1])) {
563
+ input.value = this.inputValues[index] || '';
564
+ this.previousInputValues = [...this.inputValues];
565
+ return;
566
+ }
567
+ // 3. Full selection replacement or typing in an empty box
568
+ // If the user selects all text in the input box and types, or if the
569
+ // input box is empty, replace only this input box. If the box is empty,
570
+ // move to the next box, otherwise stay focused on this box.
571
+ const isAllSelected = input.selectionStart === 0 && input.selectionEnd === value.length;
572
+ const isEmpty = !this.inputValues[index];
573
+ if (isAllSelected || isEmpty) {
574
+ this.inputValues[index] = value;
575
+ input.value = value;
576
+ this.updateValue(event);
577
+ this.focusNext(index);
578
+ this.previousInputValues = [...this.inputValues];
579
+ return;
580
+ }
581
+ // 4. Inserting in the middle with available space (shifting)
582
+ // If typing in a filled input box and there are empty boxes at the end,
583
+ // shift all values starting at the current box to the right, and insert
584
+ // the new character at the current box.
585
+ const hasAvailableBoxAtEnd = this.inputValues[this.inputValues.length - 1] === '';
586
+ if (this.inputValues[index] && hasAvailableBoxAtEnd && value.length === 2) {
587
+ // Get the inserted character (from event or by diffing value/previousValue)
588
+ let newChar = event.data;
589
+ if (!newChar) {
590
+ newChar = value.split('').find((c, i) => c !== previousValue[i]) || value[value.length - 1];
591
+ }
592
+ // Validate the new character before shifting
593
+ if (!validKeyPattern.test(newChar)) {
594
+ input.value = this.inputValues[index] || '';
595
+ this.previousInputValues = [...this.inputValues];
596
+ return;
597
+ }
598
+ // Shift values right from the end to the insertion point
599
+ for (let i = this.inputValues.length - 1; i > index; i--) {
600
+ this.inputValues[i] = this.inputValues[i - 1];
601
+ this.inputRefs[i].value = this.inputValues[i] || '';
602
+ }
603
+ this.inputValues[index] = newChar;
604
+ this.inputRefs[index].value = newChar;
605
+ this.updateValue(event);
606
+ this.previousInputValues = [...this.inputValues];
607
+ return;
608
+ }
609
+ // 5. Single character replacement
610
+ // Handles replacing a single character in a box containing a value based
611
+ // on the cursor position. We need the cursor position to determine which
612
+ // character was the last character typed. For example, if the user types "2"
613
+ // in an input box with the cursor at the beginning of the value of "6",
614
+ // the value will be "26", but we want to grab the "2" as the last character
615
+ // typed.
616
+ const cursorPos = input.selectionStart ?? value.length;
617
+ const newCharIndex = cursorPos - 1;
618
+ const newChar = value[newCharIndex] ?? value[0];
619
+ // Check if the new character is valid before updating the value
620
+ if (!validKeyPattern.test(newChar)) {
621
+ input.value = this.inputValues[index] || '';
622
+ this.previousInputValues = [...this.inputValues];
623
+ return;
624
+ }
625
+ this.inputValues[index] = newChar;
626
+ input.value = newChar;
627
+ this.updateValue(event);
628
+ this.previousInputValues = [...this.inputValues];
629
+ };
630
+ /**
631
+ * Handles pasting text into the input OTP component.
632
+ * This function prevents the default paste behavior and
633
+ * validates the pasted text against the allowed pattern.
634
+ * It then updates the value of the input group and focuses
635
+ * the next empty input after pasting.
636
+ */
637
+ onPaste = (event) => {
638
+ const { disabled, inputRefs, length, readonly, validKeyPattern } = this;
639
+ event.preventDefault();
640
+ if (disabled || readonly) {
641
+ return;
642
+ }
643
+ const pastedText = event.clipboardData?.getData('text');
644
+ // If there is no pasted text, still emit the input change event
645
+ // because this is how the native input element behaves
646
+ // but return early because there is nothing to paste.
647
+ if (!pastedText) {
648
+ this.emitIonInput(event);
649
+ return;
650
+ }
651
+ const validChars = pastedText
652
+ .split('')
653
+ .filter((char) => validKeyPattern.test(char))
654
+ .slice(0, length);
655
+ // Always paste starting at the first box
656
+ validChars.forEach((char, index) => {
657
+ if (index < length) {
658
+ this.inputRefs[index].value = char;
659
+ this.inputValues[index] = char;
660
+ }
661
+ });
662
+ // Update the value so that all input boxes are updated
663
+ this.value = validChars.join('');
664
+ this.updateValue(event);
665
+ // Focus the next empty input after pasting
666
+ // If all boxes are filled, focus the last input
667
+ const nextEmptyIndex = validChars.length < length ? validChars.length : length - 1;
668
+ inputRefs[nextEmptyIndex]?.focus();
669
+ };
667
670
  /**
668
671
  * Determines if a separator should be shown for a given index by
669
672
  * checking if the index is included in the parsed separators array.
@@ -673,14 +676,13 @@ export class InputOTP {
673
676
  return this.parsedSeparators.includes(index + 1) && index < length - 1;
674
677
  }
675
678
  render() {
676
- var _a, _b;
677
679
  const { autocapitalize, color, disabled, el, fill, hasFocus, inheritedAttributes, inputId, inputRefs, inputValues, length, readonly, shape, size, } = this;
678
680
  const mode = getIonMode(this);
679
681
  const inputmode = this.getInputmode();
680
682
  const tabbableIndex = this.getTabbableIndex();
681
683
  const pattern = this.getPattern();
682
- const hasDescription = ((_b = (_a = el.querySelector('.input-otp-description')) === null || _a === void 0 ? void 0 : _a.textContent) === null || _b === void 0 ? void 0 : _b.trim()) !== '';
683
- return (h(Host, { key: '2bdd205b13281373a43d1a86a25df950a6f36ae1', class: createColorClasses(color, {
684
+ const hasDescription = el.querySelector('.input-otp-description')?.textContent?.trim() !== '';
685
+ return (h(Host, { key: 'bd37661e13cde21feff30c663e6813ce3fff0d9a', class: createColorClasses(color, {
684
686
  [mode]: true,
685
687
  'has-focus': hasFocus,
686
688
  [`input-otp-size-${size}`]: true,
@@ -688,26 +690,23 @@ export class InputOTP {
688
690
  [`input-otp-fill-${fill}`]: true,
689
691
  'input-otp-disabled': disabled,
690
692
  'input-otp-readonly': readonly,
691
- }) }, h("div", Object.assign({ key: 'b82d198138929327cd5429bbeb482248935ae88d', role: "group", "aria-label": "One-time password input", class: "input-otp-group", part: "group" }, inheritedAttributes), Array.from({ length }).map((_, index) => (h(Fragment, null, h("div", { class: "native-wrapper", part: "container" }, h("input", { class: "native-input", part: "native", id: `${inputId}-${index}`, "aria-label": `Input ${index + 1} of ${length}`, type: "text", autoCapitalize: autocapitalize, inputmode: inputmode, pattern: pattern, disabled: disabled, readOnly: readonly, tabIndex: index === tabbableIndex ? 0 : -1, value: inputValues[index] || '', autocomplete: "one-time-code", ref: (el) => (inputRefs[index] = el), onInput: this.onInput(index), onBlur: this.onBlur, onFocus: this.onFocus(index), onKeyDown: this.onKeyDown(index), onPaste: this.onPaste })), this.showSeparator(index) && h("div", { class: "input-otp-separator", part: "separator" }))))), h("div", { key: '0bb5444d4e653bb7310abec502f5b1d76e681c37', class: {
693
+ }) }, h("div", { key: '5e206f870024f1ecfebda999ff31e6e815774deb', role: "group", "aria-label": "One-time password input", class: "input-otp-group", ...inheritedAttributes }, Array.from({ length }).map((_, index) => (h(Fragment, null, h("div", { class: "native-wrapper" }, h("input", { class: "native-input", id: `${inputId}-${index}`, "aria-label": `Input ${index + 1} of ${length}`, type: "text", autoCapitalize: autocapitalize, inputmode: inputmode, pattern: pattern, disabled: disabled, readOnly: readonly, tabIndex: index === tabbableIndex ? 0 : -1, value: inputValues[index] || '', autocomplete: "one-time-code", ref: (el) => (inputRefs[index] = el), onInput: this.onInput(index), onBlur: this.onBlur, onFocus: this.onFocus(index), onKeyDown: this.onKeyDown(index), onPaste: this.onPaste })), this.showSeparator(index) && h("div", { class: "input-otp-separator" }))))), h("div", { key: 'c268f838ddab2c8d6a612a11c7d38e6ca076436d', class: {
692
694
  'input-otp-description': true,
693
695
  'input-otp-description-hidden': !hasDescription,
694
- }, part: "description" }, h("slot", { key: 'f717bda988a6e9b97d67025c1d3163d838f27bb5' }))));
696
+ } }, h("slot", { key: 'c0736359b26f609b795e399fc1ad9b540632af18' }))));
695
697
  }
696
698
  static get is() { return "ion-input-otp"; }
697
- static get encapsulation() { return "shadow"; }
698
- static get formAssociated() { return true; }
699
+ static get encapsulation() { return "scoped"; }
699
700
  static get originalStyleUrls() {
700
701
  return {
701
702
  "ios": ["input-otp.ios.scss"],
702
- "md": ["input-otp.md.scss"],
703
- "ionic": ["input-otp.ionic.scss"]
703
+ "md": ["input-otp.md.scss"]
704
704
  };
705
705
  }
706
706
  static get styleUrls() {
707
707
  return {
708
708
  "ios": ["input-otp.ios.css"],
709
- "md": ["input-otp.md.css"],
710
- "ionic": ["input-otp.ionic.css"]
709
+ "md": ["input-otp.md.css"]
711
710
  };
712
711
  }
713
712
  static get properties() {
@@ -1124,9 +1123,6 @@ export class InputOTP {
1124
1123
  static get elementRef() { return "el"; }
1125
1124
  static get watchers() {
1126
1125
  return [{
1127
- "propName": "disabled",
1128
- "methodName": "disabledChanged"
1129
- }, {
1130
1126
  "propName": "value",
1131
1127
  "methodName": "valueChanged"
1132
1128
  }, {
@@ -1137,6 +1133,5 @@ export class InputOTP {
1137
1133
  "methodName": "processSeparators"
1138
1134
  }];
1139
1135
  }
1140
- static get attachInternalsMemberName() { return "internals"; }
1141
1136
  }
1142
1137
  let inputIds = 0;