From 4e8ecc293a9b0655dc173df96609b4e7a4031d5a Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Fri, 28 Aug 2026 15:59:14 -0400 Subject: [PATCH 01/18] fix(modal): prevent ion-content collapsing at content-based heights resolves #31149 --- core/src/components/content/content.tsx | 28 ++++++++++++++++++- core/src/components/modal/modal.scss | 15 +++++++++- core/src/css/core.scss | 37 +++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 2 deletions(-) diff --git a/core/src/components/content/content.tsx b/core/src/components/content/content.tsx index b0673b414d5..485862d4749 100644 --- a/core/src/components/content/content.tsx +++ b/core/src/components/content/content.tsx @@ -310,6 +310,26 @@ export class Content implements ComponentInterface { return forceOverscroll === undefined ? mode === 'ios' && isPlatform('ios') : forceOverscroll; } + /** + * Whether this component should size itself to its contents height, which + * is the case inside any popover and inside a modal whose `--height` is a + * content-based value. Those overlays give the content no definite height + * to fill. + */ + private shouldSizeToContent() { + if (hostContext('ion-popover', this.el)) { + return true; + } + + const modal = this.el.closest('ion-modal'); + if (modal === null) { + return false; + } + + const height = getComputedStyle(modal).getPropertyValue('--height').trim(); + return CONTENT_SIZED_HEIGHTS.includes(height); + } + private resize() { /** * Only force update if the component is rendered in a browser context. @@ -538,7 +558,7 @@ export class Content implements ComponentInterface { class={createColorClasses(this.color, { [mode]: true, 'content-fullscreen': this.fullscreen, - 'content-sizing': hostContext('ion-popover', this.el), + 'content-sizing': this.shouldSizeToContent(), overscroll: forceOverscroll, [`content-${rtl}`]: true, })} @@ -579,6 +599,12 @@ export class Content implements ComponentInterface { } } +/** + * `ion-modal` `--height` values that size the modal to its contents, leaving + * children an indefinite height to resolve against. + */ +const CONTENT_SIZED_HEIGHTS = ['auto', 'fit-content', 'min-content', 'max-content']; + const getParentElement = (el: any) => { if (el.parentElement) { // normal element with a parent element diff --git a/core/src/components/modal/modal.scss b/core/src/components/modal/modal.scss index 0df4a448cd3..a55e456bb0f 100644 --- a/core/src/components/modal/modal.scss +++ b/core/src/components/modal/modal.scss @@ -27,7 +27,12 @@ --max-width: auto; --height: 100%; --min-height: auto; - --max-height: auto; + /** + * Clamps a content-sized `--height` (auto, fit-content, ...) to the + * overlay, giving the wrapper's flex children something to shrink + * toward so `ion-content` scrolls instead of overflowing. + */ + --max-height: 100%; --overflow: hidden; --border-radius: 0; --border-width: 0; @@ -87,8 +92,16 @@ ion-backdrop { /** * The wrapper receives programmatic focus for screen readers but should not * show a visible focus ring, which is meant only for keyboard navigation. + * + * A flex layout is required for the wrapper to size itself to its content + * when the modal is content-sized (`--height` is auto, fit-content, ...). + * This makes it so that the content can scroll when it overflows the wrapper. */ .modal-wrapper { + display: flex; + + flex-direction: column; + outline: none; } diff --git a/core/src/css/core.scss b/core/src/css/core.scss index c7f7357ab46..d86184a326a 100644 --- a/core/src/css/core.scss +++ b/core/src/css/core.scss @@ -203,9 +203,46 @@ ion-modal > .ion-page { contain: layout style; + /** + * Override the minimum height a flex item gets, which defaults to + * use the height of its own content. Without this, a modal sized + * to its content clips its overflow instead of scrolling it. + */ + min-height: 0; + height: 100%; } +/** + * Position the `ion-nav` and its page relatively when inside of an + * `ion-content` that is sized to its content. This allows the `ion-nav` + * to take its height from its page and size itself correctly. Without + * this, the modal will not appear as the nav will be 0 height. + */ +ion-content.content-sizing ion-nav, +ion-content.content-sizing ion-nav > .ion-page { + position: relative; + + contain: layout style; + + height: auto; +} + +/** + * Place every page in the same grid cell so they overlap, while still + * letting the nav take its height from the tallest of them. Without + * this, a transition that has two pages in the tree at once would + * render them one below the other. + */ +ion-content.content-sizing ion-nav { + display: grid; +} + +ion-content.content-sizing ion-nav > .ion-page { + grid-row: 1; + grid-column: 1; +} + .split-pane-visible > .ion-page.split-pane-main { position: relative; } From e63841c2c8b44b03715157b346991ccb9d2f0882 Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Fri, 28 Aug 2026 16:43:53 -0400 Subject: [PATCH 02/18] test(modal): add content-height preview test --- .../modal/test/content-height/index.html | 353 ++++++++++++++++++ 1 file changed, 353 insertions(+) create mode 100644 core/src/components/modal/test/content-height/index.html diff --git a/core/src/components/modal/test/content-height/index.html b/core/src/components/modal/test/content-height/index.html new file mode 100644 index 00000000000..6cc01769a64 --- /dev/null +++ b/core/src/components/modal/test/content-height/index.html @@ -0,0 +1,353 @@ + + + + + Modal - Content Height + + + + + + + + + + + + + + +
+ + + Modal - Content Height + + + + + --height: fit-content + --height: auto + --height: min-content + --height: max-content + default height + --height: 300px + --height: 2000px (taller than screen) + ::part(content) (failing) + --height: fit-content, overflowing + --height: fit-content, overflowing, max height + --height: fit-content, ion-nav + --height: fit-content, no ion-content + + + + + fit-content + + + +
+
+
+ + + + + auto + + + +
+
+
+ + + + + min-content + + + +
+
+
+ + + + + max-content + + + +
+
+
+ + + + + + default height + + + +
+
+
+ + + + + 300px + + + +
+
+
+ + + + + 2000px + + + +
+
+
+ + + + + ::part(content) + + + +
+
+
+ + + + + fit-content + + + +
+
+
+ + + + + fit-content, max-height + + + +
+
+
+ + + + + +
+

Modal header

+ +
+
+
+
+
+ + + + From 21e6c23a46539aa82b2ecd422e48fbb0ad9ce60e Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Mon, 31 Aug 2026 15:37:02 -0400 Subject: [PATCH 03/18] test(modal): reorder modals, don't use ionic buttons --- core/scripts/testing/styles.css | 9 ++ .../modal/test/content-height/index.html | 144 ++++++++++++------ 2 files changed, 104 insertions(+), 49 deletions(-) diff --git a/core/scripts/testing/styles.css b/core/scripts/testing/styles.css index d08fee4437c..e2484407e51 100644 --- a/core/scripts/testing/styles.css +++ b/core/scripts/testing/styles.css @@ -74,6 +74,15 @@ main button:not([class*="sc-ion-"]) { margin: 8px 0; } +/** + * Danger style for buttons. + */ +ion-content button.red:not([class*="sc-ion-"]), +main button.red:not([class*="sc-ion-"]) { + background: #ea445a; + border-color: #a82f40; +} + /** * Button styles should only be applied * to native buttons that are not part of the diff --git a/core/src/components/modal/test/content-height/index.html b/core/src/components/modal/test/content-height/index.html index 6cc01769a64..6288d04b02a 100644 --- a/core/src/components/modal/test/content-height/index.html +++ b/core/src/components/modal/test/content-height/index.html @@ -26,7 +26,7 @@

Short first page.

