@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.
Files changed (29) hide show
  1. package/components/ion-searchbar.js +1 -1
  2. package/components/item.js +2 -2
  3. package/components/list.js +2 -2
  4. package/dist/cjs/ion-item_8.cjs.entry.js +4 -4
  5. package/dist/cjs/ion-searchbar.cjs.entry.js +1 -1
  6. package/dist/collection/components/item/item.ios.css +60 -12
  7. package/dist/collection/components/item/item.md.css +60 -12
  8. package/dist/collection/components/item/test/basic/item.e2e.js +26 -0
  9. package/dist/collection/components/list/list.ios.css +15 -1
  10. package/dist/collection/components/list/list.md.css +41 -3
  11. package/dist/collection/components/list/test/lines/list.e2e.js +143 -0
  12. package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +5 -0
  13. package/dist/collection/components/searchbar/searchbar.md.css +11 -5
  14. package/dist/collection/components/searchbar/test/basic/searchbar.e2e.js +25 -0
  15. package/dist/docs.json +1 -1
  16. package/dist/esm/ion-item_8.entry.js +4 -4
  17. package/dist/esm/ion-searchbar.entry.js +1 -1
  18. package/dist/esm-es5/ion-item_8.entry.js +1 -1
  19. package/dist/esm-es5/ion-searchbar.entry.js +1 -1
  20. package/dist/ionic/ionic.esm.js +1 -1
  21. package/dist/ionic/p-02663394.system.js +1 -1
  22. package/dist/ionic/p-5f4c4347.system.entry.js +4 -0
  23. package/dist/ionic/{p-bc6e32d2.entry.js → p-69f93198.entry.js} +1 -1
  24. package/dist/ionic/{p-a6880f79.system.entry.js → p-6cf407b5.system.entry.js} +1 -1
  25. package/dist/ionic/p-df9d7fe1.entry.js +4 -0
  26. package/hydrate/index.js +5 -5
  27. package/package.json +1 -3
  28. package/dist/ionic/p-936657e3.entry.js +0 -4
  29. 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
- .list-ios.list-inset ion-item:last-child {
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
- .list-md.list-inset ion-item:first-child {
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
- .list-md.list-inset ion-item:last-child {
174
- --border-radius: 0 0 2px, 2px;
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: 5px;
280
+ inset-inline-start: 8px;
275
281
  }
276
282
  }
277
283
  @supports not (inset-inline-start: 0) {
278
284
  .searchbar-cancel-button {
279
- left: 5px;
285
+ left: 8px;
280
286
  }
281
287
  :host-context([dir=rtl]) .searchbar-cancel-button {
282
288
  left: unset;
283
289
  right: unset;
284
- right: 5px;
290
+ right: 8px;
285
291
  }
286
292
  [dir=rtl] .searchbar-cancel-button {
287
293
  left: unset;
288
294
  right: unset;
289
- right: 5px;
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: 5px;
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
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2023-11-06T19:49:20",
2
+ "timestamp": "2023-11-06T22:43:13",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.7.0",