chore: sync with next - #31465
Draft
brandyscarney wants to merge 97 commits into
Draft
chore: sync with next#31465brandyscarney wants to merge 97 commits into
brandyscarney wants to merge 97 commits into
Conversation
Issue number: resolves #26394 --------- ## What is the current behavior? When `routerLink` is applied to a non-anchor Ionic component (`ion-item`, `ion-button`), `RouterLinkDelegateDirective` always routes in-app on click. A ctrl/meta/shift/alt click, or a host with `target="_blank"`, gets swallowed by the in-app navigation, so the browser never opens the link in a new tab. A plain `<a routerLink>` honors these intents, but the Ionic delegate doesn't, even though these components render a native anchor in their shadow DOM that's capable of the native new-tab behavior. ## What is the new behavior? `RouterLinkDelegateDirective` now adds a capture-phase click listener so it runs before Angular's `RouterLink` handler and the directive's own bubble-phase `onClick`. When the click should be handled natively (a ctrl/meta/shift/alt modifier is held, or the host `target` is set to anything other than `_self`), it calls `stopImmediatePropagation()` to cancel the in-app navigation but leaves `preventDefault` alone, so the shadow-DOM anchor can still open the tab. This mirrors the modifier set Angular's own `RouterLink` guards on. Normal clicks are unaffected and continue to navigate in-app. The listener is removed in `ngOnDestroy`. ## Does this introduce a breaking change? - [ ] Yes - [x] No ## Other information This supersedes #28976 by @j-oppenhuis, which first surfaced the target and modifier-click gap. Credited as co-author below. To verify manually in the Angular preview, ctrl/cmd-click the two `ion-item` rows (a plain one and a `target="_blank"` one) and confirm each opens a new tab instead of navigating in place: https://ionic-framework-git-fix-angular-routerlink-modifi-896c58-ionic1.vercel.app/angular/standalone/router-link If you compare that against the main version of the same component, you'll be able to see how it's fixed: https://ionic-framework-git-main-ionic1.vercel.app/angular/standalone/router-link Co-authored-by: Jelle Oppenhuis <jelle@siyou.nl>
Issue number: resolves #31220 --------- ## What is the current behavior? Currently, a component opened through `ModalController` that binds a value from `componentProps` in its template, like `<ion-nav [root]="rootPage()">`, can render empty. `attachView` only runs the creation pass, so the `[root]` binding is applied on a later tick, after `ion-nav` has already finished loading and read `root` as undefined. Wrapping the nav in `@if (rootPage())` worked around it. ## What is the new behavior? After this fix, `attachView` runs `detectChanges()` on the view right after attaching it, so template bindings apply before the web component loads. `ion-nav` now sees its `root` during load and renders it. This matches the `detectChanges` call already on `major-9.0`. ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information The actual fix for this PR is fairly small, most of it is just testing. It's also important to note that this is already fixed in v9 in the same exact way, we're just backporting it to v8 here. Dev build: ``` 8.8.12-dev.11781813448.16e7a064 ```
v8.8.12
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | Type | Update | |---|---|---|---|---|---| | [@axe-core/playwright](https://redirect.github.com/dequelabs/axe-core-npm) | [`^4.11.3` → `^4.12.1`](https://renovatebot.com/diffs/npm/@axe-core%2fplaywright/4.11.3/4.12.1) |  |  | devDependencies | minor | | [@playwright/test](https://playwright.dev) ([source](https://redirect.github.com/microsoft/playwright)) | [`^1.61.0` → `^1.61.1`](https://renovatebot.com/diffs/npm/@playwright%2ftest/1.61.0/1.61.1) |  |  | devDependencies | patch | | mcr.microsoft.com/playwright | `v1.61.0` → `v1.61.1` |  |  | final | patch | | [playwright-core](https://playwright.dev) ([source](https://redirect.github.com/microsoft/playwright)) | [`^1.61.0` → `^1.61.1`](https://renovatebot.com/diffs/npm/playwright-core/1.61.0/1.61.1) |  |  | devDependencies | patch | --- ### Release Notes <details> <summary>dequelabs/axe-core-npm (@​axe-core/playwright)</summary> ### [`v4.12.1`](https://redirect.github.com/dequelabs/axe-core-npm/compare/v4.11.3...5f587f3a6a8aebfd1ca1bfdde5d93d6b4e1abe8f) [Compare Source](https://redirect.github.com/dequelabs/axe-core-npm/compare/v4.11.3...5f587f3a6a8aebfd1ca1bfdde5d93d6b4e1abe8f) </details> <details> <summary>microsoft/playwright (@​playwright/test)</summary> ### [`v1.61.1`](https://redirect.github.com/microsoft/playwright/compare/v1.61.0...39e3553a4f283a41134d75d7e404484bd9e6865a) [Compare Source](https://redirect.github.com/microsoft/playwright/compare/v1.61.0...v1.61.1) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekday before 11am" - 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. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->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). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMzUuMCIsInVwZGF0ZWRJblZlciI6IjQzLjIzNS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [actions/checkout](https://redirect.github.com/actions/checkout) | action | major | `v6.0.3` → `v7.0.0` | --- ### Release Notes <details> <summary>actions/checkout (actions/checkout)</summary> ### [`v7.0.0`](https://redirect.github.com/actions/checkout/blob/HEAD/CHANGELOG.md#v700) [Compare Source](https://redirect.github.com/actions/checkout/compare/v7.0.0...v7.0.0) - Block checking out fork PR for pull\_request\_target and workflow\_run by [@​aiqiaoy](https://redirect.github.com/aiqiaoy) in [#​2454](https://redirect.github.com/actions/checkout/pull/2454) - Bump actions/publish-immutable-action from 0.0.3 to 0.0.4 in the minor-actions-dependencies group across 1 directory by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2458](https://redirect.github.com/actions/checkout/pull/2458) - Bump flatted from 3.3.1 to 3.4.2 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2460](https://redirect.github.com/actions/checkout/pull/2460) - Bump js-yaml from 4.1.0 to 4.2.0 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2461](https://redirect.github.com/actions/checkout/pull/2461) - Bump [@​actions/core](https://redirect.github.com/actions/core) and [@​actions/tool-cache](https://redirect.github.com/actions/tool-cache) and Remove uuid by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2459](https://redirect.github.com/actions/checkout/pull/2459) - upgrade module to esm and update dependencies by [@​aiqiaoy](https://redirect.github.com/aiqiaoy) in [#​2463](https://redirect.github.com/actions/checkout/pull/2463) - Bump the minor-npm-dependencies group across 1 directory with 3 updates by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2462](https://redirect.github.com/actions/checkout/pull/2462) ### [`v7`](https://redirect.github.com/actions/checkout/blob/HEAD/CHANGELOG.md#v700) [Compare Source](https://redirect.github.com/actions/checkout/compare/v6.0.3...v7.0.0) - Block checking out fork PR for pull\_request\_target and workflow\_run by [@​aiqiaoy](https://redirect.github.com/aiqiaoy) in [#​2454](https://redirect.github.com/actions/checkout/pull/2454) - Bump actions/publish-immutable-action from 0.0.3 to 0.0.4 in the minor-actions-dependencies group across 1 directory by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2458](https://redirect.github.com/actions/checkout/pull/2458) - Bump flatted from 3.3.1 to 3.4.2 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2460](https://redirect.github.com/actions/checkout/pull/2460) - Bump js-yaml from 4.1.0 to 4.2.0 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2461](https://redirect.github.com/actions/checkout/pull/2461) - Bump [@​actions/core](https://redirect.github.com/actions/core) and [@​actions/tool-cache](https://redirect.github.com/actions/tool-cache) and Remove uuid by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2459](https://redirect.github.com/actions/checkout/pull/2459) - upgrade module to esm and update dependencies by [@​aiqiaoy](https://redirect.github.com/aiqiaoy) in [#​2463](https://redirect.github.com/actions/checkout/pull/2463) - Bump the minor-npm-dependencies group across 1 directory with 3 updates by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2462](https://redirect.github.com/actions/checkout/pull/2462) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekday before 11am" - 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. --- - [ ] <!-- rebase-check -->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). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMzEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjIzMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…ndar (#31227) Issue number: resolves #30484 --------- ## What is the current behavior? Paging through the month calendar in an <IonDatetime> always scrolls smoothly regardless of the `animated` property in global config ## What is the new behavior? Paging will scroll instantly (no animation) if `animated` is false, otherwise the previous smooth scroll behavior persists ## Does this introduce a breaking change? - [ ] Yes - [x] No
Issue number: resolves #30968 --------- <!-- Please do not submit updates to dependencies unless it fixes an issue. --> <!-- Please try to limit your pull request to one type (bugfix, feature, etc). Submit multiple pull requests if needed. --> ## What is the current behavior? <!-- Please describe the current behavior that you are modifying. --> `<ion-button>` with type="submit" does not cause the associated `<form>` to be submitted even though it is not disabled. When the text of the input field is cleared and then input re-added, you can submit the input. ## What is the new behavior? <!-- Please describe the behavior or changes that are being added by this PR. --> The visible and hidden button should always have the same disabled state. `<ion-button>` with type="submit" should always submit the associated `<form>` when it is enabled. - Add `formButtonEl.disabled = this.disabled;` and `formButtonEl.type = this.type;` to button.tsx in `renderHiddenButton()`. This addition syncs the disabled status and type of the button when that happens. - Add a test in to to `packages/angular/test/base/e2e/src/lazy/form.spec.ts` which should ensure any changes in button type are synced. The test gets the hidden button type, changes the visible button state, and then expects the hidden button state to change as well. - Per conversations around this PR, testing disabled state sync will need a dev build due to the nature of the issue. ## Does this introduce a breaking change? - [ ] Yes - [x] No <!-- If this introduces a breaking change: 1. Describe the impact and migration path for existing applications below. 2. Update the BREAKING.md file with the breaking change. 3. Add "BREAKING CHANGE: [...]" to the commit description when merging. See https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md#footer for more information. --> ## Other information <!-- Any other information that is important to this PR such as screenshots of how the component looks before and after the change. --> Related to a stencil update that affected when @watch('disabled') fires. --------- Co-authored-by: Shane <shane@shanessite.net>
…ple=true (#31248) Issue number: resolves #29673 --------- ## What is the current behavior? Using the month/year selection wheels on an `ion-datetime` with `multiple=true` changes the selection in an unintuitive manner and changing the value of one of the wheels often reverts the value of the other wheel. ## What is the new behavior? - The month and year wheels in an `ion-datetime` no longer change the selection when `multiple=true` - The behavior of a single-select `ion-datetime` is unchanged. - The fix has only been applied to `renderMonthPickerColumn` and `renderYearPickerColumn`, as [per the docs](https://ionicframework.com/docs/api/datetime#multiple-date-selection), the `multiple` property is only supported on `presentation=date preferWheel=false`, which only shows those two wheels. - Four new datetime e2e tests have been added to test these changes ## Does this introduce a breaking change? - [ ] Yes - [x] No
<!-- Please do not submit updates to dependencies unless it fixes an issue. --> <!-- Please try to limit your pull request to one type (bugfix, feature, etc). Submit multiple pull requests if needed. --> ## What is the current behavior? <!-- Please describe the current behavior that you are modifying. --> Tab buttons in the ionic-md theme are slightly shorter than the tab bar. This is inconsistent when dev tools are in use in Firefox, causing screenshot tests to fail. ## What is the new behavior? <!-- Please describe the behavior or changes that are being added by this PR. --> - Tab buttons completely fill available vertical space by adding a margin above the button's icon. ## Does this introduce a breaking change? - [ ] Yes - [X] No <!-- If this introduces a breaking change: 1. Describe the impact and migration path for existing applications below. 2. Update the BREAKING.md file with the breaking change. 3. Add "BREAKING CHANGE: [...]" to the commit description when merging. See https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md#footer for more information. --> ## Other information <!-- Any other information that is important to this PR such as screenshots of how the component looks before and after the change. --> The tab bar content height is 48px while the buttons are 44px high with the styles specified. Usually the buttons render 44px high, but sometimes when the button is focused with Firefox dev tools, they render 48px high. When the buttons are made to be 48px high, matching the container, we don't see this issue. --------- Co-authored-by: ionitron <hi@ionicframework.com> Co-authored-by: Maria Hutt <thetaPC@users.noreply.github.com>
v8.8.13
# Conflicts: # core/package-lock.json # core/package.json # core/src/components.d.ts # core/src/components/datetime/datetime.tsx
Sync next with main.
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.4.0` → `8.4.1`](https://renovatebot.com/diffs/npm/@capacitor%2fcore/8.4.0/8.4.1) |  |  | --- ### Release Notes <details> <summary>ionic-team/capacitor (@​capacitor/core)</summary> ### [`v8.4.1`](https://redirect.github.com/ionic-team/capacitor/blob/HEAD/CHANGELOG.md#841-2026-06-19) [Compare Source](https://redirect.github.com/ionic-team/capacitor/compare/8.4.0...8.4.1) ##### Bug Fixes - **cli:** make SPM dependency patch work on prereleases ([#​8508](https://redirect.github.com/ionic-team/capacitor/issues/8508)) ([6048e90](https://redirect.github.com/ionic-team/capacitor/commit/6048e90171afa0229a3c25b52a23c377c6bb804c)) - **cli:** patch Capacitor SPM dependency version in plugins ([#​8492](https://redirect.github.com/ionic-team/capacitor/issues/8492)) ([28bb2c6](https://redirect.github.com/ionic-team/capacitor/commit/28bb2c687069dfdd6aa7abc866004a1c6388d103)) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekday before 11am" - 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. --- - [ ] <!-- rebase-check -->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). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMzEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjIzMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Issue number: resolves #30145 --------- ## What is the current behavior? `ionic-react`'s `IonTabBar` tries to reference `this.props.onIonTabsWillChange` and `this.props.onIonTabsDidChange`, which do not exist, causing the `onIonTabsWillChange` and `onIonTabsDidChange` events to never fire. ## What is the new behavior? <!-- Please describe the behavior or changes that are being added by this PR. --> - Update usage of `this.props.onIonTabsWillChange` to `this.props.tabsContext.tabBarProps.onIonTabsWillChange` - Update usage of `this.props.onIonTabsDidChange` to `this.props.tabsContext.tabBarProps.onIonTabsDidChange` - Add check to make sure `this.props.tabsContext` is truthy before using it - `onIonTabsWillChange` and `onIonTabsDidChange` fire as expected ## Does this introduce a breaking change? - [ ] Yes - [x] No
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [actions/setup-node](https://redirect.github.com/actions/setup-node) | action | minor | `v6.4.0` → `v6.5.0` | --- ### Release Notes <details> <summary>actions/setup-node (actions/setup-node)</summary> ### [`v6.5.0`](https://redirect.github.com/actions/setup-node/compare/v6.4.0...v6.5.0) [Compare Source](https://redirect.github.com/actions/setup-node/compare/v6.4.0...v6.5.0) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekday before 11am" - 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. --- - [ ] <!-- rebase-check -->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). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTkuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI1OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
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.4.1` → `8.4.2`](https://renovatebot.com/diffs/npm/@capacitor%2fcore/8.4.1/8.4.2) |  |  | --- ### Release Notes <details> <summary>ionic-team/capacitor (@​capacitor/core)</summary> ### [`v8.4.2`](https://redirect.github.com/ionic-team/capacitor/blob/HEAD/CHANGELOG.md#842-2026-07-14) [Compare Source](https://redirect.github.com/ionic-team/capacitor/compare/8.4.1...8.4.2) ##### Bug Fixes - **android:** explicitly grant URI permissions for image capture intent ([#​8526](https://redirect.github.com/ionic-team/capacitor/issues/8526)) ([6f2d328](https://redirect.github.com/ionic-team/capacitor/commit/6f2d3283897a375d09ca9ec8784a9f0d65f0a530)) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekday before 11am" - 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. --- - [ ] <!-- rebase-check -->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). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTkuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI1OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [actions/setup-node](https://redirect.github.com/actions/setup-node) | action | major | `v6.5.0` → `v7.0.0` | | [actions/setup-node](https://redirect.github.com/actions/setup-node) | action | major | `v6` → `v7` | --- ### Release Notes <details> <summary>actions/setup-node (actions/setup-node)</summary> ### [`v7.0.0`](https://redirect.github.com/actions/setup-node/compare/v6.5.0...v7.0.0) [Compare Source](https://redirect.github.com/actions/setup-node/compare/v7.0.0...v7.0.0) ### [`v7`](https://redirect.github.com/actions/setup-node/compare/v6.5.0...v7.0.0) [Compare Source](https://redirect.github.com/actions/setup-node/compare/v6.5.0...v7.0.0) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekday before 11am" - 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 these updates again. --- - [ ] <!-- rebase-check -->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). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTkuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI1OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
v8.8.14
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@capacitor/status-bar](https://redirect.github.com/ionic-team/capacitor-plugins) | [`8.0.2` → `8.0.3`](https://renovatebot.com/diffs/npm/@capacitor%2fstatus-bar/8.0.2/8.0.3) |  |  | --- ### Release Notes <details> <summary>ionic-team/capacitor-plugins (@​capacitor/status-bar)</summary> ### [`v8.0.3`](https://redirect.github.com/ionic-team/capacitor-plugins/releases/tag/%40capacitor/status-bar%408.0.3) [Compare Source](https://redirect.github.com/ionic-team/capacitor-plugins/compare/@capacitor/status-bar@8.0.2...@capacitor/status-bar@8.0.3) **Note:** Version bump only for package [@​capacitor/status-bar](https://redirect.github.com/capacitor/status-bar) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekday before 11am" - 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. --- - [ ] <!-- rebase-check -->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). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTkuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI1OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
… enter the modal (#31260) Issue number: internal --------- ## What is the current behavior? When a modal is opened with Android TalkBack enabled, the screen reader cannot enter or navigate the modal's content. On present, focus is moved to the modal host, but the host is role-less. The `role="dialog"`, `aria-modal`, and the label live on the inner `.ion-overlay-wrapper` so assistive technologies have no dialog to land on. ## What is the new behavior? - `present()` now focuses the overlay's `[role="dialog"]` element (the wrapper) instead of the role-less host, falling back to the host when the role is on the host (action-sheet, loading). - The modal wrapper gets `tabIndex="-1"` so it can receive that programmatic focus (an element with only `role="dialog"` is not focusable). Its focus ring is suppressed since the focus is programmatic, not keyboard-driven. - Clears text selection when gestures start to prevent Firefox from interrupting swipe-to-close and sheet gestures. - Adds an e2e test to `modal/test/a11y/modal.e2e.ts` to verify no visible outline added to the wrapper. - Adds e2e tests to `utils/test/overlays/overlays.e2e.ts` to verify the focus is on the wrapper instead of the host for all modals. - Fixes Playwright test helper to clear text selection immediately after `mouse.down()` to prevent the selection from blocking gesture detection in the test environment. --------- Co-authored-by: Brandy Smith <brandyscarney@users.noreply.github.com> Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com>
…s attachShadow (#30967) Issue number: related to #29751 ## What is the current behavior? In Angular SSR environments using a server DOM that does not implement native `attachShadow` (for example Domino), Ionic server hydration can fail with: `TypeError: this.attachShadow is not a function` This occurs in the server hydrate path used by `@ionic/angular-server` when calling `hydrateDocument(...)` with the current default behavior. ## What is the new behavior? This PR adds a capability check in `packages/angular-server/src/ionic-server-module.ts` and applies a conditional fallback only when `attachShadow` is unavailable: - if `attachShadow` is supported: - keep existing behavior (`clientHydrateAnnotations: false`) - if `attachShadow` is not supported: - use `serializeShadowRoot: 'scoped'` - use `clientHydrateAnnotations: true` This keeps the current behavior for environments with native `attachShadow`, while providing a compatible SSR path for Domino-like environments. ## Does this introduce a breaking change? - [ ] Yes - [x] No ## Other information The change is intentionally scoped to `@ionic/angular-server` integration logic and does not modify component behavior or the existing `excludeComponents` list. I could not run the full Ionic test/lint suite locally in my current Windows environment setup, so this PR relies on CI for full validation. Note: this PR addresses the `attachShadow` SSR crash path in `@ionic/angular-server` by applying a conditional fallback. From upstream investigation, there is also a Stencil runtime fix in `>= 4.40.0` related to non-shadow component patching (`children`/`childNodes`) that may affect Angular client hydration behavior. So full end-to-end resolution of all symptoms may also depend on the Stencil bump tracked separately. Co-authored-by: ShaneK <shane@shanessite.net>
Issue number: FW-6928 --------- <!-- Following up FW-6926: review reusable actions and pin them to commit SHAs for supply-chain security. --> ## What is the current behavior? Several third-party GitHub Actions in our workflows and composite actions were still referenced by mutable tags (`@v6`/`@v7`/`@v8`/`@v4`). A mutable tag can be repointed by the action author — or an attacker who gains write access to the action repo — to arbitrary code, which then runs with the workflow's permissions and secrets (notably in the release pipeline). ## What is the new behavior? All remaining unpinned third-party actions are now pinned to a full-length commit SHA with a `# vX.Y.Z` comment, matching the convention already used across the repo (e.g. `actions/checkout@9c091bb… # v7.0.0`). Each action keeps its current major, pinned to the latest patch of that major. Every SHA was independently verified against its upstream tag. File | Action | Pinned to -- | -- | -- actions/build-angular/action.yml | actions/setup-node | 820762786… # v7.0.0 actions/upload-archive/action.yml | actions/upload-artifact | 043fb46d1… # v7.0.1 actions/test-core-screenshot/action.yml | actions/upload-artifact | 043fb46d1… # v7.0.1 actions/download-archive/action.yml | actions/download-artifact | 3e5f45b2c… # v8.0.1 actions/update-reference-screenshots/action.yml | actions/download-artifact | 3e5f45b2c… # v8.0.1 codeql-analysis.yml (init + analyze) | github/codeql-action | 7188fc363… # v4.37.1 conventional-commit.yml | amannn/action-semantic-pull-request | 48f256284… # v6.1.1 label.yml | actions/labeler | b8dd2d9be… # v6.2.0 Local `uses: ./…` composite/reusable refs are intentionally left unchanged (same-repo, no external supply-chain risk). ## Does this introduce a breaking change? - [ ] Yes - [x] No No behavioural change — this only pins which upstream commit CI executes. ## Other information - No major-version upgrades; that's deferred as a separate maintenance concern. - Follow-ups considered but out of scope: a CI guard to block reintroducing unpinned actions, and a `github-actions` Dependabot entry to keep the pins bumped.
…tep (#31310) Issue number: N/A --------- <!-- Please do not submit updates to dependencies unless it fixes an issue. --> <!-- Please try to limit your pull request to one type (bugfix, feature, etc). Submit multiple pull requests if needed. --> ## What is the current behavior? <!-- Please describe the current behavior that you are modifying. --> The Playwright npm packages and the `mcr.microsoft.com/playwright` Docker image in `core/Dockerfile` are tracked by two separate Renovate managers. The Docker image is published to the container registry about a day after the npm release, so the two updates become available at different times. Because they are on different datasources, the npm bump opens a PR before the Docker tag is ready, and getting the Dockerfile into the same PR requires a manual rebase once the image lands. This is easy to miss, and merging the npm bump alone leaves `core/package.json` and `core/Dockerfile` on mismatched Playwright versions. ## What is the new behavior? <!-- Please describe the behavior or changes that are being added by this PR. --> - A custom manager now resolves the `core/Dockerfile` Playwright image tag from the npm `@playwright/test` release instead of the container registry, so both files bump from the same version. - The built-in Docker manager for that image is disabled so it no longer produces a separate, lagging update. - The Dockerfile is added to the grouped `playwright` rule, and a `minimumReleaseAge` of 3 days lets the matching image publish before the PR opens. - Net result is a single `playwright` PR that updates `core/package.json` and `core/Dockerfile` together, with no manual rebase. ## Does this introduce a breaking change? - [ ] Yes - [ ] No <!-- If this introduces a breaking change: 1. Describe the impact and migration path for existing applications below. 2. Update the BREAKING.md file with the breaking change. 3. Add "BREAKING CHANGE: [...]" to the commit description when merging. See https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md#footer for more information. --> ## Other information <!-- Any other information that is important to this PR such as screenshots of how the component looks before and after the change. --> This is a Renovate config change only, so it will not take effect until the next scheduled Renovate run. If the Docker image for a given release has not been published yet when CI runs, the Dockerfile build can fail on a missing tag; the fix is to wait for the image to appear and re-run the job, with no code change needed. This is documented inline in `renovate.json5`.
Issue number: resolves #31337 --------- ## What is the current behavior? Currently, `ion-content` caches its fullscreen offsets and only recomputes them on load, a `window` resize, `ionTabBarLoaded`, or `recalculateDimensions()`. A change to `--ion-safe-area-top` fires none of those, so on Android edge-to-edge, where the real inset only arrives once the native WindowInsets callback has run, the fullscreen scroll region and `#background-content` stay short by the inset and leave a gap behind a translucent header. Sheet modals have the same problem: `--ion-modal-offset-top` is a resolved pixel value written at present time, so a sheet presented before the inset is known stays too tall. ## What is the new behavior? Fullscreen `ion-content` now observes its own box with a `ResizeObserver`, which works because the content flexes to fill whatever space the headers and footers leave behind. The callback keeps the `offsetParent === null` guard from `onResize()`, since a hidden page reports a 0x0 box and recomputing then would zero the offsets, but it skips that method's 100ms debounce, which left the offsets visibly wrong for a small amount of time. Sheet modals subscribe to `onRootSafeAreaTopChange()`, a hidden probe element whose `height` tracks `var(--ion-safe-area-top)` so a change to the variable becomes an observable size change. ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information The preview pages won't show the bug on their own, since it needs the inset to change after load. Run `document.documentElement.style.setProperty('--ion-safe-area-top', '24px')` in the console to trigger it. - [Fullscreen content (iOS)](https://ionic-framework-git-fix-31337-ionic1.vercel.app/src/components/content/test/fullscreen?ionic:mode=ios) / [Fullscreen content (MD)](https://ionic-framework-git-fix-31337-ionic1.vercel.app/src/components/content/test/fullscreen?ionic:mode=md) - [Modal safe-area (iOS)](https://ionic-framework-git-fix-31337-ionic1.vercel.app/src/components/modal/test/safe-area?ionic:mode=ios) / [Modal safe-area (MD)](https://ionic-framework-git-fix-31337-ionic1.vercel.app/src/components/modal/test/safe-area?ionic:mode=md)
v8.8.18
Sync next with main.
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [github/codeql-action](https://redirect.github.com/github/codeql-action) | action | patch | `v4.37.6` → `v4.37.7` | --- ### Release Notes <details> <summary>github/codeql-action (github/codeql-action)</summary> ### [`v4.37.7`](https://redirect.github.com/github/codeql-action/releases/tag/v4.37.7) [Compare Source](https://redirect.github.com/github/codeql-action/compare/v4.37.6...v4.37.7) - Update default CodeQL bundle version to [2.26.3](https://redirect.github.com/github/codeql-action/releases/tag/codeql-bundle-v2.26.3). [#​4085](https://redirect.github.com/github/codeql-action/pull/4085) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekday before 11am" - 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. --- - [ ] <!-- rebase-check -->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). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4yNC4wIiwidXBkYXRlZEluVmVyIjoiNDQuMjQuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
) Issue number: resolves #30226 --------- ## What is the current behavior? When `dir="rtl"` is set on `<ion-app>` (but not on `document`), the hamburger menu appears on the right side visually, but the **open animation still slides in from the left**. This happens because `isEndSide()` only checked `document.dir`, not the nearest ancestor `dir` attribute. ## What is the new behavior? - `isEndSide()` takes an optional host element and delegates to `isRTL()` instead of reading `document.dir` itself. - `isRTL()` now walks up from the given element to the nearest ancestor that declares a `dir`, so `<ion-app dir="rtl">` applies to everything inside it even when the document is `ltr`. It previously read only the element's own `dir` before falling back to `document.dir`. - `sideChanged()` in `ion-menu` also passes the menu element so the side is correct before the first animation. - Unit tests added for the `ion-app dir="rtl"` case. ## Does this introduce a breaking change? - [ ] Yes - [x] No --------- Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Co-authored-by: Austin-Spriggs <aspriggs@madisoncollege.edu>
…eck (#31363) Issue number: resolves #30539 --------- ## What is the current behavior? Currently, `supportsPassive` in the gesture listener utils detects passive listener support by attaching a real `optsTest` listener to the element and reading the `passive` getter, but it never removes that listener. The result is a listener permanently attached to whichever element runs the first gesture. There's a second failure mode in the same function. The `_sPassive === undefined` guard only clears if the getter fires or if `addEventListener` throws, so a runtime that does neither leaves `_sPassive` undefined and every subsequent call attaches another `optsTest` listener that's never cleaned up. ## What is the new behavior? We now always pass the options object, and the detection is removed entirely. The check was already dead code, because passive options object support landed in Chrome 51, Safari 10, Firefox 49, and Edge 16, all in 2016, while our lowest supported versions are Chrome 89, Safari 15, Firefox 75, and Edge 89. The function returned `true` on every browser we support, so both branches of the removed ternary collapse to the same value and there's no behavior change. ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information
Issue number: resolves #31026 --------- ## What is the current behavior? Opening an `ion-range` with `dualKnobs` set to `true` with a value set inside of a modal does not render the values properly. ## What is the new behavior? - Added a watcher for `dualKnobs` that calls `updateRatio()`, ensuring knob ratios are recomputed whenever `dualKnobs` changes. The `min`, `max`, and `value` properties already had watchers. `dualKnobs` was the only ratio-affecting property without one. - Knobs are now positioned correctly regardless of whether `value` or `dualKnobs` is assigned first. They are also repositioned correctly when `dualKnobs` is toggled at runtime in either direction. - Range now sets the correct values when used inside a modal, including when `dualKnobs` and `value` are assigned in different orders. - Improved the `dualKnobs` property description. - Added e2e tests covering both property assignment orders and runtime toggling of `dualKnobs`. ## Does this introduce a breaking change? - [ ] Yes - [x] No --------- Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Co-authored-by: pratyushjaiswal0806-dot <pratyushjaiswal0806@gmail.com>
v8.8.19
Sync next with main.
Sync `next` with `main`. This is the first sync since `main` crossed the v9 boundary (`main` is 9.0.2, `next` was 8.8.19), so it is much larger than a routine sync: 123 commits and 256 conflicts. ## Resolution policy `main` wins for code, `next` wins for styling. Where the two could not both be kept, `main`'s render tree and component logic were taken and `next`'s theme-aware styling was layered on top. ## Notable resolutions - **`ion-select` / `ion-input` / `ion-textarea`** diverged on render tree, not style. Took `main`'s v9 structure (`.select-start` / `.select-control` / `.select-end`, `StartContainerController`, boolean `autocorrect`, floating labels that no longer float for slotted content) since BREAKING.md documents `part="inner"` as removed. Kept `next`'s theme-aware derived values (`getFill()`, `getShape()`, `getSize()`, `getLabelPlacement()`, the `theme` class map, the theme-aware clear icon). The ionic-theme outline hook (`<div class="input-outline">` etc.) is gone from these three and needs re-adding against the new DOM as part of the ionic-modular work. - **`picker-legacy` / `picker-legacy-column`**: accepted `main`'s removal. Also dropped `ion-picker-legacy` from `OVERLAY_FOCUS_TRAP_SELECTOR` and from the Vue overlay container list. - **`packages/react` `proxies.ts` -> `components.ts`**: `main` deleted `proxies.ts` with the react-output-target 1.5.0 upgrade. Ported `next`'s `IonDivider` / `IonGallery` / `IonGalleryItem` into the generated `components.ts` format, and updated the `build-core` archive path. - **Angular standalone**: `main` moved `packages/angular/standalone/` to `packages/angular/src/standalone/` with per-component files. Added `ion-divider.ts`, `ion-gallery.ts`, `ion-gallery-item.ts` and registered them. - **Angular lazy `proxies.ts`**: 83 conflicts. 79 resolved as `next`'s `inputs` line plus `main`'s added `outputs` / `standalone: false`. Four by hand: dropped `IonPickerLegacy`, `ion-select-option` inputs are the union, `ion-tab` keeps `main`'s required `tab` input plus `next`'s `mode` / `theme`. - **`datetime`**: `next` moved the color rules into `datetime.native.scss` while `main` rewrote them in the shared file for the removal of the default `color` prop. Kept `next`'s file split and ported `main`'s `ion-color(primary, base)` default plus `:host(.ion-color)` override into the native theme. - **`alert.common.scss`**: rename detection appended `main`'s copy of the label-placement and justify rules on top of `next`'s identical copy. Removed the duplicate. - **`select.tsx`**: the merge left two identical copies of `wrapSelectTextNodes`. Removed one. - **BREAKING.md**: rebuilt as the union of both v9 sections. All 15 component subsections alphabetized, `next`'s Textarea Shadow DOM note folded into `main`'s Textarea section, TOC regenerated. - **Snapshots**: 193 conflicting baselines took `next`'s, matching the precedent set in 17ab188. Eight orphaned `textarea` fill Firefox baselines stayed deleted since `next`'s fill spec is LTR-only and has no non-custom shaped cases. - **`core/package-lock.json`**: regenerated from `main`'s lockfile against the merged `package.json`. `@playwright/test` stays at 1.62.1 to match the CI image. ## Verification - `tsc --noEmit` on `core/src` is clean (spec-file errors are pre-existing tsconfig noise, present on untouched files too). - `stencil test --spec`: 86 suites, 819 tests, all passing. - No conflict markers anywhere; lockfile version/resolved/integrity fields are consistent. - Scanned every merged source file for duplicated blocks and duplicate class members, which is how the two duplication bugs above were found. ## Before merging - [X] **Snapshots must be regenerated.** All 193 baselines are `next`'s and none of them match the merged code. Run `npm run test.e2e.docker.update-snapshots` - [x] **Regenerate the derived files from a real build** rather than trusting the hand merges: `core/api.txt`, `core/src/components.d.ts`, and the framework proxy files - Merge with a regular merge commit, not a squash --------- Co-authored-by: OS-jacobbell <228905018+OS-jacobbell@users.noreply.github.com> Co-authored-by: Maria Hutt <thetaPC@users.noreply.github.com> Co-authored-by: Brandy Smith <brandyscarney@users.noreply.github.com> Co-authored-by: Sean Perkins <13732623+sean-perkins@users.noreply.github.com> Co-authored-by: ionitron <hi@ionicframework.com> Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: droc101 <37421449+droc101@users.noreply.github.com> Co-authored-by: adahlberg-sprocket-sports <85965520+adahlberg-sprocket-sports@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: ptmkenny <1451472+ptmkenny@users.noreply.github.com> Co-authored-by: Zac Smucker-Bryan <111775722+Zac-Smucker-Bryan@users.noreply.github.com> Co-authored-by: Eric Hechavarria <34724684+EricHech@users.noreply.github.com> Co-authored-by: LucasArray <29403436+LucasArray@users.noreply.github.com> Co-authored-by: Alexander Harding <noreply@harding.dev> Co-authored-by: Alexander Harding <2166114+aeharding@users.noreply.github.com> Co-authored-by: Liam DeBeasi <2721089+liamdebeasi@users.noreply.github.com> Co-authored-by: Ren yiwei <85666259+SSDWGG@users.noreply.github.com> Co-authored-by: ptmkenny <github@ptmkenny.com> Co-authored-by: Victor Turansky <victor.turansky@gmail.com> Co-authored-by: chuhuang-itch <chuhuangvio25@gmail.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Syncs the
nextbranch with the following additional commits: