Skip to content

fix(modal, popover): respect safe area insets on popovers and modals #18215

fix(modal, popover): respect safe area insets on popovers and modals

fix(modal, popover): respect safe area insets on popovers and modals #18215

Triggered via pull request February 9, 2026 20:20
@ShaneKShaneK
synchronize #30949
FW-6830-2
Status Failure
Total duration 6m 38s
Artifacts 13

build.yml

on: pull_request
build-react
49s
build-react
build-vue
32s
build-vue
Matrix: test-core-screenshot
build-angular
1m 3s
build-angular
build-angular-server
38s
build-angular-server
test-core-clean-build
16s
test-core-clean-build
test-core-lint
35s
test-core-lint
test-core-spec
41s
test-core-spec
build-react-router
25s
build-react-router
build-vue-router
38s
build-vue-router
verify-screenshots
4s
verify-screenshots
Matrix: test-angular-e2e
Matrix: test-react-e2e
Matrix: test-react-router-e2e
Matrix: test-vue-e2e
verify-test-angular-e2e
2s
verify-test-angular-e2e
verify-test-react-e2e
3s
verify-test-react-e2e
verify-test-react-router-e2e
2s
verify-test-react-router-e2e
verify-test-vue-e2e
3s
verify-test-vue-e2e
Fit to window
Zoom out
Zoom in

Annotations

