From e5634d45ee5fd32715f6e6b75e0448f74ee1f8f2 Mon Sep 17 00:00:00 2001 From: Shane Date: Tue, 30 Dec 2025 10:33:41 -0800 Subject: [PATCH 01/16] fix(modal): prevent card modal animation on viewport resize when modal is closed (#30894) Issue number: resolves #30679 --------- ## What is the current behavior? When a page contains a card modal with a `presentingElement`, resizing the viewport (e.g., rotating from portrait to landscape) triggers the card modal's "lean back" animation on the presenting element, even when the modal has never been opened. ## What is the new behavior? Viewport resize events no longer trigger the presenting element animation when the modal is not presented. The animation only runs when the modal is actually open. ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information Current dev build: ``` 8.7.16-dev.11767028735.16932cea ``` --- core/src/components/modal/modal.tsx | 5 + .../test/card-viewport-resize/modal.e2e.ts | 176 ++++++++++++++++++ 2 files changed, 181 insertions(+) create mode 100644 core/src/components/modal/test/card-viewport-resize/modal.e2e.ts diff --git a/core/src/components/modal/modal.tsx b/core/src/components/modal/modal.tsx index 174ac2f9d8a..a96d59c8e9f 100644 --- a/core/src/components/modal/modal.tsx +++ b/core/src/components/modal/modal.tsx @@ -1116,6 +1116,11 @@ export class Modal implements ComponentInterface, OverlayInterface { } private handleViewTransition() { + // Only run view transitions when the modal is presented + if (!this.presented) { + return; + } + const isPortrait = window.innerWidth < 768; // Only transition if view state actually changed diff --git a/core/src/components/modal/test/card-viewport-resize/modal.e2e.ts b/core/src/components/modal/test/card-viewport-resize/modal.e2e.ts new file mode 100644 index 00000000000..3d7adc849c7 --- /dev/null +++ b/core/src/components/modal/test/card-viewport-resize/modal.e2e.ts @@ -0,0 +1,176 @@ +import { expect } from '@playwright/test'; +import { configs, test } from '@utils/test/playwright'; + +configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => { + test.describe(title('card modal: viewport resize'), () => { + test.beforeEach(async ({ page }) => { + // Start in portrait mode (mobile) + await page.setViewportSize({ width: 375, height: 667 }); + + await page.setContent( + ` + +
+ + + Card Viewport Resize Test + + + +

This page tests that viewport resize does not trigger card modal animation when modal is closed.

+ Open Card Modal + + + + Card Modal + + Close + + + + +

Modal content

+
+
+
+
+
+ + + `, + config + ); + }); + + test('should not animate presenting element when viewport resizes and modal is closed', async ({ + page, + }, testInfo) => { + testInfo.annotations.push({ + type: 'issue', + description: 'https://github.com/ionic-team/ionic-framework/issues/30679', + }); + + const mainPage = page.locator('#main-page'); + + // Verify the presenting element has no transform initially + const initialTransform = await mainPage.evaluate((el) => { + return window.getComputedStyle(el).transform; + }); + expect(initialTransform).toBe('none'); + + // Resize from portrait to landscape (crossing the 768px threshold) + await page.setViewportSize({ width: 900, height: 375 }); + + // Wait for the debounced resize handler (50ms) plus some buffer + await page.waitForTimeout(150); + + // The presenting element should still have no transform + // If the bug exists, it would have scale(0.93) or similar applied + const afterResizeTransform = await mainPage.evaluate((el) => { + return window.getComputedStyle(el).transform; + }); + expect(afterResizeTransform).toBe('none'); + }); + + test('should not animate presenting element when resizing multiple times with modal closed', async ({ page }) => { + const mainPage = page.locator('#main-page'); + + // Multiple resize cycles should not trigger the animation + for (let i = 0; i < 3; i++) { + // Portrait to landscape + await page.setViewportSize({ width: 900, height: 375 }); + await page.waitForTimeout(150); + + let transform = await mainPage.evaluate((el) => { + return window.getComputedStyle(el).transform; + }); + expect(transform).toBe('none'); + + // Landscape to portrait + await page.setViewportSize({ width: 375, height: 667 }); + await page.waitForTimeout(150); + + transform = await mainPage.evaluate((el) => { + return window.getComputedStyle(el).transform; + }); + expect(transform).toBe('none'); + } + }); + + test('should still animate presenting element correctly when modal is open and viewport resizes', async ({ + page, + }) => { + const mainPage = page.locator('#main-page'); + const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent'); + + // Open the modal + await page.click('#open-modal'); + await ionModalDidPresent.next(); + + // When modal is open in portrait, presenting element should be transformed + let transform = await mainPage.evaluate((el) => { + return window.getComputedStyle(el).transform; + }); + // The presenting element should have a scale transform when modal is open + expect(transform).not.toBe('none'); + + // Resize to landscape while modal is open + await page.setViewportSize({ width: 900, height: 375 }); + await page.waitForTimeout(150); + + // The modal transitions correctly - in landscape mode the presenting element + // should have different (or no) transform than portrait + transform = await mainPage.evaluate((el) => { + return window.getComputedStyle(el).transform; + }); + + // Note: The exact transform depends on the landscape handling + // The main point is that when modal IS open, the transition should work + // This test just ensures we don't break existing functionality + }); + + test('presenting element should return to normal after modal is dismissed', async ({ page }) => { + const mainPage = page.locator('#main-page'); + const ionModalDidPresent = await page.spyOnEvent('ionModalDidPresent'); + const ionModalDidDismiss = await page.spyOnEvent('ionModalDidDismiss'); + + // Open the modal + await page.click('#open-modal'); + await ionModalDidPresent.next(); + + // Close the modal + await page.click('#close-modal'); + await ionModalDidDismiss.next(); + + // Wait for animations to complete + await page.waitForTimeout(500); + + // The presenting element should be back to normal + const transform = await mainPage.evaluate((el) => { + return window.getComputedStyle(el).transform; + }); + expect(transform).toBe('none'); + + // Now resize the viewport - should not trigger animation + await page.setViewportSize({ width: 900, height: 375 }); + await page.waitForTimeout(150); + + const afterResizeTransform = await mainPage.evaluate((el) => { + return window.getComputedStyle(el).transform; + }); + expect(afterResizeTransform).toBe('none'); + }); + }); +}); From 3b3318da513b199128f3822bd8226797cd118b0f Mon Sep 17 00:00:00 2001 From: Shane Date: Tue, 13 Jan 2026 10:42:50 -0800 Subject: [PATCH 02/16] fix(input): prevent placeholder from overlapping start slot during scroll assist (#30896) Issue number: resolves internal --------- ## What is the current behavior? On iOS, when focusing an `ion-input` or `ion-textarea` that requires scrolling into view (scroll assist), the placeholder text shifts to the left and overlaps any content in the start slot (e.g., icons). This occurs because the cloned input used during scroll assist is positioned at the container's left edge rather than at the native input's actual position. Additionally, when quickly switching between inputs before scroll assist completes, focus jumps back to the original input. ## What is the new behavior? The cloned input is now positioned at the same offset as the native input, preventing the placeholder from shifting or overlapping start slot content during scroll assist. This works correctly for both LTR and RTL layouts. Also, scroll assist no longer steals focus back if the user has moved focus to another element while scrolling was in progress. ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information Current dev build: ``` 8.7.16-dev.11767042721.11309185 ``` --- core/src/components/input/input.scss | 8 ++++++-- core/src/components/textarea/textarea.scss | 8 ++++++-- core/src/utils/input-shims/hacks/common.ts | 19 +++++++++++++++++-- .../utils/input-shims/hacks/scroll-assist.ts | 10 ++++++++-- 4 files changed, 37 insertions(+), 8 deletions(-) diff --git a/core/src/components/input/input.scss b/core/src/components/input/input.scss index 2161cc3dfb5..476cb012bee 100644 --- a/core/src/components/input/input.scss +++ b/core/src/components/input/input.scss @@ -165,9 +165,13 @@ // otherwise the .input-cover will not be rendered at all // The input cover is not clickable when the input is disabled .cloned-input { - @include position(0, null, 0, 0); - position: absolute; + top: 0; + bottom: 0; + + // Reset height since absolute positioning with top/bottom handles sizing + height: auto; + max-height: none; pointer-events: none; } diff --git a/core/src/components/textarea/textarea.scss b/core/src/components/textarea/textarea.scss index a23893b8b40..58c00824f65 100644 --- a/core/src/components/textarea/textarea.scss +++ b/core/src/components/textarea/textarea.scss @@ -205,9 +205,13 @@ // otherwise the .input-cover will not be rendered at all // The input cover is not clickable when the input is disabled .cloned-input { - @include position(0, null, 0, 0); - position: absolute; + top: 0; + bottom: 0; + + // Reset height since absolute positioning with top/bottom handles sizing + height: auto; + max-height: none; pointer-events: none; } diff --git a/core/src/utils/input-shims/hacks/common.ts b/core/src/utils/input-shims/hacks/common.ts index 2f42749c2ed..7553c07e103 100644 --- a/core/src/utils/input-shims/hacks/common.ts +++ b/core/src/utils/input-shims/hacks/common.ts @@ -68,11 +68,26 @@ const addClone = ( if (disabledClonedInput) { clonedEl.disabled = true; } + + /** + * Position the clone at the same horizontal offset as the native input + * to prevent the placeholder from overlapping start slot content (e.g., icons). + */ + const doc = componentEl.ownerDocument!; + const isRTL = doc.dir === 'rtl'; + + if (isRTL) { + const parentWidth = (parentEl as HTMLElement).offsetWidth; + const startOffset = parentWidth - inputEl.offsetLeft - inputEl.offsetWidth; + clonedEl.style.insetInlineStart = `${startOffset}px`; + } else { + clonedEl.style.insetInlineStart = `${inputEl.offsetLeft}px`; + } + parentEl.appendChild(clonedEl); cloneMap.set(componentEl, clonedEl); - const doc = componentEl.ownerDocument!; - const tx = doc.dir === 'rtl' ? 9999 : -9999; + const tx = isRTL ? 9999 : -9999; componentEl.style.pointerEvents = 'none'; inputEl.style.transform = `translate3d(${tx}px,${inputRelativeY}px,0) scale(0)`; }; diff --git a/core/src/utils/input-shims/hacks/scroll-assist.ts b/core/src/utils/input-shims/hacks/scroll-assist.ts index fb2b1900202..9d4685cb8da 100644 --- a/core/src/utils/input-shims/hacks/scroll-assist.ts +++ b/core/src/utils/input-shims/hacks/scroll-assist.ts @@ -291,8 +291,14 @@ const jsSetFocus = async ( // give the native text input focus relocateInput(componentEl, inputEl, false, scrollData.inputSafeY); - // ensure this is the focused input - setManualFocus(inputEl); + /** + * If focus has moved to another element while scroll assist was running, + * don't steal focus back. This prevents focus jumping when users + * quickly switch between inputs or tap other elements. + */ + if (document.activeElement === inputEl) { + setManualFocus(inputEl); + } /** * When the input is about to be blurred From f99d0007a8ffc9c7d3d2636e912c37c12112b21d Mon Sep 17 00:00:00 2001 From: Shane Date: Wed, 14 Jan 2026 07:59:14 -0800 Subject: [PATCH 03/16] fix(tab-bar): prevent keyboard controller memory leak on rapid mount/unmount (#30906) Issue number: resolves internal --------- ## What is the current behavior? When `ion-tab-bar` is rapidly mounted and unmounted, a race condition in connectedCallback can cause the keyboard controller to be created after the component has been disconnected. This results in orphaned event listeners (`keyboardWillShow`, `keyboardWillHide`) on the window object that are never cleaned up, causing a memory leak. ## What is the new behavior? The keyboard controller is now properly destroyed in all scenarios: - If the component is disconnected while createKeyboardController is pending, the promise is tracked and destroyed when it resolves - If a new connectedCallback runs before the previous async completes, the stale controller is destroyed The promise tracking pattern ensures only the most recent async operation assigns its result ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information Current dev build: ``` 8.7.17-dev.11767895575.16ea7cef ``` I was unable to find a way to create tests that accurately identified if this problem was occurring. Memory leaks are notoriously difficult to created automated tests for. I ultimately removed my previous attempts because I didn't want to give a false sense of security. --- core/src/components/footer/footer.tsx | 24 +++++++++++++++++++++++- core/src/components/tab-bar/tab-bar.tsx | 24 +++++++++++++++++++++++- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/core/src/components/footer/footer.tsx b/core/src/components/footer/footer.tsx index e857f9afda1..23d7e5d48ad 100644 --- a/core/src/components/footer/footer.tsx +++ b/core/src/components/footer/footer.tsx @@ -22,6 +22,7 @@ export class Footer implements ComponentInterface { private scrollEl?: HTMLElement; private contentScrollCallback?: () => void; private keyboardCtrl: KeyboardController | null = null; + private keyboardCtrlPromise: Promise | null = null; @State() private keyboardVisible = false; @@ -52,7 +53,7 @@ export class Footer implements ComponentInterface { } async connectedCallback() { - this.keyboardCtrl = await createKeyboardController(async (keyboardOpen, waitForResize) => { + const promise = createKeyboardController(async (keyboardOpen, waitForResize) => { /** * If the keyboard is hiding, then we need to wait * for the webview to resize. Otherwise, the footer @@ -64,11 +65,32 @@ export class Footer implements ComponentInterface { this.keyboardVisible = keyboardOpen; // trigger re-render by updating state }); + this.keyboardCtrlPromise = promise; + + const keyboardCtrl = await promise; + + /** + * Only assign if this is still the current promise. + * Otherwise, a new connectedCallback has started or + * disconnectedCallback was called, so destroy this instance. + */ + if (this.keyboardCtrlPromise === promise) { + this.keyboardCtrl = keyboardCtrl; + this.keyboardCtrlPromise = null; + } else { + keyboardCtrl.destroy(); + } } disconnectedCallback() { + if (this.keyboardCtrlPromise) { + this.keyboardCtrlPromise.then((ctrl) => ctrl.destroy()); + this.keyboardCtrlPromise = null; + } + if (this.keyboardCtrl) { this.keyboardCtrl.destroy(); + this.keyboardCtrl = null; } } diff --git a/core/src/components/tab-bar/tab-bar.tsx b/core/src/components/tab-bar/tab-bar.tsx index d17bb0ba145..d8a03cdb71c 100644 --- a/core/src/components/tab-bar/tab-bar.tsx +++ b/core/src/components/tab-bar/tab-bar.tsx @@ -22,6 +22,7 @@ import type { TabBarChangedEventDetail } from './tab-bar-interface'; }) export class TabBar implements ComponentInterface { private keyboardCtrl: KeyboardController | null = null; + private keyboardCtrlPromise: Promise | null = null; private didLoad = false; @Element() el!: HTMLElement; @@ -88,7 +89,7 @@ export class TabBar implements ComponentInterface { } async connectedCallback() { - this.keyboardCtrl = await createKeyboardController(async (keyboardOpen, waitForResize) => { + const promise = createKeyboardController(async (keyboardOpen, waitForResize) => { /** * If the keyboard is hiding, then we need to wait * for the webview to resize. Otherwise, the tab bar @@ -100,11 +101,32 @@ export class TabBar implements ComponentInterface { this.keyboardVisible = keyboardOpen; // trigger re-render by updating state }); + this.keyboardCtrlPromise = promise; + + const keyboardCtrl = await promise; + + /** + * Only assign if this is still the current promise. + * Otherwise, a new connectedCallback has started or + * disconnectedCallback was called, so destroy this instance. + */ + if (this.keyboardCtrlPromise === promise) { + this.keyboardCtrl = keyboardCtrl; + this.keyboardCtrlPromise = null; + } else { + keyboardCtrl.destroy(); + } } disconnectedCallback() { + if (this.keyboardCtrlPromise) { + this.keyboardCtrlPromise.then((ctrl) => ctrl.destroy()); + this.keyboardCtrlPromise = null; + } + if (this.keyboardCtrl) { this.keyboardCtrl.destroy(); + this.keyboardCtrl = null; } } From ab733b71dd355d9486757f219fe09acaefeeefcc Mon Sep 17 00:00:00 2001 From: Shane Date: Wed, 14 Jan 2026 08:17:33 -0800 Subject: [PATCH 04/16] fix(input): prevent Android TalkBack from focusing label separately (#30895) Issue number: resolves internal --------- ## What is the current behavior? When using `ion-input` with a label on Android, TalkBack treats the visual label text as a separate focusable element. This causes the initial focus to land on the label instead of the input field, creating a confusing experience for screen reader users. ## What is the new behavior? The label text wrapper is now hidden from the accessibility tree via `aria-hidden="true"`, while the native input maintains proper labeling through `aria-labelledby`. This ensures Android TalkBack focuses directly on the input field while still announcing the label correctly. ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information Current dev build: ``` 8.7.16-dev.11767032989.1ae720d0 ``` --- core/src/components/input/input.tsx | 49 +++++++++- .../components/input/test/a11y/input.e2e.ts | 98 +++++++++++++++++++ 2 files changed, 144 insertions(+), 3 deletions(-) diff --git a/core/src/components/input/input.tsx b/core/src/components/input/input.tsx index 19c5a9d406f..575a14df9d6 100644 --- a/core/src/components/input/input.tsx +++ b/core/src/components/input/input.tsx @@ -48,6 +48,7 @@ export class Input implements ComponentInterface { private inputId = `ion-input-${inputIds++}`; private helperTextId = `${this.inputId}-helper-text`; private errorTextId = `${this.inputId}-error-text`; + private labelTextId = `${this.inputId}-label`; private inheritedAttributes: Attributes = {}; private isComposing = false; private slotMutationController?: SlotMutationController; @@ -406,7 +407,12 @@ export class Input implements ComponentInterface { connectedCallback() { const { el } = this; - this.slotMutationController = createSlotMutationController(el, ['label', 'start', 'end'], () => forceUpdate(this)); + this.slotMutationController = createSlotMutationController(el, ['label', 'start', 'end'], () => { + this.setSlottedLabelId(); + forceUpdate(this); + }); + + this.setSlottedLabelId(); this.notchController = createNotchController( el, () => this.notchSpacerEl, @@ -721,7 +727,7 @@ export class Input implements ComponentInterface { } private renderLabel() { - const { label } = this; + const { label, labelTextId } = this; return (
- {label === undefined ? :
{label}
} + {label === undefined ? ( + + ) : ( +
+ {label} +
+ )}
); } @@ -743,6 +758,33 @@ export class Input implements ComponentInterface { return this.el.querySelector('[slot="label"]'); } + /** + * Ensures the slotted label element has an ID for aria-labelledby. + * If no ID exists, we assign one using our generated labelTextId. + */ + private setSlottedLabelId() { + const slottedLabel = this.labelSlot; + if (slottedLabel && !slottedLabel.id) { + slottedLabel.id = this.labelTextId; + } + } + + /** + * Returns the ID to use for aria-labelledby on the native input, + * or undefined if aria-label is explicitly set (to avoid conflicts). + */ + private getLabelledById(): string | undefined { + if (this.inheritedAttributes['aria-label']) { + return undefined; + } + + if (this.label !== undefined) { + return this.labelTextId; + } + + return this.labelSlot?.id || undefined; + } + /** * Returns `true` if label content is provided * either by a prop or a content. If you want @@ -898,6 +940,7 @@ export class Input implements ComponentInterface { onCompositionend={this.onCompositionEnd} aria-describedby={this.getHintTextID()} aria-invalid={this.isInvalid ? 'true' : undefined} + aria-labelledby={this.getLabelledById()} {...this.inheritedAttributes} /> {this.clearInput && !readonly && !disabled && ( diff --git a/core/src/components/input/test/a11y/input.e2e.ts b/core/src/components/input/test/a11y/input.e2e.ts index 6a40385c925..21ce46c52b2 100644 --- a/core/src/components/input/test/a11y/input.e2e.ts +++ b/core/src/components/input/test/a11y/input.e2e.ts @@ -57,6 +57,104 @@ configs({ directions: ['ltr'], palettes: ['light', 'dark'] }).forEach(({ title, }); }); +configs({ directions: ['ltr'], modes: ['md'] }).forEach(({ title, config }) => { + test.describe(title('input: label a11y for Android TalkBack'), () => { + /** + * Android TalkBack treats visible text elements as separate focusable items. + * These tests verify that the label is hidden from a11y tree (aria-hidden) + * while remaining associated with the input via aria-labelledby. + */ + test('label text wrapper should be hidden from accessibility tree when using label prop', async ({ page }) => { + await page.setContent( + ` + + `, + config + ); + + const labelTextWrapper = page.locator('ion-input .label-text-wrapper'); + await expect(labelTextWrapper).toHaveAttribute('aria-hidden', 'true'); + }); + + test('label text wrapper should be hidden from accessibility tree when using label slot', async ({ page }) => { + await page.setContent( + ` + +
Email
+
+ `, + config + ); + + const labelTextWrapper = page.locator('ion-input .label-text-wrapper'); + await expect(labelTextWrapper).toHaveAttribute('aria-hidden', 'true'); + }); + + test('native input should have aria-labelledby pointing to label text when using label prop', async ({ page }) => { + await page.setContent( + ` + + `, + config + ); + + const nativeInput = page.locator('ion-input input'); + const labelText = page.locator('ion-input .label-text'); + + const labelTextId = await labelText.getAttribute('id'); + expect(labelTextId).not.toBeNull(); + await expect(nativeInput).toHaveAttribute('aria-labelledby', labelTextId!); + }); + + test('native input should have aria-labelledby pointing to slotted label when using label slot', async ({ + page, + }) => { + await page.setContent( + ` + +
Email
+
+ `, + config + ); + + const nativeInput = page.locator('ion-input input'); + const slottedLabel = page.locator('ion-input [slot="label"]'); + + const slottedLabelId = await slottedLabel.getAttribute('id'); + expect(slottedLabelId).not.toBeNull(); + await expect(nativeInput).toHaveAttribute('aria-labelledby', slottedLabelId!); + }); + + test('should not add aria-labelledby when aria-label is provided on host', async ({ page }) => { + await page.setContent( + ` + + `, + config + ); + + const nativeInput = page.locator('ion-input input'); + + await expect(nativeInput).toHaveAttribute('aria-label', 'Custom Label'); + await expect(nativeInput).not.toHaveAttribute('aria-labelledby'); + }); + + test('should not add aria-hidden to label wrapper when no label is present', async ({ page }) => { + await page.setContent( + ` + + `, + config + ); + + const labelTextWrapper = page.locator('ion-input .label-text-wrapper'); + + await expect(labelTextWrapper).not.toHaveAttribute('aria-hidden', 'true'); + }); + }); +}); + configs({ directions: ['ltr'] }).forEach(({ title, config, screenshot }) => { test.describe(title('input: font scaling'), () => { test('should scale text on larger font sizes', async ({ page }) => { From 95b87020d6f4ef9bf8053bacda4c17c151b83219 Mon Sep 17 00:00:00 2001 From: Brandy Smith Date: Wed, 14 Jan 2026 11:18:00 -0500 Subject: [PATCH 05/16] chore(github): do not close issues as stale when they are external bugs (#30915) Ionitron keeps closing issues with `bug: external` as stale: https://github.com/ionic-team/ionic-framework/issues/27052#event-21879561018 This PRs adds `bug: external` as an exempt label when closing issues as stale. Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> --- .github/ionic-issue-bot.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/ionic-issue-bot.yml b/.github/ionic-issue-bot.yml index c1e02a5f068..d98b2a53205 100644 --- a/.github/ionic-issue-bot.yml +++ b/.github/ionic-issue-bot.yml @@ -40,7 +40,7 @@ comment: If the requested feature is something you would find useful for your applications, please react to the original post with 👍 (`+1`). If you would like to provide an additional use case for the feature, please post a comment. - + The team will review this feedback and make a final decision. Any decision will be posted on this thread, but please note that we may ultimately decide not to pursue this feature. @@ -83,6 +83,7 @@ stale: exemptLabels: - "good first issue" - "triage" + - "bug: external" - "type: bug" - "type: feature request" - "needs: investigation" From d7b4d0690b8627919f7b2bdd998ce06c5f5c37fc Mon Sep 17 00:00:00 2001 From: ionitron Date: Wed, 14 Jan 2026 18:58:56 +0000 Subject: [PATCH 06/16] v8.7.17 --- CHANGELOG.md | 15 +++++++++++++++ core/CHANGELOG.md | 14 ++++++++++++++ core/package-lock.json | 6 +++--- core/package.json | 2 +- lerna.json | 2 +- packages/angular-server/CHANGELOG.md | 8 ++++++++ packages/angular-server/package-lock.json | 8 ++++---- packages/angular-server/package.json | 4 ++-- packages/angular/CHANGELOG.md | 8 ++++++++ packages/angular/package-lock.json | 8 ++++---- packages/angular/package.json | 4 ++-- packages/docs/CHANGELOG.md | 8 ++++++++ packages/docs/package-lock.json | 6 +++--- packages/docs/package.json | 2 +- packages/react-router/CHANGELOG.md | 8 ++++++++ packages/react-router/package-lock.json | 8 ++++---- packages/react-router/package.json | 4 ++-- packages/react/CHANGELOG.md | 8 ++++++++ packages/react/package-lock.json | 8 ++++---- packages/react/package.json | 4 ++-- packages/vue-router/CHANGELOG.md | 8 ++++++++ packages/vue-router/package-lock.json | 8 ++++---- packages/vue-router/package.json | 4 ++-- packages/vue/CHANGELOG.md | 8 ++++++++ packages/vue/package-lock.json | 8 ++++---- packages/vue/package.json | 4 ++-- 26 files changed, 130 insertions(+), 45 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b22b24f59e5..a1475417352 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,21 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.17](https://github.com/ionic-team/ionic-framework/compare/v8.7.15...v8.7.17) (2026-01-14) + + +### Bug Fixes + +* **input:** prevent Android TalkBack from focusing label separately ([#30895](https://github.com/ionic-team/ionic-framework/issues/30895)) ([ab733b7](https://github.com/ionic-team/ionic-framework/commit/ab733b71dd355d9486757f219fe09acaefeeefcc)) +* **input:** prevent placeholder from overlapping start slot during scroll assist ([#30896](https://github.com/ionic-team/ionic-framework/issues/30896)) ([3b3318d](https://github.com/ionic-team/ionic-framework/commit/3b3318da513b199128f3822bd8226797cd118b0f)) +* **modal:** prevent card modal animation on viewport resize when modal is closed ([#30894](https://github.com/ionic-team/ionic-framework/issues/30894)) ([36f4b4d](https://github.com/ionic-team/ionic-framework/commit/36f4b4d600a8d9e53959a24ba51087a0eb587030)), closes [#30679](https://github.com/ionic-team/ionic-framework/issues/30679) +* **modal:** prevent card modal animation on viewport resize when modal is closed ([#30894](https://github.com/ionic-team/ionic-framework/issues/30894)) ([e5634d4](https://github.com/ionic-team/ionic-framework/commit/e5634d45ee5fd32715f6e6b75e0448f74ee1f8f2)), closes [#30679](https://github.com/ionic-team/ionic-framework/issues/30679) +* **tab-bar:** prevent keyboard controller memory leak on rapid mount/unmount ([#30906](https://github.com/ionic-team/ionic-framework/issues/30906)) ([f99d000](https://github.com/ionic-team/ionic-framework/commit/f99d0007a8ffc9c7d3d2636e912c37c12112b21d)) + + + + + ## [8.7.16](https://github.com/ionic-team/ionic-framework/compare/v8.7.15...v8.7.16) (2025-12-31) diff --git a/core/CHANGELOG.md b/core/CHANGELOG.md index 69de5593699..517297e0d4b 100644 --- a/core/CHANGELOG.md +++ b/core/CHANGELOG.md @@ -3,6 +3,20 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.17](https://github.com/ionic-team/ionic-framework/compare/v8.7.15...v8.7.17) (2026-01-14) + + +### Bug Fixes + +* **input:** prevent Android TalkBack from focusing label separately ([#30895](https://github.com/ionic-team/ionic-framework/issues/30895)) ([ab733b7](https://github.com/ionic-team/ionic-framework/commit/ab733b71dd355d9486757f219fe09acaefeeefcc)) +* **input:** prevent placeholder from overlapping start slot during scroll assist ([#30896](https://github.com/ionic-team/ionic-framework/issues/30896)) ([3b3318d](https://github.com/ionic-team/ionic-framework/commit/3b3318da513b199128f3822bd8226797cd118b0f)) +* **modal:** prevent card modal animation on viewport resize when modal is closed ([#30894](https://github.com/ionic-team/ionic-framework/issues/30894)) ([36f4b4d](https://github.com/ionic-team/ionic-framework/commit/36f4b4d600a8d9e53959a24ba51087a0eb587030)), closes [#30679](https://github.com/ionic-team/ionic-framework/issues/30679) +* **tab-bar:** prevent keyboard controller memory leak on rapid mount/unmount ([#30906](https://github.com/ionic-team/ionic-framework/issues/30906)) ([f99d000](https://github.com/ionic-team/ionic-framework/commit/f99d0007a8ffc9c7d3d2636e912c37c12112b21d)) + + + + + ## [8.7.16](https://github.com/ionic-team/ionic-framework/compare/v8.7.15...v8.7.16) (2025-12-31) diff --git a/core/package-lock.json b/core/package-lock.json index 0bd942fdde6..911c6deec35 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ionic/core", - "version": "8.7.16", + "version": "8.7.17", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@ionic/core", - "version": "8.7.16", + "version": "8.7.17", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -9839,4 +9839,4 @@ } } } -} +} \ No newline at end of file diff --git a/core/package.json b/core/package.json index dc92468f9c1..ceb84b5c68c 100644 --- a/core/package.json +++ b/core/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/core", - "version": "8.7.16", + "version": "8.7.17", "description": "Base components for Ionic", "engines": { "node": ">= 16" diff --git a/lerna.json b/lerna.json index 0ce1bce2214..6008776b4a0 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "core", "packages/*" ], - "version": "8.7.16" + "version": "8.7.17" } \ No newline at end of file diff --git a/packages/angular-server/CHANGELOG.md b/packages/angular-server/CHANGELOG.md index df8a394101b..b74f0e8681f 100644 --- a/packages/angular-server/CHANGELOG.md +++ b/packages/angular-server/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.17](https://github.com/ionic-team/ionic-framework/compare/v8.7.15...v8.7.17) (2026-01-14) + +**Note:** Version bump only for package @ionic/angular-server + + + + + ## [8.7.16](https://github.com/ionic-team/ionic-framework/compare/v8.7.15...v8.7.16) (2025-12-31) **Note:** Version bump only for package @ionic/angular-server diff --git a/packages/angular-server/package-lock.json b/packages/angular-server/package-lock.json index 333343c52c9..64b461620d0 100644 --- a/packages/angular-server/package-lock.json +++ b/packages/angular-server/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/angular-server", - "version": "8.7.16", + "version": "8.7.17", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/angular-server", - "version": "8.7.16", + "version": "8.7.17", "license": "MIT", "dependencies": { - "@ionic/core": "^8.7.16" + "@ionic/core": "^8.7.17" }, "devDependencies": { "@angular-eslint/eslint-plugin": "^16.0.0", @@ -11289,4 +11289,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/angular-server/package.json b/packages/angular-server/package.json index 9e25f51bfe4..d5c14dfc2da 100644 --- a/packages/angular-server/package.json +++ b/packages/angular-server/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/angular-server", - "version": "8.7.16", + "version": "8.7.17", "description": "Angular SSR Module for Ionic", "keywords": [ "ionic", @@ -62,6 +62,6 @@ }, "prettier": "@ionic/prettier-config", "dependencies": { - "@ionic/core": "^8.7.16" + "@ionic/core": "^8.7.17" } } diff --git a/packages/angular/CHANGELOG.md b/packages/angular/CHANGELOG.md index 462ee3b5c47..1dea6651368 100644 --- a/packages/angular/CHANGELOG.md +++ b/packages/angular/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.17](https://github.com/ionic-team/ionic-framework/compare/v8.7.15...v8.7.17) (2026-01-14) + +**Note:** Version bump only for package @ionic/angular + + + + + ## [8.7.16](https://github.com/ionic-team/ionic-framework/compare/v8.7.15...v8.7.16) (2025-12-31) **Note:** Version bump only for package @ionic/angular diff --git a/packages/angular/package-lock.json b/packages/angular/package-lock.json index b5b91dcd0c2..05723dc93e7 100644 --- a/packages/angular/package-lock.json +++ b/packages/angular/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/angular", - "version": "8.7.16", + "version": "8.7.17", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@ionic/angular", - "version": "8.7.16", + "version": "8.7.17", "license": "MIT", "dependencies": { - "@ionic/core": "^8.7.16", + "@ionic/core": "^8.7.17", "ionicons": "^8.0.13", "jsonc-parser": "^3.0.0", "tslib": "^2.3.0" @@ -9095,4 +9095,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/angular/package.json b/packages/angular/package.json index ba942d4bec5..4c004676f59 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/angular", - "version": "8.7.16", + "version": "8.7.17", "description": "Angular specific wrappers for @ionic/core", "keywords": [ "ionic", @@ -48,7 +48,7 @@ } }, "dependencies": { - "@ionic/core": "^8.7.16", + "@ionic/core": "^8.7.17", "ionicons": "^8.0.13", "jsonc-parser": "^3.0.0", "tslib": "^2.3.0" diff --git a/packages/docs/CHANGELOG.md b/packages/docs/CHANGELOG.md index ad478b96ec9..50534022bdf 100644 --- a/packages/docs/CHANGELOG.md +++ b/packages/docs/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.17](https://github.com/ionic-team/ionic-framework/compare/v8.7.15...v8.7.17) (2026-01-14) + +**Note:** Version bump only for package @ionic/docs + + + + + ## [8.7.16](https://github.com/ionic-team/ionic-framework/compare/v8.7.15...v8.7.16) (2025-12-31) **Note:** Version bump only for package @ionic/docs diff --git a/packages/docs/package-lock.json b/packages/docs/package-lock.json index 193cb5e4651..f483e3948d7 100644 --- a/packages/docs/package-lock.json +++ b/packages/docs/package-lock.json @@ -1,13 +1,13 @@ { "name": "@ionic/docs", - "version": "8.7.16", + "version": "8.7.17", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/docs", - "version": "8.7.16", + "version": "8.7.17", "license": "MIT" } } -} +} \ No newline at end of file diff --git a/packages/docs/package.json b/packages/docs/package.json index 8c649547ed2..2040a6431db 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/docs", - "version": "8.7.16", + "version": "8.7.17", "description": "Pre-packaged API documentation for the Ionic docs.", "main": "core.json", "types": "core.d.ts", diff --git a/packages/react-router/CHANGELOG.md b/packages/react-router/CHANGELOG.md index 2f31ae84c48..33130cc8d03 100644 --- a/packages/react-router/CHANGELOG.md +++ b/packages/react-router/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.17](https://github.com/ionic-team/ionic-framework/compare/v8.7.15...v8.7.17) (2026-01-14) + +**Note:** Version bump only for package @ionic/react-router + + + + + ## [8.7.16](https://github.com/ionic-team/ionic-framework/compare/v8.7.15...v8.7.16) (2025-12-31) **Note:** Version bump only for package @ionic/react-router diff --git a/packages/react-router/package-lock.json b/packages/react-router/package-lock.json index 4e1bfdf78f5..2ad12efa400 100644 --- a/packages/react-router/package-lock.json +++ b/packages/react-router/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/react-router", - "version": "8.7.16", + "version": "8.7.17", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/react-router", - "version": "8.7.16", + "version": "8.7.17", "license": "MIT", "dependencies": { - "@ionic/react": "^8.7.16", + "@ionic/react": "^8.7.17", "tslib": "*" }, "devDependencies": { @@ -6847,4 +6847,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/packages/react-router/package.json b/packages/react-router/package.json index 8bcc2e3b004..6b023a553ff 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/react-router", - "version": "8.7.16", + "version": "8.7.17", "description": "React Router wrapper for @ionic/react", "keywords": [ "ionic", @@ -36,7 +36,7 @@ "dist/" ], "dependencies": { - "@ionic/react": "^8.7.16", + "@ionic/react": "^8.7.17", "tslib": "*" }, "peerDependencies": { diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index c7dc3da95d4..61251f96c5a 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.17](https://github.com/ionic-team/ionic-framework/compare/v8.7.15...v8.7.17) (2026-01-14) + +**Note:** Version bump only for package @ionic/react + + + + + ## [8.7.16](https://github.com/ionic-team/ionic-framework/compare/v8.7.15...v8.7.16) (2025-12-31) **Note:** Version bump only for package @ionic/react diff --git a/packages/react/package-lock.json b/packages/react/package-lock.json index 88b3f757591..2ea0ddf28c0 100644 --- a/packages/react/package-lock.json +++ b/packages/react/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/react", - "version": "8.7.16", + "version": "8.7.17", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@ionic/react", - "version": "8.7.16", + "version": "8.7.17", "license": "MIT", "dependencies": { - "@ionic/core": "^8.7.16", + "@ionic/core": "^8.7.17", "ionicons": "^8.0.13", "tslib": "*" }, @@ -11916,4 +11916,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/react/package.json b/packages/react/package.json index f6b5f984087..20669aba176 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/react", - "version": "8.7.16", + "version": "8.7.17", "description": "React specific wrapper for @ionic/core", "keywords": [ "ionic", @@ -40,7 +40,7 @@ "css/" ], "dependencies": { - "@ionic/core": "^8.7.16", + "@ionic/core": "^8.7.17", "ionicons": "^8.0.13", "tslib": "*" }, diff --git a/packages/vue-router/CHANGELOG.md b/packages/vue-router/CHANGELOG.md index 0591d860da6..cd7f99de308 100644 --- a/packages/vue-router/CHANGELOG.md +++ b/packages/vue-router/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.17](https://github.com/ionic-team/ionic-framework/compare/v8.7.15...v8.7.17) (2026-01-14) + +**Note:** Version bump only for package @ionic/vue-router + + + + + ## [8.7.16](https://github.com/ionic-team/ionic-framework/compare/v8.7.15...v8.7.16) (2025-12-31) **Note:** Version bump only for package @ionic/vue-router diff --git a/packages/vue-router/package-lock.json b/packages/vue-router/package-lock.json index e62f0e245c1..1b686e39de7 100644 --- a/packages/vue-router/package-lock.json +++ b/packages/vue-router/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/vue-router", - "version": "8.7.16", + "version": "8.7.17", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/vue-router", - "version": "8.7.16", + "version": "8.7.17", "license": "MIT", "dependencies": { - "@ionic/vue": "^8.7.16" + "@ionic/vue": "^8.7.17" }, "devDependencies": { "@ionic/eslint-config": "^0.3.0", @@ -12994,4 +12994,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/packages/vue-router/package.json b/packages/vue-router/package.json index fc32e9c1651..a240af99924 100644 --- a/packages/vue-router/package.json +++ b/packages/vue-router/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/vue-router", - "version": "8.7.16", + "version": "8.7.17", "description": "Vue Router integration for @ionic/vue", "scripts": { "test.spec": "jest", @@ -44,7 +44,7 @@ }, "homepage": "https://github.com/ionic-team/ionic-framework#readme", "dependencies": { - "@ionic/vue": "^8.7.16" + "@ionic/vue": "^8.7.17" }, "devDependencies": { "@ionic/eslint-config": "^0.3.0", diff --git a/packages/vue/CHANGELOG.md b/packages/vue/CHANGELOG.md index c2f258ad818..65fbd1d0044 100644 --- a/packages/vue/CHANGELOG.md +++ b/packages/vue/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.17](https://github.com/ionic-team/ionic-framework/compare/v8.7.15...v8.7.17) (2026-01-14) + +**Note:** Version bump only for package @ionic/vue + + + + + ## [8.7.16](https://github.com/ionic-team/ionic-framework/compare/v8.7.15...v8.7.16) (2025-12-31) **Note:** Version bump only for package @ionic/vue diff --git a/packages/vue/package-lock.json b/packages/vue/package-lock.json index 6ec90dca9e4..a46195c7d2e 100644 --- a/packages/vue/package-lock.json +++ b/packages/vue/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/vue", - "version": "8.7.16", + "version": "8.7.17", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@ionic/vue", - "version": "8.7.16", + "version": "8.7.17", "license": "MIT", "dependencies": { - "@ionic/core": "^8.7.16", + "@ionic/core": "^8.7.17", "@stencil/vue-output-target": "0.10.7", "ionicons": "^8.0.13" }, @@ -4022,4 +4022,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/packages/vue/package.json b/packages/vue/package.json index a40bdb24cd2..85a621fb185 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/vue", - "version": "8.7.16", + "version": "8.7.17", "description": "Vue specific wrapper for @ionic/core", "scripts": { "eslint": "eslint src", @@ -68,7 +68,7 @@ "vue-router": "^4.0.16" }, "dependencies": { - "@ionic/core": "^8.7.16", + "@ionic/core": "^8.7.17", "@stencil/vue-output-target": "0.10.7", "ionicons": "^8.0.13" }, From dd1c1e8fa30c56be1764db1939d72abad26b1d8d Mon Sep 17 00:00:00 2001 From: ionitron Date: Wed, 14 Jan 2026 18:59:30 +0000 Subject: [PATCH 07/16] chore(): update package lock files --- core/package-lock.json | 2 +- packages/angular-server/package-lock.json | 14 +++++------ packages/angular/package-lock.json | 8 +++--- packages/docs/package-lock.json | 2 +- packages/react-router/package-lock.json | 30 +++++++++++------------ packages/react/package-lock.json | 8 +++--- packages/vue-router/package-lock.json | 30 +++++++++++------------ packages/vue/package-lock.json | 8 +++--- 8 files changed, 51 insertions(+), 51 deletions(-) diff --git a/core/package-lock.json b/core/package-lock.json index 911c6deec35..17ad6bf9595 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -9839,4 +9839,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/angular-server/package-lock.json b/packages/angular-server/package-lock.json index 64b461620d0..8f1369ea6e4 100644 --- a/packages/angular-server/package-lock.json +++ b/packages/angular-server/package-lock.json @@ -1031,9 +1031,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.16", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.16.tgz", - "integrity": "sha512-+vdv/o2Z/2YfoZJIDBLnoh11eJmOOZqQdfwC0zl2MemAVRSofjGuIQlUTZqiUUNht56Rnk9oo53TvmgjNCtmDA==", + "version": "8.7.17", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.17.tgz", + "integrity": "sha512-gp7PIEJX27NX/FkjiUlpjQUtJiFFE5W1lofRC5CfORQ8p4PrLh9wJO9EJH0YryCr2qZS0k47sYgRQP5FwiXlpg==", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -7309,9 +7309,9 @@ "dev": true }, "@ionic/core": { - "version": "8.7.16", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.16.tgz", - "integrity": "sha512-+vdv/o2Z/2YfoZJIDBLnoh11eJmOOZqQdfwC0zl2MemAVRSofjGuIQlUTZqiUUNht56Rnk9oo53TvmgjNCtmDA==", + "version": "8.7.17", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.17.tgz", + "integrity": "sha512-gp7PIEJX27NX/FkjiUlpjQUtJiFFE5W1lofRC5CfORQ8p4PrLh9wJO9EJH0YryCr2qZS0k47sYgRQP5FwiXlpg==", "requires": { "@stencil/core": "4.38.0", "ionicons": "^8.0.13", @@ -11289,4 +11289,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/angular/package-lock.json b/packages/angular/package-lock.json index 05723dc93e7..17f31587612 100644 --- a/packages/angular/package-lock.json +++ b/packages/angular/package-lock.json @@ -1398,9 +1398,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.16", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.16.tgz", - "integrity": "sha512-+vdv/o2Z/2YfoZJIDBLnoh11eJmOOZqQdfwC0zl2MemAVRSofjGuIQlUTZqiUUNht56Rnk9oo53TvmgjNCtmDA==", + "version": "8.7.17", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.17.tgz", + "integrity": "sha512-gp7PIEJX27NX/FkjiUlpjQUtJiFFE5W1lofRC5CfORQ8p4PrLh9wJO9EJH0YryCr2qZS0k47sYgRQP5FwiXlpg==", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -9095,4 +9095,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/docs/package-lock.json b/packages/docs/package-lock.json index f483e3948d7..74a2705a8a4 100644 --- a/packages/docs/package-lock.json +++ b/packages/docs/package-lock.json @@ -10,4 +10,4 @@ "license": "MIT" } } -} \ No newline at end of file +} diff --git a/packages/react-router/package-lock.json b/packages/react-router/package-lock.json index 2ad12efa400..ab02547a079 100644 --- a/packages/react-router/package-lock.json +++ b/packages/react-router/package-lock.json @@ -238,9 +238,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.16", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.16.tgz", - "integrity": "sha512-+vdv/o2Z/2YfoZJIDBLnoh11eJmOOZqQdfwC0zl2MemAVRSofjGuIQlUTZqiUUNht56Rnk9oo53TvmgjNCtmDA==", + "version": "8.7.17", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.17.tgz", + "integrity": "sha512-gp7PIEJX27NX/FkjiUlpjQUtJiFFE5W1lofRC5CfORQ8p4PrLh9wJO9EJH0YryCr2qZS0k47sYgRQP5FwiXlpg==", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -418,12 +418,12 @@ } }, "node_modules/@ionic/react": { - "version": "8.7.16", - "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.7.16.tgz", - "integrity": "sha512-36y+VmtssJ4vfrCJxUEaOo5tFQRP1m87kxVVC6Cc2ctjLQRDEMszG9v3ctzxD+8EszFLMHEmsSTvGGCelDJlvQ==", + "version": "8.7.17", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.7.17.tgz", + "integrity": "sha512-t/ApHBEigSTvovM/hKtNAMrddoOQ5l2GlyjOzASUq7sJLvDS4ewDMk5pRahjGqmFSYSN8TIBlF9QAHswp6XTRg==", "license": "MIT", "dependencies": { - "@ionic/core": "8.7.16", + "@ionic/core": "8.7.17", "ionicons": "^8.0.13", "tslib": "*" }, @@ -4178,9 +4178,9 @@ "dev": true }, "@ionic/core": { - "version": "8.7.16", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.16.tgz", - "integrity": "sha512-+vdv/o2Z/2YfoZJIDBLnoh11eJmOOZqQdfwC0zl2MemAVRSofjGuIQlUTZqiUUNht56Rnk9oo53TvmgjNCtmDA==", + "version": "8.7.17", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.17.tgz", + "integrity": "sha512-gp7PIEJX27NX/FkjiUlpjQUtJiFFE5W1lofRC5CfORQ8p4PrLh9wJO9EJH0YryCr2qZS0k47sYgRQP5FwiXlpg==", "requires": { "@stencil/core": "4.38.0", "ionicons": "^8.0.13", @@ -4284,11 +4284,11 @@ "requires": {} }, "@ionic/react": { - "version": "8.7.16", - "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.7.16.tgz", - "integrity": "sha512-36y+VmtssJ4vfrCJxUEaOo5tFQRP1m87kxVVC6Cc2ctjLQRDEMszG9v3ctzxD+8EszFLMHEmsSTvGGCelDJlvQ==", + "version": "8.7.17", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.7.17.tgz", + "integrity": "sha512-t/ApHBEigSTvovM/hKtNAMrddoOQ5l2GlyjOzASUq7sJLvDS4ewDMk5pRahjGqmFSYSN8TIBlF9QAHswp6XTRg==", "requires": { - "@ionic/core": "8.7.16", + "@ionic/core": "8.7.17", "ionicons": "^8.0.13", "tslib": "*" } @@ -6847,4 +6847,4 @@ "dev": true } } -} \ No newline at end of file +} diff --git a/packages/react/package-lock.json b/packages/react/package-lock.json index 2ea0ddf28c0..bbe1c7efb1c 100644 --- a/packages/react/package-lock.json +++ b/packages/react/package-lock.json @@ -736,9 +736,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.16", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.16.tgz", - "integrity": "sha512-+vdv/o2Z/2YfoZJIDBLnoh11eJmOOZqQdfwC0zl2MemAVRSofjGuIQlUTZqiUUNht56Rnk9oo53TvmgjNCtmDA==", + "version": "8.7.17", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.17.tgz", + "integrity": "sha512-gp7PIEJX27NX/FkjiUlpjQUtJiFFE5W1lofRC5CfORQ8p4PrLh9wJO9EJH0YryCr2qZS0k47sYgRQP5FwiXlpg==", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -11916,4 +11916,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/vue-router/package-lock.json b/packages/vue-router/package-lock.json index 1b686e39de7..c3c0e300ba4 100644 --- a/packages/vue-router/package-lock.json +++ b/packages/vue-router/package-lock.json @@ -673,9 +673,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.16", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.16.tgz", - "integrity": "sha512-+vdv/o2Z/2YfoZJIDBLnoh11eJmOOZqQdfwC0zl2MemAVRSofjGuIQlUTZqiUUNht56Rnk9oo53TvmgjNCtmDA==", + "version": "8.7.17", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.17.tgz", + "integrity": "sha512-gp7PIEJX27NX/FkjiUlpjQUtJiFFE5W1lofRC5CfORQ8p4PrLh9wJO9EJH0YryCr2qZS0k47sYgRQP5FwiXlpg==", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -868,12 +868,12 @@ } }, "node_modules/@ionic/vue": { - "version": "8.7.16", - "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.7.16.tgz", - "integrity": "sha512-7ZKKUj+PgzV/SiSbSPFE/anQzT3kHLrb7JGrw394QZB1E3aehljgt/hDaQzityRtgqgUaaJZx22MGrg5r9kePQ==", + "version": "8.7.17", + "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.7.17.tgz", + "integrity": "sha512-S/UQc/ytauWxcAtM6cLz1mbpqwv8xuSdTzF8aslPi8zGELdXJSg48QBP6ehhFj+uv8qsblrRd4TjCQYyskyMCQ==", "license": "MIT", "dependencies": { - "@ionic/core": "8.7.16", + "@ionic/core": "8.7.17", "@stencil/vue-output-target": "0.10.7", "ionicons": "^8.0.13" } @@ -8044,9 +8044,9 @@ "dev": true }, "@ionic/core": { - "version": "8.7.16", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.16.tgz", - "integrity": "sha512-+vdv/o2Z/2YfoZJIDBLnoh11eJmOOZqQdfwC0zl2MemAVRSofjGuIQlUTZqiUUNht56Rnk9oo53TvmgjNCtmDA==", + "version": "8.7.17", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.17.tgz", + "integrity": "sha512-gp7PIEJX27NX/FkjiUlpjQUtJiFFE5W1lofRC5CfORQ8p4PrLh9wJO9EJH0YryCr2qZS0k47sYgRQP5FwiXlpg==", "requires": { "@stencil/core": "4.38.0", "ionicons": "^8.0.13", @@ -8159,11 +8159,11 @@ "requires": {} }, "@ionic/vue": { - "version": "8.7.16", - "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.7.16.tgz", - "integrity": "sha512-7ZKKUj+PgzV/SiSbSPFE/anQzT3kHLrb7JGrw394QZB1E3aehljgt/hDaQzityRtgqgUaaJZx22MGrg5r9kePQ==", + "version": "8.7.17", + "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.7.17.tgz", + "integrity": "sha512-S/UQc/ytauWxcAtM6cLz1mbpqwv8xuSdTzF8aslPi8zGELdXJSg48QBP6ehhFj+uv8qsblrRd4TjCQYyskyMCQ==", "requires": { - "@ionic/core": "8.7.16", + "@ionic/core": "8.7.17", "@stencil/vue-output-target": "0.10.7", "ionicons": "^8.0.13" } @@ -12994,4 +12994,4 @@ "dev": true } } -} \ No newline at end of file +} diff --git a/packages/vue/package-lock.json b/packages/vue/package-lock.json index a46195c7d2e..ab7d45d1f10 100644 --- a/packages/vue/package-lock.json +++ b/packages/vue/package-lock.json @@ -222,9 +222,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.16", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.16.tgz", - "integrity": "sha512-+vdv/o2Z/2YfoZJIDBLnoh11eJmOOZqQdfwC0zl2MemAVRSofjGuIQlUTZqiUUNht56Rnk9oo53TvmgjNCtmDA==", + "version": "8.7.17", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.17.tgz", + "integrity": "sha512-gp7PIEJX27NX/FkjiUlpjQUtJiFFE5W1lofRC5CfORQ8p4PrLh9wJO9EJH0YryCr2qZS0k47sYgRQP5FwiXlpg==", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -4022,4 +4022,4 @@ "dev": true } } -} \ No newline at end of file +} From 1bccf76d35937f117ca67b992df3b2c59e325a07 Mon Sep 17 00:00:00 2001 From: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Date: Wed, 14 Jan 2026 14:22:32 -0500 Subject: [PATCH 08/16] chore(changelog): remove duplicate fixes in wrong version --- CHANGELOG.md | 2 -- core/CHANGELOG.md | 1 - 2 files changed, 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1475417352..9e79dca4b11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,8 +10,6 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline * **input:** prevent Android TalkBack from focusing label separately ([#30895](https://github.com/ionic-team/ionic-framework/issues/30895)) ([ab733b7](https://github.com/ionic-team/ionic-framework/commit/ab733b71dd355d9486757f219fe09acaefeeefcc)) * **input:** prevent placeholder from overlapping start slot during scroll assist ([#30896](https://github.com/ionic-team/ionic-framework/issues/30896)) ([3b3318d](https://github.com/ionic-team/ionic-framework/commit/3b3318da513b199128f3822bd8226797cd118b0f)) -* **modal:** prevent card modal animation on viewport resize when modal is closed ([#30894](https://github.com/ionic-team/ionic-framework/issues/30894)) ([36f4b4d](https://github.com/ionic-team/ionic-framework/commit/36f4b4d600a8d9e53959a24ba51087a0eb587030)), closes [#30679](https://github.com/ionic-team/ionic-framework/issues/30679) -* **modal:** prevent card modal animation on viewport resize when modal is closed ([#30894](https://github.com/ionic-team/ionic-framework/issues/30894)) ([e5634d4](https://github.com/ionic-team/ionic-framework/commit/e5634d45ee5fd32715f6e6b75e0448f74ee1f8f2)), closes [#30679](https://github.com/ionic-team/ionic-framework/issues/30679) * **tab-bar:** prevent keyboard controller memory leak on rapid mount/unmount ([#30906](https://github.com/ionic-team/ionic-framework/issues/30906)) ([f99d000](https://github.com/ionic-team/ionic-framework/commit/f99d0007a8ffc9c7d3d2636e912c37c12112b21d)) diff --git a/core/CHANGELOG.md b/core/CHANGELOG.md index 517297e0d4b..a806dfc653b 100644 --- a/core/CHANGELOG.md +++ b/core/CHANGELOG.md @@ -10,7 +10,6 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline * **input:** prevent Android TalkBack from focusing label separately ([#30895](https://github.com/ionic-team/ionic-framework/issues/30895)) ([ab733b7](https://github.com/ionic-team/ionic-framework/commit/ab733b71dd355d9486757f219fe09acaefeeefcc)) * **input:** prevent placeholder from overlapping start slot during scroll assist ([#30896](https://github.com/ionic-team/ionic-framework/issues/30896)) ([3b3318d](https://github.com/ionic-team/ionic-framework/commit/3b3318da513b199128f3822bd8226797cd118b0f)) -* **modal:** prevent card modal animation on viewport resize when modal is closed ([#30894](https://github.com/ionic-team/ionic-framework/issues/30894)) ([36f4b4d](https://github.com/ionic-team/ionic-framework/commit/36f4b4d600a8d9e53959a24ba51087a0eb587030)), closes [#30679](https://github.com/ionic-team/ionic-framework/issues/30679) * **tab-bar:** prevent keyboard controller memory leak on rapid mount/unmount ([#30906](https://github.com/ionic-team/ionic-framework/issues/30906)) ([f99d000](https://github.com/ionic-team/ionic-framework/commit/f99d0007a8ffc9c7d3d2636e912c37c12112b21d)) From 4eca8d39d881f1167877993636838d3f845cf2d8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 Jan 2026 09:54:52 -0500 Subject: [PATCH 09/16] chore(deps): update actions/setup-node action to v6.2.0 (#30918) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [actions/setup-node](https://redirect.github.com/actions/setup-node) | action | minor | `v6.1.0` → `v6.2.0` | --- ### Release Notes
actions/setup-node (actions/setup-node) ### [`v6.2.0`](https://redirect.github.com/actions/setup-node/compare/v6.1.0...v6.2.0) [Compare Source](https://redirect.github.com/actions/setup-node/compare/v6.1.0...v6.2.0)
--- ### Configuration 📅 **Schedule**: Branch creation - "every weekday before 11am" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/ionic-team/ionic-framework). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/publish-npm/action.yml | 2 +- .github/workflows/actions/build-angular-server/action.yml | 2 +- .../workflows/actions/build-core-stencil-prerelease/action.yml | 2 +- .github/workflows/actions/build-core/action.yml | 2 +- .github/workflows/actions/build-react-router/action.yml | 2 +- .github/workflows/actions/build-react/action.yml | 2 +- .github/workflows/actions/build-vue-router/action.yml | 2 +- .github/workflows/actions/build-vue/action.yml | 2 +- .github/workflows/actions/test-angular-e2e/action.yml | 2 +- .github/workflows/actions/test-core-clean-build/action.yml | 2 +- .github/workflows/actions/test-core-lint/action.yml | 2 +- .github/workflows/actions/test-core-screenshot/action.yml | 2 +- .github/workflows/actions/test-core-spec/action.yml | 2 +- .github/workflows/actions/test-react-e2e/action.yml | 2 +- .github/workflows/actions/test-react-router-e2e/action.yml | 2 +- .github/workflows/actions/test-vue-e2e/action.yml | 2 +- .../workflows/actions/update-reference-screenshots/action.yml | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/actions/publish-npm/action.yml b/.github/actions/publish-npm/action.yml index 0b5e9924719..dc77edb66ae 100644 --- a/.github/actions/publish-npm/action.yml +++ b/.github/actions/publish-npm/action.yml @@ -22,7 +22,7 @@ runs: using: 'composite' steps: - name: 🟢 Configure Node for Publish - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: node-version: ${{ inputs.node-version }} registry-url: 'https://registry.npmjs.org' diff --git a/.github/workflows/actions/build-angular-server/action.yml b/.github/workflows/actions/build-angular-server/action.yml index a90da3676c1..cb2b667ffaf 100644 --- a/.github/workflows/actions/build-angular-server/action.yml +++ b/.github/workflows/actions/build-angular-server/action.yml @@ -3,7 +3,7 @@ description: 'Build Ionic Angular Server' runs: using: 'composite' steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: node-version: 24.x - uses: ./.github/workflows/actions/download-archive diff --git a/.github/workflows/actions/build-core-stencil-prerelease/action.yml b/.github/workflows/actions/build-core-stencil-prerelease/action.yml index 7bfb3fdfcb5..d58299125e3 100644 --- a/.github/workflows/actions/build-core-stencil-prerelease/action.yml +++ b/.github/workflows/actions/build-core-stencil-prerelease/action.yml @@ -9,7 +9,7 @@ runs: using: 'composite' steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: node-version: 24.x diff --git a/.github/workflows/actions/build-core/action.yml b/.github/workflows/actions/build-core/action.yml index 71fc61f6991..19487732007 100644 --- a/.github/workflows/actions/build-core/action.yml +++ b/.github/workflows/actions/build-core/action.yml @@ -9,7 +9,7 @@ runs: using: 'composite' steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: node-version: 24.x - name: 🕸️ Install Dependencies diff --git a/.github/workflows/actions/build-react-router/action.yml b/.github/workflows/actions/build-react-router/action.yml index a003fd83d6c..0c46ad895e1 100644 --- a/.github/workflows/actions/build-react-router/action.yml +++ b/.github/workflows/actions/build-react-router/action.yml @@ -3,7 +3,7 @@ description: 'Build Ionic React Router' runs: using: 'composite' steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: node-version: 24.x - uses: ./.github/workflows/actions/download-archive diff --git a/.github/workflows/actions/build-react/action.yml b/.github/workflows/actions/build-react/action.yml index b65292f5dc7..04e3f2c8b3a 100644 --- a/.github/workflows/actions/build-react/action.yml +++ b/.github/workflows/actions/build-react/action.yml @@ -3,7 +3,7 @@ description: 'Build Ionic React' runs: using: 'composite' steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: node-version: 24.x - uses: ./.github/workflows/actions/download-archive diff --git a/.github/workflows/actions/build-vue-router/action.yml b/.github/workflows/actions/build-vue-router/action.yml index b5bb65c6f89..897153c9fa4 100644 --- a/.github/workflows/actions/build-vue-router/action.yml +++ b/.github/workflows/actions/build-vue-router/action.yml @@ -3,7 +3,7 @@ description: 'Builds Ionic Vue Router' runs: using: 'composite' steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: node-version: 24.x - uses: ./.github/workflows/actions/download-archive diff --git a/.github/workflows/actions/build-vue/action.yml b/.github/workflows/actions/build-vue/action.yml index e660c31bbbd..ddd96b7a690 100644 --- a/.github/workflows/actions/build-vue/action.yml +++ b/.github/workflows/actions/build-vue/action.yml @@ -3,7 +3,7 @@ description: 'Build Ionic Vue' runs: using: 'composite' steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: node-version: 24.x - uses: ./.github/workflows/actions/download-archive diff --git a/.github/workflows/actions/test-angular-e2e/action.yml b/.github/workflows/actions/test-angular-e2e/action.yml index 9c3ac716d53..1e5b49b3150 100644 --- a/.github/workflows/actions/test-angular-e2e/action.yml +++ b/.github/workflows/actions/test-angular-e2e/action.yml @@ -6,7 +6,7 @@ inputs: runs: using: 'composite' steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: node-version: 24.x - uses: ./.github/workflows/actions/download-archive diff --git a/.github/workflows/actions/test-core-clean-build/action.yml b/.github/workflows/actions/test-core-clean-build/action.yml index b69a485b33f..ac5c345a235 100644 --- a/.github/workflows/actions/test-core-clean-build/action.yml +++ b/.github/workflows/actions/test-core-clean-build/action.yml @@ -3,7 +3,7 @@ description: 'Test Core Clean Build' runs: using: 'composite' steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: node-version: 24.x diff --git a/.github/workflows/actions/test-core-lint/action.yml b/.github/workflows/actions/test-core-lint/action.yml index 8e81bd6a635..a32355d33fa 100644 --- a/.github/workflows/actions/test-core-lint/action.yml +++ b/.github/workflows/actions/test-core-lint/action.yml @@ -3,7 +3,7 @@ description: 'Test Core Lint' runs: using: 'composite' steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: node-version: 24.x - name: 🕸️ Install Dependencies diff --git a/.github/workflows/actions/test-core-screenshot/action.yml b/.github/workflows/actions/test-core-screenshot/action.yml index e3c7d8771d5..1ae7ac361e0 100644 --- a/.github/workflows/actions/test-core-screenshot/action.yml +++ b/.github/workflows/actions/test-core-screenshot/action.yml @@ -13,7 +13,7 @@ inputs: runs: using: 'composite' steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: node-version: 24.x - uses: ./.github/workflows/actions/download-archive diff --git a/.github/workflows/actions/test-core-spec/action.yml b/.github/workflows/actions/test-core-spec/action.yml index ee54ae604cf..3cbfa7aefd1 100644 --- a/.github/workflows/actions/test-core-spec/action.yml +++ b/.github/workflows/actions/test-core-spec/action.yml @@ -6,7 +6,7 @@ inputs: runs: using: 'composite' steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: node-version: 24.x - name: 🕸️ Install Dependencies diff --git a/.github/workflows/actions/test-react-e2e/action.yml b/.github/workflows/actions/test-react-e2e/action.yml index d27dd9f836e..18fb14c705e 100644 --- a/.github/workflows/actions/test-react-e2e/action.yml +++ b/.github/workflows/actions/test-react-e2e/action.yml @@ -6,7 +6,7 @@ inputs: runs: using: 'composite' steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: node-version: 24.x - uses: ./.github/workflows/actions/download-archive diff --git a/.github/workflows/actions/test-react-router-e2e/action.yml b/.github/workflows/actions/test-react-router-e2e/action.yml index b4e627ee896..3af841bf83c 100644 --- a/.github/workflows/actions/test-react-router-e2e/action.yml +++ b/.github/workflows/actions/test-react-router-e2e/action.yml @@ -6,7 +6,7 @@ inputs: runs: using: 'composite' steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: node-version: 24.x - uses: ./.github/workflows/actions/download-archive diff --git a/.github/workflows/actions/test-vue-e2e/action.yml b/.github/workflows/actions/test-vue-e2e/action.yml index c0adfd409b9..0c15dac0822 100644 --- a/.github/workflows/actions/test-vue-e2e/action.yml +++ b/.github/workflows/actions/test-vue-e2e/action.yml @@ -6,7 +6,7 @@ inputs: runs: using: 'composite' steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: node-version: 24.x - uses: ./.github/workflows/actions/download-archive diff --git a/.github/workflows/actions/update-reference-screenshots/action.yml b/.github/workflows/actions/update-reference-screenshots/action.yml index ad41d5e724d..f104d227095 100644 --- a/.github/workflows/actions/update-reference-screenshots/action.yml +++ b/.github/workflows/actions/update-reference-screenshots/action.yml @@ -7,7 +7,7 @@ on: runs: using: 'composite' steps: - - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: node-version: 24.x - uses: actions/download-artifact@v7 From 62d880d62052438ad04ff3f5d5d8ad9c942c1569 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 Jan 2026 09:56:28 -0500 Subject: [PATCH 10/16] chore(deps): update dependency @capacitor/core to v8.0.1 (#30914) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@capacitor/core](https://capacitorjs.com) ([source](https://redirect.github.com/ionic-team/capacitor)) | [`8.0.0` → `8.0.1`](https://renovatebot.com/diffs/npm/@capacitor%2fcore/8.0.0/8.0.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fcore/8.0.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fcore/8.0.0/8.0.1?slim=true) | --- ### Release Notes
ionic-team/capacitor (@​capacitor/core) ### [`v8.0.1`](https://redirect.github.com/ionic-team/capacitor/blob/HEAD/CHANGELOG.md#801-2026-01-13) [Compare Source](https://redirect.github.com/ionic-team/capacitor/compare/8.0.0...8.0.1) ##### Bug Fixes - **android:** Remove calculated bottom inset if keyboard is visible ([#​8280](https://redirect.github.com/ionic-team/capacitor/issues/8280)) ([196b642](https://redirect.github.com/ionic-team/capacitor/commit/196b642236d293a5012e3c307fcd942766e56cce)) - **cli:** Support wireless iOS devices in `cap run` ([#​8301](https://redirect.github.com/ionic-team/capacitor/issues/8301)) ([dcb368c](https://redirect.github.com/ionic-team/capacitor/commit/dcb368c33555487f1b6f46a6d8e30736bdd78955)) - **cli:** use latest native-run ([#​8296](https://redirect.github.com/ionic-team/capacitor/issues/8296)) ([121d830](https://redirect.github.com/ionic-team/capacitor/commit/121d83013f39e25009121533a2c3ad86e428d6b2))
--- ### Configuration 📅 **Schedule**: Branch creation - "every weekday before 11am" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/ionic-team/ionic-framework). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- core/package-lock.json | 43 +++++++++++++++++++----------------------- 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/core/package-lock.json b/core/package-lock.json index 17ad6bf9595..25a81fd8f8a 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -94,6 +94,7 @@ "version": "7.16.12", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.16.7", "@babel/generator": "^7.16.8", @@ -628,11 +629,12 @@ "license": "MIT" }, "node_modules/@capacitor/core": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-8.0.0.tgz", - "integrity": "sha512-250HTVd/W/KdMygoqaedisvNbHbpbQTN2Hy/8ZYGm1nAqE0Fx7sGss4l0nDg33STxEdDhtVRoL2fIaaiukKseA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-8.0.1.tgz", + "integrity": "sha512-5UqSWxGMp/B8KhYu7rAijqNtYslhcLh+TrbfU48PfdMDsPfaU/VY48sMNzC22xL8BmoFoql/3SKyP+pavTOvOA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "tslib": "^2.1.0" } @@ -870,6 +872,7 @@ "version": "4.33.0", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "4.33.0", "@typescript-eslint/types": "4.33.0", @@ -1807,6 +1810,7 @@ "node_modules/@stencil/core": { "version": "4.38.0", "license": "MIT", + "peer": true, "bin": { "stencil": "bin/stencil" }, @@ -2231,6 +2235,7 @@ "version": "6.7.2", "dev": true, "license": "BSD-2-Clause", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "6.7.2", "@typescript-eslint/types": "6.7.2", @@ -2456,7 +2461,6 @@ "integrity": "sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/parser": "^7.28.5", "@vue/shared": "3.5.25", @@ -2471,7 +2475,6 @@ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, "license": "BSD-2-Clause", - "peer": true, "engines": { "node": ">=0.12" }, @@ -2484,8 +2487,7 @@ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@vue/compiler-dom": { "version": "3.5.25", @@ -2493,7 +2495,6 @@ "integrity": "sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vue/compiler-core": "3.5.25", "@vue/shared": "3.5.25" @@ -2505,7 +2506,6 @@ "integrity": "sha512-PUgKp2rn8fFsI++lF2sO7gwO2d9Yj57Utr5yEsDf3GNaQcowCLKL7sf+LvVFvtJDXUp/03+dC6f2+LCv5aK1ag==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/parser": "^7.28.5", "@vue/compiler-core": "3.5.25", @@ -2523,8 +2523,7 @@ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@vue/compiler-sfc/node_modules/postcss": { "version": "8.5.6", @@ -2546,7 +2545,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -2562,7 +2560,6 @@ "integrity": "sha512-ritPSKLBcParnsKYi+GNtbdbrIE1mtuFEJ4U1sWeuOMlIziK5GtOL85t5RhsNy4uWIXPgk+OUdpnXiTdzn8o3A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.25", "@vue/shared": "3.5.25" @@ -2574,7 +2571,6 @@ "integrity": "sha512-5xfAypCQepv4Jog1U4zn8cZIcbKKFka3AgWHEFQeK65OW+Ys4XybP6z2kKgws4YB43KGpqp5D/K3go2UPPunLA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vue/shared": "3.5.25" } @@ -2585,7 +2581,6 @@ "integrity": "sha512-Z751v203YWwYzy460bzsYQISDfPjHTl+6Zzwo/a3CsAf+0ccEjQ8c+0CdX1WsumRTHeywvyUFtW6KvNukT/smA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vue/reactivity": "3.5.25", "@vue/shared": "3.5.25" @@ -2597,7 +2592,6 @@ "integrity": "sha512-a4WrkYFbb19i9pjkz38zJBg8wa/rboNERq3+hRRb0dHiJh13c+6kAbgqCPfMaJ2gg4weWD3APZswASOfmKwamA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vue/reactivity": "3.5.25", "@vue/runtime-core": "3.5.25", @@ -2611,7 +2605,6 @@ "integrity": "sha512-UJaXR54vMG61i8XNIzTSf2Q7MOqZHpp8+x3XLGtE3+fL+nQd+k7O5+X3D/uWrnQXOdMw5VPih+Uremcw+u1woQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vue/compiler-ssr": "3.5.25", "@vue/shared": "3.5.25" @@ -2625,8 +2618,7 @@ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.25.tgz", "integrity": "sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@zeit/schemas": { "version": "2.21.0", @@ -2649,6 +2641,7 @@ "version": "7.4.0", "dev": true, "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -3809,8 +3802,7 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/debug": { "version": "2.6.9", @@ -4104,6 +4096,7 @@ "version": "7.32.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "7.12.11", "@eslint/eslintrc": "^0.4.3", @@ -7299,7 +7292,6 @@ "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } @@ -7621,7 +7613,6 @@ } ], "license": "MIT", - "peer": true, "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -7976,6 +7967,7 @@ "integrity": "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "playwright-core": "cli.js" }, @@ -7987,6 +7979,7 @@ "version": "7.0.35", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -8092,6 +8085,7 @@ "version": "0.36.2", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "postcss": ">=5.0.0" } @@ -8140,6 +8134,7 @@ "version": "2.6.1", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin-prettier.js" }, @@ -8497,6 +8492,7 @@ "version": "2.35.1", "dev": true, "license": "MIT", + "peer": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -8718,7 +8714,6 @@ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "engines": { "node": ">=0.10.0" } From 442e3e983107a69cea4fb5587fb33da718eee8a3 Mon Sep 17 00:00:00 2001 From: Brandy Smith Date: Mon, 19 Jan 2026 16:48:13 -0500 Subject: [PATCH 11/16] fix(toast): keep icon on the same line as long message in stacked layout (#30923) Issue number: resolves #30908 --------- ## What is the current behavior? Toast with an icon and long message using a stacked layout will wrap the message below the icon. ## What is the new behavior? - Apply `flex: 1` to `.toast-content` regardless of layout, which makes sure the content does not get wrapped under the icon - Adds an e2e test for a stacked toast with a long message to `toast/test/layout` ## Does this introduce a breaking change? - [ ] Yes - [x] No ## Other information - Dev build: `8.7.18-dev.11768592717.14a59d2f` - Preview: [Layout](https://ionic-framework-git-fw-7035-ionic1.vercel.app/src/components/toast/test/layout/) --------- Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> --- .../components/toast/test/layout/index.html | 10 ++++++++++ .../components/toast/test/layout/toast.e2e.ts | 18 +++++++++++++++++- ...ng-message-ios-ltr-Mobile-Chrome-linux.png | Bin 0 -> 10932 bytes ...g-message-ios-ltr-Mobile-Firefox-linux.png | Bin 0 -> 16714 bytes ...ng-message-ios-ltr-Mobile-Safari-linux.png | Bin 0 -> 17530 bytes ...ng-message-ios-rtl-Mobile-Chrome-linux.png | Bin 0 -> 10901 bytes ...g-message-ios-rtl-Mobile-Firefox-linux.png | Bin 0 -> 16602 bytes ...ng-message-ios-rtl-Mobile-Safari-linux.png | Bin 0 -> 16984 bytes ...ong-message-md-ltr-Mobile-Chrome-linux.png | Bin 0 -> 10842 bytes ...ng-message-md-ltr-Mobile-Firefox-linux.png | Bin 0 -> 15910 bytes ...ong-message-md-ltr-Mobile-Safari-linux.png | Bin 0 -> 16889 bytes ...ong-message-md-rtl-Mobile-Chrome-linux.png | Bin 0 -> 10792 bytes ...ng-message-md-rtl-Mobile-Firefox-linux.png | Bin 0 -> 16075 bytes ...ong-message-md-rtl-Mobile-Safari-linux.png | Bin 0 -> 16845 bytes core/src/components/toast/toast.scss | 3 ++- 15 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-ios-ltr-Mobile-Chrome-linux.png create mode 100644 core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-ios-ltr-Mobile-Firefox-linux.png create mode 100644 core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-ios-ltr-Mobile-Safari-linux.png create mode 100644 core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-ios-rtl-Mobile-Chrome-linux.png create mode 100644 core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-ios-rtl-Mobile-Firefox-linux.png create mode 100644 core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-ios-rtl-Mobile-Safari-linux.png create mode 100644 core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-md-ltr-Mobile-Chrome-linux.png create mode 100644 core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-md-ltr-Mobile-Firefox-linux.png create mode 100644 core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-md-ltr-Mobile-Safari-linux.png create mode 100644 core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-md-rtl-Mobile-Chrome-linux.png create mode 100644 core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-md-rtl-Mobile-Firefox-linux.png create mode 100644 core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-md-rtl-Mobile-Safari-linux.png diff --git a/core/src/components/toast/test/layout/index.html b/core/src/components/toast/test/layout/index.html index 81a2760bdb1..227539c7369 100644 --- a/core/src/components/toast/test/layout/index.html +++ b/core/src/components/toast/test/layout/index.html @@ -29,6 +29,9 @@ + diff --git a/core/src/components/toast/test/layout/toast.e2e.ts b/core/src/components/toast/test/layout/toast.e2e.ts index f4fb2667fa6..4153df86e2e 100644 --- a/core/src/components/toast/test/layout/toast.e2e.ts +++ b/core/src/components/toast/test/layout/toast.e2e.ts @@ -3,7 +3,7 @@ import { configs, test } from '@utils/test/playwright'; configs().forEach(({ title, screenshot, config }) => { test.describe(title('toast: stacked layout'), () => { - test('should render stacked buttons', async ({ page }) => { + test('should render stacked toast', async ({ page }) => { await page.goto('/src/components/toast/test/layout', config); const ionToastDidPresent = await page.spyOnEvent('ionToastDidPresent'); @@ -13,5 +13,21 @@ configs().forEach(({ title, screenshot, config }) => { const toastWrapper = page.locator('ion-toast .toast-wrapper'); await expect(toastWrapper).toHaveScreenshot(screenshot(`toast-stacked`)); }); + + test('should render stacked toast with long message', async ({ page }, testInfo) => { + testInfo.annotations.push({ + type: 'issue', + description: 'https://github.com/ionic-team/ionic-framework/issues/30908', + }); + + await page.goto('/src/components/toast/test/layout', config); + const ionToastDidPresent = await page.spyOnEvent('ionToastDidPresent'); + + await page.click('#stacked-long-message'); + await ionToastDidPresent.next(); + + const toastWrapper = page.locator('ion-toast .toast-wrapper'); + await expect(toastWrapper).toHaveScreenshot(screenshot(`toast-stacked-long-message`)); + }); }); }); diff --git a/core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-ios-ltr-Mobile-Chrome-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..ead92eb7b8abf10c60d39c779c3f2d760af39d94 GIT binary patch literal 10932 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 literal 0 HcmV?d00001 diff --git a/core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-ios-ltr-Mobile-Firefox-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..f89674be14fb8ef6d9b3c6c9763b2b73e994490e GIT binary patch literal 16714 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 iqLDSS@#et2D=rhvxL7(Yg8EHvXIJj5Nz z*$YSJ=z^(=K^=ZA9Px5y0#I5W3d)`{5nC?O(2w-bEXNG2lr9ZRmcOI&a1rrvEyB8t zxfA7i#O`3In8ZvNn8Y7(5i`jWc$IU*UO7Wq*Uc~WjD zEvy$*@Dq>c!+|dFH#TJ=i;%HBCm!IsG=ep^>SiD<>bvi?znXUgCl<;@dIS}%1)N$2 zj<(;~I&wi_46Af!gkEF*+ARwMSkmnC!nrrTM}7Tc7uA}J)_Hl`2Wj_@km;iyncd(5 z_*x9tgK74Uk}=LGDdoOj30iz6<`&D4eR&hDg^%wKvJSX;HUH9T9x?mRwcZc?9+`8n ztu)cataFu@Z>9{T%|fQfhz$`~44zp+N?$z}8|GdY4i;CnCVE|rut1(YPdeuhZZ`-$Ys;x~a6KW-N>Yip_E? zx@F1Tckkrmb44q+KEplmkW5ou!LVVSU%rSzv#4k!#ha6)!2HXBEleT|ihgYA#HO*gMb7gI zev=&5xGbl}+S7%#nRexqW(_GLgbE~%T%55RuHi5lMKjJYMekjda5L`el1dv?tOi?_ zB^i6)+Q~|riaF!;^T>P|NfL3KUe>yV$R4kKfA&9BRldz(R8#X8TGX|j`t@}X%_>zf7d3RkEURuOTE^p^^hf6cI}=rEFr4W$ndm$;+}4TP-_WDq}EY7$L^=! zcM3C41?lWqIozrj%D=MN*J-e_egY$Y#*}D5a)_$O9s4+X4^3$QEo=uX!9{v85T52^ zJ2dMK@(Bw)HPGkSdHYg#KxOL-`Sx70lOK^x;WNK?C~(qtiJqsPS7z@u-hQh_Gw|iN zDYjlrgFKhlgy3RdX+~p#9zrU(_s{IU`qA+>q^z7G}Qh&IA z;a_TCGI7a~Co)$r>Ue}Q{BBc!NzthIrY|JhD%5O?S|>(w& zmdcOJddnIq!4&rr&`O7yU+bE^t#gI{jvf#|GnhVhK18NP@u?T(rxm%_1>O5?=2{L7bpLLc+YTp>YJY)N??rAn6sb208jUp9tCrtT|YOzg;r&%}L0MjN>lHXuZb3%fk0$u48Gjrsgda z5pM0=aCNA(t3CEm4VUp+vt`wknCmvJxI9)hIN(KKtP>2>f5S31>Lbuj=z?)we+bh3 zv-bmgd#v$&o|XuNpDS4a-tpRCCdU8)Q8R70=ZtU}oE4rC7G&(LI`4f{jNSLywfRBG z3RGm=((?K6T;WGzstqSa(Yr1TF)A5#3M9^}BX1ocSCb%D{^Jv0YRWXbelQWn z%f*8&vjOZ&?5Q$Xlc640f6T@*5wk>cnfCsA4_>5cMOuE3wIS&pu`UZ< zlhp{%Lo54MqJ8|H(HnuPUgEa$Inxu5E1HYhal$@;=iG)gJqgr$;oEk-JU)Lx=I1>T z+p**ytKA5|nDQ}eBr*tUv@}lg)AE|_?5znlEeXD|cwdf$t0Fymf9_5}08J(EsodF* zivnQh_C}RffYh_JSd0|3vCMZQvWHLHwVo)}6tdOsd?S}#qU8JQ?^FFn^$dI{cyCSi zp(eqq1N(O7$#dZ(D7CbRY}FS{%(={j^7Q9k16KHUwDrWy+mAJT_l=+}U!Qb#EY|Z7 zkHqpN7Xi|5Qon5(c)hwl5@Xt`^VSrVftC-=JC?a(ncpwt;ROcVK3|^69ft_$5))_& z#^>Eoq;j~drVJck4r)~MwH=?zLs*BzFrIK=$oD1fj|KJdovMgP|DP|EKtx8bATOt~vT8ErKQ#T_PFeo$ zG+aX58B8iJNoCry8(9B-4nl8ozVP)K1{3Y|8N<+SQpU%_C!u2jd4o_TIHe6xp`#e% z0QPZ88lJL$e!-9Zh`2gLNS(7tdg;qAf1jTZ0G4DqfI z5{QxGR)6fbnX*_8z4@1XGy(?02iEdNI-5T}Pxq^B{=fjK!mc*N)OvrN3N_1@lWm*( zcmy|T@W>MK(>#iR8*hIlB*6Thw&D$R*oeKtA|fD>h8NpI-=<3v-+9))C^0Ig^hVML zIfV?FFH}Qto_W?qb2ufD8RAL2dXwI;K7TILy{qh@Ch%>tTWc@VYlw=DX4NQCueH*) zf2cI+xjtS>2Ft}Iz4>N7lBPGi>+lELgIT>md8$ZbV|{%%<*noK;vZqx~=d&J~&&5|$ng&x2McxnBM9iwDOMjhZWMrVd zc^{abB_tV>`K_V8mDUUVy^=S_OOU|?kX29^!pUBD7zNk+`C4lXEc{v=G9J^z*-F=w zWxWO$>w!3SJb~H$t@Et`UdXVB!zL;QGN~w)kkfa4N>Q(Rlb-N`P>;Qq=lgFD*GHMc zJ0s~QQ^oOomYGgPeh4Voq+F}T<<0FXY)ul^7o7 zd=}q>#Mn~5PULNkq|+>LhmvsWFV@)_9KJl9v?!&EKFvYWyRLx+qHX;73da`XIkG@O z^!4l4t^0T_?c;c&f|TKB8$A(}Z_fis^bPfMlli`?mg@X=OVecW?vG){6>M|x!E<@v#OB2OW(9NdIzgDsJ7$ArsdFO+Kc5x1=i zn;{y_XBv|3eci{Hu3o6R6(+E3Xawhqd>-JKCAqd4-$=-${Jz%7%?L&(@NHUNu+i)8 z+|CO=4c!0_L2+cg9hjuxH5lAw!AFjXY>%-{RY78iEuSVrrby7uXztFT-^i4JzuIup zoc!h+aS3(kUA%!0nFIj=LAE}6j5PV}cgEj#YZ6}d-VglGvf1q;A{Uq1!;fqmfT^9Dq!_UFRypXWYRf5>dJzdyx4{JNEH(dk zpF&CfaC#zWf=13Kl*B-@e&sfG$w+9jJqD7F4%>swOW~wHt@f13zFOn;1U}{Z6otZf zxdt;K^7bes@sWvo33jgUPZei>3~SG(24M!UXS^XDoJCQSgB77an54U|cx!5n|1dE+ zL|p(OlI~Y+u*8YeJ_N!P zxfBo}h(>y$-M|d=Md&n$!%{$$tvwr}2r{F(8;-8?HpZ&v${Iz}}bVo0ekD@+v3)xKKzCHq~F3Bk~ZYy;2&O zlT`OaJODp(lONb#|^694*vgd;&8t z02320RGSSjz;k&$%g>IQeWZE!2?Bt|7rp2UdQN!VI9?;Mt;Y{x(b*3)1_ai zu!DXfix(crujxmztJeuC=<=#CV06wf%4?`bbrOHmPg30qu%@5Z^;h9C}q_Kz#shMQUGs= z*|cy+Ad8lQqxto&%kC%}WIgNeNo!i3t`{~U#KK>NE^NhW>f^mOKV5CJ+fx3rNT8Ol zXgyz3*k$bgbT#vBstCL|3e&9tG7w--y$ZAx?gyA0x`0jZxZLQ@%*<@oAA@%(Rmhri zpHT04AeB7X3l;EeFJOEcw@EjUJikpAWKO!|ddk!)zX*M^O6teT zcFKi<-@Ya5Z#EwyzZ4VA5VfF^WcSJpj=H0d^)i!>+Ln7qp|v-jYySlm;xBK=M;_K4 zukV4D|JU=Ttp5WKGcy_qG6_OZo%I4S`tAI;^1eJtg6>%SdDe`mGx;V~;AN*%fBqWo zQ6w;zW37`E>e#Pe{ylLkXXtU&A1AWS{ z!BFAx&50?Ozh%k0i!w(*Fy`kn65vMS z*JVujjj9R@5B|TcW(M(n%8`rb*d-IWQwd0@QILzCD%X7Pm84yy&aAF4{U>Amu|Jj- zgXSj@EAj?BgTK{6?0%klfzndDRnq%}yMxtE=c9QdOH_Z0=f^u`;zboV(#diIUtlRu zCw1y2Xm%9Uw!rYn4G1{#uYDg^*sX4V=w$fKnA8r||T$J_?G!*%@e*>r>Uf zh6Wdikz;gFhEsTfB^R|%C4>KYd4s+J@2dRPRM+mj0JjG?5*=)`(cLjG1s`h$&F|ed zQ6Lfqam6p?5jWxrRz8<_!rW~bQ?7@a?0gNps#>7uYO z#})y$)NYl=3&B2=7rc;HYfL=q);p)1GQ;(T{3yDK5`V@z4Rl0A^ZqMi(h zxljBpJBHf{NXLK7v96tFB$Wfv{ofOYDTGX7(VGEWIZI!?L<{dekcktKr0iW<IHfIA*nNKqFM}X3%qG8}>c| zjAQWI{Ck56oZ61>(CA)h&?Q*cYg-vsg90)w5TUPm1<98T#$WMyD9xY(X!2~mJ-s}s zSD9M=Fd$3fI1PpyuQ4bEK$xNFow2gw;&)`IbQ6Bc;is>3{QtOv?)?STb#*D9(Fc-# zl5mEn2P~lzvytkovN`UB@X7p)>jY)@$`e_Nt)07S9^LJwyRj@XXydifon_9`W0GjbO#&VQ0t@0 zO0zd)I0bD2O(*)zw`s?n;kiaba%$|c+p`U$&L!Z*0Sq5hju%4hEuMe4)IfrF0>~)Y z39t82FSi>wh^^ksne{$TLN3FR^gYeq54gv&($ct}1sZSHLyT>IJ{bO3&mfT}(kRu@ z@LEHy&9!qFRKf@udKwAc!IxhFz^|2wNKVY>vHrBm01ydyQXc{V-tt5dn~+fNxTC1+ zkYaETU!%kt6%}RYxcJ8rWvA1|n4f?q&21e`8to&jfHNUj#OwAn0F5A~|J+v4%OSn0 z^BO(KP?!VJ+!2?JkYqcEaPNQyQ|>yLw3`fmx@hYSj%I*cV46MfS6i)=!z+kzrr z-S=`YpK7D+DGVupHYKH`gz6JfFnL04M&A*Y$n z2h*}LWNPsQiE%DRK8OBN7uE!I;TC= zK|1lSJcVS2H_jhuWe-W_FzH!jRK0#FtkONRB;O-i(j{+qK$uH?dGHqd>vxn{*WQ42 z$Ldym8dS1BifX7TX>9mk=YZ^LjW9Pr%r!`LY{yo)RVj-3z8zBo(3NJxHuzq!P$`hZ z?V3l0i1|VJ+h-@fg@rVQia*Q(AcM8m3$!%1e|?@j&fcKLE(*+7*9H8NlNKJ875|+X zMM__wWW-s8>|7x!p0h5g)q%kF^hxO*Yj3#V%h$W(82c!hcfsE<~rdjCj#2?$- zN3}$P5@$Yrc$qBLR4OdNb!cAQgsOcv0f_LyL^O!N!IJvrIsTcvP_cW+e*v?qy>W!4 zx6aL5!(qi@WEo%aoQnOul9Bmm0ItdBtIXtj%_KVmrGlQaVvHogGCy%-(R3vrCw!T< zh|k*onZHwI{AZu24}BDkBr&OWljjY!pdBrBmj#B6eQXtU=#K74rsiOKD47jEASLM& ze`1I$M0{B6cf<6I$KB?ObZ{esH-Y)kV0fig9RWiUpVT8spsL#Jy$^0t=~t zpsAq)=oG|fw7VgzcU8X}R+yY6S~rFFqAgA%Vt7IeUdx<`^ZSLsRPS+e`Dpf0f47@p zX#@_1;&B`tp(Gb|Gk)y_{F?i!poVu*sPp^jBVm*dYiw@Jg%tA?#(Q~^SB96H0RK`6 z0vr=<;rDCqG5WD!AtRS6oO&8u{kEs?%+f}3sDErtg~j(Idd-_;G$s9;3rtB>WTNP# z{?Ej(#7hmuF-f`LaOe-tXlb2Yr(<&ia%U{XJl!Pn0$dIu_otPA1XoO}~I9OCrI1pl}cJIOqLu!ghGD z9iEEpOD6YFP|VZAjfsawMW4~bYHi0R>akAVXqj|w5gN=&8?@==7mw)M2Fb9LF~&cW zWF#N^9qm8lojr;6Od|2_K*8htd5Z`Xk;5$p6c8G0bc=U7Vn5Lu`|J5c7cn#NGX07{ z7Lch3bS?>r(HwVE6tlBTPCLV?3C&$jQ=e$OUza_BQNvo#rA!%TU4_R}U4KD0Ihk@)S=v`JBMmNr2+81R8 zs8>LJbaj4e)t&+*6M%hh0g*#W%6&!h&fgwkOjcaACsKYKSROzNjBKN&k2Wb)v|04r8q z98XC;`$_f=vM^WkRV{-0U4|r3DFiBW&;@YgW~3;v#_foM>U7Dth)UH!B?XI=E5m#! z2`HXO0qmhzqnP+G(d>YL%NcfvZEtVS60G9X-@P6YXT?+XP{8PNR*o$CO`d4;L$BUi z#9`p6jF7*#UHaw8ib1c?B!EhUlNsU&b2XlOuad-ma=qe>WdbAmrAG9SQ)k-6oC*Z+ z4&eVg^#1=d?#xOH`Mes^9j=4sZ8o?sL}@xRN`LfyoIdCQ++NTkQJRLE15|KPH`e-? zvFI#Bs?lGm1>K%xq>)PHTd_S`^fAykEZ9-X!oi{Q{L>c@;qmlTocT`U7Y@iZknL4@ zjPEq4Giv+-Uwb^BPYMh|71>|w2&%K3vILgD!c8uQsSWyia}rcFXRY-sSmp9PbFzG^ zH&o#;D~*L|J@_lMNi_>MTW{Qh&MIg-f9HmxPYj*pN}g4;;5A|*K;&N|gAxEefk`E# zKFi1im8GJ~idkYP=ww>Ui0YL5Z?Mu9kD?41V;M#^a; zn*%~T@`z|+@S!O}&gk8bKuQ!0|L`4IjkF?K`xj!Ykfh|-pbY%%0DoD0f?O*eoolq( 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

`iQa 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 CLmNE+ literal 0 HcmV?d00001 diff --git a/core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-md-ltr-Mobile-Chrome-linux.png b/core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-md-ltr-Mobile-Chrome-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..b78b20510ba04f77626cd6d8c1c1ba074f8fd98f GIT binary patch literal 10842 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 UNAx4O{u@D2PF1#A+BD>U0qF;M^8f$< literal 0 HcmV?d00001 diff --git a/core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-md-ltr-Mobile-Safari-linux.png b/core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-md-ltr-Mobile-Safari-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..15d9f9c58c4fe5565718edc30377be02a74dc423 GIT binary patch literal 16889 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 literal 0 HcmV?d00001 diff --git a/core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-md-rtl-Mobile-Firefox-linux.png b/core/src/components/toast/test/layout/toast.e2e.ts-snapshots/toast-stacked-long-message-md-rtl-Mobile-Firefox-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..447c93633d5a6d0a53ba3266c15a4e9ed56fa7ca GIT binary patch literal 16075 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 Date: Tue, 27 Jan 2026 15:43:30 -0500 Subject: [PATCH 12/16] chore(deps): update actions/checkout action to v6.0.2 (#30935) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [actions/checkout](https://redirect.github.com/actions/checkout) | action | patch | `v6.0.1` → `v6.0.2` | --- ### Release Notes

actions/checkout (actions/checkout) ### [`v6.0.2`](https://redirect.github.com/actions/checkout/blob/HEAD/CHANGELOG.md#v602) [Compare Source](https://redirect.github.com/actions/checkout/compare/v6.0.1...v6.0.2) - Fix tag handling: preserve annotations and explicit fetch-tags by [@​ericsciple](https://redirect.github.com/ericsciple) in [#​2356](https://redirect.github.com/actions/checkout/pull/2356)
--- ### Configuration 📅 **Schedule**: Branch creation - "every weekday before 11am" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/ionic-team/ionic-framework). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../build-core-stencil-prerelease/action.yml | 2 +- .../workflows/actions/build-core/action.yml | 2 +- .github/workflows/build.yml | 30 +++++++++---------- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/dev-build.yml | 2 +- .github/workflows/nightly.yml | 2 +- .github/workflows/release-ionic.yml | 16 +++++----- .github/workflows/release.yml | 4 +-- .github/workflows/stencil-nightly.yml | 30 +++++++++---------- .github/workflows/update-screenshots.yml | 6 ++-- 10 files changed, 48 insertions(+), 48 deletions(-) diff --git a/.github/workflows/actions/build-core-stencil-prerelease/action.yml b/.github/workflows/actions/build-core-stencil-prerelease/action.yml index d58299125e3..0cffac83659 100644 --- a/.github/workflows/actions/build-core-stencil-prerelease/action.yml +++ b/.github/workflows/actions/build-core-stencil-prerelease/action.yml @@ -8,7 +8,7 @@ inputs: runs: using: 'composite' steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: node-version: 24.x diff --git a/.github/workflows/actions/build-core/action.yml b/.github/workflows/actions/build-core/action.yml index 19487732007..3bf6659db09 100644 --- a/.github/workflows/actions/build-core/action.yml +++ b/.github/workflows/actions/build-core/action.yml @@ -8,7 +8,7 @@ inputs: runs: using: 'composite' steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 with: node-version: 24.x diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d3d52e048be..7772b2c432f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,7 +22,7 @@ jobs: build-core: runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/build-core with: ionicons-version: ${{ inputs.ionicons_npm_release_tag }} @@ -31,21 +31,21 @@ jobs: needs: [build-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/test-core-clean-build test-core-lint: needs: [build-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/test-core-lint test-core-spec: needs: [build-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/test-core-spec test-core-screenshot: @@ -62,7 +62,7 @@ jobs: needs: [build-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/test-core-screenshot with: shard: ${{ matrix.shard }} @@ -90,14 +90,14 @@ jobs: needs: [build-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/build-vue build-vue-router: needs: [build-vue] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/build-vue-router test-vue-e2e: @@ -108,7 +108,7 @@ jobs: needs: [build-vue, build-vue-router] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/test-vue-e2e with: app: ${{ matrix.apps }} @@ -126,14 +126,14 @@ jobs: needs: [build-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/build-angular build-angular-server: needs: [build-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/build-angular-server test-angular-e2e: @@ -144,7 +144,7 @@ jobs: needs: [build-angular, build-angular-server] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/test-angular-e2e with: app: ${{ matrix.apps }} @@ -162,14 +162,14 @@ jobs: needs: [build-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/build-react build-react-router: needs: [build-react] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/build-react-router test-react-router-e2e: @@ -180,7 +180,7 @@ jobs: needs: [build-react, build-react-router] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/test-react-router-e2e with: app: ${{ matrix.apps }} @@ -202,7 +202,7 @@ jobs: needs: [build-react, build-react-router] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/test-react-e2e with: app: ${{ matrix.apps }} diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 2844a4f9b01..5e6715d02b1 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -14,7 +14,7 @@ jobs: permissions: security-events: write steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: github/codeql-action/init@v4 with: languages: javascript diff --git a/.github/workflows/dev-build.yml b/.github/workflows/dev-build.yml index 2c459097e67..51806128a8e 100644 --- a/.github/workflows/dev-build.yml +++ b/.github/workflows/dev-build.yml @@ -13,7 +13,7 @@ jobs: outputs: dev-hash: ${{ steps.create-dev-hash.outputs.DEV_HASH }} steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 # A 1 is required before the timestamp # as lerna will fail when there is a leading 0 # See https://github.com/lerna/lerna/issues/2840 diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index dc2fa5860a9..2f64d9f9bd5 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -13,7 +13,7 @@ jobs: outputs: nightly-hash: ${{ steps.create-nightly-hash.outputs.NIGHTLY_HASH }} steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 # A 1 is required before the timestamp # as lerna will fail when there is a leading 0 # See https://github.com/lerna/lerna/issues/2840 diff --git a/.github/workflows/release-ionic.yml b/.github/workflows/release-ionic.yml index c3f9e5740b6..70f1fb1956b 100644 --- a/.github/workflows/release-ionic.yml +++ b/.github/workflows/release-ionic.yml @@ -23,7 +23,7 @@ jobs: release-core: runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/actions/publish-npm with: scope: '@ionic/core' @@ -48,7 +48,7 @@ jobs: needs: [release-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Restore @ionic/docs built cache uses: ./.github/workflows/actions/download-archive with: @@ -67,7 +67,7 @@ jobs: needs: [release-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Restore @ionic/core built cache uses: ./.github/workflows/actions/download-archive with: @@ -93,7 +93,7 @@ jobs: needs: [release-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Restore @ionic/core built cache uses: ./.github/workflows/actions/download-archive with: @@ -118,7 +118,7 @@ jobs: needs: [release-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Restore @ionic/core built cache uses: ./.github/workflows/actions/download-archive with: @@ -143,7 +143,7 @@ jobs: needs: [release-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Restore @ionic/core built cache uses: ./.github/workflows/actions/download-archive with: @@ -163,7 +163,7 @@ jobs: needs: [release-react] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Restore @ionic/core built cache uses: ./.github/workflows/actions/download-archive with: @@ -188,7 +188,7 @@ jobs: needs: [release-vue] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Restore @ionic/core built cache uses: ./.github/workflows/actions/download-archive with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a3bb4491cf5..df4429a806b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -58,7 +58,7 @@ jobs: contents: write id-token: write steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: token: ${{ secrets.IONITRON_TOKEN }} fetch-depth: 0 @@ -89,7 +89,7 @@ jobs: contents: write id-token: write steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 # Pull the latest version of the reference # branch instead of the revision that triggered # the workflow otherwise we won't get the commit diff --git a/.github/workflows/stencil-nightly.yml b/.github/workflows/stencil-nightly.yml index b00ac8c42a0..3e8d714ccc1 100644 --- a/.github/workflows/stencil-nightly.yml +++ b/.github/workflows/stencil-nightly.yml @@ -26,7 +26,7 @@ jobs: build-core-with-stencil-nightly: runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/build-core-stencil-prerelease with: stencil-version: ${{ inputs.npm_release_tag || 'nightly' }} @@ -35,21 +35,21 @@ jobs: needs: [build-core-with-stencil-nightly] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/test-core-clean-build test-core-lint: needs: [build-core-with-stencil-nightly] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/test-core-lint test-core-spec: needs: [build-core-with-stencil-nightly] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/test-core-spec with: stencil-version: ${{ inputs.npm_release_tag || 'nightly' }} @@ -72,7 +72,7 @@ jobs: needs: [build-core-with-stencil-nightly] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/test-core-screenshot with: shard: ${{ matrix.shard }} @@ -100,14 +100,14 @@ jobs: needs: [build-core-with-stencil-nightly] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/build-vue build-vue-router: needs: [build-vue] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/build-vue-router test-vue-e2e: @@ -118,7 +118,7 @@ jobs: needs: [build-vue, build-vue-router] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/test-vue-e2e with: app: ${{ matrix.apps }} @@ -136,14 +136,14 @@ jobs: needs: [build-core-with-stencil-nightly] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/build-angular build-angular-server: needs: [build-core-with-stencil-nightly] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/build-angular-server test-angular-e2e: @@ -154,7 +154,7 @@ jobs: needs: [build-angular, build-angular-server] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/test-angular-e2e with: app: ${{ matrix.apps }} @@ -172,14 +172,14 @@ jobs: needs: [build-core-with-stencil-nightly] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/build-react build-react-router: needs: [build-react] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/build-react-router test-react-router-e2e: @@ -190,7 +190,7 @@ jobs: needs: [build-react, build-react-router] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/test-react-router-e2e with: app: ${{ matrix.apps }} @@ -212,7 +212,7 @@ jobs: needs: [build-react, build-react-router] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/test-react-e2e with: app: ${{ matrix.apps }} diff --git a/.github/workflows/update-screenshots.yml b/.github/workflows/update-screenshots.yml index eefcddcb893..6efecbd8f95 100644 --- a/.github/workflows/update-screenshots.yml +++ b/.github/workflows/update-screenshots.yml @@ -26,7 +26,7 @@ jobs: build-core: runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/build-core test-core-screenshot: @@ -47,7 +47,7 @@ jobs: needs: [build-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.github/workflows/actions/test-core-screenshot with: shard: ${{ matrix.shard }} @@ -59,7 +59,7 @@ jobs: runs-on: ubuntu-latest needs: [test-core-screenshot] steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 # Normally, we could just push with the # default GITHUB_TOKEN, but that will # not cause the build workflow From be14dc4bb8bbd7b92e91bde89f11c3c7584aa508 Mon Sep 17 00:00:00 2001 From: OS-jacobbell <228905018+OS-jacobbell@users.noreply.github.com> Date: Tue, 27 Jan 2026 14:57:29 -0700 Subject: [PATCH 13/16] chore(ci): persist updates to core/package.json in stencil nightly build (#30937) ## What is the current behavior? The Stencil Nightly Build workflow tests Ionic with the latest nightly build of Stencil. The first step of the workflow updates Stencil, builds Ionic core, and uploads the build files. Later steps download these build files. Core's updated package.json is not uploaded with the build files, so later steps are installing an old Stencil version, leading to conflicts. ## What is the new behavior? Add core's package.json to the artifact upload. This will make all later steps use the correct Stencil version. Seven of the tests run `git diff` to ensure tests did not cause changes in tracked files. Core's package.json would register as a change, so a new step reverts package.json before running `git diff`. ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information --- .github/workflows/actions/build-angular/action.yml | 4 ++++ .../actions/build-core-stencil-prerelease/action.yml | 2 +- .github/workflows/actions/build-react/action.yml | 4 ++++ .github/workflows/actions/build-vue/action.yml | 4 ++++ .github/workflows/actions/test-angular-e2e/action.yml | 2 +- .github/workflows/actions/test-core-clean-build/action.yml | 4 ++++ .github/workflows/actions/test-core-lint/action.yml | 4 ++++ .github/workflows/actions/test-core-screenshot/action.yml | 4 ++++ .../workflows/actions/update-reference-screenshots/action.yml | 4 ++++ 9 files changed, 30 insertions(+), 2 deletions(-) diff --git a/.github/workflows/actions/build-angular/action.yml b/.github/workflows/actions/build-angular/action.yml index fc7496de421..5224f9741e0 100644 --- a/.github/workflows/actions/build-angular/action.yml +++ b/.github/workflows/actions/build-angular/action.yml @@ -27,6 +27,10 @@ runs: run: npm run build shell: bash working-directory: ./packages/angular + - name: Clean core package.json + run: git checkout ./package.json + shell: bash + working-directory: ./core - name: 🔍 Check Diff run: git diff --exit-code shell: bash diff --git a/.github/workflows/actions/build-core-stencil-prerelease/action.yml b/.github/workflows/actions/build-core-stencil-prerelease/action.yml index 0cffac83659..d49deb58d6e 100644 --- a/.github/workflows/actions/build-core-stencil-prerelease/action.yml +++ b/.github/workflows/actions/build-core-stencil-prerelease/action.yml @@ -29,4 +29,4 @@ runs: with: name: ionic-core output: core/CoreBuild.zip - paths: core/dist core/components core/css core/hydrate core/loader core/src/components.d.ts + paths: core/dist core/components core/css core/hydrate core/loader core/src/components.d.ts core/package.json diff --git a/.github/workflows/actions/build-react/action.yml b/.github/workflows/actions/build-react/action.yml index 04e3f2c8b3a..f2adcb0788f 100644 --- a/.github/workflows/actions/build-react/action.yml +++ b/.github/workflows/actions/build-react/action.yml @@ -31,6 +31,10 @@ runs: run: npm run test.spec shell: bash working-directory: ./packages/react + - name: Clean core package.json + run: git checkout ./package.json + shell: bash + working-directory: ./core - name: 🔍 Check Diff run: git diff --exit-code shell: bash diff --git a/.github/workflows/actions/build-vue/action.yml b/.github/workflows/actions/build-vue/action.yml index ddd96b7a690..72a49093fca 100644 --- a/.github/workflows/actions/build-vue/action.yml +++ b/.github/workflows/actions/build-vue/action.yml @@ -27,6 +27,10 @@ runs: run: npm run build shell: bash working-directory: ./packages/vue + - name: Clean core package.json + run: git checkout ./package.json + shell: bash + working-directory: ./core - name: 🔍 Check Diff run: git diff --exit-code shell: bash diff --git a/.github/workflows/actions/test-angular-e2e/action.yml b/.github/workflows/actions/test-angular-e2e/action.yml index 1e5b49b3150..c6225382658 100644 --- a/.github/workflows/actions/test-angular-e2e/action.yml +++ b/.github/workflows/actions/test-angular-e2e/action.yml @@ -17,7 +17,7 @@ runs: - uses: ./.github/workflows/actions/download-archive with: name: ionic-angular - path: ./angular + path: ./packages/angular filename: AngularBuild.zip - uses: ./.github/workflows/actions/download-archive with: diff --git a/.github/workflows/actions/test-core-clean-build/action.yml b/.github/workflows/actions/test-core-clean-build/action.yml index ac5c345a235..7e5942a036e 100644 --- a/.github/workflows/actions/test-core-clean-build/action.yml +++ b/.github/workflows/actions/test-core-clean-build/action.yml @@ -12,6 +12,10 @@ runs: name: ionic-core path: ./core filename: CoreBuild.zip + - name: Clean core package.json + run: git checkout ./package.json + shell: bash + working-directory: ./core - name: 🔍 Check Diff run: | git diff --exit-code || { diff --git a/.github/workflows/actions/test-core-lint/action.yml b/.github/workflows/actions/test-core-lint/action.yml index a32355d33fa..ef9d37d0c7d 100644 --- a/.github/workflows/actions/test-core-lint/action.yml +++ b/.github/workflows/actions/test-core-lint/action.yml @@ -10,6 +10,10 @@ runs: run: npm ci working-directory: ./core shell: bash + - name: Clean core package.json + run: git checkout ./package.json + shell: bash + working-directory: ./core - name: 🖌️ Lint run: npm run lint shell: bash diff --git a/.github/workflows/actions/test-core-screenshot/action.yml b/.github/workflows/actions/test-core-screenshot/action.yml index 1ae7ac361e0..629c68d79f2 100644 --- a/.github/workflows/actions/test-core-screenshot/action.yml +++ b/.github/workflows/actions/test-core-screenshot/action.yml @@ -30,6 +30,10 @@ runs: run: npm run test.e2e.docker.ci ${{ inputs.component }} -- --shard=${{ inputs.shard }}/${{ inputs.totalShards }} shell: bash working-directory: ./core + - name: Clean core package.json + run: git checkout ./package.json + shell: bash + working-directory: ./core - name: Test and Update id: test-and-update if: inputs.update == 'true' diff --git a/.github/workflows/actions/update-reference-screenshots/action.yml b/.github/workflows/actions/update-reference-screenshots/action.yml index f104d227095..9c082f1a17d 100644 --- a/.github/workflows/actions/update-reference-screenshots/action.yml +++ b/.github/workflows/actions/update-reference-screenshots/action.yml @@ -21,6 +21,10 @@ runs: find . -type f -name 'UpdatedScreenshots-*.zip' -exec unzip -q -o -d ../ {} \; shell: bash working-directory: ./artifacts + - name: Clean core package.json + run: git checkout ./package.json + shell: bash + working-directory: ./core - name: 📸 Push Screenshots # Configure user as Ionitron # and push only the changed .png snapshots From 893d5239979a468081bd88eda6ef602f9358f5aa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 30 Jan 2026 09:18:12 -0500 Subject: [PATCH 14/16] chore(deps): update dependency @capacitor/core to v8.0.2 (#30938) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@capacitor/core](https://capacitorjs.com) ([source](https://redirect.github.com/ionic-team/capacitor)) | [`8.0.1` → `8.0.2`](https://renovatebot.com/diffs/npm/@capacitor%2fcore/8.0.1/8.0.2) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fcore/8.0.2?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fcore/8.0.1/8.0.2?slim=true) | --- ### Release Notes
ionic-team/capacitor (@​capacitor/core) ### [`v8.0.2`](https://redirect.github.com/ionic-team/capacitor/blob/HEAD/CHANGELOG.md#802-2026-01-27) [Compare Source](https://redirect.github.com/ionic-team/capacitor/compare/8.0.1...8.0.2) ##### Bug Fixes - **android:** AGP 9.0 no longer supports `proguard-android.txt` ([#​8315](https://redirect.github.com/ionic-team/capacitor/issues/8315)) ([dcc76c3](https://redirect.github.com/ionic-team/capacitor/commit/dcc76c37508a9b71fb36d95707748c2dd115cf52)) - **cli:** Update tar package ([#​8311](https://redirect.github.com/ionic-team/capacitor/issues/8311)) ([0969c5c](https://redirect.github.com/ionic-team/capacitor/commit/0969c5cd0b16cf23d2489a85a3b8fa1bee2ebf3b)) - **core:** make SystemBars hide and show options optional ([#​8305](https://redirect.github.com/ionic-team/capacitor/issues/8305)) ([95dc7d8](https://redirect.github.com/ionic-team/capacitor/commit/95dc7d8ace3aabdda7e325c4a8ef7d1432ad37e9)) - **SystemBars:** get correct style on handleOnConfigurationChanged ([#​8295](https://redirect.github.com/ionic-team/capacitor/issues/8295)) ([2a66b44](https://redirect.github.com/ionic-team/capacitor/commit/2a66b44915895f971e4a26a8612798aa2f95ea11)) - **SystemBars:** Set window background color according to theme ([#​8306](https://redirect.github.com/ionic-team/capacitor/issues/8306)) ([6037e38](https://redirect.github.com/ionic-team/capacitor/commit/6037e3836ec24c9ddf26e74e5fbec20ab506adfd)) - **SystemBars:** Skipping margin manipulation when on a fixed WebView ([#​8309](https://redirect.github.com/ionic-team/capacitor/issues/8309)) ([53c33b6](https://redirect.github.com/ionic-team/capacitor/commit/53c33b614218bf635322fbdf9a38038a7964e3d4))
--- ### Configuration 📅 **Schedule**: Branch creation - "every weekday before 11am" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/ionic-team/ionic-framework). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- core/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/package-lock.json b/core/package-lock.json index 25a81fd8f8a..6b2c88c5512 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -629,9 +629,9 @@ "license": "MIT" }, "node_modules/@capacitor/core": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-8.0.1.tgz", - "integrity": "sha512-5UqSWxGMp/B8KhYu7rAijqNtYslhcLh+TrbfU48PfdMDsPfaU/VY48sMNzC22xL8BmoFoql/3SKyP+pavTOvOA==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-8.0.2.tgz", + "integrity": "sha512-EXZfxkL6GFJS2cb7TIBR7RiHA5iz6ufDcl1VmUpI2pga3lJ5Ck2+iqbx7N+osL3XYem9ad4XCidJEMm64DX6UQ==", "dev": true, "license": "MIT", "peer": true, From cc75ff42e1e5359487499532b88f71dda715d7b5 Mon Sep 17 00:00:00 2001 From: Brandy Smith Date: Tue, 3 Feb 2026 09:51:30 -0500 Subject: [PATCH 15/16] chore(scripts): remove no longer used test.e2e.script (#30943) Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> --- core/package-lock.json | 20 --- core/package.json | 4 +- core/scripts/testing/e2e-script.mjs | 260 ---------------------------- 3 files changed, 1 insertion(+), 283 deletions(-) delete mode 100644 core/scripts/testing/e2e-script.mjs diff --git a/core/package-lock.json b/core/package-lock.json index 6b2c88c5512..c3656beae5a 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -19,7 +19,6 @@ "@capacitor/haptics": "^8.0.0", "@capacitor/keyboard": "^8.0.0", "@capacitor/status-bar": "^8.0.0", - "@clack/prompts": "^0.11.0", "@ionic/eslint-config": "^0.3.0", "@ionic/prettier-config": "^2.0.0", "@playwright/test": "^1.56.1", @@ -669,25 +668,6 @@ "@capacitor/core": ">=8.0.0" } }, - "node_modules/@clack/core": { - "version": "0.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^1.0.0", - "sisteransi": "^1.0.5" - } - }, - "node_modules/@clack/prompts": { - "version": "0.11.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@clack/core": "0.5.0", - "picocolors": "^1.0.0", - "sisteransi": "^1.0.5" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "dev": true, diff --git a/core/package.json b/core/package.json index ceb84b5c68c..24cee91bce6 100644 --- a/core/package.json +++ b/core/package.json @@ -44,7 +44,6 @@ "@capacitor/haptics": "^8.0.0", "@capacitor/keyboard": "^8.0.0", "@capacitor/status-bar": "^8.0.0", - "@clack/prompts": "^0.11.0", "@ionic/eslint-config": "^0.3.0", "@ionic/prettier-config": "^2.0.0", "@playwright/test": "^1.56.1", @@ -104,8 +103,7 @@ "docker.build": "docker build -t ionic-playwright .", "test.e2e.docker": "npm run docker.build && node ./scripts/docker.mjs", "test.e2e.docker.update-snapshots": "npm run test.e2e.docker -- --update-snapshots='changed'", - "test.e2e.docker.ci": "npm run docker.build && CI=true node ./scripts/docker.mjs", - "test.e2e.script": "node scripts/testing/e2e-script.mjs" + "test.e2e.docker.ci": "npm run docker.build && CI=true node ./scripts/docker.mjs" }, "author": "Ionic Team", "license": "MIT", diff --git a/core/scripts/testing/e2e-script.mjs b/core/scripts/testing/e2e-script.mjs deleted file mode 100644 index 794447bf61c..00000000000 --- a/core/scripts/testing/e2e-script.mjs +++ /dev/null @@ -1,260 +0,0 @@ -// The purpose of this script is to provide a way run the E2E tests -// without having the developer to manually run multiple commands based -// on the desired end result. -// E.g. update the local ground truths for a specific component or -// open the Playwright report after running the E2E tests. - -import { - intro, - outro, - confirm, - spinner, - isCancel, - cancel, - text, - log, -} from '@clack/prompts'; -import { exec, spawn } from 'child_process'; -import fs from 'node:fs'; -import { setTimeout as sleep } from 'node:timers/promises'; -import util from 'node:util'; -import color from 'picocolors'; - -async function main() { - const execAsync = util.promisify(exec); - const cleanUpFiles = async () => { - // Clean up the local ground truths. - const cleanUp = spinner(); - - // Inform the user that the local ground truths are being cleaned up. - cleanUp.start('Restoring local ground truths'); - - // Reset the local ground truths. - await execAsync('git reset -- src/**/*-linux.png').catch((error) => { - cleanUp.stop('Failed to reset local ground truths'); - console.error(error); - return process.exit(0); - }); - - // Restore the local ground truths. - await execAsync('git restore -- src/**/*-linux.png').catch((error) => { - cleanUp.stop('Failed to restore local ground truths'); - console.error(error); - return process.exit(0); - }); - - // Inform the user that the local ground truths have been cleaned up. - cleanUp.stop('Local ground truths have been restored to their original state in order to avoid committing them.'); - }; - - intro(color.inverse(' Update Local Ground Truths')); - - // Ask user for the component name they want to test. - const componentValue = await text({ - message: 'Enter the component or path you want to test (e.g. chip, src/components/chip)', - placeholder: 'Empty for all components', - }); - - // User cancelled the operation with `Ctrl+C` or `CMD+C`. - if (isCancel(componentValue)) { - cancel('Operation cancelled'); - return process.exit(0); - } - - // Ask user if they want to update their local ground truths. - const shouldUpdateTruths = await confirm({ - message: 'Do you want to update your local ground truths?', - }); - - // User cancelled the operation with `Ctrl+C` or `CMD+C`. - if (isCancel(shouldUpdateTruths)) { - cancel('Operation cancelled'); - return process.exit(0); - } - - if (shouldUpdateTruths) { - const defaultBaseBranch = 'main'; - - // Ask user for the base branch. - let baseBranch = await text({ - message: 'Enter the base branch name:', - placeholder: `default: ${defaultBaseBranch}`, - }) - - // User cancelled the operation with `Ctrl+C` or `CMD+C`. - if (isCancel(baseBranch)) { - cancel('Operation cancelled'); - return process.exit(0); - } - - // User didn't provide a base branch. - if (!baseBranch) { - baseBranch = defaultBaseBranch; - } - - /** - * The provided base branch needs to be fetched. - * This ensures that the local base branch is up-to-date with the - * remote base branch. Otherwise, there might be errors stating that - * certain files don't exist in the local base branch. - */ - const fetchBaseBranch = spinner(); - - // Inform the user that the base branch is being fetched. - fetchBaseBranch.start(`Fetching "${baseBranch}" to have the latest changes`); - - // Fetch the base branch. - await execAsync(`git fetch origin ${baseBranch}`).catch((error) => { - fetchBaseBranch.stop(`Failed to fetch "${baseBranch}"`); - console.error(error); - return process.exit(0); - }); - - // Inform the user that the base branch has been fetched. - fetchBaseBranch.stop(`Fetched "${baseBranch}"`); - - - const updateGroundTruth = spinner(); - - // Inform the user that the local ground truths are being updated. - updateGroundTruth.start('Updating local ground truths'); - - // Check if user provided an existing file or directory. - const isValidLocation = fs.existsSync(componentValue); - - // User provided an existing file or directory. - if (isValidLocation) { - const stats = fs.statSync(componentValue); - - // User provided a file as the component. - // ex: `componentValue` = `src/components/chip/test/basic/chip.e2e.ts` - if (stats.isFile()) { - // Update the local ground truths for the provided path. - await execAsync(`git checkout origin/${baseBranch} -- ${componentValue}-snapshots/*-linux.png`).catch((error) => { - updateGroundTruth.stop('Failed to update local ground truths'); - console.error(error); - return process.exit(0); - }); - } - - // User provided a directory as the component. - // ex: `componentValue` = `src/components/chip` - if (stats.isDirectory()) { - // Update the local ground truths for the provided directory. - await execAsync(`git checkout origin/${baseBranch} -- ${componentValue}/test/*/*.e2e.ts-snapshots/*-linux.png`).catch((error) => { - updateGroundTruth.stop('Failed to update local ground truths'); - console.error(error); - return process.exit(0); - }); - } - } - // User provided a component name as the component. - // ex: `componentValue` = `chip` - else if (componentValue) { - // Update the local ground truths for the provided component. - await execAsync(`git checkout origin/${baseBranch} -- src/components/${componentValue}/test/*/${componentValue}.e2e.ts-snapshots/*-linux.png`).catch((error) => { - updateGroundTruth.stop('Failed to update local ground truths'); - console.error(error); - return process.exit(0); - }); - } - // User provided an empty string. - else { - // Update the local ground truths for all components. - await execAsync(`git checkout origin/${baseBranch} -- src/components/*/test/*/*.e2e.ts-snapshots/*-linux.png`).catch((error) => { - updateGroundTruth.stop('Failed to update local ground truths'); - console.error(error); - return process.exit(0); - }); - } - - // Inform the user that the local ground truths have been updated. - updateGroundTruth.stop('Updated local ground truths'); - } - - const buildCore = spinner(); - - // Inform the user that the core is being built. - buildCore.start('Building core'); - - /** - * Build core - * Otherwise, the uncommitted changes will not be reflected in the tests because: - * - popping the stash doesn't trigger a re-render even if `npm start` is running - * - app is not running the `npm start` command - */ - await execAsync('npm run build').catch((error) => { - // Clean up the local ground truths. - cleanUpFiles(); - - buildCore.stop('Failed to build core'); - console.error(error); - return process.exit(0); - }); - - buildCore.stop('Built core'); - - const runE2ETests = spinner(); - - // Inform the user that the E2E tests are being run. - runE2ETests.start('Running E2E tests'); - - // User provided a component value. - if (componentValue) { - await execAsync(`npm run test.e2e.docker.ci ${componentValue}`).catch((error) => { - // Clean up the local ground truths. - cleanUpFiles(); - - runE2ETests.stop('Failed to run E2E tests'); - console.error(error); - return process.exit(0); - }); - } else { - await execAsync('npm run test.e2e.docker.ci').catch((error) => { - // Clean up the local ground truths. - cleanUpFiles(); - - runE2ETests.stop('Failed to run E2E tests'); - console.error(error); - return process.exit(0); - }); - } - - runE2ETests.stop('Ran E2E tests'); - - // Clean up the local ground truths. - await cleanUpFiles(); - - // Ask user if they want to open the Playwright report. - const shouldOpenReport = await confirm({ - message: 'Do you want to open the Playwright report?', - }); - - // User cancelled the operation with `Ctrl+C` or `CMD+C`. - if (isCancel(shouldOpenReport)) { - cancel('Operation cancelled'); - return process.exit(0); - } - - // User chose to open the Playwright report. - if (shouldOpenReport) { - // Use spawn to display the server information and the key to quit the server. - spawn('npx', ['playwright', 'show-report'], { - stdio: 'inherit', - }); - } else { - // Inform the user that the Playwright report can be opened by running the following command. - log.info('If you change your mind, you can open the Playwright report by running the following command:'); - log.info(color.bold('npx playwright show-report')); - } - - if (shouldOpenReport) { - outro("You're all set! Don't forget to quit serving the Playwright report when you're done."); - } else { - outro("You're all set!"); - } - - await sleep(1000); -} - -main().catch(console.error); From efdd1012378411f0c7f46e64530770b97c446650 Mon Sep 17 00:00:00 2001 From: Jacob Bell <228905018+OS-jacobbell@users.noreply.github.com> Date: Wed, 18 Feb 2026 10:22:01 -0700 Subject: [PATCH 16/16] chore(deps): update stencil/core to 4.43.0 --- core/api.txt | 10 +- core/package-lock.json | 6 +- core/package.json | 2 +- core/src/components.d.ts | 1117 +++++++++++++++++++++++++++++++------- 4 files changed, 943 insertions(+), 192 deletions(-) diff --git a/core/api.txt b/core/api.txt index 745d82786af..553e74e7941 100644 --- a/core/api.txt +++ b/core/api.txt @@ -703,7 +703,7 @@ ion-infinite-scroll-content,prop,loadingText,IonicSafeString | string | undefine ion-input,scoped ion-input,prop,autocapitalize,string,'off',false,false -ion-input,prop,autocomplete,"name" | "email" | "tel" | "url" | "on" | "off" | "honorific-prefix" | "given-name" | "additional-name" | "family-name" | "honorific-suffix" | "nickname" | "username" | "new-password" | "current-password" | "one-time-code" | "organization-title" | "organization" | "street-address" | "address-line1" | "address-line2" | "address-line3" | "address-level4" | "address-level3" | "address-level2" | "address-level1" | "country" | "country-name" | "postal-code" | "cc-name" | "cc-given-name" | "cc-additional-name" | "cc-family-name" | "cc-number" | "cc-exp" | "cc-exp-month" | "cc-exp-year" | "cc-csc" | "cc-type" | "transaction-currency" | "transaction-amount" | "language" | "bday" | "bday-day" | "bday-month" | "bday-year" | "sex" | "tel-country-code" | "tel-national" | "tel-area-code" | "tel-local" | "tel-extension" | "impp" | "photo",'off',false,false +ion-input,prop,autocomplete,"additional-name" | "address-level1" | "address-level2" | "address-level3" | "address-level4" | "address-line1" | "address-line2" | "address-line3" | "bday" | "bday-day" | "bday-month" | "bday-year" | "cc-additional-name" | "cc-csc" | "cc-exp" | "cc-exp-month" | "cc-exp-year" | "cc-family-name" | "cc-given-name" | "cc-name" | "cc-number" | "cc-type" | "country" | "country-name" | "current-password" | "email" | "family-name" | "given-name" | "honorific-prefix" | "honorific-suffix" | "impp" | "language" | "name" | "new-password" | "nickname" | "off" | "on" | "one-time-code" | "organization" | "organization-title" | "photo" | "postal-code" | "sex" | "street-address" | "tel" | "tel-area-code" | "tel-country-code" | "tel-extension" | "tel-local" | "tel-national" | "transaction-amount" | "transaction-currency" | "url" | "username",'off',false,false ion-input,prop,autocorrect,"off" | "on",'off',false,false ion-input,prop,autofocus,boolean,false,false,false ion-input,prop,clearInput,boolean,false,false,false @@ -1209,7 +1209,7 @@ ion-nav,shadow ion-nav,prop,animated,boolean,true,false,false ion-nav,prop,animation,((baseEl: any, opts?: any) => Animation) | undefined,undefined,false,false ion-nav,prop,root,Function | HTMLElement | ViewController | null | string | undefined,undefined,false,false -ion-nav,prop,rootParams,undefined | { [key: string]: any; },undefined,false,false +ion-nav,prop,rootParams,T | undefined,undefined,false,false ion-nav,prop,swipeGesture,boolean | undefined,undefined,false,false ion-nav,method,canGoBack,canGoBack(view?: ViewController) => Promise ion-nav,method,getActive,getActive() => Promise @@ -1230,7 +1230,7 @@ ion-nav,event,ionNavWillChange,void,false ion-nav-link,none ion-nav-link,prop,component,Function | HTMLElement | ViewController | null | string | undefined,undefined,false,false -ion-nav-link,prop,componentProps,undefined | { [key: string]: any; },undefined,false,false +ion-nav-link,prop,componentProps,T | undefined,undefined,false,false ion-nav-link,prop,routerAnimation,((baseEl: any, opts?: any) => Animation) | undefined,undefined,false,false ion-nav-link,prop,routerDirection,"back" | "forward" | "root",'forward',false,false @@ -1323,7 +1323,7 @@ ion-popover,prop,animated,boolean,true,false,false ion-popover,prop,arrow,boolean,true,false,false ion-popover,prop,backdropDismiss,boolean,true,false,false ion-popover,prop,component,Function | HTMLElement | null | string | undefined,undefined,false,false -ion-popover,prop,componentProps,undefined | { [key: string]: any; },undefined,false,false +ion-popover,prop,componentProps,T | undefined,undefined,false,false ion-popover,prop,dismissOnSelect,boolean,false,false,false ion-popover,prop,enterAnimation,((baseEl: any, opts?: any) => Animation) | undefined,undefined,false,false ion-popover,prop,event,any,undefined,false,false @@ -1557,7 +1557,7 @@ ion-row,shadow ion-searchbar,scoped ion-searchbar,prop,animated,boolean,false,false,false ion-searchbar,prop,autocapitalize,string,'off',false,false -ion-searchbar,prop,autocomplete,"name" | "email" | "tel" | "url" | "on" | "off" | "honorific-prefix" | "given-name" | "additional-name" | "family-name" | "honorific-suffix" | "nickname" | "username" | "new-password" | "current-password" | "one-time-code" | "organization-title" | "organization" | "street-address" | "address-line1" | "address-line2" | "address-line3" | "address-level4" | "address-level3" | "address-level2" | "address-level1" | "country" | "country-name" | "postal-code" | "cc-name" | "cc-given-name" | "cc-additional-name" | "cc-family-name" | "cc-number" | "cc-exp" | "cc-exp-month" | "cc-exp-year" | "cc-csc" | "cc-type" | "transaction-currency" | "transaction-amount" | "language" | "bday" | "bday-day" | "bday-month" | "bday-year" | "sex" | "tel-country-code" | "tel-national" | "tel-area-code" | "tel-local" | "tel-extension" | "impp" | "photo",'off',false,false +ion-searchbar,prop,autocomplete,"additional-name" | "address-level1" | "address-level2" | "address-level3" | "address-level4" | "address-line1" | "address-line2" | "address-line3" | "bday" | "bday-day" | "bday-month" | "bday-year" | "cc-additional-name" | "cc-csc" | "cc-exp" | "cc-exp-month" | "cc-exp-year" | "cc-family-name" | "cc-given-name" | "cc-name" | "cc-number" | "cc-type" | "country" | "country-name" | "current-password" | "email" | "family-name" | "given-name" | "honorific-prefix" | "honorific-suffix" | "impp" | "language" | "name" | "new-password" | "nickname" | "off" | "on" | "one-time-code" | "organization" | "organization-title" | "photo" | "postal-code" | "sex" | "street-address" | "tel" | "tel-area-code" | "tel-country-code" | "tel-extension" | "tel-local" | "tel-national" | "transaction-amount" | "transaction-currency" | "url" | "username",'off',false,false ion-searchbar,prop,autocorrect,"off" | "on",'off',false,false ion-searchbar,prop,cancelButtonIcon,string,config.get('backButtonIcon', arrowBackSharp) as string,false,false ion-searchbar,prop,cancelButtonText,string,'Cancel',false,false diff --git a/core/package-lock.json b/core/package-lock.json index c3656beae5a..249731cf924 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -9,7 +9,7 @@ "version": "8.7.17", "license": "MIT", "dependencies": { - "@stencil/core": "4.38.0", + "@stencil/core": "4.43.0", "ionicons": "^8.0.13", "tslib": "^2.1.0" }, @@ -1788,7 +1788,9 @@ } }, "node_modules/@stencil/core": { - "version": "4.38.0", + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.43.0.tgz", + "integrity": "sha512-6Uj2Z3lzLuufYAE7asZ6NLKgSwsB9uxl84Eh34PASnUjfj32GkrP4DtKK7fNeh1WFGGyffsTDka3gwtl+4reUg==", "license": "MIT", "peer": true, "bin": { diff --git a/core/package.json b/core/package.json index 24cee91bce6..5f744670805 100644 --- a/core/package.json +++ b/core/package.json @@ -34,7 +34,7 @@ "loader/" ], "dependencies": { - "@stencil/core": "4.38.0", + "@stencil/core": "4.43.0", "ionicons": "^8.0.13", "tslib": "^2.1.0" }, diff --git a/core/src/components.d.ts b/core/src/components.d.ts index 5e47667392b..d9def6dda67 100644 --- a/core/src/components.d.ts +++ b/core/src/components.d.ts @@ -5290,6 +5290,8 @@ declare global { } } declare namespace LocalJSX { + type OneOf = { [P in K]: PropT } & { [P in `attr:${K}` | `prop:${K}`]?: never } | { [P in `attr:${K}`]: AttrT } & { [P in K | `prop:${K}`]?: never } | { [P in `prop:${K}`]: PropT } & { [P in K | `attr:${K}`]?: never }; + interface IonAccordion { /** * If `true`, the accordion cannot be interacted with. @@ -9119,207 +9121,954 @@ declare namespace LocalJSX { */ "mode"?: "ios" | "md"; } + + interface IonAccordionAttributes { + "value": string; + "disabled": boolean; + "readonly": boolean; + "toggleIcon": string; + "toggleIconSlot": 'start' | 'end'; + } + interface IonAccordionGroupAttributes { + "animated": boolean; + "multiple": boolean; + "value": string | string[] | null; + "disabled": boolean; + "readonly": boolean; + "expand": 'compact' | 'inset'; + } + interface IonActionSheetAttributes { + "overlayIndex": number; + "hasController": boolean; + "keyboardClose": boolean; + "cssClass": string | string[]; + "backdropDismiss": boolean; + "header": string; + "subHeader": string; + "translucent": boolean; + "animated": boolean; + "isOpen": boolean; + "trigger": string | undefined; + } + interface IonAlertAttributes { + "overlayIndex": number; + "hasController": boolean; + "keyboardClose": boolean; + "cssClass": string | string[]; + "header": string; + "subHeader": string; + "message": string | IonicSafeString; + "backdropDismiss": boolean; + "translucent": boolean; + "animated": boolean; + "isOpen": boolean; + "trigger": string | undefined; + } + interface IonBackButtonAttributes { + "color": Color; + "defaultHref": string; + "disabled": boolean; + "icon": string | null; + "text": string | null; + "type": 'submit' | 'reset' | 'button'; + } + interface IonBackdropAttributes { + "visible": boolean; + "tappable": boolean; + "stopPropagation": boolean; + } + interface IonBadgeAttributes { + "color": Color; + } + interface IonBreadcrumbAttributes { + "collapsed": boolean; + "last": boolean; + "showCollapsedIndicator": boolean; + "color": Color; + "active": boolean; + "disabled": boolean; + "download": string | undefined; + "href": string | undefined; + "rel": string | undefined; + "separator": boolean | undefined; + "target": string | undefined; + "routerDirection": RouterDirection; + } + interface IonBreadcrumbsAttributes { + "color": Color; + "maxItems": number; + "itemsBeforeCollapse": number; + "itemsAfterCollapse": number; + } + interface IonButtonAttributes { + "color": Color; + "buttonType": string; + "disabled": boolean; + "expand": 'full' | 'block'; + "fill": 'clear' | 'outline' | 'solid' | 'default'; + "routerDirection": RouterDirection; + "download": string | undefined; + "href": string | undefined; + "rel": string | undefined; + "shape": 'round'; + "size": 'small' | 'default' | 'large'; + "strong": boolean; + "target": string | undefined; + "type": 'submit' | 'reset' | 'button'; + "form": string | HTMLFormElement; + } + interface IonButtonsAttributes { + "collapse": boolean; + } + interface IonCardAttributes { + "color": Color; + "button": boolean; + "type": 'submit' | 'reset' | 'button'; + "disabled": boolean; + "download": string | undefined; + "href": string | undefined; + "rel": string | undefined; + "routerDirection": RouterDirection; + "target": string | undefined; + } + interface IonCardHeaderAttributes { + "color": Color; + "translucent": boolean; + } + interface IonCardSubtitleAttributes { + "color": Color; + } + interface IonCardTitleAttributes { + "color": Color; + } + interface IonCheckboxAttributes { + "color": Color; + "name": string; + "checked": boolean; + "indeterminate": boolean; + "disabled": boolean; + "errorText": string; + "helperText": string; + "value": string; + "labelPlacement": 'start' | 'end' | 'fixed' | 'stacked'; + "justify": 'start' | 'end' | 'space-between'; + "alignment": 'start' | 'center'; + "required": boolean; + } + interface IonChipAttributes { + "color": Color; + "outline": boolean; + "disabled": boolean; + } + interface IonColAttributes { + "offset": string; + "offsetXs": string; + "offsetSm": string; + "offsetMd": string; + "offsetLg": string; + "offsetXl": string; + "pull": string; + "pullXs": string; + "pullSm": string; + "pullMd": string; + "pullLg": string; + "pullXl": string; + "push": string; + "pushXs": string; + "pushSm": string; + "pushMd": string; + "pushLg": string; + "pushXl": string; + "size": string; + "sizeXs": string; + "sizeSm": string; + "sizeMd": string; + "sizeLg": string; + "sizeXl": string; + } + interface IonContentAttributes { + "color": Color; + "fullscreen": boolean; + "fixedSlotPlacement": 'after' | 'before'; + "forceOverscroll": boolean; + "scrollX": boolean; + "scrollY": boolean; + "scrollEvents": boolean; + } + interface IonDatetimeAttributes { + "color": Color; + "name": string; + "disabled": boolean; + "readonly": boolean; + "showAdjacentDays": boolean; + "min": string; + "max": string; + "presentation": DatetimePresentation; + "cancelText": string; + "doneText": string; + "clearText": string; + "yearValues": string; + "monthValues": string; + "dayValues": string; + "hourValues": string; + "minuteValues": string; + "locale": string; + "firstDayOfWeek": number; + "multiple": boolean; + "value": string | string[] | null; + "showDefaultTitle": boolean; + "showDefaultButtons": boolean; + "showClearButton": boolean; + "showDefaultTimeLabel": boolean; + "hourCycle": DatetimeHourCycle; + "size": 'cover' | 'fixed'; + "preferWheel": boolean; + } + interface IonDatetimeButtonAttributes { + "color": Color; + "disabled": boolean; + "datetime": string; + } + interface IonFabAttributes { + "horizontal": 'start' | 'end' | 'center'; + "vertical": 'top' | 'bottom' | 'center'; + "edge": boolean; + "activated": boolean; + } + interface IonFabButtonAttributes { + "color": Color; + "activated": boolean; + "disabled": boolean; + "download": string | undefined; + "href": string | undefined; + "rel": string | undefined; + "routerDirection": RouterDirection; + "target": string | undefined; + "show": boolean; + "translucent": boolean; + "type": 'submit' | 'reset' | 'button'; + "size": 'small'; + "closeIcon": string; + } + interface IonFabListAttributes { + "activated": boolean; + "side": 'start' | 'end' | 'top' | 'bottom'; + } + interface IonFooterAttributes { + "collapse": 'fade'; + "translucent": boolean; + } + interface IonGridAttributes { + "fixed": boolean; + } + interface IonHeaderAttributes { + "collapse": 'condense' | 'fade'; + "translucent": boolean; + } + interface IonImgAttributes { + "alt": string; + "src": string; + } + interface IonInfiniteScrollAttributes { + "threshold": string; + "disabled": boolean; + "position": 'top' | 'bottom'; + } + interface IonInfiniteScrollContentAttributes { + "loadingSpinner": SpinnerTypes | null; + "loadingText": string | IonicSafeString; + } + interface IonInputAttributes { + "color": Color; + "autocapitalize": string; + "autocomplete": AutocompleteTypes; + "autocorrect": 'on' | 'off'; + "autofocus": boolean; + "clearInput": boolean; + "clearInputIcon": string; + "clearOnEdit": boolean; + "counter": boolean; + "debounce": number; + "disabled": boolean; + "enterkeyhint": 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send'; + "errorText": string; + "fill": 'outline' | 'solid'; + "inputmode": 'none' | 'text' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search'; + "helperText": string; + "label": string; + "labelPlacement": 'start' | 'end' | 'floating' | 'stacked' | 'fixed'; + "max": string; + "maxlength": number; + "min": string; + "minlength": number; + "multiple": boolean; + "name": string; + "pattern": string; + "placeholder": string; + "readonly": boolean; + "required": boolean; + "shape": 'round'; + "spellcheck": boolean; + "step": string; + "type": TextFieldTypes; + "value": string; + } + interface IonInputOtpAttributes { + "autocapitalize": string; + "color": Color; + "disabled": boolean; + "fill": 'outline' | 'solid'; + "inputmode": 'none' | 'text' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search'; + "length": number; + "pattern": string; + "readonly": boolean; + "separators": 'all' | string | number[]; + "shape": 'round' | 'rectangular' | 'soft'; + "size": 'small' | 'medium' | 'large'; + "type": 'text' | 'number'; + "value": string; + } + interface IonInputPasswordToggleAttributes { + "color": Color; + "showIcon": string; + "hideIcon": string; + "type": TextFieldTypes; + } + interface IonItemAttributes { + "color": Color; + "button": boolean; + "detail": boolean; + "detailIcon": string; + "disabled": boolean; + "download": string | undefined; + "href": string | undefined; + "rel": string | undefined; + "lines": 'full' | 'inset' | 'none'; + "routerDirection": RouterDirection; + "target": string | undefined; + "type": 'submit' | 'reset' | 'button'; + } + interface IonItemDividerAttributes { + "color": Color; + "sticky": boolean; + } + interface IonItemOptionAttributes { + "color": Color; + "disabled": boolean; + "download": string | undefined; + "expandable": boolean; + "href": string | undefined; + "rel": string | undefined; + "target": string | undefined; + "type": 'submit' | 'reset' | 'button'; + } + interface IonItemOptionsAttributes { + "side": Side; + } + interface IonItemSlidingAttributes { + "disabled": boolean; + } + interface IonLabelAttributes { + "color": Color; + "position": 'fixed' | 'stacked' | 'floating'; + } + interface IonListAttributes { + "lines": 'full' | 'inset' | 'none'; + "inset": boolean; + } + interface IonListHeaderAttributes { + "color": Color; + "lines": 'full' | 'inset' | 'none'; + } + interface IonLoadingAttributes { + "overlayIndex": number; + "hasController": boolean; + "keyboardClose": boolean; + "message": string | IonicSafeString; + "cssClass": string | string[]; + "duration": number; + "backdropDismiss": boolean; + "showBackdrop": boolean; + "spinner": SpinnerTypes | null; + "translucent": boolean; + "animated": boolean; + "isOpen": boolean; + "trigger": string | undefined; + } + interface IonMenuAttributes { + "contentId": string; + "menuId": string; + "type": MenuType; + "disabled": boolean; + "side": Side; + "swipeGesture": boolean; + "maxEdgeStart": number; + } + interface IonMenuButtonAttributes { + "color": Color; + "disabled": boolean; + "menu": string; + "autoHide": boolean; + "type": 'submit' | 'reset' | 'button'; + } + interface IonMenuToggleAttributes { + "menu": string; + "autoHide": boolean; + } + interface IonModalAttributes { + "hasController": boolean; + "overlayIndex": number; + "keyboardClose": boolean; + "expandToScroll": boolean; + "initialBreakpoint": number; + "backdropBreakpoint": number; + "handle": boolean; + "handleBehavior": ModalHandleBehavior; + "component": ComponentRef; + "cssClass": string | string[]; + "backdropDismiss": boolean; + "showBackdrop": boolean; + "animated": boolean; + "isOpen": boolean; + "trigger": string | undefined; + "keepContentsMounted": boolean; + "focusTrap": boolean; + "canDismiss": boolean | ((data?: any, role?: string) => Promise); + } + interface IonNavAttributes { + "swipeGesture": boolean; + "animated": boolean; + "root": NavComponent; + } + interface IonNavLinkAttributes { + "component": NavComponent; + "routerDirection": RouterDirection; + } + interface IonNoteAttributes { + "color": Color; + } + interface IonPickerColumnAttributes { + "disabled": boolean; + "value": string; + "color": Color; + "numericInput": boolean; + } + interface IonPickerColumnOptionAttributes { + "disabled": boolean; + "value": string; + "color": Color; + } + interface IonPickerLegacyAttributes { + "overlayIndex": number; + "hasController": boolean; + "keyboardClose": boolean; + "cssClass": string | string[]; + "duration": number; + "showBackdrop": boolean; + "backdropDismiss": boolean; + "animated": boolean; + "isOpen": boolean; + "trigger": string | undefined; + } + interface IonPopoverAttributes { + "hasController": boolean; + "overlayIndex": number; + "component": ComponentRef; + "keyboardClose": boolean; + "cssClass": string | string[]; + "backdropDismiss": boolean; + "event": string; + "showBackdrop": boolean; + "translucent": boolean; + "animated": boolean; + "triggerAction": TriggerAction; + "trigger": string | undefined; + "size": PopoverSize; + "dismissOnSelect": boolean; + "reference": PositionReference; + "side": PositionSide; + "alignment": PositionAlign; + "arrow": boolean; + "isOpen": boolean; + "keyboardEvents": boolean; + "focusTrap": boolean; + "keepContentsMounted": boolean; + } + interface IonProgressBarAttributes { + "type": 'determinate' | 'indeterminate'; + "reversed": boolean; + "value": number; + "buffer": number; + "color": Color; + } + interface IonRadioAttributes { + "color": Color; + "name": string; + "disabled": boolean; + "value": string; + "labelPlacement": 'start' | 'end' | 'fixed' | 'stacked'; + "justify": 'start' | 'end' | 'space-between'; + "alignment": 'start' | 'center'; + } + interface IonRadioGroupAttributes { + "allowEmptySelection": boolean; + "compareWith": string | RadioGroupCompareFn | null; + "name": string; + "value": string; + "helperText": string; + "errorText": string; + } + interface IonRangeAttributes { + "color": Color; + "debounce": number; + "name": string; + "label": string; + "dualKnobs": boolean; + "min": number; + "max": number; + "pin": boolean; + "snaps": boolean; + "step": number; + "ticks": boolean; + "activeBarStart": number; + "disabled": boolean; + "value": RangeValue; + "labelPlacement": 'start' | 'end' | 'fixed' | 'stacked'; + } + interface IonRefresherAttributes { + "pullMin": number; + "pullMax": number; + "closeDuration": string; + "snapbackDuration": string; + "pullFactor": number; + "disabled": boolean; + } + interface IonRefresherContentAttributes { + "pullingIcon": SpinnerTypes | string | null; + "pullingText": string | IonicSafeString; + "refreshingSpinner": SpinnerTypes | null; + "refreshingText": string | IonicSafeString; + } + interface IonReorderGroupAttributes { + "disabled": boolean; + } + interface IonRippleEffectAttributes { + "type": 'bounded' | 'unbounded'; + } + interface IonRouteAttributes { + "url": string; + "component": string; + } + interface IonRouteRedirectAttributes { + "from": string; + "to": string | undefined | null; + } + interface IonRouterAttributes { + "root": string; + "useHash": boolean; + } + interface IonRouterLinkAttributes { + "color": Color; + "href": string | undefined; + "rel": string | undefined; + "routerDirection": RouterDirection; + "target": string | undefined; + } + interface IonRouterOutletAttributes { + "mode": "ios" | "md"; + "animated": boolean; + } + interface IonSearchbarAttributes { + "color": Color; + "animated": boolean; + "autocapitalize": string; + "autocomplete": AutocompleteTypes; + "autocorrect": 'on' | 'off'; + "cancelButtonIcon": string; + "cancelButtonText": string; + "clearIcon": string; + "debounce": number; + "disabled": boolean; + "inputmode": 'none' | 'text' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search'; + "enterkeyhint": 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send'; + "maxlength": number; + "minlength": number; + "name": string; + "placeholder": string; + "searchIcon": string; + "showCancelButton": 'never' | 'focus' | 'always'; + "showClearButton": 'never' | 'focus' | 'always'; + "spellcheck": boolean; + "type": 'text' | 'password' | 'email' | 'number' | 'search' | 'tel' | 'url'; + "value": string | null; + } + interface IonSegmentAttributes { + "color": Color; + "disabled": boolean; + "scrollable": boolean; + "swipeGesture": boolean; + "value": string; + "selectOnFocus": boolean; + } + interface IonSegmentButtonAttributes { + "contentId": string; + "disabled": boolean; + "layout": SegmentButtonLayout; + "type": 'submit' | 'reset' | 'button'; + "value": string; + } + interface IonSegmentViewAttributes { + "disabled": boolean; + } + interface IonSelectAttributes { + "cancelText": string; + "color": Color; + "compareWith": string | SelectCompareFn | null; + "disabled": boolean; + "fill": 'outline' | 'solid'; + "errorText": string; + "helperText": string; + "interface": SelectInterface; + "interfaceOptions": string; + "justify": 'start' | 'end' | 'space-between'; + "label": string; + "labelPlacement": 'start' | 'end' | 'floating' | 'stacked' | 'fixed'; + "multiple": boolean; + "name": string; + "okText": string; + "placeholder": string; + "selectedText": string | null; + "toggleIcon": string; + "expandedIcon": string; + "shape": 'round'; + "value": string; + "required": boolean; + } + interface IonSelectModalAttributes { + "header": string; + "multiple": boolean; + } + interface IonSelectOptionAttributes { + "disabled": boolean; + "value": string; + } + interface IonSelectPopoverAttributes { + "header": string; + "subHeader": string; + "message": string; + "multiple": boolean; + } + interface IonSkeletonTextAttributes { + "animated": boolean; + } + interface IonSpinnerAttributes { + "color": Color; + "duration": number; + "name": SpinnerTypes; + "paused": boolean; + } + interface IonSplitPaneAttributes { + "contentId": string; + "disabled": boolean; + "when": string; + } + interface IonTabAttributes { + "active": boolean; + "tab": string; + "component": ComponentRef; + } + interface IonTabBarAttributes { + "color": Color; + "selectedTab": string; + "translucent": boolean; + } + interface IonTabButtonAttributes { + "disabled": boolean; + "download": string | undefined; + "href": string | undefined; + "rel": string | undefined; + "layout": TabButtonLayout; + "selected": boolean; + "tab": string; + "target": string | undefined; + } + interface IonTabsAttributes { + "useRouter": boolean; + } + interface IonTextAttributes { + "color": Color; + } + interface IonTextareaAttributes { + "color": Color; + "autocapitalize": string; + "autofocus": boolean; + "clearOnEdit": boolean; + "debounce": number; + "disabled": boolean; + "fill": 'outline' | 'solid'; + "inputmode": 'none' | 'text' | 'tel' | 'url' | 'email' | 'numeric' | 'decimal' | 'search'; + "enterkeyhint": 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send'; + "maxlength": number; + "minlength": number; + "name": string; + "placeholder": string; + "readonly": boolean; + "required": boolean; + "spellcheck": boolean; + "cols": number; + "rows": number; + "wrap": 'hard' | 'soft' | 'off'; + "autoGrow": boolean; + "value": string | null; + "counter": boolean; + "errorText": string; + "helperText": string; + "label": string; + "labelPlacement": 'start' | 'end' | 'floating' | 'stacked' | 'fixed'; + "shape": 'round'; + } + interface IonTitleAttributes { + "color": Color; + "size": 'large' | 'small'; + } + interface IonToastAttributes { + "overlayIndex": number; + "hasController": boolean; + "color": Color; + "cssClass": string | string[]; + "duration": number; + "header": string; + "layout": ToastLayout; + "message": string | IonicSafeString; + "keyboardClose": boolean; + "position": ToastPosition; + "positionAnchor": HTMLElement | string; + "translucent": boolean; + "animated": boolean; + "icon": string; + "swipeGesture": ToastSwipeGestureDirection; + "isOpen": boolean; + "trigger": string | undefined; + } + interface IonToggleAttributes { + "color": Color; + "name": string; + "checked": boolean; + "disabled": boolean; + "errorText": string; + "helperText": string; + "value": string | null; + "enableOnOffLabels": boolean | undefined; + "labelPlacement": 'start' | 'end' | 'fixed' | 'stacked'; + "justify": 'start' | 'end' | 'space-between'; + "alignment": 'start' | 'center'; + "required": boolean; + } + interface IonToolbarAttributes { + "color": Color; + } + interface IntrinsicElements { - "ion-accordion": IonAccordion; - "ion-accordion-group": IonAccordionGroup; - "ion-action-sheet": IonActionSheet; - "ion-alert": IonAlert; + "ion-accordion": Omit & { [K in keyof IonAccordion & keyof IonAccordionAttributes]?: IonAccordion[K] } & { [K in keyof IonAccordion & keyof IonAccordionAttributes as `attr:${K}`]?: IonAccordionAttributes[K] } & { [K in keyof IonAccordion & keyof IonAccordionAttributes as `prop:${K}`]?: IonAccordion[K] }; + "ion-accordion-group": Omit & { [K in keyof IonAccordionGroup & keyof IonAccordionGroupAttributes]?: IonAccordionGroup[K] } & { [K in keyof IonAccordionGroup & keyof IonAccordionGroupAttributes as `attr:${K}`]?: IonAccordionGroupAttributes[K] } & { [K in keyof IonAccordionGroup & keyof IonAccordionGroupAttributes as `prop:${K}`]?: IonAccordionGroup[K] }; + "ion-action-sheet": Omit & { [K in keyof IonActionSheet & keyof IonActionSheetAttributes]?: IonActionSheet[K] } & { [K in keyof IonActionSheet & keyof IonActionSheetAttributes as `attr:${K}`]?: IonActionSheetAttributes[K] } & { [K in keyof IonActionSheet & keyof IonActionSheetAttributes as `prop:${K}`]?: IonActionSheet[K] } & OneOf<"overlayIndex", IonActionSheet["overlayIndex"], IonActionSheetAttributes["overlayIndex"]>; + "ion-alert": Omit & { [K in keyof IonAlert & keyof IonAlertAttributes]?: IonAlert[K] } & { [K in keyof IonAlert & keyof IonAlertAttributes as `attr:${K}`]?: IonAlertAttributes[K] } & { [K in keyof IonAlert & keyof IonAlertAttributes as `prop:${K}`]?: IonAlert[K] } & OneOf<"overlayIndex", IonAlert["overlayIndex"], IonAlertAttributes["overlayIndex"]>; "ion-app": IonApp; "ion-avatar": IonAvatar; - "ion-back-button": IonBackButton; - "ion-backdrop": IonBackdrop; - "ion-badge": IonBadge; - "ion-breadcrumb": IonBreadcrumb; - "ion-breadcrumbs": IonBreadcrumbs; - "ion-button": IonButton; - "ion-buttons": IonButtons; - "ion-card": IonCard; + "ion-back-button": Omit & { [K in keyof IonBackButton & keyof IonBackButtonAttributes]?: IonBackButton[K] } & { [K in keyof IonBackButton & keyof IonBackButtonAttributes as `attr:${K}`]?: IonBackButtonAttributes[K] } & { [K in keyof IonBackButton & keyof IonBackButtonAttributes as `prop:${K}`]?: IonBackButton[K] }; + "ion-backdrop": Omit & { [K in keyof IonBackdrop & keyof IonBackdropAttributes]?: IonBackdrop[K] } & { [K in keyof IonBackdrop & keyof IonBackdropAttributes as `attr:${K}`]?: IonBackdropAttributes[K] } & { [K in keyof IonBackdrop & keyof IonBackdropAttributes as `prop:${K}`]?: IonBackdrop[K] }; + "ion-badge": Omit & { [K in keyof IonBadge & keyof IonBadgeAttributes]?: IonBadge[K] } & { [K in keyof IonBadge & keyof IonBadgeAttributes as `attr:${K}`]?: IonBadgeAttributes[K] } & { [K in keyof IonBadge & keyof IonBadgeAttributes as `prop:${K}`]?: IonBadge[K] }; + "ion-breadcrumb": Omit & { [K in keyof IonBreadcrumb & keyof IonBreadcrumbAttributes]?: IonBreadcrumb[K] } & { [K in keyof IonBreadcrumb & keyof IonBreadcrumbAttributes as `attr:${K}`]?: IonBreadcrumbAttributes[K] } & { [K in keyof IonBreadcrumb & keyof IonBreadcrumbAttributes as `prop:${K}`]?: IonBreadcrumb[K] } & OneOf<"last", IonBreadcrumb["last"], IonBreadcrumbAttributes["last"]> & OneOf<"showCollapsedIndicator", IonBreadcrumb["showCollapsedIndicator"], IonBreadcrumbAttributes["showCollapsedIndicator"]>; + "ion-breadcrumbs": Omit & { [K in keyof IonBreadcrumbs & keyof IonBreadcrumbsAttributes]?: IonBreadcrumbs[K] } & { [K in keyof IonBreadcrumbs & keyof IonBreadcrumbsAttributes as `attr:${K}`]?: IonBreadcrumbsAttributes[K] } & { [K in keyof IonBreadcrumbs & keyof IonBreadcrumbsAttributes as `prop:${K}`]?: IonBreadcrumbs[K] }; + "ion-button": Omit & { [K in keyof IonButton & keyof IonButtonAttributes]?: IonButton[K] } & { [K in keyof IonButton & keyof IonButtonAttributes as `attr:${K}`]?: IonButtonAttributes[K] } & { [K in keyof IonButton & keyof IonButtonAttributes as `prop:${K}`]?: IonButton[K] }; + "ion-buttons": Omit & { [K in keyof IonButtons & keyof IonButtonsAttributes]?: IonButtons[K] } & { [K in keyof IonButtons & keyof IonButtonsAttributes as `attr:${K}`]?: IonButtonsAttributes[K] } & { [K in keyof IonButtons & keyof IonButtonsAttributes as `prop:${K}`]?: IonButtons[K] }; + "ion-card": Omit & { [K in keyof IonCard & keyof IonCardAttributes]?: IonCard[K] } & { [K in keyof IonCard & keyof IonCardAttributes as `attr:${K}`]?: IonCardAttributes[K] } & { [K in keyof IonCard & keyof IonCardAttributes as `prop:${K}`]?: IonCard[K] }; "ion-card-content": IonCardContent; - "ion-card-header": IonCardHeader; - "ion-card-subtitle": IonCardSubtitle; - "ion-card-title": IonCardTitle; - "ion-checkbox": IonCheckbox; - "ion-chip": IonChip; - "ion-col": IonCol; - "ion-content": IonContent; - "ion-datetime": IonDatetime; - "ion-datetime-button": IonDatetimeButton; - "ion-fab": IonFab; - "ion-fab-button": IonFabButton; - "ion-fab-list": IonFabList; - "ion-footer": IonFooter; - "ion-grid": IonGrid; - "ion-header": IonHeader; - "ion-img": IonImg; - "ion-infinite-scroll": IonInfiniteScroll; - "ion-infinite-scroll-content": IonInfiniteScrollContent; - "ion-input": IonInput; - "ion-input-otp": IonInputOtp; - "ion-input-password-toggle": IonInputPasswordToggle; - "ion-item": IonItem; - "ion-item-divider": IonItemDivider; + "ion-card-header": Omit & { [K in keyof IonCardHeader & keyof IonCardHeaderAttributes]?: IonCardHeader[K] } & { [K in keyof IonCardHeader & keyof IonCardHeaderAttributes as `attr:${K}`]?: IonCardHeaderAttributes[K] } & { [K in keyof IonCardHeader & keyof IonCardHeaderAttributes as `prop:${K}`]?: IonCardHeader[K] }; + "ion-card-subtitle": Omit & { [K in keyof IonCardSubtitle & keyof IonCardSubtitleAttributes]?: IonCardSubtitle[K] } & { [K in keyof IonCardSubtitle & keyof IonCardSubtitleAttributes as `attr:${K}`]?: IonCardSubtitleAttributes[K] } & { [K in keyof IonCardSubtitle & keyof IonCardSubtitleAttributes as `prop:${K}`]?: IonCardSubtitle[K] }; + "ion-card-title": Omit & { [K in keyof IonCardTitle & keyof IonCardTitleAttributes]?: IonCardTitle[K] } & { [K in keyof IonCardTitle & keyof IonCardTitleAttributes as `attr:${K}`]?: IonCardTitleAttributes[K] } & { [K in keyof IonCardTitle & keyof IonCardTitleAttributes as `prop:${K}`]?: IonCardTitle[K] }; + "ion-checkbox": Omit & { [K in keyof IonCheckbox & keyof IonCheckboxAttributes]?: IonCheckbox[K] } & { [K in keyof IonCheckbox & keyof IonCheckboxAttributes as `attr:${K}`]?: IonCheckboxAttributes[K] } & { [K in keyof IonCheckbox & keyof IonCheckboxAttributes as `prop:${K}`]?: IonCheckbox[K] }; + "ion-chip": Omit & { [K in keyof IonChip & keyof IonChipAttributes]?: IonChip[K] } & { [K in keyof IonChip & keyof IonChipAttributes as `attr:${K}`]?: IonChipAttributes[K] } & { [K in keyof IonChip & keyof IonChipAttributes as `prop:${K}`]?: IonChip[K] }; + "ion-col": Omit & { [K in keyof IonCol & keyof IonColAttributes]?: IonCol[K] } & { [K in keyof IonCol & keyof IonColAttributes as `attr:${K}`]?: IonColAttributes[K] } & { [K in keyof IonCol & keyof IonColAttributes as `prop:${K}`]?: IonCol[K] }; + "ion-content": Omit & { [K in keyof IonContent & keyof IonContentAttributes]?: IonContent[K] } & { [K in keyof IonContent & keyof IonContentAttributes as `attr:${K}`]?: IonContentAttributes[K] } & { [K in keyof IonContent & keyof IonContentAttributes as `prop:${K}`]?: IonContent[K] }; + "ion-datetime": Omit & { [K in keyof IonDatetime & keyof IonDatetimeAttributes]?: IonDatetime[K] } & { [K in keyof IonDatetime & keyof IonDatetimeAttributes as `attr:${K}`]?: IonDatetimeAttributes[K] } & { [K in keyof IonDatetime & keyof IonDatetimeAttributes as `prop:${K}`]?: IonDatetime[K] }; + "ion-datetime-button": Omit & { [K in keyof IonDatetimeButton & keyof IonDatetimeButtonAttributes]?: IonDatetimeButton[K] } & { [K in keyof IonDatetimeButton & keyof IonDatetimeButtonAttributes as `attr:${K}`]?: IonDatetimeButtonAttributes[K] } & { [K in keyof IonDatetimeButton & keyof IonDatetimeButtonAttributes as `prop:${K}`]?: IonDatetimeButton[K] }; + "ion-fab": Omit & { [K in keyof IonFab & keyof IonFabAttributes]?: IonFab[K] } & { [K in keyof IonFab & keyof IonFabAttributes as `attr:${K}`]?: IonFabAttributes[K] } & { [K in keyof IonFab & keyof IonFabAttributes as `prop:${K}`]?: IonFab[K] }; + "ion-fab-button": Omit & { [K in keyof IonFabButton & keyof IonFabButtonAttributes]?: IonFabButton[K] } & { [K in keyof IonFabButton & keyof IonFabButtonAttributes as `attr:${K}`]?: IonFabButtonAttributes[K] } & { [K in keyof IonFabButton & keyof IonFabButtonAttributes as `prop:${K}`]?: IonFabButton[K] }; + "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-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] }; + "ion-infinite-scroll": Omit & { [K in keyof IonInfiniteScroll & keyof IonInfiniteScrollAttributes]?: IonInfiniteScroll[K] } & { [K in keyof IonInfiniteScroll & keyof IonInfiniteScrollAttributes as `attr:${K}`]?: IonInfiniteScrollAttributes[K] } & { [K in keyof IonInfiniteScroll & keyof IonInfiniteScrollAttributes as `prop:${K}`]?: IonInfiniteScroll[K] }; + "ion-infinite-scroll-content": Omit & { [K in keyof IonInfiniteScrollContent & keyof IonInfiniteScrollContentAttributes]?: IonInfiniteScrollContent[K] } & { [K in keyof IonInfiniteScrollContent & keyof IonInfiniteScrollContentAttributes as `attr:${K}`]?: IonInfiniteScrollContentAttributes[K] } & { [K in keyof IonInfiniteScrollContent & keyof IonInfiniteScrollContentAttributes as `prop:${K}`]?: IonInfiniteScrollContent[K] }; + "ion-input": Omit & { [K in keyof IonInput & keyof IonInputAttributes]?: IonInput[K] } & { [K in keyof IonInput & keyof IonInputAttributes as `attr:${K}`]?: IonInputAttributes[K] } & { [K in keyof IonInput & keyof IonInputAttributes as `prop:${K}`]?: IonInput[K] }; + "ion-input-otp": Omit & { [K in keyof IonInputOtp & keyof IonInputOtpAttributes]?: IonInputOtp[K] } & { [K in keyof IonInputOtp & keyof IonInputOtpAttributes as `attr:${K}`]?: IonInputOtpAttributes[K] } & { [K in keyof IonInputOtp & keyof IonInputOtpAttributes as `prop:${K}`]?: IonInputOtp[K] }; + "ion-input-password-toggle": Omit & { [K in keyof IonInputPasswordToggle & keyof IonInputPasswordToggleAttributes]?: IonInputPasswordToggle[K] } & { [K in keyof IonInputPasswordToggle & keyof IonInputPasswordToggleAttributes as `attr:${K}`]?: IonInputPasswordToggleAttributes[K] } & { [K in keyof IonInputPasswordToggle & keyof IonInputPasswordToggleAttributes as `prop:${K}`]?: IonInputPasswordToggle[K] }; + "ion-item": Omit & { [K in keyof IonItem & keyof IonItemAttributes]?: IonItem[K] } & { [K in keyof IonItem & keyof IonItemAttributes as `attr:${K}`]?: IonItemAttributes[K] } & { [K in keyof IonItem & keyof IonItemAttributes as `prop:${K}`]?: IonItem[K] }; + "ion-item-divider": Omit & { [K in keyof IonItemDivider & keyof IonItemDividerAttributes]?: IonItemDivider[K] } & { [K in keyof IonItemDivider & keyof IonItemDividerAttributes as `attr:${K}`]?: IonItemDividerAttributes[K] } & { [K in keyof IonItemDivider & keyof IonItemDividerAttributes as `prop:${K}`]?: IonItemDivider[K] }; "ion-item-group": IonItemGroup; - "ion-item-option": IonItemOption; - "ion-item-options": IonItemOptions; - "ion-item-sliding": IonItemSliding; - "ion-label": IonLabel; - "ion-list": IonList; - "ion-list-header": IonListHeader; - "ion-loading": IonLoading; - "ion-menu": IonMenu; - "ion-menu-button": IonMenuButton; - "ion-menu-toggle": IonMenuToggle; - "ion-modal": IonModal; - "ion-nav": IonNav; - "ion-nav-link": IonNavLink; - "ion-note": IonNote; + "ion-item-option": Omit & { [K in keyof IonItemOption & keyof IonItemOptionAttributes]?: IonItemOption[K] } & { [K in keyof IonItemOption & keyof IonItemOptionAttributes as `attr:${K}`]?: IonItemOptionAttributes[K] } & { [K in keyof IonItemOption & keyof IonItemOptionAttributes as `prop:${K}`]?: IonItemOption[K] }; + "ion-item-options": Omit & { [K in keyof IonItemOptions & keyof IonItemOptionsAttributes]?: IonItemOptions[K] } & { [K in keyof IonItemOptions & keyof IonItemOptionsAttributes as `attr:${K}`]?: IonItemOptionsAttributes[K] } & { [K in keyof IonItemOptions & keyof IonItemOptionsAttributes as `prop:${K}`]?: IonItemOptions[K] }; + "ion-item-sliding": Omit & { [K in keyof IonItemSliding & keyof IonItemSlidingAttributes]?: IonItemSliding[K] } & { [K in keyof IonItemSliding & keyof IonItemSlidingAttributes as `attr:${K}`]?: IonItemSlidingAttributes[K] } & { [K in keyof IonItemSliding & keyof IonItemSlidingAttributes as `prop:${K}`]?: IonItemSliding[K] }; + "ion-label": Omit & { [K in keyof IonLabel & keyof IonLabelAttributes]?: IonLabel[K] } & { [K in keyof IonLabel & keyof IonLabelAttributes as `attr:${K}`]?: IonLabelAttributes[K] } & { [K in keyof IonLabel & keyof IonLabelAttributes as `prop:${K}`]?: IonLabel[K] }; + "ion-list": Omit & { [K in keyof IonList & keyof IonListAttributes]?: IonList[K] } & { [K in keyof IonList & keyof IonListAttributes as `attr:${K}`]?: IonListAttributes[K] } & { [K in keyof IonList & keyof IonListAttributes as `prop:${K}`]?: IonList[K] }; + "ion-list-header": Omit & { [K in keyof IonListHeader & keyof IonListHeaderAttributes]?: IonListHeader[K] } & { [K in keyof IonListHeader & keyof IonListHeaderAttributes as `attr:${K}`]?: IonListHeaderAttributes[K] } & { [K in keyof IonListHeader & keyof IonListHeaderAttributes as `prop:${K}`]?: IonListHeader[K] }; + "ion-loading": Omit & { [K in keyof IonLoading & keyof IonLoadingAttributes]?: IonLoading[K] } & { [K in keyof IonLoading & keyof IonLoadingAttributes as `attr:${K}`]?: IonLoadingAttributes[K] } & { [K in keyof IonLoading & keyof IonLoadingAttributes as `prop:${K}`]?: IonLoading[K] } & OneOf<"overlayIndex", IonLoading["overlayIndex"], IonLoadingAttributes["overlayIndex"]>; + "ion-menu": Omit & { [K in keyof IonMenu & keyof IonMenuAttributes]?: IonMenu[K] } & { [K in keyof IonMenu & keyof IonMenuAttributes as `attr:${K}`]?: IonMenuAttributes[K] } & { [K in keyof IonMenu & keyof IonMenuAttributes as `prop:${K}`]?: IonMenu[K] }; + "ion-menu-button": Omit & { [K in keyof IonMenuButton & keyof IonMenuButtonAttributes]?: IonMenuButton[K] } & { [K in keyof IonMenuButton & keyof IonMenuButtonAttributes as `attr:${K}`]?: IonMenuButtonAttributes[K] } & { [K in keyof IonMenuButton & keyof IonMenuButtonAttributes as `prop:${K}`]?: IonMenuButton[K] }; + "ion-menu-toggle": Omit & { [K in keyof IonMenuToggle & keyof IonMenuToggleAttributes]?: IonMenuToggle[K] } & { [K in keyof IonMenuToggle & keyof IonMenuToggleAttributes as `attr:${K}`]?: IonMenuToggleAttributes[K] } & { [K in keyof IonMenuToggle & keyof IonMenuToggleAttributes as `prop:${K}`]?: IonMenuToggle[K] }; + "ion-modal": Omit & { [K in keyof IonModal & keyof IonModalAttributes]?: IonModal[K] } & { [K in keyof IonModal & keyof IonModalAttributes as `attr:${K}`]?: IonModalAttributes[K] } & { [K in keyof IonModal & keyof IonModalAttributes as `prop:${K}`]?: IonModal[K] } & OneOf<"overlayIndex", IonModal["overlayIndex"], IonModalAttributes["overlayIndex"]>; + "ion-nav": Omit & { [K in keyof IonNav & keyof IonNavAttributes]?: IonNav[K] } & { [K in keyof IonNav & keyof IonNavAttributes as `attr:${K}`]?: IonNavAttributes[K] } & { [K in keyof IonNav & keyof IonNavAttributes as `prop:${K}`]?: IonNav[K] }; + "ion-nav-link": Omit & { [K in keyof IonNavLink & keyof IonNavLinkAttributes]?: IonNavLink[K] } & { [K in keyof IonNavLink & keyof IonNavLinkAttributes as `attr:${K}`]?: IonNavLinkAttributes[K] } & { [K in keyof IonNavLink & keyof IonNavLinkAttributes as `prop:${K}`]?: IonNavLink[K] }; + "ion-note": Omit & { [K in keyof IonNote & keyof IonNoteAttributes]?: IonNote[K] } & { [K in keyof IonNote & keyof IonNoteAttributes as `attr:${K}`]?: IonNoteAttributes[K] } & { [K in keyof IonNote & keyof IonNoteAttributes as `prop:${K}`]?: IonNote[K] }; "ion-picker": IonPicker; - "ion-picker-column": IonPickerColumn; - "ion-picker-column-option": IonPickerColumnOption; - "ion-picker-legacy": IonPickerLegacy; + "ion-picker-column": Omit & { [K in keyof IonPickerColumn & keyof IonPickerColumnAttributes]?: IonPickerColumn[K] } & { [K in keyof IonPickerColumn & keyof IonPickerColumnAttributes as `attr:${K}`]?: IonPickerColumnAttributes[K] } & { [K in keyof IonPickerColumn & keyof IonPickerColumnAttributes as `prop:${K}`]?: IonPickerColumn[K] }; + "ion-picker-column-option": Omit & { [K in keyof IonPickerColumnOption & keyof IonPickerColumnOptionAttributes]?: IonPickerColumnOption[K] } & { [K in keyof IonPickerColumnOption & keyof IonPickerColumnOptionAttributes as `attr:${K}`]?: IonPickerColumnOptionAttributes[K] } & { [K in keyof IonPickerColumnOption & keyof IonPickerColumnOptionAttributes as `prop:${K}`]?: IonPickerColumnOption[K] }; + "ion-picker-legacy": Omit & { [K in keyof IonPickerLegacy & keyof IonPickerLegacyAttributes]?: IonPickerLegacy[K] } & { [K in keyof IonPickerLegacy & keyof IonPickerLegacyAttributes as `attr:${K}`]?: IonPickerLegacyAttributes[K] } & { [K in keyof IonPickerLegacy & keyof IonPickerLegacyAttributes as `prop:${K}`]?: IonPickerLegacy[K] } & OneOf<"overlayIndex", IonPickerLegacy["overlayIndex"], IonPickerLegacyAttributes["overlayIndex"]>; "ion-picker-legacy-column": IonPickerLegacyColumn; - "ion-popover": IonPopover; - "ion-progress-bar": IonProgressBar; - "ion-radio": IonRadio; - "ion-radio-group": IonRadioGroup; - "ion-range": IonRange; - "ion-refresher": IonRefresher; - "ion-refresher-content": IonRefresherContent; + "ion-popover": Omit & { [K in keyof IonPopover & keyof IonPopoverAttributes]?: IonPopover[K] } & { [K in keyof IonPopover & keyof IonPopoverAttributes as `attr:${K}`]?: IonPopoverAttributes[K] } & { [K in keyof IonPopover & keyof IonPopoverAttributes as `prop:${K}`]?: IonPopover[K] } & OneOf<"overlayIndex", IonPopover["overlayIndex"], IonPopoverAttributes["overlayIndex"]>; + "ion-progress-bar": Omit & { [K in keyof IonProgressBar & keyof IonProgressBarAttributes]?: IonProgressBar[K] } & { [K in keyof IonProgressBar & keyof IonProgressBarAttributes as `attr:${K}`]?: IonProgressBarAttributes[K] } & { [K in keyof IonProgressBar & keyof IonProgressBarAttributes as `prop:${K}`]?: IonProgressBar[K] }; + "ion-radio": Omit & { [K in keyof IonRadio & keyof IonRadioAttributes]?: IonRadio[K] } & { [K in keyof IonRadio & keyof IonRadioAttributes as `attr:${K}`]?: IonRadioAttributes[K] } & { [K in keyof IonRadio & keyof IonRadioAttributes as `prop:${K}`]?: IonRadio[K] }; + "ion-radio-group": Omit & { [K in keyof IonRadioGroup & keyof IonRadioGroupAttributes]?: IonRadioGroup[K] } & { [K in keyof IonRadioGroup & keyof IonRadioGroupAttributes as `attr:${K}`]?: IonRadioGroupAttributes[K] } & { [K in keyof IonRadioGroup & keyof IonRadioGroupAttributes as `prop:${K}`]?: IonRadioGroup[K] }; + "ion-range": Omit & { [K in keyof IonRange & keyof IonRangeAttributes]?: IonRange[K] } & { [K in keyof IonRange & keyof IonRangeAttributes as `attr:${K}`]?: IonRangeAttributes[K] } & { [K in keyof IonRange & keyof IonRangeAttributes as `prop:${K}`]?: IonRange[K] }; + "ion-refresher": Omit & { [K in keyof IonRefresher & keyof IonRefresherAttributes]?: IonRefresher[K] } & { [K in keyof IonRefresher & keyof IonRefresherAttributes as `attr:${K}`]?: IonRefresherAttributes[K] } & { [K in keyof IonRefresher & keyof IonRefresherAttributes as `prop:${K}`]?: IonRefresher[K] }; + "ion-refresher-content": Omit & { [K in keyof IonRefresherContent & keyof IonRefresherContentAttributes]?: IonRefresherContent[K] } & { [K in keyof IonRefresherContent & keyof IonRefresherContentAttributes as `attr:${K}`]?: IonRefresherContentAttributes[K] } & { [K in keyof IonRefresherContent & keyof IonRefresherContentAttributes as `prop:${K}`]?: IonRefresherContent[K] }; "ion-reorder": IonReorder; - "ion-reorder-group": IonReorderGroup; - "ion-ripple-effect": IonRippleEffect; - "ion-route": IonRoute; - "ion-route-redirect": IonRouteRedirect; - "ion-router": IonRouter; - "ion-router-link": IonRouterLink; - "ion-router-outlet": IonRouterOutlet; + "ion-reorder-group": Omit & { [K in keyof IonReorderGroup & keyof IonReorderGroupAttributes]?: IonReorderGroup[K] } & { [K in keyof IonReorderGroup & keyof IonReorderGroupAttributes as `attr:${K}`]?: IonReorderGroupAttributes[K] } & { [K in keyof IonReorderGroup & keyof IonReorderGroupAttributes as `prop:${K}`]?: IonReorderGroup[K] }; + "ion-ripple-effect": Omit & { [K in keyof IonRippleEffect & keyof IonRippleEffectAttributes]?: IonRippleEffect[K] } & { [K in keyof IonRippleEffect & keyof IonRippleEffectAttributes as `attr:${K}`]?: IonRippleEffectAttributes[K] } & { [K in keyof IonRippleEffect & keyof IonRippleEffectAttributes as `prop:${K}`]?: IonRippleEffect[K] }; + "ion-route": Omit & { [K in keyof IonRoute & keyof IonRouteAttributes]?: IonRoute[K] } & { [K in keyof IonRoute & keyof IonRouteAttributes as `attr:${K}`]?: IonRouteAttributes[K] } & { [K in keyof IonRoute & keyof IonRouteAttributes as `prop:${K}`]?: IonRoute[K] } & OneOf<"component", IonRoute["component"], IonRouteAttributes["component"]>; + "ion-route-redirect": Omit & { [K in keyof IonRouteRedirect & keyof IonRouteRedirectAttributes]?: IonRouteRedirect[K] } & { [K in keyof IonRouteRedirect & keyof IonRouteRedirectAttributes as `attr:${K}`]?: IonRouteRedirectAttributes[K] } & { [K in keyof IonRouteRedirect & keyof IonRouteRedirectAttributes as `prop:${K}`]?: IonRouteRedirect[K] } & OneOf<"from", IonRouteRedirect["from"], IonRouteRedirectAttributes["from"]> & OneOf<"to", IonRouteRedirect["to"], IonRouteRedirectAttributes["to"]>; + "ion-router": Omit & { [K in keyof IonRouter & keyof IonRouterAttributes]?: IonRouter[K] } & { [K in keyof IonRouter & keyof IonRouterAttributes as `attr:${K}`]?: IonRouterAttributes[K] } & { [K in keyof IonRouter & keyof IonRouterAttributes as `prop:${K}`]?: IonRouter[K] }; + "ion-router-link": Omit & { [K in keyof IonRouterLink & keyof IonRouterLinkAttributes]?: IonRouterLink[K] } & { [K in keyof IonRouterLink & keyof IonRouterLinkAttributes as `attr:${K}`]?: IonRouterLinkAttributes[K] } & { [K in keyof IonRouterLink & keyof IonRouterLinkAttributes as `prop:${K}`]?: IonRouterLink[K] }; + "ion-router-outlet": Omit & { [K in keyof IonRouterOutlet & keyof IonRouterOutletAttributes]?: IonRouterOutlet[K] } & { [K in keyof IonRouterOutlet & keyof IonRouterOutletAttributes as `attr:${K}`]?: IonRouterOutletAttributes[K] } & { [K in keyof IonRouterOutlet & keyof IonRouterOutletAttributes as `prop:${K}`]?: IonRouterOutlet[K] }; "ion-row": IonRow; - "ion-searchbar": IonSearchbar; - "ion-segment": IonSegment; - "ion-segment-button": IonSegmentButton; + "ion-searchbar": Omit & { [K in keyof IonSearchbar & keyof IonSearchbarAttributes]?: IonSearchbar[K] } & { [K in keyof IonSearchbar & keyof IonSearchbarAttributes as `attr:${K}`]?: IonSearchbarAttributes[K] } & { [K in keyof IonSearchbar & keyof IonSearchbarAttributes as `prop:${K}`]?: IonSearchbar[K] }; + "ion-segment": Omit & { [K in keyof IonSegment & keyof IonSegmentAttributes]?: IonSegment[K] } & { [K in keyof IonSegment & keyof IonSegmentAttributes as `attr:${K}`]?: IonSegmentAttributes[K] } & { [K in keyof IonSegment & keyof IonSegmentAttributes as `prop:${K}`]?: IonSegment[K] }; + "ion-segment-button": Omit & { [K in keyof IonSegmentButton & keyof IonSegmentButtonAttributes]?: IonSegmentButton[K] } & { [K in keyof IonSegmentButton & keyof IonSegmentButtonAttributes as `attr:${K}`]?: IonSegmentButtonAttributes[K] } & { [K in keyof IonSegmentButton & keyof IonSegmentButtonAttributes as `prop:${K}`]?: IonSegmentButton[K] }; "ion-segment-content": IonSegmentContent; - "ion-segment-view": IonSegmentView; - "ion-select": IonSelect; - "ion-select-modal": IonSelectModal; - "ion-select-option": IonSelectOption; - "ion-select-popover": IonSelectPopover; - "ion-skeleton-text": IonSkeletonText; - "ion-spinner": IonSpinner; - "ion-split-pane": IonSplitPane; - "ion-tab": IonTab; - "ion-tab-bar": IonTabBar; - "ion-tab-button": IonTabButton; - "ion-tabs": IonTabs; - "ion-text": IonText; - "ion-textarea": IonTextarea; + "ion-segment-view": Omit & { [K in keyof IonSegmentView & keyof IonSegmentViewAttributes]?: IonSegmentView[K] } & { [K in keyof IonSegmentView & keyof IonSegmentViewAttributes as `attr:${K}`]?: IonSegmentViewAttributes[K] } & { [K in keyof IonSegmentView & keyof IonSegmentViewAttributes as `prop:${K}`]?: IonSegmentView[K] }; + "ion-select": Omit & { [K in keyof IonSelect & keyof IonSelectAttributes]?: IonSelect[K] } & { [K in keyof IonSelect & keyof IonSelectAttributes as `attr:${K}`]?: IonSelectAttributes[K] } & { [K in keyof IonSelect & keyof IonSelectAttributes as `prop:${K}`]?: IonSelect[K] }; + "ion-select-modal": Omit & { [K in keyof IonSelectModal & keyof IonSelectModalAttributes]?: IonSelectModal[K] } & { [K in keyof IonSelectModal & keyof IonSelectModalAttributes as `attr:${K}`]?: IonSelectModalAttributes[K] } & { [K in keyof IonSelectModal & keyof IonSelectModalAttributes as `prop:${K}`]?: IonSelectModal[K] }; + "ion-select-option": Omit & { [K in keyof IonSelectOption & keyof IonSelectOptionAttributes]?: IonSelectOption[K] } & { [K in keyof IonSelectOption & keyof IonSelectOptionAttributes as `attr:${K}`]?: IonSelectOptionAttributes[K] } & { [K in keyof IonSelectOption & keyof IonSelectOptionAttributes as `prop:${K}`]?: IonSelectOption[K] }; + "ion-select-popover": Omit & { [K in keyof IonSelectPopover & keyof IonSelectPopoverAttributes]?: IonSelectPopover[K] } & { [K in keyof IonSelectPopover & keyof IonSelectPopoverAttributes as `attr:${K}`]?: IonSelectPopoverAttributes[K] } & { [K in keyof IonSelectPopover & keyof IonSelectPopoverAttributes as `prop:${K}`]?: IonSelectPopover[K] }; + "ion-skeleton-text": Omit & { [K in keyof IonSkeletonText & keyof IonSkeletonTextAttributes]?: IonSkeletonText[K] } & { [K in keyof IonSkeletonText & keyof IonSkeletonTextAttributes as `attr:${K}`]?: IonSkeletonTextAttributes[K] } & { [K in keyof IonSkeletonText & keyof IonSkeletonTextAttributes as `prop:${K}`]?: IonSkeletonText[K] }; + "ion-spinner": Omit & { [K in keyof IonSpinner & keyof IonSpinnerAttributes]?: IonSpinner[K] } & { [K in keyof IonSpinner & keyof IonSpinnerAttributes as `attr:${K}`]?: IonSpinnerAttributes[K] } & { [K in keyof IonSpinner & keyof IonSpinnerAttributes as `prop:${K}`]?: IonSpinner[K] }; + "ion-split-pane": Omit & { [K in keyof IonSplitPane & keyof IonSplitPaneAttributes]?: IonSplitPane[K] } & { [K in keyof IonSplitPane & keyof IonSplitPaneAttributes as `attr:${K}`]?: IonSplitPaneAttributes[K] } & { [K in keyof IonSplitPane & keyof IonSplitPaneAttributes as `prop:${K}`]?: IonSplitPane[K] }; + "ion-tab": Omit & { [K in keyof IonTab & keyof IonTabAttributes]?: IonTab[K] } & { [K in keyof IonTab & keyof IonTabAttributes as `attr:${K}`]?: IonTabAttributes[K] } & { [K in keyof IonTab & keyof IonTabAttributes as `prop:${K}`]?: IonTab[K] } & OneOf<"tab", IonTab["tab"], IonTabAttributes["tab"]>; + "ion-tab-bar": Omit & { [K in keyof IonTabBar & keyof IonTabBarAttributes]?: IonTabBar[K] } & { [K in keyof IonTabBar & keyof IonTabBarAttributes as `attr:${K}`]?: IonTabBarAttributes[K] } & { [K in keyof IonTabBar & keyof IonTabBarAttributes as `prop:${K}`]?: IonTabBar[K] }; + "ion-tab-button": Omit & { [K in keyof IonTabButton & keyof IonTabButtonAttributes]?: IonTabButton[K] } & { [K in keyof IonTabButton & keyof IonTabButtonAttributes as `attr:${K}`]?: IonTabButtonAttributes[K] } & { [K in keyof IonTabButton & keyof IonTabButtonAttributes as `prop:${K}`]?: IonTabButton[K] }; + "ion-tabs": Omit & { [K in keyof IonTabs & keyof IonTabsAttributes]?: IonTabs[K] } & { [K in keyof IonTabs & keyof IonTabsAttributes as `attr:${K}`]?: IonTabsAttributes[K] } & { [K in keyof IonTabs & keyof IonTabsAttributes as `prop:${K}`]?: IonTabs[K] }; + "ion-text": Omit & { [K in keyof IonText & keyof IonTextAttributes]?: IonText[K] } & { [K in keyof IonText & keyof IonTextAttributes as `attr:${K}`]?: IonTextAttributes[K] } & { [K in keyof IonText & keyof IonTextAttributes as `prop:${K}`]?: IonText[K] }; + "ion-textarea": Omit & { [K in keyof IonTextarea & keyof IonTextareaAttributes]?: IonTextarea[K] } & { [K in keyof IonTextarea & keyof IonTextareaAttributes as `attr:${K}`]?: IonTextareaAttributes[K] } & { [K in keyof IonTextarea & keyof IonTextareaAttributes as `prop:${K}`]?: IonTextarea[K] }; "ion-thumbnail": IonThumbnail; - "ion-title": IonTitle; - "ion-toast": IonToast; - "ion-toggle": IonToggle; - "ion-toolbar": IonToolbar; + "ion-title": Omit & { [K in keyof IonTitle & keyof IonTitleAttributes]?: IonTitle[K] } & { [K in keyof IonTitle & keyof IonTitleAttributes as `attr:${K}`]?: IonTitleAttributes[K] } & { [K in keyof IonTitle & keyof IonTitleAttributes as `prop:${K}`]?: IonTitle[K] }; + "ion-toast": Omit & { [K in keyof IonToast & keyof IonToastAttributes]?: IonToast[K] } & { [K in keyof IonToast & keyof IonToastAttributes as `attr:${K}`]?: IonToastAttributes[K] } & { [K in keyof IonToast & keyof IonToastAttributes as `prop:${K}`]?: IonToast[K] } & OneOf<"overlayIndex", IonToast["overlayIndex"], IonToastAttributes["overlayIndex"]>; + "ion-toggle": Omit & { [K in keyof IonToggle & keyof IonToggleAttributes]?: IonToggle[K] } & { [K in keyof IonToggle & keyof IonToggleAttributes as `attr:${K}`]?: IonToggleAttributes[K] } & { [K in keyof IonToggle & keyof IonToggleAttributes as `prop:${K}`]?: IonToggle[K] }; + "ion-toolbar": Omit & { [K in keyof IonToolbar & keyof IonToolbarAttributes]?: IonToolbar[K] } & { [K in keyof IonToolbar & keyof IonToolbarAttributes as `attr:${K}`]?: IonToolbarAttributes[K] } & { [K in keyof IonToolbar & keyof IonToolbarAttributes as `prop:${K}`]?: IonToolbar[K] }; } } export { LocalJSX as JSX }; declare module "@stencil/core" { export namespace JSX { interface IntrinsicElements { - "ion-accordion": LocalJSX.IonAccordion & JSXBase.HTMLAttributes; - "ion-accordion-group": LocalJSX.IonAccordionGroup & JSXBase.HTMLAttributes; - "ion-action-sheet": LocalJSX.IonActionSheet & JSXBase.HTMLAttributes; - "ion-alert": LocalJSX.IonAlert & JSXBase.HTMLAttributes; - "ion-app": LocalJSX.IonApp & JSXBase.HTMLAttributes; - "ion-avatar": LocalJSX.IonAvatar & JSXBase.HTMLAttributes; - "ion-back-button": LocalJSX.IonBackButton & JSXBase.HTMLAttributes; - "ion-backdrop": LocalJSX.IonBackdrop & JSXBase.HTMLAttributes; - "ion-badge": LocalJSX.IonBadge & JSXBase.HTMLAttributes; - "ion-breadcrumb": LocalJSX.IonBreadcrumb & JSXBase.HTMLAttributes; - "ion-breadcrumbs": LocalJSX.IonBreadcrumbs & JSXBase.HTMLAttributes; - "ion-button": LocalJSX.IonButton & JSXBase.HTMLAttributes; - "ion-buttons": LocalJSX.IonButtons & JSXBase.HTMLAttributes; - "ion-card": LocalJSX.IonCard & JSXBase.HTMLAttributes; - "ion-card-content": LocalJSX.IonCardContent & JSXBase.HTMLAttributes; - "ion-card-header": LocalJSX.IonCardHeader & JSXBase.HTMLAttributes; - "ion-card-subtitle": LocalJSX.IonCardSubtitle & JSXBase.HTMLAttributes; - "ion-card-title": LocalJSX.IonCardTitle & JSXBase.HTMLAttributes; - "ion-checkbox": LocalJSX.IonCheckbox & JSXBase.HTMLAttributes; - "ion-chip": LocalJSX.IonChip & JSXBase.HTMLAttributes; - "ion-col": LocalJSX.IonCol & JSXBase.HTMLAttributes; - "ion-content": LocalJSX.IonContent & JSXBase.HTMLAttributes; - "ion-datetime": LocalJSX.IonDatetime & JSXBase.HTMLAttributes; - "ion-datetime-button": LocalJSX.IonDatetimeButton & JSXBase.HTMLAttributes; - "ion-fab": LocalJSX.IonFab & JSXBase.HTMLAttributes; - "ion-fab-button": LocalJSX.IonFabButton & JSXBase.HTMLAttributes; - "ion-fab-list": LocalJSX.IonFabList & JSXBase.HTMLAttributes; - "ion-footer": LocalJSX.IonFooter & JSXBase.HTMLAttributes; - "ion-grid": LocalJSX.IonGrid & JSXBase.HTMLAttributes; - "ion-header": LocalJSX.IonHeader & JSXBase.HTMLAttributes; - "ion-img": LocalJSX.IonImg & JSXBase.HTMLAttributes; - "ion-infinite-scroll": LocalJSX.IonInfiniteScroll & JSXBase.HTMLAttributes; - "ion-infinite-scroll-content": LocalJSX.IonInfiniteScrollContent & JSXBase.HTMLAttributes; - "ion-input": LocalJSX.IonInput & JSXBase.HTMLAttributes; - "ion-input-otp": LocalJSX.IonInputOtp & JSXBase.HTMLAttributes; - "ion-input-password-toggle": LocalJSX.IonInputPasswordToggle & JSXBase.HTMLAttributes; - "ion-item": LocalJSX.IonItem & JSXBase.HTMLAttributes; - "ion-item-divider": LocalJSX.IonItemDivider & JSXBase.HTMLAttributes; - "ion-item-group": LocalJSX.IonItemGroup & JSXBase.HTMLAttributes; - "ion-item-option": LocalJSX.IonItemOption & JSXBase.HTMLAttributes; - "ion-item-options": LocalJSX.IonItemOptions & JSXBase.HTMLAttributes; - "ion-item-sliding": LocalJSX.IonItemSliding & JSXBase.HTMLAttributes; - "ion-label": LocalJSX.IonLabel & JSXBase.HTMLAttributes; - "ion-list": LocalJSX.IonList & JSXBase.HTMLAttributes; - "ion-list-header": LocalJSX.IonListHeader & JSXBase.HTMLAttributes; - "ion-loading": LocalJSX.IonLoading & JSXBase.HTMLAttributes; - "ion-menu": LocalJSX.IonMenu & JSXBase.HTMLAttributes; - "ion-menu-button": LocalJSX.IonMenuButton & JSXBase.HTMLAttributes; - "ion-menu-toggle": LocalJSX.IonMenuToggle & JSXBase.HTMLAttributes; - "ion-modal": LocalJSX.IonModal & JSXBase.HTMLAttributes; - "ion-nav": LocalJSX.IonNav & JSXBase.HTMLAttributes; - "ion-nav-link": LocalJSX.IonNavLink & JSXBase.HTMLAttributes; - "ion-note": LocalJSX.IonNote & JSXBase.HTMLAttributes; - "ion-picker": LocalJSX.IonPicker & JSXBase.HTMLAttributes; - "ion-picker-column": LocalJSX.IonPickerColumn & JSXBase.HTMLAttributes; - "ion-picker-column-option": LocalJSX.IonPickerColumnOption & JSXBase.HTMLAttributes; - "ion-picker-legacy": LocalJSX.IonPickerLegacy & JSXBase.HTMLAttributes; - "ion-picker-legacy-column": LocalJSX.IonPickerLegacyColumn & JSXBase.HTMLAttributes; - "ion-popover": LocalJSX.IonPopover & JSXBase.HTMLAttributes; - "ion-progress-bar": LocalJSX.IonProgressBar & JSXBase.HTMLAttributes; - "ion-radio": LocalJSX.IonRadio & JSXBase.HTMLAttributes; - "ion-radio-group": LocalJSX.IonRadioGroup & JSXBase.HTMLAttributes; - "ion-range": LocalJSX.IonRange & JSXBase.HTMLAttributes; - "ion-refresher": LocalJSX.IonRefresher & JSXBase.HTMLAttributes; - "ion-refresher-content": LocalJSX.IonRefresherContent & JSXBase.HTMLAttributes; - "ion-reorder": LocalJSX.IonReorder & JSXBase.HTMLAttributes; - "ion-reorder-group": LocalJSX.IonReorderGroup & JSXBase.HTMLAttributes; - "ion-ripple-effect": LocalJSX.IonRippleEffect & JSXBase.HTMLAttributes; - "ion-route": LocalJSX.IonRoute & JSXBase.HTMLAttributes; - "ion-route-redirect": LocalJSX.IonRouteRedirect & JSXBase.HTMLAttributes; - "ion-router": LocalJSX.IonRouter & JSXBase.HTMLAttributes; - "ion-router-link": LocalJSX.IonRouterLink & JSXBase.HTMLAttributes; - "ion-router-outlet": LocalJSX.IonRouterOutlet & JSXBase.HTMLAttributes; - "ion-row": LocalJSX.IonRow & JSXBase.HTMLAttributes; - "ion-searchbar": LocalJSX.IonSearchbar & JSXBase.HTMLAttributes; - "ion-segment": LocalJSX.IonSegment & JSXBase.HTMLAttributes; - "ion-segment-button": LocalJSX.IonSegmentButton & JSXBase.HTMLAttributes; - "ion-segment-content": LocalJSX.IonSegmentContent & JSXBase.HTMLAttributes; - "ion-segment-view": LocalJSX.IonSegmentView & JSXBase.HTMLAttributes; - "ion-select": LocalJSX.IonSelect & JSXBase.HTMLAttributes; - "ion-select-modal": LocalJSX.IonSelectModal & JSXBase.HTMLAttributes; - "ion-select-option": LocalJSX.IonSelectOption & JSXBase.HTMLAttributes; - "ion-select-popover": LocalJSX.IonSelectPopover & JSXBase.HTMLAttributes; - "ion-skeleton-text": LocalJSX.IonSkeletonText & JSXBase.HTMLAttributes; - "ion-spinner": LocalJSX.IonSpinner & JSXBase.HTMLAttributes; - "ion-split-pane": LocalJSX.IonSplitPane & JSXBase.HTMLAttributes; - "ion-tab": LocalJSX.IonTab & JSXBase.HTMLAttributes; - "ion-tab-bar": LocalJSX.IonTabBar & JSXBase.HTMLAttributes; - "ion-tab-button": LocalJSX.IonTabButton & JSXBase.HTMLAttributes; - "ion-tabs": LocalJSX.IonTabs & JSXBase.HTMLAttributes; - "ion-text": LocalJSX.IonText & JSXBase.HTMLAttributes; - "ion-textarea": LocalJSX.IonTextarea & JSXBase.HTMLAttributes; - "ion-thumbnail": LocalJSX.IonThumbnail & JSXBase.HTMLAttributes; - "ion-title": LocalJSX.IonTitle & JSXBase.HTMLAttributes; - "ion-toast": LocalJSX.IonToast & JSXBase.HTMLAttributes; - "ion-toggle": LocalJSX.IonToggle & JSXBase.HTMLAttributes; - "ion-toolbar": LocalJSX.IonToolbar & JSXBase.HTMLAttributes; + "ion-accordion": LocalJSX.IntrinsicElements["ion-accordion"] & JSXBase.HTMLAttributes; + "ion-accordion-group": LocalJSX.IntrinsicElements["ion-accordion-group"] & JSXBase.HTMLAttributes; + "ion-action-sheet": LocalJSX.IntrinsicElements["ion-action-sheet"] & JSXBase.HTMLAttributes; + "ion-alert": LocalJSX.IntrinsicElements["ion-alert"] & JSXBase.HTMLAttributes; + "ion-app": LocalJSX.IntrinsicElements["ion-app"] & JSXBase.HTMLAttributes; + "ion-avatar": LocalJSX.IntrinsicElements["ion-avatar"] & JSXBase.HTMLAttributes; + "ion-back-button": LocalJSX.IntrinsicElements["ion-back-button"] & JSXBase.HTMLAttributes; + "ion-backdrop": LocalJSX.IntrinsicElements["ion-backdrop"] & JSXBase.HTMLAttributes; + "ion-badge": LocalJSX.IntrinsicElements["ion-badge"] & JSXBase.HTMLAttributes; + "ion-breadcrumb": LocalJSX.IntrinsicElements["ion-breadcrumb"] & JSXBase.HTMLAttributes; + "ion-breadcrumbs": LocalJSX.IntrinsicElements["ion-breadcrumbs"] & JSXBase.HTMLAttributes; + "ion-button": LocalJSX.IntrinsicElements["ion-button"] & JSXBase.HTMLAttributes; + "ion-buttons": LocalJSX.IntrinsicElements["ion-buttons"] & JSXBase.HTMLAttributes; + "ion-card": LocalJSX.IntrinsicElements["ion-card"] & JSXBase.HTMLAttributes; + "ion-card-content": LocalJSX.IntrinsicElements["ion-card-content"] & JSXBase.HTMLAttributes; + "ion-card-header": LocalJSX.IntrinsicElements["ion-card-header"] & JSXBase.HTMLAttributes; + "ion-card-subtitle": LocalJSX.IntrinsicElements["ion-card-subtitle"] & JSXBase.HTMLAttributes; + "ion-card-title": LocalJSX.IntrinsicElements["ion-card-title"] & JSXBase.HTMLAttributes; + "ion-checkbox": LocalJSX.IntrinsicElements["ion-checkbox"] & JSXBase.HTMLAttributes; + "ion-chip": LocalJSX.IntrinsicElements["ion-chip"] & JSXBase.HTMLAttributes; + "ion-col": LocalJSX.IntrinsicElements["ion-col"] & JSXBase.HTMLAttributes; + "ion-content": LocalJSX.IntrinsicElements["ion-content"] & JSXBase.HTMLAttributes; + "ion-datetime": LocalJSX.IntrinsicElements["ion-datetime"] & JSXBase.HTMLAttributes; + "ion-datetime-button": LocalJSX.IntrinsicElements["ion-datetime-button"] & JSXBase.HTMLAttributes; + "ion-fab": LocalJSX.IntrinsicElements["ion-fab"] & JSXBase.HTMLAttributes; + "ion-fab-button": LocalJSX.IntrinsicElements["ion-fab-button"] & JSXBase.HTMLAttributes; + "ion-fab-list": LocalJSX.IntrinsicElements["ion-fab-list"] & JSXBase.HTMLAttributes; + "ion-footer": LocalJSX.IntrinsicElements["ion-footer"] & 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; + "ion-infinite-scroll": LocalJSX.IntrinsicElements["ion-infinite-scroll"] & JSXBase.HTMLAttributes; + "ion-infinite-scroll-content": LocalJSX.IntrinsicElements["ion-infinite-scroll-content"] & JSXBase.HTMLAttributes; + "ion-input": LocalJSX.IntrinsicElements["ion-input"] & JSXBase.HTMLAttributes; + "ion-input-otp": LocalJSX.IntrinsicElements["ion-input-otp"] & JSXBase.HTMLAttributes; + "ion-input-password-toggle": LocalJSX.IntrinsicElements["ion-input-password-toggle"] & JSXBase.HTMLAttributes; + "ion-item": LocalJSX.IntrinsicElements["ion-item"] & JSXBase.HTMLAttributes; + "ion-item-divider": LocalJSX.IntrinsicElements["ion-item-divider"] & JSXBase.HTMLAttributes; + "ion-item-group": LocalJSX.IntrinsicElements["ion-item-group"] & JSXBase.HTMLAttributes; + "ion-item-option": LocalJSX.IntrinsicElements["ion-item-option"] & JSXBase.HTMLAttributes; + "ion-item-options": LocalJSX.IntrinsicElements["ion-item-options"] & JSXBase.HTMLAttributes; + "ion-item-sliding": LocalJSX.IntrinsicElements["ion-item-sliding"] & JSXBase.HTMLAttributes; + "ion-label": LocalJSX.IntrinsicElements["ion-label"] & JSXBase.HTMLAttributes; + "ion-list": LocalJSX.IntrinsicElements["ion-list"] & JSXBase.HTMLAttributes; + "ion-list-header": LocalJSX.IntrinsicElements["ion-list-header"] & JSXBase.HTMLAttributes; + "ion-loading": LocalJSX.IntrinsicElements["ion-loading"] & JSXBase.HTMLAttributes; + "ion-menu": LocalJSX.IntrinsicElements["ion-menu"] & JSXBase.HTMLAttributes; + "ion-menu-button": LocalJSX.IntrinsicElements["ion-menu-button"] & JSXBase.HTMLAttributes; + "ion-menu-toggle": LocalJSX.IntrinsicElements["ion-menu-toggle"] & JSXBase.HTMLAttributes; + "ion-modal": LocalJSX.IntrinsicElements["ion-modal"] & JSXBase.HTMLAttributes; + "ion-nav": LocalJSX.IntrinsicElements["ion-nav"] & JSXBase.HTMLAttributes; + "ion-nav-link": LocalJSX.IntrinsicElements["ion-nav-link"] & JSXBase.HTMLAttributes; + "ion-note": LocalJSX.IntrinsicElements["ion-note"] & JSXBase.HTMLAttributes; + "ion-picker": LocalJSX.IntrinsicElements["ion-picker"] & JSXBase.HTMLAttributes; + "ion-picker-column": LocalJSX.IntrinsicElements["ion-picker-column"] & JSXBase.HTMLAttributes; + "ion-picker-column-option": LocalJSX.IntrinsicElements["ion-picker-column-option"] & JSXBase.HTMLAttributes; + "ion-picker-legacy": LocalJSX.IntrinsicElements["ion-picker-legacy"] & JSXBase.HTMLAttributes; + "ion-picker-legacy-column": LocalJSX.IntrinsicElements["ion-picker-legacy-column"] & JSXBase.HTMLAttributes; + "ion-popover": LocalJSX.IntrinsicElements["ion-popover"] & JSXBase.HTMLAttributes; + "ion-progress-bar": LocalJSX.IntrinsicElements["ion-progress-bar"] & JSXBase.HTMLAttributes; + "ion-radio": LocalJSX.IntrinsicElements["ion-radio"] & JSXBase.HTMLAttributes; + "ion-radio-group": LocalJSX.IntrinsicElements["ion-radio-group"] & JSXBase.HTMLAttributes; + "ion-range": LocalJSX.IntrinsicElements["ion-range"] & JSXBase.HTMLAttributes; + "ion-refresher": LocalJSX.IntrinsicElements["ion-refresher"] & JSXBase.HTMLAttributes; + "ion-refresher-content": LocalJSX.IntrinsicElements["ion-refresher-content"] & JSXBase.HTMLAttributes; + "ion-reorder": LocalJSX.IntrinsicElements["ion-reorder"] & JSXBase.HTMLAttributes; + "ion-reorder-group": LocalJSX.IntrinsicElements["ion-reorder-group"] & JSXBase.HTMLAttributes; + "ion-ripple-effect": LocalJSX.IntrinsicElements["ion-ripple-effect"] & JSXBase.HTMLAttributes; + "ion-route": LocalJSX.IntrinsicElements["ion-route"] & JSXBase.HTMLAttributes; + "ion-route-redirect": LocalJSX.IntrinsicElements["ion-route-redirect"] & JSXBase.HTMLAttributes; + "ion-router": LocalJSX.IntrinsicElements["ion-router"] & JSXBase.HTMLAttributes; + "ion-router-link": LocalJSX.IntrinsicElements["ion-router-link"] & JSXBase.HTMLAttributes; + "ion-router-outlet": LocalJSX.IntrinsicElements["ion-router-outlet"] & JSXBase.HTMLAttributes; + "ion-row": LocalJSX.IntrinsicElements["ion-row"] & JSXBase.HTMLAttributes; + "ion-searchbar": LocalJSX.IntrinsicElements["ion-searchbar"] & JSXBase.HTMLAttributes; + "ion-segment": LocalJSX.IntrinsicElements["ion-segment"] & JSXBase.HTMLAttributes; + "ion-segment-button": LocalJSX.IntrinsicElements["ion-segment-button"] & JSXBase.HTMLAttributes; + "ion-segment-content": LocalJSX.IntrinsicElements["ion-segment-content"] & JSXBase.HTMLAttributes; + "ion-segment-view": LocalJSX.IntrinsicElements["ion-segment-view"] & JSXBase.HTMLAttributes; + "ion-select": LocalJSX.IntrinsicElements["ion-select"] & JSXBase.HTMLAttributes; + "ion-select-modal": LocalJSX.IntrinsicElements["ion-select-modal"] & JSXBase.HTMLAttributes; + "ion-select-option": LocalJSX.IntrinsicElements["ion-select-option"] & JSXBase.HTMLAttributes; + "ion-select-popover": LocalJSX.IntrinsicElements["ion-select-popover"] & JSXBase.HTMLAttributes; + "ion-skeleton-text": LocalJSX.IntrinsicElements["ion-skeleton-text"] & JSXBase.HTMLAttributes; + "ion-spinner": LocalJSX.IntrinsicElements["ion-spinner"] & JSXBase.HTMLAttributes; + "ion-split-pane": LocalJSX.IntrinsicElements["ion-split-pane"] & JSXBase.HTMLAttributes; + "ion-tab": LocalJSX.IntrinsicElements["ion-tab"] & JSXBase.HTMLAttributes; + "ion-tab-bar": LocalJSX.IntrinsicElements["ion-tab-bar"] & JSXBase.HTMLAttributes; + "ion-tab-button": LocalJSX.IntrinsicElements["ion-tab-button"] & JSXBase.HTMLAttributes; + "ion-tabs": LocalJSX.IntrinsicElements["ion-tabs"] & JSXBase.HTMLAttributes; + "ion-text": LocalJSX.IntrinsicElements["ion-text"] & JSXBase.HTMLAttributes; + "ion-textarea": LocalJSX.IntrinsicElements["ion-textarea"] & JSXBase.HTMLAttributes; + "ion-thumbnail": LocalJSX.IntrinsicElements["ion-thumbnail"] & JSXBase.HTMLAttributes; + "ion-title": LocalJSX.IntrinsicElements["ion-title"] & JSXBase.HTMLAttributes; + "ion-toast": LocalJSX.IntrinsicElements["ion-toast"] & JSXBase.HTMLAttributes; + "ion-toggle": LocalJSX.IntrinsicElements["ion-toggle"] & JSXBase.HTMLAttributes; + "ion-toolbar": LocalJSX.IntrinsicElements["ion-toolbar"] & JSXBase.HTMLAttributes; } } }