chore(git): sync with main - #31353
Merged
Merged
Conversation
Issue number: resolves #31155, resolves #31143 --------- ## What is the current behavior? Currently, an `ion-datetime` inside a modal or popover shows the wrong month once the overlay is reopened. The selected day isn't visible, the previous month button does nothing, and picking a day from the grid lands on an unrelated date. Overlays move their host element into `ion-app` when presenting and back to its original position when dismissing, which disconnects and reconnects the datetime. `disconnectedCallback` reset `hasBeenIntersecting` during that move, so by the time the hidden-state `IntersectionObserver` entry arrived, `hiddenCallback` mistook the dismissal for the synthetic initial entry and returned early. That left `datetime-ready` on the host, so on the next present `markReady` saw the class and returned without re-centering the calendar on the working month, and the browser had already reset `scrollLeft` to 0 while the overlay was hidden. `scrollLeft: 0` renders the previous month's grid while the header still names the working month, which is what produces all three symptoms. ## What is the new behavior? With this change, `disconnectedCallback` no longer resets `hasBeenIntersecting`. That flag tracks the observers, and the observers are only created in `componentDidLoad` and never re-created on reconnect, so a DOM move has no business clearing it. `hiddenCallback` now sees the real hidden transition on dismiss and tears down as it did before #31108, which lets `markReady` run again on the next present and re-center the calendar. ## 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. --> This regression was introduced in #31108. That PR needed the flag to make `hiddenCallback` ignore the synthetic initial entry, but the `disconnectedCallback` reset it also added had no job and broke the overlay case. Before #31108, `hiddenCallback` had no guard at all and always removed `datetime-ready` on dismiss, so this restores the behavior that shipped for all of v8.. - [Relevant test screen - iOS](https://ionic-framework-git-fix-31155-ionic1.vercel.app/src/components/datetime-button/test/overlays?ionic:mode=ios) - [Relevant test screen - MD](https://ionic-framework-git-fix-31155-ionic1.vercel.app/src/components/datetime-button/test/overlays?ionic:mode=md) To reproduce: open the "Modal - Default" picker, dismiss it, then open it again. On `main` the grid shows February while the header reads March 2022. --------- Co-authored-by: Maria Hutt <[email protected]>
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [github/codeql-action](https://redirect.github.com/github/codeql-action) | action | patch | `v4.37.4` → `v4.37.5` | --- ### Release Notes <details> <summary>github/codeql-action (github/codeql-action)</summary> ### [`v4.37.5`](https://redirect.github.com/github/codeql-action/compare/v4.37.4...v4.37.5) [Compare Source](https://redirect.github.com/github/codeql-action/compare/v4.37.4...v4.37.5) </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:eyJjcmVhdGVkSW5WZXIiOiI0NC4zLjIiLCJ1cGRhdGVkSW5WZXIiOiI0NC4zLjIiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=--> 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.37.5` → `v4.37.6` | --- ### Release Notes <details> <summary>github/codeql-action (github/codeql-action)</summary> ### [`v4.37.6`](https://redirect.github.com/github/codeql-action/releases/tag/v4.37.6) [Compare Source](https://redirect.github.com/github/codeql-action/compare/v4.37.5...v4.37.6) - Changed the default filepath for the new remote file address format that was introduced in CodeQL Action 4.37.0 / 3.37.0 to `.github/codeql-config.yml` to align it with the suggested path that is used elsewhere. [#​4070](https://redirect.github.com/github/codeql-action/pull/4070) </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:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMi4wIiwidXBkYXRlZEluVmVyIjoiNDQuMTIuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Issue number: resolves #31333 --------- ## What is the current behavior? Currently, Stencil's lazy loader resolves component bundles with a template literal dynamic import wrapped in a `/* @vite-ignore */` comment. Vite 8 moved dependency prebundling from esbuild to Rolldown, which honors that comment and leaves the import alone, so the `.entry.js` chunks never get emitted into the prebundle output. Requests for them 404 and no lazy component registers, which surfaces as `Constructor for "ion-app#undefined" was not found` in the console. Angular CLI 22.1 is where most people hit this, since its dev server is the first to ship Vite 8. It only affects the lazy `IonicModule` path, because that's the only thing in the repo that pulls `@ionic/core/loader`. Standalone components import from `@ionic/core/components` and never touch the loader. ## What is the new behavior? With this change we set `extras.enableImportInjection` in `core/stencil.config.ts`. Stencil prepends a switch of literal import paths to the loader, ahead of the existing `@vite-ignore` import, so Rolldown can resolve each bundle and emit its chunk. The original import stays as the fallback, so nothing changes for consumers that already worked. The fix is one config flag that would silently revert if anyone dropped it, so there's a guard alongside it. `core/scripts/verify/lazy-imports.js` reads the built `dist/esm` and `dist/cjs`, locates the loader chunk, and fails if any bundle is missing a literal import. It runs in both `build-core` and `build-core-stencil-prerelease`, so a Stencil upgrade that changes the injection behavior fails the nightly rather than shipping. ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information Verified against a stock Angular CLI 22.1 app using `IonicModule.forRoot()` and a local build of this branch. Before the fix we had a ton of 404s on `ion-app_8.entry.js` and `ion-button_2.entry.js`, plus some `Constructor for ... was not found` errors. After the fix we had no console errors, components render fine, and `ng build` emits the entry chunks with the right names. CI doesn't cover the actual symptom and it cannot here because we have no ng22 test apps on main, but we'll have it tested for free on major-9.0 with the existing ng22 test app there. The guard script asserts the build-output invariant for the extra validation. The injected switch adds roughly 10.8 KB raw to the lazy runtime chunk, which is under 1 KB gzipped because the case clauses are near-identical repeated text, but people using the CDN build will have no extra overhead at all. Anyone on a published `@ionic/core` can work around this with `prebundle.exclude` in `angular.json` until it ships: ```json "serve": { "options": { "prebundle": { "exclude": ["@ionic/angular", "@ionic/core"] } } } ```
Issue number: resolves #31332 --------- ## What is the current behavior? Currently, pulling down inside a sheet or card modal dismisses the modal instead of triggering the refresher when the content uses a custom scroll host. ## What is the new behavior? With this change, the gesture resolves the refresher from the enclosing `ion-content` when the swipe target is a custom scroll host, so pulling down runs the refresher and leaves the modal alone. The new `findRefresherInContent` util only reports a refresher for the scroll host that refresher actually scrolls with, which is the first one in the content, so a second unrelated scroll host still swipes the modal normally. The `expandToScroll: false` path now runs the same check. ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information Test coverage is 4 e2e tests on the new page: [Test page (iOS)](https://ionic-framework-git-fix-31332-ionic1.vercel.app/src/components/modal/test/refresher-scroll-target/?ionic:mode=ios) [Test page (MD)](https://ionic-framework-git-fix-31332-ionic1.vercel.app/src/components/modal/test/refresher-scroll-target/?ionic:mode=md) ## Current dev build: ``` 8.8.18-dev.11786385944.17aca7e5 ```
Issue number: resolves #31312 --------- <!-- 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? Current docs don't provide recommended testing guidance for accurately testing standalone components. This can create issues because a standalone (custom-elements) build doesn't expose `el.componentOnReady()`, so any test that reads fixture.nativeElement before hydration in a standalone project has the potential to not be testing what they think they are. ## What is the new behavior? - Adds a couple of sentences to talk about using the existing `componentOnReady` helper from `@ionic/core` in Angular's `testing.md` file - Adds the same standalone guidance to the `testing.md` files for React and Vue ## Does this introduce a breaking change? - [ ] Yes - [x] No --------- Co-authored-by: Maria Hutt <[email protected]>
…tep (#31310) Issue number: N/A --------- <!-- Please do not submit updates to dependencies unless it fixes an issue. --> <!-- Please try to limit your pull request to one type (bugfix, feature, etc). Submit multiple pull requests if needed. --> ## What is the current behavior? <!-- Please describe the current behavior that you are modifying. --> The Playwright npm packages and the `mcr.microsoft.com/playwright` Docker image in `core/Dockerfile` are tracked by two separate Renovate managers. The Docker image is published to the container registry about a day after the npm release, so the two updates become available at different times. Because they are on different datasources, the npm bump opens a PR before the Docker tag is ready, and getting the Dockerfile into the same PR requires a manual rebase once the image lands. This is easy to miss, and merging the npm bump alone leaves `core/package.json` and `core/Dockerfile` on mismatched Playwright versions. ## What is the new behavior? <!-- Please describe the behavior or changes that are being added by this PR. --> - A custom manager now resolves the `core/Dockerfile` Playwright image tag from the npm `@playwright/test` release instead of the container registry, so both files bump from the same version. - The built-in Docker manager for that image is disabled so it no longer produces a separate, lagging update. - The Dockerfile is added to the grouped `playwright` rule, and a `minimumReleaseAge` of 3 days lets the matching image publish before the PR opens. - Net result is a single `playwright` PR that updates `core/package.json` and `core/Dockerfile` together, with no manual rebase. ## Does this introduce a breaking change? - [ ] Yes - [ ] No <!-- If this introduces a breaking change: 1. Describe the impact and migration path for existing applications below. 2. Update the BREAKING.md file with the breaking change. 3. Add "BREAKING CHANGE: [...]" to the commit description when merging. See https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md#footer for more information. --> ## Other information <!-- Any other information that is important to this PR such as screenshots of how the component looks before and after the change. --> This is a Renovate config change only, so it will not take effect until the next scheduled Renovate run. If the Docker image for a given release has not been published yet when CI runs, the Dockerfile build can fail on a missing tag; the fix is to wait for the image to appear and re-run the job, with no code change needed. This is documented inline in `renovate.json5`.
Issue number: resolves #31337 --------- ## What is the current behavior? Currently, `ion-content` caches its fullscreen offsets and only recomputes them on load, a `window` resize, `ionTabBarLoaded`, or `recalculateDimensions()`. A change to `--ion-safe-area-top` fires none of those, so on Android edge-to-edge, where the real inset only arrives once the native WindowInsets callback has run, the fullscreen scroll region and `#background-content` stay short by the inset and leave a gap behind a translucent header. Sheet modals have the same problem: `--ion-modal-offset-top` is a resolved pixel value written at present time, so a sheet presented before the inset is known stays too tall. ## What is the new behavior? Fullscreen `ion-content` now observes its own box with a `ResizeObserver`, which works because the content flexes to fill whatever space the headers and footers leave behind. The callback keeps the `offsetParent === null` guard from `onResize()`, since a hidden page reports a 0x0 box and recomputing then would zero the offsets, but it skips that method's 100ms debounce, which left the offsets visibly wrong for a small amount of time. Sheet modals subscribe to `onRootSafeAreaTopChange()`, a hidden probe element whose `height` tracks `var(--ion-safe-area-top)` so a change to the variable becomes an observable size change. ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information The preview pages won't show the bug on their own, since it needs the inset to change after load. Run `document.documentElement.style.setProperty('--ion-safe-area-top', '24px')` in the console to trigger it. - [Fullscreen content (iOS)](https://ionic-framework-git-fix-31337-ionic1.vercel.app/src/components/content/test/fullscreen?ionic:mode=ios) / [Fullscreen content (MD)](https://ionic-framework-git-fix-31337-ionic1.vercel.app/src/components/content/test/fullscreen?ionic:mode=md) - [Modal safe-area (iOS)](https://ionic-framework-git-fix-31337-ionic1.vercel.app/src/components/modal/test/safe-area?ionic:mode=ios) / [Modal safe-area (MD)](https://ionic-framework-git-fix-31337-ionic1.vercel.app/src/components/modal/test/safe-area?ionic:mode=md)
v8.8.18
|
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 next with main.