53 errors and 6 notices
test-core-lint
Process completed with exit code 1.
test-core-lint: core/src/components/popover/utils.ts#L911
'hideArrow' is never reassigned. Use 'const' instead
test-core-lint: core/src/components/popover/utils.ts#L75
Unexpected object value in conditional. The condition is always true
test-core-screenshot (11, 20)
Process completed with exit code 1.
[Mobile Chrome] › src/components/popover/test/safe-area/popover.e2e.ts:64:9 › popover: safe-area - md/ltr › should handle a large popover near the bottom-right corner without overlapping safe areas: src/components/popover/test/safe-area/popover.e2e.ts#L82
6) [Mobile Chrome] › src/components/popover/test/safe-area/popover.e2e.ts:64:9 › popover: safe-area - md/ltr › should handle a large popover near the bottom-right corner without overlapping safe areas Error: A snapshot doesn't exist at /ionic/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-large-md-ltr-Mobile-Chrome-linux.png, writing actual. 80 | await ionPopoverDidPresent.next(); 81 | > 82 | await expect(page).toHaveScreenshot(screenshot('popover-safe-area-large')); | ^ 83 | }); 84 | }); 85 | }); at /ionic/src/components/popover/test/safe-area/popover.e2e.ts:82:7
[Mobile Chrome] › src/components/popover/test/safe-area/popover.e2e.ts:39:9 › popover: safe-area - md/ltr › should not overlap the right safe area when trigger is near the right edge: src/components/popover/test/safe-area/popover.e2e.ts#L61
5) [Mobile Chrome] › src/components/popover/test/safe-area/popover.e2e.ts:39:9 › popover: safe-area - md/ltr › should not overlap the right safe area when trigger is near the right edge Error: A snapshot doesn't exist at /ionic/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-right-md-ltr-Mobile-Chrome-linux.png, writing actual. 59 | await ionPopoverDidPresent.next(); 60 | > 61 | await expect(page).toHaveScreenshot(screenshot('popover-safe-area-right')); | ^ 62 | }); 63 | 64 | test('should handle a large popover near the bottom-right corner without overlapping safe areas', async ({ at /ionic/src/components/popover/test/safe-area/popover.e2e.ts:61:7
[Mobile Chrome] › src/components/popover/test/safe-area/popover.e2e.ts:14:9 › popover: safe-area - md/ltr › should not overlap the bottom safe area when trigger is near the bottom edge: src/components/popover/test/safe-area/popover.e2e.ts#L36
4) [Mobile Chrome] › src/components/popover/test/safe-area/popover.e2e.ts:14:9 › popover: safe-area - md/ltr › should not overlap the bottom safe area when trigger is near the bottom edge Error: A snapshot doesn't exist at /ionic/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-bottom-md-ltr-Mobile-Chrome-linux.png, writing actual. 34 | await ionPopoverDidPresent.next(); 35 | > 36 | await expect(page).toHaveScreenshot(screenshot('popover-safe-area-bottom')); | ^ 37 | }); 38 | 39 | test('should not overlap the right safe area when trigger is near the right edge', async ({ at /ionic/src/components/popover/test/safe-area/popover.e2e.ts:36:7
[Mobile Chrome] › src/components/popover/test/safe-area/popover.e2e.ts:64:9 › popover: safe-area - ios/ltr › should handle a large popover near the bottom-right corner without overlapping safe areas: src/components/popover/test/safe-area/popover.e2e.ts#L82
3) [Mobile Chrome] › src/components/popover/test/safe-area/popover.e2e.ts:64:9 › popover: safe-area - ios/ltr › should handle a large popover near the bottom-right corner without overlapping safe areas Error: A snapshot doesn't exist at /ionic/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-large-ios-ltr-Mobile-Chrome-linux.png, writing actual. 80 | await ionPopoverDidPresent.next(); 81 | > 82 | await expect(page).toHaveScreenshot(screenshot('popover-safe-area-large')); | ^ 83 | }); 84 | }); 85 | }); at /ionic/src/components/popover/test/safe-area/popover.e2e.ts:82:7
[Mobile Chrome] › src/components/popover/test/safe-area/popover.e2e.ts:39:9 › popover: safe-area - ios/ltr › should not overlap the right safe area when trigger is near the right edge: src/components/popover/test/safe-area/popover.e2e.ts#L61
2) [Mobile Chrome] › src/components/popover/test/safe-area/popover.e2e.ts:39:9 › popover: safe-area - ios/ltr › should not overlap the right safe area when trigger is near the right edge Error: A snapshot doesn't exist at /ionic/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-right-ios-ltr-Mobile-Chrome-linux.png, writing actual. 59 | await ionPopoverDidPresent.next(); 60 | > 61 | await expect(page).toHaveScreenshot(screenshot('popover-safe-area-right')); | ^ 62 | }); 63 | 64 | test('should handle a large popover near the bottom-right corner without overlapping safe areas', async ({ at /ionic/src/components/popover/test/safe-area/popover.e2e.ts:61:7
[Mobile Chrome] › src/components/popover/test/safe-area/popover.e2e.ts:14:9 › popover: safe-area - ios/ltr › should not overlap the bottom safe area when trigger is near the bottom edge: src/components/popover/test/safe-area/popover.e2e.ts#L36
1) [Mobile Chrome] › src/components/popover/test/safe-area/popover.e2e.ts:14:9 › popover: safe-area - ios/ltr › should not overlap the bottom safe area when trigger is near the bottom edge Error: A snapshot doesn't exist at /ionic/src/components/popover/test/safe-area/popover.e2e.ts-snapshots/popover-safe-area-bottom-ios-ltr-Mobile-Chrome-linux.png, writing actual. 34 | await ionPopoverDidPresent.next(); 35 | > 36 | await expect(page).toHaveScreenshot(screenshot('popover-safe-area-bottom')); | ^ 37 | }); 38 | 39 | test('should not overlap the right safe area when trigger is near the right edge', async ({ at /ionic/src/components/popover/test/safe-area/popover.e2e.ts:36:7
test-core-screenshot (5, 20)
The strategy configuration was canceled because "test-core-screenshot._11_20" failed
test-core-screenshot (5, 20)
Process completed with exit code 12.
test-core-screenshot (5, 20)
The operation was canceled.
test-core-screenshot (4, 20)
The strategy configuration was canceled because "test-core-screenshot._11_20" failed
test-core-screenshot (4, 20)
Process completed with exit code 12.
test-core-screenshot (4, 20)
The operation was canceled.
test-core-screenshot (17, 20)
The strategy configuration was canceled because "test-core-screenshot._11_20" failed
test-core-screenshot (2, 20)
The strategy configuration was canceled because "test-core-screenshot._11_20" failed
test-core-screenshot (17, 20)
Process completed with exit code 12.
test-core-screenshot (2, 20)
Process completed with exit code 12.
test-core-screenshot (17, 20)
The operation was canceled.
test-core-screenshot (2, 20)
The operation was canceled.
test-core-screenshot (16, 20)
The strategy configuration was canceled because "test-core-screenshot._11_20" failed
test-core-screenshot (16, 20)
Process completed with exit code 12.
test-core-screenshot (16, 20)
The operation was canceled.
test-core-screenshot (6, 20)
The strategy configuration was canceled because "test-core-screenshot._11_20" failed
test-core-screenshot (19, 20)
The strategy configuration was canceled because "test-core-screenshot._11_20" failed
test-core-screenshot (19, 20)
Process completed with exit code 12.
test-core-screenshot (6, 20)
Process completed with exit code 12.
test-core-screenshot (19, 20)
The operation was canceled.
test-core-screenshot (6, 20)
The operation was canceled.
test-core-screenshot (15, 20)
The strategy configuration was canceled because "test-core-screenshot._11_20" failed
test-core-screenshot (15, 20)
Process completed with exit code 12.
test-core-screenshot (15, 20)
The operation was canceled.
test-core-screenshot (3, 20)
The strategy configuration was canceled because "test-core-screenshot._11_20" failed
test-core-screenshot (3, 20)
Process completed with exit code 12.
test-core-screenshot (3, 20)
The operation was canceled.
test-core-screenshot (13, 20)
The strategy configuration was canceled because "test-core-screenshot._11_20" failed
test-core-screenshot (18, 20)
The strategy configuration was canceled because "test-core-screenshot._11_20" failed
test-core-screenshot (13, 20)
Process completed with exit code 12.
test-core-screenshot (18, 20)
Process completed with exit code 12.
test-core-screenshot (13, 20)
The operation was canceled.
test-core-screenshot (18, 20)
The operation was canceled.
test-core-screenshot (14, 20)
The strategy configuration was canceled because "test-core-screenshot._11_20" failed
test-core-screenshot (14, 20)
Process completed with exit code 12.
test-core-screenshot (14, 20)
The operation was canceled.
test-core-screenshot (1, 20)
The strategy configuration was canceled because "test-core-screenshot._11_20" failed
test-core-screenshot (1, 20)
Process completed with exit code 12.
test-core-screenshot (1, 20)
The operation was canceled.
test-core-screenshot (20, 20)
The strategy configuration was canceled because "test-core-screenshot._11_20" failed
test-core-screenshot (20, 20)
Process completed with exit code 12.
test-core-screenshot (20, 20)
The operation was canceled.
verify-screenshots
Process completed with exit code 1.
🎭 Playwright Run Summary
412 passed (2.6m)
🎭 Playwright Run Summary
216 skipped 318 passed (2.9m)
🎭 Playwright Run Summary
1 skipped 537 passed (3.2m)
🎭 Playwright Run Summary
1 skipped 546 passed (3.4m)
🎭 Playwright Run Summary
4 skipped 645 passed (3.9m)
🎭 Playwright Run Summary
6 failed [Mobile Chrome] › src/components/popover/test/safe-area/popover.e2e.ts:14:9 › popover: safe-area - ios/ltr › should not overlap the bottom safe area when trigger is near the bottom edge [Mobile Chrome] › src/components/popover/test/safe-area/popover.e2e.ts:39:9 › popover: safe-area - ios/ltr › should not overlap the right safe area when trigger is near the right edge [Mobile Chrome] › src/components/popover/test/safe-area/popover.e2e.ts:64:9 › popover: safe-area - ios/ltr › should handle a large popover near the bottom-right corner without overlapping safe areas [Mobile Chrome] › src/components/popover/test/safe-area/popover.e2e.ts:14:9 › popover: safe-area - md/ltr › should not overlap the bottom safe area when trigger is near the bottom edge [Mobile Chrome] › src/components/popover/test/safe-area/popover.e2e.ts:39:9 › popover: safe-area - md/ltr › should not overlap the right safe area when trigger is near the right edge [Mobile Chrome] › src/components/popover/test/safe-area/popover.e2e.ts:64:9 › popover: safe-area - md/ltr › should handle a large popover near the bottom-right corner without overlapping safe areas 4 skipped 521 passed (3.8m)

