@ionic/core 7.5.4-dev.11699300051.122a36ad → 7.5.4-dev.11699310489.151b2717
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/ion-searchbar.js +1 -1
- package/components/item.js +2 -2
- package/components/list.js +2 -2
- package/dist/cjs/ion-item_8.cjs.entry.js +4 -4
- package/dist/cjs/ion-searchbar.cjs.entry.js +1 -1
- package/dist/collection/components/item/item.ios.css +60 -12
- package/dist/collection/components/item/item.md.css +60 -12
- package/dist/collection/components/item/test/basic/item.e2e.js +26 -0
- package/dist/collection/components/list/list.ios.css +15 -1
- package/dist/collection/components/list/list.md.css +41 -3
- package/dist/collection/components/list/test/lines/list.e2e.js +143 -0
- package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +5 -0
- package/dist/collection/components/searchbar/searchbar.md.css +11 -5
- package/dist/collection/components/searchbar/test/basic/searchbar.e2e.js +25 -0
- package/dist/docs.json +1 -1
- package/dist/esm/ion-item_8.entry.js +4 -4
- package/dist/esm/ion-searchbar.entry.js +1 -1
- package/dist/esm-es5/ion-item_8.entry.js +1 -1
- package/dist/esm-es5/ion-searchbar.entry.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/p-02663394.system.js +1 -1
- package/dist/ionic/p-5f4c4347.system.entry.js +4 -0
- package/dist/ionic/{p-bc6e32d2.entry.js → p-69f93198.entry.js} +1 -1
- package/dist/ionic/{p-a6880f79.system.entry.js → p-6cf407b5.system.entry.js} +1 -1
- package/dist/ionic/p-df9d7fe1.entry.js +4 -0
- package/hydrate/index.js +5 -5
- package/package.json +1 -3
- package/dist/ionic/p-936657e3.entry.js +0 -4
- package/dist/ionic/p-ceb8e1a6.system.entry.js +0 -4
|
@@ -188,10 +188,6 @@
|
|
|
188
188
|
margin-right: 0;
|
|
189
189
|
margin-top: 0;
|
|
190
190
|
margin-bottom: 0;
|
|
191
|
-
-webkit-padding-start: calc(var(--padding-start) + var(--ion-safe-area-left, 0px));
|
|
192
|
-
padding-inline-start: calc(var(--padding-start) + var(--ion-safe-area-left, 0px));
|
|
193
|
-
-webkit-padding-end: var(--padding-end);
|
|
194
|
-
padding-inline-end: var(--padding-end);
|
|
195
191
|
padding-top: var(--padding-top);
|
|
196
192
|
padding-bottom: var(--padding-bottom);
|
|
197
193
|
font-family: inherit;
|
|
@@ -206,6 +202,10 @@
|
|
|
206
202
|
text-align: inherit;
|
|
207
203
|
white-space: inherit;
|
|
208
204
|
color: inherit;
|
|
205
|
+
/* stylelint-disable */
|
|
206
|
+
padding-right: var(--padding-end);
|
|
207
|
+
padding-left: calc(var(--padding-start) + var(--ion-safe-area-left, 0px));
|
|
208
|
+
/* stylelint-enable */
|
|
209
209
|
display: flex;
|
|
210
210
|
position: relative;
|
|
211
211
|
align-items: inherit;
|
|
@@ -222,6 +222,22 @@
|
|
|
222
222
|
box-sizing: border-box;
|
|
223
223
|
z-index: 1;
|
|
224
224
|
}
|
|
225
|
+
:host-context([dir=rtl]) .item-native {
|
|
226
|
+
padding-right: calc(var(--padding-start) + var(--ion-safe-area-right, 0px));
|
|
227
|
+
padding-left: var(--padding-end);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
[dir=rtl] .item-native {
|
|
231
|
+
padding-right: calc(var(--padding-start) + var(--ion-safe-area-right, 0px));
|
|
232
|
+
padding-left: var(--padding-end);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
@supports selector(:dir(rtl)) {
|
|
236
|
+
.item-native:dir(rtl) {
|
|
237
|
+
padding-right: calc(var(--padding-start) + var(--ion-safe-area-right, 0px));
|
|
238
|
+
padding-left: var(--padding-end);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
225
241
|
|
|
226
242
|
.item-native::-moz-focus-inner {
|
|
227
243
|
border: 0;
|
|
@@ -250,12 +266,12 @@ button, a {
|
|
|
250
266
|
margin-right: 0;
|
|
251
267
|
margin-top: 0;
|
|
252
268
|
margin-bottom: 0;
|
|
253
|
-
-webkit-padding-start: var(--inner-padding-start);
|
|
254
|
-
padding-inline-start: var(--inner-padding-start);
|
|
255
|
-
-webkit-padding-end: calc(var(--ion-safe-area-right, 0px) + var(--inner-padding-end));
|
|
256
|
-
padding-inline-end: calc(var(--ion-safe-area-right, 0px) + var(--inner-padding-end));
|
|
257
269
|
padding-top: var(--inner-padding-top);
|
|
258
270
|
padding-bottom: var(--inner-padding-bottom);
|
|
271
|
+
/* stylelint-disable */
|
|
272
|
+
padding-right: calc(var(--ion-safe-area-right, 0px) + var(--inner-padding-end));
|
|
273
|
+
padding-left: var(--inner-padding-start);
|
|
274
|
+
/* stylelint-enable */
|
|
259
275
|
display: flex;
|
|
260
276
|
position: relative;
|
|
261
277
|
flex: 1;
|
|
@@ -270,21 +286,53 @@ button, a {
|
|
|
270
286
|
overflow: inherit;
|
|
271
287
|
box-sizing: border-box;
|
|
272
288
|
}
|
|
289
|
+
:host-context([dir=rtl]) .item-inner {
|
|
290
|
+
padding-right: var(--inner-padding-start);
|
|
291
|
+
padding-left: calc(var(--ion-safe-area-left, 0px) + var(--inner-padding-end));
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
[dir=rtl] .item-inner {
|
|
295
|
+
padding-right: var(--inner-padding-start);
|
|
296
|
+
padding-left: calc(var(--ion-safe-area-left, 0px) + var(--inner-padding-end));
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
@supports selector(:dir(rtl)) {
|
|
300
|
+
.item-inner:dir(rtl) {
|
|
301
|
+
padding-right: var(--inner-padding-start);
|
|
302
|
+
padding-left: calc(var(--ion-safe-area-left, 0px) + var(--inner-padding-end));
|
|
303
|
+
}
|
|
304
|
+
}
|
|
273
305
|
|
|
274
306
|
.item-bottom {
|
|
275
307
|
margin-left: 0;
|
|
276
308
|
margin-right: 0;
|
|
277
309
|
margin-top: 0;
|
|
278
310
|
margin-bottom: 0;
|
|
279
|
-
-webkit-padding-start: calc(var(--padding-start) + var(--ion-safe-area-left, 0px));
|
|
280
|
-
padding-inline-start: calc(var(--padding-start) + var(--ion-safe-area-left, 0px));
|
|
281
|
-
-webkit-padding-end: var(--inner-padding-end);
|
|
282
|
-
padding-inline-end: var(--inner-padding-end);
|
|
283
311
|
padding-top: 0;
|
|
284
312
|
padding-bottom: 0;
|
|
313
|
+
/* stylelint-disable */
|
|
314
|
+
padding-left: calc(var(--padding-start) + var(--ion-safe-area-left, 0px));
|
|
315
|
+
padding-right: calc(var(--inner-padding-end) + var(--ion-safe-area-right, 0px));
|
|
316
|
+
/* stylelint-enable */
|
|
285
317
|
display: flex;
|
|
286
318
|
justify-content: space-between;
|
|
287
319
|
}
|
|
320
|
+
:host-context([dir=rtl]) .item-bottom {
|
|
321
|
+
padding-left: calc(var(--inner-padding-end) + var(--ion-safe-area-left, 0px));
|
|
322
|
+
padding-right: calc(var(--padding-start) + var(--ion-safe-area-right, 0px));
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
[dir=rtl] .item-bottom {
|
|
326
|
+
padding-left: calc(var(--inner-padding-end) + var(--ion-safe-area-left, 0px));
|
|
327
|
+
padding-right: calc(var(--padding-start) + var(--ion-safe-area-right, 0px));
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
@supports selector(:dir(rtl)) {
|
|
331
|
+
.item-bottom:dir(rtl) {
|
|
332
|
+
padding-left: calc(var(--inner-padding-end) + var(--ion-safe-area-left, 0px));
|
|
333
|
+
padding-right: calc(var(--padding-start) + var(--ion-safe-area-right, 0px));
|
|
334
|
+
}
|
|
335
|
+
}
|
|
288
336
|
|
|
289
337
|
.item-detail-icon {
|
|
290
338
|
/**
|
|
@@ -188,10 +188,6 @@
|
|
|
188
188
|
margin-right: 0;
|
|
189
189
|
margin-top: 0;
|
|
190
190
|
margin-bottom: 0;
|
|
191
|
-
-webkit-padding-start: calc(var(--padding-start) + var(--ion-safe-area-left, 0px));
|
|
192
|
-
padding-inline-start: calc(var(--padding-start) + var(--ion-safe-area-left, 0px));
|
|
193
|
-
-webkit-padding-end: var(--padding-end);
|
|
194
|
-
padding-inline-end: var(--padding-end);
|
|
195
191
|
padding-top: var(--padding-top);
|
|
196
192
|
padding-bottom: var(--padding-bottom);
|
|
197
193
|
font-family: inherit;
|
|
@@ -206,6 +202,10 @@
|
|
|
206
202
|
text-align: inherit;
|
|
207
203
|
white-space: inherit;
|
|
208
204
|
color: inherit;
|
|
205
|
+
/* stylelint-disable */
|
|
206
|
+
padding-right: var(--padding-end);
|
|
207
|
+
padding-left: calc(var(--padding-start) + var(--ion-safe-area-left, 0px));
|
|
208
|
+
/* stylelint-enable */
|
|
209
209
|
display: flex;
|
|
210
210
|
position: relative;
|
|
211
211
|
align-items: inherit;
|
|
@@ -222,6 +222,22 @@
|
|
|
222
222
|
box-sizing: border-box;
|
|
223
223
|
z-index: 1;
|
|
224
224
|
}
|
|
225
|
+
:host-context([dir=rtl]) .item-native {
|
|
226
|
+
padding-right: calc(var(--padding-start) + var(--ion-safe-area-right, 0px));
|
|
227
|
+
padding-left: var(--padding-end);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
[dir=rtl] .item-native {
|
|
231
|
+
padding-right: calc(var(--padding-start) + var(--ion-safe-area-right, 0px));
|
|
232
|
+
padding-left: var(--padding-end);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
@supports selector(:dir(rtl)) {
|
|
236
|
+
.item-native:dir(rtl) {
|
|
237
|
+
padding-right: calc(var(--padding-start) + var(--ion-safe-area-right, 0px));
|
|
238
|
+
padding-left: var(--padding-end);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
225
241
|
|
|
226
242
|
.item-native::-moz-focus-inner {
|
|
227
243
|
border: 0;
|
|
@@ -250,12 +266,12 @@ button, a {
|
|
|
250
266
|
margin-right: 0;
|
|
251
267
|
margin-top: 0;
|
|
252
268
|
margin-bottom: 0;
|
|
253
|
-
-webkit-padding-start: var(--inner-padding-start);
|
|
254
|
-
padding-inline-start: var(--inner-padding-start);
|
|
255
|
-
-webkit-padding-end: calc(var(--ion-safe-area-right, 0px) + var(--inner-padding-end));
|
|
256
|
-
padding-inline-end: calc(var(--ion-safe-area-right, 0px) + var(--inner-padding-end));
|
|
257
269
|
padding-top: var(--inner-padding-top);
|
|
258
270
|
padding-bottom: var(--inner-padding-bottom);
|
|
271
|
+
/* stylelint-disable */
|
|
272
|
+
padding-right: calc(var(--ion-safe-area-right, 0px) + var(--inner-padding-end));
|
|
273
|
+
padding-left: var(--inner-padding-start);
|
|
274
|
+
/* stylelint-enable */
|
|
259
275
|
display: flex;
|
|
260
276
|
position: relative;
|
|
261
277
|
flex: 1;
|
|
@@ -270,21 +286,53 @@ button, a {
|
|
|
270
286
|
overflow: inherit;
|
|
271
287
|
box-sizing: border-box;
|
|
272
288
|
}
|
|
289
|
+
:host-context([dir=rtl]) .item-inner {
|
|
290
|
+
padding-right: var(--inner-padding-start);
|
|
291
|
+
padding-left: calc(var(--ion-safe-area-left, 0px) + var(--inner-padding-end));
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
[dir=rtl] .item-inner {
|
|
295
|
+
padding-right: var(--inner-padding-start);
|
|
296
|
+
padding-left: calc(var(--ion-safe-area-left, 0px) + var(--inner-padding-end));
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
@supports selector(:dir(rtl)) {
|
|
300
|
+
.item-inner:dir(rtl) {
|
|
301
|
+
padding-right: var(--inner-padding-start);
|
|
302
|
+
padding-left: calc(var(--ion-safe-area-left, 0px) + var(--inner-padding-end));
|
|
303
|
+
}
|
|
304
|
+
}
|
|
273
305
|
|
|
274
306
|
.item-bottom {
|
|
275
307
|
margin-left: 0;
|
|
276
308
|
margin-right: 0;
|
|
277
309
|
margin-top: 0;
|
|
278
310
|
margin-bottom: 0;
|
|
279
|
-
-webkit-padding-start: calc(var(--padding-start) + var(--ion-safe-area-left, 0px));
|
|
280
|
-
padding-inline-start: calc(var(--padding-start) + var(--ion-safe-area-left, 0px));
|
|
281
|
-
-webkit-padding-end: var(--inner-padding-end);
|
|
282
|
-
padding-inline-end: var(--inner-padding-end);
|
|
283
311
|
padding-top: 0;
|
|
284
312
|
padding-bottom: 0;
|
|
313
|
+
/* stylelint-disable */
|
|
314
|
+
padding-left: calc(var(--padding-start) + var(--ion-safe-area-left, 0px));
|
|
315
|
+
padding-right: calc(var(--inner-padding-end) + var(--ion-safe-area-right, 0px));
|
|
316
|
+
/* stylelint-enable */
|
|
285
317
|
display: flex;
|
|
286
318
|
justify-content: space-between;
|
|
287
319
|
}
|
|
320
|
+
:host-context([dir=rtl]) .item-bottom {
|
|
321
|
+
padding-left: calc(var(--inner-padding-end) + var(--ion-safe-area-left, 0px));
|
|
322
|
+
padding-right: calc(var(--padding-start) + var(--ion-safe-area-right, 0px));
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
[dir=rtl] .item-bottom {
|
|
326
|
+
padding-left: calc(var(--inner-padding-end) + var(--ion-safe-area-left, 0px));
|
|
327
|
+
padding-right: calc(var(--padding-start) + var(--ion-safe-area-right, 0px));
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
@supports selector(:dir(rtl)) {
|
|
331
|
+
.item-bottom:dir(rtl) {
|
|
332
|
+
padding-left: calc(var(--inner-padding-end) + var(--ion-safe-area-left, 0px));
|
|
333
|
+
padding-right: calc(var(--padding-start) + var(--ion-safe-area-right, 0px));
|
|
334
|
+
}
|
|
335
|
+
}
|
|
288
336
|
|
|
289
337
|
.item-detail-icon {
|
|
290
338
|
/**
|
|
@@ -10,5 +10,31 @@ configs().forEach(({ title, screenshot, config }) => {
|
|
|
10
10
|
await page.setIonViewport();
|
|
11
11
|
await expect(page).toHaveScreenshot(screenshot(`item-diff`));
|
|
12
12
|
});
|
|
13
|
+
/**
|
|
14
|
+
* This behavior needs to be tested for all modes & directions
|
|
15
|
+
* Safe padding should stay on the same side when the direction changes
|
|
16
|
+
*/
|
|
17
|
+
test('should have safe area padding', async ({ page }) => {
|
|
18
|
+
await page.setContent(`
|
|
19
|
+
<style>
|
|
20
|
+
:root {
|
|
21
|
+
--ion-safe-area-left: 40px;
|
|
22
|
+
--ion-safe-area-right: 20px;
|
|
23
|
+
}
|
|
24
|
+
</style>
|
|
25
|
+
<ion-list>
|
|
26
|
+
<ion-item>
|
|
27
|
+
<ion-label>Item with helper</ion-label>
|
|
28
|
+
<div slot="helper">Helper</div>
|
|
29
|
+
</ion-item>
|
|
30
|
+
|
|
31
|
+
<ion-item>
|
|
32
|
+
<ion-label> Single line text that should have ellipses when it doesn't all fit in the item</ion-label>
|
|
33
|
+
</ion-item>
|
|
34
|
+
</ion-list>
|
|
35
|
+
`, config);
|
|
36
|
+
const list = page.locator('ion-list');
|
|
37
|
+
await expect(list).toHaveScreenshot(screenshot('item-safe-area'));
|
|
38
|
+
});
|
|
13
39
|
});
|
|
14
40
|
});
|
|
@@ -130,7 +130,21 @@ ion-list.list-inset {
|
|
|
130
130
|
border-radius: 10px;
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
-
|
|
133
|
+
/**
|
|
134
|
+
* These selectors ensure the last item in the list
|
|
135
|
+
* has the correct border.
|
|
136
|
+
* We need to consider the following scenarios:
|
|
137
|
+
1. The only item in a list.
|
|
138
|
+
2. The last item in a list as long as it is not the only item.
|
|
139
|
+
3. The item in the last item-sliding in a list.
|
|
140
|
+
* Note that we do not select ion-item:last-of-type
|
|
141
|
+
* because that will cause the borders to disappear on
|
|
142
|
+
* items in an item-sliding when the item is the last
|
|
143
|
+
* element in the item-sliding container.
|
|
144
|
+
*/
|
|
145
|
+
.list-ios.list-inset ion-item:only-child,
|
|
146
|
+
.list-ios.list-inset ion-item:not(:only-of-type):last-of-type,
|
|
147
|
+
.list-ios.list-inset ion-item-sliding:last-of-type ion-item {
|
|
134
148
|
--border-width: 0;
|
|
135
149
|
--inner-border-width: 0;
|
|
136
150
|
}
|
|
@@ -166,12 +166,50 @@ ion-list.list-inset {
|
|
|
166
166
|
border-radius: 2px;
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
-
|
|
169
|
+
/**
|
|
170
|
+
* These selectors ensure the first item in the list
|
|
171
|
+
* has the correct radius.
|
|
172
|
+
* We need to consider the following scenarios:
|
|
173
|
+
1. The first item in a list as long as it is not the only item.
|
|
174
|
+
2. The item in the first item-sliding in a list.
|
|
175
|
+
* Note that we do not select "ion-item-sliding ion-item:first-of-type"
|
|
176
|
+
* because that will cause the borders to disappear on
|
|
177
|
+
* items in an item-sliding when the item is the first
|
|
178
|
+
* element in the item-sliding container.
|
|
179
|
+
*/
|
|
180
|
+
.list-md.list-inset ion-item:not(:only-of-type):first-of-type,
|
|
181
|
+
.list-md.list-inset ion-item-sliding:first-of-type ion-item {
|
|
170
182
|
--border-radius: 2px 2px 0 0;
|
|
171
183
|
}
|
|
172
184
|
|
|
173
|
-
|
|
174
|
-
|
|
185
|
+
/**
|
|
186
|
+
* These selectors ensure the last item in the list
|
|
187
|
+
* has the correct radius and border.
|
|
188
|
+
* We need to consider the following scenarios:
|
|
189
|
+
1. The last item in a list as long as it is not the only item.
|
|
190
|
+
2. The item in the last item-sliding in a list.
|
|
191
|
+
* Note that we do not select "ion-item-sliding ion-item:last-of-type"
|
|
192
|
+
* because that will cause the borders to disappear on
|
|
193
|
+
* items in an item-sliding when the item is the last
|
|
194
|
+
* element in the item-sliding container.
|
|
195
|
+
*/
|
|
196
|
+
.list-md.list-inset ion-item:not(:only-of-type):last-of-type,
|
|
197
|
+
.list-md.list-inset ion-item-sliding:last-of-type ion-item {
|
|
198
|
+
--border-radius: 0 0 2px 2px;
|
|
199
|
+
--border-width: 0;
|
|
200
|
+
--inner-border-width: 0;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* The only item in a list should have a border radius
|
|
205
|
+
* on all corners.
|
|
206
|
+
* We target :only-child instead of :only-of-type
|
|
207
|
+
* otherwise borders will disappear on items inside of
|
|
208
|
+
* ion-item-sliding because the item will be the only
|
|
209
|
+
* one of its type inside of the ion-item-sliding group.
|
|
210
|
+
*/
|
|
211
|
+
.list-md.list-inset ion-item:only-child {
|
|
212
|
+
--border-radius: 2px;
|
|
175
213
|
--border-width: 0;
|
|
176
214
|
--inner-border-width: 0;
|
|
177
215
|
}
|
|
@@ -22,3 +22,146 @@ configs().forEach(({ title, screenshot, config }) => {
|
|
|
22
22
|
});
|
|
23
23
|
});
|
|
24
24
|
});
|
|
25
|
+
/**
|
|
26
|
+
* Padding and border color ensures the bottom border can be easily seen if it regresses.
|
|
27
|
+
* The background color ensures that any border radius values can be seen.
|
|
28
|
+
*/
|
|
29
|
+
configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
|
|
30
|
+
test.describe(title('list: lines with children'), () => {
|
|
31
|
+
test('only item in inset list should not have line', async ({ page }) => {
|
|
32
|
+
test.info().annotations.push({
|
|
33
|
+
type: 'issue',
|
|
34
|
+
description: 'https://github.com/ionic-team/ionic-framework/issues/28435',
|
|
35
|
+
});
|
|
36
|
+
await page.setContent(`
|
|
37
|
+
<style>
|
|
38
|
+
#container {
|
|
39
|
+
padding: 10px;
|
|
40
|
+
background: #0088cc;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
ion-item {
|
|
44
|
+
--border-color: red;
|
|
45
|
+
}
|
|
46
|
+
</style>
|
|
47
|
+
<div id="container">
|
|
48
|
+
<ion-list inset="true">
|
|
49
|
+
<ion-item>
|
|
50
|
+
<ion-label>Item 0</ion-label>
|
|
51
|
+
</ion-item>
|
|
52
|
+
</ion-list>
|
|
53
|
+
</div>
|
|
54
|
+
`, config);
|
|
55
|
+
const container = page.locator('#container');
|
|
56
|
+
await expect(container).toHaveScreenshot(screenshot('inset-list-only-item-no-lines'));
|
|
57
|
+
});
|
|
58
|
+
test('last item in inset list with end options should not have line', async ({ page }) => {
|
|
59
|
+
test.info().annotations.push({
|
|
60
|
+
type: 'issue',
|
|
61
|
+
description: 'https://github.com/ionic-team/ionic-framework/issues/28435',
|
|
62
|
+
});
|
|
63
|
+
await page.setContent(`
|
|
64
|
+
<style>
|
|
65
|
+
#container {
|
|
66
|
+
padding: 10px;
|
|
67
|
+
background: #0088cc;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
ion-item {
|
|
71
|
+
--border-color: red;
|
|
72
|
+
}
|
|
73
|
+
</style>
|
|
74
|
+
<div id="container">
|
|
75
|
+
<ion-list inset="true">
|
|
76
|
+
<ion-item-sliding>
|
|
77
|
+
<ion-item>
|
|
78
|
+
<ion-label>Item 0</ion-label>
|
|
79
|
+
</ion-item>
|
|
80
|
+
<ion-item-options slot="end">
|
|
81
|
+
<ion-item-option color="warning">
|
|
82
|
+
<ion-icon slot="icon-only" name="pin"></ion-icon>
|
|
83
|
+
</ion-item-option>
|
|
84
|
+
</ion-item-options>
|
|
85
|
+
</ion-item-sliding>
|
|
86
|
+
|
|
87
|
+
<ion-item-sliding>
|
|
88
|
+
<ion-item>
|
|
89
|
+
<ion-label>Item 1</ion-label>
|
|
90
|
+
</ion-item>
|
|
91
|
+
<ion-item-options slot="end">
|
|
92
|
+
<ion-item-option color="warning">
|
|
93
|
+
<ion-icon slot="icon-only" name="pin"></ion-icon>
|
|
94
|
+
</ion-item-option>
|
|
95
|
+
</ion-item-options>
|
|
96
|
+
</ion-item-sliding>
|
|
97
|
+
|
|
98
|
+
<ion-item-sliding>
|
|
99
|
+
<ion-item>
|
|
100
|
+
<ion-label>Item 2</ion-label>
|
|
101
|
+
</ion-item>
|
|
102
|
+
<ion-item-options slot="end">
|
|
103
|
+
<ion-item-option color="warning">
|
|
104
|
+
<ion-icon slot="icon-only" name="pin"></ion-icon>
|
|
105
|
+
</ion-item-option>
|
|
106
|
+
</ion-item-options>
|
|
107
|
+
</ion-item-sliding>
|
|
108
|
+
</ion-list>
|
|
109
|
+
</div>
|
|
110
|
+
`, config);
|
|
111
|
+
const container = page.locator('#container');
|
|
112
|
+
await expect(container).toHaveScreenshot(screenshot('inset-list-end-options-no-lines'));
|
|
113
|
+
});
|
|
114
|
+
test('last item in inset list with start options should not have line', async ({ page }) => {
|
|
115
|
+
await page.setContent(`
|
|
116
|
+
<style>
|
|
117
|
+
#container {
|
|
118
|
+
padding: 10px;
|
|
119
|
+
background: #0088cc;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
ion-item {
|
|
123
|
+
--border-color: red;
|
|
124
|
+
}
|
|
125
|
+
</style>
|
|
126
|
+
<div id="container">
|
|
127
|
+
<ion-list inset="true">
|
|
128
|
+
<ion-item-sliding>
|
|
129
|
+
<ion-item-options slot="start">
|
|
130
|
+
<ion-item-option color="warning">
|
|
131
|
+
<ion-icon slot="icon-only" name="pin"></ion-icon>
|
|
132
|
+
</ion-item-option>
|
|
133
|
+
</ion-item-options>
|
|
134
|
+
<ion-item>
|
|
135
|
+
<ion-label>Item 0</ion-label>
|
|
136
|
+
</ion-item>
|
|
137
|
+
</ion-item-sliding>
|
|
138
|
+
|
|
139
|
+
<ion-item-sliding>
|
|
140
|
+
<ion-item-options slot="start">
|
|
141
|
+
<ion-item-option color="warning">
|
|
142
|
+
<ion-icon slot="icon-only" name="pin"></ion-icon>
|
|
143
|
+
</ion-item-option>
|
|
144
|
+
</ion-item-options>
|
|
145
|
+
<ion-item>
|
|
146
|
+
<ion-label>Item 1</ion-label>
|
|
147
|
+
</ion-item>
|
|
148
|
+
</ion-item-sliding>
|
|
149
|
+
|
|
150
|
+
<ion-item-sliding>
|
|
151
|
+
<ion-item-options slot="start">
|
|
152
|
+
<ion-item-option color="warning">
|
|
153
|
+
<ion-icon slot="icon-only" name="pin"></ion-icon>
|
|
154
|
+
</ion-item-option>
|
|
155
|
+
</ion-item-options>
|
|
156
|
+
<ion-item>
|
|
157
|
+
<ion-label>Item 2</ion-label>
|
|
158
|
+
</ion-item>
|
|
159
|
+
</ion-item-sliding>
|
|
160
|
+
</ion-list>
|
|
161
|
+
</div>
|
|
162
|
+
`, config);
|
|
163
|
+
const container = page.locator('#container');
|
|
164
|
+
await expect(container).toHaveScreenshot(screenshot('inset-list-start-options-no-lines'));
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
});
|
|
@@ -10,6 +10,11 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
|
|
|
10
10
|
test.describe(title('picker-internal: rendering'), () => {
|
|
11
11
|
test('inline pickers should not have visual regression', async ({ page }) => {
|
|
12
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();
|
|
13
18
|
await expect(page.locator('#inline')).toHaveScreenshot(screenshot(`picker-internal-inline-diff`));
|
|
14
19
|
});
|
|
15
20
|
});
|
|
@@ -265,34 +265,40 @@
|
|
|
265
265
|
}
|
|
266
266
|
|
|
267
267
|
.searchbar-cancel-button {
|
|
268
|
+
/**
|
|
269
|
+
* The left edge of the cancel button
|
|
270
|
+
* should align with the left edge
|
|
271
|
+
* of the back button if the searchbar
|
|
272
|
+
* is used in a toolbar.
|
|
273
|
+
*/
|
|
268
274
|
top: 0;
|
|
269
275
|
background-color: transparent;
|
|
270
276
|
font-size: 1.6em;
|
|
271
277
|
}
|
|
272
278
|
@supports (inset-inline-start: 0) {
|
|
273
279
|
.searchbar-cancel-button {
|
|
274
|
-
inset-inline-start:
|
|
280
|
+
inset-inline-start: 8px;
|
|
275
281
|
}
|
|
276
282
|
}
|
|
277
283
|
@supports not (inset-inline-start: 0) {
|
|
278
284
|
.searchbar-cancel-button {
|
|
279
|
-
left:
|
|
285
|
+
left: 8px;
|
|
280
286
|
}
|
|
281
287
|
:host-context([dir=rtl]) .searchbar-cancel-button {
|
|
282
288
|
left: unset;
|
|
283
289
|
right: unset;
|
|
284
|
-
right:
|
|
290
|
+
right: 8px;
|
|
285
291
|
}
|
|
286
292
|
[dir=rtl] .searchbar-cancel-button {
|
|
287
293
|
left: unset;
|
|
288
294
|
right: unset;
|
|
289
|
-
right:
|
|
295
|
+
right: 8px;
|
|
290
296
|
}
|
|
291
297
|
@supports selector(:dir(rtl)) {
|
|
292
298
|
.searchbar-cancel-button:dir(rtl) {
|
|
293
299
|
left: unset;
|
|
294
300
|
right: unset;
|
|
295
|
-
right:
|
|
301
|
+
right: 8px;
|
|
296
302
|
}
|
|
297
303
|
}
|
|
298
304
|
}
|
|
@@ -134,3 +134,28 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, screenshot, c
|
|
|
134
134
|
});
|
|
135
135
|
});
|
|
136
136
|
});
|
|
137
|
+
configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
|
|
138
|
+
test.describe(title('searchbar: cancel button alignment'), () => {
|
|
139
|
+
test('should align with the back button when used in a toolbar', async ({ page }, testInfo) => {
|
|
140
|
+
testInfo.annotations.push({
|
|
141
|
+
type: 'issue',
|
|
142
|
+
description: 'https://github.com/ionic-team/ionic-framework/issues/28468',
|
|
143
|
+
});
|
|
144
|
+
await page.setContent(`
|
|
145
|
+
<ion-header>
|
|
146
|
+
<ion-toolbar>
|
|
147
|
+
<ion-buttons slot="start">
|
|
148
|
+
<ion-back-button default-href="#"></ion-back-button>
|
|
149
|
+
</ion-buttons>
|
|
150
|
+
<ion-title>Test</ion-title>
|
|
151
|
+
</ion-toolbar>
|
|
152
|
+
<ion-toolbar>
|
|
153
|
+
<ion-searchbar show-cancel-button="always"></ion-searchbar>
|
|
154
|
+
</ion-toolbar>
|
|
155
|
+
</ion-header>
|
|
156
|
+
`, config);
|
|
157
|
+
const header = page.locator('ion-header');
|
|
158
|
+
await expect(header).toHaveScreenshot(screenshot(`searchbar-back-button-align`));
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
});
|
package/dist/docs.json
CHANGED