merge release-9.0.1 - #31409
Merged
Merged
Conversation
Issue number: internal --------- ## What is the current behavior? Currently, core builds with `target: es2022` and no `useDefineForClassFields` setting, so TypeScript defaults it to `true` and emits every `@Prop` default as a class field instead of a constructor assignment. Stencil proxies props onto the component prototype as getter/setter pairs, and its setter returns early when the host ref isn't registered yet. An app that downlevels those class fields hoists the initializers above `registerInstance()`, so the setter drops every default. That happens in any Stencil app importing `@ionic/core` with a target below es2022, since the app re-transpiles core. ## What is the new behavior? Setting `useDefineForClassFields: false` restores the emit v8 shipped: `registerInstance()` runs first, then the defaults assign through Stencil's setter. There's nothing left for a downstream bundler to hoist, so the defaults survive whatever target the app uses. Every output target picks it up. ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information Regression from #31280, which moved core to `target: es2022` and flipped the TypeScript default. Brandy hit it on [the docs-demo v9 update](ionic-team/docs-demo#179), where the Input OTP page renders an empty group. I packed this build into that branch with no docs-demo changes and the boxes come back. I put the flag in `core/tsconfig.json` rather than the shared `tsconfig.base.json`, so the six packages extending the base emit the same bytes as before. I didn't add a test. It only breaks in a downstream build, so covering it means asserting on the shape of core's emitted output, which we don't do anywhere. Happy to add something if you'd rather have one.
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [actions/setup-node](https://redirect.github.com/actions/setup-node) | action | major | `v6.4.0` → `v7.0.0` | --- ### Release Notes <details> <summary>actions/setup-node (actions/setup-node)</summary> ### [`v7.0.0`](https://redirect.github.com/actions/setup-node/releases/tag/v7.0.0) [Compare Source](https://redirect.github.com/actions/setup-node/compare/v7.0.0...v7.0.0) ##### What's Changed ##### Enhancements: - Add cache-primary-key and cache-matched-key as outputs by [@​gowridurgad](https://redirect.github.com/gowridurgad) in [#​1577](https://redirect.github.com/actions/setup-node/pull/1577) - Migrate to ESM and upgrade dependencies by [@​gowridurgad](https://redirect.github.com/gowridurgad) in [#​1574](https://redirect.github.com/actions/setup-node/pull/1574) ##### Bug fixes: - Remove dummy NODE\_AUTH\_TOKEN export by [@​gowridurgad](https://redirect.github.com/gowridurgad) in [#​1558](https://redirect.github.com/actions/setup-node/pull/1558) - Only use `mirrorToken` in `getManifest` if it's provided by [@​deiga](https://redirect.github.com/deiga) in [#​1548](https://redirect.github.com/actions/setup-node/pull/1548) ##### Documentation updates: - Add documentation for publishing to npm with Trusted Publisher (OIDC) by [@​chiranjib-swain](https://redirect.github.com/chiranjib-swain) in [#​1536](https://redirect.github.com/actions/setup-node/pull/1536) - docs: Update restore-only cache documentation by [@​priya-kinthali](https://redirect.github.com/priya-kinthali) in [#​1550](https://redirect.github.com/actions/setup-node/pull/1550) - docs: Update caching recommendations to mitigate cache poisoning risks by [@​chiranjib-swain](https://redirect.github.com/chiranjib-swain) in [#​1567](https://redirect.github.com/actions/setup-node/pull/1567) ##### Dependency update: - Upgrade [@​actions/cache](https://redirect.github.com/actions/cache) to 5.1.0, log cache write denied by [@​jasongin](https://redirect.github.com/jasongin) in [#​1569](https://redirect.github.com/actions/setup-node/pull/1569) ##### New Contributors - [@​chiranjib-swain](https://redirect.github.com/chiranjib-swain) made their first contribution in [#​1536](https://redirect.github.com/actions/setup-node/pull/1536) - [@​deiga](https://redirect.github.com/deiga) made their first contribution in [#​1548](https://redirect.github.com/actions/setup-node/pull/1548) - [@​jasongin](https://redirect.github.com/jasongin) made their first contribution in [#​1569](https://redirect.github.com/actions/setup-node/pull/1569) **Full Changelog**: <actions/setup-node@v6...v7.0.0> ### [`v7`](https://redirect.github.com/actions/setup-node/compare/v6.5.0...v7.0.0) [Compare Source](https://redirect.github.com/actions/setup-node/compare/v6.5.0...v7.0.0) ### [`v6.5.0`](https://redirect.github.com/actions/setup-node/releases/tag/v6.5.0) [Compare Source](https://redirect.github.com/actions/setup-node/compare/v6.4.0...v6.5.0) ##### What's Changed - Update [@​actions/cache](https://redirect.github.com/actions/cache) to 5.1.0 and add security overrides for undici and fast-xml-parser by [@​HarithaVattikuti](https://redirect.github.com/HarithaVattikuti) in [#​1579](https://redirect.github.com/actions/setup-node/pull/1579) **Full Changelog**: <actions/setup-node@v6.4.0...v6.5.0> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekday before 11am" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/ionic-team/ionic-framework). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4zMy4yIiwidXBkYXRlZEluVmVyIjoiNDQuMzMuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [actions/checkout](https://redirect.github.com/actions/checkout) | action | patch | `v7.0.0` → `v7.0.1` | --- ### Release Notes <details> <summary>actions/checkout (actions/checkout)</summary> ### [`v7.0.1`](https://redirect.github.com/actions/checkout/blob/HEAD/CHANGELOG.md#v701) [Compare Source](https://redirect.github.com/actions/checkout/compare/v7...v7.0.1) - Bump github/codeql-action from 3 to 4 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2475](https://redirect.github.com/actions/checkout/pull/2475) - Bump actions/setup-node from 4 to 6 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2477](https://redirect.github.com/actions/checkout/pull/2477) - Bump docker/build-push-action from 6.5.0 to 7.2.0 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2478](https://redirect.github.com/actions/checkout/pull/2478) - Bump docker/login-action from 3.3.0 to 4.2.0 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2479](https://redirect.github.com/actions/checkout/pull/2479) - Bump actions/checkout from 6 to 7 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2488](https://redirect.github.com/actions/checkout/pull/2488) - Bump actions/upload-artifact from 4 to 7 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2476](https://redirect.github.com/actions/checkout/pull/2476) - eslint 9 by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2474](https://redirect.github.com/actions/checkout/pull/2474) - Bump the minor-actions-dependencies group with 2 updates by [@​dependabot](https://redirect.github.com/dependabot)\[bot] in [#​2499](https://redirect.github.com/actions/checkout/pull/2499) - skip running unsafe pr check if input is default by [@​aiqiaoy](https://redirect.github.com/aiqiaoy) in [#​2518](https://redirect.github.com/actions/checkout/pull/2518) - trim only ascii whitespace for branch by [@​aiqiaoy](https://redirect.github.com/aiqiaoy) in [#​2521](https://redirect.github.com/actions/checkout/pull/2521) - escape values passed to --unset by [@​aiqiaoy](https://redirect.github.com/aiqiaoy) in [#​2530](https://redirect.github.com/actions/checkout/pull/2530) </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:eyJjcmVhdGVkSW5WZXIiOiI0NC4zMy4yIiwidXBkYXRlZEluVmVyIjoiNDQuMzMuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> 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/) | |---|---|---|---| | [ts-morph](https://redirect.github.com/dsherret/ts-morph) | [`^25.0.0` → `^28.0.0`](https://renovatebot.com/diffs/npm/ts-morph/25.0.1/28.0.0) |  |  | --- ### Release Notes <details> <summary>dsherret/ts-morph (ts-morph)</summary> ### [`v28.0.0`](https://redirect.github.com/dsherret/ts-morph/releases/tag/28.0.0) [Compare Source](https://redirect.github.com/dsherret/ts-morph/compare/27.0.2...28.0.0) #### What's Changed - feat(BREAKING): TypeScript 6.0 by [@​dsherret](https://redirect.github.com/dsherret) in [#​1669](https://redirect.github.com/dsherret/ts-morph/pull/1669) - feat: standalone `printStructure` function by [@​dsherret](https://redirect.github.com/dsherret) in [#​1670](https://redirect.github.com/dsherret/ts-morph/pull/1670) - fix: `InvalidOperationError` in `addTypeArgument` by [@​jfirebaugh](https://redirect.github.com/jfirebaugh) in [#​1663](https://redirect.github.com/dsherret/ts-morph/pull/1663) Note there are some breaking changes due to TypeScript 6.0. Read more here: <https://devblogs.microsoft.com/typescript/announcing-typescript-6-0/> As part of this release, structures can now be printed to a string using the `printStructure` function. ```ts import { printStructure, StructureKind } from "ts-morph"; const code = printStructure({ kind: StructureKind.Class, name: "MyClass", isExported: true, properties: [{ name: "myProp", type: "string" }], methods: [{ name: "myMethod", parameters: [{ name: "param", type: "number" }], returnType: "void", }], }); console.log(code); ``` Outputs: ```ts export class MyClass { myProp: string; myMethod(param: number): void { } } ``` #### New Contributors - [@​jfirebaugh](https://redirect.github.com/jfirebaugh) made their first contribution in [#​1663](https://redirect.github.com/dsherret/ts-morph/pull/1663) **Full Changelog**: <dsherret/ts-morph@27.0.2...28.0.0> ### [`v27.0.2`](https://redirect.github.com/dsherret/ts-morph/releases/tag/27.0.2) [Compare Source](https://redirect.github.com/dsherret/ts-morph/compare/27.0.0...27.0.2) #### What's Changed - Fixes the npm publish in order to get the fixes in from 27.0.1 - fix: browser support no longer working since [#​1628](https://redirect.github.com/dsherret/ts-morph/pull/1628) in 26.0.0 due to missing browser fields by [@​BossSloth](https://redirect.github.com/BossSloth) in [#​1654](https://redirect.github.com/dsherret/ts-morph/pull/1654) **Full Changelog**: <dsherret/ts-morph@27.0.1...27.0.2> ### [`v27.0.0`](https://redirect.github.com/dsherret/ts-morph/releases/tag/27.0.0) [Compare Source](https://redirect.github.com/dsherret/ts-morph/compare/26.0.0...27.0.0) #### What's Changed - perf: switch to tinyglobby by [@​benmccann](https://redirect.github.com/benmccann) in [#​1635](https://redirect.github.com/dsherret/ts-morph/pull/1635) - fix: re-export StandardizedFilePath from [@​ts-morph/common](https://redirect.github.com/ts-morph/common) by [@​kronodeus](https://redirect.github.com/kronodeus) in [#​1637](https://redirect.github.com/dsherret/ts-morph/pull/1637) - chore: fix ci by [@​dsherret](https://redirect.github.com/dsherret) in [#​1645](https://redirect.github.com/dsherret/ts-morph/pull/1645) - feat: `TypeChecker` - add `getAwaitedType` by [@​JHawk0224](https://redirect.github.com/JHawk0224) in [#​1643](https://redirect.github.com/dsherret/ts-morph/pull/1643) - feat: TypeScript 5.9 by [@​dsherret](https://redirect.github.com/dsherret) in [#​1646](https://redirect.github.com/dsherret/ts-morph/pull/1646) - feat: wrap OptionalTypeNode by [@​dsherret](https://redirect.github.com/dsherret) in [#​1647](https://redirect.github.com/dsherret/ts-morph/pull/1647) - feat: wrap `JSDocImportTag` by [@​dsherret](https://redirect.github.com/dsherret) in [#​1648](https://redirect.github.com/dsherret/ts-morph/pull/1648) - fix: remove invalid sourceMappingURL from build output by [@​dsherret](https://redirect.github.com/dsherret) in [#​1649](https://redirect.github.com/dsherret/ts-morph/pull/1649) - feat: ability to add and remove the defer keyword in imports by [@​dsherret](https://redirect.github.com/dsherret) in [#​1651](https://redirect.github.com/dsherret/ts-morph/pull/1651) #### New Contributors - [@​JHawk0224](https://redirect.github.com/JHawk0224) made their first contribution in [#​1643](https://redirect.github.com/dsherret/ts-morph/pull/1643) **Full Changelog**: <dsherret/ts-morph@26.0.0...27.0.0> ### [`v26.0.0`](https://redirect.github.com/dsherret/ts-morph/releases/tag/26.0.0) [Compare Source](https://redirect.github.com/dsherret/ts-morph/compare/25.0.1...26.0.0) #### What's Changed - feat: TypeScript 5.8 [#​1628](https://redirect.github.com/dsherret/ts-morph/pull/1628) - fix: Improve comma appending logic to handle nested template literals correctly by [@​kingston](https://redirect.github.com/kingston) in [#​1630](https://redirect.github.com/dsherret/ts-morph/pull/1630) - fix(bootstrap): ignore dist-deno folder for npm publish [#​1610](https://redirect.github.com/dsherret/ts-morph/pull/1610) - feat: `npm publish` with provenance [#​1634](https://redirect.github.com/dsherret/ts-morph/pull/1634) #### New Contributors - [@​kingston](https://redirect.github.com/kingston) made their first contribution in [#​1630](https://redirect.github.com/dsherret/ts-morph/pull/1630) **Full Changelog**: <dsherret/ts-morph@25.0.1...26.0.0> </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekday before 11am" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about 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:eyJjcmVhdGVkSW5WZXIiOiI0NC4zMy4yIiwidXBkYXRlZEluVmVyIjoiNDQuMzMuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Issue number: resolves #31376 --------- ## What is the current behavior? Currently, `ion-refresher` reads its `slot` attribute in `connectedCallback` and gives up if it isn't `fixed`. In v9 `@ionic/react` uses the custom elements build, so `connectedCallback` runs while the element is still being inserted, which is before React assigns the slot. The check fails on perfectly correct markup, logs the "Make sure you use" error, and the pull-to-refresh gesture never gets created. This affects React 18 and 19. ## What is the new behavior? The check now runs in `componentWillLoad`, which is late enough that frameworks have assigned the slot, but still before rendering puts `slot="fixed"` on the host. Gesture setup no longer bails, so the refresher works whether the slot is in the markup or arrives later, and correctly written React apps stop logging the error. Markup that genuinely omits the slot still gets it. ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information Current dev build: ``` 9.0.1-dev.11787177893.1979eb13 ```
Issue number: internal --------- ## What is the current behavior? `StackManager.transitionPage()` clones the leaving page on same-view transitions (`/user/1` to `/user/2`) so `commit()` gets a leaving element distinct from the entering one. It clones even when nothing will animate, which duplicates the page in the DOM for the length of the commit. Playwright locators then resolve to two elements and fail on a strict mode violation, which randomly fails CI and appears as a flake. ## What is the new behavior? <!-- Please describe the behavior or changes that are being added by this PR. --> The clone is gated on whether `commit()` will actually animate, mirroring the check `ion-router-outlet` makes. When it won't, `commit()` gets `undefined` for the leaving element, which it already handles, and no duplicate reaches the DOM. Two regression tests record the peak number of matching pages across a navigation so a reappearing duplicate fails directly instead of surfacing as a flake. ## Does this introduce a breaking change? - [ ] Yes - [x] No ## Other information The duplicate was never visible on screen. With animations off the clone is attached for about 5ms without crossing a frame boundary, and with animations on it carries `ion-page-invisible` (opacity 0) until `afterTransition`, which runs just before it's removed. This is a DOM-level fix, not a rendering one.
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.3.4` → `8.5.0`](https://renovatebot.com/diffs/npm/@capacitor%2fcore/8.3.4/8.5.0) |  |  | | [@capacitor/status-bar](https://redirect.github.com/ionic-team/capacitor-plugins) | [`8.0.2` → `8.0.3`](https://renovatebot.com/diffs/npm/@capacitor%2fstatus-bar/8.0.2/8.0.3) |  |  | --- ### Release Notes <details> <summary>ionic-team/capacitor (@​capacitor/core)</summary> ### [`v8.5.0`](https://redirect.github.com/ionic-team/capacitor/blob/HEAD/CHANGELOG.md#850-2026-07-31) [Compare Source](https://redirect.github.com/ionic-team/capacitor/compare/8.4.2...8.5.0) ##### Bug Fixes - **cli:** support TypeScript 7 when loading capacitor.config.ts ([#​8534](https://redirect.github.com/ionic-team/capacitor/issues/8534)) ([4c1c870](https://redirect.github.com/ionic-team/capacitor/commit/4c1c8709413b9c19b008c99122ca330cc3c90e6f)) ##### Features - **cli:** add migrator functionality for adopting UIScene ([#​8544](https://redirect.github.com/ionic-team/capacitor/issues/8544)) ([984fa85](https://redirect.github.com/ionic-team/capacitor/commit/984fa85ba0adab0aacf895aed6323bf4b503dccb)) - **ios:** UIScene Support ([#​8536](https://redirect.github.com/ionic-team/capacitor/issues/8536)) ([3fa04a3](https://redirect.github.com/ionic-team/capacitor/commit/3fa04a357c92af34cd6fccb8124791963804a9dc)) #### [8.4.2](https://redirect.github.com/ionic-team/capacitor/compare/8.4.1...8.4.2) (2026-07-14) ##### Bug Fixes - **android:** explicitly grant URI permissions for image capture intent ([#​8526](https://redirect.github.com/ionic-team/capacitor/issues/8526)) ([6f2d328](https://redirect.github.com/ionic-team/capacitor/commit/6f2d3283897a375d09ca9ec8784a9f0d65f0a530)) #### [8.4.1](https://redirect.github.com/ionic-team/capacitor/compare/8.4.0...8.4.1) (2026-06-19) ##### Bug Fixes - **cli:** make SPM dependency patch work on prereleases ([#​8508](https://redirect.github.com/ionic-team/capacitor/issues/8508)) ([6048e90](https://redirect.github.com/ionic-team/capacitor/commit/6048e90171afa0229a3c25b52a23c377c6bb804c)) - **cli:** patch Capacitor SPM dependency version in plugins ([#​8492](https://redirect.github.com/ionic-team/capacitor/issues/8492)) ([28bb2c6](https://redirect.github.com/ionic-team/capacitor/commit/28bb2c687069dfdd6aa7abc866004a1c6388d103)) ### [`v8.4.2`](https://redirect.github.com/ionic-team/capacitor/blob/HEAD/CHANGELOG.md#842-2026-07-14) [Compare Source](https://redirect.github.com/ionic-team/capacitor/compare/8.4.1...8.4.2) ##### Bug Fixes - **android:** explicitly grant URI permissions for image capture intent ([#​8526](https://redirect.github.com/ionic-team/capacitor/issues/8526)) ([6f2d328](https://redirect.github.com/ionic-team/capacitor/commit/6f2d3283897a375d09ca9ec8784a9f0d65f0a530)) ### [`v8.4.1`](https://redirect.github.com/ionic-team/capacitor/blob/HEAD/CHANGELOG.md#841-2026-06-19) [Compare Source](https://redirect.github.com/ionic-team/capacitor/compare/8.4.0...8.4.1) ##### Bug Fixes - **cli:** make SPM dependency patch work on prereleases ([#​8508](https://redirect.github.com/ionic-team/capacitor/issues/8508)) ([6048e90](https://redirect.github.com/ionic-team/capacitor/commit/6048e90171afa0229a3c25b52a23c377c6bb804c)) - **cli:** patch Capacitor SPM dependency version in plugins ([#​8492](https://redirect.github.com/ionic-team/capacitor/issues/8492)) ([28bb2c6](https://redirect.github.com/ionic-team/capacitor/commit/28bb2c687069dfdd6aa7abc866004a1c6388d103)) ### [`v8.4.0`](https://redirect.github.com/ionic-team/capacitor/blob/HEAD/CHANGELOG.md#840-2026-06-02) [Compare Source](https://redirect.github.com/ionic-team/capacitor/compare/8.3.4...8.4.0) ##### Bug Fixes - **android:** show only the requested system bar ([#​8480](https://redirect.github.com/ionic-team/capacitor/issues/8480)) ([4c6c321](https://redirect.github.com/ionic-team/capacitor/commit/4c6c3219afb5223211e857457e46283c37eb9424)) - **cli:** revert live reload config on failure ([#​8485](https://redirect.github.com/ionic-team/capacitor/issues/8485)) ([1d031a4](https://redirect.github.com/ionic-team/capacitor/commit/1d031a4abec2c793079ba8897ad2e40c4cc6c7f9)) - **SystemBars:** make `safe-area-inset-x` available on API <= 34 ([#​8424](https://redirect.github.com/ionic-team/capacitor/issues/8424)) ([e456de0](https://redirect.github.com/ionic-team/capacitor/commit/e456de083e19644f484bec5a5359cb67960ac8bc)) - **SystemBars:** respect `insetsHandling` disable ([#​8481](https://redirect.github.com/ionic-team/capacitor/issues/8481)) ([d4ad7ff](https://redirect.github.com/ionic-team/capacitor/commit/d4ad7ffe39daf66e0cfc63af9028d5c05543bde7)) ##### Features - add method getDouble to plugin config ([#​7638](https://redirect.github.com/ionic-team/capacitor/issues/7638)) ([93c72de](https://redirect.github.com/ionic-team/capacitor/commit/93c72de40a2ec4c78b33659250cb08340083088e)) - **cli:** add experimental packageOptions ([#​8471](https://redirect.github.com/ionic-team/capacitor/issues/8471)) ([258867b](https://redirect.github.com/ionic-team/capacitor/commit/258867b7bf37b1837b99b02ec9638e5a6df08d97)) - **cli:** capture ios\_package\_manager in telemetry ([#​8482](https://redirect.github.com/ionic-team/capacitor/issues/8482)) ([b4b297a](https://redirect.github.com/ionic-team/capacitor/commit/b4b297a52f8732659662d5e5aaeff81c0f7d9835)) #### [8.3.4](https://redirect.github.com/ionic-team/capacitor/compare/8.3.3...8.3.4) (2026-05-12) **Note:** Version bump only for package capacitor #### [8.3.3](https://redirect.github.com/ionic-team/capacitor/compare/8.3.2...8.3.3) (2026-05-08) ##### Bug Fixes - **cli:** copy plugin files in CocoaPods projects ([#​8467](https://redirect.github.com/ionic-team/capacitor/issues/8467)) ([b2d7719](https://redirect.github.com/ionic-team/capacitor/commit/b2d771926a180e60deea31992d7d4abcd5ca3bc7)) #### [8.3.2](https://redirect.github.com/ionic-team/capacitor/compare/8.3.1...8.3.2) (2026-05-07) ##### Bug Fixes - **cli:** add cSettings support for compiler flags in generated Package.swift ([#​8448](https://redirect.github.com/ionic-team/capacitor/issues/8448)) ([0bd0676](https://redirect.github.com/ionic-team/capacitor/commit/0bd0676315c5fd77e50312dd7b5bf4990dcbd7d0)) - **cli:** add system framework and weak framework support in SPM Package.swift ([#​8447](https://redirect.github.com/ionic-team/capacitor/issues/8447)) ([3232f0f](https://redirect.github.com/ionic-team/capacitor/commit/3232f0fe1d9811b0b5c500e3dc05cb8a250177f8)) - **cli:** correct Capacitor plugin SPM compat check ([#​8440](https://redirect.github.com/ionic-team/capacitor/issues/8440)) ([e5ccc45](https://redirect.github.com/ionic-team/capacitor/commit/e5ccc451dda27d56bca824ed644bd20fe4d988cb)) - **cli:** generate binaryTarget entries for custom xcframeworks in Package.swift ([#​8445](https://redirect.github.com/ionic-team/capacitor/issues/8445)) ([1f7e33f](https://redirect.github.com/ionic-team/capacitor/commit/1f7e33fca43d183332ec19d22b0d75ef81d8cc6d)) - **cli:** generate resource entries in Package.swift ([#​8455](https://redirect.github.com/ionic-team/capacitor/issues/8455)) ([790bd27](https://redirect.github.com/ionic-team/capacitor/commit/790bd27123497111984227010c3162cec94a108e)) - **cli:** handle Cordova plugins without iOS source files ([#​8443](https://redirect.github.com/ionic-team/capacitor/issues/8443)) ([0da130e](https://redirect.github.com/ionic-team/capacitor/commit/0da130eb7a861bee4e2c35bc0aac53ba9c983fc3)) - **cli:** link plugin dependencies in Package.swift ([#​8457](https://redirect.github.com/ionic-team/capacitor/issues/8457)) ([b3c769e](https://redirect.github.com/ionic-team/capacitor/commit/b3c769e856c826b1174518877cf86ac7ce73bf09)) - **ios:** support Cordova plugins with Package.swift ([#​8438](https://redirect.github.com/ionic-team/capacitor/issues/8438)) ([139943b](https://redirect.github.com/ionic-team/capacitor/commit/139943b0c05fddb2d1ce2d6f468800fddf17b4cf)) - **SystemBars:** avoid extra view padding on API <= 34 ([#​8439](https://redirect.github.com/ionic-team/capacitor/issues/8439)) ([5b135a7](https://redirect.github.com/ionic-team/capacitor/commit/5b135a70217be560e7176c8d5b514cc92ed3e4e4)) #### [8.3.1](https://redirect.github.com/ionic-team/capacitor/compare/8.3.0...8.3.1) (2026-04-16) ##### Bug Fixes - **android:** handle null versionName in isNewBinary() ([#​8397](https://redirect.github.com/ionic-team/capacitor/issues/8397)) ([aa1a660](https://redirect.github.com/ionic-team/capacitor/commit/aa1a660f364f9b5f5a1e350e279c8864b04dd13b)) - boundary value extraction for form-data requests ([#​7518](https://redirect.github.com/ionic-team/capacitor/issues/7518)) ([64ab854](https://redirect.github.com/ionic-team/capacitor/commit/64ab854c12330804c24275d88d3a9f7c8e52a73d)) - **cli:** check CAPACITOR\_COCOAPODS\_PATH in determinePackageManager ([#​8407](https://redirect.github.com/ionic-team/capacitor/issues/8407)) ([acb64ab](https://redirect.github.com/ionic-team/capacitor/commit/acb64ab92a37ff53701cde453558e272e2e11eb6)) - **system-bars:** use separate current styles ([#​8409](https://redirect.github.com/ionic-team/capacitor/issues/8409)) ([3d1f8d1](https://redirect.github.com/ionic-team/capacitor/commit/3d1f8d1b61480187375f5cd4de7ba999db007542)) </details> <details> <summary>ionic-team/capacitor-plugins (@​capacitor/status-bar)</summary> ### [`v8.0.3`](https://redirect.github.com/ionic-team/capacitor-plugins/releases/tag/%40capacitor/status-bar%408.0.3) [Compare Source](https://redirect.github.com/ionic-team/capacitor-plugins/compare/@capacitor/status-bar@8.0.2...@capacitor/status-bar@8.0.3) **Note:** Version bump only for package [@​capacitor/status-bar](https://redirect.github.com/capacitor/status-bar) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekday before 11am" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about 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:eyJjcmVhdGVkSW5WZXIiOiI0NC4zMy4yIiwidXBkYXRlZEluVmVyIjoiNDQuMzMuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
… them (#31391) Issue number: resolves #31388 --------- ## What is the current behavior? Currently, `ion-item-sliding` reads `side` off each `ion-item-options` in `connectedCallback`. It only waits for the option first if the element has a `componentOnReady` method, and the custom elements build doesn't add one, so it reads straight away and every option comes back as the default `end`. In v9 React that means `side="start"` options can't be swiped open. There's the same problem in `ion-segment-button`, where the check that stops a button tied to an `ion-segment-content` from being disabled also runs in `connectedCallback`, before `contentId` or `disabled` exist. Both come from `@ionic/react` v9 going through `@lit/react`, which assigns element props in a `useLayoutEffect` after React commits the DOM. ## What is the new behavior? Now `updateOptions` waits for every `ion-item-options` through the `componentOnReady` helper before reading `side`. The helper waits a frame in the custom elements build, which is after the props land, and is unchanged in the lazy build. That also drops the repo's only `eslint-disable custom-rules/no-component-on-ready-method`, since bypassing the helper was the bug. The `ion-segment-button` check moved to `componentWillLoad`, and it now also requires the parent segment to be enabled. A disabled `ion-segment` pushes `disabled` onto its buttons through `updateState`, which is why the check used to run first, and without the new condition the fix force-enables every button inside `<ion-segment disabled>`. ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information I swept every core component with a `connectedCallback` for this pattern and only these two break, the rest self-heal through a `@Watch` or an existing `await`. Only `ion-radio-group` drifts, cosmetically, and I left it alone. The real fix isn't in core. If `@stencil/react-output-target` passed serializable props through `React.createElement` the way the v8 wrapper did, they'd be set before insertion and none of this would reach `connectedCallback` late. Could be worth trying to fix there for later. ## Current Dev Build ``` 9.0.1-dev.11787248963.10a00c73 ```
> ℹ️ **Note**
>
> This PR body was truncated due to platform limits.
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))
| [`^3.0.0` →
`^4.0.0`](https://renovatebot.com/diffs/npm/vitest/3.2.7/4.1.11) |

|

|
---
### Release Notes
<details>
<summary>vitest-dev/vitest (vitest)</summary>
###
[`v4.1.11`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.11)
[Compare
Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.10...v4.1.11)
##### 🐞 Bug Fixes
- Revive global concurrency limit for test lifecycle \[backport to v4]
- by [@​sheremet-va](https://redirect.github.com/sheremet-va)
and [@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​10992](https://redirect.github.com/vitest-dev/vitest/issues/10992)
[<samp>(5146d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/5146df80b)
- **browser**:
- Encode iframeId in tester iframe URL \[backport to v4] - by
[@​sheremet-va](https://redirect.github.com/sheremet-va),
**Pduhard** and **Claude Opus 4.8** in
[#​10955](https://redirect.github.com/vitest-dev/vitest/issues/10955)
[<samp>(10b2c)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/10b2cd201)
- Trigger playwright/chromium gc on lower disk availability \[backport
to v4] - by [@​hi-ogawa](https://redirect.github.com/hi-ogawa),
**Hiroshi Ogawa** and **OpenCode** in
[#​10951](https://redirect.github.com/vitest-dev/vitest/issues/10951)
[<samp>(9851d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/9851dbc41)
- **mocker**:
- Restrict redirect mocks to the fs allowlist \[backport to v4] - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​10974](https://redirect.github.com/vitest-dev/vitest/issues/10974)
[<samp>(fe5a1)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/fe5a11d3c)
##### [View changes on
GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.10...v4.1.11)
###
[`v4.1.10`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.10)
[Compare
Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.9...v4.1.10)
##### 🐞 Bug Fixes
- **browser**: Check fs access in builtin commands \[backport to v4] -
by [@​hi-ogawa](https://redirect.github.com/hi-ogawa), **Hiroshi
Ogawa** and **OpenCode (claude-opus-4-8)** in
[#​10680](https://redirect.github.com/vitest-dev/vitest/issues/10680)
[<samp>(5c18d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/5c18dd267)
- **vm**: Fix external module resolve error with deps optimizer query
for encoded URI \[backport to v4] - by
[@​SveLil](https://redirect.github.com/SveLil) and
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​10661](https://redirect.github.com/vitest-dev/vitest/issues/10661)
[<samp>(bae52)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/bae52b511)
##### [View changes on
GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.9...v4.1.10)
###
[`v4.1.9`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.9)
[Compare
Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.8...v4.1.9)
##### 🐞 Bug Fixes
- Fix `importOriginal` with optimizer and query import \[backport to v4]
- by **Hiroshi Ogawa**, **David Harris**, **Codex**and **Vladimir** in
[#​10546](https://redirect.github.com/vitest-dev/vitest/issues/10546)
[<samp>(a5180)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/a5180190c)
- **browser**:
- Wait for orchestrator readiness before resolving browser sessions
\[backport to v4] - by **Vladimir** and **Séamus O'Connor** in
[#​10555](https://redirect.github.com/vitest-dev/vitest/issues/10555)
[<samp>(7fb29)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7fb29651a)
- Wait for iframe tester readiness before preparing \[backport to v4] -
by **Vladimir** and **Séamus O'Connor** in
[#​10497](https://redirect.github.com/vitest-dev/vitest/issues/10497)
and
[#​10556](https://redirect.github.com/vitest-dev/vitest/issues/10556)
[<samp>(fbc62)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/fbc626c40)
- **mocker**:
- Hoist vi.mock() for vite-plus/test imports \[backport to v4] - by
**Hiroshi Ogawa**, **LongYinan**, **Claude Opus 4.8** and **Vladimir**
in
[#​10548](https://redirect.github.com/vitest-dev/vitest/issues/10548)
[<samp>(2c955)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/2c9559c02)
- **pool**:
- Prevent test run hang on worker crash \[backport to v4] - by **Ari
Perkkiö** and **Jattioui Ismail** in
[#​10543](https://redirect.github.com/vitest-dev/vitest/issues/10543)
and
[#​10564](https://redirect.github.com/vitest-dev/vitest/issues/10564)
[<samp>(934b0)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/934b0f587)
##### [View changes on
GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.8...v4.1.9)
###
[`v4.1.8`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.8)
[Compare
Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.7...v4.1.8)
##### 🐞 Bug Fixes
- **browser**:
- Disable client `cdp` API when `allowWrite/allowExec: false` \[backport
to v4] - by [@​hi-ogawa](https://redirect.github.com/hi-ogawa)
and **Codex** in
[#​10450](https://redirect.github.com/vitest-dev/vitest/issues/10450)
[<samp>(e4067)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e4067b3b1)
- Remove orphaned Playwright route when same module is mocked via
multiple ids \[backport to v4] - by
[@​toxik](https://redirect.github.com/toxik) and
[@​Zelys-DFKH](https://redirect.github.com/Zelys-DFKH) in
[#​10474](https://redirect.github.com/vitest-dev/vitest/issues/10474)
[<samp>(675b4)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/675b4343f)
##### [View changes on
GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.7...v4.1.8)
###
[`v4.1.7`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.7)
[Compare
Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.6...v4.1.7)
##### 🐞 Bug Fixes
- **runner**: Limit concurrency per task branch in addition to per leaf
callbacks (backport) - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​10384](https://redirect.github.com/vitest-dev/vitest/issues/10384)
[<samp>(4f0f2)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/4f0f2a1ee)
##### [View changes on
GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.6...v4.1.7)
###
[`v4.1.6`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.6)
[Compare
Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.5...v4.1.6)
##### 🐞 Bug Fixes
- **browser**: Provide project reference in
`ToMatchScreenshotResolvePath` - by
[@​macarie](https://redirect.github.com/macarie) and
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​10138](https://redirect.github.com/vitest-dev/vitest/issues/10138)
[<samp>(31882)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/31882607c)
- Global `sequence.concurrent: true` with top-level `test(..., {
concurrent: false })` + depreacte `sequential` test API and options -
by [@​hi-ogawa](https://redirect.github.com/hi-ogawa), **Codex**
and [@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​10196](https://redirect.github.com/vitest-dev/vitest/issues/10196)
[<samp>(2847d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/2847dfa2a)
- **browser**: Simplify orchestrator otel carrier - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​10285](https://redirect.github.com/vitest-dev/vitest/issues/10285)
[<samp>(18af9)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/18af98cee)
##### 🏎 Performance
- Stringify diff objects only once - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​10276](https://redirect.github.com/vitest-dev/vitest/issues/10276)
[<samp>(9f7b1)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/9f7b1528c)
##### [View changes on
GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.5...v4.1.6)
###
[`v4.1.5`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.5)
[Compare
Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.4...v4.1.5)
##### 🚀 Experimental Features
- **coverage**: Istanbul to support `instrumenter` option - by
[@​BartWaardenburg](https://redirect.github.com/BartWaardenburg)
and [@​AriPerkkio](https://redirect.github.com/AriPerkkio) in
[#​10119](https://redirect.github.com/vitest-dev/vitest/issues/10119)
[<samp>(0e0ff)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/0e0ff41c7)
##### 🐞 Bug Fixes
- \--project negation excludes browser instances - by
[@​felamaslen](https://redirect.github.com/felamaslen) in
[#​10131](https://redirect.github.com/vitest-dev/vitest/issues/10131)
[<samp>(9423d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/9423dc084)
- Project color label on html reporter - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​10142](https://redirect.github.com/vitest-dev/vitest/issues/10142)
[<samp>(596f7)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/596f73986)
- Fix `vi.defineHelper` called as object method - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​10163](https://redirect.github.com/vitest-dev/vitest/issues/10163)
[<samp>(122c2)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/122c25b5b)
- Alias `agent` reporter to `minimal` - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​10157](https://redirect.github.com/vitest-dev/vitest/issues/10157)
[<samp>(663b9)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/663b99fe3)
- Respect diff config options in soft assertions - by
[@​Copilot](https://redirect.github.com/Copilot), **sheremet-va**
and [@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​8696](https://redirect.github.com/vitest-dev/vitest/issues/8696)
[<samp>(9787d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/9787dedad)
- Respect diff config options in soft assertions " - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​8696](https://redirect.github.com/vitest-dev/vitest/issues/8696)
[<samp>(7dc6d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7dc6d54fd)
- **ast-collect**: Recognize \_*vi\_import* prefix in static test
discovery - by
[@​Yejneshwar](https://redirect.github.com/Yejneshwar) in
[#​10129](https://redirect.github.com/vitest-dev/vitest/issues/10129)
[<samp>(32546)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/325463ab2)
- **coverage**: Descriptive error message when reports directory is
removed during test run - by
[@​DaveT1991](https://redirect.github.com/DaveT1991) and
[@​AriPerkkio](https://redirect.github.com/AriPerkkio) in
[#​10117](https://redirect.github.com/vitest-dev/vitest/issues/10117)
[<samp>(14133)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/1413382e1)
- **snapshot**: Increase default snapshot max output length - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) and **Codex**
in
[#​10150](https://redirect.github.com/vitest-dev/vitest/issues/10150)
[<samp>(21e66)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/21e66ff63)
- **ui**: Fix jsx/tsx syntax highlight - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​10152](https://redirect.github.com/vitest-dev/vitest/issues/10152)
[<samp>(f1b1f)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/f1b1f6c7b)
- **web-worker**: Support MessagePort objects referenced inside
postMessage data - by
[@​whitphx](https://redirect.github.com/whitphx) and **Claude Opus
4.6 (1M context)** in
[#​9927](https://redirect.github.com/vitest-dev/vitest/issues/9927)
and
[#​10124](https://redirect.github.com/vitest-dev/vitest/issues/10124)
[<samp>(7ad7d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7ad7d39af)
- **api**: Make test-specification options writable - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​10154](https://redirect.github.com/vitest-dev/vitest/issues/10154)
[<samp>(6abd5)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/6abd557b7)
##### [View changes on
GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.4...v4.1.5)
###
[`v4.1.4`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.4)
[Compare
Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.3...v4.1.4)
##### 🚀 Features
- **coverage**:
- Default to text reporter `skipFull` if agent detected - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​10018](https://redirect.github.com/vitest-dev/vitest/issues/10018)
[<samp>(53757)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/53757804c)
- **experimental**:
- Expose `assertion` as a public field - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​10095](https://redirect.github.com/vitest-dev/vitest/issues/10095)
[<samp>(a120e)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/a120e3ab8)
- Support aria snapshot - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa), **Claude Opus
4.6 (1M context)**,
[@​AriPerkkio](https://redirect.github.com/AriPerkkio), **Codex**
and [@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9668](https://redirect.github.com/vitest-dev/vitest/issues/9668)
[<samp>(d4fbb)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/d4fbb5cc9)
- **reporter**:
- Add filterMeta option to json reporter - by
[@​nami8824](https://redirect.github.com/nami8824) and
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​10078](https://redirect.github.com/vitest-dev/vitest/issues/10078)
[<samp>(b77de)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/b77de968e)
##### 🐞 Bug Fixes
- Use "black" foreground for labeled terminal message to ensure contrast
- by [@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​10076](https://redirect.github.com/vitest-dev/vitest/issues/10076)
[<samp>(203f0)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/203f07af7)
- Make `expect(..., message)` consistent as error message prefix - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) and **Codex**
in
[#​10068](https://redirect.github.com/vitest-dev/vitest/issues/10068)
[<samp>(a1b5f)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/a1b5f0f4f)
- Do not hoist imports whose names match class properties . - by
[@​SunsetFi](https://redirect.github.com/SunsetFi) in
[#​10093](https://redirect.github.com/vitest-dev/vitest/issues/10093)
and
[#​10094](https://redirect.github.com/vitest-dev/vitest/issues/10094)
[<samp>(0fc4b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/0fc4b47e0)
- **browser**: Spread user server options into browser Vite server in
project - by
[@​GoldStrikeArch](https://redirect.github.com/GoldStrikeArch) in
[#​10049](https://redirect.github.com/vitest-dev/vitest/issues/10049)
[<samp>(65c9d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/65c9d55eb)
##### [View changes on
GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.3...v4.1.4)
###
[`v4.1.3`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.3)
[Compare
Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.2...v4.1.3)
##### 🚀 Experimental Features
- Add `experimental.preParse` flag - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​10070](https://redirect.github.com/vitest-dev/vitest/issues/10070)
[<samp>(78273)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7827363bd)
- Support `browser.locators.exact` option - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​10013](https://redirect.github.com/vitest-dev/vitest/issues/10013)
[<samp>(48799)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/487990a19)
- Add `TestAttachment.bodyEncoding` - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9969](https://redirect.github.com/vitest-dev/vitest/issues/9969)
[<samp>(89ca0)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/89ca0e254)
- Support custom snapshot matcher - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa), **Claude
Sonnet 4.6** and **Codex** in
[#​9973](https://redirect.github.com/vitest-dev/vitest/issues/9973)
[<samp>(59b0e)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/59b0e6411)
##### 🐞 Bug Fixes
- Advance fake timers with `expect.poll` interval - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) and **Claude
Sonnet 4.6** in
[#​10022](https://redirect.github.com/vitest-dev/vitest/issues/10022)
[<samp>(3f5bf)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/3f5bfa365)
- Add `@vitest/coverage-v8` and `@vitest/coverage-istanbul` as optional
dependency - by
[@​alan-agius4](https://redirect.github.com/alan-agius4) in
[#​10025](https://redirect.github.com/vitest-dev/vitest/issues/10025)
[<samp>(146d4)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/146d4f0a0)
- Fix `defineHelper` for webkit async stack trace + update playwright
1.59.0 - by [@​hi-ogawa](https://redirect.github.com/hi-ogawa)
in
[#​10036](https://redirect.github.com/vitest-dev/vitest/issues/10036)
[<samp>(5a5fa)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/5a5fa49fe)
- Fix suite hook throwing errors for unused auto test-scoped fixture -
by [@​hi-ogawa](https://redirect.github.com/hi-ogawa) and **Claude
Sonnet 4.6** in
[#​10035](https://redirect.github.com/vitest-dev/vitest/issues/10035)
[<samp>(39865)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/398657e8d)
- **expect**:
- Remove `JestExtendError.context` from verbose error reporting - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9983](https://redirect.github.com/vitest-dev/vitest/issues/9983)
[<samp>(66751)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/66751c9e8)
- Don't leak "runner" types - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​10004](https://redirect.github.com/vitest-dev/vitest/issues/10004)
[<samp>(ec204)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/ec2045543)
- **snapshot**:
- Fix flagging obsolete snapshots for snapshot properties mismatch -
by [@​hi-ogawa](https://redirect.github.com/hi-ogawa) and **Claude
Sonnet 4.6** in
[#​9986](https://redirect.github.com/vitest-dev/vitest/issues/9986)
[<samp>(6b869)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/6b869156b)
- Export custom snapshot matcher helper from `vitest` - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) and **Codex**
in
[#​10042](https://redirect.github.com/vitest-dev/vitest/issues/10042)
[<samp>(691d3)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/691d341fd)
- **ui**:
- Don't leak vite types - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​10005](https://redirect.github.com/vitest-dev/vitest/issues/10005)
[<samp>(fdff1)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/fdff1bf9a)
- **vm**:
- Fix external module resolve error with deps optimizer query - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) and **Claude
Sonnet 4.6** in
[#​10024](https://redirect.github.com/vitest-dev/vitest/issues/10024)
[<samp>(9dbf4)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/9dbf47786)
##### [View changes on
GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.2...v4.1.3)
###
[`v4.1.2`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.2)
[Compare
Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.1...v4.1.2)
This release bumps Vitest's `flatted` version and removes version
pinning to resolve `flatted`'s CVE related issues
([#​9975](https://redirect.github.com/vitest-dev/vitest/issues/9975)).
##### 🐞 Bug Fixes
- Don't resolve `setupFiles` from parent directory - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9960](https://redirect.github.com/vitest-dev/vitest/issues/9960)
[<samp>(7aa93)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7aa937776)
- Ensure sequential mock/unmock resolution - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) and **Claude
Opus 4.6** in
[#​9830](https://redirect.github.com/vitest-dev/vitest/issues/9830)
[<samp>(7c065)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7c06598db)
- **browser**: Take failure screenshot if `toMatchScreenshot` can't
capture a stable screenshot - by
[@​macarie](https://redirect.github.com/macarie) in
[#​9847](https://redirect.github.com/vitest-dev/vitest/issues/9847)
[<samp>(faace)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/faace1fbe)
- **coverage**: Correct `coverageConfigDefaults` values and types - by
[@​Arthie](https://redirect.github.com/Arthie) in
[#​9940](https://redirect.github.com/vitest-dev/vitest/issues/9940)
[<samp>(b3c99)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/b3c992cb2)
- **pretty-format**: Fix output limit over counting - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9965](https://redirect.github.com/vitest-dev/vitest/issues/9965)
[<samp>(d3b7a)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/d3b7a40fa)
- Disable colors if agent is detected - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) and
[@​AriPerkkio](https://redirect.github.com/AriPerkkio) in
[#​9851](https://redirect.github.com/vitest-dev/vitest/issues/9851)
[<samp>(6f97b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/6f97b55dd)
##### [View changes on
GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.1...v4.1.2)
###
[`v4.1.1`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.1)
[Compare
Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.0...v4.1.1)
##### 🚀 Features
- **experimental**:
- Expose `matchesTagsFilter` to test if the current filter matches tags
- by [@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9913](https://redirect.github.com/vitest-dev/vitest/issues/9913)
[<samp>(eec53)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/eec53d9f5)
- Introduce `experimental.vcsProvider` - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9928](https://redirect.github.com/vitest-dev/vitest/issues/9928)
[<samp>(56115)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/561150036)
##### 🐞 Bug Fixes
- Mark `TestProject.testFilesList` internal properly - by
[@​sapphi-red](https://redirect.github.com/sapphi-red) in
[#​9867](https://redirect.github.com/vitest-dev/vitest/issues/9867)
[<samp>(54f26)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/54f2660f5)
- Detect fixture that returns without calling `use` - by
[@​oilater](https://redirect.github.com/oilater) in
[#​9831](https://redirect.github.com/vitest-dev/vitest/issues/9831)
and
[#​9861](https://redirect.github.com/vitest-dev/vitest/issues/9861)
[<samp>(633ae)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/633ae2303)
- Drop vite 8.beta support - by
[@​AriPerkkio](https://redirect.github.com/AriPerkkio) in
[#​9862](https://redirect.github.com/vitest-dev/vitest/issues/9862)
[<samp>(b78f5)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/b78f5389d)
- Type regression in vi.mocked() static class methods - by
[@​purepear](https://redirect.github.com/purepear) and
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9857](https://redirect.github.com/vitest-dev/vitest/issues/9857)
[<samp>(90926)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/90926641b)
- Properly re-evaluate actual modules of mocked external - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9898](https://redirect.github.com/vitest-dev/vitest/issues/9898)
[<samp>(ae5ec)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/ae5ec03ef)
- Preserve coverage report when html reporter overlaps - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9889](https://redirect.github.com/vitest-dev/vitest/issues/9889)
[<samp>(2d81a)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/2d81ad897)
- Provide `vi.advanceTimers` to the preview provider - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9891](https://redirect.github.com/vitest-dev/vitest/issues/9891)
[<samp>(1bc3e)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/1bc3e63be)
- Don't leak event listener in playwright provider - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9910](https://redirect.github.com/vitest-dev/vitest/issues/9910)
[<samp>(d9355)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/d93550ff7)
- Open browser in `--standalone` mode without running tests - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9911](https://redirect.github.com/vitest-dev/vitest/issues/9911)
[<samp>(e78ad)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e78adcf97)
- Guard disposable and optional `body` - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9912](https://redirect.github.com/vitest-dev/vitest/issues/9912)
[<samp>(6fdb2)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/6fdb2ba61)
- Resolve `retry.condition` RegExp serialization issue - by
[@​nstepien](https://redirect.github.com/nstepien) and
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9942](https://redirect.github.com/vitest-dev/vitest/issues/9942)
[<samp>(7b605)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7b6054328)
- **collect**:
- Don't treat extra props on `test` return as tests - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9871](https://redirect.github.com/vitest-dev/vitest/issues/9871)
[<samp>(141e7)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/141e72aa1)
- **coverage**:
- Simplify provider types - by
[@​AriPerkkio](https://redirect.github.com/AriPerkkio) in
[#​9931](https://redirect.github.com/vitest-dev/vitest/issues/9931)
[<samp>(aaf9f)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/aaf9f18ae)
- Load built-in provider without module runner - by
[@​AriPerkkio](https://redirect.github.com/AriPerkkio) in
[#​9939](https://redirect.github.com/vitest-dev/vitest/issues/9939)
[<samp>(bf892)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/bf8920817)
- **expect**:
- Soft assertions continue after .resolves/.rejects promise errors -
by [@​mixelburg](https://redirect.github.com/mixelburg), **Maks
Pikov**, **Claude Opus 4.6 (1M context)** and
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9843](https://redirect.github.com/vitest-dev/vitest/issues/9843)
[<samp>(6d74b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/6d74b4948)
- Fix sinon-chai style API - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9943](https://redirect.github.com/vitest-dev/vitest/issues/9943)
[<samp>(0f08d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/0f08dda2c)
- **pretty-format**:
- Limit output for large object - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) and **Claude
Opus 4.6 (1M context)** in
[#​9949](https://redirect.github.com/vitest-dev/vitest/issues/9949)
[<samp>(0d5f9)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/0d5f9d6ef)
##### [View changes on
GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v4.1.0...v4.1.1)
###
[`v4.1.0`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v4.1.0)
[Compare
Source](https://redirect.github.com/vitest-dev/vitest/compare/v4.0.18...v4.1.0)
Vitest 4.1 is out!
This release page lists all changes made to the project during the 4.1
beta. To get a review of all the new features, read our [blog
post](https://vitest.dev/blog/vitest-4).
##### 🚀 Features
- Return a disposable from doMock() - by
[@​kirkwaiblinger](https://redirect.github.com/kirkwaiblinger) in
[#​9332](https://redirect.github.com/vitest-dev/vitest/issues/9332)
[<samp>(e3e65)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e3e659a96)
- Added chai style assertions - by
[@​ronnakamoto](https://redirect.github.com/ronnakamoto) and
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​8842](https://redirect.github.com/vitest-dev/vitest/issues/8842)
[<samp>(841df)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/841df9ac5)
- Update to sinon/fake-timers v15 and add `setTickMode` to timer
controls - by [@​atscott](https://redirect.github.com/atscott)
and [@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​8726](https://redirect.github.com/vitest-dev/vitest/issues/8726)
[<samp>(4b480)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/4b480aaed)
- Expose matcher types - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9448](https://redirect.github.com/vitest-dev/vitest/issues/9448)
[<samp>(3e4b9)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/3e4b913b1)
- Add `toTestSpecification` to reported tasks - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9464](https://redirect.github.com/vitest-dev/vitest/issues/9464)
[<samp>(1a470)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/1a4705da9)
- Show a warning if `vi.mock` or `vi.hoisted` are declared outside of
top level of the module - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9387](https://redirect.github.com/vitest-dev/vitest/issues/9387)
[<samp>(5db54)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/5db54a468)
- Track and display expectedly failed tests (.fails) in UI and CLI -
by [@​Copilot](https://redirect.github.com/Copilot),
**sheremet-va** and
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9476](https://redirect.github.com/vitest-dev/vitest/issues/9476)
[<samp>(77d75)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/77d75fd34)
- Support tags - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9478](https://redirect.github.com/vitest-dev/vitest/issues/9478)
[<samp>(de7c8)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/de7c8a521)
- Implement `aroundEach` and `aroundAll` hooks - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9450](https://redirect.github.com/vitest-dev/vitest/issues/9450)
[<samp>(2a8cb)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/2a8cb9dc2)
- Stabilize experimental features - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9529](https://redirect.github.com/vitest-dev/vitest/issues/9529)
[<samp>(b5fd2)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/b5fd2a16a)
- Accept `new` or `all` in `--update` flag - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9543](https://redirect.github.com/vitest-dev/vitest/issues/9543)
[<samp>(a5acf)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/a5acf28a5)
- Support `meta` in test options - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9535](https://redirect.github.com/vitest-dev/vitest/issues/9535)
[<samp>(7d622)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7d622e3d1)
- Support type inference with a new `test.extend` syntax - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9550](https://redirect.github.com/vitest-dev/vitest/issues/9550)
[<samp>(e5385)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e53854fcc)
- Support vite 8 beta, fix type issues in the config with different vite
versions - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9587](https://redirect.github.com/vitest-dev/vitest/issues/9587)
[<samp>(99028)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/990281dfd)
- Add assertion helper to hide internal stack traces - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) and **Claude
Opus 4.6** in
[#​9594](https://redirect.github.com/vitest-dev/vitest/issues/9594)
[<samp>(eeb0a)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/eeb0ae2f8)
- Store failure screenshots using artifacts API - by
[@​macarie](https://redirect.github.com/macarie) in
[#​9588](https://redirect.github.com/vitest-dev/vitest/issues/9588)
[<samp>(24603)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/24603e3c4)
- Allow `vitest list` to statically collect tests instead of running
files to collect them - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9630](https://redirect.github.com/vitest-dev/vitest/issues/9630)
[<samp>(7a8e7)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7a8e7fc20)
- Add `--detect-async-leaks` - by
[@​AriPerkkio](https://redirect.github.com/AriPerkkio) in
[#​9528](https://redirect.github.com/vitest-dev/vitest/issues/9528)
[<samp>(c594d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/c594d4af3)
- Implement `mockThrow` and `mockThrowOnce` - by
[@​thor-juhasz](https://redirect.github.com/thor-juhasz) and
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9512](https://redirect.github.com/vitest-dev/vitest/issues/9512)
[<samp>(61917)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/619179fb7)
- Support `update: "none"` and add docs about snapshots behavior on CI
- by [@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9700](https://redirect.github.com/vitest-dev/vitest/issues/9700)
[<samp>(05f18)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/05f1854e2)
- Support playwright `launchOptions` with `connectOptions` - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9702](https://redirect.github.com/vitest-dev/vitest/issues/9702)
[<samp>(f0ff1)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/f0ff1b2a0)
- Add `page/locator.mark` API to enhance playwright trace - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9652](https://redirect.github.com/vitest-dev/vitest/issues/9652)
[<samp>(d0ee5)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/d0ee546fe)
- **api**:
- Support tests starting or ending with `test` in
`experimental_parseSpecification` - by
[@​jgillick](https://redirect.github.com/jgillick) and **Jeremy
Gillick** in
[#​9235](https://redirect.github.com/vitest-dev/vitest/issues/9235)
[<samp>(2f367)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/2f367fad3)
- Add filters to `createSpecification` - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9336](https://redirect.github.com/vitest-dev/vitest/issues/9336)
[<samp>(c8e6c)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/c8e6c7fbf)
- Expose `runTestFiles` as alternative to `runTestSpecifications` - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9443](https://redirect.github.com/vitest-dev/vitest/issues/9443)
[<samp>(43d76)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/43d761821)
- Add `allowWrite` and `allowExec` options to `api` - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9350](https://redirect.github.com/vitest-dev/vitest/issues/9350)
[<samp>(20e00)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/20e00ef78)
- Allow passing down test cases to `toTestSpecification` - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9627](https://redirect.github.com/vitest-dev/vitest/issues/9627)
[<samp>(6f17d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/6f17d5ddf)
- **browser**:
- Add `userEvent.wheel` API - by
[@​macarie](https://redirect.github.com/macarie) in
[#​9188](https://redirect.github.com/vitest-dev/vitest/issues/9188)
[<samp>(66080)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/660801979)
- Add `filterNode` option to prettyDOM for filtering browser assertion
error output - by
[@​Copilot](https://redirect.github.com/Copilot), **sheremet-va**
and [@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9475](https://redirect.github.com/vitest-dev/vitest/issues/9475)
[<samp>(d3220)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/d3220fcd8)
- Support playwright persistent context - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa), **Claude Opus
4.6** and [@​sheremet-va](https://redirect.github.com/sheremet-va)
in
[#​9229](https://redirect.github.com/vitest-dev/vitest/issues/9229)
[<samp>(f865d)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/f865d2ba4)
- Added `detailsPanelPosition` option and button - by
[@​shairez](https://redirect.github.com/shairez) in
[#​9525](https://redirect.github.com/vitest-dev/vitest/issues/9525)
[<samp>(c8a31)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/c8a31147c)
- Use BlazeDiff instead of pixelmatch - by
[@​macarie](https://redirect.github.com/macarie) in
[#​9514](https://redirect.github.com/vitest-dev/vitest/issues/9514)
[<samp>(30936)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/309362089)
- Add `findElement` and enable strict mode in webdriverio and preview
- by [@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9677](https://redirect.github.com/vitest-dev/vitest/issues/9677)
[<samp>(c3f37)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/c3f37721c)
- **cli**:
- Add [@​bomb](https://redirect.github.com/bomb).sh/tab
completions - by
[@​AmirSa12](https://redirect.github.com/AmirSa12) and
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​8639](https://redirect.github.com/vitest-dev/vitest/issues/8639)
[<samp>(200f3)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/200f31704)
- **coverage**:
- Support `ignore start/stop` ignore hints - by
[@​AriPerkkio](https://redirect.github.com/AriPerkkio) in
[#​9204](https://redirect.github.com/vitest-dev/vitest/issues/9204)
[<samp>(e59c9)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e59c94ba6)
- Add `coverage.changed` option to report only changed files - by
[@​kykim00](https://redirect.github.com/kykim00) and
[@​AriPerkkio](https://redirect.github.com/AriPerkkio) in
[#​9521](https://redirect.github.com/vitest-dev/vitest/issues/9521)
[<samp>(1d939)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/1d9392c67)
- **experimental**:
- Add `onModuleRunner` hook to `worker.init` - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9286](https://redirect.github.com/vitest-dev/vitest/issues/9286)
[<samp>(e977f)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e977f3deb)
- Option to disable the module runner - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) and
[@​AriPerkkio](https://redirect.github.com/AriPerkkio) in
[#​9210](https://redirect.github.com/vitest-dev/vitest/issues/9210)
[<samp>(9be61)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/9be6121ee)
- Add `importDurations: { limit, print }` options - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa), **Claude Opus
4.6** and [@​sheremet-va](https://redirect.github.com/sheremet-va)
in
[#​9401](https://redirect.github.com/vitest-dev/vitest/issues/9401)
[<samp>(7e10f)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7e10fb356)
- Add print and fail thresholds for `importDurations` - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) and **Claude
Opus 4.6** in
[#​9533](https://redirect.github.com/vitest-dev/vitest/issues/9533)
[<samp>(3f7a5)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/3f7a5f8f8)
- **fixtures**:
- Pass down file context to `beforeAll`/`afterAll` - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9572](https://redirect.github.com/vitest-dev/vitest/issues/9572)
[<samp>(c8339)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/c83395f2c)
- **reporters**:
- Add `agent` reporter to reduce ai agent token usage - by
[@​cpojer](https://redirect.github.com/cpojer) in
[#​9779](https://redirect.github.com/vitest-dev/vitest/issues/9779)
[<samp>(3e9e0)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/3e9e096a2)
- **runner**:
- Enhance `retry` options - by
[@​MazenSamehR](https://redirect.github.com/MazenSamehR), **Matan
Shavit**, [@​AriPerkkio](https://redirect.github.com/AriPerkkio)
and [@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9370](https://redirect.github.com/vitest-dev/vitest/issues/9370)
[<samp>(9e4cf)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/9e4cfd295)
- **ui**:
- Allow run individual test/suites - by
[@​userquin](https://redirect.github.com/userquin) in
[#​9465](https://redirect.github.com/vitest-dev/vitest/issues/9465)
[<samp>(73b10)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/73b10f1b9)
- Add project filter/sort support - by
[@​userquin](https://redirect.github.com/userquin) in
[#​8689](https://redirect.github.com/vitest-dev/vitest/issues/8689)
[<samp>(0c7ea)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/0c7eaac16)
- Add duration sorting to explorer - by
[@​julianhahn](https://redirect.github.com/julianhahn) and
[@​cursoragent](https://redirect.github.com/cursoragent) in
[#​9603](https://redirect.github.com/vitest-dev/vitest/issues/9603)
[<samp>(209b1)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/209b1b0e1)
- Implement filter for slow tests - by
[@​DerYeger](https://redirect.github.com/DerYeger) and
[@​userquin](https://redirect.github.com/userquin) in
[#​9705](https://redirect.github.com/vitest-dev/vitest/issues/9705)
[<samp>(8880c)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/8880c907a)
- **vitest**:
- Add run summary in GitHub Actions Reporter - by
[@​macarie](https://redirect.github.com/macarie) and **jhnance**
in
[#​9579](https://redirect.github.com/vitest-dev/vitest/issues/9579)
[<samp>(96bfc)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/96bfc8345)
##### 🐞 Bug Fixes
- Deprecate several vitest/\* entry points - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9347](https://redirect.github.com/vitest-dev/vitest/issues/9347)
[<samp>(fd459)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/fd45928be)
- Use `meta.url` in `createRequire` - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9441](https://redirect.github.com/vitest-dev/vitest/issues/9441)
[<samp>(e3422)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e34225563)
- Preact browser mode init example of render function not async - by
[@​WuMingDao](https://redirect.github.com/WuMingDao) in
[#​9375](https://redirect.github.com/vitest-dev/vitest/issues/9375)
[<samp>(2bea5)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/2bea549c7)
- Deprecate unused types in matcher context - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9449](https://redirect.github.com/vitest-dev/vitest/issues/9449)
[<samp>(20f87)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/20f8753a2)
- Handle `external/noExternal` during `configEnvironment` hook - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) and **Claude
Opus 4.6** in
[#​9508](https://redirect.github.com/vitest-dev/vitest/issues/9508)
[<samp>(59ea2)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/59ea27c1c)
- Replace default ssr environment runner with Vitest server module
runner - by [@​hi-ogawa](https://redirect.github.com/hi-ogawa)
and **Claude Opus 4.6** in
[#​9506](https://redirect.github.com/vitest-dev/vitest/issues/9506)
[<samp>(cd5db)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/cd5db660c)
- Propagate experimental CLI options to child projects - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) and **Claude
Opus 4.6** in
[#​9531](https://redirect.github.com/vitest-dev/vitest/issues/9531)
[<samp>(b624f)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/b624fae53)
- Show a warning when `browser.isolate` is used - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9410](https://redirect.github.com/vitest-dev/vitest/issues/9410)
[<samp>(3d48e)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/3d48ebcb9)
- Fix `vi.mock({ spy: true })` node v8 coverage - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa), **hi-ogawa**
and **Claude Opus 4.6** in
[#​9541](https://redirect.github.com/vitest-dev/vitest/issues/9541)
[<samp>(687b6)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/687b633c1)
- Don't show internal ssr handler in errors - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9547](https://redirect.github.com/vitest-dev/vitest/issues/9547)
[<samp>(76c43)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/76c4397b5)
- Close vitest if it failed to start - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9573](https://redirect.github.com/vitest-dev/vitest/issues/9573)
[<samp>(728ba)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/728ba617f)
- Fix ssr environment runner in project - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9584](https://redirect.github.com/vitest-dev/vitest/issues/9584)
[<samp>(09006)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/090064f97)
- Trim trailing white spaces in code block - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9591](https://redirect.github.com/vitest-dev/vitest/issues/9591)
[<samp>(f78be)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/f78bea992)
- Support inline snapshot inside test.for/each - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9590](https://redirect.github.com/vitest-dev/vitest/issues/9590)
[<samp>(615fd)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/615fd521e)
- Apply source maps for external module stack trace - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9152](https://redirect.github.com/vitest-dev/vitest/issues/9152)
[<samp>(79e20)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/79e20d5a3)
- Remove the `.name` from statically collected test - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9596](https://redirect.github.com/vitest-dev/vitest/issues/9596)
[<samp>(b66ff)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/b66ff691a)
- Don't suppress warnings on pnp - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9602](https://redirect.github.com/vitest-dev/vitest/issues/9602)
[<samp>(89cbd)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/89cbdaea3)
- Support snapshot with `expect.soft` - by
[@​iumehara](https://redirect.github.com/iumehara),
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) and **Claude
Opus 4.6** in
[#​9231](https://redirect.github.com/vitest-dev/vitest/issues/9231)
[<samp>(3eb2c)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/3eb2cd541)
- Log seed when only `sequence.shuffle.tests` is enabled - by
[@​kaigritun](https://redirect.github.com/kaigritun), **Kai
Gritun** and
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9576](https://redirect.github.com/vitest-dev/vitest/issues/9576)
[<samp>(8182b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/8182b77ad)
- Externalize `expect/src/utils` from `vitest` - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9616](https://redirect.github.com/vitest-dev/vitest/issues/9616)
[<samp>(48739)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/487398422)
- Ignore test.override during static collection - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9620](https://redirect.github.com/vitest-dev/vitest/issues/9620)
[<samp>(09174)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/0917470ce)
- Increase stacktrace limit for `--detect-async-leaks` - by
[@​AriPerkkio](https://redirect.github.com/AriPerkkio) in
[#​9638](https://redirect.github.com/vitest-dev/vitest/issues/9638)
[<samp>(9fd4c)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/9fd4ce533)
- Hanging-reporter link in cli - by
[@​flx-sta](https://redirect.github.com/flx-sta) in
[#​9649](https://redirect.github.com/vitest-dev/vitest/issues/9649)
[<samp>(7c103)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7c103055c)
- Fix teardown timeout of `aroundEach/All` when inner `aroundEach/All`
throws - by [@​hi-ogawa](https://redirect.github.com/hi-ogawa)
in
[#​9657](https://redirect.github.com/vitest-dev/vitest/issues/9657)
[<samp>(4ec6c)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/4ec6cb305)
- Fix ui mode / html reporter and coverage integration - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) and **Claude
Opus 4.6** in
[#​9626](https://redirect.github.com/vitest-dev/vitest/issues/9626)
[<samp>(86fad)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/86fad4b42)
- Don't continue when `aroundEach/All` setup timed out - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9670](https://redirect.github.com/vitest-dev/vitest/issues/9670)
[<samp>(bb013)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/bb013d54b)
- Align `VitestRunnerConfig` optional fields with `SerializedConfig` -
by [@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9661](https://redirect.github.com/vitest-dev/vitest/issues/9661)
[<samp>(79520)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/79520d82d)
- Handle Symbol values in format utility - by
[@​nami8824](https://redirect.github.com/nami8824) in
[#​9658](https://redirect.github.com/vitest-dev/vitest/issues/9658)
[<samp>(0583f)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/0583f067e)
- Deprecate `toBe*` spy assertions in favor of `toHaveBeen*` (and
`toThrowError`) - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9665](https://redirect.github.com/vitest-dev/vitest/issues/9665)
[<samp>(4d390)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/4d390dfe9)
- Don't propagate nested `aroundEach/All` errors but aggregate them on
runner - by [@​hi-ogawa](https://redirect.github.com/hi-ogawa)
in
[#​9673](https://redirect.github.com/vitest-dev/vitest/issues/9673)
[<samp>(b6365)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/b63653f5a)
- Show a better error if there is a pending dynamic import - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9676](https://redirect.github.com/vitest-dev/vitest/issues/9676)
[<samp>(7ef5c)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7ef5cf4b7)
- Preserve stack trace of `resolves/rejects` chained assertion error -
by [@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9679](https://redirect.github.com/vitest-dev/vitest/issues/9679)
[<samp>(c6151)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/c61511d4a)
- Handle module-sync condition in vmThreads/vmForks require - by
[@​lesleh](https://redirect.github.com/lesleh) in
[#​9650](https://redirect.github.com/vitest-dev/vitest/issues/9650)
and
[#​9651](https://redirect.github.com/vitest-dev/vitest/issues/9651)
[<samp>(bb203)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/bb20389f4)
- Hooks should respect `maxConcurrency` - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9653](https://redirect.github.com/vitest-dev/vitest/issues/9653)
[<samp>(16d13)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/16d13d981)
- Recursively autospy module object - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9687](https://redirect.github.com/vitest-dev/vitest/issues/9687)
[<samp>(695a8)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/695a86b41)
- Remove trailing spaces from diff error log - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) and
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9680](https://redirect.github.com/vitest-dev/vitest/issues/9680)
[<samp>(395d1)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/395d1a29e)
- Respect project `resolve.conditions` for externals - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9717](https://redirect.github.com/vitest-dev/vitest/issues/9717)
[<samp>(1d498)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/1d4987498)
- Use object for WeakMap instead of a symbol to support webcontainers
- by [@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9731](https://redirect.github.com/vitest-dev/vitest/issues/9731)
[<samp>(c5225)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/c52259330)
- Fix re-mocking virtual module - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9748](https://redirect.github.com/vitest-dev/vitest/issues/9748)
[<samp>(3cbbb)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/3cbbb17f1)
- Cancelling should stop current test immediately - by
[@​AriPerkkio](https://redirect.github.com/AriPerkkio) in
[#​9729](https://redirect.github.com/vitest-dev/vitest/issues/9729)
[<samp>(0cb2f)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/0cb2f7239)
- Make `mockObject` change backwards compatible - by
[@​sheremet-va](https://redirect.github.com/sheremet-va) in
[#​9744](https://redirect.github.com/vitest-dev/vitest/issues/9744)
[<samp>(84c69)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/84c69497f)
- Fix `URL.name` on jsdom - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9767](https://redirect.github.com/vitest-dev/vitest/issues/9767)
[<samp>(031f3)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/031f3a374)
- Save and restore module graph in blob reporter - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9740](https://redirect.github.com/vitest-dev/vitest/issues/9740)
[<samp>(84355)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/843554bf0)
- Don't silence reporter errors from test runtime events handler in
normal run and --merge-reports - by
[@​hi-ogawa](https://redirect.github.com/hi-ogawa) in
[#​9727](https://redirect.github.com/vitest-dev/vitest/issues/9727)
[<samp>(4072d)</samp>](https://redirect.github.
> ✂ **Note**
>
> PR body was truncated to here.
</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:eyJjcmVhdGVkSW5WZXIiOiI0NC4zNS40IiwidXBkYXRlZEluVmVyIjoiNDQuMzUuNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Issue number: resolves #31381 --------- <!-- Please do not submit updates to dependencies unless it fixes an issue. --> <!-- Please try to limit your pull request to one type (bugfix, feature, etc). Submit multiple pull requests if needed. --> ## What is the current behavior? <!-- Please describe the current behavior that you are modifying. --> `ion-select` derives the text it displays for the selected option, and that option's contribution to the button's `aria-label`, from the option's child nodes. In v9 that derivation is wrong whenever an option has more than one child node, or has its text wrapped in an element. | `ion-select-option` content | browser renders | v8 | v9 | | --- | --- | --- | --- | | `Star` | `Star` | `Star` | `Star` | | two sibling text nodes, `{'★'}{'Star'}` | `★Star` | `★Star` | `★ Star` | | `A <b>Star</b>` | `A Star` | `A Star` | `A` | | `<b>Star</b>` | `Star` | `Star` | *(empty)* | Two distinct defects: 1. **A space is inserted between adjacent text nodes.** Every framework renders `{icon}{label}` as two sibling text nodes with no whitespace between them, so any option with an emoji, flag, or icon prefix gains a space that is not in the DOM. 2. **Text wrapped in an element is dropped entirely.** An option whose content is `<b>Star</b>`, `<span>Star</span>`, or an i18n component's wrapper element renders as an **empty select** with an empty accessible name, silently. This is the more damaging of the two. Both affect the visible selected text and the `aria-label`, and both propagate to every overlay interface — `createAlertInputs`, `createActionSheetButtons`, and `createOverlaySelectOptions` read the option through the same helper. In the linked reproduction, opening the first select shows an alert radio labelled `★ Star`. There is no error or warning; the text is just wrong. ## What is the new behavior? <!-- Please describe the behavior or changes that are being added by this PR. --> The selected text and `aria-label` should match what the browser renders for the option's content, which is what v8 produced via `textContent`: `★Star` for two adjacent text nodes, and `A Star` for `A <b>Star</b>`. - - - ## Does this introduce a breaking change? - [ ] Yes - [X] No (It fixes an unreported breaking change made in #31241) <!-- If this introduces a breaking change: 1. Describe the impact and migration path for existing applications below. 2. Update the BREAKING.md file with the breaking change. 3. Add "BREAKING CHANGE: [...]" to the commit description when merging. See https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md#footer for more information. --> ## Other information <!-- Any other information that is important to this PR such as screenshots of how the component looks before and after the change. --> --------- Co-authored-by: Shane <shane@shanessite.net>
## What is the current behavior? The latest version of `@stencil/core` changes a line in the generated `components.d.ts`, failing the nightly build. ## What is the new behavior? Bump `@stencil/core` on the main branch and commit the new `components.d.ts`. ## Does this introduce a breaking change? - [ ] Yes - [X] No
Issue number: resolves #30449 --------- ## What is the current behavior? `ion-picker-column` commits the centered option on a 250ms idle timer that only starts once the wheel stops moving. Flick a wheel and tap a Save button while it's still coasting, and the click handler reads the previous value. On an `ion-datetime` with `preferWheel`, the wheel shows one date while `value` still reports another. ## What is the new behavior? During a scroll the user started, the column watches for `pointerdown` anywhere outside itself. On that press it halts the wheel on the option under the highlight and commits it synchronously, so an application's own click handler reads the value the user can see. A press on a sibling wheel in the same picker is exempt, so reaching for the next column leaves the first one coasting. The datetime wheel handlers now read the working and active parts at event time, because an outside press settles every coasting column in one synchronous dispatch and the previous render-time reads clobbered each other. ## Does this introduce a breaking change? - [ ] Yes - [x] No ## Other information The community PR for this issue, #30674, was a great attempt, but it takes the reporter's other suggestion and adds public `ionScrollStart` and `ionScrollEnd` events to `ion-picker-column` and `ion-datetime`. I didn't go that way for two reasons. It's permanent public API on two components plus the Angular and Vue proxies, carried by every consumer forever, to work around a bug. More importantly it doesn't fix the stale value: every app has to write the disable-Save logic itself, and its `ionScrollEnd` is debounced 300ms after the wheel settles, so a tap during the flick still reads the old value at the moment the click handler runs. Committing on `pointerdown` fixes existing apps with no code change. The scroll events are a fair feature request on their own, just a separate one from this bug fix. Preview: - Picker column scroll: [iOS](https://ionic-framework-git-fw-7706-ionic1.vercel.app/src/components/picker-column/test/scroll?ionic:mode=ios) / [MD](https://ionic-framework-git-fw-7706-ionic1.vercel.app/src/components/picker-column/test/scroll?ionic:mode=md) - Datetime prefer-wheel: [iOS](https://ionic-framework-git-fw-7706-ionic1.vercel.app/src/components/datetime/test/prefer-wheel?ionic:mode=ios) / [MD](https://ionic-framework-git-fw-7706-ionic1.vercel.app/src/components/datetime/test/prefer-wheel?ionic:mode=md)
Issue number: resolves #31389 --------- ## What is the current behavior? <!-- Please describe the current behavior that you are modifying. --> Currently, `componentWillUnmount` in `createInlineOverlayComponent` removes a nested inline overlay host that `CoreDelegate` has teleported out of its `<template>`. React also runs that hook when it only *hides* a subtree, so a Suspense fallback, an Offscreen tree, or the StrictMode cycle deletes an overlay that is still presenting. React did not remove the host, so React never puts it back. Core emits `ionMount` and then goes quiet: no `willPresent`, no `didPresent`, and no dismiss lifecycle, while the React tree still believes the overlay is open. The user sees nothing at all. ## What is the new behavior? The wrapper now tells a React hide from a real destroy instead of treating both as an unmount. The marker `<template>` is the discriminator, since it stays at the JSX position and leaves the document only on a real unmount, so the teardown defers a microtask and runs only if the marker really left. A hide leaves the host exactly where it is, `present()` and `didDismiss` keep working while the subtree is hidden, and a destroy that hits while it is already hidden still cleans up even though React skips the second `componentWillUnmount` there. This addresses #31223's requirements by making a relocated portaled host move back into `portalTarget` synchronously, and the StrictMode cycle still leaves exactly one copy in the DOM. Separately, the five overlays that release the app root on disconnect (`modal`, `popover`, `alert`, `action-sheet`, `loading`) now restore it on reconnect, along with the modal's safe-area overrides and parent-removal observer, and the button gesture on `alert` and `action-sheet`. A presented overlay that gets detached and re-inserted across a task previously came back with the root lock and safe-area gone. ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information This supersedes #31390, which fixes the same issue by recording the removed host and re-appending it on remount. That works for the reported case, but it keeps the removal, and the removal costs more than the DOM node: the disconnect releases the root lock, clears the safe-area overrides and the sheet's `--ion-modal-offset-top`, destroys the button gesture, and drops the parent-removal observer. Putting the node back restores none of that, so the smaller fix needs the core half of this PR anyway. Not removing it in the first place avoids all of that, and also covers the portaled overlays, the destroy-while-hidden case, and a dismiss landing during the hidden window, which #31390 doesn't reach. Thanks to @ptmkenny for the report, the analysis, and the original patch, which is where the diagnosis came from. Note that the core half is defence-in-depth rather than a requirement for #31389. Once the React wrapper stops removing the host, core no longer sees a detach and re-attach in the reported flow. It does fix a real pre-existing bug though, since a presented modal moved by anything else lost its safe-area, so it's worth keeping. Preview: - [Inline modal (iOS)](https://ionic-framework-git-fix-react-inline-overlay-hide-vs-unmount-ionic1.vercel.app/src/components/modal/test/inline?ionic:mode=ios) - [Modal safe-area (iOS)](https://ionic-framework-git-fix-react-inline-overlay-hide-vs-unmount-ionic1.vercel.app/src/components/modal/test/safe-area?ionic:mode=ios) ## Current dev build: ``` 9.0.1-dev.11787589191.1e183b55 ``` --------- Co-authored-by: ptmkenny <github@ptmkenny.com>
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [github/codeql-action](https://redirect.github.com/github/codeql-action) | action | patch | `v4.37.7` → `v4.37.8` | --- ### Release Notes <details> <summary>github/codeql-action (github/codeql-action)</summary> ### [`v4.37.8`](https://redirect.github.com/github/codeql-action/compare/v4.37.7...v4.37.8) [Compare Source](https://redirect.github.com/github/codeql-action/compare/v4.37.7...v4.37.8) </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:eyJjcmVhdGVkSW5WZXIiOiI0NC4zOS4wIiwidXBkYXRlZEluVmVyIjoiNDQuMzkuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release 9.0.1