@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.
- package/components/data.js +1 -1
- package/components/ion-datetime.js +30 -39
- package/components/ion-picker-column-internal.d.ts +11 -0
- package/components/ion-picker-column-internal.js +9 -0
- package/components/ion-picker-column.js +2 -2
- package/components/{ion-picker-legacy.d.ts → ion-picker-internal.d.ts} +4 -4
- package/components/ion-picker-internal.js +9 -0
- package/components/ion-picker.js +309 -1
- package/components/overlays.js +3 -6
- package/components/picker-column-internal.js +390 -0
- package/components/picker-column.js +317 -363
- package/components/{picker.js → picker-internal.js} +16 -16
- package/dist/cjs/{data-e7526b58.js → data-36b9094e.js} +1 -1
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/ion-action-sheet.cjs.entry.js +1 -1
- package/dist/cjs/ion-alert.cjs.entry.js +1 -1
- package/dist/cjs/ion-datetime-button.cjs.entry.js +1 -1
- package/dist/cjs/ion-datetime_3.cjs.entry.js +35 -29
- package/dist/cjs/ion-loading.cjs.entry.js +1 -1
- package/dist/cjs/ion-menu_3.cjs.entry.js +1 -1
- package/dist/cjs/ion-modal.cjs.entry.js +1 -1
- package/dist/cjs/{ion-picker-column.cjs.entry.js → ion-picker-column-internal.cjs.entry.js} +72 -105
- package/dist/cjs/{ion-picker.cjs.entry.js → ion-picker-internal.cjs.entry.js} +13 -13
- package/dist/cjs/ion-popover.cjs.entry.js +1 -1
- package/dist/cjs/ion-select_3.cjs.entry.js +1 -1
- package/dist/cjs/ion-toast.cjs.entry.js +1 -1
- package/dist/cjs/ionic.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{overlays-e8e05b0e.js → overlays-2c6b1072.js} +3 -6
- package/dist/collection/collection-manifest.json +6 -7
- package/dist/collection/components/datetime/datetime.ios.css +13 -0
- package/dist/collection/components/datetime/datetime.js +16 -19
- package/dist/collection/components/datetime/datetime.md.css +13 -0
- package/dist/collection/components/datetime/test/datetime.e2e.js +2 -2
- package/dist/collection/components/datetime/test/disabled/datetime.spec.js +4 -4
- package/dist/collection/components/datetime/test/locale/datetime.e2e.js +2 -2
- package/dist/collection/components/datetime/test/minmax/datetime.e2e.js +6 -6
- package/dist/collection/components/datetime/test/prefer-wheel/datetime.e2e.js +41 -43
- package/dist/collection/components/datetime/test/presentation/datetime.e2e.js +1 -1
- package/dist/collection/components/datetime/test/readonly/datetime.e2e.js +2 -2
- package/dist/collection/components/datetime/test/values/datetime.e2e.js +12 -15
- package/dist/collection/components/datetime/utils/data.js +1 -1
- package/dist/collection/components/picker/picker.ios.css +205 -100
- package/dist/collection/components/picker/picker.js +743 -461
- package/dist/collection/components/picker/picker.md.css +194 -98
- package/dist/collection/components/picker/test/basic/picker.e2e.js +13 -99
- package/dist/collection/components/{picker-legacy → picker}/test/is-open/picker.e2e.js +4 -4
- package/dist/collection/components/{picker-legacy → picker}/test/picker-id.spec.js +5 -5
- package/dist/collection/components/{picker-legacy → picker}/test/trigger/picker.e2e.js +1 -1
- package/dist/collection/components/picker-column/picker-column.ios.css +160 -120
- package/dist/collection/components/picker-column/picker-column.js +329 -514
- package/dist/collection/components/picker-column/picker-column.md.css +107 -134
- package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column-aria.spec.js +3 -3
- package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column-dynamic.spec.js +2 -2
- package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column.spec.js +2 -2
- package/dist/collection/components/{picker-legacy-column → picker-column}/test/standalone/picker-column.e2e.js +3 -3
- package/dist/collection/components/{picker-column-option/picker-column-option.md.css → picker-column-internal/picker-column-internal.ios.css} +53 -6
- package/dist/collection/components/picker-column-internal/picker-column-internal.js +565 -0
- package/dist/collection/components/{picker-legacy-column/picker-column.md.css → picker-column-internal/picker-column-internal.md.css} +63 -113
- package/dist/collection/components/{picker-column/test/basic/picker-column.e2e.js → picker-column-internal/test/basic/picker-column-internal.e2e.js} +8 -8
- package/dist/collection/components/picker-column-internal/test/disabled/picker-column-internal.e2e.js +162 -0
- package/dist/collection/components/{picker-legacy/picker.md.css → picker-internal/picker-internal.ios.css} +100 -192
- package/dist/collection/components/picker-internal/picker-internal.js +544 -0
- package/dist/collection/components/{picker-legacy-column/picker-column.ios.css → picker-internal/picker-internal.md.css} +101 -98
- package/dist/collection/components/{picker/test/a11y/picker.e2e.js → picker-internal/test/a11y/picker-internal.e2e.js} +2 -2
- package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +118 -0
- package/dist/collection/components/{picker/test/keyboard-entry/picker.e2e.js → picker-internal/test/keyboard-entry/picker-internal.e2e.js} +22 -23
- package/dist/collection/utils/overlays.js +3 -6
- package/dist/docs.json +23 -487
- package/dist/esm/{data-4b9508c9.js → data-f5c75b4e.js} +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/ion-action-sheet.entry.js +1 -1
- package/dist/esm/ion-alert.entry.js +1 -1
- package/dist/esm/ion-datetime-button.entry.js +1 -1
- package/dist/esm/ion-datetime_3.entry.js +34 -28
- package/dist/esm/ion-loading.entry.js +1 -1
- package/dist/esm/ion-menu_3.entry.js +1 -1
- package/dist/esm/ion-modal.entry.js +1 -1
- package/dist/esm/{ion-picker-column.entry.js → ion-picker-column-internal.entry.js} +72 -105
- package/dist/esm/{ion-picker.entry.js → ion-picker-internal.entry.js} +13 -13
- package/dist/esm/ion-popover.entry.js +1 -1
- package/dist/esm/ion-select_3.entry.js +1 -1
- package/dist/esm/ion-toast.entry.js +1 -1
- package/dist/esm/ionic.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{overlays-fbc5cab5.js → overlays-d23ea6e1.js} +3 -6
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
- package/dist/esm-es5/ion-alert.entry.js +1 -1
- package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
- package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
- package/dist/esm-es5/ion-loading.entry.js +1 -1
- package/dist/esm-es5/ion-menu_3.entry.js +1 -1
- package/dist/esm-es5/ion-modal.entry.js +1 -1
- package/dist/esm-es5/ion-picker-column-internal.entry.js +4 -0
- package/dist/esm-es5/ion-picker-internal.entry.js +4 -0
- package/dist/esm-es5/ion-popover.entry.js +1 -1
- package/dist/esm-es5/ion-select_3.entry.js +1 -1
- package/dist/esm-es5/ion-toast.entry.js +1 -1
- package/dist/esm-es5/ionic.js +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/overlays-d23ea6e1.js +4 -0
- package/dist/html.html-data.json +1 -152
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/{p-846ee227.entry.js → p-1e57bd24.entry.js} +1 -1
- package/dist/ionic/{p-26798a7b.system.entry.js → p-1f620cd4.system.entry.js} +1 -1
- package/dist/ionic/{p-5d42b6b4.entry.js → p-27ea6f4e.entry.js} +1 -1
- package/dist/ionic/{p-6b7c55cd.entry.js → p-2dc43d20.entry.js} +1 -1
- package/dist/ionic/{p-4a36430f.system.entry.js → p-2f2293da.system.entry.js} +1 -1
- package/dist/ionic/{p-21c3515a.entry.js → p-2f300cca.entry.js} +1 -1
- package/dist/ionic/{p-8017aad2.system.entry.js → p-39a335b6.system.entry.js} +1 -1
- package/dist/ionic/{p-4a081ea9.entry.js → p-3b568d18.entry.js} +1 -1
- package/dist/ionic/{p-c18de88a.system.entry.js → p-3e3d06a6.system.entry.js} +1 -1
- package/dist/ionic/{p-96dbbac1.system.entry.js → p-4df97e3c.system.entry.js} +1 -1
- package/dist/ionic/p-60502e3f.system.entry.js +4 -0
- package/dist/ionic/{p-563c41f0.system.entry.js → p-60b386c9.system.entry.js} +1 -1
- package/dist/ionic/p-67da080d.entry.js +4 -0
- package/dist/ionic/p-73ea8f82.system.entry.js +4 -0
- package/dist/ionic/p-80fa068e.entry.js +4 -0
- package/dist/ionic/{p-a8baa23e.entry.js → p-8780cc2a.entry.js} +1 -1
- package/dist/ionic/{p-f910cc73.system.entry.js → p-9eec42cc.system.entry.js} +1 -1
- package/dist/ionic/p-ab11130c.system.js +4 -0
- package/dist/ionic/p-af16fe62.entry.js +4 -0
- package/dist/ionic/{p-73aa7604.entry.js → p-af19a573.entry.js} +1 -1
- package/dist/ionic/p-c14f8ac8.js +4 -0
- package/dist/ionic/p-cce9f61a.system.entry.js +4 -0
- package/dist/ionic/{p-b133e9b4.entry.js → p-ddb30596.entry.js} +1 -1
- package/dist/ionic/{p-27bcbbc7.system.entry.js → p-e1e5afe1.system.entry.js} +1 -1
- package/dist/ionic/p-e3584231.system.js +1 -1
- package/dist/ionic/{p-fbf3a689.system.entry.js → p-e3ad9607.system.entry.js} +1 -1
- package/dist/ionic/{p-73190c5f.entry.js → p-f78efbd1.entry.js} +1 -1
- package/dist/ionic/{p-54dfc9b5.system.js → p-fff7a57e.system.js} +1 -1
- package/dist/types/components/datetime/utils/data.d.ts +2 -2
- package/dist/types/components/picker/picker.d.ts +131 -74
- package/dist/types/components/picker-column/picker-column.d.ts +39 -105
- package/dist/types/components/picker-column-internal/picker-column-internal.d.ts +102 -0
- package/dist/types/components/picker-internal/picker-internal-interfaces.d.ts +8 -0
- package/dist/types/components/picker-internal/picker-internal.d.ts +102 -0
- package/dist/types/components.d.ts +122 -163
- package/dist/types/interface.d.ts +1 -1
- package/dist/types/utils/config.d.ts +2 -2
- package/dist/types/utils/overlays.d.ts +2 -5
- package/hydrate/index.js +1151 -1287
- package/package.json +1 -1
- package/components/ion-picker-column-option.d.ts +0 -11
- package/components/ion-picker-column-option.js +0 -9
- package/components/ion-picker-legacy-column.d.ts +0 -11
- package/components/ion-picker-legacy-column.js +0 -9
- package/components/ion-picker-legacy.js +0 -309
- package/components/picker-column-option.js +0 -122
- package/components/picker-column2.js +0 -379
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +0 -104
- package/dist/collection/components/picker-column/test/disabled/picker-column.e2e.js +0 -113
- package/dist/collection/components/picker-column/test/slots/picker-column.e2e.js +0 -39
- package/dist/collection/components/picker-column-option/picker-column-option.ios.css +0 -87
- package/dist/collection/components/picker-column-option/picker-column-option.js +0 -173
- package/dist/collection/components/picker-column-option/test/a11y/picker-column-option.e2e.js +0 -18
- package/dist/collection/components/picker-column-option/test/basic/picker-column-option.e2e.js +0 -37
- package/dist/collection/components/picker-legacy/picker.ios.css +0 -367
- package/dist/collection/components/picker-legacy/picker.js +0 -817
- package/dist/collection/components/picker-legacy/test/basic/picker.e2e.js +0 -25
- package/dist/collection/components/picker-legacy-column/picker-column.js +0 -419
- package/dist/esm/ion-picker-column-option.entry.js +0 -100
- package/dist/esm-es5/ion-picker-column-option.entry.js +0 -4
- package/dist/esm-es5/ion-picker-column.entry.js +0 -4
- package/dist/esm-es5/ion-picker.entry.js +0 -4
- package/dist/esm-es5/overlays-fbc5cab5.js +0 -4
- package/dist/ionic/p-23672c82.system.entry.js +0 -4
- package/dist/ionic/p-8fa6583d.system.js +0 -4
- package/dist/ionic/p-9282b16f.entry.js +0 -4
- package/dist/ionic/p-9ba90516.system.entry.js +0 -4
- package/dist/ionic/p-afcf4620.entry.js +0 -4
- package/dist/ionic/p-c2910c78.entry.js +0 -4
- package/dist/ionic/p-c8f0a036.entry.js +0 -4
- package/dist/ionic/p-ca8938f4.js +0 -4
- package/dist/ionic/p-ca9d1792.system.entry.js +0 -4
- package/dist/ionic/p-ffd5dba4.system.entry.js +0 -4
- package/dist/types/components/picker/picker-interfaces.d.ts +0 -8
- package/dist/types/components/picker-column-option/picker-column-option.d.ts +0 -66
- package/dist/types/components/picker-legacy/picker.d.ts +0 -158
- package/dist/types/components/picker-legacy-column/picker-column.d.ts +0 -46
- /package/dist/collection/components/{picker-legacy → picker}/animations/ios.enter.js +0 -0
- /package/dist/collection/components/{picker-legacy → picker}/animations/ios.leave.js +0 -0
- /package/dist/collection/components/picker/{picker-interfaces.js → picker-interface.js} +0 -0
- /package/dist/collection/components/{picker-legacy-column → picker-column}/test/test.utils.js +0 -0
- /package/dist/collection/components/{picker-column/picker-column-interfaces.js → picker-column-internal/picker-column-internal-interfaces.js} +0 -0
- /package/dist/collection/components/{picker-legacy/picker-interface.js → picker-internal/picker-internal-interfaces.js} +0 -0
- /package/dist/esm-es5/{data-4b9508c9.js → data-f5c75b4e.js} +0 -0
- /package/dist/ionic/{p-368f5215.js → p-2aea8b1e.js} +0 -0
- /package/dist/ionic/{p-f58981c2.system.js → p-82e3d633.system.js} +0 -0
- /package/dist/types/components/{picker-legacy → picker}/animations/ios.enter.d.ts +0 -0
- /package/dist/types/components/{picker-legacy → picker}/animations/ios.leave.d.ts +0 -0
- /package/dist/types/components/{picker-legacy → picker}/picker-interface.d.ts +0 -0
- /package/dist/types/components/{picker-legacy-column → picker-column}/test/test.utils.d.ts +0 -0
- /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
|
-
|
|
56
|
+
:host {
|
|
57
57
|
display: flex;
|
|
58
58
|
position: relative;
|
|
59
|
-
|
|
59
|
+
align-items: center;
|
|
60
60
|
justify-content: center;
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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-
|
|
92
|
+
:host .picker-before {
|
|
73
93
|
top: 0;
|
|
74
|
-
|
|
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-
|
|
97
|
+
:host .picker-before {
|
|
87
98
|
inset-inline-start: 0;
|
|
88
99
|
}
|
|
89
100
|
}
|
|
90
101
|
@supports not (inset-inline-start: 0) {
|
|
91
|
-
.picker-
|
|
102
|
+
:host .picker-before {
|
|
92
103
|
left: 0;
|
|
93
104
|
}
|
|
94
|
-
:host-context([dir=rtl]) .picker-
|
|
105
|
+
:host-context([dir=rtl]) .picker-before {
|
|
95
106
|
left: unset;
|
|
96
107
|
right: unset;
|
|
97
108
|
right: 0;
|
|
98
109
|
}
|
|
99
|
-
|
|
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
|
-
|
|
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-
|
|
114
|
-
|
|
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
|
-
|
|
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
|
-
|
|
122
|
-
|
|
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
|
-
|
|
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
|
-
|
|
141
|
-
|
|
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-
|
|
203
|
-
-
|
|
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
|
-
|
|
248
|
-
|
|
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
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
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
|
};
|