@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,97 +53,89 @@
53
53
  * }
54
54
  * }
55
55
  */
56
- .picker-col {
57
- display: flex;
58
- position: relative;
59
- flex: 1;
60
- justify-content: center;
61
- height: 100%;
62
- box-sizing: content-box;
63
- contain: content;
56
+ :host {
57
+ -webkit-padding-start: 16px;
58
+ padding-inline-start: 16px;
59
+ -webkit-padding-end: 16px;
60
+ padding-inline-end: 16px;
61
+ padding-top: 0px;
62
+ padding-bottom: 0px;
63
+ height: 200px;
64
+ outline: none;
65
+ font-size: 22px;
66
+ scroll-snap-type: y mandatory;
67
+ /**
68
+ * Need to explicitly set overflow-x: hidden
69
+ * for older implementations of scroll snapping.
70
+ */
71
+ overflow-x: hidden;
72
+ overflow-y: scroll;
73
+ scrollbar-width: none;
74
+ text-align: center;
64
75
  }
65
76
 
66
- .picker-opts {
67
- position: relative;
68
- flex: 1;
69
- max-width: 100%;
77
+ /**
78
+ * Hide scrollbars on Chrome and Safari
79
+ */
80
+ :host::-webkit-scrollbar {
81
+ display: none;
70
82
  }
71
83
 
72
- .picker-opt {
73
- top: 0;
84
+ :host .picker-item {
85
+ padding-left: 0;
86
+ padding-right: 0;
87
+ padding-top: 0;
88
+ padding-bottom: 0;
89
+ margin-left: 0;
90
+ margin-right: 0;
91
+ margin-top: 0;
92
+ margin-bottom: 0;
74
93
  display: block;
75
- position: absolute;
76
94
  width: 100%;
77
- border: 0;
78
- text-align: center;
95
+ height: 34px;
96
+ border: 0px;
97
+ outline: none;
98
+ background: transparent;
99
+ color: inherit;
100
+ font-family: var(--ion-font-family, inherit);
101
+ font-size: inherit;
102
+ line-height: 34px;
103
+ text-align: inherit;
79
104
  text-overflow: ellipsis;
80
105
  white-space: nowrap;
81
- contain: strict;
106
+ cursor: pointer;
82
107
  overflow: hidden;
83
- will-change: transform;
84
- }
85
- @supports (inset-inline-start: 0) {
86
- .picker-opt {
87
- inset-inline-start: 0;
88
- }
89
- }
90
- @supports not (inset-inline-start: 0) {
91
- .picker-opt {
92
- left: 0;
93
- }
94
- :host-context([dir=rtl]) .picker-opt {
95
- left: unset;
96
- right: unset;
97
- right: 0;
98
- }
99
- [dir=rtl] .picker-opt {
100
- left: unset;
101
- right: unset;
102
- right: 0;
103
- }
104
- @supports selector(:dir(rtl)) {
105
- .picker-opt:dir(rtl) {
106
- left: unset;
107
- right: unset;
108
- right: 0;
109
- }
110
- }
111
- }
112
-
113
- .picker-opt.picker-opt-disabled {
114
- pointer-events: none;
108
+ scroll-snap-align: center;
115
109
  }
116
110
 
117
- .picker-opt-disabled {
118
- opacity: 0;
111
+ :host .picker-item-empty,
112
+ :host .picker-item[disabled] {
113
+ cursor: default;
119
114
  }
120
115
 
121
- .picker-opts-left {
122
- justify-content: flex-start;
116
+ :host .picker-item-empty,
117
+ :host(:not([disabled])) .picker-item[disabled] {
118
+ scroll-snap-align: none;
123
119
  }
124
120
 
125
- .picker-opts-right {
126
- justify-content: flex-end;
121
+ :host([disabled]) {
122
+ overflow-y: hidden;
127
123
  }
128
124
 
129
- .picker-opt:active, .picker-opt:focus {
130
- outline: none;
125
+ :host .picker-item[disabled] {
126
+ opacity: 0.4;
131
127
  }
132
128
 
133
- .picker-prefix {
134
- position: relative;
135
- flex: 1;
136
- text-align: end;
137
- white-space: nowrap;
129
+ :host(.picker-column-active) .picker-item.picker-item-active {
130
+ color: var(--ion-color-base);
138
131
  }
139
132
 
140
- .picker-suffix {
141
- position: relative;
142
- flex: 1;
143
- text-align: start;
144
- white-space: nowrap;
133
+ @media (any-hover: hover) {
134
+ :host(:focus) {
135
+ outline: none;
136
+ background: rgba(var(--ion-color-base-rgb), 0.2);
137
+ }
145
138
  }
146
-
147
139
  /**
148
140
  * Convert a font size to a dynamic font size.
149
141
  * Fonts that participate in Dynamic Type should use
@@ -199,48 +191,6 @@
199
191
  * }
200
192
  * }
201
193
  */
202
- .picker-col {
203
- -webkit-padding-start: 8px;
204
- padding-inline-start: 8px;
205
- -webkit-padding-end: 8px;
206
- padding-inline-end: 8px;
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: 22px;
219
- line-height: 42px;
220
- pointer-events: none;
221
- }
222
-
223
- .picker-opt {
224
- margin-left: 0;
225
- margin-right: 0;
226
- margin-top: 0;
227
- margin-bottom: 0;
228
- padding-left: 0;
229
- padding-right: 0;
230
- padding-top: 0;
231
- padding-bottom: 0;
232
- height: 43px;
233
- transition-timing-function: ease-out;
234
- background: transparent;
235
- color: inherit;
236
- font-size: 22px;
237
- line-height: 42px;
238
- backface-visibility: hidden;
239
- pointer-events: auto;
240
- }
241
-
242
- .picker-prefix,
243
- .picker-suffix,
244
- .picker-opt.picker-opt-selected {
245
- color: var(--ion-color-primary, #3880ff);
194
+ :host .picker-item-active {
195
+ color: var(--ion-color-base);
246
196
  }
@@ -7,20 +7,20 @@ import { configs, test } from "../../../../utils/test/playwright/index";
7
7
  * This behavior does not vary across modes/directions.
8
8
  */
9
9
  configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
10
- test.describe(title('picker-column'), () => {
10
+ test.describe(title('picker-column-internal'), () => {
11
11
  test.beforeEach(async ({ page }) => {
12
- await page.goto('/src/components/picker-column/test/basic', config);
12
+ await page.goto('/src/components/picker-column-internal/test/basic', config);
13
13
  });
14
14
  test('should render a picker item for each item', async ({ page }) => {
15
- const columns = page.locator('ion-picker-column ion-picker-column-option');
15
+ const columns = page.locator('ion-picker-column-internal .picker-item:not(.picker-item-empty)');
16
16
  await expect(columns).toHaveCount(24);
17
17
  });
18
18
  test('should render 6 empty picker items', async ({ page }) => {
19
- const columns = page.locator('ion-picker-column .picker-item-empty');
19
+ const columns = page.locator('ion-picker-column-internal .picker-item-empty');
20
20
  await expect(columns).toHaveCount(6);
21
21
  });
22
22
  test('should not have an active item when value is not set', async ({ page }) => {
23
- const activeColumn = page.locator('ion-picker-column ion-picker-column-option.option-active');
23
+ const activeColumn = page.locator('ion-picker-column-internal .picker-item-active');
24
24
  await expect(activeColumn).toHaveCount(0);
25
25
  });
26
26
  test('should have an active item when value is set', async ({ page }) => {
@@ -28,7 +28,7 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) =>
28
28
  el.value = '12';
29
29
  });
30
30
  await page.waitForChanges();
31
- const activeColumn = page.locator('ion-picker-column ion-picker-column-option.option-active');
31
+ const activeColumn = page.locator('ion-picker-column-internal .picker-item-active');
32
32
  expect(activeColumn).not.toBeNull();
33
33
  });
34
34
  // TODO FW-3616
@@ -38,8 +38,8 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) =>
38
38
  el.scrollTop = 801;
39
39
  });
40
40
  await page.waitForChanges();
41
- const activeColumn = page.locator('ion-picker-column ion-picker-column-option.option-active');
42
- await expect(activeColumn).toHaveJSProperty('value', 23);
41
+ const activeColumn = page.locator('ion-picker-column-internal .picker-item-active');
42
+ expect(await (activeColumn === null || activeColumn === void 0 ? void 0 : activeColumn.innerText())).toEqual('23');
43
43
  });
44
44
  test('should not emit ionChange when the value is modified externally', async ({ page, skip }) => {
45
45
  skip.browser('firefox', 'https://bugzilla.mozilla.org/show_bug.cgi?id=1766890');
@@ -0,0 +1,162 @@
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-column-internal: disabled rendering'), () => {
11
+ test('should not have visual regressions', async ({ page }) => {
12
+ await page.setContent(`
13
+ <ion-picker-internal>
14
+ <ion-picker-column-internal value="b"></ion-picker-column-internal>
15
+ </ion-picker-internal>
16
+
17
+ <script>
18
+ const column = document.querySelector('ion-picker-column-internal');
19
+ column.items = [
20
+ { text: 'A', value: 'a', disabled: true },
21
+ { text: 'B', value: 'b' },
22
+ { text: 'C', value: 'c', disabled: true }
23
+ ]
24
+ </script>
25
+ `, config);
26
+ const picker = page.locator('ion-picker-internal');
27
+ await expect(picker).toHaveScreenshot(screenshot(`picker-internal-disabled`));
28
+ });
29
+ });
30
+ });
31
+ /**
32
+ * This behavior does not vary across modes/directions.
33
+ */
34
+ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
35
+ test.describe(title('picker-column-internal: disabled items'), () => {
36
+ test('all picker items should be enabled by default', async ({ page }) => {
37
+ await page.setContent(`
38
+ <ion-picker-internal>
39
+ <ion-picker-column-internal></ion-picker-column-internal>
40
+ </ion-picker-internal>
41
+
42
+ <script>
43
+ const column = document.querySelector('ion-picker-column-internal');
44
+ column.items = [
45
+ { text: 'A', value: 'a' },
46
+ { text: 'B', value: 'b' },
47
+ { text: 'C', value: 'c' }
48
+ ]
49
+ </script>
50
+ `, config);
51
+ const pickerItems = page.locator('ion-picker-column-internal .picker-item:not(.picker-item-empty, [disabled])');
52
+ expect(await pickerItems.count()).toBe(3);
53
+ });
54
+ test('disabled picker item should not be interactive', async ({ page }) => {
55
+ await page.setContent(`
56
+ <ion-picker-internal>
57
+ <ion-picker-column-internal></ion-picker-column-internal>
58
+ </ion-picker-internal>
59
+
60
+ <script>
61
+ const column = document.querySelector('ion-picker-column-internal');
62
+ column.items = [
63
+ { text: 'A', value: 'a' },
64
+ { text: 'B', value: 'b', disabled: true },
65
+ { text: 'C', value: 'c' }
66
+ ]
67
+ </script>
68
+ `, config);
69
+ const disabledItem = page.locator('ion-picker-column-internal .picker-item[disabled]');
70
+ await expect(disabledItem).not.toBeEnabled();
71
+ });
72
+ test('disabled picker item should not be considered active', async ({ page }) => {
73
+ await page.setContent(`
74
+ <ion-picker-internal>
75
+ <ion-picker-column-internal value="b"></ion-picker-column-internal>
76
+ </ion-picker-internal>
77
+
78
+ <script>
79
+ const column = document.querySelector('ion-picker-column-internal');
80
+ column.items = [
81
+ { text: 'A', value: 'a' },
82
+ { text: 'B', value: 'b', disabled: true },
83
+ { text: 'C', value: 'c' }
84
+ ]
85
+ </script>
86
+ `, config);
87
+ const disabledItem = page.locator('ion-picker-column-internal .picker-item[data-value="b"]');
88
+ await expect(disabledItem).not.toHaveClass(/picker-item-active/);
89
+ });
90
+ test('setting the value to a disabled item should not cause that item to be active', async ({ page }) => {
91
+ await page.setContent(`
92
+ <ion-picker-internal>
93
+ <ion-picker-column-internal></ion-picker-column-internal>
94
+ </ion-picker-internal>
95
+
96
+ <script>
97
+ const column = document.querySelector('ion-picker-column-internal');
98
+ column.items = [
99
+ { text: 'A', value: 'a' },
100
+ { text: 'B', value: 'b', disabled: true },
101
+ { text: 'C', value: 'c' }
102
+ ]
103
+ </script>
104
+ `, config);
105
+ const pickerColumn = page.locator('ion-picker-column-internal');
106
+ await pickerColumn.evaluate((el) => (el.value = 'b'));
107
+ await page.waitForChanges();
108
+ const disabledItem = page.locator('ion-picker-column-internal .picker-item[data-value="b"]');
109
+ await expect(disabledItem).toBeDisabled();
110
+ await expect(disabledItem).not.toHaveClass(/picker-item-active/);
111
+ });
112
+ test('defaulting the value to a disabled item should not cause that item to be active', async ({ page }) => {
113
+ await page.setContent(`
114
+ <ion-picker-internal>
115
+ <ion-picker-column-internal></ion-picker-column-internal>
116
+ </ion-picker-internal>
117
+
118
+ <script>
119
+ const column = document.querySelector('ion-picker-column-internal');
120
+ column.items = [
121
+ { text: 'A', value: 'a' },
122
+ { text: 'B', value: 'b', disabled: true },
123
+ { text: 'C', value: 'c' }
124
+ ]
125
+ column.value = 'b'
126
+ </script>
127
+ `, config);
128
+ const disabledItem = page.locator('ion-picker-column-internal .picker-item[data-value="b"]');
129
+ await expect(disabledItem).toBeDisabled();
130
+ await expect(disabledItem).not.toHaveClass(/picker-item-active/);
131
+ });
132
+ });
133
+ });
134
+ /**
135
+ * This behavior does not vary across directions.
136
+ */
137
+ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
138
+ test.describe(title('picker-column-internal: disabled column rendering'), () => {
139
+ test.beforeEach(async ({ page }) => {
140
+ await page.goto('/src/components/picker-column-internal/test/disabled', config);
141
+ });
142
+ test('disabled column should not have visual regressions', async ({ page }) => {
143
+ const disabledColumn = page.locator('#column-disabled');
144
+ await page.waitForChanges();
145
+ await expect(disabledColumn).toHaveScreenshot(screenshot('picker-internal-disabled-column'));
146
+ });
147
+ });
148
+ });
149
+ /**
150
+ * This behavior does not vary across modes/directions.
151
+ */
152
+ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
153
+ test.describe(title('picker-column-internal: disabled column'), () => {
154
+ test.beforeEach(async ({ page }) => {
155
+ await page.goto('/src/components/picker-column-internal/test/disabled', config);
156
+ });
157
+ test('item in disabled column should not be interactive', async ({ page }) => {
158
+ const secondItem = page.locator('#column-disabled .picker-item:not(.picker-item-empty)').nth(1);
159
+ await expect(secondItem).toBeDisabled();
160
+ });
161
+ });
162
+ });