Artifacts

Produced during runtime
Name Size Digest
ionic-angular
667 KB
sha256:b46743432f013ff29402552b35d8cbfb6dccdef6658d8760297c8589c39c12c7
ionic-angular-server
8.55 KB
sha256:78105abc8b9eda9d17cdc584f452e87cdcd3a3a07204b63b18e7622c7b610ff5
ionic-core
4.62 MB
sha256:ba8e92c2efeefca4371a94f3e784984fd4e0b3c1ac58bf1d002c11dbbbab17f3
ionic-react
212 KB
sha256:3c719db18be828aea5be291ff96b7bf9471a82106f084bf1412ecce37387ea87
ionic-react-router
27.9 KB
sha256:7af180a38ad432f6ced60feff11136b9b2b6403c5041a4057b4e93efda3241c9
ionic-vue
234 KB
sha256:4b5e7ce73d762cf778b19ebb734b08919759e23f7ca7275d0c4d2ecbc7cea4ba
ionic-vue-router
17.1 KB
sha256:f6bb22629d975d950ce45ed545f03a28a401a521379c5ae2b5ea42150b544796
test-results-10-20
415 KB
sha256:c7f4da4f711ddfe20ed5460c9343c969309dc791e31f69b482249f6226eecaef
test-results-11-20
3.67 MB
sha256:9b94aabd7b09e1f10be1107343dfb4addda15c4db2735c19c7c4ffe9485e693c
test-results-12-20
454 KB
sha256:db6a18dafdad85bf5fb72c0ed4b2a64d232033e12fce8954af4f3b901a0dfb49
test-results-7-20
371 KB
sha256:e3c31a4b5e0bd5413e48472da71ce83f528c9c1d017a7b538005c40310829f3a
test-results-8-20
427 KB
sha256:4a3aef16b30d176c87e3325b2ca7fea6dddef81592337f7d49d75537f42a86cd
test-results-9-20
489 KB
sha256:52999c608ce1fb585daf9649c2aa4a3d670f9f1fa95f9be7fef1ac33fbd6b52f