@ionic/core 7.5.8-dev.11703088210.14a72b83 → 7.5.8-dev.11705350665.1a40ee3a

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 (505) hide show
  1. package/components/backdrop.js +0 -12
  2. package/components/button.js +2 -2
  3. package/components/data.js +1 -1
  4. package/components/gesture-controller.js +1 -1
  5. package/components/index2.js +91 -0
  6. package/components/ion-content.js +3 -4
  7. package/components/ion-datetime.js +40 -64
  8. package/components/ion-input.js +2 -0
  9. package/components/ion-picker-column-option.d.ts +11 -0
  10. package/components/ion-picker-column-option.js +9 -0
  11. package/components/ion-picker-column.js +2 -2
  12. package/components/ion-picker-legacy-column.d.ts +11 -0
  13. package/components/ion-picker-legacy-column.js +9 -0
  14. package/components/{ion-picker-internal.d.ts → ion-picker-legacy.d.ts} +4 -4
  15. package/components/ion-picker-legacy.js +309 -0
  16. package/components/ion-picker.js +1 -309
  17. package/components/ion-refresher-content.js +3 -10
  18. package/components/ion-refresher.js +183 -4
  19. package/components/ion-searchbar.js +2 -0
  20. package/components/ion-textarea.js +2 -0
  21. package/components/overlays.js +11 -4
  22. package/components/picker-column-option.js +122 -0
  23. package/components/picker-column.js +351 -322
  24. package/components/picker-column2.js +379 -0
  25. package/components/{picker-internal.js → picker.js} +29 -22
  26. package/css/core.css +10 -0
  27. package/css/core.css.map +1 -1
  28. package/css/ionic.bundle.css +1 -1
  29. package/css/ionic.bundle.css.map +1 -1
  30. package/dist/cjs/{app-globals-28656db1.js → app-globals-0af482c7.js} +1 -1
  31. package/dist/cjs/{button-active-75b38d77.js → button-active-9d7e0640.js} +2 -2
  32. package/dist/cjs/{data-36b9094e.js → data-e7526b58.js} +1 -1
  33. package/dist/cjs/{gesture-controller-c40c045a.js → gesture-controller-9436f482.js} +1 -0
  34. package/dist/cjs/{index-097270a3.js → index-5cbb20f9.js} +1 -1
  35. package/dist/cjs/{index-b0102f48.js → index-bbb4336c.js} +39 -1
  36. package/dist/cjs/{index-cb3e0ab7.js → index-ec51e99c.js} +94 -3
  37. package/dist/cjs/{index-d1b59ffa.js → index-ee07ed59.js} +1 -1
  38. package/dist/cjs/index.cjs.js +9 -9
  39. package/dist/cjs/ion-accordion_2.cjs.entry.js +2 -2
  40. package/dist/cjs/ion-action-sheet.cjs.entry.js +6 -6
  41. package/dist/cjs/ion-alert.cjs.entry.js +6 -6
  42. package/dist/cjs/ion-app_8.cjs.entry.js +8 -9
  43. package/dist/cjs/ion-avatar_3.cjs.entry.js +2 -2
  44. package/dist/cjs/ion-back-button.cjs.entry.js +2 -2
  45. package/dist/cjs/ion-backdrop.cjs.entry.js +2 -14
  46. package/dist/cjs/ion-breadcrumb_2.cjs.entry.js +2 -2
  47. package/dist/cjs/ion-button_2.cjs.entry.js +4 -4
  48. package/dist/cjs/ion-card_5.cjs.entry.js +2 -2
  49. package/dist/cjs/ion-checkbox.cjs.entry.js +2 -2
  50. package/dist/cjs/ion-chip.cjs.entry.js +2 -2
  51. package/dist/cjs/ion-col_3.cjs.entry.js +2 -2
  52. package/dist/cjs/ion-datetime-button.cjs.entry.js +3 -3
  53. package/dist/cjs/ion-datetime_3.cjs.entry.js +38 -58
  54. package/dist/cjs/ion-fab_3.cjs.entry.js +2 -2
  55. package/dist/cjs/ion-img.cjs.entry.js +2 -2
  56. package/dist/cjs/ion-infinite-scroll_2.cjs.entry.js +2 -2
  57. package/dist/cjs/ion-input.cjs.entry.js +4 -2
  58. package/dist/cjs/ion-item-option_3.cjs.entry.js +3 -3
  59. package/dist/cjs/ion-item_8.cjs.entry.js +2 -2
  60. package/dist/cjs/ion-loading.cjs.entry.js +4 -3
  61. package/dist/cjs/ion-menu_3.cjs.entry.js +6 -6
  62. package/dist/cjs/ion-modal.cjs.entry.js +6 -6
  63. package/dist/cjs/ion-nav_2.cjs.entry.js +5 -4
  64. package/dist/cjs/ion-picker-column-option.cjs.entry.js +104 -0
  65. package/dist/cjs/{ion-picker-column-internal.cjs.entry.js → ion-picker-column.cjs.entry.js} +106 -89
  66. package/dist/cjs/{ion-picker-internal.cjs.entry.js → ion-picker.cjs.entry.js} +27 -20
  67. package/dist/cjs/ion-popover.cjs.entry.js +5 -4
  68. package/dist/cjs/ion-progress-bar.cjs.entry.js +2 -2
  69. package/dist/cjs/ion-radio_2.cjs.entry.js +2 -2
  70. package/dist/cjs/ion-range.cjs.entry.js +3 -3
  71. package/dist/cjs/ion-refresher_2.cjs.entry.js +17 -32
  72. package/dist/cjs/ion-reorder_2.cjs.entry.js +3 -3
  73. package/dist/cjs/ion-ripple-effect.cjs.entry.js +2 -2
  74. package/dist/cjs/ion-route_4.cjs.entry.js +2 -2
  75. package/dist/cjs/ion-searchbar.cjs.entry.js +4 -2
  76. package/dist/cjs/ion-segment_2.cjs.entry.js +3 -3
  77. package/dist/cjs/ion-select_3.cjs.entry.js +4 -3
  78. package/dist/cjs/ion-spinner.cjs.entry.js +2 -2
  79. package/dist/cjs/ion-split-pane.cjs.entry.js +2 -2
  80. package/dist/cjs/ion-tab-bar_2.cjs.entry.js +2 -2
  81. package/dist/cjs/ion-tab_2.cjs.entry.js +1 -1
  82. package/dist/cjs/ion-text.cjs.entry.js +2 -2
  83. package/dist/cjs/ion-textarea.cjs.entry.js +4 -2
  84. package/dist/cjs/ion-toast.cjs.entry.js +4 -3
  85. package/dist/cjs/ion-toggle.cjs.entry.js +3 -3
  86. package/dist/cjs/{ionic-global-62510d64.js → ionic-global-f4a2093b.js} +1 -1
  87. package/dist/cjs/ionic.cjs.js +5 -5
  88. package/dist/cjs/{ios.transition-d9c0e4fb.js → ios.transition-039d6aeb.js} +4 -2
  89. package/dist/cjs/loader.cjs.js +4 -4
  90. package/dist/cjs/{md.transition-4fac8a87.js → md.transition-ce763350.js} +4 -2
  91. package/dist/cjs/{overlays-b1471172.js → overlays-e8e05b0e.js} +12 -5
  92. package/dist/cjs/{status-tap-0aa8e1f2.js → status-tap-415acac6.js} +1 -1
  93. package/dist/cjs/{swipe-back-2a858bbd.js → swipe-back-b8f2330b.js} +2 -2
  94. package/dist/collection/collection-manifest.json +8 -7
  95. package/dist/collection/components/backdrop/backdrop.js +0 -12
  96. package/dist/collection/components/button/button.ios.css +1 -1
  97. package/dist/collection/components/button/button.md.css +1 -1
  98. package/dist/collection/components/button/test/wrap/button.e2e.js +12 -24
  99. package/dist/collection/components/content/content.css +0 -4
  100. package/dist/collection/components/content/content.js +2 -3
  101. package/dist/collection/components/datetime/datetime.ios.css +91 -37
  102. package/dist/collection/components/datetime/datetime.js +24 -36
  103. package/dist/collection/components/datetime/datetime.md.css +96 -37
  104. package/dist/collection/components/datetime/test/a11y/datetime.e2e.js +1 -1
  105. package/dist/collection/components/datetime/test/a11y/datetime.spec.js +6 -9
  106. package/dist/collection/components/datetime/test/basic/datetime.e2e.js +10 -0
  107. package/dist/collection/components/datetime/test/datetime.e2e.js +2 -2
  108. package/dist/collection/components/datetime/test/disabled/datetime.spec.js +4 -4
  109. package/dist/collection/components/datetime/test/locale/datetime.e2e.js +2 -2
  110. package/dist/collection/components/datetime/test/minmax/datetime.e2e.js +6 -6
  111. package/dist/collection/components/datetime/test/month-year-picker/datetime.e2e.js +1 -1
  112. package/dist/collection/components/datetime/test/prefer-wheel/datetime.e2e.js +43 -41
  113. package/dist/collection/components/datetime/test/presentation/datetime.e2e.js +1 -1
  114. package/dist/collection/components/datetime/test/readonly/datetime.e2e.js +4 -4
  115. package/dist/collection/components/datetime/test/values/datetime.e2e.js +15 -12
  116. package/dist/collection/components/datetime/utils/data.js +1 -1
  117. package/dist/collection/components/input/input.js +4 -2
  118. package/dist/collection/components/picker/picker.ios.css +112 -211
  119. package/dist/collection/components/picker/picker.js +472 -744
  120. package/dist/collection/components/picker/picker.md.css +108 -198
  121. package/dist/collection/components/{picker-internal/test/a11y/picker-internal.e2e.js → picker/test/a11y/picker.e2e.js} +2 -2
  122. package/dist/collection/components/picker/test/basic/picker.e2e.js +99 -13
  123. package/dist/collection/components/picker/test/custom/picker.e2e.js +85 -0
  124. package/dist/collection/components/{picker-internal/test/keyboard-entry/picker-internal.e2e.js → picker/test/keyboard-entry/picker.e2e.js} +63 -32
  125. package/dist/collection/components/{picker-column-internal/picker-column-internal.md.css → picker-column/picker-column.css} +96 -83
  126. package/dist/collection/components/picker-column/picker-column.js +497 -335
  127. package/dist/collection/components/{picker-column-internal/test/basic/picker-column-internal.e2e.js → picker-column/test/basic/picker-column.e2e.js} +8 -8
  128. package/dist/collection/components/picker-column/test/disabled/picker-column.e2e.js +91 -0
  129. package/dist/collection/components/picker-column/test/slots/picker-column.e2e.js +39 -0
  130. package/dist/collection/components/picker-column-option/picker-column-option.ios.css +87 -0
  131. package/dist/collection/components/picker-column-option/picker-column-option.js +173 -0
  132. package/dist/collection/components/{picker-column-internal/picker-column-internal.ios.css → picker-column-option/picker-column-option.md.css} +6 -53
  133. package/dist/collection/components/picker-column-option/test/a11y/picker-column-option.e2e.js +18 -0
  134. package/dist/collection/components/picker-column-option/test/basic/picker-column-option.e2e.js +37 -0
  135. package/dist/collection/components/picker-column-option/test/picker-column-option.spec.js +29 -0
  136. package/dist/collection/components/{picker-internal/picker-internal.md.css → picker-legacy/picker.ios.css} +207 -98
  137. package/dist/collection/components/picker-legacy/picker.js +817 -0
  138. package/dist/collection/components/{picker-internal/picker-internal.ios.css → picker-legacy/picker.md.css} +192 -100
  139. package/dist/collection/components/picker-legacy/test/basic/picker.e2e.js +25 -0
  140. package/dist/collection/components/{picker → picker-legacy}/test/is-open/picker.e2e.js +4 -4
  141. package/dist/collection/components/{picker → picker-legacy}/test/picker-id.spec.js +5 -5
  142. package/dist/collection/components/{picker → picker-legacy}/test/trigger/picker.e2e.js +1 -1
  143. package/dist/collection/components/picker-legacy-column/picker-column.js +419 -0
  144. package/dist/collection/components/{picker-column → picker-legacy-column}/test/picker-column-aria.spec.js +3 -3
  145. package/dist/collection/components/{picker-column → picker-legacy-column}/test/picker-column-dynamic.spec.js +2 -2
  146. package/dist/collection/components/{picker-column → picker-legacy-column}/test/picker-column.spec.js +2 -2
  147. package/dist/collection/components/{picker-column → picker-legacy-column}/test/standalone/picker-column.e2e.js +3 -3
  148. package/dist/collection/components/refresher/refresher.utils.js +11 -19
  149. package/dist/collection/components/refresher-content/refresher-content.js +3 -9
  150. package/dist/collection/components/searchbar/searchbar.js +3 -1
  151. package/dist/collection/components/textarea/textarea.js +4 -2
  152. package/dist/collection/utils/gesture/gesture-controller.js +1 -1
  153. package/dist/collection/utils/overlays.js +11 -4
  154. package/dist/collection/utils/test/overlays/overlays-scroll-blocking.spec.js +65 -0
  155. package/dist/collection/utils/transition/index.js +91 -0
  156. package/dist/docs.json +484 -47
  157. package/dist/esm/{app-globals-c23144fc.js → app-globals-722340c4.js} +1 -1
  158. package/dist/esm/{button-active-7013b5a1.js → button-active-ed9d848c.js} +2 -2
  159. package/dist/esm/{data-f5c75b4e.js → data-4b9508c9.js} +1 -1
  160. package/dist/esm/{gesture-controller-1bf57181.js → gesture-controller-314a54f6.js} +1 -1
  161. package/dist/esm/{index-39329c6f.js → index-08d686eb.js} +39 -1
  162. package/dist/esm/{index-2cf77112.js → index-39782642.js} +2 -2
  163. package/dist/esm/{index-7a818ed3.js → index-80492ed3.js} +1 -1
  164. package/dist/esm/{index-bebaae5d.js → index-933484ae.js} +94 -3
  165. package/dist/esm/index.js +9 -9
  166. package/dist/esm/ion-accordion_2.entry.js +2 -2
  167. package/dist/esm/ion-action-sheet.entry.js +6 -6
  168. package/dist/esm/ion-alert.entry.js +6 -6
  169. package/dist/esm/ion-app_8.entry.js +8 -9
  170. package/dist/esm/ion-avatar_3.entry.js +2 -2
  171. package/dist/esm/ion-back-button.entry.js +2 -2
  172. package/dist/esm/ion-backdrop.entry.js +2 -14
  173. package/dist/esm/ion-breadcrumb_2.entry.js +2 -2
  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 +37 -57
  181. package/dist/esm/ion-fab_3.entry.js +2 -2
  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 +4 -2
  185. package/dist/esm/ion-item-option_3.entry.js +3 -3
  186. package/dist/esm/ion-item_8.entry.js +2 -2
  187. package/dist/esm/ion-loading.entry.js +4 -3
  188. package/dist/esm/ion-menu_3.entry.js +6 -6
  189. package/dist/esm/ion-modal.entry.js +6 -6
  190. package/dist/esm/ion-nav_2.entry.js +5 -4
  191. package/dist/esm/ion-picker-column-option.entry.js +100 -0
  192. package/dist/esm/{ion-picker-column-internal.entry.js → ion-picker-column.entry.js} +106 -89
  193. package/dist/esm/{ion-picker-internal.entry.js → ion-picker.entry.js} +27 -20
  194. package/dist/esm/ion-popover.entry.js +5 -4
  195. package/dist/esm/ion-progress-bar.entry.js +2 -2
  196. package/dist/esm/ion-radio_2.entry.js +2 -2
  197. package/dist/esm/ion-range.entry.js +3 -3
  198. package/dist/esm/ion-refresher_2.entry.js +17 -32
  199. package/dist/esm/ion-reorder_2.entry.js +3 -3
  200. package/dist/esm/ion-ripple-effect.entry.js +2 -2
  201. package/dist/esm/ion-route_4.entry.js +2 -2
  202. package/dist/esm/ion-searchbar.entry.js +4 -2
  203. package/dist/esm/ion-segment_2.entry.js +3 -3
  204. package/dist/esm/ion-select_3.entry.js +4 -3
  205. package/dist/esm/ion-spinner.entry.js +2 -2
  206. package/dist/esm/ion-split-pane.entry.js +2 -2
  207. package/dist/esm/ion-tab-bar_2.entry.js +2 -2
  208. package/dist/esm/ion-tab_2.entry.js +1 -1
  209. package/dist/esm/ion-text.entry.js +2 -2
  210. package/dist/esm/ion-textarea.entry.js +4 -2
  211. package/dist/esm/ion-toast.entry.js +4 -3
  212. package/dist/esm/ion-toggle.entry.js +3 -3
  213. package/dist/esm/{ionic-global-6c78e871.js → ionic-global-c0cda98e.js} +1 -1
  214. package/dist/esm/ionic.js +6 -6
  215. package/dist/esm/{ios.transition-daa373e9.js → ios.transition-9e42996d.js} +4 -2
  216. package/dist/esm/loader.js +5 -5
  217. package/dist/esm/{md.transition-91c3d3cc.js → md.transition-8cbb4e1d.js} +4 -2
  218. package/dist/esm/{overlays-64e67e2c.js → overlays-fbc5cab5.js} +12 -5
  219. package/dist/esm/{status-tap-9dd45200.js → status-tap-2b93b1b5.js} +1 -1
  220. package/dist/esm/{swipe-back-a6f386fc.js → swipe-back-a8ca7f93.js} +2 -2
  221. package/dist/esm-es5/app-globals-722340c4.js +4 -0
  222. package/dist/esm-es5/{button-active-7013b5a1.js → button-active-ed9d848c.js} +1 -1
  223. package/dist/esm-es5/{gesture-controller-1bf57181.js → gesture-controller-314a54f6.js} +1 -1
  224. package/dist/esm-es5/{index-39329c6f.js → index-08d686eb.js} +1 -1
  225. package/dist/esm-es5/{index-2cf77112.js → index-39782642.js} +1 -1
  226. package/dist/esm-es5/{index-7a818ed3.js → index-80492ed3.js} +1 -1
  227. package/dist/esm-es5/index-933484ae.js +4 -0
  228. package/dist/esm-es5/index.js +1 -1
  229. package/dist/esm-es5/ion-accordion_2.entry.js +1 -1
  230. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  231. package/dist/esm-es5/ion-alert.entry.js +1 -1
  232. package/dist/esm-es5/ion-app_8.entry.js +1 -1
  233. package/dist/esm-es5/ion-avatar_3.entry.js +1 -1
  234. package/dist/esm-es5/ion-back-button.entry.js +1 -1
  235. package/dist/esm-es5/ion-backdrop.entry.js +1 -1
  236. package/dist/esm-es5/ion-breadcrumb_2.entry.js +1 -1
  237. package/dist/esm-es5/ion-button_2.entry.js +1 -1
  238. package/dist/esm-es5/ion-card_5.entry.js +1 -1
  239. package/dist/esm-es5/ion-checkbox.entry.js +1 -1
  240. package/dist/esm-es5/ion-chip.entry.js +1 -1
  241. package/dist/esm-es5/ion-col_3.entry.js +1 -1
  242. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  243. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  244. package/dist/esm-es5/ion-fab_3.entry.js +1 -1
  245. package/dist/esm-es5/ion-img.entry.js +1 -1
  246. package/dist/esm-es5/ion-infinite-scroll_2.entry.js +1 -1
  247. package/dist/esm-es5/ion-input.entry.js +1 -1
  248. package/dist/esm-es5/ion-item-option_3.entry.js +1 -1
  249. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  250. package/dist/esm-es5/ion-loading.entry.js +1 -1
  251. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  252. package/dist/esm-es5/ion-modal.entry.js +1 -1
  253. package/dist/esm-es5/ion-nav_2.entry.js +1 -1
  254. package/dist/esm-es5/ion-picker-column-option.entry.js +4 -0
  255. package/dist/esm-es5/ion-picker-column.entry.js +4 -0
  256. package/dist/esm-es5/ion-picker.entry.js +4 -0
  257. package/dist/esm-es5/ion-popover.entry.js +1 -1
  258. package/dist/esm-es5/ion-progress-bar.entry.js +1 -1
  259. package/dist/esm-es5/ion-radio_2.entry.js +1 -1
  260. package/dist/esm-es5/ion-range.entry.js +1 -1
  261. package/dist/esm-es5/ion-refresher_2.entry.js +1 -1
  262. package/dist/esm-es5/ion-reorder_2.entry.js +1 -1
  263. package/dist/esm-es5/ion-ripple-effect.entry.js +1 -1
  264. package/dist/esm-es5/ion-route_4.entry.js +1 -1
  265. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  266. package/dist/esm-es5/ion-segment_2.entry.js +1 -1
  267. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  268. package/dist/esm-es5/ion-spinner.entry.js +1 -1
  269. package/dist/esm-es5/ion-split-pane.entry.js +1 -1
  270. package/dist/esm-es5/ion-tab-bar_2.entry.js +1 -1
  271. package/dist/esm-es5/ion-tab_2.entry.js +1 -1
  272. package/dist/esm-es5/ion-text.entry.js +1 -1
  273. package/dist/esm-es5/ion-textarea.entry.js +1 -1
  274. package/dist/esm-es5/ion-toast.entry.js +1 -1
  275. package/dist/esm-es5/ion-toggle.entry.js +1 -1
  276. package/dist/esm-es5/{ionic-global-6c78e871.js → ionic-global-c0cda98e.js} +1 -1
  277. package/dist/esm-es5/ionic.js +1 -1
  278. package/dist/esm-es5/ios.transition-9e42996d.js +4 -0
  279. package/dist/esm-es5/loader.js +1 -1
  280. package/dist/esm-es5/md.transition-8cbb4e1d.js +4 -0
  281. package/dist/esm-es5/overlays-fbc5cab5.js +4 -0
  282. package/dist/esm-es5/{status-tap-9dd45200.js → status-tap-2b93b1b5.js} +1 -1
  283. package/dist/esm-es5/swipe-back-a8ca7f93.js +4 -0
  284. package/dist/html.html-data.json +154 -3
  285. package/dist/ionic/index.esm.js +1 -1
  286. package/dist/ionic/ionic.esm.js +1 -1
  287. package/dist/ionic/ionic.js +1 -1
  288. package/dist/ionic/{p-a0945c3a.system.entry.js → p-0e53f8ea.system.entry.js} +1 -1
  289. package/dist/ionic/{p-161d0916.entry.js → p-1161a793.entry.js} +1 -1
  290. package/dist/ionic/{p-89026d53.entry.js → p-1208f939.entry.js} +1 -1
  291. package/dist/ionic/{p-ad78c421.system.js → p-16bd5224.system.js} +1 -1
  292. package/dist/ionic/p-1786bc72.js +4 -0
  293. package/dist/ionic/{p-312221db.entry.js → p-17da5ed1.entry.js} +1 -1
  294. package/dist/ionic/{p-5fb707e0.entry.js → p-18ba8221.entry.js} +1 -1
  295. package/dist/ionic/{p-1631b52f.system.js → p-1d624e03.system.js} +1 -1
  296. package/dist/ionic/{p-3f5ae764.entry.js → p-1fc72959.entry.js} +1 -1
  297. package/dist/ionic/{p-1ff22253.entry.js → p-2092f39f.entry.js} +1 -1
  298. package/dist/ionic/{p-c7c8429a.system.js → p-20d469d0.system.js} +1 -1
  299. package/dist/ionic/{p-46dbd723.entry.js → p-21c3515a.entry.js} +1 -1
  300. package/dist/ionic/{p-2657f213.entry.js → p-22e5af95.entry.js} +1 -1
  301. package/dist/ionic/{p-6744eca5.entry.js → p-232d1f22.entry.js} +1 -1
  302. package/dist/ionic/p-26798a7b.system.entry.js +4 -0
  303. package/dist/ionic/p-27bcbbc7.system.entry.js +4 -0
  304. package/dist/ionic/{p-b81a8111.system.entry.js → p-2938823a.system.entry.js} +1 -1
  305. package/dist/ionic/p-294725bb.js +4 -0
  306. package/dist/ionic/{p-df361680.system.entry.js → p-2ab4e925.system.entry.js} +1 -1
  307. package/dist/ionic/{p-8c202d6e.system.entry.js → p-32303650.system.entry.js} +1 -1
  308. package/dist/ionic/{p-18032a93.entry.js → p-34c39c48.entry.js} +1 -1
  309. package/dist/ionic/p-350f7292.system.entry.js +4 -0
  310. package/dist/ionic/{p-86c2bbc8.entry.js → p-353b349d.entry.js} +1 -1
  311. package/dist/ionic/p-36d194c5.entry.js +4 -0
  312. package/dist/ionic/p-3993ae66.entry.js +4 -0
  313. package/dist/ionic/{p-31b2326e.system.js → p-3e1e14d9.system.js} +1 -1
  314. package/dist/ionic/{p-a3a145d3.entry.js → p-3f6270b3.entry.js} +1 -1
  315. package/dist/ionic/{p-23a27e78.system.entry.js → p-3fd26bd6.system.entry.js} +1 -1
  316. package/dist/ionic/{p-426bdba9.system.js → p-3fe96156.system.js} +1 -1
  317. package/dist/ionic/p-400b61c7.system.entry.js +4 -0
  318. package/dist/ionic/{p-e26030f8.system.js → p-4155f352.system.js} +1 -1
  319. package/dist/ionic/{p-405f1a72.entry.js → p-42ba3902.entry.js} +1 -1
  320. package/dist/ionic/{p-2a7e6572.system.entry.js → p-464975c5.system.entry.js} +1 -1
  321. package/dist/ionic/{p-ee4a54e3.entry.js → p-4911a5d6.entry.js} +1 -1
  322. package/dist/ionic/p-49c5f1a3.js +4 -0
  323. package/dist/ionic/{p-5f46d93e.entry.js → p-4a31c99f.entry.js} +1 -1
  324. package/dist/ionic/{p-f34d6a49.entry.js → p-4bee86bd.entry.js} +1 -1
  325. package/dist/ionic/{p-2cd9cb80.system.entry.js → p-4fb51e61.system.entry.js} +1 -1
  326. package/dist/ionic/p-510d9b43.js +4 -0
  327. package/dist/ionic/{p-d3e123c0.entry.js → p-51a087d6.entry.js} +1 -1
  328. package/dist/ionic/p-51abefb7.system.js +4 -0
  329. package/dist/ionic/{p-aac289d2.system.entry.js → p-564af202.system.entry.js} +1 -1
  330. package/dist/ionic/p-588fdf40.entry.js +4 -0
  331. package/dist/ionic/p-5a1aac13.system.entry.js +4 -0
  332. package/dist/ionic/{p-a5c81b99.entry.js → p-5a68960f.entry.js} +1 -1
  333. package/dist/ionic/{p-34d6f520.system.js → p-5b365ca7.system.js} +1 -1
  334. package/dist/ionic/{p-eef8d7e8.system.entry.js → p-5bebc7b3.system.entry.js} +1 -1
  335. package/dist/ionic/{p-a1b4dba7.entry.js → p-5d42b6b4.entry.js} +1 -1
  336. package/dist/ionic/{p-21f015cf.js → p-5ecae037.js} +1 -1
  337. package/dist/ionic/{p-57c0d5bf.system.entry.js → p-6555a5e7.system.entry.js} +1 -1
  338. package/dist/ionic/p-65e27aae.system.entry.js +4 -0
  339. package/dist/ionic/{p-71d986ae.entry.js → p-6b7c55cd.entry.js} +1 -1
  340. package/dist/ionic/{p-70ecb18b.entry.js → p-6d72fb44.entry.js} +1 -1
  341. package/dist/ionic/{p-1cbc21e2.system.entry.js → p-6e70dd1a.system.entry.js} +1 -1
  342. package/dist/ionic/{p-64af4468.entry.js → p-6fbecbda.entry.js} +1 -1
  343. package/dist/ionic/{p-27a5f2c7.system.entry.js → p-6fd64e7c.system.entry.js} +1 -1
  344. package/dist/ionic/p-73190c5f.entry.js +4 -0
  345. package/dist/ionic/p-73aa7604.entry.js +4 -0
  346. package/dist/ionic/p-76d3765d.js +4 -0
  347. package/dist/ionic/{p-2ac9d078.system.entry.js → p-77965464.system.entry.js} +1 -1
  348. package/dist/ionic/{p-6cf08720.entry.js → p-7b725280.entry.js} +1 -1
  349. package/dist/ionic/p-8017aad2.system.entry.js +4 -0
  350. package/dist/ionic/{p-27e6473f.entry.js → p-8adc9a45.entry.js} +1 -1
  351. package/dist/ionic/p-8c0e5060.system.js +4 -0
  352. package/dist/ionic/p-8c97cdc0.entry.js +4 -0
  353. package/dist/ionic/p-8e42850f.entry.js +4 -0
  354. package/dist/ionic/{p-f5d2dc9b.js → p-8ededb41.js} +1 -1
  355. package/dist/ionic/{p-67598744.entry.js → p-8f5d30f5.entry.js} +1 -1
  356. package/dist/ionic/p-8fa6583d.system.js +4 -0
  357. package/dist/ionic/p-91af3c52.system.entry.js +4 -0
  358. package/dist/ionic/{p-3acad8ff.system.entry.js → p-93000a81.system.entry.js} +1 -1
  359. package/dist/ionic/{p-41f7af3f.system.entry.js → p-96dbbac1.system.entry.js} +1 -1
  360. package/dist/ionic/{p-a0db3de9.system.entry.js → p-9709ebd8.system.entry.js} +1 -1
  361. package/dist/ionic/{p-12cdcb59.js → p-9738fd82.js} +1 -1
  362. package/dist/ionic/{p-a70b5d24.entry.js → p-98f3d827.entry.js} +1 -1
  363. package/dist/ionic/{p-bb3615f7.js → p-9b97df10.js} +1 -1
  364. package/dist/ionic/p-9e48593b.system.js +4 -0
  365. package/dist/ionic/{p-315ad733.system.entry.js → p-a225bf0f.system.entry.js} +1 -1
  366. package/dist/ionic/{p-53a3283e.entry.js → p-a4afcc88.entry.js} +1 -1
  367. package/dist/ionic/p-a60a1ce5.js +4 -0
  368. package/dist/ionic/p-a8baa23e.entry.js +4 -0
  369. package/dist/ionic/{p-99fe0543.entry.js → p-a98dc0c1.entry.js} +1 -1
  370. package/dist/ionic/p-a9a80f5b.entry.js +4 -0
  371. package/dist/ionic/{p-90db28f8.system.entry.js → p-a9e3b5be.system.entry.js} +1 -1
  372. package/dist/ionic/{p-a843a90e.system.entry.js → p-ab9456e9.system.entry.js} +1 -1
  373. package/dist/ionic/p-ae712b95.entry.js +4 -0
  374. package/dist/ionic/p-afcf4620.entry.js +4 -0
  375. package/dist/ionic/{p-3535a36c.entry.js → p-b133e9b4.entry.js} +1 -1
  376. package/dist/ionic/{p-98ac0e27.system.entry.js → p-b3b3efba.system.entry.js} +2 -2
  377. package/dist/ionic/{p-58ff9e5b.system.js → p-b4a51c42.system.js} +1 -1
  378. package/dist/ionic/p-b4d31b30.system.entry.js +4 -0
  379. package/dist/ionic/{p-3cb5466e.entry.js → p-b5f9f14c.entry.js} +1 -1
  380. package/dist/ionic/{p-b0fcf130.system.entry.js → p-b6f5e4f2.system.entry.js} +1 -1
  381. package/dist/ionic/{p-7ae5ca1f.system.entry.js → p-b7010c69.system.entry.js} +1 -1
  382. package/dist/ionic/{p-a99f14a7.system.entry.js → p-b752714f.system.entry.js} +1 -1
  383. package/dist/ionic/p-c006d974.entry.js +4 -0
  384. package/dist/ionic/{p-ca32685b.system.entry.js → p-c18de88a.system.entry.js} +1 -1
  385. package/dist/ionic/{p-acdd8148.js → p-c3c3333a.js} +1 -1
  386. package/dist/ionic/p-c41bff4e.system.entry.js +4 -0
  387. package/dist/ionic/{p-8261be6c.system.entry.js → p-c847fb35.system.entry.js} +1 -1
  388. package/dist/ionic/{p-e3c44332.system.entry.js → p-c91ccbfa.system.entry.js} +1 -1
  389. package/dist/ionic/{p-9f376964.system.entry.js → p-c9a21dfd.system.entry.js} +1 -1
  390. package/dist/ionic/p-ca8938f4.js +4 -0
  391. package/dist/ionic/{p-ad953217.system.entry.js → p-caf21b46.system.entry.js} +1 -1
  392. package/dist/ionic/{p-5a7d5905.system.entry.js → p-cde52378.system.entry.js} +1 -1
  393. package/dist/ionic/{p-1c6c6098.entry.js → p-cfe57b1b.entry.js} +1 -1
  394. package/dist/ionic/{p-c04accad.entry.js → p-d37b441e.entry.js} +1 -1
  395. package/dist/ionic/{p-f8c5a0dd.system.js → p-d3b030b8.system.js} +1 -1
  396. package/dist/ionic/p-d3c773d0.entry.js +4 -0
  397. package/dist/ionic/{p-91f9e81b.js → p-d662d908.js} +1 -1
  398. package/dist/ionic/p-d9ec6cf0.system.js +4 -0
  399. package/dist/ionic/p-da15f571.system.entry.js +4 -0
  400. package/dist/ionic/{p-c5ae50be.system.js → p-e3584231.system.js} +1 -1
  401. package/dist/ionic/{p-8a75f7bf.system.entry.js → p-e7ea9815.system.entry.js} +1 -1
  402. package/dist/ionic/{p-5f127075.system.entry.js → p-e8e86f69.system.entry.js} +1 -1
  403. package/dist/ionic/p-ea69616e.entry.js +4 -0
  404. package/dist/ionic/{p-4f71a9cf.system.entry.js → p-ef126ae8.system.entry.js} +1 -1
  405. package/dist/ionic/p-f6160677.system.entry.js +4 -0
  406. package/dist/ionic/{p-e4045e04.entry.js → p-f8a5bb89.entry.js} +1 -1
  407. package/dist/ionic/{p-93dac17a.system.entry.js → p-f910cc73.system.entry.js} +1 -1
  408. package/dist/ionic/{p-bc97b5cd.system.entry.js → p-fbf3a689.system.entry.js} +1 -1
  409. package/dist/ionic/p-ffd5dba4.system.entry.js +4 -0
  410. package/dist/types/components/backdrop/backdrop.d.ts +0 -3
  411. package/dist/types/components/datetime/datetime.d.ts +0 -1
  412. package/dist/types/components/datetime/utils/data.d.ts +11 -7
  413. package/dist/types/components/input/input.d.ts +5 -1
  414. package/dist/types/components/menu/menu.d.ts +1 -1
  415. package/dist/types/components/picker/picker-interfaces.d.ts +8 -0
  416. package/dist/types/components/picker/picker.d.ts +75 -129
  417. package/dist/types/components/picker-column/picker-column-interfaces.d.ts +4 -0
  418. package/dist/types/components/picker-column/picker-column.d.ts +99 -39
  419. package/dist/types/components/picker-column-option/picker-column-option.d.ts +66 -0
  420. package/dist/types/components/picker-legacy/picker.d.ts +158 -0
  421. package/dist/types/components/picker-legacy-column/picker-column.d.ts +46 -0
  422. package/dist/types/components/refresher/refresher.utils.d.ts +0 -16
  423. package/dist/types/components/searchbar/searchbar.d.ts +2 -0
  424. package/dist/types/components/textarea/textarea.d.ts +5 -1
  425. package/dist/types/components.d.ts +161 -129
  426. package/dist/types/interface.d.ts +1 -1
  427. package/dist/types/utils/config.d.ts +8 -2
  428. package/dist/types/utils/gesture/gesture-controller.d.ts +1 -0
  429. package/dist/types/utils/overlays.d.ts +5 -2
  430. package/hydrate/index.d.ts +1 -1
  431. package/hydrate/index.js +1409 -1229
  432. package/package.json +2 -2
  433. package/components/ion-picker-column-internal.d.ts +0 -11
  434. package/components/ion-picker-column-internal.js +0 -9
  435. package/components/ion-picker-internal.js +0 -9
  436. package/components/picker-column-internal.js +0 -390
  437. package/components/refresher.utils.js +0 -196
  438. package/dist/collection/components/picker-column-internal/picker-column-internal.js +0 -565
  439. package/dist/collection/components/picker-column-internal/test/disabled/picker-column-internal.e2e.js +0 -162
  440. package/dist/collection/components/picker-internal/picker-internal.js +0 -544
  441. package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +0 -118
  442. package/dist/esm-es5/app-globals-c23144fc.js +0 -4
  443. package/dist/esm-es5/index-bebaae5d.js +0 -4
  444. package/dist/esm-es5/ion-picker-column-internal.entry.js +0 -4
  445. package/dist/esm-es5/ion-picker-internal.entry.js +0 -4
  446. package/dist/esm-es5/ios.transition-daa373e9.js +0 -4
  447. package/dist/esm-es5/md.transition-91c3d3cc.js +0 -4
  448. package/dist/esm-es5/overlays-64e67e2c.js +0 -4
  449. package/dist/esm-es5/swipe-back-a6f386fc.js +0 -4
  450. package/dist/ionic/p-0263eb49.system.js +0 -4
  451. package/dist/ionic/p-06600f70.js +0 -4
  452. package/dist/ionic/p-0827d00e.system.entry.js +0 -4
  453. package/dist/ionic/p-19545a49.system.entry.js +0 -4
  454. package/dist/ionic/p-1e7daa1f.entry.js +0 -4
  455. package/dist/ionic/p-2507b0c0.entry.js +0 -4
  456. package/dist/ionic/p-33f3cd49.entry.js +0 -4
  457. package/dist/ionic/p-35ce400e.system.js +0 -4
  458. package/dist/ionic/p-45db7949.system.entry.js +0 -4
  459. package/dist/ionic/p-58dd7c15.entry.js +0 -4
  460. package/dist/ionic/p-5c7f13cd.system.entry.js +0 -4
  461. package/dist/ionic/p-6a6477b2.js +0 -4
  462. package/dist/ionic/p-742e11cf.system.entry.js +0 -4
  463. package/dist/ionic/p-7484b1d6.system.js +0 -4
  464. package/dist/ionic/p-78ebf1b6.system.entry.js +0 -4
  465. package/dist/ionic/p-83fada9e.system.entry.js +0 -4
  466. package/dist/ionic/p-89cfbc88.system.entry.js +0 -4
  467. package/dist/ionic/p-8a10752d.entry.js +0 -4
  468. package/dist/ionic/p-abab375b.system.js +0 -4
  469. package/dist/ionic/p-ac4a7fc0.js +0 -4
  470. package/dist/ionic/p-af959b5d.entry.js +0 -4
  471. package/dist/ionic/p-b11ceee2.entry.js +0 -4
  472. package/dist/ionic/p-b5e33ebc.system.entry.js +0 -4
  473. package/dist/ionic/p-b8f2134e.js +0 -4
  474. package/dist/ionic/p-bbe3feee.entry.js +0 -4
  475. package/dist/ionic/p-cde72008.js +0 -4
  476. package/dist/ionic/p-d0251fc4.entry.js +0 -4
  477. package/dist/ionic/p-d1530ea9.entry.js +0 -4
  478. package/dist/ionic/p-ddccf1f4.js +0 -4
  479. package/dist/ionic/p-e145b9f9.entry.js +0 -4
  480. package/dist/ionic/p-e8e530fc.entry.js +0 -4
  481. package/dist/ionic/p-eab6401e.js +0 -4
  482. package/dist/ionic/p-edc5c693.system.entry.js +0 -4
  483. package/dist/ionic/p-f0384573.system.entry.js +0 -4
  484. package/dist/ionic/p-f10de9d5.system.js +0 -4
  485. package/dist/ionic/p-f444fea5.entry.js +0 -4
  486. package/dist/ionic/p-fcf49977.system.entry.js +0 -4
  487. package/dist/types/components/picker-column-internal/picker-column-internal-interfaces.d.ts +0 -5
  488. package/dist/types/components/picker-column-internal/picker-column-internal.d.ts +0 -102
  489. package/dist/types/components/picker-internal/picker-internal-interfaces.d.ts +0 -8
  490. package/dist/types/components/picker-internal/picker-internal.d.ts +0 -102
  491. /package/dist/collection/components/{picker-internal/picker-internal-interfaces.js → picker/picker-interfaces.js} +0 -0
  492. /package/dist/collection/components/{picker-column-internal/picker-column-internal-interfaces.js → picker-column/picker-column-interfaces.js} +0 -0
  493. /package/dist/collection/components/{picker → picker-legacy}/animations/ios.enter.js +0 -0
  494. /package/dist/collection/components/{picker → picker-legacy}/animations/ios.leave.js +0 -0
  495. /package/dist/collection/components/{picker → picker-legacy}/picker-interface.js +0 -0
  496. /package/dist/collection/components/{picker-column → picker-legacy-column}/picker-column.ios.css +0 -0
  497. /package/dist/collection/components/{picker-column → picker-legacy-column}/picker-column.md.css +0 -0
  498. /package/dist/collection/components/{picker-column → picker-legacy-column}/test/test.utils.js +0 -0
  499. /package/dist/esm-es5/{data-f5c75b4e.js → data-4b9508c9.js} +0 -0
  500. /package/dist/ionic/{p-2aea8b1e.js → p-368f5215.js} +0 -0
  501. /package/dist/ionic/{p-82e3d633.system.js → p-f58981c2.system.js} +0 -0
  502. /package/dist/types/components/{picker → picker-legacy}/animations/ios.enter.d.ts +0 -0
  503. /package/dist/types/components/{picker → picker-legacy}/animations/ios.leave.d.ts +0 -0
  504. /package/dist/types/components/{picker → picker-legacy}/picker-interface.d.ts +0 -0
  505. /package/dist/types/components/{picker-column → picker-legacy-column}/test/test.utils.d.ts +0 -0
