@ionic/core 7.5.8-dev.11701894917.1c1465bd → 7.5.8-dev.11702074871.1238046f
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 +39 -30
- package/components/ion-picker-column-option.d.ts +11 -0
- package/components/ion-picker-column-option.js +9 -0
- package/components/ion-picker-column.js +2 -2
- package/components/ion-picker-legacy-column.d.ts +11 -0
- package/components/ion-picker-legacy-column.js +9 -0
- package/components/{ion-picker-internal.d.ts → ion-picker-legacy.d.ts} +4 -4
- package/components/ion-picker-legacy.js +309 -0
- package/components/ion-picker.js +1 -309
- package/components/overlays.js +6 -3
- package/components/picker-column-option.js +122 -0
- package/components/picker-column.js +351 -322
- package/components/picker-column2.js +379 -0
- package/components/{picker-internal.js → picker.js} +29 -22
- package/dist/cjs/{data-36b9094e.js → data-e7526b58.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 +29 -35
- 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-option.cjs.entry.js +104 -0
- package/dist/cjs/{ion-picker-column-internal.cjs.entry.js → ion-picker-column.cjs.entry.js} +104 -87
- package/dist/cjs/{ion-picker-internal.cjs.entry.js → ion-picker.cjs.entry.js} +26 -19
- 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-2c6b1072.js → overlays-e8e05b0e.js} +6 -3
- package/dist/collection/collection-manifest.json +7 -6
- package/dist/collection/components/datetime/datetime.ios.css +8 -13
- package/dist/collection/components/datetime/datetime.js +19 -16
- package/dist/collection/components/datetime/datetime.md.css +8 -13
- 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 +43 -41
- 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 +15 -12
- package/dist/collection/components/datetime/utils/data.js +1 -1
- package/dist/collection/components/picker/picker.ios.css +113 -211
- package/dist/collection/components/picker/picker.js +468 -743
- package/dist/collection/components/picker/picker.md.css +109 -198
- package/dist/collection/components/{picker-internal/test/a11y/picker-internal.e2e.js → picker/test/a11y/picker.e2e.js} +2 -2
- package/dist/collection/components/picker/test/basic/picker.e2e.js +99 -13
- package/dist/collection/components/picker/test/custom/picker.e2e.js +85 -0
- package/dist/collection/components/{picker-internal/test/keyboard-entry/picker-internal.e2e.js → picker/test/keyboard-entry/picker.e2e.js} +63 -32
- package/dist/collection/components/{picker-column-internal/picker-column-internal.md.css → picker-column/picker-column.css} +96 -83
- package/dist/collection/components/picker-column/picker-column.js +497 -335
- package/dist/collection/components/{picker-column-internal/test/basic/picker-column-internal.e2e.js → picker-column/test/basic/picker-column.e2e.js} +8 -8
- package/dist/collection/components/picker-column/test/disabled/picker-column.e2e.js +91 -0
- package/dist/collection/components/picker-column/test/slots/picker-column.e2e.js +39 -0
- package/dist/collection/components/picker-column-option/picker-column-option.ios.css +87 -0
- package/dist/collection/components/picker-column-option/picker-column-option.js +173 -0
- package/dist/collection/components/{picker-column-internal/picker-column-internal.ios.css → picker-column-option/picker-column-option.md.css} +6 -53
- package/dist/collection/components/picker-column-option/test/a11y/picker-column-option.e2e.js +18 -0
- package/dist/collection/components/picker-column-option/test/basic/picker-column-option.e2e.js +37 -0
- package/dist/collection/components/picker-column-option/test/picker-column-option.spec.js +29 -0
- package/dist/collection/components/{picker-internal/picker-internal.md.css → picker-legacy/picker.ios.css} +207 -98
- package/dist/collection/components/picker-legacy/picker.js +817 -0
- package/dist/collection/components/{picker-internal/picker-internal.ios.css → picker-legacy/picker.md.css} +192 -100
- package/dist/collection/components/picker-legacy/test/basic/picker.e2e.js +25 -0
- package/dist/collection/components/{picker → picker-legacy}/test/is-open/picker.e2e.js +4 -4
- package/dist/collection/components/{picker → picker-legacy}/test/picker-id.spec.js +5 -5
- package/dist/collection/components/{picker → picker-legacy}/test/trigger/picker.e2e.js +1 -1
- package/dist/collection/components/picker-legacy-column/picker-column.js +419 -0
- package/dist/collection/components/{picker-column → picker-legacy-column}/test/picker-column-aria.spec.js +3 -3
- package/dist/collection/components/{picker-column → picker-legacy-column}/test/picker-column-dynamic.spec.js +2 -2
- package/dist/collection/components/{picker-column → picker-legacy-column}/test/picker-column.spec.js +2 -2
- package/dist/collection/components/{picker-column → picker-legacy-column}/test/standalone/picker-column.e2e.js +3 -3
- package/dist/collection/utils/overlays.js +6 -3
- package/dist/docs.json +493 -24
- package/dist/esm/{data-f5c75b4e.js → data-4b9508c9.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 +28 -34
- 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-option.entry.js +100 -0
- package/dist/esm/{ion-picker-column-internal.entry.js → ion-picker-column.entry.js} +104 -87
- package/dist/esm/{ion-picker-internal.entry.js → ion-picker.entry.js} +26 -19
- 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-d23ea6e1.js → overlays-fbc5cab5.js} +6 -3
- 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-option.entry.js +4 -0
- package/dist/esm-es5/ion-picker-column.entry.js +4 -0
- package/dist/esm-es5/ion-picker.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-fbc5cab5.js +4 -0
- package/dist/html.html-data.json +152 -1
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/{p-2f300cca.entry.js → p-21c3515a.entry.js} +1 -1
- package/dist/ionic/{p-1f620cd4.system.entry.js → p-26798a7b.system.entry.js} +1 -1
- package/dist/ionic/{p-e1e5afe1.system.entry.js → p-27bcbbc7.system.entry.js} +1 -1
- package/dist/ionic/p-36d194c5.entry.js +4 -0
- package/dist/ionic/{p-3b568d18.entry.js → p-4a081ea9.entry.js} +1 -1
- package/dist/ionic/{p-2f2293da.system.entry.js → p-4a36430f.system.entry.js} +1 -1
- package/dist/ionic/{p-fff7a57e.system.js → p-54dfc9b5.system.js} +1 -1
- package/dist/ionic/{p-60b386c9.system.entry.js → p-563c41f0.system.entry.js} +1 -1
- package/dist/ionic/p-5a1aac13.system.entry.js +4 -0
- package/dist/ionic/{p-27ea6f4e.entry.js → p-5d42b6b4.entry.js} +1 -1
- package/dist/ionic/{p-2dc43d20.entry.js → p-6b7c55cd.entry.js} +1 -1
- package/dist/ionic/{p-f78efbd1.entry.js → p-73190c5f.entry.js} +1 -1
- package/dist/ionic/{p-af19a573.entry.js → p-73aa7604.entry.js} +1 -1
- package/dist/ionic/{p-39a335b6.system.entry.js → p-8017aad2.system.entry.js} +1 -1
- package/dist/ionic/{p-1e57bd24.entry.js → p-846ee227.entry.js} +1 -1
- package/dist/ionic/p-8e42850f.entry.js +4 -0
- package/dist/ionic/p-8fa6583d.system.js +4 -0
- package/dist/ionic/{p-4df97e3c.system.entry.js → p-96dbbac1.system.entry.js} +1 -1
- package/dist/ionic/p-9f1b2214.entry.js +4 -0
- package/dist/ionic/{p-8780cc2a.entry.js → p-a8baa23e.entry.js} +1 -1
- package/dist/ionic/p-afcf4620.entry.js +4 -0
- package/dist/ionic/{p-ddb30596.entry.js → p-b133e9b4.entry.js} +1 -1
- package/dist/ionic/{p-3e3d06a6.system.entry.js → p-c18de88a.system.entry.js} +1 -1
- package/dist/ionic/p-c41bff4e.system.entry.js +4 -0
- package/dist/ionic/p-ca846d0b.system.entry.js +4 -0
- package/dist/ionic/p-ca8938f4.js +4 -0
- package/dist/ionic/p-e3584231.system.js +1 -1
- package/dist/ionic/{p-9eec42cc.system.entry.js → p-f910cc73.system.entry.js} +1 -1
- package/dist/ionic/{p-e3ad9607.system.entry.js → p-fbf3a689.system.entry.js} +1 -1
- package/dist/ionic/p-ffd5dba4.system.entry.js +4 -0
- package/dist/types/components/datetime/utils/data.d.ts +11 -7
- package/dist/types/components/picker/picker-interfaces.d.ts +8 -0
- package/dist/types/components/picker/picker.d.ts +74 -131
- package/dist/types/components/picker-column/picker-column-interfaces.d.ts +4 -0
- package/dist/types/components/picker-column/picker-column.d.ts +99 -39
- package/dist/types/components/picker-column-option/picker-column-option.d.ts +66 -0
- package/dist/types/components/picker-legacy/picker.d.ts +158 -0
- package/dist/types/components/picker-legacy-column/picker-column.d.ts +46 -0
- package/dist/types/components.d.ts +155 -122
- package/dist/types/interface.d.ts +1 -1
- package/dist/types/utils/config.d.ts +2 -2
- package/dist/types/utils/overlays.d.ts +5 -2
- package/hydrate/index.js +1486 -1362
- package/package.json +1 -1
- package/components/ion-picker-column-internal.d.ts +0 -11
- package/components/ion-picker-column-internal.js +0 -9
- package/components/ion-picker-internal.js +0 -9
- package/components/picker-column-internal.js +0 -390
- package/dist/collection/components/picker-column-internal/picker-column-internal.js +0 -565
- package/dist/collection/components/picker-column-internal/test/disabled/picker-column-internal.e2e.js +0 -162
- package/dist/collection/components/picker-internal/picker-internal.js +0 -544
- package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +0 -118
- package/dist/esm-es5/ion-picker-column-internal.entry.js +0 -4
- package/dist/esm-es5/ion-picker-internal.entry.js +0 -4
- package/dist/esm-es5/overlays-d23ea6e1.js +0 -4
- package/dist/ionic/p-60502e3f.system.entry.js +0 -4
- package/dist/ionic/p-67da080d.entry.js +0 -4
- package/dist/ionic/p-73ea8f82.system.entry.js +0 -4
- package/dist/ionic/p-80fa068e.entry.js +0 -4
- package/dist/ionic/p-ab11130c.system.js +0 -4
- package/dist/ionic/p-af16fe62.entry.js +0 -4
- package/dist/ionic/p-c14f8ac8.js +0 -4
- package/dist/ionic/p-cce9f61a.system.entry.js +0 -4
- package/dist/types/components/picker-column-internal/picker-column-internal-interfaces.d.ts +0 -5
- package/dist/types/components/picker-column-internal/picker-column-internal.d.ts +0 -102
- package/dist/types/components/picker-internal/picker-internal-interfaces.d.ts +0 -8
- package/dist/types/components/picker-internal/picker-internal.d.ts +0 -102
- /package/dist/collection/components/{picker-internal/picker-internal-interfaces.js → picker/picker-interfaces.js} +0 -0
- /package/dist/collection/components/{picker-column-internal/picker-column-internal-interfaces.js → picker-column/picker-column-interfaces.js} +0 -0
- /package/dist/collection/components/{picker → picker-legacy}/animations/ios.enter.js +0 -0
- /package/dist/collection/components/{picker → picker-legacy}/animations/ios.leave.js +0 -0
- /package/dist/collection/components/{picker → picker-legacy}/picker-interface.js +0 -0
- /package/dist/collection/components/{picker-column → picker-legacy-column}/picker-column.ios.css +0 -0
- /package/dist/collection/components/{picker-column → picker-legacy-column}/picker-column.md.css +0 -0
- /package/dist/collection/components/{picker-column → picker-legacy-column}/test/test.utils.js +0 -0
- /package/dist/esm-es5/{data-f5c75b4e.js → data-4b9508c9.js} +0 -0
- /package/dist/ionic/{p-2aea8b1e.js → p-368f5215.js} +0 -0
- /package/dist/ionic/{p-82e3d633.system.js → p-f58981c2.system.js} +0 -0
- /package/dist/types/components/{picker → picker-legacy}/animations/ios.enter.d.ts +0 -0
- /package/dist/types/components/{picker → picker-legacy}/animations/ios.leave.d.ts +0 -0
- /package/dist/types/components/{picker → picker-legacy}/picker-interface.d.ts +0 -0
- /package/dist/types/components/{picker-column → picker-legacy-column}/test/test.utils.d.ts +0 -0
|
@@ -53,134 +53,6 @@
|
|
|
53
53
|
* }
|
|
54
54
|
* }
|
|
55
55
|
*/
|
|
56
|
-
:host {
|
|
57
|
-
/**
|
|
58
|
-
* @prop --background: Background of the picker
|
|
59
|
-
* @prop --background-rgb: Background of the picker in rgb format
|
|
60
|
-
*
|
|
61
|
-
* @prop --border-radius: Border radius of the picker
|
|
62
|
-
* @prop --border-color: Border color of the picker
|
|
63
|
-
* @prop --border-width: Border width of the picker
|
|
64
|
-
* @prop --border-style: Border style of the picker
|
|
65
|
-
*
|
|
66
|
-
* @prop --min-width: Minimum width of the picker
|
|
67
|
-
* @prop --width: Width of the picker
|
|
68
|
-
* @prop --max-width: Maximum width of the picker
|
|
69
|
-
*
|
|
70
|
-
* @prop --min-height: Minimum height of the picker
|
|
71
|
-
* @prop --height: Height of the picker
|
|
72
|
-
* @prop --max-height: Maximum height of the picker
|
|
73
|
-
*
|
|
74
|
-
* @prop --backdrop-opacity: Opacity of the backdrop
|
|
75
|
-
*/
|
|
76
|
-
--border-radius: 0;
|
|
77
|
-
--border-style: solid;
|
|
78
|
-
--min-width: auto;
|
|
79
|
-
--width: 100%;
|
|
80
|
-
--max-width: 500px;
|
|
81
|
-
--min-height: auto;
|
|
82
|
-
--max-height: auto;
|
|
83
|
-
-moz-osx-font-smoothing: grayscale;
|
|
84
|
-
-webkit-font-smoothing: antialiased;
|
|
85
|
-
top: 0;
|
|
86
|
-
display: block;
|
|
87
|
-
position: absolute;
|
|
88
|
-
width: 100%;
|
|
89
|
-
height: 100%;
|
|
90
|
-
outline: none;
|
|
91
|
-
font-family: var(--ion-font-family, inherit);
|
|
92
|
-
contain: strict;
|
|
93
|
-
user-select: none;
|
|
94
|
-
z-index: 1001;
|
|
95
|
-
}
|
|
96
|
-
@supports (inset-inline-start: 0) {
|
|
97
|
-
:host {
|
|
98
|
-
inset-inline-start: 0;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
@supports not (inset-inline-start: 0) {
|
|
102
|
-
:host {
|
|
103
|
-
left: 0;
|
|
104
|
-
}
|
|
105
|
-
:host-context([dir=rtl]) {
|
|
106
|
-
left: unset;
|
|
107
|
-
right: unset;
|
|
108
|
-
right: 0;
|
|
109
|
-
}
|
|
110
|
-
@supports selector(:dir(rtl)) {
|
|
111
|
-
:host(:dir(rtl)) {
|
|
112
|
-
left: unset;
|
|
113
|
-
right: unset;
|
|
114
|
-
right: 0;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
:host(.overlay-hidden) {
|
|
120
|
-
display: none;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
.picker-wrapper {
|
|
124
|
-
border-radius: var(--border-radius);
|
|
125
|
-
left: 0;
|
|
126
|
-
right: 0;
|
|
127
|
-
bottom: 0;
|
|
128
|
-
-webkit-margin-start: auto;
|
|
129
|
-
margin-inline-start: auto;
|
|
130
|
-
-webkit-margin-end: auto;
|
|
131
|
-
margin-inline-end: auto;
|
|
132
|
-
margin-top: auto;
|
|
133
|
-
margin-bottom: auto;
|
|
134
|
-
transform: translate3d(0, 100%, 0);
|
|
135
|
-
display: flex;
|
|
136
|
-
position: absolute;
|
|
137
|
-
flex-direction: column;
|
|
138
|
-
width: var(--width);
|
|
139
|
-
min-width: var(--min-width);
|
|
140
|
-
max-width: var(--max-width);
|
|
141
|
-
height: var(--height);
|
|
142
|
-
min-height: var(--min-height);
|
|
143
|
-
max-height: var(--max-height);
|
|
144
|
-
border-width: var(--border-width);
|
|
145
|
-
border-style: var(--border-style);
|
|
146
|
-
border-color: var(--border-color);
|
|
147
|
-
background: var(--background);
|
|
148
|
-
contain: strict;
|
|
149
|
-
overflow: hidden;
|
|
150
|
-
z-index: 10;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
.picker-toolbar {
|
|
154
|
-
width: 100%;
|
|
155
|
-
background: transparent;
|
|
156
|
-
contain: strict;
|
|
157
|
-
z-index: 1;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
.picker-button {
|
|
161
|
-
border: 0;
|
|
162
|
-
font-family: inherit;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
.picker-button:active, .picker-button:focus {
|
|
166
|
-
outline: none;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
.picker-columns {
|
|
170
|
-
display: flex;
|
|
171
|
-
position: relative;
|
|
172
|
-
justify-content: center;
|
|
173
|
-
margin-bottom: var(--ion-safe-area-bottom, 0);
|
|
174
|
-
contain: strict;
|
|
175
|
-
overflow: hidden;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
.picker-above-highlight,
|
|
179
|
-
.picker-below-highlight {
|
|
180
|
-
display: none;
|
|
181
|
-
pointer-events: none;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
56
|
/**
|
|
185
57
|
* Convert a font size to a dynamic font size.
|
|
186
58
|
* Fonts that participate in Dynamic Type should use
|
|
@@ -237,77 +109,68 @@
|
|
|
237
109
|
* }
|
|
238
110
|
*/
|
|
239
111
|
:host {
|
|
240
|
-
|
|
241
|
-
--
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
--
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
.picker-toolbar {
|
|
112
|
+
/**
|
|
113
|
+
* @prop --highlight-background: Background of the picker highlight for the selected item
|
|
114
|
+
* @prop --highlight-border-radius: Border radius of the picker highlight for the selected item
|
|
115
|
+
*
|
|
116
|
+
* @prop --fade-background-rgb: Background of the gradient covering non-selected items in rgb format
|
|
117
|
+
*/
|
|
118
|
+
--highlight-border-radius: 8px;
|
|
249
119
|
display: flex;
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
color: var(--ion-color-primary, #3880ff);
|
|
269
|
-
font-size: 14px;
|
|
270
|
-
font-weight: 500;
|
|
271
|
-
text-transform: uppercase;
|
|
272
|
-
box-shadow: none;
|
|
120
|
+
position: relative;
|
|
121
|
+
align-items: center;
|
|
122
|
+
justify-content: center;
|
|
123
|
+
width: 100%;
|
|
124
|
+
height: 200px;
|
|
125
|
+
/**
|
|
126
|
+
* Picker columns should display
|
|
127
|
+
* in the order in which developers
|
|
128
|
+
* added them and should ignore
|
|
129
|
+
* LTR vs RTL directions.
|
|
130
|
+
*/
|
|
131
|
+
direction: ltr;
|
|
132
|
+
/**
|
|
133
|
+
* This is required otherwise the
|
|
134
|
+
* highlight will appear behind
|
|
135
|
+
* the picker when used inline.
|
|
136
|
+
*/
|
|
137
|
+
z-index: 0;
|
|
273
138
|
}
|
|
274
139
|
|
|
275
|
-
.picker-
|
|
276
|
-
|
|
277
|
-
|
|
140
|
+
:host .picker-before,
|
|
141
|
+
:host .picker-after {
|
|
142
|
+
position: absolute;
|
|
143
|
+
width: 100%;
|
|
144
|
+
/**
|
|
145
|
+
* The transform and z-index
|
|
146
|
+
* are needed for WebKit otherwise
|
|
147
|
+
* the fade will appear underneath the picker.
|
|
148
|
+
*/
|
|
149
|
+
transform: translateZ(0);
|
|
150
|
+
z-index: 1;
|
|
151
|
+
pointer-events: none;
|
|
278
152
|
}
|
|
279
153
|
|
|
280
|
-
.picker-
|
|
154
|
+
:host .picker-before {
|
|
281
155
|
top: 0;
|
|
282
|
-
|
|
283
|
-
position: absolute;
|
|
284
|
-
width: 100%;
|
|
285
|
-
height: 81px;
|
|
286
|
-
border-bottom: 1px solid var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-150, rgba(0, 0, 0, 0.13))));
|
|
287
|
-
background: linear-gradient(to bottom, var(--ion-background-color, #fff) 20%, rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.8) 100%);
|
|
288
|
-
z-index: 10;
|
|
156
|
+
height: 83px;
|
|
289
157
|
}
|
|
290
158
|
@supports (inset-inline-start: 0) {
|
|
291
|
-
.picker-
|
|
159
|
+
:host .picker-before {
|
|
292
160
|
inset-inline-start: 0;
|
|
293
161
|
}
|
|
294
162
|
}
|
|
295
163
|
@supports not (inset-inline-start: 0) {
|
|
296
|
-
.picker-
|
|
164
|
+
:host .picker-before {
|
|
297
165
|
left: 0;
|
|
298
166
|
}
|
|
299
|
-
:host-context([dir=rtl]) .picker-
|
|
300
|
-
left: unset;
|
|
301
|
-
right: unset;
|
|
302
|
-
right: 0;
|
|
303
|
-
}
|
|
304
|
-
[dir=rtl] .picker-above-highlight {
|
|
167
|
+
:host-context([dir=rtl]) .picker-before {
|
|
305
168
|
left: unset;
|
|
306
169
|
right: unset;
|
|
307
170
|
right: 0;
|
|
308
171
|
}
|
|
309
172
|
@supports selector(:dir(rtl)) {
|
|
310
|
-
|
|
173
|
+
:host(:dir(rtl)) .picker-before {
|
|
311
174
|
left: unset;
|
|
312
175
|
right: unset;
|
|
313
176
|
right: 0;
|
|
@@ -315,40 +178,88 @@
|
|
|
315
178
|
}
|
|
316
179
|
}
|
|
317
180
|
|
|
318
|
-
.picker-
|
|
319
|
-
top:
|
|
320
|
-
|
|
321
|
-
position: absolute;
|
|
322
|
-
width: 100%;
|
|
323
|
-
height: 119px;
|
|
324
|
-
border-top: 1px solid var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-150, rgba(0, 0, 0, 0.13))));
|
|
325
|
-
background: linear-gradient(to top, var(--ion-background-color, #fff) 30%, rgba(var(--ion-background-color-rgb, 255, 255, 255), 0.8) 100%);
|
|
326
|
-
z-index: 11;
|
|
181
|
+
:host .picker-after {
|
|
182
|
+
top: 116px;
|
|
183
|
+
height: 84px;
|
|
327
184
|
}
|
|
328
185
|
@supports (inset-inline-start: 0) {
|
|
329
|
-
.picker-
|
|
186
|
+
:host .picker-after {
|
|
330
187
|
inset-inline-start: 0;
|
|
331
188
|
}
|
|
332
189
|
}
|
|
333
190
|
@supports not (inset-inline-start: 0) {
|
|
334
|
-
.picker-
|
|
191
|
+
:host .picker-after {
|
|
335
192
|
left: 0;
|
|
336
193
|
}
|
|
337
|
-
:host-context([dir=rtl]) .picker-
|
|
338
|
-
left: unset;
|
|
339
|
-
right: unset;
|
|
340
|
-
right: 0;
|
|
341
|
-
}
|
|
342
|
-
[dir=rtl] .picker-below-highlight {
|
|
194
|
+
:host-context([dir=rtl]) .picker-after {
|
|
343
195
|
left: unset;
|
|
344
196
|
right: unset;
|
|
345
197
|
right: 0;
|
|
346
198
|
}
|
|
347
199
|
@supports selector(:dir(rtl)) {
|
|
348
|
-
|
|
200
|
+
:host(:dir(rtl)) .picker-after {
|
|
349
201
|
left: unset;
|
|
350
202
|
right: unset;
|
|
351
203
|
right: 0;
|
|
352
204
|
}
|
|
353
205
|
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
:host .picker-highlight {
|
|
209
|
+
border-radius: var(--highlight-border-radius);
|
|
210
|
+
left: 0;
|
|
211
|
+
right: 0;
|
|
212
|
+
top: 50%;
|
|
213
|
+
bottom: 0;
|
|
214
|
+
-webkit-margin-start: auto;
|
|
215
|
+
margin-inline-start: auto;
|
|
216
|
+
-webkit-margin-end: auto;
|
|
217
|
+
margin-inline-end: auto;
|
|
218
|
+
margin-top: 0;
|
|
219
|
+
margin-bottom: 0;
|
|
220
|
+
position: absolute;
|
|
221
|
+
width: calc(100% - 16px);
|
|
222
|
+
height: 34px;
|
|
223
|
+
transform: translateY(-50%);
|
|
224
|
+
background: var(--highlight-background);
|
|
225
|
+
z-index: -1;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
:host input {
|
|
229
|
+
position: absolute;
|
|
230
|
+
top: 0;
|
|
231
|
+
left: 0;
|
|
232
|
+
right: 0;
|
|
233
|
+
bottom: 0;
|
|
234
|
+
width: 100%;
|
|
235
|
+
height: 100%;
|
|
236
|
+
margin: 0;
|
|
237
|
+
padding: 0;
|
|
238
|
+
border: 0;
|
|
239
|
+
outline: 0;
|
|
240
|
+
clip: rect(0 0 0 0);
|
|
241
|
+
opacity: 0;
|
|
242
|
+
overflow: hidden;
|
|
243
|
+
-webkit-appearance: none;
|
|
244
|
+
-moz-appearance: none;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
:host ::slotted(ion-picker-column:first-of-type) {
|
|
248
|
+
text-align: start;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
:host ::slotted(ion-picker-column:last-of-type) {
|
|
252
|
+
text-align: end;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
:host ::slotted(ion-picker-column:only-child) {
|
|
256
|
+
text-align: center;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
:host .picker-before {
|
|
260
|
+
background: linear-gradient(to bottom, rgba(var(--fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1) 20%, rgba(var(--fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0) 90%);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
:host .picker-after {
|
|
264
|
+
background: linear-gradient(to top, rgba(var(--fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 1) 30%, rgba(var(--fade-background-rgb, var(--background-rgb, var(--ion-background-color-rgb, 255, 255, 255))), 0) 90%);
|
|
354
265
|
}
|
|
@@ -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
|
|
8
|
+
test.describe(title('picker: a11y'), () => {
|
|
9
9
|
test('should not have accessibility violations', async ({ page }) => {
|
|
10
|
-
await page.goto(`/src/components/picker
|
|
10
|
+
await page.goto(`/src/components/picker/test/a11y`, config);
|
|
11
11
|
const results = await new AxeBuilder({ page }).analyze();
|
|
12
12
|
expect(results.violations).toEqual([]);
|
|
13
13
|
});
|
|
@@ -3,23 +3,109 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { expect } from "@playwright/test";
|
|
5
5
|
import { configs, test } from "../../../../utils/test/playwright/index";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
/**
|
|
7
|
+
* This behavior does not vary across directions.
|
|
8
|
+
*/
|
|
9
|
+
configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
|
|
10
|
+
test.describe(title('picker: rendering'), () => {
|
|
11
|
+
test('inline pickers should not have visual regression', async ({ page }) => {
|
|
12
|
+
await page.goto(`/src/components/picker/test/basic`, config);
|
|
13
|
+
const fullStack = page.locator('#inline ion-picker-column-option[data-test-value="full-stack"]');
|
|
14
|
+
const onion = page.locator('#inline ion-picker-column-option[data-test-value="onion"]');
|
|
15
|
+
await expect(fullStack).toHaveClass(/option-active/);
|
|
16
|
+
await expect(onion).toHaveClass(/option-active/);
|
|
17
|
+
await page.waitForChanges();
|
|
18
|
+
await expect(page.locator('#inline')).toHaveScreenshot(screenshot(`picker-inline-diff`));
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
test.describe(title('picker: overlay rendering'), () => {
|
|
22
|
+
test('popover: should not have visual regression', async ({ page }) => {
|
|
23
|
+
await page.goto(`/src/components/picker/test/basic`, config);
|
|
24
|
+
const button = page.locator('#popover');
|
|
25
|
+
const didPresent = await page.spyOnEvent('ionPopoverDidPresent');
|
|
26
|
+
const picker = page.locator('ion-popover ion-picker');
|
|
27
|
+
await button.click();
|
|
28
|
+
await didPresent.next();
|
|
29
|
+
await expect(picker).toBeVisible();
|
|
30
|
+
const popoverContent = page.locator('ion-popover .ion-delegate-host');
|
|
31
|
+
await expect(popoverContent).toHaveScreenshot(screenshot(`picker-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 }) => {
|
|
9
43
|
await page.goto('/src/components/picker/test/basic', config);
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
|
|
44
|
+
const button = page.locator('#modal');
|
|
45
|
+
const didPresent = await page.spyOnEvent('ionModalDidPresent');
|
|
46
|
+
const picker = page.locator('ion-modal ion-picker');
|
|
47
|
+
await button.click();
|
|
13
48
|
await didPresent.next();
|
|
49
|
+
await expect(picker).toBeVisible();
|
|
50
|
+
const modalContent = page.locator('ion-modal .ion-delegate-host');
|
|
51
|
+
await expect(modalContent).toHaveScreenshot(screenshot(`picker-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: focus'), () => {
|
|
69
|
+
test.beforeEach(async ({ page }) => {
|
|
70
|
+
await page.setContent(`
|
|
71
|
+
<ion-picker>
|
|
72
|
+
<ion-picker-column value="full-stack" id="first">
|
|
73
|
+
<ion-picker-column-option value="minified">Minified</ion-picker-column-option>
|
|
74
|
+
<ion-picker-column-option value="responsive">Responsive</ion-picker-column-option>
|
|
75
|
+
<ion-picker-column-option value="full-stack">Full Stack</ion-picker-column-option>
|
|
76
|
+
<ion-picker-column-option value="mobile-first">Mobile First</ion-picker-column-option>
|
|
77
|
+
<ion-picker-column-option value="serverless">Serverless</ion-picker-column-option>
|
|
78
|
+
</ion-picker-column>
|
|
79
|
+
<ion-picker-column value="onion" id="second">
|
|
80
|
+
<ion-picker-column-option value="tomato">Tomato</ion-picker-column-option>
|
|
81
|
+
<ion-picker-column-option value="avocado">Avocado</ion-picker-column-option>
|
|
82
|
+
<ion-picker-column-option value="onion">Onion</ion-picker-column-option>
|
|
83
|
+
<ion-picker-column-option value="potato">Potato</ion-picker-column-option>
|
|
84
|
+
<ion-picker-column-option value="artichoke">Artichoke</ion-picker-column-option>
|
|
85
|
+
</ion-picker-column>
|
|
86
|
+
</ion-picker>
|
|
87
|
+
`, config);
|
|
88
|
+
});
|
|
89
|
+
test('tabbing should correctly move focus between columns', async ({ page }) => {
|
|
90
|
+
const firstColumn = page.locator('ion-picker-column#first');
|
|
91
|
+
const secondColumn = page.locator('ion-picker-column#second');
|
|
92
|
+
// Focus first column
|
|
93
|
+
await page.keyboard.press('Tab');
|
|
94
|
+
await expect(firstColumn).toBeFocused();
|
|
14
95
|
await page.waitForChanges();
|
|
15
|
-
|
|
16
|
-
await page.
|
|
17
|
-
await
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
96
|
+
// Focus second column
|
|
97
|
+
await page.keyboard.press('Tab');
|
|
98
|
+
await expect(secondColumn).toBeFocused();
|
|
99
|
+
});
|
|
100
|
+
test('tabbing should correctly move focus back', async ({ page }) => {
|
|
101
|
+
const firstColumn = page.locator('ion-picker-column#first');
|
|
102
|
+
const secondColumn = page.locator('ion-picker-column#second');
|
|
103
|
+
await secondColumn.evaluate((el) => el.setFocus());
|
|
104
|
+
await expect(secondColumn).toBeFocused();
|
|
21
105
|
await page.waitForChanges();
|
|
22
|
-
|
|
106
|
+
// Focus first column
|
|
107
|
+
await page.keyboard.press('Shift+Tab');
|
|
108
|
+
await expect(firstColumn).toBeFocused();
|
|
23
109
|
});
|
|
24
110
|
});
|
|
25
111
|
});
|
|
@@ -0,0 +1,85 @@
|
|
|
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
|
+
const pickerElement = `
|
|
7
|
+
<ion-picker>
|
|
8
|
+
<ion-picker-column id="first"></ion-picker-column>
|
|
9
|
+
<ion-picker-column id="second"></ion-picker-column>
|
|
10
|
+
</ion-picker>
|
|
11
|
+
|
|
12
|
+
<script>
|
|
13
|
+
const setPickerColumn = (selector, items, value) => {
|
|
14
|
+
const column = document.querySelector(selector);
|
|
15
|
+
|
|
16
|
+
items.forEach((item) => {
|
|
17
|
+
const option = document.createElement('ion-picker-column-option');
|
|
18
|
+
option.value = item.value;
|
|
19
|
+
option.textContent = item.text;
|
|
20
|
+
|
|
21
|
+
option.setAttribute('data-test-value', item.value);
|
|
22
|
+
|
|
23
|
+
column.appendChild(option);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
column.value = value;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
setPickerColumn(
|
|
30
|
+
'#first',
|
|
31
|
+
[
|
|
32
|
+
{ text: 'Minified', value: 'minified' },
|
|
33
|
+
{ text: 'Responsive', value: 'responsive' },
|
|
34
|
+
{ text: 'Full Stack', value: 'full-stack' },
|
|
35
|
+
{ text: 'Mobile First', value: 'mobile-first' },
|
|
36
|
+
{ text: 'Serverless', value: 'serverless' },
|
|
37
|
+
],
|
|
38
|
+
'minified'
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
setPickerColumn(
|
|
42
|
+
'#second',
|
|
43
|
+
[
|
|
44
|
+
{ text: 'Tomato', value: 'tomato' },
|
|
45
|
+
{ text: 'Avocado', value: 'avocado' },
|
|
46
|
+
{ text: 'Onion', value: 'onion' },
|
|
47
|
+
{ text: 'Potato', value: 'potato' },
|
|
48
|
+
{ text: 'Artichoke', value: 'artichoke' },
|
|
49
|
+
],
|
|
50
|
+
'tomato'
|
|
51
|
+
);
|
|
52
|
+
</script>
|
|
53
|
+
`;
|
|
54
|
+
/**
|
|
55
|
+
* This behavior does not vary across directions.
|
|
56
|
+
*/
|
|
57
|
+
configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
|
|
58
|
+
test.describe(title('picker: custom'), () => {
|
|
59
|
+
test('should allow styling of the picker highlight', async ({ page }) => {
|
|
60
|
+
await page.setContent(`
|
|
61
|
+
<style>
|
|
62
|
+
ion-picker {
|
|
63
|
+
--highlight-background: rgb(0, 255, 0, 0.4);
|
|
64
|
+
--highlight-border-radius: 48px;
|
|
65
|
+
}
|
|
66
|
+
</style>
|
|
67
|
+
${pickerElement}
|
|
68
|
+
`, config);
|
|
69
|
+
const picker = page.locator('ion-picker');
|
|
70
|
+
await expect(picker).toHaveScreenshot(screenshot(`picker-custom-highlight`));
|
|
71
|
+
});
|
|
72
|
+
test('should allow styling of the picker fade', async ({ page }) => {
|
|
73
|
+
await page.setContent(`
|
|
74
|
+
<style>
|
|
75
|
+
ion-picker {
|
|
76
|
+
--fade-background-rgb: 40, 40, 40;
|
|
77
|
+
}
|
|
78
|
+
</style>
|
|
79
|
+
${pickerElement}
|
|
80
|
+
`, config);
|
|
81
|
+
const picker = page.locator('ion-picker');
|
|
82
|
+
await expect(picker).toHaveScreenshot(screenshot(`picker-custom-fade`));
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
});
|