@ionic/core 7.5.8-dev.11701806358.1ca1b519 → 7.5.8-dev.11701894917.1c1465bd

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 (196) hide show
  1. package/components/data.js +1 -1
  2. package/components/ion-datetime.js +30 -39
  3. package/components/ion-picker-column-internal.d.ts +11 -0
  4. package/components/ion-picker-column-internal.js +9 -0
  5. package/components/ion-picker-column.js +2 -2
  6. package/components/{ion-picker-legacy.d.ts → ion-picker-internal.d.ts} +4 -4
  7. package/components/ion-picker-internal.js +9 -0
  8. package/components/ion-picker.js +309 -1
  9. package/components/overlays.js +3 -6
  10. package/components/picker-column-internal.js +390 -0
  11. package/components/picker-column.js +317 -363
  12. package/components/{picker.js → picker-internal.js} +16 -16
  13. package/dist/cjs/{data-e7526b58.js → data-36b9094e.js} +1 -1
  14. package/dist/cjs/index.cjs.js +1 -1
  15. package/dist/cjs/ion-action-sheet.cjs.entry.js +1 -1
  16. package/dist/cjs/ion-alert.cjs.entry.js +1 -1
  17. package/dist/cjs/ion-datetime-button.cjs.entry.js +1 -1
  18. package/dist/cjs/ion-datetime_3.cjs.entry.js +35 -29
  19. package/dist/cjs/ion-loading.cjs.entry.js +1 -1
  20. package/dist/cjs/ion-menu_3.cjs.entry.js +1 -1
  21. package/dist/cjs/ion-modal.cjs.entry.js +1 -1
  22. package/dist/cjs/{ion-picker-column.cjs.entry.js → ion-picker-column-internal.cjs.entry.js} +72 -105
  23. package/dist/cjs/{ion-picker.cjs.entry.js → ion-picker-internal.cjs.entry.js} +13 -13
  24. package/dist/cjs/ion-popover.cjs.entry.js +1 -1
  25. package/dist/cjs/ion-select_3.cjs.entry.js +1 -1
  26. package/dist/cjs/ion-toast.cjs.entry.js +1 -1
  27. package/dist/cjs/ionic.cjs.js +1 -1
  28. package/dist/cjs/loader.cjs.js +1 -1
  29. package/dist/cjs/{overlays-e8e05b0e.js → overlays-2c6b1072.js} +3 -6
  30. package/dist/collection/collection-manifest.json +6 -7
  31. package/dist/collection/components/datetime/datetime.ios.css +13 -0
  32. package/dist/collection/components/datetime/datetime.js +16 -19
  33. package/dist/collection/components/datetime/datetime.md.css +13 -0
  34. package/dist/collection/components/datetime/test/datetime.e2e.js +2 -2
  35. package/dist/collection/components/datetime/test/disabled/datetime.spec.js +4 -4
  36. package/dist/collection/components/datetime/test/locale/datetime.e2e.js +2 -2
  37. package/dist/collection/components/datetime/test/minmax/datetime.e2e.js +6 -6
  38. package/dist/collection/components/datetime/test/prefer-wheel/datetime.e2e.js +41 -43
  39. package/dist/collection/components/datetime/test/presentation/datetime.e2e.js +1 -1
  40. package/dist/collection/components/datetime/test/readonly/datetime.e2e.js +2 -2
  41. package/dist/collection/components/datetime/test/values/datetime.e2e.js +12 -15
  42. package/dist/collection/components/datetime/utils/data.js +1 -1
  43. package/dist/collection/components/picker/picker.ios.css +205 -100
  44. package/dist/collection/components/picker/picker.js +743 -461
  45. package/dist/collection/components/picker/picker.md.css +194 -98
  46. package/dist/collection/components/picker/test/basic/picker.e2e.js +13 -99
  47. package/dist/collection/components/{picker-legacy → picker}/test/is-open/picker.e2e.js +4 -4
  48. package/dist/collection/components/{picker-legacy → picker}/test/picker-id.spec.js +5 -5
  49. package/dist/collection/components/{picker-legacy → picker}/test/trigger/picker.e2e.js +1 -1
  50. package/dist/collection/components/picker-column/picker-column.ios.css +160 -120
  51. package/dist/collection/components/picker-column/picker-column.js +329 -514
  52. package/dist/collection/components/picker-column/picker-column.md.css +107 -134
  53. package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column-aria.spec.js +3 -3
  54. package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column-dynamic.spec.js +2 -2
  55. package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column.spec.js +2 -2
  56. package/dist/collection/components/{picker-legacy-column → picker-column}/test/standalone/picker-column.e2e.js +3 -3
  57. package/dist/collection/components/{picker-column-option/picker-column-option.md.css → picker-column-internal/picker-column-internal.ios.css} +53 -6
  58. package/dist/collection/components/picker-column-internal/picker-column-internal.js +565 -0
  59. package/dist/collection/components/{picker-legacy-column/picker-column.md.css → picker-column-internal/picker-column-internal.md.css} +63 -113
  60. package/dist/collection/components/{picker-column/test/basic/picker-column.e2e.js → picker-column-internal/test/basic/picker-column-internal.e2e.js} +8 -8
  61. package/dist/collection/components/picker-column-internal/test/disabled/picker-column-internal.e2e.js +162 -0
  62. package/dist/collection/components/{picker-legacy/picker.md.css → picker-internal/picker-internal.ios.css} +100 -192
  63. package/dist/collection/components/picker-internal/picker-internal.js +544 -0
  64. package/dist/collection/components/{picker-legacy-column/picker-column.ios.css → picker-internal/picker-internal.md.css} +101 -98
  65. package/dist/collection/components/{picker/test/a11y/picker.e2e.js → picker-internal/test/a11y/picker-internal.e2e.js} +2 -2
  66. package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +118 -0
  67. package/dist/collection/components/{picker/test/keyboard-entry/picker.e2e.js → picker-internal/test/keyboard-entry/picker-internal.e2e.js} +22 -23
  68. package/dist/collection/utils/overlays.js +3 -6
  69. package/dist/docs.json +23 -487
  70. package/dist/esm/{data-4b9508c9.js → data-f5c75b4e.js} +1 -1
  71. package/dist/esm/index.js +1 -1
  72. package/dist/esm/ion-action-sheet.entry.js +1 -1
  73. package/dist/esm/ion-alert.entry.js +1 -1
  74. package/dist/esm/ion-datetime-button.entry.js +1 -1
  75. package/dist/esm/ion-datetime_3.entry.js +34 -28
  76. package/dist/esm/ion-loading.entry.js +1 -1
  77. package/dist/esm/ion-menu_3.entry.js +1 -1
  78. package/dist/esm/ion-modal.entry.js +1 -1
  79. package/dist/esm/{ion-picker-column.entry.js → ion-picker-column-internal.entry.js} +72 -105
  80. package/dist/esm/{ion-picker.entry.js → ion-picker-internal.entry.js} +13 -13
  81. package/dist/esm/ion-popover.entry.js +1 -1
  82. package/dist/esm/ion-select_3.entry.js +1 -1
  83. package/dist/esm/ion-toast.entry.js +1 -1
  84. package/dist/esm/ionic.js +1 -1
  85. package/dist/esm/loader.js +1 -1
  86. package/dist/esm/{overlays-fbc5cab5.js → overlays-d23ea6e1.js} +3 -6
  87. package/dist/esm-es5/index.js +1 -1
  88. package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
  89. package/dist/esm-es5/ion-alert.entry.js +1 -1
  90. package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
  91. package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
  92. package/dist/esm-es5/ion-loading.entry.js +1 -1
  93. package/dist/esm-es5/ion-menu_3.entry.js +1 -1
  94. package/dist/esm-es5/ion-modal.entry.js +1 -1
  95. package/dist/esm-es5/ion-picker-column-internal.entry.js +4 -0
  96. package/dist/esm-es5/ion-picker-internal.entry.js +4 -0
  97. package/dist/esm-es5/ion-popover.entry.js +1 -1
  98. package/dist/esm-es5/ion-select_3.entry.js +1 -1
  99. package/dist/esm-es5/ion-toast.entry.js +1 -1
  100. package/dist/esm-es5/ionic.js +1 -1
  101. package/dist/esm-es5/loader.js +1 -1
  102. package/dist/esm-es5/overlays-d23ea6e1.js +4 -0
  103. package/dist/html.html-data.json +1 -152
  104. package/dist/ionic/index.esm.js +1 -1
  105. package/dist/ionic/ionic.esm.js +1 -1
  106. package/dist/ionic/{p-846ee227.entry.js → p-1e57bd24.entry.js} +1 -1
  107. package/dist/ionic/{p-26798a7b.system.entry.js → p-1f620cd4.system.entry.js} +1 -1
  108. package/dist/ionic/{p-5d42b6b4.entry.js → p-27ea6f4e.entry.js} +1 -1
  109. package/dist/ionic/{p-6b7c55cd.entry.js → p-2dc43d20.entry.js} +1 -1
  110. package/dist/ionic/{p-4a36430f.system.entry.js → p-2f2293da.system.entry.js} +1 -1
  111. package/dist/ionic/{p-21c3515a.entry.js → p-2f300cca.entry.js} +1 -1
  112. package/dist/ionic/{p-8017aad2.system.entry.js → p-39a335b6.system.entry.js} +1 -1
  113. package/dist/ionic/{p-4a081ea9.entry.js → p-3b568d18.entry.js} +1 -1
  114. package/dist/ionic/{p-c18de88a.system.entry.js → p-3e3d06a6.system.entry.js} +1 -1
  115. package/dist/ionic/{p-96dbbac1.system.entry.js → p-4df97e3c.system.entry.js} +1 -1
  116. package/dist/ionic/p-60502e3f.system.entry.js +4 -0
  117. package/dist/ionic/{p-563c41f0.system.entry.js → p-60b386c9.system.entry.js} +1 -1
  118. package/dist/ionic/p-67da080d.entry.js +4 -0
  119. package/dist/ionic/p-73ea8f82.system.entry.js +4 -0
  120. package/dist/ionic/p-80fa068e.entry.js +4 -0
  121. package/dist/ionic/{p-a8baa23e.entry.js → p-8780cc2a.entry.js} +1 -1
  122. package/dist/ionic/{p-f910cc73.system.entry.js → p-9eec42cc.system.entry.js} +1 -1
  123. package/dist/ionic/p-ab11130c.system.js +4 -0
  124. package/dist/ionic/p-af16fe62.entry.js +4 -0
  125. package/dist/ionic/{p-73aa7604.entry.js → p-af19a573.entry.js} +1 -1
  126. package/dist/ionic/p-c14f8ac8.js +4 -0
  127. package/dist/ionic/p-cce9f61a.system.entry.js +4 -0
  128. package/dist/ionic/{p-b133e9b4.entry.js → p-ddb30596.entry.js} +1 -1
  129. package/dist/ionic/{p-27bcbbc7.system.entry.js → p-e1e5afe1.system.entry.js} +1 -1
  130. package/dist/ionic/p-e3584231.system.js +1 -1
  131. package/dist/ionic/{p-fbf3a689.system.entry.js → p-e3ad9607.system.entry.js} +1 -1
  132. package/dist/ionic/{p-73190c5f.entry.js → p-f78efbd1.entry.js} +1 -1
  133. package/dist/ionic/{p-54dfc9b5.system.js → p-fff7a57e.system.js} +1 -1
  134. package/dist/types/components/datetime/utils/data.d.ts +2 -2
  135. package/dist/types/components/picker/picker.d.ts +131 -74
  136. package/dist/types/components/picker-column/picker-column.d.ts +39 -105
  137. package/dist/types/components/picker-column-internal/picker-column-internal.d.ts +102 -0
  138. package/dist/types/components/picker-internal/picker-internal-interfaces.d.ts +8 -0
  139. package/dist/types/components/picker-internal/picker-internal.d.ts +102 -0
  140. package/dist/types/components.d.ts +122 -163
  141. package/dist/types/interface.d.ts +1 -1
  142. package/dist/types/utils/config.d.ts +2 -2
  143. package/dist/types/utils/overlays.d.ts +2 -5
  144. package/hydrate/index.js +1151 -1287
  145. package/package.json +1 -1
  146. package/components/ion-picker-column-option.d.ts +0 -11
  147. package/components/ion-picker-column-option.js +0 -9
  148. package/components/ion-picker-legacy-column.d.ts +0 -11
  149. package/components/ion-picker-legacy-column.js +0 -9
  150. package/components/ion-picker-legacy.js +0 -309
  151. package/components/picker-column-option.js +0 -122
  152. package/components/picker-column2.js +0 -379
  153. package/dist/cjs/ion-picker-column-option.cjs.entry.js +0 -104
  154. package/dist/collection/components/picker-column/test/disabled/picker-column.e2e.js +0 -113
  155. package/dist/collection/components/picker-column/test/slots/picker-column.e2e.js +0 -39
  156. package/dist/collection/components/picker-column-option/picker-column-option.ios.css +0 -87
  157. package/dist/collection/components/picker-column-option/picker-column-option.js +0 -173
  158. package/dist/collection/components/picker-column-option/test/a11y/picker-column-option.e2e.js +0 -18
  159. package/dist/collection/components/picker-column-option/test/basic/picker-column-option.e2e.js +0 -37
  160. package/dist/collection/components/picker-legacy/picker.ios.css +0 -367
  161. package/dist/collection/components/picker-legacy/picker.js +0 -817
  162. package/dist/collection/components/picker-legacy/test/basic/picker.e2e.js +0 -25
  163. package/dist/collection/components/picker-legacy-column/picker-column.js +0 -419
  164. package/dist/esm/ion-picker-column-option.entry.js +0 -100
  165. package/dist/esm-es5/ion-picker-column-option.entry.js +0 -4
  166. package/dist/esm-es5/ion-picker-column.entry.js +0 -4
  167. package/dist/esm-es5/ion-picker.entry.js +0 -4
  168. package/dist/esm-es5/overlays-fbc5cab5.js +0 -4
  169. package/dist/ionic/p-23672c82.system.entry.js +0 -4
  170. package/dist/ionic/p-8fa6583d.system.js +0 -4
  171. package/dist/ionic/p-9282b16f.entry.js +0 -4
  172. package/dist/ionic/p-9ba90516.system.entry.js +0 -4
  173. package/dist/ionic/p-afcf4620.entry.js +0 -4
  174. package/dist/ionic/p-c2910c78.entry.js +0 -4
  175. package/dist/ionic/p-c8f0a036.entry.js +0 -4
  176. package/dist/ionic/p-ca8938f4.js +0 -4
  177. package/dist/ionic/p-ca9d1792.system.entry.js +0 -4
  178. package/dist/ionic/p-ffd5dba4.system.entry.js +0 -4
  179. package/dist/types/components/picker/picker-interfaces.d.ts +0 -8
  180. package/dist/types/components/picker-column-option/picker-column-option.d.ts +0 -66
  181. package/dist/types/components/picker-legacy/picker.d.ts +0 -158
  182. package/dist/types/components/picker-legacy-column/picker-column.d.ts +0 -46
  183. /package/dist/collection/components/{picker-legacy → picker}/animations/ios.enter.js +0 -0
  184. /package/dist/collection/components/{picker-legacy → picker}/animations/ios.leave.js +0 -0
  185. /package/dist/collection/components/picker/{picker-interfaces.js → picker-interface.js} +0 -0
  186. /package/dist/collection/components/{picker-legacy-column → picker-column}/test/test.utils.js +0 -0
  187. /package/dist/collection/components/{picker-column/picker-column-interfaces.js → picker-column-internal/picker-column-internal-interfaces.js} +0 -0
  188. /package/dist/collection/components/{picker-legacy/picker-interface.js → picker-internal/picker-internal-interfaces.js} +0 -0
  189. /package/dist/esm-es5/{data-4b9508c9.js → data-f5c75b4e.js} +0 -0
  190. /package/dist/ionic/{p-368f5215.js → p-2aea8b1e.js} +0 -0
  191. /package/dist/ionic/{p-f58981c2.system.js → p-82e3d633.system.js} +0 -0
  192. /package/dist/types/components/{picker-legacy → picker}/animations/ios.enter.d.ts +0 -0
  193. /package/dist/types/components/{picker-legacy → picker}/animations/ios.leave.d.ts +0 -0
  194. /package/dist/types/components/{picker-legacy → picker}/picker-interface.d.ts +0 -0
  195. /package/dist/types/components/{picker-legacy-column → picker-column}/test/test.utils.d.ts +0 -0
  196. /package/dist/types/components/{picker-column/picker-column-interfaces.d.ts → picker-column-internal/picker-column-internal-interfaces.d.ts} +0 -0