@@ -0,0 +1,419 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { Host, h } from "@stencil/core";
5
+ import { clamp } from "../../utils/helpers";
6
+ import { hapticSelectionChanged, hapticSelectionEnd, hapticSelectionStart } from "../../utils/native/haptic";
7
+ import { getClassMap } from "../../utils/theme";
8
+ import { getIonMode } from "../../global/ionic-global";
9
+ /**
10
+ * @internal
11
+ */
12
+ export class PickerColumnCmp {
13
+ constructor() {
14
+ this.optHeight = 0;
15
+ this.rotateFactor = 0;
16
+ this.scaleFactor = 1;
17
+ this.velocity = 0;
18
+ this.y = 0;
19
+ this.noAnimate = true;
20
+ // `colDidChange` is a flag that gets set when the column is changed
21
+ // dynamically. When this flag is set, the column will refresh
22
+ // after the component re-renders to incorporate the new column data.
23
+ // This is necessary because `this.refresh` queries for the option elements,
24
+ // so it needs to wait for the latest elements to be available in the DOM.
25
+ // Ex: column is created with 3 options. User updates the column data
26
+ // to have 5 options. The column will still think it only has 3 options.
27
+ this.colDidChange = false;
28
+ this.col = undefined;
29
+ }
30
+ colChanged() {
31
+ this.colDidChange = true;
32
+ }
33
+ async connectedCallback() {
34
+ let pickerRotateFactor = 0;
35
+ let pickerScaleFactor = 0.81;
36
+ const mode = getIonMode(this);
37
+ if (mode === 'ios') {
38
+ pickerRotateFactor = -0.46;
39
+ pickerScaleFactor = 1;
40
+ }
41
+ this.rotateFactor = pickerRotateFactor;
42
+ this.scaleFactor = pickerScaleFactor;
43
+ this.gesture = (await import('../../utils/gesture')).createGesture({
44
+ el: this.el,
45
+ gestureName: 'picker-swipe',
46
+ gesturePriority: 100,
47
+ threshold: 0,
48
+ passive: false,
49
+ onStart: (ev) => this.onStart(ev),
50
+ onMove: (ev) => this.onMove(ev),
51
+ onEnd: (ev) => this.onEnd(ev),
52
+ });
53
+ this.gesture.enable();
54
+ // Options have not been initialized yet
55
+ // Animation must be disabled through the `noAnimate` flag
56
+ // Otherwise, the options will render
57
+ // at the top of the column and transition down
58
+ this.tmrId = setTimeout(() => {
59
+ this.noAnimate = false;
60
+ // After initialization, `refresh()` will be called
61
+ // At this point, animation will be enabled. The options will
62
+ // animate as they are being selected.
63
+ this.refresh(true);
64
+ }, 250);
65
+ }
66
+ componentDidLoad() {
67
+ this.onDomChange();
68
+ }
69
+ componentDidUpdate() {
70
+ // Options may have changed since last update.
71
+ if (this.colDidChange) {
72
+ // Animation must be disabled through the `onDomChange` parameter.
73
+ // Otherwise, the recently added options will render
74
+ // at the top of the column and transition down
75
+ this.onDomChange(true, false);
76
+ this.colDidChange = false;
77
+ }
78
+ }
79
+ disconnectedCallback() {
80
+ if (this.rafId !== undefined)
81
+ cancelAnimationFrame(this.rafId);
82
+ if (this.tmrId)
83
+ clearTimeout(this.tmrId);
84
+ if (this.gesture) {
85
+ this.gesture.destroy();
86
+ this.gesture = undefined;
87
+ }
88
+ }
89
+ emitColChange() {
90
+ this.ionPickerColChange.emit(this.col);
91
+ }
92
+ setSelected(selectedIndex, duration) {
93
+ // if there is a selected index, then figure out it's y position
94
+ // if there isn't a selected index, then just use the top y position
95
+ const y = selectedIndex > -1 ? -(selectedIndex * this.optHeight) : 0;
96
+ this.velocity = 0;
97
+ // set what y position we're at
98
+ if (this.rafId !== undefined)
99
+ cancelAnimationFrame(this.rafId);
100
+ this.update(y, duration, true);
101
+ this.emitColChange();
102
+ }
103
+ update(y, duration, saveY) {
104
+ if (!this.optsEl) {
105
+ return;
106
+ }
107
+ // ensure we've got a good round number :)
108
+ let translateY = 0;
109
+ let translateZ = 0;
110
+ const { col, rotateFactor } = this;
111
+ const prevSelected = col.selectedIndex;
112
+ const selectedIndex = (col.selectedIndex = this.indexForY(-y));
113
+ const durationStr = duration === 0 ? '' : duration + 'ms';
114
+ const scaleStr = `scale(${this.scaleFactor})`;
115
+ const children = this.optsEl.children;
116
+ for (let i = 0; i < children.length; i++) {
117
+ const button = children[i];
118
+ const opt = col.options[i];
119
+ const optOffset = i * this.optHeight + y;
120
+ let transform = '';
121
+ if (rotateFactor !== 0) {
122
+ const rotateX = optOffset * rotateFactor;
123
+ if (Math.abs(rotateX) <= 90) {
124
+ translateY = 0;
125
+ translateZ = 90;
126
+ transform = `rotateX(${rotateX}deg) `;
127
+ }
128
+ else {
129
+ translateY = -9999;
130
+ }
131
+ }
132
+ else {
133
+ translateZ = 0;
134
+ translateY = optOffset;
135
+ }
136
+ const selected = selectedIndex === i;
137
+ transform += `translate3d(0px,${translateY}px,${translateZ}px) `;
138
+ if (this.scaleFactor !== 1 && !selected) {
139
+ transform += scaleStr;
140
+ }
141
+ // Update transition duration
142
+ if (this.noAnimate) {
143
+ opt.duration = 0;
144
+ button.style.transitionDuration = '';
145
+ }
146
+ else if (duration !== opt.duration) {
147
+ opt.duration = duration;
148
+ button.style.transitionDuration = durationStr;
149
+ }
150
+ // Update transform
151
+ if (transform !== opt.transform) {
152
+ opt.transform = transform;
153
+ }
154
+ button.style.transform = transform;
155
+ /**
156
+ * Ensure that the select column
157
+ * item has the selected class
158
+ */
159
+ opt.selected = selected;
160
+ if (selected) {
161
+ button.classList.add(PICKER_OPT_SELECTED);
162
+ }
163
+ else {
164
+ button.classList.remove(PICKER_OPT_SELECTED);
165
+ }
166
+ }
167
+ this.col.prevSelected = prevSelected;
168
+ if (saveY) {
169
+ this.y = y;
170
+ }
171
+ if (this.lastIndex !== selectedIndex) {
172
+ // have not set a last index yet
173
+ hapticSelectionChanged();
174
+ this.lastIndex = selectedIndex;
175
+ }
176
+ }
177
+ decelerate() {
178
+ if (this.velocity !== 0) {
179
+ // still decelerating
180
+ this.velocity *= DECELERATION_FRICTION;
181
+ // do not let it go slower than a velocity of 1
182
+ this.velocity = this.velocity > 0 ? Math.max(this.velocity, 1) : Math.min(this.velocity, -1);
183
+ let y = this.y + this.velocity;
184
+ if (y > this.minY) {
185
+ // whoops, it's trying to scroll up farther than the options we have!
186
+ y = this.minY;
187
+ this.velocity = 0;
188
+ }
189
+ else if (y < this.maxY) {
190
+ // gahh, it's trying to scroll down farther than we can!
191
+ y = this.maxY;
192
+ this.velocity = 0;
193
+ }
194
+ this.update(y, 0, true);
195
+ const notLockedIn = Math.round(y) % this.optHeight !== 0 || Math.abs(this.velocity) > 1;
196
+ if (notLockedIn) {
197
+ // isn't locked in yet, keep decelerating until it is
198
+ this.rafId = requestAnimationFrame(() => this.decelerate());
199
+ }
200
+ else {
201
+ this.velocity = 0;
202
+ this.emitColChange();
203
+ hapticSelectionEnd();
204
+ }
205
+ }
206
+ else if (this.y % this.optHeight !== 0) {
207
+ // needs to still get locked into a position so options line up
208
+ const currentPos = Math.abs(this.y % this.optHeight);
209
+ // create a velocity in the direction it needs to scroll
210
+ this.velocity = currentPos > this.optHeight / 2 ? 1 : -1;
211
+ this.decelerate();
212
+ }
213
+ }
214
+ indexForY(y) {
215
+ return Math.min(Math.max(Math.abs(Math.round(y / this.optHeight)), 0), this.col.options.length - 1);
216
+ }
217
+ onStart(detail) {
218
+ // We have to prevent default in order to block scrolling under the picker
219
+ // but we DO NOT have to stop propagation, since we still want
220
+ // some "click" events to capture
221
+ if (detail.event.cancelable) {
222
+ detail.event.preventDefault();
223
+ }
224
+ detail.event.stopPropagation();
225
+ hapticSelectionStart();
226
+ // reset everything
227
+ if (this.rafId !== undefined)
228
+ cancelAnimationFrame(this.rafId);
229
+ const options = this.col.options;
230
+ let minY = options.length - 1;
231
+ let maxY = 0;
232
+ for (let i = 0; i < options.length; i++) {
233
+ if (!options[i].disabled) {
234
+ minY = Math.min(minY, i);
235
+ maxY = Math.max(maxY, i);
236
+ }
237
+ }
238
+ this.minY = -(minY * this.optHeight);
239
+ this.maxY = -(maxY * this.optHeight);
240
+ }
241
+ onMove(detail) {
242
+ if (detail.event.cancelable) {
243
+ detail.event.preventDefault();
244
+ }
245
+ detail.event.stopPropagation();
246
+ // update the scroll position relative to pointer start position
247
+ let y = this.y + detail.deltaY;
248
+ if (y > this.minY) {
249
+ // scrolling up higher than scroll area
250
+ y = Math.pow(y, 0.8);
251
+ this.bounceFrom = y;
252
+ }
253
+ else if (y < this.maxY) {
254
+ // scrolling down below scroll area
255
+ y += Math.pow(this.maxY - y, 0.9);
256
+ this.bounceFrom = y;
257
+ }
258
+ else {
259
+ this.bounceFrom = 0;
260
+ }
261
+ this.update(y, 0, false);
262
+ }
263
+ onEnd(detail) {
264
+ if (this.bounceFrom > 0) {
265
+ // bounce back up
266
+ this.update(this.minY, 100, true);
267
+ this.emitColChange();
268
+ return;
269
+ }
270
+ else if (this.bounceFrom < 0) {
271
+ // bounce back down
272
+ this.update(this.maxY, 100, true);
273
+ this.emitColChange();
274
+ return;
275
+ }
276
+ this.velocity = clamp(-MAX_PICKER_SPEED, detail.velocityY * 23, MAX_PICKER_SPEED);
277
+ if (this.velocity === 0 && detail.deltaY === 0) {
278
+ const opt = detail.event.target.closest('.picker-opt');
279
+ if (opt === null || opt === void 0 ? void 0 : opt.hasAttribute('opt-index')) {
280
+ this.setSelected(parseInt(opt.getAttribute('opt-index'), 10), TRANSITION_DURATION);
281
+ }
282
+ }
283
+ else {
284
+ this.y += detail.deltaY;
285
+ if (Math.abs(detail.velocityY) < 0.05) {
286
+ const isScrollingUp = detail.deltaY > 0;
287
+ const optHeightFraction = (Math.abs(this.y) % this.optHeight) / this.optHeight;
288
+ if (isScrollingUp && optHeightFraction > 0.5) {
289
+ this.velocity = Math.abs(this.velocity) * -1;
290
+ }
291
+ else if (!isScrollingUp && optHeightFraction <= 0.5) {
292
+ this.velocity = Math.abs(this.velocity);
293
+ }
294
+ }
295
+ this.decelerate();
296
+ }
297
+ }
298
+ refresh(forceRefresh, animated) {
299
+ var _a;
300
+ let min = this.col.options.length - 1;
301
+ let max = 0;
302
+ const options = this.col.options;
303
+ for (let i = 0; i < options.length; i++) {
304
+ if (!options[i].disabled) {
305
+ min = Math.min(min, i);
306
+ max = Math.max(max, i);
307
+ }
308
+ }
309
+ /**
310
+ * Only update selected value if column has a
311
+ * velocity of 0. If it does not, then the
312
+ * column is animating might land on
313
+ * a value different than the value at
314
+ * selectedIndex
315
+ */
316
+ if (this.velocity !== 0) {
317
+ return;
318
+ }
319
+ const selectedIndex = clamp(min, (_a = this.col.selectedIndex) !== null && _a !== void 0 ? _a : 0, max);
320
+ if (this.col.prevSelected !== selectedIndex || forceRefresh) {
321
+ const y = selectedIndex * this.optHeight * -1;
322
+ const duration = animated ? TRANSITION_DURATION : 0;
323
+ this.velocity = 0;
324
+ this.update(y, duration, true);
325
+ }
326
+ }
327
+ onDomChange(forceRefresh, animated) {
328
+ const colEl = this.optsEl;
329
+ if (colEl) {
330
+ // DOM READ
331
+ // We perfom a DOM read over a rendered item, this needs to happen after the first render or after the the column has changed
332
+ this.optHeight = colEl.firstElementChild ? colEl.firstElementChild.clientHeight : 0;
333
+ }
334
+ this.refresh(forceRefresh, animated);
335
+ }
336
+ render() {
337
+ const col = this.col;
338
+ const mode = getIonMode(this);
339
+ 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: {
340
+ 'max-width': this.col.columnWidth,
341
+ } }, 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))));
342
+ }
343
+ static get is() { return "ion-picker-legacy-column"; }
344
+ static get originalStyleUrls() {
345
+ return {
346
+ "ios": ["picker-column.ios.scss"],
347
+ "md": ["picker-column.md.scss"]
348
+ };
349
+ }
350
+ static get styleUrls() {
351
+ return {
352
+ "ios": ["picker-column.ios.css"],
353
+ "md": ["picker-column.md.css"]
354
+ };
355
+ }
356
+ static get properties() {
357
+ return {
358
+ "col": {
359
+ "type": "unknown",
360
+ "mutable": false,
361
+ "complexType": {
362
+ "original": "PickerColumn",
363
+ "resolved": "PickerColumn",
364
+ "references": {
365
+ "PickerColumn": {
366
+ "location": "import",
367
+ "path": "../picker-legacy/picker-interface",
368
+ "id": "src/components/picker-legacy/picker-interface.ts::PickerColumn"
369
+ }
370
+ }
371
+ },
372
+ "required": true,
373
+ "optional": false,
374
+ "docs": {
375
+ "tags": [],
376
+ "text": "Picker column data"
377
+ }
378
+ }
379
+ };
380
+ }
381
+ static get events() {
382
+ return [{
383
+ "method": "ionPickerColChange",
384
+ "name": "ionPickerColChange",
385
+ "bubbles": true,
386
+ "cancelable": true,
387
+ "composed": true,
388
+ "docs": {
389
+ "tags": [{
390
+ "name": "internal",
391
+ "text": undefined
392
+ }],
393
+ "text": "Emitted when the selected value has changed"
394
+ },
395
+ "complexType": {
396
+ "original": "PickerColumn",
397
+ "resolved": "PickerColumn",
398
+ "references": {
399
+ "PickerColumn": {
400
+ "location": "import",
401
+ "path": "../picker-legacy/picker-interface",
402
+ "id": "src/components/picker-legacy/picker-interface.ts::PickerColumn"
403
+ }
404
+ }
405
+ }
406
+ }];
407
+ }
408
+ static get elementRef() { return "el"; }
409
+ static get watchers() {
410
+ return [{
411
+ "propName": "col",
412
+ "methodName": "colChanged"
413
+ }];
414
+ }
415
+ }
416
+ const PICKER_OPT_SELECTED = 'picker-opt-selected';
417
+ const DECELERATION_FRICTION = 0.97;
418
+ const MAX_PICKER_SPEED = 90;
419
+ const TRANSITION_DURATION = 150;
@@ -25,10 +25,10 @@ describe('picker-column', () => {
25
25
  };
26
26
  const page = await newSpecPage({
27
27
  components: [PickerColumnCmp],
28
- template: () => h("ion-picker-column", { col: col }),
28
+ template: () => h("ion-picker-legacy-column", { col: col }),
29
29
  });
30
- const firstOption = page.body.querySelector('ion-picker-column .picker-opt:nth-child(1)');
31
- const secondOption = page.body.querySelector('ion-picker-column .picker-opt:nth-child(2)');
30
+ const firstOption = page.body.querySelector('ion-picker-legacy-column .picker-opt:nth-child(1)');
31
+ const secondOption = page.body.querySelector('ion-picker-legacy-column .picker-opt:nth-child(2)');
32
32
  expect(firstOption.getAttribute('aria-label')).toBe('C Sharp');
33
33
  expect(secondOption.getAttribute('aria-label')).toBe(null);
34
34
  });
