@ionic/core 8.8.18 → 8.8.19-dev.11786730389.1a1927bf

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 (786) 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-0Pyit076.js +4 -0
  99. package/components/{p-C_hpsif8.js → p-30_sZS2V.js} +1 -1
  100. package/components/p-83oP9gzn.js +4 -0
  101. package/components/p-8FN7p701.js +4 -0
  102. package/components/p-B-FxiyeI.js +4 -0
  103. package/components/p-B6dUPQXq.js +4 -0
  104. package/components/p-BMPN55of.js +4 -0
  105. package/components/p-BMS4t-kJ.js +4 -0
  106. package/components/p-BO4sUqUv.js +4 -0
  107. package/components/p-BSQPZ79H.js +4 -0
  108. package/components/p-Bc4wROfM.js +4 -0
  109. package/components/p-BhamHSw3.js +4 -0
  110. package/components/{p-D3xo7hqU.js → p-BpG8kBfD.js} +1 -1
  111. package/components/p-BqPNzJf6.js +4 -0
  112. package/components/p-BsVxQGUT.js +4 -0
  113. package/components/p-BxUIQcD9.js +4 -0
  114. package/components/p-C1O9GEug.js +4 -0
  115. package/components/p-C5KYjZWD.js +4 -0
  116. package/components/p-C9BGR5fy.js +4 -0
  117. package/components/p-CD4fmpem.js +4 -0
  118. package/components/p-CEW4RXZO.js +4 -0
  119. package/components/p-CKhiNOEg.js +4 -0
  120. package/components/p-CO2zzh3W.js +4 -0
  121. package/components/p-CVnwvOBD.js +4 -0
  122. package/components/p-CbhUdtjf.js +4 -0
  123. package/components/p-CejmQs3h.js +4 -0
  124. package/components/p-CfnGxjv-.js +4 -0
  125. package/components/p-ClFYbgND.js +4 -0
  126. package/components/p-CmKf4pgI.js +4 -0
  127. package/components/p-Cs5f-uOS.js +4 -0
  128. package/components/p-D7-vHX0A.js +4 -0
  129. package/{dist/ionic/p-DC3RagnA.js → components/p-DIgGHN7D.js} +1 -1
  130. package/components/p-DRfgH82D.js +4 -0
  131. package/components/p-DTY4otpr.js +4 -0
  132. package/components/{p--JUspHvy.js → p-DV85C0e0.js} +1 -1
  133. package/components/p-DVKS-ovH.js +4 -0
  134. package/components/p-DWCzVL3Y.js +4 -0
  135. package/components/p-D_XD0pVT.js +4 -0
  136. package/components/p-Dd8ajo9a.js +4 -0
  137. package/components/p-DdnhY_oj.js +4 -0
  138. package/components/p-Dm7h4Nyv.js +4 -0
  139. package/components/{p-BkKAANMJ.js → p-DwpKZ6rl.js} +1 -1
  140. package/components/p-DyePCNGr.js +4 -0
  141. package/components/p-G0TxqHfe.js +4 -0
  142. package/components/{p-ChIZKXUu.js → p-J-p0EtHR.js} +1 -1
  143. package/components/p-LXu5-6Ti.js +4 -0
  144. package/components/p-MCJ7HjWe.js +4 -0
  145. package/components/p-Obm7si-x.js +4 -0
  146. package/components/p-TXPDHL13.js +4 -0
  147. package/components/p-UuPYCOZE.js +4 -0
  148. package/components/p-WeeS7GvC.js +4 -0
  149. package/components/{p-D7uN07a3.js → p-_0JhwClE.js} +1 -1
  150. package/components/p-_IKFD3ID.js +4 -0
  151. package/components/p-byZM6qHV.js +4 -0
  152. package/components/p-hh7qIC-X.js +4 -0
  153. package/components/p-idq4JFo2.js +4 -0
  154. package/components/{p-DqLB8yFQ.js → p-ryyf_ItD.js} +1 -1
  155. package/components/p-tYCT3JGl.js +4 -0
  156. package/components/p-wzAhIh03.js +4 -0
  157. package/components/p-xOjr4bwc.js +4 -0
  158. package/components/p-yuj4Nkm_.js +4 -0
  159. package/dist/cjs/{animation-Ch16T-Nb.js → animation-C0mOHzej.js} +4 -4
  160. package/dist/cjs/{app-globals-Dd89e0MR.js → app-globals-BREG4twP.js} +1 -1
  161. package/dist/cjs/{button-active-COnxOe4X.js → button-active-BKj1rdFx.js} +3 -3
  162. package/dist/cjs/config-CjUbvdPW.js +36 -0
  163. package/dist/cjs/{dir-Cn0z1rJH.js → dir-Brx7VkvP.js} +1 -1
  164. package/dist/cjs/{format-BUFWn4Bn.js → format-pp0Du3K-.js} +40 -30
  165. package/dist/cjs/{framework-delegate-BgU6U9Ez.js → framework-delegate-NTLQ5YzV.js} +5 -7
  166. package/dist/cjs/{gesture-controller-dtqlP_q4.js → gesture-controller-BDUH7687.js} +15 -8
  167. package/dist/cjs/{haptic-ClPPQ_PS.js → haptic-Ch-X4gRx.js} +2 -3
  168. package/dist/cjs/{hardware-back-button-CXmUnTJC.js → hardware-back-button-fqpYh-kd.js} +4 -4
  169. package/dist/cjs/{helpers-gntk8bfm.js → helpers-CaLhEmTE.js} +3 -3
  170. package/dist/cjs/index-B7zJsYWS.js +429 -0
  171. package/dist/cjs/{index-BhhuJ1Yx.js → index-BlshL9ib.js} +2 -2
  172. package/dist/cjs/{index-BS2uhvhT.js → index-Ck9advCT.js} +5 -5
  173. package/dist/cjs/{index-ooS8B4p9.js → index-D2X6b92x.js} +6 -7
  174. package/dist/cjs/{index-BiRrzGDi.js → index-D48vawBq.js} +2 -2
  175. package/dist/cjs/{index-CAvQ7Tka.js → index-P1nQxrpZ.js} +10 -4
  176. package/dist/cjs/{index-BfaXsATC.js → index-uvry__L4.js} +31 -14
  177. package/dist/cjs/{index-DqmRDbxg.js → index-wOmugbdg.js} +1 -1
  178. package/dist/cjs/index.cjs.js +18 -18
  179. package/dist/cjs/{input-shims-Bn1cXfCM.js → input-shims-DvHAFqiP.js} +9 -11
  180. package/dist/cjs/{input.utils-BwhxZooW.js → input.utils-CP4fzrqk.js} +3 -4
  181. package/dist/cjs/ion-accordion_2.cjs.entry.js +368 -340
  182. package/dist/cjs/ion-action-sheet.cjs.entry.js +187 -76
  183. package/dist/cjs/ion-alert.cjs.entry.js +273 -111
  184. package/dist/cjs/ion-app_8.cjs.entry.js +307 -190
  185. package/dist/cjs/ion-avatar_3.cjs.entry.js +10 -4
  186. package/dist/cjs/ion-back-button.cjs.entry.js +47 -23
  187. package/dist/cjs/ion-backdrop.cjs.entry.js +18 -14
  188. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +199 -121
  189. package/dist/cjs/ion-button_2.cjs.entry.js +138 -66
  190. package/dist/cjs/ion-card_5.cjs.entry.js +82 -30
  191. package/dist/cjs/ion-checkbox.cjs.entry.js +152 -101
  192. package/dist/cjs/ion-chip.cjs.entry.js +17 -11
  193. package/dist/cjs/ion-col_3.cjs.entry.js +134 -10
  194. package/dist/cjs/ion-datetime-button.cjs.entry.js +253 -241
  195. package/dist/cjs/ion-datetime.cjs.entry.js +2770 -0
  196. package/dist/cjs/ion-fab_3.cjs.entry.js +139 -81
  197. package/dist/cjs/ion-img.cjs.entry.js +34 -12
  198. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +100 -72
  199. package/dist/cjs/ion-input-otp.cjs.entry.js +433 -370
  200. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +33 -19
  201. package/dist/cjs/ion-input.cjs.entry.js +314 -168
  202. package/dist/cjs/ion-item-option_3.cjs.entry.js +91 -51
  203. package/dist/cjs/ion-item_8.cjs.entry.js +181 -82
  204. package/dist/cjs/ion-loading.cjs.entry.js +146 -60
  205. package/dist/cjs/ion-menu_3.cjs.entry.js +163 -101
  206. package/dist/cjs/ion-modal.cjs.entry.js +455 -261
  207. package/dist/cjs/ion-nav_2.cjs.entry.js +100 -157
  208. package/dist/cjs/ion-picker-column-option.cjs.entry.js +37 -33
  209. package/dist/cjs/ion-picker-column.cjs.entry.js +417 -405
  210. package/dist/cjs/ion-picker.cjs.entry.js +401 -392
  211. package/dist/cjs/ion-popover.cjs.entry.js +319 -205
  212. package/dist/cjs/ion-progress-bar.cjs.entry.js +31 -25
  213. package/dist/cjs/ion-radio_2.cjs.entry.js +206 -133
  214. package/dist/cjs/ion-range.cjs.entry.js +302 -237
  215. package/dist/cjs/ion-refresher_2.cjs.entry.js +165 -93
  216. package/dist/cjs/ion-reorder_2.cjs.entry.js +53 -23
  217. package/dist/cjs/ion-ripple-effect.cjs.entry.js +14 -14
  218. package/dist/cjs/ion-route_4.cjs.entry.js +175 -71
  219. package/dist/cjs/ion-searchbar.cjs.entry.js +291 -200
  220. package/dist/cjs/ion-segment-content.cjs.entry.js +2 -2
  221. package/dist/cjs/ion-segment-view.cjs.entry.js +28 -17
  222. package/dist/cjs/ion-segment_2.cjs.entry.js +169 -126
  223. package/dist/cjs/ion-select-modal.cjs.entry.js +104 -48
  224. package/dist/cjs/ion-select_3.cjs.entry.js +759 -214
  225. package/dist/cjs/ion-spinner.cjs.entry.js +24 -10
  226. package/dist/cjs/ion-split-pane.cjs.entry.js +29 -16
  227. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +100 -41
  228. package/dist/cjs/ion-tab_2.cjs.entry.js +53 -27
  229. package/dist/cjs/ion-text.cjs.entry.js +11 -5
  230. package/dist/cjs/ion-textarea.cjs.entry.js +263 -144
  231. package/dist/cjs/ion-toast.cjs.entry.js +236 -117
  232. package/dist/cjs/ion-toggle.cjs.entry.js +175 -122
  233. package/dist/cjs/{ionic-global-BerQGEpE.js → ionic-global-k6hOWWpn.js} +13 -8
  234. package/dist/cjs/ionic.cjs.js +4 -4
  235. package/dist/cjs/{ios.transition-IMJRwn29.js → ios.transition-KvuRAe2W.js} +13 -17
  236. package/dist/cjs/{item-multiple-inputs-jOJZE_I0.js → item-multiple-inputs-BdYSbfKN.js} +1 -1
  237. package/dist/cjs/{keyboard-hHzlEQpk.js → keyboard-Cix5TVkD.js} +2 -2
  238. package/dist/cjs/{keyboard-UuAS4D_9.js → keyboard-cHxZlTyz.js} +2 -2
  239. package/dist/cjs/{keyboard-controller-GXBiBRKS.js → keyboard-controller-PtZoN2GS.js} +6 -6
  240. package/dist/cjs/loader.cjs.js +4 -4
  241. package/dist/cjs/{md.transition-CgQZxcoT.js → md.transition-Bjl5Ozph.js} +7 -8
  242. package/dist/cjs/{notch-controller-_SwR025y.js → notch-controller-BEUpEgb5.js} +1 -1
  243. package/dist/cjs/overlay-control-label-D2sdL2O8.js +50 -0
  244. package/dist/cjs/{overlays-DuSEMhIW.js → overlays-IlP4H2Gn.js} +48 -33
  245. package/dist/cjs/select-option-render-pULCGldr.js +123 -0
  246. package/dist/cjs/{status-tap-CSvBT7FV.js → status-tap-BR_ujYHg.js} +3 -3
  247. package/dist/cjs/{swipe-back-CuIiziaa.js → swipe-back-DzQKEl5g.js} +5 -5
  248. package/dist/cjs/{theme-CeDs6Hcv.js → theme-Bw0rpaNN.js} +6 -1
  249. package/dist/collection/collection-manifest.json +6 -10
  250. package/dist/collection/components/accordion/accordion.js +315 -312
  251. package/dist/collection/components/accordion-group/accordion-group.js +48 -25
  252. package/dist/collection/components/action-sheet/action-sheet.ios.css +228 -2
  253. package/dist/collection/components/action-sheet/action-sheet.js +173 -64
  254. package/dist/collection/components/action-sheet/action-sheet.md.css +174 -2
  255. package/dist/collection/components/action-sheet/test/basic/fixture.js +3 -0
  256. package/dist/collection/components/alert/alert.ios.css +279 -10
  257. package/dist/collection/components/alert/alert.js +257 -97
  258. package/dist/collection/components/alert/alert.md.css +268 -20
  259. package/dist/collection/components/app/app.js +3 -0
  260. package/dist/collection/components/back-button/back-button.js +42 -19
  261. package/dist/collection/components/backdrop/backdrop.js +16 -14
  262. package/dist/collection/components/badge/badge.js +6 -0
  263. package/dist/collection/components/breadcrumb/breadcrumb.js +91 -30
  264. package/dist/collection/components/breadcrumbs/breadcrumbs.js +103 -88
  265. package/dist/collection/components/button/button.js +132 -61
  266. package/dist/collection/components/buttons/buttons.js +13 -15
  267. package/dist/collection/components/card/card.js +54 -21
  268. package/dist/collection/components/card-header/card-header.js +12 -8
  269. package/dist/collection/components/card-subtitle/card-subtitle.js +6 -0
  270. package/dist/collection/components/card-title/card-title.js +6 -0
  271. package/dist/collection/components/checkbox/checkbox.js +147 -97
  272. package/dist/collection/components/chip/chip.js +14 -10
  273. package/dist/collection/components/col/col.js +127 -3
  274. package/dist/collection/components/content/content.js +93 -64
  275. package/dist/collection/components/datetime/datetime.ios.css +42 -2
  276. package/dist/collection/components/datetime/datetime.js +1042 -807
  277. package/dist/collection/components/datetime/datetime.md.css +42 -1
  278. package/dist/collection/components/datetime/utils/data.js +13 -14
  279. package/dist/collection/components/datetime/utils/format.js +21 -11
  280. package/dist/collection/components/datetime/utils/manipulation.js +8 -8
  281. package/dist/collection/components/datetime/utils/parse.js +10 -10
  282. package/dist/collection/components/datetime/utils/state.js +8 -2
  283. package/dist/collection/components/datetime/utils/validate.js +4 -5
  284. package/dist/collection/components/datetime-button/datetime-button.ios.css +5 -0
  285. package/dist/collection/components/datetime-button/datetime-button.js +247 -237
  286. package/dist/collection/components/datetime-button/datetime-button.md.css +5 -0
  287. package/dist/collection/components/fab/fab.js +20 -13
  288. package/dist/collection/components/fab-button/fab-button.js +104 -55
  289. package/dist/collection/components/fab-list/fab-list.js +10 -11
  290. package/dist/collection/components/footer/footer.js +50 -44
  291. package/dist/collection/components/grid/grid.js +4 -6
  292. package/dist/collection/components/header/header.js +35 -25
  293. package/dist/collection/components/img/img.js +34 -10
  294. package/dist/collection/components/infinite-scroll/infinite-scroll.js +73 -66
  295. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +20 -3
  296. package/dist/collection/components/input/input.ios.css +1 -2
  297. package/dist/collection/components/input/input.js +309 -164
  298. package/dist/collection/components/input/input.md.css +1 -2
  299. package/dist/collection/components/input-otp/input-otp.js +428 -366
  300. package/dist/collection/components/input-password-toggle/input-password-toggle.js +29 -16
  301. package/dist/collection/components/item/item.js +99 -53
  302. package/dist/collection/components/item-divider/item-divider.js +15 -10
  303. package/dist/collection/components/item-option/item-option.js +49 -21
  304. package/dist/collection/components/item-options/item-options.js +10 -7
  305. package/dist/collection/components/item-sliding/item-sliding.js +26 -20
  306. package/dist/collection/components/label/label.js +24 -4
  307. package/dist/collection/components/list/list.js +10 -7
  308. package/dist/collection/components/list-header/list-header.js +10 -0
  309. package/dist/collection/components/loading/loading.js +135 -51
  310. package/dist/collection/components/menu/menu.js +101 -59
  311. package/dist/collection/components/menu-button/menu-button.js +29 -20
  312. package/dist/collection/components/menu-toggle/menu-toggle.js +20 -13
  313. package/dist/collection/components/modal/animations/ios.enter.js +1 -1
  314. package/dist/collection/components/modal/animations/md.enter.js +1 -1
  315. package/dist/collection/components/modal/gestures/sheet.js +22 -10
  316. package/dist/collection/components/modal/gestures/swipe-to-close.js +15 -3
  317. package/dist/collection/components/modal/modal.js +398 -228
  318. package/dist/collection/components/modal/safe-area-utils.js +6 -7
  319. package/dist/collection/components/modal/test/fixtures.js +3 -0
  320. package/dist/collection/components/nav/nav.js +69 -247
  321. package/dist/collection/components/nav/view-controller.js +7 -1
  322. package/dist/collection/components/nav-link/nav-link.js +20 -9
  323. package/dist/collection/components/note/note.js +6 -0
  324. package/dist/collection/components/picker/picker.js +398 -390
  325. package/dist/collection/components/picker-column/picker-column.css +3 -0
  326. package/dist/collection/components/picker-column/picker-column.js +414 -404
  327. package/dist/collection/components/picker-column-option/picker-column-option.js +33 -31
  328. package/dist/collection/components/picker-column-option/picker-column-option.md.css +6 -1
  329. package/dist/collection/components/popover/animations/ios.enter.js +1 -2
  330. package/dist/collection/components/popover/animations/md.enter.js +1 -2
  331. package/dist/collection/components/popover/popover.ios.css +15 -0
  332. package/dist/collection/components/popover/popover.js +302 -185
  333. package/dist/collection/components/popover/popover.md.css +15 -0
  334. package/dist/collection/components/popover/test/fixture.js +1 -0
  335. package/dist/collection/components/popover/utils.js +4 -6
  336. package/dist/collection/components/progress-bar/progress-bar.js +27 -23
  337. package/dist/collection/components/radio/radio.js +102 -66
  338. package/dist/collection/components/radio-group/radio-group.js +100 -65
  339. package/dist/collection/components/radio-group/test/fixtures.js +2 -0
  340. package/dist/collection/components/range/range.js +296 -232
  341. package/dist/collection/components/refresher/refresher.js +110 -78
  342. package/dist/collection/components/refresher-content/refresher-content.js +41 -4
  343. package/dist/collection/components/reorder/reorder.js +2 -1
  344. package/dist/collection/components/reorder-group/reorder-group.js +44 -15
  345. package/dist/collection/components/ripple-effect/ripple-effect.js +12 -13
  346. package/dist/collection/components/route/route.js +39 -10
  347. package/dist/collection/components/route-redirect/route-redirect.js +31 -0
  348. package/dist/collection/components/router/router.js +37 -33
  349. package/dist/collection/components/router/utils/dom.js +25 -7
  350. package/dist/collection/components/router/utils/matching.js +7 -9
  351. package/dist/collection/components/router/utils/parser.js +1 -1
  352. package/dist/collection/components/router/utils/path.js +0 -1
  353. package/dist/collection/components/router-link/router-link.js +37 -12
  354. package/dist/collection/components/router-outlet/router-outlet.js +82 -21
  355. package/dist/collection/components/row/row.js +1 -1
  356. package/dist/collection/components/searchbar/searchbar.js +289 -199
  357. package/dist/collection/components/segment/segment.js +120 -85
  358. package/dist/collection/components/segment-button/segment-button.js +43 -37
  359. package/dist/collection/components/segment-content/segment-content.js +1 -1
  360. package/dist/collection/components/segment-view/segment-view.js +26 -16
  361. package/dist/collection/components/select/select.ios.css +33 -0
  362. package/dist/collection/components/select/select.js +597 -166
  363. package/dist/collection/components/select/select.md.css +33 -0
  364. package/dist/collection/components/select-modal/select-modal.ios.css +218 -0
  365. package/dist/collection/components/select-modal/select-modal.js +92 -38
  366. package/dist/collection/components/select-modal/select-modal.md.css +164 -0
  367. package/dist/collection/components/select-modal/test/fixtures.js +8 -1
  368. package/dist/collection/components/select-option/select-option.js +110 -9
  369. package/dist/collection/components/select-popover/select-popover.ios.css +218 -0
  370. package/dist/collection/components/select-popover/select-popover.js +103 -36
  371. package/dist/collection/components/select-popover/select-popover.md.css +164 -0
  372. package/dist/collection/components/select-popover/test/fixtures.js +8 -1
  373. package/dist/collection/components/skeleton-text/skeleton-text.js +12 -8
  374. package/dist/collection/components/spinner/spinner.js +21 -9
  375. package/dist/collection/components/split-pane/split-pane.js +27 -15
  376. package/dist/collection/components/tab/tab.js +17 -6
  377. package/dist/collection/components/tab-bar/tab-bar.js +32 -14
  378. package/dist/collection/components/tab-button/tab-button.js +62 -23
  379. package/dist/collection/components/tabs/tabs.js +33 -20
  380. package/dist/collection/components/text/text.js +8 -2
  381. package/dist/collection/components/textarea/textarea.js +257 -139
  382. package/dist/collection/components/thumbnail/thumbnail.js +1 -1
  383. package/dist/collection/components/title/title.js +18 -2
  384. package/dist/collection/components/toast/toast.js +223 -106
  385. package/dist/collection/components/toggle/toggle.js +167 -115
  386. package/dist/collection/components/toolbar/toolbar.js +15 -7
  387. package/dist/collection/global/config.js +4 -6
  388. package/dist/collection/global/ionic-global.js +8 -2
  389. package/dist/collection/index.js +1 -1
  390. package/dist/collection/utils/animation/animation.js +3 -3
  391. package/dist/collection/utils/config.js +5 -4
  392. package/dist/collection/utils/focus-controller/index.js +1 -1
  393. package/dist/collection/utils/focus-trap.js +3 -3
  394. package/dist/collection/utils/framework-delegate.js +4 -6
  395. package/dist/collection/utils/gesture/gesture-controller.js +15 -8
  396. package/dist/collection/utils/gesture/index.js +10 -2
  397. package/dist/collection/utils/gesture/listener.js +1 -1
  398. package/dist/collection/utils/hardware-back-button.js +3 -3
  399. package/dist/collection/utils/helpers.js +2 -2
  400. package/dist/collection/utils/input-shims/hacks/scroll-assist.js +4 -5
  401. package/dist/collection/utils/input-shims/hacks/scroll-data.js +1 -2
  402. package/dist/collection/utils/keyboard/keyboard-controller.js +5 -5
  403. package/dist/collection/utils/keyboard/keyboard.js +1 -1
  404. package/dist/collection/utils/logging/index.js +23 -4
  405. package/dist/collection/utils/menu-controller/index.js +1 -2
  406. package/dist/collection/utils/native/haptic.js +2 -3
  407. package/dist/collection/utils/native/keyboard.js +2 -2
  408. package/dist/collection/utils/native/status-bar.js +1 -1
  409. package/dist/collection/utils/overlay-control-label.js +45 -0
  410. package/dist/collection/utils/overlays.js +38 -23
  411. package/dist/collection/utils/platform.js +4 -5
  412. package/dist/collection/utils/rtl/dir.js +1 -1
  413. package/dist/collection/utils/sanitization/index.js +276 -20
  414. package/dist/collection/utils/select-option-render.js +118 -0
  415. package/dist/collection/utils/slot-mutation-controller.js +1 -2
  416. package/dist/collection/utils/test/playwright/apply-keyboard-focus.js +1 -1
  417. package/dist/collection/utils/test/playwright/drag-element.js +2 -3
  418. package/dist/collection/utils/test/playwright/generator.js +3 -4
  419. package/dist/collection/utils/test/playwright/page/event-spy.js +11 -12
  420. package/dist/collection/utils/test/playwright/page/utils/goto.js +4 -5
  421. package/dist/collection/utils/test/playwright/page/utils/set-content.js +1 -1
  422. package/dist/collection/utils/test/playwright/page/utils/set-ion-viewport.js +2 -3
  423. package/dist/collection/utils/test/press-keys.js +10 -17
  424. package/dist/collection/utils/theme.js +6 -1
  425. package/dist/collection/utils/transition/ios.transition.js +9 -13
  426. package/dist/collection/utils/transition/md.transition.js +3 -4
  427. package/dist/docs.json +557 -1273
  428. package/dist/esm/{animation-DLJpuoEz.js → animation-CGFdmGk9.js} +4 -4
  429. package/dist/esm/{app-globals-D0C5S4hU.js → app-globals-CYmMeGdU.js} +1 -1
  430. package/dist/esm/{button-active-BSpTQmS9.js → button-active--80YqSHA.js} +3 -3
  431. package/dist/esm/config-DWCzVL3Y.js +32 -0
  432. package/dist/esm/{dir-C53feagD.js → dir-B-FxiyeI.js} +1 -1
  433. package/dist/esm/{format-CAmvpAez.js → format-Dcwga61t.js} +41 -31
  434. package/dist/esm/{framework-delegate-FnPGymXL.js → framework-delegate--ajhSeKH.js} +5 -7
  435. package/dist/esm/{gesture-controller-BTEOs1at.js → gesture-controller-TXPDHL13.js} +15 -8
  436. package/dist/esm/{haptic-DzAMWJuk.js → haptic-Cq4UAeka.js} +2 -3
  437. package/dist/esm/{hardware-back-button-B93Gru0Y.js → hardware-back-button-gLJHMX_F.js} +4 -4
  438. package/dist/esm/{helpers-HEqiOzXb.js → helpers-DexiPLIC.js} +3 -3
  439. package/dist/esm/{index-B_dQk_WE.js → index-8s8kZKJ7.js} +5 -5
  440. package/dist/esm/{index-BRHzoo00.js → index-BCgUwrV0.js} +2 -2
  441. package/dist/esm/{index-DV3sJJW8.js → index-BvabGprD.js} +2 -2
  442. package/dist/esm/index-CKM1DdGm.js +424 -0
  443. package/dist/esm/{index-tcQvqkiX.js → index-ChhhtsGZ.js} +32 -15
  444. package/dist/esm/{index-Q6UPU0Ay.js → index-CumkqGQF.js} +6 -7
  445. package/dist/esm/{index-CfgBF1SE.js → index-DppOcPFQ.js} +10 -4
  446. package/dist/esm/{index-Dw-wN0Ja.js → index-_Za5VB9w.js} +2 -2
  447. package/dist/esm/index.js +16 -15
  448. package/dist/esm/{input-shims-LXhI7LEx.js → input-shims-BB0AKb_k.js} +9 -11
  449. package/dist/esm/{input.utils-Y6NgW8bw.js → input.utils-J6HWocLA.js} +3 -4
  450. package/dist/esm/ion-accordion_2.entry.js +368 -340
  451. package/dist/esm/ion-action-sheet.entry.js +187 -76
  452. package/dist/esm/ion-alert.entry.js +272 -110
  453. package/dist/esm/ion-app_8.entry.js +307 -190
  454. package/dist/esm/ion-avatar_3.entry.js +10 -4
  455. package/dist/esm/ion-back-button.entry.js +47 -23
  456. package/dist/esm/ion-backdrop.entry.js +18 -14
  457. package/dist/esm/ion-breadcrumb_2.entry.js +199 -121
  458. package/dist/esm/ion-button_2.entry.js +138 -66
  459. package/dist/esm/ion-card_5.entry.js +82 -30
  460. package/dist/esm/ion-checkbox.entry.js +152 -101
  461. package/dist/esm/ion-chip.entry.js +17 -11
  462. package/dist/esm/ion-col_3.entry.js +134 -10
  463. package/dist/esm/ion-datetime-button.entry.js +253 -241
  464. package/dist/esm/ion-datetime.entry.js +2768 -0
  465. package/dist/esm/ion-fab_3.entry.js +139 -81
  466. package/dist/esm/ion-img.entry.js +34 -12
  467. package/dist/esm/ion-infinite-scroll_2.entry.js +99 -71
  468. package/dist/esm/ion-input-otp.entry.js +433 -370
  469. package/dist/esm/ion-input-password-toggle.entry.js +33 -19
  470. package/dist/esm/ion-input.entry.js +314 -168
  471. package/dist/esm/ion-item-option_3.entry.js +91 -51
  472. package/dist/esm/ion-item_8.entry.js +181 -82
  473. package/dist/esm/ion-loading.entry.js +145 -59
  474. package/dist/esm/ion-menu_3.entry.js +163 -101
  475. package/dist/esm/ion-modal.entry.js +455 -261
  476. package/dist/esm/ion-nav_2.entry.js +100 -157
  477. package/dist/esm/ion-picker-column-option.entry.js +37 -33
  478. package/dist/esm/ion-picker-column.entry.js +417 -405
  479. package/dist/esm/ion-picker.entry.js +401 -392
  480. package/dist/esm/ion-popover.entry.js +319 -205
  481. package/dist/esm/ion-progress-bar.entry.js +31 -25
  482. package/dist/esm/ion-radio_2.entry.js +206 -133
  483. package/dist/esm/ion-range.entry.js +302 -237
  484. package/dist/esm/ion-refresher_2.entry.js +163 -91
  485. package/dist/esm/ion-reorder_2.entry.js +53 -23
  486. package/dist/esm/ion-ripple-effect.entry.js +14 -14
  487. package/dist/esm/ion-route_4.entry.js +175 -71
  488. package/dist/esm/ion-searchbar.entry.js +291 -200
  489. package/dist/esm/ion-segment-content.entry.js +2 -2
  490. package/dist/esm/ion-segment-view.entry.js +28 -17
  491. package/dist/esm/ion-segment_2.entry.js +169 -126
  492. package/dist/esm/ion-select-modal.entry.js +104 -48
  493. package/dist/esm/ion-select_3.entry.js +760 -215
  494. package/dist/esm/ion-spinner.entry.js +24 -10
  495. package/dist/esm/ion-split-pane.entry.js +29 -16
  496. package/dist/esm/ion-tab-bar_2.entry.js +100 -41
  497. package/dist/esm/ion-tab_2.entry.js +53 -27
  498. package/dist/esm/ion-text.entry.js +11 -5
  499. package/dist/esm/ion-textarea.entry.js +263 -144
  500. package/dist/esm/ion-toast.entry.js +235 -116
  501. package/dist/esm/ion-toggle.entry.js +175 -122
  502. package/dist/esm/{ionic-global-Cp_eT4sZ.js → ionic-global-BVB7BrLT.js} +13 -8
  503. package/dist/esm/ionic.js +5 -5
  504. package/dist/esm/{ios.transition-ClFrsIrS.js → ios.transition-BdhybwLl.js} +13 -17
  505. package/dist/esm/{item-multiple-inputs-DlNuqNJm.js → item-multiple-inputs-rU8VaNNg.js} +1 -1
  506. package/dist/esm/{keyboard-ywgs5efA.js → keyboard-Cj8mLJeq.js} +2 -2
  507. package/dist/esm/{keyboard-CUw4ekVy.js → keyboard-DAF8GNJ9.js} +2 -2
  508. package/dist/esm/{keyboard-controller-BaaVITYt.js → keyboard-controller-DEwoa1ev.js} +6 -6
  509. package/dist/esm/loader.js +5 -5
  510. package/dist/esm/{md.transition-D0msQmzI.js → md.transition-B5lqKGCs.js} +7 -8
  511. package/dist/esm/{notch-controller-DKDjU_O7.js → notch-controller-CrUGyHYz.js} +1 -1
  512. package/dist/esm/overlay-control-label-BSQPZ79H.js +47 -0
  513. package/dist/esm/{overlays-Dg0q2_tJ.js → overlays-CjWwtvf1.js} +48 -33
  514. package/dist/esm/select-option-render-C4m76VGH.js +121 -0
  515. package/dist/esm/{status-tap-vO-6s4Yp.js → status-tap-DpLhkDWs.js} +3 -3
  516. package/dist/esm/{swipe-back-DQ1q5MgD.js → swipe-back-cz4-lyG3.js} +5 -5
  517. package/dist/esm/{theme-DiVJyqlX.js → theme-byZM6qHV.js} +6 -1
  518. package/dist/html.html-data.json +52 -80
  519. package/dist/ionic/index.esm.js +1 -1
  520. package/dist/ionic/ionic.esm.js +1 -1
  521. package/dist/ionic/p-0266b7e1.entry.js +4 -0
  522. package/dist/ionic/p-08443c08.entry.js +4 -0
  523. package/dist/ionic/p-08f1ed1c.entry.js +4 -0
  524. package/dist/ionic/p-09b47b7d.entry.js +4 -0
  525. package/dist/ionic/p-0FNc80PN.js +4 -0
  526. package/dist/ionic/p-12589d59.entry.js +4 -0
  527. package/dist/ionic/p-1d2e53e8.entry.js +4 -0
  528. package/dist/ionic/p-1edf0573.entry.js +4 -0
  529. package/dist/ionic/p-214e000a.entry.js +4 -0
  530. package/dist/ionic/p-21a7fb2a.entry.js +4 -0
  531. package/dist/ionic/p-2ce59395.entry.js +4 -0
  532. package/dist/ionic/p-33829e94.entry.js +4 -0
  533. package/dist/ionic/p-374b10cb.entry.js +4 -0
  534. package/dist/ionic/p-3835a020.entry.js +4 -0
  535. package/dist/ionic/p-3c5fdd27.entry.js +4 -0
  536. package/dist/ionic/{p-c6e49f3f.entry.js → p-40424a88.entry.js} +1 -1
  537. package/dist/ionic/p-48b6835f.entry.js +4 -0
  538. package/dist/ionic/p-4eOQC00Z.js +4 -0
  539. package/dist/ionic/p-5394e1d4.entry.js +4 -0
  540. package/dist/ionic/p-53bac1c9.entry.js +4 -0
  541. package/dist/ionic/p-5506caeb.entry.js +4 -0
  542. package/dist/ionic/p-5993a77f.entry.js +4 -0
  543. package/dist/ionic/p-6277efba.entry.js +4 -0
  544. package/dist/ionic/p-62e71297.entry.js +4 -0
  545. package/dist/ionic/p-6b286c5c.entry.js +4 -0
  546. package/dist/ionic/p-7116e558.entry.js +4 -0
  547. package/dist/ionic/p-74f30659.entry.js +4 -0
  548. package/dist/ionic/p-7bb3e957.entry.js +4 -0
  549. package/dist/ionic/p-82525fb0.entry.js +4 -0
  550. package/dist/ionic/p-865fa114.entry.js +4 -0
  551. package/dist/ionic/p-8a21bdbd.entry.js +4 -0
  552. package/dist/ionic/p-8e1d9e3a.entry.js +4 -0
  553. package/dist/ionic/p-8f3a1995.entry.js +4 -0
  554. package/dist/ionic/p-91c6faf1.entry.js +4 -0
  555. package/dist/ionic/{p-aaeedb6b.entry.js → p-9b865fe6.entry.js} +1 -1
  556. package/dist/ionic/p-9nmHvEvw.js +4 -0
  557. package/dist/ionic/p-B-FxiyeI.js +4 -0
  558. package/dist/ionic/p-BB0LlG4y.js +4 -0
  559. package/dist/ionic/p-BMPN55of.js +4 -0
  560. package/dist/ionic/p-BQ8oNV0v.js +4 -0
  561. package/dist/ionic/p-BSQPZ79H.js +4 -0
  562. package/dist/ionic/p-BhamHSw3.js +4 -0
  563. package/dist/ionic/p-BjvtSsVI.js +4 -0
  564. package/dist/ionic/p-BkfAWuv6.js +4 -0
  565. package/dist/ionic/p-BnMQxWON.js +4 -0
  566. package/dist/ionic/{p-DV3sJJW8.js → p-BvabGprD.js} +1 -1
  567. package/dist/ionic/p-BwIp10KV.js +4 -0
  568. package/dist/ionic/p-C-94tAim.js +4 -0
  569. package/dist/ionic/p-C6eME8Ey.js +4 -0
  570. package/dist/ionic/{p-DIuEbVLu.js → p-CKUuSnDR.js} +1 -1
  571. package/dist/ionic/p-CMRtMbJc.js +4 -0
  572. package/dist/ionic/p-CPcPmkGv.js +4 -0
  573. package/dist/ionic/{p-biz8zWmJ.js → p-CQ_4TirR.js} +1 -1
  574. package/dist/ionic/p-CaRuIadB.js +4 -0
  575. package/dist/ionic/p-Cdjxf_yg.js +4 -0
  576. package/dist/ionic/p-ChhhtsGZ.js +5 -0
  577. package/dist/ionic/p-CmKf4pgI.js +4 -0
  578. package/dist/ionic/p-D5t_-oMk.js +4 -0
  579. package/dist/ionic/p-D94b61er.js +4 -0
  580. package/dist/ionic/p-DCI3rXQo.js +4 -0
  581. package/dist/ionic/p-DDhtUaaA.js +4 -0
  582. package/dist/ionic/p-DWCzVL3Y.js +4 -0
  583. package/dist/ionic/p-Dn0mqQ_R.js +4 -0
  584. package/dist/ionic/{p-KjNvRoEp.js → p-I3In7hMC.js} +1 -1
  585. package/dist/ionic/p-T71k3C35.js +4 -0
  586. package/dist/ionic/p-TXPDHL13.js +4 -0
  587. package/dist/ionic/p-a641d428.entry.js +4 -0
  588. package/dist/ionic/p-ac6ef997.entry.js +4 -0
  589. package/dist/ionic/p-acf0a6af.entry.js +4 -0
  590. package/dist/ionic/p-ad98e3ff.entry.js +4 -0
  591. package/dist/ionic/p-af5166f5.entry.js +4 -0
  592. package/dist/ionic/p-b24dc0a1.entry.js +4 -0
  593. package/dist/ionic/p-ba8a598f.entry.js +4 -0
  594. package/dist/ionic/p-bf7c1f05.entry.js +4 -0
  595. package/dist/ionic/p-byZM6qHV.js +4 -0
  596. package/dist/ionic/p-c3f65965.entry.js +4 -0
  597. package/dist/ionic/p-c8fbe544.entry.js +4 -0
  598. package/dist/ionic/p-cb12f6c3.entry.js +4 -0
  599. package/dist/ionic/p-cec87704.entry.js +4 -0
  600. package/dist/ionic/p-dbfd2d52.entry.js +4 -0
  601. package/dist/ionic/p-e1e5b507.entry.js +4 -0
  602. package/dist/ionic/p-ede019ef.entry.js +4 -0
  603. package/dist/ionic/p-efef6788.entry.js +4 -0
  604. package/dist/ionic/p-f046aa37.entry.js +4 -0
  605. package/dist/ionic/p-f402f5a4.entry.js +4 -0
  606. package/dist/ionic/p-f622796d.entry.js +4 -0
  607. package/{components/p-B-JJgYSG.js → dist/ionic/p-kJA95YWg.js} +1 -1
  608. package/dist/types/components/img/img.d.ts +2 -0
  609. package/dist/types/components/input/input.d.ts +1 -1
  610. package/dist/types/components/modal/modal-interface.d.ts +9 -0
  611. package/dist/types/components/modal/modal.d.ts +11 -4
  612. package/dist/types/components/nav/nav-interface.d.ts +0 -1
  613. package/dist/types/components/nav/nav.d.ts +2 -22
  614. package/dist/types/components/route/route.d.ts +1 -1
  615. package/dist/types/components/router-outlet/router-outlet.d.ts +7 -0
  616. package/dist/types/components/searchbar/searchbar.d.ts +1 -1
  617. package/dist/types/components/select/select-interface.d.ts +31 -0
  618. package/dist/types/components/select/select.d.ts +18 -0
  619. package/dist/types/components/select-option/select-option.d.ts +42 -1
  620. package/dist/types/components.d.ts +74 -311
  621. package/dist/types/index.d.ts +1 -1
  622. package/dist/types/interface.d.ts +0 -1
  623. package/dist/types/utils/config.d.ts +1 -8
  624. package/dist/types/utils/logging/index.d.ts +2 -1
  625. package/dist/types/utils/overlay-control-label.d.ts +32 -0
  626. package/dist/types/utils/overlays.d.ts +11 -9
  627. package/dist/types/utils/sanitization/index.d.ts +58 -2
  628. package/dist/types/utils/select-option-render.d.ts +53 -0
  629. package/dist/types/utils/test/playwright/playwright-page.d.ts +1 -1
  630. package/dist/types/utils/test/playwright/testExpect.d.ts +1 -1
  631. package/hydrate/index.js +10343 -7070
  632. package/hydrate/index.mjs +10343 -7070
  633. package/package.json +55 -12
  634. package/components/ion-picker-legacy-column.d.ts +0 -11
  635. package/components/ion-picker-legacy-column.js +0 -4
  636. package/components/ion-picker-legacy.d.ts +0 -11
  637. package/components/ion-picker-legacy.js +0 -4
  638. package/components/p-A3O24YmY.js +0 -4
  639. package/components/p-ABkNVeU9.js +0 -4
  640. package/components/p-B9jFTlwE.js +0 -4
  641. package/components/p-BLmJ0zRm.js +0 -4
  642. package/components/p-BMI53wYL.js +0 -4
  643. package/components/p-BSEgsdFI.js +0 -4
  644. package/components/p-BTEOs1at.js +0 -4
  645. package/components/p-BlIAuGv2.js +0 -4
  646. package/components/p-Bnsn6KaP.js +0 -4
  647. package/components/p-BsBCoGa-.js +0 -4
  648. package/components/p-Bz0dSlXZ.js +0 -4
  649. package/components/p-C53feagD.js +0 -4
  650. package/components/p-CHqRYvYm.js +0 -4
  651. package/components/p-CQGnMY3n.js +0 -4
  652. package/components/p-CSZf8_j0.js +0 -4
  653. package/components/p-C_xFdyXe.js +0 -4
  654. package/components/p-Cf2jSDS8.js +0 -4
  655. package/components/p-Cfx4M1Bn.js +0 -4
  656. package/components/p-CkMSOsFF.js +0 -4
  657. package/components/p-Cl0B-RWe.js +0 -4
  658. package/components/p-CmR5uXej.js +0 -4
  659. package/components/p-Cp4GRDqq.js +0 -4
  660. package/components/p-CsNJ1ULL.js +0 -4
  661. package/components/p-CtWGkNnJ.js +0 -4
  662. package/components/p-CzCbeKys.js +0 -4
  663. package/components/p-D-aHdMxW.js +0 -4
  664. package/components/p-D0d8qTwj.js +0 -4
  665. package/components/p-D13Eaw-8.js +0 -4
  666. package/components/p-D6Ynv7Xh.js +0 -4
  667. package/components/p-DCnGU1fF.js +0 -4
  668. package/components/p-DGvrK8dD.js +0 -4
  669. package/components/p-DOFCbuQR.js +0 -4
  670. package/components/p-DRxvM2Ic.js +0 -4
  671. package/components/p-DV5mPYQS.js +0 -4
  672. package/components/p-DWkAgceV.js +0 -4
  673. package/components/p-DiVJyqlX.js +0 -4
  674. package/components/p-DqZAXv2t.js +0 -4
  675. package/components/p-Osve4qkc.js +0 -4
  676. package/components/p-R8zmRi4c.js +0 -4
  677. package/components/p-SLS1rDZM.js +0 -4
  678. package/components/p-aJ6PBUvj.js +0 -4
  679. package/components/p-cyNmxje6.js +0 -4
  680. package/components/p-gAg0kXZp.js +0 -4
  681. package/components/p-gYiraiT_.js +0 -4
  682. package/components/p-j5IxBIan.js +0 -4
  683. package/components/p-k_E4tX5Z.js +0 -4
  684. package/components/p-oD4kcBRX.js +0 -4
  685. package/components/p-rCa2eL0j.js +0 -4
  686. package/components/p-vRBNsYbs.js +0 -4
  687. package/components/p-yEQxMl70.js +0 -4
  688. package/components/p-yzCsOZE2.js +0 -4
  689. package/dist/cjs/config-D6C-KlA9.js +0 -201
  690. package/dist/cjs/ion-datetime_3.cjs.entry.js +0 -3167
  691. package/dist/collection/components/picker-legacy/animations/ios.enter.js +0 -27
  692. package/dist/collection/components/picker-legacy/animations/ios.leave.js +0 -23
  693. package/dist/collection/components/picker-legacy/picker-interface.js +0 -1
  694. package/dist/collection/components/picker-legacy/picker.ios.css +0 -300
  695. package/dist/collection/components/picker-legacy/picker.js +0 -890
  696. package/dist/collection/components/picker-legacy/picker.md.css +0 -287
  697. package/dist/collection/components/picker-legacy-column/picker-column.ios.css +0 -231
  698. package/dist/collection/components/picker-legacy-column/picker-column.js +0 -422
  699. package/dist/collection/components/picker-legacy-column/picker-column.md.css +0 -222
  700. package/dist/collection/components/picker-legacy-column/test/test.utils.js +0 -43
  701. package/dist/esm/config-DQCONYYp.js +0 -195
  702. package/dist/esm/ion-datetime_3.entry.js +0 -3163
  703. package/dist/ionic/p-01f81ea5.entry.js +0 -4
  704. package/dist/ionic/p-06c232a4.entry.js +0 -4
  705. package/dist/ionic/p-0caa922c.entry.js +0 -4
  706. package/dist/ionic/p-0dc33652.entry.js +0 -4
  707. package/dist/ionic/p-0fa9c382.entry.js +0 -4
  708. package/dist/ionic/p-10e833ef.entry.js +0 -4
  709. package/dist/ionic/p-21eb76d5.entry.js +0 -4
  710. package/dist/ionic/p-27d30585.entry.js +0 -4
  711. package/dist/ionic/p-2a05aa64.entry.js +0 -4
  712. package/dist/ionic/p-2b204c59.entry.js +0 -4
  713. package/dist/ionic/p-2bb2cb18.entry.js +0 -4
  714. package/dist/ionic/p-2fa58e80.entry.js +0 -4
  715. package/dist/ionic/p-3353c229.entry.js +0 -4
  716. package/dist/ionic/p-34586ead.entry.js +0 -4
  717. package/dist/ionic/p-37e720da.entry.js +0 -4
  718. package/dist/ionic/p-390ca786.entry.js +0 -4
  719. package/dist/ionic/p-3ae5f277.entry.js +0 -4
  720. package/dist/ionic/p-4654ae1c.entry.js +0 -4
  721. package/dist/ionic/p-4745f534.entry.js +0 -4
  722. package/dist/ionic/p-4858af1f.entry.js +0 -4
  723. package/dist/ionic/p-4baa5b82.entry.js +0 -4
  724. package/dist/ionic/p-4e92a11f.entry.js +0 -4
  725. package/dist/ionic/p-50e1194a.entry.js +0 -4
  726. package/dist/ionic/p-5334df12.entry.js +0 -4
  727. package/dist/ionic/p-5d1da0a2.entry.js +0 -4
  728. package/dist/ionic/p-5e2f73ee.entry.js +0 -4
  729. package/dist/ionic/p-5eb8e86d.entry.js +0 -4
  730. package/dist/ionic/p-65ebdf1b.entry.js +0 -4
  731. package/dist/ionic/p-746fa988.entry.js +0 -4
  732. package/dist/ionic/p-75dc25ba.entry.js +0 -4
  733. package/dist/ionic/p-7c319341.entry.js +0 -4
  734. package/dist/ionic/p-829367ed.entry.js +0 -4
  735. package/dist/ionic/p-84d5ce05.entry.js +0 -4
  736. package/dist/ionic/p-874b4bd8.entry.js +0 -4
  737. package/dist/ionic/p-8eb8ee76.entry.js +0 -4
  738. package/dist/ionic/p-9eeaBrnk.js +0 -4
  739. package/dist/ionic/p-9f9db3a2.entry.js +0 -4
  740. package/dist/ionic/p-9fa3c405.entry.js +0 -4
  741. package/dist/ionic/p-BGqMS-oh.js +0 -4
  742. package/dist/ionic/p-BTEOs1at.js +0 -4
  743. package/dist/ionic/p-BUFIpxKM.js +0 -4
  744. package/dist/ionic/p-C0eMdTCW.js +0 -4
  745. package/dist/ionic/p-C53feagD.js +0 -4
  746. package/dist/ionic/p-CFlfIb2g.js +0 -4
  747. package/dist/ionic/p-CKvCXMs9.js +0 -4
  748. package/dist/ionic/p-Cl0B-RWe.js +0 -4
  749. package/dist/ionic/p-CmcFnK-B.js +0 -4
  750. package/dist/ionic/p-CtWGkNnJ.js +0 -4
  751. package/dist/ionic/p-Cx3IXROA.js +0 -4
  752. package/dist/ionic/p-D-3ycHmd.js +0 -4
  753. package/dist/ionic/p-D13Eaw-8.js +0 -4
  754. package/dist/ionic/p-D4uTWt4-.js +0 -4
  755. package/dist/ionic/p-DiVJyqlX.js +0 -4
  756. package/dist/ionic/p-DoJvtrbw.js +0 -4
  757. package/dist/ionic/p-DqN5EA2O.js +0 -4
  758. package/dist/ionic/p-DzWaWHGc.js +0 -4
  759. package/dist/ionic/p-Nqf6uvGh.js +0 -4
  760. package/dist/ionic/p-SNAkTDfm.js +0 -4
  761. package/dist/ionic/p-VAemlbDS.js +0 -4
  762. package/dist/ionic/p-a3bdcae6.entry.js +0 -4
  763. package/dist/ionic/p-af55a72f.entry.js +0 -4
  764. package/dist/ionic/p-b2020591.entry.js +0 -4
  765. package/dist/ionic/p-b9fadbfe.entry.js +0 -4
  766. package/dist/ionic/p-c0fb8edd.entry.js +0 -4
  767. package/dist/ionic/p-c38b648e.entry.js +0 -4
  768. package/dist/ionic/p-c4d8641b.entry.js +0 -4
  769. package/dist/ionic/p-ca2ab74d.entry.js +0 -4
  770. package/dist/ionic/p-d889ff6d.entry.js +0 -4
  771. package/dist/ionic/p-dfa8d673.entry.js +0 -4
  772. package/dist/ionic/p-ea56626d.entry.js +0 -4
  773. package/dist/ionic/p-ef4c3bee.entry.js +0 -4
  774. package/dist/ionic/p-f386f6ae.entry.js +0 -4
  775. package/dist/ionic/p-mjKAFv89.js +0 -4
  776. package/dist/ionic/p-tcQvqkiX.js +0 -5
  777. package/dist/ionic/p-uWtqTrG8.js +0 -4
  778. package/dist/ionic/p-viFHDgRs.js +0 -4
  779. package/dist/ionic/p-xWb6fgfq.js +0 -4
  780. package/dist/types/components/picker-legacy/animations/ios.enter.d.ts +0 -5
  781. package/dist/types/components/picker-legacy/animations/ios.leave.d.ts +0 -5
  782. package/dist/types/components/picker-legacy/picker-interface.d.ts +0 -52
  783. package/dist/types/components/picker-legacy/picker.d.ts +0 -158
  784. package/dist/types/components/picker-legacy-column/picker-column.d.ts +0 -46
  785. package/dist/types/components/picker-legacy-column/test/test.utils.d.ts +0 -9
  786. /package/components/{p-CO7fmmxt.js → p-LpMHEu3v.js} +0 -0
@@ -3,8 +3,8 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- var index = require('./index-BfaXsATC.js');
7
- var helpers = require('./helpers-gntk8bfm.js');
6
+ var index = require('./index-uvry__L4.js');
7
+ var helpers = require('./helpers-CaLhEmTE.js');
8
8
 
9
9
  const pickerIosCss = () => `:host{display:-ms-flexbox;display:flex;position:relative;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:100%;height:200px;direction:ltr;z-index:0}:host .picker-before,:host .picker-after{position:absolute;width:100%;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:1;pointer-events:none}:host .picker-before{top:0;height:83px}:host .picker-before{inset-inline-start:0}:host .picker-after{top:116px;height:84px}:host .picker-after{inset-inline-start:0}:host .picker-highlight{border-radius:var(--highlight-border-radius, 8px);left:0;right:0;top:50%;bottom:0;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;margin-top:0;margin-bottom:0;position:absolute;width:calc(100% - 16px);height:34px;-webkit-transform:translateY(-50%);transform:translateY(-50%);background:var(--highlight-background);z-index:-1}:host input{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;margin:0;padding:0;border:0;outline:0;clip:rect(0 0 0 0);opacity:0;overflow:hidden;-webkit-appearance:none;-moz-appearance:none}:host ::slotted(ion-picker-column:first-of-type){text-align:start}:host ::slotted(ion-picker-column:last-of-type){text-align:end}:host ::slotted(ion-picker-column:only-child){text-align:center}:host .picker-before{background:-webkit-gradient(linear, left top, left bottom, color-stop(20%, rgba(var(--fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1)), to(rgba(var(--fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0.8)));background:linear-gradient(to bottom, rgba(var(--fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1) 20%, rgba(var(--fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0.8) 100%)}:host .picker-after{background:-webkit-gradient(linear, left bottom, left top, color-stop(20%, rgba(var(--fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1)), to(rgba(var(--fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0.8)));background:linear-gradient(to top, rgba(var(--fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1) 20%, rgba(var(--fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0.8) 100%)}:host .picker-highlight{background:var(--highlight-background, var(--ion-color-step-150, var(--ion-background-color-step-150, #eeeeef)))}`;
