@ionic/core 9.0.0 → 9.0.1-dev.11787248963.10a00c73

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 (596) 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-63OhffQv.js → p-66ogmUZU.js} +1 -1
  99. package/components/p-6Vp915Y7.js +4 -0
  100. package/components/p-7PNwKFZi.js +4 -0
  101. package/components/{p-G0TxqHfe.js → p-A8MJRBIY.js} +1 -1
  102. package/components/p-AQcCdH2_.js +4 -0
  103. package/{dist/ionic/p-Dn0mqQ_R.js → components/p-B6x5_b9w.js} +1 -1
  104. package/components/p-B8MQjdvk.js +4 -0
  105. package/components/p-BA_4ZIEg.js +4 -0
  106. package/components/p-BFtL8t1r.js +4 -0
  107. package/components/{p-DaA_8eqt.js → p-BMfgF-Tv.js} +1 -1
  108. package/components/p-BPDxVIRr.js +4 -0
  109. package/components/p-BSARlp49.js +4 -0
  110. package/components/p-B_gJaBk0.js +4 -0
  111. package/components/p-BdwCtX8Y.js +4 -0
  112. package/components/p-Bg4OwDwb.js +4 -0
  113. package/components/{p-DV85C0e0.js → p-BgUIV8NQ.js} +1 -1
  114. package/components/p-Bnc0m4SW.js +4 -0
  115. package/components/p-BpLt_Ptn.js +4 -0
  116. package/components/p-BqBDq1Ma.js +4 -0
  117. package/components/{p-C_phlPMC.js → p-BrFaQbGY.js} +1 -1
  118. package/{dist/ionic/p-Cdjxf_yg.js → components/p-BuPAFTWI.js} +1 -1
  119. package/components/p-Bx2saTHs.js +4 -0
  120. package/components/p-BxhE2W85.js +4 -0
  121. package/components/p-CHswSpKy.js +4 -0
  122. package/components/{p-fruGqVHh.js → p-CQAjyETU.js} +1 -1
  123. package/components/{p-1jI5oW-W.js → p-CR9OgE6N.js} +1 -1
  124. package/components/p-CWETxTjE.js +4 -0
  125. package/components/p-CaZeZIL2.js +4 -0
  126. package/components/p-CaiZOhfC.js +4 -0
  127. package/components/p-CgvDC7hC.js +4 -0
  128. package/components/{p-BqPNzJf6.js → p-CqyGR9Aq.js} +1 -1
  129. package/components/{p-UIBJkZf8.js → p-D0YpjgON.js} +1 -1
  130. package/components/p-D7ysFE2B.js +4 -0
  131. package/{dist/ionic/p-4eOQC00Z.js → components/p-DCWfzDM8.js} +1 -1
  132. package/components/{p-DwpKZ6rl.js → p-DDdkefwf.js} +1 -1
  133. package/components/{p-DzRT60Tw.js → p-DEW7CnUc.js} +1 -1
  134. package/components/p-DQ1IPvZO.js +4 -0
  135. package/components/p-DcOH6-o5.js +4 -0
  136. package/components/{p-DD5fQ4EQ.js → p-DfdYCsov.js} +1 -1
  137. package/components/{p-DSzSbVP2.js → p-DhOoEIAs.js} +1 -1
  138. package/components/{p-DM-PrAoh.js → p-Dl_7b_UJ.js} +1 -1
  139. package/components/p-DqAI6tg7.js +4 -0
  140. package/components/p-DrehWDfv.js +4 -0
  141. package/components/{p-ryyf_ItD.js → p-DysqCsJu.js} +1 -1
  142. package/components/p-H1f2qsk4.js +4 -0
  143. package/components/p-HVYBAhFx.js +4 -0
  144. package/components/{p-CbhUdtjf.js → p-Kmrg3Fed.js} +1 -1
  145. package/components/{p-Bjig0DJK.js → p-RFfE9hF6.js} +1 -1
  146. package/{dist/ionic/p-CBWAXjA5.js → components/p-SR-LLqp_.js} +1 -1
  147. package/components/p-eFI3mtEX.js +4 -0
  148. package/components/p-gFwXiYC_.js +4 -0
  149. package/components/p-tX3UxCnU.js +4 -0
  150. package/components/p-v2NpoOHp.js +4 -0
  151. package/dist/cjs/{animation-C0mOHzej.js → animation-D-OqR4a4.js} +1 -1
  152. package/dist/cjs/{app-globals-BREG4twP.js → app-globals-BzgwARwJ.js} +1 -1
  153. package/dist/cjs/{button-active-CVMevT9a.js → button-active-BlWSD7uK.js} +2 -2
  154. package/dist/cjs/{format-pp0Du3K-.js → format-D7ig6Vm0.js} +1 -1
  155. package/dist/cjs/{framework-delegate-Dfo5XsGv.js → framework-delegate-BZUx4TnE.js} +1 -1
  156. package/dist/cjs/{gesture-controller-BDUH7687.js → gesture-controller-CeJslptU.js} +6 -14
  157. package/dist/cjs/{hardware-back-button-fqpYh-kd.js → hardware-back-button-JOAEFSzc.js} +1 -1
  158. package/dist/cjs/{helpers-YPQybDph.js → helpers-Dj5o76mq.js} +1 -1
  159. package/dist/cjs/{index-BLdJCcJY.js → index-2sO-zkZ2.js} +4 -4
  160. package/dist/cjs/{index-uvry__L4.js → index-BrVMoqUk.js} +3 -1
  161. package/dist/cjs/{index-zVCah4Uz.js → index-C8zH6b3d.js} +2 -2
  162. package/dist/cjs/{index-DXsPSne6.js → index-CZ6vzt_q.js} +5 -5
  163. package/dist/cjs/{index-DDg31ZF5.js → index-Csue6G3m.js} +2 -2
  164. package/dist/cjs/{index-DwlRtFZe.js → index-DRPqwSvU.js} +1 -1
  165. package/dist/cjs/{index-B7zJsYWS.js → index-EJLjthTK.js} +1 -2
  166. package/dist/cjs/index.cjs.js +14 -14
  167. package/dist/cjs/{input-shims-Cbu1fcye.js → input-shims-Bh7bnt2v.js} +3 -3
  168. package/dist/cjs/{input.utils-BZdMWVrt.js → input.utils-Cq3g9uHy.js} +1 -1
  169. package/dist/cjs/ion-accordion_2.cjs.entry.js +335 -364
  170. package/dist/cjs/ion-action-sheet.cjs.entry.js +60 -140
  171. package/dist/cjs/ion-alert.cjs.entry.js +67 -159
  172. package/dist/cjs/ion-app_8.cjs.entry.js +163 -258
  173. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -8
  174. package/dist/cjs/ion-back-button.cjs.entry.js +21 -45
  175. package/dist/cjs/ion-backdrop.cjs.entry.js +14 -18
  176. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +117 -195
  177. package/dist/cjs/ion-button_2.cjs.entry.js +61 -130
  178. package/dist/cjs/ion-card_5.cjs.entry.js +28 -80
  179. package/dist/cjs/ion-checkbox.cjs.entry.js +98 -147
  180. package/dist/cjs/ion-chip.cjs.entry.js +10 -16
  181. package/dist/cjs/ion-col_3.cjs.entry.js +6 -126
  182. package/dist/cjs/ion-datetime-button.cjs.entry.js +232 -248
  183. package/dist/cjs/ion-datetime.cjs.entry.js +775 -953
  184. package/dist/cjs/ion-fab_3.cjs.entry.js +78 -136
  185. package/dist/cjs/ion-img.cjs.entry.js +11 -31
  186. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +71 -98
  187. package/dist/cjs/ion-input-otp.cjs.entry.js +352 -424
  188. package/dist/cjs/ion-input-password-toggle.cjs.entry.js +14 -29
  189. package/dist/cjs/ion-input.cjs.entry.js +158 -302
  190. package/dist/cjs/ion-item-option_3.cjs.entry.js +54 -98
  191. package/dist/cjs/ion-item_8.cjs.entry.js +61 -157
  192. package/dist/cjs/ion-loading.cjs.entry.js +54 -131
  193. package/dist/cjs/ion-menu_3.cjs.entry.js +94 -158
  194. package/dist/cjs/ion-modal.cjs.entry.js +206 -362
  195. package/dist/cjs/ion-nav_2.cjs.entry.js +26 -78
  196. package/dist/cjs/ion-picker-column-option.cjs.entry.js +23 -33
  197. package/dist/cjs/ion-picker-column.cjs.entry.js +389 -410
  198. package/dist/cjs/ion-picker.cjs.entry.js +390 -400
  199. package/dist/cjs/ion-popover.cjs.entry.js +184 -292
  200. package/dist/cjs/ion-progress-bar.cjs.entry.js +23 -29
  201. package/dist/cjs/ion-radio_2.cjs.entry.js +128 -201
  202. package/dist/cjs/ion-range.cjs.entry.js +223 -293
  203. package/dist/cjs/ion-refresher_2.cjs.entry.js +89 -154
  204. package/dist/cjs/ion-reorder_2.cjs.entry.js +19 -49
  205. package/dist/cjs/ion-ripple-effect.cjs.entry.js +13 -13
  206. package/dist/cjs/ion-route_4.cjs.entry.js +45 -144
  207. package/dist/cjs/ion-searchbar.cjs.entry.js +182 -268
  208. package/dist/cjs/ion-segment-content.cjs.entry.js +1 -1
  209. package/dist/cjs/ion-segment-view.cjs.entry.js +12 -24
  210. package/dist/cjs/ion-segment_2.cjs.entry.js +122 -161
  211. package/dist/cjs/ion-select-modal.cjs.entry.js +19 -21
  212. package/dist/cjs/ion-select_3.cjs.entry.js +151 -319
  213. package/dist/cjs/ion-spinner.cjs.entry.js +6 -21
  214. package/dist/cjs/ion-split-pane.cjs.entry.js +14 -27
  215. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +32 -89
  216. package/dist/cjs/ion-tab_2.cjs.entry.js +22 -49
  217. package/dist/cjs/ion-text.cjs.entry.js +2 -8
  218. package/dist/cjs/ion-textarea.cjs.entry.js +139 -256
  219. package/dist/cjs/ion-toast.cjs.entry.js +106 -221
  220. package/dist/cjs/ion-toggle.cjs.entry.js +114 -165
  221. package/dist/cjs/{ionic-global-k6hOWWpn.js → ionic-global-DvgIzM2F.js} +1 -1
  222. package/dist/cjs/ionic.cjs.js +4 -4
  223. package/dist/cjs/{ios.transition-zTmJz8T-.js → ios.transition-zIgdoSYe.js} +4 -4
  224. package/dist/cjs/{item-multiple-inputs-BdYSbfKN.js → item-multiple-inputs-DG-ZGm6j.js} +1 -1
  225. package/dist/cjs/loader.cjs.js +4 -4
  226. package/dist/cjs/{md.transition-nb_4pUXu.js → md.transition-CXeJ9rfh.js} +4 -4
  227. package/dist/cjs/{overlays-KaNVDNqC.js → overlays-Bg0auTQa.js} +6 -6
  228. package/dist/cjs/{select-option-render-pULCGldr.js → select-option-render-7m1WdFzF.js} +2 -2
  229. package/dist/cjs/{slot-mutation-controller-DPHmqXdV.js → slot-mutation-controller-BJEJzx_e.js} +1 -1
  230. package/dist/cjs/{status-tap-o9IIymsP.js → status-tap-DxbUM5XX.js} +3 -3
  231. package/dist/cjs/{swipe-back-B7X9VOlH.js → swipe-back-F_DBt-Aw.js} +4 -4
  232. package/dist/collection/components/accordion/accordion.js +310 -314
  233. package/dist/collection/components/accordion-group/accordion-group.js +23 -46
  234. package/dist/collection/components/action-sheet/action-sheet.js +49 -128
  235. package/dist/collection/components/action-sheet/test/basic/fixture.js +0 -3
  236. package/dist/collection/components/alert/alert.js +56 -147
  237. package/dist/collection/components/app/app.js +0 -3
  238. package/dist/collection/components/back-button/back-button.js +19 -42
  239. package/dist/collection/components/backdrop/backdrop.js +14 -16
  240. package/dist/collection/components/badge/badge.js +0 -6
  241. package/dist/collection/components/breadcrumb/breadcrumb.js +29 -90
  242. package/dist/collection/components/breadcrumbs/breadcrumbs.js +87 -102
  243. package/dist/collection/components/button/button.js +59 -127
  244. package/dist/collection/components/buttons/buttons.js +15 -13
  245. package/dist/collection/components/card/card.js +20 -53
  246. package/dist/collection/components/card-header/card-header.js +8 -12
  247. package/dist/collection/components/card-subtitle/card-subtitle.js +0 -6
  248. package/dist/collection/components/card-title/card-title.js +0 -6
  249. package/dist/collection/components/checkbox/checkbox.js +95 -143
  250. package/dist/collection/components/chip/chip.js +10 -14
  251. package/dist/collection/components/col/col.js +0 -120
  252. package/dist/collection/components/content/content.js +60 -90
  253. package/dist/collection/components/datetime/datetime.js +762 -939
  254. package/dist/collection/components/datetime-button/datetime-button.js +229 -244
  255. package/dist/collection/components/fab/fab.js +13 -20
  256. package/dist/collection/components/fab-button/fab-button.js +54 -103
  257. package/dist/collection/components/fab-list/fab-list.js +11 -10
  258. package/dist/collection/components/footer/footer.js +43 -49
  259. package/dist/collection/components/grid/grid.js +6 -4
  260. package/dist/collection/components/header/header.js +23 -33
  261. package/dist/collection/components/img/img.js +9 -28
  262. package/dist/collection/components/infinite-scroll/infinite-scroll.js +66 -73
  263. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +3 -20
  264. package/dist/collection/components/input/input.js +154 -297
  265. package/dist/collection/components/input-otp/input-otp.js +350 -421
  266. package/dist/collection/components/input-password-toggle/input-password-toggle.js +13 -27
  267. package/dist/collection/components/item/item.js +37 -80
  268. package/dist/collection/components/item-divider/item-divider.js +10 -15
  269. package/dist/collection/components/item-option/item-option.js +20 -48
  270. package/dist/collection/components/item-options/item-options.js +7 -10
  271. package/dist/collection/components/item-sliding/item-sliding.js +26 -36
  272. package/dist/collection/components/label/label.js +4 -24
  273. package/dist/collection/components/list/list.js +6 -9
  274. package/dist/collection/components/list-header/list-header.js +0 -10
  275. package/dist/collection/components/loading/loading.js +46 -122
  276. package/dist/collection/components/menu/menu.js +55 -99
  277. package/dist/collection/components/menu-button/menu-button.js +19 -28
  278. package/dist/collection/components/menu-toggle/menu-toggle.js +13 -20
  279. package/dist/collection/components/modal/modal.js +196 -351
  280. package/dist/collection/components/modal/test/fixtures.js +0 -3
  281. package/dist/collection/components/nav/nav.js +12 -45
  282. package/dist/collection/components/nav/view-controller.js +1 -7
  283. package/dist/collection/components/nav-link/nav-link.js +9 -20
  284. package/dist/collection/components/note/note.js +0 -6
  285. package/dist/collection/components/picker/picker.js +388 -397
  286. package/dist/collection/components/picker-column/picker-column.js +389 -409
  287. package/dist/collection/components/picker-column-option/picker-column-option.js +21 -30
  288. package/dist/collection/components/popover/popover.js +176 -283
  289. package/dist/collection/components/popover/test/fixture.js +0 -1
  290. package/dist/collection/components/progress-bar/progress-bar.js +22 -26
  291. package/dist/collection/components/radio/radio.js +62 -98
  292. package/dist/collection/components/radio-group/radio-group.js +64 -99
  293. package/dist/collection/components/radio-group/test/fixtures.js +0 -2
  294. package/dist/collection/components/range/range.js +220 -289
  295. package/dist/collection/components/refresher/refresher.js +79 -105
  296. package/dist/collection/components/refresher-content/refresher-content.js +3 -40
  297. package/dist/collection/components/reorder/reorder.js +0 -1
  298. package/dist/collection/components/reorder-group/reorder-group.js +14 -43
  299. package/dist/collection/components/ripple-effect/ripple-effect.js +12 -11
  300. package/dist/collection/components/route/route.js +9 -38
  301. package/dist/collection/components/route-redirect/route-redirect.js +0 -31
  302. package/dist/collection/components/router/router.js +27 -35
  303. package/dist/collection/components/router/utils/matching.js +0 -1
  304. package/dist/collection/components/router-link/router-link.js +10 -35
  305. package/dist/collection/components/router-outlet/router-outlet.js +12 -34
  306. package/dist/collection/components/searchbar/searchbar.js +180 -265
  307. package/dist/collection/components/segment/segment.js +76 -113
  308. package/dist/collection/components/segment-button/segment-button.js +44 -44
  309. package/dist/collection/components/segment-view/segment-view.js +12 -23
  310. package/dist/collection/components/select/select.js +127 -240
  311. package/dist/collection/components/select-modal/select-modal.js +11 -12
  312. package/dist/collection/components/select-modal/test/fixtures.js +1 -8
  313. package/dist/collection/components/select-option/select-option.js +7 -44
  314. package/dist/collection/components/select-popover/select-popover.js +10 -25
  315. package/dist/collection/components/select-popover/test/fixtures.js +1 -8
  316. package/dist/collection/components/skeleton-text/skeleton-text.js +6 -10
  317. package/dist/collection/components/spinner/spinner.js +6 -19
  318. package/dist/collection/components/split-pane/split-pane.js +13 -25
  319. package/dist/collection/components/tab/tab.js +4 -15
  320. package/dist/collection/components/tab-bar/tab-bar.js +12 -30
  321. package/dist/collection/components/tab-button/tab-button.js +19 -56
  322. package/dist/collection/components/tabs/tabs.js +17 -31
  323. package/dist/collection/components/text/text.js +0 -6
  324. package/dist/collection/components/textarea/textarea.js +135 -251
  325. package/dist/collection/components/title/title.js +0 -16
  326. package/dist/collection/components/toast/toast.js +97 -211
  327. package/dist/collection/components/toggle/toggle.js +111 -161
  328. package/dist/collection/components/toolbar/toolbar.js +3 -8
  329. package/dist/collection/global/config.js +3 -1
  330. package/dist/collection/utils/gesture/gesture-controller.js +6 -14
  331. package/dist/collection/utils/sanitization/index.js +0 -1
  332. package/dist/collection/utils/test/late-props/late-props.js +69 -0
  333. package/dist/collection/utils/test/playwright/page/event-spy.js +8 -9
  334. package/dist/collection/utils/test/press-keys.js +1 -4
  335. package/dist/docs.json +1 -1
  336. package/dist/esm/{animation-CGFdmGk9.js → animation-TxGPYeDn.js} +1 -1
  337. package/dist/esm/{app-globals-CYmMeGdU.js → app-globals-Do8rJest.js} +1 -1
  338. package/dist/esm/{button-active-BDOsVAiZ.js → button-active-ChA4D-ml.js} +2 -2
  339. package/dist/esm/{format-Dcwga61t.js → format-CVk5e_GP.js} +2 -2
  340. package/dist/esm/{framework-delegate-BHTU2Ip9.js → framework-delegate-DaLWnISz.js} +1 -1
  341. package/dist/esm/{gesture-controller-TXPDHL13.js → gesture-controller-B_gJaBk0.js} +6 -14
  342. package/dist/esm/{hardware-back-button-gLJHMX_F.js → hardware-back-button-D8W4L0JP.js} +1 -1
  343. package/dist/esm/{helpers-CAGf8Wgp.js → helpers-BIgoInJU.js} +1 -1
  344. package/dist/esm/{index-DcPaH5uL.js → index-BmLuEdV7.js} +1 -1
  345. package/dist/esm/{index-T0JxBI8V.js → index-BmOR8tCv.js} +2 -2
  346. package/dist/esm/{index-CqneaaGd.js → index-C5ZdL0qp.js} +5 -5
  347. package/dist/esm/{index-WlteAIqz.js → index-C8Dsa6li.js} +4 -4
  348. package/dist/esm/{index-ChhhtsGZ.js → index-CKYcsw8f.js} +3 -1
  349. package/dist/esm/{index-Clc-28O1.js → index-DHw2lZxe.js} +2 -2
  350. package/dist/esm/{index-CKM1DdGm.js → index-elneMH8y.js} +1 -2
  351. package/dist/esm/index.js +14 -14
  352. package/dist/esm/{input-shims-B8sfni1e.js → input-shims-09NN97kF.js} +3 -3
  353. package/dist/esm/{input.utils-B1ValN_N.js → input.utils-BxyH9l1w.js} +1 -1
  354. package/dist/esm/ion-accordion_2.entry.js +335 -364
  355. package/dist/esm/ion-action-sheet.entry.js +60 -140
  356. package/dist/esm/ion-alert.entry.js +67 -159
  357. package/dist/esm/ion-app_8.entry.js +163 -258
  358. package/dist/esm/ion-avatar_3.entry.js +2 -8
  359. package/dist/esm/ion-back-button.entry.js +21 -45
  360. package/dist/esm/ion-backdrop.entry.js +14 -18
  361. package/dist/esm/ion-breadcrumb_2.entry.js +117 -195
  362. package/dist/esm/ion-button_2.entry.js +61 -130
  363. package/dist/esm/ion-card_5.entry.js +28 -80
  364. package/dist/esm/ion-checkbox.entry.js +98 -147
  365. package/dist/esm/ion-chip.entry.js +10 -16
  366. package/dist/esm/ion-col_3.entry.js +6 -126
  367. package/dist/esm/ion-datetime-button.entry.js +232 -248
  368. package/dist/esm/ion-datetime.entry.js +775 -953
  369. package/dist/esm/ion-fab_3.entry.js +78 -136
  370. package/dist/esm/ion-img.entry.js +11 -31
  371. package/dist/esm/ion-infinite-scroll_2.entry.js +71 -98
  372. package/dist/esm/ion-input-otp.entry.js +352 -424
  373. package/dist/esm/ion-input-password-toggle.entry.js +14 -29
  374. package/dist/esm/ion-input.entry.js +158 -302
  375. package/dist/esm/ion-item-option_3.entry.js +54 -98
  376. package/dist/esm/ion-item_8.entry.js +61 -157
  377. package/dist/esm/ion-loading.entry.js +54 -131
  378. package/dist/esm/ion-menu_3.entry.js +94 -158
  379. package/dist/esm/ion-modal.entry.js +206 -362
  380. package/dist/esm/ion-nav_2.entry.js +26 -78
  381. package/dist/esm/ion-picker-column-option.entry.js +23 -33
  382. package/dist/esm/ion-picker-column.entry.js +389 -410
  383. package/dist/esm/ion-picker.entry.js +390 -400
  384. package/dist/esm/ion-popover.entry.js +184 -292
  385. package/dist/esm/ion-progress-bar.entry.js +23 -29
  386. package/dist/esm/ion-radio_2.entry.js +128 -201
  387. package/dist/esm/ion-range.entry.js +223 -293
  388. package/dist/esm/ion-refresher_2.entry.js +89 -154
  389. package/dist/esm/ion-reorder_2.entry.js +19 -49
  390. package/dist/esm/ion-ripple-effect.entry.js +13 -13
  391. package/dist/esm/ion-route_4.entry.js +45 -144
  392. package/dist/esm/ion-searchbar.entry.js +182 -268
  393. package/dist/esm/ion-segment-content.entry.js +1 -1
  394. package/dist/esm/ion-segment-view.entry.js +12 -24
  395. package/dist/esm/ion-segment_2.entry.js +122 -161
  396. package/dist/esm/ion-select-modal.entry.js +19 -21
  397. package/dist/esm/ion-select_3.entry.js +151 -319
  398. package/dist/esm/ion-spinner.entry.js +6 -21
  399. package/dist/esm/ion-split-pane.entry.js +14 -27
  400. package/dist/esm/ion-tab-bar_2.entry.js +32 -89
  401. package/dist/esm/ion-tab_2.entry.js +22 -49
  402. package/dist/esm/ion-text.entry.js +2 -8
  403. package/dist/esm/ion-textarea.entry.js +139 -256
  404. package/dist/esm/ion-toast.entry.js +106 -221
  405. package/dist/esm/ion-toggle.entry.js +114 -165
  406. package/dist/esm/{ionic-global-BVB7BrLT.js → ionic-global-lrowsHfi.js} +1 -1
  407. package/dist/esm/ionic.js +5 -5
  408. package/dist/esm/{ios.transition-DXRCmcbC.js → ios.transition-BQhADrk1.js} +4 -4
  409. package/dist/esm/{item-multiple-inputs-rU8VaNNg.js → item-multiple-inputs-D_N3fDkD.js} +1 -1
  410. package/dist/esm/loader.js +5 -5
  411. package/dist/esm/{md.transition-BMngO4i_.js → md.transition-D58NpmRa.js} +4 -4
  412. package/dist/esm/{overlays-CPmIs9Ls.js → overlays-BpnIFlXI.js} +6 -6
  413. package/dist/esm/{select-option-render-C4m76VGH.js → select-option-render-lIuu64EV.js} +2 -2
  414. package/dist/esm/{slot-mutation-controller-DiE_C9un.js → slot-mutation-controller-rS_T3FDR.js} +1 -1
  415. package/dist/esm/{status-tap-CHB7KwIb.js → status-tap-CpFQMLl6.js} +3 -3
  416. package/dist/esm/{swipe-back-C9HW1bug.js → swipe-back-rmc7zeNW.js} +4 -4
  417. package/dist/ionic/index.esm.js +1 -1
  418. package/dist/ionic/ionic.esm.js +1 -1
  419. package/dist/ionic/p-05800a02.entry.js +4 -0
  420. package/dist/ionic/p-0eb50dca.entry.js +4 -0
  421. package/dist/ionic/p-16e9f542.entry.js +4 -0
  422. package/dist/ionic/p-18d532a3.entry.js +4 -0
  423. package/dist/ionic/p-1db2afb4.entry.js +4 -0
  424. package/dist/ionic/p-1df75f9e.entry.js +4 -0
  425. package/dist/ionic/p-295ff427.entry.js +4 -0
  426. package/dist/ionic/p-34b9379b.entry.js +4 -0
  427. package/dist/ionic/p-39a8d4e0.entry.js +4 -0
  428. package/dist/ionic/p-4437015c.entry.js +4 -0
  429. package/dist/ionic/p-478035a7.entry.js +4 -0
  430. package/dist/ionic/p-485fb218.entry.js +4 -0
  431. package/dist/ionic/p-48c859fe.entry.js +4 -0
  432. package/dist/ionic/p-49b9d405.entry.js +4 -0
  433. package/dist/ionic/p-56307aea.entry.js +4 -0
  434. package/dist/ionic/p-5b906fd6.entry.js +4 -0
  435. package/dist/ionic/p-5ee2d7b1.entry.js +4 -0
  436. package/dist/ionic/p-5f216b79.entry.js +4 -0
  437. package/dist/ionic/p-61c799d1.entry.js +4 -0
  438. package/dist/ionic/p-63bbba8d.entry.js +4 -0
  439. package/dist/ionic/p-68507e70.entry.js +4 -0
  440. package/dist/ionic/{p-ded69ceb.entry.js → p-6f048604.entry.js} +1 -1
  441. package/dist/ionic/p-70ee8888.entry.js +4 -0
  442. package/dist/ionic/p-72ad7c64.entry.js +4 -0
  443. package/dist/ionic/p-75887ee0.entry.js +4 -0
  444. package/dist/ionic/p-873a315a.entry.js +4 -0
  445. package/dist/ionic/p-881b6954.entry.js +4 -0
  446. package/dist/ionic/p-886d9e66.entry.js +4 -0
  447. package/dist/ionic/p-8dd4c026.entry.js +4 -0
  448. package/dist/ionic/p-8e007f11.entry.js +4 -0
  449. package/dist/ionic/p-8f51110d.entry.js +4 -0
  450. package/dist/ionic/p-90ba736e.entry.js +4 -0
  451. package/dist/ionic/p-959df5f8.entry.js +4 -0
  452. package/dist/ionic/p-9e455875.entry.js +4 -0
  453. package/dist/ionic/{p-CBR_W98Z.js → p-9wczfs_v.js} +1 -1
  454. package/dist/ionic/p-B1Y7LZhV.js +4 -0
  455. package/dist/ionic/p-B5RyLYvl.js +4 -0
  456. package/dist/ionic/{p-CPcPmkGv.js → p-BQv5i5Kf.js} +1 -1
  457. package/{components/p-8FN7p701.js → dist/ionic/p-BZVE25Gu.js} +1 -1
  458. package/{components/p-DFvZn99E.js → dist/ionic/p-BZxjcGRP.js} +1 -1
  459. package/dist/ionic/p-B_gJaBk0.js +4 -0
  460. package/dist/ionic/p-BnGA34Pd.js +4 -0
  461. package/dist/ionic/p-ByLaqOPm.js +4 -0
  462. package/dist/ionic/p-C06QNN45.js +4 -0
  463. package/dist/ionic/p-C4IBDDj6.js +4 -0
  464. package/dist/ionic/p-CCVlNZ__.js +4 -0
  465. package/dist/ionic/{p-CMRtMbJc.js → p-CDBop-kz.js} +1 -1
  466. package/dist/ionic/p-CKYcsw8f.js +5 -0
  467. package/dist/ionic/p-CazSodad.js +4 -0
  468. package/{components/p-ia3IDdJS.js → dist/ionic/p-ClrlQU2y.js} +1 -1
  469. package/dist/ionic/{p-UIBJkZf8.js → p-D0YpjgON.js} +1 -1
  470. package/dist/ionic/p-D0dfUysx.js +4 -0
  471. package/dist/ionic/{p-BB0LlG4y.js → p-D9yvytgv.js} +1 -1
  472. package/{components/p-C5KYjZWD.js → dist/ionic/p-DF_Uqql8.js} +1 -1
  473. package/dist/ionic/{p-BYEAtHr-.js → p-DXJgZWgi.js} +1 -1
  474. package/dist/ionic/{p-D94_RztK.js → p-DdhHqKj-.js} +1 -1
  475. package/dist/ionic/p-De0eY881.js +4 -0
  476. package/dist/ionic/p-DgUL3JbO.js +4 -0
  477. package/dist/ionic/{p-7CBuOvEo.js → p-RzUn7cKs.js} +1 -1
  478. package/dist/ionic/p-VquyMbjp.js +4 -0
  479. package/dist/ionic/p-a0fee899.entry.js +4 -0
  480. package/dist/ionic/p-a54bcd16.entry.js +4 -0
  481. package/dist/ionic/p-aebc4d69.entry.js +4 -0
  482. package/dist/ionic/p-b5f37106.entry.js +4 -0
  483. package/dist/ionic/{p-40424a88.entry.js → p-b62bfce8.entry.js} +1 -1
  484. package/dist/ionic/p-b7a11b58.entry.js +4 -0
  485. package/dist/ionic/p-bbf6878c.entry.js +4 -0
  486. package/dist/ionic/p-c49165af.entry.js +4 -0
  487. package/dist/ionic/p-cad4eccf.entry.js +4 -0
  488. package/dist/ionic/p-cdc5115e.entry.js +4 -0
  489. package/dist/ionic/p-d3384a40.entry.js +4 -0
  490. package/dist/ionic/p-d8bae128.entry.js +4 -0
  491. package/dist/ionic/p-d8deff43.entry.js +4 -0
  492. package/dist/ionic/p-ddfb7e5f.entry.js +4 -0
  493. package/dist/ionic/p-e538f18d.entry.js +4 -0
  494. package/dist/ionic/p-f376876b.entry.js +4 -0
  495. package/dist/ionic/p-f7dd1ed9.entry.js +4 -0
  496. package/dist/ionic/p-fbd83d4c.entry.js +4 -0
  497. package/dist/types/components/refresher/refresher.d.ts +7 -0
  498. package/hydrate/index.js +5450 -8380
  499. package/hydrate/index.mjs +5450 -8380
  500. package/package.json +1 -1
  501. package/components/p--m5cCjbK.js +0 -4
  502. package/components/p-B4uHHhPK.js +0 -4
  503. package/components/p-BNJOu1Q2.js +0 -4
  504. package/components/p-BOvLNVKq.js +0 -4
  505. package/components/p-BeamQXHF.js +0 -4
  506. package/components/p-BjluhQMI.js +0 -4
  507. package/components/p-BlsIikdZ.js +0 -4
  508. package/components/p-BrD9Xv62.js +0 -4
  509. package/components/p-BvJqoZ5R.js +0 -4
  510. package/components/p-Bz6z3Asd.js +0 -4
  511. package/components/p-C6HnVvHO.js +0 -4
  512. package/components/p-C7jvh5Wy.js +0 -4
  513. package/components/p-C9BGR5fy.js +0 -4
  514. package/components/p-CB-y1CdP.js +0 -4
  515. package/components/p-CHH3loEE.js +0 -4
  516. package/components/p-CJKUWjmg.js +0 -4
  517. package/components/p-CMLAwl_N.js +0 -4
  518. package/components/p-CejmQs3h.js +0 -4
  519. package/components/p-CtZqa4HM.js +0 -4
  520. package/components/p-D9qIVSWm.js +0 -4
  521. package/components/p-DE-3iMNW.js +0 -4
  522. package/components/p-DHFt2rdc.js +0 -4
  523. package/components/p-D_RCyzwu.js +0 -4
  524. package/components/p-D_tD8r3L.js +0 -4
  525. package/components/p-DjCtLZbF.js +0 -4
  526. package/components/p-Dmd2xqCe.js +0 -4
  527. package/components/p-G6JR-cr_.js +0 -4
  528. package/components/p-GG5GhznE.js +0 -4
  529. package/components/p-TXPDHL13.js +0 -4
  530. package/components/p-_IKFD3ID.js +0 -4
  531. package/components/p-dKq2jIum.js +0 -4
  532. package/components/p-iYhH60Tc.js +0 -4
  533. package/dist/ionic/p-06ec7136.entry.js +0 -4
  534. package/dist/ionic/p-09fe4fa3.entry.js +0 -4
  535. package/dist/ionic/p-10d45a07.entry.js +0 -4
  536. package/dist/ionic/p-208c8a07.entry.js +0 -4
  537. package/dist/ionic/p-212474fa.entry.js +0 -4
  538. package/dist/ionic/p-2eef1396.entry.js +0 -4
  539. package/dist/ionic/p-347e005d.entry.js +0 -4
  540. package/dist/ionic/p-3a0b3f1d.entry.js +0 -4
  541. package/dist/ionic/p-3b071259.entry.js +0 -4
  542. package/dist/ionic/p-4204184c.entry.js +0 -4
  543. package/dist/ionic/p-47464391.entry.js +0 -4
  544. package/dist/ionic/p-4f9c9126.entry.js +0 -4
  545. package/dist/ionic/p-5JsKPLJD.js +0 -4
  546. package/dist/ionic/p-5bc485c6.entry.js +0 -4
  547. package/dist/ionic/p-603a61e6.entry.js +0 -4
  548. package/dist/ionic/p-60576951.entry.js +0 -4
  549. package/dist/ionic/p-67a81d33.entry.js +0 -4
  550. package/dist/ionic/p-6affb775.entry.js +0 -4
  551. package/dist/ionic/p-6f120c25.entry.js +0 -4
  552. package/dist/ionic/p-71c82b60.entry.js +0 -4
  553. package/dist/ionic/p-79325ffe.entry.js +0 -4
  554. package/dist/ionic/p-7e4d51fa.entry.js +0 -4
  555. package/dist/ionic/p-7f5d4664.entry.js +0 -4
  556. package/dist/ionic/p-80ee82fc.entry.js +0 -4
  557. package/dist/ionic/p-84af7dbc.entry.js +0 -4
  558. package/dist/ionic/p-89ca830a.entry.js +0 -4
  559. package/dist/ionic/p-93b8ec8f.entry.js +0 -4
  560. package/dist/ionic/p-946f65c2.entry.js +0 -4
  561. package/dist/ionic/p-9c4b39fb.entry.js +0 -4
  562. package/dist/ionic/p-B1NEZUzQ.js +0 -4
  563. package/dist/ionic/p-B1ck5iy-.js +0 -4
  564. package/dist/ionic/p-B4FrqdW0.js +0 -4
  565. package/dist/ionic/p-C-94tAim.js +0 -4
  566. package/dist/ionic/p-C-eHZMYE.js +0 -4
  567. package/dist/ionic/p-CaRuIadB.js +0 -4
  568. package/dist/ionic/p-ChhhtsGZ.js +0 -5
  569. package/dist/ionic/p-CzS1qWve.js +0 -4
  570. package/dist/ionic/p-DjjfauRM.js +0 -4
  571. package/dist/ionic/p-DkUB-ROc.js +0 -4
  572. package/dist/ionic/p-DplOqGUv.js +0 -4
  573. package/dist/ionic/p-Dst_XmZh.js +0 -4
  574. package/dist/ionic/p-TXPDHL13.js +0 -4
  575. package/dist/ionic/p-a438b193.entry.js +0 -4
  576. package/dist/ionic/p-babaaaa7.entry.js +0 -4
  577. package/dist/ionic/p-be08d500.entry.js +0 -4
  578. package/dist/ionic/p-be9a4f51.entry.js +0 -4
  579. package/dist/ionic/p-c00d3092.entry.js +0 -4
  580. package/dist/ionic/p-c36dc8f5.entry.js +0 -4
  581. package/dist/ionic/p-c72a7e17.entry.js +0 -4
  582. package/dist/ionic/p-c8edd88c.entry.js +0 -4
  583. package/dist/ionic/p-ce0e380b.entry.js +0 -4
  584. package/dist/ionic/p-ce32912b.entry.js +0 -4
  585. package/dist/ionic/p-d07cf130.entry.js +0 -4
  586. package/dist/ionic/p-d27edeb3.entry.js +0 -4
  587. package/dist/ionic/p-d5d2c506.entry.js +0 -4
  588. package/dist/ionic/p-d5e31ca9.entry.js +0 -4
  589. package/dist/ionic/p-de91444f.entry.js +0 -4
  590. package/dist/ionic/p-df72866d.entry.js +0 -4
  591. package/dist/ionic/p-e47e3151.entry.js +0 -4
  592. package/dist/ionic/p-e621e5e8.entry.js +0 -4
  593. package/dist/ionic/p-eea9cf93.entry.js +0 -4
  594. package/dist/ionic/p-f402f5a4.entry.js +0 -4
  595. package/dist/ionic/p-fe1bfbcf.entry.js +0 -4
  596. package/dist/ionic/p-ffb90460.entry.js +0 -4