@@ -15,9 +15,9 @@ describe('picker-column: dynamic options', () => {
15
15
  ];
16
16
  const page = await newSpecPage({
17
17
  components: [PickerColumnCmp],
18
- template: () => h("ion-picker-column", { col: { options: defaultOptions, name: 'animals' } }),
18
+ template: () => (h("ion-picker-legacy-column", { col: { options: defaultOptions, name: 'animals' } })),
19
19
  });
20
- const pickerCol = page.body.querySelector('ion-picker-column');
20
+ const pickerCol = page.body.querySelector('ion-picker-legacy-column');
21
21
  pickerCol.col = {
22
22
  options: [...defaultOptions, { text: 'Carrot', value: 'carrot' }],
23
23
  name: 'vegetables',
@@ -9,9 +9,9 @@ describe('picker-column', () => {
9
9
  const col = { cssClass: 'test-class', options: [], name: 'col' };
10
10
  const page = await newSpecPage({
11
11
  components: [PickerColumnCmp],
12
- template: () => h("ion-picker-column", { col: col }),
12
+ template: () => h("ion-picker-legacy-column", { col: col }),
13
13
  });
14
- const pickerCol = page.body.querySelector('ion-picker-column');
14
+ const pickerCol = page.body.querySelector('ion-picker-legacy-column');
15
15
  expect(pickerCol.classList.contains('test-class')).toBe(true);
16
16
  });
17
17
  });
