From 175396813ba12a1a40ba0356ca1fde89e039c37b Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Tue, 2 Jun 2026 16:00:54 -0400 Subject: [PATCH 01/13] feat(gallery): support CSS variables in gap --- core/src/components.d.ts | 4 ++-- core/src/components/gallery/gallery.tsx | 18 ++++++++++++------ core/src/utils/css-value-validation.ts | 16 ++++++++++++++++ 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/core/src/components.d.ts b/core/src/components.d.ts index c47221f63cb..302c22a4b27 100644 --- a/core/src/components.d.ts +++ b/core/src/components.d.ts @@ -1478,7 +1478,7 @@ export namespace Components { */ "columns": GalleryColumns; /** - * The space between gallery items. Accepts valid CSS [length-percentage](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/length-percentage) values like `16px`, `1rem`, `20%`, math functions like `calc(10px + 20%)`, or numbers (treated as pixel values). Can also be set as a breakpoint map (e.g. `{ xs: '8px', sm: '1rem', md: '24px' }`). Does not accept space-separated values or CSS keyword values like `inherit`, `auto`, etc. + * The space between gallery items. Accepts valid CSS [length-percentage](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/length-percentage) values like `16px`, `1rem`, `20%`, math functions like `calc(10px + 20%)`, CSS variables like `var(--app-gallery-gap)`, or numbers (treated as pixel values). Can also be set as a breakpoint map (e.g. `{ xs: '8px', sm: '1rem', md: '24px' }`). Does not accept space-separated values or CSS keyword values like `inherit`, `auto`, etc. * @default DEFAULT_GAP */ "gap": GalleryGap; @@ -7526,7 +7526,7 @@ declare namespace LocalJSX { */ "columns"?: GalleryColumns; /** - * The space between gallery items. Accepts valid CSS [length-percentage](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/length-percentage) values like `16px`, `1rem`, `20%`, math functions like `calc(10px + 20%)`, or numbers (treated as pixel values). Can also be set as a breakpoint map (e.g. `{ xs: '8px', sm: '1rem', md: '24px' }`). Does not accept space-separated values or CSS keyword values like `inherit`, `auto`, etc. + * The space between gallery items. Accepts valid CSS [length-percentage](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/length-percentage) values like `16px`, `1rem`, `20%`, math functions like `calc(10px + 20%)`, CSS variables like `var(--app-gallery-gap)`, or numbers (treated as pixel values). Can also be set as a breakpoint map (e.g. `{ xs: '8px', sm: '1rem', md: '24px' }`). Does not accept space-separated values or CSS keyword values like `inherit`, `auto`, etc. * @default DEFAULT_GAP */ "gap"?: GalleryGap; diff --git a/core/src/components/gallery/gallery.tsx b/core/src/components/gallery/gallery.tsx index acaba155ac2..61d56ef6d07 100644 --- a/core/src/components/gallery/gallery.tsx +++ b/core/src/components/gallery/gallery.tsx @@ -1,6 +1,6 @@ import type { ComponentInterface } from '@stencil/core'; import { Component, Element, Host, Listen, Prop, Watch, h } from '@stencil/core'; -import { isValidLengthPercentage } from '@utils/css-value-validation'; +import { isCssVariable, isValidLengthPercentage } from '@utils/css-value-validation'; import { raf } from '@utils/helpers'; import { printIonWarning } from '@utils/logging'; @@ -79,7 +79,8 @@ export class Gallery implements ComponentInterface { /** * The space between gallery items. Accepts valid CSS [length-percentage](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/length-percentage) * values like `16px`, `1rem`, `20%`, math functions like `calc(10px + 20%)`, - * or numbers (treated as pixel values). Can also be set as a breakpoint map + * CSS variables like `var(--app-gallery-gap)`, or numbers (treated as pixel + * values). Can also be set as a breakpoint map * (e.g. `{ xs: '8px', sm: '1rem', md: '24px' }`). Does not accept * space-separated values or CSS keyword values like `inherit`, `auto`, etc. */ @@ -201,9 +202,10 @@ export class Gallery implements ComponentInterface { } /** - * Normalize a single gap value (`gap` as a number, string, or one entry from - * a `gap` breakpoint map) to a CSS length string. Returns `undefined` when - * the input cannot be interpreted as a valid CSS length. + * Normalize a single gap value (`gap` as a number, a string such as a CSS + * length-percentage or `var()` reference, or one entry from a `gap` + * breakpoint map) to a CSS length string. Returns `undefined` when the + * input cannot be interpreted as a valid CSS length or `var()` reference. */ private sanitizeGap(gap: number | string | undefined): string | undefined { if (gap === undefined) { @@ -224,6 +226,10 @@ export class Gallery implements ComponentInterface { return undefined; } + if (isCssVariable(normalizedGap)) { + return normalizedGap; + } + const isValidCssLength = isValidLengthPercentage(normalizedGap); return isValidCssLength ? normalizedGap : undefined; @@ -346,7 +352,7 @@ export class Gallery implements ComponentInterface { printIonWarning( `[ion-gallery] - Invalid "gap" value (${JSON.stringify( gap - )}). Expected a non-negative number, CSS length string, or breakpoint map object (e.g. { xs: 8, md: "1rem" }).`, + )}). Expected a non-negative number, CSS length string, CSS variable (e.g. var(--app-gap)), or breakpoint map object (e.g. { xs: 8, md: "1rem" }).`, this.el ); this.hasWarnedInvalidGap = true; diff --git a/core/src/utils/css-value-validation.ts b/core/src/utils/css-value-validation.ts index b53c933ae85..e82e9c6a7a1 100644 --- a/core/src/utils/css-value-validation.ts +++ b/core/src/utils/css-value-validation.ts @@ -9,6 +9,10 @@ const LENGTH_PERCENTAGE_PATTERN = /^[-+]?(?:\d+\.?\d*|\.\d+)(?:%|[a-z]+)$/i; // Matches simple `calc` / `min` / `max` / `clamp(...)` functions. const MATH_FUNCTION_PATTERN = /^(calc|min|max|clamp)\s*\(.+\)$/i; +// Matches a `var(--name)` reference with an optional fallback, e.g. +// `var(--my-gap)` or `var(--my-gap, 16px)`. +const VAR_FUNCTION_PATTERN = /^var\(\s*--[^\s,)]+\s*(?:,[\s\S]*)?\)$/i; + /** * Returns whether `value` matches the [length-percentage](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/length-percentage) * syntax. Accepts `` (`` + unit identifier) or `` (`%`). @@ -24,3 +28,15 @@ export function isValidLengthPercentage(value: string): boolean { return MATH_FUNCTION_PATTERN.test(v) || LENGTH_PERCENTAGE_PATTERN.test(v); } + +/** + * Returns whether `value` is a single [`var()`](https://developer.mozilla.org/en-US/docs/Web/CSS/var) + * reference, e.g. `var(--my-token)` or `var(--my-token, 16px)`. The referenced + * custom property is resolved by the browser, so the resolved value is not + * validated here. + * + * @param value String value to validate. + */ +export function isCssVariable(value: string): boolean { + return VAR_FUNCTION_PATTERN.test(value.trim()); +} From 27f80d00ca10f17fcd47e8d12f0ffebf380212a8 Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Tue, 2 Jun 2026 17:35:22 -0400 Subject: [PATCH 02/13] test(gallery): add spec test for css variables in gap --- core/src/components/gallery/gallery.spec.ts | 107 ++++++++++++++++++++ 1 file changed, 107 insertions(+) diff --git a/core/src/components/gallery/gallery.spec.ts b/core/src/components/gallery/gallery.spec.ts index 321d0024441..609bf22dc5e 100644 --- a/core/src/components/gallery/gallery.spec.ts +++ b/core/src/components/gallery/gallery.spec.ts @@ -390,6 +390,26 @@ describe('gallery', () => { expect((sharedGallery as any).sanitizeGap('clamp(10px, 20%, 30px)')).toBe('clamp(10px, 20%, 30px)'); }); + it('should return undefined for malformed math functions', () => { + const malformedValues = ['calc', 'calc(', 'calc()', 'min(', 'clamp(', 'calc(10px + 20px']; + malformedValues.forEach((value) => { + expect((sharedGallery as any).sanitizeGap(value)).toBeUndefined(); + }); + }); + + it('should return the string for CSS variables', () => { + expect((sharedGallery as any).sanitizeGap('var(--app-gap)')).toBe('var(--app-gap)'); + expect((sharedGallery as any).sanitizeGap('var(--app-gap, 16px)')).toBe('var(--app-gap, 16px)'); + expect((sharedGallery as any).sanitizeGap(' var(--app-gap) ')).toBe('var(--app-gap)'); + }); + + it('should return undefined for malformed CSS variables', () => { + const malformedValues = ['var(--app-gap. 16px)', 'var(--app-gap', 'var()', 'var(16px)']; + malformedValues.forEach((value) => { + expect((sharedGallery as any).sanitizeGap(value)).toBeUndefined(); + }); + }); + it('should return the px value for positive integers', () => { expect((sharedGallery as any).sanitizeGap(0)).toBe('0px'); expect((sharedGallery as any).sanitizeGap('0')).toBe('0px'); @@ -613,6 +633,93 @@ describe('gallery', () => { }); }); + it('should resolve to the CSS variable for each breakpoint without warning when gap is a CSS variable', () => { + const breakpoints = DEFAULT_BREAKPOINTS; + const warningSpy = jest.spyOn(logging, 'printIonWarning').mockImplementation(() => {}); + + sharedGallery.gap = 'var(--app-gap)'; + + breakpoints.forEach(({ width }) => { + expect((sharedGallery as any).getGapForWidth(width)).toBe('var(--app-gap)'); + }); + + expect(warningSpy).not.toHaveBeenCalled(); + + warningSpy.mockRestore(); + }); + + it('should resolve to the CSS variable for breakpoints that set one when gap is a breakpoint map', () => { + const breakpoints = [ + { width: 0, expectedGap: DEFAULT_GAP }, + { width: 575, expectedGap: DEFAULT_GAP }, + { width: 576, expectedGap: DEFAULT_GAP }, + { width: 767, expectedGap: DEFAULT_GAP }, + { width: 768, expectedGap: 'var(--app-gap)' }, + { width: 991, expectedGap: 'var(--app-gap)' }, + { width: 992, expectedGap: DEFAULT_GAP }, + { width: 1199, expectedGap: DEFAULT_GAP }, + { width: 1200, expectedGap: DEFAULT_GAP }, + { width: 1399, expectedGap: DEFAULT_GAP }, + { width: 1400, expectedGap: DEFAULT_GAP }, + ]; + const warningSpy = jest.spyOn(logging, 'printIonWarning').mockImplementation(() => {}); + + sharedGallery.gap = { md: 'var(--app-gap)' }; + + breakpoints.forEach(({ width, expectedGap }) => { + expect((sharedGallery as any).getGapForWidth(width)).toBe(expectedGap); + }); + + expect(warningSpy).not.toHaveBeenCalled(); + + warningSpy.mockRestore(); + }); + + it('should resolve a breakpoint map mixing CSS variables, literals, and unset (default) breakpoints', () => { + const breakpoints = [ + { width: 0, expectedGap: '8px' }, + { width: 575, expectedGap: '8px' }, + { width: 576, expectedGap: 'var(--g-sm)' }, + { width: 767, expectedGap: 'var(--g-sm)' }, + { width: 768, expectedGap: 'var(--g-md)' }, + { width: 991, expectedGap: 'var(--g-md)' }, + { width: 992, expectedGap: DEFAULT_GAP }, + { width: 1199, expectedGap: DEFAULT_GAP }, + { width: 1200, expectedGap: '2rem' }, + { width: 1399, expectedGap: '2rem' }, + { width: 1400, expectedGap: DEFAULT_GAP }, + ]; + const warningSpy = jest.spyOn(logging, 'printIonWarning').mockImplementation(() => {}); + + sharedGallery.gap = { xs: '8px', sm: 'var(--g-sm)', md: 'var(--g-md)', xl: '2rem' }; + + breakpoints.forEach(({ width, expectedGap }) => { + expect((sharedGallery as any).getGapForWidth(width)).toBe(expectedGap); + }); + + expect(warningSpy).not.toHaveBeenCalled(); + + warningSpy.mockRestore(); + }); + + it('should warn and fallback to the default gap when gap is a malformed CSS variable', () => { + const breakpoints = DEFAULT_BREAKPOINTS; + const warningSpy = jest.spyOn(logging, 'printIonWarning').mockImplementation(() => {}); + + sharedGallery.gap = 'var(--app-gap. 16px)'; + + breakpoints.forEach(({ width, expectedGap }) => { + expect((sharedGallery as any).getGapForWidth(width)).toBe(expectedGap); + }); + + expect(warningSpy).toHaveBeenCalledWith( + expect.stringContaining('[ion-gallery] - Invalid "gap" value ("var(--app-gap. 16px)").'), + el + ); + + warningSpy.mockRestore(); + }); + it('should resolve to the proper gap when the gap property is set to an out of order object', () => { const breakpoints = [ { width: 0, expectedGap: '8px' }, From d8e1a89804b1138ce23803a02fc7a7a2f6e4e1c8 Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Tue, 2 Jun 2026 17:38:08 -0400 Subject: [PATCH 03/13] test(gallery): add e2e test for css variables in gap --- .../gallery/test/basic/gallery.e2e.ts | 103 +++++++++++++++++- .../gallery/test/layout/gallery.e2e.ts | 35 ++++++ 2 files changed, 132 insertions(+), 6 deletions(-) diff --git a/core/src/components/gallery/test/basic/gallery.e2e.ts b/core/src/components/gallery/test/basic/gallery.e2e.ts index 71ea1ac2317..75570e80e1c 100644 --- a/core/src/components/gallery/test/basic/gallery.e2e.ts +++ b/core/src/components/gallery/test/basic/gallery.e2e.ts @@ -1,13 +1,15 @@ import { expect } from '@playwright/test'; import { configs, test } from '@utils/test/playwright'; +import { DEFAULT_COLUMNS, DEFAULT_GAP } from '../../gallery-constants'; + const DEFAULT_COLUMNS_BREAKPOINTS = [ - { name: 'xs', width: 384, expectedColumns: 2 }, - { name: 'sm', width: 576, expectedColumns: 3 }, - { name: 'md', width: 768, expectedColumns: 4 }, - { name: 'lg', width: 992, expectedColumns: 6 }, - { name: 'xl', width: 1200, expectedColumns: 8 }, - { name: 'xxl', width: 1400, expectedColumns: 10 }, + { name: 'xs', width: 384, expectedColumns: DEFAULT_COLUMNS.xs }, + { name: 'sm', width: 576, expectedColumns: DEFAULT_COLUMNS.sm }, + { name: 'md', width: 768, expectedColumns: DEFAULT_COLUMNS.md }, + { name: 'lg', width: 992, expectedColumns: DEFAULT_COLUMNS.lg }, + { name: 'xl', width: 1200, expectedColumns: DEFAULT_COLUMNS.xl }, + { name: 'xxl', width: 1400, expectedColumns: DEFAULT_COLUMNS.xxl }, ]; /** @@ -121,6 +123,95 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t ) .toBe(`${breakpoint.expectedColumns}`); }); + + test(`should resolve the default gap value on ${breakpoint.name} screens`, async ({ page }) => { + await page.setViewportSize({ width: breakpoint.width, height: 900 }); + + await page.setContent( + ` + + One + Two + Three + Four + + `, + config + ); + + const gallery = page.locator('ion-gallery'); + + await expect.poll(() => gallery.evaluate((el) => getComputedStyle(el).rowGap)).toBe(DEFAULT_GAP); + await expect.poll(() => gallery.evaluate((el) => getComputedStyle(el).columnGap)).toBe(DEFAULT_GAP); + }); + + test(`should resolve the gap CSS variable on ${breakpoint.name} screens`, async ({ page }) => { + await page.setViewportSize({ width: breakpoint.width, height: 900 }); + + await page.setContent( + ` + + One + Two + Three + Four + + `, + config + ); + + const gallery = page.locator('ion-gallery'); + + await expect.poll(() => gallery.evaluate((el) => getComputedStyle(el).rowGap)).toBe('24px'); + await expect.poll(() => gallery.evaluate((el) => getComputedStyle(el).columnGap)).toBe('24px'); + }); + + test(`should resolve a gap breakpoint map of CSS variables on ${breakpoint.name} screens`, async ({ page }) => { + await page.setViewportSize({ width: breakpoint.width, height: 900 }); + + await page.setContent( + ` + + One + Two + Three + Four + + `, + config + ); + + const gallery = page.locator('ion-gallery'); + + // Breakpoint maps are objects, so they are set as a property rather + // than an attribute. + await gallery.evaluate((el) => { + (el as HTMLIonGalleryElement).gap = { + xs: 'var(--g-xs)', + sm: 'var(--g-sm)', + md: 'var(--g-md)', + lg: 'var(--g-lg)', + xl: 'var(--g-xl)', + xxl: 'var(--g-xxl)', + }; + }); + + // The resolved gap for each breakpoint, matching the variables set in + // the style above. + const expectedGap: Record = { + xs: '2px', + sm: '4px', + md: '8px', + lg: '16px', + xl: '24px', + xxl: '32px', + }; + + // Each breakpoint resolves its own gap variable. + await expect + .poll(() => gallery.evaluate((el) => getComputedStyle(el).rowGap)) + .toBe(expectedGap[breakpoint.name]); + }); }); }); }); diff --git a/core/src/components/gallery/test/layout/gallery.e2e.ts b/core/src/components/gallery/test/layout/gallery.e2e.ts index 2ed856602ed..407648cebfd 100644 --- a/core/src/components/gallery/test/layout/gallery.e2e.ts +++ b/core/src/components/gallery/test/layout/gallery.e2e.ts @@ -366,4 +366,39 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t }); }); }); + + test.describe(title('gallery: masonry gap'), () => { + test('should resolve the gap CSS variable in the masonry layout', async ({ page }) => { + await page.setViewportSize({ width: 768, height: 900 }); + + // Twelve items so the first item is never the last in its column, whose + // bottom margin masonry zeroes out to remove trailing space. + await page.setContent( + ` + +
One
+
Two
+
Three
+
Four
+
Five
+
Six
+
Seven
+
Eight
+
Nine
+
Ten
+
Eleven
+
Twelve
+
+ `, + config + ); + + const gallery = page.locator('ion-gallery'); + + // In the masonry layout the gap variable drives the column gap + // and the spacing below items (margin bottom). + await expect.poll(() => gallery.evaluate((el) => getComputedStyle(el).columnGap)).toBe('24px'); + await expect.poll(() => gallery.evaluate((el) => getComputedStyle(el.children[0]).marginBottom)).toBe('24px'); + }); + }); }); From caf9565923007cbbf77386d12aa5069f9d4a2e8e Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Thu, 4 Jun 2026 14:20:16 -0400 Subject: [PATCH 04/13] test(gallery): add a test for gap making sure the css var fallback works --- .../gallery/test/basic/gallery.e2e.ts | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/core/src/components/gallery/test/basic/gallery.e2e.ts b/core/src/components/gallery/test/basic/gallery.e2e.ts index 75570e80e1c..460c7228881 100644 --- a/core/src/components/gallery/test/basic/gallery.e2e.ts +++ b/core/src/components/gallery/test/basic/gallery.e2e.ts @@ -213,5 +213,28 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t .toBe(expectedGap[breakpoint.name]); }); }); + + test('should resolve the gap CSS variable fallback when the variable is not defined', async ({ page }) => { + await page.setViewportSize({ width: 768, height: 900 }); + + // The CSS variable `--app-gap` is never declared, so the browser + // resolves the var() fallback (8px). + await page.setContent( + ` + + One + Two + Three + Four + + `, + config + ); + + const gallery = page.locator('ion-gallery'); + + await expect.poll(() => gallery.evaluate((el) => getComputedStyle(el).rowGap)).toBe('8px'); + await expect.poll(() => gallery.evaluate((el) => getComputedStyle(el).columnGap)).toBe('8px'); + }); }); }); From bdeef48a44ca1e4147ebaeac339305fad31f90d3 Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Fri, 5 Jun 2026 10:43:46 -0400 Subject: [PATCH 05/13] feat(gallery-item): add new gallery item component --- core/api.txt | 4 + core/src/components.d.ts | 29 +++++ .../components/gallery-item/gallery-item.scss | 50 ++++++++ .../components/gallery-item/gallery-item.tsx | 107 +++++++++++++++++ core/src/components/gallery/gallery.scss | 42 +------ core/src/components/gallery/gallery.tsx | 111 ++++++++++++++++-- .../angular/src/directives/proxies-list.ts | 1 + packages/angular/src/directives/proxies.ts | 22 ++++ .../standalone/src/directives/proxies.ts | 25 ++++ packages/react/src/components/proxies.ts | 2 + packages/vue/src/proxies.ts | 4 + 11 files changed, 350 insertions(+), 47 deletions(-) create mode 100644 core/src/components/gallery-item/gallery-item.scss create mode 100644 core/src/components/gallery-item/gallery-item.tsx diff --git a/core/api.txt b/core/api.txt index dafa0080ccf..76779d7f0d4 100644 --- a/core/api.txt +++ b/core/api.txt @@ -905,6 +905,10 @@ ion-gallery,prop,mode,"ios" | "md",undefined,false,false ion-gallery,prop,order,"best-fit" | "sequential" | undefined,undefined,false,false ion-gallery,prop,theme,"ios" | "md" | "ionic",undefined,false,false +ion-gallery-item,shadow +ion-gallery-item,prop,mode,"ios" | "md",undefined,false,false +ion-gallery-item,prop,theme,"ios" | "md" | "ionic",undefined,false,false + ion-grid,shadow ion-grid,prop,fixed,boolean,false,false,false ion-grid,prop,mode,"ios" | "md",undefined,false,false diff --git a/core/src/components.d.ts b/core/src/components.d.ts index 302c22a4b27..9dc80144edd 100644 --- a/core/src/components.d.ts +++ b/core/src/components.d.ts @@ -1500,6 +1500,16 @@ export namespace Components { */ "theme"?: "ios" | "md" | "ionic"; } + interface IonGalleryItem { + /** + * The mode determines the platform behaviors of the component. + */ + "mode"?: "ios" | "md"; + /** + * The theme determines the visual appearance of the component. + */ + "theme"?: "ios" | "md" | "ionic"; + } interface IonGrid { /** * If `true`, the grid will have a fixed width based on the screen size. @@ -5046,6 +5056,12 @@ declare global { prototype: HTMLIonGalleryElement; new (): HTMLIonGalleryElement; }; + interface HTMLIonGalleryItemElement extends Components.IonGalleryItem, HTMLStencilElement { + } + var HTMLIonGalleryItemElement: { + prototype: HTMLIonGalleryItemElement; + new (): HTMLIonGalleryItemElement; + }; interface HTMLIonGridElement extends Components.IonGrid, HTMLStencilElement { } var HTMLIonGridElement: { @@ -6004,6 +6020,7 @@ declare global { "ion-fab-list": HTMLIonFabListElement; "ion-footer": HTMLIonFooterElement; "ion-gallery": HTMLIonGalleryElement; + "ion-gallery-item": HTMLIonGalleryItemElement; "ion-grid": HTMLIonGridElement; "ion-header": HTMLIonHeaderElement; "ion-img": HTMLIonImgElement; @@ -7548,6 +7565,16 @@ declare namespace LocalJSX { */ "theme"?: "ios" | "md" | "ionic"; } + interface IonGalleryItem { + /** + * The mode determines the platform behaviors of the component. + */ + "mode"?: "ios" | "md"; + /** + * The theme determines the visual appearance of the component. + */ + "theme"?: "ios" | "md" | "ionic"; + } interface IonGrid { /** * If `true`, the grid will have a fixed width based on the screen size. @@ -11539,6 +11566,7 @@ declare namespace LocalJSX { "ion-fab-list": Omit & { [K in keyof IonFabList & keyof IonFabListAttributes]?: IonFabList[K] } & { [K in keyof IonFabList & keyof IonFabListAttributes as `attr:${K}`]?: IonFabListAttributes[K] } & { [K in keyof IonFabList & keyof IonFabListAttributes as `prop:${K}`]?: IonFabList[K] }; "ion-footer": Omit & { [K in keyof IonFooter & keyof IonFooterAttributes]?: IonFooter[K] } & { [K in keyof IonFooter & keyof IonFooterAttributes as `attr:${K}`]?: IonFooterAttributes[K] } & { [K in keyof IonFooter & keyof IonFooterAttributes as `prop:${K}`]?: IonFooter[K] }; "ion-gallery": Omit & { [K in keyof IonGallery & keyof IonGalleryAttributes]?: IonGallery[K] } & { [K in keyof IonGallery & keyof IonGalleryAttributes as `attr:${K}`]?: IonGalleryAttributes[K] } & { [K in keyof IonGallery & keyof IonGalleryAttributes as `prop:${K}`]?: IonGallery[K] }; + "ion-gallery-item": IonGalleryItem; "ion-grid": Omit & { [K in keyof IonGrid & keyof IonGridAttributes]?: IonGrid[K] } & { [K in keyof IonGrid & keyof IonGridAttributes as `attr:${K}`]?: IonGridAttributes[K] } & { [K in keyof IonGrid & keyof IonGridAttributes as `prop:${K}`]?: IonGrid[K] }; "ion-header": Omit & { [K in keyof IonHeader & keyof IonHeaderAttributes]?: IonHeader[K] } & { [K in keyof IonHeader & keyof IonHeaderAttributes as `attr:${K}`]?: IonHeaderAttributes[K] } & { [K in keyof IonHeader & keyof IonHeaderAttributes as `prop:${K}`]?: IonHeader[K] }; "ion-img": Omit & { [K in keyof IonImg & keyof IonImgAttributes]?: IonImg[K] } & { [K in keyof IonImg & keyof IonImgAttributes as `attr:${K}`]?: IonImgAttributes[K] } & { [K in keyof IonImg & keyof IonImgAttributes as `prop:${K}`]?: IonImg[K] }; @@ -11644,6 +11672,7 @@ declare module "@stencil/core" { "ion-fab-list": LocalJSX.IntrinsicElements["ion-fab-list"] & JSXBase.HTMLAttributes; "ion-footer": LocalJSX.IntrinsicElements["ion-footer"] & JSXBase.HTMLAttributes; "ion-gallery": LocalJSX.IntrinsicElements["ion-gallery"] & JSXBase.HTMLAttributes; + "ion-gallery-item": LocalJSX.IntrinsicElements["ion-gallery-item"] & JSXBase.HTMLAttributes; "ion-grid": LocalJSX.IntrinsicElements["ion-grid"] & JSXBase.HTMLAttributes; "ion-header": LocalJSX.IntrinsicElements["ion-header"] & JSXBase.HTMLAttributes; "ion-img": LocalJSX.IntrinsicElements["ion-img"] & JSXBase.HTMLAttributes; diff --git a/core/src/components/gallery-item/gallery-item.scss b/core/src/components/gallery-item/gallery-item.scss new file mode 100644 index 00000000000..991fb86203f --- /dev/null +++ b/core/src/components/gallery-item/gallery-item.scss @@ -0,0 +1,50 @@ +@use "../../themes/native/native.globals" as globals; + +// Gallery Item +// -------------------------------------------------- + +:host { + display: block; +} + +// Slotted content +// -------------------------------------------------- + +// Reset the default margin for slotted elements so wrapper elements +// (such as
) align properly with other gallery items. +::slotted(*) { + @include globals.margin(0); + + width: 100%; +} + +::slotted(img) { + display: block; + + object-fit: cover; + object-position: center; +} + +// Layout: Uniform +// -------------------------------------------------- + +// In the uniform layout each cell is square by default. The aspect ratio is +// applied to the slotted content (rather than the item) so that an explicit +// height on the content takes precedence — a set `height` overrides +// `aspect-ratio` on the same element. The item then sizes to its content, +// allowing items with an explicit height to opt out of the square. +:host(.in-gallery-layout-uniform) ::slotted(*) { + aspect-ratio: 1 / 1; +} + +// Layout: Masonry +// -------------------------------------------------- + +:host(.in-gallery-layout-masonry) { + // Clear min-height so items size to their content + min-height: unset; + + // The spacing between stacked items. Applies to all items except + // for the last item in each column to remove any trailing space. + margin-bottom: var(--internal-gallery-gap, 16px); +} diff --git a/core/src/components/gallery-item/gallery-item.tsx b/core/src/components/gallery-item/gallery-item.tsx new file mode 100644 index 00000000000..e3feadcc19a --- /dev/null +++ b/core/src/components/gallery-item/gallery-item.tsx @@ -0,0 +1,107 @@ +import type { ComponentInterface } from '@stencil/core'; +import { Component, Element, Host, State, h } from '@stencil/core'; +import { printIonWarning } from '@utils/logging'; + +import { getIonTheme } from '../../global/ionic-global'; + +/** + * @virtualProp {"ios" | "md"} mode - The mode determines the platform behaviors of the component. + * @virtualProp {"ios" | "md" | "ionic"} theme - The theme determines the visual appearance of the component. + * + * @slot - The content placed inside of the gallery item. This is typically an + * `img`, but can be any element (e.g. a `figure` wrapping an image and caption). + */ +@Component({ + tag: 'ion-gallery-item', + styleUrl: 'gallery-item.scss', + shadow: true, +}) +export class GalleryItem implements ComponentInterface { + private hasWarnedInvalidParent = false; + private galleryEl?: HTMLIonGalleryElement; + private galleryClassObserver?: MutationObserver; + + @Element() el!: HTMLIonGalleryItemElement; + + /** + * The layout of the parent `ion-gallery`, mirrored as a class so the item + * can apply layout-specific styles (e.g. a square aspect ratio in the + * `uniform` layout, a bottom margin in the `masonry` layout). + */ + @State() galleryLayout?: 'uniform' | 'masonry'; + + componentWillLoad() { + this.galleryEl = this.el.closest('ion-gallery') ?? undefined; + this.syncLayoutClasses(); + } + + componentDidLoad() { + this.watchGalleryLayoutClasses(); + this.warnInvalidParent(); + } + + disconnectedCallback() { + this.galleryClassObserver?.disconnect(); + this.galleryClassObserver = undefined; + this.galleryEl = undefined; + } + + private onSlotChange = () => { + this.warnInvalidParent(); + }; + + /** + * Warn when the item is not a descendant of an `ion-gallery`. + */ + private warnInvalidParent() { + if (this.hasWarnedInvalidParent || this.galleryEl !== undefined) { + return; + } + + printIonWarning( + '[ion-gallery-item] - This component should be used as a child of an "ion-gallery" component.', + this.el + ); + this.hasWarnedInvalidParent = true; + } + + /** + * Watch the parent gallery's class list so the item can react to layout + * changes (the gallery reflects its layout as a `gallery-layout-*` class). + */ + private watchGalleryLayoutClasses() { + const galleryEl = this.galleryEl; + if (galleryEl === undefined) { + return; + } + + this.galleryClassObserver?.disconnect(); + this.galleryClassObserver = new MutationObserver(() => this.syncLayoutClasses()); + this.galleryClassObserver.observe(galleryEl, { + attributes: true, + attributeFilter: ['class'], + }); + } + + private syncLayoutClasses() { + const layout = this.galleryEl?.layout; + this.galleryLayout = layout === 'masonry' || layout === 'uniform' ? layout : undefined; + } + + render() { + const { galleryLayout } = this; + const theme = getIonTheme(this); + + return ( + + + + ); + } +} diff --git a/core/src/components/gallery/gallery.scss b/core/src/components/gallery/gallery.scss index f9ea282f52a..7a1879d2fed 100644 --- a/core/src/components/gallery/gallery.scss +++ b/core/src/components/gallery/gallery.scss @@ -1,5 +1,3 @@ -@use "../../themes/native/native.globals" as globals; - // Gallery // -------------------------------------------------- @@ -15,13 +13,6 @@ gap: var(--internal-gallery-gap, 16px); } -// Target all slotted elements in the uniform layout. This ensures that divs -// and images have an aspect ratio of 1/1. Nested images must inherit the -// aspect ratio of their parent. -:host(.gallery-layout-uniform) ::slotted(*) { - aspect-ratio: 1/1; -} - // Layout: Masonry // -------------------------------------------------- @@ -31,32 +22,9 @@ column-gap: var(--internal-gallery-gap, 16px); row-gap: 0; - grid-auto-rows: 2px; -} - -:host(.gallery-layout-masonry) ::slotted(*) { - display: block; - - // Clear min-height so items size to their content - min-height: unset; - - margin-bottom: var(--internal-gallery-gap, 16px); -} - -// Slotted elements -// -------------------------------------------------- - -// Reset the default margin for slotted elements so wrapper elements -// (such as
) align properly with other gallery items. -::slotted(*) { - @include globals.margin(0); - - width: 100%; -} - -::slotted(img) { - display: block; - - object-fit: cover; - object-position: center; + // Each item's row span is computed from its height, so the row track must be + // as small as possible to keep the gap between stacked items accurate. A + // larger track quantizes the span and can inflate the gap by up to (track - 1) + // pixels. 1px keeps the rounding error sub-pixel. + grid-auto-rows: 1px; } diff --git a/core/src/components/gallery/gallery.tsx b/core/src/components/gallery/gallery.tsx index 61d56ef6d07..68ccbe380bf 100644 --- a/core/src/components/gallery/gallery.tsx +++ b/core/src/components/gallery/gallery.tsx @@ -23,8 +23,14 @@ type GalleryBreakpoint = keyof typeof BREAKPOINTS; const BREAKPOINT_ORDER: GalleryBreakpoint[] = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl']; /** - * Direct slotted children that support CSS grid placement and inline `style`. - * This is a union of `HTMLElement` and `SVGElement` to support both HTML and SVG elements. + * The tag of the component used to wrap each gallery item. + */ +const GALLERY_ITEM_SELECTOR = 'ion-gallery-item'; + +/** + * Grid items placed by the gallery that support CSS grid placement and inline + * `style`. This is a union of `HTMLElement` and `SVGElement` to support both + * HTML and SVG elements. */ type GalleryItemElement = HTMLElement | SVGElement; @@ -32,7 +38,8 @@ type GalleryItemElement = HTMLElement | SVGElement; * @virtualProp {"ios" | "md"} mode - The mode determines the platform behaviors of the component. * @virtualProp {"ios" | "md" | "ionic"} theme - The theme determines the visual appearance of the component. * - * @slot - Content is placed in a responsive gallery layout. + * @slot - One or more `ion-gallery-item` components, placed in a responsive + * gallery layout. */ @Component({ tag: 'ion-gallery', @@ -51,6 +58,7 @@ export class Gallery implements ComponentInterface { private hasWarnedInvalidColumns = false; private hasWarnedInvalidGap = false; private hasWarnedUnusedOrder = false; + private hasWarnedInvalidItems = false; /** * The visual layout of the gallery. When `uniform`, rows take up the height @@ -111,7 +119,7 @@ export class Gallery implements ComponentInterface { this.updateResponsiveStyles(); this.scheduleMasonryResize(); }); - this.resizeObserver.observe(this.el); + this.observeResizes(); this.scheduleMasonryResize(); @@ -128,6 +136,24 @@ export class Gallery implements ComponentInterface { this.resizeObserver = undefined; } + /** + * Observe the host and each item for size changes. Items are observed in + * addition to the host so masonry placement is recomputed when an item's + * rendered height changes — most importantly when a dynamically added + * `ion-gallery-item` finishes hydrating, which (unlike an ``) emits no + * `load` event and does not change the host's measured size while collapsed. + */ + private observeResizes() { + const observer = this.resizeObserver; + if (observer === undefined) { + return; + } + + observer.disconnect(); + observer.observe(this.el); + this.getItems().forEach((item) => observer.observe(item)); + } + /** * Listen for the load event on child elements. * When the layout is `masonry`, this listener is used to schedule a resize @@ -153,6 +179,9 @@ export class Gallery implements ComponentInterface { * are added or removed from the gallery. */ private onSlotChange = () => { + // Re-observe so newly added items are watched for size changes (e.g. a + // freshly appended item finishing hydration), then recompute placement. + this.observeResizes(); this.scheduleMasonryResize(); }; @@ -450,13 +479,67 @@ export class Gallery implements ComponentInterface { } /** - * Return all directly slotted children of the gallery that can be grid items - * with inline placement styles (HTML elements and SVG elements). + * Check that an element can be a grid item with inline placement styles + * (HTML elements and SVG elements expose a usable `style.setProperty`). + */ + private isGalleryItemElement(element: Element): element is GalleryItemElement { + return typeof (element as any).style?.setProperty === 'function'; + } + + /** + * Return the `ion-gallery-item` elements to place in the grid. Each item is a + * direct grid cell. A direct child that is not an `ion-gallery-item` is + * treated as a pass-through wrapper (e.g. a layout `
`): its box is + * collapsed with `display: contents` so the nested items participate in the + * gallery grid. Children that contain no `ion-gallery-item` are ignored. */ private getItems(): GalleryItemElement[] { - return Array.from(this.el.children).filter( - (child): child is GalleryItemElement => typeof (child as any).style?.setProperty === 'function' + const items: GalleryItemElement[] = []; + + Array.from(this.el.children).forEach((child) => { + if (!this.isGalleryItemElement(child)) { + return; + } + + // Standard path: is a direct child of . + if (child.matches(GALLERY_ITEM_SELECTOR)) { + items.push(child); + return; + } + + // Compatibility path: a wrapper element may contain + // components. Collapse the wrapper's box so the items participate in the + // gallery grid. + const nestedItems = Array.from(child.querySelectorAll(GALLERY_ITEM_SELECTOR) as NodeListOf).filter( + (nested): nested is GalleryItemElement => this.isGalleryItemElement(nested) + ); + + if (nestedItems.length === 0) { + this.warnInvalidItems(); + return; + } + + child.style.display = 'contents'; + items.push(...nestedItems); + }); + + return items; + } + + /** + * Warn when the gallery has content that is not wrapped in an + * `ion-gallery-item` component. + */ + private warnInvalidItems() { + if (this.hasWarnedInvalidItems) { + return; + } + + printIonWarning( + `[ion-gallery] - Gallery items must be wrapped in "ion-gallery-item" components. Direct children that are not "ion-gallery-item" (and do not contain one) are ignored.`, + this.el ); + this.hasWarnedInvalidItems = true; } /** @@ -477,12 +560,20 @@ export class Gallery implements ComponentInterface { this.getItems().forEach((itemEl) => this.clearItemStyles(itemEl)); } + /** + * Whether the item contains any images that have not finished loading. + * Used to defer masonry placement until the rendered height is final. + */ + private hasUnloadedImages(itemEl: GalleryItemElement): boolean { + return Array.from(itemEl.querySelectorAll('img')).some((img) => !img.complete || img.naturalHeight === 0); + } + /** * Convert a rendered item height to the number of grid rows it should span. - * Returns undefined for images that are not fully loaded yet. + * Returns undefined when the item has images that are not fully loaded yet. */ private calculateRowSpan(itemEl: GalleryItemElement, rowHeight: number, rowGap: number) { - if (itemEl instanceof HTMLImageElement && (!itemEl.complete || itemEl.naturalHeight === 0)) { + if (this.hasUnloadedImages(itemEl)) { return undefined; } diff --git a/packages/angular/src/directives/proxies-list.ts b/packages/angular/src/directives/proxies-list.ts index 9e7f5b18565..3945113e710 100644 --- a/packages/angular/src/directives/proxies-list.ts +++ b/packages/angular/src/directives/proxies-list.ts @@ -31,6 +31,7 @@ export const DIRECTIVES = [ d.IonFabList, d.IonFooter, d.IonGallery, + d.IonGalleryItem, d.IonGrid, d.IonHeader, d.IonIcon, diff --git a/packages/angular/src/directives/proxies.ts b/packages/angular/src/directives/proxies.ts index c1dfbec20a0..77de41cbbca 100644 --- a/packages/angular/src/directives/proxies.ts +++ b/packages/angular/src/directives/proxies.ts @@ -846,6 +846,28 @@ export class IonGallery { export declare interface IonGallery extends Components.IonGallery {} +@ProxyCmp({ + inputs: ['mode', 'theme'] +}) +@Component({ + selector: 'ion-gallery-item', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['mode', 'theme'], +}) +export class IonGalleryItem { + protected el: HTMLIonGalleryItemElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface IonGalleryItem extends Components.IonGalleryItem {} + + @ProxyCmp({ inputs: ['fixed', 'mode', 'theme'] }) diff --git a/packages/angular/standalone/src/directives/proxies.ts b/packages/angular/standalone/src/directives/proxies.ts index ef1a118f4f7..3a938c58b94 100644 --- a/packages/angular/standalone/src/directives/proxies.ts +++ b/packages/angular/standalone/src/directives/proxies.ts @@ -33,6 +33,7 @@ import { defineCustomElement as defineIonFabButton } from '@ionic/core/component import { defineCustomElement as defineIonFabList } from '@ionic/core/components/ion-fab-list.js'; import { defineCustomElement as defineIonFooter } from '@ionic/core/components/ion-footer.js'; import { defineCustomElement as defineIonGallery } from '@ionic/core/components/ion-gallery.js'; +import { defineCustomElement as defineIonGalleryItem } from '@ionic/core/components/ion-gallery-item.js'; import { defineCustomElement as defineIonGrid } from '@ionic/core/components/ion-grid.js'; import { defineCustomElement as defineIonHeader } from '@ionic/core/components/ion-header.js'; import { defineCustomElement as defineIonImg } from '@ionic/core/components/ion-img.js'; @@ -889,6 +890,30 @@ export class IonGallery { export declare interface IonGallery extends Components.IonGallery {} +@ProxyCmp({ + defineCustomElementFn: defineIonGalleryItem, + inputs: ['mode', 'theme'] +}) +@Component({ + selector: 'ion-gallery-item', + changeDetection: ChangeDetectionStrategy.OnPush, + template: '', + // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property + inputs: ['mode', 'theme'], + standalone: true +}) +export class IonGalleryItem { + protected el: HTMLIonGalleryItemElement; + constructor(c: ChangeDetectorRef, r: ElementRef, protected z: NgZone) { + c.detach(); + this.el = r.nativeElement; + } +} + + +export declare interface IonGalleryItem extends Components.IonGalleryItem {} + + @ProxyCmp({ defineCustomElementFn: defineIonGrid, inputs: ['fixed', 'mode', 'theme'] diff --git a/packages/react/src/components/proxies.ts b/packages/react/src/components/proxies.ts index 47a8c6ac371..24fd85c7186 100644 --- a/packages/react/src/components/proxies.ts +++ b/packages/react/src/components/proxies.ts @@ -27,6 +27,7 @@ import { defineCustomElement as defineIonFab } from '@ionic/core/components/ion- import { defineCustomElement as defineIonFabList } from '@ionic/core/components/ion-fab-list.js'; import { defineCustomElement as defineIonFooter } from '@ionic/core/components/ion-footer.js'; import { defineCustomElement as defineIonGallery } from '@ionic/core/components/ion-gallery.js'; +import { defineCustomElement as defineIonGalleryItem } from '@ionic/core/components/ion-gallery-item.js'; import { defineCustomElement as defineIonGrid } from '@ionic/core/components/ion-grid.js'; import { defineCustomElement as defineIonHeader } from '@ionic/core/components/ion-header.js'; import { defineCustomElement as defineIonImg } from '@ionic/core/components/ion-img.js'; @@ -102,6 +103,7 @@ export const IonFab = /*@__PURE__*/createReactComponent('ion-fab-list', undefined, undefined, defineIonFabList); export const IonFooter = /*@__PURE__*/createReactComponent('ion-footer', undefined, undefined, defineIonFooter); export const IonGallery = /*@__PURE__*/createReactComponent('ion-gallery', undefined, undefined, defineIonGallery); +export const IonGalleryItem = /*@__PURE__*/createReactComponent('ion-gallery-item', undefined, undefined, defineIonGalleryItem); export const IonGrid = /*@__PURE__*/createReactComponent('ion-grid', undefined, undefined, defineIonGrid); export const IonHeader = /*@__PURE__*/createReactComponent('ion-header', undefined, undefined, defineIonHeader); export const IonImg = /*@__PURE__*/createReactComponent('ion-img', undefined, undefined, defineIonImg); diff --git a/packages/vue/src/proxies.ts b/packages/vue/src/proxies.ts index 116c608e061..2122beb1cda 100644 --- a/packages/vue/src/proxies.ts +++ b/packages/vue/src/proxies.ts @@ -31,6 +31,7 @@ import { defineCustomElement as defineIonFabButton } from '@ionic/core/component import { defineCustomElement as defineIonFabList } from '@ionic/core/components/ion-fab-list.js'; import { defineCustomElement as defineIonFooter } from '@ionic/core/components/ion-footer.js'; import { defineCustomElement as defineIonGallery } from '@ionic/core/components/ion-gallery.js'; +import { defineCustomElement as defineIonGalleryItem } from '@ionic/core/components/ion-gallery-item.js'; import { defineCustomElement as defineIonGrid } from '@ionic/core/components/ion-grid.js'; import { defineCustomElement as defineIonHeader } from '@ionic/core/components/ion-header.js'; import { defineCustomElement as defineIonImg } from '@ionic/core/components/ion-img.js'; @@ -441,6 +442,9 @@ export const IonGallery: StencilVueComponent = /*@__PURE__*/ def ]); +export const IonGalleryItem: StencilVueComponent = /*@__PURE__*/ defineContainer('ion-gallery-item', defineIonGalleryItem); + + export const IonGrid: StencilVueComponent = /*@__PURE__*/ defineContainer('ion-grid', defineIonGrid, [ 'fixed' ]); From b62a3027eb62f5eba6a9177afe4586a0ddb3fd44 Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Fri, 5 Jun 2026 10:54:02 -0400 Subject: [PATCH 06/13] test(gallery): update demos with new structure --- .../components/gallery/test/basic/index.html | 78 +++++----- .../components/gallery/test/layout/index.html | 137 ++++++++++-------- 2 files changed, 119 insertions(+), 96 deletions(-) diff --git a/core/src/components/gallery/test/basic/index.html b/core/src/components/gallery/test/basic/index.html index 65b186fb795..f69b3fcb700 100644 --- a/core/src/components/gallery/test/basic/index.html +++ b/core/src/components/gallery/test/basic/index.html @@ -24,33 +24,33 @@ - One - Two - Three - Four - Five - Six - Seven - Eight - Nine - Ten - Eleven - Twelve + One + Two + Three + Four + Five + Six + Seven + Eight + Nine + Ten + Eleven + Twelve -
One
-
Two
-
Three
-
Four
-
Five
-
Six
-
Seven
-
Eight
-
Nine
-
Ten
-
Eleven
-
Twelve
+
One
+
Two
+
Three
+
Four
+
Five
+
Six
+
Seven
+
Eight
+
Nine
+
Ten
+
Eleven
+
Twelve
@@ -60,64 +60,64 @@ margin-bottom: 16px; } - ion-gallery img, - ion-gallery div { + ion-gallery-item img, + ion-gallery-item div { border-radius: 16px; } - ion-gallery div { + ion-gallery-item div { display: flex; align-items: center; justify-content: center; color: #fff; } - ion-gallery div:nth-child(1) { + ion-gallery-item:nth-child(1) div { background: #ff6b6b; } - ion-gallery div:nth-child(2) { + ion-gallery-item:nth-child(2) div { background: #4ecdc4; } - ion-gallery div:nth-child(3) { + ion-gallery-item:nth-child(3) div { background: #ffe66d; color: #333; } - ion-gallery div:nth-child(4) { + ion-gallery-item:nth-child(4) div { background: #5f27cd; } - ion-gallery div:nth-child(5) { + ion-gallery-item:nth-child(5) div { background: #7f8c8d; } - ion-gallery div:nth-child(6) { + ion-gallery-item:nth-child(6) div { background: #ff9f43; } - ion-gallery div:nth-child(7) { + ion-gallery-item:nth-child(7) div { background: #ff3f34; } - ion-gallery div:nth-child(8) { + ion-gallery-item:nth-child(8) div { background: #2ecc71; } - ion-gallery div:nth-child(9) { + ion-gallery-item:nth-child(9) div { background: #34495e; } - ion-gallery div:nth-child(10) { + ion-gallery-item:nth-child(10) div { background: #1abc9c; } - ion-gallery div:nth-child(11) { + ion-gallery-item:nth-child(11) div { background: #e67e22; } - ion-gallery div:nth-child(12) { + ion-gallery-item:nth-child(12) div { background: #9b59b6; } diff --git a/core/src/components/gallery/test/layout/index.html b/core/src/components/gallery/test/layout/index.html index feffc05f6b6..9a7df7a5b53 100644 --- a/core/src/components/gallery/test/layout/index.html +++ b/core/src/components/gallery/test/layout/index.html @@ -39,52 +39,72 @@

Uniform

Divs

-
One
-
Two
-
Three
-
Four
-
Five
-
Six
-
Seven
-
Eight
-
Nine
-
Ten
-
Eleven
-
Twelve
+
One
+
Two
+
Three
+
Four
+
Five
+
Six
+
Seven
+
Eight
+
Nine
+
Ten
+
Eleven
+
Twelve

Images

- One - Two - Three - Four - Five - Six - Seven - Eight - Nine - Ten - Eleven - Twelve + One + Two + Three + Four + Five + Six + Seven + Eight + Nine + Ten + Eleven + Twelve

Same Height Images

- One - Two - Three - Four - Five - Six - Seven - Eight - Nine - Ten - Eleven - Twelve + One + Two + Three + Four + Five + Six + Seven + Eight + Nine + Ten + Eleven + Twelve
@@ -210,6 +230,7 @@

Same Height Images

galleries.forEach((galleryEl) => { const isImageGallery = galleryEl.querySelector('img') !== null; + const galleryItemEl = document.createElement('ion-gallery-item'); if (isImageGallery) { const photoId = 100 + ((nextItemNumber - 1) % 100); @@ -218,7 +239,8 @@

Same Height Images

`https://picsum.photos/id/${photoId}/164/${alternatingImgHeight}`, labelText ); - galleryEl.append(imageItemEl); + galleryItemEl.append(imageItemEl); + galleryEl.append(galleryItemEl); return; } @@ -227,7 +249,8 @@

Same Height Images

divEl.textContent = numberToWords(nextItemNumber); divEl.style.height = `${randomDivHeight}px`; divEl.style.background = randomColor; - galleryEl.append(divEl); + galleryItemEl.append(divEl); + galleryEl.append(galleryItemEl); }); nextItemNumber++; @@ -267,16 +290,16 @@

Same Height Images

margin: 0 auto; } - ion-gallery img, - ion-gallery div { + ion-gallery-item img, + ion-gallery-item div { border-radius: 16px; } - .same-height-gallery img { + .same-height-gallery ion-gallery-item img { height: 164px; } - ion-gallery .gallery-image-item img { + ion-gallery-item .gallery-image-item img { display: block; /** @@ -290,11 +313,11 @@

Same Height Images

object-position: center; } - ion-gallery .gallery-image-item { + ion-gallery-item .gallery-image-item { position: relative; } - ion-gallery .gallery-image-label { + ion-gallery-item .gallery-image-label { position: absolute; inset: 0; display: flex; @@ -307,70 +330,70 @@

Same Height Images

pointer-events: none; } - ion-gallery div { + ion-gallery-item div { display: flex; align-items: center; justify-content: center; color: #fff; } - ion-gallery div:nth-child(1) { + ion-gallery-item:nth-child(1) div { background: #ff6b6b; height: 175px; } - ion-gallery div:nth-child(2) { + ion-gallery-item:nth-child(2) div { background: #4ecdc4; height: 30px; } - ion-gallery div:nth-child(3) { + ion-gallery-item:nth-child(3) div { background: #ffe66d; color: #333; height: 90px; } - ion-gallery div:nth-child(4) { + ion-gallery-item:nth-child(4) div { background: #5f27cd; height: 50px; } - ion-gallery div:nth-child(5) { + ion-gallery-item:nth-child(5) div { background: #7f8c8d; height: 110px; } - ion-gallery div:nth-child(6) { + ion-gallery-item:nth-child(6) div { background: #ff9f43; height: 175px; } - ion-gallery div:nth-child(7) { + ion-gallery-item:nth-child(7) div { background: #ff3f34; height: 130px; } - ion-gallery div:nth-child(8) { + ion-gallery-item:nth-child(8) div { background: #2ecc71; height: 80px; } - ion-gallery div:nth-child(9) { + ion-gallery-item:nth-child(9) div { background: #34495e; height: 110px; } - ion-gallery div:nth-child(10) { + ion-gallery-item:nth-child(10) div { background: #1abc9c; height: 90px; } - ion-gallery div:nth-child(11) { + ion-gallery-item:nth-child(11) div { background: #e67e22; height: 100px; } - ion-gallery div:nth-child(12) { + ion-gallery-item:nth-child(12) div { background: #9b59b6; height: 150px; } From db0249efcee5eb51faf87f00a68bf50b87e5ed99 Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Fri, 5 Jun 2026 10:54:27 -0400 Subject: [PATCH 07/13] test(gallery): update e2e tests with new structure --- .../gallery/test/basic/gallery.e2e.ts | 104 ++++----- .../gallery/test/layout/gallery.e2e.ts | 209 ++++++++++-------- core/src/components/gallery/test/utils.ts | 26 +-- 3 files changed, 179 insertions(+), 160 deletions(-) diff --git a/core/src/components/gallery/test/basic/gallery.e2e.ts b/core/src/components/gallery/test/basic/gallery.e2e.ts index 460c7228881..2ead83d28cf 100644 --- a/core/src/components/gallery/test/basic/gallery.e2e.ts +++ b/core/src/components/gallery/test/basic/gallery.e2e.ts @@ -26,18 +26,18 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t await page.setContent( ` - One - Two - Three - Four - Five - Six - Seven - Eight - Nine - Ten - Eleven - Twelve + One + Two + Three + Four + Five + Six + Seven + Eight + Nine + Ten + Eleven + Twelve `, config @@ -64,18 +64,18 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t await page.setContent( ` - One - Two - Three - Four - Five - Six - Seven - Eight - Nine - Ten - Eleven - Twelve + One + Two + Three + Four + Five + Six + Seven + Eight + Nine + Ten + Eleven + Twelve `, config @@ -98,18 +98,18 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t await page.setContent( ` - One - Two - Three - Four - Five - Six - Seven - Eight - Nine - Ten - Eleven - Twelve + One + Two + Three + Four + Five + Six + Seven + Eight + Nine + Ten + Eleven + Twelve `, config @@ -130,10 +130,10 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t await page.setContent( ` - One - Two - Three - Four + One + Two + Three + Four `, config @@ -151,10 +151,10 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t await page.setContent( ` - One - Two - Three - Four + One + Two + Three + Four `, config @@ -172,10 +172,10 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t await page.setContent( ` - One - Two - Three - Four + One + Two + Three + Four `, config @@ -222,10 +222,10 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t await page.setContent( ` - One - Two - Three - Four + One + Two + Three + Four `, config diff --git a/core/src/components/gallery/test/layout/gallery.e2e.ts b/core/src/components/gallery/test/layout/gallery.e2e.ts index 407648cebfd..20e7194ccbe 100644 --- a/core/src/components/gallery/test/layout/gallery.e2e.ts +++ b/core/src/components/gallery/test/layout/gallery.e2e.ts @@ -28,18 +28,18 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t -
One
-
Two
-
Three
-
Four
-
Five
-
Six
-
Seven
-
Eight
-
Nine
-
Ten
-
Eleven
-
Twelve
+
One
+
Two
+
Three
+
Four
+
Five
+
Six
+
Seven
+
Eight
+
Nine
+
Ten
+
Eleven
+
Twelve
`, config @@ -68,18 +68,18 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t -
One
-
Two
-
Three
-
Four
-
Five
-
Six
-
Seven
-
Eight
-
Nine
-
Ten
-
Eleven
-
Twelve
+
One
+
Two
+
Three
+
Four
+
Five
+
Six
+
Seven
+
Eight
+
Nine
+
Ten
+
Eleven
+
Twelve
`, config @@ -112,18 +112,18 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t - One - Two - Three - Four - Five - Six - Seven - Eight - Nine - Ten - Eleven - Twelve + One + Two + Three + Four + Five + Six + Seven + Eight + Nine + Ten + Eleven + Twelve `, config @@ -152,18 +152,18 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t - One - Two - Three - Four - Five - Six - Seven - Eight - Nine - Ten - Eleven - Twelve + One + Two + Three + Four + Five + Six + Seven + Eight + Nine + Ten + Eleven + Twelve `, config @@ -191,12 +191,12 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t -
One
-
Two
-
Three
-
Four
-
Five
-
Six
+
One
+
Two
+
Three
+
Four
+
Five
+
Six
`, config @@ -212,10 +212,12 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t await gallery.evaluate((galleryEl, items) => { items.forEach(({ itemLabel, itemHeight }) => { + const galleryItemEl = document.createElement('ion-gallery-item'); const divEl = document.createElement('div'); divEl.style.height = `${itemHeight}px`; divEl.textContent = itemLabel; - galleryEl.append(divEl); + galleryItemEl.append(divEl); + galleryEl.append(galleryItemEl); }); }, appendedItems); @@ -240,12 +242,12 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t - One - Two - Three - Four - Five - Six + One + Two + Three + Four + Five + Six `, config @@ -259,11 +261,13 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t await gallery.evaluate((galleryEl, items) => { items.forEach(({ itemLabel, itemSrc }) => { + const galleryItemEl = document.createElement('ion-gallery-item'); const imageEl = document.createElement('img'); imageEl.src = itemSrc; imageEl.alt = itemLabel; - galleryEl.append(imageEl); + galleryItemEl.append(imageEl); + galleryEl.append(galleryItemEl); }); }, appendedItems); @@ -295,8 +299,9 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t ${sharedStyles} /** - * Redefine the ::slotted(img) styles from gallery.scss - * because the nested img does not receive slotted styles. + * The gallery item's ::slotted(img) styles only reach a + * directly slotted img, not one nested inside a
, + * so redefine them for the nested image here. */ ion-gallery figure img { display: block; @@ -307,24 +312,36 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t -
- One -
-
- Two -
-
- Three -
-
- Four -
-
- Five -
-
- Six -
+ +
+ One +
+
+ +
+ Two +
+
+ +
+ Three +
+
+ +
+ Four +
+
+ +
+ Five +
+
+ +
+ Six +
+
`, config @@ -338,6 +355,7 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t await gallery.evaluate((galleryEl, items) => { items.forEach(({ itemLabel, itemSrc }) => { + const galleryItemEl = document.createElement('ion-gallery-item'); const figureEl = document.createElement('figure'); figureEl.className = 'gallery-image-item'; @@ -346,7 +364,8 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t imageEl.alt = itemLabel; figureEl.append(imageEl); - galleryEl.append(figureEl); + galleryItemEl.append(figureEl); + galleryEl.append(galleryItemEl); }); }, appendedItems); @@ -376,18 +395,18 @@ configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, screenshot, t await page.setContent( ` -
One
-
Two
-
Three
-
Four
-
Five
-
Six
-
Seven
-
Eight
-
Nine
-
Ten
-
Eleven
-
Twelve
+
One
+
Two
+
Three
+
Four
+
Five
+
Six
+
Seven
+
Eight
+
Nine
+
Ten
+
Eleven
+
Twelve
`, config diff --git a/core/src/components/gallery/test/utils.ts b/core/src/components/gallery/test/utils.ts index 3ffc0b076b5..1f56da7e13f 100644 --- a/core/src/components/gallery/test/utils.ts +++ b/core/src/components/gallery/test/utils.ts @@ -3,57 +3,57 @@ export const sharedStyles = ` width: 343px; } - div { + ion-gallery-item div { color: #fff; height: 150px; } - div:nth-child(1) { + ion-gallery-item:nth-child(1) div { background: #ff6b6b; } - div:nth-child(2) { + ion-gallery-item:nth-child(2) div { background: #4ecdc4; } - div:nth-child(3) { + ion-gallery-item:nth-child(3) div { background: #ffe66d; color: #333; } - div:nth-child(4) { + ion-gallery-item:nth-child(4) div { background: #5f27cd; } - div:nth-child(5) { + ion-gallery-item:nth-child(5) div { background: #7f8c8d; } - div:nth-child(6) { + ion-gallery-item:nth-child(6) div { background: #ff9f43; } - div:nth-child(7) { + ion-gallery-item:nth-child(7) div { background: #ff3f34; } - div:nth-child(8) { + ion-gallery-item:nth-child(8) div { background: #2ecc71; } - div:nth-child(9) { + ion-gallery-item:nth-child(9) div { background: #34495e; } - div:nth-child(10) { + ion-gallery-item:nth-child(10) div { background: #1abc9c; } - div:nth-child(11) { + ion-gallery-item:nth-child(11) div { background: #e67e22; } - div:nth-child(12) { + ion-gallery-item:nth-child(12) div { background: #9b59b6; } `; From 6a1f49604ab26c79f21ab8a065fbdda3044eb994 Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Fri, 5 Jun 2026 10:57:23 -0400 Subject: [PATCH 08/13] chore(): add updated snapshots --- ...ly-appended-md-ltr-Mobile-Chrome-linux.png | Bin 10046 -> 10071 bytes ...y-appended-md-ltr-Mobile-Firefox-linux.png | Bin 19419 -> 19407 bytes ...ly-appended-md-ltr-Mobile-Safari-linux.png | Bin 11819 -> 11817 bytes ...able-height-md-ltr-Mobile-Chrome-linux.png | Bin 10046 -> 10071 bytes ...ble-height-md-ltr-Mobile-Firefox-linux.png | Bin 19419 -> 19407 bytes ...able-height-md-ltr-Mobile-Safari-linux.png | Bin 11819 -> 11817 bytes ...ly-appended-md-ltr-Mobile-Chrome-linux.png | Bin 10163 -> 10179 bytes ...y-appended-md-ltr-Mobile-Firefox-linux.png | Bin 19749 -> 19750 bytes ...ly-appended-md-ltr-Mobile-Safari-linux.png | Bin 11967 -> 11963 bytes ...able-height-md-ltr-Mobile-Chrome-linux.png | Bin 10163 -> 10179 bytes ...ble-height-md-ltr-Mobile-Firefox-linux.png | Bin 19749 -> 19750 bytes ...able-height-md-ltr-Mobile-Safari-linux.png | Bin 11967 -> 11963 bytes 12 files changed, 0 insertions(+), 0 deletions(-) diff --git a/core/src/components/gallery/test/layout/gallery.e2e.ts-snapshots/gallery-masonry-best-fit-divs-dynamically-appended-md-ltr-Mobile-Chrome-linux.png b/core/src/components/gallery/test/layout/gallery.e2e.ts-snapshots/gallery-masonry-best-fit-divs-dynamically-appended-md-ltr-Mobile-Chrome-linux.png index dcb8b8e60e5dfaa4d9c8904f1cee8e08f4ae433e..4e920dd58534d3f8ddbfe9dcf8591948b6e596e7 100644 GIT binary patch literal 10071 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 literal 10046 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 wh!6b7;~;1X0{}pwc(G|t<8 diff --git a/core/src/components/gallery/test/layout/gallery.e2e.ts-snapshots/gallery-masonry-best-fit-divs-dynamically-appended-md-ltr-Mobile-Firefox-linux.png b/core/src/components/gallery/test/layout/gallery.e2e.ts-snapshots/gallery-masonry-best-fit-divs-dynamically-appended-md-ltr-Mobile-Firefox-linux.png index 22afe4afd0aaa27609b02939d893d6dbf785b905..c65fb378f1feb244e3b15305a45c11bf6e7f01d1 100644 GIT binary patch delta 14106 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 literal 19419 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 z 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 diff --git a/core/src/components/gallery/test/layout/gallery.e2e.ts-snapshots/gallery-masonry-best-fit-divs-dynamically-appended-md-ltr-Mobile-Safari-linux.png b/core/src/components/gallery/test/layout/gallery.e2e.ts-snapshots/gallery-masonry-best-fit-divs-dynamically-appended-md-ltr-Mobile-Safari-linux.png index ecab78ae12f79f0c6d8e0f0c1cd1bb097dc21d01..f2c03927b753c6f3b9505d718d94968d2e93e2d8 100644 GIT binary patch literal 11817 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 literal 10046 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 wh!6b7;~;1X0{}pwc(G|t<8 diff --git a/core/src/components/gallery/test/layout/gallery.e2e.ts-snapshots/gallery-masonry-best-fit-divs-variable-height-md-ltr-Mobile-Firefox-linux.png b/core/src/components/gallery/test/layout/gallery.e2e.ts-snapshots/gallery-masonry-best-fit-divs-variable-height-md-ltr-Mobile-Firefox-linux.png index 22afe4afd0aaa27609b02939d893d6dbf785b905..c65fb378f1feb244e3b15305a45c11bf6e7f01d1 100644 GIT binary patch delta 14106 zcmeHucUV(jwWmFLd=?wxt&xij~_`Rfok*?aB1*Lv5x-nAJ?VeCm^jN?1L z&3cT1fq}WlO(6cf5D@n2B?qq~ZCJ)17{@xw1ubzddR4Gr{iJu({Swin3P&IxN|r$5j5`BrHX!Tw9N;LlXEm|Nxy1ifs=Gae=kgi4Vs=ilGNSpy{oEP|p-l~MigbE}_J zY<%G&x@8+u2knTmo@dQPjR{^Q%_}Ka`T?ovvHp=QP3B6;xMW1W5pkPrETn4S6nd#E zO9ubwJZ=8GY35~(-(iV810I9bsrUMrD-)?Qm=+#fg#~XDU>cMz(6bUyV zBAw!0$2raz4qRc&o2_dVwrCDbsIO>^9=SSeV{gdkbfs~x^2Tef$FF5H4Y^_*vh<@s2BnwoPf=P^E3<2Mq+#dgs}(&58bifqtx8HK zQe=89-^}Awt*cr26`R-D}q0_D2?T z@ZAg5CF|Uf!;0pDrcJ+;OxnR{^Tu4pIm%K4y|ZhW`ngx^xOoW*Yc=pucFeNSiOvjk zurq!8W7X8F;4vTlZ!?tRYfH6Cov3Ak1&u-sp&O!CWQ2eQzkM3<)fs_t-!B}*`CcNm z9K*!?UGn5pSZ%4bet_qgDS7X}m%>9aT7#2~CS%MTP|w9iOS%nd6-)la{Fp~l<=M;H{*StTbfx>^8GL9#}K1?&i8p6s73F@=^Mk%z>f5C zy8;HrrO{7#k31-^CYfs)_NePJo&3uR*Db{q)HH$%YEkj2qZcl7ABCtQLw=}ysw*78 zZ&OilYK^Lk)lOmQh$^ZVN%r}A$b)`HH6fe%)1RAK=*%4rpJFB=8-cyG4bn;-R{T7q z#2V|hHC`}NcX&XI*T0O4rS273&)`P`nOzTpEyA?(kSM-pq6%tG^>i6TLW*{N5K&cF z_^d848VX$;&7D(*Fdq%5Bn8Z8)B&iY4XYiQ?~;6xDDw{uqIc?G9YH+U5OjW)_>(1t z1#CIdSxEvyKOzgzLpS5~i6n-j<#nihmj&|&fq$ItJdFJVf({>r?L$3rb={wSQGDK6 zXdMLL9L$xx@ny-%B6UqSsOB6F^T9Eb4Ka@fjSl^?c$7&5y*Je0lXFdQYusC@`sLD| z556w)DK~RwPPQ< z2{f7r?FPdtR|VFIic!Tw6RqCl_9*7StkK&|5bNnvB*a{nG)^}@C^DH zj>N!Mf+tZG>wgWj$k8jXeVJ;5nH05V{^f?_S-$&-=yhfeIo3p-Fs;$gHCLm;Vv!2i zYbA#Kj5BG~Urkr|2x(a-X-OCcq>R+XabDHaj5GYFA0@M;F(5h8uC7B~Ga$>(%8h$o zVVr?`++dSAL6E%hWOrB(x9P&a5)+4LSbw*p!_=14bq{m@#4}?M85ym=Ri7-n$~XhP z|L_EBA~+6@9Oi{S1L1jVTGDr2214?S(B=T_uAEyOm=Ok?hF;mSbacCWzgcVLBQC1Jg54$zEGXFr2{f(M0@z21*<4zGt7>; zGLD+2fY|ub>c+Dv|8R?`QR`vW@&_EI#HKiLCusV)%5VYT>@Wkjq1f0&z{*}Lw3xb_ zCs~mMLUL%G0`eP^RRH{_Kz&IN?egs$tBskolv+pY604YNwnkj(;Ih+|sVsKp@F#Y5Kqx zhtAFd3MN|REcffIQG54gP)6BJNPu^#dyLXCzQhj8LxnpjtQx;CT$E(m8T?<%wEeB-=4_z#4@9H}$<(+GdUH3bb@9S?w zgpB#43Ty_4NlaZ2T(zspCO@EY{fMCdm)82U;7`MG`^umzf)btyKz>zuJRl!@Vf)Zv#vH zbgjK$oL2+-?Km1Kh4--eB4^R*tPFbN6YZDMa<>S)0CX}Ty|utBEp|VkUWYKg4%j1B z9Qe<){GjHESdds!vYKxHB5Cdig?rVlaB+m@)_bA-UP&GjEP5u!@V|H0dFLoaRY30& z$zwJnAzfUSn5Xy}hDmEE4$%j$kdm-#8(U$-*|hBJ^32$?%W=lpeo@V%eT#r_M&7Ar zIT_mSH}g*gdfE>Ewh?EqKx)4=?t~Ubpl=Msv)qvGUA0+)FHlCL9yR$|H13RUN;FN> z-9{(Ssb>5W*eKUgI%(+ z2vyi*m4qb{kO#La&j@;reJR#2*JNK5z|zyJb|k>!%Z`eVK{$ViXc#Octc^$W^wkG2 zoL6CUjN@CD>|IOe46*}O&HTh-lWs(Rd9NZOL9@6!wYDXY)4!xisKS;yIE!6R#-n~+ zvM)+s-{LKw0X?I=T~#=9=OXFJ4U?pr)7rQiNdZz*90G=UxBP%PPTKx6=9=ueDjUf~ z#wv^iHc^JmYphF_Tt+W+P3M@5e$LWlQK33U$+Cyrc7 zH#~nQg8}Jc{^s^aDMHiXmWQce#ajb!0(KCwNbl&Rq`*rh!eC|5iUrZz;v|+`^Fj0M zE1bX?o&4_>2RnCC9$t$8r-=As_|W})JASDK?>Bm;Y#`U(a~9`VE+TZQ*`Iu(%rU-Z z`WqMO&e(Hn6ry=G^4f+bmJm}{l+;bxF{U8MV`FBfP)J{?mJNb59=*{rCQn=N_2oV% zV45NhuI7yE9~M+rTbc_r_6`vgZE?USxlZc{R}~7{5YhGKgHdhf^_$zE3&s96 zxfJ+TJ^KdvP0|kHJAc&^3)6?pafpZWb|0*mG}~zv(uMG^ac@aX2%7@)e7^et?JC35z-CL1T zJGgiWt1vmU(Z{4F^h29ZEqt4 zNYp96$C|TR2j2(br2HBi*)HGEU-#l2eQ|8Zvo1cK@HIKK87?$;9w>oWPXn-m)b91t z-R!UJ0~<0Ajjo2Y4J3*eiJ5|x)0z~^kU;?$k_F;7h1!xd?wtWa)H;Lr#+UYirzhP% zf$lrRg89Iq3uxyDlV^Rdd=b4T$e87;Ae-=&_Zf^^pfNLA45H>6?F?yCh$+77n+nEn z`WGJXsK6<{@PSXh*Cta(7-uL)ZWUa8!GKhdipqmLg<+bGT%n2(puCS>kKDvvh+gg%yC$*lc}EpL2#&yD+!KlNYfq8_ocuL+%D&u7Ym_9 zS>1@-4O%V>TJEK2H5bkx1>yQ}_B1OH^(Rp+ zxn7(Y;A%c7SvOO$ z^PTG<*^7i){e?(bswLgjK+gkQT5lBygc9qj=bX!g@*2tyOb{~z^p@IT`sFh5$ZDjx%d0^ePRPYqEVfrLLb57#Mgt z6zOT(+_aM&_&f`kHZ@ICG#$WN_gV90lm}#RHS0wSVKeLed+#>}E&OuJ2KpL~vRnB2 zFOAyiiv<0(ETnwLI9YbRj8U>O3gm#&J>mhFRrm00y%^$d1WQUBmVI#%V@51hsmfg8 z>h;f5T`1D!925ea*aXpA_mM99TkCQ>m1XvYW=3u0O}kkwW*KiD&TV9cgLsbqsgrXD zCzGz!HzMNsK^G+es|f}od1dS@N?`Q)aR;>DgkgZ@&YPXh3)L;BQO&vdNi zh@z*F%f@nHw)Z>#NNb?8&rW}>@05y5f(4BE zun1MIG!?5^(Pic#m9h zCG<-N{X|*XNdokY+uQVCT(#n=q3db-xH%V{+v8whdyk$ya}o^ClePsMnII_^Qek%m ziRzF@4TwZF;_ikbZ379S?z&*MxW@y=mz5w7CRgz6F&FU99vlhs@&I_|F5W*ux<8zd zClMkFF@BoIu?!nJ;(DqLitE|9jy+#uc!kjn_cD6Cvn3vzO1NYF4I~S%NYX{TZJ13M~P2g@+K7I=YR{(VUq_U|Cn5BZtTR~DV)?~?x0z?K~qY` z?#5&tN-2z(1$7XxUBxoAK%2Bl*txymcOog|u9Fu*N;Sl;_h(y|eR1}SVoN?Rt;&EH zv7vZkVo!d%ZaxaDv;l?TmRX!y)n%ds?MwP};DkmosD3}y=G?az52nECu0;xa%Zd^O zbFi>R7%kB;!?Z-GpRZ;EH0|IjVz9?O=G!bK)RQXK2RUwCQc%ub5R%C{cjMd%&__-{ zTxkX$l?Yx9P3Y5OyYONk{e@@%$Xj_}j6oy`E_|)c8=WO0q=FX1?w>ROOTI@ zoeF)Xj(mnF1u+DoSuu=)Vn@MQH=kkzg+zI8f~Bv52Z-IChQtKTIIP4?;<4sjOuW1p z;|0ujVIxKt%r$)p#t4j>h!Xg7tp0h7pgb=oN12E5I;L4fm=%QT=W5vGo0t)0CB{k& zw~8@iD#l4gf>9I`sd7y~lw|O}>XF@_g!zRR%*Dy#G7Cot(9`0ck1?P0#Lf|XUATUl zfdQHIxN~QEhQI3L#afd;8UQ9$P?Y!Yk!uf{YoAb^$29{tjH~|Si@BqBfw%e!_*Ub6 zb}-J36OuQ=VKQt9iXSlMB4X!836(4!VBYpLS9aa^K}Or%OSG2+^XwdkOIZ{&`zmO> z3T9kb2uNDXgosO5U1WYL`rD*j)YZj|)e1~LWmm5sJ8KGNTOsp=SGr(PpvKmCfh3+M z7$qE!xbom_8xnMwS-o!p5g^ftnC)1+4}QMS?bdi5w6x~A1DNX{M9kb_U=U?6ymiyc zA+Y6xzzqNN?~9EfXGrqA4{{8+!O6s505?c*xD5*0lNpd*$)eL;f0H1@J`ISHm|u9i zP}>H++fM)FK}I{n`(cXU3YM=v1F4WW>-XO;LEW28yzikg1HsieZuRfANBkr_4)OF$ zZ6#_3?o#UGah%X{O#wdlhvuk*QwHDSu|3a}0h4|frNpA2V-b2fc6m>OG`V%%_cmMb zs`G7qo)FBks4x%>mKU2563mKi_|{P3s+6(kh+$wLv0N;#P&lc;q%zNX_^+d2kVU<@ zi0lKUK8*trV&Hy0eIhw@&#c7GSat7F@fRE7cA+8W@aKj}!x5%X5Q0PRJmfsWng{y1 zrTdH=u^Bgh#{y3wu6r9e>l+_7wS-w*I)4g8*$cn}GaZaOA#^KpV@RKn8L;vpxcA2b^8frk@6zR1Kzq!Cs4R068B)TBlb`JQzKTw1fiOIGfCZ#K3t8Pbu{ z<_R&H1|=|+^(`i_%-bK1-{;fKP^rb3seg+<@Fc2vL!V|SUI)3V$4O&w51{omeq&w4 ztX%_kJ_FrM#8Y#vM9J49Kj!Xt3oQaJ-L#JjQbv|ih0UQK&vz^9cS;GK?@Eu>0Q$7nA|g_Uc6A zb>-Qg8(T_3y^aeRUcgRM@U#P=PKvC*Jo3IJ44uc{eQBHMi-}{=Kq6hZY;|%r$gnYy zUtB7qD#fZ=%gqOGH|CEJ8)FSeR&0Yt0>;ytq?h{bf))wYuzHmhjdk^fv*hLekZP>@ zbVmYqcjL1J*%sU)WiWPu1nnG)gLC_9v!Rb^CF|4l2EuLhK~E-e&OXm&Axl(1$w%C7 zQCBYDYiTNR>h?l~oNBCZ$QG_2g?7jJT0c(lokBUyo{NQH-jlD>+uA|*XA3vlE)-5F zcXLFU71F(*T+YcMyvRyKf<&a-Ka}us|K7q(Up}y5IMKn|0Prg&@XCz-o^Z=tfpI7Y z)Rrk>aD-d@tMrvuDQ@aW{6l+}-ebrvCShIE3vo@nA3krtpT9@upFBd=-*w6WyDJDr zdc|e>GHug7FE#^Hw0r4*yZg*1%0Tyed5oXKr{w|pkdVhycZmt#7MfK360?FY$&6}t zvp60#7fy6jzlT(C_r7Jx{x@XZF}wFAlX|{e>OfymjL=gshcnbV_4}2t_0>HrN0g#x z@_{MNVKc78##9SQ+tMY@-@VO_UZz#&jp-LDhI+!)ku;6TpQeAoocYcjO)>i;-F8>a zOG5wKG?Jywb(d@KWD8G_lKclDwh9Eusd`GZGGBQd) zroXUHl7CU3SwOXxwVU~qTNp^sC5S+);+U?I$2g>Z9~o^^)+0kYJD%tPGO?lUbW$T& z*CRJi?$-qy0r3ZGYb3-^q7U4mEWXr;w&5{ny-YFcX&Tyb&6ss~!Xh zD^Qx1$<#-%5pZY@6hV~?K&yQDs0XPc^T{<*6aeU(7_?t+hJ?f9ww!ZhJy1o%B#(k( zEZO~Iwl{^3{45x<3zR^<;3DJ5IES}K^u~C&=M&E{gJ8;RJ-1;73PO%bv$r`M_Uz+T z2TPr>wC@lf!e9x^K?Fs(X}oT;(B6EkaNIX2YJUKyCqH&$Y2X49^=d?gs8_TDmV>3ZX!)ux~p`g${6n;F?iSYqpL2k=Q|XVFSX znpzKY&kGp0U{idVz9?xreYqH`qy>Gk?~iqzl{LEWqt(e@y`(T($9qwkP}kEFIv;%1 ze<82XIQWgLIO5gue{>okZ@~2kZIRrH_48geH#w*})|04KGj~hVlCTRAvLwWiD%qWp zoWeCqvXkNZG1m>q9pwR_In`<;Cc@XRncy4r`quDW*Uu+O9MeZ%aEPGp@;a=!8>FX0DaG9`E$RsO@rv< zpU%2Y^tDf?{?f*I$uCdaEo)%WGVgDAyHJ`o#?P%39w^DNJ^`6y;~i&{$IKTJ5RW-5 zulZVlWka5%H+-UPp#NbJ_9>XqkA|;qhJn8hW0ViE1wY&7*%bzZ&u!&Z*=f+EX)z<) z@HU0};UgomNW9X>6MwKTlPX}H@~4R40cE6ba(6CG1V%Prk=7AC%j9_IzI3nT{-8KW zx(v-GK99#^BXe7-C1&{hCNI|efeb4XBWk2@OadI*KN547=LX`oD#gJpjnTUeULCldg^K!91h8R2fWl6_M#;A+46fb{_5nxJxPKfZPe!Nv ze}QC^!mcN|8m^tc{37G?gfERz+;U5IvXv{l3w~iH?TqHJT~MUiVZ{_zg8Z|}t?h&> zNPJv@8SOIwIK0PEd)B;}pj{Lne8nN)$4kD^9C!JH%fu0%7j$A0IkPk*R>QmlQfgJ} zsY+2K?~|PZ>I?Q%I(RuZ{>d5R6~c80%eAC#{?!rXOkY~qYozDc+v4uUfW&2B?Tiex z@(Pvd4Fi+FpVhF~|B-%LmjSgBqom7q3(Mg_z;C6<{WDsGVWM)#8$$*{S}MD>bq1)j z)c!0@a_z}1_pF7NH@P{zljuk;bd{DRjRjEN?s^k+q%s0BB~8p6d-A(_NOr!-}kptoUt9TBCZDz;-09Z=>Sj&I~EZ0QGXtb&<$(m;S%W2eSgJM=aCnex6rCICAvSYNMeD0l^ zq|4SsYV1ToeD~hb)3rx0hCBq@jjpY+y>lloo`=xKY2R49Z1TS+^{+fVw9M9}%dAyv zyOWsG@g7;Kk-QBDKAq<&z#QA~_7BSeuXUTCrC!E5U|i)}=<3p6pXsoWPnU|N|Kjd$ z9v9@dI;{fYejqc?BzO2}B#Mj@spWstN(;C=M-!o^Mat z>ObE1QyWB(xCw^F2Tp%DsU*Nf=MrGZ_= z6aZ&(oBWsRPCJPuKLq`vy?dfyxg!zLsEVhxd>pYZv@xBXv7%jp1S}THY2?&u?tBi^ znHFm*PCUA2b@3DtppQR{1nLj{N3OahsXwcsR&@&o@I%jj`HEjpv z;7d^9lj1*^zNp}rby1m~s9D@vD;x~$DA?N)U;I;)Wo0@yOR?E%3q$lb+LKFXDBZqa z!*|>Ea}ZTFUHE&er$cV|eK^*nY(PMe_!*yG=mc?~t1bL;rPN0eulB6-@>~B1vI}7O zCHAdn3e;#Io6lrGP9b9mC9)v#;s(P8TCa|>u)YDcp0orxX4F3mr6!PqH%&dPWCihv z^;eajA-F7u|E!AqTd~W38&uLty^18;nUx8WDj`SE`nY4ybqupWlraB!mIqXs_<8K+ zIR4q9{nI%S{r75A1XuM>%xkdH{;w9nz`rkoV?AbvgW533aXHZ+z_au*|53RUk97%` z{2(-wHu>AsLx_;}=D0%OKY;ljb7c~>;P~#t@f(?%@ZSaFE%fto3Sh%tK}Yg8M!N>7 zfto3doZavmG;75#7Rd{y;yRqNcXmbd_3ZZGxt3x(Q-Aza&uoQ3BMKn0k2Yjw$}p62FE*NVRb4ru{4H z7f>2)U^xVJu#!!k=M}0BcsB@*t2g2@5h^CT#YCMke-#}A$_X(V(kVKkCkQp=*5)EB zNFXuPR$afR^Q;)8It4#+_fYAVy@r~zM=lI9SJw9qI4HQ*!AtpIBZSh%bm1ogyy2f; zeS63fZVH}s`mL`5pT$o;hlvd13jJ{tFf<3?KmaDbjSmINEe*X-@)tRP=E7Do)OF}4 z+Y$qzW0zInnPf zqicrrM?z>%`DgnL9N0gI#BgM3HU8G%MrToALa&Kq06S^$#C(Sc$TCG@I;Xh9ug<7C zAIe)5zYZGf^O!YC`kshIn}Q|FTQJ56(spe~ZIr5?X4oS7&xUZ?Y7JnxTYNr|Z8TrYE8kJST&@LXbI=?%_n-QDs7l zKO)jm`5#g#IB0D-$;vxG%f#u*n_NEE*S^f@-uXyb0sk`@7z$imLo$~wz4*Kh{Ytkh6dGcJ94k$p8j(?mg(*xZ`uNBiU z6^B^6UW<30fg>ufEwK|?ZYY13{Uc3XdVK*Ct0Z&|e*%otvVV!wXRsk=%wu5@{_mM! z8IJ_Fcr9#tP*{reK|-(51+-+50~2#g#Ci6Q00KfSJn*9rA{GN`cJCbjsJ;~-t~j6K zzMUMwAoaIK@GtN?zbahw?}29C+rExI3OHHjrxb9n9ftZ0imt0$B z`&$!9?$70s^O$HQk+c7)kz39~n7exC|6k};7nq>DnE6}Aj2O&~+v1GpFm|`E0bpU< zEuD~L$HT;U@{z_&JA5vvv0UoKOY*E%8s z>HPxWH2BVdY(V=aL1t2=60y-_uScb!Tp z>D|^=Q2%wRtI=C)Rwg5P&b~My&1t*Q=3uRE6nl(rJ@|x<#@Ep;_s0(hpSqb@H0pZY zG3$$gDgl+r!N0v{54J566SIK`<@qOgIP9vo3#5E7UK3YMn#|ues(m+3d|g zt2$1>e~`V(wwBM8rEWyS{WWwHgoe7&i$#gd_OShk~8w`qjG4ZzHn>>Dxs-M*Cno8MdFi64<3}&E%45*}U$8UTCl4HT^ULsQC zE}G%5MIOzX?K`q(EkjCR=}wxRDmM>GZZqs4!u>az3tnT!9Ol6$>%z)EPCfDO(M=OEy)JzV z*WNkSf>R3489>_0gi>Dt7c_8AjV9E&7`gMLlI}~j3z6B%50=UYrZr^*`zGJpC-&7v z`39hiO1$yq{4{|gm4Ia&t%F=#EH*yitkqljDaNnkT9Y=e%6sYU-e}T7pEp((j_ekd zc|y6R|3T~L8~rJ?4({ay(;x%bi-VRe;o!l;#`!w7%^opg{Te{tck6+v5|L`ZHV3GD z;D2@5+7v`dm$UVscgNR((=zlm!Si{5|Mrm%TxcmO0=V_Qecy!5L{-BNzUzQWMA z4S09LF`5qUW_823?c1tJbJ1uE-D#QCTp4Ho&T^1ABz}gp&kloQY{q#{%3vz5f zu^V1*%-$IMiyV1Q!NXEN#V}Werp{5OE1`S3r#Q9%Y>(Cgyufi(104d z6&@OjIj(}W>vVRmwGgumgwJN>aKu_VbGNrggg^BGIm>Iz5^3AJ!N9;C`lq+CTpl60 zP)L%@YXWK}ZjWH~8sR&?2SqY~ilWMxCKQ)-d+}QlCxP+|iZ#9iypue`eS2PVe3+b<)SrOl@WCtUWI(!0&n*kf|pQp{=>)~o1N99Rj4MAjBrT#U?UK%QE|Bv)nuimC6sGQEpevLx7G(XfZi(Y{TfVM@R)HdjUe zKRByssnwX4OpC8w%#8$O`$$Is%YE=l+M>hmqo0=V6#Rc@7q5`qEp%HaYRj8~{D4Hs zP!0K)z4jz|Bwm*IM2Y7)EWH|A{w@PEk4*_q-O1@V^9$Xb6o%gMi=-NDZlTfhOVsD? zpZfEM52u9sKWi#q9S$tvDsS%0V|SW zOsN(U2VR|4)RNfLFdwmzbGT}S0FujPGWr@7-yBfYLv|P6Jb7V2y9BbP=zBaM>AXyC zTA$HJFYKnYsAy3jW*T>YFGo+5l#A8&W}8@!*U^eacAb<13|>W}qkmNTzOzsX(fAz@ zeHa|XM&M-~O+v7{dC;e8h*4w?>w}%(rJsfGz{`=zsuOwltB#jTzdrsPcyJkH8#ZUp z9eFB#@)a!e*k=8c-G1w^-TTB*EnaF$?V$l1{(gEL6z>;ZqFhLNsx}mXTg*}o;SA7x zeE9&X8jx=z*Chki*deWBeY)IDZ*u1{`QhK54(!aePgs5#t0y^RpvURn+nN$1(N5Tu zS@?pWX8&ZkgT~qVVNYK_`pAnVGJE3i(-_T%~cYS6x(1Mf^J8*1{#x3t^WW}D=e08%+n zYx_99pNI`#x@++i}-1bTRHxXGh&o)i}IcObB*&~`ozDbSTIpS z=l{#~^M7*_`9C4$%8XGMe<5Q=L(Dix(@$W?LduM{F`~lfWiQXF$*p`j$HrL2s@}UI zR(1Ss+E*~MfY(jB!RsbqQCA^7!{6FpMEH9P{NJmXn*Vny=D%p7|9`aqL-qGx_D$wL fKZTEnM{Ev0b`5&Hq=Nqe$6$Ed>=sVv-qZg9M0E6k literal 19419 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 z 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 diff --git a/core/src/components/gallery/test/layout/gallery.e2e.ts-snapshots/gallery-masonry-best-fit-divs-variable-height-md-ltr-Mobile-Safari-linux.png b/core/src/components/gallery/test/layout/gallery.e2e.ts-snapshots/gallery-masonry-best-fit-divs-variable-height-md-ltr-Mobile-Safari-linux.png index ecab78ae12f79f0c6d8e0f0c1cd1bb097dc21d01..f2c03927b753c6f3b9505d718d94968d2e93e2d8 100644 GIT binary patch literal 11817 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 delta 7963 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 P0U6&iyIFC=HU9qrU{*rc diff --git a/core/src/components/gallery/test/layout/gallery.e2e.ts-snapshots/gallery-masonry-sequential-divs-dynamically-appended-md-ltr-Mobile-Firefox-linux.png b/core/src/components/gallery/test/layout/gallery.e2e.ts-snapshots/gallery-masonry-sequential-divs-dynamically-appended-md-ltr-Mobile-Firefox-linux.png index 8278407501dda0d2eaa46c68aa893f8704770168..e812584e1da4c486151b9c8117a2a18933e53b4f 100644 GIT binary patch literal 19750 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 literal 19749 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 diff --git a/core/src/components/gallery/test/layout/gallery.e2e.ts-snapshots/gallery-masonry-sequential-divs-dynamically-appended-md-ltr-Mobile-Safari-linux.png b/core/src/components/gallery/test/layout/gallery.e2e.ts-snapshots/gallery-masonry-sequential-divs-dynamically-appended-md-ltr-Mobile-Safari-linux.png index 232203ba278b1bdfa031fd6b816fca83b52217a6..7a5b0a30745e650d4e90f91820ab07a3efbf45fe 100644 GIT binary patch delta 6766 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 XN9ui#dvpFPfxu=qw<>Qwc=3M#G{Mg^ delta 6776 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 byN9nN)JLu+!mqRcFo9q?M)ynaK92Y=7{%9n diff --git a/core/src/components/gallery/test/layout/gallery.e2e.ts-snapshots/gallery-masonry-sequential-divs-variable-height-md-ltr-Mobile-Chrome-linux.png b/core/src/components/gallery/test/layout/gallery.e2e.ts-snapshots/gallery-masonry-sequential-divs-variable-height-md-ltr-Mobile-Chrome-linux.png index 49911676b1287caace031ca790f43429fc2a8b9b..bc87b1b7b5eb315c26372b24a30389dea3856220 100644 GIT binary patch delta 7995 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 delta 7963 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 P0U6&iyIFC=HU9qrU{*rc diff --git a/core/src/components/gallery/test/layout/gallery.e2e.ts-snapshots/gallery-masonry-sequential-divs-variable-height-md-ltr-Mobile-Firefox-linux.png b/core/src/components/gallery/test/layout/gallery.e2e.ts-snapshots/gallery-masonry-sequential-divs-variable-height-md-ltr-Mobile-Firefox-linux.png index 8278407501dda0d2eaa46c68aa893f8704770168..e812584e1da4c486151b9c8117a2a18933e53b4f 100644 GIT binary patch literal 19750 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 literal 19749 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 diff --git a/core/src/components/gallery/test/layout/gallery.e2e.ts-snapshots/gallery-masonry-sequential-divs-variable-height-md-ltr-Mobile-Safari-linux.png b/core/src/components/gallery/test/layout/gallery.e2e.ts-snapshots/gallery-masonry-sequential-divs-variable-height-md-ltr-Mobile-Safari-linux.png index 232203ba278b1bdfa031fd6b816fca83b52217a6..7a5b0a30745e650d4e90f91820ab07a3efbf45fe 100644 GIT binary patch delta 6766 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 XN9ui#dvpFPfxu=qw<>Qwc=3M#G{Mg^ delta 6776 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 byN9nN)JLu+!mqRcFo9q?M)ynaK92Y=7{%9n From d849773cec7c271fc8eccd36ad9aeab58e48ec7e Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Fri, 5 Jun 2026 13:28:48 -0400 Subject: [PATCH 09/13] test(gallery): update spec test with new structure --- core/src/components/gallery/gallery.spec.ts | 87 +++++++++++++-------- 1 file changed, 56 insertions(+), 31 deletions(-) diff --git a/core/src/components/gallery/gallery.spec.ts b/core/src/components/gallery/gallery.spec.ts index 609bf22dc5e..45799fcee2e 100644 --- a/core/src/components/gallery/gallery.spec.ts +++ b/core/src/components/gallery/gallery.spec.ts @@ -746,53 +746,78 @@ describe('gallery', () => { describe('gallery: layout', () => { describe('getItems()', () => { - it('should include direct child SVG elements with HTML elements', () => { - const div = document.createElement('div'); - const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); - el.appendChild(div); - el.appendChild(svg); + it('should collect direct ion-gallery-item children as items', () => { + const itemOne = document.createElement('ion-gallery-item'); + const itemTwo = document.createElement('ion-gallery-item'); + el.appendChild(itemOne); + el.appendChild(itemTwo); const items = (sharedGallery as any).getItems(); - expect(items).toEqual([div, svg]); - expect(items[1].namespaceURI).toBe('http://www.w3.org/2000/svg'); + expect(items).toEqual([itemOne, itemTwo]); }); - it('should exclude direct children without a usable CSSStyleDeclaration (no setProperty)', () => { - const included = document.createElement('div'); - const excluded = document.createElement('div'); - Object.defineProperty(excluded, 'style', { - configurable: true, - enumerable: true, - get() { - return { cssText: '' } as unknown as CSSStyleDeclaration; - }, - }); - el.appendChild(included); - el.appendChild(excluded); + it('should flatten a wrapper element and collapse its box with display: contents', () => { + const wrapper = document.createElement('div'); + const itemOne = document.createElement('ion-gallery-item'); + const itemTwo = document.createElement('ion-gallery-item'); + wrapper.appendChild(itemOne); + wrapper.appendChild(itemTwo); + el.appendChild(wrapper); const items = (sharedGallery as any).getItems(); - expect(items).toEqual([included]); + expect(items).toEqual([itemOne, itemTwo]); + expect(wrapper.style.display).toBe('contents'); }); - it('should apply masonry grid placement styles to slotted SVG elements', () => { - const div = document.createElement('div'); - const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); - el.appendChild(div); - el.appendChild(svg); + it('should warn and ignore children that do not contain an ion-gallery-item', () => { + const warningSpy = jest.spyOn(logging, 'printIonWarning').mockImplementation(() => {}); + + el.appendChild(document.createElement('img')); const items = (sharedGallery as any).getItems(); - jest.spyOn(div, 'getBoundingClientRect').mockReturnValue({ height: 20 } as DOMRect); - jest.spyOn(svg, 'getBoundingClientRect').mockReturnValue({ height: 30 } as DOMRect); + expect(items).toEqual([]); + expect(warningSpy).toHaveBeenCalledWith( + expect.stringContaining('[ion-gallery] - Gallery items must be wrapped in "ion-gallery-item" components.'), + el + ); + + warningSpy.mockRestore(); + }); + + it('should only warn once about invalid children', () => { + const warningSpy = jest.spyOn(logging, 'printIonWarning').mockImplementation(() => {}); + + el.appendChild(document.createElement('img')); + el.appendChild(document.createElement('span')); + + (sharedGallery as any).getItems(); + (sharedGallery as any).getItems(); + + expect(warningSpy).toHaveBeenCalledTimes(1); + + warningSpy.mockRestore(); + }); + + it('should apply masonry grid placement styles to items', () => { + const itemOne = document.createElement('ion-gallery-item'); + const itemTwo = document.createElement('ion-gallery-item'); + el.appendChild(itemOne); + el.appendChild(itemTwo); + + jest.spyOn(itemOne, 'getBoundingClientRect').mockReturnValue({ height: 20 } as DOMRect); + jest.spyOn(itemTwo, 'getBoundingClientRect').mockReturnValue({ height: 30 } as DOMRect); + + const items = (sharedGallery as any).getItems(); (sharedGallery as any).layoutMasonry(items, 10, 0, 2); - expect(div.style.gridColumn).toBe('1'); - expect(svg.style.gridColumn).toBe('2'); - expect(svg.style.gridRowStart).not.toBe(''); - expect(svg.style.gridRowEnd).not.toBe(''); + expect(itemOne.style.gridColumn).toBe('1'); + expect(itemTwo.style.gridColumn).toBe('2'); + expect(itemTwo.style.gridRowStart).not.toBe(''); + expect(itemTwo.style.gridRowEnd).not.toBe(''); }); }); From 376fb252b8336feadab79b9c0bb8f501b90e1d55 Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Fri, 5 Jun 2026 13:54:53 -0400 Subject: [PATCH 10/13] test(gallery): add new wrapper test verifying the items work the same --- .../gallery/test/wrapper/gallery.e2e.ts | 84 +++++++++++++++++++ .../gallery/test/wrapper/index.html | 79 +++++++++++++++++ 2 files changed, 163 insertions(+) create mode 100644 core/src/components/gallery/test/wrapper/gallery.e2e.ts create mode 100644 core/src/components/gallery/test/wrapper/index.html diff --git a/core/src/components/gallery/test/wrapper/gallery.e2e.ts b/core/src/components/gallery/test/wrapper/gallery.e2e.ts new file mode 100644 index 00000000000..7d5cdd92fe4 --- /dev/null +++ b/core/src/components/gallery/test/wrapper/gallery.e2e.ts @@ -0,0 +1,84 @@ +import { expect } from '@playwright/test'; +import { configs, test } from '@utils/test/playwright'; + +import { sharedStyles } from '../utils'; + +const LAYOUT_OPTIONS = ['uniform', 'masonry']; +const ITEM_HEIGHTS = [175, 30, 90, 50, 110, 175, 130, 80, 110, 90, 100, 150]; + +const buildItems = () => + ITEM_HEIGHTS.map( + (height, i) => `
${i + 1}
` + ).join(''); + +/** + * A wrapper element that contains gallery items (e.g. a layout `
` + * or a framework-generated wrapper) must be transparent to the gallery + * layout. The gallery collapses the wrapper with `display: contents` + * so the nested items participate in the grid as if the wrapper were + * not present. + * + * Rather than rely on a screenshot, this asserts that a wrapped gallery lays + * its items out identically to an unwrapped one. + * + * This behavior does not vary across modes/directions. + */ +configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ config, title }) => { + LAYOUT_OPTIONS.forEach((layout) => { + test.describe(title(`gallery: wrapper (${layout})`), () => { + test('should lay out wrapped items identically to unwrapped items', async ({ page }) => { + const items = buildItems(); + + await page.setContent( + ` + + + ${items} + + +
${items}
+
+ `, + config + ); + + // The wrapper's box is collapsed so it does not affect the grid. + await expect + .poll(() => page.locator('#wrapped .some-wrapper').evaluate((el) => getComputedStyle(el).display)) + .toBe('contents'); + + const measure = () => + page.evaluate(() => { + const itemRects = (gallerySelector: string) => { + const gallery = document.querySelector(gallerySelector)!; + const galleryRect = gallery.getBoundingClientRect(); + return Array.from(gallery.querySelectorAll('ion-gallery-item')).map((item) => { + const rect = item.getBoundingClientRect(); + return { + left: Math.round(rect.left - galleryRect.left), + top: Math.round(rect.top - galleryRect.top), + width: Math.round(rect.width), + height: Math.round(rect.height), + }; + }); + }; + + return { unwrapped: itemRects('#unwrapped'), wrapped: itemRects('#wrapped') }; + }); + + // Wait for both layouts to settle, then confirm they match exactly. + await expect + .poll(async () => { + const { unwrapped, wrapped } = await measure(); + return JSON.stringify(unwrapped) === JSON.stringify(wrapped); + }) + .toBe(true); + + const { unwrapped, wrapped } = await measure(); + expect(wrapped).toEqual(unwrapped); + }); + }); + }); +}); diff --git a/core/src/components/gallery/test/wrapper/index.html b/core/src/components/gallery/test/wrapper/index.html new file mode 100644 index 00000000000..28aaa7ab656 --- /dev/null +++ b/core/src/components/gallery/test/wrapper/index.html @@ -0,0 +1,79 @@ + + + + + Gallery - Wrapper + + + + + + + + + + + + + Gallery - Wrapper + + Toggle Layout + + + + + +

Layout: Uniform

+ +
+ One + Two + Three + Four + Five + Six + Seven + Eight + Nine + Ten + Eleven + Twelve +
+
+ + +
+
+ + From 8e12285a3d177878d3344758b3984c83217682a3 Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Fri, 5 Jun 2026 13:54:57 -0400 Subject: [PATCH 11/13] test(gallery-item): add new spec test for gallery-item --- .../gallery-item/gallery-item.spec.ts | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 core/src/components/gallery-item/gallery-item.spec.ts diff --git a/core/src/components/gallery-item/gallery-item.spec.ts b/core/src/components/gallery-item/gallery-item.spec.ts new file mode 100644 index 00000000000..9ae10b15371 --- /dev/null +++ b/core/src/components/gallery-item/gallery-item.spec.ts @@ -0,0 +1,83 @@ +import { newSpecPage } from '@stencil/core/testing'; +import * as logging from '@utils/logging'; + +import { Gallery } from '../gallery/gallery'; + +import { GalleryItem } from './gallery-item'; + +describe('gallery-item', () => { + let originalMutationObserver: typeof globalThis.MutationObserver | undefined; + let originalResizeObserver: typeof globalThis.ResizeObserver | undefined; + + beforeEach(() => { + // The spec environment does not implement these observers, which the + // components rely on. Provide no-op stand-ins for the duration of the test. + originalMutationObserver = globalThis.MutationObserver; + originalResizeObserver = globalThis.ResizeObserver; + (globalThis as any).MutationObserver = class { + observe() {} + disconnect() {} + }; + (globalThis as any).ResizeObserver = class { + observe() {} + disconnect() {} + }; + }); + + afterEach(() => { + (globalThis as any).MutationObserver = originalMutationObserver; + (globalThis as any).ResizeObserver = originalResizeObserver; + jest.restoreAllMocks(); + }); + + it('should warn when not used inside an ion-gallery', async () => { + const warningSpy = jest.spyOn(logging, 'printIonWarning').mockImplementation(() => {}); + + await newSpecPage({ + components: [GalleryItem], + html: ``, + }); + + expect(warningSpy).toHaveBeenCalledWith( + expect.stringContaining( + '[ion-gallery-item] - This component should be used as a child of an "ion-gallery" component.' + ), + expect.anything() + ); + }); + + it('should not warn when used inside an ion-gallery', async () => { + const warningSpy = jest.spyOn(logging, 'printIonWarning').mockImplementation(() => {}); + + await newSpecPage({ + components: [Gallery, GalleryItem], + html: ``, + }); + + expect(warningSpy).not.toHaveBeenCalled(); + }); + + it('should reflect the parent gallery uniform layout as a class', async () => { + const page = await newSpecPage({ + components: [Gallery, GalleryItem], + html: ``, + }); + + const item = page.body.querySelector('ion-gallery-item')!; + + expect(item.classList.contains('in-gallery-layout-uniform')).toBe(true); + expect(item.classList.contains('in-gallery-layout-masonry')).toBe(false); + }); + + it('should reflect the parent gallery masonry layout as a class', async () => { + const page = await newSpecPage({ + components: [Gallery, GalleryItem], + html: ``, + }); + + const item = page.body.querySelector('ion-gallery-item')!; + + expect(item.classList.contains('in-gallery-layout-masonry')).toBe(true); + expect(item.classList.contains('in-gallery-layout-uniform')).toBe(false); + }); +}); From c5e9d9b0f8b397cb0f5371c08b3ec00f79de3d11 Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Fri, 5 Jun 2026 14:11:47 -0400 Subject: [PATCH 12/13] refactor(gallery): type gallery items as HTMLIonGalleryItemElement --- core/src/components/gallery/gallery.tsx | 41 ++++++------------------- 1 file changed, 10 insertions(+), 31 deletions(-) diff --git a/core/src/components/gallery/gallery.tsx b/core/src/components/gallery/gallery.tsx index 68ccbe380bf..889572f5606 100644 --- a/core/src/components/gallery/gallery.tsx +++ b/core/src/components/gallery/gallery.tsx @@ -27,13 +27,6 @@ const BREAKPOINT_ORDER: GalleryBreakpoint[] = ['xs', 'sm', 'md', 'lg', 'xl', 'xx */ const GALLERY_ITEM_SELECTOR = 'ion-gallery-item'; -/** - * Grid items placed by the gallery that support CSS grid placement and inline - * `style`. This is a union of `HTMLElement` and `SVGElement` to support both - * HTML and SVG elements. - */ -type GalleryItemElement = HTMLElement | SVGElement; - /** * @virtualProp {"ios" | "md"} mode - The mode determines the platform behaviors of the component. * @virtualProp {"ios" | "md" | "ionic"} theme - The theme determines the visual appearance of the component. @@ -478,14 +471,6 @@ export class Gallery implements ComponentInterface { this.el.style.setProperty('--internal-gallery-gap', `${gap}`); } - /** - * Check that an element can be a grid item with inline placement styles - * (HTML elements and SVG elements expose a usable `style.setProperty`). - */ - private isGalleryItemElement(element: Element): element is GalleryItemElement { - return typeof (element as any).style?.setProperty === 'function'; - } - /** * Return the `ion-gallery-item` elements to place in the grid. Each item is a * direct grid cell. A direct child that is not an `ion-gallery-item` is @@ -493,33 +478,27 @@ export class Gallery implements ComponentInterface { * collapsed with `display: contents` so the nested items participate in the * gallery grid. Children that contain no `ion-gallery-item` are ignored. */ - private getItems(): GalleryItemElement[] { - const items: GalleryItemElement[] = []; + private getItems(): HTMLIonGalleryItemElement[] { + const items: HTMLIonGalleryItemElement[] = []; Array.from(this.el.children).forEach((child) => { - if (!this.isGalleryItemElement(child)) { - return; - } - // Standard path: is a direct child of . if (child.matches(GALLERY_ITEM_SELECTOR)) { - items.push(child); + items.push(child as HTMLIonGalleryItemElement); return; } // Compatibility path: a wrapper element may contain // components. Collapse the wrapper's box so the items participate in the // gallery grid. - const nestedItems = Array.from(child.querySelectorAll(GALLERY_ITEM_SELECTOR) as NodeListOf).filter( - (nested): nested is GalleryItemElement => this.isGalleryItemElement(nested) - ); + const nestedItems = Array.from(child.querySelectorAll(GALLERY_ITEM_SELECTOR)); if (nestedItems.length === 0) { this.warnInvalidItems(); return; } - child.style.display = 'contents'; + (child as HTMLElement).style.display = 'contents'; items.push(...nestedItems); }); @@ -546,7 +525,7 @@ export class Gallery implements ComponentInterface { * Clear the item styles for the given item element. * This is used to switch between uniform and masonry layouts. */ - private clearItemStyles(itemEl: GalleryItemElement) { + private clearItemStyles(itemEl: HTMLIonGalleryItemElement) { itemEl.style.gridRowStart = ''; itemEl.style.gridRowEnd = ''; itemEl.style.gridColumn = ''; @@ -564,7 +543,7 @@ export class Gallery implements ComponentInterface { * Whether the item contains any images that have not finished loading. * Used to defer masonry placement until the rendered height is final. */ - private hasUnloadedImages(itemEl: GalleryItemElement): boolean { + private hasUnloadedImages(itemEl: HTMLIonGalleryItemElement): boolean { return Array.from(itemEl.querySelectorAll('img')).some((img) => !img.complete || img.naturalHeight === 0); } @@ -572,7 +551,7 @@ export class Gallery implements ComponentInterface { * Convert a rendered item height to the number of grid rows it should span. * Returns undefined when the item has images that are not fully loaded yet. */ - private calculateRowSpan(itemEl: GalleryItemElement, rowHeight: number, rowGap: number) { + private calculateRowSpan(itemEl: HTMLIonGalleryItemElement, rowHeight: number, rowGap: number) { if (this.hasUnloadedImages(itemEl)) { return undefined; } @@ -614,9 +593,9 @@ export class Gallery implements ComponentInterface { /** * Apply masonry placement by assigning each item a column and row span. */ - private layoutMasonry(items: GalleryItemElement[], rowHeight: number, rowGap: number, columns: number) { + private layoutMasonry(items: HTMLIonGalleryItemElement[], rowHeight: number, rowGap: number, columns: number) { const columnHeights = new Array(columns).fill(0); - const lastItemsByColumn = new Array(columns).fill(undefined); + const lastItemsByColumn = new Array(columns).fill(undefined); items.forEach((itemEl, i) => { itemEl.style.marginBottom = ''; From 0ede958fa535a10a47feed48aa80acd6eb869a27 Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Fri, 5 Jun 2026 16:04:46 -0400 Subject: [PATCH 13/13] style(gallery): remove no longer needed style --- core/src/components/gallery-item/gallery-item.scss | 3 --- 1 file changed, 3 deletions(-) diff --git a/core/src/components/gallery-item/gallery-item.scss b/core/src/components/gallery-item/gallery-item.scss index 991fb86203f..06f82363b6a 100644 --- a/core/src/components/gallery-item/gallery-item.scss +++ b/core/src/components/gallery-item/gallery-item.scss @@ -41,9 +41,6 @@ // -------------------------------------------------- :host(.in-gallery-layout-masonry) { - // Clear min-height so items size to their content - min-height: unset; - // The spacing between stacked items. Applies to all items except // for the last item in each column to remove any trailing space. margin-bottom: var(--internal-gallery-gap, 16px);