@@ -1,11 +1,11 @@
1
1
  /*!
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
- import { r as registerInstance, c as createEvent, g as getElement, h, d as Host } from './index-ChhhtsGZ.js';
4
+ import { r as registerInstance, c as createEvent, h, d as Host, g as getElement } from './index-CKYcsw8f.js';
5
5
  import { d as doc } from './index-ZjP4CjeZ.js';
6
- import { r as raf } from './helpers-CAGf8Wgp.js';
6
+ import { r as raf } from './helpers-BIgoInJU.js';
7
7
  import { b as hapticSelectionStart, a as hapticSelectionChanged, h as hapticSelectionEnd } from './haptic-Cq4UAeka.js';
8
- import { a as isPlatform, b as getIonMode } from './ionic-global-BVB7BrLT.js';
8
+ import { a as isPlatform, b as getIonMode } from './ionic-global-lrowsHfi.js';
9
9
  import { c as createColorClasses } from './theme-byZM6qHV.js';
10
10
  import './dir-Dojwmvde.js';
11
11
  import './capacitor-CFERIeaU.js';
@@ -16,52 +16,395 @@ const PickerColumn = class {
16
16
  constructor(hostRef) {
17
17
  registerInstance(this, hostRef);
18
18
  this.ionChange = createEvent(this, "ionChange", 7);
19
+ this.isScrolling = false;
20
+ this.isColumnVisible = false;
21
+ this.canExitInputMode = true;
22
+ this.updateValueTextOnScroll = false;
23
+ this.ariaLabel = null;
24
+ this.isActive = false;
25
+ /**
26
+ * If `true`, the user cannot interact with the picker.
27
+ */
28
+ this.disabled = false;
29
+ /**
30
+ * If `true`, tapping the picker will
31
+ * reveal a number input keyboard that lets
32
+ * the user type in values for each picker
33
+ * column. This is useful when working
34
+ * with time pickers.
35
+ *
36
+ * @internal
37
+ */
38
+ this.numericInput = false;
39
+ this.centerPickerItemInView = (target, smooth = true, canExitInputMode = true) => {
40
+ const { isColumnVisible, scrollEl } = this;
41
+ if (isColumnVisible && scrollEl) {
42
+ // (Vertical offset from parent) - (three empty picker rows) + (half the height of the target to ensure the scroll triggers)
43
+ const top = target.offsetTop - 3 * target.clientHeight + target.clientHeight / 2;
44
+ if (scrollEl.scrollTop !== top) {
45
+ /**
46
+ * Setting this flag prevents input
47
+ * mode from exiting in the picker column's
48
+ * scroll callback. This is useful when the user manually
49
+ * taps an item or types on the keyboard as both
50
+ * of these can cause a scroll to occur.
51
+ */
52
+ this.canExitInputMode = canExitInputMode;
53
+ this.updateValueTextOnScroll = false;
54
+ scrollEl.scroll({
55
+ top,
56
+ left: 0,
57
+ behavior: smooth ? 'smooth' : undefined,
58
+ });
59
+ }
60
+ }
61
+ };
62
+ this.setPickerItemActiveState = (item, isActive) => {
63
+ if (isActive) {
64
+ item.classList.add(PICKER_ITEM_ACTIVE_CLASS);
65
+ }
66
+ else {
67
+ item.classList.remove(PICKER_ITEM_ACTIVE_CLASS);
68
+ }
69
+ };
70
+ /**
71
+ * When ionInputModeChange is emitted, each column
72
+ * needs to check if it is the one being made available
73
+ * for text entry.
74
+ */
75
+ this.inputModeChange = (ev) => {
76
+ if (!this.numericInput) {
77
+ return;
78
+ }
79
+ const { useInputMode, inputModeColumn } = ev.detail;
80
+ /**
81
+ * If inputModeColumn is undefined then this means
82
+ * all numericInput columns are being selected.
83
+ */
84
+ const isColumnActive = inputModeColumn === undefined || inputModeColumn === this.el;
85
+ if (!useInputMode || !isColumnActive) {
86
+ this.setInputModeActive(false);
87
+ return;
88
+ }
89
+ this.setInputModeActive(true);
90
+ };
91
+ /**
92
+ * Setting isActive will cause a re-render.
93
+ * As a result, we do not want to cause the
94
+ * re-render mid scroll as this will cause
95
+ * the picker column to jump back to
96
+ * whatever value was selected at the
97
+ * start of the scroll interaction.
98
+ */
99
+ this.setInputModeActive = (state) => {
100
+ if (this.isScrolling) {
101
+ this.scrollEndCallback = () => {
102
+ this.isActive = state;
103
+ };
104
+ return;
105
+ }
106
+ this.isActive = state;
107
+ };
108
+ /**
109
+ * When the column scrolls, the component
110
+ * needs to determine which item is centered
111
+ * in the view and will emit an ionChange with
112
+ * the item object.
113
+ */
114
+ this.initializeScrollListener = () => {
115
+ /**
116
+ * The haptics for the wheel picker are
117
+ * an iOS-only feature. As a result, they should
118
+ * be disabled on Android.
119
+ */
120
+ const enableHaptics = isPlatform('ios');
121
+ const { el, scrollEl } = this;
122
+ let timeout;
123
+ let activeEl = this.activeItem;
124
+ const scrollCallback = () => {
125
+ raf(() => {
126
+ if (!scrollEl)
127
+ return;
128
+ if (timeout) {
129
+ clearTimeout(timeout);
130
+ timeout = undefined;
131
+ }
132
+ if (!this.isScrolling) {
133
+ enableHaptics && hapticSelectionStart();
134
+ this.isScrolling = true;
135
+ }
136
+ /**
137
+ * Select item in the center of the column
138
+ * which is the month/year that we want to select
139
+ */
140
+ const bbox = scrollEl.getBoundingClientRect();
141
+ const centerX = bbox.x + bbox.width / 2;
142
+ const centerY = bbox.y + bbox.height / 2;
143
+ /**
144
+ * elementFromPoint returns the top-most element.
145
+ * This means that if an ion-backdrop is overlaying the
146
+ * picker then the appropriate picker column option will
147
+ * not be selected. To account for this, we use elementsFromPoint
148
+ * and use an Array.find to find the appropriate column option
149
+ * at that point.
150
+ *
151
+ * Additionally, the picker column could be used in the
152
+ * Shadow DOM (i.e. in ion-datetime) so we need to make
153
+ * sure we are choosing the correct host otherwise
154
+ * the elements returns by elementsFromPoint will be
155
+ * retargeted. To account for this, we check to see
156
+ * if the picker column has a parent shadow root. If
157
+ * so, we use that shadow root when doing elementsFromPoint.
158
+ * Otherwise, we just use the document.
159
+ */
160
+ const rootNode = el.getRootNode();
161
+ const hasParentShadow = rootNode instanceof ShadowRoot;
162
+ const referenceNode = hasParentShadow ? rootNode : doc;
163
+ /**
164
+ * If the reference node is undefined
165
+ * then it's likely that doc is undefined
166
+ * due to being in an SSR environment.
167
+ */
168
+ if (referenceNode === undefined) {
169
+ return;
170
+ }
171
+ const elementsAtPoint = referenceNode.elementsFromPoint(centerX, centerY);
172
+ /**
173
+ * elementsFromPoint can returns multiple elements
174
+ * so find the relevant picker column option if one exists.
175
+ */
176
+ let newActiveElement = elementsAtPoint.find((el) => el.tagName === 'ION-PICKER-COLUMN-OPTION');
177
+ /**
178
+ * TODO(FW-6594): Remove this workaround when iOS 16 is no longer
179
+ * supported.
180
+ *
181
+ * If `elementsFromPoint` failed to find the active element (a known
182
+ * issue on iOS 16 when elements are in a Shadow DOM and the
183
+ * referenceNode is the document), a fallback to `elementFromPoint`
184
+ * is used. While `elementsFromPoint` returns all elements,
185
+ * `elementFromPoint` returns only the top-most, which is sufficient
186
+ * for this use case and appears to handle Shadow DOM retargeting
187
+ * more reliably in this specific iOS bug.
188
+ */
189
+ if (newActiveElement === undefined) {
190
+ const fallbackActiveElement = referenceNode.elementFromPoint(centerX, centerY);
191
+ if (fallbackActiveElement?.tagName === 'ION-PICKER-COLUMN-OPTION') {
192
+ newActiveElement = fallbackActiveElement;
193
+ }
194
+ }
195
+ if (activeEl !== undefined) {
196
+ this.setPickerItemActiveState(activeEl, false);
197
+ }
198
+ if (newActiveElement === undefined || newActiveElement.disabled) {
199
+ return;
200
+ }
201
+ /**
202
+ * If we are selecting a new value,
203
+ * we need to run haptics again.
204
+ */
205
+ if (newActiveElement !== activeEl) {
206
+ enableHaptics && hapticSelectionChanged();
207
+ if (this.canExitInputMode) {
208
+ /**
209
+ * The native iOS wheel picker
210
+ * only dismisses the keyboard
211
+ * once the selected item has changed
212
+ * as a result of a swipe
213
+ * from the user. If `canExitInputMode` is
214
+ * `false` then this means that the
215
+ * scroll is happening as a result of
216
+ * the `value` property programmatically changing
217
+ * either by an application or by the user via the keyboard.
218
+ */
219
+ this.exitInputMode();
220
+ }
221
+ }
222
+ activeEl = newActiveElement;
223
+ this.setPickerItemActiveState(newActiveElement, true);
224
+ /**
225
+ * Set the aria-valuetext even though the value prop has not been updated yet.
226
+ * This enables some screen readers to announce the value as the users drag
227
+ * as opposed to when their release their pointer from the screen.
228
+ *
229
+ * When the value is programmatically updated, we will smoothly scroll
230
+ * to the new option. However, we do not want to update aria-valuetext mid-scroll
231
+ * as that can cause the old value to be briefly set before being set to the
232
+ * correct option. This will cause some screen readers to announce the old value
233
+ * again before announcing the new value. The correct valuetext will be set on render.
234
+ */
235
+ if (this.updateValueTextOnScroll) {
236
+ this.assistiveFocusable?.setAttribute('aria-valuetext', this.getOptionValueText(newActiveElement));
237
+ }
238
+ timeout = setTimeout(() => {
239
+ this.isScrolling = false;
240
+ this.updateValueTextOnScroll = true;
241
+ enableHaptics && hapticSelectionEnd();
242
+ /**
243
+ * Certain tasks (such as those that
244
+ * cause re-renders) should only be done
245
+ * once scrolling has finished, otherwise
246
+ * flickering may occur.
247
+ */
248
+ const { scrollEndCallback } = this;
249
+ if (scrollEndCallback) {
250
+ scrollEndCallback();
251
+ this.scrollEndCallback = undefined;
252
+ }
253
+ /**
254
+ * Reset this flag as the
255
+ * next scroll interaction could
256
+ * be a scroll from the user. In this
257
+ * case, we should exit input mode.
258
+ */
259
+ this.canExitInputMode = true;
260
+ this.setValue(newActiveElement.value);
261
+ }, 250);
262
+ });
263
+ };
264
+ /**
265
+ * Wrap this in an raf so that the scroll callback
266
+ * does not fire when component is initially shown.
267
+ */
268
+ raf(() => {
269
+ if (!scrollEl)
270
+ return;
271
+ scrollEl.addEventListener('scroll', scrollCallback);
272
+ this.destroyScrollListener = () => {
273
+ scrollEl.removeEventListener('scroll', scrollCallback);
274
+ };
275
+ });
276
+ };
277
+ /**
278
+ * Tells the parent picker to
279
+ * exit text entry mode. This is only called
280
+ * when the selected item changes during scroll, so
281
+ * we know that the user likely wants to scroll
282
+ * instead of type.
283
+ */
284
+ this.exitInputMode = () => {
285
+ const { parentEl } = this;
286
+ if (parentEl == null)
287
+ return;
288
+ parentEl.exitInputMode();
289
+ /**
290
+ * setInputModeActive only takes
291
+ * effect once scrolling stops to avoid
292
+ * a component re-render while scrolling.
293
+ * However, we want the visual active
294
+ * indicator to go away immediately, so
295
+ * we call classList.remove here.
296
+ */
297
+ this.el.classList.remove('picker-column-active');
298
+ };
299
+ /**
300
+ * Find the next enabled option after the active option.
301
+ * @param stride - How many options to "jump" over in order to select the next option.
302
+ * This can be used to implement PageUp/PageDown behaviors where pressing these keys
303
+ * scrolls the picker by more than 1 option. For example, a stride of 5 means select
304
+ * the enabled option 5 options after the active one. Note that the actual option selected
305
+ * may be past the stride if the option at the stride is disabled.
306
+ */
307
+ this.findNextOption = (stride = 1) => {
308
+ const { activeItem } = this;
309
+ if (!activeItem)
310
+ return null;
311
+ let prevNode = activeItem;
312
+ let node = activeItem.nextElementSibling;
313
+ while (node != null) {
314
+ if (stride > 0) {
315
+ stride--;
316
+ }
317
+ if (node.tagName === 'ION-PICKER-COLUMN-OPTION' && !node.disabled && stride === 0) {
318
+ return node;
319
+ }
320
+ prevNode = node;
321
+ // Use nextElementSibling instead of nextSibling to avoid text/comment nodes
322
+ node = node.nextElementSibling;
323
+ }
324
+ return prevNode;
325
+ };
326
+ /**
327
+ * Find the next enabled option after the active option.
328
+ * @param stride - How many options to "jump" over in order to select the next option.
329
+ * This can be used to implement PageUp/PageDown behaviors where pressing these keys
330
+ * scrolls the picker by more than 1 option. For example, a stride of 5 means select
331
+ * the enabled option 5 options before the active one. Note that the actual option selected
332
+ * may be past the stride if the option at the stride is disabled.
333
+ */
334
+ this.findPreviousOption = (stride = 1) => {
335
+ const { activeItem } = this;
336
+ if (!activeItem)
337
+ return null;
338
+ let nextNode = activeItem;
339
+ let node = activeItem.previousElementSibling;
340
+ while (node != null) {
341
+ if (stride > 0) {
342
+ stride--;
343
+ }
344
+ if (node.tagName === 'ION-PICKER-COLUMN-OPTION' && !node.disabled && stride === 0) {
345
+ return node;
346
+ }
347
+ nextNode = node;
348
+ // Use previousElementSibling instead of previousSibling to avoid text/comment nodes
349
+ node = node.previousElementSibling;
350
+ }
351
+ return nextNode;
352
+ };
353
+ this.onKeyDown = (ev) => {
354
+ /**
355
+ * The below operations should be inverted when running on a mobile device.
356
+ * For example, swiping up will dispatch an "ArrowUp" event. On desktop,
357
+ * this should cause the previous option to be selected. On mobile, swiping
358
+ * up causes a view to scroll down. As a result, swiping up on mobile should
359
+ * cause the next option to be selected. The Home/End operations remain
360
+ * unchanged because those always represent the first/last options, respectively.
361
+ */
362
+ const mobile = isPlatform('mobile');
363
+ let newOption = null;
364
+ switch (ev.key) {
365
+ case 'ArrowDown':
366
+ newOption = mobile ? this.findPreviousOption() : this.findNextOption();
367
+ break;
368
+ case 'ArrowUp':
369
+ newOption = mobile ? this.findNextOption() : this.findPreviousOption();
370
+ break;
371
+ case 'PageUp':
372
+ newOption = mobile ? this.findNextOption(5) : this.findPreviousOption(5);
373
+ break;
374
+ case 'PageDown':
375
+ newOption = mobile ? this.findPreviousOption(5) : this.findNextOption(5);
376
+ break;
377
+ case 'Home':
378
+ /**
379
+ * There is no guarantee that the first child will be an ion-picker-column-option,
380
+ * so we do not use firstElementChild.
381
+ */
382
+ newOption = this.el.querySelector('ion-picker-column-option:first-of-type');
383
+ break;
384
+ case 'End':
385
+ /**
386
+ * There is no guarantee that the last child will be an ion-picker-column-option,
387
+ * so we do not use lastElementChild.
388
+ */
389
+ newOption = this.el.querySelector('ion-picker-column-option:last-of-type');
390
+ break;
391
+ }
392
+ if (newOption !== null) {
393
+ this.setValue(newOption.value);
394
+ // This stops any default browser behavior such as scrolling
395
+ ev.preventDefault();
396
+ }
397
+ };
398
+ /**
399
+ * Utility to generate the correct text for aria-valuetext.
400
+ */
401
+ this.getOptionValueText = (el) => {
402
+ return el ? el.getAttribute('aria-label') ?? el.innerText : '';
403
+ };
19
404
  }
