Skip to content

chore(git): sync with main - #31640

Merged
ShaneK merged 58 commits into
nextfrom
sync-next-with-main
Oct 23, 2026
Merged

ShaneK merged 58 commits into
nextfrom
sync-next-with-main

Conversation

@ShaneK

@ShaneK ShaneK commented Oct 23, 2026

Copy link
Copy Markdown
Member

Sync next with main.

ShaneK and others added 30 commits September 30, 2026 16:40
…nsitions (#31497)

Issue number: resolves #31479

---------

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

Currently, switching tabs or following a link with
`routerDirection="none"` fires none of the four view lifecycle events,
so a page that loads its data in `useIonViewWillEnter` renders empty.
The non-animated branch of `StackManager.transitionPage()` skips
`routerOutlet.commit()` and swaps the page classes itself to avoid
intermediate paints, and core dispatches all four events from inside
`commit()`, so they never fire. A capturing listener on the
`ion-router-outlet` gets nothing either, so it isn't a problem with the
hooks.

## What is the new behavior?

That branch now dispatches the four events itself, in the same order
core's `transition()` uses. The class swap moved to after all four, so
the leaving page is still on screen for its leave events and the
entering page is revealed only once they've fired. That's what core does
on the animated path, where `beforeTransition` un-hides the leaving page
and `ion-page-hidden` only goes back on after `commit()` resolves, and
it matters because `ion-page-hidden` is `display: none`, so a
`useIonViewDidLeave` handler reading `scrollTop` off the outgoing page
was getting 0.

The two dispatch sites that already existed in this file for
out-of-scope and root navigation now share the same helper.

## Does this introduce a breaking change?

- [ ] Yes
- [X] No

## Other information

The events used to come from core here. This path called
`commit(enteringEl, undefined, { duration: 0 })` until
[12f0d5e](12f0d5e)
dropped it to fix a white flash during tab switches, and with no leaving
element core took its `noAnimation` branch and fired the enter pair, so
the enter half of this is a regression from that commit. Putting the
call back would get the events plus focus and z-index handling from core
for free, but it risks the flash it was removed for, so this dispatches
them directly instead.

The patch on the issue fires the enter events unconditionally. This
gates them on the generation check so a superseded transition doesn't
announce an entry, and it skips the leave events when the leaving page
already has `ion-page-hidden`, because two transitions sharing a leaving
element would otherwise run its `useIonViewDidLeave` teardown twice. The
check is the class rather than `isViewVisible` since a nested outlet
marks its leaving page `visibility: hidden` before we get here and still
needs `ionViewDidLeave` to unmount.

Preview:

- [Tab
lifecycle](https://ionic-framework-git-fix-rr6-lifecycle-non-animated-ionic1.vercel.app/react-router/tab-lifecycle/home)
-
[routerDirection="none"](https://ionic-framework-git-fix-rr6-lifecycle-non-animated-ionic1.vercel.app/react-router/direction-none-back/a)

## Current Dev Build
```
9.0.6-dev.11790615145.1d8c56a2
```
…31510)

Issue number: internal

---------

## What is the current behavior?

Currently, when a guard returns a location instead of `false` during a
back navigation, the URL updates to the redirect target but Ionic
renders a different page. A redirect doesn't fail, so the original
navigation never reaches `afterEach` or `onError`. Its staged delta and
params are never cleared and get applied to the redirect target instead.

## What is the new behavior?

The ownership `beforeEach` now discards the state a navigation claimed
when a guard redirects it. We match it through `redirectedFrom`, which
vue-router points at the first location in the redirect chain. That
covers leave guards, which run before our hook, and a guard redirect to
the current page, which fails as a duplicate before reaching
`beforeEach`.

## Does this introduce a breaking change?

- [ ] Yes
- [X] No

## Other information

This was [raised while reviewing
#31364](#31364 (comment))
and left out of scope there.
Issue number: resolves #29785

---------

## What is the current behavior?

Currently, with `createMemoryHistory`, tapping the active tab from a
child page leaves the child on screen. Memory history doesn't store a
position in `history.state`, so the offset `resetTab()` computes is
`NaN` and `router.go(NaN)` goes nowhere. On 9.x it also throws `Cannot
read properties of undefined (reading '0')`.

## What is the new behavior?

When there's no position to traverse, `resetTab()` now replaces the
current entry with the tab's `href`, the same fallback it already uses
after a deep load. It uses the tab's `href` rather than the first route
recorded for the tab, because after a deep load onto a child that first
route is the child itself. Web and hash history always have a numeric
position, so they're unaffected.

## Does this introduce a breaking change?

- [ ] Yes
- [X] No

## Other information

The new tests are in `memory.spec.ts`, since the Vue test app uses web
history and can't reproduce this. They cover resetting from a child
page, resetting after a deep load onto a child, and replacing the child
entry rather than pushing over it.
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [vitest](https://vitest.dev)
([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest))
| [`5.0.2` →
`5.0.3`](https://renovatebot.com/diffs/npm/vitest/5.0.2/5.0.3) |
![age](https://developer.mend.io/api/mc/badges/age/npm/vitest/5.0.3?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vitest/5.0.2/5.0.3?slim=true)
|

---

### Release Notes

<details>
<summary>vitest-dev/vitest (vitest)</summary>

###
[`v5.0.3`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v5.0.3)

[Compare
Source](https://redirect.github.com/vitest-dev/vitest/compare/v5.0.2...v5.0.3)

#####    🐞 Bug Fixes

- Isolate `result.status` between `repeats` runs  -  by
[@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa), **Hiroshi
Ogawa** and **Codex (GPT-6)** in
[#&#8203;11218](https://redirect.github.com/vitest-dev/vitest/issues/11218)
[<samp>(5dbeb)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/5dbebe9e3)
- Don't print an interceptor warning in browser mode  -  by
[@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in
[#&#8203;11377](https://redirect.github.com/vitest-dev/vitest/issues/11377)
[<samp>(15cc0)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/15cc006aa)
- Don't retry when `test.fails` expectedly failed  -  by
[@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa), **Hiroshi
Ogawa** and **Codex (GPT-6)** in
[#&#8203;11219](https://redirect.github.com/vitest-dev/vitest/issues/11219)
[<samp>(b2458)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/b24585f08)
- Scope cache key generators to projects  -  by
[@&#8203;ecoyoung](https://redirect.github.com/ecoyoung) in
[#&#8203;11281](https://redirect.github.com/vitest-dev/vitest/issues/11281)
and
[#&#8203;11301](https://redirect.github.com/vitest-dev/vitest/issues/11301)
[<samp>(92ba7)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/92ba7fc1d)
- **browser**:
- Delay server `listen` until tests start running  -  by
[@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in
[#&#8203;11366](https://redirect.github.com/vitest-dev/vitest/issues/11366)
[<samp>(7d8ed)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7d8ed3e9b)
- Check mock path boundaries  -  by
[@&#8203;saryn17](https://redirect.github.com/saryn17), **Ryosei Sato**
and [@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in
[#&#8203;11361](https://redirect.github.com/vitest-dev/vitest/issues/11361)
and
[#&#8203;11362](https://redirect.github.com/vitest-dev/vitest/issues/11362)
[<samp>(1c388)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/1c3888bce)
- Keep config of browser-consumed environments  -  by
[@&#8203;kasperpeulen](https://redirect.github.com/kasperpeulen) and
**Claude** in
[#&#8203;11378](https://redirect.github.com/vitest-dev/vitest/issues/11378)
[<samp>(aafc0)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/aafc0996f)
- Ignore page crash while cancelling  -  by
[@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in
[#&#8203;11386](https://redirect.github.com/vitest-dev/vitest/issues/11386)
[<samp>(7c367)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7c36748fa)
- `toMatchScreenshot` uses wrong reference on retried tests  -  by
[@&#8203;macarie](https://redirect.github.com/macarie) in
[#&#8203;11393](https://redirect.github.com/vitest-dev/vitest/issues/11393)
[<samp>(c22ab)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/c22aba992)
- **cache**:
- Revalidate imports of cached modules  -  by
[@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in
[#&#8203;11381](https://redirect.github.com/vitest-dev/vitest/issues/11381)
[<samp>(38f98)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/38f98855f)
- **deps**:
- Pin `why-is-node-running` to `3.2.1` to avoid users running into
`ERR_PNPM_TRUST_DOWNGRADE`  -  by
[@&#8203;AriPerkkio](https://redirect.github.com/AriPerkkio) in
[#&#8203;11403](https://redirect.github.com/vitest-dev/vitest/issues/11403)
[<samp>(f6c9a)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/f6c9a4977)
- **expect**:
- Pass current equality testers to `expect.extend` asymmetric matchers
 -  by [@&#8203;hi-ogawa](https://redirect.github.com/hi-ogawa),
**Hiroshi Ogawa** and **Claude** in
[#&#8203;11401](https://redirect.github.com/vitest-dev/vitest/issues/11401)
[<samp>(3e794)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/3e794a96b)
- **jsdom**:
- Support Blob on jsdom 30.1  -  by
[@&#8203;sheremet-va](https://redirect.github.com/sheremet-va) in
[#&#8203;11379](https://redirect.github.com/vitest-dev/vitest/issues/11379)
[<samp>(6c49b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/6c49b7197)
- **pool**:
- Preserve unique pool ids when `groupOrder` is set  -  by
[@&#8203;mtorp](https://redirect.github.com/mtorp) in
[#&#8203;11392](https://redirect.github.com/vitest-dev/vitest/issues/11392)
[<samp>(50312)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/50312ebb4)
- **ui**:
- Split-pane handle overlapping iframe  -  by
[@&#8203;macarie](https://redirect.github.com/macarie) in
[#&#8203;11221](https://redirect.github.com/vitest-dev/vitest/issues/11221)
[<samp>(f91db)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/f91db0dfd)
- **vitest**:
- Remove root temp dir on close  -  by
[@&#8203;abhinav-phi](https://redirect.github.com/abhinav-phi) in
[#&#8203;11248](https://redirect.github.com/vitest-dev/vitest/issues/11248)
[<samp>(7c711)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7c7119cf7)
- **vm**:
- Do not optimize deps from index.html  -  by
[@&#8203;ezefernandezyf](https://redirect.github.com/ezefernandezyf),
**Hiroshi Ogawa** and **Codex (GPT-6)** in
[#&#8203;11329](https://redirect.github.com/vitest-dev/vitest/issues/11329)
and
[#&#8203;11360](https://redirect.github.com/vitest-dev/vitest/issues/11360)
[<samp>(caf28)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/caf2887de)
- Don't reuse scripts across vite environments  -  by
[@&#8203;MO2k4](https://redirect.github.com/MO2k4), **Martin Oehlert**
and **Claude** in
[#&#8203;11395](https://redirect.github.com/vitest-dev/vitest/issues/11395)
[<samp>(346d3)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/346d3896b)

#####     [View changes on
GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v5.0.2...v5.0.3)

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…#31516)

Issue number: resolves #30024

---------

## What is the current behavior?

Currently, `float-elements.css` (and `ionic.bundle.css` /
`utils.bundle.css`, which include it) contains `:host-context([dir=rtl])
.ion-float-*` selectors from the `rtl()` mixin. Lightning CSS, the
default CSS minifier in Vite 8, warns about every one of them. They can
never match anyway, because these stylesheets apply to the document, not
a shadow root.

## What is the new behavior?

The `rtl()` mixin now skips its `:host-context` rule when
`$rtl-use-host-context` is false, and `float-elements.scss` sets it. The
float utilities still flip in RTL through the existing `[dir=rtl]` and
`:dir(rtl)` rules. Component styles are unchanged, since they still need
`:host-context`. A new spec compiles every global stylesheet and asserts
none of them contain `:host-context`.

## Does this introduce a breaking change?

- [ ] Yes
- [X] No

## Other information

The only output change is 10 removed `:host-context` rules in
`float-elements.css`, which also come out of the two bundles that
include it.

## Dev build
```
9.0.7-dev.11790870774.174de601
```
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node)
([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node))
| [`24.19.0` →
`24.19.1`](https://renovatebot.com/diffs/npm/@types%2fnode/24.19.0/24.19.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/24.19.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/24.19.0/24.19.1?slim=true)
|

---

### 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:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMjUuMSIsInVwZGF0ZWRJblZlciI6IjQ0LjEyNS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Issue number: resolves #31484

---------

## What is the current behavior?

Changing the length prop at runtime updates the rendered input boxes but
can leave the public value longer than the rendered inputs.

## What is the new behavior?

The component now reinitializes its values and tab indexes when length
changes, keeping the public value synchronized with the rendered inputs.

- Added a runtime length-change end-to-end regression test.
- ESLint passes for the changed files.
- Targeted Playwright execution is pending because the local browser
executable is unavailable.

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

## Other information

Fixes #31484. No dependency updates or breaking API changes.

---------

Co-authored-by: ShaneK <shane@shanessite.net>
…31517)

Issue number: resolves #31513

---------

## What is the current behavior?

Currently, an `IonRouterOutlet` with `ionPage` that unmounts before its
`componentOnReady` callback fires throws `Cannot read properties of null
(reading 'classList')`, because React has already cleared the ref the
callback reads in `OutletPageManager`.

## What is the new behavior?

We now capture the outlet element when the callback is scheduled and
skip the callback if the ref no longer points to it, so an unmounted
outlet doesn't touch its classes or register with the parent stack.

## Does this introduce a breaking change?

- [ ] Yes
- [X] No

## Other information

The new test page mounts an outlet and removes it in a layout effect,
which reproduces the error on every tap on `main`.

## Current dev build
```
9.0.7-dev.11790871695.14a4111c
```
Issue number: resolves #29648

---------

## What is the current behavior?

Currently, with `experimentalCloseWatcher` enabled, a `CloseWatcher` is
always active, so back does nothing when no overlay or menu is open. In
Capacitor and Cordova apps on Android the flag also breaks the hardware
back button entirely, because Android WebView never sends it to a
`CloseWatcher` and we stopped listening for the native `backbutton`
event.

## What is the new behavior?

The `CloseWatcher` now only exists while a menu or an overlay other than
a toast is open, so back navigates normally otherwise. We also always
listen for `backbutton` again, which browsers never fire, so the
hardware back button works in hybrid apps.

## Does this introduce a breaking change?

- [ ] Yes
- [X] No

## Other information

## Current dev build
```
9.0.7-dev.11790887756.13f9320e
```
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[@capacitor/keyboard](https://redirect.github.com/ionic-team/capacitor-keyboard)
| [`8.0.5` →
`8.0.6`](https://renovatebot.com/diffs/npm/@capacitor%2fkeyboard/8.0.5/8.0.6)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fkeyboard/8.0.6?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fkeyboard/8.0.5/8.0.6?slim=true)
|
|
[@capacitor/status-bar](https://redirect.github.com/ionic-team/capacitor-plugins)
| [`8.0.3` →
`8.0.4`](https://renovatebot.com/diffs/npm/@capacitor%2fstatus-bar/8.0.3/8.0.4)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fstatus-bar/8.0.4?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fstatus-bar/8.0.3/8.0.4?slim=true)
|

---

### Release Notes

<details>
<summary>ionic-team/capacitor-keyboard
(@&#8203;capacitor/keyboard)</summary>

###
[`v8.0.6`](https://redirect.github.com/ionic-team/capacitor-keyboard/blob/HEAD/CHANGELOG.md#806-2026-10-02)

[Compare
Source](https://redirect.github.com/ionic-team/capacitor-keyboard/compare/v8.0.5...v8.0.6)

##### Bug Fixes

- **ios:** silence the protocol property synthesis warnings in
Keyboard.m
([#&#8203;83](https://redirect.github.com/ionic-team/capacitor-keyboard/issues/83))
([f28aef4](https://redirect.github.com/ionic-team/capacitor-keyboard/commit/f28aef4ed8736865232ed0595412e07d2372e024))

</details>

<details>
<summary>ionic-team/capacitor-plugins
(@&#8203;capacitor/status-bar)</summary>

###
[`v8.0.4`](https://redirect.github.com/ionic-team/capacitor-plugins/releases/tag/%40capacitor/status-bar%408.0.4)

[Compare
Source](https://redirect.github.com/ionic-team/capacitor-plugins/compare/@capacitor/status-bar@8.0.3...@capacitor/status-bar@8.0.4)

##### Bug Fixes

- **status-bar:** avoid retain cycle between StatusBar and the bridge
([#&#8203;2569](https://redirect.github.com/ionic-team/capacitor-plugins/issues/2569))
([bf42d23](https://redirect.github.com/ionic-team/capacitor-plugins/commit/bf42d237c1dca1b608dcbedf9c62559feccfb532))

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

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/) |
|---|---|---|---|
| [@stencil/core](https://stenciljs.com/)
([source](https://redirect.github.com/stenciljs/core)) | [`4.45.1` →
`4.45.2`](https://renovatebot.com/diffs/npm/@stencil%2fcore/4.45.1/4.45.2)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@stencil%2fcore/4.45.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@stencil%2fcore/4.45.1/4.45.2?slim=true)
|

---

### Release Notes

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

###
[`v4.45.2`](https://redirect.github.com/stenciljs/core/blob/HEAD/CHANGELOG.md#-4452-2026-10-05)

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

##### Bug Fixes

- **mock-doc:** support force in classList.toggle
([#&#8203;6913](https://redirect.github.com/stenciljs/core/issues/6913))
([992ab54](https://redirect.github.com/stenciljs/core/commit/992ab5466c0b7a0d6ff420f25eb095a42791f0f6))
- **runtime:** `document.hidden` page freezes
([#&#8203;6918](https://redirect.github.com/stenciljs/core/issues/6918))
([5a92cc7](https://redirect.github.com/stenciljs/core/commit/5a92cc7e99de7395c8f8956203bfcb248af9d479))
- **runtime:** form-associated boolean attribute `"false"` parses as
true
([#&#8203;6908](https://redirect.github.com/stenciljs/core/issues/6908))
([f971133](https://redirect.github.com/stenciljs/core/commit/f971133d7d47dce9598c6417e12902942c2053d3))
- **runtime:** keep child host classes on first render after hydration
([#&#8203;6912](https://redirect.github.com/stenciljs/core/issues/6912))
([b6842e9](https://redirect.github.com/stenciljs/core/commit/b6842e9817c16258d7b8b8f2cb6c8420aad76c0e))
- **runtime:** lazy getter/setter `@Prop` writes before first render
([#&#8203;6909](https://redirect.github.com/stenciljs/core/issues/6909))
([e2e5dfc](https://redirect.github.com/stenciljs/core/commit/e2e5dfc059c4c8fedf5258f9ee83d4a091ef20ac))
- **scope-css:** scope rules inside
[@&#8203;container](https://redirect.github.com/container)
([#&#8203;6914](https://redirect.github.com/stenciljs/core/issues/6914))
([bc393d0](https://redirect.github.com/stenciljs/core/commit/bc393d028b86731cccce51d7af417e2186dcf7ac))

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…1533)

Issue number: internal

---------

## What is the current behavior?
<!-- Please describe the current behavior that you are modifying. -->

Every Renovate PR needs a manual approval and merge, including frequent
low-risk bumps like `vitest`, `@types/node` and `github/codeql-action`
that we always merge as-is.

## What is the new behavior?

Minor and patch updates for `vitest`, the Playwright group,
`@types/node`, `github/codeql-action` and `actions/*` now automerge once
CI passes. Majors still open as normal PRs that need a review. A
Playwright bump that changes rendering fails `verify-screenshots`, so
it'll wait for a person the same as before.

`platformAutomerge` is off, so Renovate merges the PR itself and waits
for every check on the branch rather than relying on GitHub's native
auto-merge.

## Does this introduce a breaking change?

- [ ] Yes
- [X] No

## Other information
## What is the current behavior?

Stencil Nightly Build installs the latest
`@stencil/react-output-target`, which changes
`packages/react/package-lock.json`. When it checks for a clean git diff,
the altered package-lock file fails CI.

## What is the new behavior?

- Clean up `packages/react/package-lock.json` along with `package.json`.

## Does this introduce a breaking change?

- [ ] Yes
- [X] No
Issue number: internal

---------

## What is the current behavior?

Currently, leaving a page that hosts a nested `ion-router-outlet` (like
an `ion-tabs` page) only fires leave events on that page, since core
dispatches them with `bubbles: false`. The active tab page never gets
`ionViewWillLeave` or `ionViewDidLeave`, and in Angular it also misses
enter events on the way back. React was fixed as part of the RR6 upgrade
in #30831.

## What is the new behavior?

The nested outlet now fires the parent page's lifecycle events on its
active page in step with the parent. Angular forwards all four events.
Vue forwards leave only, because its tabs outlet already fires enter on
return. Returning to a different tab no longer fires leave a second time
on the page that already left.

## Does this introduce a breaking change?

- [ ] Yes
- [X] No

## Other information

Angular skips its forward when the app already re-dispatched the event
itself (the workaround from #16834), so those apps don't get it twice.
Apps that call custom methods like `tabsWillLeave()` instead will now
run both.

A cancelled swipe back gives the tab page an unpaired
`ionViewWillLeave`, same as core already does for the tabs page.

## Current dev build
```
9.0.7-dev.11791305593.188c8151
```
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [actions/setup-node](https://redirect.github.com/actions/setup-node) |
action | minor | `v7.0.0` → `v7.1.0` |

---

### Release Notes

<details>
<summary>actions/setup-node (actions/setup-node)</summary>

###
[`v7.1.0`](https://redirect.github.com/actions/setup-node/releases/tag/v7.1.0)

[Compare
Source](https://redirect.github.com/actions/setup-node/compare/v7.0.0...v7.1.0)

#### What's Changed

##### Enhancements:

- Add support for mise.toml file by
[@&#8203;gperdomor](https://redirect.github.com/gperdomor) in
[#&#8203;1421](https://redirect.github.com/actions/setup-node/pull/1421)
- Support absolute paths in node-version-file by
[@&#8203;v-mahabaleshwars](https://redirect.github.com/v-mahabaleshwars)
in
[#&#8203;1633](https://redirect.github.com/actions/setup-node/pull/1633)

##### Bug fixes:

- Add Node version validation and manifest fetch retry by
[@&#8203;v-jitenderpalsingh](https://redirect.github.com/v-jitenderpalsingh)
in
[#&#8203;1580](https://redirect.github.com/actions/setup-node/pull/1580)

##### Documentation updates:

- README.md: bump actions/checkout to latest version 7 by
[@&#8203;deining](https://redirect.github.com/deining) in
[#&#8203;1578](https://redirect.github.com/actions/setup-node/pull/1578)
- docs: add V7 ESM migration and NODE_AUTH_TOKEN behavior change by
[@&#8203;v-gowridurgad](https://redirect.github.com/v-gowridurgad) in
[#&#8203;1593](https://redirect.github.com/actions/setup-node/pull/1593)
- Fixed cache recommendation syntax by
[@&#8203;SubJunk](https://redirect.github.com/SubJunk) in
[#&#8203;1603](https://redirect.github.com/actions/setup-node/pull/1603)

##### Dependency updates:

- Update workflow pins and migrate Node matrices to modern versions by
[@&#8203;v-HarithaVattikuti](https://redirect.github.com/v-HarithaVattikuti)
in
[#&#8203;1583](https://redirect.github.com/actions/setup-node/pull/1583)
- Upgrade
[@&#8203;actions/cache](https://redirect.github.com/actions/cache) to
6.2.0 by [@&#8203;philip-gai](https://redirect.github.com/philip-gai) in
[#&#8203;1584](https://redirect.github.com/actions/setup-node/pull/1584)
- Pin [@&#8203;types/node](https://redirect.github.com/types/node) to
v24 by
[@&#8203;v-priyagupta108](https://redirect.github.com/v-priyagupta108)
in
[#&#8203;1585](https://redirect.github.com/actions/setup-node/pull/1585)
- Override brace-expansion to 5.0.8 by
[@&#8203;v-priyagupta108](https://redirect.github.com/v-priyagupta108)
with [@&#8203;Copilot](https://redirect.github.com/Copilot) in
[#&#8203;1599](https://redirect.github.com/actions/setup-node/pull/1599)
- Upgrade actions/checkout from 7.0.0 to 7.0.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;1598](https://redirect.github.com/actions/setup-node/pull/1598)
- Upgrade prettier from 3.8.4 to 3.9.6 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;1590](https://redirect.github.com/actions/setup-node/pull/1590)
- Upgrade [@&#8203;vercel/ncc](https://redirect.github.com/vercel/ncc)
from 0.44.0 to 0.45.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;1610](https://redirect.github.com/actions/setup-node/pull/1610)
- Upgrade pnpm/action-setup from 6.0.9 to 6.0.10 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;1602](https://redirect.github.com/actions/setup-node/pull/1602)
- Upgrade baseline-browser-mapping from 2.10.38 to 2.11.22 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;1629](https://redirect.github.com/actions/setup-node/pull/1629)
- Upgrade
[@&#8203;types/semver](https://redirect.github.com/types/semver) from
7.7.1 to 7.8.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;1616](https://redirect.github.com/actions/setup-node/pull/1616)
- Upgrade
[@&#8203;typescript-eslint/parser](https://redirect.github.com/typescript-eslint/parser)
from 8.62.0 to 8.70.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;1615](https://redirect.github.com/actions/setup-node/pull/1615)
- Upgrade pnpm/action-setup from 6.0.10 to 6.1.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;1631](https://redirect.github.com/actions/setup-node/pull/1631)
- Upgrade jest-each from 30.4.1 to 30.5.2 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;1636](https://redirect.github.com/actions/setup-node/pull/1636)
- Upgrade eslint-plugin-n from 18.1.0 to 18.3.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;1638](https://redirect.github.com/actions/setup-node/pull/1638)
- Update dependencies and add license files by
[@&#8203;v-HarithaVattikuti](https://redirect.github.com/v-HarithaVattikuti)
in
[#&#8203;1642](https://redirect.github.com/actions/setup-node/pull/1642)
- Upgrade eslint from 10.5.0 to 10.11.0 and package.json from 7.0.0 to
7.1.0 by [@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;1635](https://redirect.github.com/actions/setup-node/pull/1635)

#### New Contributors

-
[@&#8203;v-jitenderpalsingh](https://redirect.github.com/v-jitenderpalsingh)
made their first contribution in
[#&#8203;1580](https://redirect.github.com/actions/setup-node/pull/1580)
- [@&#8203;philip-gai](https://redirect.github.com/philip-gai) made
their first contribution in
[#&#8203;1584](https://redirect.github.com/actions/setup-node/pull/1584)
- [@&#8203;gperdomor](https://redirect.github.com/gperdomor) made their
first contribution in
[#&#8203;1421](https://redirect.github.com/actions/setup-node/pull/1421)
- [@&#8203;SubJunk](https://redirect.github.com/SubJunk) made their
first contribution in
[#&#8203;1603](https://redirect.github.com/actions/setup-node/pull/1603)

**Full Changelog**:
<actions/setup-node@v7.0.0...v7.1.0>

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - "every weekday before 11am"
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **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:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMzQuMSIsInVwZGF0ZWRJblZlciI6IjQ0LjEzNC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…lar/test/apps/ng19 (#31551)

Bumps [form-data](https://github.com/form-data/form-data) from 4.0.1 to
4.0.6.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/form-data/form-data/blob/master/CHANGELOG.md">form-data's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/form-data/form-data/compare/v4.0.5...v4.0.6">v4.0.6</a>
- 2026-06-12</h2>
<h3>Commits</h3>
<ul>
<li>[Fix] escape CR, LF, and <code>&quot;</code> in field names and
filenames <a
href="https://github.com/form-data/form-data/commit/8dff42c6da654ed4e7ad4acb7f8ccd3831217c99"><code>8dff42c</code></a></li>
<li>[Dev Deps] update <code>@ljharb/eslint-config</code>,
<code>auto-changelog</code>, <code>tape</code> <a
href="https://github.com/form-data/form-data/commit/f31d21ef10bf46e46344c3ee4f99acbef6be43e1"><code>f31d21e</code></a></li>
<li>[Deps] update <code>hasown</code>, <code>mime-types</code> <a
href="https://github.com/form-data/form-data/commit/92ae0eb5da94d6f01925d5f4fcffb2a1e50ed7cd"><code>92ae0eb</code></a></li>
<li>[Dev Deps] update <code>js-randomness-predictor</code> <a
href="https://github.com/form-data/form-data/commit/67b0f65c2e0b065a511d42227d35e4d367644e97"><code>67b0f65</code></a></li>
</ul>
<h2><a
href="https://github.com/form-data/form-data/compare/v4.0.4...v4.0.5">v4.0.5</a>
- 2025-11-17</h2>
<h3>Commits</h3>
<ul>
<li>[Tests] Switch to newer v8 prediction library; enable node 24
testing <a
href="https://github.com/form-data/form-data/commit/16e00765342106876f98a1c9703314006c9e937a"><code>16e0076</code></a></li>
<li>[Dev Deps] update <code>@ljharb/eslint-config</code>,
<code>eslint</code> <a
href="https://github.com/form-data/form-data/commit/5822467f0ec21f6ad613c1c90856375e498793c7"><code>5822467</code></a></li>
<li>[Fix] set Symbol.toStringTag in the proper place <a
href="https://github.com/form-data/form-data/commit/76d0dee43933b5e167f7f09e5d9cbbd1cf911aa7"><code>76d0dee</code></a></li>
</ul>
<h2><a
href="https://github.com/form-data/form-data/compare/v4.0.3...v4.0.4">v4.0.4</a>
- 2025-07-16</h2>
<h3>Commits</h3>
<ul>
<li>[meta] add <code>auto-changelog</code> <a
href="https://github.com/form-data/form-data/commit/811f68282fab0315209d0e2d1c44b6c32ea0d479"><code>811f682</code></a></li>
<li>[Tests] handle predict-v8-randomness failures in node &lt; 17 and
node &gt; 23 <a
href="https://github.com/form-data/form-data/commit/1d11a76434d101f22fdb26b8aef8615f28b98402"><code>1d11a76</code></a></li>
<li>[Fix] Switch to using <code>crypto</code> random for boundary values
<a
href="https://github.com/form-data/form-data/commit/3d1723080e6577a66f17f163ecd345a21d8d0fd0"><code>3d17230</code></a></li>
<li>[Tests] fix linting errors <a
href="https://github.com/form-data/form-data/commit/5e340800b5f8914213e4e0378c084aae71cfd73a"><code>5e34080</code></a></li>
<li>[meta] actually ensure the readme backup isn’t published <a
href="https://github.com/form-data/form-data/commit/316c82ba93fd4985af757b771b9a1f26d3b709ef"><code>316c82b</code></a></li>
<li>[Dev Deps] update <code>@ljharb/eslint-config</code> <a
href="https://github.com/form-data/form-data/commit/58c25d76406a5b0dfdf54045cf252563f2bbda8d"><code>58c25d7</code></a></li>
<li>[meta] fix readme capitalization <a
href="https://github.com/form-data/form-data/commit/2300ca19595b0ee96431e868fe2a40db79e41c61"><code>2300ca1</code></a></li>
</ul>
<h2><a
href="https://github.com/form-data/form-data/compare/v4.0.2...v4.0.3">v4.0.3</a>
- 2025-06-05</h2>
<h3>Fixed</h3>
<ul>
<li>[Fix] <code>append</code>: avoid a crash on nullish values <a
href="https://redirect.github.com/form-data/form-data/issues/577"><code>[#577](https://github.com/form-data/form-data/issues/577)</code></a></li>
</ul>
<h3>Commits</h3>
<ul>
<li>[eslint] use a shared config <a
href="https://github.com/form-data/form-data/commit/426ba9ac440f95d1998dac9a5cd8d738043b048f"><code>426ba9a</code></a></li>
<li>[eslint] fix some spacing issues <a
href="https://github.com/form-data/form-data/commit/20941917f0e9487e68c564ebc3157e23609e2939"><code>2094191</code></a></li>
<li>[Refactor] use <code>hasown</code> <a
href="https://github.com/form-data/form-data/commit/81ab41b46fdf34f5d89d7ff30b513b0925febfaa"><code>81ab41b</code></a></li>
<li>[Fix] validate boundary type in <code>setBoundary()</code> method <a
href="https://github.com/form-data/form-data/commit/8d8e4693093519f7f18e3c597d1e8df8c493de9e"><code>8d8e469</code></a></li>
<li>[Tests] add tests to check the behavior of <code>getBoundary</code>
with non-strings <a
href="https://github.com/form-data/form-data/commit/837b8a1f7562bfb8bda74f3fc538adb7a5858995"><code>837b8a1</code></a></li>
<li>[Dev Deps] remove unused deps <a
href="https://github.com/form-data/form-data/commit/870e4e665935e701bf983a051244ab928e62d58e"><code>870e4e6</code></a></li>
<li>[meta] remove local commit hooks <a
href="https://github.com/form-data/form-data/commit/e6e83ccb545a5619ed6cd04f31d5c2f655eb633e"><code>e6e83cc</code></a></li>
<li>[Dev Deps] update <code>eslint</code> <a
href="https://github.com/form-data/form-data/commit/4066fd6f65992b62fa324a6474a9292a4f88c916"><code>4066fd6</code></a></li>
<li>[meta] fix scripts to use prepublishOnly <a
href="https://github.com/form-data/form-data/commit/c4bbb13c0ef669916657bc129341301b1d331d75"><code>c4bbb13</code></a></li>
</ul>
<h2><a
href="https://github.com/form-data/form-data/compare/v4.0.1...v4.0.2">v4.0.2</a>
- 2025-02-14</h2>
<h3>Merged</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/form-data/form-data/commit/64190db548c0179e37206858e39f27cf513e9435"><code>64190db</code></a>
v4.0.6</li>
<li><a
href="https://github.com/form-data/form-data/commit/92ae0eb5da94d6f01925d5f4fcffb2a1e50ed7cd"><code>92ae0eb</code></a>
[Deps] update <code>hasown</code>, <code>mime-types</code></li>
<li><a
href="https://github.com/form-data/form-data/commit/f31d21ef10bf46e46344c3ee4f99acbef6be43e1"><code>f31d21e</code></a>
[Dev Deps] update <code>@ljharb/eslint-config</code>,
<code>auto-changelog</code>, <code>tape</code></li>
<li><a
href="https://github.com/form-data/form-data/commit/8dff42c6da654ed4e7ad4acb7f8ccd3831217c99"><code>8dff42c</code></a>
[Fix] escape CR, LF, and <code>&quot;</code> in field names and
filenames</li>
<li><a
href="https://github.com/form-data/form-data/commit/67b0f65c2e0b065a511d42227d35e4d367644e97"><code>67b0f65</code></a>
[Dev Deps] update <code>js-randomness-predictor</code></li>
<li><a
href="https://github.com/form-data/form-data/commit/68ff7dda8834d6de095a7008cef0e03bc252ca98"><code>68ff7dd</code></a>
v4.0.5</li>
<li><a
href="https://github.com/form-data/form-data/commit/5822467f0ec21f6ad613c1c90856375e498793c7"><code>5822467</code></a>
[Dev Deps] update <code>@ljharb/eslint-config</code>,
<code>eslint</code></li>
<li><a
href="https://github.com/form-data/form-data/commit/76d0dee43933b5e167f7f09e5d9cbbd1cf911aa7"><code>76d0dee</code></a>
[Fix] set Symbol.toStringTag in the proper place</li>
<li><a
href="https://github.com/form-data/form-data/commit/16e00765342106876f98a1c9703314006c9e937a"><code>16e0076</code></a>
[Tests] Switch to newer v8 prediction library; enable node 24
testing</li>
<li><a
href="https://github.com/form-data/form-data/commit/41996f5ac73a867046d48512cab62e64fc846dad"><code>41996f5</code></a>
v4.0.4</li>
<li>Additional commits viewable in <a
href="https://github.com/form-data/form-data/compare/v4.0.1...v4.0.6">compare
view</a></li>
</ul>
</details>
<details>
<summary>Install script changes</summary>
<p>This version modifies <code>prepublish</code> script that runs during
installation. Review the package contents before updating.</p>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=form-data&package-manager=npm_and_yarn&previous-version=4.0.1&new-version=4.0.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/ionic-team/ionic-framework/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [handlebars](https://github.com/handlebars-lang/handlebars.js)
from 4.7.7 to 4.7.10.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/handlebars-lang/handlebars.js/releases">handlebars's
releases</a>.</em></p>
<blockquote>
<h2>v4.7.10</h2>
<ul>
<li>security: Sanitize the source map URL when minifying - f37c599</li>
<li>security: Iterate lazily in #each and strip whitespace in linear
time - 812c226</li>
<li>security: Escape <code>&lt;!--</code> and <code>&lt;script</code> in
precompiled output - 609d1b1 GHSA-xw65-4hp5-5hc7</li>
<li>security: Don't trust special properties on context data - ceec388
GHSA-p8wg-vrv2-v86f</li>
<li>security: Only compile partials that are template strings -
c28ee7a</li>
<li>security: Only dispatch known node types in the Compiler and Visitor
- 7d501a5</li>
<li>security: Validate AST values in the compiler instead of the parser
- 703fdcc GHSA-8r5x-fm3f-whwj</li>
<li>Clarify that --root does not restrict filesystem access -
0fcf25c</li>
<li>Bump minimist to ^1.2.8 - ea8ed82</li>
<li>Fix Ruby component publishing documentation - d069c1c</li>
<li>Fix Composer component definition - 6714e07</li>
</ul>
<p>Compatibility notes:</p>
<ul>
<li><code>{{#each}}</code> iterates iterables such as <code>Map</code>,
<code>Set</code> and generators lazily, like <code>for...of</code>,
instead of
copying them into an array first. Values added to the iterable while the
block renders are now visited too.</li>
</ul>
<p><a
href="https://github.com/handlebars-lang/handlebars.js/compare/v4.7.9...v4.7.10">Commits</a></p>
<h2>v4.7.9</h2>
<ul>
<li>fix: enable shell mode for spawn to resolve Windows EINVAL issue -
e0137c2</li>
<li>fix type &quot;RuntimeOptions&quot; also accepting string partials -
eab1d14</li>
<li>feat(types): set <code>hash</code> to be a <code>Record&lt;string,
any&gt;</code> - de4414d</li>
<li>fix non-contiguous program indices - 4512766</li>
<li>refactor: rename i to startPartIndex - e497a35</li>
<li>security: fix security issues - 68d8df5
<ul>
<li><a
href="https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-2w6w-674q-4c4q">https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-2w6w-674q-4c4q</a></li>
<li><a
href="https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-3mfm-83xf-c92r">https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-3mfm-83xf-c92r</a></li>
<li><a
href="https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-xhpv-hc6g-r9c6">https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-xhpv-hc6g-r9c6</a></li>
<li><a
href="https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-xjpj-3mr7-gcpf">https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-xjpj-3mr7-gcpf</a></li>
<li><a
href="https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-9cx6-37pm-9jff">https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-9cx6-37pm-9jff</a></li>
<li><a
href="https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-2qvq-rjwj-gvw9">https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-2qvq-rjwj-gvw9</a></li>
<li><a
href="https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-7rx3-28cr-v5wh">https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-7rx3-28cr-v5wh</a></li>
<li><a
href="https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-442j-39wm-28r2">https://github.com/handlebars-lang/handlebars.js/security/advisories/GHSA-442j-39wm-28r2</a></li>
</ul>
</li>
</ul>
<p><a
href="https://github.com/handlebars-lang/handlebars.js/compare/v4.7.8...v4.7.9">Commits</a></p>
<h2>v4.7.8</h2>
<ul>
<li>Make library compatible with workers (<a
href="https://redirect.github.com/handlebars-lang/handlebars.js/issues/1894">#1894</a>)
- 3d3796c</li>
<li>Don't rely on Node.js global object (<a
href="https://redirect.github.com/handlebars-lang/handlebars.js/issues/1776">#1776</a>)
- 2954e7e</li>
<li>Fix compiling of each block params in strict mode (<a
href="https://redirect.github.com/handlebars-lang/handlebars.js/issues/1855">#1855</a>)
- 30dbf04</li>
<li>Fix rollup warning when importing Handlebars as ESM - 03d387b</li>
<li>Fix bundler issue with webpack 5 (<a
href="https://redirect.github.com/handlebars-lang/handlebars.js/issues/1862">#1862</a>)
- c6c6bbb</li>
<li>Use https instead of git for mustache submodule - 88ac068</li>
</ul>
<p><a
href="https://github.com/handlebars-lang/handlebars.js/compare/v4.7.7...v4.7.8">Commits</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/handlebars-lang/handlebars.js/blob/v4.7.10/release-notes.md">handlebars's
changelog</a>.</em></p>
<blockquote>
<h2>v4.7.10 - October 5th, 2026</h2>
<ul>
<li>security: Sanitize the source map URL when minifying - f37c599</li>
<li>security: Iterate lazily in #each and strip whitespace in linear
time - 812c226</li>
<li>security: Escape <code>&lt;!--</code> and <code>&lt;script</code> in
precompiled output - 609d1b1 GHSA-xw65-4hp5-5hc7</li>
<li>security: Don't trust special properties on context data - ceec388
GHSA-p8wg-vrv2-v86f</li>
<li>security: Only compile partials that are template strings -
c28ee7a</li>
<li>security: Only dispatch known node types in the Compiler and Visitor
- 7d501a5</li>
<li>security: Validate AST values in the compiler instead of the parser
- 703fdcc GHSA-8r5x-fm3f-whwj</li>
<li>Clarify that --root does not restrict filesystem access -
0fcf25c</li>
<li>Bump minimist to ^1.2.8 - ea8ed82</li>
<li>Fix Ruby component publishing documentation - d069c1c</li>
<li>Fix Composer component definition - 6714e07</li>
</ul>
<p>Compatibility notes:</p>
<ul>
<li><code>{{#each}}</code> iterates iterables such as <code>Map</code>,
<code>Set</code> and generators lazily, like <code>for...of</code>,
instead of
copying them into an array first. Values added to the iterable while the
block renders are now visited too.</li>
</ul>
<p><a
href="https://github.com/handlebars-lang/handlebars.js/compare/v4.7.9...v4.7.10">Commits</a></p>
<h2>v4.7.9 - March 26th, 2026</h2>
<ul>
<li>fix: enable shell mode for spawn to resolve Windows EINVAL issue -
e0137c2</li>
<li>fix type &quot;RuntimeOptions&quot; also accepting string partials -
eab1d14</li>
<li>feat(types): set <code>hash</code> to be a <code>Record&lt;string,
any&gt;</code> - de4414d</li>
<li>fix non-contiguous program indices - 4512766</li>
<li>refactor: rename i to startPartIndex - e497a35</li>
<li>security: fix security issues - 68d8df5</li>
</ul>
<p><a
href="https://github.com/handlebars-lang/handlebars.js/compare/v4.7.8...v4.7.9">Commits</a></p>
<h2>v4.7.8 - July 27th, 2023</h2>
<ul>
<li>Make library compatible with workers (<a
href="https://redirect.github.com/handlebars-lang/handlebars.js/issues/1894">#1894</a>)
- 3d3796c</li>
<li>Don't rely on Node.js global object (<a
href="https://redirect.github.com/handlebars-lang/handlebars.js/issues/1776">#1776</a>)
- 2954e7e</li>
<li>Fix compiling of each block params in strict mode (<a
href="https://redirect.github.com/handlebars-lang/handlebars.js/issues/1855">#1855</a>)
- 30dbf04</li>
<li>Fix rollup warning when importing Handlebars as ESM - 03d387b</li>
<li>Fix bundler issue with webpack 5 (<a
href="https://redirect.github.com/handlebars-lang/handlebars.js/issues/1862">#1862</a>)
- c6c6bbb</li>
<li>Use https instead of git for mustache submodule - 88ac068</li>
</ul>
<p><a
href="https://github.com/handlebars-lang/handlebars.js/compare/v4.7.7...v4.7.8">Commits</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/handlebars-lang/handlebars.js/commit/45ce15255e0f430ac6d19742b18e316b7539264e"><code>45ce152</code></a>
v4.7.10</li>
<li><a
href="https://github.com/handlebars-lang/handlebars.js/commit/e47b2365d5656ab5689ae226aef90a485a90c5d8"><code>e47b236</code></a>
Update release notes</li>
<li><a
href="https://github.com/handlebars-lang/handlebars.js/commit/f37c599de9187715eb1e9afedcb2d80c175487a0"><code>f37c599</code></a>
Sanitize the source map URL when minifying</li>
<li><a
href="https://github.com/handlebars-lang/handlebars.js/commit/812c2260cb8794ef4ab63a7f1d946431112560ca"><code>812c226</code></a>
Iterate lazily in #each and strip whitespace in linear time</li>
<li><a
href="https://github.com/handlebars-lang/handlebars.js/commit/609d1b11c833c9a3e00f56f2f34d22f425446725"><code>609d1b1</code></a>
Escape <code>&lt;!--</code> and <code>&lt;script</code> in precompiled
output</li>
<li><a
href="https://github.com/handlebars-lang/handlebars.js/commit/ceec388abe1d1aac8f6369860d5f390fa71ef4fa"><code>ceec388</code></a>
Don't trust special properties on context data</li>
<li><a
href="https://github.com/handlebars-lang/handlebars.js/commit/c28ee7adb312308e0fe26f4d435a481be5e1ff98"><code>c28ee7a</code></a>
Only compile partials that are template strings</li>
<li><a
href="https://github.com/handlebars-lang/handlebars.js/commit/7d501a5af2ac3aa9ac788a8889dbe419849e46f1"><code>7d501a5</code></a>
Only dispatch known node types in the Compiler and Visitor</li>
<li><a
href="https://github.com/handlebars-lang/handlebars.js/commit/703fdcc5fd6cc8d1cc0c33cc19de40c467c4b8d2"><code>703fdcc</code></a>
Validate AST values in the compiler instead of the parser</li>
<li><a
href="https://github.com/handlebars-lang/handlebars.js/commit/0fcf25c63038b43e78e17adbf029cf073e80554d"><code>0fcf25c</code></a>
Clarify that --root does not restrict filesystem access</li>
<li>Additional commits viewable in <a
href="https://github.com/handlebars-lang/handlebars.js/compare/v4.7.7...v4.7.10">compare
view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by <a
href="https://www.npmjs.com/~jaylinski">jaylinski</a>, a new releaser
for handlebars since your current version.</p>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=handlebars&package-manager=npm_and_yarn&previous-version=4.7.7&new-version=4.7.10)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/ionic-team/ionic-framework/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ular/test/apps/ng19 (#31548)

Bumps [webpack](https://github.com/webpack/webpack) from 5.61.0 to
5.111.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/webpack/webpack/releases">webpack's
releases</a>.</em></p>
<blockquote>
<h2>v5.111.1</h2>
<h3>Patch Changes</h3>
<ul>
<li>
<p>Throw on a write to an imported binding without losing concatenation.
(by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22141">#22141</a>)</p>
</li>
<li>
<p>Keep the <code>&lt;/html&gt;</code> a page was written with, whatever
opened the element. (by <a
href="https://github.com/aryanraj45"><code>@​aryanraj45</code></a> in <a
href="https://redirect.github.com/webpack/webpack/pull/22103">#22103</a>)</p>
</li>
<li>
<p>Look an attribute up by what its value decodes to, not how it was
spelled. (by <a
href="https://github.com/aryanraj45"><code>@​aryanraj45</code></a> in <a
href="https://redirect.github.com/webpack/webpack/pull/22107">#22107</a>)</p>
</li>
<li>
<p>Minify HTML by what a value says rather than how it was spelled. (by
<a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22154">#22154</a>)</p>
</li>
<li>
<p>Follow HTML template form and frameset rules during tree
construction. (by <a
href="https://github.com/apps/dependabot"><code>@​dependabot</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22129">#22129</a>)</p>
</li>
<li>
<p>Keep the whitespace <code>calc()</code> needs around <code>+</code>
and <code>-</code> in a custom property. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22150">#22150</a>)</p>
</li>
<li>
<p>Keep an attribute's delimiter and spell its value back where quoting
is frozen. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22119">#22119</a>)</p>
</li>
<li>
<p>Rewrite an attribute value the source spelled with character
references. (by <a
href="https://github.com/aryanraj45"><code>@​aryanraj45</code></a> in <a
href="https://redirect.github.com/webpack/webpack/pull/22110">#22110</a>)</p>
</li>
<li>
<p>Unquote an HTML attribute value carrying a vertical tab. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22162">#22162</a>)</p>
</li>
<li>
<p>Keep a shadow's spread and canonicalize a merged selector list. (by
<a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22101">#22101</a>)</p>
</li>
<li>
<p>Leave out an implied tag and merge adjacent runs on the first pass.
(by <a
href="https://github.com/aryanraj45"><code>@​aryanraj45</code></a> in <a
href="https://redirect.github.com/webpack/webpack/pull/22121">#22121</a>)</p>
</li>
<li>
<p>Minify in one pass what a second pass of the CSS minifier used to
find. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22106">#22106</a>)</p>
</li>
<li>
<p>Cover the CSS lookup tables no stylesheet in the corpus reaches. (by
<a href="https://github.com/aryanraj45"><code>@​aryanraj45</code></a> in
<a
href="https://redirect.github.com/webpack/webpack/pull/22126">#22126</a>)</p>
</li>
<li>
<p>Keep <code>initial</code> where an engine reads the property's
initial keyword apart. (by <a
href="https://github.com/aryanraj45"><code>@​aryanraj45</code></a> in <a
href="https://redirect.github.com/webpack/webpack/pull/22128">#22128</a>)</p>
</li>
<li>
<p>Join the CSS rules a cut leaves adjacent, and keep a value an escape
ate. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22108">#22108</a>)</p>
</li>
<li>
<p>Drop the dead CSS a cut leaves, and join more of the blocks that
print alike. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22111">#22111</a>)</p>
</li>
<li>
<p>Run the printer equivalence suite against Firefox as well as Chrome.
(by <a
href="https://github.com/aryanraj45"><code>@​aryanraj45</code></a> in <a
href="https://redirect.github.com/webpack/webpack/pull/22151">#22151</a>)</p>
</li>
<li>
<p>Finish in one CSS pass the joins, drops and collapses left to a
second. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22117">#22117</a>)</p>
</li>
<li>
<p>Move the context module sources into <code>lib/context/</code>. (by
<a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22115">#22115</a>)</p>
</li>
<li>
<p>Declare loader context types in JSDoc instead of hand-written
<code>.d.ts</code> files. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22116">#22116</a>)</p>
</li>
<li>
<p>Emit a failing module's stack relative, and name what a tap failed
with. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22122">#22122</a>)</p>
</li>
<li>
<p>Finish in one CSS pass the drops, layer gathers and joins left to a
second. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22120">#22120</a>)</p>
</li>
<li>
<p>Speed up CSS parsing by stepping over dropped selector preludes in
bytes. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22142">#22142</a>)</p>
</li>
<li>
<p>Record hoisted, module and block declarations while parsing, not by
re-walking. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22147">#22147</a>)</p>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/webpack/webpack/blob/main/CHANGELOG.md">webpack's
changelog</a>.</em></p>
<blockquote>
<h2>5.111.1</h2>
<h3>Patch Changes</h3>
<ul>
<li>
<p>Throw on a write to an imported binding without losing concatenation.
(by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22141">#22141</a>)</p>
</li>
<li>
<p>Keep the <code>&lt;/html&gt;</code> a page was written with, whatever
opened the element. (by <a
href="https://github.com/aryanraj45"><code>@​aryanraj45</code></a> in <a
href="https://redirect.github.com/webpack/webpack/pull/22103">#22103</a>)</p>
</li>
<li>
<p>Look an attribute up by what its value decodes to, not how it was
spelled. (by <a
href="https://github.com/aryanraj45"><code>@​aryanraj45</code></a> in <a
href="https://redirect.github.com/webpack/webpack/pull/22107">#22107</a>)</p>
</li>
<li>
<p>Minify HTML by what a value says rather than how it was spelled. (by
<a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22154">#22154</a>)</p>
</li>
<li>
<p>Follow HTML template form and frameset rules during tree
construction. (by <a
href="https://github.com/apps/dependabot"><code>@​dependabot</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22129">#22129</a>)</p>
</li>
<li>
<p>Keep the whitespace <code>calc()</code> needs around <code>+</code>
and <code>-</code> in a custom property. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22150">#22150</a>)</p>
</li>
<li>
<p>Keep an attribute's delimiter and spell its value back where quoting
is frozen. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22119">#22119</a>)</p>
</li>
<li>
<p>Rewrite an attribute value the source spelled with character
references. (by <a
href="https://github.com/aryanraj45"><code>@​aryanraj45</code></a> in <a
href="https://redirect.github.com/webpack/webpack/pull/22110">#22110</a>)</p>
</li>
<li>
<p>Unquote an HTML attribute value carrying a vertical tab. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22162">#22162</a>)</p>
</li>
<li>
<p>Keep a shadow's spread and canonicalize a merged selector list. (by
<a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22101">#22101</a>)</p>
</li>
<li>
<p>Leave out an implied tag and merge adjacent runs on the first pass.
(by <a
href="https://github.com/aryanraj45"><code>@​aryanraj45</code></a> in <a
href="https://redirect.github.com/webpack/webpack/pull/22121">#22121</a>)</p>
</li>
<li>
<p>Minify in one pass what a second pass of the CSS minifier used to
find. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22106">#22106</a>)</p>
</li>
<li>
<p>Cover the CSS lookup tables no stylesheet in the corpus reaches. (by
<a href="https://github.com/aryanraj45"><code>@​aryanraj45</code></a> in
<a
href="https://redirect.github.com/webpack/webpack/pull/22126">#22126</a>)</p>
</li>
<li>
<p>Keep <code>initial</code> where an engine reads the property's
initial keyword apart. (by <a
href="https://github.com/aryanraj45"><code>@​aryanraj45</code></a> in <a
href="https://redirect.github.com/webpack/webpack/pull/22128">#22128</a>)</p>
</li>
<li>
<p>Join the CSS rules a cut leaves adjacent, and keep a value an escape
ate. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22108">#22108</a>)</p>
</li>
<li>
<p>Drop the dead CSS a cut leaves, and join more of the blocks that
print alike. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22111">#22111</a>)</p>
</li>
<li>
<p>Run the printer equivalence suite against Firefox as well as Chrome.
(by <a
href="https://github.com/aryanraj45"><code>@​aryanraj45</code></a> in <a
href="https://redirect.github.com/webpack/webpack/pull/22151">#22151</a>)</p>
</li>
<li>
<p>Finish in one CSS pass the joins, drops and collapses left to a
second. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22117">#22117</a>)</p>
</li>
<li>
<p>Move the context module sources into <code>lib/context/</code>. (by
<a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22115">#22115</a>)</p>
</li>
<li>
<p>Declare loader context types in JSDoc instead of hand-written
<code>.d.ts</code> files. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22116">#22116</a>)</p>
</li>
<li>
<p>Emit a failing module's stack relative, and name what a tap failed
with. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22122">#22122</a>)</p>
</li>
<li>
<p>Finish in one CSS pass the drops, layer gathers and joins left to a
second. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22120">#22120</a>)</p>
</li>
<li>
<p>Speed up CSS parsing by stepping over dropped selector preludes in
bytes. (by <a
href="https://github.com/alexander-akait"><code>@​alexander-akait</code></a>
in <a
href="https://redirect.github.com/webpack/webpack/pull/22142">#22142</a>)</p>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/webpack/webpack/commit/5a106753839fd7e1b86138c3a5f6b348341147a7"><code>5a10675</code></a>
chore(release): new release (<a
href="https://redirect.github.com/webpack/webpack/issues/22105">#22105</a>)</li>
<li><a
href="https://github.com/webpack/webpack/commit/9c448c4ca3b5296849453384f49f4032b01345d6"><code>9c448c4</code></a>
test: consolidate loose harness files under test/harness (<a
href="https://redirect.github.com/webpack/webpack/issues/22163">#22163</a>)</li>
<li><a
href="https://github.com/webpack/webpack/commit/a947604b3aa89eac798ff15bdf9424eb081a81bc"><code>a947604</code></a>
fix(html): unquote an attribute value carrying a vertical tab (<a
href="https://redirect.github.com/webpack/webpack/issues/22162">#22162</a>)</li>
<li><a
href="https://github.com/webpack/webpack/commit/db556f33259354a428e03410382ac6dcfe6b3f5d"><code>db556f3</code></a>
test: run the printer equivalence suite against Gecko in CI (<a
href="https://redirect.github.com/webpack/webpack/issues/22155">#22155</a>)</li>
<li><a
href="https://github.com/webpack/webpack/commit/d174cdf97ab08afc12b480ca87baa34b380cb5d0"><code>d174cdf</code></a>
perf(css): drop a fallback every browserslist target reads past (<a
href="https://redirect.github.com/webpack/webpack/issues/22158">#22158</a>)</li>
<li><a
href="https://github.com/webpack/webpack/commit/39f14f200e21a20adf27e2b41d03b15460185076"><code>39f14f2</code></a>
refactor(javascript): declare block bindings from the parse (<a
href="https://redirect.github.com/webpack/webpack/issues/22161">#22161</a>)</li>
<li><a
href="https://github.com/webpack/webpack/commit/08354116e89e655ec771603dbca2e9bba7627dd8"><code>0835411</code></a>
test: move suite drivers into test/templates (<a
href="https://redirect.github.com/webpack/webpack/issues/22159">#22159</a>)</li>
<li><a
href="https://github.com/webpack/webpack/commit/b48cd775eed23d1fbcc26fd59a101a0cf810de9c"><code>b48cd77</code></a>
fix(html): minify by what a value says rather than how it was spelled
(<a
href="https://redirect.github.com/webpack/webpack/issues/22154">#22154</a>)</li>
<li><a
href="https://github.com/webpack/webpack/commit/a774f10fc08fbabf9ad5b462128ab8e5e97e499e"><code>a774f10</code></a>
test: define the webpack major instead of bundling package.json (<a
href="https://redirect.github.com/webpack/webpack/issues/22160">#22160</a>)</li>
<li><a
href="https://github.com/webpack/webpack/commit/4b2eed0bd9680c347876b239903679abc6482da1"><code>4b2eed0</code></a>
docs: report only what needs a decision while watching a PR (<a
href="https://redirect.github.com/webpack/webpack/issues/22156">#22156</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/webpack/webpack/compare/v5.61.0...v5.111.1">compare
view</a></li>
</ul>
</details>
<details>
<summary>Maintainer changes</summary>
<p>This version was pushed to npm by <a
href="https://www.npmjs.com/~GitHub%20Actions">GitHub Actions</a>, a new
releaser for webpack since your current version.</p>
</details>
<details>
<summary>Install script changes</summary>
<p>This version modifies <code>prepare</code> script that runs during
installation. Review the package contents before updating.</p>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=webpack&package-manager=npm_and_yarn&previous-version=5.61.0&new-version=5.111.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/ionic-team/ionic-framework/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[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.5.2`
→
`8.5.3`](https://renovatebot.com/diffs/npm/@capacitor%2fcore/8.5.2/8.5.3)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fcore/8.5.3?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fcore/8.5.2/8.5.3?slim=true)
|

---

### Release Notes

<details>
<summary>ionic-team/capacitor (@&#8203;capacitor/core)</summary>

###
[`v8.5.3`](https://redirect.github.com/ionic-team/capacitor/blob/HEAD/CHANGELOG.md#853-2026-10-07)

[Compare
Source](https://redirect.github.com/ionic-team/capacitor/compare/8.5.2...8.5.3)

##### Bug Fixes

- **cli:** change Cordova AppDelegate.h imports for SPM
([#&#8203;8618](https://redirect.github.com/ionic-team/capacitor/issues/8618))
([145560e](https://redirect.github.com/ionic-team/capacitor/commit/145560ee590d86637dc9dd2e2c9f4c08b0f631c0))

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…ation (#31541)

Issue number: resolves #31528

---------

## What is the current behavior?

Currently, every mounted view in an `IonRouterOutlet` re-renders on each
navigation, hidden ones included. The view stack builds a new
`RouteContext` value every time the outlet renders, which happens about
3 times per navigation, and `NavManager` does the same with `NavContext`
and `IonRouterContext`.

## What is the new behavior?

We now keep each view's `RouteContext` value until its content changes,
and a view whose route doesn't match the current location keeps the
value it last rendered with. Hidden pages using `useParams` no longer
re-render, and the page being shown renders once when its match changes.
The `NavManager` also only rebuilds its context values when `routeInfo`
changes, so `useIonRouter` consumers render once per navigation instead
of twice.

## Does this introduce a breaking change?

- [ ] Yes
- [X] No

## Other information

The held value lives in a component under each view instead of on the
view item, because two outlets with the same `id` share a view item
while sitting under different parent routes.

Hidden pages using `useNavigate` or `useLocation` still render once per
navigation, because React Router's `useNavigate` reads the location
internally. Holding `LocationContext` would fix that, but
`useLocation()` in a hidden page would then return a stale location, so
I left that alone for now.

# Current dev build
```
9.0.7-dev.11791381676.118a7a15
```
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[actions/download-artifact](https://redirect.github.com/actions/download-artifact)
| action | patch | `v8.0.1` → `v8.0.2` |
|
[actions/upload-artifact](https://redirect.github.com/actions/upload-artifact)
| action | patch | `v7.0.1` → `v7.0.2` |

---

### Release Notes

<details>
<summary>actions/download-artifact (actions/download-artifact)</summary>

###
[`v8.0.2`](https://redirect.github.com/actions/download-artifact/releases/tag/v8.0.2)

[Compare
Source](https://redirect.github.com/actions/download-artifact/compare/v8.0.1...v8.0.2)

##### What's Changed

- Update the readme by
[@&#8203;danwkennedy](https://redirect.github.com/danwkennedy) in
[#&#8203;473](https://redirect.github.com/actions/download-artifact/pull/473)
- Improves artifact download retries when the service returns HTTP 429
(rate limiting), including honoring valid Retry-After headers.
- Update
[@&#8203;actions/artifact](https://redirect.github.com/actions/artifact)
to 6.3.1 by [@&#8203;tunc-d](https://redirect.github.com/tunc-d) in
[#&#8203;492](https://redirect.github.com/actions/download-artifact/pull/492)
- Prepare download-artifact v8.0.2 by
[@&#8203;tunc-d](https://redirect.github.com/tunc-d) in
[#&#8203;493](https://redirect.github.com/actions/download-artifact/pull/493)

##### New Contributors

- [@&#8203;tunc-d](https://redirect.github.com/tunc-d) made their first
contribution in
[#&#8203;492](https://redirect.github.com/actions/download-artifact/pull/492)

**Full Changelog**:
<actions/download-artifact@v8.0.1...v8.0.2>

</details>

<details>
<summary>actions/upload-artifact (actions/upload-artifact)</summary>

###
[`v7.0.2`](https://redirect.github.com/actions/upload-artifact/releases/tag/v7.0.2)

[Compare
Source](https://redirect.github.com/actions/upload-artifact/compare/v7.0.1...v7.0.2)

#### What's Changed

- Improves artifact download retries when the service returns HTTP 429
(rate limiting), including honoring valid Retry-After headers.
- Updates
[@&#8203;actions/artifact](https://redirect.github.com/actions/artifact)
to v6.3.1.

#### New Contributors

- [@&#8203;tunc-d](https://redirect.github.com/tunc-d) made their first
contribution in
[#&#8203;821](https://redirect.github.com/actions/upload-artifact/pull/821)

**Full Changelog**:
<actions/upload-artifact@v7.0.1...v7.0.2>

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - "every weekday before 11am"
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **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:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMzQuMSIsInVwZGF0ZWRJblZlciI6IjQ0LjEzNC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[github/codeql-action](https://redirect.github.com/github/codeql-action)
| action | patch | `v4.38.2` → `v4.38.3` |

---

### Release Notes

<details>
<summary>github/codeql-action (github/codeql-action)</summary>

###
[`v4.38.3`](https://redirect.github.com/github/codeql-action/releases/tag/v4.38.3)

[Compare
Source](https://redirect.github.com/github/codeql-action/compare/v4.38.2...v4.38.3)

- *Upcoming breaking change*: CodeQL version 2.21.2 and earlier were
discontinued on 24 September 2026 alongside GitHub Enterprise Server
3.17, and will be unsupported by the next minor release of the CodeQL
Action. Added a deprecation warning for customers using these versions
of CodeQL.
[#&#8203;4188](https://redirect.github.com/github/codeql-action/pull/4188)
- Update default CodeQL bundle version to
[2.27.2](https://redirect.github.com/github/codeql-action/releases/tag/codeql-bundle-v2.27.2).
[#&#8203;4203](https://redirect.github.com/github/codeql-action/pull/4203)
- Fixed a bug where the decision of whether to use a per-language bundle
did not account for custom configurations that reference queries outside
of compiled CodeQL packs. This issue was caught during internal testing
and did not affect any customer repositories. We will resume the roll
out of per-language bundles in the coming weeks.
[#&#8203;4184](https://redirect.github.com/github/codeql-action/pull/4184)

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - "every weekday before 11am"
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **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:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMzQuMSIsInVwZGF0ZWRJblZlciI6IjQ0LjEzNC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.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?
Dragging a sheet modal upwards dismisses it, depending on where the
user's pointer is relative to the viewport height rather than how far
they dragged. It happens when the pointer is in the bottom half of the
viewport, so it's most noticeable on smaller sheet modals where the
whole sheet sits in that area. Swiping up should scroll the content, or
expand the sheet if it isn't at its largest breakpoint yet.

## What is the new behavior?
Dragging a sheet upwards no longer dismisses it. How open the sheet is
now comes from the drag distance over the sheet's own height, so the
breakpoint it snaps to and the position it's drawn at come from the same
measurement. Sheets with breakpoints in between snap to the nearest one.

A quick downward flick still dismisses, because the drag is projected
forward by its velocity before snapping to the nearest breakpoint. A
small, slow drag snaps the sheet back instead of closing it.

Event progress (`ionDragMove`/`ionDragEnd`) is now normalized to 0 at
the lowest breakpoint and 1 at the highest, matching the documented
contract.

## 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
- [Sheet Modal Test
Page](https://ionic-framework-git-rou-13053-fix-sheet-dismissal-ionic1.vercel.app/src/components/modal/test/sheet/
Issue number: resolves #24587

---------

## What is the current behavior?

Currently, the `ActivatedRoute` that `ion-router-outlet` injects into a
page copies `snapshot` once, when the page is activated. A navigation
that only changes query params reuses the page without re-activating the
outlet, so `route.snapshot` stays stale (e.g.,
`snapshot.queryParamMap.get('foo')` is `null` after navigating to
`?foo=bar`).

## What is the new behavior?

The proxy's `snapshot` now reads from the route it stands in for, so it
always matches the current URL.

## Does this introduce a breaking change?

- [ ] Yes
- [X] No

## Other information

The issue's broken relative links stopped reproducing once Angular
started building URL trees from the snapshot itself (all supported
versions do). The stale snapshot behind it was still there. The new spec
also covers relative links so the original symptom stays fixed, but
reverting this fix will not break that test because it's just to make
sure this issue doesn't come up again even though it's technically not a
problem right now.
ShaneK and others added 11 commits October 20, 2026 15:24
…1583)

Issue number: resolves #30617

---------

## What is the current behavior?

Currently, replacing a page inside a tab stack breaks going back in two
different ways. Calling `useIonRouter().replace()` shows a back button
that does nothing, because `replace()` sends the `root` direction, which
clears the location history but leaves `pushedByRoute` set. Calling
`navigate(path, 'forward', 'replace')` after switching tabs does the
opposite, so the URL goes back but the replaced page stays on screen.
That one happens because the back button calls `router.go(-3)` and the
router assumes the page we left is only one entry ahead.

## What is the new behavior?

Now `replace()` uses the `none` direction, so it keeps the pages beneath
the one it replaced and still doesn't animate, the same as a plain
`router.replace()`. The router also uses the real history delta to find
the page we left, and an explicit `navigate(url, 'root', 'replace')` no
longer shows a back button since there's nothing to go back to.

## Does this introduce a breaking change?

- [ ] Yes
- [X] No

## Other information

This does change `replace()` for apps that relied on it clearing the
history. That only started in 9.0, when #31142 made the router respect
the caller's direction, and those apps can switch to `navigate(url,
'root', 'replace')`. I updated the `useIonRouter` docs in ionic-docs to
match here: ionic-team/ionic-docs#4794
…ound (#31591)

Issue number: N/A

---------

## What is the current behavior?

The `visible` docs on `ion-backdrop` only say "If `true`, the backdrop
will be visible." Developers read that as "hides the backdrop," but
`visible="false"` only removes the default background: the backdrop
still blocks interaction, and custom background styles on `ion-backdrop`
still apply. This has been reported as a bug several times (#26953,
#29177, #30742).

## What is the new behavior?

- Documents that `visible` controls only the default background, not
whether the backdrop blocks interaction or overrides a custom
background. The wording matches `showBackdrop` on `ion-modal` and
`ion-popover`.

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

## Other information

The Properties table on the docs site is generated from this JSDoc, so
it updates on the next API sync.
Issue number: resolves #30591

---------

## What is the current behavior?

Currently, a menu inside the split pane's main content, like an end menu
on a page, is treated as a side pane, so it can't be opened while the
split pane is visible. This broke in 8.0 when #28801 changed the menu to
look for any ancestor split pane, so that wrapped menus would work.

## What is the new behavior?

A menu in the main content is now a regular menu and opens normally.
Wrapped side menus still work, since the menu doesn't need to be a
direct child of the split pane.

## Does this introduce a breaking change?

- [ ] Yes
- [X] No

## Other information
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[pozil/auto-assign-issue](https://redirect.github.com/pozil/auto-assign-issue)
| action | patch | `v4.0.1` → `v4.0.2` |

---

### Release Notes

<details>
<summary>pozil/auto-assign-issue</summary>

###
[`v4.0.2`](https://redirect.github.com/pozil/auto-assign-issue/releases/tag/v4.0.2):
- Bump dependencies

[Compare
Source](https://redirect.github.com/pozil/auto-assign-issue/compare/v4.0.1...v4.0.2)

- build: bump dependencies

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[github/codeql-action](https://redirect.github.com/github/codeql-action)
| action | patch | `v4.39.0` → `v4.39.1` |

---

### Release Notes

<details>
<summary>github/codeql-action</summary>

###
[`v4.39.1`](https://redirect.github.com/github/codeql-action/releases/tag/v4.39.1)

[Compare
Source](https://redirect.github.com/github/codeql-action/compare/v4.39.0...v4.39.1)

- Update default CodeQL bundle version to
[2.27.3](https://redirect.github.com/github/codeql-action/releases/tag/codeql-bundle-v2.27.3).
[#&#8203;4256](https://redirect.github.com/github/codeql-action/pull/4256)

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - "every weekday before 11am"
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **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:eyJjcmVhdGVkSW5WZXIiOiI0NC4xNzEuMiIsInVwZGF0ZWRJblZlciI6IjQ0LjE3MS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Issue number: internal

---------

## What is the current behavior?

Currently, patch releases are done by hand from the Confluence
checklist. That means creating the release branch, running the release
workflow, opening two PRs, turning on merge commits, merging with the
exact commit format, turning merge commits back off and then setting up
the Jira release. It's easy to miss a step, and forgetting to turn merge
commits back off has happened before.

## What is the new behavior?

This adds `scripts/release-patch.sh`, which walks through the patch
release one step at a time. It runs the mechanical steps through `gh`
and stops for anything that needs a person, like confirming the
changelog or posting the code freeze in Slack. It turns merge commits on
for the merges and back off afterwards, even if the script errors out or
gets interrupted. It also prints a single Jira search link that finds
the tickets for every PR in the release.

The Jira site and project key are read from
`~/.config/ionic-release.env` instead of being kept in the repo (to
prevent them from being committed by accident), and
`scripts/release.env.example` is the template for that file. The script
stops before doing anything if that file is missing, if a value is still
a placeholder, or if the account running it isn't a repo admin.

## Does this introduce a breaking change?

- [ ] Yes
- [X] No

## Other information

:warning: You must have [the `gh` CLI](https://cli.github.com/)
installed and authenticated to run this script.

The values for the config file are on the Releases page on Confluence.
Running `./scripts/release-patch.sh --dry-run` goes through the whole
release without changing anything, so it's the easiest way to try it
out. Use `--step N` to resume a release that stopped partway through.
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[pozil/auto-assign-issue](https://redirect.github.com/pozil/auto-assign-issue)
| action | minor | `v4.0.2` → `v4.1.0` |

---

### Release Notes

<details>
<summary>pozil/auto-assign-issue</summary>

###
[`v4.1.0`](https://redirect.github.com/pozil/auto-assign-issue/releases/tag/v4.1.0):
- Packaging update

[Compare
Source](https://redirect.github.com/pozil/auto-assign-issue/compare/v4.0.2...v4.1.0)

- build: packaging refactoring -
[#&#8203;209](https://redirect.github.com/pozil/auto-assign-issue/issues/209)
thanks to [@&#8203;methbkts](https://redirect.github.com/methbkts)

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
# Conflicts:
#	core/package-lock.json
#	core/package.json
#	core/src/components.d.ts
#	core/src/components/alert/test/basic/alert.e2e.ts-snapshots/alert-prompt-md-ltr-Mobile-Firefox-linux.png
#	core/src/components/alert/test/basic/alert.e2e.ts-snapshots/alert-prompt-md-rtl-Mobile-Firefox-linux.png
#	core/src/components/input/input.common.scss
#	core/src/components/input/input.md.outline.scss
#	core/src/components/input/input.tsx
#	core/src/components/menu/menu.tsx
#	core/src/components/modal/gestures/sheet.ts
#	core/src/components/select/select.common.scss
#	core/src/components/select/select.md.outline.scss
#	core/src/components/select/select.tsx
#	core/src/components/textarea/textarea.common.scss
#	core/src/components/textarea/textarea.tsx
#	core/src/css/float-elements.scss
#	core/src/themes/native/native.globals.scss
#	core/src/utils/overlays.ts
@ShaneK
ShaneK requested a review from a team as a code owner October 23, 2026 17:33
@ShaneK
ShaneK requested a review from brandyscarney October 23, 2026 17:33
@vercel

vercel Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
ionic-framework Ready Ready Preview Oct 23, 2026 7:25pm UTC

Request Review

@ShaneK
ShaneK force-pushed the sync-next-with-main branch from 0f27e74 to 94725fb Compare October 23, 2026 19:21
@ShaneK
ShaneK merged commit 80ef104 into next Oct 23, 2026
75 of 76 checks passed
@ShaneK
ShaneK deleted the sync-next-with-main branch October 23, 2026 19:46

This branch was successfully deployed

1 active deployment
Preview — 94725fb3 Deployed Oct 23, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

package: angular @ionic/angular package package: core @ionic/core package package: react @ionic/react package package: vue @ionic/vue package

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants