@ionic/core 8.8.19 → 8.8.20-dev.11787158518.168a2fea

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 (799) 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-1jI5oW-W.js +4 -0
  100. package/components/{p-6J0vc7Z8.js → p-63OhffQv.js} +1 -1
  101. package/components/p-8FN7p701.js +4 -0
  102. package/components/p-B4uHHhPK.js +4 -0
  103. package/components/p-BMPN55of.js +4 -0
  104. package/components/p-BNJOu1Q2.js +4 -0
  105. package/components/p-BOvLNVKq.js +4 -0
  106. package/components/p-BSQPZ79H.js +4 -0
  107. package/components/p-BeamQXHF.js +4 -0
  108. package/components/p-BhamHSw3.js +4 -0
  109. package/components/p-Bjig0DJK.js +4 -0
  110. package/components/p-BjluhQMI.js +4 -0
  111. package/components/p-BlsIikdZ.js +4 -0
  112. package/components/p-BqPNzJf6.js +4 -0
  113. package/components/p-BrD9Xv62.js +4 -0
  114. package/components/p-BvJqoZ5R.js +4 -0
  115. package/components/p-Bz6z3Asd.js +4 -0
  116. package/components/p-C5KYjZWD.js +4 -0
  117. package/components/p-C6HnVvHO.js +4 -0
  118. package/components/p-C7jvh5Wy.js +4 -0
  119. package/components/p-C9BGR5fy.js +4 -0
  120. package/components/p-CB-y1CdP.js +4 -0
  121. package/components/p-CEW4RXZO.js +4 -0
  122. package/components/p-CHH3loEE.js +4 -0
  123. package/components/p-CJKUWjmg.js +4 -0
  124. package/components/{p-qMmFisyx.js → p-CMLAwl_N.js} +1 -1
  125. package/components/{p-C7II1iDj.js → p-C_phlPMC.js} +1 -1
  126. package/components/p-CbhUdtjf.js +4 -0
  127. package/components/p-CejmQs3h.js +4 -0
  128. package/components/p-CtZqa4HM.js +4 -0
  129. package/components/p-D7-vHX0A.js +4 -0
  130. package/components/p-D9qIVSWm.js +4 -0
  131. package/components/p-DD5fQ4EQ.js +4 -0
  132. package/components/p-DE-3iMNW.js +4 -0
  133. package/components/p-DFvZn99E.js +4 -0
  134. package/components/p-DHFt2rdc.js +4 -0
  135. package/components/p-DM-PrAoh.js +4 -0
  136. package/components/p-DSzSbVP2.js +4 -0
  137. package/components/{p--JUspHvy.js → p-DV85C0e0.js} +1 -1
  138. package/components/p-DWCzVL3Y.js +4 -0
  139. package/components/p-D_RCyzwu.js +4 -0
  140. package/components/p-D_tD8r3L.js +4 -0
  141. package/components/p-DaA_8eqt.js +4 -0
  142. package/components/p-DjCtLZbF.js +4 -0
  143. package/components/p-Dmd2xqCe.js +4 -0
  144. package/components/p-Dojwmvde.js +4 -0
  145. package/components/{p-BkKAANMJ.js → p-DwpKZ6rl.js} +1 -1
  146. package/components/p-DzRT60Tw.js +4 -0
  147. package/components/p-G0TxqHfe.js +4 -0
  148. package/components/p-G6JR-cr_.js +4 -0
  149. package/components/p-GG5GhznE.js +4 -0
  150. package/components/p-TXPDHL13.js +4 -0
  151. package/components/p-UIBJkZf8.js +4 -0
  152. package/components/p-_IKFD3ID.js +4 -0
  153. package/components/p-byZM6qHV.js +4 -0
  154. package/components/p-dKq2jIum.js +4 -0
  155. package/components/p-fruGqVHh.js +4 -0
  156. package/components/p-iYhH60Tc.js +4 -0
  157. package/components/p-ia3IDdJS.js +4 -0
  158. package/components/{p-DqLB8yFQ.js → p-ryyf_ItD.js} +1 -1
  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-AWp_ygDP.js → button-active-CVMevT9a.js} +3 -3
  162. package/dist/cjs/config-CjUbvdPW.js +36 -0
  163. package/dist/cjs/{dir-DD0jPVH3.js → dir-zwDPRE5K.js} +2 -3
  164. package/dist/cjs/{format-BUFWn4Bn.js → format-pp0Du3K-.js} +40 -30
  165. package/dist/cjs/{framework-delegate-CEzl4MEA.js → framework-delegate-Dfo5XsGv.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-DdZyl6WL.js → helpers-YPQybDph.js} +4 -4
  170. package/dist/cjs/index-B7zJsYWS.js +429 -0
  171. package/dist/cjs/{index-CukZnH1U.js → index-BLdJCcJY.js} +5 -5
  172. package/dist/cjs/{index-MWAIyVLl.js → index-DDg31ZF5.js} +3 -3
  173. package/dist/cjs/{index-DOiZqxWZ.js → index-DXsPSne6.js} +6 -7
  174. package/dist/cjs/{index-BJ2-LydH.js → index-DwlRtFZe.js} +9 -3
  175. package/dist/cjs/{index-BfaXsATC.js → index-uvry__L4.js} +31 -14
  176. package/dist/cjs/{index-DqmRDbxg.js → index-wOmugbdg.js} +1 -1
  177. package/dist/cjs/{index-CD92bI7B.js → index-zVCah4Uz.js} +2 -2
  178. package/dist/cjs/index.cjs.js +19 -19
  179. package/dist/cjs/{input-shims-CPKgrIe3.js → input-shims-Cbu1fcye.js} +10 -12
  180. package/dist/cjs/input.utils-BZdMWVrt.js +35 -0
  181. package/dist/cjs/ion-accordion_2.cjs.entry.js +369 -341
  182. package/dist/cjs/ion-action-sheet.cjs.entry.js +188 -77
  183. package/dist/cjs/ion-alert.cjs.entry.js +274 -112
  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 +48 -24
  187. package/dist/cjs/ion-backdrop.cjs.entry.js +18 -14
  188. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +200 -122
  189. package/dist/cjs/ion-button_2.cjs.entry.js +139 -67
  190. package/dist/cjs/ion-card_5.cjs.entry.js +83 -31
  191. package/dist/cjs/ion-checkbox.cjs.entry.js +153 -102
  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 +254 -242
  195. package/dist/cjs/ion-datetime.cjs.entry.js +2770 -0
  196. package/dist/cjs/ion-fab_3.cjs.entry.js +140 -82
  197. package/dist/cjs/ion-img.cjs.entry.js +35 -13
  198. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +101 -73
  199. package/dist/cjs/ion-input-otp.cjs.entry.js +435 -372
  200. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +36 -22
  201. package/dist/cjs/ion-input.cjs.entry.js +343 -212
  202. package/dist/cjs/ion-item-option_3.cjs.entry.js +95 -55
  203. package/dist/cjs/ion-item_8.cjs.entry.js +192 -93
  204. package/dist/cjs/ion-loading.cjs.entry.js +147 -61
  205. package/dist/cjs/ion-menu_3.cjs.entry.js +169 -107
  206. package/dist/cjs/ion-modal.cjs.entry.js +456 -262
  207. package/dist/cjs/ion-nav_2.cjs.entry.js +102 -159
  208. package/dist/cjs/ion-picker-column-option.cjs.entry.js +38 -34
  209. package/dist/cjs/ion-picker-column.cjs.entry.js +418 -406
  210. package/dist/cjs/ion-picker.cjs.entry.js +402 -393
  211. package/dist/cjs/ion-popover.cjs.entry.js +320 -206
  212. package/dist/cjs/ion-progress-bar.cjs.entry.js +32 -26
  213. package/dist/cjs/ion-radio_2.cjs.entry.js +208 -135
  214. package/dist/cjs/ion-range.cjs.entry.js +304 -239
  215. package/dist/cjs/ion-refresher_2.cjs.entry.js +166 -94
  216. package/dist/cjs/ion-reorder_2.cjs.entry.js +54 -24
  217. package/dist/cjs/ion-ripple-effect.cjs.entry.js +14 -14
  218. package/dist/cjs/ion-route_4.cjs.entry.js +176 -72
  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 +105 -49
  224. package/dist/cjs/ion-select_3.cjs.entry.js +787 -260
  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 +101 -42
  228. package/dist/cjs/ion-tab_2.cjs.entry.js +54 -28
  229. package/dist/cjs/ion-text.cjs.entry.js +11 -5
  230. package/dist/cjs/ion-textarea.cjs.entry.js +296 -189
  231. package/dist/cjs/ion-toast.cjs.entry.js +237 -118
  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-CTiTDh3m.js → ios.transition-zTmJz8T-.js} +14 -18
  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-BpiTAaqF.js → md.transition-nb_4pUXu.js} +8 -9
  242. package/dist/cjs/overlay-control-label-D2sdL2O8.js +50 -0
  243. package/dist/cjs/{overlays-CQ_c1fko.js → overlays-KaNVDNqC.js} +48 -33
  244. package/dist/cjs/select-option-render-pULCGldr.js +123 -0
  245. package/dist/cjs/slot-mutation-controller-DPHmqXdV.js +397 -0
  246. package/dist/cjs/{status-tap-7FzRlXNr.js → status-tap-o9IIymsP.js} +4 -4
  247. package/dist/cjs/{swipe-back-DwTZiAc9.js → swipe-back-B7X9VOlH.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 +57 -26
  297. package/dist/collection/components/input/input.js +336 -206
  298. package/dist/collection/components/input/input.md.css +79 -43
  299. package/dist/collection/components/input-otp/input-otp.js +430 -368
  300. package/dist/collection/components/input-password-toggle/input-password-toggle.js +32 -19
  301. package/dist/collection/components/item/item.js +99 -53
  302. package/dist/collection/components/item-divider/item-divider.js +17 -12
  303. package/dist/collection/components/item-group/item-group.js +1 -1
  304. package/dist/collection/components/item-option/item-option.js +50 -22
  305. package/dist/collection/components/item-options/item-options.js +11 -8
  306. package/dist/collection/components/item-sliding/item-sliding.js +27 -21
  307. package/dist/collection/components/label/label.js +26 -6
  308. package/dist/collection/components/list/list.js +11 -8
  309. package/dist/collection/components/list-header/list-header.js +12 -2
  310. package/dist/collection/components/loading/loading.js +135 -51
  311. package/dist/collection/components/menu/menu.js +103 -61
  312. package/dist/collection/components/menu-button/menu-button.js +30 -21
  313. package/dist/collection/components/menu-toggle/menu-toggle.js +22 -15
  314. package/dist/collection/components/modal/animations/ios.enter.js +1 -1
  315. package/dist/collection/components/modal/animations/md.enter.js +1 -1
  316. package/dist/collection/components/modal/gestures/sheet.js +22 -10
  317. package/dist/collection/components/modal/gestures/swipe-to-close.js +15 -3
  318. package/dist/collection/components/modal/modal.js +398 -228
  319. package/dist/collection/components/modal/safe-area-utils.js +6 -7
  320. package/dist/collection/components/modal/test/fixtures.js +3 -0
  321. package/dist/collection/components/nav/nav.js +69 -247
  322. package/dist/collection/components/nav/view-controller.js +7 -1
  323. package/dist/collection/components/nav-link/nav-link.js +21 -10
  324. package/dist/collection/components/note/note.js +8 -2
  325. package/dist/collection/components/picker/picker.js +398 -390
  326. package/dist/collection/components/picker-column/picker-column.css +3 -0
  327. package/dist/collection/components/picker-column/picker-column.js +414 -404
  328. package/dist/collection/components/picker-column-option/picker-column-option.js +33 -31
  329. package/dist/collection/components/picker-column-option/picker-column-option.md.css +6 -1
  330. package/dist/collection/components/popover/animations/ios.enter.js +1 -2
  331. package/dist/collection/components/popover/animations/md.enter.js +1 -2
  332. package/dist/collection/components/popover/popover.ios.css +15 -0
  333. package/dist/collection/components/popover/popover.js +302 -185
  334. package/dist/collection/components/popover/popover.md.css +15 -0
  335. package/dist/collection/components/popover/test/fixture.js +1 -0
  336. package/dist/collection/components/popover/utils.js +4 -6
  337. package/dist/collection/components/progress-bar/progress-bar.js +27 -23
  338. package/dist/collection/components/radio/radio.js +102 -66
  339. package/dist/collection/components/radio-group/radio-group.js +101 -66
  340. package/dist/collection/components/radio-group/test/fixtures.js +2 -0
  341. package/dist/collection/components/range/range.js +298 -234
  342. package/dist/collection/components/refresher/refresher.js +110 -78
  343. package/dist/collection/components/refresher-content/refresher-content.js +41 -4
  344. package/dist/collection/components/reorder/reorder.js +2 -1
  345. package/dist/collection/components/reorder-group/reorder-group.js +44 -15
  346. package/dist/collection/components/ripple-effect/ripple-effect.js +12 -13
  347. package/dist/collection/components/route/route.js +39 -10
  348. package/dist/collection/components/route-redirect/route-redirect.js +31 -0
  349. package/dist/collection/components/router/router.js +37 -33
  350. package/dist/collection/components/router/utils/dom.js +25 -7
  351. package/dist/collection/components/router/utils/matching.js +7 -9
  352. package/dist/collection/components/router/utils/parser.js +1 -1
  353. package/dist/collection/components/router/utils/path.js +0 -1
  354. package/dist/collection/components/router-link/router-link.js +37 -12
  355. package/dist/collection/components/router-outlet/router-outlet.js +82 -21
  356. package/dist/collection/components/row/row.js +1 -1
  357. package/dist/collection/components/searchbar/searchbar.js +289 -199
  358. package/dist/collection/components/segment/segment.js +120 -85
  359. package/dist/collection/components/segment-button/segment-button.js +43 -37
  360. package/dist/collection/components/segment-content/segment-content.js +1 -1
  361. package/dist/collection/components/segment-view/segment-view.js +26 -16
  362. package/dist/collection/components/select/select.ios.css +96 -69
  363. package/dist/collection/components/select/select.js +629 -213
  364. package/dist/collection/components/select/select.md.css +118 -85
  365. package/dist/collection/components/select-modal/select-modal.ios.css +218 -0
  366. package/dist/collection/components/select-modal/select-modal.js +92 -38
  367. package/dist/collection/components/select-modal/select-modal.md.css +164 -0
  368. package/dist/collection/components/select-modal/test/fixtures.js +8 -1
  369. package/dist/collection/components/select-option/select-option.js +110 -9
  370. package/dist/collection/components/select-popover/select-popover.ios.css +218 -0
  371. package/dist/collection/components/select-popover/select-popover.js +103 -36
  372. package/dist/collection/components/select-popover/select-popover.md.css +164 -0
  373. package/dist/collection/components/select-popover/test/fixtures.js +8 -1
  374. package/dist/collection/components/skeleton-text/skeleton-text.js +12 -8
  375. package/dist/collection/components/spinner/spinner.js +21 -9
  376. package/dist/collection/components/split-pane/split-pane.js +27 -15
  377. package/dist/collection/components/tab/tab.js +17 -6
  378. package/dist/collection/components/tab-bar/tab-bar.js +32 -14
  379. package/dist/collection/components/tab-button/tab-button.js +62 -23
  380. package/dist/collection/components/tabs/tabs.js +33 -20
  381. package/dist/collection/components/text/text.js +8 -2
  382. package/dist/collection/components/textarea/textarea.ios.css +94 -62
  383. package/dist/collection/components/textarea/textarea.js +287 -181
  384. package/dist/collection/components/textarea/textarea.md.css +103 -77
  385. package/dist/collection/components/thumbnail/thumbnail.js +1 -1
  386. package/dist/collection/components/title/title.js +18 -2
  387. package/dist/collection/components/toast/toast.js +223 -106
  388. package/dist/collection/components/toggle/toggle.js +167 -115
  389. package/dist/collection/components/toolbar/toolbar.js +15 -7
  390. package/dist/collection/global/config.js +4 -6
  391. package/dist/collection/global/ionic-global.js +8 -2
  392. package/dist/collection/index.js +1 -1
  393. package/dist/collection/utils/animation/animation.js +3 -3
  394. package/dist/collection/utils/config.js +5 -4
  395. package/dist/collection/utils/focus-controller/index.js +1 -1
  396. package/dist/collection/utils/focus-trap.js +3 -3
  397. package/dist/collection/utils/forms/index.js +1 -0
  398. package/dist/collection/utils/forms/start-container-controller.js +132 -0
  399. package/dist/collection/utils/framework-delegate.js +4 -6
  400. package/dist/collection/utils/gesture/gesture-controller.js +15 -8
  401. package/dist/collection/utils/gesture/index.js +10 -2
  402. package/dist/collection/utils/hardware-back-button.js +3 -3
  403. package/dist/collection/utils/helpers.js +2 -2
  404. package/dist/collection/utils/input-shims/hacks/scroll-assist.js +4 -5
  405. package/dist/collection/utils/input-shims/hacks/scroll-data.js +1 -2
  406. package/dist/collection/utils/keyboard/keyboard-controller.js +5 -5
  407. package/dist/collection/utils/keyboard/keyboard.js +1 -1
  408. package/dist/collection/utils/logging/index.js +23 -4
  409. package/dist/collection/utils/menu-controller/index.js +1 -2
  410. package/dist/collection/utils/native/haptic.js +2 -3
  411. package/dist/collection/utils/native/keyboard.js +2 -2
  412. package/dist/collection/utils/native/status-bar.js +1 -1
  413. package/dist/collection/utils/overlay-control-label.js +45 -0
  414. package/dist/collection/utils/overlays.js +38 -23
  415. package/dist/collection/utils/platform.js +4 -5
  416. package/dist/collection/utils/rtl/dir.js +2 -3
  417. package/dist/collection/utils/sanitization/index.js +276 -20
  418. package/dist/collection/utils/select-option-render.js +118 -0
  419. package/dist/collection/utils/slot-mutation-controller.js +1 -2
  420. package/dist/collection/utils/test/playwright/apply-keyboard-focus.js +1 -1
  421. package/dist/collection/utils/test/playwright/drag-element.js +2 -3
  422. package/dist/collection/utils/test/playwright/generator.js +3 -4
  423. package/dist/collection/utils/test/playwright/page/event-spy.js +11 -12
  424. package/dist/collection/utils/test/playwright/page/utils/goto.js +4 -5
  425. package/dist/collection/utils/test/playwright/page/utils/set-content.js +1 -1
  426. package/dist/collection/utils/test/playwright/page/utils/set-ion-viewport.js +2 -3
  427. package/dist/collection/utils/test/press-keys.js +10 -17
  428. package/dist/collection/utils/theme.js +6 -1
  429. package/dist/collection/utils/transition/ios.transition.js +9 -13
  430. package/dist/collection/utils/transition/md.transition.js +3 -4
  431. package/dist/docs.json +557 -1257
  432. package/dist/esm/{animation-DLJpuoEz.js → animation-CGFdmGk9.js} +4 -4
  433. package/dist/esm/{app-globals-D0C5S4hU.js → app-globals-CYmMeGdU.js} +1 -1
  434. package/dist/esm/{button-active-CXXy0FIE.js → button-active-BDOsVAiZ.js} +3 -3
  435. package/dist/esm/config-DWCzVL3Y.js +32 -0
  436. package/dist/esm/{dir-o8OKV5aD.js → dir-Dojwmvde.js} +2 -3
  437. package/dist/esm/{format-CAmvpAez.js → format-Dcwga61t.js} +41 -31
  438. package/dist/esm/{framework-delegate-B9yvYzqV.js → framework-delegate-BHTU2Ip9.js} +5 -7
  439. package/dist/esm/{gesture-controller-BTEOs1at.js → gesture-controller-TXPDHL13.js} +15 -8
  440. package/dist/esm/{haptic-DzAMWJuk.js → haptic-Cq4UAeka.js} +2 -3
  441. package/dist/esm/{hardware-back-button-B93Gru0Y.js → hardware-back-button-gLJHMX_F.js} +4 -4
  442. package/dist/esm/{helpers-DkCLSLI9.js → helpers-CAGf8Wgp.js} +4 -4
  443. package/dist/esm/{index-DV3sJJW8.js → index-BvabGprD.js} +2 -2
  444. package/dist/esm/index-CKM1DdGm.js +424 -0
  445. package/dist/esm/{index-tcQvqkiX.js → index-ChhhtsGZ.js} +32 -15
  446. package/dist/esm/{index-DwNKJodj.js → index-Clc-28O1.js} +3 -3
  447. package/dist/esm/{index-DdeElWma.js → index-CqneaaGd.js} +6 -7
  448. package/dist/esm/{index-Bck1OwMs.js → index-DcPaH5uL.js} +9 -3
  449. package/dist/esm/{index-B_8X7INq.js → index-T0JxBI8V.js} +2 -2
  450. package/dist/esm/{index-Dsz7OTeL.js → index-WlteAIqz.js} +5 -5
  451. package/dist/esm/index.js +17 -16
  452. package/dist/esm/{input-shims-d-hDv86G.js → input-shims-B8sfni1e.js} +10 -12
  453. package/dist/esm/input.utils-B1ValN_N.js +33 -0
  454. package/dist/esm/ion-accordion_2.entry.js +369 -341
  455. package/dist/esm/ion-action-sheet.entry.js +188 -77
  456. package/dist/esm/ion-alert.entry.js +273 -111
  457. package/dist/esm/ion-app_8.entry.js +307 -190
  458. package/dist/esm/ion-avatar_3.entry.js +10 -4
  459. package/dist/esm/ion-back-button.entry.js +48 -24
  460. package/dist/esm/ion-backdrop.entry.js +18 -14
  461. package/dist/esm/ion-breadcrumb_2.entry.js +200 -122
  462. package/dist/esm/ion-button_2.entry.js +139 -67
  463. package/dist/esm/ion-card_5.entry.js +83 -31
  464. package/dist/esm/ion-checkbox.entry.js +153 -102
  465. package/dist/esm/ion-chip.entry.js +17 -11
  466. package/dist/esm/ion-col_3.entry.js +134 -10
  467. package/dist/esm/ion-datetime-button.entry.js +254 -242
  468. package/dist/esm/ion-datetime.entry.js +2768 -0
  469. package/dist/esm/ion-fab_3.entry.js +140 -82
  470. package/dist/esm/ion-img.entry.js +35 -13
  471. package/dist/esm/ion-infinite-scroll_2.entry.js +100 -72
  472. package/dist/esm/ion-input-otp.entry.js +435 -372
  473. package/dist/esm/ion-input-password-toggle.entry.js +36 -22
  474. package/dist/esm/ion-input.entry.js +341 -210
  475. package/dist/esm/ion-item-option_3.entry.js +95 -55
  476. package/dist/esm/ion-item_8.entry.js +192 -93
  477. package/dist/esm/ion-loading.entry.js +146 -60
  478. package/dist/esm/ion-menu_3.entry.js +169 -107
  479. package/dist/esm/ion-modal.entry.js +456 -262
  480. package/dist/esm/ion-nav_2.entry.js +102 -159
  481. package/dist/esm/ion-picker-column-option.entry.js +38 -34
  482. package/dist/esm/ion-picker-column.entry.js +418 -406
  483. package/dist/esm/ion-picker.entry.js +402 -393
  484. package/dist/esm/ion-popover.entry.js +320 -206
  485. package/dist/esm/ion-progress-bar.entry.js +32 -26
  486. package/dist/esm/ion-radio_2.entry.js +208 -135
  487. package/dist/esm/ion-range.entry.js +304 -239
  488. package/dist/esm/ion-refresher_2.entry.js +164 -92
  489. package/dist/esm/ion-reorder_2.entry.js +54 -24
  490. package/dist/esm/ion-ripple-effect.entry.js +14 -14
  491. package/dist/esm/ion-route_4.entry.js +176 -72
  492. package/dist/esm/ion-searchbar.entry.js +291 -200
  493. package/dist/esm/ion-segment-content.entry.js +2 -2
  494. package/dist/esm/ion-segment-view.entry.js +28 -17
  495. package/dist/esm/ion-segment_2.entry.js +169 -126
  496. package/dist/esm/ion-select-modal.entry.js +105 -49
  497. package/dist/esm/ion-select_3.entry.js +787 -260
  498. package/dist/esm/ion-spinner.entry.js +24 -10
  499. package/dist/esm/ion-split-pane.entry.js +29 -16
  500. package/dist/esm/ion-tab-bar_2.entry.js +101 -42
  501. package/dist/esm/ion-tab_2.entry.js +54 -28
  502. package/dist/esm/ion-text.entry.js +11 -5
  503. package/dist/esm/ion-textarea.entry.js +295 -188
  504. package/dist/esm/ion-toast.entry.js +236 -117
  505. package/dist/esm/ion-toggle.entry.js +175 -122
  506. package/dist/esm/{ionic-global-Cp_eT4sZ.js → ionic-global-BVB7BrLT.js} +13 -8
  507. package/dist/esm/ionic.js +5 -5
  508. package/dist/esm/{ios.transition-CxNhMt4a.js → ios.transition-DXRCmcbC.js} +14 -18
  509. package/dist/esm/{item-multiple-inputs-DlNuqNJm.js → item-multiple-inputs-rU8VaNNg.js} +1 -1
  510. package/dist/esm/{keyboard-ywgs5efA.js → keyboard-Cj8mLJeq.js} +2 -2
  511. package/dist/esm/{keyboard-CUw4ekVy.js → keyboard-DAF8GNJ9.js} +2 -2
  512. package/dist/esm/{keyboard-controller-BaaVITYt.js → keyboard-controller-DEwoa1ev.js} +6 -6
  513. package/dist/esm/loader.js +5 -5
  514. package/dist/esm/{md.transition-IE4mC3kp.js → md.transition-BMngO4i_.js} +8 -9
  515. package/dist/esm/overlay-control-label-BSQPZ79H.js +47 -0
  516. package/dist/esm/{overlays-COCl_nm9.js → overlays-CPmIs9Ls.js} +48 -33
  517. package/dist/esm/select-option-render-C4m76VGH.js +121 -0
  518. package/dist/esm/slot-mutation-controller-DiE_C9un.js +393 -0
  519. package/dist/esm/{status-tap-HhO5eQI9.js → status-tap-CHB7KwIb.js} +4 -4
  520. package/dist/esm/{swipe-back-DK6afpuO.js → swipe-back-C9HW1bug.js} +5 -5
  521. package/dist/esm/{theme-DiVJyqlX.js → theme-byZM6qHV.js} +6 -1
  522. package/dist/html.html-data.json +52 -80
  523. package/dist/ionic/index.esm.js +1 -1
  524. package/dist/ionic/ionic.esm.js +1 -1
  525. package/dist/ionic/p-06ec7136.entry.js +4 -0
  526. package/dist/ionic/p-09fe4fa3.entry.js +4 -0
  527. package/dist/ionic/p-10d45a07.entry.js +4 -0
  528. package/dist/ionic/p-208c8a07.entry.js +4 -0
  529. package/dist/ionic/p-212474fa.entry.js +4 -0
  530. package/dist/ionic/p-2eef1396.entry.js +4 -0
  531. package/dist/ionic/p-347e005d.entry.js +4 -0
  532. package/dist/ionic/p-3a0b3f1d.entry.js +4 -0
  533. package/dist/ionic/p-3b071259.entry.js +4 -0
  534. package/dist/ionic/{p-c6e49f3f.entry.js → p-40424a88.entry.js} +1 -1
  535. package/dist/ionic/p-4204184c.entry.js +4 -0
  536. package/dist/ionic/p-47464391.entry.js +4 -0
  537. package/dist/ionic/p-4eOQC00Z.js +4 -0
  538. package/dist/ionic/p-4f9c9126.entry.js +4 -0
  539. package/dist/ionic/p-5JsKPLJD.js +4 -0
  540. package/dist/ionic/p-5bc485c6.entry.js +4 -0
  541. package/dist/ionic/p-603a61e6.entry.js +4 -0
  542. package/dist/ionic/p-60576951.entry.js +4 -0
  543. package/dist/ionic/p-67a81d33.entry.js +4 -0
  544. package/dist/ionic/p-6affb775.entry.js +4 -0
  545. package/dist/ionic/p-6f120c25.entry.js +4 -0
  546. package/dist/ionic/p-71c82b60.entry.js +4 -0
  547. package/dist/ionic/p-79325ffe.entry.js +4 -0
  548. package/dist/ionic/{p-DZaO33Mw.js → p-7CBuOvEo.js} +1 -1
  549. package/dist/ionic/p-7e4d51fa.entry.js +4 -0
  550. package/dist/ionic/p-7f5d4664.entry.js +4 -0
  551. package/dist/ionic/p-80ee82fc.entry.js +4 -0
  552. package/dist/ionic/p-84af7dbc.entry.js +4 -0
  553. package/dist/ionic/p-89ca830a.entry.js +4 -0
  554. package/dist/ionic/p-93b8ec8f.entry.js +4 -0
  555. package/dist/ionic/p-946f65c2.entry.js +4 -0
  556. package/dist/ionic/p-9c4b39fb.entry.js +4 -0
  557. package/dist/ionic/p-B1NEZUzQ.js +4 -0
  558. package/dist/ionic/p-B1ck5iy-.js +4 -0
  559. package/dist/ionic/{p-Cd4H8ft-.js → p-B4FrqdW0.js} +1 -1
  560. package/dist/ionic/p-BB0LlG4y.js +4 -0
  561. package/dist/ionic/p-BMPN55of.js +4 -0
  562. package/dist/ionic/p-BSQPZ79H.js +4 -0
  563. package/dist/ionic/p-BYEAtHr-.js +4 -0
  564. package/dist/ionic/p-BhamHSw3.js +4 -0
  565. package/dist/ionic/{p-DV3sJJW8.js → p-BvabGprD.js} +1 -1
  566. package/dist/ionic/p-C-94tAim.js +4 -0
  567. package/dist/ionic/{p-DipZFfzN.js → p-C-eHZMYE.js} +1 -1
  568. package/dist/ionic/p-CBR_W98Z.js +4 -0
  569. package/dist/ionic/{p-ClM02LPk.js → p-CBWAXjA5.js} +1 -1
  570. package/dist/ionic/p-CMRtMbJc.js +4 -0
  571. package/dist/ionic/p-CPcPmkGv.js +4 -0
  572. package/dist/ionic/p-CaRuIadB.js +4 -0
  573. package/dist/ionic/p-Cdjxf_yg.js +4 -0
  574. package/dist/ionic/p-ChhhtsGZ.js +5 -0
  575. package/dist/ionic/p-CzS1qWve.js +4 -0
  576. package/dist/ionic/p-D5t_-oMk.js +4 -0
  577. package/dist/ionic/p-D94_RztK.js +4 -0
  578. package/dist/ionic/p-DWCzVL3Y.js +4 -0
  579. package/dist/ionic/p-DjjfauRM.js +4 -0
  580. package/dist/ionic/p-DkUB-ROc.js +4 -0
  581. package/dist/ionic/p-Dn0mqQ_R.js +4 -0
  582. package/dist/ionic/p-Dojwmvde.js +4 -0
  583. package/dist/ionic/p-DplOqGUv.js +4 -0
  584. package/dist/ionic/p-Dst_XmZh.js +4 -0
  585. package/dist/ionic/p-T71k3C35.js +4 -0
  586. package/dist/ionic/p-TXPDHL13.js +4 -0
  587. package/dist/ionic/p-UIBJkZf8.js +4 -0
  588. package/dist/ionic/p-a438b193.entry.js +4 -0
  589. package/dist/ionic/p-babaaaa7.entry.js +4 -0
  590. package/dist/ionic/p-be08d500.entry.js +4 -0
  591. package/dist/ionic/p-be9a4f51.entry.js +4 -0
  592. package/dist/ionic/p-byZM6qHV.js +4 -0
  593. package/dist/ionic/p-c00d3092.entry.js +4 -0
  594. package/dist/ionic/p-c36dc8f5.entry.js +4 -0
  595. package/dist/ionic/p-c72a7e17.entry.js +4 -0
  596. package/dist/ionic/p-c8edd88c.entry.js +4 -0
  597. package/dist/ionic/p-ce0e380b.entry.js +4 -0
  598. package/dist/ionic/p-ce32912b.entry.js +4 -0
  599. package/dist/ionic/p-d07cf130.entry.js +4 -0
  600. package/dist/ionic/p-d27edeb3.entry.js +4 -0
  601. package/dist/ionic/p-d5d2c506.entry.js +4 -0
  602. package/dist/ionic/p-d5e31ca9.entry.js +4 -0
  603. package/dist/ionic/p-de91444f.entry.js +4 -0
  604. package/dist/ionic/p-ded69ceb.entry.js +4 -0
  605. package/dist/ionic/p-df72866d.entry.js +4 -0
  606. package/dist/ionic/p-e47e3151.entry.js +4 -0
  607. package/dist/ionic/p-e621e5e8.entry.js +4 -0
  608. package/dist/ionic/p-eea9cf93.entry.js +4 -0
  609. package/dist/ionic/p-f402f5a4.entry.js +4 -0
  610. package/dist/ionic/p-fe1bfbcf.entry.js +4 -0
  611. package/{components/p-9GFIh9p1.js → dist/ionic/p-ffb90460.entry.js} +1 -1
  612. package/dist/types/components/img/img.d.ts +2 -0
  613. package/dist/types/components/input/input.d.ts +12 -6
  614. package/dist/types/components/modal/modal-interface.d.ts +9 -0
  615. package/dist/types/components/modal/modal.d.ts +11 -4
  616. package/dist/types/components/nav/nav-interface.d.ts +0 -1
  617. package/dist/types/components/nav/nav.d.ts +2 -22
  618. package/dist/types/components/route/route.d.ts +1 -1
  619. package/dist/types/components/router-outlet/router-outlet.d.ts +7 -0
  620. package/dist/types/components/searchbar/searchbar.d.ts +1 -1
  621. package/dist/types/components/select/select-interface.d.ts +31 -0
  622. package/dist/types/components/select/select.d.ts +30 -6
  623. package/dist/types/components/select-option/select-option.d.ts +42 -1
  624. package/dist/types/components/textarea/textarea.d.ts +12 -5
  625. package/dist/types/components.d.ts +74 -311
  626. package/dist/types/index.d.ts +1 -1
  627. package/dist/types/interface.d.ts +0 -1
  628. package/dist/types/utils/config.d.ts +1 -8
  629. package/dist/types/utils/forms/index.d.ts +1 -0
  630. package/dist/types/utils/forms/start-container-controller.d.ts +34 -0
  631. package/dist/types/utils/logging/index.d.ts +2 -1
  632. package/dist/types/utils/overlay-control-label.d.ts +32 -0
  633. package/dist/types/utils/overlays.d.ts +11 -9
  634. package/dist/types/utils/sanitization/index.d.ts +58 -2
  635. package/dist/types/utils/select-option-render.d.ts +53 -0
  636. package/dist/types/utils/test/playwright/playwright-page.d.ts +1 -1
  637. package/dist/types/utils/test/playwright/testExpect.d.ts +1 -1
  638. package/hydrate/index.js +10660 -7305
  639. package/hydrate/index.mjs +10660 -7305
  640. package/package.json +55 -12
  641. package/components/ion-picker-legacy-column.d.ts +0 -11
  642. package/components/ion-picker-legacy-column.js +0 -4
  643. package/components/ion-picker-legacy.d.ts +0 -11
  644. package/components/ion-picker-legacy.js +0 -4
  645. package/components/p-0LM2oPMC.js +0 -4
  646. package/components/p-B21528L5.js +0 -4
  647. package/components/p-B2nSfLHH.js +0 -4
  648. package/components/p-B3qf4bEn.js +0 -4
  649. package/components/p-B9jFTlwE.js +0 -4
  650. package/components/p-BDd9Zrb9.js +0 -4
  651. package/components/p-BLmJ0zRm.js +0 -4
  652. package/components/p-BMYNBJgf.js +0 -4
  653. package/components/p-BRYd8D-I.js +0 -4
  654. package/components/p-BSEgsdFI.js +0 -4
  655. package/components/p-BTEOs1at.js +0 -4
  656. package/components/p-BTJrYwxN.js +0 -4
  657. package/components/p-BV-zKay-.js +0 -4
  658. package/components/p-BYRVyMu9.js +0 -4
  659. package/components/p-Bmq8qlkW.js +0 -4
  660. package/components/p-BuxQcfHK.js +0 -4
  661. package/components/p-Bz0dSlXZ.js +0 -4
  662. package/components/p-CHqRYvYm.js +0 -4
  663. package/components/p-CSZf8_j0.js +0 -4
  664. package/components/p-CTdRooFV.js +0 -4
  665. package/components/p-Cf2jSDS8.js +0 -4
  666. package/components/p-Cfx4M1Bn.js +0 -4
  667. package/components/p-CgkrslTX.js +0 -4
  668. package/components/p-CiCzYG2V.js +0 -4
  669. package/components/p-Ck0lEczL.js +0 -4
  670. package/components/p-CmR5uXej.js +0 -4
  671. package/components/p-CniZht3v.js +0 -4
  672. package/components/p-CsaojgEs.js +0 -4
  673. package/components/p-CtWGkNnJ.js +0 -4
  674. package/components/p-D13Eaw-8.js +0 -4
  675. package/components/p-D4FYu-4R.js +0 -4
  676. package/components/p-D6Ynv7Xh.js +0 -4
  677. package/components/p-DARjq3GM.js +0 -4
  678. package/components/p-DEZ2myA3.js +0 -4
  679. package/components/p-DOFCbuQR.js +0 -4
  680. package/components/p-DVe41iHI.js +0 -4
  681. package/components/p-DX5m9g56.js +0 -4
  682. package/components/p-DboHi2CL.js +0 -4
  683. package/components/p-DiVJyqlX.js +0 -4
  684. package/components/p-DmzFY5IC.js +0 -4
  685. package/components/p-DqZAXv2t.js +0 -4
  686. package/components/p-Dv8w0kqz.js +0 -4
  687. package/components/p-Dw7GNDKq.js +0 -4
  688. package/components/p-Dww01PNs.js +0 -4
  689. package/components/p-Gy276IJk.js +0 -4
  690. package/components/p-ZzLXTvyt.js +0 -4
  691. package/components/p-cyNmxje6.js +0 -4
  692. package/components/p-j5IxBIan.js +0 -4
  693. package/components/p-k_E4tX5Z.js +0 -4
  694. package/components/p-lVAbdiAu.js +0 -4
  695. package/components/p-o8OKV5aD.js +0 -4
  696. package/components/p-rCa2eL0j.js +0 -4
  697. package/dist/cjs/config-D6C-KlA9.js +0 -201
  698. package/dist/cjs/input.utils-DQaUGGed.js +0 -150
  699. package/dist/cjs/ion-datetime_3.cjs.entry.js +0 -3167
  700. package/dist/cjs/notch-controller-aiy8aQb-.js +0 -155
  701. package/dist/collection/components/picker-legacy/animations/ios.enter.js +0 -27
  702. package/dist/collection/components/picker-legacy/animations/ios.leave.js +0 -23
  703. package/dist/collection/components/picker-legacy/picker-interface.js +0 -1
  704. package/dist/collection/components/picker-legacy/picker.ios.css +0 -300
  705. package/dist/collection/components/picker-legacy/picker.js +0 -890
  706. package/dist/collection/components/picker-legacy/picker.md.css +0 -287
  707. package/dist/collection/components/picker-legacy-column/picker-column.ios.css +0 -231
  708. package/dist/collection/components/picker-legacy-column/picker-column.js +0 -422
  709. package/dist/collection/components/picker-legacy-column/picker-column.md.css +0 -222
  710. package/dist/collection/components/picker-legacy-column/test/test.utils.js +0 -43
  711. package/dist/esm/config-DQCONYYp.js +0 -195
  712. package/dist/esm/input.utils-Cd23Gdd1.js +0 -147
  713. package/dist/esm/ion-datetime_3.entry.js +0 -3163
  714. package/dist/esm/notch-controller-Doqis1td.js +0 -153
  715. package/dist/ionic/p-01f81ea5.entry.js +0 -4
  716. package/dist/ionic/p-0283ea73.entry.js +0 -4
  717. package/dist/ionic/p-02ecae65.entry.js +0 -4
  718. package/dist/ionic/p-0672f677.entry.js +0 -4
  719. package/dist/ionic/p-0c06fe60.entry.js +0 -4
  720. package/dist/ionic/p-0fa9c382.entry.js +0 -4
  721. package/dist/ionic/p-1af4d74c.entry.js +0 -4
  722. package/dist/ionic/p-1d7ef0d2.entry.js +0 -4
  723. package/dist/ionic/p-26f05d3a.entry.js +0 -4
  724. package/dist/ionic/p-27d30585.entry.js +0 -4
  725. package/dist/ionic/p-2bb2cb18.entry.js +0 -4
  726. package/dist/ionic/p-31e7bd05.entry.js +0 -4
  727. package/dist/ionic/p-32f53010.entry.js +0 -4
  728. package/dist/ionic/p-35eb8b5c.entry.js +0 -4
  729. package/dist/ionic/p-37e720da.entry.js +0 -4
  730. package/dist/ionic/p-3efa137b.entry.js +0 -4
  731. package/dist/ionic/p-432bd72c.entry.js +0 -4
  732. package/dist/ionic/p-47214c72.entry.js +0 -4
  733. package/dist/ionic/p-4e172429.entry.js +0 -4
  734. package/dist/ionic/p-5c3da84e.entry.js +0 -4
  735. package/dist/ionic/p-5d1da0a2.entry.js +0 -4
  736. package/dist/ionic/p-5d8082fe.entry.js +0 -4
  737. package/dist/ionic/p-613d3c43.entry.js +0 -4
  738. package/dist/ionic/p-616e4d4f.entry.js +0 -4
  739. package/dist/ionic/p-65d611b2.entry.js +0 -4
  740. package/dist/ionic/p-67806e3f.entry.js +0 -4
  741. package/dist/ionic/p-68cbb2fc.entry.js +0 -4
  742. package/dist/ionic/p-737ae9eb.entry.js +0 -4
  743. package/dist/ionic/p-7b0d6248.entry.js +0 -4
  744. package/dist/ionic/p-7e71e470.entry.js +0 -4
  745. package/dist/ionic/p-84d5ce05.entry.js +0 -4
  746. package/dist/ionic/p-85d49987.entry.js +0 -4
  747. package/dist/ionic/p-8945088b.entry.js +0 -4
  748. package/dist/ionic/p-8b155568.entry.js +0 -4
  749. package/dist/ionic/p-90267c4b.entry.js +0 -4
  750. package/dist/ionic/p-92ad8a67.entry.js +0 -4
  751. package/dist/ionic/p-9a97d4e0.entry.js +0 -4
  752. package/dist/ionic/p-9e4b0894.entry.js +0 -4
  753. package/dist/ionic/p-9eeaBrnk.js +0 -4
  754. package/dist/ionic/p-B2kaj8sx.js +0 -4
  755. package/dist/ionic/p-B4y7nxsg.js +0 -4
  756. package/dist/ionic/p-B8t9Ro6f.js +0 -4
  757. package/dist/ionic/p-BEOxsxBw.js +0 -4
  758. package/dist/ionic/p-BJ2NxSHp.js +0 -4
  759. package/dist/ionic/p-BLiL8g0v.js +0 -4
  760. package/dist/ionic/p-BTEOs1at.js +0 -4
  761. package/dist/ionic/p-BUFIpxKM.js +0 -4
  762. package/dist/ionic/p-BYRVyMu9.js +0 -4
  763. package/dist/ionic/p-C0eMdTCW.js +0 -4
  764. package/dist/ionic/p-CKvCXMs9.js +0 -4
  765. package/dist/ionic/p-CPTv7G9B.js +0 -4
  766. package/dist/ionic/p-CtWGkNnJ.js +0 -4
  767. package/dist/ionic/p-CxMyXUtt.js +0 -4
  768. package/dist/ionic/p-D13Eaw-8.js +0 -4
  769. package/dist/ionic/p-DCoy2elM.js +0 -4
  770. package/dist/ionic/p-DiVJyqlX.js +0 -4
  771. package/dist/ionic/p-DqN5EA2O.js +0 -4
  772. package/dist/ionic/p-Dr9fTCb1.js +0 -4
  773. package/dist/ionic/p-DzWaWHGc.js +0 -4
  774. package/dist/ionic/p-EkpneKVM.js +0 -4
  775. package/dist/ionic/p-Nqf6uvGh.js +0 -4
  776. package/dist/ionic/p-SNAkTDfm.js +0 -4
  777. package/dist/ionic/p-ab00b0d8.entry.js +0 -4
  778. package/dist/ionic/p-c2175309.entry.js +0 -4
  779. package/dist/ionic/p-c4b69d9b.entry.js +0 -4
  780. package/dist/ionic/p-c4d8641b.entry.js +0 -4
  781. package/dist/ionic/p-ce637936.entry.js +0 -4
  782. package/dist/ionic/p-da85e958.entry.js +0 -4
  783. package/dist/ionic/p-dfa8d673.entry.js +0 -4
  784. package/dist/ionic/p-e139357c.entry.js +0 -4
  785. package/dist/ionic/p-e7b7a7b1.entry.js +0 -4
  786. package/dist/ionic/p-f37ca594.entry.js +0 -4
  787. package/dist/ionic/p-f8dd336e.entry.js +0 -4
  788. package/dist/ionic/p-f9de757b.entry.js +0 -4
  789. package/dist/ionic/p-fe11cf51.entry.js +0 -4
  790. package/dist/ionic/p-mjKAFv89.js +0 -4
  791. package/dist/ionic/p-o8OKV5aD.js +0 -4
  792. package/dist/ionic/p-tcQvqkiX.js +0 -5
  793. package/dist/types/components/picker-legacy/animations/ios.enter.d.ts +0 -5
  794. package/dist/types/components/picker-legacy/animations/ios.leave.d.ts +0 -5
  795. package/dist/types/components/picker-legacy/picker-interface.d.ts +0 -52
  796. package/dist/types/components/picker-legacy/picker.d.ts +0 -158
  797. package/dist/types/components/picker-legacy-column/picker-column.d.ts +0 -46
  798. package/dist/types/components/picker-legacy-column/test/test.utils.d.ts +0 -9
  799. /package/components/{p-CO7fmmxt.js → p-LpMHEu3v.js} +0 -0
@@ -1,9 +1,9 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { r as registerInstance, c as createEvent, h, d as Host, g as getElement } from './index-tcQvqkiX.js';
5
- import { g as getElementRoot } from './helpers-DkCLSLI9.js';
6
- import './dir-o8OKV5aD.js';
4
+ import { r as registerInstance, c as createEvent, g as getElement, h, d as Host } from './index-ChhhtsGZ.js';
5
+ import { g as getElementRoot } from './helpers-CAGf8Wgp.js';
6
+ import './dir-Dojwmvde.js';
7
7
 
8
8
  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)))}`;
9
9
 
@@ -13,427 +13,249 @@ const Picker = class {
13
13
  constructor(hostRef) {
14
14
  registerInstance(this, hostRef);
15
15
  this.ionInputModeChange = createEvent(this, "ionInputModeChange", 7);
16
- this.useInputMode = false;
17
- this.isInHighlightBounds = (ev) => {
18
- const { highlightEl } = this;
19
- if (!highlightEl) {
20
- return false;
21
- }
22
- const bbox = highlightEl.getBoundingClientRect();
23
- /**
24
- * Check to see if the user clicked
25
- * outside the bounds of the highlight.
26
- */
27
- const outsideX = ev.clientX < bbox.left || ev.clientX > bbox.right;
28
- const outsideY = ev.clientY < bbox.top || ev.clientY > bbox.bottom;
29
- if (outsideX || outsideY) {
30
- return false;
31
- }
32
- return true;
33
- };
16
+ }
17
+ inputEl;
18
+ useInputMode = false;
19
+ inputModeColumn;
20
+ highlightEl;
21
+ actionOnClick;
22
+ destroyKeypressListener;
23
+ singleColumnSearchTimeout;
24
+ get el() { return getElement(this); }
25
+ /**
26
+ * @internal
27
+ */
28
+ ionInputModeChange;
29
+ /**
30
+ * When the picker is interacted with
31
+ * we need to prevent touchstart so other
32
+ * gestures do not fire. For example,
33
+ * scrolling on the wheel picker
34
+ * in ion-datetime should not cause
35
+ * a card modal to swipe to close.
36
+ */
37
+ preventTouchStartPropagation(ev) {
38
+ ev.stopPropagation();
39
+ }
40
+ componentWillLoad() {
41
+ getElementRoot(this.el).addEventListener('focusin', this.onFocusIn);
42
+ getElementRoot(this.el).addEventListener('focusout', this.onFocusOut);
43
+ }
44
+ isInHighlightBounds = (ev) => {
45
+ const { highlightEl } = this;
46
+ if (!highlightEl) {
47
+ return false;
48
+ }
49
+ const bbox = highlightEl.getBoundingClientRect();
34
50
  /**
35
- * If we are no longer focused
36
- * on a picker column, then we should
37
- * exit input mode. An exception is made
38
- * for the input in the picker since having
39
- * that focused means we are still in input mode.
51
+ * Check to see if the user clicked
52
+ * outside the bounds of the highlight.
40
53
  */
41
- this.onFocusOut = (ev) => {
42
- // TODO(FW-2832): type
43
- const { relatedTarget } = ev;
44
- if (!relatedTarget || (relatedTarget.tagName !== 'ION-PICKER-COLUMN' && relatedTarget !== this.inputEl)) {
45
- this.exitInputMode();
46
- }
47
- };
54
+ const outsideX = ev.clientX < bbox.left || ev.clientX > bbox.right;
55
+ const outsideY = ev.clientY < bbox.top || ev.clientY > bbox.bottom;
56
+ if (outsideX || outsideY) {
57
+ return false;
58
+ }
59
+ return true;
60
+ };
61
+ /**
62
+ * If we are no longer focused
63
+ * on a picker column, then we should
64
+ * exit input mode. An exception is made
65
+ * for the input in the picker since having
66
+ * that focused means we are still in input mode.
67
+ */
68
+ onFocusOut = (ev) => {
69
+ // TODO(FW-2832): type
70
+ const { relatedTarget } = ev;
71
+ if (!relatedTarget || (relatedTarget.tagName !== 'ION-PICKER-COLUMN' && relatedTarget !== this.inputEl)) {
72
+ this.exitInputMode();
73
+ }
74
+ };
75
+ /**
76
+ * When picker columns receive focus
77
+ * the parent picker needs to determine
78
+ * whether to enter/exit input mode.
79
+ */
80
+ onFocusIn = (ev) => {
81
+ // TODO(FW-2832): type
82
+ const { target } = ev;
48
83
  /**
49
- * When picker columns receive focus
50
- * the parent picker needs to determine
51
- * whether to enter/exit input mode.
84
+ * Due to browser differences in how/when focus
85
+ * is dispatched on certain elements, we need to
86
+ * make sure that this function only ever runs when
87
+ * focusing a picker column.
52
88
  */
53
- this.onFocusIn = (ev) => {
54
- // TODO(FW-2832): type
55
- const { target } = ev;
56
- /**
57
- * Due to browser differences in how/when focus
58
- * is dispatched on certain elements, we need to
59
- * make sure that this function only ever runs when
60
- * focusing a picker column.
61
- */
62
- if (target.tagName !== 'ION-PICKER-COLUMN') {
63
- return;
64
- }
65
- /**
66
- * If we have actionOnClick
67
- * then this means the user focused
68
- * a picker column via mouse or
69
- * touch (i.e. a PointerEvent). As a result,
70
- * we should not enter/exit input mode
71
- * until the click event has fired, which happens
72
- * after the `focusin` event.
73
- *
74
- * Otherwise, the user likely focused
75
- * the column using their keyboard and
76
- * we should enter/exit input mode automatically.
77
- */
78
- if (!this.actionOnClick) {
79
- const columnEl = target;
80
- const allowInput = columnEl.numericInput;
81
- if (allowInput) {
82
- this.enterInputMode(columnEl, false);
83
- }
84
- else {
85
- this.exitInputMode();
86
- }
87
- }
88
- };
89
+ if (target.tagName !== 'ION-PICKER-COLUMN') {
90
+ return;
91
+ }
89
92
  /**
90
- * On click we need to run an actionOnClick
91
- * function that has been set in onPointerDown
92
- * so that we enter/exit input mode correctly.
93
+ * If we have actionOnClick
94
+ * then this means the user focused
95
+ * a picker column via mouse or
96
+ * touch (i.e. a PointerEvent). As a result,
97
+ * we should not enter/exit input mode
98
+ * until the click event has fired, which happens
99
+ * after the `focusin` event.
100
+ *
101
+ * Otherwise, the user likely focused
102
+ * the column using their keyboard and
103
+ * we should enter/exit input mode automatically.
93
104
  */
94
- this.onClick = () => {
95
- const { actionOnClick } = this;
96
- if (actionOnClick) {
97
- actionOnClick();
98
- this.actionOnClick = undefined;
105
+ if (!this.actionOnClick) {
106
+ const columnEl = target;
107
+ const allowInput = columnEl.numericInput;
108
+ if (allowInput) {
109
+ this.enterInputMode(columnEl, false);
99
110
  }
100
- };
101
- /**
102
- * Clicking a column also focuses the column on
103
- * certain browsers, so we use onPointerDown
104
- * to tell the onFocusIn function that users
105
- * are trying to click the column rather than
106
- * focus the column using the keyboard. When the
107
- * user completes the click, the onClick function
108
- * runs and runs the actionOnClick callback.
109
- */
110
- this.onPointerDown = (ev) => {
111
- const { useInputMode, inputModeColumn, el } = this;
112
- if (this.isInHighlightBounds(ev)) {
111
+ else {
112
+ this.exitInputMode();
113
+ }
114
+ }
115
+ };
116
+ /**
117
+ * On click we need to run an actionOnClick
118
+ * function that has been set in onPointerDown
119
+ * so that we enter/exit input mode correctly.
120
+ */
121
+ onClick = () => {
122
+ const { actionOnClick } = this;
123
+ if (actionOnClick) {
124
+ actionOnClick();
125
+ this.actionOnClick = undefined;
126
+ }
127
+ };
128
+ /**
129
+ * Clicking a column also focuses the column on
130
+ * certain browsers, so we use onPointerDown
131
+ * to tell the onFocusIn function that users
132
+ * are trying to click the column rather than
133
+ * focus the column using the keyboard. When the
134
+ * user completes the click, the onClick function
135
+ * runs and runs the actionOnClick callback.
136
+ */
137
+ onPointerDown = (ev) => {
138
+ const { useInputMode, inputModeColumn, el } = this;
139
+ if (this.isInHighlightBounds(ev)) {
140
+ /**
141
+ * If we were already in
142
+ * input mode, then we should determine
143
+ * if we tapped a particular column and
144
+ * should switch to input mode for
145
+ * that specific column.
146
+ */
147
+ if (useInputMode) {
113
148
  /**
114
- * If we were already in
115
- * input mode, then we should determine
116
- * if we tapped a particular column and
117
- * should switch to input mode for
118
- * that specific column.
149
+ * If we tapped a picker column
150
+ * then we should either switch to input
151
+ * mode for that column or all columns.
152
+ * Otherwise we should exit input mode
153
+ * since we just tapped the highlight and
154
+ * not a column.
119
155
  */
120
- if (useInputMode) {
156
+ if (ev.target.tagName === 'ION-PICKER-COLUMN') {
121
157
  /**
122
- * If we tapped a picker column
123
- * then we should either switch to input
124
- * mode for that column or all columns.
125
- * Otherwise we should exit input mode
126
- * since we just tapped the highlight and
127
- * not a column.
158
+ * If user taps 2 different columns
159
+ * then we should just switch to input mode
160
+ * for the new column rather than switching to
161
+ * input mode for all columns.
128
162
  */
129
- if (ev.target.tagName === 'ION-PICKER-COLUMN') {
130
- /**
131
- * If user taps 2 different columns
132
- * then we should just switch to input mode
133
- * for the new column rather than switching to
134
- * input mode for all columns.
135
- */
136
- if (inputModeColumn && inputModeColumn === ev.target) {
137
- this.actionOnClick = () => {
138
- this.enterInputMode();
139
- };
140
- }
141
- else {
142
- this.actionOnClick = () => {
143
- this.enterInputMode(ev.target);
144
- };
145
- }
163
+ if (inputModeColumn && inputModeColumn === ev.target) {
164
+ this.actionOnClick = () => {
165
+ this.enterInputMode();
166
+ };
146
167
  }
147
168
  else {
148
169
  this.actionOnClick = () => {
149
- this.exitInputMode();
170
+ this.enterInputMode(ev.target);
150
171
  };
151
172
  }
152
- /**
153
- * If we were not already in
154
- * input mode, then we should
155
- * enter input mode for all columns.
156
- */
157
173
  }
158
174
  else {
159
- /**
160
- * If there is only 1 numeric input column
161
- * then we should skip multi column input.
162
- */
163
- const columns = el.querySelectorAll('ion-picker-column.picker-column-numeric-input');
164
- const columnEl = columns.length === 1 ? ev.target : undefined;
165
175
  this.actionOnClick = () => {
166
- this.enterInputMode(columnEl);
176
+ this.exitInputMode();
167
177
  };
168
178
  }
169
- return;
170
- }
171
- this.actionOnClick = () => {
172
- this.exitInputMode();
173
- };
174
- };
175
- /**
176
- * Enters input mode to allow
177
- * for text entry of numeric values.
178
- * If on mobile, we focus a hidden input
179
- * field so that the on screen keyboard
180
- * is brought up. When tabbing using a
181
- * keyboard, picker columns receive an outline
182
- * to indicate they are focused. As a result,
183
- * we should not focus the hidden input as it
184
- * would cause the outline to go away, preventing
185
- * users from having any visual indication of which
186
- * column is focused.
187
- */
188
- this.enterInputMode = (columnEl, focusInput = true) => {
189
- const { inputEl, el } = this;
190
- if (!inputEl) {
191
- return;
192
- }
193
- /**
194
- * Only active input mode if there is at
195
- * least one column that accepts numeric input.
196
- */
197
- const hasInputColumn = el.querySelector('ion-picker-column.picker-column-numeric-input');
198
- if (!hasInputColumn) {
199
- return;
200
- }
201
- /**
202
- * If columnEl is undefined then
203
- * it is assumed that all numeric pickers
204
- * are eligible for text entry.
205
- * (i.e. hour and minute columns)
206
- */
207
- this.useInputMode = true;
208
- this.inputModeColumn = columnEl;
209
- /**
210
- * Users with a keyboard and mouse can
211
- * activate input mode where the input is
212
- * focused as well as when it is not focused,
213
- * so we need to make sure we clean up any
214
- * old listeners.
215
- */
216
- if (focusInput) {
217
- if (this.destroyKeypressListener) {
218
- this.destroyKeypressListener();
219
- this.destroyKeypressListener = undefined;
220
- }
221
- inputEl.focus();
179
+ /**
180
+ * If we were not already in
181
+ * input mode, then we should
182
+ * enter input mode for all columns.
183
+ */
222
184
  }
223
185
  else {
224
- // TODO FW-5900 Use keydown instead
225
- el.addEventListener('keypress', this.onKeyPress);
226
- this.destroyKeypressListener = () => {
227
- el.removeEventListener('keypress', this.onKeyPress);
228
- };
229
- }
230
- this.emitInputModeChange();
231
- };
232
- this.onKeyPress = (ev) => {
233
- const { inputEl } = this;
234
- if (!inputEl) {
235
- return;
236
- }
237
- const parsedValue = parseInt(ev.key, 10);
238
- /**
239
- * Only numbers should be allowed
240
- */
241
- if (!Number.isNaN(parsedValue)) {
242
- inputEl.value += ev.key;
243
- this.onInputChange();
244
- }
245
- };
246
- this.selectSingleColumn = () => {
247
- const { inputEl, inputModeColumn, singleColumnSearchTimeout } = this;
248
- if (!inputEl || !inputModeColumn) {
249
- return;
250
- }
251
- const options = Array.from(inputModeColumn.querySelectorAll('ion-picker-column-option')).filter((el) => el.disabled !== true);
252
- /**
253
- * If users pause for a bit, the search
254
- * value should be reset similar to how a
255
- * <select> behaves. So typing "34", waiting,
256
- * then typing "5" should select "05".
257
- */
258
- if (singleColumnSearchTimeout) {
259
- clearTimeout(singleColumnSearchTimeout);
260
- }
261
- this.singleColumnSearchTimeout = setTimeout(() => {
262
- inputEl.value = '';
263
- this.singleColumnSearchTimeout = undefined;
264
- }, 1000);
265
- /**
266
- * For values that are longer than 2 digits long
267
- * we should shift the value over 1 character
268
- * to the left. So typing "456" would result in "56".
269
- * TODO: If we want to support more than just
270
- * time entry, we should update this value to be
271
- * the max length of all of the picker items.
272
- */
273
- if (inputEl.value.length >= 3) {
274
- const startIndex = inputEl.value.length - 2;
275
- const newString = inputEl.value.substring(startIndex);
276
- inputEl.value = newString;
277
- this.selectSingleColumn();
278
- return;
279
- }
280
- /**
281
- * Checking the value of the input gets priority
282
- * first. For example, if the value of the input
283
- * is "1" and we entered "2", then the complete value
284
- * is "12" and we should select hour 12.
285
- *
286
- * Regex removes any leading zeros from values like "02",
287
- * but it keeps a single zero if there are only zeros in the string.
288
- * 0+(?=[1-9]) --> Match 1 or more zeros that are followed by 1-9
289
- * 0+(?=0$) --> Match 1 or more zeros that must be followed by one 0 and end.
290
- */
291
- const findItemFromCompleteValue = options.find(({ textContent }) => {
292
186
  /**
293
- * Keyboard entry is currently only used inside of Datetime
294
- * where we guarantee textContent is set.
295
- * If we end up exposing this feature publicly we should revisit this assumption.
187
+ * If there is only 1 numeric input column
188
+ * then we should skip multi column input.
296
189
  */
297
- const parsedText = textContent.replace(/^0+(?=[1-9])|0+(?=0$)/, '');
298
- return parsedText === inputEl.value;
299
- });
300
- if (findItemFromCompleteValue) {
301
- inputModeColumn.setValue(findItemFromCompleteValue.value);
302
- return;
303
- }
304
- /**
305
- * If we typed "56" to get minute 56, then typed "7",
306
- * we should select "07" as "567" is not a valid minute.
307
- */
308
- if (inputEl.value.length === 2) {
309
- const changedCharacter = inputEl.value.substring(inputEl.value.length - 1);
310
- inputEl.value = changedCharacter;
311
- this.selectSingleColumn();
190
+ const columns = el.querySelectorAll('ion-picker-column.picker-column-numeric-input');
191
+ const columnEl = columns.length === 1 ? ev.target : undefined;
192
+ this.actionOnClick = () => {
193
+ this.enterInputMode(columnEl);
194
+ };
312
195
  }
196
+ return;
197
+ }
198
+ this.actionOnClick = () => {
199
+ this.exitInputMode();
313
200
  };
201
+ };
202
+ /**
203
+ * Enters input mode to allow
204
+ * for text entry of numeric values.
205
+ * If on mobile, we focus a hidden input
206
+ * field so that the on screen keyboard
207
+ * is brought up. When tabbing using a
208
+ * keyboard, picker columns receive an outline
209
+ * to indicate they are focused. As a result,
210
+ * we should not focus the hidden input as it
211
+ * would cause the outline to go away, preventing
212
+ * users from having any visual indication of which
213
+ * column is focused.
214
+ */
215
+ enterInputMode = (columnEl, focusInput = true) => {
216
+ const { inputEl, el } = this;
217
+ if (!inputEl) {
218
+ return;
219
+ }
314
220
  /**
315
- * Searches a list of column items for a particular
316
- * value. This is currently used for numeric values.
317
- * The zeroBehavior can be set to account for leading
318
- * or trailing zeros when looking at the item text.
221
+ * Only active input mode if there is at
222
+ * least one column that accepts numeric input.
319
223
  */
320
- this.searchColumn = (colEl, value, zeroBehavior = 'start') => {
321
- if (!value) {
322
- return false;
323
- }
324
- const behavior = zeroBehavior === 'start' ? /^0+/ : /0$/;
325
- value = value.replace(behavior, '');
326
- const option = Array.from(colEl.querySelectorAll('ion-picker-column-option')).find((el) => {
327
- return el.disabled !== true && el.textContent.replace(behavior, '') === value;
328
- });
329
- if (option) {
330
- colEl.setValue(option.value);
331
- }
332
- return !!option;
333
- };
224
+ const hasInputColumn = el.querySelector('ion-picker-column.picker-column-numeric-input');
225
+ if (!hasInputColumn) {
226
+ return;
227
+ }
334
228
  /**
335
- * Attempts to intelligently search the first and second
336
- * column as if they're number columns for the provided numbers
337
- * where the first two numbers are the first column
338
- * and the last 2 are the last column. Tries to allow for the first
339
- * number to be ignored for situations where typos occurred.
229
+ * If columnEl is undefined then
230
+ * it is assumed that all numeric pickers
231
+ * are eligible for text entry.
232
+ * (i.e. hour and minute columns)
340
233
  */
341
- this.multiColumnSearch = (firstColumn, secondColumn, input) => {
342
- if (input.length === 0) {
343
- return;
344
- }
345
- const inputArray = input.split('');
346
- const hourValue = inputArray.slice(0, 2).join('');
347
- // Try to find a match for the first two digits in the first column
348
- const foundHour = this.searchColumn(firstColumn, hourValue);
349
- // If we have more than 2 digits and found a match for hours,
350
- // use the remaining digits for the second column (minutes)
351
- if (inputArray.length > 2 && foundHour) {
352
- const minuteValue = inputArray.slice(2, 4).join('');
353
- this.searchColumn(secondColumn, minuteValue);
354
- }
355
- // If we couldn't find a match for the two-digit hour, try single digit approaches
356
- else if (!foundHour && inputArray.length >= 1) {
357
- // First try the first digit as a single-digit hour
358
- let singleDigitHour = inputArray[0];
359
- let singleDigitFound = this.searchColumn(firstColumn, singleDigitHour);
360
- // If that didn't work, try the second digit as a single-digit hour
361
- // (handles case where user made a typo in the first digit, or they typed over themselves)
362
- if (!singleDigitFound) {
363
- inputArray.shift();
364
- singleDigitHour = inputArray[0];
365
- singleDigitFound = this.searchColumn(firstColumn, singleDigitHour);
366
- }
367
- // If we found a single-digit hour and have remaining digits,
368
- // use up to 2 of the remaining digits for the second column
369
- if (singleDigitFound && inputArray.length > 1) {
370
- const remainingDigits = inputArray.slice(1, 3).join('');
371
- this.searchColumn(secondColumn, remainingDigits);
372
- }
373
- }
374
- };
375
- this.selectMultiColumn = () => {
376
- const { inputEl, el } = this;
377
- if (!inputEl) {
378
- return;
379
- }
380
- const numericPickers = Array.from(el.querySelectorAll('ion-picker-column')).filter((col) => col.numericInput);
381
- const firstColumn = numericPickers[0];
382
- const lastColumn = numericPickers[1];
383
- let value = inputEl.value;
384
- if (value.length > 4) {
385
- const startIndex = inputEl.value.length - 4;
386
- const newString = inputEl.value.substring(startIndex);
387
- inputEl.value = newString;
388
- value = newString;
389
- }
390
- this.multiColumnSearch(firstColumn, lastColumn, value);
391
- };
234
+ this.useInputMode = true;
235
+ this.inputModeColumn = columnEl;
392
236
  /**
393
- * Searches the value of the active column
394
- * to determine which value users are trying
395
- * to select
237
+ * Users with a keyboard and mouse can
238
+ * activate input mode where the input is
239
+ * focused as well as when it is not focused,
240
+ * so we need to make sure we clean up any
241
+ * old listeners.
396
242
  */
397
- this.onInputChange = () => {
398
- const { useInputMode, inputEl, inputModeColumn } = this;
399
- if (!useInputMode || !inputEl) {
400
- return;
243
+ if (focusInput) {
244
+ if (this.destroyKeypressListener) {
245
+ this.destroyKeypressListener();
246
+ this.destroyKeypressListener = undefined;
401
247
  }
402
- if (inputModeColumn) {
403
- this.selectSingleColumn();
404
- }
405
- else {
406
- this.selectMultiColumn();
407
- }
408
- };
409
- /**
410
- * Emit ionInputModeChange. Picker columns
411
- * listen for this event to determine whether
412
- * or not their column is "active" for text input.
413
- */
414
- this.emitInputModeChange = () => {
415
- const { useInputMode, inputModeColumn } = this;
416
- this.ionInputModeChange.emit({
417
- useInputMode,
418
- inputModeColumn,
419
- });
420
- };
421
- }
422
- /**
423
- * When the picker is interacted with
424
- * we need to prevent touchstart so other
425
- * gestures do not fire. For example,
426
- * scrolling on the wheel picker
427
- * in ion-datetime should not cause
428
- * a card modal to swipe to close.
429
- */
430
- preventTouchStartPropagation(ev) {
431
- ev.stopPropagation();
432
- }
433
- componentWillLoad() {
434
- getElementRoot(this.el).addEventListener('focusin', this.onFocusIn);
435
- getElementRoot(this.el).addEventListener('focusout', this.onFocusOut);
436
- }
248
+ inputEl.focus();
249
+ }
250
+ else {
251
+ // TODO FW-5900 Use keydown instead
252
+ el.addEventListener('keypress', this.onKeyPress);
253
+ this.destroyKeypressListener = () => {
254
+ el.removeEventListener('keypress', this.onKeyPress);
255
+ };
256
+ }
257
+ this.emitInputModeChange();
258
+ };
437
259
  /**
438
260
  * @internal
439
261
  * Exits text entry mode for the picker
@@ -455,9 +277,197 @@ const Picker = class {
455
277
  }
456
278
  this.emitInputModeChange();
457
279
  }
280
+ onKeyPress = (ev) => {
281
+ const { inputEl } = this;
282
+ if (!inputEl) {
283
+ return;
284
+ }
285
+ const parsedValue = parseInt(ev.key, 10);
286
+ /**
287
+ * Only numbers should be allowed
288
+ */
289
+ if (!Number.isNaN(parsedValue)) {
290
+ inputEl.value += ev.key;
291
+ this.onInputChange();
292
+ }
293
+ };
294
+ selectSingleColumn = () => {
295
+ const { inputEl, inputModeColumn, singleColumnSearchTimeout } = this;
296
+ if (!inputEl || !inputModeColumn) {
297
+ return;
298
+ }
299
+ const options = Array.from(inputModeColumn.querySelectorAll('ion-picker-column-option')).filter((el) => el.disabled !== true);
300
+ /**
301
+ * If users pause for a bit, the search
302
+ * value should be reset similar to how a
303
+ * <select> behaves. So typing "34", waiting,
304
+ * then typing "5" should select "05".
305
+ */
306
+ if (singleColumnSearchTimeout) {
307
+ clearTimeout(singleColumnSearchTimeout);
308
+ }
309
+ this.singleColumnSearchTimeout = setTimeout(() => {
310
+ inputEl.value = '';
311
+ this.singleColumnSearchTimeout = undefined;
312
+ }, 1000);
313
+ /**
314
+ * For values that are longer than 2 digits long
315
+ * we should shift the value over 1 character
316
+ * to the left. So typing "456" would result in "56".
317
+ * TODO: If we want to support more than just
318
+ * time entry, we should update this value to be
319
+ * the max length of all of the picker items.
320
+ */
321
+ if (inputEl.value.length >= 3) {
322
+ const startIndex = inputEl.value.length - 2;
323
+ const newString = inputEl.value.substring(startIndex);
324
+ inputEl.value = newString;
325
+ this.selectSingleColumn();
326
+ return;
327
+ }
328
+ /**
329
+ * Checking the value of the input gets priority
330
+ * first. For example, if the value of the input
331
+ * is "1" and we entered "2", then the complete value
332
+ * is "12" and we should select hour 12.
333
+ *
334
+ * Regex removes any leading zeros from values like "02",
335
+ * but it keeps a single zero if there are only zeros in the string.
336
+ * 0+(?=[1-9]) --> Match 1 or more zeros that are followed by 1-9
337
+ * 0+(?=0$) --> Match 1 or more zeros that must be followed by one 0 and end.
338
+ */
339
+ const findItemFromCompleteValue = options.find(({ textContent }) => {
340
+ /**
341
+ * Keyboard entry is currently only used inside of Datetime
342
+ * where we guarantee textContent is set.
343
+ * If we end up exposing this feature publicly we should revisit this assumption.
344
+ */
345
+ const parsedText = textContent.replace(/^0+(?=[1-9])|0+(?=0$)/, '');
346
+ return parsedText === inputEl.value;
347
+ });
348
+ if (findItemFromCompleteValue) {
349
+ inputModeColumn.setValue(findItemFromCompleteValue.value);
350
+ return;
351
+ }
352
+ /**
353
+ * If we typed "56" to get minute 56, then typed "7",
354
+ * we should select "07" as "567" is not a valid minute.
355
+ */
356
+ if (inputEl.value.length === 2) {
357
+ const changedCharacter = inputEl.value.substring(inputEl.value.length - 1);
358
+ inputEl.value = changedCharacter;
359
+ this.selectSingleColumn();
360
+ }
361
+ };
362
+ /**
363
+ * Searches a list of column items for a particular
364
+ * value. This is currently used for numeric values.
365
+ * The zeroBehavior can be set to account for leading
366
+ * or trailing zeros when looking at the item text.
367
+ */
368
+ searchColumn = (colEl, value, zeroBehavior = 'start') => {
369
+ if (!value) {
370
+ return false;
371
+ }
372
+ const behavior = zeroBehavior === 'start' ? /^0+/ : /0$/;
373
+ value = value.replace(behavior, '');
374
+ const option = Array.from(colEl.querySelectorAll('ion-picker-column-option')).find((el) => {
375
+ return el.disabled !== true && el.textContent.replace(behavior, '') === value;
376
+ });
377
+ if (option) {
378
+ colEl.setValue(option.value);
379
+ }
380
+ return !!option;
381
+ };
382
+ /**
383
+ * Attempts to intelligently search the first and second
384
+ * column as if they're number columns for the provided numbers
385
+ * where the first two numbers are the first column
386
+ * and the last 2 are the last column. Tries to allow for the first
387
+ * number to be ignored for situations where typos occurred.
388
+ */
389
+ multiColumnSearch = (firstColumn, secondColumn, input) => {
390
+ if (input.length === 0) {
391
+ return;
392
+ }
393
+ const inputArray = input.split('');
394
+ const hourValue = inputArray.slice(0, 2).join('');
395
+ // Try to find a match for the first two digits in the first column
396
+ const foundHour = this.searchColumn(firstColumn, hourValue);
397
+ // If we have more than 2 digits and found a match for hours,
398
+ // use the remaining digits for the second column (minutes)
399
+ if (inputArray.length > 2 && foundHour) {
400
+ const minuteValue = inputArray.slice(2, 4).join('');
401
+ this.searchColumn(secondColumn, minuteValue);
402
+ }
403
+ // If we couldn't find a match for the two-digit hour, try single digit approaches
404
+ else if (!foundHour && inputArray.length >= 1) {
405
+ // First try the first digit as a single-digit hour
406
+ let singleDigitHour = inputArray[0];
407
+ let singleDigitFound = this.searchColumn(firstColumn, singleDigitHour);
408
+ // If that didn't work, try the second digit as a single-digit hour
409
+ // (handles case where user made a typo in the first digit, or they typed over themselves)
410
+ if (!singleDigitFound) {
411
+ inputArray.shift();
412
+ singleDigitHour = inputArray[0];
413
+ singleDigitFound = this.searchColumn(firstColumn, singleDigitHour);
414
+ }
415
+ // If we found a single-digit hour and have remaining digits,
416
+ // use up to 2 of the remaining digits for the second column
417
+ if (singleDigitFound && inputArray.length > 1) {
418
+ const remainingDigits = inputArray.slice(1, 3).join('');
419
+ this.searchColumn(secondColumn, remainingDigits);
420
+ }
421
+ }
422
+ };
423
+ selectMultiColumn = () => {
424
+ const { inputEl, el } = this;
425
+ if (!inputEl) {
426
+ return;
427
+ }
428
+ const numericPickers = Array.from(el.querySelectorAll('ion-picker-column')).filter((col) => col.numericInput);
429
+ const firstColumn = numericPickers[0];
430
+ const lastColumn = numericPickers[1];
431
+ let value = inputEl.value;
432
+ if (value.length > 4) {
433
+ const startIndex = inputEl.value.length - 4;
434
+ const newString = inputEl.value.substring(startIndex);
435
+ inputEl.value = newString;
436
+ value = newString;
437
+ }
438
+ this.multiColumnSearch(firstColumn, lastColumn, value);
439
+ };
440
+ /**
441
+ * Searches the value of the active column
442
+ * to determine which value users are trying
443
+ * to select
444
+ */
445
+ onInputChange = () => {
446
+ const { useInputMode, inputEl, inputModeColumn } = this;
447
+ if (!useInputMode || !inputEl) {
448
+ return;
449
+ }
450
+ if (inputModeColumn) {
451
+ this.selectSingleColumn();
452
+ }
453
+ else {
454
+ this.selectMultiColumn();
455
+ }
456
+ };
457
+ /**
458
+ * Emit ionInputModeChange. Picker columns
459
+ * listen for this event to determine whether
460
+ * or not their column is "active" for text input.
461
+ */
462
+ emitInputModeChange = () => {
463
+ const { useInputMode, inputModeColumn } = this;
464
+ this.ionInputModeChange.emit({
465
+ useInputMode,
466
+ inputModeColumn,
467
+ });
468
+ };
458
469
  render() {
459
470
  return (h(Host, { key: '28f81e4ed44a633178561757c5199c2c98f94b74', onPointerDown: (ev) => this.onPointerDown(ev), onClick: () => this.onClick() }, h("input", { key: 'abb3d1ad25ef63856af7804111175a4d50008bc0', "aria-hidden": "true", tabindex: -1, inputmode: "numeric", type: "number", onKeyDown: (ev) => {
460
- var _a;
461
471
  /**
462
472
  * The "Enter" key represents
463
473
  * the user submitting their time
@@ -469,11 +479,10 @@ const Picker = class {
469
479
  * callback below.
470
480
  */
471
481
  if (ev.key === 'Enter') {
472
- (_a = this.inputEl) === null || _a === void 0 ? void 0 : _a.blur();
482
+ this.inputEl?.blur();
473
483
  }
474
484
  }, ref: (el) => (this.inputEl = el), onInput: () => this.onInputChange(), onBlur: () => this.exitInputMode() }), h("div", { key: '334a5abdc02e6b127c57177f626d7e4ff5526183', class: "picker-before" }), h("div", { key: 'ffd6271931129e88fc7c820e919d684899e420c5', class: "picker-after" }), h("div", { key: '78d1d95fd09e04f154ea59f24a1cece72c47ed7b', class: "picker-highlight", ref: (el) => (this.highlightEl = el) }), h("slot", { key: '0bd5b9f875d3c71f6cbbde2054baeb1b0a2e8cd5' })));
475
485
  }
476
- get el() { return getElement(this); }
477
486
  };
478
487
  Picker.style = {
479
488
  ios: pickerIosCss(),