20
- scrollEl;
21
- destroyScrollListener;
22
- isScrolling = false;
23
- scrollEndCallback;
24
- isColumnVisible = false;
25
- parentEl;
26
- canExitInputMode = true;
27
- assistiveFocusable;
28
- updateValueTextOnScroll = false;
29
- ariaLabel = null;
30
405
  ariaLabelChanged(newValue) {
31
406
  this.ariaLabel = newValue;
32
407
  }
33
- isActive = false;
34
- get el() { return getElement(this); }
35
- /**
36
- * If `true`, the user cannot interact with the picker.
37
- */
38
- disabled = false;
39
- /**
40
- * The selected option in the picker.
41
- */
42
- value;
43
- /**
44
- * The color to use from your application's color palette.
45
- * Default options are: `"primary"`, `"secondary"`, `"tertiary"`, `"success"`, `"warning"`, `"danger"`, `"light"`, `"medium"`, and `"dark"`.
46
- * For more information on colors, see [theming](/docs/theming/basics).
47
- */
48
- color;
49
- /**
50
- * If `true`, tapping the picker will
51
- * reveal a number input keyboard that lets
52
- * the user type in values for each picker
53
- * column. This is useful when working
54
- * with time pickers.
55
- *
56
- * @internal
57
- */
58
- numericInput = false;
59
- /**
60
- * Emitted when the value has changed.
61
- *
62
- * This event will not emit when programmatically setting the `value` property.
63
- */
64
- ionChange;
65
408
  valueChange() {
66
409
  if (this.isColumnVisible) {
67
410
  /**
@@ -180,266 +523,6 @@ const PickerColumn = class {
180
523
  connectedCallback() {
181
524
  this.ariaLabel = this.el.getAttribute('aria-label') ?? 'Select a value';
182
525
  }
183
- centerPickerItemInView = (target, smooth = true, canExitInputMode = true) => {
184
- const { isColumnVisible, scrollEl } = this;
185
- if (isColumnVisible && scrollEl) {
186
- // (Vertical offset from parent) - (three empty picker rows) + (half the height of the target to ensure the scroll triggers)
187
- const top = target.offsetTop - 3 * target.clientHeight + target.clientHeight / 2;
188
- if (scrollEl.scrollTop !== top) {
189
- /**
190
- * Setting this flag prevents input
191
- * mode from exiting in the picker column's
192
- * scroll callback. This is useful when the user manually
193
- * taps an item or types on the keyboard as both
194
- * of these can cause a scroll to occur.
195
- */
196
- this.canExitInputMode = canExitInputMode;
197
- this.updateValueTextOnScroll = false;
198
- scrollEl.scroll({
199
- top,
200
- left: 0,
201
- behavior: smooth ? 'smooth' : undefined,
202
- });
203
- }
204
- }
205
- };
206
- setPickerItemActiveState = (item, isActive) => {
207
- if (isActive) {
208
- item.classList.add(PICKER_ITEM_ACTIVE_CLASS);
209
- }
210
- else {
211
- item.classList.remove(PICKER_ITEM_ACTIVE_CLASS);
212
- }
213
- };
214
- /**
215
- * When ionInputModeChange is emitted, each column
216
- * needs to check if it is the one being made available
217
- * for text entry.
218
- */
219
- inputModeChange = (ev) => {
220
- if (!this.numericInput) {
221
- return;
222
- }
223
- const { useInputMode, inputModeColumn } = ev.detail;
224
- /**
225
- * If inputModeColumn is undefined then this means
226
- * all numericInput columns are being selected.
227
- */
228
- const isColumnActive = inputModeColumn === undefined || inputModeColumn === this.el;
229
- if (!useInputMode || !isColumnActive) {
230
- this.setInputModeActive(false);
231
- return;
232
- }
233
- this.setInputModeActive(true);
234
- };
235
- /**
236
- * Setting isActive will cause a re-render.
237
- * As a result, we do not want to cause the
238
- * re-render mid scroll as this will cause
239
- * the picker column to jump back to
240
- * whatever value was selected at the
241
- * start of the scroll interaction.
242
- */
243
- setInputModeActive = (state) => {
244
- if (this.isScrolling) {
245
- this.scrollEndCallback = () => {
246
- this.isActive = state;
247
- };
248
- return;
249
- }
250
- this.isActive = state;
251
- };
252
- /**
253
- * When the column scrolls, the component
254
- * needs to determine which item is centered
255
- * in the view and will emit an ionChange with
256
- * the item object.
257
- */
258
- initializeScrollListener = () => {
259
- /**
260
- * The haptics for the wheel picker are
261
- * an iOS-only feature. As a result, they should
262
- * be disabled on Android.
263
- */
264
- const enableHaptics = isPlatform('ios');
265
- const { el, scrollEl } = this;
266
- let timeout;
267
- let activeEl = this.activeItem;
268
- const scrollCallback = () => {
269
- raf(() => {
270
- if (!scrollEl)
271
- return;
272
- if (timeout) {
273
- clearTimeout(timeout);
274
- timeout = undefined;
275
- }
276
- if (!this.isScrolling) {
277
- enableHaptics && hapticSelectionStart();
278
- this.isScrolling = true;
279
- }
280
- /**
281
- * Select item in the center of the column
282
- * which is the month/year that we want to select
283
- */
284
- const bbox = scrollEl.getBoundingClientRect();
285
- const centerX = bbox.x + bbox.width / 2;
286
- const centerY = bbox.y + bbox.height / 2;
287
- /**
288
- * elementFromPoint returns the top-most element.
289
- * This means that if an ion-backdrop is overlaying the
290
- * picker then the appropriate picker column option will
291
- * not be selected. To account for this, we use elementsFromPoint
292
- * and use an Array.find to find the appropriate column option
293
- * at that point.
294
- *
295
- * Additionally, the picker column could be used in the
296
- * Shadow DOM (i.e. in ion-datetime) so we need to make
297
- * sure we are choosing the correct host otherwise
298
- * the elements returns by elementsFromPoint will be
299
- * retargeted. To account for this, we check to see
300
- * if the picker column has a parent shadow root. If
301
- * so, we use that shadow root when doing elementsFromPoint.
302
- * Otherwise, we just use the document.
303
- */
304
- const rootNode = el.getRootNode();
305
- const hasParentShadow = rootNode instanceof ShadowRoot;
306
- const referenceNode = hasParentShadow ? rootNode : doc;
307
- /**
308
- * If the reference node is undefined
309
- * then it's likely that doc is undefined
310
- * due to being in an SSR environment.
311
- */
312
- if (referenceNode === undefined) {
313
- return;
314
- }
315
- const elementsAtPoint = referenceNode.elementsFromPoint(centerX, centerY);
316
- /**
317
- * elementsFromPoint can returns multiple elements
318
- * so find the relevant picker column option if one exists.
319
- */
320
- let newActiveElement = elementsAtPoint.find((el) => el.tagName === 'ION-PICKER-COLUMN-OPTION');
321
- /**
322
- * TODO(FW-6594): Remove this workaround when iOS 16 is no longer
323
- * supported.
324
- *
325
- * If `elementsFromPoint` failed to find the active element (a known
326
- * issue on iOS 16 when elements are in a Shadow DOM and the
327
- * referenceNode is the document), a fallback to `elementFromPoint`
328
- * is used. While `elementsFromPoint` returns all elements,
329
- * `elementFromPoint` returns only the top-most, which is sufficient
330
- * for this use case and appears to handle Shadow DOM retargeting
331
- * more reliably in this specific iOS bug.
332
- */
333
- if (newActiveElement === undefined) {
334
- const fallbackActiveElement = referenceNode.elementFromPoint(centerX, centerY);
335
- if (fallbackActiveElement?.tagName === 'ION-PICKER-COLUMN-OPTION') {
336
- newActiveElement = fallbackActiveElement;
337
- }
338
- }
339
- if (activeEl !== undefined) {
340
- this.setPickerItemActiveState(activeEl, false);
341
- }
342
- if (newActiveElement === undefined || newActiveElement.disabled) {
343
- return;
344
- }
345
- /**
346
- * If we are selecting a new value,
347
- * we need to run haptics again.
348
- */
349
- if (newActiveElement !== activeEl) {
350
- enableHaptics && hapticSelectionChanged();
351
- if (this.canExitInputMode) {
352
- /**
353
- * The native iOS wheel picker
354
- * only dismisses the keyboard
355
- * once the selected item has changed
356
- * as a result of a swipe
357
- * from the user. If `canExitInputMode` is
358
- * `false` then this means that the
359
- * scroll is happening as a result of
360
- * the `value` property programmatically changing
361
- * either by an application or by the user via the keyboard.
362
- */
363
- this.exitInputMode();
364
- }
365
- }
366
- activeEl = newActiveElement;
367
- this.setPickerItemActiveState(newActiveElement, true);
368
- /**
369
- * Set the aria-valuetext even though the value prop has not been updated yet.
370
- * This enables some screen readers to announce the value as the users drag
371
- * as opposed to when their release their pointer from the screen.
372
- *
373
- * When the value is programmatically updated, we will smoothly scroll
374
- * to the new option. However, we do not want to update aria-valuetext mid-scroll
375
- * as that can cause the old value to be briefly set before being set to the
376
- * correct option. This will cause some screen readers to announce the old value
377
- * again before announcing the new value. The correct valuetext will be set on render.
378
- */
379
- if (this.updateValueTextOnScroll) {
380
- this.assistiveFocusable?.setAttribute('aria-valuetext', this.getOptionValueText(newActiveElement));
381
- }
382
- timeout = setTimeout(() => {
383
- this.isScrolling = false;
384
- this.updateValueTextOnScroll = true;
385
- enableHaptics && hapticSelectionEnd();
386
- /**
387
- * Certain tasks (such as those that
388
- * cause re-renders) should only be done
389
- * once scrolling has finished, otherwise
390
- * flickering may occur.
391
- */
392
- const { scrollEndCallback } = this;
393
- if (scrollEndCallback) {
394
- scrollEndCallback();
395
- this.scrollEndCallback = undefined;
396
- }
397
- /**
398
- * Reset this flag as the
399
- * next scroll interaction could
400
- * be a scroll from the user. In this
401
- * case, we should exit input mode.
402
- */
403
- this.canExitInputMode = true;
404
- this.setValue(newActiveElement.value);
405
- }, 250);
406
- });
407
- };
408
- /**
409
- * Wrap this in an raf so that the scroll callback
410
- * does not fire when component is initially shown.
411
- */
412
- raf(() => {
413
- if (!scrollEl)
414
- return;
415
- scrollEl.addEventListener('scroll', scrollCallback);
416
- this.destroyScrollListener = () => {
417
- scrollEl.removeEventListener('scroll', scrollCallback);
418
- };
419
- });
420
- };
421
- /**
422
- * Tells the parent picker to
423
- * exit text entry mode. This is only called
424
- * when the selected item changes during scroll, so
425
- * we know that the user likely wants to scroll
426
- * instead of type.
427
- */
428
- exitInputMode = () => {
429
- const { parentEl } = this;
430
- if (parentEl == null)
431
- return;
432
- parentEl.exitInputMode();
433
- /**
434
- * setInputModeActive only takes
435
- * effect once scrolling stops to avoid
436
- * a component re-render while scrolling.
437
- * However, we want the visual active
438
- * indicator to go away immediately, so
439
- * we call classList.remove here.
440
- */
441
- this.el.classList.remove('picker-column-active');
442
- };
443
526
  get activeItem() {
444
527
  const { value } = this;
445
528
  const options = Array.from(this.el.querySelectorAll('ion-picker-column-option'));
@@ -454,111 +537,6 @@ const PickerColumn = class {
454
537
  return option.value === value;
455
538
  });
