@ionic/core 7.7.1 → 7.7.2-dev.11707425083.192d8103

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 (694) hide show
  1. package/components/action-sheet.js +4 -4
  2. package/components/alert.js +2 -2
  3. package/components/backdrop.js +1 -13
  4. package/components/button-active.js +1 -1
  5. package/components/button.js +2 -2
  6. package/components/checkbox.js +2 -2
  7. package/components/data.js +1 -1
  8. package/components/gesture-controller.js +1 -1
  9. package/components/ion-back-button.js +1 -1
  10. package/components/ion-badge.js +2 -2
  11. package/components/ion-content.js +4 -5
  12. package/components/ion-datetime-button.js +5 -5
  13. package/components/ion-datetime.js +41 -65
  14. package/components/ion-fab-button.js +4 -4
  15. package/components/ion-fab-list.js +3 -3
  16. package/components/ion-fab.js +2 -2
  17. package/components/ion-footer.js +2 -2
  18. package/components/ion-grid.js +2 -2
  19. package/components/ion-header.js +2 -2
  20. package/components/ion-img.js +1 -1
  21. package/components/ion-infinite-scroll-content.js +2 -2
  22. package/components/ion-infinite-scroll.js +1 -1
  23. package/components/ion-input.js +4 -8
  24. package/components/ion-item-divider.js +2 -2
  25. package/components/ion-item-group.js +1 -1
  26. package/components/ion-item-option.js +4 -4
  27. package/components/ion-item-options.js +1 -1
  28. package/components/ion-item-sliding.js +1 -1
  29. package/components/ion-loading.js +3 -3
  30. package/components/ion-menu-button.js +3 -3
  31. package/components/ion-menu-toggle.js +2 -2
  32. package/components/ion-menu.js +23 -17
  33. package/components/ion-modal.js +4 -4
  34. package/components/ion-nav-link.js +1 -1
  35. package/components/ion-nav.js +8 -4
  36. package/components/ion-picker-column-option.d.ts +11 -0
  37. package/components/ion-picker-column-option.js +9 -0
  38. package/components/ion-picker-column.js +2 -2
  39. package/components/ion-picker-legacy-column.d.ts +11 -0
  40. package/components/ion-picker-legacy-column.js +9 -0
  41. package/components/{ion-picker-internal.d.ts → ion-picker-legacy.d.ts} +4 -4
  42. package/components/ion-picker-legacy.js +311 -0
  43. package/components/ion-picker.js +1 -311
  44. package/components/ion-progress-bar.js +6 -3
  45. package/components/ion-range.js +2 -2
  46. package/components/ion-refresher-content.js +1 -1
  47. package/components/ion-refresher.js +3 -3
  48. package/components/ion-reorder-group.js +1 -1
  49. package/components/ion-reorder.js +1 -1
  50. package/components/ion-router-link.js +3 -3
  51. package/components/ion-router-outlet.js +1 -1
  52. package/components/ion-row.js +1 -1
  53. package/components/ion-searchbar.js +6 -6
  54. package/components/ion-segment-button.js +4 -4
  55. package/components/ion-segment.js +2 -2
  56. package/components/ion-select-option.js +1 -1
  57. package/components/ion-select.js +2 -2
  58. package/components/ion-skeleton-text.js +2 -2
  59. package/components/ion-split-pane.js +28 -17
  60. package/components/ion-tab-bar.js +4 -4
  61. package/components/ion-tab-button.js +4 -4
  62. package/components/ion-tab.js +2 -2
  63. package/components/ion-tabs.js +1 -1
  64. package/components/ion-text.js +2 -2
  65. package/components/ion-textarea.js +7 -70
  66. package/components/ion-thumbnail.js +1 -1
  67. package/components/ion-title.js +3 -3
  68. package/components/ion-toast.js +12 -6
  69. package/components/ion-toggle.js +2 -2
  70. package/components/ion-toolbar.js +2 -2
  71. package/components/item.js +2 -2
  72. package/components/label.js +2 -2
  73. package/components/list-header.js +2 -2
  74. package/components/list.js +2 -2
  75. package/components/note.js +2 -2
  76. package/components/overlays.js +11 -4
  77. package/components/picker-column-option.js +124 -0
  78. package/components/picker-column.js +352 -324
  79. package/components/picker-column2.js +381 -0
  80. package/components/{picker-internal.js → picker.js} +33 -26
  81. package/components/popover.js +3 -3
  82. package/components/radio-group.js +1 -1
  83. package/components/radio.js +2 -2
  84. package/components/ripple-effect.js +1 -1
  85. package/components/select-popover.js +2 -2
  86. package/components/spinner.js +1 -1
  87. package/css/core.css +98 -35
  88. package/css/core.css.map +1 -1
  89. package/css/display.css.map +1 -1
  90. package/css/float-elements.css.map +1 -1
  91. package/css/global.bundle.css +1 -1
  92. package/css/global.bundle.css.map +1 -1
  93. package/css/ionic-swiper.css.map +1 -1
  94. package/css/ionic.bundle.css +1 -1
  95. package/css/ionic.bundle.css.map +1 -1
  96. package/css/padding.css.map +1 -1
  97. package/css/structure.css.map +1 -1
  98. package/css/text-alignment.css.map +1 -1
  99. package/css/text-transformation.css.map +1 -1
  100. package/css/themes/dark.always.css +122 -0
  101. package/css/themes/dark.always.css.map +1 -0
  102. package/css/themes/dark.class.css +122 -0
  103. package/css/themes/dark.class.css.map +1 -0
  104. package/css/themes/dark.css +3 -0
  105. package/css/themes/dark.css.map +1 -0
  106. package/css/themes/dark.system.css +124 -0
  107. package/css/themes/dark.system.css.map +1 -0
  108. package/css/typography.css +1 -1
  109. package/css/typography.css.map +1 -1
  110. package/css/utils.bundle.css.map +1 -1
  111. package/dist/cjs/{button-active-b8c3f603.js → button-active-600ed3e2.js} +2 -2
  112. package/dist/cjs/{data-a5109f09.js → data-e2bf21de.js} +1 -1
  113. package/dist/cjs/{gesture-controller-c40c045a.js → gesture-controller-9436f482.js} +1 -0
  114. package/dist/cjs/{index-d1b59ffa.js → index-ee07ed59.js} +1 -1
  115. package/dist/cjs/index.cjs.js +3 -3
  116. package/dist/cjs/ion-action-sheet.cjs.entry.js +8 -8
  117. package/dist/cjs/ion-alert.cjs.entry.js +6 -6
  118. package/dist/cjs/ion-app_8.cjs.entry.js +15 -16
  119. package/dist/cjs/ion-avatar_3.cjs.entry.js +3 -3
  120. package/dist/cjs/ion-back-button.cjs.entry.js +1 -1
  121. package/dist/cjs/ion-backdrop.cjs.entry.js +1 -13
  122. package/dist/cjs/ion-button_2.cjs.entry.js +2 -2
  123. package/dist/cjs/ion-checkbox.cjs.entry.js +2 -2
  124. package/dist/cjs/ion-col_3.cjs.entry.js +3 -3
  125. package/dist/cjs/ion-datetime-button.cjs.entry.js +6 -6
  126. package/dist/cjs/ion-datetime_3.cjs.entry.js +50 -70
  127. package/dist/cjs/ion-fab_3.cjs.entry.js +9 -9
  128. package/dist/cjs/ion-img.cjs.entry.js +1 -1
  129. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +3 -3
  130. package/dist/cjs/ion-input.cjs.entry.js +4 -6
  131. package/dist/cjs/ion-item-option_3.cjs.entry.js +7 -7
  132. package/dist/cjs/ion-item_8.cjs.entry.js +15 -15
  133. package/dist/cjs/ion-loading.cjs.entry.js +5 -4
  134. package/dist/cjs/ion-menu_3.cjs.entry.js +31 -26
  135. package/dist/cjs/ion-modal.cjs.entry.js +7 -7
  136. package/dist/cjs/ion-nav_2.cjs.entry.js +8 -5
  137. package/dist/cjs/ion-picker-column-option.cjs.entry.js +106 -0
  138. package/dist/cjs/{ion-picker-column-internal.cjs.entry.js → ion-picker-column.cjs.entry.js} +105 -89
  139. package/dist/cjs/{ion-picker-internal.cjs.entry.js → ion-picker.cjs.entry.js} +30 -23
  140. package/dist/cjs/ion-popover.cjs.entry.js +5 -4
  141. package/dist/cjs/ion-progress-bar.cjs.entry.js +6 -3
  142. package/dist/cjs/ion-radio_2.cjs.entry.js +3 -3
  143. package/dist/cjs/ion-range.cjs.entry.js +3 -3
  144. package/dist/cjs/ion-refresher_2.cjs.entry.js +7 -7
  145. package/dist/cjs/ion-reorder_2.cjs.entry.js +3 -3
  146. package/dist/cjs/ion-ripple-effect.cjs.entry.js +1 -1
  147. package/dist/cjs/ion-route_4.cjs.entry.js +3 -3
  148. package/dist/cjs/ion-searchbar.cjs.entry.js +6 -6
  149. package/dist/cjs/ion-segment_2.cjs.entry.js +7 -7
  150. package/dist/cjs/ion-select_3.cjs.entry.js +7 -6
  151. package/dist/cjs/ion-spinner.cjs.entry.js +1 -1
  152. package/dist/cjs/ion-split-pane.cjs.entry.js +26 -16
  153. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +8 -8
  154. package/dist/cjs/ion-tab_2.cjs.entry.js +3 -3
  155. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  156. package/dist/cjs/ion-textarea.cjs.entry.js +7 -67
  157. package/dist/cjs/ion-toast.cjs.entry.js +14 -8
  158. package/dist/cjs/ion-toggle.cjs.entry.js +3 -3
  159. package/dist/cjs/ionic.cjs.js +1 -1
  160. package/dist/cjs/loader.cjs.js +1 -1
  161. package/dist/cjs/{overlays-330df245.js → overlays-8f32c4ca.js} +11 -4
  162. package/dist/cjs/{swipe-back-8411f044.js → swipe-back-f93021d8.js} +2 -2
  163. package/dist/collection/collection-manifest.json +7 -6
  164. package/dist/collection/components/action-sheet/action-sheet.ios.css +12 -5
  165. package/dist/collection/components/action-sheet/action-sheet.js +2 -2
  166. package/dist/collection/components/action-sheet/action-sheet.md.css +9 -2
  167. package/dist/collection/components/action-sheet/test/a11y/action-sheet.e2e.js +23 -14
  168. package/dist/collection/components/action-sheet/test/basic/action-sheet-rendering.e2e.js +19 -0
  169. package/dist/collection/components/action-sheet/test/basic/action-sheet.spec.js +22 -0
  170. package/dist/collection/components/alert/alert.ios.css +27 -74
  171. package/dist/collection/components/alert/alert.md.css +14 -110
  172. package/dist/collection/components/alert/test/a11y/alert.e2e.js +22 -9
  173. package/dist/collection/components/back-button/back-button.ios.css +1 -1
  174. package/dist/collection/components/back-button/test/a11y/back-button.e2e.js +21 -0
  175. package/dist/collection/components/backdrop/backdrop.js +1 -13
  176. package/dist/collection/components/badge/badge.ios.css +1 -1
  177. package/dist/collection/components/badge/badge.md.css +1 -1
  178. package/dist/collection/components/badge/test/a11y/badge.e2e.js +18 -0
  179. package/dist/collection/components/button/button.ios.css +11 -11
  180. package/dist/collection/components/button/button.md.css +9 -9
  181. package/dist/collection/components/button/test/a11y/button.e2e.js +48 -0
  182. package/dist/collection/components/button/test/wrap/button.e2e.js +12 -24
  183. package/dist/collection/components/checkbox/checkbox.ios.css +8 -26
  184. package/dist/collection/components/checkbox/checkbox.md.css +5 -24
  185. package/dist/collection/components/checkbox/test/a11y/checkbox.e2e.js +11 -2
  186. package/dist/collection/components/checkbox/test/basic/checkbox.e2e.js +10 -0
  187. package/dist/collection/components/content/content.css +0 -4
  188. package/dist/collection/components/content/content.js +3 -4
  189. package/dist/collection/components/datetime/datetime.ios.css +99 -67
  190. package/dist/collection/components/datetime/datetime.js +25 -37
  191. package/dist/collection/components/datetime/datetime.md.css +101 -65
  192. package/dist/collection/components/datetime/test/a11y/datetime.e2e.js +1 -1
  193. package/dist/collection/components/datetime/test/a11y/datetime.spec.js +6 -9
  194. package/dist/collection/components/datetime/test/basic/datetime.e2e.js +10 -0
  195. package/dist/collection/components/datetime/test/datetime.e2e.js +2 -2
  196. package/dist/collection/components/datetime/test/disabled/datetime.spec.js +4 -4
  197. package/dist/collection/components/datetime/test/locale/datetime.e2e.js +2 -2
  198. package/dist/collection/components/datetime/test/minmax/datetime.e2e.js +6 -6
  199. package/dist/collection/components/datetime/test/month-year-picker/datetime.e2e.js +1 -1
  200. package/dist/collection/components/datetime/test/prefer-wheel/datetime.e2e.js +43 -41
  201. package/dist/collection/components/datetime/test/presentation/datetime.e2e.js +1 -1
  202. package/dist/collection/components/datetime/test/readonly/datetime.e2e.js +4 -4
  203. package/dist/collection/components/datetime/test/values/datetime.e2e.js +15 -12
  204. package/dist/collection/components/datetime/utils/data.js +1 -1
  205. package/dist/collection/components/datetime-button/datetime-button.ios.css +107 -0
  206. package/dist/collection/components/datetime-button/datetime-button.js +5 -5
  207. package/dist/collection/components/datetime-button/{datetime-button.css → datetime-button.md.css} +9 -6
  208. package/dist/collection/components/datetime-button/test/basic/datetime-button.e2e.js +12 -0
  209. package/dist/collection/components/fab/fab.js +2 -2
  210. package/dist/collection/components/fab-button/fab-button.ios.css +13 -13
  211. package/dist/collection/components/fab-button/fab-button.js +2 -2
  212. package/dist/collection/components/fab-button/fab-button.md.css +4 -4
  213. package/dist/collection/components/fab-button/test/a11y/fab-button.e2e.js +50 -0
  214. package/dist/collection/components/fab-list/fab-list.css +4 -42
  215. package/dist/collection/components/fab-list/fab-list.js +2 -2
  216. package/dist/collection/components/footer/footer.js +2 -2
  217. package/dist/collection/components/grid/grid.js +2 -2
  218. package/dist/collection/components/header/header.js +2 -2
  219. package/dist/collection/components/img/img.js +1 -1
  220. package/dist/collection/components/infinite-scroll/infinite-scroll.js +1 -1
  221. package/dist/collection/components/infinite-scroll-content/infinite-scroll-content.js +2 -2
  222. package/dist/collection/components/input/input.ios.css +5 -29
  223. package/dist/collection/components/input/input.js +2 -41
  224. package/dist/collection/components/input/input.md.css +9 -76
  225. package/dist/collection/components/input/test/a11y/input.e2e.js +41 -3
  226. package/dist/collection/components/item/item.ios.css +3 -3
  227. package/dist/collection/components/item/item.md.css +6 -25
  228. package/dist/collection/components/item-divider/item-divider.js +2 -2
  229. package/dist/collection/components/item-group/item-group.js +1 -1
  230. package/dist/collection/components/item-option/item-option.ios.css +2 -2
  231. package/dist/collection/components/item-option/item-option.js +2 -2
  232. package/dist/collection/components/item-option/item-option.md.css +1 -1
  233. package/dist/collection/components/item-options/item-options.js +1 -1
  234. package/dist/collection/components/item-sliding/item-sliding.js +1 -1
  235. package/dist/collection/components/item-sliding/test/a11y/item-sliding.e2e.js +28 -0
  236. package/dist/collection/components/label/label.js +1 -1
  237. package/dist/collection/components/label/label.md.css +1 -1
  238. package/dist/collection/components/label/test/a11y/label.e2e.js +20 -0
  239. package/dist/collection/components/list/list.js +1 -1
  240. package/dist/collection/components/list/list.md.css +2 -26
  241. package/dist/collection/components/list-header/list-header.js +2 -2
  242. package/dist/collection/components/loading/loading.js +2 -2
  243. package/dist/collection/components/loading/loading.md.css +1 -1
  244. package/dist/collection/components/loading/test/a11y/loading.e2e.js +21 -5
  245. package/dist/collection/components/menu/menu.ios.css +72 -53
  246. package/dist/collection/components/menu/menu.js +21 -15
  247. package/dist/collection/components/menu/menu.md.css +72 -53
  248. package/dist/collection/components/menu-button/menu-button.ios.css +1 -1
  249. package/dist/collection/components/menu-button/menu-button.js +2 -2
  250. package/dist/collection/components/menu-button/test/a11y/menu-button.e2e.js +14 -0
  251. package/dist/collection/components/menu-toggle/menu-toggle.js +2 -2
  252. package/dist/collection/components/modal/gestures/swipe-to-close.js +1 -1
  253. package/dist/collection/components/modal/modal.js +3 -3
  254. package/dist/collection/components/nav/nav.js +23 -3
  255. package/dist/collection/components/nav/test/nav-controller.spec.js +36 -36
  256. package/dist/collection/components/nav-link/nav-link.js +1 -1
  257. package/dist/collection/components/note/note.js +2 -2
  258. package/dist/collection/components/picker/picker.ios.css +97 -234
  259. package/dist/collection/components/picker/picker.js +488 -738
  260. package/dist/collection/components/picker/picker.md.css +98 -226
  261. package/dist/collection/components/{picker-internal/test/a11y/picker-internal.e2e.js → picker/test/a11y/picker.e2e.js} +2 -2
  262. package/dist/collection/components/picker/test/basic/picker.e2e.js +99 -13
  263. package/dist/collection/components/picker/test/custom/picker.e2e.js +85 -0
  264. package/dist/collection/components/{picker-internal/test/keyboard-entry/picker-internal.e2e.js → picker/test/keyboard-entry/picker.e2e.js} +79 -42
  265. package/dist/collection/components/{picker-column-internal/picker-column-internal.md.css → picker-column/picker-column.css} +96 -83
  266. package/dist/collection/components/picker-column/picker-column.js +499 -335
  267. package/dist/collection/components/{picker-column-internal/test/basic/picker-column-internal.e2e.js → picker-column/test/basic/picker-column.e2e.js} +8 -8
  268. package/dist/collection/components/picker-column/test/disabled/picker-column.e2e.js +91 -0
  269. package/dist/collection/components/picker-column/test/slots/picker-column.e2e.js +39 -0
  270. package/dist/collection/components/picker-column-option/picker-column-option.ios.css +87 -0
  271. package/dist/collection/components/picker-column-option/picker-column-option.js +173 -0
  272. package/dist/collection/components/{picker-column-internal/picker-column-internal.ios.css → picker-column-option/picker-column-option.md.css} +6 -53
  273. package/dist/collection/components/picker-column-option/test/a11y/picker-column-option.e2e.js +18 -0
  274. package/dist/collection/components/picker-column-option/test/basic/picker-column-option.e2e.js +37 -0
  275. package/dist/collection/components/picker-column-option/test/picker-column-option.spec.js +29 -0
  276. package/dist/collection/components/{picker-internal/picker-internal.md.css → picker-legacy/picker.ios.css} +157 -115
  277. package/dist/collection/components/picker-legacy/picker.js +811 -0
  278. package/dist/collection/components/{picker-internal/picker-internal.ios.css → picker-legacy/picker.md.css} +142 -117
  279. package/dist/collection/components/picker-legacy/test/basic/picker.e2e.js +25 -0
  280. package/dist/collection/components/{picker → picker-legacy}/test/is-open/picker.e2e.js +4 -4
  281. package/dist/collection/components/{picker → picker-legacy}/test/picker-id.spec.js +5 -5
  282. package/dist/collection/components/{picker → picker-legacy}/test/trigger/picker.e2e.js +1 -1
  283. package/dist/collection/components/{picker-column → picker-legacy-column}/picker-column.ios.css +2 -26
  284. package/dist/collection/components/picker-legacy-column/picker-column.js +419 -0
  285. package/dist/collection/components/{picker-column → picker-legacy-column}/picker-column.md.css +3 -27
  286. package/dist/collection/components/{picker-column → picker-legacy-column}/test/picker-column-aria.spec.js +3 -3
  287. package/dist/collection/components/{picker-column → picker-legacy-column}/test/picker-column-dynamic.spec.js +2 -2
  288. package/dist/collection/components/{picker-column → picker-legacy-column}/test/picker-column.spec.js +2 -2
  289. package/dist/collection/components/{picker-column → picker-legacy-column}/test/standalone/picker-column.e2e.js +3 -3
  290. package/dist/collection/components/popover/popover.ios.css +2 -26
  291. package/dist/collection/components/popover/popover.js +2 -2
  292. package/dist/collection/components/progress-bar/progress-bar.ios.css +17 -11
  293. package/dist/collection/components/progress-bar/progress-bar.js +4 -1
  294. package/dist/collection/components/progress-bar/progress-bar.md.css +8 -10
  295. package/dist/collection/components/progress-bar/test/a11y/progress-bar.e2e.js +24 -0
  296. package/dist/collection/components/radio/radio.ios.css +7 -44
  297. package/dist/collection/components/radio/radio.md.css +7 -44
  298. package/dist/collection/components/radio/test/a11y/radio.e2e.js +114 -81
  299. package/dist/collection/components/radio-group/radio-group.js +1 -1
  300. package/dist/collection/components/range/range.ios.css +10 -79
  301. package/dist/collection/components/range/range.md.css +17 -133
  302. package/dist/collection/components/range/test/a11y/range.e2e.js +18 -8
  303. package/dist/collection/components/refresher/refresher.ios.css +3 -26
  304. package/dist/collection/components/refresher/refresher.js +1 -1
  305. package/dist/collection/components/refresher/refresher.md.css +5 -28
  306. package/dist/collection/components/refresher/test/a11y/refresher.e2e.js +26 -0
  307. package/dist/collection/components/refresher-content/refresher-content.js +1 -1
  308. package/dist/collection/components/reorder/reorder.js +1 -1
  309. package/dist/collection/components/reorder-group/reorder-group.js +1 -1
  310. package/dist/collection/components/ripple-effect/ripple-effect.js +1 -1
  311. package/dist/collection/components/router-link/router-link.css +1 -1
  312. package/dist/collection/components/router-link/router-link.js +2 -2
  313. package/dist/collection/components/router-link/test/a11y/router-link.e2e.js +23 -0
  314. package/dist/collection/components/router-outlet/router-outlet.js +1 -1
  315. package/dist/collection/components/row/row.js +1 -1
  316. package/dist/collection/components/searchbar/searchbar.ios.css +8 -56
  317. package/dist/collection/components/searchbar/searchbar.js +4 -4
  318. package/dist/collection/components/searchbar/searchbar.md.css +6 -78
  319. package/dist/collection/components/segment/segment.js +2 -2
  320. package/dist/collection/components/segment/test/a11y/segment.e2e.js +23 -0
  321. package/dist/collection/components/segment-button/segment-button.js +3 -3
  322. package/dist/collection/components/segment-button/segment-button.md.css +2 -2
  323. package/dist/collection/components/select/select.ios.css +6 -24
  324. package/dist/collection/components/select/select.md.css +10 -71
  325. package/dist/collection/components/select/test/a11y/select.e2e.js +68 -4
  326. package/dist/collection/components/select-option/select-option.js +1 -1
  327. package/dist/collection/components/select-popover/select-popover.js +1 -1
  328. package/dist/collection/components/select-popover/select-popover.md.css +4 -4
  329. package/dist/collection/components/select-popover/test/a11y/select-popover.e2e.js +32 -0
  330. package/dist/collection/components/skeleton-text/skeleton-text.js +2 -2
  331. package/dist/collection/components/spinner/spinner.js +1 -1
  332. package/dist/collection/components/split-pane/split-pane.ios.css +2 -54
  333. package/dist/collection/components/split-pane/split-pane.js +48 -14
  334. package/dist/collection/components/split-pane/split-pane.md.css +2 -54
  335. package/dist/collection/components/split-pane/test/wrapped-menu/split-pane.e2e.js +41 -0
  336. package/dist/collection/components/tab/tab.js +2 -2
  337. package/dist/collection/components/tab-bar/tab-bar.ios.css +1 -1
  338. package/dist/collection/components/tab-bar/tab-bar.js +2 -2
  339. package/dist/collection/components/tab-bar/tab-bar.md.css +1 -1
  340. package/dist/collection/components/tab-button/tab-button.ios.css +16 -94
  341. package/dist/collection/components/tab-button/tab-button.js +2 -2
  342. package/dist/collection/components/tab-button/tab-button.md.css +10 -93
  343. package/dist/collection/components/tabs/tabs.js +1 -1
  344. package/dist/collection/components/text/text.js +2 -2
  345. package/dist/collection/components/textarea/test/a11y/textarea.e2e.js +41 -3
  346. package/dist/collection/components/textarea/textarea.ios.css +9 -98
  347. package/dist/collection/components/textarea/textarea.js +5 -84
  348. package/dist/collection/components/textarea/textarea.md.css +13 -156
  349. package/dist/collection/components/thumbnail/thumbnail.js +1 -1
  350. package/dist/collection/components/title/title.ios.css +2 -21
  351. package/dist/collection/components/title/title.js +2 -2
  352. package/dist/collection/components/toast/test/a11y/toast.e2e.js +56 -24
  353. package/dist/collection/components/toast/toast.ios.css +6 -53
  354. package/dist/collection/components/toast/toast.js +9 -3
  355. package/dist/collection/components/toast/toast.md.css +7 -54
  356. package/dist/collection/components/toggle/test/a11y/toggle.e2e.js +8 -2
  357. package/dist/collection/components/toggle/toggle.ios.css +11 -29
  358. package/dist/collection/components/toggle/toggle.md.css +5 -23
  359. package/dist/collection/components/toolbar/toolbar.js +2 -2
  360. package/dist/collection/css/test/a11y/typography.e2e.js +18 -0
  361. package/dist/collection/themes/test/colors/theme.e2e.js +114 -0
  362. package/dist/collection/utils/gesture/button-active.js +1 -1
  363. package/dist/collection/utils/gesture/gesture-controller.js +1 -1
  364. package/dist/collection/utils/overlays.js +11 -4
  365. package/dist/collection/utils/test/overlays/overlays-scroll-blocking.spec.js +65 -0
  366. package/dist/collection/utils/test/playwright/generator.js +1 -0
  367. package/dist/collection/utils/test/playwright/page/utils/set-content.js +1 -1
  368. package/dist/docs.json +547 -165
  369. package/dist/esm/{button-active-4bee452c.js → button-active-35dc239f.js} +2 -2
  370. package/dist/esm/{data-0f3ab200.js → data-691286f1.js} +1 -1
  371. package/dist/esm/{gesture-controller-1bf57181.js → gesture-controller-314a54f6.js} +1 -1
  372. package/dist/esm/{index-2cf77112.js → index-39782642.js} +2 -2
  373. package/dist/esm/index.js +3 -3
  374. package/dist/esm/ion-action-sheet.entry.js +8 -8
  375. package/dist/esm/ion-alert.entry.js +6 -6
  376. package/dist/esm/ion-app_8.entry.js +15 -16
  377. package/dist/esm/ion-avatar_3.entry.js +3 -3
  378. package/dist/esm/ion-back-button.entry.js +1 -1
  379. package/dist/esm/ion-backdrop.entry.js +1 -13
  380. package/dist/esm/ion-button_2.entry.js +2 -2
  381. package/dist/esm/ion-checkbox.entry.js +2 -2
  382. package/dist/esm/ion-col_3.entry.js +3 -3
  383. package/dist/esm/ion-datetime-button.entry.js +6 -6
  384. package/dist/esm/ion-datetime_3.entry.js +49 -69
  385. package/dist/esm/ion-fab_3.entry.js +9 -9
  386. package/dist/esm/ion-img.entry.js +1 -1
  387. package/dist/esm/ion-infinite-scroll_2.entry.js +3 -3
  388. package/dist/esm/ion-input.entry.js +4 -6
  389. package/dist/esm/ion-item-option_3.entry.js +7 -7
  390. package/dist/esm/ion-item_8.entry.js +15 -15
  391. package/dist/esm/ion-loading.entry.js +5 -4
  392. package/dist/esm/ion-menu_3.entry.js +31 -26
  393. package/dist/esm/ion-modal.entry.js +7 -7
  394. package/dist/esm/ion-nav_2.entry.js +8 -5
  395. package/dist/esm/ion-picker-column-option.entry.js +102 -0
  396. package/dist/esm/{ion-picker-column-internal.entry.js → ion-picker-column.entry.js} +105 -89
  397. package/dist/esm/{ion-picker-internal.entry.js → ion-picker.entry.js} +30 -23
  398. package/dist/esm/ion-popover.entry.js +5 -4
  399. package/dist/esm/ion-progress-bar.entry.js +6 -3
  400. package/dist/esm/ion-radio_2.entry.js +3 -3
  401. package/dist/esm/ion-range.entry.js +3 -3
  402. package/dist/esm/ion-refresher_2.entry.js +7 -7
  403. package/dist/esm/ion-reorder_2.entry.js +3 -3
  404. package/dist/esm/ion-ripple-effect.entry.js +1 -1
  405. package/dist/esm/ion-route_4.entry.js +3 -3
  406. package/dist/esm/ion-searchbar.entry.js +6 -6
  407. package/dist/esm/ion-segment_2.entry.js +7 -7
  408. package/dist/esm/ion-select_3.entry.js +7 -6
  409. package/dist/esm/ion-spinner.entry.js +1 -1
  410. package/dist/esm/ion-split-pane.entry.js +26 -16
  411. package/dist/esm/ion-tab-bar_2.entry.js +8 -8
  412. package/dist/esm/ion-tab_2.entry.js +3 -3
  413. package/dist/esm/ion-text.entry.js +2 -2
  414. package/dist/esm/ion-textarea.entry.js +8 -68
  415. package/dist/esm/ion-toast.entry.js +15 -9
  416. package/dist/esm/ion-toggle.entry.js +3 -3
  417. package/dist/esm/ionic.js +1 -1
  418. package/dist/esm/loader.js +1 -1
  419. package/dist/esm/{overlays-33ae3ea0.js → overlays-2d8629c6.js} +11 -4
  420. package/dist/esm/{swipe-back-c06602f2.js → swipe-back-7f7620ca.js} +2 -2
  421. package/dist/esm-es5/button-active-35dc239f.js +4 -0
  422. package/dist/esm-es5/{gesture-controller-1bf57181.js → gesture-controller-314a54f6.js} +1 -1
  423. package/dist/esm-es5/{index-2cf77112.js → index-39782642.js} +1 -1
  424. package/dist/esm-es5/index.js +1 -1
  425. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  426. package/dist/esm-es5/ion-alert.entry.js +1 -1
  427. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  428. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  429. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  430. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  431. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  432. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  433. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  434. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  435. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  436. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  437. package/dist/esm-es5/ion-img.entry.js +1 -1
  438. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  439. package/dist/esm-es5/ion-input.entry.js +1 -1
  440. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  441. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  442. package/dist/esm-es5/ion-loading.entry.js +1 -1
  443. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  444. package/dist/esm-es5/ion-modal.entry.js +1 -1
  445. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  446. package/dist/esm-es5/ion-picker-column-option.entry.js +4 -0
  447. package/dist/esm-es5/ion-picker-column.entry.js +4 -0
  448. package/dist/esm-es5/ion-picker.entry.js +4 -0
  449. package/dist/esm-es5/ion-popover.entry.js +1 -1
  450. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  451. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  452. package/dist/esm-es5/ion-range.entry.js +1 -1
  453. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  454. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  455. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  456. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  457. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  458. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  459. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  460. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  461. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  462. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  463. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  464. package/dist/esm-es5/ion-text.entry.js +1 -1
  465. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  466. package/dist/esm-es5/ion-toast.entry.js +1 -1
  467. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  468. package/dist/esm-es5/ionic.js +1 -1
  469. package/dist/esm-es5/loader.js +1 -1
  470. package/dist/esm-es5/overlays-2d8629c6.js +4 -0
  471. package/dist/esm-es5/{swipe-back-c06602f2.js → swipe-back-7f7620ca.js} +1 -1
  472. package/dist/html.html-data.json +152 -13
  473. package/dist/ionic/index.esm.js +1 -1
  474. package/dist/ionic/ionic.esm.js +1 -1
  475. package/dist/ionic/p-04cca62a.system.entry.js +4 -0
  476. package/dist/ionic/p-0543054b.entry.js +4 -0
  477. package/dist/ionic/p-0729b5cd.entry.js +4 -0
  478. package/dist/ionic/p-08bb849b.entry.js +4 -0
  479. package/dist/ionic/p-09fffdb0.system.entry.js +4 -0
  480. package/dist/ionic/p-0b955124.system.js +1 -1
  481. package/dist/ionic/p-0c840add.entry.js +4 -0
  482. package/dist/ionic/p-0caf81c6.system.entry.js +4 -0
  483. package/dist/ionic/{p-cdc277a6.js → p-0d25b742.js} +1 -1
  484. package/dist/ionic/p-1029611c.entry.js +4 -0
  485. package/dist/ionic/p-11b295f4.entry.js +4 -0
  486. package/dist/ionic/{p-bc2c03d7.system.entry.js → p-12b75934.system.entry.js} +1 -1
  487. package/dist/ionic/p-13264eba.system.entry.js +4 -0
  488. package/dist/ionic/{p-6f38d0c5.system.entry.js → p-156299c1.system.entry.js} +1 -1
  489. package/dist/ionic/p-15639026.entry.js +4 -0
  490. package/dist/ionic/p-156e6059.system.entry.js +4 -0
  491. package/dist/ionic/p-178690c0.system.entry.js +4 -0
  492. package/dist/ionic/p-1831387a.system.entry.js +4 -0
  493. package/dist/ionic/p-19385313.entry.js +4 -0
  494. package/dist/ionic/{p-c7c8429a.system.js → p-20d469d0.system.js} +1 -1
  495. package/dist/ionic/p-24058a38.system.entry.js +4 -0
  496. package/dist/ionic/p-24ff2729.system.entry.js +4 -0
  497. package/dist/ionic/{p-7c32fb95.system.entry.js → p-2569497d.system.entry.js} +1 -1
  498. package/dist/ionic/p-276804d2.entry.js +4 -0
  499. package/dist/ionic/p-2a515f11.system.entry.js +4 -0
  500. package/dist/ionic/p-2c8e5c80.entry.js +4 -0
  501. package/dist/ionic/p-315f773b.system.entry.js +4 -0
  502. package/dist/ionic/p-31d9a349.entry.js +4 -0
  503. package/dist/ionic/{p-0e29919c.system.entry.js → p-364fd2ae.system.entry.js} +1 -1
  504. package/dist/ionic/p-3c2c3769.system.entry.js +4 -0
  505. package/dist/ionic/{p-31b2326e.system.js → p-3e1e14d9.system.js} +1 -1
  506. package/dist/ionic/p-3f155d29.entry.js +4 -0
  507. package/dist/ionic/p-3fa8e0f9.entry.js +4 -0
  508. package/dist/ionic/p-40314c02.entry.js +4 -0
  509. package/dist/ionic/{p-78edc0cd.system.entry.js → p-43c2aeae.system.entry.js} +2 -2
  510. package/dist/ionic/{p-ac20160b.system.entry.js → p-445754d1.system.entry.js} +1 -1
  511. package/dist/ionic/{p-ce2eabd5.entry.js → p-4853de94.entry.js} +1 -1
  512. package/dist/ionic/p-49457fe6.entry.js +4 -0
  513. package/dist/ionic/p-499f2482.entry.js +4 -0
  514. package/dist/ionic/p-4fb92810.system.entry.js +4 -0
  515. package/dist/ionic/{p-aa7ae6aa.entry.js → p-55a4d7cf.entry.js} +1 -1
  516. package/dist/ionic/{p-1f6cdf2c.system.entry.js → p-5898aad5.system.entry.js} +1 -1
  517. package/dist/ionic/{p-1c531ca2.entry.js → p-590ecff0.entry.js} +1 -1
  518. package/dist/ionic/p-595c7065.entry.js +4 -0
  519. package/dist/ionic/p-595f9dfe.system.entry.js +4 -0
  520. package/dist/ionic/p-5e175db3.system.entry.js +4 -0
  521. package/dist/ionic/{p-fe92da17.entry.js → p-5ee49d72.entry.js} +1 -1
  522. package/dist/ionic/p-5ef79cfe.system.entry.js +4 -0
  523. package/dist/ionic/p-5f739516.system.js +4 -0
  524. package/dist/ionic/{p-400574bf.entry.js → p-6028d77a.entry.js} +1 -1
  525. package/dist/ionic/p-61c078b4.system.entry.js +4 -0
  526. package/dist/ionic/p-6c48dd91.system.js +4 -0
  527. package/dist/ionic/p-6ea89932.js +4 -0
  528. package/dist/ionic/{p-d95c8e90.entry.js → p-78aade1a.entry.js} +1 -1
  529. package/dist/ionic/{p-92c2178e.system.entry.js → p-78dfbc32.system.entry.js} +2 -2
  530. package/dist/ionic/p-7a89f3f3.system.entry.js +4 -0
  531. package/dist/ionic/p-7dfcdac4.system.entry.js +4 -0
  532. package/dist/ionic/p-7dfdf838.system.entry.js +4 -0
  533. package/dist/ionic/p-7efa91b5.entry.js +4 -0
  534. package/dist/ionic/{p-97eca294.entry.js → p-7f19f4cd.entry.js} +1 -1
  535. package/dist/ionic/p-854484fa.entry.js +4 -0
  536. package/dist/ionic/p-892757c2.system.entry.js +4 -0
  537. package/dist/ionic/p-8a0113a9.entry.js +4 -0
  538. package/dist/ionic/{p-df281664.system.entry.js → p-8af445b5.system.entry.js} +2 -2
  539. package/dist/ionic/p-8bd7a47e.entry.js +4 -0
  540. package/dist/ionic/p-8e58d0a5.system.entry.js +4 -0
  541. package/dist/ionic/{p-f5d2dc9b.js → p-8ededb41.js} +1 -1
  542. package/dist/ionic/p-90fcbf72.js +4 -0
  543. package/dist/ionic/p-912ee727.entry.js +4 -0
  544. package/dist/ionic/p-938ccce5.entry.js +4 -0
  545. package/dist/ionic/p-951d75bb.entry.js +4 -0
  546. package/dist/ionic/{p-bb3615f7.js → p-9b97df10.js} +1 -1
  547. package/dist/ionic/{p-20a6513f.system.entry.js → p-a074634d.system.entry.js} +2 -2
  548. package/dist/ionic/{p-fd9a9db3.system.js → p-a0da38e6.system.js} +1 -1
  549. package/dist/ionic/p-ab08eda4.system.entry.js +4 -0
  550. package/dist/ionic/{p-eda7a1db.system.entry.js → p-ac955b58.system.entry.js} +1 -1
  551. package/dist/ionic/p-b17f058b.system.js +4 -0
  552. package/dist/ionic/{p-dbb4c012.entry.js → p-b1e1d6dd.entry.js} +1 -1
  553. package/dist/ionic/p-b27577e5.system.entry.js +4 -0
  554. package/dist/ionic/p-bfcaea5f.entry.js +4 -0
  555. package/dist/ionic/p-c4045831.entry.js +4 -0
  556. package/dist/ionic/p-c4e9201d.entry.js +4 -0
  557. package/dist/ionic/{p-a051c371.entry.js → p-c9de921c.entry.js} +1 -1
  558. package/dist/ionic/p-c9f6626c.system.entry.js +4 -0
  559. package/dist/ionic/p-cd5cb2da.system.entry.js +4 -0
  560. package/dist/ionic/p-d8834a0d.entry.js +4 -0
  561. package/dist/ionic/p-db504106.entry.js +4 -0
  562. package/dist/ionic/{p-0eef8b34.system.entry.js → p-dd79d499.system.entry.js} +1 -1
  563. package/dist/ionic/p-e1054dac.system.entry.js +4 -0
  564. package/dist/ionic/{p-d8607ede.entry.js → p-e2f91d98.entry.js} +1 -1
  565. package/dist/ionic/p-e82bc15e.entry.js +4 -0
  566. package/dist/ionic/p-e9c2c532.entry.js +4 -0
  567. package/dist/ionic/p-ef065e0d.system.entry.js +4 -0
  568. package/dist/ionic/p-f7d618b7.entry.js +4 -0
  569. package/dist/ionic/p-fa203b3a.system.entry.js +4 -0
  570. package/dist/ionic/{p-9a6ab80a.system.entry.js → p-fa667cfb.system.entry.js} +1 -1
  571. package/dist/ionic/{p-5a0c301f.entry.js → p-fd14f2b4.entry.js} +1 -1
  572. package/dist/ionic/p-fe990e42.system.entry.js +4 -0
  573. package/dist/types/components/action-sheet/action-sheet-interface.d.ts +8 -0
  574. package/dist/types/components/backdrop/backdrop.d.ts +0 -3
  575. package/dist/types/components/datetime/datetime.d.ts +0 -1
  576. package/dist/types/components/datetime/utils/data.d.ts +11 -7
  577. package/dist/types/components/input/input.d.ts +0 -6
  578. package/dist/types/components/menu/menu.d.ts +12 -2
  579. package/dist/types/components/nav/nav.d.ts +4 -1
  580. package/dist/types/components/picker/picker-interfaces.d.ts +8 -0
  581. package/dist/types/components/picker/picker.d.ts +75 -129
  582. package/dist/types/components/picker-column/picker-column-interfaces.d.ts +4 -0
  583. package/dist/types/components/picker-column/picker-column.d.ts +99 -39
  584. package/dist/types/components/picker-column-option/picker-column-option.d.ts +66 -0
  585. package/dist/types/components/picker-legacy/picker.d.ts +158 -0
  586. package/dist/types/components/picker-legacy-column/picker-column.d.ts +46 -0
  587. package/dist/types/components/split-pane/split-pane.d.ts +14 -2
  588. package/dist/types/components/textarea/textarea.d.ts +0 -17
  589. package/dist/types/components/toast/toast-interface.d.ts +0 -4
  590. package/dist/types/components.d.ts +159 -142
  591. package/dist/types/interface.d.ts +1 -1
  592. package/dist/types/utils/config.d.ts +2 -2
  593. package/dist/types/utils/gesture/gesture-controller.d.ts +1 -0
  594. package/dist/types/utils/overlays.d.ts +5 -2
  595. package/hydrate/index.js +1746 -1683
  596. package/package.json +1 -1
  597. package/components/ion-picker-column-internal.d.ts +0 -11
  598. package/components/ion-picker-column-internal.js +0 -9
  599. package/components/ion-picker-internal.js +0 -9
  600. package/components/picker-column-internal.js +0 -392
  601. package/dist/collection/components/picker-column-internal/picker-column-internal.js +0 -566
  602. package/dist/collection/components/picker-column-internal/test/disabled/picker-column-internal.e2e.js +0 -162
  603. package/dist/collection/components/picker-internal/picker-internal.js +0 -560
  604. package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +0 -118
  605. package/dist/collection/components/textarea/test/legacy/a11y/textarea.e2e.js +0 -31
  606. package/dist/collection/components/textarea/test/legacy/autogrow/textarea.e2e.js +0 -58
  607. package/dist/collection/components/textarea/test/legacy/basic/textarea.e2e.js +0 -43
  608. package/dist/collection/components/textarea/test/legacy/clear-on-edit/textarea.e2e.js +0 -25
  609. package/dist/esm-es5/button-active-4bee452c.js +0 -4
  610. package/dist/esm-es5/ion-picker-column-internal.entry.js +0 -4
  611. package/dist/esm-es5/ion-picker-internal.entry.js +0 -4
  612. package/dist/esm-es5/overlays-33ae3ea0.js +0 -4
  613. package/dist/ionic/p-016976a7.system.entry.js +0 -4
  614. package/dist/ionic/p-078fd095.system.entry.js +0 -4
  615. package/dist/ionic/p-0ae25399.system.entry.js +0 -4
  616. package/dist/ionic/p-108f730a.entry.js +0 -4
  617. package/dist/ionic/p-1f583f73.entry.js +0 -4
  618. package/dist/ionic/p-20f7a91e.system.entry.js +0 -4
  619. package/dist/ionic/p-2da0a76c.entry.js +0 -4
  620. package/dist/ionic/p-30c9e049.system.entry.js +0 -4
  621. package/dist/ionic/p-333f06ed.entry.js +0 -4
  622. package/dist/ionic/p-389ff4d2.system.entry.js +0 -4
  623. package/dist/ionic/p-396c1a55.entry.js +0 -4
  624. package/dist/ionic/p-3a54c070.system.entry.js +0 -4
  625. package/dist/ionic/p-3a98f8db.entry.js +0 -4
  626. package/dist/ionic/p-3cb2ab30.entry.js +0 -4
  627. package/dist/ionic/p-3cdbaa49.entry.js +0 -4
  628. package/dist/ionic/p-48af4316.system.entry.js +0 -4
  629. package/dist/ionic/p-4c256bc2.system.entry.js +0 -4
  630. package/dist/ionic/p-4dfc27eb.system.entry.js +0 -4
  631. package/dist/ionic/p-51f08a9f.entry.js +0 -4
  632. package/dist/ionic/p-5b6aa59a.entry.js +0 -4
  633. package/dist/ionic/p-5e60dbc8.entry.js +0 -4
  634. package/dist/ionic/p-5eea8b4c.system.js +0 -4
  635. package/dist/ionic/p-61c0f8bf.system.entry.js +0 -4
  636. package/dist/ionic/p-680f96e8.system.entry.js +0 -4
  637. package/dist/ionic/p-6a34980d.entry.js +0 -4
  638. package/dist/ionic/p-6b02edd6.js +0 -4
  639. package/dist/ionic/p-70026e8f.system.entry.js +0 -4
  640. package/dist/ionic/p-776b144b.system.js +0 -4
  641. package/dist/ionic/p-7dc7514a.entry.js +0 -4
  642. package/dist/ionic/p-84513dfb.entry.js +0 -4
  643. package/dist/ionic/p-84879f61.system.entry.js +0 -4
  644. package/dist/ionic/p-8569d759.system.entry.js +0 -4
  645. package/dist/ionic/p-8ebd9951.entry.js +0 -4
  646. package/dist/ionic/p-9beb5039.system.js +0 -4
  647. package/dist/ionic/p-9f5b40c0.system.entry.js +0 -4
  648. package/dist/ionic/p-9f6397ce.entry.js +0 -4
  649. package/dist/ionic/p-a19f5ae1.entry.js +0 -4
  650. package/dist/ionic/p-a1bfaa5c.system.entry.js +0 -4
  651. package/dist/ionic/p-aaa4ffb3.system.entry.js +0 -4
  652. package/dist/ionic/p-ac979ebf.system.entry.js +0 -4
  653. package/dist/ionic/p-b37e4ee5.system.entry.js +0 -4
  654. package/dist/ionic/p-b498de69.entry.js +0 -4
  655. package/dist/ionic/p-bd259c65.system.entry.js +0 -4
  656. package/dist/ionic/p-c3790581.entry.js +0 -4
  657. package/dist/ionic/p-c851b204.system.entry.js +0 -4
  658. package/dist/ionic/p-cd055d60.system.entry.js +0 -4
  659. package/dist/ionic/p-d7260b87.entry.js +0 -4
  660. package/dist/ionic/p-d74ca358.entry.js +0 -4
  661. package/dist/ionic/p-dce9bc53.entry.js +0 -4
  662. package/dist/ionic/p-dd60faa5.system.entry.js +0 -4
  663. package/dist/ionic/p-df468a8f.entry.js +0 -4
  664. package/dist/ionic/p-e0569db4.entry.js +0 -4
  665. package/dist/ionic/p-e68980ff.system.entry.js +0 -4
  666. package/dist/ionic/p-e6aaff14.system.entry.js +0 -4
  667. package/dist/ionic/p-ea8fbf09.entry.js +0 -4
  668. package/dist/ionic/p-efe9180b.entry.js +0 -4
  669. package/dist/ionic/p-f1ad3b3d.entry.js +0 -4
  670. package/dist/ionic/p-f1cc690e.entry.js +0 -4
  671. package/dist/ionic/p-f46775e4.entry.js +0 -4
  672. package/dist/ionic/p-f7b43141.system.entry.js +0 -4
  673. package/dist/ionic/p-f88dd429.entry.js +0 -4
  674. package/dist/ionic/p-f89ae259.js +0 -4
  675. package/dist/ionic/p-f97b9cdd.system.entry.js +0 -4
  676. package/dist/ionic/p-f9d0e6f4.system.entry.js +0 -4
  677. package/dist/ionic/p-fd3f475f.entry.js +0 -4
  678. package/dist/types/components/picker-column-internal/picker-column-internal-interfaces.d.ts +0 -5
  679. package/dist/types/components/picker-column-internal/picker-column-internal.d.ts +0 -102
  680. package/dist/types/components/picker-internal/picker-internal-interfaces.d.ts +0 -8
  681. package/dist/types/components/picker-internal/picker-internal.d.ts +0 -102
  682. /package/dist/collection/components/{picker-internal/picker-internal-interfaces.js → picker/picker-interfaces.js} +0 -0
  683. /package/dist/collection/components/{picker-column-internal/picker-column-internal-interfaces.js → picker-column/picker-column-interfaces.js} +0 -0
  684. /package/dist/collection/components/{picker → picker-legacy}/animations/ios.enter.js +0 -0
  685. /package/dist/collection/components/{picker → picker-legacy}/animations/ios.leave.js +0 -0
  686. /package/dist/collection/components/{picker → picker-legacy}/picker-interface.js +0 -0
  687. /package/dist/collection/components/{picker-column → picker-legacy-column}/test/test.utils.js +0 -0
  688. /package/dist/esm-es5/{data-0f3ab200.js → data-691286f1.js} +0 -0
  689. /package/dist/ionic/{p-f7dce541.js → p-5289aade.js} +0 -0
  690. /package/dist/ionic/{p-7330c044.system.js → p-66e6860f.system.js} +0 -0
  691. /package/dist/types/components/{picker → picker-legacy}/animations/ios.enter.d.ts +0 -0
  692. /package/dist/types/components/{picker → picker-legacy}/animations/ios.leave.d.ts +0 -0
  693. /package/dist/types/components/{picker → picker-legacy}/picker-interface.d.ts +0 -0
  694. /package/dist/types/components/{picker-column → picker-legacy-column}/test/test.utils.d.ts +0 -0