- Go to Page Two +
`; @@ -67,7 +67,7 @@ @@ -169,22 +182,28 @@ - --height: fit-content - --height: auto - --height: min-content - --height: max-content - default height - --height: 300px - --height: 2000px (taller than screen) - ::part(content) (failing) - --height: fit-content, overflowing - --height: fit-content, overflowing, max height - --height: fit-content, ion-nav - --height: fit-content, no ion-content +

Content-based heights

+ + + + + +

Definite heights

+ + + + +

Overflowing content

+ + + +

Other content-based cases

+ + + + +

Known gaps

+ @@ -264,17 +283,6 @@
- - - - ::part(content) - - - -
-
-
- @@ -302,10 +310,35 @@
-

Modal header

+

Modal header

+ + + + + Toggled height + + + +
+ + +
+
+
+ + + + + ::part(content) + + + +
+
+
@@ -337,6 +370,19 @@

Modal header

*/ document.querySelector('ion-modal#nav-modal').component = document.createElement('nav-host'); + /** + * Adds and removes an inline `--height`, so the modal falls back to its + * own default in between. + */ + document.querySelector('button#toggle-height').addEventListener('click', () => { + const modal = document.querySelector('ion-modal#toggle-modal'); + if (modal.style.getPropertyValue('--height') === '') { + modal.style.setProperty('--height', 'fit-content'); + } else { + modal.style.removeProperty('--height'); + } + }); + document.querySelectorAll('ion-list.short').forEach((list) => fillList(list, 3)); document.querySelectorAll('ion-list.long').forEach((list) => fillList(list, 30)); From 51e8923048947202473774ebeb7cc250ab877a3e Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Mon, 31 Aug 2026 16:58:54 -0400 Subject: [PATCH 04/18] fix(content): watch for changes to --height and respect prefixed values --- core/src/components/content/content.tsx | 68 ++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 2 deletions(-) diff --git a/core/src/components/content/content.tsx b/core/src/components/content/content.tsx index 485862d4749..c71a926033b 100644 --- a/core/src/components/content/content.tsx +++ b/core/src/components/content/content.tsx @@ -46,8 +46,10 @@ export class Content implements ComponentInterface { private scrollEl?: HTMLElement; private backgroundContentEl?: HTMLElement; private isMainContent = true; + private sizeToContent = false; private resizeTimeout: ReturnType | null = null; private fullscreenResizeObserver?: ResizeObserver; + private sizeToContentObserver?: MutationObserver; private inheritedAttributes: Attributes = {}; private tabsElement: HTMLElement | null = null; @@ -190,6 +192,7 @@ export class Content implements ComponentInterface { // Re-observe on reattach, since componentDidLoad only fires once. this.setupFullscreenResizeObserver(); + this.setupSizeToContentObserver(); } componentDidLoad() { @@ -222,6 +225,7 @@ export class Content implements ComponentInterface { } this.destroyFullscreenResizeObserver(); + this.destroySizeToContentObserver(); } /** @@ -258,6 +262,51 @@ export class Content implements ComponentInterface { this.fullscreenResizeObserver.observe(this.el); } + /** + * A modal's `--height` can be changed at runtime with no event to react to, + * either by setting the property directly or by toggling a class that changes + * which rule wins. Both of those mutate an attribute on the modal, so watch + * for that and re-evaluate. Viewport driven changes are already covered by + * the `resize` listener. + */ + private setupSizeToContentObserver() { + if (!Build.isBrowser || typeof MutationObserver === 'undefined') { + return; + } + + if (this.sizeToContentObserver !== undefined) { + return; + } + + const modal = this.el.closest('ion-modal'); + if (modal === null) { + return; + } + + this.sizeToContentObserver = new MutationObserver(() => this.updateSizeToContent()); + this.sizeToContentObserver.observe(modal, { attributes: true, attributeFilter: ['style', 'class'] }); + } + + private destroySizeToContentObserver() { + if (this.sizeToContentObserver !== undefined) { + this.sizeToContentObserver.disconnect(); + this.sizeToContentObserver = undefined; + } + } + + /** + * Re-renders when the overlay is no longer sized the way the last render + * assumed. Read in a `readTask` because resolving the custom property forces + * a style recalculation. + */ + private updateSizeToContent() { + readTask(() => { + if (this.shouldSizeToContent() !== this.sizeToContent) { + forceUpdate(this); + } + }); + } + private destroyFullscreenResizeObserver() { if (this.fullscreenResizeObserver !== undefined) { this.fullscreenResizeObserver.disconnect(); @@ -327,7 +376,15 @@ export class Content implements ComponentInterface { } const height = getComputedStyle(modal).getPropertyValue('--height').trim(); - return CONTENT_SIZED_HEIGHTS.includes(height); + + /** + * Compared as a suffix so a value carrying only a vendor prefix is still + * recognized, such as the `-moz-fit-content` that Firefox needs before 94. + * + * TODO: replace with `CONTENT_SIZED_HEIGHTS.includes(height)` once the + * oldest supported Firefox is 94 or higher. + */ + return CONTENT_SIZED_HEIGHTS.some((value) => height.endsWith(value)); } private resize() { @@ -340,6 +397,13 @@ export class Content implements ComponentInterface { * TODO: Remove if STENCIL-834 determines Stencil will account for this. */ if (Build.isBrowser) { + /** + * A window resize can cross a media query that changes the modal's + * `--height`. The content's own offsets are unchanged, so neither branch + * below re-renders and the class from the last render would go stale. + */ + this.updateSizeToContent(); + if (this.fullscreen) { readTask(() => this.readDimensions()); } else if (this.cTop !== 0 || this.cBottom !== 0) { @@ -558,7 +622,7 @@ export class Content implements ComponentInterface { class={createColorClasses(this.color, { [mode]: true, 'content-fullscreen': this.fullscreen, - 'content-sizing': this.shouldSizeToContent(), + 'content-sizing': (this.sizeToContent = this.shouldSizeToContent()), overscroll: forceOverscroll, [`content-${rtl}`]: true, })} From 54b159667ac2c8d8ab897b255f157406217b9b0f Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Mon, 31 Aug 2026 17:32:25 -0400 Subject: [PATCH 05/18] test(modal): add e2e tests for various --height values --- .../modal/test/content-height/modal.e2e.ts | 316 ++++++++++++++++++ 1 file changed, 316 insertions(+) create mode 100644 core/src/components/modal/test/content-height/modal.e2e.ts diff --git a/core/src/components/modal/test/content-height/modal.e2e.ts b/core/src/components/modal/test/content-height/modal.e2e.ts new file mode 100644 index 00000000000..074710891cb --- /dev/null +++ b/core/src/components/modal/test/content-height/modal.e2e.ts @@ -0,0 +1,316 @@ +import { expect } from '@playwright/test'; +import type { E2EPage } from '@utils/test/playwright'; +import { configs, test } from '@utils/test/playwright'; + +const ISSUE = 'https://github.com/ionic-team/ionic-framework/issues/31149'; + +/** Height of the child inside `ion-content`, so sizing can be asserted exactly. */ +const CHILD_HEIGHT = 200; + +/** Taller than any viewport under test, to force the overflow cases. */ +const TALL_CHILD_HEIGHT = 2000; + +const contentModal = (style: string, childHeight = CHILD_HEIGHT) => ` + + + +
+
+
+`; + +/** + * Nav pages have to be registered before `ion-nav` resolves its root, and the + * nav has to arrive through the modal's `component` delegate. An `ion-nav` + * slotted inline renders no pages at all. + */ +const NAV_MODAL = ` + + +`; + +const getContentHeight = async (page: E2EPage) => { + const box = await page.locator('ion-modal ion-content').first().boundingBox(); + return box?.height ?? 0; +}; + +const getWrapperHeight = async (page: E2EPage) => { + const box = await page.locator('ion-modal .modal-wrapper').boundingBox(); + return box?.height ?? 0; +}; + +/** + * A content-sized modal has no definite height to hand down, so the scroll + * container only scrolls if it can shrink against the modal's `--max-height`. + * `scrollHeight > clientHeight` is what separates scrolling from clipping. + */ +const getScrollMetrics = (page: E2EPage) => { + return page.locator('ion-modal ion-content').evaluate(async (el: HTMLIonContentElement) => { + const scrollEl = await el.getScrollElement(); + return { scrollHeight: scrollEl.scrollHeight, clientHeight: scrollEl.clientHeight }; + }); +}; + +/** Presents a nav modal through the delegate and waits for its first page. */ +const presentNavModal = async (page: E2EPage) => { + const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent'); + + await page.locator('ion-modal').evaluate((modal: HTMLIonModalElement) => { + modal.component = document.createElement('nav-host'); + return modal.present(); + }); + + await ionModalDidPresent.next(); + await page.locator('ion-modal ion-nav nav-page-one').waitFor(); +}; + +configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => { + test.describe(title('modal: content height'), () => { + test.describe('content-based heights', () => { + /** + * Each of these leaves the content an indefinite height to resolve + * against, which is what used to collapse it. The content holds a single + * fixed height child, so a correct result is exactly that height: + * collapsed content measures 0, and a modal that ignored the height would + * fill the screen. + */ + const expectSizedToContent = async (page: E2EPage, height: string) => { + await page.setContent(contentModal(`--height: ${height};`), config); + await expect(page.locator('ion-modal')).toBeVisible(); + + await expect(page.locator('ion-modal ion-content')).toHaveClass(/content-sizing/); + expect(await getContentHeight(page)).toBeCloseTo(CHILD_HEIGHT, 0); + }; + + test('should size the content with fit-content', async ({ page }) => { + test.info().annotations.push({ type: 'issue', description: ISSUE }); + + await expectSizedToContent(page, 'fit-content'); + }); + + test('should size the content with auto', async ({ page }) => { + test.info().annotations.push({ type: 'issue', description: ISSUE }); + + await expectSizedToContent(page, 'auto'); + }); + + test('should size the content with min-content', async ({ page }) => { + test.info().annotations.push({ type: 'issue', description: ISSUE }); + + await expectSizedToContent(page, 'min-content'); + }); + + test('should size the content with max-content', async ({ page }) => { + test.info().annotations.push({ type: 'issue', description: ISSUE }); + + await expectSizedToContent(page, 'max-content'); + }); + + test('should size the content with a prefixed fit-content', async ({ page }) => { + /** + * Firefox only took `fit-content` unprefixed in 94, so a value carrying + * only the `-moz-` prefix still has to be recognized. + */ + await expectSizedToContent(page, '-moz-fit-content'); + }); + }); + + test.describe('definite heights', () => { + test('should fill the screen with the default height', async ({ page }) => { + await page.setContent(contentModal(''), config); + await expect(page.locator('ion-modal')).toBeVisible(); + + const viewport = page.viewportSize()!; + + // Content sizing should not be applied by default. + await expect(page.locator('ion-modal ion-content')).not.toHaveClass(/content-sizing/); + expect(await getContentHeight(page)).toBeCloseTo(viewport.height, 0); + }); + + test('should fill and scroll a pixel height', async ({ page }) => { + await page.setContent(contentModal('--height: 300px;', TALL_CHILD_HEIGHT), config); + await expect(page.locator('ion-modal')).toBeVisible(); + + // A definite height is not content-sized, so the ion-content + // should fill the modal the way it always has. + await expect(page.locator('ion-modal ion-content')).not.toHaveClass(/content-sizing/); + expect(await getWrapperHeight(page)).toBeCloseTo(300, 0); + + const { scrollHeight, clientHeight } = await getScrollMetrics(page); + expect(clientHeight).toBeCloseTo(300, 0); + expect(scrollHeight).toBeGreaterThan(clientHeight); + }); + + test('should clamp a pixel height taller than the overlay', async ({ page }) => { + await page.setContent(contentModal('--height: 2000px;'), config); + await expect(page.locator('ion-modal')).toBeVisible(); + + const viewport = page.viewportSize()!; + + // 2000px exceeds the overlay, so the default --max-height: 100% should + // clamp the height rather than letting it run off screen. + expect(await getWrapperHeight(page)).toBeCloseTo(viewport.height, 0); + }); + }); + + test.describe('overflowing content', () => { + test('should scroll rather than overflow the screen', async ({ page }) => { + await page.setContent(contentModal('--height: fit-content;', TALL_CHILD_HEIGHT), config); + await expect(page.locator('ion-modal')).toBeVisible(); + + const viewport = page.viewportSize()!; + + // The default --max-height keeps a content-sized modal inside the + // overlay. Rounded up by one, since the clamp lands on a sub-pixel. + expect(await getWrapperHeight(page)).toBeLessThanOrEqual(viewport.height + 1); + + // The content shrinks to reach that cap, leaving the child scrollable. + const { scrollHeight, clientHeight } = await getScrollMetrics(page); + expect(scrollHeight).toBeGreaterThan(clientHeight); + }); + + test('should honor a smaller --max-height', async ({ page }) => { + await page.setContent(contentModal('--height: fit-content; --max-height: 50%;', TALL_CHILD_HEIGHT), config); + await expect(page.locator('ion-modal')).toBeVisible(); + + const viewport = page.viewportSize()!; + + // Setting --max-height to 50% should shrink the modal to half the + // viewport, rounded up by one. + expect(await getWrapperHeight(page)).toBeLessThanOrEqual(viewport.height * 0.5 + 1); + + // The content shrinks to reach that cap, leaving the child scrollable. + const { scrollHeight, clientHeight } = await getScrollMetrics(page); + expect(scrollHeight).toBeGreaterThan(clientHeight); + }); + }); + + test.describe('structure and reactivity', () => { + test('should size a modal that has no ion-content', async ({ page }) => { + await page.setContent( + ` + + +
+
+ `, + config + ); + await expect(page.locator('ion-modal')).toBeVisible(); + + // Sized through `ion-modal > .ion-page` alone, with none of the + // content-sizing detection involved. + await expect(page.locator('ion-modal ion-content')).toHaveCount(0); + expect(await getWrapperHeight(page)).toBeCloseTo(CHILD_HEIGHT, 0); + }); + + test('should size a modal around an ion-nav and follow it between pages', async ({ page }) => { + await page.setContent(`${NAV_MODAL}`, config); + await presentNavModal(page); + + // Without the nav being positioned relatively it has no intrinsic + // height, so the modal would be 0. + const pageOneHeight = await getWrapperHeight(page); + expect(pageOneHeight).toBeGreaterThan(100); + + // Page two is taller, so the modal grows to follow the active page. + await page.locator('ion-modal ion-nav').evaluate((nav: HTMLIonNavElement) => nav.push('nav-page-two')); + await page.locator('ion-modal #tall-block').waitFor(); + + expect(await getWrapperHeight(page)).toBeGreaterThan(pageOneHeight); + }); + + test('should overlap nav pages mid-transition rather than stack them', async ({ page }) => { + /** + * `setContent` leaves animations enabled, unlike `goto`, so both nav + * pages are in the tree at once during the slide. That is the only way + * to catch them being laid out one below the other. + */ + await page.setContent(`${NAV_MODAL}`, config); + await presentNavModal(page); + + const tops = await page.locator('ion-modal ion-nav').evaluate(async (nav: any) => { + nav.push('nav-page-two'); + + /** + * A page that has been hidden reports a zero rect, so only pages with + * a real box count. Sampled per frame because the window where both + * are laid out lasts only as long as the slide. + */ + for (let i = 0; i < 60; i++) { + await new Promise((resolve) => requestAnimationFrame(resolve)); + + const laidOut = Array.from(nav.children).filter((c: any) => c.getBoundingClientRect().height > 0); + if (laidOut.length > 1) { + return laidOut.map((c: any) => Math.round(c.getBoundingClientRect().top)); + } + } + + return []; + }); + + // Both pages are laid out during the slide and must share an origin. + expect(tops.length).toBeGreaterThan(1); + expect(new Set(tops).size).toBe(1); + }); + + test('should respect a --height set on the modal at runtime', async ({ page }) => { + await page.setContent(contentModal(''), config); + await expect(page.locator('ion-modal')).toBeVisible(); + + const viewport = page.viewportSize()!; + const modal = page.locator('ion-modal'); + const content = page.locator('ion-modal ion-content'); + + // No --height of its own, so the modal is on its default full height. + await expect(content).not.toHaveClass(/content-sizing/); + expect(await getWrapperHeight(page)).toBeCloseTo(viewport.height, 0); + + // Set the --height and verify the observer is picking it up and + // adding the content-sizing class to the content. + await modal.evaluate((el: HTMLElement) => el.style.setProperty('--height', 'fit-content')); + await expect(content).toHaveClass(/content-sizing/); + expect(await getContentHeight(page)).toBeCloseTo(CHILD_HEIGHT, 0); + + // Removing it falls back to the default, so a class left behind in + // either direction is caught. + await modal.evaluate((el: HTMLElement) => el.style.removeProperty('--height')); + await expect(content).not.toHaveClass(/content-sizing/); + expect(await getWrapperHeight(page)).toBeCloseTo(viewport.height, 0); + }); + }); + }); +}); From d5b4e75e535f9284adfbf0795193c871c3eecc17 Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Wed, 2 Sep 2026 16:47:35 -0400 Subject: [PATCH 06/18] style: comment the test config --- core/src/components/modal/test/content-height/modal.e2e.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/src/components/modal/test/content-height/modal.e2e.ts b/core/src/components/modal/test/content-height/modal.e2e.ts index 074710891cb..77550fe4411 100644 --- a/core/src/components/modal/test/content-height/modal.e2e.ts +++ b/core/src/components/modal/test/content-height/modal.e2e.ts @@ -93,6 +93,9 @@ const presentNavModal = async (page: E2EPage) => { await page.locator('ion-modal ion-nav nav-page-one').waitFor(); }; +/** + * This behavior does not vary across directions/modes + */ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => { test.describe(title('modal: content height'), () => { test.describe('content-based heights', () => { From 729864582ea998412e4d8ef5fdfcec7526e5f98f Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Wed, 2 Sep 2026 16:49:35 -0400 Subject: [PATCH 07/18] style: update comment to drop TODO --- core/src/components/content/content.tsx | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/core/src/components/content/content.tsx b/core/src/components/content/content.tsx index c71a926033b..4b69b3c2ebf 100644 --- a/core/src/components/content/content.tsx +++ b/core/src/components/content/content.tsx @@ -378,11 +378,9 @@ export class Content implements ComponentInterface { const height = getComputedStyle(modal).getPropertyValue('--height').trim(); /** - * Compared as a suffix so a value carrying only a vendor prefix is still - * recognized, such as the `-moz-fit-content` that Firefox needs before 94. - * - * TODO: replace with `CONTENT_SIZED_HEIGHTS.includes(height)` once the - * oldest supported Firefox is 94 or higher. + * Compared as a suffix so a value carrying a vendor prefix is still + * recognized, such as `-webkit-fit-content` or the `-moz-fit-content` + * that Firefox needed before 94. */ return CONTENT_SIZED_HEIGHTS.some((value) => height.endsWith(value)); } From 67383392da429e277e837f8ee510b053086683a9 Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Wed, 2 Sep 2026 17:15:44 -0400 Subject: [PATCH 08/18] style: update comment to specify the limitation on --height --- core/src/components/content/content.tsx | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/core/src/components/content/content.tsx b/core/src/components/content/content.tsx index 4b69b3c2ebf..e2ec2b8e6a3 100644 --- a/core/src/components/content/content.tsx +++ b/core/src/components/content/content.tsx @@ -263,11 +263,11 @@ export class Content implements ComponentInterface { } /** - * A modal's `--height` can be changed at runtime with no event to react to, - * either by setting the property directly or by toggling a class that changes - * which rule wins. Both of those mutate an attribute on the modal, so watch - * for that and re-evaluate. Viewport driven changes are already covered by - * the `resize` listener. + * A modal's `--height` can be changed at runtime with no event to react + * to, either by setting the property directly or by toggling a class that + * changes which rule wins. Both of those mutate an attribute on the modal, + * so watch for that and re-evaluate. Viewport driven changes are already + * covered by the `resize` listener. */ private setupSizeToContentObserver() { if (!Build.isBrowser || typeof MutationObserver === 'undefined') { @@ -360,10 +360,16 @@ export class Content implements ComponentInterface { } /** - * Whether this component should size itself to its contents height, which - * is the case inside any popover and inside a modal whose `--height` is a - * content-based value. Those overlays give the content no definite height + * Whether to size the component to its content height. + * + * This applies inside popovers and modals with a content-based `--height`, + * where the overlay does not provide the content with a definite height * to fill. + * + * Only `--height` is consulted. Styling the wrapper directly, such as + * `ion-modal::part(content) { height: fit-content; }`, does not change + * `--height` and therefore cannot be observed. `--height` is the only + * supported way to opt into content-based sizing. */ private shouldSizeToContent() { if (hostContext('ion-popover', this.el)) { From dff4f83467d472abbdda0d55997d7c8b33bb073a Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Tue, 8 Sep 2026 16:10:47 -0400 Subject: [PATCH 09/18] fix(content): account for height changes when unmounted --- core/src/components/content/content.tsx | 1 + .../modal/test/content-height/modal.e2e.ts | 49 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/core/src/components/content/content.tsx b/core/src/components/content/content.tsx index e2ec2b8e6a3..1a9bb58b3d2 100644 --- a/core/src/components/content/content.tsx +++ b/core/src/components/content/content.tsx @@ -193,6 +193,7 @@ export class Content implements ComponentInterface { // Re-observe on reattach, since componentDidLoad only fires once. this.setupFullscreenResizeObserver(); this.setupSizeToContentObserver(); + this.updateSizeToContent(); } componentDidLoad() { diff --git a/core/src/components/modal/test/content-height/modal.e2e.ts b/core/src/components/modal/test/content-height/modal.e2e.ts index 77550fe4411..0a363c07618 100644 --- a/core/src/components/modal/test/content-height/modal.e2e.ts +++ b/core/src/components/modal/test/content-height/modal.e2e.ts @@ -10,6 +10,12 @@ const CHILD_HEIGHT = 200; /** Taller than any viewport under test, to force the overflow cases. */ const TALL_CHILD_HEIGHT = 2000; +/** + * Delays the remount long enough to trigger a fresh evaluation, but not long + * enough for the modal's later safe-area write to clear the stale class. + */ +const REMOUNT_TIMEOUT = 100; + const contentModal = (style: string, childHeight = CHILD_HEIGHT) => ` ${NAV_MODAL}`, config); + await presentNavModal(page); + + // Awaiting the push resolves once the transition is done. + await page.locator('ion-modal ion-nav').evaluate((nav: HTMLIonNavElement) => nav.push('nav-page-two')); + + const arrived = page.locator('ion-modal nav-page-two'); + await expect(arrived.locator('ion-title')).toBeVisible(); + await expect(page.locator('ion-modal nav-page-one')).toBeHidden(); + + // A page left mid-slide still has a box, so the box has to line up with + // the modal on both axes for the transition to have actually landed. + const pageBox = (await arrived.boundingBox())!; + const wrapperBox = (await page.locator('ion-modal .modal-wrapper').boundingBox())!; + expect(pageBox.x).toBeCloseTo(wrapperBox.x, 0); + expect(pageBox.y).toBeCloseTo(wrapperBox.y, 0); + expect(pageBox.height).toBeGreaterThan(0); + + // The title drifting down the viewport is the reported symptom, so it + // has to come to rest against the top of the modal. + const titleBox = (await arrived.locator('ion-title').boundingBox())!; + expect(titleBox.y).toBeCloseTo(wrapperBox.y, 0); + + // Going back has to land the same way, since the pop animates too. + await page.locator('ion-modal ion-nav').evaluate((nav: HTMLIonNavElement) => nav.pop()); + + await expect(page.locator('ion-modal nav-page-one ion-title')).toBeVisible(); + await expect(arrived).toBeHidden(); + expect((await page.locator('ion-modal nav-page-one').boundingBox())!.x).toBeCloseTo(wrapperBox.x, 0); + }); + test('should respect a --height set on the modal at runtime', async ({ page }) => { await page.setContent(contentModal(''), config); await expect(page.locator('ion-modal')).toBeVisible(); diff --git a/core/src/css/core.scss b/core/src/css/core.scss index c70988e8ad9..b68ff4d3ae6 100644 --- a/core/src/css/core.scss +++ b/core/src/css/core.scss @@ -219,8 +219,8 @@ ion-modal > .ion-page { * to take its height from its page and size itself correctly. Without * this, the modal will not appear as the nav will be 0 height. */ -ion-content.content-sizing ion-nav, -ion-content.content-sizing ion-nav > .ion-page { +ion-modal ion-content.content-sizing ion-nav, +ion-modal ion-content.content-sizing ion-nav > .ion-page { position: relative; contain: layout style; @@ -234,11 +234,11 @@ ion-content.content-sizing ion-nav > .ion-page { * this, a transition that has two pages in the tree at once would * render them one below the other. */ -ion-content.content-sizing ion-nav { +ion-modal ion-content.content-sizing ion-nav { display: grid; } -ion-content.content-sizing ion-nav > .ion-page { +ion-modal ion-content.content-sizing ion-nav > .ion-page { grid-row: 1; grid-column: 1; } From 7277c15da5fa5a89c207a0b6415e740cc46d689d Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Wed, 9 Sep 2026 15:06:16 -0400 Subject: [PATCH 16/18] test(modal): turn off animations for all modals --- .../modal/test/content-height/modal.e2e.ts | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/core/src/components/modal/test/content-height/modal.e2e.ts b/core/src/components/modal/test/content-height/modal.e2e.ts index 6897825423f..01608a1c4ae 100644 --- a/core/src/components/modal/test/content-height/modal.e2e.ts +++ b/core/src/components/modal/test/content-height/modal.e2e.ts @@ -16,7 +16,15 @@ const TALL_CHILD_HEIGHT = 2000; */ const REMOUNT_TIMEOUT = 100; +/** + * `setContent` has animations enabled by default, so `toBeVisible()` resolves as + * the modal starts animating in and everything after it is measured + * mid-animation. This turns animations off for each modal. + */ +const DISABLE_ANIMATIONS = ``; + const contentModal = (style: string, childHeight = CHILD_HEIGHT) => ` + ${DISABLE_ANIMATIONS} ${NAV_MODAL}`, config); await presentNavModal(page); - const tops = await page.locator('ion-modal ion-nav').evaluate(async (nav: any) => { - nav.push('nav-page-two'); + const tops = await page.locator('ion-modal ion-nav').evaluate(async (nav: HTMLIonNavElement) => { + const pushed = nav.push('nav-page-two'); /** - * A page that has been hidden reports a zero rect, so only pages with - * a real box count. Sampled per frame because the window where both - * are laid out lasts only as long as the slide. + * Both pages are in the tree from the first frame of the transition, + * which runs for around half a second, so one frame is enough to + * catch them together. A page that has been hidden reports a zero + * rect, so only pages with a real box count. */ - for (let i = 0; i < 60; i++) { - await new Promise((resolve) => requestAnimationFrame(resolve)); + await new Promise((resolve) => requestAnimationFrame(resolve)); + const laidOut = Array.from(nav.children).filter((child) => child.getBoundingClientRect().height > 0); + const tops = laidOut.map((child) => Math.round(child.getBoundingClientRect().top)); - const laidOut = Array.from(nav.children).filter((c: any) => c.getBoundingClientRect().height > 0); - if (laidOut.length > 1) { - return laidOut.map((c: any) => Math.round(c.getBoundingClientRect().top)); - } - } + // Awaiting the push surfaces a rejected transition as a test failure. + await pushed; - return []; + return tops; }); // Both pages are laid out during the slide and must share an origin. - expect(tops.length).toBeGreaterThan(1); + expect(tops).toHaveLength(2); expect(new Set(tops).size).toBe(1); }); /** * Nav pages carried these properties once before, at `height: 100%`, and - * it left titles animating to the wrong place (#25677, #25688). Verifying - * that pages do not overlap is not enough on its own, so this covers - * where the transition ends up. + * it left titles animating to the wrong place (#25677, #25688). This + * covers where a transition ends up, with the arriving page and its title + * resting against the modal. */ test('should settle a nav transition with the new page in place', async ({ page }) => { await page.setContent(`${NAV_MODAL}`, config); From 8bfd7d3c6f9fb5f012384022e9127542c3d1358e Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Wed, 9 Sep 2026 17:22:09 -0400 Subject: [PATCH 18/18] test(modal): cover both modes and add screenshots --- .../modal/test/content-height/modal.e2e.ts | 70 +++++++++++++++--- ...ight-basic-ios-ltr-Mobile-Chrome-linux.png | Bin 0 -> 5397 bytes ...ght-basic-ios-ltr-Mobile-Firefox-linux.png | Bin 0 -> 6357 bytes ...ight-basic-ios-ltr-Mobile-Safari-linux.png | Bin 0 -> 6382 bytes ...eight-basic-md-ltr-Mobile-Chrome-linux.png | Bin 0 -> 5743 bytes ...ight-basic-md-ltr-Mobile-Firefox-linux.png | Bin 0 -> 6209 bytes ...eight-basic-md-ltr-Mobile-Safari-linux.png | Bin 0 -> 6483 bytes ...height-nav-ios-ltr-Mobile-Chrome-linux.png | Bin 0 -> 6493 bytes ...eight-nav-ios-ltr-Mobile-Firefox-linux.png | Bin 0 -> 7518 bytes ...height-nav-ios-ltr-Mobile-Safari-linux.png | Bin 0 -> 7871 bytes ...-height-nav-md-ltr-Mobile-Chrome-linux.png | Bin 0 -> 6822 bytes ...height-nav-md-ltr-Mobile-Firefox-linux.png | Bin 0 -> 7433 bytes ...-height-nav-md-ltr-Mobile-Safari-linux.png | Bin 0 -> 8142 bytes ...t-overflow-ios-ltr-Mobile-Chrome-linux.png | Bin 0 -> 5375 bytes ...-overflow-ios-ltr-Mobile-Firefox-linux.png | Bin 0 -> 6358 bytes ...t-overflow-ios-ltr-Mobile-Safari-linux.png | Bin 0 -> 6688 bytes ...ht-overflow-md-ltr-Mobile-Chrome-linux.png | Bin 0 -> 5736 bytes ...t-overflow-md-ltr-Mobile-Firefox-linux.png | Bin 0 -> 6203 bytes ...ht-overflow-md-ltr-Mobile-Safari-linux.png | Bin 0 -> 6451 bytes 19 files changed, 58 insertions(+), 12 deletions(-) create mode 100644 core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-basic-ios-ltr-Mobile-Chrome-linux.png create mode 100644 core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-basic-ios-ltr-Mobile-Firefox-linux.png create mode 100644 core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-basic-ios-ltr-Mobile-Safari-linux.png create mode 100644 core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-basic-md-ltr-Mobile-Chrome-linux.png create mode 100644 core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-basic-md-ltr-Mobile-Firefox-linux.png create mode 100644 core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-basic-md-ltr-Mobile-Safari-linux.png create mode 100644 core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-nav-ios-ltr-Mobile-Chrome-linux.png create mode 100644 core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-nav-ios-ltr-Mobile-Firefox-linux.png create mode 100644 core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-nav-ios-ltr-Mobile-Safari-linux.png create mode 100644 core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-nav-md-ltr-Mobile-Chrome-linux.png create mode 100644 core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-nav-md-ltr-Mobile-Firefox-linux.png create mode 100644 core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-nav-md-ltr-Mobile-Safari-linux.png create mode 100644 core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-overflow-ios-ltr-Mobile-Chrome-linux.png create mode 100644 core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-overflow-ios-ltr-Mobile-Firefox-linux.png create mode 100644 core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-overflow-ios-ltr-Mobile-Safari-linux.png create mode 100644 core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-overflow-md-ltr-Mobile-Chrome-linux.png create mode 100644 core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-overflow-md-ltr-Mobile-Firefox-linux.png create mode 100644 core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-overflow-md-ltr-Mobile-Safari-linux.png diff --git a/core/src/components/modal/test/content-height/modal.e2e.ts b/core/src/components/modal/test/content-height/modal.e2e.ts index b195875a0b3..6acc8b4b50e 100644 --- a/core/src/components/modal/test/content-height/modal.e2e.ts +++ b/core/src/components/modal/test/content-height/modal.e2e.ts @@ -31,8 +31,13 @@ const contentModal = (style: string, childHeight = CHILD_HEIGHT) => ` } + + + Modal + + -
+
height: ${childHeight}px
`; @@ -48,16 +53,28 @@ const NAV_MODAL = ` class NavPageOne extends HTMLElement { connectedCallback() { this.innerHTML = \` - One -
+ + + Modal - Nav - One + + + +
height: 120px
+
\`; } } class NavPageTwo extends HTMLElement { connectedCallback() { this.innerHTML = \` - Two -
+ + + Modal - Nav - Two + + + +
height: 400px
+
\`; } } @@ -131,9 +148,9 @@ const presentNavModal = async (page: E2EPage) => { }; /** - * This behavior does not vary across directions/modes + * This behavior does not vary across directions */ -configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => { +configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => { test.describe(title('modal: content height'), () => { test.describe('content-based heights', () => { /** @@ -201,7 +218,7 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => // Content sizing should not be applied by default. await expect(page.locator('ion-modal ion-content')).not.toHaveClass(/content-sizing/); - await expect.poll(() => getContentHeight(page)).toBe(viewport.height); + await expect.poll(() => getWrapperHeight(page)).toBe(viewport.height); }); test('should fill and scroll a pixel height', async ({ page }) => { @@ -213,8 +230,10 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => await expect(page.locator('ion-modal ion-content')).not.toHaveClass(/content-sizing/); await expect.poll(() => getWrapperHeight(page)).toBe(300); + // The scroll container takes what the header leaves of the modal. + const headerHeight = (await page.locator('ion-modal ion-header').boundingBox())!.height; const { scrollHeight, clientHeight } = await getScrollMetrics(page); - expect(clientHeight).toBe(300); + expect(clientHeight).toBe(300 - headerHeight); expect(scrollHeight).toBeGreaterThan(clientHeight); }); @@ -360,10 +379,16 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => expect(pageBox.y).toBeCloseTo(wrapperBox.y, 0); expect(pageBox.height).toBeGreaterThan(0); - // The title drifting down the viewport is the reported symptom, so it - // has to come to rest against the top of the modal. + /** + * The title drifting down the viewport is the reported symptom, so the + * header has to sit at the top of the modal with the title inside it. + * Each mode insets the title by a different amount. + */ + const headerBox = (await arrived.locator('ion-header').boundingBox())!; const titleBox = (await arrived.locator('ion-title').boundingBox())!; - expect(titleBox.y).toBeCloseTo(wrapperBox.y, 0); + expect(headerBox.y).toBeCloseTo(wrapperBox.y, 0); + expect(titleBox.y).toBeGreaterThanOrEqual(headerBox.y); + expect(titleBox.y + titleBox.height).toBeLessThanOrEqual(headerBox.y + headerBox.height + 1); // Going back has to land the same way, since the pop animates too. await page.locator('ion-modal ion-nav').evaluate((nav: HTMLIonNavElement) => nav.pop()); @@ -418,5 +443,26 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => await expect.poll(() => getWrapperHeight(page)).toBe(viewport.height); }); }); + + test('should render a modal sized to its content', async ({ page }) => { + await page.setContent(contentModal('--height: fit-content;'), config); + await expect(page.locator('ion-modal')).toBeVisible(); + + await expect(page).toHaveScreenshot(screenshot('modal-content-height-basic')); + }); + + test('should render a content-sized modal whose content overflows', async ({ page }) => { + await page.setContent(contentModal('--height: fit-content;', TALL_CHILD_HEIGHT), config); + await expect(page.locator('ion-modal')).toBeVisible(); + + await expect(page).toHaveScreenshot(screenshot('modal-content-height-overflow')); + }); + + test('should render a content-sized modal with an ion-nav', async ({ page }) => { + await page.setContent(`${NAV_MODAL}`, config); + await presentNavModal(page); + + await expect(page).toHaveScreenshot(screenshot('modal-content-height-nav')); + }); }); }); diff --git a/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-basic-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-basic-ios-ltr-Mobile-Chrome-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..4b987641db4bb5ea5c470dc184f445d48b489050 GIT binary patch literal 5397 zcmeHLX;{+P8prl!)M>n9iH-RrxaCG=*=p8JGa)5g z6h$CK+?C35DG?_GN(I~!1x-x>Wxb~l^L_4ox%YXdujf4f_q^{pzvcbE*SrsT7%p40 z3<7}|dhT;S0)ZG@gFxm9mdpbyO0MN31oAD!)BQK!ga>27_)=l4wq=SNc-Y2tHFLe; zzrJ1Z^u*UNd-sAL-)&ld z$HCxQ#nOFGymtN&HSfC!liT~gZhgItuh{sL4rIYl+ub0@iJSi|Ee0&1s4nt`-RWbs zG8(LA?)|AubJyhAvn}R=0iqYNaWqbxqO7TltQ)WN2_e`;9MS8vM2dC&(`%yfBompD;9c*~aK!axKiGa^ioPRd@K<=(uo4kuY@amRDPUgGS#D;B8<&8x#= z@*SsMnH0rOXZ_-XvWo!+G|2fu-1`0usAv@w)63wvIyb;)hwj4j69%p=HQChV!F*^I zHGn+i_%X}6arTj8Za(9#FkS>OOx6 zBiTdO#=Spbzq&N7F-5(V(Y}47$F2JQbTcPXHTRG+?}#!O$Nmy~y!`FfSnuTr7Pv~-Q1O`N(#ITRDk()#(|2+CEmze@nvqlZNM}K8 zxzIg4+yvPj{y1aH-hkkXguTVX;)s3qVpg_?bttv zF}jz-^Ps=hPrl5vi01hP@DjPx95?aBQCp0v5WUEqjkcva&vfp#+{RMz=%~;3Ja%@$ zaNl^97(QDO8Z?X_~ zH^VV6ekE)_v!A-!3-G(_wW&-%M=H&>z?kiJ;hhg79B8Q;@W>Ry#_rXTFDk-KZnr)# z`s?14LclMC?aV@q>*?<2*AB=0saSu*z~vF_T5#(LZ?b*?#o^JW)bcl5mT#@@^9u;E z=Q@X}SJ>KMdaJ?Zg7U;jG?lsNn^iVE9^mT)sGGFo>_BJ1?wmkW@v+)v?PnRbn8eR* zn=SB~DSoM$UAVXM=l14}qU34zd}Ehqh#=TBpmkJre>#O$D+SnY?7`Go)s2-45J^!I z!<^vgHh`8|5FDA%fBCIdRj`mhO?e*BkIv)f0o{7+k%`f^lI1MxJ4)kCtMzO=UcN^8Hq!ih> z=jOZ^^>`I$W(8Cj!+l?NO7;+ep7Hfz@!NZ21tECNpv9L;oIY`jI9FF}lvdRO`VuMf zUP8nt5SQH}j2EXATsAF{D2AlDK$!+JpsBh!Nw%=b$hj1^Ljk0SPZu03dz|U20%8(3Q~vect~+2Cs}IY1mfJs>@BS*3e{oI!v)xjQjEu& zcgb9)+ijzVTAf@!w{8Th98@RBqgPv%hq_Ez7eW_nKgAQPkn@PbrrhtvaIw18{a)oA^L*FL2wA3VUr*Zpm zb+Jx~zhWLowmzL6q0vkXXmto~Axq=v{40(Fi#HEoZLwg|?6~6kb%7=oz)f;kb8IZZmiMaI z|HZwdC$A-9;Iw;$r$C2XtF)T5pUz=)$^BD`K35-()#y~=)X zc)$2Vqz~0n04Z=30l}9t)AzA^fOSLxrwvIQeJV@1u+Vfz-}(8px=*#Ct0-~1Thz{*vXP??ws54hn!*pf*a z)-wB;z)rBh0jabl4&6^zZ9D0na(vGdemD9)<3lKs7kET_5?0eK4Rr1~o@R)OAQ$BBNS?lw~%gmYOhs)Q2;RPL%ZXIH?LoH;b}?lcE$tlV>M^%8}D;srr0_ z`HM=c2d;C!;U1*(ml14UthKwM98LUme!dZT&p@b(D^*!a18p!Yt^QGAG;^_F-f#u| z_d`%0`;%WJ7Hw5in93v!a`5LX^`S&aVGB$7-CuXr|J9$5K*9JH0$I@bWft)NpY1;& zLox?=`rrBS`#MGWI#c>bj?qT&1`vo|e?Pu^1`IbBeNnRckmv<5_E8Po7_b8I+;hmC Jw(I!C{{X_U*)sqD literal 0 HcmV?d00001 diff --git a/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-basic-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-basic-ios-ltr-Mobile-Firefox-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..f7908d0d9b62bd664d8272ee6b80f7c53122adfd GIT binary patch literal 6357 zcmeHMX;_l!{$_HrX;B+JmTB2srgh5H9CH~{sN8Tg_a#>>Cre2wS6qNG+Z;2-sY%PN za?A}OQy>>mr^N~tO^^hY)XaqtQ32%@IImsjr>eF*w@AbUz^Ly^+{@wTe zK(3FMo5m*nO%Mn~!yWGI2Z4N(3xTZTe5VdRK{vEjK_Gf1?#{;o(2>HCjVxjGh)OId zI{r`pSGT*PuLikn+TpaZz|*9u`Y$8Xiis187 zC66qnm5-$NR@vcUBa)1I_Uvf8qE+PBG$+ltVuPpfA8{yorj<hb!wk!4BDV@2M_L^+$Ym>rHu=13_ka#jXsQ3c2J$2|zAvrK8q*9e7 zezBc8S%|>??Km$wVXS9$Ks%}Tr>XgsxrQ#ocoI#jKWgp`QzVD|QsBZJN#l>8P~bO& zulC?eE{Ih5@OeHQd};5^=ix~`?1Yw?M>gyLe+_(T*23%fJTr>kXjy=^T&HgZt}nh&bEl;ew=>pzVfUm5h?6IN3W!AOSiDN zno91{fH$m-?|G@==g(_7|D;@=;9WIHuxq3B+6$UCn?H?0XCBsOI?BQgVA!m3jDz%D zv`+82_!qjtpQa8r^&Ni}y*(n?7vEE^T&lvh#_YSc8;cH$&bO8e`{5CW}r&%+cm-az;1?DgBu1&3dBDNg0a@|?6B zS=++SH%O-|@KPGSvM{oRX&)D3dHv-N+SK7h4_tQ(>WXgAG>&SNGF6%;-SH}g6TvBO zgdYmZ{WkjLIpYIcd8l>_EXd&9W{b89s>6t4))7%#QtQgcV&EuLKbN~iG`$@JLYOL_ zsgj+k^)PS#tDY{ORVZ^b?W=`PCvGa*VZabm8r@}>dA?l3LBjHP^qeY5@`6FHJ3D&0 zoVpkLXvPY^zp5lruP$*scOM0$qPMYLqw^)p=)>C9@N$fFNcg*xX6zARlRxilIY!=n zzqeUFTgOXi6-u=Vo(hPqR~hcs74N`vy++Dxp1gy!9lqei%MjG_zIWT%PXQ;U4qxn& z47v1ts~#8gWUfUZE#FX}SFQLBNup8Qrj>vQ1=0lt!?Jwc$UQbZ&wsB!4rfi0$b_ZY z;Pw__^Hf=UVMJ;ylGq#r)-oWkQuV{bu`828Aqoe~r@3udCUYWNBhX`4FzpXw^bF2F zK6XSloW%Rtw4T)qqBfRZVRgBak6s?T25fnFr+%-Cv7TUUo8U4(M0osUebn1g!os*$ z-+3^Iz$sL^xm=GToN@&a4GQg{K8W91g%lna+zwCEajB2~A$h6ajS5!PYOzm)m{oh1 z;c5`i!WlYXuhiHy34VKYkIkYxn?-9Fdi;AGzXCfDejw57ZrW%%P+3p5ICRnY=LmWz z<2bo3Aak=-uU&NekFg9h>L;1jxUVV#&_AP6$V4zsOlpKnph4f6aX6cqLSX3z>y{X4 z-$*g)EV8VDJ1llvDUNI*Px$~4@^;_7y1C$oDp1hEyJyRqamxv|;Ckqp%=c1>NFe*RHgs#XR_-!8H#4W#ns4 zTY5_mZyF3mN*D+R_@EbD606G+Qu(7OPM|yaa)9ba7ooA&evB{}{TMvJCB|vfou;I= z#P-Cvaf^XKpSTL(w!ha5|5q}qteuI`F)NsdxPP0V@^Nnyf@+R zfP$h^S9e_P+FMC432wYL1X2#YMX7WBTSx&MvNiX=9`ak4$Meb!M%VrN{X|)vs_Gw* zqHn)YuK$C+XZRX5Frh%xnsQ-gJP`VZ#XIp(`MEHRgv|q4HcS~#WQ>V%lPrJl_=zq& z3M^kb|4wBwRgS{~Y!a6Js5qg80_q^e1(Yc?zXPF?bEJ*s3W7pPZIAabBL{?m(#CJ8J}-GcA;G1^i*QIxvS&u-@Iz5ZN<)r z{(14}(xX%nO-3n3(VKT=&36hbb}Odm+cGpo8Jt$GZg6=2nhvH)*um5*+d`{L!9s-A zr1Tze3J<0fGD|2c@_z=l_Ax?={iT1XRNPzJUM!}D!^vQn@sF|ji}C~Okq$&M7zccnw1KOeMo z2vR%Svo5AMo1QnWtj0rRKtFVWllfpwsNV|ZY7JdgzwsRJi$$!oH#HMhodKqOkT zq+2R5g(xpUJA=0(A*3$CRIrDy2;FsrTTdP3ZaW#3J(jKoU5+XSQw-02Un$Fmd#*wX z1_POF<_Leq3*S|J?;@*137%9VpE%Vhq61R2IhZvR7-A)XiBm4dgYn>#=-B#-OFkr0 z306K6Kap>n0J=vAVqslTxJ9V(>@5M*-uXP z@2vJ-CXXUq_pE^^IYvz2$T2G;A}r_Z57s(6@}FxS`P4_3vq@6D+h7AdV8+bSJC&}X z3AKQ!c5r0+nc|pxu~)lPcklJEe(Xmm7Yd~eg!0Mmx*rn2P=yJyzCL;M%IvRdn$x5S zE!?sb;IZ)h{02=6{T;OXeBOYy^1t@G^+Ki}|zyOt1wPM*3V z1#PdDHsvUqX?&ak1F3_@LOVWW^c(qlnCRwahvt#IsbptAHH29wOBb%2=SvLjY z#w52p>gQTyjcvw6kxq>4e^hk(Z&cIgOxiQm4`+Q8N8=r(S~*D(Ax)zh0!fIQdqL68 zHTUNSS9=R`I)OeXt@zeYPdoq~UuiQ&Q2BZUT1VG(kveJXf*9v?U;C1~1B%DVZ9xaL z$ui4~$&<9XduD-Kk$3A^nL$>>(A3&P9Mv{|ub(C_^C3kJ;A!lox74V=iLEN7D5l+D zackCH9+)L-++yGlX)*ew%O)CQvb=KcIaKWT{qmzx-{P1E5l~&KZPHb1oDX)z3JneL% z7HGc|EVHVh?84xiFy-=Cjuva-O_Yy8zO&GZCC|{vsEF$$0g*T1Ec(w855tPtWU6JY z`gF@5HFxUcP^a$O6e68kA{lZ4iN9efqsO{c|6qj%>utC&Y>W9oJv?9-3d)DK-GnG^ zub)RC0^oAw!cELSJj{obAP6%4F51EEQHfv?cC*zL@{T~Y7>u7`wJCP?O=tl6IUdr7`?0jmIhXCWQy|rEN!MGe5nS_alMFQWEEyDqbF2TJf#0TR}ywhc~`ku6vl&oH-sR%1fi)c4`})~NR;dCoN_1o97IYQL<% zZ@#&{E*UD$_4Y*DtMqdHiu)z|+thhnW_8`Q+1BmWQS?6Wc->z-kZRBBWJWB6&JLux zJS1MPJ(lJ-+qyBQ=R+=AJuxCAFm8YByh&?Deq|Zbu`5?CAX86bFR&hLPGJv%l$UDp zyNPg?c5uXKsEmyyh6I}N0+U580wUd3+|0xzEJFu@@UA#j<@lyU&5^g^Z9dlj9K4zm z@nDe&of%wkFAW>ha}?dr(VP{mfO(fW|8BD{jvAS&(V+%j7Q6E@totVLuu<3$r(GCe zmHn3?RXKBW)3c};tJ<=Os7I3LI^IjF8wpB|NQ<6kS*tXwU&ykUSzmO!&_tUVTtCLS zio$S-CM7L@QJ@OW6Hl`mR+^=9Am4S}`${Ql7YNLAvN{4OmDD_iTB9gKF_@K@dGCbP zeRYf+)8EPM-^}{~RJ?P|A(nln*%%9!Caw*p%~oQ|AxhKyTsUNY;eWVE|A%PyB^U9p zuYbX>7XOFAdUz4c*ti7rW{B$-Ul9KLtHjrtUvTgG3fBK`uoSQl|45}?!q0yI|E_?z MyLdShk4Ihl7k_DmEC2ui literal 0 HcmV?d00001 diff --git a/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-basic-ios-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-basic-ios-ltr-Mobile-Safari-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..2a35d7e437d925b07d39bc4316928b8902474942 GIT binary patch literal 6382 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 literal 0 HcmV?d00001 diff --git a/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-basic-md-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-basic-md-ltr-Mobile-Chrome-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..d826f72318276fa34e5fef3475c316d07405aac0 GIT binary patch literal 5743 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 I4*TtY0B4>_761SM literal 0 HcmV?d00001 diff --git a/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-basic-md-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-basic-md-ltr-Mobile-Safari-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..5f601dd4757aa18f794707c499054506c312a3a6 GIT binary patch literal 6483 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 TOP>S(7=c+~tuf`7zx(MwN6eO5 literal 0 HcmV?d00001 diff --git a/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-nav-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-nav-ios-ltr-Mobile-Chrome-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..eb8d2a12ff086d6a59fa6e31ccd24bae33290041 GIT binary patch literal 6493 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 ADgXcg literal 0 HcmV?d00001 diff --git a/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-nav-ios-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-nav-ios-ltr-Mobile-Safari-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..912aaec64b58b70cde29845f5769dfdd18229461 GIT binary patch literal 7871 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 Ge*ZV{bb=iK literal 0 HcmV?d00001 diff --git a/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-nav-md-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-nav-md-ltr-Mobile-Chrome-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..fe0a14a3bba6c4a2f5317d7110e318459e4006ce GIT binary patch literal 6822 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 N&e)xYRQ%z8=f4H8vCaSh literal 0 HcmV?d00001 diff --git a/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-nav-md-ltr-Mobile-Safari-linux.png b/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-nav-md-ltr-Mobile-Safari-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..9430111477d2b949dfdcd32e865628f1b9cb53bf GIT binary patch literal 8142 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 sb$gcYbzhOCr5Lu|1Uc3TNyN(BKC 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 literal 0 HcmV?d00001 diff --git a/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-overflow-md-ltr-Mobile-Chrome-linux.png b/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-overflow-md-ltr-Mobile-Chrome-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..72ab1dc9a83504b9a73e06100d000d9b46aad3d9 GIT binary patch literal 5736 zcmeI0YgCeHyT?hVoU(G7c1Kh9OfzGRQ#N@T4@r%t9koI+QM9H!1d5Xirij|X94m8r zd(}jdEK>nR3&}(gt<=l|DIfuYSqcg&DuM`t@8idJt-aQsHT%=MSKpp>KliiNbN#RT z`u(r_%0A`iyKc?)H6RdZ-O(f7XF#A8*&vV!|4S2KWu9X<4FY`yI_iBW;7aj?7+V_{ zVd$7yx8tkb_Lo+9ABuo|w2G}dap5}}H$G-R=W_drM8;XKPY)q?)_WD^;lGR!Rz|pV z_0Q%?D9?S7Ws2+VR;W8Llk|b+VsNiWmOKzi zq;9f<)`4EGjaf0$_rrhRb6$~MxB5ug$%Egj%b z|9z^ehj`^xVT^$Th|vd zq#NkGZyWctZ8JgUG2LQXQIaCRw$j}B{kiLeBuR1w0VALJF4trBNY5^0lct_!sJ3p@ zPc_=4X@|YC*2k_egbvkR>e^Gk!!i2Z<6O@agPO0Tu{|dZJvUH`+LcOKqCtc9ZW3lyO%*)lb zT!yygs_Brn-NjS;;rf=aE5por308Qif}W8^jguzw?&hYB?5th_S5pL`>WEJ{F4iun z&|DSUO;NRmQ+xi^U9eGm+@6^z?Jg9>*25#l%I^D-X95y>{nK?EA;f~{hDPMnMs`0q zEh6~GOOj=Q51tDVlwN)}q}qt}4ecKg4>=OO9`&2q4FgOcLn7sc*V8l{(|IB^PoJ zX!?)a^L%nDgtA1my7(%ztNdgU=Kc9B+?baQe&6|D;dWI7wx>SEd`zZ`84Re`Pu7Qv zjZ;Z1%4z>S@j;=8gN`Y4W7e_c7$-}*kEDSGeH|i3`cI1T*y8~^t6-1FE48rQHO_&h zDJOIpMoQek%Oc$b5LC~~M%WDLS6&HzjLxvVOt7`E@oW-Yk&`Oi=Ivp1m8hcCF!!VE z1M`FFDSZyTzdS}+xQ_gpz0uYgizpkYBA6QBLwAbsnPsqjy6G%%s3q7qlZ))D*qjZB zRKsXYU6}2?Pw_-o@|b5Ol3K8@Gjl&liU9BEBHPL#q{-hK|H z1T=@lEh@+H&SKoWxOysgJvT-X=#OlN6okef-LsX>DB6$H%|Vl%W5j4aG)bx%OkfMO z0(Kfy0iom5`0ylNW`o8dK#aF#jpm1taq6|Q;sih1+Myd?kMVVpethTOUjG3bMy>Mh zndMO2X5Z|Tv5DZQ-eTB3gtBU|`1hBqubWw*rmWH2)3hjd+H9vS@*9$X6U?~9KV)V# zcb~X8@(k6}Tk4fHKwflUdvJi=`r@~P-GvTFC+00$=MP2P!z~)tHdLw{LUfZpxX^xQ8^o0&+6^h^ z9;w!_3GVg4!8YyA$T-*>vi|QN?%%*zi3F&^1}`msY`b0XQ}DCI@%~XU45a95LBZj0 z%b42McR*z8EH$$Ow>H_W0K+8<$LdK zU7-kesG#KBI)j}gQGN^9SuU(JB_z1rGZ`TD_CeH@0*K{O7#7&P!x?2Vz|y=R@vKM% z%EYwjmQmLa>5p)&)CT=*F;)Hc6!~OPhPtYwU)zPflb5k;DeS+LO`N0E8R~PRT1Upf z+zOE5YP!Pwe>8*WcU%%A1Uc3dm!{g8>+uXAMUBym%8-*&-i-A<)-M(YX-4k*hsAe( z9~726`ZCj8vB}KBdeE~jy6@4@qSOUF)@o+613;vTnSxCC@~kfdrfAEyEqT$lIVALQ z+ooy>{s0zpAa!=66JRmC?UKvj@2>!_fH`e*$HW}CsGT0>ho>9dB{O&3xB<#${gfz8 zKPl@jq)k2-h2hk^qS)ubH5Mxry(xGO{P)(CQ3Ny;xo7Zlht;MRZMV17d@KftwJ4E0KDNT<4^3Fb7yF@n+^bmi9*>TuopZ(m=M+d;OC^N zK^=kUiPMpZ3tWhQYU8Fououo*&4$T1eh~|>QVJBP++I@)k9QL_ zgm8mA2x;%@VhWxl=9xf4>_q_z-%lO6HP5&;qwYfsz4!@7z1_M`?K%4Xg64qW zg^ycU+U9wta=d~_HGmg~EffV!t`$;mz-PpQD5Bw=mj%wKB7%Xk`|%7VO)3`x-W6i$ zGL)(UsK@a*x~aCKQFuPf3R-m*FavDeJQswR7bnG`mpG$qeyfh6TktT4YZvx1!*-A- zIsRa#B;D{}N!tN#){B(`WlDg9)dnY}zSSaaI4OhD1R>; z#;c4di0H}>j7EHw*uE`_Yh3odqPXVd%*UJWEHlI{;QH;}Q4RhgZrD8hJ%Un=YMN<> zxstP#bbgq>$INRW3qdR$FIh%N8oB2S{opK4OR<)4d{Jb4UKNdJj zZVkw!`<&?svNolV3RwH}N>)0}I+T^a3BRC{)ia_HPIA(2|Ag-;1Euq#I2OJK?OEG? z%*llO&hfZVJq=`x-fjg*99CJ#?eNq*z3=BnS`}VBHNuo%3M5Lb5YF-*zP>6)9<&aW z>n5)R)UJXWkUfe&cHaF(^Zvq;x+a}B+3T(xG#T)=S!6e*xrSdE&J;#(4)vVL_D{6N ziA0it+?nW_ptCuyxU#}xOLRzQt4DxFzv^S^eGH*cm4W$x9AToSJ8R3 z9b=Jz2Ul&X)QACLnfY?Q^b|!8F`t|i(4zR?2EcbzO}-V#Jm(wi(-*pkhKVR-VGPd( z2Z9b1#FCu~c8d|N4 zfX=aznKim?*UsGbOxM1$S?DHtBtj4sRlDuKi)v+(&Gy!c7OzPY3Xp)_?_i zEKmIejkRP@hKP?lpd%&$)>8inxGCQPEVHRO+i`ccJISw^@2yObkHDUwdTUCddya_t zu{?Gtrv;}G$fQMa#t~a^Fk3}UVp9B2>3d60+s4)P`Pi|BQ!IRKaEa?kh%Xb23o;k? zWf-MUP9951s+6>7L~-CaNz+R6&0O(3@COBOOfd6mxN){XeLbiRfe6+Y+1&~3mU7m% z$hX$sHAc1;yC#s`d)Caol^?eAapC~{o&eCMa1%T6Lsj8K+RGq+{c`smSb&8>;J;85 z*^hm5QJ#Jc&RO_>q!|?9ME4|=x_+}3*XcHwhgO#s0RS8ZTj77c;FCix_aneKbqZ=D zwcV5AI!X#GBVdFiI>ska@yg5TrVs#r$U&mcCe`;?j=g-1@XfuQ9XXaR=U?7n5F9U^ zF@N}qf#+1i;1aT(0-Z@+WrY?{h<=$Upd}rCl@-@8n!o2^jUi6>MJ=Lv{_Fp9AMuwj zSpU|2eE#ZhT~hxeG=!#!)`CE*HZ0Eq{>DZ8KO)A@as8E<%I8%6#o^Oup*{=s{~Rd> p8(>VlwDc64)dD=MS~dq$&{w|_XZKm0V*o3lqlf*xslT4P_Ah{nn*0C& literal 0 HcmV?d00001 diff --git a/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-overflow-md-ltr-Mobile-Firefox-linux.png b/core/src/components/modal/test/content-height/modal.e2e.ts-snapshots/modal-content-height-overflow-md-ltr-Mobile-Firefox-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..9aeb4618795a20752a820b5d27430daa2506518b GIT binary patch literal 6203 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 dhTka>x80T0miSXAM$V^yr`)aQi+Pij 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 literal 0 HcmV?d00001