diff --git a/core/src/components/modal/test/a11y/modal.e2e-legacy.ts b/core/src/components/modal/test/a11y/modal.e2e-legacy.ts
deleted file mode 100644
index 6a040388a2..0000000000
--- a/core/src/components/modal/test/a11y/modal.e2e-legacy.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-import AxeBuilder from '@axe-core/playwright';
-import { expect } from '@playwright/test';
-import { test } from '@utils/test/playwright';
-
-test.describe('modal: a11y', () => {
- test.beforeEach(async ({ skip }) => {
- skip.rtl();
- skip.mode('md');
- });
-
- test('should not have accessibility violations', async ({ page }) => {
- await page.goto(`/src/components/modal/test/a11y`);
-
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const button = page.locator('#open-modal');
- const modal = page.locator('ion-modal .modal-wrapper');
-
- await expect(modal).toHaveAttribute('role', 'dialog');
-
- await button.click();
- await ionModalDidPresent.next();
-
- const results = await new AxeBuilder({ page }).analyze();
- expect(results.violations).toEqual([]);
- });
-
- test('should allow for custom role', async ({ page }) => {
- /**
- * Note: This example should not be used in production.
- * This only serves to check that `role` can be customized.
- */
- await page.setContent(`
-
- `);
- const modal = page.locator('ion-modal .modal-wrapper');
-
- await expect(modal).toHaveAttribute('role', 'alertdialog');
- });
-});
diff --git a/core/src/components/modal/test/a11y/modal.e2e.ts b/core/src/components/modal/test/a11y/modal.e2e.ts
new file mode 100644
index 0000000000..656c30df77
--- /dev/null
+++ b/core/src/components/modal/test/a11y/modal.e2e.ts
@@ -0,0 +1,39 @@
+import AxeBuilder from '@axe-core/playwright';
+import { expect } from '@playwright/test';
+import { configs, test } from '@utils/test/playwright';
+
+configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
+ test.describe(title('modal: a11y'), () => {
+ test('should not have accessibility violations', async ({ page }) => {
+ await page.goto(`/src/components/modal/test/a11y`, config);
+
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const button = page.locator('#open-modal');
+ const modal = page.locator('ion-modal .modal-wrapper');
+
+ await expect(modal).toHaveAttribute('role', 'dialog');
+
+ await button.click();
+ await ionModalDidPresent.next();
+
+ const results = await new AxeBuilder({ page }).analyze();
+ expect(results.violations).toEqual([]);
+ });
+
+ test('should allow for custom role', async ({ page }) => {
+ /**
+ * Note: This example should not be used in production.
+ * This only serves to check that `role` can be customized.
+ */
+ await page.setContent(
+ `
+
+ `,
+ config
+ );
+ const modal = page.locator('ion-modal .modal-wrapper');
+
+ await expect(modal).toHaveAttribute('role', 'alertdialog');
+ });
+ });
+});
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts b/core/src/components/modal/test/basic/modal.e2e-legacy.ts
deleted file mode 100644
index c44d38303b..0000000000
--- a/core/src/components/modal/test/basic/modal.e2e-legacy.ts
+++ /dev/null
@@ -1,184 +0,0 @@
-import { expect } from '@playwright/test';
-import { test, Viewports } from '@utils/test/playwright';
-import type { E2EPage } from '@utils/test/playwright';
-
-test.describe('modal: focus trapping', () => {
- test.beforeEach(async ({ skip }) => {
- skip.rtl();
- skip.mode('md');
- skip.browser('firefox', 'Firefox incorrectly allows keyboard focus to move to ion-content');
- });
- test('focus should be trapped inside of modal', async ({ page, browserName }) => {
- /**
- * The default WebKit behavior is to
- * highlight items on webpages with Option-Tab.
- * See "Press Tab to highlight each item on a webpage"
- * in Safari Preferences > Advanced.
- */
- const tabKey = browserName === 'webkit' ? 'Alt+Tab' : 'Tab';
- await page.goto('/src/components/modal/test/basic');
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#basic-modal');
-
- await ionModalDidPresent.next();
-
- const dismissButton = page.locator('ion-button.dismiss');
-
- await page.keyboard.press(tabKey);
- await expect(dismissButton).toBeFocused();
-
- await page.keyboard.press(`Shift+${tabKey}`);
-
- await expect(dismissButton).toBeFocused();
-
- await page.keyboard.press(tabKey);
- await expect(dismissButton).toBeFocused();
- });
-
- test('focus should be returned to previously focused element when dismissing modal', async ({
- page,
- browserName,
- }) => {
- await page.goto('/src/components/modal/test/basic');
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
- const modalButton = page.locator('#basic-modal');
- const tabKey = browserName === 'webkit' ? 'Alt+Tab' : 'Tab';
-
- // Focus #basic-modal button
- await page.keyboard.press(tabKey);
- await expect(modalButton).toBeFocused();
-
- await page.keyboard.press('Space');
- await ionModalDidPresent.next();
-
- await page.keyboard.press('Escape');
- await ionModalDidDismiss.next();
-
- await expect(modalButton).toBeFocused();
- });
-});
-
-test.describe('modal: rendering', () => {
- const runVisualTests = async (page: E2EPage, screenshotModifier = '') => {
- await page.goto('/src/components/modal/test/basic');
-
- const ionModalWillDismiss = await page.spyOnEvent('ionModalWillDismiss');
- const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
- const ionModalWillPresent = await page.spyOnEvent('ionModalWillPresent');
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#basic-modal');
-
- await ionModalWillPresent.next();
- await ionModalDidPresent.next();
-
- const modal = page.locator('ion-modal');
- await expect(modal).toHaveClass(/show-modal/);
-
- await page.setIonViewport();
-
- await expect(page).toHaveScreenshot(`modal-basic-present-${screenshotModifier}${page.getSnapshotSettings()}.png`);
-
- await modal.evaluate((el: HTMLIonModalElement) => {
- el.dismiss();
- });
-
- await ionModalWillDismiss.next();
- await ionModalDidDismiss.next();
-
- await expect(modal).not.toHaveClass(/show-modal/);
- await expect(modal).toBeHidden();
- };
-
- test('should not have visual regressions', async ({ page }) => {
- await runVisualTests(page);
- });
- test('should not have visual regressions with tablet viewport', async ({ page }) => {
- await page.setViewportSize(Viewports.tablet.portrait);
- await runVisualTests(page, 'tablet-');
- });
-});
-
-test.describe('modal: htmlAttributes inheritance', () => {
- test('should correctly inherit attributes on host', async ({ page, skip }) => {
- skip.rtl();
- skip.mode('md');
- await page.goto('/src/components/modal/test/basic');
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#basic-modal');
-
- await ionModalDidPresent.next();
-
- const modal = page.locator('ion-modal');
-
- const attribute = await modal.getAttribute('data-testid');
- expect(attribute).toBe('basic-modal');
- });
-});
-
-test.describe('modal: backdrop', () => {
- test.beforeEach(async ({ page, skip }) => {
- skip.rtl();
- skip.mode('md');
- await page.goto('/src/components/modal/test/basic');
- });
-
- test('it should dismiss the modal when clicking the backdrop', async ({ page }) => {
- await page.setViewportSize(Viewports.tablet.portrait);
-
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
-
- await page.click('#basic-modal');
- await ionModalDidPresent.next();
-
- await page.mouse.click(20, 20);
- await ionModalDidDismiss.next();
- });
-});
-
-test.describe('modal: incorrect usage', () => {
- test.beforeEach(async ({ page, skip }) => {
- skip.rtl();
- skip.mode('md');
- await page.goto('/src/components/modal/test/basic');
- });
-
- test('it should warn when setting a breakpoint on a non-sheet modal', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- const warnings: string[] = [];
-
- page.on('console', (ev) => {
- if (ev.type() === 'warning') {
- warnings.push(ev.text());
- }
- });
-
- await page.click('#basic-modal');
- await ionModalDidPresent.next();
-
- const modal = page.locator('ion-modal');
- await modal.evaluate((el: HTMLIonModalElement) => el.setCurrentBreakpoint(0.5));
-
- expect(warnings.length).toBe(1);
- expect(warnings[0]).toBe('[Ionic Warning]: setCurrentBreakpoint is only supported on sheet modals.');
- });
-
- test('it should return undefined when getting the breakpoint on a non-sheet modal', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#basic-modal');
- await ionModalDidPresent.next();
-
- const modal = page.locator('ion-modal');
- const breakpoint = await modal.evaluate((el: HTMLIonModalElement) => {
- return el.getCurrentBreakpoint();
- });
-
- expect(breakpoint).toBe(undefined);
- });
-});
diff --git a/core/src/components/modal/test/basic/modal.e2e.ts b/core/src/components/modal/test/basic/modal.e2e.ts
new file mode 100644
index 0000000000..03c8b28cbb
--- /dev/null
+++ b/core/src/components/modal/test/basic/modal.e2e.ts
@@ -0,0 +1,181 @@
+import { expect } from '@playwright/test';
+import { configs, test, Viewports } from '@utils/test/playwright';
+import type { E2EPage } from '@utils/test/playwright';
+
+configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
+ test.describe(title('modal: focus trapping'), () => {
+ test.beforeEach(async ({ skip }) => {
+ skip.browser('firefox', 'Firefox incorrectly allows keyboard focus to move to ion-content');
+ });
+ test('focus should be trapped inside of modal', async ({ page, browserName }) => {
+ /**
+ * The default WebKit behavior is to
+ * highlight items on webpages with Option-Tab.
+ * See "Press Tab to highlight each item on a webpage"
+ * in Safari Preferences > Advanced.
+ */
+ const tabKey = browserName === 'webkit' ? 'Alt+Tab' : 'Tab';
+ await page.goto('/src/components/modal/test/basic', config);
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#basic-modal');
+
+ await ionModalDidPresent.next();
+
+ const dismissButton = page.locator('ion-button.dismiss');
+
+ await page.keyboard.press(tabKey);
+ await expect(dismissButton).toBeFocused();
+
+ await page.keyboard.press(`Shift+${tabKey}`);
+
+ await expect(dismissButton).toBeFocused();
+
+ await page.keyboard.press(tabKey);
+ await expect(dismissButton).toBeFocused();
+ });
+
+ test('focus should be returned to previously focused element when dismissing modal', async ({
+ page,
+ browserName,
+ }) => {
+ await page.goto('/src/components/modal/test/basic', config);
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
+ const modalButton = page.locator('#basic-modal');
+ const tabKey = browserName === 'webkit' ? 'Alt+Tab' : 'Tab';
+
+ // Focus #basic-modal button
+ await page.keyboard.press(tabKey);
+ await expect(modalButton).toBeFocused();
+
+ await page.keyboard.press('Space');
+ await ionModalDidPresent.next();
+
+ await page.keyboard.press('Escape');
+ await ionModalDidDismiss.next();
+
+ await expect(modalButton).toBeFocused();
+ });
+ });
+});
+
+configs().forEach(({ title, screenshot, config }) => {
+ test.describe(title('modal: rendering'), () => {
+ const runVisualTests = async (page: E2EPage, screenshotModifier = '') => {
+ await page.goto('/src/components/modal/test/basic', config);
+
+ const ionModalWillDismiss = await page.spyOnEvent('ionModalWillDismiss');
+ const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
+ const ionModalWillPresent = await page.spyOnEvent('ionModalWillPresent');
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#basic-modal');
+
+ await ionModalWillPresent.next();
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('ion-modal');
+ await expect(modal).toHaveClass(/show-modal/);
+
+ await page.setIonViewport();
+
+ await expect(page).toHaveScreenshot(screenshot(`modal-basic-present${screenshotModifier}`));
+
+ await modal.evaluate((el: HTMLIonModalElement) => {
+ el.dismiss();
+ });
+
+ await ionModalWillDismiss.next();
+ await ionModalDidDismiss.next();
+
+ await expect(modal).not.toHaveClass(/show-modal/);
+ await expect(modal).toBeHidden();
+ };
+
+ test('should not have visual regressions', async ({ page }) => {
+ await runVisualTests(page);
+ });
+ test('should not have visual regressions with tablet viewport', async ({ page }) => {
+ await page.setViewportSize(Viewports.tablet.portrait);
+ await runVisualTests(page, '-tablet');
+ });
+ });
+});
+configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
+ test.describe(title('modal: htmlAttributes inheritance'), () => {
+ test('should correctly inherit attributes on host', async ({ page }) => {
+ await page.goto('/src/components/modal/test/basic', config);
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#basic-modal');
+
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('ion-modal');
+
+ const attribute = await modal.getAttribute('data-testid');
+ expect(attribute).toBe('basic-modal');
+ });
+ });
+
+ test.describe(title('modal: backdrop'), () => {
+ test.beforeEach(async ({ page }) => {
+ await page.goto('/src/components/modal/test/basic', config);
+ });
+
+ test('it should dismiss the modal when clicking the backdrop', async ({ page }) => {
+ await page.setViewportSize(Viewports.tablet.portrait);
+
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
+
+ await page.click('#basic-modal');
+ await ionModalDidPresent.next();
+
+ await page.mouse.click(20, 20);
+ await ionModalDidDismiss.next();
+ });
+ });
+
+ test.describe(title('modal: incorrect usage'), () => {
+ test.beforeEach(async ({ page }) => {
+ await page.goto('/src/components/modal/test/basic', config);
+ });
+
+ test('it should warn when setting a breakpoint on a non-sheet modal', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ const warnings: string[] = [];
+
+ page.on('console', (ev) => {
+ if (ev.type() === 'warning') {
+ warnings.push(ev.text());
+ }
+ });
+
+ await page.click('#basic-modal');
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('ion-modal');
+ await modal.evaluate((el: HTMLIonModalElement) => el.setCurrentBreakpoint(0.5));
+
+ expect(warnings.length).toBe(1);
+ expect(warnings[0]).toBe('[Ionic Warning]: setCurrentBreakpoint is only supported on sheet modals.');
+ });
+
+ test('it should return undefined when getting the breakpoint on a non-sheet modal', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#basic-modal');
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('ion-modal');
+ const breakpoint = await modal.evaluate((el: HTMLIonModalElement) => {
+ return el.getCurrentBreakpoint();
+ });
+
+ expect(breakpoint).toBe(undefined);
+ });
+ });
+});
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-ios-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-ios-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-ios-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-ios-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-ios-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-ios-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-ios-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-ios-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-ios-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-ios-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-ios-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-ios-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-ios-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-ios-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-ios-rtl-Mobile-Firefox-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-ios-rtl-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-ios-rtl-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-ios-rtl-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-ios-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-ios-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-ios-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-ios-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-md-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-md-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-md-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-md-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-md-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-md-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-md-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-md-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-md-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-md-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-md-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-md-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-md-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-md-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-md-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-md-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-md-rtl-Mobile-Firefox-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-md-rtl-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-md-rtl-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-md-rtl-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-md-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-md-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-md-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-md-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-ios-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-ios-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-ios-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-ios-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-ios-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-ios-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-ios-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-ios-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-ios-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-ios-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-ios-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-ios-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-ios-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-ios-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-ios-rtl-Mobile-Firefox-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-ios-rtl-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-ios-rtl-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-ios-rtl-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-ios-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-ios-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-ios-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-ios-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-md-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-md-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-md-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-md-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-md-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-md-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-md-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-md-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-md-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-md-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-md-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-md-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-md-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-md-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-md-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-md-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-md-rtl-Mobile-Firefox-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-md-rtl-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-md-rtl-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-md-rtl-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-md-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-md-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/basic/modal.e2e-legacy.ts-snapshots/modal-basic-present-tablet-md-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/basic/modal.e2e.ts-snapshots/modal-basic-present-tablet-md-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/can-dismiss/modal.e2e-legacy.ts b/core/src/components/modal/test/can-dismiss/modal.e2e-legacy.ts
deleted file mode 100644
index a92779f78f..0000000000
--- a/core/src/components/modal/test/can-dismiss/modal.e2e-legacy.ts
+++ /dev/null
@@ -1,425 +0,0 @@
-import { expect } from '@playwright/test';
-import { test, dragElementBy } from '@utils/test/playwright';
-
-test.describe('modal: canDismiss', () => {
- test.describe('regular modal', () => {
- test.beforeEach(async ({ page, skip }) => {
- skip.rtl();
- await page.goto('/src/components/modal/test/can-dismiss');
- });
- test('should dismiss when canDismiss is true', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modal = page.locator('ion-modal');
- const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
-
- expect(returnValue).toBe(true);
- });
- test('should not dismiss when canDismiss is false', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#radio-false');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modal = page.locator('ion-modal');
- const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
-
- expect(returnValue).toBe(false);
- });
- test('should dismiss when canDismiss is Promise', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#radio-promise-true');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modal = page.locator('ion-modal');
- const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
-
- expect(returnValue).toBe(true);
- });
- test('should not dismiss when canDismiss is Promise', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#radio-promise-false');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modal = page.locator('ion-modal');
- const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
-
- expect(returnValue).toBe(false);
- });
- test('should dismiss when canDismiss is Action Sheet and user clicks confirm', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
- const ionActionSheetDidPresent = await page.spyOnEvent('ionActionSheetDidPresent');
-
- await page.click('#radio-action-sheet');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- await page.keyboard.press('Escape');
-
- await ionActionSheetDidPresent.next();
- await page.click('.button-confirm');
-
- await ionModalDidDismiss.next();
- });
- });
- test.describe('card modal', () => {
- test.beforeEach(async ({ page, skip }) => {
- skip.rtl();
- skip.mode('md');
- await page.goto('/src/components/modal/test/can-dismiss');
- await page.click('#radio-card');
- });
- test('should dismiss when canDismiss is true', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modal = page.locator('ion-modal');
- const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
-
- expect(returnValue).toBe(true);
- });
- test('should not dismiss when canDismiss is false', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#radio-false');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modal = page.locator('ion-modal');
- const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
-
- expect(returnValue).toBe(false);
- });
- test('should dismiss when canDismiss is Promise', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#radio-promise-true');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modal = page.locator('ion-modal');
- const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
-
- expect(returnValue).toBe(true);
- });
- test('should not dismiss when canDismiss is Promise', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#radio-promise-false');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modal = page.locator('ion-modal');
- const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
-
- expect(returnValue).toBe(false);
- });
- });
- test.describe('card modal - iOS swiping', () => {
- test.beforeEach(async ({ page, skip }) => {
- skip.rtl();
- skip.mode('md');
- await page.goto('/src/components/modal/test/can-dismiss');
- await page.click('#radio-card');
- });
-
- test('should dismiss on swipe when canDismiss is true', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
-
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modalHeader = page.locator('ion-modal #modal-header');
- await dragElementBy(modalHeader, page, 0, 500);
-
- await ionModalDidDismiss.next();
- });
- test('should not dismiss on swipe when canDismiss is false', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#radio-false');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modalHeader = page.locator('#modal-header');
- await dragElementBy(modalHeader, page, 0, 500);
-
- const modal = page.locator('ion-modal');
- expect(modal).not.toBe(null);
- });
- test('should dismiss on swipe when canDismiss is Promise', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
-
- await page.click('#radio-promise-true');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modalHeader = page.locator('#modal-header');
- await dragElementBy(modalHeader, page, 0, 500);
-
- await ionModalDidDismiss.next();
- });
- test('should not dismiss on swipe when canDismiss is Promise', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const ionHandlerDone = await page.spyOnEvent('ionHandlerDone');
-
- await page.click('#radio-promise-false');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modalHeader = page.locator('#modal-header');
- await dragElementBy(modalHeader, page, 0, 500);
-
- await ionHandlerDone.next();
-
- const modal = page.locator('ion-modal');
- expect(modal).not.toBe(null);
- });
- test('should dismiss when canDismiss is Action Sheet and user clicks confirm', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
- const ionActionSheetDidPresent = await page.spyOnEvent('ionActionSheetDidPresent');
-
- await page.click('#radio-action-sheet');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modalHeader = page.locator('#modal-header');
- await dragElementBy(modalHeader, page, 0, 500);
-
- await ionActionSheetDidPresent.next();
- await page.click('.button-confirm');
-
- await ionModalDidDismiss.next();
- });
- });
-
- test.describe('sheet modal', () => {
- test.beforeEach(async ({ page, skip }) => {
- skip.rtl();
- await page.goto('/src/components/modal/test/can-dismiss');
- await page.click('#radio-sheet');
- });
- test('should dismiss when canDismiss is true', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modal = page.locator('ion-modal');
- const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
-
- expect(returnValue).toBe(true);
- });
- test('should not dismiss when canDismiss is false', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#radio-false');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modal = page.locator('ion-modal');
- const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
-
- expect(returnValue).toBe(false);
- });
- test('should dismiss when canDismiss is Promise', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#radio-promise-true');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modal = page.locator('ion-modal');
- const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
-
- expect(returnValue).toBe(true);
- });
- test('should not dismiss when canDismiss is Promise', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#radio-promise-false');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modal = page.locator('ion-modal');
- const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
-
- expect(returnValue).toBe(false);
- });
- test('should dismiss on swipe when canDismiss is true', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
-
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modalHeader = page.locator('#modal-header');
- await dragElementBy(modalHeader, page, 0, 500);
-
- await ionModalDidDismiss.next();
- });
- test('should not dismiss on swipe when canDismiss is false', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#radio-false');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modalHeader = page.locator('#modal-header');
- await dragElementBy(modalHeader, page, 0, 500);
-
- const modal = page.locator('ion-modal');
- expect(modal).not.toBe(null);
- });
- test('should dismiss on swipe when canDismiss is Promise', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
-
- await page.click('#radio-promise-true');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modalHeader = page.locator('#modal-header');
- await dragElementBy(modalHeader, page, 0, 500);
-
- await ionModalDidDismiss.next();
- });
- test('should not dismiss on swipe when canDismiss is Promise', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const ionHandlerDone = await page.spyOnEvent('ionHandlerDone');
-
- await page.click('#radio-promise-false');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modalHeader = page.locator('#modal-header');
- await dragElementBy(modalHeader, page, 0, 500);
-
- await ionHandlerDone.next();
-
- const modal = page.locator('ion-modal');
- expect(modal).not.toBe(null);
- });
- test('should not dismiss on swipe when not attempting to close', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#radio-promise-true');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modalHeader = page.locator('#modal-header');
- await dragElementBy(modalHeader, page, 0, -500);
-
- const modal = page.locator('ion-modal');
- expect(modal).not.toBe(null);
- });
- test('should hit the dismiss threshold when swiping', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
-
- await page.click('#radio-promise-true');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modalHeader = page.locator('#modal-header');
- await dragElementBy(modalHeader, page, 0, 100);
-
- await ionModalDidDismiss.next();
- });
- test('should dismiss when canDismiss is Action Sheet and user clicks confirm', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
- const ionActionSheetDidPresent = await page.spyOnEvent('ionActionSheetDidPresent');
-
- await page.click('#radio-action-sheet');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modalHeader = page.locator('#modal-header');
- await dragElementBy(modalHeader, page, 0, 500);
-
- await ionActionSheetDidPresent.next();
- await page.click('.button-confirm');
-
- await ionModalDidDismiss.next();
- });
- });
-
- test.describe('function params', () => {
- test.beforeEach(async ({ page, skip }) => {
- skip.mode('md');
- skip.rtl();
- await page.goto('/src/components/modal/test/can-dismiss');
- });
- test('should pass data and role when calling dismiss', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const ionHandlerDone = await page.spyOnEvent('ionHandlerDone');
-
- await page.click('#radio-promise-true');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modal = page.locator('ion-modal');
- await modal.evaluate((el: HTMLIonModalElement) => el.dismiss('my data', 'my role'));
-
- await ionHandlerDone.next();
- await expect(ionHandlerDone).toHaveReceivedEventDetail({ data: 'my data', role: 'my role' });
- });
- test('should pass data and role when swiping', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const ionHandlerDone = await page.spyOnEvent('ionHandlerDone');
-
- await page.click('#radio-card');
- await page.click('#radio-promise-true');
- await page.click('#show-modal');
-
- await ionModalDidPresent.next();
-
- const modalHeader = page.locator('#modal-header');
- await dragElementBy(modalHeader, page, 0, 500);
-
- await ionHandlerDone.next();
- await expect(ionHandlerDone).toHaveReceivedEventDetail({ data: undefined, role: 'gesture' });
- });
- });
-});
diff --git a/core/src/components/modal/test/can-dismiss/modal.e2e.ts b/core/src/components/modal/test/can-dismiss/modal.e2e.ts
new file mode 100644
index 0000000000..9a7369c27c
--- /dev/null
+++ b/core/src/components/modal/test/can-dismiss/modal.e2e.ts
@@ -0,0 +1,422 @@
+import { expect } from '@playwright/test';
+import { configs, test, dragElementBy } from '@utils/test/playwright';
+
+/**
+ * This behavior does not vary across modes/directions
+ */
+configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
+ test.describe(title('modal: canDismiss'), () => {
+ test.describe('regular modal', () => {
+ test.beforeEach(async ({ page }) => {
+ await page.goto('/src/components/modal/test/can-dismiss', config);
+ });
+ test('should dismiss when canDismiss is true', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('ion-modal');
+ const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
+
+ expect(returnValue).toBe(true);
+ });
+ test('should not dismiss when canDismiss is false', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#radio-false');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('ion-modal');
+ const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
+
+ expect(returnValue).toBe(false);
+ });
+ test('should dismiss when canDismiss is Promise', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#radio-promise-true');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('ion-modal');
+ const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
+
+ expect(returnValue).toBe(true);
+ });
+ test('should not dismiss when canDismiss is Promise', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#radio-promise-false');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('ion-modal');
+ const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
+
+ expect(returnValue).toBe(false);
+ });
+ test('should dismiss when canDismiss is Action Sheet and user clicks confirm', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
+ const ionActionSheetDidPresent = await page.spyOnEvent('ionActionSheetDidPresent');
+
+ await page.click('#radio-action-sheet');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ await page.keyboard.press('Escape');
+
+ await ionActionSheetDidPresent.next();
+ await page.click('.button-confirm');
+
+ await ionModalDidDismiss.next();
+ });
+ });
+ test.describe('card modal', () => {
+ test.beforeEach(async ({ page }) => {
+ await page.goto('/src/components/modal/test/can-dismiss', config);
+ await page.click('#radio-card');
+ });
+ test('should dismiss when canDismiss is true', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('ion-modal');
+ const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
+
+ expect(returnValue).toBe(true);
+ });
+ test('should not dismiss when canDismiss is false', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#radio-false');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('ion-modal');
+ const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
+
+ expect(returnValue).toBe(false);
+ });
+ test('should dismiss when canDismiss is Promise', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#radio-promise-true');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('ion-modal');
+ const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
+
+ expect(returnValue).toBe(true);
+ });
+ test('should not dismiss when canDismiss is Promise', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#radio-promise-false');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('ion-modal');
+ const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
+
+ expect(returnValue).toBe(false);
+ });
+ });
+ test.describe('card modal - iOS swiping', () => {
+ test.beforeEach(async ({ page }) => {
+ await page.goto('/src/components/modal/test/can-dismiss', config);
+ await page.click('#radio-card');
+ });
+
+ test('should dismiss on swipe when canDismiss is true', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
+
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modalHeader = page.locator('ion-modal #modal-header');
+ await dragElementBy(modalHeader, page, 0, 500);
+
+ await ionModalDidDismiss.next();
+ });
+ test('should not dismiss on swipe when canDismiss is false', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#radio-false');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modalHeader = page.locator('#modal-header');
+ await dragElementBy(modalHeader, page, 0, 500);
+
+ const modal = page.locator('ion-modal');
+ expect(modal).not.toBe(null);
+ });
+ test('should dismiss on swipe when canDismiss is Promise', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
+
+ await page.click('#radio-promise-true');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modalHeader = page.locator('#modal-header');
+ await dragElementBy(modalHeader, page, 0, 500);
+
+ await ionModalDidDismiss.next();
+ });
+ test('should not dismiss on swipe when canDismiss is Promise', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const ionHandlerDone = await page.spyOnEvent('ionHandlerDone');
+
+ await page.click('#radio-promise-false');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modalHeader = page.locator('#modal-header');
+ await dragElementBy(modalHeader, page, 0, 500);
+
+ await ionHandlerDone.next();
+
+ const modal = page.locator('ion-modal');
+ expect(modal).not.toBe(null);
+ });
+ test('should dismiss when canDismiss is Action Sheet and user clicks confirm', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
+ const ionActionSheetDidPresent = await page.spyOnEvent('ionActionSheetDidPresent');
+
+ await page.click('#radio-action-sheet');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modalHeader = page.locator('#modal-header');
+ await dragElementBy(modalHeader, page, 0, 500);
+
+ await ionActionSheetDidPresent.next();
+ await page.click('.button-confirm');
+
+ await ionModalDidDismiss.next();
+ });
+ });
+
+ test.describe('sheet modal', () => {
+ test.beforeEach(async ({ page }) => {
+ await page.goto('/src/components/modal/test/can-dismiss', config);
+ await page.click('#radio-sheet');
+ });
+ test('should dismiss when canDismiss is true', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('ion-modal');
+ const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
+
+ expect(returnValue).toBe(true);
+ });
+ test('should not dismiss when canDismiss is false', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#radio-false');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('ion-modal');
+ const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
+
+ expect(returnValue).toBe(false);
+ });
+ test('should dismiss when canDismiss is Promise', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#radio-promise-true');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('ion-modal');
+ const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
+
+ expect(returnValue).toBe(true);
+ });
+ test('should not dismiss when canDismiss is Promise', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#radio-promise-false');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('ion-modal');
+ const returnValue = await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
+
+ expect(returnValue).toBe(false);
+ });
+ test('should dismiss on swipe when canDismiss is true', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
+
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modalHeader = page.locator('#modal-header');
+ await dragElementBy(modalHeader, page, 0, 500);
+
+ await ionModalDidDismiss.next();
+ });
+ test('should not dismiss on swipe when canDismiss is false', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#radio-false');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modalHeader = page.locator('#modal-header');
+ await dragElementBy(modalHeader, page, 0, 500);
+
+ const modal = page.locator('ion-modal');
+ expect(modal).not.toBe(null);
+ });
+ test('should dismiss on swipe when canDismiss is Promise', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
+
+ await page.click('#radio-promise-true');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modalHeader = page.locator('#modal-header');
+ await dragElementBy(modalHeader, page, 0, 500);
+
+ await ionModalDidDismiss.next();
+ });
+ test('should not dismiss on swipe when canDismiss is Promise', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const ionHandlerDone = await page.spyOnEvent('ionHandlerDone');
+
+ await page.click('#radio-promise-false');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modalHeader = page.locator('#modal-header');
+ await dragElementBy(modalHeader, page, 0, 500);
+
+ await ionHandlerDone.next();
+
+ const modal = page.locator('ion-modal');
+ expect(modal).not.toBe(null);
+ });
+ test('should not dismiss on swipe when not attempting to close', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#radio-promise-true');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modalHeader = page.locator('#modal-header');
+ await dragElementBy(modalHeader, page, 0, -500);
+
+ const modal = page.locator('ion-modal');
+ expect(modal).not.toBe(null);
+ });
+ test('should hit the dismiss threshold when swiping', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
+
+ await page.click('#radio-promise-true');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modalHeader = page.locator('#modal-header');
+ await dragElementBy(modalHeader, page, 0, 100);
+
+ await ionModalDidDismiss.next();
+ });
+ test('should dismiss when canDismiss is Action Sheet and user clicks confirm', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
+ const ionActionSheetDidPresent = await page.spyOnEvent('ionActionSheetDidPresent');
+
+ await page.click('#radio-action-sheet');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modalHeader = page.locator('#modal-header');
+ await dragElementBy(modalHeader, page, 0, 500);
+
+ await ionActionSheetDidPresent.next();
+ await page.click('.button-confirm');
+
+ await ionModalDidDismiss.next();
+ });
+ });
+
+ test.describe('function params', () => {
+ test.beforeEach(async ({ page }) => {
+ await page.goto('/src/components/modal/test/can-dismiss', config);
+ });
+ test('should pass data and role when calling dismiss', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const ionHandlerDone = await page.spyOnEvent('ionHandlerDone');
+
+ await page.click('#radio-promise-true');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('ion-modal');
+ await modal.evaluate((el: HTMLIonModalElement) => el.dismiss('my data', 'my role'));
+
+ await ionHandlerDone.next();
+ await expect(ionHandlerDone).toHaveReceivedEventDetail({ data: 'my data', role: 'my role' });
+ });
+ test('should pass data and role when swiping', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const ionHandlerDone = await page.spyOnEvent('ionHandlerDone');
+
+ await page.click('#radio-card');
+ await page.click('#radio-promise-true');
+ await page.click('#show-modal');
+
+ await ionModalDidPresent.next();
+
+ const modalHeader = page.locator('#modal-header');
+ await dragElementBy(modalHeader, page, 0, 500);
+
+ await ionHandlerDone.next();
+ await expect(ionHandlerDone).toHaveReceivedEventDetail({ data: undefined, role: 'gesture' });
+ });
+ });
+ });
+});
diff --git a/core/src/components/modal/test/card-nav/modal.e2e-legacy.ts b/core/src/components/modal/test/card-nav/modal.e2e-legacy.ts
deleted file mode 100644
index 76f081a143..0000000000
--- a/core/src/components/modal/test/card-nav/modal.e2e-legacy.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import { expect } from '@playwright/test';
-import { test, dragElementBy } from '@utils/test/playwright';
-
-import { CardModalPage } from '../fixtures';
-
-test.describe('card modal - nav', () => {
- let cardModalPage: CardModalPage;
- test.beforeEach(async ({ page, skip }) => {
- skip.mode('md');
- skip.rtl('This test only verifies that the gesture activates inside of a modal.');
- skip.browser(
- (browserName: string) => browserName !== 'chromium',
- 'dragElementBy is flaky outside of Chrome browsers.'
- );
-
- cardModalPage = new CardModalPage(page);
- await cardModalPage.navigate('/src/components/modal/test/card-nav?ionic:_testing=false');
- });
- test('it should swipe to go back', async ({ page }) => {
- await cardModalPage.openModalByTrigger('#open-modal');
-
- const nav = page.locator('ion-nav') as any;
- const ionNavDidChange = await nav.spyOnEvent('ionNavDidChange');
-
- await page.click('#go-page-two');
-
- await ionNavDidChange.next();
-
- const pageOne = page.locator('page-one');
- await expect(pageOne).toHaveClass(/ion-page-hidden/);
-
- const content = page.locator('.page-two-content');
-
- await dragElementBy(content, page, 1000, 0, 10);
-
- await ionNavDidChange.next();
- });
- test('should swipe to close', async ({ page }) => {
- await cardModalPage.openModalByTrigger('#open-modal');
-
- const nav = page.locator('ion-nav') as any;
- const ionNavDidChange = await nav.spyOnEvent('ionNavDidChange');
-
- await page.click('#go-page-two');
-
- await ionNavDidChange.next();
-
- await cardModalPage.swipeToCloseModal('ion-modal ion-content.page-two-content');
- });
-});
diff --git a/core/src/components/modal/test/card-nav/modal.e2e.ts b/core/src/components/modal/test/card-nav/modal.e2e.ts
new file mode 100644
index 0000000000..c4aabaee1f
--- /dev/null
+++ b/core/src/components/modal/test/card-nav/modal.e2e.ts
@@ -0,0 +1,53 @@
+import { expect } from '@playwright/test';
+import { configs, test, dragElementBy } from '@utils/test/playwright';
+
+import { CardModalPage } from '../fixtures';
+
+/**
+ * This test only verifies that the gesture activates inside of a modal.
+ */
+configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
+ test.describe(title('card modal - nav'), () => {
+ let cardModalPage: CardModalPage;
+ test.beforeEach(async ({ page, skip }) => {
+ skip.browser(
+ (browserName: string) => browserName !== 'chromium',
+ 'dragElementBy is flaky outside of Chrome browsers.'
+ );
+
+ cardModalPage = new CardModalPage(page);
+ await cardModalPage.navigate('/src/components/modal/test/card-nav?ionic:_testing=false', config);
+ });
+ test('it should swipe to go back', async ({ page }) => {
+ await cardModalPage.openModalByTrigger('#open-modal');
+
+ const nav = page.locator('ion-nav') as any;
+ const ionNavDidChange = await nav.spyOnEvent('ionNavDidChange');
+
+ await page.click('#go-page-two');
+
+ await ionNavDidChange.next();
+
+ const pageOne = page.locator('page-one');
+ await expect(pageOne).toHaveClass(/ion-page-hidden/);
+
+ const content = page.locator('.page-two-content');
+
+ await dragElementBy(content, page, 1000, 0, 10);
+
+ await ionNavDidChange.next();
+ });
+ test('should swipe to close', async ({ page }) => {
+ await cardModalPage.openModalByTrigger('#open-modal');
+
+ const nav = page.locator('ion-nav') as any;
+ const ionNavDidChange = await nav.spyOnEvent('ionNavDidChange');
+
+ await page.click('#go-page-two');
+
+ await ionNavDidChange.next();
+
+ await cardModalPage.swipeToCloseModal('ion-modal ion-content.page-two-content');
+ });
+ });
+});
diff --git a/core/src/components/modal/test/card-refresher/modal.e2e-legacy.ts b/core/src/components/modal/test/card-refresher/modal.e2e-legacy.ts
deleted file mode 100644
index 1ba5c2f8f9..0000000000
--- a/core/src/components/modal/test/card-refresher/modal.e2e-legacy.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { expect } from '@playwright/test';
-import { dragElementBy, test } from '@utils/test/playwright';
-
-test.describe('card modal - with refresher', () => {
- test.beforeEach(async ({ page, skip }) => {
- skip.mode('md');
- skip.rtl();
-
- await page.goto('/src/components/modal/test/card-refresher');
- });
- test('it should not swipe to close on the content due to the presence of the refresher', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#card');
- await ionModalDidPresent.next();
-
- const modal = page.locator('ion-modal');
- const content = (await page.$('ion-modal ion-content'))!;
-
- await dragElementBy(content, page, 0, 500);
-
- await content.waitForElementState('stable');
-
- await expect(modal).toBeVisible();
- });
-});
diff --git a/core/src/components/modal/test/card-refresher/modal.e2e.ts b/core/src/components/modal/test/card-refresher/modal.e2e.ts
new file mode 100644
index 0000000000..15c91dc783
--- /dev/null
+++ b/core/src/components/modal/test/card-refresher/modal.e2e.ts
@@ -0,0 +1,25 @@
+import { expect } from '@playwright/test';
+import { configs, dragElementBy, test } from '@utils/test/playwright';
+
+configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
+ test.describe(title('card modal - with refresher'), () => {
+ test.beforeEach(async ({ page }) => {
+ await page.goto('/src/components/modal/test/card-refresher', config);
+ });
+ test('it should not swipe to close on the content due to the presence of the refresher', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#card');
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('ion-modal');
+ const content = (await page.$('ion-modal ion-content'))!;
+
+ await dragElementBy(content, page, 0, 500);
+
+ await content.waitForElementState('stable');
+
+ await expect(modal).toBeVisible();
+ });
+ });
+});
diff --git a/core/src/components/modal/test/card-scroll-target/modal.e2e-legacy.ts b/core/src/components/modal/test/card-scroll-target/modal.e2e-legacy.ts
deleted file mode 100644
index c69555ec33..0000000000
--- a/core/src/components/modal/test/card-scroll-target/modal.e2e-legacy.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-import { expect } from '@playwright/test';
-import { dragElementBy, test } from '@utils/test/playwright';
-
-test.describe('card modal - scroll target', () => {
- test.beforeEach(async ({ page, skip }) => {
- skip.mode('md');
- skip.rtl();
-
- await page.goto('/src/components/modal/test/card-scroll-target');
- });
- test.describe('card modal: swipe to close', () => {
- test('it should swipe to close when swiped on the content', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
-
- await page.click('#card');
- await ionModalDidPresent.next();
-
- const content = page.locator('ion-modal .ion-content-scroll-host');
- await dragElementBy(content, page, 0, 500);
-
- await ionModalDidDismiss.next();
- });
- test('it should not swipe to close when swiped on the content but the content is scrolled', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#card');
- await ionModalDidPresent.next();
-
- const modal = page.locator('ion-modal');
- const content = (await page.$('ion-modal .ion-content-scroll-host'))!;
-
- await content.evaluate((el: HTMLElement) => (el.scrollTop = 500));
-
- await dragElementBy(content, page, 0, 500);
-
- await content.waitForElementState('stable');
-
- await expect(modal).toBeVisible();
- });
- test('content should be scrollable after gesture ends', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#card');
- await ionModalDidPresent.next();
-
- const content = page.locator('ion-modal .ion-content-scroll-host');
- await dragElementBy(content, page, 0, 20);
-
- await expect(content).not.toHaveCSS('overflow', 'hidden');
- });
- });
-});
diff --git a/core/src/components/modal/test/card-scroll-target/modal.e2e.ts b/core/src/components/modal/test/card-scroll-target/modal.e2e.ts
new file mode 100644
index 0000000000..848fc26e38
--- /dev/null
+++ b/core/src/components/modal/test/card-scroll-target/modal.e2e.ts
@@ -0,0 +1,52 @@
+import { expect } from '@playwright/test';
+import { configs, dragElementBy, test } from '@utils/test/playwright';
+
+configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
+ test.describe(title('card modal - scroll target'), () => {
+ test.beforeEach(async ({ page }) => {
+ await page.goto('/src/components/modal/test/card-scroll-target', config);
+ });
+ test.describe('card modal: swipe to close', () => {
+ test('it should swipe to close when swiped on the content', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
+
+ await page.click('#card');
+ await ionModalDidPresent.next();
+
+ const content = page.locator('ion-modal .ion-content-scroll-host');
+ await dragElementBy(content, page, 0, 500);
+
+ await ionModalDidDismiss.next();
+ });
+ test('it should not swipe to close when swiped on the content but the content is scrolled', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#card');
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('ion-modal');
+ const content = (await page.$('ion-modal .ion-content-scroll-host'))!;
+
+ await content.evaluate((el: HTMLElement) => (el.scrollTop = 500));
+
+ await dragElementBy(content, page, 0, 500);
+
+ await content.waitForElementState('stable');
+
+ await expect(modal).toBeVisible();
+ });
+ test('content should be scrollable after gesture ends', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#card');
+ await ionModalDidPresent.next();
+
+ const content = page.locator('ion-modal .ion-content-scroll-host');
+ await dragElementBy(content, page, 0, 20);
+
+ await expect(content).not.toHaveCSS('overflow', 'hidden');
+ });
+ });
+ });
+});
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts b/core/src/components/modal/test/card/modal.e2e.ts
similarity index 80%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts
rename to core/src/components/modal/test/card/modal.e2e.ts
index dfea5b1453..f359bee268 100644
--- a/core/src/components/modal/test/card/modal.e2e-legacy.ts
+++ b/core/src/components/modal/test/card/modal.e2e.ts
@@ -1,49 +1,48 @@
import { expect } from '@playwright/test';
-import { test, Viewports } from '@utils/test/playwright';
+import { configs, test, Viewports } from '@utils/test/playwright';
import { CardModalPage } from '../fixtures';
-test.describe('card modal', () => {
- test.beforeEach(async ({ skip }) => {
- skip.mode('md');
- });
- test.describe('card modal: rendering', () => {
+configs({ modes: ['ios'] }).forEach(({ title, screenshot, config }) => {
+ test.describe(title('card modal: rendering'), () => {
let cardModalPage: CardModalPage;
test.beforeEach(async ({ page }) => {
cardModalPage = new CardModalPage(page);
- await cardModalPage.navigate('/src/components/modal/test/card');
+ await cardModalPage.navigate('/src/components/modal/test/card', config);
});
test('should not have visual regressions', async ({ page }) => {
await cardModalPage.openModalByTrigger('#card');
- await expect(page).toHaveScreenshot(`modal-card-present-${page.getSnapshotSettings()}.png`);
+ await expect(page).toHaveScreenshot(screenshot(`modal-card-present`));
});
test('should not have visual regressions with custom modal', async ({ page }) => {
await cardModalPage.openModalByTrigger('#card-custom');
- await expect(page).toHaveScreenshot(`modal-card-custom-present-${page.getSnapshotSettings()}.png`);
+ await expect(page).toHaveScreenshot(screenshot(`modal-card-custom-present`));
});
test('should not have visual regressions with stacked cards', async ({ page }) => {
await cardModalPage.openModalByTrigger('#card');
await cardModalPage.openModalByTrigger('.add');
- await expect(page).toHaveScreenshot(`modal-card-stacked-present-${page.getSnapshotSettings()}.png`);
+ await expect(page).toHaveScreenshot(screenshot(`modal-card-stacked-present`));
});
test('should not have visual regressions with stacked custom cards', async ({ page }) => {
await cardModalPage.openModalByTrigger('#card-custom');
await cardModalPage.openModalByTrigger('.add');
- await expect(page).toHaveScreenshot(`modal-card-custom-stacked-present-${page.getSnapshotSettings()}.png`);
+ await expect(page).toHaveScreenshot(screenshot(`modal-card-custom-stacked-present`));
});
});
- test.describe('card modal: functionality', () => {
+});
+
+configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
+ test.describe(title('card modal: functionality'), () => {
let cardModalPage: CardModalPage;
- test.beforeEach(async ({ page, skip }) => {
- skip.rtl();
+ test.beforeEach(async ({ page }) => {
cardModalPage = new CardModalPage(page);
- await cardModalPage.navigate('/src/components/modal/test/card');
+ await cardModalPage.navigate('/src/components/modal/test/card', config);
});
- test.describe('card modal: swipe to close', () => {
+ test.describe(title('card modal: swipe to close'), () => {
test('it should swipe to close when swiped on the header', async () => {
await cardModalPage.openModalByTrigger('#card');
await cardModalPage.swipeToCloseModal('ion-modal ion-header');
@@ -86,36 +85,34 @@ test.describe('card modal', () => {
await expect(content).toHaveJSProperty('scrollY', true);
});
});
- test.describe('card modal: rendering - tablet', () => {
+ test.describe(title('card modal: rendering - tablet'), () => {
test.beforeEach(async ({ page }) => {
await page.setViewportSize(Viewports.tablet.portrait);
});
test('should not have visual regressions', async ({ page }) => {
await cardModalPage.openModalByTrigger('#card');
- await expect(page).toHaveScreenshot(`modal-card-present-tablet-${page.getSnapshotSettings()}.png`);
+ await expect(page).toHaveScreenshot(screenshot(`modal-card-present-tablet`));
});
test('should not have visual regressions with custom modal', async ({ page }) => {
await cardModalPage.openModalByTrigger('#card-custom');
- await expect(page).toHaveScreenshot(`modal-card-custom-present-tablet-${page.getSnapshotSettings()}.png`);
+ await expect(page).toHaveScreenshot(screenshot(`modal-card-custom-present-tablet`));
});
test('should not have visual regressions with stacked cards', async ({ page }) => {
await cardModalPage.openModalByTrigger('#card');
await cardModalPage.openModalByTrigger('.add');
- await expect(page).toHaveScreenshot(`modal-card-stacked-present-tablet-${page.getSnapshotSettings()}.png`);
+ await expect(page).toHaveScreenshot(screenshot(`modal-card-stacked-present-tablet`));
});
test('should not have visual regressions with stacked custom cards', async ({ page }) => {
await cardModalPage.openModalByTrigger('#card-custom');
await cardModalPage.openModalByTrigger('.add');
- await expect(page).toHaveScreenshot(
- `modal-card-custom-stacked-present-tablet-${page.getSnapshotSettings()}.png`
- );
+ await expect(page).toHaveScreenshot(screenshot(`modal-card-custom-stacked-present-tablet`));
});
});
- test.describe('card modal: swipe to close - tablet', () => {
+ test.describe(title('card modal: swipe to close - tablet'), () => {
test.beforeEach(async ({ page }) => {
await page.setViewportSize(Viewports.tablet.portrait);
});
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-ios-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-ios-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-ios-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-ios-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-ios-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-ios-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-ios-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-ios-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-ios-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-ios-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-ios-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-ios-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-ios-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-ios-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-ios-rtl-Mobile-Firefox-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-ios-rtl-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-ios-rtl-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-ios-rtl-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-ios-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-ios-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-ios-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-ios-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-md-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-md-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-md-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-md-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-md-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-md-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-md-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-md-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-md-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-md-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-md-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-md-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-md-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-md-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-md-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-md-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-tablet-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-tablet-ios-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-tablet-ios-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-tablet-ios-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-tablet-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-tablet-ios-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-tablet-ios-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-tablet-ios-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-tablet-ios-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-tablet-ios-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-tablet-ios-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-tablet-ios-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-tablet-ios-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-tablet-ios-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-tablet-ios-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-tablet-ios-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-tablet-ios-rtl-Mobile-Firefox-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-tablet-ios-rtl-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-tablet-ios-rtl-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-tablet-ios-rtl-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-tablet-ios-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-tablet-ios-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-present-tablet-ios-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-present-tablet-ios-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-ios-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-ios-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-ios-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-ios-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-ios-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-ios-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-ios-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-ios-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-ios-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-ios-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-ios-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-ios-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-ios-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-ios-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-ios-rtl-Mobile-Firefox-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-ios-rtl-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-ios-rtl-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-ios-rtl-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-ios-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-ios-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-ios-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-ios-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-md-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-md-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-md-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-md-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-md-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-md-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-md-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-md-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-md-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-md-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-md-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-md-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-md-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-md-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-md-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-md-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-rtl-Mobile-Firefox-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-rtl-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-rtl-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-rtl-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-custom-stacked-present-tablet-ios-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-ios-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-ios-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-ios-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-ios-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-ios-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-ios-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-ios-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-ios-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-ios-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-ios-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-ios-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-ios-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-ios-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-ios-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-ios-rtl-Mobile-Firefox-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-ios-rtl-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-ios-rtl-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-ios-rtl-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-ios-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-ios-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-ios-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-ios-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-md-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-md-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-md-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-md-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-md-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-md-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-md-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-md-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-md-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-md-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-md-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-md-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-md-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-md-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-md-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-md-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-tablet-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-tablet-ios-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-tablet-ios-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-tablet-ios-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-tablet-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-tablet-ios-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-tablet-ios-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-tablet-ios-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-tablet-ios-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-tablet-ios-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-tablet-ios-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-tablet-ios-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-tablet-ios-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-tablet-ios-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-tablet-ios-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-tablet-ios-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-tablet-ios-rtl-Mobile-Firefox-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-tablet-ios-rtl-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-tablet-ios-rtl-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-tablet-ios-rtl-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-tablet-ios-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-tablet-ios-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-present-tablet-ios-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-present-tablet-ios-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-ios-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-ios-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-ios-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-ios-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-ios-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-ios-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-ios-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-ios-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-ios-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-ios-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-ios-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-ios-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-ios-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-ios-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-ios-rtl-Mobile-Firefox-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-ios-rtl-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-ios-rtl-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-ios-rtl-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-ios-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-ios-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-ios-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-ios-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-md-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-md-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-md-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-md-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-md-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-md-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-md-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-md-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-md-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-md-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-md-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-md-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-md-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-md-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-md-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-md-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-tablet-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-tablet-ios-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-tablet-ios-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-tablet-ios-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-tablet-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-tablet-ios-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-tablet-ios-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-tablet-ios-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-tablet-ios-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-tablet-ios-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-tablet-ios-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-tablet-ios-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-tablet-ios-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-tablet-ios-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-tablet-ios-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-tablet-ios-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-tablet-ios-rtl-Mobile-Firefox-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-tablet-ios-rtl-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-tablet-ios-rtl-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-tablet-ios-rtl-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-tablet-ios-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-tablet-ios-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/card/modal.e2e-legacy.ts-snapshots/modal-card-stacked-present-tablet-ios-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/card/modal.e2e.ts-snapshots/modal-card-stacked-present-tablet-ios-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/custom-dialog/modal.e2e-legacy.ts b/core/src/components/modal/test/custom-dialog/modal.e2e-legacy.ts
deleted file mode 100644
index 26a323cf1b..0000000000
--- a/core/src/components/modal/test/custom-dialog/modal.e2e-legacy.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { expect } from '@playwright/test';
-import { test } from '@utils/test/playwright';
-
-test.describe('modal: custom dialog', () => {
- test('should size custom modal correctly', async ({ page, skip }) => {
- skip.rtl();
- test.info().annotations.push({
- type: 'issue',
- description: 'https://github.com/ionic-team/ionic-framework/issues/24080',
- });
-
- await page.goto('/src/components/modal/test/custom-dialog');
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#custom-modal');
-
- await ionModalDidPresent.next();
-
- await expect(page).toHaveScreenshot(`modal-custom-dialog-${page.getSnapshotSettings()}.png`);
- });
-});
diff --git a/core/src/components/modal/test/custom-dialog/modal.e2e.ts b/core/src/components/modal/test/custom-dialog/modal.e2e.ts
new file mode 100644
index 0000000000..f1414e2f60
--- /dev/null
+++ b/core/src/components/modal/test/custom-dialog/modal.e2e.ts
@@ -0,0 +1,22 @@
+import { expect } from '@playwright/test';
+import { configs, test } from '@utils/test/playwright';
+
+configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
+ test.describe(title('modal: custom dialog'), () => {
+ test('should size custom modal correctly', async ({ page }) => {
+ test.info().annotations.push({
+ type: 'issue',
+ description: 'https://github.com/ionic-team/ionic-framework/issues/24080',
+ });
+
+ await page.goto('/src/components/modal/test/custom-dialog', config);
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#custom-modal');
+
+ await ionModalDidPresent.next();
+
+ await expect(page).toHaveScreenshot(screenshot(`modal-custom-dialog`));
+ });
+ });
+});
diff --git a/core/src/components/modal/test/custom-dialog/modal.e2e-legacy.ts-snapshots/modal-custom-dialog-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/custom-dialog/modal.e2e.ts-snapshots/modal-custom-dialog-ios-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom-dialog/modal.e2e-legacy.ts-snapshots/modal-custom-dialog-ios-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/custom-dialog/modal.e2e.ts-snapshots/modal-custom-dialog-ios-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/custom-dialog/modal.e2e-legacy.ts-snapshots/modal-custom-dialog-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/custom-dialog/modal.e2e.ts-snapshots/modal-custom-dialog-ios-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom-dialog/modal.e2e-legacy.ts-snapshots/modal-custom-dialog-ios-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/custom-dialog/modal.e2e.ts-snapshots/modal-custom-dialog-ios-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/custom-dialog/modal.e2e-legacy.ts-snapshots/modal-custom-dialog-ios-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/custom-dialog/modal.e2e.ts-snapshots/modal-custom-dialog-ios-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom-dialog/modal.e2e-legacy.ts-snapshots/modal-custom-dialog-ios-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/custom-dialog/modal.e2e.ts-snapshots/modal-custom-dialog-ios-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/custom-dialog/modal.e2e-legacy.ts-snapshots/modal-custom-dialog-md-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/custom-dialog/modal.e2e.ts-snapshots/modal-custom-dialog-md-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom-dialog/modal.e2e-legacy.ts-snapshots/modal-custom-dialog-md-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/custom-dialog/modal.e2e.ts-snapshots/modal-custom-dialog-md-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/custom-dialog/modal.e2e-legacy.ts-snapshots/modal-custom-dialog-md-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/custom-dialog/modal.e2e.ts-snapshots/modal-custom-dialog-md-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom-dialog/modal.e2e-legacy.ts-snapshots/modal-custom-dialog-md-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/custom-dialog/modal.e2e.ts-snapshots/modal-custom-dialog-md-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/custom-dialog/modal.e2e-legacy.ts-snapshots/modal-custom-dialog-md-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/custom-dialog/modal.e2e.ts-snapshots/modal-custom-dialog-md-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom-dialog/modal.e2e-legacy.ts-snapshots/modal-custom-dialog-md-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/custom-dialog/modal.e2e.ts-snapshots/modal-custom-dialog-md-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts b/core/src/components/modal/test/custom/modal.e2e-legacy.ts
deleted file mode 100644
index 2ff0164810..0000000000
--- a/core/src/components/modal/test/custom/modal.e2e-legacy.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import { expect } from '@playwright/test';
-import { test, Viewports } from '@utils/test/playwright';
-import type { E2EPage } from '@utils/test/playwright';
-
-test.describe('modal: custom rendering', () => {
- const runVisualTests = async (page: E2EPage, screenshotModifier = '') => {
- await page.goto('/src/components/modal/test/custom');
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#custom-modal');
-
- await ionModalDidPresent.next();
-
- await page.setIonViewport();
-
- await expect(page).toHaveScreenshot(`modal-custom-present-${screenshotModifier}${page.getSnapshotSettings()}.png`);
- };
- test('should not have visual regressions', async ({ page }) => {
- await runVisualTests(page);
- });
-
- test('should not have visual regressions with tablet viewport', async ({ page }) => {
- await page.setViewportSize(Viewports.tablet.portrait);
- await runVisualTests(page, 'tablet-');
- });
-});
diff --git a/core/src/components/modal/test/custom/modal.e2e.ts b/core/src/components/modal/test/custom/modal.e2e.ts
new file mode 100644
index 0000000000..f1bd7a18ea
--- /dev/null
+++ b/core/src/components/modal/test/custom/modal.e2e.ts
@@ -0,0 +1,28 @@
+import { expect } from '@playwright/test';
+import { configs, test, Viewports } from '@utils/test/playwright';
+import type { E2EPage } from '@utils/test/playwright';
+
+configs().forEach(({ title, screenshot, config }) => {
+ test.describe(title('modal: custom rendering'), () => {
+ const runVisualTests = async (page: E2EPage, screenshotModifier = '') => {
+ await page.goto('/src/components/modal/test/custom', config);
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#custom-modal');
+
+ await ionModalDidPresent.next();
+
+ await page.setIonViewport();
+
+ await expect(page).toHaveScreenshot(screenshot(`modal-custom-present${screenshotModifier}`));
+ };
+ test('should not have visual regressions', async ({ page }) => {
+ await runVisualTests(page);
+ });
+
+ test('should not have visual regressions with tablet viewport', async ({ page }) => {
+ await page.setViewportSize(Viewports.tablet.portrait);
+ await runVisualTests(page, '-tablet');
+ });
+ });
+});
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-ios-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-ios-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-ios-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-ios-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-ios-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-ios-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-ios-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-ios-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-ios-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-ios-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-ios-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-ios-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-ios-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-ios-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-ios-rtl-Mobile-Firefox-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-ios-rtl-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-ios-rtl-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-ios-rtl-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-ios-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-ios-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-ios-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-ios-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-md-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-md-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-md-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-md-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-md-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-md-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-md-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-md-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-md-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-md-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-md-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-md-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-md-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-md-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-md-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-md-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-md-rtl-Mobile-Firefox-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-md-rtl-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-md-rtl-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-md-rtl-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-md-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-md-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-md-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-md-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-ios-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-ios-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-ios-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-ios-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-ios-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-ios-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-ios-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-ios-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-ios-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-ios-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-ios-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-ios-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-ios-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-ios-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-ios-rtl-Mobile-Firefox-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-ios-rtl-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-ios-rtl-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-ios-rtl-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-ios-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-ios-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-ios-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-ios-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-md-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-md-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-md-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-md-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-md-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-md-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-md-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-md-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-md-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-md-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-md-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-md-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-md-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-md-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-md-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-md-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-md-rtl-Mobile-Firefox-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-md-rtl-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-md-rtl-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-md-rtl-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-md-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-md-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/custom/modal.e2e-legacy.ts-snapshots/modal-custom-present-tablet-md-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/custom/modal.e2e.ts-snapshots/modal-custom-present-tablet-md-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/dark-mode/model.e2e-legacy.ts b/core/src/components/modal/test/dark-mode/model.e2e-legacy.ts
deleted file mode 100644
index 02baf425b5..0000000000
--- a/core/src/components/modal/test/dark-mode/model.e2e-legacy.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { expect } from '@playwright/test';
-import { test } from '@utils/test/playwright';
-
-test.describe('modal: dark mode', () => {
- test('should render the correct text color when outside ion-content', async ({ page, skip }) => {
- test.info().annotations.push({
- type: 'issue',
- description: 'https://github.com/ionic-team/ionic-framework/issues/26060',
- });
-
- skip.rtl();
-
- await page.goto('/src/components/modal/test/dark-mode');
-
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#basic-modal');
-
- await ionModalDidPresent.next();
-
- await expect(page).toHaveScreenshot(`modal-dark-color-${page.getSnapshotSettings()}.png`);
- });
-});
diff --git a/core/src/components/modal/test/dark-mode/model.e2e.ts b/core/src/components/modal/test/dark-mode/model.e2e.ts
new file mode 100644
index 0000000000..28042045d5
--- /dev/null
+++ b/core/src/components/modal/test/dark-mode/model.e2e.ts
@@ -0,0 +1,23 @@
+import { expect } from '@playwright/test';
+import { configs, test } from '@utils/test/playwright';
+
+configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
+ test.describe(title('modal: dark mode'), () => {
+ test('should render the correct text color when outside ion-content', async ({ page }) => {
+ test.info().annotations.push({
+ type: 'issue',
+ description: 'https://github.com/ionic-team/ionic-framework/issues/26060',
+ });
+
+ await page.goto('/src/components/modal/test/dark-mode', config);
+
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#basic-modal');
+
+ await ionModalDidPresent.next();
+
+ await expect(page).toHaveScreenshot(screenshot(`modal-dark-color`));
+ });
+ });
+});
diff --git a/core/src/components/modal/test/dark-mode/model.e2e-legacy.ts-snapshots/modal-dark-color-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/dark-mode/model.e2e.ts-snapshots/modal-dark-color-ios-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/dark-mode/model.e2e-legacy.ts-snapshots/modal-dark-color-ios-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/dark-mode/model.e2e.ts-snapshots/modal-dark-color-ios-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/dark-mode/model.e2e-legacy.ts-snapshots/modal-dark-color-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/dark-mode/model.e2e.ts-snapshots/modal-dark-color-ios-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/dark-mode/model.e2e-legacy.ts-snapshots/modal-dark-color-ios-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/dark-mode/model.e2e.ts-snapshots/modal-dark-color-ios-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/dark-mode/model.e2e-legacy.ts-snapshots/modal-dark-color-ios-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/dark-mode/model.e2e.ts-snapshots/modal-dark-color-ios-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/dark-mode/model.e2e-legacy.ts-snapshots/modal-dark-color-ios-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/dark-mode/model.e2e.ts-snapshots/modal-dark-color-ios-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/dark-mode/model.e2e-legacy.ts-snapshots/modal-dark-color-md-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/dark-mode/model.e2e.ts-snapshots/modal-dark-color-md-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/dark-mode/model.e2e-legacy.ts-snapshots/modal-dark-color-md-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/dark-mode/model.e2e.ts-snapshots/modal-dark-color-md-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/dark-mode/model.e2e-legacy.ts-snapshots/modal-dark-color-md-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/dark-mode/model.e2e.ts-snapshots/modal-dark-color-md-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/dark-mode/model.e2e-legacy.ts-snapshots/modal-dark-color-md-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/dark-mode/model.e2e.ts-snapshots/modal-dark-color-md-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/dark-mode/model.e2e-legacy.ts-snapshots/modal-dark-color-md-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/dark-mode/model.e2e.ts-snapshots/modal-dark-color-md-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/dark-mode/model.e2e-legacy.ts-snapshots/modal-dark-color-md-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/dark-mode/model.e2e.ts-snapshots/modal-dark-color-md-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/fixtures.ts b/core/src/components/modal/test/fixtures.ts
index bb65d41681..297ed32fcb 100644
--- a/core/src/components/modal/test/fixtures.ts
+++ b/core/src/components/modal/test/fixtures.ts
@@ -1,5 +1,5 @@
import { dragElementBy } from '@utils/test/playwright';
-import type { E2EPage, EventSpy } from '@utils/test/playwright';
+import type { E2EPage, EventSpy, E2EPageOptions } from '@utils/test/playwright';
export class CardModalPage {
private ionModalDidPresent!: EventSpy;
@@ -9,9 +9,9 @@ export class CardModalPage {
constructor(page: E2EPage) {
this.page = page;
}
- async navigate(url: string) {
+ async navigate(url: string, config: E2EPageOptions) {
const { page } = this;
- await page.goto(url);
+ await page.goto(url, config);
this.ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
this.ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
}
diff --git a/core/src/components/modal/test/inline/modal.e2e-legacy.ts b/core/src/components/modal/test/inline/modal.e2e-legacy.ts
deleted file mode 100644
index 14ec7e3cd6..0000000000
--- a/core/src/components/modal/test/inline/modal.e2e-legacy.ts
+++ /dev/null
@@ -1,65 +0,0 @@
-import { expect } from '@playwright/test';
-import { test } from '@utils/test/playwright';
-
-test.describe('modal: inline', () => {
- test('it should present and then remain in the dom on dismiss', async ({ page, skip }) => {
- skip.rtl();
- skip.mode('md');
- await page.goto('/src/components/modal/test/inline');
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
- const modal = page.locator('ion-modal');
-
- await page.click('#open-inline-modal');
-
- await ionModalDidPresent.next();
-
- await expect(modal).toBeVisible();
-
- await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
-
- await ionModalDidDismiss.next();
-
- await expect(modal).toBeHidden();
- });
-
- test('presenting should create a single root element with the ion-page class', async ({ page, skip }, testInfo) => {
- skip.mode('md');
- skip.rtl();
-
- testInfo.annotations.push({
- type: 'issue',
- description: 'https://github.com/ionic-team/ionic-framework/issues/26117',
- });
-
- await page.setContent(`
-
-
-
-
-
- `);
-
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
- const modal = page.locator('ion-modal');
-
- await page.click('#date-button');
- await ionModalDidPresent.next();
-
- // Verifies that the host element exists with the .ion-page class
- expect(await modal.evaluate((el: HTMLIonModalElement) => el.firstElementChild!.className)).toContain('ion-page');
-
- await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
- await ionModalDidDismiss.next();
-
- await page.click('#date-button');
- await ionModalDidPresent.next();
-
- // Verifies that presenting the overlay again does not create a new host element
- expect(await modal.evaluate((el: HTMLIonModalElement) => el.firstElementChild!.className)).toContain('ion-page');
- expect(
- await modal.evaluate((el: HTMLIonModalElement) => el.firstElementChild!.firstElementChild!.className)
- ).not.toContain('ion-page');
- });
-});
diff --git a/core/src/components/modal/test/inline/modal.e2e-legacy.ts-snapshots/modal-inline-dismiss-ios-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/inline/modal.e2e-legacy.ts-snapshots/modal-inline-dismiss-ios-ltr-Mobile-Safari-linux.png
deleted file mode 100644
index 44fce49c28..0000000000
Binary files a/core/src/components/modal/test/inline/modal.e2e-legacy.ts-snapshots/modal-inline-dismiss-ios-ltr-Mobile-Safari-linux.png and /dev/null differ
diff --git a/core/src/components/modal/test/inline/modal.e2e.ts b/core/src/components/modal/test/inline/modal.e2e.ts
new file mode 100644
index 0000000000..05276722d9
--- /dev/null
+++ b/core/src/components/modal/test/inline/modal.e2e.ts
@@ -0,0 +1,65 @@
+import { expect } from '@playwright/test';
+import { configs, test } from '@utils/test/playwright';
+
+configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
+ test.describe(title('modal: inline'), () => {
+ test('it should present and then remain in the dom on dismiss', async ({ page }) => {
+ await page.goto('/src/components/modal/test/inline', config);
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
+ const modal = page.locator('ion-modal');
+
+ await page.click('#open-inline-modal');
+
+ await ionModalDidPresent.next();
+
+ await expect(modal).toBeVisible();
+
+ await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
+
+ await ionModalDidDismiss.next();
+
+ await expect(modal).toBeHidden();
+ });
+
+ test('presenting should create a single root element with the ion-page class', async ({ page }, testInfo) => {
+ testInfo.annotations.push({
+ type: 'issue',
+ description: 'https://github.com/ionic-team/ionic-framework/issues/26117',
+ });
+
+ await page.setContent(
+ `
+
+
+
+
+
+ `,
+ config
+ );
+
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
+ const modal = page.locator('ion-modal');
+
+ await page.click('#date-button');
+ await ionModalDidPresent.next();
+
+ // Verifies that the host element exists with the .ion-page class
+ expect(await modal.evaluate((el: HTMLIonModalElement) => el.firstElementChild!.className)).toContain('ion-page');
+
+ await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
+ await ionModalDidDismiss.next();
+
+ await page.click('#date-button');
+ await ionModalDidPresent.next();
+
+ // Verifies that presenting the overlay again does not create a new host element
+ expect(await modal.evaluate((el: HTMLIonModalElement) => el.firstElementChild!.className)).toContain('ion-page');
+ expect(
+ await modal.evaluate((el: HTMLIonModalElement) => el.firstElementChild!.firstElementChild!.className)
+ ).not.toContain('ion-page');
+ });
+ });
+});
diff --git a/core/src/components/modal/test/is-open/modal.e2e-legacy.ts b/core/src/components/modal/test/is-open/modal.e2e-legacy.ts
deleted file mode 100644
index 8ee4531235..0000000000
--- a/core/src/components/modal/test/is-open/modal.e2e-legacy.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { expect } from '@playwright/test';
-import { test } from '@utils/test/playwright';
-
-test.describe('modal: isOpen', () => {
- test.beforeEach(async ({ page, skip }) => {
- skip.rtl();
- skip.mode('md');
- await page.goto('/src/components/modal/test/is-open');
- });
-
- test('should open the modal', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const modal = page.locator('ion-modal');
-
- await page.click('#default');
-
- await ionModalDidPresent.next();
- await expect(modal).toBeVisible();
- });
-
- test('should open the modal then close after a timeout', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
- const modal = page.locator('ion-modal');
-
- await page.click('#timeout');
-
- await ionModalDidPresent.next();
- await expect(modal).toBeVisible();
-
- await ionModalDidDismiss.next();
- await expect(modal).toBeHidden();
- });
-});
diff --git a/core/src/components/modal/test/is-open/modal.e2e.ts b/core/src/components/modal/test/is-open/modal.e2e.ts
new file mode 100644
index 0000000000..6f7712241e
--- /dev/null
+++ b/core/src/components/modal/test/is-open/modal.e2e.ts
@@ -0,0 +1,34 @@
+import { expect } from '@playwright/test';
+import { configs, test } from '@utils/test/playwright';
+
+configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
+ test.describe(title('modal: isOpen'), () => {
+ test.beforeEach(async ({ page }) => {
+ await page.goto('/src/components/modal/test/is-open', config);
+ });
+
+ test('should open the modal', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const modal = page.locator('ion-modal');
+
+ await page.click('#default');
+
+ await ionModalDidPresent.next();
+ await expect(modal).toBeVisible();
+ });
+
+ test('should open the modal then close after a timeout', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
+ const modal = page.locator('ion-modal');
+
+ await page.click('#timeout');
+
+ await ionModalDidPresent.next();
+ await expect(modal).toBeVisible();
+
+ await ionModalDidDismiss.next();
+ await expect(modal).toBeHidden();
+ });
+ });
+});
diff --git a/core/src/components/modal/test/sheet/modal.e2e-legacy.ts b/core/src/components/modal/test/sheet/modal.e2e-legacy.ts
deleted file mode 100644
index 08cf4c46f0..0000000000
--- a/core/src/components/modal/test/sheet/modal.e2e-legacy.ts
+++ /dev/null
@@ -1,279 +0,0 @@
-import { expect } from '@playwright/test';
-import { test, dragElementBy } from '@utils/test/playwright';
-
-test.describe('sheet modal: rendering', () => {
- test('should not have visual regressions', async ({ page }) => {
- await page.goto('/src/components/modal/test/sheet');
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#sheet-modal');
-
- await ionModalDidPresent.next();
-
- await expect(page).toHaveScreenshot(`modal-sheet-present-${page.getSnapshotSettings()}.png`);
- });
-});
-
-test.describe('sheet modal: backdrop', () => {
- test.beforeEach(async ({ page, skip }) => {
- skip.rtl();
- await page.goto('/src/components/modal/test/sheet');
- });
- test('should dismiss the sheet modal when clicking the active backdrop', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
-
- await page.click('#backdrop-active');
-
- await ionModalDidPresent.next();
-
- await page.mouse.click(50, 50);
-
- await ionModalDidDismiss.next();
- });
- test('should present another sheet modal when clicking an inactive backdrop', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const modal = page.locator('.custom-height');
-
- await page.click('#backdrop-inactive');
- await ionModalDidPresent.next();
-
- await page.click('#custom-height-modal');
- await ionModalDidPresent.next();
-
- await expect(modal).toBeVisible();
- });
- test('input outside sheet modal should be focusable when backdrop is inactive', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#backdrop-inactive');
-
- await ionModalDidPresent.next();
-
- const input = page.locator('#root-input input').first();
- await input.click();
- await expect(input).toBeFocused();
- });
-});
-
-test.describe('sheet modal: setting the breakpoint', () => {
- test.describe('sheet modal: invalid values', () => {
- let warnings: string[] = [];
- test.beforeEach(async ({ page, skip }) => {
- skip.rtl();
- await page.goto('/src/components/modal/test/sheet');
-
- warnings = [];
-
- page.on('console', (ev) => {
- if (ev.type() === 'warning') {
- warnings.push(ev.text());
- }
- });
-
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#sheet-modal');
- await ionModalDidPresent.next();
-
- const modal = page.locator('ion-modal');
- await modal.evaluate((el: HTMLIonModalElement) => el.setCurrentBreakpoint(0.01));
- });
- test('it should not change the breakpoint when setting to an invalid value', async ({ page }) => {
- const modal = page.locator('ion-modal');
- const breakpoint = await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint());
- expect(breakpoint).toBe(0.25);
- });
- test('it should warn when setting an invalid breakpoint', async () => {
- expect(warnings.length).toBe(1);
- expect(warnings[0]).toBe(
- '[Ionic Warning]: Attempted to set invalid breakpoint value 0.01. Please double check that the breakpoint value is part of your defined breakpoints.'
- );
- });
- });
- test.describe('sheet modal: valid values', () => {
- test.beforeEach(async ({ page, skip }) => {
- skip.rtl();
- await page.goto('/src/components/modal/test/sheet');
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#sheet-modal');
- await ionModalDidPresent.next();
- });
- test('should update the current breakpoint', async ({ page }) => {
- const ionBreakpointDidChange = await page.spyOnEvent('ionBreakpointDidChange');
- const modal = page.locator('.modal-sheet');
-
- await modal.evaluate((el: HTMLIonModalElement) => el.setCurrentBreakpoint(0.5));
- await ionBreakpointDidChange.next();
-
- const breakpoint = await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint());
- expect(breakpoint).toBe(0.5);
- });
- test('should emit ionBreakpointDidChange', async ({ page }) => {
- const ionBreakpointDidChange = await page.spyOnEvent('ionBreakpointDidChange');
- const modal = page.locator('.modal-sheet');
-
- await modal.evaluate((el: HTMLIonModalElement) => el.setCurrentBreakpoint(0.5));
- await ionBreakpointDidChange.next();
- expect(ionBreakpointDidChange.events.length).toBe(1);
- });
- test('should emit ionBreakpointDidChange when breakpoint is set to 0', async ({ page }) => {
- const ionBreakpointDidChange = await page.spyOnEvent('ionBreakpointDidChange');
- const modal = page.locator('.modal-sheet');
-
- await modal.evaluate((el: HTMLIonModalElement) => el.setCurrentBreakpoint(0));
- await ionBreakpointDidChange.next();
- expect(ionBreakpointDidChange.events.length).toBe(1);
- });
- test('should emit ionBreakpointDidChange when the sheet is swiped to breakpoint 0', async ({ page }) => {
- const ionBreakpointDidChange = await page.spyOnEvent('ionBreakpointDidChange');
- const header = page.locator('.modal-sheet ion-header');
-
- await dragElementBy(header, page, 0, 500);
-
- await ionBreakpointDidChange.next();
-
- expect(ionBreakpointDidChange.events.length).toBe(1);
- });
- });
-
- test('it should reset the breakpoint value on dismiss', async ({ page, skip }) => {
- skip.rtl();
- await page.goto('/src/components/modal/test/sheet');
- test.info().annotations.push({
- type: 'issue',
- description: 'https://github.com/ionic-team/ionic-framework/issues/25245',
- });
-
- await page.setContent(`
-
- Open
-
-
- Dismiss
- Set breakpoint
-
-
-
-
- `);
-
- const modal = page.locator('ion-modal');
- const dismissButton = page.locator('#dismiss');
- const openButton = page.locator('#open-modal');
- const setBreakpointButton = page.locator('#set-breakpoint');
-
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
- const ionBreakpointDidChange = await page.spyOnEvent('ionBreakpointDidChange');
-
- await openButton.click();
- await ionModalDidPresent.next();
-
- await setBreakpointButton.click();
- await ionBreakpointDidChange.next();
-
- await dismissButton.click();
- await ionModalDidDismiss.next();
-
- await openButton.click();
- await ionModalDidPresent.next();
-
- const breakpoint = await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint());
-
- expect(breakpoint).toBe(0.25);
-
- await setBreakpointButton.click();
- await ionBreakpointDidChange.next();
-
- const updatedBreakpoint = await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint());
-
- expect(updatedBreakpoint).toBe(0.5);
- });
-});
-
-test.describe('sheet modal: clicking the handle', () => {
- test.beforeEach(async ({ page, skip }) => {
- skip.rtl();
- await page.goto('/src/components/modal/test/sheet');
- });
-
- test('should advance to the next breakpoint when handleBehavior is cycle', async ({ page }) => {
- const ionBreakpointDidChange = await page.spyOnEvent('ionBreakpointDidChange');
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const modal = page.locator('ion-modal');
-
- await page.click('#handle-behavior-cycle-modal');
- await ionModalDidPresent.next();
-
- const handle = page.locator('ion-modal .modal-handle');
-
- await handle.click();
- await ionBreakpointDidChange.next();
-
- await expect(await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint())).toBe(0.5);
-
- await handle.click();
- await ionBreakpointDidChange.next();
-
- await expect(await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint())).toBe(0.75);
-
- await handle.click();
- await ionBreakpointDidChange.next();
-
- await expect(await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint())).toBe(1);
-
- await handle.click();
- await ionBreakpointDidChange.next();
-
- // Advancing from the last breakpoint should change the breakpoint to the first non-zero breakpoint
- await expect(await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint())).toBe(0.25);
- });
-
- test('should not advance the breakpoint when handleBehavior is none', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const modal = page.locator('ion-modal');
-
- await page.click('#sheet-modal');
- await ionModalDidPresent.next();
-
- const handle = page.locator('ion-modal .modal-handle');
-
- await handle.click();
-
- await expect(await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint())).toBe(0.25);
- });
-
- test('should not dismiss the modal when backdrop is clicked and breakpoint is moving', async ({ page }) => {
- const ionBreakpointDidChange = await page.spyOnEvent('ionBreakpointDidChange');
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const modal = page.locator('ion-modal');
-
- await page.click('#handle-behavior-cycle-modal');
- await ionModalDidPresent.next();
-
- const handle = page.locator('ion-modal .modal-handle');
- const backdrop = page.locator('ion-modal ion-backdrop');
-
- await handle.click();
- backdrop.click();
-
- await ionBreakpointDidChange.next();
-
- await handle.click();
-
- await ionBreakpointDidChange.next();
-
- await expect(await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint())).toBe(0.75);
- });
-});
diff --git a/core/src/components/modal/test/sheet/modal.e2e.ts b/core/src/components/modal/test/sheet/modal.e2e.ts
new file mode 100644
index 0000000000..8b6e322ab8
--- /dev/null
+++ b/core/src/components/modal/test/sheet/modal.e2e.ts
@@ -0,0 +1,279 @@
+import { expect } from '@playwright/test';
+import { configs, test, dragElementBy } from '@utils/test/playwright';
+
+configs().forEach(({ title, screenshot, config }) => {
+ test.describe(title('sheet modal: rendering'), () => {
+ test('should not have visual regressions', async ({ page }) => {
+ await page.goto('/src/components/modal/test/sheet', config);
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#sheet-modal');
+
+ await ionModalDidPresent.next();
+
+ await expect(page).toHaveScreenshot(screenshot(`modal-sheet-present`));
+ });
+ });
+});
+
+configs({ directions: ['ltr'] }).forEach(({ title, config }) => {
+ test.describe(title('sheet modal: backdrop'), () => {
+ test.beforeEach(async ({ page }) => {
+ await page.goto('/src/components/modal/test/sheet', config);
+ });
+ test('should dismiss the sheet modal when clicking the active backdrop', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
+
+ await page.click('#backdrop-active');
+
+ await ionModalDidPresent.next();
+
+ await page.mouse.click(50, 50);
+
+ await ionModalDidDismiss.next();
+ });
+ test('should present another sheet modal when clicking an inactive backdrop', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const modal = page.locator('.custom-height');
+
+ await page.click('#backdrop-inactive');
+ await ionModalDidPresent.next();
+
+ await page.click('#custom-height-modal');
+ await ionModalDidPresent.next();
+
+ await expect(modal).toBeVisible();
+ });
+ test('input outside sheet modal should be focusable when backdrop is inactive', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#backdrop-inactive');
+
+ await ionModalDidPresent.next();
+
+ const input = page.locator('#root-input input').first();
+ await input.click();
+ await expect(input).toBeFocused();
+ });
+ });
+ test.describe(title('sheet modal: setting the breakpoint'), () => {
+ test.describe('sheet modal: invalid values', () => {
+ let warnings: string[] = [];
+ test.beforeEach(async ({ page }) => {
+ await page.goto('/src/components/modal/test/sheet', config);
+
+ warnings = [];
+
+ page.on('console', (ev) => {
+ if (ev.type() === 'warning') {
+ warnings.push(ev.text());
+ }
+ });
+
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#sheet-modal');
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('ion-modal');
+ await modal.evaluate((el: HTMLIonModalElement) => el.setCurrentBreakpoint(0.01));
+ });
+ test('it should not change the breakpoint when setting to an invalid value', async ({ page }) => {
+ const modal = page.locator('ion-modal');
+ const breakpoint = await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint());
+ expect(breakpoint).toBe(0.25);
+ });
+ test('it should warn when setting an invalid breakpoint', async () => {
+ expect(warnings.length).toBe(1);
+ expect(warnings[0]).toBe(
+ '[Ionic Warning]: Attempted to set invalid breakpoint value 0.01. Please double check that the breakpoint value is part of your defined breakpoints.'
+ );
+ });
+ });
+ test.describe('sheet modal: valid values', () => {
+ test.beforeEach(async ({ page }) => {
+ await page.goto('/src/components/modal/test/sheet', config);
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#sheet-modal');
+ await ionModalDidPresent.next();
+ });
+ test('should update the current breakpoint', async ({ page }) => {
+ const ionBreakpointDidChange = await page.spyOnEvent('ionBreakpointDidChange');
+ const modal = page.locator('.modal-sheet');
+
+ await modal.evaluate((el: HTMLIonModalElement) => el.setCurrentBreakpoint(0.5));
+ await ionBreakpointDidChange.next();
+
+ const breakpoint = await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint());
+ expect(breakpoint).toBe(0.5);
+ });
+ test('should emit ionBreakpointDidChange', async ({ page }) => {
+ const ionBreakpointDidChange = await page.spyOnEvent('ionBreakpointDidChange');
+ const modal = page.locator('.modal-sheet');
+
+ await modal.evaluate((el: HTMLIonModalElement) => el.setCurrentBreakpoint(0.5));
+ await ionBreakpointDidChange.next();
+ expect(ionBreakpointDidChange.events.length).toBe(1);
+ });
+ test('should emit ionBreakpointDidChange when breakpoint is set to 0', async ({ page }) => {
+ const ionBreakpointDidChange = await page.spyOnEvent('ionBreakpointDidChange');
+ const modal = page.locator('.modal-sheet');
+
+ await modal.evaluate((el: HTMLIonModalElement) => el.setCurrentBreakpoint(0));
+ await ionBreakpointDidChange.next();
+ expect(ionBreakpointDidChange.events.length).toBe(1);
+ });
+ test('should emit ionBreakpointDidChange when the sheet is swiped to breakpoint 0', async ({ page }) => {
+ const ionBreakpointDidChange = await page.spyOnEvent('ionBreakpointDidChange');
+ const header = page.locator('.modal-sheet ion-header');
+
+ await dragElementBy(header, page, 0, 500);
+
+ await ionBreakpointDidChange.next();
+
+ expect(ionBreakpointDidChange.events.length).toBe(1);
+ });
+ });
+
+ test('it should reset the breakpoint value on dismiss', async ({ page }) => {
+ await page.goto('/src/components/modal/test/sheet', config);
+ test.info().annotations.push({
+ type: 'issue',
+ description: 'https://github.com/ionic-team/ionic-framework/issues/25245',
+ });
+
+ await page.setContent(
+ `
+
+ Open
+
+
+ Dismiss
+ Set breakpoint
+
+
+
+
+ `,
+ config
+ );
+
+ const modal = page.locator('ion-modal');
+ const dismissButton = page.locator('#dismiss');
+ const openButton = page.locator('#open-modal');
+ const setBreakpointButton = page.locator('#set-breakpoint');
+
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
+ const ionBreakpointDidChange = await page.spyOnEvent('ionBreakpointDidChange');
+
+ await openButton.click();
+ await ionModalDidPresent.next();
+
+ await setBreakpointButton.click();
+ await ionBreakpointDidChange.next();
+
+ await dismissButton.click();
+ await ionModalDidDismiss.next();
+
+ await openButton.click();
+ await ionModalDidPresent.next();
+
+ const breakpoint = await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint());
+
+ expect(breakpoint).toBe(0.25);
+
+ await setBreakpointButton.click();
+ await ionBreakpointDidChange.next();
+
+ const updatedBreakpoint = await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint());
+
+ expect(updatedBreakpoint).toBe(0.5);
+ });
+ });
+ test.describe(title('sheet modal: clicking the handle'), () => {
+ test.beforeEach(async ({ page }) => {
+ await page.goto('/src/components/modal/test/sheet', config);
+ });
+
+ test('should advance to the next breakpoint when handleBehavior is cycle', async ({ page }) => {
+ const ionBreakpointDidChange = await page.spyOnEvent('ionBreakpointDidChange');
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const modal = page.locator('ion-modal');
+
+ await page.click('#handle-behavior-cycle-modal');
+ await ionModalDidPresent.next();
+
+ const handle = page.locator('ion-modal .modal-handle');
+
+ await handle.click();
+ await ionBreakpointDidChange.next();
+
+ await expect(await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint())).toBe(0.5);
+
+ await handle.click();
+ await ionBreakpointDidChange.next();
+
+ await expect(await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint())).toBe(0.75);
+
+ await handle.click();
+ await ionBreakpointDidChange.next();
+
+ await expect(await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint())).toBe(1);
+
+ await handle.click();
+ await ionBreakpointDidChange.next();
+
+ // Advancing from the last breakpoint should change the breakpoint to the first non-zero breakpoint
+ await expect(await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint())).toBe(0.25);
+ });
+
+ test('should not advance the breakpoint when handleBehavior is none', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const modal = page.locator('ion-modal');
+
+ await page.click('#sheet-modal');
+ await ionModalDidPresent.next();
+
+ const handle = page.locator('ion-modal .modal-handle');
+
+ await handle.click();
+
+ await expect(await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint())).toBe(0.25);
+ });
+
+ test('should not dismiss the modal when backdrop is clicked and breakpoint is moving', async ({ page }) => {
+ const ionBreakpointDidChange = await page.spyOnEvent('ionBreakpointDidChange');
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const modal = page.locator('ion-modal');
+
+ await page.click('#handle-behavior-cycle-modal');
+ await ionModalDidPresent.next();
+
+ const handle = page.locator('ion-modal .modal-handle');
+ const backdrop = page.locator('ion-modal ion-backdrop');
+
+ await handle.click();
+ backdrop.click();
+
+ await ionBreakpointDidChange.next();
+
+ await handle.click();
+
+ await ionBreakpointDidChange.next();
+
+ await expect(await modal.evaluate((el: HTMLIonModalElement) => el.getCurrentBreakpoint())).toBe(0.75);
+ });
+ });
+});
diff --git a/core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-ios-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-ios-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-ios-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-ios-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-ios-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-ios-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-ios-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-ios-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-ios-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-ios-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-ios-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-ios-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-ios-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-ios-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-ios-rtl-Mobile-Firefox-linux.png b/core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-ios-rtl-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-ios-rtl-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-ios-rtl-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-ios-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-ios-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-ios-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-ios-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-md-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-md-ltr-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-md-ltr-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-md-ltr-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-md-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-md-ltr-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-md-ltr-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-md-ltr-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-md-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-md-ltr-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-md-ltr-Mobile-Safari-linux.png
rename to core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-md-ltr-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-md-rtl-Mobile-Chrome-linux.png b/core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-md-rtl-Mobile-Chrome-linux.png
similarity index 100%
rename from core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-md-rtl-Mobile-Chrome-linux.png
rename to core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-md-rtl-Mobile-Chrome-linux.png
diff --git a/core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-md-rtl-Mobile-Firefox-linux.png b/core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-md-rtl-Mobile-Firefox-linux.png
similarity index 100%
rename from core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-md-rtl-Mobile-Firefox-linux.png
rename to core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-md-rtl-Mobile-Firefox-linux.png
diff --git a/core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-md-rtl-Mobile-Safari-linux.png b/core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-md-rtl-Mobile-Safari-linux.png
similarity index 100%
rename from core/src/components/modal/test/sheet/modal.e2e-legacy.ts-snapshots/modal-sheet-present-md-rtl-Mobile-Safari-linux.png
rename to core/src/components/modal/test/sheet/modal.e2e.ts-snapshots/modal-sheet-present-md-rtl-Mobile-Safari-linux.png
diff --git a/core/src/components/modal/test/standalone/modal.e2e-legacy.ts b/core/src/components/modal/test/standalone/modal.e2e-legacy.ts
deleted file mode 100644
index 70195ef99d..0000000000
--- a/core/src/components/modal/test/standalone/modal.e2e-legacy.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { test } from '@utils/test/playwright';
-
-test.describe('modal: standalone', () => {
- test('should open even without an ion-app', async ({ page, skip }) => {
- skip.rtl();
- skip.mode('md');
- await page.goto('/src/components/modal/test/standalone');
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
- const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
-
- await page.click('#basic-modal');
- await ionModalDidPresent.next();
-
- const modal = page.locator('ion-modal');
- await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
-
- await ionModalDidDismiss.next();
-
- await page.waitForSelector('ion-modal', { state: 'detached' });
- });
-});
diff --git a/core/src/components/modal/test/standalone/modal.e2e.ts b/core/src/components/modal/test/standalone/modal.e2e.ts
new file mode 100644
index 0000000000..eaaa7a824f
--- /dev/null
+++ b/core/src/components/modal/test/standalone/modal.e2e.ts
@@ -0,0 +1,21 @@
+import { configs, test } from '@utils/test/playwright';
+
+configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
+ test.describe(title('modal: standalone'), () => {
+ test('should open even without an ion-app', async ({ page }) => {
+ await page.goto('/src/components/modal/test/standalone', config);
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+ const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss');
+
+ await page.click('#basic-modal');
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('ion-modal');
+ await modal.evaluate((el: HTMLIonModalElement) => el.dismiss());
+
+ await ionModalDidDismiss.next();
+
+ await page.waitForSelector('ion-modal', { state: 'detached' });
+ });
+ });
+});
diff --git a/core/src/components/modal/test/trigger/modal.e2e-legacy.ts b/core/src/components/modal/test/trigger/modal.e2e-legacy.ts
deleted file mode 100644
index adcc76dc41..0000000000
--- a/core/src/components/modal/test/trigger/modal.e2e-legacy.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import { expect } from '@playwright/test';
-import { test } from '@utils/test/playwright';
-
-test.describe('modal: trigger', () => {
- test.beforeEach(async ({ page, skip }) => {
- skip.rtl();
- skip.mode('ios');
- await page.goto('/src/components/modal/test/trigger');
- });
-
- test('should open modal by left clicking on trigger', async ({ page }) => {
- const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
-
- await page.click('#left-click-trigger');
-
- await ionModalDidPresent.next();
-
- const modal = page.locator('.left-click-modal');
- await expect(modal).toBeVisible();
- });
-
- test('should still open modal when it has been removed and re-added to DOM', async ({ page }) => {
- const button = page.locator('#left-click-trigger');
- const modal = page.locator('ion-modal');
-
- await modal.evaluate((modal: HTMLIonModalElement) => {
- modal.remove();
- document.querySelector('ion-button')?.insertAdjacentElement('afterend', modal);
- });
- await page.waitForChanges();
-
- await button.click();
- await expect(modal).toBeVisible();
- });
-});
diff --git a/core/src/components/modal/test/trigger/modal.e2e.ts b/core/src/components/modal/test/trigger/modal.e2e.ts
new file mode 100644
index 0000000000..8513e2fbfb
--- /dev/null
+++ b/core/src/components/modal/test/trigger/modal.e2e.ts
@@ -0,0 +1,35 @@
+import { expect } from '@playwright/test';
+import { configs, test } from '@utils/test/playwright';
+
+configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, config }) => {
+ test.describe(title('modal: trigger'), () => {
+ test.beforeEach(async ({ page }) => {
+ await page.goto('/src/components/modal/test/trigger', config);
+ });
+
+ test('should open modal by left clicking on trigger', async ({ page }) => {
+ const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent');
+
+ await page.click('#left-click-trigger');
+
+ await ionModalDidPresent.next();
+
+ const modal = page.locator('.left-click-modal');
+ await expect(modal).toBeVisible();
+ });
+
+ test('should still open modal when it has been removed and re-added to DOM', async ({ page }) => {
+ const button = page.locator('#left-click-trigger');
+ const modal = page.locator('ion-modal');
+
+ await modal.evaluate((modal: HTMLIonModalElement) => {
+ modal.remove();
+ document.querySelector('ion-button')?.insertAdjacentElement('afterend', modal);
+ });
+ await page.waitForChanges();
+
+ await button.click();
+ await expect(modal).toBeVisible();
+ });
+ });
+});