chore(git): sync with main - #31509
Merged
Merged
Conversation
…31413) Issue number: resolves #31149 --------- ## What is the current behavior? Setting `--height` to any of the following on an `ion-modal` containing an `ion-content` results in the `ion-content` collapsing to `0` height: `auto`, `fit-content`, `min-content`, or `max-content`. ## What is the new behavior? - Checks if modal `--height` is set to `auto`, `fit-content`, `min-content,` or `max-content` and styles the `ion-content`, `ion-nav` and `.ion-page` appropriately if so - Watches for changes to `--height` on `ion-modal` to dynamically add and remove the class that sizes the `ion-content` to its content - Updates modal `--max-height` to `100%` which allows the content to scroll instead of overflowing and being clipped - Adds a preview test for different scenarios where `ion-modal` has `--height` set - Adds e2e tests for the various `--height` scenarios - Updates `safe-area-utils` to account for the new content-sized modals - Adds spec tests for all new functions ## Does this introduce a breaking change? - [ ] Yes - [x] No ## Other information **Dev build**: `9.0.1-dev.11788212611.154b1596` **Previews**: - [Modal: Content Height](https://ionic-framework-git-fw-7731-ionic1.vercel.app/src/components/modal/test/content-height) - [Modal: Safe Area](https://ionic-framework-git-fw-7731-ionic1.vercel.app/src/components/modal/test/safe-area) **Docs PR**: ionic-team/ionic-docs#4689 --------- Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com>
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [vitest](https://vitest.dev) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | [`5.0.0` → `5.0.1`](https://renovatebot.com/diffs/npm/vitest/5.0.0/5.0.1) |  |  | --- ### Release Notes <details> <summary>vitest-dev/vitest (vitest)</summary> ### [`v5.0.1`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v5.0.1) [Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v5.0.0...v5.0.1) ##### 🚀 Features - **ui**: - Move trace attempts selector to viewer header - by [@​hi-ogawa](https://redirect.github.com/hi-ogawa), **Hiroshi Ogawa** and **Codex** in [#​11189](https://redirect.github.com/vitest-dev/vitest/issues/11189) [<samp>(5dc4b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/5dc4b5c92) - Add focused trace view layout mode - by [@​hi-ogawa](https://redirect.github.com/hi-ogawa), **Hiroshi Ogawa**, **OpenCode (gpt-5.6-sol)** and **Codex** in [#​11190](https://redirect.github.com/vitest-dev/vitest/issues/11190) [<samp>(376dc)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/376dc3bc1) ##### 🐞 Bug Fixes - Exit 1 when vitest list fails collection - by [@​hamed-bavar](https://redirect.github.com/hamed-bavar) in [#​11145](https://redirect.github.com/vitest-dev/vitest/issues/11145) and [#​11146](https://redirect.github.com/vitest-dev/vitest/issues/11146) [<samp>(6108b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/6108b8197) - Keep parse error details in static collection - by [@​hamed-bavar](https://redirect.github.com/hamed-bavar) in [#​11150](https://redirect.github.com/vitest-dev/vitest/issues/11150) and [#​11151](https://redirect.github.com/vitest-dev/vitest/issues/11151) [<samp>(7c818)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/7c818153a) - Avoid recursive prototype in automocking - by [@​sheremet-va](https://redirect.github.com/sheremet-va) in [#​11195](https://redirect.github.com/vitest-dev/vitest/issues/11195) [<samp>(99fc5)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/99fc52591) - Prevent false Vitest import resolution - by [@​sheremet-va](https://redirect.github.com/sheremet-va) in [#​11196](https://redirect.github.com/vitest-dev/vitest/issues/11196) [<samp>(b426c)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/b426c1976) - Keep metadata file when clearing the cache - by [@​sheremet-va](https://redirect.github.com/sheremet-va) in [#​11199](https://redirect.github.com/vitest-dev/vitest/issues/11199) [<samp>(73614)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/73614654a) - Correct typos in error message and comments - by [@​shinji00222](https://redirect.github.com/shinji00222) and **Shinji** in [#​11187](https://redirect.github.com/vitest-dev/vitest/issues/11187) [<samp>(115c3)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/115c3f6d2) - Resolve ResolvedConfig exactOptionalPropertyTypes errors - by [@​LukeAbby](https://redirect.github.com/LukeAbby) in [#​11175](https://redirect.github.com/vitest-dev/vitest/issues/11175) [<samp>(498fb)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/498fbe922) - Share the server on self-referencing `extends` - by [@​sheremet-va](https://redirect.github.com/sheremet-va) in [#​11034](https://redirect.github.com/vitest-dev/vitest/issues/11034) [<samp>(23dda)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/23dda738c) - Warn when deprecated `deps.optimizer.web` is used - by [@​im10furry](https://redirect.github.com/im10furry) in [#​11214](https://redirect.github.com/vitest-dev/vitest/issues/11214) [<samp>(2ce29)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/2ce29d5fa) - **browser**: - Avoid double quotes in `config.define` - by [@​sheremet-va](https://redirect.github.com/sheremet-va) in [#​11198](https://redirect.github.com/vitest-dev/vitest/issues/11198) [<samp>(972e2)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/972e24bab) - **doctor**: - Measure vm pools for custom environments - by [@​sheremet-va](https://redirect.github.com/sheremet-va) in [#​11212](https://redirect.github.com/vitest-dev/vitest/issues/11212) [<samp>(91ab1)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/91ab1588c) - **expect**: - Correct return value in `toMatchAriaSnapshot` - by [@​sheremet-va](https://redirect.github.com/sheremet-va) in [#​11208](https://redirect.github.com/vitest-dev/vitest/issues/11208) [<samp>(c119b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/c119be016) - **fakeTimers**: - Force `queueMicrotask` and `nextTick` in `toNotFake` - by [@​kingmakeruix](https://redirect.github.com/kingmakeruix), **kingmakeruix**, **Hiroshi Ogawa**, **Codex** and [@​hi-ogawa](https://redirect.github.com/hi-ogawa) in [#​11261](https://redirect.github.com/vitest-dev/vitest/issues/11261) [<samp>(a47d7)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/a47d7908f) - **snapshot**: - Report obsolete keys next to skipped tests - by [@​hamed-bavar](https://redirect.github.com/hamed-bavar), **Hiroshi Ogawa** and **OpenCode (gpt-5.6-sol)** in [#​11157](https://redirect.github.com/vitest-dev/vitest/issues/11157) and [#​11158](https://redirect.github.com/vitest-dev/vitest/issues/11158) [<samp>(17e2b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/17e2b22dd) - **types**: - Make public declarations self-contained - by [@​ZoeySigel](https://redirect.github.com/ZoeySigel) in [#​11141](https://redirect.github.com/vitest-dev/vitest/issues/11141) [<samp>(45546)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/455466c16) - **ui**: - Fix collapse/expand suite with file name search - by [@​hi-ogawa](https://redirect.github.com/hi-ogawa), **Hiroshi Ogawa** and **Codex** in [#​11260](https://redirect.github.com/vitest-dev/vitest/issues/11260) [<samp>(0a712)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/0a7122daa) - Fix explorer file summary count - by [@​hi-ogawa](https://redirect.github.com/hi-ogawa), **Hiroshi Ogawa**, **OpenCode (gpt-5.6-sol)** and **Codex** in [#​11125](https://redirect.github.com/vitest-dev/vitest/issues/11125) [<samp>(05982)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/05982297d) - **utils**: - Fix `deepMerge` to handle prototype - by [@​hi-ogawa](https://redirect.github.com/hi-ogawa), **Hiroshi Ogawa** and **Codex** in [#​11215](https://redirect.github.com/vitest-dev/vitest/issues/11215) [<samp>(4944c)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/4944cf498) ##### [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v5.0.0...v5.0.1) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekday before 11am" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 🔕 **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:eyJjcmVhdGVkSW5WZXIiOiI0NC45My40IiwidXBkYXRlZEluVmVyIjoiNDQuOTMuNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> 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/) | |---|---|---|---| | [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`24.13.4` → `24.13.5`](https://renovatebot.com/diffs/npm/@types%2fnode/24.13.4/24.13.5) |  |  | --- ### 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:eyJjcmVhdGVkSW5WZXIiOiI0NC45My40IiwidXBkYXRlZEluVmVyIjoiNDQuOTMuNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
v9.0.4
) Issue number: resolves #30626 --------- <!-- Please do not submit updates to dependencies unless it fixes an issue. --> <!-- Please try to limit your pull request to one type (bugfix, feature, etc). Submit multiple pull requests if needed. --> ## What is the current behavior? <!-- Please describe the current behavior that you are modifying. --> The native `button` inside `ion-button` is not being updated with the aria-attributes if it changes on `ion-button` after initial render, including `aria-description`. Additionally, the same dynamic is happening with other button like elements, including `ion-card` and `ion-item`. ## What is the new behavior? <!-- Please describe the behavior or changes that are being added by this PR. --> The native `button` inside `ion-button` updates with the aria attributes if it changes on `ion-button`. Changes include: - Add 2 helper functions to [helpers.ts](http://helpers.ts/) - A mutation observer watching for all attribute changes. - One which watches only for aria attribute changes, which calls the mutation observer. - Add 4 tests to [button.e2e.ts](https://github.com/ionic-team/ionic-framework/blob/main/core/src/components/button/test/a11y/button.e2e.ts) in a11y: - One which loops through each aria attribute (imported from the helper) using `ariaAttributes` - One which specifically tests `aria-disabled` since it is managed in `render()` separately. Render forced with prop change. - One which looks at detaching and reattaching behavior - One which tests the helper strips, sets, accepts empty strings, and can process removeAttribute - Update [button.tsx](https://github.com/ionic-team/ionic-framework/blob/main/core/src/components/button/button.tsx) to: - Add import of new helpers watchForAriaAttributeChanges, type AttributeWatcher from '@utils/helpers' - Add `private ariaWatcher?: AttributeWatcher;` to class Button - Add `private didLoad = false;` for conditional use in `connectedCallback`and use in added `componentDidLoad` for starting the watcher after initial component load - Remove previous [watch block](https://github.com/ionic-team/ionic-framework/blob/b4b2603210b313fc2f2ee2c88b9112751e24b338/core/src/components/button/button.tsx#L161-L181) since now handled by helper - In `item.tsx`, - Add `ariaWatcher` and `watchForAriaAttributeChanges`, replicating functionality of the watch block, only applying to `aria-label` currently - Use existing`private didLoad = false;` for conditional use in `connectedCallback`and use in existing `componentDidLoad` for starting the watcher after initial component load - In `item.e2e.test`, add tests to ensure: - native element updates aria-label when host attribute changes - aria-label sync survives detach and reattach - helper strips host attribute and syncs native element through set, empty, and remove - In `card.tsx`, - Add `ariaWatcher` and `watchForAriaAttributeChanges`, replicating functionality of the watch block, only applying to `aria-label` currently - Add `private didLoad = false;` for conditional use in `connectedCallback`and use in added `componentDidLoad` for starting the watcher after initial component load - In `card.e2e.test`, add tests to ensure: - native element updates aria-label when host attribute changes - aria-label sync survives detach and reattach - helper strips host attribute and syncs native element through set, empty, and remove ## Does this introduce a breaking change? - [ ] Yes - [x] No --------- Co-authored-by: ShaneK <shane@shanessite.net>
Issue number: internal --------- ## What is the current behavior? Several dependencies throughout the repo have postcss as a dependency. While it doesn't affect users, a vulnerability in postcss causes dependabot to log high severity alerts. ## What is the new behavior? - Bumped dependencies in vue and vue-router that were on the old postcss. - Added overrides for ng18, ng19, and ng20 test apps, which are stuck on older versions. - Ran `npm update` for all other packages that inherited postcss. This has a few side effects: - Bumps the `lockFileVersion` from 2 to 3, which accounts for most of the diff in the package-lock files. - Bumps the `react-router` from 5 to 6 in the React 18 test app package-lock. ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information Core uses old versions of stylelint and stylelint-order that cannot be easily updated, and these use an old postcss with the vulnerability. --------- Co-authored-by: @anupamme --------- Co-authored-by: Maria Hutt <thetaPC@users.noreply.github.com>
Issue number: internal --------- ## What is the current behavior? The Vue package has two warnings that are printed regardless of the configured log level. ## What is the new behavior? - Export `printIonWarning` and `printIonError` from core, enabling packages to log messages with Ionic's configured log level. - Use `printIonWarning` in the Vue package instead of `console.warn` directly. This checks the log level before printing. ## Does this introduce a breaking change? - [ ] Yes - [X] No
Issue number: resolves #30919 --------- Supersedes #31047, which this builds on. @KanhaiyaPandey is credited as co-author on the commit. ## What is the current behavior? When a CSS `zoom` other than `1` applies to the popover, `ion-popover` renders incorrectly: it is positioned away from its trigger, and with `size="cover"` it is given the wrong width. This affects a documented workflow — adjusting the `html` zoom is the approach Ionic's documentation recommends for dynamic font scaling on Chrome for Android. The zoom factor is effectively applied twice. Geometry APIs (`getBoundingClientRect()` on the trigger, content and arrow, plus `clientX`/`clientY` for `reference="event"`) report values in the zoomed coordinate space. Those values are written straight into the inline `top`/`left`/`--width` styles on `.popover-content`, which are interpreted in the unzoomed layout space and then re-scaled by the browser. ## What is the new behavior? - The effective zoom is read from the **popover's own context** via `currentCSSZoom`, not from `document.documentElement`. This picks up a zoom applied anywhere above the popover and accounts for zoom accumulated across several ancestors. Where the property is unavailable, it falls back to the ratio between the element's bounding rect and its `offsetWidth`; differences below a small tolerance are treated as no zoom, since `offsetWidth` is integer-rounded and would otherwise report a phantom zoom. - Every rect-derived measurement is normalized by that factor: trigger and content rects, arrow dimensions, the `size="cover"` width, and the pointer coordinates used by `reference="event"`. - `innerWidth`/`innerHeight` are scaled into the same space. They are not affected by CSS `zoom`, so leaving them alone made the offscreen adjustment clamp against a viewport larger than the space actually available, letting the popover render past the edge of the screen. - Behavior is unchanged when no zoom is applied: the detected factor is exactly `1` and every normalization is a division by `1`. This mirrors how Floating UI addressed the same problem in floating-ui/floating-ui#3492 — `Element.currentCSSZoom` as both the value and the feature detector, with a default of `1` on engines that lack it. Their fix also had to scale the overflow bounds inside `detectOverflow()`, which is the same class of issue as the `innerWidth`/`innerHeight` point above. ## Does this introduce a breaking change? - [ ] Yes - [x] No The new `zoom` parameters on the popover positioning helpers are optional and default to `1`. Those helpers are internal to the component and are not part of the public API. ## Other information **Tests** Eight E2E tests in `core/src/components/popover/test/zoom/`, covering the review points raised on #31047: | Scenario | Covers | |---|---| | Zoom on `body`; accumulated zoom (`html` 1.2 × `body` 1.25) | zoom applied at levels other than `documentElement` | | `size="cover"` width matches the trigger | sizing, not just positioning | | `reference="event"` anchors to the pointer | pointer coordinates | | Arrow centred on the trigger (ios) | arrow positioning | | Popover stays within the viewport | offscreen adjustment | | Zoomed out (`0.8`) and zoomed in (`1.5`) | factors either side of 1 | All eight fail against `main` and pass with this change, so each one covers the regression rather than merely passing. These are functional assertions rather than screenshots: what is being verified is the popover's geometry relative to its trigger, and both boxes are read in the same coordinate space, so the relationship holds at any zoom level. No screenshot baselines are added. Unit tests in `core/src/components/popover/test/util.spec.ts` cover the zoom detection itself — the `currentCSSZoom` path, the `offsetWidth` fallback, the rounding tolerance — and the normalization of content, trigger and arrow measurements. **Verification** The spec suite passes in full: 82 files, 714 tests, no failures. The zoom tests are not skipped for any browser and pass on all three browser projects — Chromium, Firefox and WebKit — in both `ios` and `md` modes. Assertions use a 2px tolerance to absorb sub-pixel differences between engines. --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: KanhaiyaPandey <kanhaiyapandey2232@gmail.com>
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [github/codeql-action](https://redirect.github.com/github/codeql-action) | action | patch | `v4.38.0` → `v4.38.1` | --- ### Release Notes <details> <summary>github/codeql-action (github/codeql-action)</summary> ### [`v4.38.1`](https://redirect.github.com/github/codeql-action/releases/tag/v4.38.1) [Compare Source](https://redirect.github.com/github/codeql-action/compare/v4.38.0...v4.38.1) - The CodeQL Action now has experimental support for CodeQL releases for which per-language bundles are available. Per-language bundles support analysis for a single language and are therefore smaller than the combined bundles that allow analysis for all supported languages. As a result, per-language bundles take up less space on disk and are faster to download. We expect to roll this change out to everyone in the coming weeks. [#​4146](https://redirect.github.com/github/codeql-action/pull/4146) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekday before 11am" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/ionic-team/ionic-framework). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMDMuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjEwMy4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`24.13.5` → `24.13.6`](https://renovatebot.com/diffs/npm/@types%2fnode/24.13.5/24.13.6) |  |  | --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekday before 11am" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/ionic-team/ionic-framework). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMDMuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjEwMy4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
…1460) Issue number: resolves #30933 --------- ## What is the current behavior? Currently, an `ion-datetime` in a modal or popover sometimes opens with a blank calendar on iOS 26. The host is missing `datetime-ready`, so `.calendar-body` stays at `opacity: 0`. It doesn't happen every time, and when it does the calendar stays blank until the overlay is reopened. The `ion-datetime` component runs two IntersectionObservers on the same root and target, one that adds `datetime-ready` and one that removes it. WebKit reports an element that is still on screen as not intersecting, and it doesn't deliver that entry to every observer, so the removing observer tears the ready state down and the adding one never hears the recovery. ## What is the new behavior? The hidden-state observer now checks the host before tearing anything down. An overlay hides its contents with `display: none`, which leaves the host without a layout box, so a host that still has one is on screen and the entry is wrong. The `hasBeenIntersecting` flag added in #31108 is gone, because the same check covers the synthetic "not intersecting" entry that `observe()` fires when the host mounts offscreen. Both callbacks also read the last entry instead of the first, since a batched callback's first entry can be stale. ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information I reproduced this on an iOS 26.2 simulator, opening and dismissing the modal in a loop and checking `datetime-ready` after each open. Four extra observers on the same root and target recorded 54, 52, 54, 52 events over 25 cycles, which is where the per-observer delivery claim comes from. Same machine and everything, 150 cycles each: | build | blank calendar | | --- | --- | | main | 7 (4.7%) | | this branch | 0 | The e2e test stubs `IntersectionObserver` to report hidden while the datetime is on screen, since the WebKit misbehavior can't be forced on demand. It fails on all three browsers without the fix. The open/close cycle test guards against regressions but won't reproduce the glitch on its own. [Relevant test screen - iOS](https://ionic-framework-git-fix-30933-ionic1.vercel.app/src/components/datetime-button/test/overlays?ionic:mode=ios)
v9.0.5
Issue number: N/A (docs-only link fix)
---------
## What is the current behavior?
`docs/component-guide.md` links to Angular source files that no longer
exist, so every link in the "Angular value accessors" and "Interface
Exports" steps returns a 404 on GitHub:
-
`/packages/angular/src/directives/control-value-accessors/{text,numeric,boolean,select}-value-accessor.ts`
(5 links)
- `/packages/angular/src/index.ts`
`packages/angular/src/` now only contains `common/`, `lazy/` and
`standalone/`.
## What is the new behavior?
- The value accessor links point at
`packages/angular/src/lazy/directives/control-value-accessors/`, where
the four directives live (their selectors match the ones the guide
quotes).
- The Angular interface-export step points at
`packages/angular/src/lazy/index.ts` and
`packages/angular/src/standalone/index.ts`, which are the two files that
export the `*CustomEvent` / `*EventDetail` types today.
## Does this introduce a breaking change?
- [ ] Yes
- [x] No
## Other information
Docs only, no code changes. Found and prepared with AI assistance
(Claude Code); I checked every new path exists on `main`.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Issue number: internal --------- <!-- Please do not submit updates to dependencies unless it fixes an issue. --> <!-- Please try to limit your pull request to one type (bugfix, feature, etc). Submit multiple pull requests if needed. --> ## What is the current behavior? <!-- Please describe the current behavior that you are modifying. --> Currently, the `update-package-lock` job fails the release with `ETARGET No matching version found for @ionic/core@^9.0.x`. Since 9.0.4 npm processes publishes asynchronously, so `npm publish` returns before the version resolves. The registry recorded `@ionic/core` 4s after the publish step on 9.0.3, but 5m11s on 9.0.4 and 5m10s on 9.0.5, against a near constant 5m04s gap from publishing to that job, so the last two releases each missed by about six seconds and needed the job re-run by hand. Separately, `purge-cdn-cache` has never done anything. A missing comma before the `@next` CSS entry made the body invalid JSON, so jsDelivr rejected every purge with `InvalidContent` while `curl` exited 0 and the step stayed green. That has been true since #29121. ## What is the new behavior? <!-- Please describe the behavior or changes that are being added by this PR. --> The `Bump Package Lock` step is split into `Resolve Package Locks`, which retries `lerna exec "npm install --package-lock-only --prefer-online"` every 15s against a 900s wall clock deadline, and `Commit Package Locks`, which does the commit and the push. We retry the install rather than probing with `npm view` first, because the two read separately cached documents and a passing probe wouldn't mean the install resolves. The `--prefer-online` flag is required because a failed install caches the version-less packument locally for 300s, so plain retries never reach the registry. The bound is wall clock rather than an attempt count since one attempt costs about 45s and a fixed count would overrun `timeout-minutes`. The `purge-cdn-cache` job now runs after `update-package-lock` and gates on a new `resolved` output rather than the job's result, so a failed lockfile push still purges but an unresolved version doesn't. The comma is fixed and the step checks the HTTP status, failing on a 4xx because a bad payload is otherwise silent, and warning on anything else so a jsDelivr outage doesn't fail a release. ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information <!-- Any other information that is important to this PR such as screenshots of how the component looks before and after the change. --> The `release.yml` workflow only runs on a real production release, so I couldn't test this end to end. I ran each step's shell against stubs for the failure paths, but the first real signal will be the next release.
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@stencil/core](https://stenciljs.com/) ([source](https://redirect.github.com/stenciljs/core)) | [`4.45.0` → `4.45.1`](https://renovatebot.com/diffs/npm/@stencil%2fcore/4.45.0/4.45.1) |  |  | --- ### Release Notes <details> <summary>stenciljs/core (@​stencil/core)</summary> ### [`v4.45.1`](https://redirect.github.com/stenciljs/core/blob/HEAD/CHANGELOG.md#-4451-2026-09-23) [Compare Source](https://redirect.github.com/stenciljs/core/compare/v4.45.0...v4.45.1) ##### Bug Fixes - **compiler:** correct CSS minifier selector-list splitting ([#​6895](https://redirect.github.com/stenciljs/core/issues/6895)) ([332a8fa](https://redirect.github.com/stenciljs/core/commit/332a8fad6358db92b21c8b69a669fd5e4b70d0a4)) - **docs:** derive CEM readonly from getter/setter instead of mutable ([#​6900](https://redirect.github.com/stenciljs/core/issues/6900)) ([1c81131](https://redirect.github.com/stenciljs/core/commit/1c81131f659dd0beaf9bdadd59d5f2a5f895dd38)) - **runtime:** pre-hydrate getter / setter attribute ([#​6890](https://redirect.github.com/stenciljs/core/issues/6890)) ([171d0ce](https://redirect.github.com/stenciljs/core/commit/171d0ce3f0b854cc848a324972c4371b6309743c)) - **ssr:** clear modeResolutionChain on `setMode`. Fixes memory leak ([#​6903](https://redirect.github.com/stenciljs/core/issues/6903)) ([ca9273d](https://redirect.github.com/stenciljs/core/commit/ca9273dfddd60b398725de65559f6a2f355ffe72)) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekday before 11am" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/ionic-team/ionic-framework). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMDMuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjEwMy4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Issue number: N/A (docs-only link fix) --------- ## What is the current behavior? Two links in the Vue contributor docs point at sections that don't exist: - `docs/vue/testing.md` step 1 links "Build" to `../README.md#building`. `docs/README.md` has no Building section. - `packages/vue/README.md` links "test-app directory" to `test/README.md#syncing-local-changes`. `packages/vue/test/README.md` is now a two-line pointer with no such section; the syncing steps live in `docs/vue/testing.md`. ## What is the new behavior? - "Build" points at the Building section of `packages/vue/README.md`, which walks through building `core`, `packages/vue` and `packages/vue-router`, the three projects step 1 names. - The sync sentence links to `docs/vue/testing.md#syncing-local-changes` with an absolute GitHub URL, following the Contributing Guide link in the same README, so it also works on npmjs.com where this README is published. ## Does this introduce a breaking change? - [ ] Yes - [x] No ## Other information Docs only, no code changes. Found and prepared with AI assistance (Claude Code); I checked both target headings exist on `main`, and ran a GitHub Copilot review over the diff. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@types/node](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`24.13.6` → `24.19.0`](https://renovatebot.com/diffs/npm/@types%2fnode/24.13.6/24.19.0) |  |  | --- ### 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:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMTIuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjExMi4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> 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/) | |---|---|---|---| | [vitest](https://vitest.dev) ([source](https://redirect.github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | [`5.0.1` → `5.0.2`](https://renovatebot.com/diffs/npm/vitest/5.0.1/5.0.2) |  |  | --- ### Release Notes <details> <summary>vitest-dev/vitest (vitest)</summary> ### [`v5.0.2`](https://redirect.github.com/vitest-dev/vitest/releases/tag/v5.0.2) [Compare Source](https://redirect.github.com/vitest-dev/vitest/compare/v5.0.1...v5.0.2) ##### 🐞 Bug Fixes - Bind `process` in case global is overwritten - by [@​AriPerkkio](https://redirect.github.com/AriPerkkio) in [#​11343](https://redirect.github.com/vitest-dev/vitest/issues/11343) [<samp>(0b792)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/0b79231ad) - **detect-async-leaks**: - Ignore `process.stdio` handles - by [@​AriPerkkio](https://redirect.github.com/AriPerkkio) in [#​11333](https://redirect.github.com/vitest-dev/vitest/issues/11333) [<samp>(0fd6b)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/0fd6b9790) - **expect**: - Fix `toMatchObject` with asymmetric matchers - by [@​ShreeBohara](https://redirect.github.com/ShreeBohara), **Claude Opus 5**, [@​hi-ogawa](https://redirect.github.com/hi-ogawa), **Hiroshi Ogawa** and **Codex (GPT-5)** in [#​11100](https://redirect.github.com/vitest-dev/vitest/issues/11100) [<samp>(42523)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/42523289e) - **jsdom**: - Fix `Request` with `Blob` body on jsdom 28+ - by [@​harshit-d3v](https://redirect.github.com/harshit-d3v) in [#​11295](https://redirect.github.com/vitest-dev/vitest/issues/11295) [<samp>(d1c3e)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/d1c3ecc93) - **reporter**: - `agent` to respect `--silent` - by [@​Raj4478](https://redirect.github.com/Raj4478) and [@​AriPerkkio](https://redirect.github.com/AriPerkkio) in [#​11271](https://redirect.github.com/vitest-dev/vitest/issues/11271) [<samp>(5b95e)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/5b95efb6d) - **reporters**: - Handle concurrent `createReport` calls - by [@​7rulnik](https://redirect.github.com/7rulnik) in [#​11278](https://redirect.github.com/vitest-dev/vitest/issues/11278) [<samp>(e8e55)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/e8e556ff7) - `hanging-process` to use ESM entrypoint - by [@​AriPerkkio](https://redirect.github.com/AriPerkkio) in [#​11316](https://redirect.github.com/vitest-dev/vitest/issues/11316) [<samp>(4e91e)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/4e91e5668) - **spy**: - Fix stack overflow when spying `Set.prototype.add` - by [@​fengmk2](https://redirect.github.com/fengmk2) in [#​11299](https://redirect.github.com/vitest-dev/vitest/issues/11299) [<samp>(a0a93)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/a0a939653) - **ui**: - Persist authentication cookie beyond current browser session - by [@​hi-ogawa](https://redirect.github.com/hi-ogawa), **Hiroshi Ogawa** and **OpenCode (gpt-5.6-sol)** in [#​11066](https://redirect.github.com/vitest-dev/vitest/issues/11066) [<samp>(f8819)</samp>](https://redirect.github.com/vitest-dev/vitest/commit/f88195e16) ##### [View changes on GitHub](https://redirect.github.com/vitest-dev/vitest/compare/v5.0.1...v5.0.2) </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:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMTIuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjExMi4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> 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/) | |---|---|---|---| | [chalk](https://redirect.github.com/chalk/chalk) | [`6.0.0` → `6.0.1`](https://renovatebot.com/diffs/npm/chalk/6.0.0/6.0.1) |  |  | --- ### Release Notes <details> <summary>chalk/chalk (chalk)</summary> ### [`v6.0.1`](https://redirect.github.com/chalk/chalk/compare/v6.0.0...47fc05abd46171b235e24174cd2dba83d25bf037) [Compare Source](https://redirect.github.com/chalk/chalk/compare/v6.0.0...v6.0.1) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekday before 11am" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 🔕 **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:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMTIuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjExMi4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [github/codeql-action](https://redirect.github.com/github/codeql-action) | action | patch | `v4.38.1` → `v4.38.2` | --- ### Release Notes <details> <summary>github/codeql-action (github/codeql-action)</summary> ### [`v4.38.2`](https://redirect.github.com/github/codeql-action/releases/tag/v4.38.2) [Compare Source](https://redirect.github.com/github/codeql-action/compare/v4.38.1...v4.38.2) - Update default CodeQL bundle version to [2.27.1](https://redirect.github.com/github/codeql-action/releases/tag/codeql-bundle-v2.27.1). [#​4160](https://redirect.github.com/github/codeql-action/pull/4160) </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:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMTIuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjExMi4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Updated the contributing guide to replace the outdated commands (`npm run test.screenshot`) with the current commands: `npm run test.e2e.docker.update-snapshots` and `npm run test.e2e.docker`. Also moved most of the explanation into the proper testing files and link to it instead of having it in the main contributing guide. Restructures the steps for running tests and removes old Docker instructions. --------- Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com>
… is pushed (#31481) Issue number: resolves #31477 --------- ## What is the current behavior? Currently, an outlet holding a splat route alongside a more specific sibling loses the splat's page when you push that sibling. A splat matches every pathname, so `findViewItems` hands back its view item for a pathname the sibling owns, and `handlePageTransition` then overwrites that item's `reactElement`, which swaps the page and unmounts it. Whatever was underneath, usually tabs or a nested outlet, is destroyed along with its state and scroll position. A root-level `/*` has two further problems. Going back blanks the whole outlet, because `getParentPath` caches an inferred `outletMountPath` on the root outlet, which scopes it to whatever route was active and makes the next pathname look out of scope, so `handleOutOfScopeOutlet` aborts the transition and tears the outlet down. Swipe-to-go-back does nothing, because the deactivation scan in `renderViewItem` re-applies `ion-page-hidden` on the next render and undoes `revealIonPageForSwipeBack`, leaving the user dragging a page with `display: none`. ## What is the new behavior? `handlePageTransition` now compares the view item it found against `findRouteByRouteInfo`, which is React Router's own ranking, and drops it when the two disagree so a fresh view item gets created for the winning route. The catch-all deactivation no longer unmounts a view that was pushed over, since hiding it is enough to keep it from rendering alongside the pushed page. A root outlet no longer caches a mount path, in both places that were doing it, because it is mounted under nothing and an inferred path only scopes it wrongly. The deactivation scan also skips whichever page a swipe gesture is currently revealing, tracked in a `WeakSet` that is marked in `onStart` and cleared when the gesture ends. ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information New test pages: - [Splat sibling](https://ionic-framework-git-fix-rr6-route-bug-ionic1.vercel.app/react-router/splat-sibling) - [Index sibling](https://ionic-framework-git-fix-rr6-route-bug-ionic1.vercel.app/react-router/index-sibling) - [Empty path sibling](https://ionic-framework-git-fix-rr6-route-bug-ionic1.vercel.app/react-router/empty-path-sibling) ## Current Dev Build ``` 9.0.6-dev.11790349282.1a877abd ```
This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@playwright/test](https://playwright.dev) ([source](https://redirect.github.com/microsoft/playwright)) | `1.62.1` → `1.63.0` |  |  | | [@playwright/test](https://playwright.dev) ([source](https://redirect.github.com/microsoft/playwright)) | [`^1.62.1` → `^1.63.0`](https://renovatebot.com/diffs/npm/@playwright%2ftest/1.62.1/1.63.0) |  |  | | [playwright-core](https://playwright.dev) ([source](https://redirect.github.com/microsoft/playwright)) | [`^1.62.1` → `^1.63.0`](https://renovatebot.com/diffs/npm/playwright-core/1.62.1/1.63.0) |  |  | --- ### Release Notes <details> <summary>microsoft/playwright (@​playwright/test)</summary> ### [`v1.63.0`](https://redirect.github.com/microsoft/playwright/compare/v1.62.1...1b025d7e20a026371cd5f98ba0cdce48892737c8) [Compare Source](https://redirect.github.com/microsoft/playwright/compare/v1.62.1...v1.63.0) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekday before 11am" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/ionic-team/ionic-framework). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC42OS4xIiwidXBkYXRlZEluVmVyIjoiNDQuNjkuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: ionitron <hi@ionicframework.com> Co-authored-by: Maria Hutt <thetaPC@users.noreply.github.com>
…nsitions (#31497) Issue number: resolves #31479 --------- <!-- Please do not submit updates to dependencies unless it fixes an issue. --> <!-- Please try to limit your pull request to one type (bugfix, feature, etc). Submit multiple pull requests if needed. --> ## What is the current behavior? Currently, switching tabs or following a link with `routerDirection="none"` fires none of the four view lifecycle events, so a page that loads its data in `useIonViewWillEnter` renders empty. The non-animated branch of `StackManager.transitionPage()` skips `routerOutlet.commit()` and swaps the page classes itself to avoid intermediate paints, and core dispatches all four events from inside `commit()`, so they never fire. A capturing listener on the `ion-router-outlet` gets nothing either, so it isn't a problem with the hooks. ## What is the new behavior? That branch now dispatches the four events itself, in the same order core's `transition()` uses. The class swap moved to after all four, so the leaving page is still on screen for its leave events and the entering page is revealed only once they've fired. That's what core does on the animated path, where `beforeTransition` un-hides the leaving page and `ion-page-hidden` only goes back on after `commit()` resolves, and it matters because `ion-page-hidden` is `display: none`, so a `useIonViewDidLeave` handler reading `scrollTop` off the outgoing page was getting 0. The two dispatch sites that already existed in this file for out-of-scope and root navigation now share the same helper. ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information The events used to come from core here. This path called `commit(enteringEl, undefined, { duration: 0 })` until [12f0d5e](12f0d5e) dropped it to fix a white flash during tab switches, and with no leaving element core took its `noAnimation` branch and fired the enter pair, so the enter half of this is a regression from that commit. Putting the call back would get the events plus focus and z-index handling from core for free, but it risks the flash it was removed for, so this dispatches them directly instead. The patch on the issue fires the enter events unconditionally. This gates them on the generation check so a superseded transition doesn't announce an entry, and it skips the leave events when the leaving page already has `ion-page-hidden`, because two transitions sharing a leaving element would otherwise run its `useIonViewDidLeave` teardown twice. The check is the class rather than `isViewVisible` since a nested outlet marks its leaving page `visibility: hidden` before we get here and still needs `ionViewDidLeave` to unmount. Preview: - [Tab lifecycle](https://ionic-framework-git-fix-rr6-lifecycle-non-animated-ionic1.vercel.app/react-router/tab-lifecycle/home) - [routerDirection="none"](https://ionic-framework-git-fix-rr6-lifecycle-non-animated-ionic1.vercel.app/react-router/direction-none-back/a) ## Current Dev Build ``` 9.0.6-dev.11790615145.1d8c56a2 ```
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Sync feature-9.1 with main.