Skip to content

chore: sync with next - #31465

Merged
brandyscarney merged 295 commits into
ionic-modularfrom
chore/sync-next-modular
Sep 29, 2026
Merged

brandyscarney merged 295 commits into
ionic-modularfrom
chore/sync-next-modular

Conversation

@brandyscarney

@brandyscarney brandyscarney commented Sep 21, 2026 •

Copy link
Copy Markdown
Member

ShaneK and others added 30 commits June 18, 2026 23:02
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
```
…er (#31226)

Issue number: resolves #31157 (the RR6 version of this issue, anyway)

---------

## What is the current behavior?

When a parent re-renders with new props for a child rendered inside an
`IonRouterOutlet`, the child's props go stale. `ReactRouterViewStack`
re-syncs the stored `viewItem.reactElement` by iterating
`ionRouterOutlet.props.children` directly with `React.Children.forEach`
and matching each child's `path` against the stored view items.

When the routes are wrapped in a `<Routes>` element (the RR6 equivalent
of the v5 `<Switch>`), that wrapper has no `path` of its own, so nothing
matches and the child element is never refreshed. The stored
`reactElement` keeps its original props, so state passed down from the
parent never reaches the child.

## What is the new behavior?

The sync now runs the outlet's children through `extractRouteChildren`,
which unwraps the `<Routes>` wrapper and returns the actual `<Route>`
elements with their paths. Those match the stored view items, so the
`reactElement` is refreshed on each re-render. This is the same
unwrapping already used on the render path elsewhere in the file, so
direct-child routes and `<Routes>`-wrapped routes now behave the same.
Prop changes from a parent re-render reach the child in both shapes.

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

## Other information

Preview (React Router test app):
- Routes wrapper:
https://ionic-framework-git-fix-sync-props-ionic1.vercel.app/react-router/props-update-routes/child
- Direct children:
https://ionic-framework-git-fix-sync-props-ionic1.vercel.app/react-router/props-update-direct/child
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)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@axe-core%2fplaywright/4.12.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@axe-core%2fplaywright/4.11.3/4.12.1?slim=true)
| 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)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@playwright%2ftest/1.61.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@playwright%2ftest/1.61.0/1.61.1?slim=true)
| devDependencies | patch |
| mcr.microsoft.com/playwright | `v1.61.0` → `v1.61.1` |
![age](https://developer.mend.io/api/mc/badges/age/docker/mcr.microsoft.com%2fplaywright/v1.61.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/mcr.microsoft.com%2fplaywright/v1.61.0/v1.61.1?slim=true)
| 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)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/playwright-core/1.61.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/playwright-core/1.61.0/1.61.1?slim=true)
| devDependencies | patch |

---

### Release Notes

<details>
<summary>dequelabs/axe-core-npm (@&#8203;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 (@&#8203;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 [@&#8203;aiqiaoy](https://redirect.github.com/aiqiaoy) in
[#&#8203;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
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;2458](https://redirect.github.com/actions/checkout/pull/2458)
- Bump flatted from 3.3.1 to 3.4.2 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;2460](https://redirect.github.com/actions/checkout/pull/2460)
- Bump js-yaml from 4.1.0 to 4.2.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;2461](https://redirect.github.com/actions/checkout/pull/2461)
- Bump [@&#8203;actions/core](https://redirect.github.com/actions/core)
and
[@&#8203;actions/tool-cache](https://redirect.github.com/actions/tool-cache)
and Remove uuid by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;2459](https://redirect.github.com/actions/checkout/pull/2459)
- upgrade module to esm and update dependencies by
[@&#8203;aiqiaoy](https://redirect.github.com/aiqiaoy) in
[#&#8203;2463](https://redirect.github.com/actions/checkout/pull/2463)
- Bump the minor-npm-dependencies group across 1 directory with 3
updates by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;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 [@&#8203;aiqiaoy](https://redirect.github.com/aiqiaoy) in
[#&#8203;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
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;2458](https://redirect.github.com/actions/checkout/pull/2458)
- Bump flatted from 3.3.1 to 3.4.2 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;2460](https://redirect.github.com/actions/checkout/pull/2460)
- Bump js-yaml from 4.1.0 to 4.2.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;2461](https://redirect.github.com/actions/checkout/pull/2461)
- Bump [@&#8203;actions/core](https://redirect.github.com/actions/core)
and
[@&#8203;actions/tool-cache](https://redirect.github.com/actions/tool-cache)
and Remove uuid by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;2459](https://redirect.github.com/actions/checkout/pull/2459)
- upgrade module to esm and update dependencies by
[@&#8203;aiqiaoy](https://redirect.github.com/aiqiaoy) in
[#&#8203;2463](https://redirect.github.com/actions/checkout/pull/2463)
- Bump the minor-npm-dependencies group across 1 directory with 3
updates by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;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>
## What is the current behavior?
The default path for imports is `@ionic/angular` and imports the
lazy-loaded angular components. `@ionic/angular/standalone` imports the
standalone components.

## What is the new behavior?
The default path, `@ionic/angular`, imports standalone components.
Lazy-loaded components are imported from `@ionic/angular/lazy`.

## Does this introduce a breaking change?
- [X] Yes
- [ ] No

BREAKING CHANGE: Public import paths have changed.
Applications that use lazy-loaded angular components will need to update
their import paths from `@ionic/angular` to `@ionic/angular/lazy`.
Applications that use standalone angular components will need to update
their import paths from `@ionic/angular/standalone` to `@ionic/angular`.

---------

Co-authored-by: Brandy Smith <brandyscarney@users.noreply.github.com>
# Conflicts:
#	.github/workflows/stencil-nightly.yml
#	packages/angular/common/src/providers/angular-delegate.ts
#	packages/angular/test/base/src/app/standalone/router-link/router-link.component.ts
#	packages/react-router/package-lock.json
#	packages/react/package-lock.json
#	packages/react/package.json
#	packages/vue-router/package-lock.json
#	packages/vue/package-lock.json
#	packages/vue/package.json
major-9.0 dropped the @ionic/angular/standalone subpath export
(standalone is the default entry). The nav-modal-root test comps
came in from main still using the old subpath, breaking the ng21/ng22
zoneless test-app builds.
Sync major-9.0 with main.
# Conflicts:
#	core/package-lock.json
#	core/package.json
#	core/src/components.d.ts
#	core/src/components/datetime/datetime.tsx
## What is the current behavior?
`ion-img` exists solely to lazily load images, from a time when browsers had no native way to do so. That capability is now a standard `<img>` feature, `loading="lazy"`.

## What is the new behavior?
Deprecates the `ion-img` component, with removal planned for v10.

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

The deprecation of `ion-img` in v9 does not affect its functionality. However, the minimum supported Safari and iOS versions are raised to 16, the first major release that supports native `loading="lazy"` on `<img>` elements.

---------

Co-authored-by: Brandy Smith <6577830+brandyscarney@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.0`
→
`8.4.1`](https://renovatebot.com/diffs/npm/@capacitor%2fcore/8.4.0/8.4.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fcore/8.4.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fcore/8.4.0/8.4.1?slim=true)
|

---

### Release Notes

<details>
<summary>ionic-team/capacitor (@&#8203;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
([#&#8203;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
([#&#8203;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>
… improve styling flexibility by removing default color prop (#31261)

Issue number: resolves internal

Co-authored-by: Brandy Carney <6577830+brandyscarney@users.noreply.github.com>
Co-authored-by: Shane <shane.king@outsystems.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)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fcore/8.4.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fcore/8.4.1/8.4.2?slim=true)
|

---

### Release Notes

<details>
<summary>ionic-team/capacitor (@&#8203;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
([#&#8203;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>
Ionitron and others added 9 commits September 23, 2026 18:44
Issue number: N/A (docs-only link fix)

---------

## What is the current behavior?

`docs/component-guide.md` links to Angular source files that no longer
exist, so every link in the "Angular value accessors" and "Interface
Exports" steps returns a 404 on GitHub:

-
`/packages/angular/src/directives/control-value-accessors/{text,numeric,boolean,select}-value-accessor.ts`
(5 links)
- `/packages/angular/src/index.ts`

`packages/angular/src/` now only contains `common/`, `lazy/` and
`standalone/`.

## What is the new behavior?

- The value accessor links point at
`packages/angular/src/lazy/directives/control-value-accessors/`, where
the four directives live (their selectors match the ones the guide
quotes).
- The Angular interface-export step points at
`packages/angular/src/lazy/index.ts` and
`packages/angular/src/standalone/index.ts`, which are the two files that
export the `*CustomEvent` / `*EventDetail` types today.

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

## Other information

Docs only, no code changes. Found and prepared with AI assistance
(Claude Code); I checked every new path exists on `main`.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Issue number: internal

---------

<!-- 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. -->

Currently, the `update-package-lock` job fails the release with `ETARGET
No matching version found for @ionic/core@^9.0.x`. Since 9.0.4 npm
processes publishes asynchronously, so `npm publish` returns before the
version resolves. The registry recorded `@ionic/core` 4s after the
publish step on 9.0.3, but 5m11s on 9.0.4 and 5m10s on 9.0.5, against a
near constant 5m04s gap from publishing to that job, so the last two
releases each missed by about six seconds and needed the job re-run by
hand.

Separately, `purge-cdn-cache` has never done anything. A missing comma
before the `@next` CSS entry made the body invalid JSON, so jsDelivr
rejected every purge with `InvalidContent` while `curl` exited 0 and the
step stayed green. That has been true since #29121.

## What is the new behavior?
<!-- Please describe the behavior or changes that are being added by
this PR. -->

The `Bump Package Lock` step is split into `Resolve Package Locks`,
which retries `lerna exec "npm install --package-lock-only
--prefer-online"` every 15s against a 900s wall clock deadline, and
`Commit Package Locks`, which does the commit and the push. We retry the
install rather than probing with `npm view` first, because the two read
separately cached documents and a passing probe wouldn't mean the
install resolves. The `--prefer-online` flag is required because a
failed install caches the version-less packument locally for 300s, so
plain retries never reach the registry. The bound is wall clock rather
than an attempt count since one attempt costs about 45s and a fixed
count would overrun `timeout-minutes`.

The `purge-cdn-cache` job now runs after `update-package-lock` and gates
on a new `resolved` output rather than the job's result, so a failed
lockfile push still purges but an unresolved version doesn't. The comma
is fixed and the step checks the HTTP status, failing on a 4xx because a
bad payload is otherwise silent, and warning on anything else so a
jsDelivr outage doesn't fail a release.

## Does this introduce a breaking change?

- [ ] Yes
- [X] No

## 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 `release.yml` workflow only runs on a real production release, so I
couldn't test this end to end. I ran each step's shell against stubs for
the failure paths, but the first real signal will be the next release.
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [@stencil/core](https://stenciljs.com/)
([source](https://redirect.github.com/stenciljs/core)) | [`4.45.0` →
`4.45.1`](https://renovatebot.com/diffs/npm/@stencil%2fcore/4.45.0/4.45.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@stencil%2fcore/4.45.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@stencil%2fcore/4.45.0/4.45.1?slim=true)
|

---

### Release Notes

<details>
<summary>stenciljs/core (@&#8203;stencil/core)</summary>

###
[`v4.45.1`](https://redirect.github.com/stenciljs/core/blob/HEAD/CHANGELOG.md#-4451-2026-09-23)

[Compare
Source](https://redirect.github.com/stenciljs/core/compare/v4.45.0...v4.45.1)

##### Bug Fixes

- **compiler:** correct CSS minifier selector-list splitting
([#&#8203;6895](https://redirect.github.com/stenciljs/core/issues/6895))
([332a8fa](https://redirect.github.com/stenciljs/core/commit/332a8fad6358db92b21c8b69a669fd5e4b70d0a4))
- **docs:** derive CEM readonly from getter/setter instead of mutable
([#&#8203;6900](https://redirect.github.com/stenciljs/core/issues/6900))
([1c81131](https://redirect.github.com/stenciljs/core/commit/1c81131f659dd0beaf9bdadd59d5f2a5f895dd38))
- **runtime:** pre-hydrate getter / setter attribute
([#&#8203;6890](https://redirect.github.com/stenciljs/core/issues/6890))
([171d0ce](https://redirect.github.com/stenciljs/core/commit/171d0ce3f0b854cc848a324972c4371b6309743c))
- **ssr:** clear modeResolutionChain on `setMode`. Fixes memory leak
([#&#8203;6903](https://redirect.github.com/stenciljs/core/issues/6903))
([ca9273d](https://redirect.github.com/stenciljs/core/commit/ca9273dfddd60b398725de65559f6a2f355ffe72))

</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:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMDMuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjEwMy4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Issue number: N/A (docs-only link fix)

---------

## What is the current behavior?

Two links in the Vue contributor docs point at sections that don't
exist:

- `docs/vue/testing.md` step 1 links "Build" to `../README.md#building`.
`docs/README.md` has no Building section.
- `packages/vue/README.md` links "test-app directory" to
`test/README.md#syncing-local-changes`. `packages/vue/test/README.md` is
now a two-line pointer with no such section; the syncing steps live in
`docs/vue/testing.md`.

## What is the new behavior?

- "Build" points at the Building section of `packages/vue/README.md`,
which walks through building `core`, `packages/vue` and
`packages/vue-router`, the three projects step 1 names.
- The sync sentence links to `docs/vue/testing.md#syncing-local-changes`
with an absolute GitHub URL, following the Contributing Guide link in
the same README, so it also works on npmjs.com where this README is
published.

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

## Other information

Docs only, no code changes. Found and prepared with AI assistance
(Claude Code); I checked both target headings exist on `main`, and ran a
GitHub Copilot review over the diff.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
)

Issue number: resolves internal

---------

<!-- 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?
The translucent in Ionic theme only applies an opacity to the entire
header.

## What is the new behavior?
On the Ionic theme, a translucent header now uses a progressive blur
instead of a single uniform blur.

Content scrolling behind `ion-header translucent` is heavily blurred
near the top of the header and eases to no blur toward the bottom.

iOS and MD translucent headers are unchanged. The `translucent` API is
unchanged.

## 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. -->

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: ionitron <hi@ionicframework.com>
ShaneK and others added 3 commits September 28, 2026 08:50
Brings in the tokens major release (outsystems-design-tokens v1.3.9 -> v2.3.0)
and the other 6 commits added to next.

Conflict resolutions:
- Snapshots (207 .png): took next's versions as the baseline; these need
  regenerating in CI now that the tokens release changed rendering.
- badge/chip/progress-bar .ionic.scss: kept modular's deletion. These
  components are migrated to CSS custom properties fed by the theme layer,
  so next's token renames in them have no modular equivalent to port.
- ionic.theme.default.scss: kept modular's deletion of $ionic-colors. next
  only tweaked values inside it, and nothing in modular references the map.
- Angular proxies (9 files): kept modular's prop membership and ordering,
  applied next's nullableBooleanAttribute transforms. No 'theme' input
  re-added for the migrated components.
- overlays.ts: imported focusRedirectedElement only; componentOnReady is
  unused in modular, which uses waitForComponentReady.
- core/package.json: took next's build.tokens flags, kept modular's
  build.themes script.
- BREAKING.md: union of both sides' sections, TOC ordered to match the body.
- testing/styles.css: took next's CI font override; the --token-font-family
  hook and the ionic theme both still exist in modular.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These were deleted PR #31043. But PR #31127 accidentally brought them back. I just noticed it. We can leave them as is but we need to make sure to delete them in a separate PR.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes I opened a separate PR to remove them already: #31498

@thetaPC thetaPC left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@brandyscarney
brandyscarney merged commit 879c09c into ionic-modular Sep 29, 2026
54 checks passed
@brandyscarney
brandyscarney deleted the chore/sync-next-modular branch September 29, 2026 13:37

This branch was successfully deployed

1 active deployment
Preview — 25daa67e Deployed Sep 28, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

package: core @ionic/core package

Projects

None yet

Development

Successfully merging this pull request may close these issues.