@ionic/core 7.6.2-dev.11702924017.193c825c → 7.6.2-dev.11702933439.181fa64e

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 (517) hide show
  1. package/components/action-sheet.js +4 -4
  2. package/components/backdrop.js +12 -0
  3. package/components/button-active.js +1 -1
  4. package/components/button.js +2 -2
  5. package/components/data.js +1 -1
  6. package/components/gesture-controller.js +1 -1
  7. package/components/ion-content.js +1 -1
  8. package/components/ion-datetime.js +64 -40
  9. package/components/ion-picker-column-internal.d.ts +11 -0
  10. package/components/ion-picker-column-internal.js +9 -0
  11. package/components/ion-picker-column.js +2 -2
  12. package/components/{ion-picker-legacy.d.ts → ion-picker-internal.d.ts} +4 -4
  13. package/components/ion-picker-internal.js +9 -0
  14. package/components/ion-picker.js +309 -1
  15. package/components/overlays.js +4 -11
  16. package/components/picker-column-internal.js +390 -0
  17. package/components/picker-column.js +322 -351
  18. package/components/{picker.js → picker-internal.js} +22 -29
  19. package/dist/cjs/{app-globals-7def22c8.js → app-globals-cd7be47d.js} +1 -1
  20. package/dist/cjs/{button-active-466dfc8a.js → button-active-21b0334e.js} +3 -3
  21. package/dist/cjs/{data-e2bf21de.js → data-a5109f09.js} +1 -1
  22. package/dist/cjs/{gesture-controller-9436f482.js → gesture-controller-c40c045a.js} +0 -1
  23. package/dist/cjs/{index-50dcfe2f.js → index-1699be56.js} +24 -16
  24. package/dist/cjs/{index-3b012034.js → index-4e68b270.js} +1 -1
  25. package/dist/cjs/{index-17ab7794.js → index-862c03dc.js} +3 -3
  26. package/dist/cjs/{index-ee07ed59.js → index-d1b59ffa.js} +1 -1
  27. package/dist/cjs/index.cjs.js +9 -9
  28. package/dist/cjs/ion-accordion_2.cjs.entry.js +3 -3
  29. package/dist/cjs/ion-action-sheet.cjs.entry.js +10 -10
  30. package/dist/cjs/ion-alert.cjs.entry.js +6 -6
  31. package/dist/cjs/ion-app_8.cjs.entry.js +6 -6
  32. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
  33. package/dist/cjs/ion-back-button.cjs.entry.js +3 -3
  34. package/dist/cjs/ion-backdrop.cjs.entry.js +14 -2
  35. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +3 -3
  36. package/dist/cjs/ion-button_2.cjs.entry.js +4 -4
  37. package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
  38. package/dist/cjs/ion-checkbox.cjs.entry.js +2 -2
  39. package/dist/cjs/ion-chip.cjs.entry.js +2 -2
  40. package/dist/cjs/ion-col_3.cjs.entry.js +2 -2
  41. package/dist/cjs/ion-datetime-button.cjs.entry.js +3 -3
  42. package/dist/cjs/ion-datetime_3.cjs.entry.js +59 -39
  43. package/dist/cjs/ion-fab_3.cjs.entry.js +3 -3
  44. package/dist/cjs/ion-img.cjs.entry.js +2 -2
  45. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +2 -2
  46. package/dist/cjs/ion-input.cjs.entry.js +3 -3
  47. package/dist/cjs/ion-item-option_3.cjs.entry.js +3 -3
  48. package/dist/cjs/ion-item_8.cjs.entry.js +3 -3
  49. package/dist/cjs/ion-loading.cjs.entry.js +3 -4
  50. package/dist/cjs/ion-menu_3.cjs.entry.js +7 -7
  51. package/dist/cjs/ion-modal.cjs.entry.js +6 -6
  52. package/dist/cjs/ion-nav_2.cjs.entry.js +4 -4
  53. package/dist/cjs/{ion-picker-column.cjs.entry.js → ion-picker-column-internal.cjs.entry.js} +89 -106
  54. package/dist/cjs/{ion-picker.cjs.entry.js → ion-picker-internal.cjs.entry.js} +20 -27
  55. package/dist/cjs/ion-popover.cjs.entry.js +4 -5
  56. package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -2
  57. package/dist/cjs/ion-radio_2.cjs.entry.js +2 -2
  58. package/dist/cjs/ion-range.cjs.entry.js +3 -3
  59. package/dist/cjs/ion-refresher_2.cjs.entry.js +6 -6
  60. package/dist/cjs/ion-reorder_2.cjs.entry.js +4 -4
  61. package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
  62. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  63. package/dist/cjs/ion-searchbar.cjs.entry.js +3 -3
  64. package/dist/cjs/ion-segment_2.cjs.entry.js +3 -3
  65. package/dist/cjs/ion-select_3.cjs.entry.js +4 -5
  66. package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
  67. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  68. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +2 -2
  69. package/dist/cjs/ion-tab_2.cjs.entry.js +1 -1
  70. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  71. package/dist/cjs/ion-textarea.cjs.entry.js +2 -2
  72. package/dist/cjs/ion-toast.cjs.entry.js +5 -5
  73. package/dist/cjs/ion-toggle.cjs.entry.js +4 -4
  74. package/dist/cjs/{ionic-global-a4edbf03.js → ionic-global-592bef9e.js} +1 -1
  75. package/dist/cjs/ionic.cjs.js +5 -5
  76. package/dist/cjs/{ios.transition-b5353f3e.js → ios.transition-1ac35be5.js} +2 -2
  77. package/dist/cjs/loader.cjs.js +4 -4
  78. package/dist/cjs/{md.transition-67157dd9.js → md.transition-df2947e8.js} +2 -2
  79. package/dist/cjs/{overlays-7773cbe1.js → overlays-e10edfa0.js} +5 -12
  80. package/dist/cjs/{status-tap-b5d77c08.js → status-tap-23a3173f.js} +1 -1
  81. package/dist/cjs/{swipe-back-b8f2330b.js → swipe-back-2a858bbd.js} +2 -2
  82. package/dist/collection/collection-manifest.json +7 -8
  83. package/dist/collection/components/accordion-group/accordion-group.js +6 -4
  84. package/dist/collection/components/action-sheet/action-sheet.ios.css +2 -9
  85. package/dist/collection/components/action-sheet/action-sheet.js +8 -12
  86. package/dist/collection/components/action-sheet/action-sheet.md.css +2 -9
  87. package/dist/collection/components/action-sheet/test/basic/action-sheet-rendering.e2e.js +0 -20
  88. package/dist/collection/components/alert/alert.js +6 -10
  89. package/dist/collection/components/app/app.js +3 -2
  90. package/dist/collection/components/backdrop/backdrop.js +12 -0
  91. package/dist/collection/components/button/button.ios.css +1 -1
  92. package/dist/collection/components/button/button.md.css +1 -1
  93. package/dist/collection/components/button/test/wrap/button.e2e.js +24 -12
  94. package/dist/collection/components/content/content.css +4 -0
  95. package/dist/collection/components/content/content.js +24 -40
  96. package/dist/collection/components/datetime/datetime.ios.css +38 -91
  97. package/dist/collection/components/datetime/datetime.js +45 -30
  98. package/dist/collection/components/datetime/datetime.md.css +38 -96
  99. package/dist/collection/components/datetime/test/a11y/datetime.e2e.js +1 -1
  100. package/dist/collection/components/datetime/test/a11y/datetime.spec.js +9 -6
  101. package/dist/collection/components/datetime/test/basic/datetime.e2e.js +0 -10
  102. package/dist/collection/components/datetime/test/datetime.e2e.js +2 -2
  103. package/dist/collection/components/datetime/test/disabled/datetime.spec.js +4 -4
  104. package/dist/collection/components/datetime/test/locale/datetime.e2e.js +2 -2
  105. package/dist/collection/components/datetime/test/minmax/datetime.e2e.js +6 -6
  106. package/dist/collection/components/datetime/test/month-year-picker/datetime.e2e.js +1 -1
  107. package/dist/collection/components/datetime/test/prefer-wheel/datetime.e2e.js +41 -43
  108. package/dist/collection/components/datetime/test/presentation/datetime.e2e.js +1 -1
  109. package/dist/collection/components/datetime/test/readonly/datetime.e2e.js +4 -4
  110. package/dist/collection/components/datetime/test/values/datetime.e2e.js +12 -15
  111. package/dist/collection/components/datetime/utils/data.js +1 -1
  112. package/dist/collection/components/icon/test/dir/heart-broken.svg +0 -0
  113. package/dist/collection/components/item/test/icons/heart-broken.svg +0 -0
  114. package/dist/collection/components/item-sliding/item-sliding.js +3 -5
  115. package/dist/collection/components/loading/loading.js +6 -10
  116. package/dist/collection/components/menu/menu.js +15 -10
  117. package/dist/collection/components/modal/modal.js +9 -12
  118. package/dist/collection/components/nav/nav.js +114 -190
  119. package/dist/collection/components/picker/picker.ios.css +211 -112
  120. package/dist/collection/components/picker/picker.js +738 -472
  121. package/dist/collection/components/picker/picker.md.css +198 -108
  122. package/dist/collection/components/picker/test/basic/picker.e2e.js +13 -99
  123. package/dist/collection/components/{picker-legacy → picker}/test/is-open/picker.e2e.js +4 -4
  124. package/dist/collection/components/{picker-legacy → picker}/test/picker-id.spec.js +5 -5
  125. package/dist/collection/components/{picker-legacy → picker}/test/trigger/picker.e2e.js +1 -1
  126. package/dist/collection/components/picker-column/picker-column.js +335 -497
  127. package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column-aria.spec.js +3 -3
  128. package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column-dynamic.spec.js +2 -2
  129. package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column.spec.js +2 -2
  130. package/dist/collection/components/{picker-legacy-column → picker-column}/test/standalone/picker-column.e2e.js +3 -3
  131. package/dist/collection/components/{picker-column-option/picker-column-option.md.css → picker-column-internal/picker-column-internal.ios.css} +53 -6
  132. package/dist/collection/components/picker-column-internal/picker-column-internal.js +566 -0
  133. package/dist/collection/components/{picker-column/picker-column.css → picker-column-internal/picker-column-internal.md.css} +83 -96
  134. package/dist/collection/components/{picker-column/test/basic/picker-column.e2e.js → picker-column-internal/test/basic/picker-column-internal.e2e.js} +8 -8
  135. package/dist/collection/components/picker-column-internal/test/disabled/picker-column-internal.e2e.js +162 -0
  136. package/dist/collection/components/{picker-legacy/picker.md.css → picker-internal/picker-internal.ios.css} +100 -192
  137. package/dist/collection/components/picker-internal/picker-internal.js +544 -0
  138. package/dist/collection/components/{picker-legacy/picker.ios.css → picker-internal/picker-internal.md.css} +98 -207
  139. package/dist/collection/components/{picker/test/a11y/picker.e2e.js → picker-internal/test/a11y/picker-internal.e2e.js} +2 -2
  140. package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +118 -0
  141. package/dist/collection/components/{picker/test/keyboard-entry/picker.e2e.js → picker-internal/test/keyboard-entry/picker-internal.e2e.js} +32 -63
  142. package/dist/collection/components/popover/popover.js +18 -21
  143. package/dist/collection/components/radio/radio.js +6 -4
  144. package/dist/collection/components/refresher/refresher.js +3 -0
  145. package/dist/collection/components/reorder-group/reorder-group.js +3 -5
  146. package/dist/collection/components/ripple-effect/ripple-effect.js +6 -10
  147. package/dist/collection/components/router/router.js +12 -14
  148. package/dist/collection/components/router-outlet/router-outlet.js +21 -14
  149. package/dist/collection/components/select/select.js +3 -5
  150. package/dist/collection/components/tabs/tabs.js +9 -12
  151. package/dist/collection/components/toast/toast.js +6 -10
  152. package/dist/collection/utils/gesture/button-active.js +1 -1
  153. package/dist/collection/utils/gesture/gesture-controller.js +1 -1
  154. package/dist/collection/utils/overlays.js +4 -11
  155. package/dist/docs.d.ts +1 -21
  156. package/dist/docs.json +786 -1029
  157. package/dist/esm/{app-globals-8c62bec2.js → app-globals-736d53f6.js} +1 -1
  158. package/dist/esm/{button-active-2758ff14.js → button-active-7836d6bf.js} +3 -3
  159. package/dist/esm/{data-6a31d701.js → data-775093f5.js} +1 -1
  160. package/dist/esm/{gesture-controller-314a54f6.js → gesture-controller-1bf57181.js} +1 -1
  161. package/dist/esm/{index-39782642.js → index-2cf77112.js} +2 -2
  162. package/dist/esm/{index-4743453d.js → index-6b0e432e.js} +3 -3
  163. package/dist/esm/{index-b7d870cf.js → index-78d39194.js} +24 -16
  164. package/dist/esm/{index-1193f005.js → index-c4ebf628.js} +1 -1
  165. package/dist/esm/index.js +9 -9
  166. package/dist/esm/ion-accordion_2.entry.js +3 -3
  167. package/dist/esm/ion-action-sheet.entry.js +10 -10
  168. package/dist/esm/ion-alert.entry.js +6 -6
  169. package/dist/esm/ion-app_8.entry.js +6 -6
  170. package/dist/esm/ion-avatar_3.entry.js +2 -2
  171. package/dist/esm/ion-back-button.entry.js +3 -3
  172. package/dist/esm/ion-backdrop.entry.js +14 -2
  173. package/dist/esm/ion-breadcrumb_2.entry.js +3 -3
  174. package/dist/esm/ion-button_2.entry.js +4 -4
  175. package/dist/esm/ion-card_5.entry.js +2 -2
  176. package/dist/esm/ion-checkbox.entry.js +2 -2
  177. package/dist/esm/ion-chip.entry.js +2 -2
  178. package/dist/esm/ion-col_3.entry.js +2 -2
  179. package/dist/esm/ion-datetime-button.entry.js +3 -3
  180. package/dist/esm/ion-datetime_3.entry.js +58 -38
  181. package/dist/esm/ion-fab_3.entry.js +3 -3
  182. package/dist/esm/ion-img.entry.js +2 -2
  183. package/dist/esm/ion-infinite-scroll_2.entry.js +2 -2
  184. package/dist/esm/ion-input.entry.js +3 -3
  185. package/dist/esm/ion-item-option_3.entry.js +3 -3
  186. package/dist/esm/ion-item_8.entry.js +3 -3
  187. package/dist/esm/ion-loading.entry.js +3 -4
  188. package/dist/esm/ion-menu_3.entry.js +7 -7
  189. package/dist/esm/ion-modal.entry.js +6 -6
  190. package/dist/esm/ion-nav_2.entry.js +4 -4
  191. package/dist/esm/{ion-picker-column.entry.js → ion-picker-column-internal.entry.js} +89 -106
  192. package/dist/esm/{ion-picker.entry.js → ion-picker-internal.entry.js} +20 -27
  193. package/dist/esm/ion-popover.entry.js +4 -5
  194. package/dist/esm/ion-progress-bar.entry.js +2 -2
  195. package/dist/esm/ion-radio_2.entry.js +2 -2
  196. package/dist/esm/ion-range.entry.js +3 -3
  197. package/dist/esm/ion-refresher_2.entry.js +6 -6
  198. package/dist/esm/ion-reorder_2.entry.js +4 -4
  199. package/dist/esm/ion-ripple-effect.entry.js +2 -2
  200. package/dist/esm/ion-route_4.entry.js +2 -2
  201. package/dist/esm/ion-searchbar.entry.js +3 -3
  202. package/dist/esm/ion-segment_2.entry.js +3 -3
  203. package/dist/esm/ion-select_3.entry.js +4 -5
  204. package/dist/esm/ion-spinner.entry.js +2 -2
  205. package/dist/esm/ion-split-pane.entry.js +2 -2
  206. package/dist/esm/ion-tab-bar_2.entry.js +2 -2
  207. package/dist/esm/ion-tab_2.entry.js +1 -1
  208. package/dist/esm/ion-text.entry.js +2 -2
  209. package/dist/esm/ion-textarea.entry.js +2 -2
  210. package/dist/esm/ion-toast.entry.js +5 -5
  211. package/dist/esm/ion-toggle.entry.js +4 -4
  212. package/dist/esm/{ionic-global-1f99b929.js → ionic-global-6270e632.js} +1 -1
  213. package/dist/esm/ionic.js +6 -6
  214. package/dist/esm/{ios.transition-3376ccb2.js → ios.transition-cfb6d320.js} +2 -2
  215. package/dist/esm/loader.js +5 -5
  216. package/dist/esm/{md.transition-f992779f.js → md.transition-77e73830.js} +2 -2
  217. package/dist/esm/{overlays-94dac1cb.js → overlays-55cf1508.js} +5 -12
  218. package/dist/esm/polyfills/core-js.js +0 -0
  219. package/dist/esm/polyfills/dom.js +0 -0
  220. package/dist/esm/polyfills/es5-html-element.js +0 -0
  221. package/dist/esm/polyfills/index.js +0 -0
  222. package/dist/esm/polyfills/system.js +0 -0
  223. package/dist/esm/{status-tap-16fd8f3d.js → status-tap-92380b33.js} +1 -1
  224. package/dist/esm/{swipe-back-a8ca7f93.js → swipe-back-a6f386fc.js} +2 -2
  225. package/dist/esm-es5/app-globals-736d53f6.js +4 -0
  226. package/dist/esm-es5/button-active-7836d6bf.js +4 -0
  227. package/dist/esm-es5/{gesture-controller-314a54f6.js → gesture-controller-1bf57181.js} +1 -1
  228. package/dist/esm-es5/{index-39782642.js → index-2cf77112.js} +1 -1
  229. package/dist/esm-es5/{index-4743453d.js → index-6b0e432e.js} +1 -1
  230. package/dist/esm-es5/index-78d39194.js +5 -0
  231. package/dist/esm-es5/{index-1193f005.js → index-c4ebf628.js} +1 -1
  232. package/dist/esm-es5/index.js +1 -1
  233. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  234. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  235. package/dist/esm-es5/ion-alert.entry.js +1 -1
  236. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  237. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  238. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  239. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  240. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  241. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  242. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  243. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  244. package/dist/esm-es5/ion-chip.entry.js +1 -1
  245. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  246. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  247. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  248. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  249. package/dist/esm-es5/ion-img.entry.js +1 -1
  250. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  251. package/dist/esm-es5/ion-input.entry.js +1 -1
  252. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  253. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  254. package/dist/esm-es5/ion-loading.entry.js +1 -1
  255. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  256. package/dist/esm-es5/ion-modal.entry.js +1 -1
  257. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  258. package/dist/esm-es5/ion-picker-column-internal.entry.js +4 -0
  259. package/dist/esm-es5/ion-picker-internal.entry.js +4 -0
  260. package/dist/esm-es5/ion-popover.entry.js +1 -1
  261. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  262. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  263. package/dist/esm-es5/ion-range.entry.js +1 -1
  264. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  265. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  266. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  267. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  268. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  269. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  270. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  271. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  272. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  273. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  274. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  275. package/dist/esm-es5/ion-text.entry.js +1 -1
  276. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  277. package/dist/esm-es5/ion-toast.entry.js +1 -1
  278. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  279. package/dist/esm-es5/{ionic-global-1f99b929.js → ionic-global-6270e632.js} +1 -1
  280. package/dist/esm-es5/ionic.js +1 -1
  281. package/dist/esm-es5/{ios.transition-3376ccb2.js → ios.transition-cfb6d320.js} +1 -1
  282. package/dist/esm-es5/loader.js +1 -1
  283. package/dist/esm-es5/md.transition-77e73830.js +4 -0
  284. package/dist/esm-es5/overlays-55cf1508.js +4 -0
  285. package/dist/esm-es5/{status-tap-16fd8f3d.js → status-tap-92380b33.js} +1 -1
  286. package/dist/esm-es5/swipe-back-a6f386fc.js +4 -0
  287. package/dist/html.html-data.json +13 -152
  288. package/dist/ionic/index.esm.js +1 -1
  289. package/dist/ionic/ionic.esm.js +1 -1
  290. package/dist/ionic/ionic.js +1 -1
  291. package/dist/ionic/{p-a074be82.system.js → p-0029c932.system.js} +1 -1
  292. package/dist/ionic/{p-529b24fb.entry.js → p-00afbe80.entry.js} +1 -1
  293. package/dist/ionic/p-026707ab.js +4 -0
  294. package/dist/ionic/{p-4981ea0a.system.entry.js → p-0a617e59.system.entry.js} +1 -1
  295. package/dist/ionic/{p-db05ecb6.system.entry.js → p-0f244e47.system.entry.js} +1 -1
  296. package/dist/ionic/p-106e9ce9.entry.js +4 -0
  297. package/dist/ionic/{p-52cfafe9.system.js → p-10f2a748.system.js} +1 -1
  298. package/dist/ionic/{p-3313c481.entry.js → p-12a41623.entry.js} +1 -1
  299. package/dist/ionic/{p-0dfa4ab4.system.entry.js → p-149c8c11.system.entry.js} +1 -1
  300. package/dist/ionic/{p-38531958.system.entry.js → p-1ccbe3ee.system.entry.js} +1 -1
  301. package/dist/ionic/{p-ba5d9e27.entry.js → p-220ba811.entry.js} +1 -1
  302. package/dist/ionic/{p-806a9810.entry.js → p-22c7b943.entry.js} +1 -1
  303. package/dist/ionic/p-22e959cb.entry.js +4 -0
  304. package/dist/ionic/{p-13d4dfe7.entry.js → p-26af79a8.entry.js} +1 -1
  305. package/dist/ionic/{p-e33d1ebc.entry.js → p-26afb1cb.entry.js} +1 -1
  306. package/dist/ionic/{p-9f94c72e.system.js → p-28a04f26.system.js} +1 -1
  307. package/dist/ionic/p-2bdd791d.system.entry.js +4 -0
  308. package/dist/ionic/p-2c7cce0a.entry.js +4 -0
  309. package/dist/ionic/{p-25312768.system.entry.js → p-2c7ee8fe.system.entry.js} +1 -1
  310. package/dist/ionic/{p-3e1e14d9.system.js → p-31b2326e.system.js} +1 -1
  311. package/dist/ionic/{p-4685218a.system.entry.js → p-322e9039.system.entry.js} +1 -1
  312. package/dist/ionic/{p-abd5d0d5.system.entry.js → p-336ea079.system.entry.js} +1 -1
  313. package/dist/ionic/{p-d2634efe.system.entry.js → p-33a569df.system.entry.js} +1 -1
  314. package/dist/ionic/p-35ce400e.system.js +4 -0
  315. package/dist/ionic/{p-bb3fd397.entry.js → p-36704958.entry.js} +1 -1
  316. package/dist/ionic/p-38be1c0f.system.entry.js +4 -0
  317. package/dist/ionic/{p-0509fd34.js → p-394865a5.js} +1 -1
  318. package/dist/ionic/{p-e2737fef.system.entry.js → p-39d6d212.system.entry.js} +1 -1
  319. package/dist/ionic/{p-6e4c7340.system.entry.js → p-3d0221e5.system.entry.js} +1 -1
  320. package/dist/ionic/{p-c01803db.entry.js → p-3dd34db9.entry.js} +1 -1
  321. package/dist/ionic/{p-0aa78a8d.system.js → p-3ef606fa.system.js} +1 -1
  322. package/dist/ionic/p-4225fa09.js +4 -0
  323. package/dist/ionic/{p-332ea4d3.system.entry.js → p-42eaba59.system.entry.js} +1 -1
  324. package/dist/ionic/p-45e296d3.system.entry.js +4 -0
  325. package/dist/ionic/{p-ed8402d6.entry.js → p-478c4f2e.entry.js} +1 -1
  326. package/dist/ionic/{p-44dc52e5.entry.js → p-47c90ee4.entry.js} +1 -1
  327. package/dist/ionic/{p-84b567a6.entry.js → p-494983ab.entry.js} +1 -1
  328. package/dist/ionic/{p-26c4bf85.entry.js → p-4b3d1d68.entry.js} +1 -1
  329. package/dist/ionic/{p-cd574dfa.js → p-4b6089e6.js} +1 -1
  330. package/dist/ionic/{p-9a68d8ef.system.js → p-4fbc0c3b.system.js} +1 -1
  331. package/dist/ionic/{p-c08fe2c0.entry.js → p-532acc35.entry.js} +1 -1
  332. package/dist/ionic/p-586de692.system.entry.js +4 -0
  333. package/dist/ionic/{p-69641343.system.entry.js → p-5d5d621a.system.entry.js} +1 -1
  334. package/dist/ionic/p-5eea0433.system.entry.js +4 -0
  335. package/dist/ionic/p-60a574c1.entry.js +4 -0
  336. package/dist/ionic/{p-0ebc87b7.system.entry.js → p-61cdea9d.system.entry.js} +1 -1
  337. package/dist/ionic/p-6a6477b2.js +4 -0
  338. package/dist/ionic/{p-19d9ceb8.system.js → p-6d74d882.system.js} +1 -1
  339. package/dist/ionic/p-6e58bc9b.system.js +4 -0
  340. package/dist/ionic/{p-642ac927.entry.js → p-6eb35f60.entry.js} +1 -1
  341. package/dist/ionic/{p-04377cfa.js → p-70dd9d79.js} +1 -1
  342. package/dist/ionic/{p-cb8dff22.system.entry.js → p-72ad8f87.system.entry.js} +1 -1
  343. package/dist/ionic/p-73f47fce.system.entry.js +4 -0
  344. package/dist/ionic/{p-92bfb607.entry.js → p-754bcac2.entry.js} +1 -1
  345. package/dist/ionic/p-76cab6f8.js +4 -0
  346. package/dist/ionic/p-7c057cbc.entry.js +4 -0
  347. package/dist/ionic/{p-cf53213c.entry.js → p-7c7ffd26.entry.js} +1 -1
  348. package/dist/ionic/p-7e07c38f.js +5 -0
  349. package/dist/ionic/{p-f0504446.system.entry.js → p-7fb31fb2.system.entry.js} +1 -1
  350. package/dist/ionic/{p-b7058a0e.system.entry.js → p-82e7b12b.system.entry.js} +1 -1
  351. package/dist/ionic/{p-0550f802.entry.js → p-8345c94e.entry.js} +1 -1
  352. package/dist/ionic/p-86b88102.system.entry.js +4 -0
  353. package/dist/ionic/p-8ac48377.system.entry.js +4 -0
  354. package/dist/ionic/{p-1ab2642a.system.js → p-8f1e7b4c.system.js} +1 -1
  355. package/dist/ionic/{p-beed2450.system.entry.js → p-909a997a.system.entry.js} +1 -1
  356. package/dist/ionic/{p-20e0e75d.system.entry.js → p-93c75152.system.entry.js} +1 -1
  357. package/dist/ionic/{p-4793c14c.system.entry.js → p-990912bd.system.entry.js} +1 -1
  358. package/dist/ionic/{p-803efb5d.entry.js → p-9b837aa0.entry.js} +1 -1
  359. package/dist/ionic/p-9e098902.entry.js +4 -0
  360. package/dist/ionic/{p-beeed22c.system.entry.js → p-a0f9488c.system.entry.js} +1 -1
  361. package/dist/ionic/{p-5ff211d0.system.entry.js → p-a13d22c3.system.entry.js} +1 -1
  362. package/dist/ionic/{p-97174c1e.js → p-a2cd14c6.js} +1 -1
  363. package/dist/ionic/p-a37e738b.system.js +4 -0
  364. package/dist/ionic/{p-6855f26a.entry.js → p-a610605e.entry.js} +1 -1
  365. package/dist/ionic/{p-0cc80201.entry.js → p-a692f502.entry.js} +1 -1
  366. package/dist/ionic/{p-964dcdb2.system.entry.js → p-a74e7199.system.entry.js} +1 -1
  367. package/dist/ionic/{p-11bf2ad0.system.entry.js → p-aa4e59fb.system.entry.js} +1 -1
  368. package/dist/ionic/{p-bec6ae40.entry.js → p-aa75cca3.entry.js} +1 -1
  369. package/dist/ionic/p-abcd194b.system.entry.js +4 -0
  370. package/dist/ionic/{p-b2b5d761.entry.js → p-b3931df6.entry.js} +1 -1
  371. package/dist/ionic/{p-a3013394.entry.js → p-b62c0f2e.entry.js} +1 -1
  372. package/dist/ionic/{p-0e908476.system.entry.js → p-b710b39c.system.entry.js} +1 -1
  373. package/dist/ionic/p-b74c1510.entry.js +4 -0
  374. package/dist/ionic/{p-950c05ad.entry.js → p-b794b87a.entry.js} +1 -1
  375. package/dist/ionic/{p-9b97df10.js → p-bb3615f7.js} +1 -1
  376. package/dist/ionic/{p-d93eed83.system.entry.js → p-be650493.system.entry.js} +1 -1
  377. package/dist/ionic/{p-42925096.system.entry.js → p-c2e60d23.system.entry.js} +1 -1
  378. package/dist/ionic/{p-1501b945.system.js → p-c491c7ce.system.js} +1 -1
  379. package/dist/ionic/{p-7dcf795f.entry.js → p-c661d124.entry.js} +1 -1
  380. package/dist/ionic/{p-5ad1fe3b.system.js → p-c66b0166.system.js} +1 -1
  381. package/dist/ionic/{p-20d469d0.system.js → p-c7c8429a.system.js} +1 -1
  382. package/dist/ionic/{p-f6cae0b2.system.entry.js → p-c8237c3c.system.entry.js} +1 -1
  383. package/dist/ionic/{p-1b14f0f8.entry.js → p-ca2ea280.entry.js} +1 -1
  384. package/dist/ionic/{p-3b434dee.system.entry.js → p-ca6fb31a.system.entry.js} +1 -1
  385. package/dist/ionic/{p-928ee57a.entry.js → p-ca730236.entry.js} +1 -1
  386. package/dist/ionic/p-cd9c4ffe.system.entry.js +4 -0
  387. package/dist/ionic/{p-60959b71.entry.js → p-ce7ef475.entry.js} +1 -1
  388. package/dist/ionic/{p-61e4d3ec.entry.js → p-cea29c88.entry.js} +1 -1
  389. package/dist/ionic/{p-799da666.entry.js → p-d3f2db71.entry.js} +1 -1
  390. package/dist/ionic/p-d6f34fe9.entry.js +4 -0
  391. package/dist/ionic/{p-6e0539ea.system.entry.js → p-d7da1178.system.entry.js} +1 -1
  392. package/dist/ionic/{p-20755eb0.entry.js → p-d9b88ba6.entry.js} +1 -1
  393. package/dist/ionic/{p-41208f54.system.entry.js → p-dbe4f2bc.system.entry.js} +1 -1
  394. package/dist/ionic/{p-9fb45814.entry.js → p-de161adf.entry.js} +1 -1
  395. package/dist/ionic/p-de3aa772.entry.js +4 -0
  396. package/dist/ionic/{p-da666998.system.entry.js → p-e292e49b.system.entry.js} +1 -1
  397. package/dist/ionic/{p-b8a9e195.system.entry.js → p-e3f8c30f.system.entry.js} +1 -1
  398. package/dist/ionic/{p-ae4b7df8.entry.js → p-e4d320f7.entry.js} +1 -1
  399. package/dist/ionic/{p-3dc1b0f9.entry.js → p-e579a727.entry.js} +1 -1
  400. package/dist/ionic/{p-10339dcc.entry.js → p-e5a6f367.entry.js} +1 -1
  401. package/dist/ionic/{p-4489dd20.system.entry.js → p-e6327ff5.system.entry.js} +1 -1
  402. package/dist/ionic/{p-7fae5c36.js → p-e89d7c8a.js} +1 -1
  403. package/dist/ionic/{p-3af5faf8.system.entry.js → p-ec49bd1f.system.entry.js} +1 -1
  404. package/dist/ionic/{p-3dfc522b.entry.js → p-ed3b7404.entry.js} +1 -1
  405. package/dist/ionic/{p-19c379da.system.entry.js → p-ef2445a2.system.entry.js} +1 -1
  406. package/dist/ionic/{p-a49931aa.system.js → p-f30eb152.system.js} +1 -1
  407. package/dist/ionic/{p-44a56556.js → p-f501137d.js} +1 -1
  408. package/dist/ionic/{p-8ededb41.js → p-f5d2dc9b.js} +1 -1
  409. package/dist/ionic/{p-043aa6cc.system.entry.js → p-f7cb002f.system.entry.js} +1 -1
  410. package/dist/ionic/p-ffb54fd5.entry.js +4 -0
  411. package/dist/types/components/action-sheet/action-sheet-interface.d.ts +0 -1
  412. package/dist/types/components/backdrop/backdrop.d.ts +3 -0
  413. package/dist/types/components/datetime/datetime.d.ts +1 -0
  414. package/dist/types/components/datetime/utils/data.d.ts +7 -11
  415. package/dist/types/components/menu/menu.d.ts +1 -1
  416. package/dist/types/components/picker/picker.d.ts +129 -75
  417. package/dist/types/components/picker-column/picker-column.d.ts +39 -99
  418. package/dist/types/components/picker-column-internal/picker-column-internal-interfaces.d.ts +5 -0
  419. package/dist/types/components/picker-column-internal/picker-column-internal.d.ts +102 -0
  420. package/dist/types/components/picker-internal/picker-internal-interfaces.d.ts +8 -0
  421. package/dist/types/components/picker-internal/picker-internal.d.ts +102 -0
  422. package/dist/types/components/refresher/refresher.d.ts +3 -0
  423. package/dist/types/components.d.ts +130 -154
  424. package/dist/types/interface.d.ts +1 -1
  425. package/dist/types/utils/config.d.ts +2 -2
  426. package/dist/types/utils/gesture/gesture-controller.d.ts +0 -1
  427. package/dist/types/utils/overlays.d.ts +2 -5
  428. package/dist/types/utils/test/playwright/page/utils/goto.d.ts +1 -1
  429. package/hydrate/index.d.ts +1 -1
  430. package/hydrate/index.js +2676 -1082
  431. package/package.json +31 -29
  432. package/components/ion-picker-column-option.d.ts +0 -11
  433. package/components/ion-picker-column-option.js +0 -9
  434. package/components/ion-picker-legacy-column.d.ts +0 -11
  435. package/components/ion-picker-legacy-column.js +0 -9
  436. package/components/ion-picker-legacy.js +0 -309
  437. package/components/picker-column-option.js +0 -122
  438. package/components/picker-column2.js +0 -379
  439. package/dist/cjs/ion-picker-column-option.cjs.entry.js +0 -104
  440. package/dist/collection/components/picker/test/custom/picker.e2e.js +0 -85
  441. package/dist/collection/components/picker-column/test/disabled/picker-column.e2e.js +0 -91
  442. package/dist/collection/components/picker-column/test/slots/picker-column.e2e.js +0 -39
  443. package/dist/collection/components/picker-column-option/picker-column-option.ios.css +0 -87
  444. package/dist/collection/components/picker-column-option/picker-column-option.js +0 -173
  445. package/dist/collection/components/picker-column-option/test/a11y/picker-column-option.e2e.js +0 -18
  446. package/dist/collection/components/picker-column-option/test/basic/picker-column-option.e2e.js +0 -37
  447. package/dist/collection/components/picker-column-option/test/picker-column-option.spec.js +0 -29
  448. package/dist/collection/components/picker-legacy/picker.js +0 -817
  449. package/dist/collection/components/picker-legacy/test/basic/picker.e2e.js +0 -25
  450. package/dist/collection/components/picker-legacy-column/picker-column.js +0 -419
  451. package/dist/collection/utils/test/overlays/overlays-scroll-blocking.spec.js +0 -65
  452. package/dist/esm/ion-picker-column-option.entry.js +0 -100
  453. package/dist/esm-es5/app-globals-8c62bec2.js +0 -4
  454. package/dist/esm-es5/button-active-2758ff14.js +0 -4
  455. package/dist/esm-es5/index-b7d870cf.js +0 -5
  456. package/dist/esm-es5/ion-picker-column-option.entry.js +0 -4
  457. package/dist/esm-es5/ion-picker-column.entry.js +0 -4
  458. package/dist/esm-es5/ion-picker.entry.js +0 -4
  459. package/dist/esm-es5/md.transition-f992779f.js +0 -4
  460. package/dist/esm-es5/overlays-94dac1cb.js +0 -4
  461. package/dist/esm-es5/swipe-back-a8ca7f93.js +0 -4
  462. package/dist/ionic/p-26ff1180.entry.js +0 -4
  463. package/dist/ionic/p-290d3fe9.js +0 -5
  464. package/dist/ionic/p-2f449cdf.system.entry.js +0 -4
  465. package/dist/ionic/p-3717e641.system.entry.js +0 -4
  466. package/dist/ionic/p-51abefb7.system.js +0 -4
  467. package/dist/ionic/p-71483cbb.entry.js +0 -4
  468. package/dist/ionic/p-73fbf18d.entry.js +0 -4
  469. package/dist/ionic/p-75a3e35b.entry.js +0 -4
  470. package/dist/ionic/p-77d78f68.system.entry.js +0 -4
  471. package/dist/ionic/p-7c0d778d.system.js +0 -4
  472. package/dist/ionic/p-80ad9792.system.js +0 -4
  473. package/dist/ionic/p-85a67421.system.entry.js +0 -4
  474. package/dist/ionic/p-8ad6d643.entry.js +0 -4
  475. package/dist/ionic/p-9164a09d.entry.js +0 -4
  476. package/dist/ionic/p-98f35d98.js +0 -4
  477. package/dist/ionic/p-a06501e3.entry.js +0 -4
  478. package/dist/ionic/p-a1bd098f.system.entry.js +0 -4
  479. package/dist/ionic/p-a41eaff2.system.entry.js +0 -4
  480. package/dist/ionic/p-a60a1ce5.js +0 -4
  481. package/dist/ionic/p-c001b24f.entry.js +0 -4
  482. package/dist/ionic/p-c19bf524.entry.js +0 -4
  483. package/dist/ionic/p-c6176849.system.entry.js +0 -4
  484. package/dist/ionic/p-cf350317.entry.js +0 -4
  485. package/dist/ionic/p-d3525765.js +0 -4
  486. package/dist/ionic/p-dc63dccb.system.entry.js +0 -4
  487. package/dist/ionic/p-e2903cdc.system.entry.js +0 -4
  488. package/dist/ionic/p-f0717d98.js +0 -4
  489. package/dist/ionic/p-f0dea903.system.entry.js +0 -4
  490. package/dist/ionic/p-f60807dd.system.entry.js +0 -4
  491. package/dist/ionic/p-f8c5008f.entry.js +0 -4
  492. package/dist/node_modules/ionicons/dist/collection/components/icon/icon.css +0 -144
  493. package/dist/types/components/picker/picker-interfaces.d.ts +0 -8
  494. package/dist/types/components/picker-column/picker-column-interfaces.d.ts +0 -4
  495. package/dist/types/components/picker-column-option/picker-column-option.d.ts +0 -66
  496. package/dist/types/components/picker-legacy/picker.d.ts +0 -158
  497. package/dist/types/components/picker-legacy-column/picker-column.d.ts +0 -46
  498. /package/dist/cjs/{index-09471526.js → index-677c4d13.js} +0 -0
  499. /package/dist/collection/components/{picker-legacy → picker}/animations/ios.enter.js +0 -0
  500. /package/dist/collection/components/{picker-legacy → picker}/animations/ios.leave.js +0 -0
  501. /package/dist/collection/components/picker/{picker-interfaces.js → picker-interface.js} +0 -0
  502. /package/dist/collection/components/{picker-legacy-column → picker-column}/picker-column.ios.css +0 -0
  503. /package/dist/collection/components/{picker-legacy-column → picker-column}/picker-column.md.css +0 -0
  504. /package/dist/collection/components/{picker-legacy-column → picker-column}/test/test.utils.js +0 -0
  505. /package/dist/collection/components/{picker-column/picker-column-interfaces.js → picker-column-internal/picker-column-internal-interfaces.js} +0 -0
  506. /package/dist/collection/components/{picker-legacy/picker-interface.js → picker-internal/picker-internal-interfaces.js} +0 -0
  507. /package/dist/esm/{index-c132c5f1.js → index-4d016006.js} +0 -0
  508. /package/dist/esm-es5/{data-6a31d701.js → data-775093f5.js} +0 -0
  509. /package/dist/esm-es5/{index-c132c5f1.js → index-4d016006.js} +0 -0
  510. /package/dist/ionic/{p-8050b9b9.system.js → p-0c55ffe1.system.js} +0 -0
  511. /package/dist/ionic/{p-a64accf5.js → p-18cae04f.js} +0 -0
  512. /package/dist/ionic/{p-7ff4359e.system.js → p-87bb3735.system.js} +0 -0
  513. /package/dist/ionic/{p-ea96fa73.js → p-e90d610c.js} +0 -0
  514. /package/dist/types/components/{picker-legacy → picker}/animations/ios.enter.d.ts +0 -0
  515. /package/dist/types/components/{picker-legacy → picker}/animations/ios.leave.d.ts +0 -0
  516. /package/dist/types/components/{picker-legacy → picker}/picker-interface.d.ts +0 -0
  517. /package/dist/types/components/{picker-legacy-column → picker-column}/test/test.utils.d.ts +0 -0