10
10
 
@@ -14,427 +14,249 @@ const Picker = class {
14
14
  constructor(hostRef) {
15
15
  index.registerInstance(this, hostRef);
16
16
  this.ionInputModeChange = index.createEvent(this, "ionInputModeChange", 7);
17
- this.useInputMode = false;
18
- this.isInHighlightBounds = (ev) => {
19
- const { highlightEl } = this;
20
- if (!highlightEl) {
21
- return false;
22
- }
23
- const bbox = highlightEl.getBoundingClientRect();
24
- /**
25
- * Check to see if the user clicked
26
- * outside the bounds of the highlight.
27
- */
28
- const outsideX = ev.clientX < bbox.left || ev.clientX > bbox.right;
29
- const outsideY = ev.clientY < bbox.top || ev.clientY > bbox.bottom;
30
- if (outsideX || outsideY) {
31
- return false;
32
- }
33
- return true;
34
- };
17
+ }
18
+ inputEl;
19
+ useInputMode = false;
20
+ inputModeColumn;
21
+ highlightEl;
22
+ actionOnClick;
23
+ destroyKeypressListener;
24
+ singleColumnSearchTimeout;
25
+ get el() { return index.getElement(this); }
26
+ /**
27
+ * @internal
28
+ */
29
+ ionInputModeChange;
30
+ /**
31
+ * When the picker is interacted with
32
+ * we need to prevent touchstart so other
33
+ * gestures do not fire. For example,
34
+ * scrolling on the wheel picker
35
+ * in ion-datetime should not cause
36
+ * a card modal to swipe to close.
37
+ */
38
+ preventTouchStartPropagation(ev) {
39
+ ev.stopPropagation();
40
+ }
41
+ componentWillLoad() {
42
+ helpers.getElementRoot(this.el).addEventListener('focusin', this.onFocusIn);
43
+ helpers.getElementRoot(this.el).addEventListener('focusout', this.onFocusOut);
44
+ }
45
+ isInHighlightBounds = (ev) => {
46
+ const { highlightEl } = this;
47
+ if (!highlightEl) {
48
+ return false;
49
+ }
50
+ const bbox = highlightEl.getBoundingClientRect();
35
51
  /**
36
- * If we are no longer focused
37
- * on a picker column, then we should
38
- * exit input mode. An exception is made
39
- * for the input in the picker since having
40
- * that focused means we are still in input mode.
52
+ * Check to see if the user clicked
53
+ * outside the bounds of the highlight.
41
54
  */
42
- this.onFocusOut = (ev) => {
43
- // TODO(FW-2832): type
44
- const { relatedTarget } = ev;
45
- if (!relatedTarget || (relatedTarget.tagName !== 'ION-PICKER-COLUMN' && relatedTarget !== this.inputEl)) {
46
- this.exitInputMode();
47
- }
48
- };
55
+ const outsideX = ev.clientX < bbox.left || ev.clientX > bbox.right;
56
+ const outsideY = ev.clientY < bbox.top || ev.clientY > bbox.bottom;
57
+ if (outsideX || outsideY) {
58
+ return false;
59
+ }
60
+ return true;
61
+ };
62
+ /**
63
+ * If we are no longer focused
64
+ * on a picker column, then we should
65
+ * exit input mode. An exception is made
66
+ * for the input in the picker since having
67
+ * that focused means we are still in input mode.
68
+ */
69
+ onFocusOut = (ev) => {
70
+ // TODO(FW-2832): type
71
+ const { relatedTarget } = ev;
72
+ if (!relatedTarget || (relatedTarget.tagName !== 'ION-PICKER-COLUMN' && relatedTarget !== this.inputEl)) {
73
+ this.exitInputMode();
74
+ }
75
+ };
76
+ /**
77
+ * When picker columns receive focus
78
+ * the parent picker needs to determine
79
+ * whether to enter/exit input mode.
80
+ */
81
+ onFocusIn = (ev) => {
82
+ // TODO(FW-2832): type
83
+ const { target } = ev;
49
84
  /**
50
- * When picker columns receive focus
51
- * the parent picker needs to determine
52
- * whether to enter/exit input mode.
85
+ * Due to browser differences in how/when focus
86
+ * is dispatched on certain elements, we need to
87
+ * make sure that this function only ever runs when
88
+ * focusing a picker column.
53
89
  */
54
- this.onFocusIn = (ev) => {
55
- // TODO(FW-2832): type
56
- const { target } = ev;
57
- /**
58
- * Due to browser differences in how/when focus
59
- * is dispatched on certain elements, we need to
60
- * make sure that this function only ever runs when
61
- * focusing a picker column.
62
- */
63
- if (target.tagName !== 'ION-PICKER-COLUMN') {
64
- return;
65
- }
66
- /**
67
- * If we have actionOnClick
68
- * then this means the user focused
69
- * a picker column via mouse or
70
- * touch (i.e. a PointerEvent). As a result,
71
- * we should not enter/exit input mode
72
- * until the click event has fired, which happens
73
- * after the `focusin` event.
74
- *
75
- * Otherwise, the user likely focused
76
- * the column using their keyboard and
77
- * we should enter/exit input mode automatically.
78
- */
79
- if (!this.actionOnClick) {
80
- const columnEl = target;
81
- const allowInput = columnEl.numericInput;
82
- if (allowInput) {
83
- this.enterInputMode(columnEl, false);
84
- }
85
- else {
86
- this.exitInputMode();
87
- }
88
- }
89
- };
90
+ if (target.tagName !== 'ION-PICKER-COLUMN') {
91
+ return;
92
+ }
90
93
  /**
91
- * On click we need to run an actionOnClick
92
- * function that has been set in onPointerDown
93
- * so that we enter/exit input mode correctly.
94
+ * If we have actionOnClick
95
+ * then this means the user focused
96
+ * a picker column via mouse or
97
+ * touch (i.e. a PointerEvent). As a result,
98
+ * we should not enter/exit input mode
99
+ * until the click event has fired, which happens
100
+ * after the `focusin` event.
101
+ *
102
+ * Otherwise, the user likely focused
103
+ * the column using their keyboard and
104
+ * we should enter/exit input mode automatically.
94
105
  */
95
- this.onClick = () => {
96
- const { actionOnClick } = this;
97
- if (actionOnClick) {
98
- actionOnClick();
99
- this.actionOnClick = undefined;
106
+ if (!this.actionOnClick) {
107
+ const columnEl = target;
108
+ const allowInput = columnEl.numericInput;
109
+ if (allowInput) {
110
+ this.enterInputMode(columnEl, false);
100
111
  }
101
- };
102
- /**
103
- * Clicking a column also focuses the column on
104
- * certain browsers, so we use onPointerDown
105
- * to tell the onFocusIn function that users
106
- * are trying to click the column rather than
107
- * focus the column using the keyboard. When the
108
- * user completes the click, the onClick function
109
- * runs and runs the actionOnClick callback.
110
- */
111
- this.onPointerDown = (ev) => {
112
- const { useInputMode, inputModeColumn, el } = this;
113
- if (this.isInHighlightBounds(ev)) {
112
+ else {
113
+ this.exitInputMode();
114
+ }
115
+ }
116
+ };
117
+ /**
118
+ * On click we need to run an actionOnClick
119
+ * function that has been set in onPointerDown
120
+ * so that we enter/exit input mode correctly.
121
+ */
122
+ onClick = () => {
123
+ const { actionOnClick } = this;
124
+ if (actionOnClick) {
125
+ actionOnClick();
126
+ this.actionOnClick = undefined;
127
+ }
128
+ };
129
+ /**
130
+ * Clicking a column also focuses the column on
131
+ * certain browsers, so we use onPointerDown
132
+ * to tell the onFocusIn function that users
133
+ * are trying to click the column rather than
134
+ * focus the column using the keyboard. When the
135
+ * user completes the click, the onClick function
136
+ * runs and runs the actionOnClick callback.
137
+ */
138
+ onPointerDown = (ev) => {
139
+ const { useInputMode, inputModeColumn, el } = this;
140
+ if (this.isInHighlightBounds(ev)) {
141
+ /**
142
+ * If we were already in
143
+ * input mode, then we should determine
144
+ * if we tapped a particular column and
145
+ * should switch to input mode for
146
+ * that specific column.
147
+ */
148
+ if (useInputMode) {
114
149
  /**
115
- * If we were already in
116
- * input mode, then we should determine
117
- * if we tapped a particular column and
118
- * should switch to input mode for
119
- * that specific column.
150
+ * If we tapped a picker column
151
+ * then we should either switch to input
152
+ * mode for that column or all columns.
153
+ * Otherwise we should exit input mode
154
+ * since we just tapped the highlight and
155
+ * not a column.
120
156
  */
121
- if (useInputMode) {
157
+ if (ev.target.tagName === 'ION-PICKER-COLUMN') {
122
158
  /**
123
- * If we tapped a picker column
124
- * then we should either switch to input
125
- * mode for that column or all columns.
126
- * Otherwise we should exit input mode
127
- * since we just tapped the highlight and
128
- * not a column.
159
+ * If user taps 2 different columns
160
+ * then we should just switch to input mode
161
+ * for the new column rather than switching to
162
+ * input mode for all columns.
129
163
  */
130
- if (ev.target.tagName === 'ION-PICKER-COLUMN') {
131
- /**
132
- * If user taps 2 different columns
133
- * then we should just switch to input mode
134
- * for the new column rather than switching to
135
- * input mode for all columns.
136
- */
137
- if (inputModeColumn && inputModeColumn === ev.target) {
138
- this.actionOnClick = () => {
139
- this.enterInputMode();
140
- };
141
- }
142
- else {
143
- this.actionOnClick = () => {
144
- this.enterInputMode(ev.target);
145
- };
146
- }
164
+ if (inputModeColumn && inputModeColumn === ev.target) {
165
+ this.actionOnClick = () => {
166
+ this.enterInputMode();
167
+ };
147
168
  }
148
169
  else {
149
170
  this.actionOnClick = () => {
150
- this.exitInputMode();
171
+ this.enterInputMode(ev.target);
151
172
  };
152
173
  }
153
- /**
154
- * If we were not already in
155
- * input mode, then we should
156
- * enter input mode for all columns.
157
- */
158
174
  }
159
175
  else {
160
- /**
161
- * If there is only 1 numeric input column
162
- * then we should skip multi column input.
163
- */
164
- const columns = el.querySelectorAll('ion-picker-column.picker-column-numeric-input');
165
- const columnEl = columns.length === 1 ? ev.target : undefined;
166
176
  this.actionOnClick = () => {
167
- this.enterInputMode(columnEl);
177
+ this.exitInputMode();
168
178
  };
169
179
  }
170
- return;
171
- }
172
- this.actionOnClick = () => {
173
- this.exitInputMode();
174
- };
175
- };
176
- /**
177
- * Enters input mode to allow
178
- * for text entry of numeric values.
179
- * If on mobile, we focus a hidden input
180
- * field so that the on screen keyboard
181
- * is brought up. When tabbing using a
182
- * keyboard, picker columns receive an outline
183
- * to indicate they are focused. As a result,
184
- * we should not focus the hidden input as it
185
- * would cause the outline to go away, preventing
186
- * users from having any visual indication of which
187
- * column is focused.
188
- */
189
- this.enterInputMode = (columnEl, focusInput = true) => {
190
- const { inputEl, el } = this;
191
- if (!inputEl) {
192
- return;
193
- }
194
- /**
195
- * Only active input mode if there is at
196
- * least one column that accepts numeric input.
197
- */
198
- const hasInputColumn = el.querySelector('ion-picker-column.picker-column-numeric-input');
199
- if (!hasInputColumn) {
200
- return;
201
- }
202
- /**
203
- * If columnEl is undefined then
204
- * it is assumed that all numeric pickers
205
- * are eligible for text entry.
206
- * (i.e. hour and minute columns)
207
- */
208
- this.useInputMode = true;
209
- this.inputModeColumn = columnEl;
210
- /**
211
- * Users with a keyboard and mouse can
212
- * activate input mode where the input is
213
- * focused as well as when it is not focused,
214
- * so we need to make sure we clean up any
215
- * old listeners.
216
- */
217
- if (focusInput) {
218
- if (this.destroyKeypressListener) {
219
- this.destroyKeypressListener();
220
- this.destroyKeypressListener = undefined;
221
- }
222
- inputEl.focus();
180
+ /**
181
+ * If we were not already in
182
+ * input mode, then we should
183
+ * enter input mode for all columns.
184
+ */
223
185
  }
224
186
  else {
225
- // TODO FW-5900 Use keydown instead
226
- el.addEventListener('keypress', this.onKeyPress);
227
- this.destroyKeypressListener = () => {
228
- el.removeEventListener('keypress', this.onKeyPress);
229
- };
230
- }
231
- this.emitInputModeChange();
232
- };
233
- this.onKeyPress = (ev) => {
234
- const { inputEl } = this;
235
- if (!inputEl) {
236
- return;
237
- }
238
- const parsedValue = parseInt(ev.key, 10);
239
- /**
240
- * Only numbers should be allowed
241
- */
242
- if (!Number.isNaN(parsedValue)) {
243
- inputEl.value += ev.key;
244
- this.onInputChange();
245
- }
246
- };
247
- this.selectSingleColumn = () => {
248
- const { inputEl, inputModeColumn, singleColumnSearchTimeout } = this;
249
- if (!inputEl || !inputModeColumn) {
250
- return;
251
- }
252
- const options = Array.from(inputModeColumn.querySelectorAll('ion-picker-column-option')).filter((el) => el.disabled !== true);
253
- /**
254
- * If users pause for a bit, the search
255
- * value should be reset similar to how a
256
- * <select> behaves. So typing "34", waiting,
257
- * then typing "5" should select "05".
258
- */
259
- if (singleColumnSearchTimeout) {
260
- clearTimeout(singleColumnSearchTimeout);
261
- }
262
- this.singleColumnSearchTimeout = setTimeout(() => {
263
- inputEl.value = '';
264
- this.singleColumnSearchTimeout = undefined;
265
- }, 1000);
266
- /**
267
- * For values that are longer than 2 digits long
268
- * we should shift the value over 1 character
269
- * to the left. So typing "456" would result in "56".
270
- * TODO: If we want to support more than just
271
- * time entry, we should update this value to be
272
- * the max length of all of the picker items.
273
- */
274
- if (inputEl.value.length >= 3) {
275
- const startIndex = inputEl.value.length - 2;
276
- const newString = inputEl.value.substring(startIndex);
277
- inputEl.value = newString;
278
- this.selectSingleColumn();
279
- return;
280
- }
281
- /**
282
- * Checking the value of the input gets priority
283
- * first. For example, if the value of the input
284
- * is "1" and we entered "2", then the complete value
285
- * is "12" and we should select hour 12.
286
- *
287
- * Regex removes any leading zeros from values like "02",
288
- * but it keeps a single zero if there are only zeros in the string.
289
- * 0+(?=[1-9]) --> Match 1 or more zeros that are followed by 1-9
290
- * 0+(?=0$) --> Match 1 or more zeros that must be followed by one 0 and end.
291
- */
292
- const findItemFromCompleteValue = options.find(({ textContent }) => {
293
187
  /**
294
- * Keyboard entry is currently only used inside of Datetime
295
- * where we guarantee textContent is set.
296
- * If we end up exposing this feature publicly we should revisit this assumption.
188
+ * If there is only 1 numeric input column
189
+ * then we should skip multi column input.
297
190
  */
298
- const parsedText = textContent.replace(/^0+(?=[1-9])|0+(?=0$)/, '');
299
- return parsedText === inputEl.value;
300
- });
301
- if (findItemFromCompleteValue) {
302
- inputModeColumn.setValue(findItemFromCompleteValue.value);
303
- return;
304
- }
305
- /**
306
- * If we typed "56" to get minute 56, then typed "7",
307
- * we should select "07" as "567" is not a valid minute.
308
- */
309
- if (inputEl.value.length === 2) {
310
- const changedCharacter = inputEl.value.substring(inputEl.value.length - 1);
311
- inputEl.value = changedCharacter;
312
- this.selectSingleColumn();
191
+ const columns = el.querySelectorAll('ion-picker-column.picker-column-numeric-input');
192
+ const columnEl = columns.length === 1 ? ev.target : undefined;
193
+ this.actionOnClick = () => {
194
+ this.enterInputMode(columnEl);
195
+ };
313
196
  }
197
+ return;
198
+ }
199
+ this.actionOnClick = () => {
200
+ this.exitInputMode();
314
201
  };
202
+ };
203
+ /**
204
+ * Enters input mode to allow
205
+ * for text entry of numeric values.
206
+ * If on mobile, we focus a hidden input
207
+ * field so that the on screen keyboard
208
+ * is brought up. When tabbing using a
209
+ * keyboard, picker columns receive an outline
210
+ * to indicate they are focused. As a result,
211
+ * we should not focus the hidden input as it
212
+ * would cause the outline to go away, preventing
213
+ * users from having any visual indication of which
214
+ * column is focused.
215
+ */
216
+ enterInputMode = (columnEl, focusInput = true) => {
217
+ const { inputEl, el } = this;
218
+ if (!inputEl) {
219
+ return;
220
+ }
315
221
  /**
316
- * Searches a list of column items for a particular
317
- * value. This is currently used for numeric values.
318
- * The zeroBehavior can be set to account for leading
319
- * or trailing zeros when looking at the item text.
222
+ * Only active input mode if there is at
223
+ * least one column that accepts numeric input.
320
224
  */
321
- this.searchColumn = (colEl, value, zeroBehavior = 'start') => {
322
- if (!value) {
323
- return false;
324
- }
325
- const behavior = zeroBehavior === 'start' ? /^0+/ : /0$/;
326
- value = value.replace(behavior, '');
327
- const option = Array.from(colEl.querySelectorAll('ion-picker-column-option')).find((el) => {
328
- return el.disabled !== true && el.textContent.replace(behavior, '') === value;
329
- });
330
- if (option) {
331
- colEl.setValue(option.value);
332
- }
333
- return !!option;
334
- };
225
+ const hasInputColumn = el.querySelector('ion-picker-column.picker-column-numeric-input');
226
+ if (!hasInputColumn) {
227
+ return;
228
+ }
335
229
  /**
336
- * Attempts to intelligently search the first and second
337
- * column as if they're number columns for the provided numbers
338
- * where the first two numbers are the first column
339
- * and the last 2 are the last column. Tries to allow for the first
340
- * number to be ignored for situations where typos occurred.
230
+ * If columnEl is undefined then
231
+ * it is assumed that all numeric pickers
232
+ * are eligible for text entry.
233
+ * (i.e. hour and minute columns)
341
234
  */
342
- this.multiColumnSearch = (firstColumn, secondColumn, input) => {
343
- if (input.length === 0) {
344
- return;
345
- }
346
- const inputArray = input.split('');
347
- const hourValue = inputArray.slice(0, 2).join('');
348
- // Try to find a match for the first two digits in the first column
349
- const foundHour = this.searchColumn(firstColumn, hourValue);
350
- // If we have more than 2 digits and found a match for hours,
351
- // use the remaining digits for the second column (minutes)
352
- if (inputArray.length > 2 && foundHour) {
353
- const minuteValue = inputArray.slice(2, 4).join('');
354
- this.searchColumn(secondColumn, minuteValue);
355
- }
356
- // If we couldn't find a match for the two-digit hour, try single digit approaches
357
- else if (!foundHour && inputArray.length >= 1) {
358
- // First try the first digit as a single-digit hour
359
- let singleDigitHour = inputArray[0];
360
- let singleDigitFound = this.searchColumn(firstColumn, singleDigitHour);
361
- // If that didn't work, try the second digit as a single-digit hour
362
- // (handles case where user made a typo in the first digit, or they typed over themselves)
363
- if (!singleDigitFound) {
364
- inputArray.shift();
365
- singleDigitHour = inputArray[0];
366
- singleDigitFound = this.searchColumn(firstColumn, singleDigitHour);
367
- }
368
- // If we found a single-digit hour and have remaining digits,
369
- // use up to 2 of the remaining digits for the second column
370
- if (singleDigitFound && inputArray.length > 1) {
371
- const remainingDigits = inputArray.slice(1, 3).join('');
372
- this.searchColumn(secondColumn, remainingDigits);
373
- }
374
- }
375
- };
376
- this.selectMultiColumn = () => {
377
- const { inputEl, el } = this;
378
- if (!inputEl) {
379
- return;
380
- }
381
- const numericPickers = Array.from(el.querySelectorAll('ion-picker-column')).filter((col) => col.numericInput);
382
- const firstColumn = numericPickers[0];
383
- const lastColumn = numericPickers[1];
384
- let value = inputEl.value;
385
- if (value.length > 4) {
386
- const startIndex = inputEl.value.length - 4;
387
- const newString = inputEl.value.substring(startIndex);
388
- inputEl.value = newString;
389
- value = newString;
390
- }
391
- this.multiColumnSearch(firstColumn, lastColumn, value);
392
- };
235
+ this.useInputMode = true;
236
+ this.inputModeColumn = columnEl;
393
237
  /**
394
- * Searches the value of the active column
395
- * to determine which value users are trying
396
- * to select
238
+ * Users with a keyboard and mouse can
239
+ * activate input mode where the input is
240
+ * focused as well as when it is not focused,
241
+ * so we need to make sure we clean up any
242
+ * old listeners.
397
243
  */
398
- this.onInputChange = () => {
399
- const { useInputMode, inputEl, inputModeColumn } = this;
400
- if (!useInputMode || !inputEl) {
401
- return;
244
+ if (focusInput) {
245
+ if (this.destroyKeypressListener) {
246
+ this.destroyKeypressListener();
247
+ this.destroyKeypressListener = undefined;
402
248
  }
403
- if (inputModeColumn) {
404
- this.selectSingleColumn();
405
- }
406
- else {
407
- this.selectMultiColumn();
408
- }
409
- };
410
- /**
411
- * Emit ionInputModeChange. Picker columns
412
- * listen for this event to determine whether
413
- * or not their column is "active" for text input.
414
- */
415
- this.emitInputModeChange = () => {
416
- const { useInputMode, inputModeColumn } = this;
417
- this.ionInputModeChange.emit({
418
- useInputMode,
419
- inputModeColumn,
420
- });
421
- };
422
- }
423
- /**
424
- * When the picker is interacted with
425
- * we need to prevent touchstart so other
426
- * gestures do not fire. For example,
427
- * scrolling on the wheel picker
428
- * in ion-datetime should not cause
429
- * a card modal to swipe to close.
430
- */
431
- preventTouchStartPropagation(ev) {
432
- ev.stopPropagation();
433
- }
434
- componentWillLoad() {
435
- helpers.getElementRoot(this.el).addEventListener('focusin', this.onFocusIn);
436
- helpers.getElementRoot(this.el).addEventListener('focusout', this.onFocusOut);
437
- }
249
+ inputEl.focus();
250
+ }
251
+ else {
252
+ // TODO FW-5900 Use keydown instead
253
+ el.addEventListener('keypress', this.onKeyPress);
254
+ this.destroyKeypressListener = () => {
255
+ el.removeEventListener('keypress', this.onKeyPress);
256
+ };
257
+ }
258
+ this.emitInputModeChange();
259
+ };
438
260
  /**
439
261
  * @internal
440
262
  * Exits text entry mode for the picker
@@ -456,9 +278,197 @@ const Picker = class {
456
278
  }
457
279
  this.emitInputModeChange();
458
280
  }
281
+ onKeyPress = (ev) => {
282
+ const { inputEl } = this;
283
+ if (!inputEl) {
284
+ return;
285
+ }
286
+ const parsedValue = parseInt(ev.key, 10);
287
+ /**
288
+ * Only numbers should be allowed
289
+ */
290
+ if (!Number.isNaN(parsedValue)) {
291
+ inputEl.value += ev.key;
292
+ this.onInputChange();
293
+ }
294
+ };
295
+ selectSingleColumn = () => {
296
+ const { inputEl, inputModeColumn, singleColumnSearchTimeout } = this;
297
+ if (!inputEl || !inputModeColumn) {
298
+ return;
299
+ }
300
+ const options = Array.from(inputModeColumn.querySelectorAll('ion-picker-column-option')).filter((el) => el.disabled !== true);
301
+ /**
302
+ * If users pause for a bit, the search
303
+ * value should be reset similar to how a
304
+ * <select> behaves. So typing "34", waiting,
305
+ * then typing "5" should select "05".
306
+ */
307
+ if (singleColumnSearchTimeout) {
308
+ clearTimeout(singleColumnSearchTimeout);
309
+ }
310
+ this.singleColumnSearchTimeout = setTimeout(() => {
311
+ inputEl.value = '';
312
+ this.singleColumnSearchTimeout = undefined;
313
+ }, 1000);
314
+ /**
315
+ * For values that are longer than 2 digits long
316
+ * we should shift the value over 1 character
317
+ * to the left. So typing "456" would result in "56".
318
+ * TODO: If we want to support more than just
319
+ * time entry, we should update this value to be
320
+ * the max length of all of the picker items.
321
+ */
322
+ if (inputEl.value.length >= 3) {
323
+ const startIndex = inputEl.value.length - 2;
324
+ const newString = inputEl.value.substring(startIndex);
325
+ inputEl.value = newString;
326
+ this.selectSingleColumn();
327
+ return;
328
+ }
329
+ /**
330
+ * Checking the value of the input gets priority
331
+ * first. For example, if the value of the input
332
+ * is "1" and we entered "2", then the complete value
333
+ * is "12" and we should select hour 12.
334
+ *
335
+ * Regex removes any leading zeros from values like "02",
336
+ * but it keeps a single zero if there are only zeros in the string.
337
+ * 0+(?=[1-9]) --> Match 1 or more zeros that are followed by 1-9
338
+ * 0+(?=0$) --> Match 1 or more zeros that must be followed by one 0 and end.
339
+ */
340
+ const findItemFromCompleteValue = options.find(({ textContent }) => {
341
+ /**
342
+ * Keyboard entry is currently only used inside of Datetime
343
+ * where we guarantee textContent is set.
344
+ * If we end up exposing this feature publicly we should revisit this assumption.
345
+ */
346
+ const parsedText = textContent.replace(/^0+(?=[1-9])|0+(?=0$)/, '');
347
+ return parsedText === inputEl.value;
348
+ });
349
+ if (findItemFromCompleteValue) {
350
+ inputModeColumn.setValue(findItemFromCompleteValue.value);
351
+ return;
352
+ }
353
+ /**
354
+ * If we typed "56" to get minute 56, then typed "7",
355
+ * we should select "07" as "567" is not a valid minute.
356
+ */
357
+ if (inputEl.value.length === 2) {
358
+ const changedCharacter = inputEl.value.substring(inputEl.value.length - 1);
359
+ inputEl.value = changedCharacter;
360
+ this.selectSingleColumn();
361
+ }
362
+ };
363
+ /**
364
+ * Searches a list of column items for a particular
365
+ * value. This is currently used for numeric values.
366
+ * The zeroBehavior can be set to account for leading
367
+ * or trailing zeros when looking at the item text.
368
+ */
369
+ searchColumn = (colEl, value, zeroBehavior = 'start') => {
370
+ if (!value) {
371
+ return false;
372
+ }
373
+ const behavior = zeroBehavior === 'start' ? /^0+/ : /0$/;
374
+ value = value.replace(behavior, '');
375
+ const option = Array.from(colEl.querySelectorAll('ion-picker-column-option')).find((el) => {
376
+ return el.disabled !== true && el.textContent.replace(behavior, '') === value;
377
+ });
378
+ if (option) {
379
+ colEl.setValue(option.value);
380
+ }
381
+ return !!option;
382
+ };
383
+ /**
384
+ * Attempts to intelligently search the first and second
385
+ * column as if they're number columns for the provided numbers
386
+ * where the first two numbers are the first column
387
+ * and the last 2 are the last column. Tries to allow for the first
388
+ * number to be ignored for situations where typos occurred.
389
+ */
390
+ multiColumnSearch = (firstColumn, secondColumn, input) => {
391
+ if (input.length === 0) {
392
+ return;
393
+ }
394
+ const inputArray = input.split('');
395
+ const hourValue = inputArray.slice(0, 2).join('');
396
+ // Try to find a match for the first two digits in the first column
397
+ const foundHour = this.searchColumn(firstColumn, hourValue);
398
+ // If we have more than 2 digits and found a match for hours,
399
+ // use the remaining digits for the second column (minutes)
400
+ if (inputArray.length > 2 && foundHour) {
401
+ const minuteValue = inputArray.slice(2, 4).join('');
402
+ this.searchColumn(secondColumn, minuteValue);
403
+ }
404
+ // If we couldn't find a match for the two-digit hour, try single digit approaches
405
+ else if (!foundHour && inputArray.length >= 1) {
406
+ // First try the first digit as a single-digit hour
407
+ let singleDigitHour = inputArray[0];
408
+ let singleDigitFound = this.searchColumn(firstColumn, singleDigitHour);
409
+ // If that didn't work, try the second digit as a single-digit hour
410
+ // (handles case where user made a typo in the first digit, or they typed over themselves)
411
+ if (!singleDigitFound) {
412
+ inputArray.shift();
413
+ singleDigitHour = inputArray[0];
414
+ singleDigitFound = this.searchColumn(firstColumn, singleDigitHour);
415
+ }
416
+ // If we found a single-digit hour and have remaining digits,
417
+ // use up to 2 of the remaining digits for the second column
418
+ if (singleDigitFound && inputArray.length > 1) {
419
+ const remainingDigits = inputArray.slice(1, 3).join('');
420
+ this.searchColumn(secondColumn, remainingDigits);
421
+ }
422
+ }
423
+ };
424
+ selectMultiColumn = () => {
425
+ const { inputEl, el } = this;
426
+ if (!inputEl) {
427
+ return;
428
+ }
429
+ const numericPickers = Array.from(el.querySelectorAll('ion-picker-column')).filter((col) => col.numericInput);
430
+ const firstColumn = numericPickers[0];
431
+ const lastColumn = numericPickers[1];
432
+ let value = inputEl.value;
433
+ if (value.length > 4) {
434
+ const startIndex = inputEl.value.length - 4;
435
+ const newString = inputEl.value.substring(startIndex);
436
+ inputEl.value = newString;
437
+ value = newString;
438
+ }
439
+ this.multiColumnSearch(firstColumn, lastColumn, value);
440
+ };
441
+ /**
442
+ * Searches the value of the active column
443
+ * to determine which value users are trying
444
+ * to select
445
+ */
446
+ onInputChange = () => {
447
+ const { useInputMode, inputEl, inputModeColumn } = this;
448
+ if (!useInputMode || !inputEl) {
449
+ return;
450
+ }
451
+ if (inputModeColumn) {
452
+ this.selectSingleColumn();
453
+ }
454
+ else {
455
+ this.selectMultiColumn();
456
+ }
457
+ };
458
+ /**
459
+ * Emit ionInputModeChange. Picker columns
460
+ * listen for this event to determine whether
461
+ * or not their column is "active" for text input.
462
+ */
463
+ emitInputModeChange = () => {
464
+ const { useInputMode, inputModeColumn } = this;
465
+ this.ionInputModeChange.emit({
466
+ useInputMode,
467
+ inputModeColumn,
468
+ });
469
+ };
459
470
  render() {
460
471
  return (index.h(index.Host, { key: '28f81e4ed44a633178561757c5199c2c98f94b74', onPointerDown: (ev) => this.onPointerDown(ev), onClick: () => this.onClick() }, index.h("input", { key: 'abb3d1ad25ef63856af7804111175a4d50008bc0', "aria-hidden": "true", tabindex: -1, inputmode: "numeric", type: "number", onKeyDown: (ev) => {
461
- var _a;
462
472
  /**
463
473
  * The "Enter" key represents
464
474
  * the user submitting their time
@@ -470,11 +480,10 @@ const Picker = class {
470
480
  * callback below.
471
481
  */
472
482
  if (ev.key === 'Enter') {
473
- (_a = this.inputEl) === null || _a === void 0 ? void 0 : _a.blur();
483
+ this.inputEl?.blur();
474
484
  }
475
485
  }, ref: (el) => (this.inputEl = el), onInput: () => this.onInputChange(), onBlur: () => this.exitInputMode() }), index.h("div", { key: '334a5abdc02e6b127c57177f626d7e4ff5526183', class: "picker-before" }), index.h("div", { key: 'ffd6271931129e88fc7c820e919d684899e420c5', class: "picker-after" }), index.h("div", { key: '78d1d95fd09e04f154ea59f24a1cece72c47ed7b', class: "picker-highlight", ref: (el) => (this.highlightEl = el) }), index.h("slot", { key: '0bd5b9f875d3c71f6cbbde2054baeb1b0a2e8cd5' })));
476
486
  }
477
- get el() { return index.getElement(this); }
478
487
  };
479
488
  Picker.style = {
480
489
  ios: pickerIosCss(),