@@ -2,368 +2,396 @@
2
2
  * (C) Ionic http://ionicframework.com - MIT License
3
3
  */
4
4
  import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
5
- import { m as clamp } from './helpers.js';
6
- import { b as hapticSelectionChanged, h as hapticSelectionEnd, a as hapticSelectionStart } from './haptic.js';
7
- import { g as getClassMap } from './theme.js';
8
- import { b as getIonMode } from './ionic-global.js';
5
+ import { d as doc } from './index5.js';
6
+ import { r as raf, g as getElementRoot } from './helpers.js';
7
+ import { a as hapticSelectionStart, b as hapticSelectionChanged, h as hapticSelectionEnd } from './haptic.js';
8
+ import { a as isPlatform, b as getIonMode } from './ionic-global.js';
9
+ import { c as createColorClasses } from './theme.js';
9
10
 
10
- const pickerColumnIosCss = ".picker-col{display:-ms-flexbox;display:flex;position:relative;-ms-flex:1;flex:1;-ms-flex-pack:center;justify-content:center;height:100%;-webkit-box-sizing:content-box;box-sizing:content-box;contain:content}.picker-opts{position:relative;-ms-flex:1;flex:1;max-width:100%}.picker-opt{top:0;display:block;position:absolute;width:100%;border:0;text-align:center;text-overflow:ellipsis;white-space:nowrap;contain:strict;overflow:hidden;will-change:transform}@supports (inset-inline-start: 0){.picker-opt{inset-inline-start:0}}@supports not (inset-inline-start: 0){.picker-opt{left:0}:host-context([dir=rtl]) .picker-opt{left:unset;right:unset;right:0}[dir=rtl] .picker-opt{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){.picker-opt:dir(rtl){left:unset;right:unset;right:0}}}.picker-opt.picker-opt-disabled{pointer-events:none}.picker-opt-disabled{opacity:0}.picker-opts-left{-ms-flex-pack:start;justify-content:flex-start}.picker-opts-right{-ms-flex-pack:end;justify-content:flex-end}.picker-opt:active,.picker-opt:focus{outline:none}.picker-prefix{position:relative;-ms-flex:1;flex:1;text-align:end;white-space:nowrap}.picker-suffix{position:relative;-ms-flex:1;flex:1;text-align:start;white-space:nowrap}.picker-col{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:0;padding-bottom:0;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.picker-prefix,.picker-suffix,.picker-opts{top:77px;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;color:inherit;font-size:20px;line-height:42px;pointer-events:none}.picker-opt{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-transform-origin:center center;transform-origin:center center;height:46px;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out;background:transparent;color:inherit;font-size:20px;line-height:42px;-webkit-backface-visibility:hidden;backface-visibility:hidden;pointer-events:auto}:host-context([dir=rtl]) .picker-opt{-webkit-transform-origin:calc(100% - center) center;transform-origin:calc(100% - center) center}[dir=rtl] .picker-opt{-webkit-transform-origin:calc(100% - center) center;transform-origin:calc(100% - center) center}@supports selector(:dir(rtl)){.picker-opt:dir(rtl){-webkit-transform-origin:calc(100% - center) center;transform-origin:calc(100% - center) center}}";
11
- const IonPickerColumnIosStyle0 = pickerColumnIosCss;
11
+ const pickerColumnCss = ":host{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;max-width:100%;height:200px;font-size:22px;text-align:center}.picker-opts{-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0px;padding-bottom:0px;min-width:26px;max-height:200px;outline:none;text-align:inherit;-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory;overflow-x:hidden;overflow-y:scroll;scrollbar-width:none}.picker-item-empty{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;display:block;width:100%;height:34px;border:0px;outline:none;background:transparent;color:inherit;font-family:var(--ion-font-family, inherit);font-size:inherit;line-height:34px;text-align:inherit;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.picker-opts::-webkit-scrollbar{display:none}::slotted(ion-picker-column-option){display:block;scroll-snap-align:center}.picker-item-empty,:host(:not([disabled])) ::slotted(ion-picker-column-option.option-disabled){scroll-snap-align:none}::slotted([slot=prefix]),::slotted([slot=suffix]){max-width:200px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::slotted([slot=prefix]){-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0;padding-bottom:0;-ms-flex-pack:end;justify-content:end}::slotted([slot=suffix]){-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px;padding-top:0;padding-bottom:0;-ms-flex-pack:start;justify-content:start}:host(.picker-column-disabled) .picker-opts{overflow-y:hidden}:host(.picker-column-disabled) ::slotted(ion-picker-column-option){cursor:default;opacity:0.4;pointer-events:none}@media (any-hover: hover){:host(:focus) .picker-opts{outline:none;background:rgba(var(--ion-color-base-rgb), 0.2)}}";
12
+ const IonPickerColumnStyle0 = pickerColumnCss;
12
13
 
13
- const pickerColumnMdCss = ".picker-col{display:-ms-flexbox;display:flex;position:relative;-ms-flex:1;flex:1;-ms-flex-pack:center;justify-content:center;height:100%;-webkit-box-sizing:content-box;box-sizing:content-box;contain:content}.picker-opts{position:relative;-ms-flex:1;flex:1;max-width:100%}.picker-opt{top:0;display:block;position:absolute;width:100%;border:0;text-align:center;text-overflow:ellipsis;white-space:nowrap;contain:strict;overflow:hidden;will-change:transform}@supports (inset-inline-start: 0){.picker-opt{inset-inline-start:0}}@supports not (inset-inline-start: 0){.picker-opt{left:0}:host-context([dir=rtl]) .picker-opt{left:unset;right:unset;right:0}[dir=rtl] .picker-opt{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){.picker-opt:dir(rtl){left:unset;right:unset;right:0}}}.picker-opt.picker-opt-disabled{pointer-events:none}.picker-opt-disabled{opacity:0}.picker-opts-left{-ms-flex-pack:start;justify-content:flex-start}.picker-opts-right{-ms-flex-pack:end;justify-content:flex-end}.picker-opt:active,.picker-opt:focus{outline:none}.picker-prefix{position:relative;-ms-flex:1;flex:1;text-align:end;white-space:nowrap}.picker-suffix{position:relative;-ms-flex:1;flex:1;text-align:start;white-space:nowrap}.picker-col{-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:8px;padding-inline-end:8px;padding-top:0;padding-bottom:0;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.picker-prefix,.picker-suffix,.picker-opts{top:77px;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;color:inherit;font-size:22px;line-height:42px;pointer-events:none}.picker-opt{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;height:43px;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out;background:transparent;color:inherit;font-size:22px;line-height:42px;-webkit-backface-visibility:hidden;backface-visibility:hidden;pointer-events:auto}.picker-prefix,.picker-suffix,.picker-opt.picker-opt-selected{color:var(--ion-color-primary, #3880ff)}";
14
- const IonPickerColumnMdStyle0 = pickerColumnMdCss;
15
-
16
- const PickerColumnCmp = /*@__PURE__*/ proxyCustomElement(class PickerColumnCmp extends HTMLElement {
14
+ const PickerColumn = /*@__PURE__*/ proxyCustomElement(class PickerColumn extends HTMLElement {
17
15
  constructor() {
18
16
  super();
19
17
  this.__registerHost();
20
- this.ionPickerColChange = createEvent(this, "ionPickerColChange", 7);
21
- this.optHeight = 0;
22
- this.rotateFactor = 0;
23
- this.scaleFactor = 1;
24
- this.velocity = 0;
25
- this.y = 0;
26
- this.noAnimate = true;
27
- // `colDidChange` is a flag that gets set when the column is changed
28
- // dynamically. When this flag is set, the column will refresh
29
- // after the component re-renders to incorporate the new column data.
30
- // This is necessary because `this.refresh` queries for the option elements,
31
- // so it needs to wait for the latest elements to be available in the DOM.
32
- // Ex: column is created with 3 options. User updates the column data
33
- // to have 5 options. The column will still think it only has 3 options.
34
- this.colDidChange = false;
35
- this.col = undefined;
36
- }
37
- colChanged() {
38
- this.colDidChange = true;
39
- }
40
- async connectedCallback() {
41
- let pickerRotateFactor = 0;
42
- let pickerScaleFactor = 0.81;
43
- const mode = getIonMode(this);
44
- if (mode === 'ios') {
45
- pickerRotateFactor = -0.46;
46
- pickerScaleFactor = 1;
47
- }
48
- this.rotateFactor = pickerRotateFactor;
49
- this.scaleFactor = pickerScaleFactor;
50
- this.gesture = (await import('./index3.js')).createGesture({
51
- el: this.el,
52
- gestureName: 'picker-swipe',
53
- gesturePriority: 100,
54
- threshold: 0,
55
- passive: false,
56
- onStart: (ev) => this.onStart(ev),
57
- onMove: (ev) => this.onMove(ev),
58
- onEnd: (ev) => this.onEnd(ev),
59
- });
60
- this.gesture.enable();
61
- // Options have not been initialized yet
62
- // Animation must be disabled through the `noAnimate` flag
63
- // Otherwise, the options will render
64
- // at the top of the column and transition down
65
- this.tmrId = setTimeout(() => {
66
- this.noAnimate = false;
67
- // After initialization, `refresh()` will be called
68
- // At this point, animation will be enabled. The options will
69
- // animate as they are being selected.
70
- this.refresh(true);
71
- }, 250);
72
- }
73
- componentDidLoad() {
74
- this.onDomChange();
75
- }
76
- componentDidUpdate() {
77
- // Options may have changed since last update.
78
- if (this.colDidChange) {
79
- // Animation must be disabled through the `onDomChange` parameter.
80
- // Otherwise, the recently added options will render
81
- // at the top of the column and transition down
82
- this.onDomChange(true, false);
83
- this.colDidChange = false;
84
- }
85
- }
86
- disconnectedCallback() {
87
- if (this.rafId !== undefined)
88
- cancelAnimationFrame(this.rafId);
89
- if (this.tmrId)
90
- clearTimeout(this.tmrId);
91
- if (this.gesture) {
92
- this.gesture.destroy();
93
- this.gesture = undefined;
94
- }
95
- }
96
- emitColChange() {
97
- this.ionPickerColChange.emit(this.col);
98
- }
99
- setSelected(selectedIndex, duration) {
100
- // if there is a selected index, then figure out it's y position
101
- // if there isn't a selected index, then just use the top y position
102
- const y = selectedIndex > -1 ? -(selectedIndex * this.optHeight) : 0;
103
- this.velocity = 0;
104
- // set what y position we're at
105
- if (this.rafId !== undefined)
106
- cancelAnimationFrame(this.rafId);
107
- this.update(y, duration, true);
108
- this.emitColChange();
109
- }
110
- update(y, duration, saveY) {
111
- if (!this.optsEl) {
112
- return;
113
- }
114
- // ensure we've got a good round number :)
115
- let translateY = 0;
116
- let translateZ = 0;
117
- const { col, rotateFactor } = this;
118
- const prevSelected = col.selectedIndex;
119
- const selectedIndex = (col.selectedIndex = this.indexForY(-y));
120
- const durationStr = duration === 0 ? '' : duration + 'ms';
121
- const scaleStr = `scale(${this.scaleFactor})`;
122
- const children = this.optsEl.children;
123
- for (let i = 0; i < children.length; i++) {
124
- const button = children[i];
125
- const opt = col.options[i];
126
- const optOffset = i * this.optHeight + y;
127
- let transform = '';
128
- if (rotateFactor !== 0) {
129
- const rotateX = optOffset * rotateFactor;
130
- if (Math.abs(rotateX) <= 90) {
131
- translateY = 0;
132
- translateZ = 90;
133
- transform = `rotateX(${rotateX}deg) `;
134
- }
135
- else {
136
- translateY = -9999;
18
+ this.__attachShadow();
19
+ this.ionChange = createEvent(this, "ionChange", 7);
20
+ this.isScrolling = false;
21
+ this.isColumnVisible = false;
22
+ this.canExitInputMode = true;
23
+ this.centerPickerItemInView = (target, smooth = true, canExitInputMode = true) => {
24
+ const { isColumnVisible, scrollEl } = this;
25
+ if (isColumnVisible && scrollEl) {
26
+ // (Vertical offset from parent) - (three empty picker rows) + (half the height of the target to ensure the scroll triggers)
27
+ const top = target.offsetTop - 3 * target.clientHeight + target.clientHeight / 2;
28
+ if (scrollEl.scrollTop !== top) {
29
+ /**
30
+ * Setting this flag prevents input
31
+ * mode from exiting in the picker column's
32
+ * scroll callback. This is useful when the user manually
33
+ * taps an item or types on the keyboard as both
34
+ * of these can cause a scroll to occur.
35
+ */
36
+ this.canExitInputMode = canExitInputMode;
37
+ scrollEl.scroll({
38
+ top,
39
+ left: 0,
40
+ behavior: smooth ? 'smooth' : undefined,
41
+ });
137
42
  }
138
43
  }
139
- else {
140
- translateZ = 0;
141
- translateY = optOffset;
142
- }
143
- const selected = selectedIndex === i;
144
- transform += `translate3d(0px,${translateY}px,${translateZ}px) `;
145
- if (this.scaleFactor !== 1 && !selected) {
146
- transform += scaleStr;
44
+ };
45
+ this.setPickerItemActiveState = (item, isActive) => {
46
+ if (isActive) {
47
+ item.classList.add(PICKER_ITEM_ACTIVE_CLASS);
147
48
  }
148
- // Update transition duration
149
- if (this.noAnimate) {
150
- opt.duration = 0;
151
- button.style.transitionDuration = '';
152
- }
153
- else if (duration !== opt.duration) {
154
- opt.duration = duration;
155
- button.style.transitionDuration = durationStr;
49
+ else {
50
+ item.classList.remove(PICKER_ITEM_ACTIVE_CLASS);
156
51
  }
157
- // Update transform
158
- if (transform !== opt.transform) {
159
- opt.transform = transform;
52
+ };
53
+ /**
54
+ * When ionInputModeChange is emitted, each column
55
+ * needs to check if it is the one being made available
56
+ * for text entry.
57
+ */
58
+ this.inputModeChange = (ev) => {
59
+ if (!this.numericInput) {
60
+ return;
160
61
  }
161
- button.style.transform = transform;
62
+ const { useInputMode, inputModeColumn } = ev.detail;
162
63
  /**
163
- * Ensure that the select column
164
- * item has the selected class
64
+ * If inputModeColumn is undefined then this means
65
+ * all numericInput columns are being selected.
165
66
  */
166
- opt.selected = selected;
167
- if (selected) {
168
- button.classList.add(PICKER_OPT_SELECTED);
67
+ const isColumnActive = inputModeColumn === undefined || inputModeColumn === this.el;
68
+ if (!useInputMode || !isColumnActive) {
69
+ this.setInputModeActive(false);
70
+ return;
169
71
  }
170
- else {
171
- button.classList.remove(PICKER_OPT_SELECTED);
72
+ this.setInputModeActive(true);
73
+ };
74
+ /**
75
+ * Setting isActive will cause a re-render.
76
+ * As a result, we do not want to cause the
77
+ * re-render mid scroll as this will cause
78
+ * the picker column to jump back to
79
+ * whatever value was selected at the
80
+ * start of the scroll interaction.
81
+ */
82
+ this.setInputModeActive = (state) => {
83
+ if (this.isScrolling) {
84
+ this.scrollEndCallback = () => {
85
+ this.isActive = state;
86
+ };
87
+ return;
172
88
  }
173
- }
174
- this.col.prevSelected = prevSelected;
175
- if (saveY) {
176
- this.y = y;
177
- }
178
- if (this.lastIndex !== selectedIndex) {
179
- // have not set a last index yet
180
- hapticSelectionChanged();
181
- this.lastIndex = selectedIndex;
89
+ this.isActive = state;
90
+ };
91
+ /**
92
+ * When the column scrolls, the component
93
+ * needs to determine which item is centered
94
+ * in the view and will emit an ionChange with
95
+ * the item object.
96
+ */
97
+ this.initializeScrollListener = () => {
98
+ /**
99
+ * The haptics for the wheel picker are
100
+ * an iOS-only feature. As a result, they should
101
+ * be disabled on Android.
102
+ */
103
+ const enableHaptics = isPlatform('ios');
104
+ const { el, scrollEl } = this;
105
+ let timeout;
106
+ let activeEl = this.activeItem;
107
+ const scrollCallback = () => {
108
+ raf(() => {
109
+ if (!scrollEl)
110
+ return;
111
+ if (timeout) {
112
+ clearTimeout(timeout);
113
+ timeout = undefined;
114
+ }
115
+ if (!this.isScrolling) {
116
+ enableHaptics && hapticSelectionStart();
117
+ this.isScrolling = true;
118
+ }
119
+ /**
120
+ * Select item in the center of the column
121
+ * which is the month/year that we want to select
122
+ */
123
+ const bbox = scrollEl.getBoundingClientRect();
124
+ const centerX = bbox.x + bbox.width / 2;
125
+ const centerY = bbox.y + bbox.height / 2;
126
+ /**
127
+ * elementFromPoint returns the top-most element.
128
+ * This means that if an ion-backdrop is overlaying the
129
+ * picker then the appropriate picker column option will
130
+ * not be selected. To account for this, we use elementsFromPoint
131
+ * and use an Array.find to find the appropriate column option
132
+ * at that point.
133
+ *
134
+ * Additionally, the picker column could be used in the
135
+ * Shadow DOM (i.e. in ion-datetime) so we need to make
136
+ * sure we are choosing the correct host otherwise
137
+ * the elements returns by elementsFromPoint will be
138
+ * retargeted. To account for this, we check to see
139
+ * if the picker column has a parent shadow root. If
140
+ * so, we use that shadow root when doing elementsFromPoint.
141
+ * Otherwise, we just use the document.
142
+ */
143
+ const rootNode = el.getRootNode();
144
+ const hasParentShadow = rootNode instanceof ShadowRoot;
145
+ const referenceNode = hasParentShadow ? rootNode : doc;
146
+ /**
147
+ * If the reference node is undefined
148
+ * then it's likely that doc is undefined
149
+ * due to being in an SSR environment.
150
+ */
151
+ if (referenceNode === undefined) {
152
+ return;
153
+ }
154
+ const elementsAtPoint = referenceNode.elementsFromPoint(centerX, centerY);
155
+ /**
156
+ * elementsFromPoint can returns multiple elements
157
+ * so find the relevant picker column option if one exists.
158
+ */
159
+ const newActiveElement = elementsAtPoint.find((el) => el.tagName === 'ION-PICKER-COLUMN-OPTION');
160
+ if (activeEl !== undefined) {
161
+ this.setPickerItemActiveState(activeEl, false);
162
+ }
163
+ if (newActiveElement === undefined || newActiveElement.disabled) {
164
+ return;
165
+ }
166
+ /**
167
+ * If we are selecting a new value,
168
+ * we need to run haptics again.
169
+ */
170
+ if (newActiveElement !== activeEl) {
171
+ enableHaptics && hapticSelectionChanged();
172
+ if (this.canExitInputMode) {
173
+ /**
174
+ * The native iOS wheel picker
175
+ * only dismisses the keyboard
176
+ * once the selected item has changed
177
+ * as a result of a swipe
178
+ * from the user. If `canExitInputMode` is
179
+ * `false` then this means that the
180
+ * scroll is happening as a result of
181
+ * the `value` property programmatically changing
182
+ * either by an application or by the user via the keyboard.
183
+ */
184
+ this.exitInputMode();
185
+ }
186
+ }
187
+ activeEl = newActiveElement;
188
+ this.setPickerItemActiveState(newActiveElement, true);
189
+ timeout = setTimeout(() => {
190
+ this.isScrolling = false;
191
+ enableHaptics && hapticSelectionEnd();
192
+ /**
193
+ * Certain tasks (such as those that
194
+ * cause re-renders) should only be done
195
+ * once scrolling has finished, otherwise
196
+ * flickering may occur.
197
+ */
198
+ const { scrollEndCallback } = this;
199
+ if (scrollEndCallback) {
200
+ scrollEndCallback();
201
+ this.scrollEndCallback = undefined;
202
+ }
203
+ /**
204
+ * Reset this flag as the
205
+ * next scroll interaction could
206
+ * be a scroll from the user. In this
207
+ * case, we should exit input mode.
208
+ */
209
+ this.canExitInputMode = true;
210
+ this.setValue(newActiveElement.value);
211
+ }, 250);
212
+ });
213
+ };
214
+ /**
215
+ * Wrap this in an raf so that the scroll callback
216
+ * does not fire when component is initially shown.
217
+ */
218
+ raf(() => {
219
+ if (!scrollEl)
220
+ return;
221
+ scrollEl.addEventListener('scroll', scrollCallback);
222
+ this.destroyScrollListener = () => {
223
+ scrollEl.removeEventListener('scroll', scrollCallback);
224
+ };
225
+ });
226
+ };
227
+ /**
228
+ * Tells the parent picker to
229
+ * exit text entry mode. This is only called
230
+ * when the selected item changes during scroll, so
231
+ * we know that the user likely wants to scroll
232
+ * instead of type.
233
+ */
234
+ this.exitInputMode = () => {
235
+ const { parentEl } = this;
236
+ if (parentEl == null)
237
+ return;
238
+ parentEl.exitInputMode();
239
+ /**
240
+ * setInputModeActive only takes
241
+ * effect once scrolling stops to avoid
242
+ * a component re-render while scrolling.
243
+ * However, we want the visual active
244
+ * indicator to go away immediately, so
245
+ * we call classList.remove here.
246
+ */
247
+ this.el.classList.remove('picker-column-active');
248
+ };
249
+ this.isActive = false;
250
+ this.disabled = false;
251
+ this.value = undefined;
252
+ this.color = 'primary';
253
+ this.numericInput = false;
254
+ }
255
+ valueChange() {
256
+ if (this.isColumnVisible) {
257
+ /**
258
+ * Only scroll the active item into view when the picker column
259
+ * is actively visible to the user.
260
+ */
261
+ this.scrollActiveItemIntoView(true);
182
262
  }
183
263
  }
184
- decelerate() {
185
- if (this.velocity !== 0) {
186
- // still decelerating
187
- this.velocity *= DECELERATION_FRICTION;
188
- // do not let it go slower than a velocity of 1
189
- this.velocity = this.velocity > 0 ? Math.max(this.velocity, 1) : Math.min(this.velocity, -1);
190
- let y = this.y + this.velocity;
191
- if (y > this.minY) {
192
- // whoops, it's trying to scroll up farther than the options we have!
193
- y = this.minY;
194
- this.velocity = 0;
195
- }
196
- else if (y < this.maxY) {
197
- // gahh, it's trying to scroll down farther than we can!
198
- y = this.maxY;
199
- this.velocity = 0;
200
- }
201
- this.update(y, 0, true);
202
- const notLockedIn = Math.round(y) % this.optHeight !== 0 || Math.abs(this.velocity) > 1;
203
- if (notLockedIn) {
204
- // isn't locked in yet, keep decelerating until it is
205
- this.rafId = requestAnimationFrame(() => this.decelerate());
264
+ /**
265
+ * Only setup scroll listeners
266
+ * when the picker is visible, otherwise
267
+ * the container will have a scroll
268
+ * height of 0px.
269
+ */
270
+ componentWillLoad() {
271
+ const visibleCallback = (entries) => {
272
+ const ev = entries[0];
273
+ if (ev.isIntersecting) {
274
+ const { activeItem, el } = this;
275
+ this.isColumnVisible = true;
276
+ /**
277
+ * Because this initial call to scrollActiveItemIntoView has to fire before
278
+ * the scroll listener is set up, we need to manage the active class manually.
279
+ */
280
+ const oldActive = getElementRoot(el).querySelector(`.${PICKER_ITEM_ACTIVE_CLASS}`);
281
+ if (oldActive) {
282
+ this.setPickerItemActiveState(oldActive, false);
283
+ }
284
+ this.scrollActiveItemIntoView();
285
+ if (activeItem) {
286
+ this.setPickerItemActiveState(activeItem, true);
287
+ }
288
+ this.initializeScrollListener();
206
289
  }
207
290
  else {
208
- this.velocity = 0;
209
- this.emitColChange();
210
- hapticSelectionEnd();
291
+ this.isColumnVisible = false;
292
+ if (this.destroyScrollListener) {
293
+ this.destroyScrollListener();
294
+ this.destroyScrollListener = undefined;
295
+ }
211
296
  }
212
- }
213
- else if (this.y % this.optHeight !== 0) {
214
- // needs to still get locked into a position so options line up
215
- const currentPos = Math.abs(this.y % this.optHeight);
216
- // create a velocity in the direction it needs to scroll
217
- this.velocity = currentPos > this.optHeight / 2 ? 1 : -1;
218
- this.decelerate();
297
+ };
298
+ new IntersectionObserver(visibleCallback, { threshold: 0.001 }).observe(this.el);
299
+ const parentEl = (this.parentEl = this.el.closest('ion-picker'));
300
+ if (parentEl !== null) {
301
+ // TODO(FW-2832): type
302
+ parentEl.addEventListener('ionInputModeChange', (ev) => this.inputModeChange(ev));
219
303
  }
220
304
  }
221
- indexForY(y) {
222
- return Math.min(Math.max(Math.abs(Math.round(y / this.optHeight)), 0), this.col.options.length - 1);
223
- }
224
- onStart(detail) {
225
- // We have to prevent default in order to block scrolling under the picker
226
- // but we DO NOT have to stop propagation, since we still want
227
- // some "click" events to capture
228
- if (detail.event.cancelable) {
229
- detail.event.preventDefault();
230
- }
231
- detail.event.stopPropagation();
232
- hapticSelectionStart();
233
- // reset everything
234
- if (this.rafId !== undefined)
235
- cancelAnimationFrame(this.rafId);
236
- const options = this.col.options;
237
- let minY = options.length - 1;
238
- let maxY = 0;
239
- for (let i = 0; i < options.length; i++) {
240
- if (!options[i].disabled) {
241
- minY = Math.min(minY, i);
242
- maxY = Math.max(maxY, i);
305
+ componentDidRender() {
306
+ const { el, activeItem, isColumnVisible, value } = this;
307
+ if (isColumnVisible && !activeItem) {
308
+ const firstOption = el.querySelector('ion-picker-column-option');
309
+ /**
310
+ * If the picker column does not have an active item and the current value
311
+ * does not match the first item in the picker column, that means
312
+ * the value is out of bounds. In this case, we assign the value to the
313
+ * first item to match the scroll position of the column.
314
+ *
315
+ */
316
+ if (firstOption !== null && firstOption.value !== value) {
317
+ this.setValue(firstOption.value);
243
318
  }
244
319
  }
245
- this.minY = -(minY * this.optHeight);
246
- this.maxY = -(maxY * this.optHeight);
247
320
  }
248
- onMove(detail) {
249
- if (detail.event.cancelable) {
250
- detail.event.preventDefault();
251
- }
252
- detail.event.stopPropagation();
253
- // update the scroll position relative to pointer start position
254
- let y = this.y + detail.deltaY;
255
- if (y > this.minY) {
256
- // scrolling up higher than scroll area
257
- y = Math.pow(y, 0.8);
258
- this.bounceFrom = y;
321
+ /** @internal */
322
+ async scrollActiveItemIntoView(smooth = false) {
323
+ const activeEl = this.activeItem;
324
+ if (activeEl) {
325
+ this.centerPickerItemInView(activeEl, smooth, false);
259
326
  }
260
- else if (y < this.maxY) {
261
- // scrolling down below scroll area
262
- y += Math.pow(this.maxY - y, 0.9);
263
- this.bounceFrom = y;
264
- }
265
- else {
266
- this.bounceFrom = 0;
267
- }
268
- this.update(y, 0, false);
269
327
  }
270
- onEnd(detail) {
271
- if (this.bounceFrom > 0) {
272
- // bounce back up
273
- this.update(this.minY, 100, true);
274
- this.emitColChange();
275
- return;
276
- }
277
- else if (this.bounceFrom < 0) {
278
- // bounce back down
279
- this.update(this.maxY, 100, true);
280
- this.emitColChange();
328
+ /**
329
+ * Sets the value prop and fires the ionChange event.
330
+ * This is used when we need to fire ionChange from
331
+ * user-generated events that cannot be caught with normal
332
+ * input/change event listeners.
333
+ * @internal
334
+ */
335
+ async setValue(value) {
336
+ if (this.disabled === true || this.value === value) {
281
337
  return;
282
338
  }
283
- this.velocity = clamp(-MAX_PICKER_SPEED, detail.velocityY * 23, MAX_PICKER_SPEED);
284
- if (this.velocity === 0 && detail.deltaY === 0) {
285
- const opt = detail.event.target.closest('.picker-opt');
286
- if (opt === null || opt === void 0 ? void 0 : opt.hasAttribute('opt-index')) {
287
- this.setSelected(parseInt(opt.getAttribute('opt-index'), 10), TRANSITION_DURATION);
288
- }
289
- }
290
- else {
291
- this.y += detail.deltaY;
292
- if (Math.abs(detail.velocityY) < 0.05) {
293
- const isScrollingUp = detail.deltaY > 0;
294
- const optHeightFraction = (Math.abs(this.y) % this.optHeight) / this.optHeight;
295
- if (isScrollingUp && optHeightFraction > 0.5) {
296
- this.velocity = Math.abs(this.velocity) * -1;
297
- }
298
- else if (!isScrollingUp && optHeightFraction <= 0.5) {
299
- this.velocity = Math.abs(this.velocity);
300
- }
301
- }
302
- this.decelerate();
303
- }
339
+ this.value = value;
340
+ this.ionChange.emit({ value });
304
341
  }
305
- refresh(forceRefresh, animated) {
306
- var _a;
307
- let min = this.col.options.length - 1;
308
- let max = 0;
309
- const options = this.col.options;
310
- for (let i = 0; i < options.length; i++) {
311
- if (!options[i].disabled) {
312
- min = Math.min(min, i);
313
- max = Math.max(max, i);
314
- }
315
- }
316
- /**
317
- * Only update selected value if column has a
318
- * velocity of 0. If it does not, then the
319
- * column is animating might land on
320
- * a value different than the value at
321
- * selectedIndex
322
- */
323
- if (this.velocity !== 0) {
324
- return;
325
- }
326
- const selectedIndex = clamp(min, (_a = this.col.selectedIndex) !== null && _a !== void 0 ? _a : 0, max);
327
- if (this.col.prevSelected !== selectedIndex || forceRefresh) {
328
- const y = selectedIndex * this.optHeight * -1;
329
- const duration = animated ? TRANSITION_DURATION : 0;
330
- this.velocity = 0;
331
- this.update(y, duration, true);
342
+ /**
343
+ * Sets focus on the scrollable container within the picker column.
344
+ * Use this method instead of the global `pickerColumn.focus()`.
345
+ */
346
+ async setFocus() {
347
+ if (this.scrollEl) {
348
+ this.scrollEl.focus();
332
349
  }
333
350
  }
334
- onDomChange(forceRefresh, animated) {
335
- const colEl = this.optsEl;
336
- if (colEl) {
337
- // DOM READ
338
- // We perfom a DOM read over a rendered item, this needs to happen after the first render or after the the column has changed
339
- this.optHeight = colEl.firstElementChild ? colEl.firstElementChild.clientHeight : 0;
340
- }
341
- this.refresh(forceRefresh, animated);
351
+ get activeItem() {
352
+ const { value } = this;
353
+ const options = Array.from(this.el.querySelectorAll('ion-picker-column-option'));
354
+ return options.find((option) => {
355
+ /**
356
+ * If the whole picker column is disabled, the current value should appear active
357
+ * If the current value item is specifically disabled, it should not appear active
358
+ */
359
+ if (!this.disabled && option.disabled) {
360
+ return false;
361
+ }
362
+ return option.value === value;
363
+ });
342
364
  }
343
365
  render() {
344
- const col = this.col;
366
+ const { color, disabled, isActive, numericInput } = this;
345
367
  const mode = getIonMode(this);
346
- return (h(Host, { key: '06e2ae483a3bcf4fe721ad0c48cded6a1efdc6c0', class: Object.assign({ [mode]: true, 'picker-col': true, 'picker-opts-left': this.col.align === 'left', 'picker-opts-right': this.col.align === 'right' }, getClassMap(col.cssClass)), style: {
347
- 'max-width': this.col.columnWidth,
348
- } }, col.prefix && (h("div", { class: "picker-prefix", style: { width: col.prefixWidth } }, col.prefix)), h("div", { key: '14bea013788d899edf7155eb3cc10f79fe8e4690', class: "picker-opts", style: { maxWidth: col.optionsWidth }, ref: (el) => (this.optsEl = el) }, col.options.map((o, index) => (h("button", { "aria-label": o.ariaLabel, class: { 'picker-opt': true, 'picker-opt-disabled': !!o.disabled }, "opt-index": index }, o.text)))), col.suffix && (h("div", { class: "picker-suffix", style: { width: col.suffixWidth } }, col.suffix))));
368
+ return (h(Host, { key: '4803f7215ee2272e74d76b562553098dc4e2f0bc', class: createColorClasses(color, {
369
+ [mode]: true,
370
+ ['picker-column-active']: isActive,
371
+ ['picker-column-numeric-input']: numericInput,
372
+ ['picker-column-disabled']: disabled,
373
+ }) }, h("slot", { key: 'f486e4903f7818021c8d02e3251300ef0bd64e7f', name: "prefix" }), h("div", { key: '3f0f2c4e77b1bd55b425235fa428c95c793d65ba', class: "picker-opts", tabindex: disabled ? undefined : 0, ref: (el) => {
374
+ this.scrollEl = el;
375
+ } }, h("div", { key: '84a373222f1e2084312de67781bdf72f6b40a9e9', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '948311d8ea52ff1ead1e52c27a2d959164cb9b67', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '7cf18267fda32b762bf20f7213810bc800136a4f', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("slot", { key: 'c068963fd65ea1eb70e2fc3dc8125c6b4deff68d' }), h("div", { key: '63442e50269c3266c907d525e66782c8e753af60', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '4f18258bd9f1822725420208491315b970d19aff', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { key: '5d1d3e37d88872284a756ab63078943f732d2293', class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0")), h("slot", { key: '7c68b8237cc1a3954d174df34aa3ab2797466a38', name: "suffix" })));
349
376
  }
350
377
  get el() { return this; }
351
378
  static get watchers() { return {
352
- "col": ["colChanged"]
353
- }; }
354
- static get style() { return {
355
- ios: IonPickerColumnIosStyle0,
356
- md: IonPickerColumnMdStyle0
379
+ "value": ["valueChange"]
357
380
  }; }
358
- }, [32, "ion-picker-column", {
359
- "col": [16]
381
+ static get style() { return IonPickerColumnStyle0; }
382
+ }, [1, "ion-picker-column", {
383
+ "disabled": [4],
384
+ "value": [1032],
385
+ "color": [513],
386
+ "numericInput": [4, "numeric-input"],
387
+ "isActive": [32],
388
+ "scrollActiveItemIntoView": [64],
389
+ "setValue": [64],
390
+ "setFocus": [64]
360
391
  }, undefined, {
361
- "col": ["colChanged"]
392
+ "value": ["valueChange"]
362
393
  }]);
363
- const PICKER_OPT_SELECTED = 'picker-opt-selected';
364
- const DECELERATION_FRICTION = 0.97;
365
- const MAX_PICKER_SPEED = 90;
366
- const TRANSITION_DURATION = 150;
394
+ const PICKER_ITEM_ACTIVE_CLASS = 'option-active';
367
395
  function defineCustomElement() {
368
396
  if (typeof customElements === "undefined") {
369
397
  return;
@@ -372,10 +400,10 @@ function defineCustomElement() {
372
400
  components.forEach(tagName => { switch (tagName) {
373
401
  case "ion-picker-column":
374
402
  if (!customElements.get(tagName)) {
375
- customElements.define(tagName, PickerColumnCmp);
403
+ customElements.define(tagName, PickerColumn);
376
404
  }
377
405
  break;
378
406
  } });
379
407
  }
380
408
 
381
- export { PickerColumnCmp as P, defineCustomElement as d };
409
+ export { PickerColumn as P, defineCustomElement as d };