@@ -2,395 +2,366 @@
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 { 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';
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';
10
9
 
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)}}";
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}}";
12
11
 
13
- const PickerColumn = /*@__PURE__*/ proxyCustomElement(class PickerColumn extends HTMLElement {
12
+ 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)}";
13
+
14
+ const PickerColumnCmp = /*@__PURE__*/ proxyCustomElement(class PickerColumnCmp extends HTMLElement {
14
15
  constructor() {
15
16
  super();
16
17
  this.__registerHost();
17
- this.__attachShadow();
18
- this.ionChange = createEvent(this, "ionChange", 7);
19
- this.isScrolling = false;
20
- this.isColumnVisible = false;
21
- this.canExitInputMode = true;
22
- this.centerPickerItemInView = (target, smooth = true, canExitInputMode = true) => {
23
- const { isColumnVisible, scrollEl } = this;
24
- if (isColumnVisible && scrollEl) {
25
- // (Vertical offset from parent) - (three empty picker rows) + (half the height of the target to ensure the scroll triggers)
26
- const top = target.offsetTop - 3 * target.clientHeight + target.clientHeight / 2;
27
- if (scrollEl.scrollTop !== top) {
28
- /**
29
- * Setting this flag prevents input
30
- * mode from exiting in the picker column's
31
- * scroll callback. This is useful when the user manually
32
- * taps an item or types on the keyboard as both
33
- * of these can cause a scroll to occur.
34
- */
35
- this.canExitInputMode = canExitInputMode;
36
- scrollEl.scroll({
37
- top,
38
- left: 0,
39
- behavior: smooth ? 'smooth' : undefined,
40
- });
18
+ this.ionPickerColChange = createEvent(this, "ionPickerColChange", 7);
19
+ this.optHeight = 0;
20
+ this.rotateFactor = 0;
21
+ this.scaleFactor = 1;
22
+ this.velocity = 0;
23
+ this.y = 0;
24
+ this.noAnimate = true;
25
+ // `colDidChange` is a flag that gets set when the column is changed
26
+ // dynamically. When this flag is set, the column will refresh
27
+ // after the component re-renders to incorporate the new column data.
28
+ // This is necessary because `this.refresh` queries for the option elements,
29
+ // so it needs to wait for the latest elements to be available in the DOM.
30
+ // Ex: column is created with 3 options. User updates the column data
31
+ // to have 5 options. The column will still think it only has 3 options.
32
+ this.colDidChange = false;
33
+ this.col = undefined;
34
+ }
35
+ colChanged() {
36
+ this.colDidChange = true;
37
+ }
38
+ async connectedCallback() {
39
+ let pickerRotateFactor = 0;
40
+ let pickerScaleFactor = 0.81;
41
+ const mode = getIonMode(this);
42
+ if (mode === 'ios') {
43
+ pickerRotateFactor = -0.46;
44
+ pickerScaleFactor = 1;
45
+ }
46
+ this.rotateFactor = pickerRotateFactor;
47
+ this.scaleFactor = pickerScaleFactor;
48
+ this.gesture = (await import('./index3.js')).createGesture({
49
+ el: this.el,
50
+ gestureName: 'picker-swipe',
51
+ gesturePriority: 100,
52
+ threshold: 0,
53
+ passive: false,
54
+ onStart: (ev) => this.onStart(ev),
55
+ onMove: (ev) => this.onMove(ev),
56
+ onEnd: (ev) => this.onEnd(ev),
57
+ });
58
+ this.gesture.enable();
59
+ // Options have not been initialized yet
60
+ // Animation must be disabled through the `noAnimate` flag
61
+ // Otherwise, the options will render
62
+ // at the top of the column and transition down
63
+ this.tmrId = setTimeout(() => {
64
+ this.noAnimate = false;
65
+ // After initialization, `refresh()` will be called
66
+ // At this point, animation will be enabled. The options will
67
+ // animate as they are being selected.
68
+ this.refresh(true);
69
+ }, 250);
70
+ }
71
+ componentDidLoad() {
72
+ this.onDomChange();
73
+ }
74
+ componentDidUpdate() {
75
+ // Options may have changed since last update.
76
+ if (this.colDidChange) {
77
+ // Animation must be disabled through the `onDomChange` parameter.
78
+ // Otherwise, the recently added options will render
79
+ // at the top of the column and transition down
80
+ this.onDomChange(true, false);
81
+ this.colDidChange = false;
82
+ }
83
+ }
84
+ disconnectedCallback() {
85
+ if (this.rafId !== undefined)
86
+ cancelAnimationFrame(this.rafId);
87
+ if (this.tmrId)
88
+ clearTimeout(this.tmrId);
89
+ if (this.gesture) {
90
+ this.gesture.destroy();
91
+ this.gesture = undefined;
92
+ }
93
+ }
94
+ emitColChange() {
95
+ this.ionPickerColChange.emit(this.col);
96
+ }
97
+ setSelected(selectedIndex, duration) {
98
+ // if there is a selected index, then figure out it's y position
99
+ // if there isn't a selected index, then just use the top y position
100
+ const y = selectedIndex > -1 ? -(selectedIndex * this.optHeight) : 0;
101
+ this.velocity = 0;
102
+ // set what y position we're at
103
+ if (this.rafId !== undefined)
104
+ cancelAnimationFrame(this.rafId);
105
+ this.update(y, duration, true);
106
+ this.emitColChange();
107
+ }
108
+ update(y, duration, saveY) {
109
+ if (!this.optsEl) {
110
+ return;
111
+ }
112
+ // ensure we've got a good round number :)
113
+ let translateY = 0;
114
+ let translateZ = 0;
115
+ const { col, rotateFactor } = this;
116
+ const prevSelected = col.selectedIndex;
117
+ const selectedIndex = (col.selectedIndex = this.indexForY(-y));
118
+ const durationStr = duration === 0 ? '' : duration + 'ms';
119
+ const scaleStr = `scale(${this.scaleFactor})`;
120
+ const children = this.optsEl.children;
121
+ for (let i = 0; i < children.length; i++) {
122
+ const button = children[i];
123
+ const opt = col.options[i];
124
+ const optOffset = i * this.optHeight + y;
125
+ let transform = '';
126
+ if (rotateFactor !== 0) {
127
+ const rotateX = optOffset * rotateFactor;
128
+ if (Math.abs(rotateX) <= 90) {
129
+ translateY = 0;
130
+ translateZ = 90;
131
+ transform = `rotateX(${rotateX}deg) `;
132
+ }
133
+ else {
134
+ translateY = -9999;
41
135
  }
42
- }
43
- };
44
- this.setPickerItemActiveState = (item, isActive) => {
45
- if (isActive) {
46
- item.classList.add(PICKER_ITEM_ACTIVE_CLASS);
47
136
  }
48
137
  else {
49
- item.classList.remove(PICKER_ITEM_ACTIVE_CLASS);
138
+ translateZ = 0;
139
+ translateY = optOffset;
50
140
  }
51
- };
52
- /**
53
- * When ionInputModeChange is emitted, each column
54
- * needs to check if it is the one being made available
55
- * for text entry.
56
- */
57
- this.inputModeChange = (ev) => {
58
- if (!this.numericInput) {
59
- return;
141
+ const selected = selectedIndex === i;
142
+ transform += `translate3d(0px,${translateY}px,${translateZ}px) `;
143
+ if (this.scaleFactor !== 1 && !selected) {
144
+ transform += scaleStr;
60
145
  }
61
- const { useInputMode, inputModeColumn } = ev.detail;
62
- /**
63
- * If inputModeColumn is undefined then this means
64
- * all numericInput columns are being selected.
65
- */
66
- const isColumnActive = inputModeColumn === undefined || inputModeColumn === this.el;
67
- if (!useInputMode || !isColumnActive) {
68
- this.setInputModeActive(false);
69
- return;
146
+ // Update transition duration
147
+ if (this.noAnimate) {
148
+ opt.duration = 0;
149
+ button.style.transitionDuration = '';
70
150
  }
71
- this.setInputModeActive(true);
72
- };
73
- /**
74
- * Setting isActive will cause a re-render.
75
- * As a result, we do not want to cause the
76
- * re-render mid scroll as this will cause
77
- * the picker column to jump back to
78
- * whatever value was selected at the
79
- * start of the scroll interaction.
80
- */
81
- this.setInputModeActive = (state) => {
82
- if (this.isScrolling) {
83
- this.scrollEndCallback = () => {
84
- this.isActive = state;
85
- };
86
- return;
151
+ else if (duration !== opt.duration) {
152
+ opt.duration = duration;
153
+ button.style.transitionDuration = durationStr;
87
154
  }
88
- this.isActive = state;
89
- };
90
- /**
91
- * When the column scrolls, the component
92
- * needs to determine which item is centered
93
- * in the view and will emit an ionChange with
94
- * the item object.
95
- */
96
- this.initializeScrollListener = () => {
97
- /**
98
- * The haptics for the wheel picker are
99
- * an iOS-only feature. As a result, they should
100
- * be disabled on Android.
101
- */
102
- const enableHaptics = isPlatform('ios');
103
- const { el, scrollEl } = this;
104
- let timeout;
105
- let activeEl = this.activeItem;
106
- const scrollCallback = () => {
107
- raf(() => {
108
- if (!scrollEl)
109
- return;
110
- if (timeout) {
111
- clearTimeout(timeout);
112
- timeout = undefined;
113
- }
114
- if (!this.isScrolling) {
115
- enableHaptics && hapticSelectionStart();
116
- this.isScrolling = true;
117
- }
118
- /**
119
- * Select item in the center of the column
120
- * which is the month/year that we want to select
121
- */
122
- const bbox = scrollEl.getBoundingClientRect();
123
- const centerX = bbox.x + bbox.width / 2;
124
- const centerY = bbox.y + bbox.height / 2;
125
- /**
126
- * elementFromPoint returns the top-most element.
127
- * This means that if an ion-backdrop is overlaying the
128
- * picker then the appropriate picker column option will
129
- * not be selected. To account for this, we use elementsFromPoint
130
- * and use an Array.find to find the appropriate column option
131
- * at that point.
132
- *
133
- * Additionally, the picker column could be used in the
134
- * Shadow DOM (i.e. in ion-datetime) so we need to make
135
- * sure we are choosing the correct host otherwise
136
- * the elements returns by elementsFromPoint will be
137
- * retargeted. To account for this, we check to see
138
- * if the picker column has a parent shadow root. If
139
- * so, we use that shadow root when doing elementsFromPoint.
140
- * Otherwise, we just use the document.
141
- */
142
- const rootNode = el.getRootNode();
143
- const hasParentShadow = rootNode instanceof ShadowRoot;
144
- const referenceNode = hasParentShadow ? rootNode : doc;
145
- /**
146
- * If the reference node is undefined
147
- * then it's likely that doc is undefined
148
- * due to being in an SSR environment.
149
- */
150
- if (referenceNode === undefined) {
151
- return;
152
- }
153
- const elementsAtPoint = referenceNode.elementsFromPoint(centerX, centerY);
154
- /**
155
- * elementsFromPoint can returns multiple elements
156
- * so find the relevant picker column option if one exists.
157
- */
158
- const newActiveElement = elementsAtPoint.find((el) => el.tagName === 'ION-PICKER-COLUMN-OPTION');
159
- if (activeEl !== undefined) {
160
- this.setPickerItemActiveState(activeEl, false);
161
- }
162
- if (newActiveElement === undefined || newActiveElement.disabled) {
163
- return;
164
- }
165
- /**
166
- * If we are selecting a new value,
167
- * we need to run haptics again.
168
- */
169
- if (newActiveElement !== activeEl) {
170
- enableHaptics && hapticSelectionChanged();
171
- if (this.canExitInputMode) {
172
- /**
173
- * The native iOS wheel picker
174
- * only dismisses the keyboard
175
- * once the selected item has changed
176
- * as a result of a swipe
177
- * from the user. If `canExitInputMode` is
178
- * `false` then this means that the
179
- * scroll is happening as a result of
180
- * the `value` property programmatically changing
181
- * either by an application or by the user via the keyboard.
182
- */
183
- this.exitInputMode();
184
- }
185
- }
186
- activeEl = newActiveElement;
187
- this.setPickerItemActiveState(newActiveElement, true);
188
- timeout = setTimeout(() => {
189
- this.isScrolling = false;
190
- enableHaptics && hapticSelectionEnd();
191
- /**
192
- * Certain tasks (such as those that
193
- * cause re-renders) should only be done
194
- * once scrolling has finished, otherwise
195
- * flickering may occur.
196
- */
197
- const { scrollEndCallback } = this;
198
- if (scrollEndCallback) {
199
- scrollEndCallback();
200
- this.scrollEndCallback = undefined;
201
- }
202
- /**
203
- * Reset this flag as the
204
- * next scroll interaction could
205
- * be a scroll from the user. In this
206
- * case, we should exit input mode.
207
- */
208
- this.canExitInputMode = true;
209
- this.setValue(newActiveElement.value);
210
- }, 250);
211
- });
212
- };
213
- /**
214
- * Wrap this in an raf so that the scroll callback
215
- * does not fire when component is initially shown.
216
- */
217
- raf(() => {
218
- if (!scrollEl)
219
- return;
220
- scrollEl.addEventListener('scroll', scrollCallback);
221
- this.destroyScrollListener = () => {
222
- scrollEl.removeEventListener('scroll', scrollCallback);
223
- };
224
- });
225
- };
226
- /**
227
- * Tells the parent picker to
228
- * exit text entry mode. This is only called
229
- * when the selected item changes during scroll, so
230
- * we know that the user likely wants to scroll
231
- * instead of type.
232
- */
233
- this.exitInputMode = () => {
234
- const { parentEl } = this;
235
- if (parentEl == null)
236
- return;
237
- parentEl.exitInputMode();
238
- /**
239
- * setInputModeActive only takes
240
- * effect once scrolling stops to avoid
241
- * a component re-render while scrolling.
242
- * However, we want the visual active
243
- * indicator to go away immediately, so
244
- * we call classList.remove here.
245
- */
246
- this.el.classList.remove('picker-column-active');
247
- };
248
- this.isActive = false;
249
- this.disabled = false;
250
- this.value = undefined;
251
- this.color = 'primary';
252
- this.numericInput = false;
253
- }
254
- valueChange() {
255
- if (this.isColumnVisible) {
155
+ // Update transform
156
+ if (transform !== opt.transform) {
157
+ opt.transform = transform;
158
+ }
159
+ button.style.transform = transform;
256
160
  /**
257
- * Only scroll the active item into view when the picker column
258
- * is actively visible to the user.
161
+ * Ensure that the select column
162
+ * item has the selected class
259
163
  */
260
- this.scrollActiveItemIntoView(true);
164
+ opt.selected = selected;
165
+ if (selected) {
166
+ button.classList.add(PICKER_OPT_SELECTED);
167
+ }
168
+ else {
169
+ button.classList.remove(PICKER_OPT_SELECTED);
170
+ }
171
+ }
172
+ this.col.prevSelected = prevSelected;
173
+ if (saveY) {
174
+ this.y = y;
175
+ }
176
+ if (this.lastIndex !== selectedIndex) {
177
+ // have not set a last index yet
178
+ hapticSelectionChanged();
179
+ this.lastIndex = selectedIndex;
261
180
  }
262
181
  }
263
- /**
264
- * Only setup scroll listeners
265
- * when the picker is visible, otherwise
266
- * the container will have a scroll
267
- * height of 0px.
268
- */
269
- componentWillLoad() {
270
- const visibleCallback = (entries) => {
271
- const ev = entries[0];
272
- if (ev.isIntersecting) {
273
- const { activeItem, el } = this;
274
- this.isColumnVisible = true;
275
- /**
276
- * Because this initial call to scrollActiveItemIntoView has to fire before
277
- * the scroll listener is set up, we need to manage the active class manually.
278
- */
279
- const oldActive = getElementRoot(el).querySelector(`.${PICKER_ITEM_ACTIVE_CLASS}`);
280
- if (oldActive) {
281
- this.setPickerItemActiveState(oldActive, false);
282
- }
283
- this.scrollActiveItemIntoView();
284
- if (activeItem) {
285
- this.setPickerItemActiveState(activeItem, true);
286
- }
287
- this.initializeScrollListener();
182
+ decelerate() {
183
+ if (this.velocity !== 0) {
184
+ // still decelerating
185
+ this.velocity *= DECELERATION_FRICTION;
186
+ // do not let it go slower than a velocity of 1
187
+ this.velocity = this.velocity > 0 ? Math.max(this.velocity, 1) : Math.min(this.velocity, -1);
188
+ let y = this.y + this.velocity;
189
+ if (y > this.minY) {
190
+ // whoops, it's trying to scroll up farther than the options we have!
191
+ y = this.minY;
192
+ this.velocity = 0;
193
+ }
194
+ else if (y < this.maxY) {
195
+ // gahh, it's trying to scroll down farther than we can!
196
+ y = this.maxY;
197
+ this.velocity = 0;
198
+ }
199
+ this.update(y, 0, true);
200
+ const notLockedIn = Math.round(y) % this.optHeight !== 0 || Math.abs(this.velocity) > 1;
201
+ if (notLockedIn) {
202
+ // isn't locked in yet, keep decelerating until it is
203
+ this.rafId = requestAnimationFrame(() => this.decelerate());
288
204
  }
289
205
  else {
290
- this.isColumnVisible = false;
291
- if (this.destroyScrollListener) {
292
- this.destroyScrollListener();
293
- this.destroyScrollListener = undefined;
294
- }
206
+ this.velocity = 0;
207
+ this.emitColChange();
208
+ hapticSelectionEnd();
295
209
  }
296
- };
297
- new IntersectionObserver(visibleCallback, { threshold: 0.001 }).observe(this.el);
298
- const parentEl = (this.parentEl = this.el.closest('ion-picker'));
299
- if (parentEl !== null) {
300
- // TODO(FW-2832): type
301
- parentEl.addEventListener('ionInputModeChange', (ev) => this.inputModeChange(ev));
210
+ }
211
+ else if (this.y % this.optHeight !== 0) {
212
+ // needs to still get locked into a position so options line up
213
+ const currentPos = Math.abs(this.y % this.optHeight);
214
+ // create a velocity in the direction it needs to scroll
215
+ this.velocity = currentPos > this.optHeight / 2 ? 1 : -1;
216
+ this.decelerate();
302
217
  }
303
218
  }
304
- componentDidRender() {
305
- const { el, activeItem, isColumnVisible, value } = this;
306
- if (isColumnVisible && !activeItem) {
307
- const firstOption = el.querySelector('ion-picker-column-option');
308
- /**
309
- * If the picker column does not have an active item and the current value
310
- * does not match the first item in the picker column, that means
311
- * the value is out of bounds. In this case, we assign the value to the
312
- * first item to match the scroll position of the column.
313
- *
314
- */
315
- if (firstOption !== null && firstOption.value !== value) {
316
- this.setValue(firstOption.value);
219
+ indexForY(y) {
220
+ return Math.min(Math.max(Math.abs(Math.round(y / this.optHeight)), 0), this.col.options.length - 1);
221
+ }
222
+ onStart(detail) {
223
+ // We have to prevent default in order to block scrolling under the picker
224
+ // but we DO NOT have to stop propagation, since we still want
225
+ // some "click" events to capture
226
+ if (detail.event.cancelable) {
227
+ detail.event.preventDefault();
228
+ }
229
+ detail.event.stopPropagation();
230
+ hapticSelectionStart();
231
+ // reset everything
232
+ if (this.rafId !== undefined)
233
+ cancelAnimationFrame(this.rafId);
234
+ const options = this.col.options;
235
+ let minY = options.length - 1;
236
+ let maxY = 0;
237
+ for (let i = 0; i < options.length; i++) {
238
+ if (!options[i].disabled) {
239
+ minY = Math.min(minY, i);
240
+ maxY = Math.max(maxY, i);
317
241
  }
318
242
  }
243
+ this.minY = -(minY * this.optHeight);
244
+ this.maxY = -(maxY * this.optHeight);
319
245
  }
320
- /** @internal */
321
- async scrollActiveItemIntoView(smooth = false) {
322
- const activeEl = this.activeItem;
323
- if (activeEl) {
324
- this.centerPickerItemInView(activeEl, smooth, false);
246
+ onMove(detail) {
247
+ if (detail.event.cancelable) {
248
+ detail.event.preventDefault();
249
+ }
250
+ detail.event.stopPropagation();
251
+ // update the scroll position relative to pointer start position
252
+ let y = this.y + detail.deltaY;
253
+ if (y > this.minY) {
254
+ // scrolling up higher than scroll area
255
+ y = Math.pow(y, 0.8);
256
+ this.bounceFrom = y;
325
257
  }
258
+ else if (y < this.maxY) {
259
+ // scrolling down below scroll area
260
+ y += Math.pow(this.maxY - y, 0.9);
261
+ this.bounceFrom = y;
262
+ }
263
+ else {
264
+ this.bounceFrom = 0;
265
+ }
266
+ this.update(y, 0, false);
326
267
  }
327
- /**
328
- * Sets the value prop and fires the ionChange event.
329
- * This is used when we need to fire ionChange from
330
- * user-generated events that cannot be caught with normal
331
- * input/change event listeners.
332
- * @internal
333
- */
334
- async setValue(value) {
335
- if (this.disabled === true || this.value === value) {
268
+ onEnd(detail) {
269
+ if (this.bounceFrom > 0) {
270
+ // bounce back up
271
+ this.update(this.minY, 100, true);
272
+ this.emitColChange();
336
273
  return;
337
274
  }
338
- this.value = value;
339
- this.ionChange.emit({ value });
340
- }
341
- /**
342
- * Sets focus on the scrollable container within the picker column.
343
- * Use this method instead of the global `pickerColumn.focus()`.
344
- */
345
- async setFocus() {
346
- if (this.scrollEl) {
347
- this.scrollEl.focus();
275
+ else if (this.bounceFrom < 0) {
276
+ // bounce back down
277
+ this.update(this.maxY, 100, true);
278
+ this.emitColChange();
279
+ return;
280
+ }
281
+ this.velocity = clamp(-MAX_PICKER_SPEED, detail.velocityY * 23, MAX_PICKER_SPEED);
282
+ if (this.velocity === 0 && detail.deltaY === 0) {
283
+ const opt = detail.event.target.closest('.picker-opt');
284
+ if (opt === null || opt === void 0 ? void 0 : opt.hasAttribute('opt-index')) {
285
+ this.setSelected(parseInt(opt.getAttribute('opt-index'), 10), TRANSITION_DURATION);
286
+ }
287
+ }
288
+ else {
289
+ this.y += detail.deltaY;
290
+ if (Math.abs(detail.velocityY) < 0.05) {
291
+ const isScrollingUp = detail.deltaY > 0;
292
+ const optHeightFraction = (Math.abs(this.y) % this.optHeight) / this.optHeight;
293
+ if (isScrollingUp && optHeightFraction > 0.5) {
294
+ this.velocity = Math.abs(this.velocity) * -1;
295
+ }
296
+ else if (!isScrollingUp && optHeightFraction <= 0.5) {
297
+ this.velocity = Math.abs(this.velocity);
298
+ }
299
+ }
300
+ this.decelerate();
348
301
  }
349
302
  }
350
- get activeItem() {
351
- const { value } = this;
352
- const options = Array.from(this.el.querySelectorAll('ion-picker-column-option'));
353
- return options.find((option) => {
354
- /**
355
- * If the whole picker column is disabled, the current value should appear active
356
- * If the current value item is specifically disabled, it should not appear active
357
- */
358
- if (!this.disabled && option.disabled) {
359
- return false;
303
+ refresh(forceRefresh, animated) {
304
+ var _a;
305
+ let min = this.col.options.length - 1;
306
+ let max = 0;
307
+ const options = this.col.options;
308
+ for (let i = 0; i < options.length; i++) {
309
+ if (!options[i].disabled) {
310
+ min = Math.min(min, i);
311
+ max = Math.max(max, i);
360
312
  }
361
- return option.value === value;
362
- });
313
+ }
314
+ /**
315
+ * Only update selected value if column has a
316
+ * velocity of 0. If it does not, then the
317
+ * column is animating might land on
318
+ * a value different than the value at
319
+ * selectedIndex
320
+ */
321
+ if (this.velocity !== 0) {
322
+ return;
323
+ }
324
+ const selectedIndex = clamp(min, (_a = this.col.selectedIndex) !== null && _a !== void 0 ? _a : 0, max);
325
+ if (this.col.prevSelected !== selectedIndex || forceRefresh) {
326
+ const y = selectedIndex * this.optHeight * -1;
327
+ const duration = animated ? TRANSITION_DURATION : 0;
328
+ this.velocity = 0;
329
+ this.update(y, duration, true);
330
+ }
331
+ }
332
+ onDomChange(forceRefresh, animated) {
333
+ const colEl = this.optsEl;
334
+ if (colEl) {
335
+ // DOM READ
336
+ // We perfom a DOM read over a rendered item, this needs to happen after the first render or after the the column has changed
337
+ this.optHeight = colEl.firstElementChild ? colEl.firstElementChild.clientHeight : 0;
338
+ }
339
+ this.refresh(forceRefresh, animated);
363
340
  }
364
341
  render() {
365
- const { color, disabled, isActive, numericInput } = this;
342
+ const col = this.col;
366
343
  const mode = getIonMode(this);
367
- return (h(Host, { class: createColorClasses(color, {
368
- [mode]: true,
369
- ['picker-column-active']: isActive,
370
- ['picker-column-numeric-input']: numericInput,
371
- ['picker-column-disabled']: disabled,
372
- }) }, h("slot", { name: "prefix" }), h("div", { class: "picker-opts", tabindex: disabled ? undefined : 0, ref: (el) => {
373
- this.scrollEl = el;
374
- } }, h("div", { class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("slot", null), h("div", { class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0"), h("div", { class: "picker-item-empty", "aria-hidden": "true" }, "\u00A0")), h("slot", { name: "suffix" })));
344
+ return (h(Host, { 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: {
345
+ 'max-width': this.col.columnWidth,
346
+ } }, col.prefix && (h("div", { class: "picker-prefix", style: { width: col.prefixWidth } }, col.prefix)), h("div", { 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))));
375
347
  }
376
348
  get el() { return this; }
377
349
  static get watchers() { return {
378
- "value": ["valueChange"]
350
+ "col": ["colChanged"]
351
+ }; }
352
+ static get style() { return {
353
+ ios: pickerColumnIosCss,
354
+ md: pickerColumnMdCss
379
355
  }; }
380
- static get style() { return pickerColumnCss; }
381
- }, [1, "ion-picker-column", {
382
- "disabled": [4],
383
- "value": [1032],
384
- "color": [513],
385
- "numericInput": [4, "numeric-input"],
386
- "isActive": [32],
387
- "scrollActiveItemIntoView": [64],
388
- "setValue": [64],
389
- "setFocus": [64]
356
+ }, [32, "ion-picker-column", {
357
+ "col": [16]
390
358
  }, undefined, {
391
- "value": ["valueChange"]
359
+ "col": ["colChanged"]
392
360
  }]);
393
- const PICKER_ITEM_ACTIVE_CLASS = 'option-active';
361
+ const PICKER_OPT_SELECTED = 'picker-opt-selected';
362
+ const DECELERATION_FRICTION = 0.97;
363
+ const MAX_PICKER_SPEED = 90;
364
+ const TRANSITION_DURATION = 150;
394
365
  function defineCustomElement() {
395
366
  if (typeof customElements === "undefined") {
396
367
  return;
@@ -399,10 +370,10 @@ function defineCustomElement() {
399
370
  components.forEach(tagName => { switch (tagName) {
400
371
  case "ion-picker-column":
401
372
  if (!customElements.get(tagName)) {
402
- customElements.define(tagName, PickerColumn);
373
+ customElements.define(tagName, PickerColumnCmp);
403
374
  }
404
375
  break;
405
376
  } });
406
377
  }
407
378
 
408
- export { PickerColumn as P, defineCustomElement as d };
379
+ export { PickerColumnCmp as P, defineCustomElement as d };