456
539
  }
457
- /**
458
- * Find the next enabled option after the active option.
459
- * @param stride - How many options to "jump" over in order to select the next option.
460
- * This can be used to implement PageUp/PageDown behaviors where pressing these keys
461
- * scrolls the picker by more than 1 option. For example, a stride of 5 means select
462
- * the enabled option 5 options after the active one. Note that the actual option selected
463
- * may be past the stride if the option at the stride is disabled.
464
- */
465
- findNextOption = (stride = 1) => {
466
- const { activeItem } = this;
467
- if (!activeItem)
468
- return null;
469
- let prevNode = activeItem;
470
- let node = activeItem.nextElementSibling;
471
- while (node != null) {
472
- if (stride > 0) {
473
- stride--;
474
- }
475
- if (node.tagName === 'ION-PICKER-COLUMN-OPTION' && !node.disabled && stride === 0) {
476
- return node;
477
- }
478
- prevNode = node;
479
- // Use nextElementSibling instead of nextSibling to avoid text/comment nodes
480
- node = node.nextElementSibling;
481
- }
482
- return prevNode;
483
- };
484
- /**
485
- * Find the next enabled option after the active option.
486
- * @param stride - How many options to "jump" over in order to select the next option.
487
- * This can be used to implement PageUp/PageDown behaviors where pressing these keys
488
- * scrolls the picker by more than 1 option. For example, a stride of 5 means select
489
- * the enabled option 5 options before the active one. Note that the actual option selected
490
- * may be past the stride if the option at the stride is disabled.
491
- */
492
- findPreviousOption = (stride = 1) => {
493
- const { activeItem } = this;
494
- if (!activeItem)
495
- return null;
496
- let nextNode = activeItem;
497
- let node = activeItem.previousElementSibling;
498
- while (node != null) {
499
- if (stride > 0) {
500
- stride--;
501
- }
502
- if (node.tagName === 'ION-PICKER-COLUMN-OPTION' && !node.disabled && stride === 0) {
503
- return node;
504
- }
505
- nextNode = node;
506
- // Use previousElementSibling instead of previousSibling to avoid text/comment nodes
507
- node = node.previousElementSibling;
508
- }
509
- return nextNode;
510
- };
511
- onKeyDown = (ev) => {
512
- /**
513
- * The below operations should be inverted when running on a mobile device.
514
- * For example, swiping up will dispatch an "ArrowUp" event. On desktop,
515
- * this should cause the previous option to be selected. On mobile, swiping
516
- * up causes a view to scroll down. As a result, swiping up on mobile should
517
- * cause the next option to be selected. The Home/End operations remain
518
- * unchanged because those always represent the first/last options, respectively.
519
- */
520
- const mobile = isPlatform('mobile');
521
- let newOption = null;
522
- switch (ev.key) {
523
- case 'ArrowDown':
524
- newOption = mobile ? this.findPreviousOption() : this.findNextOption();
525
- break;
526
- case 'ArrowUp':
527
- newOption = mobile ? this.findNextOption() : this.findPreviousOption();
528
- break;
529
- case 'PageUp':
530
- newOption = mobile ? this.findNextOption(5) : this.findPreviousOption(5);
531
- break;
532
- case 'PageDown':
533
- newOption = mobile ? this.findPreviousOption(5) : this.findNextOption(5);
534
- break;
535
- case 'Home':
536
- /**
537
- * There is no guarantee that the first child will be an ion-picker-column-option,
538
- * so we do not use firstElementChild.
539
- */
540
- newOption = this.el.querySelector('ion-picker-column-option:first-of-type');
541
- break;
542
- case 'End':
543
- /**
544
- * There is no guarantee that the last child will be an ion-picker-column-option,
545
- * so we do not use lastElementChild.
546
- */
547
- newOption = this.el.querySelector('ion-picker-column-option:last-of-type');
548
- break;
549
- }
550
- if (newOption !== null) {
551
- this.setValue(newOption.value);
552
- // This stops any default browser behavior such as scrolling
553
- ev.preventDefault();
554
- }
555
- };
556
- /**
557
- * Utility to generate the correct text for aria-valuetext.
558
- */
559
- getOptionValueText = (el) => {
560
- return el ? el.getAttribute('aria-label') ?? el.innerText : '';
561
- };
562
540
  render() {
563
541
  const { color, disabled, isActive, numericInput } = this;
564
542
  const mode = getIonMode(this);
@@ -571,6 +549,7 @@ const PickerColumn = class {
571
549
  this.scrollEl = el;
572
550
  }, role: "slider", tabindex: this.disabled ? undefined : 0, "aria-label": this.ariaLabel, "aria-valuemin": 0, "aria-valuemax": 0, "aria-valuenow": 0, "aria-valuetext": this.getOptionValueText(this.activeItem), "aria-orientation": "vertical", onKeyDown: (ev) => this.onKeyDown(ev) }, h("div", { key: '9d3533436aba6c61c93f65f84a077fba832194a0', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '3f18d3a47361f06f55321b65fdf5742a61722b26', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: 'eac0d20ab8c533ef829875e323e93e1ee2067d6d', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("slot", { key: '92e25989ef41cf6f910c73238e1a0a5ac03f1c1f' }), h("div", { key: '33a84644ebdc84108b44a8e3a129b54e824939c8', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '128ad61a3a68c7ff2d2e44a6e968424fcc608a15', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '6e4d59a4f75befcbbf47279a263f28a69b12dbbd', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0")), h("slot", { key: '3c6621b64438792a3024c90e3d9916a0a3614506', name: "suffix" })));
573
551
  }
552
+ get el() { return getElement(this); }
574
553
  static get watchers() { return {
575
554
  "aria-label": [{
576
555
  "ariaLabelChanged": 0