@@ -53,56 +53,89 @@
53
53
  * }
54
54
  * }
55
55
  */
56
- .picker-col {
56
+ :host {
57
57
  display: flex;
58
58
  position: relative;
59
- flex: 1;
59
+ align-items: center;
60
60
  justify-content: center;
61
- height: 100%;
62
- box-sizing: content-box;
63
- contain: content;
61
+ width: 100%;
62
+ height: 200px;
63
+ /**
64
+ * Picker columns should display
65
+ * in the order in which developers
66
+ * added them and should ignore
67
+ * LTR vs RTL directions.
68
+ */
69
+ direction: ltr;
70
+ /**
71
+ * This is required otherwise the
72
+ * highlight will appear behind
73
+ * the picker when used inline.
74
+ */
75
+ z-index: 0;
64
76
  }
65
77
 
66
- .picker-opts {
67
- position: relative;
68
- flex: 1;
69
- max-width: 100%;
78
+ :host .picker-before,
79
+ :host .picker-after {
80
+ position: absolute;
81
+ width: 100%;
82
+ /**
83
+ * The transform and z-index
84
+ * are needed for WebKit otherwise
85
+ * the fade will appear underneath the picker.
86
+ */
87
+ transform: translateZ(0);
88
+ z-index: 1;
89
+ pointer-events: none;
70
90
  }
71
91
 
72
- .picker-opt {
92
+ :host .picker-before {
73
93
  top: 0;
74
- display: block;
75
- position: absolute;
76
- width: 100%;
77
- border: 0;
78
- text-align: center;
79
- text-overflow: ellipsis;
80
- white-space: nowrap;
81
- contain: strict;
82
- overflow: hidden;
83
- will-change: transform;
94
+ height: 83px;
84
95
  }
85
96
  @supports (inset-inline-start: 0) {
86
- .picker-opt {
97
+ :host .picker-before {
87
98
  inset-inline-start: 0;
88
99
  }
89
100
  }
90
101
  @supports not (inset-inline-start: 0) {
91
- .picker-opt {
102
+ :host .picker-before {
92
103
  left: 0;
93
104
  }
94
- :host-context([dir=rtl]) .picker-opt {
105
+ :host-context([dir=rtl]) .picker-before {
95
106
  left: unset;
96
107
  right: unset;
97
108
  right: 0;
98
109
  }
99
- [dir=rtl] .picker-opt {
110
+ @supports selector(:dir(rtl)) {
111
+ :host(:dir(rtl)) .picker-before {
112
+ left: unset;
113
+ right: unset;
114
+ right: 0;
115
+ }
116
+ }
117
+ }
118
+
119
+ :host .picker-after {
120
+ top: 116px;
121
+ height: 84px;
122
+ }
123
+ @supports (inset-inline-start: 0) {
124
+ :host .picker-after {
125
+ inset-inline-start: 0;
126
+ }
127
+ }
128
+ @supports not (inset-inline-start: 0) {
129
+ :host .picker-after {
130
+ left: 0;
131
+ }
132
+ :host-context([dir=rtl]) .picker-after {
100
133
  left: unset;
101
134
  right: unset;
102
135
  right: 0;
103
136
  }
104
137
  @supports selector(:dir(rtl)) {
105
- .picker-opt:dir(rtl) {
138
+ :host(:dir(rtl)) .picker-after {
106
139
  left: unset;
107
140
  right: unset;
108
141
  right: 0;
@@ -110,38 +143,55 @@
110
143
  }
111
144
  }
112
145
 
113
- .picker-opt.picker-opt-disabled {
114
- pointer-events: none;
146
+ :host .picker-highlight {
147
+ border-radius: 8px;
148
+ left: 0;
149
+ right: 0;
150
+ top: 50%;
151
+ bottom: 0;
152
+ -webkit-margin-start: auto;
153
+ margin-inline-start: auto;
154
+ -webkit-margin-end: auto;
155
+ margin-inline-end: auto;
156
+ margin-top: 0;
157
+ margin-bottom: 0;
158
+ position: absolute;
159
+ width: calc(100% - 16px);
160
+ height: 34px;
161
+ transform: translateY(-50%);
162
+ background: var(--wheel-highlight-background);
163
+ z-index: -1;
115
164
  }
116
165
 
117
- .picker-opt-disabled {
166
+ :host input {
167
+ position: absolute;
168
+ top: 0;
169
+ left: 0;
170
+ right: 0;
171
+ bottom: 0;
172
+ width: 100%;
173
+ height: 100%;
174
+ margin: 0;
175
+ padding: 0;
176
+ border: 0;
177
+ outline: 0;
178
+ clip: rect(0 0 0 0);
118
179
  opacity: 0;
180
+ overflow: hidden;
181
+ -webkit-appearance: none;
182
+ -moz-appearance: none;
119
183
  }
120
184
 
121
- .picker-opts-left {
122
- justify-content: flex-start;
123
- }
124
-
125
- .picker-opts-right {
126
- justify-content: flex-end;
127
- }
128
-
129
- .picker-opt:active, .picker-opt:focus {
130
- outline: none;
185
+ :host ::slotted(ion-picker-column-internal:first-of-type) {
186
+ text-align: start;
131
187
  }
132
188
 
133
- .picker-prefix {
134
- position: relative;
135
- flex: 1;
189
+ :host ::slotted(ion-picker-column-internal:last-of-type) {
136
190
  text-align: end;
137
- white-space: nowrap;
138
191
  }
139
192
 
140
- .picker-suffix {
141
- position: relative;
142
- flex: 1;
143
- text-align: start;
144
- white-space: nowrap;
193
+ :host ::slotted(ion-picker-column-internal:only-child) {
194
+ text-align: center;
145
195
  }
146
196
 
147
197
  /**
@@ -199,57 +249,10 @@
199
249
  * }
200
250
  * }
201
251
  */
202
- .picker-col {
203
- -webkit-padding-start: 4px;
204
- padding-inline-start: 4px;
205
- -webkit-padding-end: 4px;
206
- padding-inline-end: 4px;
207
- padding-top: 0;
208
- padding-bottom: 0;
209
- transform-style: preserve-3d;
210
- }
211
-
212
- .picker-prefix,
213
- .picker-suffix,
214
- .picker-opts {
215
- top: 77px;
216
- transform-style: preserve-3d;
217
- color: inherit;
218
- font-size: 20px;
219
- line-height: 42px;
220
- pointer-events: none;
221
- }
222
-
223
- .picker-opt {
224
- padding-left: 0;
225
- padding-right: 0;
226
- padding-top: 0;
227
- padding-bottom: 0;
228
- margin-left: 0;
229
- margin-right: 0;
230
- margin-top: 0;
231
- margin-bottom: 0;
232
- transform-origin: center center;
233
- height: 46px;
234
- transform-style: preserve-3d;
235
- transition-timing-function: ease-out;
236
- background: transparent;
237
- color: inherit;
238
- font-size: 20px;
239
- line-height: 42px;
240
- backface-visibility: hidden;
241
- pointer-events: auto;
242
- }
243
- :host-context([dir=rtl]) .picker-opt {
244
- transform-origin: calc(100% - center) center;
252
+ :host .picker-before {
253
+ background: linear-gradient(to bottom, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1) 20%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0) 90%);
245
254
  }
246
255
 
247
- [dir=rtl] .picker-opt {
248
- transform-origin: calc(100% - center) center;
249
- }
250
-
251
- @supports selector(:dir(rtl)) {
252
- .picker-opt:dir(rtl) {
253
- transform-origin: calc(100% - center) center;
254
- }
256
+ :host .picker-after {
257
+ background: linear-gradient(to top, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1) 30%, rgba(var(--wheel-fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0) 90%);
255
258
  }
@@ -5,9 +5,9 @@ import AxeBuilder from "@axe-core/playwright";
5
5
  import { expect } from "@playwright/test";
6
6
  import { configs, test } from "../../../../utils/test/playwright/index";
7
7
  configs().forEach(({ title, config }) => {
8
- test.describe(title('picker: a11y'), () => {
8
+ test.describe(title('picker-internal: a11y'), () => {
9
9
  test('should not have accessibility violations', async ({ page }) => {
10
- await page.goto(`/src/components/picker/test/a11y`, config);
10
+ await page.goto(`/src/components/picker-internal/test/a11y`, config);
11
11
  const results = await new AxeBuilder({ page }).analyze();
12
12
  expect(results.violations).toEqual([]);
13
13
  });
@@ -0,0 +1,118 @@
1
+ /*!
2
+ * (C) Ionic http://ionicframework.com - MIT License
3
+ */
4
+ import { expect } from "@playwright/test";
5
+ import { configs, test } from "../../../../utils/test/playwright/index";
6
+ /**
7
+ * This behavior does not vary across directions.
8
+ */
9
+ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
10
+ test.describe(title('picker-internal: rendering'), () => {
11
+ test('inline pickers should not have visual regression', async ({ page }) => {
12
+ await page.goto(`/src/components/picker-internal/test/basic`, config);
13
+ const fullStack = page.locator('#inline button[data-value="full-stack"]');
14
+ const onion = page.locator('#inline button[data-value="onion"]');
15
+ await expect(fullStack).toHaveClass(/picker-item-active/);
16
+ await expect(onion).toHaveClass(/picker-item-active/);
17
+ await page.waitForChanges();
18
+ await expect(page.locator('#inline')).toHaveScreenshot(screenshot(`picker-internal-inline-diff`));
19
+ });
20
+ });
21
+ test.describe(title('picker-internal: overlay rendering'), () => {
22
+ test('popover: should not have visual regression', async ({ page }) => {
23
+ await page.goto(`/src/components/picker-internal/test/basic`, config);
24
+ const button = page.locator('#popover');
25
+ const didPresent = await page.spyOnEvent('ionPopoverDidPresent');
26
+ const pickerInternal = page.locator('ion-popover ion-picker-internal');
27
+ await button.click();
28
+ await didPresent.next();
29
+ await expect(pickerInternal).toBeVisible();
30
+ const popoverContent = page.locator('ion-popover .ion-delegate-host');
31
+ await expect(popoverContent).toHaveScreenshot(screenshot(`picker-internal-popover-diff`), {
32
+ /**
33
+ * Animations must be enabled to capture the screenshot.
34
+ * By default, animations are disabled with toHaveScreenshot,
35
+ * and when capturing the screenshot will call animation.finish().
36
+ * This will cause the popover to close and the screenshot capture
37
+ * to be invalid.
38
+ */
39
+ animations: 'allow',
40
+ });
41
+ });
42
+ test('modal: should not have visual regression', async ({ page }) => {
43
+ await page.goto('/src/components/picker-internal/test/basic', config);
44
+ const button = page.locator('#modal');
45
+ const didPresent = await page.spyOnEvent('ionModalDidPresent');
46
+ const pickerInternal = page.locator('ion-modal ion-picker-internal');
47
+ await button.click();
48
+ await didPresent.next();
49
+ await expect(pickerInternal).toBeVisible();
50
+ const modalContent = page.locator('ion-modal .ion-delegate-host');
51
+ await expect(modalContent).toHaveScreenshot(screenshot(`picker-internal-modal-diff`), {
52
+ /**
53
+ * Animations must be enabled to capture the screenshot.
54
+ * By default, animations are disabled with toHaveScreenshot,
55
+ * and when capturing the screenshot will call animation.finish().
56
+ * This will cause the modal to close and the screenshot capture
57
+ * to be invalid.
58
+ */
59
+ animations: 'allow',
60
+ });
61
+ });
62
+ });
63
+ });
64
+ /**
65
+ * This behavior does not vary across modes/directions.
66
+ */
67
+ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
68
+ test.describe(title('picker-internal: focus'), () => {
69
+ test.beforeEach(async ({ page }) => {
70
+ await page.setContent(`
71
+ <ion-picker-internal>
72
+ <ion-picker-column-internal value="full-stack" id="first"></ion-picker-column-internal>
73
+ <ion-picker-column-internal value="onion" id="second"></ion-picker-column-internal>
74
+ </ion-picker-internal>
75
+
76
+ <script>
77
+ const columns = document.querySelectorAll('ion-picker-column-internal');
78
+ columns[0].items = [
79
+ { text: 'Minified', value: 'minified' },
80
+ { text: 'Responsive', value: 'responsive' },
81
+ { text: 'Full Stack', value: 'full-stack' },
82
+ { text: 'Mobile First', value: 'mobile-first' },
83
+ { text: 'Serverless', value: 'serverless' },
84
+ ]
85
+
86
+ columns[1].items = [
87
+ { text: 'Tomato', value: 'tomato' },
88
+ { text: 'Avocado', value: 'avocado' },
89
+ { text: 'Onion', value: 'onion' },
90
+ { text: 'Potato', value: 'potato' },
91
+ { text: 'Artichoke', value: 'artichoke' },
92
+ ];
93
+ </script>
94
+ `, config);
95
+ });
96
+ test('tabbing should correctly move focus between columns', async ({ page }) => {
97
+ const firstColumn = page.locator('ion-picker-column-internal#first');
98
+ const secondColumn = page.locator('ion-picker-column-internal#second');
99
+ // Focus first column
100
+ await page.keyboard.press('Tab');
101
+ await expect(firstColumn).toBeFocused();
102
+ await page.waitForChanges();
103
+ // Focus second column
104
+ await page.keyboard.press('Tab');
105
+ await expect(secondColumn).toBeFocused();
106
+ });
107
+ test('tabbing should correctly move focus back', async ({ page }) => {
108
+ const firstColumn = page.locator('ion-picker-column-internal#first');
109
+ const secondColumn = page.locator('ion-picker-column-internal#second');
110
+ await secondColumn.focus();
111
+ await expect(secondColumn).toBeFocused();
112
+ await page.waitForChanges();
113
+ // Focus first column
114
+ await page.keyboard.press('Shift+Tab');
115
+ await expect(firstColumn).toBeFocused();
116
+ });
117
+ });
118
+ });
@@ -6,17 +6,16 @@ import { configs, test } from "../../../../utils/test/playwright/index";
6
6
  /**
7
7
  * This behavior does not vary across modes/directions.
8
8
  */
9
- // TODO FW-5580 fix this functionality
10
9
  configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
11
- test.describe.skip(title('picker: keyboard entry'), () => {
10
+ test.describe(title('picker-internal: keyboard entry'), () => {
12
11
  test('should scroll to and update the value prop for a single column', async ({ page }) => {
13
12
  await page.setContent(`
14
- <ion-picker>
15
- <ion-picker-column></ion-picker-column>
16
- </ion-picker>
13
+ <ion-picker-internal>
14
+ <ion-picker-column-internal></ion-picker-column-internal>
15
+ </ion-picker-internal>
17
16
 
18
17
  <script>
19
- const column = document.querySelector('ion-picker-column');
18
+ const column = document.querySelector('ion-picker-column-internal');
20
19
  column.items = [
21
20
  { text: '01', value: 1 },
22
21
  { text: '02', value: 2 },
@@ -28,22 +27,22 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) =>
28
27
  column.numericInput = true;
29
28
  </script>
30
29
  `, config);
31
- const column = page.locator('ion-picker-column');
30
+ const column = page.locator('ion-picker-column-internal');
32
31
  const ionChange = await page.spyOnEvent('ionChange');
33
- await column.evaluate((el) => el.setFocus());
32
+ await column.focus();
34
33
  await page.keyboard.press('Digit2');
35
34
  await expect(ionChange).toHaveReceivedEventDetail({ text: '02', value: 2 });
36
35
  await expect(column).toHaveJSProperty('value', 2);
37
36
  });
38
37
  test('should scroll to and update the value prop for multiple columns', async ({ page }) => {
39
38
  await page.setContent(`
40
- <ion-picker>
41
- <ion-picker-column id="first"></ion-picker-column>
42
- <ion-picker-column id="second"></ion-picker-column>
43
- </ion-picker>
39
+ <ion-picker-internal>
40
+ <ion-picker-column-internal id="first"></ion-picker-column-internal>
41
+ <ion-picker-column-internal id="second"></ion-picker-column-internal>
42
+ </ion-picker-internal>
44
43
 
45
44
  <script>
46
- const firstColumn = document.querySelector('ion-picker-column#first');
45
+ const firstColumn = document.querySelector('ion-picker-column-internal#first');
47
46
  firstColumn.items = [
48
47
  { text: '01', value: 1 },
49
48
  { text: '02', value: 2 },
@@ -54,7 +53,7 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) =>
54
53
  firstColumn.value = 5;
55
54
  firstColumn.numericInput = true;
56
55
 
57
- const secondColumn = document.querySelector('ion-picker-column#second');
56
+ const secondColumn = document.querySelector('ion-picker-column-internal#second');
58
57
  secondColumn.items = [
59
58
  { text: '20', value: 20 },
60
59
  { text: '21', value: 21 },
@@ -66,9 +65,9 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) =>
66
65
  secondColumn.numericInput = true;
67
66
  </script>
68
67
  `, config);
69
- const firstColumn = page.locator('ion-picker-column#first');
70
- const secondColumn = page.locator('ion-picker-column#second');
71
- const highlight = page.locator('ion-picker .picker-highlight');
68
+ const firstColumn = page.locator('ion-picker-column-internal#first');
69
+ const secondColumn = page.locator('ion-picker-column-internal#second');
70
+ const highlight = page.locator('ion-picker-internal .picker-highlight');
72
71
  const firstIonChange = await firstColumn.spyOnEvent('ionChange');
73
72
  const secondIonChange = await secondColumn.spyOnEvent('ionChange');
74
73
  const box = await highlight.boundingBox();
@@ -86,12 +85,12 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) =>
86
85
  });
87
86
  test('should select 00', async ({ page }) => {
88
87
  await page.setContent(`
89
- <ion-picker>
90
- <ion-picker-column></ion-picker-column>
91
- </ion-picker>
88
+ <ion-picker-internal>
89
+ <ion-picker-column-internal></ion-picker-column-internal>
90
+ </ion-picker-internal>
92
91
 
93
92
  <script>
94
- const column = document.querySelector('ion-picker-column');
93
+ const column = document.querySelector('ion-picker-column-internal');
95
94
  column.items = [
96
95
  { text: '00', value: 12 },
97
96
  { text: '01', value: 1 },
@@ -104,9 +103,9 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) =>
104
103
  column.numericInput = true;
105
104
  </script>
106
105
  `, config);
107
- const column = page.locator('ion-picker-column');
106
+ const column = page.locator('ion-picker-column-internal');
108
107
  const ionChange = await page.spyOnEvent('ionChange');
109
- await column.evaluate((el) => el.setFocus());
108
+ await column.focus();
110
109
  await page.keyboard.press('Digit0');
111
110
  await expect(ionChange).toHaveReceivedEventDetail({ text: '00', value: 12 });
112
111
  await expect(column).toHaveJSProperty('value', 12);
@@ -29,10 +29,7 @@ export const alertController = /*@__PURE__*/ createController('ion-alert');
29
29
  export const actionSheetController = /*@__PURE__*/ createController('ion-action-sheet');
30
30
  export const loadingController = /*@__PURE__*/ createController('ion-loading');
31
31
  export const modalController = /*@__PURE__*/ createController('ion-modal');
32
- /**
33
- * @deprecated Use the inline ion-picker component instead.
34
- */
35
- export const pickerController = /*@__PURE__*/ createController('ion-picker-legacy');
32
+ export const pickerController = /*@__PURE__*/ createController('ion-picker');
36
33
  export const popoverController = /*@__PURE__*/ createController('ion-popover');
37
34
  export const toastController = /*@__PURE__*/ createController('ion-toast');
38
35
  /**
@@ -142,7 +139,7 @@ const focusLastDescendant = (ref, overlay) => {
142
139
  * Should NOT include: Toast
143
140
  */
144
141
  const trapKeyboardFocus = (ev, doc) => {
145
- const lastOverlay = getPresentedOverlay(doc, 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker-legacy,ion-popover');
142
+ const lastOverlay = getPresentedOverlay(doc, 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker,ion-popover');
146
143
  const target = ev.target;
147
144
  /**
148
145
  * If no active overlay, ignore this event.
@@ -327,7 +324,7 @@ export const dismissOverlay = (doc, data, role, overlayTag, id) => {
327
324
  */
328
325
  export const getOverlays = (doc, selector) => {
329
326
  if (selector === undefined) {
330
- selector = 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker-legacy,ion-popover,ion-toast';
327
+ selector = 'ion-alert,ion-action-sheet,ion-loading,ion-modal,ion-picker,ion-popover,ion-toast';
331
328
  }
332
329
  return Array.from(doc.querySelectorAll(selector)).filter((c) => c.overlayIndex > 0);
333
330
  };