diff --git a/core/src/components/fab/fab.scss b/core/src/components/fab/fab.scss index 73fc4b375d2..227c4b0f37e 100644 --- a/core/src/components/fab/fab.scss +++ b/core/src/components/fab/fab.scss @@ -23,15 +23,29 @@ } :host(.fab-horizontal-start) { - @include position-horizontal( - calc(#{$fab-content-margin} + var(--ion-safe-area-left, 0px)), null - ); + /* stylelint-disable */ + @include ltr() { + left: calc(#{$fab-content-margin} + var(--ion-safe-area-left, 0px)); + } + + @include rtl() { + right: calc(#{$fab-content-margin} + var(--ion-safe-area-right, 0px)); + left: unset; + } + /* stylelint-enable */ } :host(.fab-horizontal-end) { - @include position-horizontal( - null, calc(#{$fab-content-margin} + var(--ion-safe-area-right, 0px)) - ); + /* stylelint-disable */ + @include ltr() { + right: calc(#{$fab-content-margin} + var(--ion-safe-area-right, 0px)); + } + + @include rtl() { + left: calc(#{$fab-content-margin} + var(--ion-safe-area-left, 0px)); + right: unset; + } + /* stylelint-enable */ } diff --git a/core/src/components/fab/test/safe-area/fab.e2e.ts b/core/src/components/fab/test/safe-area/fab.e2e.ts new file mode 100644 index 00000000000..cde83ec4ccf --- /dev/null +++ b/core/src/components/fab/test/safe-area/fab.e2e.ts @@ -0,0 +1,72 @@ +import { expect } from '@playwright/test'; +import { configs, test } from '@utils/test/playwright'; + +configs({ modes: ['md'] }).forEach(({ title, screenshot, config }) => { + test.describe(title('fab: safe area'), () => { + test('should ignore document direction in safe area positioning for start-positioned fab', async ({ page }) => { + await page.setContent( + ` + + + + + + + + + + `, + config + ); + + /** + * We need to capture the entire page to check the fab's position, + * but we don't need much extra white space. + */ + await page.setViewportSize({ + width: 200, + height: 200, + }); + + await expect(page).toHaveScreenshot(screenshot('fab-safe-area-horizontal-start')); + }); + + test('should ignore document direction in safe area positioning for end-positioned fab', async ({ page }) => { + await page.setContent( + ` + + + + + + + + + + `, + config + ); + + /** + * We need to capture the entire page to check the fab's position, + * but we don't need much extra white space. + */ + await page.setViewportSize({ + width: 200, + height: 200, + }); + + await expect(page).toHaveScreenshot(screenshot('fab-safe-area-horizontal-end')); + }); + }); +}); diff --git a/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-end-md-ltr-Mobile-Chrome-linux.png b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-end-md-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..531c61bf422 Binary files /dev/null and b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-end-md-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-end-md-ltr-Mobile-Firefox-linux.png b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-end-md-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..d46960e64ed Binary files /dev/null and b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-end-md-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-end-md-ltr-Mobile-Safari-linux.png b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-end-md-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..06502d85e14 Binary files /dev/null and b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-end-md-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-end-md-rtl-Mobile-Chrome-linux.png b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-end-md-rtl-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..cbb0dce57fd Binary files /dev/null and b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-end-md-rtl-Mobile-Chrome-linux.png differ diff --git a/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-end-md-rtl-Mobile-Firefox-linux.png b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-end-md-rtl-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..4c35d2c98b4 Binary files /dev/null and b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-end-md-rtl-Mobile-Firefox-linux.png differ diff --git a/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-end-md-rtl-Mobile-Safari-linux.png b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-end-md-rtl-Mobile-Safari-linux.png new file mode 100644 index 00000000000..f049c7f63b1 Binary files /dev/null and b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-end-md-rtl-Mobile-Safari-linux.png differ diff --git a/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-start-md-ltr-Mobile-Chrome-linux.png b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-start-md-ltr-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..cbb0dce57fd Binary files /dev/null and b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-start-md-ltr-Mobile-Chrome-linux.png differ diff --git a/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-start-md-ltr-Mobile-Firefox-linux.png b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-start-md-ltr-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..4c35d2c98b4 Binary files /dev/null and b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-start-md-ltr-Mobile-Firefox-linux.png differ diff --git a/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-start-md-ltr-Mobile-Safari-linux.png b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-start-md-ltr-Mobile-Safari-linux.png new file mode 100644 index 00000000000..f049c7f63b1 Binary files /dev/null and b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-start-md-ltr-Mobile-Safari-linux.png differ diff --git a/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-start-md-rtl-Mobile-Chrome-linux.png b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-start-md-rtl-Mobile-Chrome-linux.png new file mode 100644 index 00000000000..531c61bf422 Binary files /dev/null and b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-start-md-rtl-Mobile-Chrome-linux.png differ diff --git a/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-start-md-rtl-Mobile-Firefox-linux.png b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-start-md-rtl-Mobile-Firefox-linux.png new file mode 100644 index 00000000000..d46960e64ed Binary files /dev/null and b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-start-md-rtl-Mobile-Firefox-linux.png differ diff --git a/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-start-md-rtl-Mobile-Safari-linux.png b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-start-md-rtl-Mobile-Safari-linux.png new file mode 100644 index 00000000000..06502d85e14 Binary files /dev/null and b/core/src/components/fab/test/safe-area/fab.e2e.ts-snapshots/fab-safe-area-horizontal-start-md-rtl-Mobile-Safari-linux.png differ