@@ -6,11 +6,11 @@ import { configs, test } from "../../../../utils/test/playwright/index";
6
6
  configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
7
7
  test.describe(title('picker-column'), () => {
8
8
  test.beforeEach(async ({ page }) => {
9
- await page.goto(`/src/components/picker-column/test/standalone`, config);
9
+ await page.goto(`/src/components/picker-legacy-column/test/standalone`, config);
10
10
  });
11
11
  test('should present picker without ion-app', async ({ page }) => {
12
12
  const ionPickerDidPresent = await page.spyOnEvent('ionPickerDidPresent');
13
- const picker = page.locator('ion-picker');
13
+ const picker = page.locator('ion-picker-legacy');
14
14
  await page.click('#single-column-button');
15
15
  await ionPickerDidPresent.next();
16
16
  await expect(picker).toBeVisible();
@@ -22,7 +22,7 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) =>
22
22
  });
23
23
  const ionPickerDidPresent = await page.spyOnEvent('ionPickerDidPresent');
24
24
  const ionPickerColChangeEvent = await page.spyOnEvent('ionPickerColChange');
25
- const column = page.locator('ion-picker-column');
25
+ const column = page.locator('ion-picker-legacy-column');
26
26
  const secondOption = column.locator('.picker-opt').nth(1);
27
27
  await page.click('#single-column-button');
28
28
  await ionPickerDidPresent.next();
@@ -4,6 +4,7 @@
4
4
  import { writeTask } from "@stencil/core";
5
5
  import { createAnimation } from "../../utils/animation/animation";
6
6
  import { clamp, componentOnReady, transitionEndAsync } from "../../utils/helpers";
7
+ import { isPlatform } from "../../utils/platform";
7
8
  export const getRefresherAnimationType = (contentEl) => {
8
9
  const previousSibling = contentEl.previousElementSibling;
9
10
  const hasHeader = previousSibling !== null && previousSibling.tagName === 'ION-HEADER';
@@ -161,24 +162,6 @@ export const translateElement = (el, value, duration = 200) => {
161
162
  };
162
163
  // Utils
163
164
  // -----------------------------
164
- /**
165
- * In order to use the native iOS refresher the device must support rubber band scrolling.
166
- * As part of this, we need to exclude Desktop Safari because it has a slightly different rubber band effect that is not compatible with the native refresher in Ionic.
167
- *
168
- * We also need to be careful not to include devices that spoof their user agent.
169
- * For example, when using iOS emulation in Chrome the user agent will be spoofed such that
170
- * navigator.maxTouchPointer > 0. To work around this,
171
- * we check to see if the apple-pay-logo is supported as a named image which is only
172
- * true on Apple devices.
173
- *
174
- * We previously checked referencEl.style.webkitOverflowScrolling to explicitly check
175
- * for rubber band support. However, this property was removed on iPadOS and it's possible
176
- * that this will be removed on iOS in the future too.
177
- *
178
- */
179
- export const supportsRubberBandScrolling = () => {
180
- return navigator.maxTouchPoints > 0 && CSS.supports('background: -webkit-named-image(apple-pay-logo-black)');
181
- };
182
165
  export const shouldUseNativeRefresher = async (referenceEl, mode) => {
183
166
  const refresherContent = referenceEl.querySelector('ion-refresher-content');
184
167
  if (!refresherContent) {
@@ -189,5 +172,14 @@ export const shouldUseNativeRefresher = async (referenceEl, mode) => {
189
172
  const refreshingSpinner = referenceEl.querySelector('ion-refresher-content .refresher-refreshing ion-spinner');
190
173
  return (pullingSpinner !== null &&
191
174
  refreshingSpinner !== null &&
192
- ((mode === 'ios' && supportsRubberBandScrolling()) || mode === 'md'));
175
+ /**
176
+ * We use webkitOverflowScrolling for feature detection with rubber band scrolling
177
+ * on iOS. When doing referenceEl.style, webkitOverflowScrolling is undefined on non-iOS platforms.
178
+ * However, it will be the empty string on iOS.
179
+ * Note that we do not use getPropertyValue (and thus need to cast as any) because calling
180
+ * getPropertyValue('-webkit-overflow-scrolling') will return the empty string if it is not
181
+ * set on the element, even if the platform does not support that.
182
+ */
183
+ ((mode === 'ios' && isPlatform('mobile') && referenceEl.style.webkitOverflowScrolling !== undefined) ||
184
+ mode === 'md'));
193
185
  };
@@ -3,11 +3,11 @@
3
3
  */
4
4
  import { Host, h } from "@stencil/core";
5
5
  import { ENABLE_HTML_CONTENT_DEFAULT } from "../../utils/config";
6
+ import { isPlatform } from "../../utils/platform";
6
7
  import { sanitizeDOMString } from "../../utils/sanitization/index";
7
8
  import { arrowDown, caretBackSharp } from "ionicons/icons";
8
9
  import { config } from "../../global/config";
9
10
  import { getIonMode } from "../../global/ionic-global";
10
- import { supportsRubberBandScrolling } from "../refresher/refresher.utils";
11
11
  import { SPINNERS } from "../spinner/spinner-configs";
12
12
  export class RefresherContent {
13
13
  constructor() {
@@ -19,15 +19,9 @@ export class RefresherContent {
19
19
  }
20
20
  componentWillLoad() {
21
21
  if (this.pullingIcon === undefined) {
22
- /**
23
- * The native iOS refresher uses a spinner instead of
24
- * an icon, so we need to see if this device supports
25
- * the native iOS refresher.
26
- */
27
- const hasRubberBandScrolling = supportsRubberBandScrolling();
28
22
  const mode = getIonMode(this);
29
- const overflowRefresher = hasRubberBandScrolling ? 'lines' : arrowDown;
30
- this.pullingIcon = config.get('refreshingIcon', mode === 'ios' && hasRubberBandScrolling ? config.get('spinner', overflowRefresher) : 'circular');
23
+ const overflowRefresher = this.el.style.webkitOverflowScrolling !== undefined ? 'lines' : arrowDown;
24
+ this.pullingIcon = config.get('refreshingIcon', mode === 'ios' && isPlatform('mobile') ? config.get('spinner', overflowRefresher) : 'circular');
31
25
  }
32
26
  if (this.refreshingSpinner === undefined) {
33
27
  const mode = getIonMode(this);
@@ -180,6 +180,8 @@ export class Searchbar {
180
180
  *
181
181
  * Developers who wish to focus an input when an overlay is presented
182
182
  * should call `setFocus` after `didPresent` has resolved.
183
+ *
184
+ * See [managing focus](/docs/developing/managing-focus) for more information.
183
185
  */
184
186
  async setFocus() {
185
187
  if (this.nativeInput) {
@@ -890,7 +892,7 @@ export class Searchbar {
890
892
  "return": "Promise<void>"
891
893
  },
892
894
  "docs": {
893
- "text": "Sets focus on the native `input` in `ion-searchbar`. Use this method instead of the global\n`input.focus()`.\n\nDevelopers who wish to focus an input when a page enters\nshould call `setFocus()` in the `ionViewDidEnter()` lifecycle method.\n\nDevelopers who wish to focus an input when an overlay is presented\nshould call `setFocus` after `didPresent` has resolved.",
895
+ "text": "Sets focus on the native `input` in `ion-searchbar`. Use this method instead of the global\n`input.focus()`.\n\nDevelopers who wish to focus an input when a page enters\nshould call `setFocus()` in the `ionViewDidEnter()` lifecycle method.\n\nDevelopers who wish to focus an input when an overlay is presented\nshould call `setFocus` after `didPresent` has resolved.\n\nSee [managing focus](/docs/developing/managing-focus) for more information.",
894
896
  "tags": []
895
897
  }
896
898
  },
@@ -160,6 +160,8 @@ export class Textarea {
160
160
  /**
161
161
  * Sets focus on the native `textarea` in `ion-textarea`. Use this method instead of the global
162
162
  * `textarea.focus()`.
163
+ *
164
+ * See [managing focus](/docs/developing/managing-focus) for more information.
163
165
  */
164
166
  async setFocus() {
165
167
  if (this.nativeInput) {
@@ -448,7 +450,7 @@ Developers can use the "legacy" property to continue using the legacy form marku
448
450
  "optional": false,
449
451
  "docs": {
450
452
  "tags": [],
451
- "text": "This Boolean attribute lets you specify that a form control should have input focus when the page loads."
453
+ "text": "Sets the [`autofocus` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/autofocus) on the native input element.\n\nThis may not be sufficient for the element to be focused on page load. See [managing focus](/docs/developing/managing-focus) for more information."
452
454
  },
453
455
  "attribute": "autofocus",
454
456
  "reflect": false,
@@ -1035,7 +1037,7 @@ Developers can use the "legacy" property to continue using the legacy form marku
1035
1037
  "return": "Promise<void>"
1036
1038
  },
1037
1039
  "docs": {
1038
- "text": "Sets focus on the native `textarea` in `ion-textarea`. Use this method instead of the global\n`textarea.focus()`.",
1040
+ "text": "Sets focus on the native `textarea` in `ion-textarea`. Use this method instead of the global\n`textarea.focus()`.\n\nSee [managing focus](/docs/developing/managing-focus) for more information.",
1039
1041
  "tags": []
1040
1042
  }
1041
1043
  },
@@ -189,5 +189,5 @@ class BlockerDelegate {
189
189
  this.ctrl = undefined;
190
190
  }
191
191
  }
192
- const BACKDROP_NO_SCROLL = 'backdrop-no-scroll';
192
+ export const BACKDROP_NO_SCROLL = 'backdrop-no-scroll';
193
193
  export const GESTURE_CONTROLLER = new GestureController();