From 003de2d85e024f55acce1dd77ebc9a2a2df4ecb0 Mon Sep 17 00:00:00 2001 From: Brandy Smith Date: Tue, 7 Oct 2025 11:47:53 -0400 Subject: [PATCH 01/20] chore(deps): do not group stencil with output targets (#30711) Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> --- renovate.json5 | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/renovate.json5 b/renovate.json5 index 672f8fc461..a14bdb1860 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -8,12 +8,19 @@ groupName: "Download + Upload Artifacts" }, { - matchPackagePatterns: ["@stencil/core", "@stencil/angular-output-target", "@stencil/react-output-target", "@stencil/sass", "@stencil/vue-output-target"], + matchPackagePatterns: ["@stencil/core", "@stencil/sass"], groupName: "stencil", matchFileNames: [ "core/package.json" ] }, + { + matchPackagePatterns: ["@stencil/angular-output-target", "@stencil/react-output-target", "@stencil/vue-output-target"], + groupName: "stencil-output-targets", + matchFileNames: [ + "core/package.json" + ] + }, // TODO(ROU-11172): unpin React output target version { matchPackageNames: ["@stencil/react-output-target"], From daf311f63a4d70e24d661933226db952a8e8f859 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 7 Oct 2025 14:01:23 -0400 Subject: [PATCH 02/20] chore(deps): update dependency @stencil/core to v4.38.0 (#30615) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [@stencil/core](https://stenciljs.com/) ([source](https://redirect.github.com/stenciljs/core)) | [`4.36.2` -> `4.38.0`](https://renovatebot.com/diffs/npm/@stencil%2fcore/4.36.2/4.38.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@stencil%2fcore/4.38.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@stencil%2fcore/4.36.2/4.38.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
stenciljs/core (@​stencil/core) ### [`v4.38.0`](https://redirect.github.com/stenciljs/core/blob/HEAD/CHANGELOG.md#-4380-2025-10-02) [Compare Source](https://redirect.github.com/stenciljs/core/compare/v4.37.1...v4.38.0) ##### Bug Fixes - local (same-file) class inheritance search ([#​6403](https://redirect.github.com/stenciljs/core/issues/6403)) ([695b1ac](https://redirect.github.com/stenciljs/core/commit/695b1acabd401bd0f7b6c945be3225e7896bbc14)) - **runtime:** stop immediate re-renders for reflected props when null !== undefined ([#​6404](https://redirect.github.com/stenciljs/core/issues/6404)) ([680b12e](https://redirect.github.com/stenciljs/core/commit/680b12ec7302f169e5d251066e522b81071f8c4e)) - **test:** stop duplicate super calls in Jest ([#​6401](https://redirect.github.com/stenciljs/core/issues/6401)) ([32160ad](https://redirect.github.com/stenciljs/core/commit/32160ad13beb1891f2cefbcf946f17fdb41aacf5)) - **test:** trigger [@​Watch](https://redirect.github.com/Watch) decorators on inherited classes in jest env ([#​6402](https://redirect.github.com/stenciljs/core/issues/6402)) ([f277068](https://redirect.github.com/stenciljs/core/commit/f2770687f592782ce2ff234da933f603ca9e31bb)) ##### Features - **config:** allow suppressing reserved public name warning ([#​6389](https://redirect.github.com/stenciljs/core/issues/6389)) ([341fec4](https://redirect.github.com/stenciljs/core/commit/341fec4ed01662126fbe0d1dfc3b230612b57bba)) - new core decorators `@PropSerialize` & `@AttrDeserialize` ([#​6387](https://redirect.github.com/stenciljs/core/issues/6387)) ([967c234](https://redirect.github.com/stenciljs/core/commit/967c2346e9e736eabd16ed42495293b048b29431)) #### 🏰 [4.37.1](https://redirect.github.com/stenciljs/core/compare/v4.37.0...v4.37.1) (2025-09-19) ##### Bug Fixes - **dist-custom-elements:** revert [#​6381](https://redirect.github.com/stenciljs/core/issues/6381) ([77cfdb3](https://redirect.github.com/stenciljs/core/commit/77cfdb3b704205ced93b7a265ea0881fa2dd19d0)) - **Mixin:** export `MixinFactory` type for ease of use ([#​6390](https://redirect.github.com/stenciljs/core/issues/6390)) ([a26114e](https://redirect.github.com/stenciljs/core/commit/a26114ee8a3d808ddb4731547842301628654312)) - **runtime:** stop eager json parsing for unknown and any type bindings ([#​6384](https://redirect.github.com/stenciljs/core/issues/6384)) ([ccae0d7](https://redirect.github.com/stenciljs/core/commit/ccae0d743cd4eb2766eb7e48cb6add854c9fd640)) ### [`v4.37.1`](https://redirect.github.com/stenciljs/core/blob/HEAD/CHANGELOG.md#-4371-2025-09-19) [Compare Source](https://redirect.github.com/stenciljs/core/compare/v4.37.0...v4.37.1) ##### Bug Fixes - **dist-custom-elements:** revert [#​6381](https://redirect.github.com/stenciljs/core/issues/6381) ([77cfdb3](https://redirect.github.com/stenciljs/core/commit/77cfdb3b704205ced93b7a265ea0881fa2dd19d0)) - **Mixin:** export `MixinFactory` type for ease of use ([#​6390](https://redirect.github.com/stenciljs/core/issues/6390)) ([a26114e](https://redirect.github.com/stenciljs/core/commit/a26114ee8a3d808ddb4731547842301628654312)) - **runtime:** stop eager json parsing for unknown and any type bindings ([#​6384](https://redirect.github.com/stenciljs/core/issues/6384)) ([ccae0d7](https://redirect.github.com/stenciljs/core/commit/ccae0d743cd4eb2766eb7e48cb6add854c9fd640)) ### [`v4.37.0`](https://redirect.github.com/stenciljs/core/blob/HEAD/CHANGELOG.md#-4370-2025-09-13) [Compare Source](https://redirect.github.com/stenciljs/core/compare/v4.36.3...v4.37.0) ##### Bug Fixes - **dist-custom-elements:** apply `initializeNextTick` config ([dbcdeff](https://redirect.github.com/stenciljs/core/commit/dbcdeff26a9b258f860c5774497e31b84690c7af)) - **dist-custom-elements:** apply `initializeNextTick` config setting ([#​6382](https://redirect.github.com/stenciljs/core/issues/6382)) ([7bdf9fb](https://redirect.github.com/stenciljs/core/commit/7bdf9fbba0c84305cb7e0d749e0407ced5246b2f)) - **runtime:** make sure watchers can fire immediately if the custom element is already defined ([#​6381](https://redirect.github.com/stenciljs/core/issues/6381)) ([4fb9140](https://redirect.github.com/stenciljs/core/commit/4fb914024b7a3a760a60feb3ecee21bd3d2c2749)) ##### Features - new core api - Mixin ([#​6375](https://redirect.github.com/stenciljs/core/issues/6375)) ([08f6583](https://redirect.github.com/stenciljs/core/commit/08f65838787866ce8749489e9ede36bcdfe15f0a)) - **runtime:** allow class extending ([#​6362](https://redirect.github.com/stenciljs/core/issues/6362)) ([0456db1](https://redirect.github.com/stenciljs/core/commit/0456db148456911ba8cfb0af4af69ed2022763f9)) ##### BREAKING CHANGES - **runtime:** Watchers will fire earlier than before, but this is the expected behavior #### 🐈 [4.36.3](https://redirect.github.com/stenciljs/core/compare/v4.36.2...v4.36.3) (2025-08-20) ##### Bug Fixes - **rollup:** proper `warn` handling ([#​6357](https://redirect.github.com/stenciljs/core/issues/6357)) ([0831d2c](https://redirect.github.com/stenciljs/core/commit/0831d2c35bc16cdc27640353f141ebb2681cb925)) - **runtime:** fixed parsing of complex attributes that contains JSON strings ([#​6359](https://redirect.github.com/stenciljs/core/issues/6359)) ([7047196](https://redirect.github.com/stenciljs/core/commit/7047196b877f48812783a4d158ac5b3149bcd839)) #### πŸ’š [4.36.2](https://redirect.github.com/stenciljs/core/compare/v4.36.1...v4.36.2) (2025-07-28) ##### Bug Fixes - **bundle:** remove post order of node-resolve ([#​6353](https://redirect.github.com/stenciljs/core/issues/6353)) ([19b56d1](https://redirect.github.com/stenciljs/core/commit/19b56d19772b2f113cdc87837305b55eedea0361)), closes [#​6335](https://redirect.github.com/stenciljs/core/issues/6335) #### 🍺 [4.36.1](https://redirect.github.com/stenciljs/core/compare/v4.36.0...v4.36.1) (2025-07-18) ##### Bug Fixes - **runtime:** only patch non-shadow components with s ([#​6348](https://redirect.github.com/stenciljs/core/issues/6348)) ([827b7f0](https://redirect.github.com/stenciljs/core/commit/827b7f0d553cde6afe5f9816c4907641d16f8c0f)) - **runtime:** stop applying patches to non-shadow / non-render() components ([#​6349](https://redirect.github.com/stenciljs/core/issues/6349)) ([3a18a37](https://redirect.github.com/stenciljs/core/commit/3a18a377850a332cc70cfe756d663d9cc4d23872)) ### [`v4.36.3`](https://redirect.github.com/stenciljs/core/blob/HEAD/CHANGELOG.md#-4363-2025-08-20) [Compare Source](https://redirect.github.com/stenciljs/core/compare/v4.36.2...v4.36.3) ##### Bug Fixes - **rollup:** proper `warn` handling ([#​6357](https://redirect.github.com/stenciljs/core/issues/6357)) ([0831d2c](https://redirect.github.com/stenciljs/core/commit/0831d2c35bc16cdc27640353f141ebb2681cb925)) - **runtime:** fixed parsing of complex attributes that contains JSON strings ([#​6359](https://redirect.github.com/stenciljs/core/issues/6359)) ([7047196](https://redirect.github.com/stenciljs/core/commit/7047196b877f48812783a4d158ac5b3149bcd839))
--- ### Configuration πŸ“… **Schedule**: Branch creation - "every weekday before 11am" (UTC), 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. --- - [ ] 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). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- core/package-lock.json | 15 +++++++-------- core/package.json | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/core/package-lock.json b/core/package-lock.json index d21a9c4180..be46c42ffb 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -9,7 +9,7 @@ "version": "8.7.5", "license": "MIT", "dependencies": { - "@stencil/core": "4.36.2", + "@stencil/core": "4.38.0", "ionicons": "^8.0.13", "tslib": "^2.1.0" }, @@ -1914,10 +1914,9 @@ } }, "node_modules/@stencil/core": { - "version": "4.36.2", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.2.tgz", - "integrity": "sha512-PRFSpxNzX9Oi0Wfh02asztN9Sgev/MacfZwmd+VVyE6ZxW+a/kEpAYZhzGAmE+/aKVOGYuug7R9SulanYGxiDQ==", - "license": "MIT", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.38.0.tgz", + "integrity": "sha512-oC3QFKO0X1yXVvETgc8OLY525MNKhn9vISBrbtKnGoPlokJ6rI8Vk1RK22TevnNrHLI4SExNLbcDnqilKR35JQ==", "bin": { "stencil": "bin/stencil" }, @@ -11984,9 +11983,9 @@ "requires": {} }, "@stencil/core": { - "version": "4.36.2", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.2.tgz", - "integrity": "sha512-PRFSpxNzX9Oi0Wfh02asztN9Sgev/MacfZwmd+VVyE6ZxW+a/kEpAYZhzGAmE+/aKVOGYuug7R9SulanYGxiDQ==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.38.0.tgz", + "integrity": "sha512-oC3QFKO0X1yXVvETgc8OLY525MNKhn9vISBrbtKnGoPlokJ6rI8Vk1RK22TevnNrHLI4SExNLbcDnqilKR35JQ==", "requires": { "@rollup/rollup-darwin-arm64": "4.34.9", "@rollup/rollup-darwin-x64": "4.34.9", diff --git a/core/package.json b/core/package.json index d4f495595d..d2fe46a9f0 100644 --- a/core/package.json +++ b/core/package.json @@ -31,7 +31,7 @@ "loader/" ], "dependencies": { - "@stencil/core": "4.36.2", + "@stencil/core": "4.38.0", "ionicons": "^8.0.13", "tslib": "^2.1.0" }, From 2156f99c2adc32e4b87134248b5f2e70234b7ca2 Mon Sep 17 00:00:00 2001 From: ionitron Date: Wed, 8 Oct 2025 18:35:35 +0000 Subject: [PATCH 03/20] v8.7.6 --- CHANGELOG.md | 11 +++++++++++ core/CHANGELOG.md | 11 +++++++++++ core/package-lock.json | 6 +++--- core/package.json | 2 +- lerna.json | 2 +- packages/angular-server/CHANGELOG.md | 8 ++++++++ packages/angular-server/package-lock.json | 8 ++++---- packages/angular-server/package.json | 4 ++-- packages/angular/CHANGELOG.md | 8 ++++++++ packages/angular/package-lock.json | 8 ++++---- packages/angular/package.json | 4 ++-- packages/docs/CHANGELOG.md | 8 ++++++++ packages/docs/package-lock.json | 6 +++--- packages/docs/package.json | 2 +- packages/react-router/CHANGELOG.md | 8 ++++++++ packages/react-router/package-lock.json | 8 ++++---- packages/react-router/package.json | 4 ++-- packages/react/CHANGELOG.md | 8 ++++++++ packages/react/package-lock.json | 8 ++++---- packages/react/package.json | 4 ++-- packages/vue-router/CHANGELOG.md | 8 ++++++++ packages/vue-router/package-lock.json | 8 ++++---- packages/vue-router/package.json | 4 ++-- packages/vue/CHANGELOG.md | 8 ++++++++ packages/vue/package-lock.json | 8 ++++---- packages/vue/package.json | 4 ++-- 26 files changed, 123 insertions(+), 45 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 47210c4bf2..e7f40c703e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.6](https://github.com/ionic-team/ionic-framework/compare/v8.7.5...v8.7.6) (2025-10-08) + + +### Bug Fixes + +* **tabs:** respect stencil lifecycle order for tab selection ([#30702](https://github.com/ionic-team/ionic-framework/issues/30702)) ([7bb9535](https://github.com/ionic-team/ionic-framework/commit/7bb9535f601d2469ce60687a9c03f8b1cfe4aba4)), closes [#30611](https://github.com/ionic-team/ionic-framework/issues/30611) + + + + + ## [8.7.5](https://github.com/ionic-team/ionic-framework/compare/v8.7.4...v8.7.5) (2025-09-24) diff --git a/core/CHANGELOG.md b/core/CHANGELOG.md index 5be7265795..ba31e30048 100644 --- a/core/CHANGELOG.md +++ b/core/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.6](https://github.com/ionic-team/ionic-framework/compare/v8.7.5...v8.7.6) (2025-10-08) + + +### Bug Fixes + +* **tabs:** respect stencil lifecycle order for tab selection ([#30702](https://github.com/ionic-team/ionic-framework/issues/30702)) ([7bb9535](https://github.com/ionic-team/ionic-framework/commit/7bb9535f601d2469ce60687a9c03f8b1cfe4aba4)), closes [#30611](https://github.com/ionic-team/ionic-framework/issues/30611) + + + + + ## [8.7.5](https://github.com/ionic-team/ionic-framework/compare/v8.7.4...v8.7.5) (2025-09-24) diff --git a/core/package-lock.json b/core/package-lock.json index be46c42ffb..4a15d7b206 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ionic/core", - "version": "8.7.5", + "version": "8.7.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/core", - "version": "8.7.5", + "version": "8.7.6", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -18337,4 +18337,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/core/package.json b/core/package.json index d2fe46a9f0..ca4a7855f4 100644 --- a/core/package.json +++ b/core/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/core", - "version": "8.7.5", + "version": "8.7.6", "description": "Base components for Ionic", "keywords": [ "ionic", diff --git a/lerna.json b/lerna.json index 283bc5a42e..c7be8441fe 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "core", "packages/*" ], - "version": "8.7.5" + "version": "8.7.6" } \ No newline at end of file diff --git a/packages/angular-server/CHANGELOG.md b/packages/angular-server/CHANGELOG.md index 2286ed5513..9fd958ec1d 100644 --- a/packages/angular-server/CHANGELOG.md +++ b/packages/angular-server/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.6](https://github.com/ionic-team/ionic-framework/compare/v8.7.5...v8.7.6) (2025-10-08) + +**Note:** Version bump only for package @ionic/angular-server + + + + + ## [8.7.5](https://github.com/ionic-team/ionic-framework/compare/v8.7.4...v8.7.5) (2025-09-24) **Note:** Version bump only for package @ionic/angular-server diff --git a/packages/angular-server/package-lock.json b/packages/angular-server/package-lock.json index 58d98508f3..fd75dc1df0 100644 --- a/packages/angular-server/package-lock.json +++ b/packages/angular-server/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/angular-server", - "version": "8.7.5", + "version": "8.7.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/angular-server", - "version": "8.7.5", + "version": "8.7.6", "license": "MIT", "dependencies": { - "@ionic/core": "^8.7.5" + "@ionic/core": "^8.7.6" }, "devDependencies": { "@angular-eslint/eslint-plugin": "^16.0.0", @@ -11286,4 +11286,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/angular-server/package.json b/packages/angular-server/package.json index f17037d02b..db797d4dbb 100644 --- a/packages/angular-server/package.json +++ b/packages/angular-server/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/angular-server", - "version": "8.7.5", + "version": "8.7.6", "description": "Angular SSR Module for Ionic", "keywords": [ "ionic", @@ -62,6 +62,6 @@ }, "prettier": "@ionic/prettier-config", "dependencies": { - "@ionic/core": "^8.7.5" + "@ionic/core": "^8.7.6" } } diff --git a/packages/angular/CHANGELOG.md b/packages/angular/CHANGELOG.md index 79e9b64e6d..b87f9d6b10 100644 --- a/packages/angular/CHANGELOG.md +++ b/packages/angular/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.6](https://github.com/ionic-team/ionic-framework/compare/v8.7.5...v8.7.6) (2025-10-08) + +**Note:** Version bump only for package @ionic/angular + + + + + ## [8.7.5](https://github.com/ionic-team/ionic-framework/compare/v8.7.4...v8.7.5) (2025-09-24) diff --git a/packages/angular/package-lock.json b/packages/angular/package-lock.json index e840282dae..5257af923e 100644 --- a/packages/angular/package-lock.json +++ b/packages/angular/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/angular", - "version": "8.7.5", + "version": "8.7.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@ionic/angular", - "version": "8.7.5", + "version": "8.7.6", "license": "MIT", "dependencies": { - "@ionic/core": "^8.7.5", + "@ionic/core": "^8.7.6", "ionicons": "^8.0.13", "jsonc-parser": "^3.0.0", "tslib": "^2.3.0" @@ -9079,4 +9079,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/angular/package.json b/packages/angular/package.json index bfdef31fd6..fe1bc5e4b3 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/angular", - "version": "8.7.5", + "version": "8.7.6", "description": "Angular specific wrappers for @ionic/core", "keywords": [ "ionic", @@ -48,7 +48,7 @@ } }, "dependencies": { - "@ionic/core": "^8.7.5", + "@ionic/core": "^8.7.6", "ionicons": "^8.0.13", "jsonc-parser": "^3.0.0", "tslib": "^2.3.0" diff --git a/packages/docs/CHANGELOG.md b/packages/docs/CHANGELOG.md index 942e882931..1945ffe9fc 100644 --- a/packages/docs/CHANGELOG.md +++ b/packages/docs/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.6](https://github.com/ionic-team/ionic-framework/compare/v8.7.5...v8.7.6) (2025-10-08) + +**Note:** Version bump only for package @ionic/docs + + + + + ## [8.7.5](https://github.com/ionic-team/ionic-framework/compare/v8.7.4...v8.7.5) (2025-09-24) **Note:** Version bump only for package @ionic/docs diff --git a/packages/docs/package-lock.json b/packages/docs/package-lock.json index 0ea9a4f739..da8cdf4860 100644 --- a/packages/docs/package-lock.json +++ b/packages/docs/package-lock.json @@ -1,13 +1,13 @@ { "name": "@ionic/docs", - "version": "8.7.5", + "version": "8.7.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/docs", - "version": "8.7.5", + "version": "8.7.6", "license": "MIT" } } -} +} \ No newline at end of file diff --git a/packages/docs/package.json b/packages/docs/package.json index 3b1eec2020..f6d2cedb4c 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/docs", - "version": "8.7.5", + "version": "8.7.6", "description": "Pre-packaged API documentation for the Ionic docs.", "main": "core.json", "types": "core.d.ts", diff --git a/packages/react-router/CHANGELOG.md b/packages/react-router/CHANGELOG.md index dcff3c6e95..f2cb5f5615 100644 --- a/packages/react-router/CHANGELOG.md +++ b/packages/react-router/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.6](https://github.com/ionic-team/ionic-framework/compare/v8.7.5...v8.7.6) (2025-10-08) + +**Note:** Version bump only for package @ionic/react-router + + + + + ## [8.7.5](https://github.com/ionic-team/ionic-framework/compare/v8.7.4...v8.7.5) (2025-09-24) **Note:** Version bump only for package @ionic/react-router diff --git a/packages/react-router/package-lock.json b/packages/react-router/package-lock.json index b0abc70ecd..0362fe1e2b 100644 --- a/packages/react-router/package-lock.json +++ b/packages/react-router/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/react-router", - "version": "8.7.5", + "version": "8.7.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/react-router", - "version": "8.7.5", + "version": "8.7.6", "license": "MIT", "dependencies": { - "@ionic/react": "^8.7.5", + "@ionic/react": "^8.7.6", "tslib": "*" }, "devDependencies": { @@ -6844,4 +6844,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/packages/react-router/package.json b/packages/react-router/package.json index 840cfe017a..70b28d147f 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/react-router", - "version": "8.7.5", + "version": "8.7.6", "description": "React Router wrapper for @ionic/react", "keywords": [ "ionic", @@ -36,7 +36,7 @@ "dist/" ], "dependencies": { - "@ionic/react": "^8.7.5", + "@ionic/react": "^8.7.6", "tslib": "*" }, "peerDependencies": { diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index 6c7b05c0a3..956c85c472 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.6](https://github.com/ionic-team/ionic-framework/compare/v8.7.5...v8.7.6) (2025-10-08) + +**Note:** Version bump only for package @ionic/react + + + + + ## [8.7.5](https://github.com/ionic-team/ionic-framework/compare/v8.7.4...v8.7.5) (2025-09-24) diff --git a/packages/react/package-lock.json b/packages/react/package-lock.json index 68c8d93aab..ff8539741c 100644 --- a/packages/react/package-lock.json +++ b/packages/react/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/react", - "version": "8.7.5", + "version": "8.7.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@ionic/react", - "version": "8.7.5", + "version": "8.7.6", "license": "MIT", "dependencies": { - "@ionic/core": "^8.7.5", + "@ionic/core": "^8.7.6", "ionicons": "^8.0.13", "tslib": "*" }, @@ -11913,4 +11913,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/react/package.json b/packages/react/package.json index bfb5516c65..c06d808a75 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/react", - "version": "8.7.5", + "version": "8.7.6", "description": "React specific wrapper for @ionic/core", "keywords": [ "ionic", @@ -40,7 +40,7 @@ "css/" ], "dependencies": { - "@ionic/core": "^8.7.5", + "@ionic/core": "^8.7.6", "ionicons": "^8.0.13", "tslib": "*" }, diff --git a/packages/vue-router/CHANGELOG.md b/packages/vue-router/CHANGELOG.md index cf6cdfedb4..09273dacca 100644 --- a/packages/vue-router/CHANGELOG.md +++ b/packages/vue-router/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.6](https://github.com/ionic-team/ionic-framework/compare/v8.7.5...v8.7.6) (2025-10-08) + +**Note:** Version bump only for package @ionic/vue-router + + + + + ## [8.7.5](https://github.com/ionic-team/ionic-framework/compare/v8.7.4...v8.7.5) (2025-09-24) **Note:** Version bump only for package @ionic/vue-router diff --git a/packages/vue-router/package-lock.json b/packages/vue-router/package-lock.json index 5c9e6036d5..83eca4b8f3 100644 --- a/packages/vue-router/package-lock.json +++ b/packages/vue-router/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/vue-router", - "version": "8.7.5", + "version": "8.7.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/vue-router", - "version": "8.7.5", + "version": "8.7.6", "license": "MIT", "dependencies": { - "@ionic/vue": "^8.7.5" + "@ionic/vue": "^8.7.6" }, "devDependencies": { "@ionic/eslint-config": "^0.3.0", @@ -12991,4 +12991,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/packages/vue-router/package.json b/packages/vue-router/package.json index ba2858d5e3..256ab9c68d 100644 --- a/packages/vue-router/package.json +++ b/packages/vue-router/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/vue-router", - "version": "8.7.5", + "version": "8.7.6", "description": "Vue Router integration for @ionic/vue", "scripts": { "test.spec": "jest", @@ -44,7 +44,7 @@ }, "homepage": "https://github.com/ionic-team/ionic-framework#readme", "dependencies": { - "@ionic/vue": "^8.7.5" + "@ionic/vue": "^8.7.6" }, "devDependencies": { "@ionic/eslint-config": "^0.3.0", diff --git a/packages/vue/CHANGELOG.md b/packages/vue/CHANGELOG.md index d0850bccee..c115af294a 100644 --- a/packages/vue/CHANGELOG.md +++ b/packages/vue/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.6](https://github.com/ionic-team/ionic-framework/compare/v8.7.5...v8.7.6) (2025-10-08) + +**Note:** Version bump only for package @ionic/vue + + + + + ## [8.7.5](https://github.com/ionic-team/ionic-framework/compare/v8.7.4...v8.7.5) (2025-09-24) diff --git a/packages/vue/package-lock.json b/packages/vue/package-lock.json index 29f867b789..9d2bae498d 100644 --- a/packages/vue/package-lock.json +++ b/packages/vue/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/vue", - "version": "8.7.5", + "version": "8.7.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@ionic/vue", - "version": "8.7.5", + "version": "8.7.6", "license": "MIT", "dependencies": { - "@ionic/core": "^8.7.5", + "@ionic/core": "^8.7.6", "@stencil/vue-output-target": "0.10.7", "ionicons": "^8.0.13" }, @@ -4019,4 +4019,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/packages/vue/package.json b/packages/vue/package.json index d3469d121f..2974fdd328 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/vue", - "version": "8.7.5", + "version": "8.7.6", "description": "Vue specific wrapper for @ionic/core", "scripts": { "eslint": "eslint src", @@ -68,7 +68,7 @@ "vue-router": "^4.0.16" }, "dependencies": { - "@ionic/core": "^8.7.5", + "@ionic/core": "^8.7.6", "@stencil/vue-output-target": "0.10.7", "ionicons": "^8.0.13" }, From ce048a507a43d2c8b2ed2834533f715e657f76ec Mon Sep 17 00:00:00 2001 From: ionitron Date: Wed, 8 Oct 2025 18:36:26 +0000 Subject: [PATCH 04/20] chore(): update package lock files --- core/package-lock.json | 2 +- packages/angular-server/package-lock.json | 30 +++++++-------- packages/angular/package-lock.json | 16 ++++---- packages/docs/package-lock.json | 2 +- packages/react-router/package-lock.json | 46 +++++++++++------------ packages/react/package-lock.json | 16 ++++---- packages/vue-router/package-lock.json | 46 +++++++++++------------ packages/vue/package-lock.json | 16 ++++---- 8 files changed, 87 insertions(+), 87 deletions(-) diff --git a/core/package-lock.json b/core/package-lock.json index 4a15d7b206..34df19e58d 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -18337,4 +18337,4 @@ "dev": true } } -} \ No newline at end of file +} diff --git a/packages/angular-server/package-lock.json b/packages/angular-server/package-lock.json index fd75dc1df0..2deb627d50 100644 --- a/packages/angular-server/package-lock.json +++ b/packages/angular-server/package-lock.json @@ -1031,12 +1031,12 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.5", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.5.tgz", - "integrity": "sha512-Uk1qdGPoLHaVhd2FnYSAvRehd3VwwcPIfXaR51qiC7C2L5VhD27VyLSgDetc15G4U+VAIFjgUSR/pKdLFEuMPA==", + "version": "8.7.6", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.6.tgz", + "integrity": "sha512-ufV64Pl0BYSoNla+DaTRXTS3hX6MQZZJPhAR3fJQ4N5Fg/vwMcHADQffstKZeoPqk6mbJoLqoTBjcWvaLRdO0g==", "license": "MIT", "dependencies": { - "@stencil/core": "4.36.2", + "@stencil/core": "4.38.0", "ionicons": "^8.0.13", "tslib": "^2.1.0" } @@ -1386,9 +1386,9 @@ ] }, "node_modules/@stencil/core": { - "version": "4.36.2", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.2.tgz", - "integrity": "sha512-PRFSpxNzX9Oi0Wfh02asztN9Sgev/MacfZwmd+VVyE6ZxW+a/kEpAYZhzGAmE+/aKVOGYuug7R9SulanYGxiDQ==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.38.0.tgz", + "integrity": "sha512-oC3QFKO0X1yXVvETgc8OLY525MNKhn9vISBrbtKnGoPlokJ6rI8Vk1RK22TevnNrHLI4SExNLbcDnqilKR35JQ==", "license": "MIT", "bin": { "stencil": "bin/stencil" @@ -7306,11 +7306,11 @@ "dev": true }, "@ionic/core": { - "version": "8.7.5", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.5.tgz", - "integrity": "sha512-Uk1qdGPoLHaVhd2FnYSAvRehd3VwwcPIfXaR51qiC7C2L5VhD27VyLSgDetc15G4U+VAIFjgUSR/pKdLFEuMPA==", + "version": "8.7.6", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.6.tgz", + "integrity": "sha512-ufV64Pl0BYSoNla+DaTRXTS3hX6MQZZJPhAR3fJQ4N5Fg/vwMcHADQffstKZeoPqk6mbJoLqoTBjcWvaLRdO0g==", "requires": { - "@stencil/core": "4.36.2", + "@stencil/core": "4.38.0", "ionicons": "^8.0.13", "tslib": "^2.1.0" } @@ -7529,9 +7529,9 @@ "optional": true }, "@stencil/core": { - "version": "4.36.2", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.2.tgz", - "integrity": "sha512-PRFSpxNzX9Oi0Wfh02asztN9Sgev/MacfZwmd+VVyE6ZxW+a/kEpAYZhzGAmE+/aKVOGYuug7R9SulanYGxiDQ==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.38.0.tgz", + "integrity": "sha512-oC3QFKO0X1yXVvETgc8OLY525MNKhn9vISBrbtKnGoPlokJ6rI8Vk1RK22TevnNrHLI4SExNLbcDnqilKR35JQ==", "requires": { "@rollup/rollup-darwin-arm64": "4.34.9", "@rollup/rollup-darwin-x64": "4.34.9", @@ -11286,4 +11286,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/angular/package-lock.json b/packages/angular/package-lock.json index 5257af923e..81a3261879 100644 --- a/packages/angular/package-lock.json +++ b/packages/angular/package-lock.json @@ -1398,12 +1398,12 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.5", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.5.tgz", - "integrity": "sha512-Uk1qdGPoLHaVhd2FnYSAvRehd3VwwcPIfXaR51qiC7C2L5VhD27VyLSgDetc15G4U+VAIFjgUSR/pKdLFEuMPA==", + "version": "8.7.6", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.6.tgz", + "integrity": "sha512-ufV64Pl0BYSoNla+DaTRXTS3hX6MQZZJPhAR3fJQ4N5Fg/vwMcHADQffstKZeoPqk6mbJoLqoTBjcWvaLRdO0g==", "license": "MIT", "dependencies": { - "@stencil/core": "4.36.2", + "@stencil/core": "4.38.0", "ionicons": "^8.0.13", "tslib": "^2.1.0" } @@ -2308,9 +2308,9 @@ } }, "node_modules/@stencil/core": { - "version": "4.36.2", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.2.tgz", - "integrity": "sha512-PRFSpxNzX9Oi0Wfh02asztN9Sgev/MacfZwmd+VVyE6ZxW+a/kEpAYZhzGAmE+/aKVOGYuug7R9SulanYGxiDQ==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.38.0.tgz", + "integrity": "sha512-oC3QFKO0X1yXVvETgc8OLY525MNKhn9vISBrbtKnGoPlokJ6rI8Vk1RK22TevnNrHLI4SExNLbcDnqilKR35JQ==", "license": "MIT", "bin": { "stencil": "bin/stencil" @@ -9079,4 +9079,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/docs/package-lock.json b/packages/docs/package-lock.json index da8cdf4860..95e60c1902 100644 --- a/packages/docs/package-lock.json +++ b/packages/docs/package-lock.json @@ -10,4 +10,4 @@ "license": "MIT" } } -} \ No newline at end of file +} diff --git a/packages/react-router/package-lock.json b/packages/react-router/package-lock.json index 0362fe1e2b..155fec9389 100644 --- a/packages/react-router/package-lock.json +++ b/packages/react-router/package-lock.json @@ -238,12 +238,12 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.5", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.5.tgz", - "integrity": "sha512-Uk1qdGPoLHaVhd2FnYSAvRehd3VwwcPIfXaR51qiC7C2L5VhD27VyLSgDetc15G4U+VAIFjgUSR/pKdLFEuMPA==", + "version": "8.7.6", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.6.tgz", + "integrity": "sha512-ufV64Pl0BYSoNla+DaTRXTS3hX6MQZZJPhAR3fJQ4N5Fg/vwMcHADQffstKZeoPqk6mbJoLqoTBjcWvaLRdO0g==", "license": "MIT", "dependencies": { - "@stencil/core": "4.36.2", + "@stencil/core": "4.38.0", "ionicons": "^8.0.13", "tslib": "^2.1.0" } @@ -415,12 +415,12 @@ } }, "node_modules/@ionic/react": { - "version": "8.7.5", - "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.7.5.tgz", - "integrity": "sha512-ID1in1YhmjlpLUF1aMv9zSEVc+ZiXs1fNWKJLK4U02LRQoNxmKagwYLxItAuls0KqduCErcqfC5pOcBJDtMl4Q==", + "version": "8.7.6", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.7.6.tgz", + "integrity": "sha512-7uoqcd5AOovtN7MJd5v9xeQFKF4og8W++bvDgka6TQcMTE/8mmzpFJUpOSvhFeOITMaqBHtkCNMvQSCa7vsmfw==", "license": "MIT", "dependencies": { - "@ionic/core": "8.7.5", + "@ionic/core": "8.7.6", "ionicons": "^8.0.13", "tslib": "*" }, @@ -669,9 +669,9 @@ ] }, "node_modules/@stencil/core": { - "version": "4.36.2", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.2.tgz", - "integrity": "sha512-PRFSpxNzX9Oi0Wfh02asztN9Sgev/MacfZwmd+VVyE6ZxW+a/kEpAYZhzGAmE+/aKVOGYuug7R9SulanYGxiDQ==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.38.0.tgz", + "integrity": "sha512-oC3QFKO0X1yXVvETgc8OLY525MNKhn9vISBrbtKnGoPlokJ6rI8Vk1RK22TevnNrHLI4SExNLbcDnqilKR35JQ==", "license": "MIT", "bin": { "stencil": "bin/stencil" @@ -4175,11 +4175,11 @@ "dev": true }, "@ionic/core": { - "version": "8.7.5", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.5.tgz", - "integrity": "sha512-Uk1qdGPoLHaVhd2FnYSAvRehd3VwwcPIfXaR51qiC7C2L5VhD27VyLSgDetc15G4U+VAIFjgUSR/pKdLFEuMPA==", + "version": "8.7.6", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.6.tgz", + "integrity": "sha512-ufV64Pl0BYSoNla+DaTRXTS3hX6MQZZJPhAR3fJQ4N5Fg/vwMcHADQffstKZeoPqk6mbJoLqoTBjcWvaLRdO0g==", "requires": { - "@stencil/core": "4.36.2", + "@stencil/core": "4.38.0", "ionicons": "^8.0.13", "tslib": "^2.1.0" } @@ -4281,11 +4281,11 @@ "requires": {} }, "@ionic/react": { - "version": "8.7.5", - "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.7.5.tgz", - "integrity": "sha512-ID1in1YhmjlpLUF1aMv9zSEVc+ZiXs1fNWKJLK4U02LRQoNxmKagwYLxItAuls0KqduCErcqfC5pOcBJDtMl4Q==", + "version": "8.7.6", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.7.6.tgz", + "integrity": "sha512-7uoqcd5AOovtN7MJd5v9xeQFKF4og8W++bvDgka6TQcMTE/8mmzpFJUpOSvhFeOITMaqBHtkCNMvQSCa7vsmfw==", "requires": { - "@ionic/core": "8.7.5", + "@ionic/core": "8.7.6", "ionicons": "^8.0.13", "tslib": "*" } @@ -4422,9 +4422,9 @@ "optional": true }, "@stencil/core": { - "version": "4.36.2", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.2.tgz", - "integrity": "sha512-PRFSpxNzX9Oi0Wfh02asztN9Sgev/MacfZwmd+VVyE6ZxW+a/kEpAYZhzGAmE+/aKVOGYuug7R9SulanYGxiDQ==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.38.0.tgz", + "integrity": "sha512-oC3QFKO0X1yXVvETgc8OLY525MNKhn9vISBrbtKnGoPlokJ6rI8Vk1RK22TevnNrHLI4SExNLbcDnqilKR35JQ==", "requires": { "@rollup/rollup-darwin-arm64": "4.34.9", "@rollup/rollup-darwin-x64": "4.34.9", @@ -6844,4 +6844,4 @@ "dev": true } } -} \ No newline at end of file +} diff --git a/packages/react/package-lock.json b/packages/react/package-lock.json index ff8539741c..a112071494 100644 --- a/packages/react/package-lock.json +++ b/packages/react/package-lock.json @@ -736,12 +736,12 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.5", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.5.tgz", - "integrity": "sha512-Uk1qdGPoLHaVhd2FnYSAvRehd3VwwcPIfXaR51qiC7C2L5VhD27VyLSgDetc15G4U+VAIFjgUSR/pKdLFEuMPA==", + "version": "8.7.6", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.6.tgz", + "integrity": "sha512-ufV64Pl0BYSoNla+DaTRXTS3hX6MQZZJPhAR3fJQ4N5Fg/vwMcHADQffstKZeoPqk6mbJoLqoTBjcWvaLRdO0g==", "license": "MIT", "dependencies": { - "@stencil/core": "4.36.2", + "@stencil/core": "4.38.0", "ionicons": "^8.0.13", "tslib": "^2.1.0" } @@ -1726,9 +1726,9 @@ } }, "node_modules/@stencil/core": { - "version": "4.36.2", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.2.tgz", - "integrity": "sha512-PRFSpxNzX9Oi0Wfh02asztN9Sgev/MacfZwmd+VVyE6ZxW+a/kEpAYZhzGAmE+/aKVOGYuug7R9SulanYGxiDQ==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.38.0.tgz", + "integrity": "sha512-oC3QFKO0X1yXVvETgc8OLY525MNKhn9vISBrbtKnGoPlokJ6rI8Vk1RK22TevnNrHLI4SExNLbcDnqilKR35JQ==", "license": "MIT", "bin": { "stencil": "bin/stencil" @@ -11913,4 +11913,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/vue-router/package-lock.json b/packages/vue-router/package-lock.json index 83eca4b8f3..8fbc4720b9 100644 --- a/packages/vue-router/package-lock.json +++ b/packages/vue-router/package-lock.json @@ -673,12 +673,12 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.5", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.5.tgz", - "integrity": "sha512-Uk1qdGPoLHaVhd2FnYSAvRehd3VwwcPIfXaR51qiC7C2L5VhD27VyLSgDetc15G4U+VAIFjgUSR/pKdLFEuMPA==", + "version": "8.7.6", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.6.tgz", + "integrity": "sha512-ufV64Pl0BYSoNla+DaTRXTS3hX6MQZZJPhAR3fJQ4N5Fg/vwMcHADQffstKZeoPqk6mbJoLqoTBjcWvaLRdO0g==", "license": "MIT", "dependencies": { - "@stencil/core": "4.36.2", + "@stencil/core": "4.38.0", "ionicons": "^8.0.13", "tslib": "^2.1.0" } @@ -865,12 +865,12 @@ } }, "node_modules/@ionic/vue": { - "version": "8.7.5", - "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.7.5.tgz", - "integrity": "sha512-wx7o+ABDDTWLM47CIjxueoZtKbvMQ9AolqGY4/2JvAJds/JlSs4kOEes/AzQ/1dREEp+4sOapmTtJnyauErY3A==", + "version": "8.7.6", + "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.7.6.tgz", + "integrity": "sha512-gK5x5Y0ZpZAW12gjvyBO9oUfwDZxMS7y0xcO0P9qzo++h3ZLcFcSGjHs8D4isUY/mF6mRagt1Y/5b0xDhgUBBw==", "license": "MIT", "dependencies": { - "@ionic/core": "8.7.5", + "@ionic/core": "8.7.6", "@stencil/vue-output-target": "0.10.7", "ionicons": "^8.0.13" } @@ -1523,9 +1523,9 @@ } }, "node_modules/@stencil/core": { - "version": "4.36.2", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.2.tgz", - "integrity": "sha512-PRFSpxNzX9Oi0Wfh02asztN9Sgev/MacfZwmd+VVyE6ZxW+a/kEpAYZhzGAmE+/aKVOGYuug7R9SulanYGxiDQ==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.38.0.tgz", + "integrity": "sha512-oC3QFKO0X1yXVvETgc8OLY525MNKhn9vISBrbtKnGoPlokJ6rI8Vk1RK22TevnNrHLI4SExNLbcDnqilKR35JQ==", "license": "MIT", "bin": { "stencil": "bin/stencil" @@ -8041,11 +8041,11 @@ "dev": true }, "@ionic/core": { - "version": "8.7.5", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.5.tgz", - "integrity": "sha512-Uk1qdGPoLHaVhd2FnYSAvRehd3VwwcPIfXaR51qiC7C2L5VhD27VyLSgDetc15G4U+VAIFjgUSR/pKdLFEuMPA==", + "version": "8.7.6", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.6.tgz", + "integrity": "sha512-ufV64Pl0BYSoNla+DaTRXTS3hX6MQZZJPhAR3fJQ4N5Fg/vwMcHADQffstKZeoPqk6mbJoLqoTBjcWvaLRdO0g==", "requires": { - "@stencil/core": "4.36.2", + "@stencil/core": "4.38.0", "ionicons": "^8.0.13", "tslib": "^2.1.0" } @@ -8156,11 +8156,11 @@ "requires": {} }, "@ionic/vue": { - "version": "8.7.5", - "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.7.5.tgz", - "integrity": "sha512-wx7o+ABDDTWLM47CIjxueoZtKbvMQ9AolqGY4/2JvAJds/JlSs4kOEes/AzQ/1dREEp+4sOapmTtJnyauErY3A==", + "version": "8.7.6", + "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.7.6.tgz", + "integrity": "sha512-gK5x5Y0ZpZAW12gjvyBO9oUfwDZxMS7y0xcO0P9qzo++h3ZLcFcSGjHs8D4isUY/mF6mRagt1Y/5b0xDhgUBBw==", "requires": { - "@ionic/core": "8.7.5", + "@ionic/core": "8.7.6", "@stencil/vue-output-target": "0.10.7", "ionicons": "^8.0.13" } @@ -8624,9 +8624,9 @@ } }, "@stencil/core": { - "version": "4.36.2", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.2.tgz", - "integrity": "sha512-PRFSpxNzX9Oi0Wfh02asztN9Sgev/MacfZwmd+VVyE6ZxW+a/kEpAYZhzGAmE+/aKVOGYuug7R9SulanYGxiDQ==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.38.0.tgz", + "integrity": "sha512-oC3QFKO0X1yXVvETgc8OLY525MNKhn9vISBrbtKnGoPlokJ6rI8Vk1RK22TevnNrHLI4SExNLbcDnqilKR35JQ==", "requires": { "@rollup/rollup-darwin-arm64": "4.34.9", "@rollup/rollup-darwin-x64": "4.34.9", @@ -12991,4 +12991,4 @@ "dev": true } } -} \ No newline at end of file +} diff --git a/packages/vue/package-lock.json b/packages/vue/package-lock.json index 9d2bae498d..b36067dd45 100644 --- a/packages/vue/package-lock.json +++ b/packages/vue/package-lock.json @@ -222,12 +222,12 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.5", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.5.tgz", - "integrity": "sha512-Uk1qdGPoLHaVhd2FnYSAvRehd3VwwcPIfXaR51qiC7C2L5VhD27VyLSgDetc15G4U+VAIFjgUSR/pKdLFEuMPA==", + "version": "8.7.6", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.6.tgz", + "integrity": "sha512-ufV64Pl0BYSoNla+DaTRXTS3hX6MQZZJPhAR3fJQ4N5Fg/vwMcHADQffstKZeoPqk6mbJoLqoTBjcWvaLRdO0g==", "license": "MIT", "dependencies": { - "@stencil/core": "4.36.2", + "@stencil/core": "4.38.0", "ionicons": "^8.0.13", "tslib": "^2.1.0" } @@ -674,9 +674,9 @@ ] }, "node_modules/@stencil/core": { - "version": "4.36.2", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.2.tgz", - "integrity": "sha512-PRFSpxNzX9Oi0Wfh02asztN9Sgev/MacfZwmd+VVyE6ZxW+a/kEpAYZhzGAmE+/aKVOGYuug7R9SulanYGxiDQ==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.38.0.tgz", + "integrity": "sha512-oC3QFKO0X1yXVvETgc8OLY525MNKhn9vISBrbtKnGoPlokJ6rI8Vk1RK22TevnNrHLI4SExNLbcDnqilKR35JQ==", "license": "MIT", "bin": { "stencil": "bin/stencil" @@ -4019,4 +4019,4 @@ "dev": true } } -} \ No newline at end of file +} From f44585657ce4fca19d1c174d440b5d7413881c1d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 Oct 2025 03:59:55 -0700 Subject: [PATCH 05/20] chore(deps): update actions/setup-node action to v6 (#30726) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [actions/setup-node](https://redirect.github.com/actions/setup-node) | action | major | `v5` -> `v6` | --- ### Release Notes
actions/setup-node (actions/setup-node) ### [`v6`](https://redirect.github.com/actions/setup-node/compare/v5...v6) [Compare Source](https://redirect.github.com/actions/setup-node/compare/v5...v6)
--- ### Configuration πŸ“… **Schedule**: Branch creation - "every weekday before 11am" (UTC), 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. --- - [ ] 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). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/actions/build-angular-server/action.yml | 2 +- .github/workflows/actions/build-angular/action.yml | 2 +- .../workflows/actions/build-core-stencil-prerelease/action.yml | 2 +- .github/workflows/actions/build-core/action.yml | 2 +- .github/workflows/actions/build-react-router/action.yml | 2 +- .github/workflows/actions/build-react/action.yml | 2 +- .github/workflows/actions/build-vue-router/action.yml | 2 +- .github/workflows/actions/build-vue/action.yml | 2 +- .github/workflows/actions/publish-npm/action.yml | 2 +- .github/workflows/actions/test-angular-e2e/action.yml | 2 +- .github/workflows/actions/test-core-clean-build/action.yml | 2 +- .github/workflows/actions/test-core-lint/action.yml | 2 +- .github/workflows/actions/test-core-screenshot/action.yml | 2 +- .github/workflows/actions/test-core-spec/action.yml | 2 +- .github/workflows/actions/test-react-e2e/action.yml | 2 +- .github/workflows/actions/test-react-router-e2e/action.yml | 2 +- .github/workflows/actions/test-vue-e2e/action.yml | 2 +- .../workflows/actions/update-reference-screenshots/action.yml | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/workflows/actions/build-angular-server/action.yml b/.github/workflows/actions/build-angular-server/action.yml index c48d1dcb3b..7da94399b3 100644 --- a/.github/workflows/actions/build-angular-server/action.yml +++ b/.github/workflows/actions/build-angular-server/action.yml @@ -3,7 +3,7 @@ description: 'Build Ionic Angular Server' runs: using: 'composite' steps: - - uses: actions/setup-node@v5 + - uses: actions/setup-node@v6 with: node-version: 22.x - uses: ./.github/workflows/actions/download-archive diff --git a/.github/workflows/actions/build-angular/action.yml b/.github/workflows/actions/build-angular/action.yml index 349c6734e4..c19168ffd2 100644 --- a/.github/workflows/actions/build-angular/action.yml +++ b/.github/workflows/actions/build-angular/action.yml @@ -3,7 +3,7 @@ description: 'Build Ionic Angular' runs: using: 'composite' steps: - - uses: actions/setup-node@v5 + - uses: actions/setup-node@v6 with: node-version: 22.x - uses: ./.github/workflows/actions/download-archive diff --git a/.github/workflows/actions/build-core-stencil-prerelease/action.yml b/.github/workflows/actions/build-core-stencil-prerelease/action.yml index 878265178a..eee7918434 100644 --- a/.github/workflows/actions/build-core-stencil-prerelease/action.yml +++ b/.github/workflows/actions/build-core-stencil-prerelease/action.yml @@ -9,7 +9,7 @@ runs: using: 'composite' steps: - uses: actions/checkout@v5 - - uses: actions/setup-node@v5 + - uses: actions/setup-node@v6 with: node-version: 22.x diff --git a/.github/workflows/actions/build-core/action.yml b/.github/workflows/actions/build-core/action.yml index f64f564620..81f8561973 100644 --- a/.github/workflows/actions/build-core/action.yml +++ b/.github/workflows/actions/build-core/action.yml @@ -9,7 +9,7 @@ runs: using: 'composite' steps: - uses: actions/checkout@v5 - - uses: actions/setup-node@v5 + - uses: actions/setup-node@v6 with: node-version: 22.x - name: Install Dependencies diff --git a/.github/workflows/actions/build-react-router/action.yml b/.github/workflows/actions/build-react-router/action.yml index 61d5f6b2d4..8bdf4cd272 100644 --- a/.github/workflows/actions/build-react-router/action.yml +++ b/.github/workflows/actions/build-react-router/action.yml @@ -3,7 +3,7 @@ description: 'Build Ionic React Router' runs: using: 'composite' steps: - - uses: actions/setup-node@v5 + - uses: actions/setup-node@v6 with: node-version: 22.x - uses: ./.github/workflows/actions/download-archive diff --git a/.github/workflows/actions/build-react/action.yml b/.github/workflows/actions/build-react/action.yml index 6b8b9f7417..28f568e321 100644 --- a/.github/workflows/actions/build-react/action.yml +++ b/.github/workflows/actions/build-react/action.yml @@ -3,7 +3,7 @@ description: 'Build Ionic React' runs: using: 'composite' steps: - - uses: actions/setup-node@v5 + - uses: actions/setup-node@v6 with: node-version: 22.x - uses: ./.github/workflows/actions/download-archive diff --git a/.github/workflows/actions/build-vue-router/action.yml b/.github/workflows/actions/build-vue-router/action.yml index e1c7716f5e..3d7fd54c92 100644 --- a/.github/workflows/actions/build-vue-router/action.yml +++ b/.github/workflows/actions/build-vue-router/action.yml @@ -3,7 +3,7 @@ description: 'Builds Ionic Vue Router' runs: using: 'composite' steps: - - uses: actions/setup-node@v5 + - uses: actions/setup-node@v6 with: node-version: 22.x - uses: ./.github/workflows/actions/download-archive diff --git a/.github/workflows/actions/build-vue/action.yml b/.github/workflows/actions/build-vue/action.yml index bc8a47facc..bcd56ae035 100644 --- a/.github/workflows/actions/build-vue/action.yml +++ b/.github/workflows/actions/build-vue/action.yml @@ -3,7 +3,7 @@ description: 'Build Ionic Vue' runs: using: 'composite' steps: - - uses: actions/setup-node@v5 + - uses: actions/setup-node@v6 with: node-version: 22.x - uses: ./.github/workflows/actions/download-archive diff --git a/.github/workflows/actions/publish-npm/action.yml b/.github/workflows/actions/publish-npm/action.yml index 5c5b49d56c..9b6453c61f 100644 --- a/.github/workflows/actions/publish-npm/action.yml +++ b/.github/workflows/actions/publish-npm/action.yml @@ -19,7 +19,7 @@ inputs: runs: using: 'composite' steps: - - uses: actions/setup-node@v5 + - uses: actions/setup-node@v6 with: node-version: 22.x # Provenance requires npm 9.5.0+ diff --git a/.github/workflows/actions/test-angular-e2e/action.yml b/.github/workflows/actions/test-angular-e2e/action.yml index cd7ebfe0ae..68bb0190e5 100644 --- a/.github/workflows/actions/test-angular-e2e/action.yml +++ b/.github/workflows/actions/test-angular-e2e/action.yml @@ -6,7 +6,7 @@ inputs: runs: using: 'composite' steps: - - uses: actions/setup-node@v5 + - uses: actions/setup-node@v6 with: node-version: 22.x - uses: ./.github/workflows/actions/download-archive diff --git a/.github/workflows/actions/test-core-clean-build/action.yml b/.github/workflows/actions/test-core-clean-build/action.yml index ea6da763fd..8b20f4b6ce 100644 --- a/.github/workflows/actions/test-core-clean-build/action.yml +++ b/.github/workflows/actions/test-core-clean-build/action.yml @@ -3,7 +3,7 @@ description: 'Test Core Clean Build' runs: using: 'composite' steps: - - uses: actions/setup-node@v5 + - uses: actions/setup-node@v6 with: node-version: 22.x diff --git a/.github/workflows/actions/test-core-lint/action.yml b/.github/workflows/actions/test-core-lint/action.yml index b0e45abdae..ef74f0db11 100644 --- a/.github/workflows/actions/test-core-lint/action.yml +++ b/.github/workflows/actions/test-core-lint/action.yml @@ -3,7 +3,7 @@ description: 'Test Core Lint' runs: using: 'composite' steps: - - uses: actions/setup-node@v5 + - uses: actions/setup-node@v6 with: node-version: 22.x - name: Install Dependencies diff --git a/.github/workflows/actions/test-core-screenshot/action.yml b/.github/workflows/actions/test-core-screenshot/action.yml index f3d599f02c..1b81fc5563 100644 --- a/.github/workflows/actions/test-core-screenshot/action.yml +++ b/.github/workflows/actions/test-core-screenshot/action.yml @@ -13,7 +13,7 @@ inputs: runs: using: 'composite' steps: - - uses: actions/setup-node@v5 + - uses: actions/setup-node@v6 with: node-version: 22.x - uses: ./.github/workflows/actions/download-archive diff --git a/.github/workflows/actions/test-core-spec/action.yml b/.github/workflows/actions/test-core-spec/action.yml index cdec48fabf..6bc7a52e10 100644 --- a/.github/workflows/actions/test-core-spec/action.yml +++ b/.github/workflows/actions/test-core-spec/action.yml @@ -6,7 +6,7 @@ inputs: runs: using: 'composite' steps: - - uses: actions/setup-node@v5 + - uses: actions/setup-node@v6 with: node-version: 22.x - name: Install Dependencies diff --git a/.github/workflows/actions/test-react-e2e/action.yml b/.github/workflows/actions/test-react-e2e/action.yml index 3cf40c29b8..fce75f1b7d 100644 --- a/.github/workflows/actions/test-react-e2e/action.yml +++ b/.github/workflows/actions/test-react-e2e/action.yml @@ -6,7 +6,7 @@ inputs: runs: using: 'composite' steps: - - uses: actions/setup-node@v5 + - uses: actions/setup-node@v6 with: node-version: 22.x - uses: ./.github/workflows/actions/download-archive diff --git a/.github/workflows/actions/test-react-router-e2e/action.yml b/.github/workflows/actions/test-react-router-e2e/action.yml index f1f0150de1..b38fab2ab9 100644 --- a/.github/workflows/actions/test-react-router-e2e/action.yml +++ b/.github/workflows/actions/test-react-router-e2e/action.yml @@ -6,7 +6,7 @@ inputs: runs: using: 'composite' steps: - - uses: actions/setup-node@v5 + - uses: actions/setup-node@v6 with: node-version: 22.x - uses: ./.github/workflows/actions/download-archive diff --git a/.github/workflows/actions/test-vue-e2e/action.yml b/.github/workflows/actions/test-vue-e2e/action.yml index 905cb319a7..9f13d25c07 100644 --- a/.github/workflows/actions/test-vue-e2e/action.yml +++ b/.github/workflows/actions/test-vue-e2e/action.yml @@ -6,7 +6,7 @@ inputs: runs: using: 'composite' steps: - - uses: actions/setup-node@v5 + - uses: actions/setup-node@v6 with: node-version: 22.x - uses: ./.github/workflows/actions/download-archive diff --git a/.github/workflows/actions/update-reference-screenshots/action.yml b/.github/workflows/actions/update-reference-screenshots/action.yml index 95d0c7b726..97b4c891c8 100644 --- a/.github/workflows/actions/update-reference-screenshots/action.yml +++ b/.github/workflows/actions/update-reference-screenshots/action.yml @@ -7,7 +7,7 @@ on: runs: using: 'composite' steps: - - uses: actions/setup-node@v5 + - uses: actions/setup-node@v6 with: node-version: 22.x - uses: actions/download-artifact@v5 From 820fa2854331722d22efd0e38a1936117477967a Mon Sep 17 00:00:00 2001 From: Maria Hutt Date: Tue, 14 Oct 2025 10:48:35 -0700 Subject: [PATCH 06/20] fix(header): prevent flickering during iOS page transitions (#30705) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue number: resolves #25326 --------- ## What is the current behavior? The header flickers upon page transition when on iOS mode and using a condensed header: **Entering Page Two (P1 β†’ P2):** When navigating to Page Two, which has a collapsing header (intended to be hidden until scroll), the header briefly flashes into view. This happens because the header is initially rendered with full `opacity: 1` before the component's logic can apply `opacity: 0` to hide it, causing a visible flicker. **Navigating Back (P2 β†’ P1):** When navigating back, Page One's header briefly bleeds through the top of Page Two. Although Page Two is on top (`zβˆ’index: 100`), its collapsing header is set to `opacity: 0`. This transparency allows Page One header (`zβˆ’index: 99`) to become visible underneath, as the transparent area cannot block the content below it. The header flickers upon page transition when on iOS mode and using a fade header: **Entering Page Two (P1 β†’ P2):** When navigating to Page Two, which has a fade header (should not have a background on load), the header background briefly flashes into view. This happens because the header is initially rendered with full `opacity: 1` before the component's logic can apply `opacity: 0` to hide it, causing a visible flicker. ## What is the new behavior? - Added a transition-specific class that is applied to the condensed ion-header element to override its default transparency. This guarantees the header to act as an opaque block during the page transition, eliminating visual flickering caused by early `opacity: 0` or the header underneath bleeding through. - Added a transition-specific class that is applied to the fade ion-header element to override its default opaque background. This guarantees the header to act as a transparent block during the page transition, eliminating visual flickering caused by default `opacity: 1`. ## Does this introduce a breaking change? - [ ] Yes - [x] No ## Other information Dev build: `8.7.6-dev.11759524961.1cff6814` --- core/src/components/header/header.ios.scss | 33 ++++++- core/src/utils/transition/index.ts | 105 ++++++++++++++++++--- 2 files changed, 122 insertions(+), 16 deletions(-) diff --git a/core/src/components/header/header.ios.scss b/core/src/components/header/header.ios.scss index cda084da7c..0c0f2007d4 100644 --- a/core/src/components/header/header.ios.scss +++ b/core/src/components/header/header.ios.scss @@ -39,6 +39,15 @@ --opacity-scale: inherit; } +/** + * Override styles applied during the page transition to prevent + * header flickering. + */ +.header-collapse-fade.header-transitioning ion-toolbar { + --background: transparent; + --border-style: none; +} + // iOS Header - Collapse Condense // -------------------------------------------------- .header-collapse-condense { @@ -65,8 +74,6 @@ * since it needs to blend in with the header above it. */ .header-collapse-condense ion-toolbar { - --background: var(--ion-background-color, #fff); - z-index: 0; } @@ -93,6 +100,28 @@ transition: all 0.2s ease-in-out; } +/** + * Large title toolbar should just use the content background + * since it needs to blend in with the header above it. + */ +.header-collapse-condense ion-toolbar, +/** + * Override styles applied during the page transition to prevent + * header flickering. + */ +.header-collapse-condense-inactive.header-transitioning:not(.header-collapse-condense) ion-toolbar { + --background: var(--ion-background-color, #fff); +} + +/** + * Override styles applied during the page transition to prevent + * header flickering. + */ +.header-collapse-condense-inactive.header-transitioning:not(.header-collapse-condense) ion-toolbar { + --border-style: none; + --opacity-scale: 1; +} + .header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-title, .header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-buttons.buttons-collapse { opacity: 0; diff --git a/core/src/utils/transition/index.ts b/core/src/utils/transition/index.ts index 69789bf862..e74e7318c8 100644 --- a/core/src/utils/transition/index.ts +++ b/core/src/utils/transition/index.ts @@ -18,34 +18,51 @@ const focusController = createFocusController(); // TODO(FW-2832): types +/** + * Executes the main page transition. + * It also manages the lifecycle of header visibility (if any) + * to prevent visual flickering in iOS. The flickering only + * occurs for a condensed header that is placed above the content. + * + * @param opts Options for the transition. + * @returns A promise that resolves when the transition is complete. + */ export const transition = (opts: TransitionOptions): Promise => { return new Promise((resolve, reject) => { writeTask(() => { - beforeTransition(opts); - runTransition(opts).then( - (result) => { - if (result.animation) { - result.animation.destroy(); + const transitioningInactiveHeader = getIosIonHeader(opts); + beforeTransition(opts, transitioningInactiveHeader); + runTransition(opts) + .then( + (result) => { + if (result.animation) { + result.animation.destroy(); + } + afterTransition(opts); + resolve(result); + }, + (error) => { + afterTransition(opts); + reject(error); } - afterTransition(opts); - resolve(result); - }, - (error) => { - afterTransition(opts); - reject(error); - } - ); + ) + .finally(() => { + // Ensure that the header is restored to its original state. + setHeaderTransitionClass(transitioningInactiveHeader, false); + }); }); }); }; -const beforeTransition = (opts: TransitionOptions) => { +const beforeTransition = (opts: TransitionOptions, transitioningInactiveHeader: HTMLElement | null) => { const enteringEl = opts.enteringEl; const leavingEl = opts.leavingEl; focusController.saveViewFocus(leavingEl); setZIndex(enteringEl, leavingEl, opts.direction); + // Prevent flickering of the header by adding a class. + setHeaderTransitionClass(transitioningInactiveHeader, true); if (opts.showGoBack) { enteringEl.classList.add('can-go-back'); @@ -278,6 +295,40 @@ const setZIndex = ( } }; +/** + * Add a class to ensure that the header (if any) + * does not flicker during the transition. By adding the + * transitioning class, we ensure that the header has + * the necessary styles to prevent the following flickers: + * 1. When entering a page with a condensed header, the + * header should never be visible. However, + * it briefly renders the background color while + * the transition is occurring. + * 2. When leaving a page with a condensed header, the + * header has an opacity of 0 and the pages + * have a z-index which causes the entering page to + * briefly show it's content underneath the leaving page. + * 3. When entering a page or leaving a page with a fade + * header, the header should not have a background color. + * However, it briefly shows the background color while + * the transition is occurring. + * + * @param header The header element to modify. + * @param isTransitioning Whether the transition is occurring. + */ +const setHeaderTransitionClass = (header: HTMLElement | null, isTransitioning: boolean) => { + if (!header) { + return; + } + + const transitionClass = 'header-transitioning'; + if (isTransitioning) { + header.classList.add(transitionClass); + } else { + header.classList.remove(transitionClass); + } +}; + export const getIonPageElement = (element: HTMLElement) => { if (element.classList.contains('ion-page')) { return element; @@ -291,6 +342,32 @@ export const getIonPageElement = (element: HTMLElement) => { return element; }; +/** + * Retrieves the ion-header element from a page based on the + * direction of the transition. + * + * @param opts Options for the transition. + * @returns The ion-header element or null if not found or not in 'ios' mode. + */ +const getIosIonHeader = (opts: TransitionOptions): HTMLElement | null => { + const enteringEl = opts.enteringEl; + const leavingEl = opts.leavingEl; + const direction = opts.direction; + const mode = opts.mode; + + if (mode !== 'ios') { + return null; + } + + const element = direction === 'back' ? leavingEl : enteringEl; + + if (!element) { + return null; + } + + return element.querySelector('ion-header'); +}; + export interface TransitionOptions extends NavOptions { progressCallback?: (ani: Animation | undefined) => void; baseEl: any; From 18e1d3e1b8480e7c574b1098eeb35acaa3e19280 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 Oct 2025 13:36:50 -0400 Subject: [PATCH 07/20] chore(deps): update github/codeql-action action to v4 (#30717) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [github/codeql-action](https://redirect.github.com/github/codeql-action) | action | major | `v3` -> `v4` | --- ### Release Notes
github/codeql-action (github/codeql-action) ### [`v4`](https://redirect.github.com/github/codeql-action/compare/v3...v4) [Compare Source](https://redirect.github.com/github/codeql-action/compare/v3...v4)
--- ### Configuration πŸ“… **Schedule**: Branch creation - "every weekday before 11am" (UTC), 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. --- - [ ] 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). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 6ac78c8dc8..c228c28226 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -15,7 +15,7 @@ jobs: security-events: write steps: - uses: actions/checkout@v5 - - uses: github/codeql-action/init@v3 + - uses: github/codeql-action/init@v4 with: languages: javascript - - uses: github/codeql-action/analyze@v3 + - uses: github/codeql-action/analyze@v4 From 03303d73f0bfe2380ced7931525fc52fd8576367 Mon Sep 17 00:00:00 2001 From: Maria Hutt Date: Wed, 15 Oct 2025 10:50:07 -0700 Subject: [PATCH 08/20] fix(select): improve screen reader announcement timing for validation errors (#30723) Issue number: internal --------- ## What is the current behavior? Currently, when an error text is shown, it may not announce itself to voice assistants. This is because the way error text currently works is by always existing in the DOM, but being hidden when there is no error. When the error state changes, the error text is shown, but as far as the voice assistant can tell it's always been there and nothing has changed. ## What is the new behavior? - Updated aria attributes - Added observer with an observer We had to do this with a mutation observer and state because it's important in some frameworks, like Angular, that state changes to cause a re-render. This, combined with some minor aria changes, makes it so that when a field is declared invalid, it immediately announces the invalid state instead of waiting for the user to go back to the invalid field. ## Does this introduce a breaking change? - [ ] Yes - [x] No ## Other information [Preview](https://ionic-framework-git-fw-6797-ionic1.vercel.app/src/components/select/test/validation/) --- core/src/components/input/input.tsx | 16 +- core/src/components/select/select.tsx | 77 ++++++- .../select/test/validation/index.html | 200 ++++++++++++++++++ core/src/components/textarea/textarea.tsx | 16 +- core/src/utils/forms/index.ts | 1 + core/src/utils/forms/validity.ts | 15 ++ .../template-form.component.html | 25 +++ .../template-form/template-form.component.ts | 1 + .../standalone/app-standalone/app.routes.ts | 1 + .../home-page/home-page.component.html | 5 + .../select-validation.component.html | 63 ++++++ .../select-validation.component.scss | 36 ++++ .../select-validation.component.ts | 63 ++++++ 13 files changed, 482 insertions(+), 37 deletions(-) create mode 100644 core/src/components/select/test/validation/index.html create mode 100644 core/src/utils/forms/validity.ts create mode 100644 packages/angular/test/base/src/app/standalone/validation/select-validation/select-validation.component.html create mode 100644 packages/angular/test/base/src/app/standalone/validation/select-validation/select-validation.component.scss create mode 100644 packages/angular/test/base/src/app/standalone/validation/select-validation/select-validation.component.ts diff --git a/core/src/components/input/input.tsx b/core/src/components/input/input.tsx index ccb80120ca..19c5a9d406 100644 --- a/core/src/components/input/input.tsx +++ b/core/src/components/input/input.tsx @@ -14,7 +14,7 @@ import { h, } from '@stencil/core'; import type { NotchController } from '@utils/forms'; -import { createNotchController } from '@utils/forms'; +import { createNotchController, checkInvalidState } from '@utils/forms'; import type { Attributes } from '@utils/helpers'; import { inheritAriaAttributes, debounceEvent, inheritAttributes, componentOnReady } from '@utils/helpers'; import { createSlotMutationController } from '@utils/slot-mutation-controller'; @@ -403,16 +403,6 @@ export class Input implements ComponentInterface { }; } - /** - * Checks if the input is in an invalid state based on Ionic validation classes - */ - private checkInvalidState(): boolean { - const hasIonTouched = this.el.classList.contains('ion-touched'); - const hasIonInvalid = this.el.classList.contains('ion-invalid'); - - return hasIonTouched && hasIonInvalid; - } - connectedCallback() { const { el } = this; @@ -426,7 +416,7 @@ export class Input implements ComponentInterface { // Watch for class changes to update validation state if (Build.isBrowser && typeof MutationObserver !== 'undefined') { this.validationObserver = new MutationObserver(() => { - const newIsInvalid = this.checkInvalidState(); + const newIsInvalid = checkInvalidState(el); if (this.isInvalid !== newIsInvalid) { this.isInvalid = newIsInvalid; // Force a re-render to update aria-describedby immediately @@ -441,7 +431,7 @@ export class Input implements ComponentInterface { } // Always set initial state - this.isInvalid = this.checkInvalidState(); + this.isInvalid = checkInvalidState(el); this.debounceChanged(); if (Build.isBrowser) { diff --git a/core/src/components/select/select.tsx b/core/src/components/select/select.tsx index 7df8049d13..ac2fbb6d89 100644 --- a/core/src/components/select/select.tsx +++ b/core/src/components/select/select.tsx @@ -1,7 +1,7 @@ import type { ComponentInterface, EventEmitter } from '@stencil/core'; -import { Component, Element, Event, Host, Method, Prop, State, Watch, h, forceUpdate } from '@stencil/core'; +import { Build, Component, Element, Event, Host, Method, Prop, State, Watch, h, forceUpdate } from '@stencil/core'; import type { NotchController } from '@utils/forms'; -import { compareOptions, createNotchController, isOptionSelected } from '@utils/forms'; +import { compareOptions, createNotchController, isOptionSelected, checkInvalidState } from '@utils/forms'; import { focusVisibleElement, renderHiddenInput, inheritAttributes } from '@utils/helpers'; import type { Attributes } from '@utils/helpers'; import { printIonWarning } from '@utils/logging'; @@ -64,6 +64,7 @@ export class Select implements ComponentInterface { private inheritedAttributes: Attributes = {}; private nativeWrapperEl: HTMLElement | undefined; private notchSpacerEl: HTMLElement | undefined; + private validationObserver?: MutationObserver; private notchController?: NotchController; @@ -81,6 +82,13 @@ export class Select implements ComponentInterface { */ @State() hasFocus = false; + /** + * Track validation state for proper aria-live announcements. + */ + @State() isInvalid = false; + + @State() private hintTextID?: string; + /** * The text to display on the cancel button. */ @@ -298,10 +306,51 @@ export class Select implements ComponentInterface { */ forceUpdate(this); }); + + // Watch for class changes to update validation state. + if (Build.isBrowser && typeof MutationObserver !== 'undefined') { + this.validationObserver = new MutationObserver(() => { + const newIsInvalid = checkInvalidState(this.el); + if (this.isInvalid !== newIsInvalid) { + this.isInvalid = newIsInvalid; + /** + * Screen readers tend to announce changes + * to `aria-describedby` when the attribute + * is changed during a blur event for a + * native form control. + * However, the announcement can be spotty + * when using a non-native form control + * and `forceUpdate()`. + * This is due to `forceUpdate()` internally + * rescheduling the DOM update to a lower + * priority queue regardless if it's called + * inside a Promise or not, thus causing + * the screen reader to potentially miss the + * change. + * By using a State variable inside a Promise, + * it guarantees a re-render immediately at + * a higher priority. + */ + Promise.resolve().then(() => { + this.hintTextID = this.getHintTextID(); + }); + } + }); + + this.validationObserver.observe(el, { + attributes: true, + attributeFilter: ['class'], + }); + } + + // Always set initial state + this.isInvalid = checkInvalidState(this.el); } componentWillLoad() { this.inheritedAttributes = inheritAttributes(this.el, ['aria-label']); + + this.hintTextID = this.getHintTextID(); } componentDidLoad() { @@ -328,6 +377,12 @@ export class Select implements ComponentInterface { this.notchController.destroy(); this.notchController = undefined; } + + // Clean up validation observer to prevent memory leaks. + if (this.validationObserver) { + this.validationObserver.disconnect(); + this.validationObserver = undefined; + } } /** @@ -1056,8 +1111,8 @@ export class Select implements ComponentInterface { aria-label={this.ariaLabel} aria-haspopup="dialog" aria-expanded={`${isExpanded}`} - aria-describedby={this.getHintTextID()} - aria-invalid={this.getHintTextID() === this.errorTextId} + aria-describedby={this.hintTextID} + aria-invalid={this.isInvalid ? 'true' : undefined} aria-required={`${required}`} onFocus={this.onFocus} onBlur={this.onBlur} @@ -1067,9 +1122,9 @@ export class Select implements ComponentInterface { } private getHintTextID(): string | undefined { - const { el, helperText, errorText, helperTextId, errorTextId } = this; + const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this; - if (el.classList.contains('ion-touched') && el.classList.contains('ion-invalid') && errorText) { + if (isInvalid && errorText) { return errorTextId; } @@ -1084,14 +1139,14 @@ export class Select implements ComponentInterface { * Renders the helper text or error text values */ private renderHintText() { - const { helperText, errorText, helperTextId, errorTextId } = this; + const { helperText, errorText, helperTextId, errorTextId, isInvalid } = this; return [ -
- {helperText} +
+ {!isInvalid ? helperText : null}
, -
- {errorText} + , ]; } diff --git a/core/src/components/select/test/validation/index.html b/core/src/components/select/test/validation/index.html new file mode 100644 index 0000000000..74d0586bd7 --- /dev/null +++ b/core/src/components/select/test/validation/index.html @@ -0,0 +1,200 @@ + + + + + Select - Validation + + + + + + + + + + + + + + Select - Validation Test + + + + +
+

Screen Reader Testing Instructions:

+
    +
  1. Enable your screen reader (VoiceOver, NVDA, JAWS, etc.)
  2. +
  3. Tab through the form fields
  4. +
  5. When you tab away from an empty required field, the error should be announced immediately
  6. +
  7. The error text should be announced BEFORE the next field is announced
  8. +
  9. Test in Chrome, Safari, and Firefox to verify consistent behavior
  10. +
+
+ +
+
+

Required Field

+ + Apples + Oranges + Pears + +
+ +
+

Optional Field (No Validation)

+ + Red + Blue + Green + +
+
+ +
+ Submit Form + Reset Form +
+
+
+ + + + diff --git a/core/src/components/textarea/textarea.tsx b/core/src/components/textarea/textarea.tsx index 83c1b91c2e..89646f6a24 100644 --- a/core/src/components/textarea/textarea.tsx +++ b/core/src/components/textarea/textarea.tsx @@ -15,7 +15,7 @@ import { writeTask, } from '@stencil/core'; import type { NotchController } from '@utils/forms'; -import { createNotchController } from '@utils/forms'; +import { createNotchController, checkInvalidState } from '@utils/forms'; import type { Attributes } from '@utils/helpers'; import { inheritAriaAttributes, debounceEvent, inheritAttributes, componentOnReady } from '@utils/helpers'; import { createSlotMutationController } from '@utils/slot-mutation-controller'; @@ -335,16 +335,6 @@ export class Textarea implements ComponentInterface { } } - /** - * Checks if the textarea is in an invalid state based on Ionic validation classes - */ - private checkValidationState(): boolean { - const hasIonTouched = this.el.classList.contains('ion-touched'); - const hasIonInvalid = this.el.classList.contains('ion-invalid'); - - return hasIonTouched && hasIonInvalid; - } - connectedCallback() { const { el } = this; this.slotMutationController = createSlotMutationController(el, ['label', 'start', 'end'], () => forceUpdate(this)); @@ -357,7 +347,7 @@ export class Textarea implements ComponentInterface { // Watch for class changes to update validation state if (Build.isBrowser && typeof MutationObserver !== 'undefined') { this.validationObserver = new MutationObserver(() => { - const newIsInvalid = this.checkValidationState(); + const newIsInvalid = checkInvalidState(this.el); if (this.isInvalid !== newIsInvalid) { this.isInvalid = newIsInvalid; // Force a re-render to update aria-describedby immediately @@ -372,7 +362,7 @@ export class Textarea implements ComponentInterface { } // Always set initial state - this.isInvalid = this.checkValidationState(); + this.isInvalid = checkInvalidState(this.el); this.debounceChanged(); if (Build.isBrowser) { diff --git a/core/src/utils/forms/index.ts b/core/src/utils/forms/index.ts index d24bddfaa7..682811ed64 100644 --- a/core/src/utils/forms/index.ts +++ b/core/src/utils/forms/index.ts @@ -1,2 +1,3 @@ export * from './notch-controller'; export * from './compare-with-utils'; +export * from './validity'; diff --git a/core/src/utils/forms/validity.ts b/core/src/utils/forms/validity.ts new file mode 100644 index 0000000000..995dc637b1 --- /dev/null +++ b/core/src/utils/forms/validity.ts @@ -0,0 +1,15 @@ +type FormElement = HTMLIonInputElement | HTMLIonTextareaElement | HTMLIonSelectElement; + +/** + * Checks if the form element is in an invalid state based on + * Ionic validation classes. + * + * @param el The form element to check. + * @returns `true` if the element is invalid, `false` otherwise. + */ +export const checkInvalidState = (el: FormElement): boolean => { + const hasIonTouched = el.classList.contains('ion-touched'); + const hasIonInvalid = el.classList.contains('ion-invalid'); + + return hasIonTouched && hasIonInvalid; +}; diff --git a/packages/angular/test/base/src/app/lazy/template-form/template-form.component.html b/packages/angular/test/base/src/app/lazy/template-form/template-form.component.html index d33aa4ae1e..ccd902f6b9 100644 --- a/packages/angular/test/base/src/app/lazy/template-form/template-form.component.html +++ b/packages/angular/test/base/src/app/lazy/template-form/template-form.component.html @@ -77,6 +77,31 @@

MinLength Errors: {{minLengthField.errors | json}}

+ + + + + Option 1 + Option 2 + + + + + + +

Select Touched: {{selectField.touched}}

+

Select Invalid: {{selectField.invalid}}

+

Select Errors: {{selectField.errors | json}}

+
+
diff --git a/packages/angular/test/base/src/app/lazy/template-form/template-form.component.ts b/packages/angular/test/base/src/app/lazy/template-form/template-form.component.ts index 1ecdaa5e5d..705e104e80 100644 --- a/packages/angular/test/base/src/app/lazy/template-form/template-form.component.ts +++ b/packages/angular/test/base/src/app/lazy/template-form/template-form.component.ts @@ -9,6 +9,7 @@ export class TemplateFormComponent { inputValue = ''; textareaValue = ''; minLengthValue = ''; + selectValue = ''; // Track if form has been submitted submitted = false; diff --git a/packages/angular/test/base/src/app/standalone/app-standalone/app.routes.ts b/packages/angular/test/base/src/app/standalone/app-standalone/app.routes.ts index ed9628ae7c..93f6284957 100644 --- a/packages/angular/test/base/src/app/standalone/app-standalone/app.routes.ts +++ b/packages/angular/test/base/src/app/standalone/app-standalone/app.routes.ts @@ -47,6 +47,7 @@ export const routes: Routes = [ children: [ { path: 'input-validation', loadComponent: () => import('../validation/input-validation/input-validation.component').then(c => c.InputValidationComponent) }, { path: 'textarea-validation', loadComponent: () => import('../validation/textarea-validation/textarea-validation.component').then(c => c.TextareaValidationComponent) }, + { path: 'select-validation', loadComponent: () => import('../validation/select-validation/select-validation.component').then(c => c.SelectValidationComponent) }, { path: '**', redirectTo: 'input-validation' } ] }, diff --git a/packages/angular/test/base/src/app/standalone/home-page/home-page.component.html b/packages/angular/test/base/src/app/standalone/home-page/home-page.component.html index fd6ae409a3..f0eece0ba3 100644 --- a/packages/angular/test/base/src/app/standalone/home-page/home-page.component.html +++ b/packages/angular/test/base/src/app/standalone/home-page/home-page.component.html @@ -131,6 +131,11 @@ Textarea Validation Test + + + Select Validation Test + + diff --git a/packages/angular/test/base/src/app/standalone/validation/select-validation/select-validation.component.html b/packages/angular/test/base/src/app/standalone/validation/select-validation/select-validation.component.html new file mode 100644 index 0000000000..15993edc80 --- /dev/null +++ b/packages/angular/test/base/src/app/standalone/validation/select-validation/select-validation.component.html @@ -0,0 +1,63 @@ + + + Select - Validation Test + + + + +
+

Screen Reader Testing Instructions:

+
    +
  1. Enable your screen reader (VoiceOver, NVDA, JAWS, etc.)
  2. +
  3. Tab through the form fields
  4. +
  5. When you tab away from an empty required field, the error should be announced immediately
  6. +
  7. The error text should be announced BEFORE the next field is announced
  8. +
  9. Test in Chrome, Safari, and Firefox to verify consistent behavior
  10. +
+
+ +
+
+
+

Required Field

+ + Apples + Oranges + Pears + +
+ +
+

Optional Field (No Validation)

+ + Red + Blue + Green + +
+
+
+ +
+ Submit Form + Reset Form +
+
diff --git a/packages/angular/test/base/src/app/standalone/validation/select-validation/select-validation.component.scss b/packages/angular/test/base/src/app/standalone/validation/select-validation/select-validation.component.scss new file mode 100644 index 0000000000..add228ccab --- /dev/null +++ b/packages/angular/test/base/src/app/standalone/validation/select-validation/select-validation.component.scss @@ -0,0 +1,36 @@ +.grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); + grid-row-gap: 20px; + grid-column-gap: 20px; +} + +h2 { + font-size: 12px; + font-weight: normal; + color: var(--ion-color-step-600); + margin-top: 10px; + margin-bottom: 5px; +} + +.validation-info { + margin: 20px; + padding: 10px; + background: var(--ion-color-light); + border-radius: 4px; +} + +.validation-info h2 { + font-size: 14px; + font-weight: 600; + margin-bottom: 10px; +} + +.validation-info ol { + margin: 0; + padding-left: 20px; +} + +.validation-info li { + margin-bottom: 5px; +} diff --git a/packages/angular/test/base/src/app/standalone/validation/select-validation/select-validation.component.ts b/packages/angular/test/base/src/app/standalone/validation/select-validation/select-validation.component.ts new file mode 100644 index 0000000000..1ae4a239ef --- /dev/null +++ b/packages/angular/test/base/src/app/standalone/validation/select-validation/select-validation.component.ts @@ -0,0 +1,63 @@ +import { CommonModule } from '@angular/common'; +import { Component } from '@angular/core'; +import { + FormBuilder, + ReactiveFormsModule, + Validators +} from '@angular/forms'; +import { + IonButton, + IonContent, + IonHeader, + IonSelect, + IonSelectOption, + IonTitle, + IonToolbar +} from '@ionic/angular/standalone'; + +@Component({ + selector: 'app-select-validation', + templateUrl: './select-validation.component.html', + styleUrls: ['./select-validation.component.scss'], + standalone: true, + imports: [ + CommonModule, + ReactiveFormsModule, + IonSelect, + IonSelectOption, + IonButton, + IonHeader, + IonToolbar, + IonTitle, + IonContent + ] +}) +export class SelectValidationComponent { + // Field metadata for labels and error messages + fieldMetadata = { + fruits: { + label: 'Fruits', + helperText: "Select an option", + errorText: 'This field is required' + }, + optional: { + label: 'Colors', + helperText: 'You can skip this field', + errorText: '' + } + }; + + form = this.fb.group({ + fruits: ['', Validators.required], + optional: [''] + }); + + constructor(private fb: FormBuilder) {} + + // Submit form + onSubmit(): void { + if (this.form.valid) { + alert('Form submitted successfully!'); + } + } +} From add33c5995075325b9e92854eb7fc49eb220c02d Mon Sep 17 00:00:00 2001 From: Brandy Smith Date: Wed, 15 Oct 2025 13:50:12 -0400 Subject: [PATCH 09/20] refactor(button): only check for undefined fill (#30722) Issue number: internal --------- ## What is the current behavior? Button checks for undefined and null fill as a result of Stencil bug https://github.com/ionic-team/stencil/issues/3586 ## What is the new behavior? - Removes check for `null` with the release of Stencil v4.38.0 - No test needed as one exists already: https://github.com/ionic-team/ionic-framework/pull/26339/files ## Does this introduce a breaking change? - [ ] Yes - [x] No Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com> --- core/src/components/button/button.tsx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/core/src/components/button/button.tsx b/core/src/components/button/button.tsx index 47326abfea..9eecd0d2c6 100644 --- a/core/src/components/button/button.tsx +++ b/core/src/components/button/button.tsx @@ -361,11 +361,7 @@ export class Button implements ComponentInterface, AnchorInterface, ButtonInterf target, }; let fill = this.fill; - /** - * We check both undefined and null to - * work around https://github.com/ionic-team/stencil/issues/3586. - */ - if (fill == null) { + if (fill === undefined) { fill = this.inToolbar || this.inListHeader ? 'clear' : 'solid'; } From 12084af163ed811b9c6bda3c7850fc0c53c60c7b Mon Sep 17 00:00:00 2001 From: Maria Hutt Date: Wed, 15 Oct 2025 10:50:44 -0700 Subject: [PATCH 10/20] fix(header): ensure one banner role in condensed header (#30718) Issue number: internal --------- ## What is the current behavior? As per accessibility guidelines, there should only be one banner landmark per page. A condensed header creates two banner landmarks since 2 `ion-header` components are required on the page. `ion-header` renders with a `role="banner"` by default (when not in `ion-menu`). The visual effect of the condensed header is achieved by rendering two distinct header components. Because both components exist in the code at the same time and both have `role="banner"`, they create a duplicate landmark announcement for screen readers. This leads to a violation with the accessibility guidelines. ## What is the new behavior? - The role is updated to either `none` or `banner` based off the header's active state. - Added test. ## Does this introduce a breaking change? - [ ] Yes - [x] No ## Other information [Preview](https://ionic-framework-git-fw-6767-ionic1.vercel.app/src/components/header/test/condense/?ionic%3Amode=ios) --- core/src/components/header/header.tsx | 4 +- core/src/components/header/header.utils.ts | 38 ++++++++++++++++++ .../header/test/condense/header.e2e.ts | 40 +++++++++++++++++++ 3 files changed, 81 insertions(+), 1 deletion(-) diff --git a/core/src/components/header/header.tsx b/core/src/components/header/header.tsx index 6b2102a7db..ab93fada78 100644 --- a/core/src/components/header/header.tsx +++ b/core/src/components/header/header.tsx @@ -15,6 +15,7 @@ import { handleToolbarIntersection, setHeaderActive, setToolbarBackgroundOpacity, + getRoleType, } from './header.utils'; /** @@ -208,9 +209,10 @@ export class Header implements ComponentInterface { const { translucent, inheritedAttributes } = this; const mode = getIonMode(this); const collapse = this.collapse || 'none'; + const isCondensed = collapse === 'condense'; // banner role must be at top level, so remove role if inside a menu - const roleType = hostContext('ion-menu', this.el) ? 'none' : 'banner'; + const roleType = getRoleType(hostContext('ion-menu', this.el), isCondensed, mode); return ( { const ionTitles = toolbars.map((toolbar) => toolbar.ionTitleEl); if (active) { + headerEl.setAttribute('role', ROLE_BANNER); headerEl.classList.remove('header-collapse-condense-inactive'); ionTitles.forEach((ionTitle) => { @@ -179,6 +182,16 @@ export const setHeaderActive = (headerIndex: HeaderIndex, active = true) => { } }); } else { + /** + * There can only be one banner landmark per page. + * By default, all ion-headers have the banner role. + * This causes an accessibility issue when using a + * condensed header since there are two ion-headers + * on the page at once (active and inactive). + * To solve this, the role needs to be toggled + * based on which header is active. + */ + headerEl.setAttribute('role', ROLE_NONE); headerEl.classList.add('header-collapse-condense-inactive'); /** @@ -244,3 +257,28 @@ export const handleHeaderFade = (scrollEl: HTMLElement, baseEl: HTMLElement, con }); }); }; + +/** + * Get the role type for the ion-header. + * + * @param isInsideMenu If ion-header is inside ion-menu. + * @param isCondensed If ion-header has collapse="condense". + * @param mode The current mode. + * @returns 'none' if inside ion-menu or if condensed in md + * mode, otherwise 'banner'. + */ +export const getRoleType = (isInsideMenu: boolean, isCondensed: boolean, mode: 'ios' | 'md') => { + // If the header is inside a menu, it should not have the banner role. + if (isInsideMenu) { + return ROLE_NONE; + } + /** + * Only apply role="none" to `md` mode condensed headers + * since the large header is never shown. + */ + if (isCondensed && mode === 'md') { + return ROLE_NONE; + } + // Default to banner role. + return ROLE_BANNER; +}; diff --git a/core/src/components/header/test/condense/header.e2e.ts b/core/src/components/header/test/condense/header.e2e.ts index b57d1ee58f..c416532973 100644 --- a/core/src/components/header/test/condense/header.e2e.ts +++ b/core/src/components/header/test/condense/header.e2e.ts @@ -40,5 +40,45 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, screenshot, c await expect(smallTitle).toHaveAttribute('aria-hidden', 'true'); }); + + test('should only have the banner role on the active header', async ({ page }) => { + await page.goto('/src/components/header/test/condense', config); + const largeTitleHeader = page.locator('#largeTitleHeader'); + const smallTitleHeader = page.locator('#smallTitleHeader'); + const content = page.locator('ion-content'); + + await expect(largeTitleHeader).toHaveAttribute('role', 'banner'); + await expect(smallTitleHeader).toHaveAttribute('role', 'none'); + + await content.evaluate(async (el: HTMLIonContentElement) => { + await el.scrollToBottom(); + }); + await page.locator('#largeTitleHeader.header-collapse-condense-inactive').waitFor(); + + await expect(largeTitleHeader).toHaveAttribute('role', 'none'); + await expect(smallTitleHeader).toHaveAttribute('role', 'banner'); + }); + }); +}); + +configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, config }) => { + test.describe(title('header: condense'), () => { + test('should only have the banner role on the small header', async ({ page }) => { + await page.goto('/src/components/header/test/condense', config); + const largeTitleHeader = page.locator('#largeTitleHeader'); + const smallTitleHeader = page.locator('#smallTitleHeader'); + const content = page.locator('ion-content'); + + await expect(smallTitleHeader).toHaveAttribute('role', 'banner'); + await expect(largeTitleHeader).toHaveAttribute('role', 'none'); + + await content.evaluate(async (el: HTMLIonContentElement) => { + await el.scrollToBottom(); + }); + await page.waitForChanges(); + + await expect(smallTitleHeader).toHaveAttribute('role', 'banner'); + await expect(largeTitleHeader).toHaveAttribute('role', 'none'); + }); }); }); From 72c2b3e9165526c4c7b4dd434154b24a86ce2c15 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 15 Oct 2025 14:09:32 -0400 Subject: [PATCH 11/20] chore(deps): update playwright (#30709) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit > [!NOTE] > Mend has cancelled [the proposed renaming](https://redirect.github.com/renovatebot/renovate/discussions/37842) of the Renovate GitHub app being renamed to `mend[bot]`. > > This notice will be removed on 2025-10-07.
This PR contains the following updates: | Package | Change | Age | Confidence | Type | Update | |---|---|---|---|---|---| | [@playwright/test](https://playwright.dev) ([source](https://redirect.github.com/microsoft/playwright)) | [`^1.55.1` -> `^1.56.0`](https://renovatebot.com/diffs/npm/@playwright%2ftest/1.55.1/1.56.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@playwright%2ftest/1.56.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@playwright%2ftest/1.55.1/1.56.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | mcr.microsoft.com/playwright | `v1.55.1` -> `v1.56.0` | [![age](https://developer.mend.io/api/mc/badges/age/docker/mcr.microsoft.com%2fplaywright/v1.56.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/mcr.microsoft.com%2fplaywright/v1.55.1/v1.56.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | final | minor | --- ### Release Notes
microsoft/playwright (@​playwright/test) ### [`v1.56.0`](https://redirect.github.com/microsoft/playwright/compare/v1.55.1...v1.56.0) [Compare Source](https://redirect.github.com/microsoft/playwright/compare/v1.55.1...v1.56.0)
--- ### Configuration πŸ“… **Schedule**: Branch creation - "every weekday before 11am" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. β™» **Rebasing**: Never, or you tick the rebase/retry checkbox. πŸ‘» **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] 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). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- core/Dockerfile | 2 +- core/package-lock.json | 46 +++++++++++++++++++++--------------------- core/package.json | 2 +- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/core/Dockerfile b/core/Dockerfile index 095cde63a4..2b95845ee4 100644 --- a/core/Dockerfile +++ b/core/Dockerfile @@ -1,5 +1,5 @@ # Get Playwright -FROM mcr.microsoft.com/playwright:v1.55.1 +FROM mcr.microsoft.com/playwright:v1.56.0 # Set the working directory WORKDIR /ionic diff --git a/core/package-lock.json b/core/package-lock.json index 34df19e58d..6efd1e68ca 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -22,7 +22,7 @@ "@clack/prompts": "^0.11.0", "@ionic/eslint-config": "^0.3.0", "@ionic/prettier-config": "^2.0.0", - "@playwright/test": "^1.55.1", + "@playwright/test": "^1.56.0", "@rollup/plugin-node-resolve": "^8.4.0", "@rollup/plugin-virtual": "^2.0.3", "@stencil/angular-output-target": "^0.10.0", @@ -1715,12 +1715,12 @@ } }, "node_modules/@playwright/test": { - "version": "1.55.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.55.1.tgz", - "integrity": "sha512-IVAh/nOJaw6W9g+RJVlIQJ6gSiER+ae6mKQ5CX1bERzQgbC1VSeBlwdvczT7pxb0GWiyrxH4TGKbMfDb4Sq/ig==", + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.56.0.tgz", + "integrity": "sha512-Tzh95Twig7hUwwNe381/K3PggZBZblKUe2wv25oIpzWLr6Z0m4KgV1ZVIjnR6GM9ANEqjZD7XsZEa6JL/7YEgg==", "dev": true, "dependencies": { - "playwright": "1.55.1" + "playwright": "1.56.0" }, "bin": { "playwright": "cli.js" @@ -8592,12 +8592,12 @@ } }, "node_modules/playwright": { - "version": "1.55.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.55.1.tgz", - "integrity": "sha512-cJW4Xd/G3v5ovXtJJ52MAOclqeac9S/aGGgRzLabuF8TnIb6xHvMzKIa6JmrRzUkeXJgfL1MhukP0NK6l39h3A==", + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.0.tgz", + "integrity": "sha512-X5Q1b8lOdWIE4KAoHpW3SE8HvUB+ZZsUoN64ZhjnN8dOb1UpujxBtENGiZFE+9F/yhzJwYa+ca3u43FeLbboHA==", "dev": true, "dependencies": { - "playwright-core": "1.55.1" + "playwright-core": "1.56.0" }, "bin": { "playwright": "cli.js" @@ -8610,9 +8610,9 @@ } }, "node_modules/playwright-core": { - "version": "1.55.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.1.tgz", - "integrity": "sha512-Z6Mh9mkwX+zxSlHqdr5AOcJnfp+xUWLCt9uKV18fhzA8eyxUd8NUWzAjxUh55RZKSYwDGX0cfaySdhZJGMoJ+w==", + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.0.tgz", + "integrity": "sha512-1SXl7pMfemAMSDn5rkPeZljxOCYAmQnYLBTExuh6E8USHXGSX3dx6lYZN/xPpTz1vimXmPA9CDnILvmJaB8aSQ==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -11862,12 +11862,12 @@ } }, "@playwright/test": { - "version": "1.55.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.55.1.tgz", - "integrity": "sha512-IVAh/nOJaw6W9g+RJVlIQJ6gSiER+ae6mKQ5CX1bERzQgbC1VSeBlwdvczT7pxb0GWiyrxH4TGKbMfDb4Sq/ig==", + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.56.0.tgz", + "integrity": "sha512-Tzh95Twig7hUwwNe381/K3PggZBZblKUe2wv25oIpzWLr6Z0m4KgV1ZVIjnR6GM9ANEqjZD7XsZEa6JL/7YEgg==", "dev": true, "requires": { - "playwright": "1.55.1" + "playwright": "1.56.0" } }, "@rollup/plugin-node-resolve": { @@ -16811,19 +16811,19 @@ } }, "playwright": { - "version": "1.55.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.55.1.tgz", - "integrity": "sha512-cJW4Xd/G3v5ovXtJJ52MAOclqeac9S/aGGgRzLabuF8TnIb6xHvMzKIa6JmrRzUkeXJgfL1MhukP0NK6l39h3A==", + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.0.tgz", + "integrity": "sha512-X5Q1b8lOdWIE4KAoHpW3SE8HvUB+ZZsUoN64ZhjnN8dOb1UpujxBtENGiZFE+9F/yhzJwYa+ca3u43FeLbboHA==", "dev": true, "requires": { "fsevents": "2.3.2", - "playwright-core": "1.55.1" + "playwright-core": "1.56.0" } }, "playwright-core": { - "version": "1.55.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.1.tgz", - "integrity": "sha512-Z6Mh9mkwX+zxSlHqdr5AOcJnfp+xUWLCt9uKV18fhzA8eyxUd8NUWzAjxUh55RZKSYwDGX0cfaySdhZJGMoJ+w==", + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.0.tgz", + "integrity": "sha512-1SXl7pMfemAMSDn5rkPeZljxOCYAmQnYLBTExuh6E8USHXGSX3dx6lYZN/xPpTz1vimXmPA9CDnILvmJaB8aSQ==", "dev": true }, "postcss": { diff --git a/core/package.json b/core/package.json index ca4a7855f4..b149a04f17 100644 --- a/core/package.json +++ b/core/package.json @@ -44,7 +44,7 @@ "@clack/prompts": "^0.11.0", "@ionic/eslint-config": "^0.3.0", "@ionic/prettier-config": "^2.0.0", - "@playwright/test": "^1.55.1", + "@playwright/test": "^1.56.0", "@rollup/plugin-node-resolve": "^8.4.0", "@rollup/plugin-virtual": "^2.0.3", "@stencil/angular-output-target": "^0.10.0", From 7a293d768ce551caf098ffa900c371d147862589 Mon Sep 17 00:00:00 2001 From: ionitron Date: Wed, 15 Oct 2025 19:00:38 +0000 Subject: [PATCH 12/20] v8.7.7 --- CHANGELOG.md | 13 +++++++++++++ core/CHANGELOG.md | 13 +++++++++++++ core/package-lock.json | 6 +++--- core/package.json | 2 +- lerna.json | 2 +- packages/angular-server/CHANGELOG.md | 8 ++++++++ packages/angular-server/package-lock.json | 8 ++++---- packages/angular-server/package.json | 4 ++-- packages/angular/CHANGELOG.md | 11 +++++++++++ packages/angular/package-lock.json | 8 ++++---- packages/angular/package.json | 4 ++-- packages/docs/CHANGELOG.md | 8 ++++++++ packages/docs/package-lock.json | 6 +++--- packages/docs/package.json | 2 +- packages/react-router/CHANGELOG.md | 8 ++++++++ packages/react-router/package-lock.json | 8 ++++---- packages/react-router/package.json | 4 ++-- packages/react/CHANGELOG.md | 8 ++++++++ packages/react/package-lock.json | 8 ++++---- packages/react/package.json | 4 ++-- packages/vue-router/CHANGELOG.md | 8 ++++++++ packages/vue-router/package-lock.json | 8 ++++---- packages/vue-router/package.json | 4 ++-- packages/vue/CHANGELOG.md | 8 ++++++++ packages/vue/package-lock.json | 8 ++++---- packages/vue/package.json | 4 ++-- 26 files changed, 130 insertions(+), 45 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e7f40c703e..53f51d43a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,19 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.7](https://github.com/ionic-team/ionic-framework/compare/v8.7.6...v8.7.7) (2025-10-15) + + +### Bug Fixes + +* **header:** ensure one banner role in condensed header ([#30718](https://github.com/ionic-team/ionic-framework/issues/30718)) ([12084af](https://github.com/ionic-team/ionic-framework/commit/12084af163ed811b9c6bda3c7850fc0c53c60c7b)) +* **header:** prevent flickering during iOS page transitions ([#30705](https://github.com/ionic-team/ionic-framework/issues/30705)) ([820fa28](https://github.com/ionic-team/ionic-framework/commit/820fa2854331722d22efd0e38a1936117477967a)), closes [#25326](https://github.com/ionic-team/ionic-framework/issues/25326) +* **select:** improve screen reader announcement timing for validation errors ([#30723](https://github.com/ionic-team/ionic-framework/issues/30723)) ([03303d7](https://github.com/ionic-team/ionic-framework/commit/03303d73f0bfe2380ced7931525fc52fd8576367)) + + + + + ## [8.7.6](https://github.com/ionic-team/ionic-framework/compare/v8.7.5...v8.7.6) (2025-10-08) diff --git a/core/CHANGELOG.md b/core/CHANGELOG.md index ba31e30048..954300e852 100644 --- a/core/CHANGELOG.md +++ b/core/CHANGELOG.md @@ -3,6 +3,19 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.7](https://github.com/ionic-team/ionic-framework/compare/v8.7.6...v8.7.7) (2025-10-15) + + +### Bug Fixes + +* **header:** ensure one banner role in condensed header ([#30718](https://github.com/ionic-team/ionic-framework/issues/30718)) ([12084af](https://github.com/ionic-team/ionic-framework/commit/12084af163ed811b9c6bda3c7850fc0c53c60c7b)) +* **header:** prevent flickering during iOS page transitions ([#30705](https://github.com/ionic-team/ionic-framework/issues/30705)) ([820fa28](https://github.com/ionic-team/ionic-framework/commit/820fa2854331722d22efd0e38a1936117477967a)), closes [#25326](https://github.com/ionic-team/ionic-framework/issues/25326) +* **select:** improve screen reader announcement timing for validation errors ([#30723](https://github.com/ionic-team/ionic-framework/issues/30723)) ([03303d7](https://github.com/ionic-team/ionic-framework/commit/03303d73f0bfe2380ced7931525fc52fd8576367)) + + + + + ## [8.7.6](https://github.com/ionic-team/ionic-framework/compare/v8.7.5...v8.7.6) (2025-10-08) diff --git a/core/package-lock.json b/core/package-lock.json index 6efd1e68ca..a97530eb88 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ionic/core", - "version": "8.7.6", + "version": "8.7.7", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/core", - "version": "8.7.6", + "version": "8.7.7", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -18337,4 +18337,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/core/package.json b/core/package.json index b149a04f17..cd35c38603 100644 --- a/core/package.json +++ b/core/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/core", - "version": "8.7.6", + "version": "8.7.7", "description": "Base components for Ionic", "keywords": [ "ionic", diff --git a/lerna.json b/lerna.json index c7be8441fe..c2c40f0bbd 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "core", "packages/*" ], - "version": "8.7.6" + "version": "8.7.7" } \ No newline at end of file diff --git a/packages/angular-server/CHANGELOG.md b/packages/angular-server/CHANGELOG.md index 9fd958ec1d..205417ccec 100644 --- a/packages/angular-server/CHANGELOG.md +++ b/packages/angular-server/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.7](https://github.com/ionic-team/ionic-framework/compare/v8.7.6...v8.7.7) (2025-10-15) + +**Note:** Version bump only for package @ionic/angular-server + + + + + ## [8.7.6](https://github.com/ionic-team/ionic-framework/compare/v8.7.5...v8.7.6) (2025-10-08) **Note:** Version bump only for package @ionic/angular-server diff --git a/packages/angular-server/package-lock.json b/packages/angular-server/package-lock.json index 2deb627d50..67b2c902fb 100644 --- a/packages/angular-server/package-lock.json +++ b/packages/angular-server/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/angular-server", - "version": "8.7.6", + "version": "8.7.7", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/angular-server", - "version": "8.7.6", + "version": "8.7.7", "license": "MIT", "dependencies": { - "@ionic/core": "^8.7.6" + "@ionic/core": "^8.7.7" }, "devDependencies": { "@angular-eslint/eslint-plugin": "^16.0.0", @@ -11286,4 +11286,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/angular-server/package.json b/packages/angular-server/package.json index db797d4dbb..ff9f2fde34 100644 --- a/packages/angular-server/package.json +++ b/packages/angular-server/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/angular-server", - "version": "8.7.6", + "version": "8.7.7", "description": "Angular SSR Module for Ionic", "keywords": [ "ionic", @@ -62,6 +62,6 @@ }, "prettier": "@ionic/prettier-config", "dependencies": { - "@ionic/core": "^8.7.6" + "@ionic/core": "^8.7.7" } } diff --git a/packages/angular/CHANGELOG.md b/packages/angular/CHANGELOG.md index b87f9d6b10..b376d9a41e 100644 --- a/packages/angular/CHANGELOG.md +++ b/packages/angular/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.7](https://github.com/ionic-team/ionic-framework/compare/v8.7.6...v8.7.7) (2025-10-15) + + +### Bug Fixes + +* **select:** improve screen reader announcement timing for validation errors ([#30723](https://github.com/ionic-team/ionic-framework/issues/30723)) ([03303d7](https://github.com/ionic-team/ionic-framework/commit/03303d73f0bfe2380ced7931525fc52fd8576367)) + + + + + ## [8.7.6](https://github.com/ionic-team/ionic-framework/compare/v8.7.5...v8.7.6) (2025-10-08) **Note:** Version bump only for package @ionic/angular diff --git a/packages/angular/package-lock.json b/packages/angular/package-lock.json index 81a3261879..63808fe6fc 100644 --- a/packages/angular/package-lock.json +++ b/packages/angular/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/angular", - "version": "8.7.6", + "version": "8.7.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@ionic/angular", - "version": "8.7.6", + "version": "8.7.7", "license": "MIT", "dependencies": { - "@ionic/core": "^8.7.6", + "@ionic/core": "^8.7.7", "ionicons": "^8.0.13", "jsonc-parser": "^3.0.0", "tslib": "^2.3.0" @@ -9079,4 +9079,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/angular/package.json b/packages/angular/package.json index fe1bc5e4b3..4a1c72e5c1 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/angular", - "version": "8.7.6", + "version": "8.7.7", "description": "Angular specific wrappers for @ionic/core", "keywords": [ "ionic", @@ -48,7 +48,7 @@ } }, "dependencies": { - "@ionic/core": "^8.7.6", + "@ionic/core": "^8.7.7", "ionicons": "^8.0.13", "jsonc-parser": "^3.0.0", "tslib": "^2.3.0" diff --git a/packages/docs/CHANGELOG.md b/packages/docs/CHANGELOG.md index 1945ffe9fc..4ed024dce3 100644 --- a/packages/docs/CHANGELOG.md +++ b/packages/docs/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.7](https://github.com/ionic-team/ionic-framework/compare/v8.7.6...v8.7.7) (2025-10-15) + +**Note:** Version bump only for package @ionic/docs + + + + + ## [8.7.6](https://github.com/ionic-team/ionic-framework/compare/v8.7.5...v8.7.6) (2025-10-08) **Note:** Version bump only for package @ionic/docs diff --git a/packages/docs/package-lock.json b/packages/docs/package-lock.json index 95e60c1902..a29343ebd2 100644 --- a/packages/docs/package-lock.json +++ b/packages/docs/package-lock.json @@ -1,13 +1,13 @@ { "name": "@ionic/docs", - "version": "8.7.6", + "version": "8.7.7", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/docs", - "version": "8.7.6", + "version": "8.7.7", "license": "MIT" } } -} +} \ No newline at end of file diff --git a/packages/docs/package.json b/packages/docs/package.json index f6d2cedb4c..73a2f40470 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/docs", - "version": "8.7.6", + "version": "8.7.7", "description": "Pre-packaged API documentation for the Ionic docs.", "main": "core.json", "types": "core.d.ts", diff --git a/packages/react-router/CHANGELOG.md b/packages/react-router/CHANGELOG.md index f2cb5f5615..1eef525bee 100644 --- a/packages/react-router/CHANGELOG.md +++ b/packages/react-router/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.7](https://github.com/ionic-team/ionic-framework/compare/v8.7.6...v8.7.7) (2025-10-15) + +**Note:** Version bump only for package @ionic/react-router + + + + + ## [8.7.6](https://github.com/ionic-team/ionic-framework/compare/v8.7.5...v8.7.6) (2025-10-08) **Note:** Version bump only for package @ionic/react-router diff --git a/packages/react-router/package-lock.json b/packages/react-router/package-lock.json index 155fec9389..27a1696391 100644 --- a/packages/react-router/package-lock.json +++ b/packages/react-router/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/react-router", - "version": "8.7.6", + "version": "8.7.7", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/react-router", - "version": "8.7.6", + "version": "8.7.7", "license": "MIT", "dependencies": { - "@ionic/react": "^8.7.6", + "@ionic/react": "^8.7.7", "tslib": "*" }, "devDependencies": { @@ -6844,4 +6844,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/packages/react-router/package.json b/packages/react-router/package.json index 70b28d147f..07cad69873 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/react-router", - "version": "8.7.6", + "version": "8.7.7", "description": "React Router wrapper for @ionic/react", "keywords": [ "ionic", @@ -36,7 +36,7 @@ "dist/" ], "dependencies": { - "@ionic/react": "^8.7.6", + "@ionic/react": "^8.7.7", "tslib": "*" }, "peerDependencies": { diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index 956c85c472..d641157453 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.7](https://github.com/ionic-team/ionic-framework/compare/v8.7.6...v8.7.7) (2025-10-15) + +**Note:** Version bump only for package @ionic/react + + + + + ## [8.7.6](https://github.com/ionic-team/ionic-framework/compare/v8.7.5...v8.7.6) (2025-10-08) **Note:** Version bump only for package @ionic/react diff --git a/packages/react/package-lock.json b/packages/react/package-lock.json index a112071494..08392dd21d 100644 --- a/packages/react/package-lock.json +++ b/packages/react/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/react", - "version": "8.7.6", + "version": "8.7.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@ionic/react", - "version": "8.7.6", + "version": "8.7.7", "license": "MIT", "dependencies": { - "@ionic/core": "^8.7.6", + "@ionic/core": "^8.7.7", "ionicons": "^8.0.13", "tslib": "*" }, @@ -11913,4 +11913,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/react/package.json b/packages/react/package.json index c06d808a75..e441982a66 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/react", - "version": "8.7.6", + "version": "8.7.7", "description": "React specific wrapper for @ionic/core", "keywords": [ "ionic", @@ -40,7 +40,7 @@ "css/" ], "dependencies": { - "@ionic/core": "^8.7.6", + "@ionic/core": "^8.7.7", "ionicons": "^8.0.13", "tslib": "*" }, diff --git a/packages/vue-router/CHANGELOG.md b/packages/vue-router/CHANGELOG.md index 09273dacca..9ebef9caf7 100644 --- a/packages/vue-router/CHANGELOG.md +++ b/packages/vue-router/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.7](https://github.com/ionic-team/ionic-framework/compare/v8.7.6...v8.7.7) (2025-10-15) + +**Note:** Version bump only for package @ionic/vue-router + + + + + ## [8.7.6](https://github.com/ionic-team/ionic-framework/compare/v8.7.5...v8.7.6) (2025-10-08) **Note:** Version bump only for package @ionic/vue-router diff --git a/packages/vue-router/package-lock.json b/packages/vue-router/package-lock.json index 8fbc4720b9..f2e051b7b5 100644 --- a/packages/vue-router/package-lock.json +++ b/packages/vue-router/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/vue-router", - "version": "8.7.6", + "version": "8.7.7", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/vue-router", - "version": "8.7.6", + "version": "8.7.7", "license": "MIT", "dependencies": { - "@ionic/vue": "^8.7.6" + "@ionic/vue": "^8.7.7" }, "devDependencies": { "@ionic/eslint-config": "^0.3.0", @@ -12991,4 +12991,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/packages/vue-router/package.json b/packages/vue-router/package.json index 256ab9c68d..164fcc29e7 100644 --- a/packages/vue-router/package.json +++ b/packages/vue-router/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/vue-router", - "version": "8.7.6", + "version": "8.7.7", "description": "Vue Router integration for @ionic/vue", "scripts": { "test.spec": "jest", @@ -44,7 +44,7 @@ }, "homepage": "https://github.com/ionic-team/ionic-framework#readme", "dependencies": { - "@ionic/vue": "^8.7.6" + "@ionic/vue": "^8.7.7" }, "devDependencies": { "@ionic/eslint-config": "^0.3.0", diff --git a/packages/vue/CHANGELOG.md b/packages/vue/CHANGELOG.md index c115af294a..fa8e9e7eab 100644 --- a/packages/vue/CHANGELOG.md +++ b/packages/vue/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.7](https://github.com/ionic-team/ionic-framework/compare/v8.7.6...v8.7.7) (2025-10-15) + +**Note:** Version bump only for package @ionic/vue + + + + + ## [8.7.6](https://github.com/ionic-team/ionic-framework/compare/v8.7.5...v8.7.6) (2025-10-08) **Note:** Version bump only for package @ionic/vue diff --git a/packages/vue/package-lock.json b/packages/vue/package-lock.json index b36067dd45..4c7b95db3d 100644 --- a/packages/vue/package-lock.json +++ b/packages/vue/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/vue", - "version": "8.7.6", + "version": "8.7.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@ionic/vue", - "version": "8.7.6", + "version": "8.7.7", "license": "MIT", "dependencies": { - "@ionic/core": "^8.7.6", + "@ionic/core": "^8.7.7", "@stencil/vue-output-target": "0.10.7", "ionicons": "^8.0.13" }, @@ -4019,4 +4019,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/packages/vue/package.json b/packages/vue/package.json index 2974fdd328..bf315a783f 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/vue", - "version": "8.7.6", + "version": "8.7.7", "description": "Vue specific wrapper for @ionic/core", "scripts": { "eslint": "eslint src", @@ -68,7 +68,7 @@ "vue-router": "^4.0.16" }, "dependencies": { - "@ionic/core": "^8.7.6", + "@ionic/core": "^8.7.7", "@stencil/vue-output-target": "0.10.7", "ionicons": "^8.0.13" }, From 4a49e52b6d6e6af625306ad1a28377257c3eb8df Mon Sep 17 00:00:00 2001 From: ionitron Date: Wed, 15 Oct 2025 19:01:26 +0000 Subject: [PATCH 13/20] chore(): update package lock files --- core/package-lock.json | 2 +- packages/angular-server/package-lock.json | 14 +++++------ packages/angular/package-lock.json | 8 +++--- packages/docs/package-lock.json | 2 +- packages/react-router/package-lock.json | 30 +++++++++++------------ packages/react/package-lock.json | 8 +++--- packages/vue-router/package-lock.json | 30 +++++++++++------------ packages/vue/package-lock.json | 8 +++--- 8 files changed, 51 insertions(+), 51 deletions(-) diff --git a/core/package-lock.json b/core/package-lock.json index a97530eb88..0fbec9c930 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -18337,4 +18337,4 @@ "dev": true } } -} \ No newline at end of file +} diff --git a/packages/angular-server/package-lock.json b/packages/angular-server/package-lock.json index 67b2c902fb..1146cb372e 100644 --- a/packages/angular-server/package-lock.json +++ b/packages/angular-server/package-lock.json @@ -1031,9 +1031,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.6", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.6.tgz", - "integrity": "sha512-ufV64Pl0BYSoNla+DaTRXTS3hX6MQZZJPhAR3fJQ4N5Fg/vwMcHADQffstKZeoPqk6mbJoLqoTBjcWvaLRdO0g==", + "version": "8.7.7", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.7.tgz", + "integrity": "sha512-XMvVkiRiB9I1Jc63RqderjHzxxiyr6KM2vBDzYBQS6rk7Fb4wC/ZyUuFgnrYKk71r1mgwYTPMy/2qrCShNXgXQ==", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -7306,9 +7306,9 @@ "dev": true }, "@ionic/core": { - "version": "8.7.6", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.6.tgz", - "integrity": "sha512-ufV64Pl0BYSoNla+DaTRXTS3hX6MQZZJPhAR3fJQ4N5Fg/vwMcHADQffstKZeoPqk6mbJoLqoTBjcWvaLRdO0g==", + "version": "8.7.7", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.7.tgz", + "integrity": "sha512-XMvVkiRiB9I1Jc63RqderjHzxxiyr6KM2vBDzYBQS6rk7Fb4wC/ZyUuFgnrYKk71r1mgwYTPMy/2qrCShNXgXQ==", "requires": { "@stencil/core": "4.38.0", "ionicons": "^8.0.13", @@ -11286,4 +11286,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/angular/package-lock.json b/packages/angular/package-lock.json index 63808fe6fc..954fae40e7 100644 --- a/packages/angular/package-lock.json +++ b/packages/angular/package-lock.json @@ -1398,9 +1398,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.6", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.6.tgz", - "integrity": "sha512-ufV64Pl0BYSoNla+DaTRXTS3hX6MQZZJPhAR3fJQ4N5Fg/vwMcHADQffstKZeoPqk6mbJoLqoTBjcWvaLRdO0g==", + "version": "8.7.7", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.7.tgz", + "integrity": "sha512-XMvVkiRiB9I1Jc63RqderjHzxxiyr6KM2vBDzYBQS6rk7Fb4wC/ZyUuFgnrYKk71r1mgwYTPMy/2qrCShNXgXQ==", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -9079,4 +9079,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/docs/package-lock.json b/packages/docs/package-lock.json index a29343ebd2..7c87c5f4af 100644 --- a/packages/docs/package-lock.json +++ b/packages/docs/package-lock.json @@ -10,4 +10,4 @@ "license": "MIT" } } -} \ No newline at end of file +} diff --git a/packages/react-router/package-lock.json b/packages/react-router/package-lock.json index 27a1696391..b5638ec2e0 100644 --- a/packages/react-router/package-lock.json +++ b/packages/react-router/package-lock.json @@ -238,9 +238,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.6", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.6.tgz", - "integrity": "sha512-ufV64Pl0BYSoNla+DaTRXTS3hX6MQZZJPhAR3fJQ4N5Fg/vwMcHADQffstKZeoPqk6mbJoLqoTBjcWvaLRdO0g==", + "version": "8.7.7", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.7.tgz", + "integrity": "sha512-XMvVkiRiB9I1Jc63RqderjHzxxiyr6KM2vBDzYBQS6rk7Fb4wC/ZyUuFgnrYKk71r1mgwYTPMy/2qrCShNXgXQ==", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -415,12 +415,12 @@ } }, "node_modules/@ionic/react": { - "version": "8.7.6", - "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.7.6.tgz", - "integrity": "sha512-7uoqcd5AOovtN7MJd5v9xeQFKF4og8W++bvDgka6TQcMTE/8mmzpFJUpOSvhFeOITMaqBHtkCNMvQSCa7vsmfw==", + "version": "8.7.7", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.7.7.tgz", + "integrity": "sha512-X/olNPQrITyVbKkZRrhauC6cKXO+C6ISCnoDJFxH34TLphSrpOFOpVD/c+a17QMD8RMxe5/zsQ8oY/DOH8pC6w==", "license": "MIT", "dependencies": { - "@ionic/core": "8.7.6", + "@ionic/core": "8.7.7", "ionicons": "^8.0.13", "tslib": "*" }, @@ -4175,9 +4175,9 @@ "dev": true }, "@ionic/core": { - "version": "8.7.6", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.6.tgz", - "integrity": "sha512-ufV64Pl0BYSoNla+DaTRXTS3hX6MQZZJPhAR3fJQ4N5Fg/vwMcHADQffstKZeoPqk6mbJoLqoTBjcWvaLRdO0g==", + "version": "8.7.7", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.7.tgz", + "integrity": "sha512-XMvVkiRiB9I1Jc63RqderjHzxxiyr6KM2vBDzYBQS6rk7Fb4wC/ZyUuFgnrYKk71r1mgwYTPMy/2qrCShNXgXQ==", "requires": { "@stencil/core": "4.38.0", "ionicons": "^8.0.13", @@ -4281,11 +4281,11 @@ "requires": {} }, "@ionic/react": { - "version": "8.7.6", - "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.7.6.tgz", - "integrity": "sha512-7uoqcd5AOovtN7MJd5v9xeQFKF4og8W++bvDgka6TQcMTE/8mmzpFJUpOSvhFeOITMaqBHtkCNMvQSCa7vsmfw==", + "version": "8.7.7", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.7.7.tgz", + "integrity": "sha512-X/olNPQrITyVbKkZRrhauC6cKXO+C6ISCnoDJFxH34TLphSrpOFOpVD/c+a17QMD8RMxe5/zsQ8oY/DOH8pC6w==", "requires": { - "@ionic/core": "8.7.6", + "@ionic/core": "8.7.7", "ionicons": "^8.0.13", "tslib": "*" } @@ -6844,4 +6844,4 @@ "dev": true } } -} \ No newline at end of file +} diff --git a/packages/react/package-lock.json b/packages/react/package-lock.json index 08392dd21d..b70c0da4eb 100644 --- a/packages/react/package-lock.json +++ b/packages/react/package-lock.json @@ -736,9 +736,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.6", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.6.tgz", - "integrity": "sha512-ufV64Pl0BYSoNla+DaTRXTS3hX6MQZZJPhAR3fJQ4N5Fg/vwMcHADQffstKZeoPqk6mbJoLqoTBjcWvaLRdO0g==", + "version": "8.7.7", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.7.tgz", + "integrity": "sha512-XMvVkiRiB9I1Jc63RqderjHzxxiyr6KM2vBDzYBQS6rk7Fb4wC/ZyUuFgnrYKk71r1mgwYTPMy/2qrCShNXgXQ==", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -11913,4 +11913,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/vue-router/package-lock.json b/packages/vue-router/package-lock.json index f2e051b7b5..fed6bd68c6 100644 --- a/packages/vue-router/package-lock.json +++ b/packages/vue-router/package-lock.json @@ -673,9 +673,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.6", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.6.tgz", - "integrity": "sha512-ufV64Pl0BYSoNla+DaTRXTS3hX6MQZZJPhAR3fJQ4N5Fg/vwMcHADQffstKZeoPqk6mbJoLqoTBjcWvaLRdO0g==", + "version": "8.7.7", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.7.tgz", + "integrity": "sha512-XMvVkiRiB9I1Jc63RqderjHzxxiyr6KM2vBDzYBQS6rk7Fb4wC/ZyUuFgnrYKk71r1mgwYTPMy/2qrCShNXgXQ==", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -865,12 +865,12 @@ } }, "node_modules/@ionic/vue": { - "version": "8.7.6", - "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.7.6.tgz", - "integrity": "sha512-gK5x5Y0ZpZAW12gjvyBO9oUfwDZxMS7y0xcO0P9qzo++h3ZLcFcSGjHs8D4isUY/mF6mRagt1Y/5b0xDhgUBBw==", + "version": "8.7.7", + "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.7.7.tgz", + "integrity": "sha512-ufnxZ2yl4Ep2xgemYOdl/rsAX/Dj01X9qWvk34+mX32Vo3vGRJrI1bySt9tmaBQBZyYll8TVD/xhvdw6sVzLHQ==", "license": "MIT", "dependencies": { - "@ionic/core": "8.7.6", + "@ionic/core": "8.7.7", "@stencil/vue-output-target": "0.10.7", "ionicons": "^8.0.13" } @@ -8041,9 +8041,9 @@ "dev": true }, "@ionic/core": { - "version": "8.7.6", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.6.tgz", - "integrity": "sha512-ufV64Pl0BYSoNla+DaTRXTS3hX6MQZZJPhAR3fJQ4N5Fg/vwMcHADQffstKZeoPqk6mbJoLqoTBjcWvaLRdO0g==", + "version": "8.7.7", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.7.tgz", + "integrity": "sha512-XMvVkiRiB9I1Jc63RqderjHzxxiyr6KM2vBDzYBQS6rk7Fb4wC/ZyUuFgnrYKk71r1mgwYTPMy/2qrCShNXgXQ==", "requires": { "@stencil/core": "4.38.0", "ionicons": "^8.0.13", @@ -8156,11 +8156,11 @@ "requires": {} }, "@ionic/vue": { - "version": "8.7.6", - "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.7.6.tgz", - "integrity": "sha512-gK5x5Y0ZpZAW12gjvyBO9oUfwDZxMS7y0xcO0P9qzo++h3ZLcFcSGjHs8D4isUY/mF6mRagt1Y/5b0xDhgUBBw==", + "version": "8.7.7", + "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.7.7.tgz", + "integrity": "sha512-ufnxZ2yl4Ep2xgemYOdl/rsAX/Dj01X9qWvk34+mX32Vo3vGRJrI1bySt9tmaBQBZyYll8TVD/xhvdw6sVzLHQ==", "requires": { - "@ionic/core": "8.7.6", + "@ionic/core": "8.7.7", "@stencil/vue-output-target": "0.10.7", "ionicons": "^8.0.13" } @@ -12991,4 +12991,4 @@ "dev": true } } -} \ No newline at end of file +} diff --git a/packages/vue/package-lock.json b/packages/vue/package-lock.json index 4c7b95db3d..667001bf45 100644 --- a/packages/vue/package-lock.json +++ b/packages/vue/package-lock.json @@ -222,9 +222,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.6", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.6.tgz", - "integrity": "sha512-ufV64Pl0BYSoNla+DaTRXTS3hX6MQZZJPhAR3fJQ4N5Fg/vwMcHADQffstKZeoPqk6mbJoLqoTBjcWvaLRdO0g==", + "version": "8.7.7", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.7.tgz", + "integrity": "sha512-XMvVkiRiB9I1Jc63RqderjHzxxiyr6KM2vBDzYBQS6rk7Fb4wC/ZyUuFgnrYKk71r1mgwYTPMy/2qrCShNXgXQ==", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -4019,4 +4019,4 @@ "dev": true } } -} \ No newline at end of file +} From 9f013b7a5138f992cf310666ff190814e053bcb9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Oct 2025 13:25:46 -0400 Subject: [PATCH 14/20] chore(deps): update playwright (#30732) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | Age | Confidence | Type | Update | |---|---|---|---|---|---| | [@playwright/test](https://playwright.dev) ([source](https://redirect.github.com/microsoft/playwright)) | [`^1.56.0` -> `^1.56.1`](https://renovatebot.com/diffs/npm/@playwright%2ftest/1.56.0/1.56.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@playwright%2ftest/1.56.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@playwright%2ftest/1.56.0/1.56.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | mcr.microsoft.com/playwright | `v1.56.0` -> `v1.56.1` | [![age](https://developer.mend.io/api/mc/badges/age/docker/mcr.microsoft.com%2fplaywright/v1.56.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/mcr.microsoft.com%2fplaywright/v1.56.0/v1.56.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | final | patch | --- ### Release Notes
microsoft/playwright (@​playwright/test) ### [`v1.56.1`](https://redirect.github.com/microsoft/playwright/releases/tag/v1.56.1) [Compare Source](https://redirect.github.com/microsoft/playwright/compare/v1.56.0...v1.56.1) #### Highlights [#​37871](https://redirect.github.com/microsoft/playwright/issues/37871) chore: allow local-network-access permission in chromium [#​37891](https://redirect.github.com/microsoft/playwright/issues/37891) fix(agents): remove workspaceFolder ref from vscode mcp [#​37759](https://redirect.github.com/microsoft/playwright/issues/37759) chore: rename agents to test agents [#​37757](https://redirect.github.com/microsoft/playwright/issues/37757) chore(mcp): fallback to cwd when resolving test config #### Browser Versions - Chromium 141.0.7390.37 - Mozilla Firefox 142.0.1 - WebKit 26.0
--- ### Configuration πŸ“… **Schedule**: Branch creation - "every weekday before 11am" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. β™» **Rebasing**: Never, or you tick the rebase/retry checkbox. πŸ‘» **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] 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). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- core/Dockerfile | 2 +- core/package-lock.json | 46 +++++++++++++++++++++--------------------- core/package.json | 2 +- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/core/Dockerfile b/core/Dockerfile index 2b95845ee4..50a4687701 100644 --- a/core/Dockerfile +++ b/core/Dockerfile @@ -1,5 +1,5 @@ # Get Playwright -FROM mcr.microsoft.com/playwright:v1.56.0 +FROM mcr.microsoft.com/playwright:v1.56.1 # Set the working directory WORKDIR /ionic diff --git a/core/package-lock.json b/core/package-lock.json index 0fbec9c930..578fcd95d4 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -22,7 +22,7 @@ "@clack/prompts": "^0.11.0", "@ionic/eslint-config": "^0.3.0", "@ionic/prettier-config": "^2.0.0", - "@playwright/test": "^1.56.0", + "@playwright/test": "^1.56.1", "@rollup/plugin-node-resolve": "^8.4.0", "@rollup/plugin-virtual": "^2.0.3", "@stencil/angular-output-target": "^0.10.0", @@ -1715,12 +1715,12 @@ } }, "node_modules/@playwright/test": { - "version": "1.56.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.56.0.tgz", - "integrity": "sha512-Tzh95Twig7hUwwNe381/K3PggZBZblKUe2wv25oIpzWLr6Z0m4KgV1ZVIjnR6GM9ANEqjZD7XsZEa6JL/7YEgg==", + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.56.1.tgz", + "integrity": "sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==", "dev": true, "dependencies": { - "playwright": "1.56.0" + "playwright": "1.56.1" }, "bin": { "playwright": "cli.js" @@ -8592,12 +8592,12 @@ } }, "node_modules/playwright": { - "version": "1.56.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.0.tgz", - "integrity": "sha512-X5Q1b8lOdWIE4KAoHpW3SE8HvUB+ZZsUoN64ZhjnN8dOb1UpujxBtENGiZFE+9F/yhzJwYa+ca3u43FeLbboHA==", + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.1.tgz", + "integrity": "sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==", "dev": true, "dependencies": { - "playwright-core": "1.56.0" + "playwright-core": "1.56.1" }, "bin": { "playwright": "cli.js" @@ -8610,9 +8610,9 @@ } }, "node_modules/playwright-core": { - "version": "1.56.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.0.tgz", - "integrity": "sha512-1SXl7pMfemAMSDn5rkPeZljxOCYAmQnYLBTExuh6E8USHXGSX3dx6lYZN/xPpTz1vimXmPA9CDnILvmJaB8aSQ==", + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.1.tgz", + "integrity": "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -11862,12 +11862,12 @@ } }, "@playwright/test": { - "version": "1.56.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.56.0.tgz", - "integrity": "sha512-Tzh95Twig7hUwwNe381/K3PggZBZblKUe2wv25oIpzWLr6Z0m4KgV1ZVIjnR6GM9ANEqjZD7XsZEa6JL/7YEgg==", + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.56.1.tgz", + "integrity": "sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==", "dev": true, "requires": { - "playwright": "1.56.0" + "playwright": "1.56.1" } }, "@rollup/plugin-node-resolve": { @@ -16811,19 +16811,19 @@ } }, "playwright": { - "version": "1.56.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.0.tgz", - "integrity": "sha512-X5Q1b8lOdWIE4KAoHpW3SE8HvUB+ZZsUoN64ZhjnN8dOb1UpujxBtENGiZFE+9F/yhzJwYa+ca3u43FeLbboHA==", + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.56.1.tgz", + "integrity": "sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==", "dev": true, "requires": { "fsevents": "2.3.2", - "playwright-core": "1.56.0" + "playwright-core": "1.56.1" } }, "playwright-core": { - "version": "1.56.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.0.tgz", - "integrity": "sha512-1SXl7pMfemAMSDn5rkPeZljxOCYAmQnYLBTExuh6E8USHXGSX3dx6lYZN/xPpTz1vimXmPA9CDnILvmJaB8aSQ==", + "version": "1.56.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.56.1.tgz", + "integrity": "sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==", "dev": true }, "postcss": { diff --git a/core/package.json b/core/package.json index cd35c38603..bb221593be 100644 --- a/core/package.json +++ b/core/package.json @@ -44,7 +44,7 @@ "@clack/prompts": "^0.11.0", "@ionic/eslint-config": "^0.3.0", "@ionic/prettier-config": "^2.0.0", - "@playwright/test": "^1.56.0", + "@playwright/test": "^1.56.1", "@rollup/plugin-node-resolve": "^8.4.0", "@rollup/plugin-virtual": "^2.0.3", "@stencil/angular-output-target": "^0.10.0", From bdc80d8e825d91653da3a5ce00c2862c63319b8b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 23 Oct 2025 09:58:13 -0400 Subject: [PATCH 15/20] chore(deps): update dependency @capacitor/core to v7.4.4 (#30746) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [@capacitor/core](https://capacitorjs.com) ([source](https://redirect.github.com/ionic-team/capacitor)) | [`7.4.3` -> `7.4.4`](https://renovatebot.com/diffs/npm/@capacitor%2fcore/7.4.3/7.4.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fcore/7.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fcore/7.4.3/7.4.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
ionic-team/capacitor (@​capacitor/core) ### [`v7.4.4`](https://redirect.github.com/ionic-team/capacitor/compare/7.4.3...20fa5015b7940a19a61e005e4212af967ae8f108) [Compare Source](https://redirect.github.com/ionic-team/capacitor/compare/7.4.3...7.4.4)
--- ### Configuration πŸ“… **Schedule**: Branch creation - "every weekday before 11am" (UTC), 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. --- - [ ] 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). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- core/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core/package-lock.json b/core/package-lock.json index 578fcd95d4..fc87977559 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -663,9 +663,9 @@ "dev": true }, "node_modules/@capacitor/core": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-7.4.3.tgz", - "integrity": "sha512-wCWr8fQ9Wxn0466vPg7nMn0tivbNVjNy1yL4GvDSIZuZx7UpU2HeVGNe9QjN/quEd+YLRFeKEBLBw619VqUiNg==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-7.4.4.tgz", + "integrity": "sha512-xzjxpr+d2zwTpCaN0k+C6wKSZzWFAb9OVEUtmO72ihjr/NEDoLvsGl4WLfjWPcCO2zOy0b2X52tfRWjECFUjtw==", "dev": true, "dependencies": { "tslib": "^2.1.0" @@ -11101,9 +11101,9 @@ "dev": true }, "@capacitor/core": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-7.4.3.tgz", - "integrity": "sha512-wCWr8fQ9Wxn0466vPg7nMn0tivbNVjNy1yL4GvDSIZuZx7UpU2HeVGNe9QjN/quEd+YLRFeKEBLBw619VqUiNg==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-7.4.4.tgz", + "integrity": "sha512-xzjxpr+d2zwTpCaN0k+C6wKSZzWFAb9OVEUtmO72ihjr/NEDoLvsGl4WLfjWPcCO2zOy0b2X52tfRWjECFUjtw==", "dev": true, "requires": { "tslib": "^2.1.0" From ba739887509482e9fdbb8309426bb2926b778529 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 23 Oct 2025 09:58:36 -0400 Subject: [PATCH 16/20] chore(deps): update dependency @axe-core/playwright to ^4.11.0 (#30747) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [@axe-core/playwright](https://redirect.github.com/dequelabs/axe-core-npm) | [`^4.10.2` -> `^4.11.0`](https://renovatebot.com/diffs/npm/@axe-core%2fplaywright/4.10.2/4.11.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@axe-core%2fplaywright/4.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@axe-core%2fplaywright/4.10.2/4.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
dequelabs/axe-core-npm (@​axe-core/playwright) ### [`v4.11.0`](https://redirect.github.com/dequelabs/axe-core-npm/blob/HEAD/CHANGELOG.md#4110-2025-10-14) [Compare Source](https://redirect.github.com/dequelabs/axe-core-npm/compare/v4.10.2...a7af9e96a24105a56def373bf0339cf57cda0403) ##### Bug Fixes - Optimize AxeBuilder memory usage. ([#​1154](https://redirect.github.com/dequelabs/axe-core-npm/issues/1154)) ([e53cd36](https://redirect.github.com/dequelabs/axe-core-npm/commit/e53cd36d0770a8323577946b0438f058b87a0aad)), closes [/github.com/bensenescu/axe-core-npm/blob/develop/packages/puppeteer/src/axePuppeteer.ts#L59](https://redirect.github.com//github.com/bensenescu/axe-core-npm/blob/develop/packages/puppeteer/src/axePuppeteer.ts/issues/L59) [/github.com/bensenescu/axe-core-npm/blob/develop/packages/puppeteer/src/utils.ts#L34](https://redirect.github.com//github.com/bensenescu/axe-core-npm/blob/develop/packages/puppeteer/src/utils.ts/issues/L34) - Update axe-core to v4.10.3 ([#​1155](https://redirect.github.com/dequelabs/axe-core-npm/issues/1155)) ([f8e3a14](https://redirect.github.com/dequelabs/axe-core-npm/commit/f8e3a14043c7288ca9373a5f1543ffd27cedf256)) - **wdio:** resolve blank navigation issue in WDIO v9 ([#​1169](https://redirect.github.com/dequelabs/axe-core-npm/issues/1169)) ([6505560](https://redirect.github.com/dequelabs/axe-core-npm/commit/6505560d646ddc6db8a9b4cf772af08ff3f08dc3)) ##### Features - Update axe-core to v4.11.0 ([#​1233](https://redirect.github.com/dequelabs/axe-core-npm/issues/1233)) ([2758476](https://redirect.github.com/dequelabs/axe-core-npm/commit/27584764815148bf902f29010cca0f4f2230cf46)) #### [4.10.2](https://redirect.github.com/dequelabs/axe-core-npm/compare/v4.10.1...v4.10.2) (2025-05-12) ##### Bug Fixes - Optimize AxeBuilder memory usage. ([#​1154](https://redirect.github.com/dequelabs/axe-core-npm/issues/1154)) ([e53cd36](https://redirect.github.com/dequelabs/axe-core-npm/commit/e53cd36d0770a8323577946b0438f058b87a0aad)), closes [/github.com/bensenescu/axe-core-npm/blob/develop/packages/puppeteer/src/axePuppeteer.ts#L59](https://redirect.github.com//github.com/bensenescu/axe-core-npm/blob/develop/packages/puppeteer/src/axePuppeteer.ts/issues/L59) [/github.com/bensenescu/axe-core-npm/blob/develop/packages/puppeteer/src/utils.ts#L34](https://redirect.github.com//github.com/bensenescu/axe-core-npm/blob/develop/packages/puppeteer/src/utils.ts/issues/L34) - Update axe-core to v4.10.3 ([#​1155](https://redirect.github.com/dequelabs/axe-core-npm/issues/1155)) ([f8e3a14](https://redirect.github.com/dequelabs/axe-core-npm/commit/f8e3a14043c7288ca9373a5f1543ffd27cedf256)) - **wdio:** resolve blank navigation issue in WDIO v9 ([#​1169](https://redirect.github.com/dequelabs/axe-core-npm/issues/1169)) ([6505560](https://redirect.github.com/dequelabs/axe-core-npm/commit/6505560d646ddc6db8a9b4cf772af08ff3f08dc3)) #### [4.10.1](https://redirect.github.com/dequelabs/axe-core-npm/compare/v4.10.0...v4.10.1) (2024-10-29) ##### Bug Fixes - Update axe-core to v4.10.1 ([#​1124](https://redirect.github.com/dequelabs/axe-core-npm/issues/1124)) ([099818b](https://redirect.github.com/dequelabs/axe-core-npm/commit/099818bcef1da11df1700027cd6487e338e5cbd2)) - Update axe-core to v4.10.2 ([#​1128](https://redirect.github.com/dequelabs/axe-core-npm/issues/1128)) ([aaaa34e](https://redirect.github.com/dequelabs/axe-core-npm/commit/aaaa34e7c3fdf51b285870203d59a1f55b030c21))
--- ### Configuration πŸ“… **Schedule**: Branch creation - "every weekday before 11am" (UTC), 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. --- - [ ] 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). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- core/package-lock.json | 30 +++++++++++++++--------------- core/package.json | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/core/package-lock.json b/core/package-lock.json index fc87977559..e17c4cdf11 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -14,7 +14,7 @@ "tslib": "^2.1.0" }, "devDependencies": { - "@axe-core/playwright": "^4.10.2", + "@axe-core/playwright": "^4.11.0", "@capacitor/core": "^7.0.0", "@capacitor/haptics": "^7.0.0", "@capacitor/keyboard": "^7.0.0", @@ -57,12 +57,12 @@ "dev": true }, "node_modules/@axe-core/playwright": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/@axe-core/playwright/-/playwright-4.10.2.tgz", - "integrity": "sha512-6/b5BJjG6hDaRNtgzLIfKr5DfwyiLHO4+ByTLB0cJgWSM8Ll7KqtdblIS6bEkwSF642/Ex91vNqIl3GLXGlceg==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@axe-core/playwright/-/playwright-4.11.0.tgz", + "integrity": "sha512-70vBT/Ylqpm65RQz2iCG2o0JJCEG/WCNyefTr2xcOcr1CoSee60gNQYUMZZ7YukoKkFLv26I/jjlsvwwp532oQ==", "dev": true, "dependencies": { - "axe-core": "~4.10.3" + "axe-core": "~4.11.0" }, "peerDependencies": { "playwright-core": ">= 1.0.0" @@ -3033,9 +3033,9 @@ } }, "node_modules/axe-core": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", - "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.0.tgz", + "integrity": "sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==", "dev": true, "engines": { "node": ">=4" @@ -10652,12 +10652,12 @@ }, "dependencies": { "@axe-core/playwright": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/@axe-core/playwright/-/playwright-4.10.2.tgz", - "integrity": "sha512-6/b5BJjG6hDaRNtgzLIfKr5DfwyiLHO4+ByTLB0cJgWSM8Ll7KqtdblIS6bEkwSF642/Ex91vNqIl3GLXGlceg==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@axe-core/playwright/-/playwright-4.11.0.tgz", + "integrity": "sha512-70vBT/Ylqpm65RQz2iCG2o0JJCEG/WCNyefTr2xcOcr1CoSee60gNQYUMZZ7YukoKkFLv26I/jjlsvwwp532oQ==", "dev": true, "requires": { - "axe-core": "~4.10.3" + "axe-core": "~4.11.0" } }, "@babel/code-frame": { @@ -12770,9 +12770,9 @@ } }, "axe-core": { - "version": "4.10.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", - "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.0.tgz", + "integrity": "sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==", "dev": true }, "babel-jest": { diff --git a/core/package.json b/core/package.json index bb221593be..1e35ab8494 100644 --- a/core/package.json +++ b/core/package.json @@ -36,7 +36,7 @@ "tslib": "^2.1.0" }, "devDependencies": { - "@axe-core/playwright": "^4.10.2", + "@axe-core/playwright": "^4.11.0", "@capacitor/core": "^7.0.0", "@capacitor/haptics": "^7.0.0", "@capacitor/keyboard": "^7.0.0", From 54a1c86d6a5d533b0c8c2d18edc62454a7c17bab Mon Sep 17 00:00:00 2001 From: Maria Hutt Date: Thu, 23 Oct 2025 10:09:05 -0700 Subject: [PATCH 17/20] fix(checkbox, toggle): fire ionFocus and ionBlur (#30733) Issue number: internal --------- ## What is the current behavior? `ionFocus` and `ionBlur` are not being emitted for checkbox and toggle. ## What is the new behavior? - Moved the `onFocus` and `onBlur` to `Host` - Added tests for `onFocus`, `onBlur`, and `onChange`. - Added a workaround on Playwright in order to trigger `ionBlur` since Playwright browsers aren't acting like native browsers when it comes to tabbing. ## Does this introduce a breaking change? - [ ] Yes - [x] No ## Other information Dev build: `8.7.7-dev.11761071592.1d1b804d` --------- Co-authored-by: ionitron Co-authored-by: Shane --- core/src/components/checkbox/checkbox.tsx | 13 +- .../checkbox/test/basic/checkbox.e2e.ts | 196 +++++++++++++- ...kbox-focus-ios-ltr-Mobile-Chrome-linux.png | Bin 0 -> 2018 bytes ...box-focus-ios-ltr-Mobile-Firefox-linux.png | Bin 0 -> 2442 bytes ...kbox-focus-ios-ltr-Mobile-Safari-linux.png | Bin 0 -> 2849 bytes ...item-focus-ios-ltr-Mobile-Chrome-linux.png | Bin 0 -> 2090 bytes ...tem-focus-ios-ltr-Mobile-Firefox-linux.png | Bin 0 -> 2779 bytes ...item-focus-ios-ltr-Mobile-Safari-linux.png | Bin 0 -> 2697 bytes .../components/checkbox/test/basic/index.html | 14 + .../components/checkbox/test/item/index.html | 14 + .../components/toggle/test/basic/index.html | 14 + .../toggle/test/basic/toggle.e2e.ts | 251 +++++++++++++++++- ...ggle-focus-ios-ltr-Mobile-Chrome-linux.png | Bin 0 -> 2390 bytes ...gle-focus-ios-ltr-Mobile-Firefox-linux.png | Bin 0 -> 2967 bytes ...ggle-focus-ios-ltr-Mobile-Safari-linux.png | Bin 0 -> 3396 bytes ...item-focus-ios-ltr-Mobile-Chrome-linux.png | Bin 0 -> 2507 bytes ...tem-focus-ios-ltr-Mobile-Firefox-linux.png | Bin 0 -> 3253 bytes ...item-focus-ios-ltr-Mobile-Safari-linux.png | Bin 0 -> 3158 bytes .../components/toggle/test/item/index.html | 14 + core/src/components/toggle/toggle.tsx | 11 +- .../playwright/page/utils/spy-on-event.ts | 34 +++ 21 files changed, 542 insertions(+), 19 deletions(-) create mode 100644 core/src/components/checkbox/test/basic/checkbox.e2e.ts-snapshots/checkbox-focus-ios-ltr-Mobile-Chrome-linux.png create mode 100644 core/src/components/checkbox/test/basic/checkbox.e2e.ts-snapshots/checkbox-focus-ios-ltr-Mobile-Firefox-linux.png create mode 100644 core/src/components/checkbox/test/basic/checkbox.e2e.ts-snapshots/checkbox-focus-ios-ltr-Mobile-Safari-linux.png create mode 100644 core/src/components/checkbox/test/basic/checkbox.e2e.ts-snapshots/checkbox-in-item-focus-ios-ltr-Mobile-Chrome-linux.png create mode 100644 core/src/components/checkbox/test/basic/checkbox.e2e.ts-snapshots/checkbox-in-item-focus-ios-ltr-Mobile-Firefox-linux.png create mode 100644 core/src/components/checkbox/test/basic/checkbox.e2e.ts-snapshots/checkbox-in-item-focus-ios-ltr-Mobile-Safari-linux.png create mode 100644 core/src/components/toggle/test/basic/toggle.e2e.ts-snapshots/toggle-focus-ios-ltr-Mobile-Chrome-linux.png create mode 100644 core/src/components/toggle/test/basic/toggle.e2e.ts-snapshots/toggle-focus-ios-ltr-Mobile-Firefox-linux.png create mode 100644 core/src/components/toggle/test/basic/toggle.e2e.ts-snapshots/toggle-focus-ios-ltr-Mobile-Safari-linux.png create mode 100644 core/src/components/toggle/test/basic/toggle.e2e.ts-snapshots/toggle-in-item-focus-ios-ltr-Mobile-Chrome-linux.png create mode 100644 core/src/components/toggle/test/basic/toggle.e2e.ts-snapshots/toggle-in-item-focus-ios-ltr-Mobile-Firefox-linux.png create mode 100644 core/src/components/toggle/test/basic/toggle.e2e.ts-snapshots/toggle-in-item-focus-ios-ltr-Mobile-Safari-linux.png diff --git a/core/src/components/checkbox/checkbox.tsx b/core/src/components/checkbox/checkbox.tsx index 00a9de5c7c..22f3959fba 100644 --- a/core/src/components/checkbox/checkbox.tsx +++ b/core/src/components/checkbox/checkbox.tsx @@ -34,7 +34,6 @@ export class Checkbox implements ComponentInterface { private inputLabelId = `${this.inputId}-lbl`; private helperTextId = `${this.inputId}-helper-text`; private errorTextId = `${this.inputId}-error-text`; - private focusEl?: HTMLElement; private inheritedAttributes: Attributes = {}; @Element() el!: HTMLIonCheckboxElement; @@ -147,9 +146,7 @@ export class Checkbox implements ComponentInterface { /** @internal */ @Method() async setFocus() { - if (this.focusEl) { - this.focusEl.focus(); - } + this.el.focus(); } /** @@ -169,7 +166,6 @@ export class Checkbox implements ComponentInterface { private toggleChecked = (ev: Event) => { ev.preventDefault(); - this.setFocus(); this.setChecked(!this.checked); this.indeterminate = false; }; @@ -285,6 +281,9 @@ export class Checkbox implements ComponentInterface { aria-disabled={disabled ? 'true' : null} tabindex={disabled ? undefined : 0} onKeyDown={this.onKeyDown} + onFocus={this.onFocus} + onBlur={this.onBlur} + onClick={this.onClick} class={createColorClasses(color, { [mode]: true, 'in-item': hostContext('ion-item', el), @@ -296,7 +295,6 @@ export class Checkbox implements ComponentInterface { [`checkbox-alignment-${alignment}`]: alignment !== undefined, [`checkbox-label-placement-${labelPlacement}`]: true, })} - onClick={this.onClick} >
+ + diff --git a/core/src/components/toggle/test/basic/index.html b/core/src/components/toggle/test/basic/index.html index e8e286b7a7..a127f5c5af 100644 --- a/core/src/components/toggle/test/basic/index.html +++ b/core/src/components/toggle/test/basic/index.html @@ -45,6 +45,20 @@ Full-width
Long Label Long Label Long Label Long Label Long Label Long Label
+ + diff --git a/core/src/components/toggle/test/basic/toggle.e2e.ts b/core/src/components/toggle/test/basic/toggle.e2e.ts index 0cdd76792a..9502df83b5 100644 --- a/core/src/components/toggle/test/basic/toggle.e2e.ts +++ b/core/src/components/toggle/test/basic/toggle.e2e.ts @@ -1,7 +1,65 @@ import { expect } from '@playwright/test'; import { configs, test } from '@utils/test/playwright'; -configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => { +/** + * This behavior does not vary across modes/directions + */ +configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, screenshot, config }) => { + test.describe(title('toggle: ionChange'), () => { + test('should fire ionChange when interacting with toggle', async ({ page }) => { + await page.setContent( + ` + + `, + config + ); + + const ionChange = await page.spyOnEvent('ionChange'); + const toggle = page.locator('ion-toggle'); + + await toggle.click(); + expect(ionChange).toHaveReceivedEventDetail({ value: 'my-toggle', checked: true }); + + await toggle.click(); + expect(ionChange).toHaveReceivedEventDetail({ value: 'my-toggle', checked: false }); + }); + + test('should fire ionChange when interacting with toggle in item', async ({ page }) => { + await page.setContent( + ` + + + + `, + config + ); + + const ionChange = await page.spyOnEvent('ionChange'); + const item = page.locator('ion-item'); + + await item.click(); + expect(ionChange).toHaveReceivedEventDetail({ value: 'my-toggle', checked: true }); + + await item.click(); + expect(ionChange).toHaveReceivedEventDetail({ value: 'my-toggle', checked: false }); + }); + + test('should not fire when programmatically setting a value', async ({ page }) => { + await page.setContent( + ` + + `, + config + ); + + const ionChange = await page.spyOnEvent('ionChange'); + const toggle = page.locator('ion-toggle'); + + await toggle.evaluate((el: HTMLIonToggleElement) => (el.checked = true)); + expect(ionChange).not.toHaveReceivedEvent(); + }); + }); + test.describe(title('toggle: click'), () => { test('should trigger onclick only once when clicking the label', async ({ page }, testInfo) => { testInfo.annotations.push({ @@ -35,4 +93,195 @@ configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => expect(clickCount).toBe(1); }); }); + + test.describe(title('toggle: ionFocus'), () => { + test('should not have visual regressions', async ({ page, pageUtils }) => { + await page.setContent( + ` + + +
+ Unchecked +
+ `, + config + ); + + await pageUtils.pressKeys('Tab'); + + const container = page.locator('#container'); + + await expect(container).toHaveScreenshot(screenshot(`toggle-focus`)); + }); + + test('should not have visual regressions when interacting with toggle in item', async ({ page, pageUtils }) => { + await page.setContent( + ` + + Unchecked + + `, + config + ); + + // Test focus with keyboard navigation + await pageUtils.pressKeys('Tab'); + + const item = page.locator('ion-item'); + + await expect(item).toHaveScreenshot(screenshot(`toggle-in-item-focus`)); + }); + + test('should fire ionFocus when toggle is focused', async ({ page, pageUtils }) => { + await page.setContent( + ` + + `, + config + ); + + const ionFocus = await page.spyOnEvent('ionFocus'); + + // Test focus with keyboard navigation + await pageUtils.pressKeys('Tab'); + + expect(ionFocus).toHaveReceivedEventTimes(1); + + // Reset focus + const toggle = page.locator('ion-toggle'); + const toggleBoundingBox = (await toggle.boundingBox())!; + await page.mouse.click(0, toggleBoundingBox.height + 1); + + // Test focus with click + await toggle.click(); + + expect(ionFocus).toHaveReceivedEventTimes(2); + }); + + test('should fire ionFocus when interacting with toggle in item', async ({ page, pageUtils }) => { + await page.setContent( + ` + + + + `, + config + ); + + const ionFocus = await page.spyOnEvent('ionFocus'); + + // Test focus with keyboard navigation + await pageUtils.pressKeys('Tab'); + + expect(ionFocus).toHaveReceivedEventTimes(1); + + // Verify that the event target is the toggle and not the item + const eventByKeyboard = ionFocus.events[0]; + expect((eventByKeyboard.target as HTMLElement).tagName.toLowerCase()).toBe('ion-toggle'); + + // Reset focus + const toggle = page.locator('ion-toggle'); + const toggleBoundingBox = (await toggle.boundingBox())!; + await page.mouse.click(0, toggleBoundingBox.height + 1); + + // Test focus with click + const item = page.locator('ion-item'); + await item.click(); + + expect(ionFocus).toHaveReceivedEventTimes(2); + + // Verify that the event target is the toggle and not the item + const eventByClick = ionFocus.events[0]; + expect((eventByClick.target as HTMLElement).tagName.toLowerCase()).toBe('ion-toggle'); + }); + + test('should not fire when programmatically setting a value', async ({ page }) => { + await page.setContent( + ` + + `, + config + ); + + const ionFocus = await page.spyOnEvent('ionFocus'); + const toggle = page.locator('ion-toggle'); + + await toggle.evaluate((el: HTMLIonToggleElement) => (el.checked = true)); + expect(ionFocus).not.toHaveReceivedEvent(); + }); + }); + + test.describe(title('toggle: ionBlur'), () => { + test('should fire ionBlur when toggle is blurred', async ({ page, pageUtils }) => { + await page.setContent( + ` + + `, + config + ); + + const ionBlur = await page.spyOnEvent('ionBlur'); + + // Test blur with keyboard navigation + // Focus the toggle + await pageUtils.pressKeys('Tab'); + // Blur the toggle + await pageUtils.pressKeys('Tab'); + + expect(ionBlur).toHaveReceivedEventTimes(1); + + // Test blur with click + const toggle = page.locator('ion-toggle'); + // Focus the toggle + await toggle.click(); + // Blur the toggle by clicking outside of it + const toggleBoundingBox = (await toggle.boundingBox())!; + await page.mouse.click(0, toggleBoundingBox.height + 1); + + expect(ionBlur).toHaveReceivedEventTimes(2); + }); + + test('should fire ionBlur after interacting with toggle in item', async ({ page, pageUtils }) => { + await page.setContent( + ` + + + + `, + config + ); + + const ionBlur = await page.spyOnEvent('ionBlur'); + + // Test blur with keyboard navigation + // Focus the toggle + await pageUtils.pressKeys('Tab'); + // Blur the toggle + await pageUtils.pressKeys('Tab'); + + expect(ionBlur).toHaveReceivedEventTimes(1); + + // Verify that the event target is the toggle and not the item + const event = ionBlur.events[0]; + expect((event.target as HTMLElement).tagName.toLowerCase()).toBe('ion-toggle'); + + // Test blur with click + const item = page.locator('ion-item'); + await item.click(); + // Blur the toggle by clicking outside of it + const itemBoundingBox = (await item.boundingBox())!; + await page.mouse.click(0, itemBoundingBox.height + 1); + + expect(ionBlur).toHaveReceivedEventTimes(2); + + // Verify that the event target is the toggle and not the item + const eventByClick = ionBlur.events[0]; + expect((eventByClick.target as HTMLElement).tagName.toLowerCase()).toBe('ion-toggle'); + }); + }); }); diff --git a/core/src/components/toggle/test/basic/toggle.e2e.ts-snapshots/toggle-focus-ios-ltr-Mobile-Chrome-linux.png b/core/src/components/toggle/test/basic/toggle.e2e.ts-snapshots/toggle-focus-ios-ltr-Mobile-Chrome-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..0d7cbc111959c83693298db620045a82fa509b80 GIT binary patch literal 2390 zcmV-c390spP)NfcL1Kt&|ou+Txtvm?R({WDZ}x3ct$ zQ2YV$#nq2Z$xO`3Nl5>jSu>OM#FFR73r-Fa3h$_>5Z}v0s9cm+2)=lZzlqOh%bMS( zwT$tL*ccHX5PrW|8@Ek2;N-7F`?z(lm5Cakn)pIxF8e?ef|2iq@*NJ z^T6}{+W$VAa;PFcKE7_5YcypDB4$R`gn;nUjWj{Ci$6X}? zHEr$VQ!tn9lE=ORo2(Mkd0;^I&PN8<`oc>k|VUwmrQ@tIJ#`t|D@Qji|3 z{9a(vOVtat2w|YOxR?{%pO~0v$DOofGzWu0`XU0^#W=AE?Z15aB2C%s;unhAfgq1N z8QJ)wUcGwu9Z5^tZcTlvt0ijEyS8h6Q72&c$kV83v; zL!CNxq`aIhCqP++MFVeiaPZ(kJi(mG@%8K1bLPxhzkdC^dGokM=`wuy@bl--cj?lF zKW5UTNrw*~9yI93_7zt;ckV1#&=xFMFnRLiZQHiVTXY;UWXPpUmvD^qH`7phdb*`e zgXPPYZ``=??Af#OTQf2E?%g|lfBW|BtgI|Pd396v;Sa%25sUmTkyV3mL4}nLJewEx z?%lg%$BtXKZoPW-YU0F+bEIV7<&SEHx967SE zuu$e%yLayRWba4l`}ts#O%ixwfWZr!>WpRgu_OcscE`t<27TecMXKFyjnYlKszpJHNSgm+Z8 z7Ofg8em5P2&(Lgg2tDQ#8(1fA*RGv$i)FIjy?YzAP}8POja$^pvKL1*M8|RC#`&t~ z+qbXK%K=N96tu*c?%lih?Ag<3V`A{ln>Ux;e*f@yv+L&dpWYs`6Xuz&ai<@)%4PFJ274NM6P0W1YEU$&w{UjvTQx zNH)L}L$P2OJa_J#1MN!u`cpyjX#=m2G13iwD?eN7VDR9hS!)@AR7PxWa z1|2C7P>G4b88c>l`}PfelYTOnEnT{lnMF8)=z`9$CcFb{E(?%&t1{N?xwO|?wcp)r z>W>Bl1FAI!5K&Yc!e7Ulm~a8P1yv{+ ziJQ$v0}>aevltyF9hu~cXdY6c0{VJb+wn47S)C|!ps)$kIg4rdiA5@x;~4L-)FJfJ zFzf5CeQnWUd2`7ZZk0SofkMoF{^kRQg*;-=C;t-z#10m$Qk{iGVqt@c#JmV=4&Cg%e@` z)dA_DAp%1R!ZtJxe}BOaW;*c2r&fM1C@aiYud+CX!d7_qb?-)|JUH%#>@dv~gmlB)$Q@yO5__S=ZX6pY_RR~otC?rY;3Js+Lg@)3B zLPP05p`mo3&`>&1Xeb>hH2x0&0RR6P1h$F*000I_L_t&o01OZo76{&VAOHXW07*qo IM6N<$f_9;baR2}S literal 0 HcmV?d00001 diff --git a/core/src/components/toggle/test/basic/toggle.e2e.ts-snapshots/toggle-focus-ios-ltr-Mobile-Firefox-linux.png b/core/src/components/toggle/test/basic/toggle.e2e.ts-snapshots/toggle-focus-ios-ltr-Mobile-Firefox-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..bb21be2862e9873f5272158f9d04bd5f6d88f0ae GIT binary patch literal 2967 zcmV;I3uyF-P)aX8LOfeRS5DP>Zz(&YSnPDmm z7{D4JM3e;#U?Xa}%wP>*4F)300tT=VHC<+~2CxPL5oG}b*oc}gGg!ZXjeGe+IxTuG zCvSc=)-o0dnFVSTkCycVa!bLSX_D;2FJNP*JeFfO3|K=pQ>I~$1!7A^%aPIfoB=kf z=UvsnU(1RZ(?+NTe*O9-U%!5pFJHb0|MU9sRWX>C>lIj0bQu3tHJ$Gw{!!KNGO4KgRV3 zTE3_M%$YO$WNo{|XaE})2!*ec@87@6n>TOd+qZ8DoLRGGl?)j&*d73E{O;X5B^dyk z6^!2Rt&REvEp=Hqj3;f{vvD)vz*B0^qt0TG~S* zWXzZ`-Vh96Qw|PoT?sB7W`$v4Fg7fQ44g znKP&BBW5v>60C&Z(v}@PS_5M0` z>?lo}HkEGOx;bten?HX1Smjy^6e!@hJ%0_v#l?AYxYpdPzYU0_+U2*%nAE-FR5gD) zssZI;2Mrn|hYuf?ix)2@7z0r%$>HV8mrM8V-ThsAK;L)j)JbWmty{MS^t)gyv*1RJ z8YP1V4-U2opT8?nqJ;G5(L=_J8RNKZm=%U4MHC9{>ODZs=2{l`V%b0#mOfOj_}@yLS5KYc=qg>+5oU>*~HEZ1Oi&do^9}}L;vjC zw@>8=n>TMR<;#~(VA~@{j>yTAC)MY*YuA=qwQ70lXog*}VukG8yH_q>zAP0gRFJl9 z+a?Gy`0l`g18O3xR;?-x8#YYP*YoGkW%usga`Wa*DN>|}a{Z)(bnyl(!8U>OK9f=R1bv7%hLaz*akxg&e_?2!fy8vH%L z-}(y)v3~t}1yoWr7cN|o0Rsle!i5V}9RLf+01o@%6hO)6t5>h~%mwvv) z0P0n%R(a~MC|b8}t=uSj`}pzWD!qc#DOawXs%Hf(lhmO@2f2FnsvJCcP=S)DoQ3%4 z(Icr*qlUUJQa?L)?)2#Ud-v|CYvg*UbNlvfH7>@~r%xYOBmw#rsZ_XdVcVyooB$Wi z%ysGW2v$kpM90F|xkkMIGXM(+PMkQQw&R$5m=iXGaVdZaO-H~M8yl-W+q7wuVm$y- zw{Bep%#9m2Dsbt5Z|Tyd(zkD4xpnK76f0It0isNqGO~E_V$~ky+_`fKBpWttP#~p$ z*u8l1;<9DS76nwacg>nL)%aj}D_{o>9H{z+wHY6-mjd9**V%~;N# zKd)H7bLY-->eMOaH2^salf^rK{(PAi;~5N2Z8Zm@TpU$#=CYT0@pNg;zU;fi+g6lAyw?2J9PqV7#4Zs z4OrUr?mrMo@JBH$K!I&^nK5IA%$hYz0gyt}44WpEvPvvVptBOl4bo7sEeipFTMPT^ zl`B_PY`A948kMfXjcRF;*aRX8XdfUG&BKVg01{G2^kdx%*W07}_wScdrAjGXix+9s zs8PHwiWV*Enj|2ZPo|(yp+aHPu%xy$yYg29(+OZhreVjAA1_OmEK$22-UR?+xE(uo zr~rh*K>Ps~FyXf6&YkOX@!J9Huwla#K-R8Zo1h)GEMd=GyLPFu!OlsgfdFjj(xs(Y zvt}}KsO8}dp1<_@I%vxs8o~wR8f+^I}hv4u*;S$6Er9N0}5SmVFU?`iGTsU$0F+5wX3HNKqlHBJ$khI z%o=ntK7faufH^6+{PykJ3vx#n#*7@mW5B%h$Kud|BlXbKT#s8Cmh20e0s>6rQK$>D ziNi2%1D5e;{LfQ0d{;LP2rdXvU{hRsojP?CkO*MLjTmf2e7nx^ypFP-@m_HyLL?h1|}ni zTd!U{_1+F(sfR%U9>E!tiQ8vP)}Rl!24Da&|1(Aw8X(uY);kZ2ZUx-1qYe%MBut6U zrPQxqU&ve#08!|lMT}mDefga4*+Ii|xUthkKgcs!kD$!Ho9y48)d1m=zdH)bb- z+du}vw15|uwVsU#_ObvgF$>_*G9WSS8tAqx_02t9!Oltw`W>7+5AUO0sT^917D+SGSinoWBf)oWc_b!G^3$C0@iH_`bCIb*_@aZSNaDYbN(hX4c9kM#Gva)Kh z_jHj>;((E_EQVoN_vSxhTLOpx7uKWzP>S_ATi#~@G$7pqt9iCo#KI@}1`cZiT3#H| z(J!m}wjRc|K84VFJB+{Q5?EzJvOT@fJRdgsfc8)8*_G$R-v9js?hXr|$*Ei4{%Q6z z*BeF))G84zYk2~9jKe2zhjGlND`Nq_7VvwUx8D{_1!I9QTEGA{jK(%yIk$iTtaBTh z7Q$!&1K2Pc+jQmJ0tT?oZD?8uqXi6L!)R>Nm2(Riz&f{~X(5aj_#bxuH_;DE>|Ou> N002ovPDHLkV1g2HfCm5o literal 0 HcmV?d00001 diff --git a/core/src/components/toggle/test/basic/toggle.e2e.ts-snapshots/toggle-focus-ios-ltr-Mobile-Safari-linux.png b/core/src/components/toggle/test/basic/toggle.e2e.ts-snapshots/toggle-focus-ios-ltr-Mobile-Safari-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..07a370b9311e019395fd3128376cb4974e9f911b GIT binary patch literal 3396 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 MfwD0zMY_iP8%5M6)Bpeg literal 0 HcmV?d00001 diff --git a/core/src/components/toggle/test/item/index.html b/core/src/components/toggle/test/item/index.html index caeda79d07..b872bcf3ea 100644 --- a/core/src/components/toggle/test/item/index.html +++ b/core/src/components/toggle/test/item/index.html @@ -223,6 +223,20 @@
+ + diff --git a/core/src/components/toggle/toggle.tsx b/core/src/components/toggle/toggle.tsx index ea63656a2f..18f4b26115 100644 --- a/core/src/components/toggle/toggle.tsx +++ b/core/src/components/toggle/toggle.tsx @@ -40,7 +40,6 @@ export class Toggle implements ComponentInterface { private helperTextId = `${this.inputId}-helper-text`; private errorTextId = `${this.inputId}-error-text`; private gesture?: Gesture; - private focusEl?: HTMLElement; private lastDrag = 0; private inheritedAttributes: Attributes = {}; private toggleTrack?: HTMLElement; @@ -162,7 +161,6 @@ export class Toggle implements ComponentInterface { const isNowChecked = !checked; this.checked = isNowChecked; - this.setFocus(); this.ionChange.emit({ checked: isNowChecked, value, @@ -243,9 +241,7 @@ export class Toggle implements ComponentInterface { } private setFocus() { - if (this.focusEl) { - this.focusEl.focus(); - } + this.el.focus(); } private onKeyDown = (ev: KeyboardEvent) => { @@ -417,6 +413,8 @@ export class Toggle implements ComponentInterface { aria-disabled={disabled ? 'true' : null} tabindex={disabled ? undefined : 0} onKeyDown={this.onKeyDown} + onFocus={this.onFocus} + onBlur={this.onBlur} class={createColorClasses(color, { [mode]: true, 'in-item': hostContext('ion-item', el), @@ -441,9 +439,6 @@ export class Toggle implements ComponentInterface { checked={checked} disabled={disabled} id={inputId} - onFocus={() => this.onFocus()} - onBlur={() => this.onBlur()} - ref={(focusEl) => (this.focusEl = focusEl)} required={required} {...inheritedAttributes} /> diff --git a/core/src/utils/test/playwright/page/utils/spy-on-event.ts b/core/src/utils/test/playwright/page/utils/spy-on-event.ts index a34f719402..bc6891dc1c 100644 --- a/core/src/utils/test/playwright/page/utils/spy-on-event.ts +++ b/core/src/utils/test/playwright/page/utils/spy-on-event.ts @@ -2,6 +2,40 @@ import type { E2EPage } from '../../playwright-declarations'; import { addE2EListener, EventSpy } from '../event-spy'; export const spyOnEvent = async (page: E2EPage, eventName: string): Promise => { + /** + * Tabbing out of the page boundary can lead to unreliable `ionBlur events, + * particularly in Firefox. + * + * This occurs because Playwright may incorrectly maintain focus state on the + * last element, even after a Tab press attempts to shift focus outside the + * viewport. To reliably trigger the necessary blur event, add a visually + * hidden, focusable element at the end of the page to receive focus instead of + * the browser. + * + * Playwright issue reference: + * https://github.com/microsoft/playwright/issues/32269 + */ + if (eventName === 'ionBlur') { + const hiddenInput = await page.$('#hidden-input-for-ion-blur'); + if (!hiddenInput) { + await page.evaluate(() => { + const input = document.createElement('input'); + input.id = 'hidden-input-for-ion-blur'; + input.style.position = 'absolute'; + input.style.opacity = '0'; + input.style.height = '0'; + input.style.width = '0'; + input.style.pointerEvents = 'none'; + document.body.appendChild(input); + + // Clean up the element when the page is unloaded. + window.addEventListener('unload', () => { + input.remove(); + }); + }); + } + } + const spy = new EventSpy(eventName); const handle = await page.evaluateHandle(() => window); From abd3eacadf6a30153835465135d19fec02a107df Mon Sep 17 00:00:00 2001 From: OS-jacobbell <228905018+OS-jacobbell@users.noreply.github.com> Date: Mon, 27 Oct 2025 10:47:56 -0600 Subject: [PATCH 18/20] chore(ci): send alert message when stencil-nightly workflow finishes (#30743) Send alert to a Discord channel using a webhook. --------- ## What is the current behavior? ## What is the new behavior? - If a step in the workflow fails, an alert message will be sent to a Discord channel using a webhook. ## Does this introduce a breaking change? - [ ] Yes - [X] No ## Other information --------- Co-authored-by: Brandy Smith --- .github/workflows/stencil-nightly.yml | 32 +++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/.github/workflows/stencil-nightly.yml b/.github/workflows/stencil-nightly.yml index 6b24a9d69b..354b78ec11 100644 --- a/.github/workflows/stencil-nightly.yml +++ b/.github/workflows/stencil-nightly.yml @@ -225,3 +225,35 @@ jobs: - name: Check build matrix status if: ${{ needs.test-react-e2e.result != 'success' }} run: exit 1 + + send-success-messages: + needs: [test-core-clean-build, test-core-lint, test-core-spec, verify-screenshots, verify-test-vue-e2e, verify-test-angular-e2e, verify-test-react-router-e2e, verify-test-react-e2e] + runs-on: ubuntu-latest + if: ${{ !cancelled() && contains(needs.*.result, 'success') }} + steps: + - name: Notify success on Discord + run: | + curl -H "Content-Type:application/json" \ + -d '{"embeds": [{"title": "βœ… Workflow ${{github.workflow}} #${{github.run_number}} finished successfully", "color": 65280, "url": "${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}}"}]}' \ + ${{secrets.DISCORD_NOTIFY_WEBHOOK}} + - name: Notify success on Slack + run: | + curl -H "Content-Type:application/json" \ + -d '{"title": "βœ… Workflow ${{github.workflow}} #${{github.run_number}} finished successfully", "url": "${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}}"}' \ + ${{secrets.SLACK_NOTIFY_SUCCESS_WEBHOOK}} + + send-failure-messages: + needs: [test-core-clean-build, test-core-lint, test-core-spec, verify-screenshots, verify-test-vue-e2e, verify-test-angular-e2e, verify-test-react-router-e2e, verify-test-react-e2e] + runs-on: ubuntu-latest + if: ${{ !cancelled() && contains(needs.*.result, 'failure') }} + steps: + - name: Notify failure on Discord + run: | + curl -H "Content-Type:application/json" \ + -d '{"content": "Alerting <@&1347593178580254761>!", "embeds": [{"title": "❌ Workflow ${{github.workflow}} #${{github.run_number}} failed", "color": 16711680, "url": "${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}}"}]}' \ + ${{secrets.DISCORD_NOTIFY_WEBHOOK}} + - name: Notify failure on Slack + run: | + curl -H "Content-Type:application/json" \ + -d '{"title": "❌ Workflow ${{github.workflow}} #${{github.run_number}} failed", "url": "${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}}"}' \ + ${{secrets.SLACK_NOTIFY_FAILURE_WEBHOOK}} From 8a8eec4247bb80bb7a1df35498b68bc8ea5bec28 Mon Sep 17 00:00:00 2001 From: ionitron Date: Wed, 29 Oct 2025 17:40:53 +0000 Subject: [PATCH 19/20] v8.7.8 --- CHANGELOG.md | 11 +++++++++++ core/CHANGELOG.md | 11 +++++++++++ core/package-lock.json | 6 +++--- core/package.json | 2 +- lerna.json | 2 +- packages/angular-server/CHANGELOG.md | 8 ++++++++ packages/angular-server/package-lock.json | 8 ++++---- packages/angular-server/package.json | 4 ++-- packages/angular/CHANGELOG.md | 8 ++++++++ packages/angular/package-lock.json | 8 ++++---- packages/angular/package.json | 4 ++-- packages/docs/CHANGELOG.md | 8 ++++++++ packages/docs/package-lock.json | 6 +++--- packages/docs/package.json | 2 +- packages/react-router/CHANGELOG.md | 8 ++++++++ packages/react-router/package-lock.json | 8 ++++---- packages/react-router/package.json | 4 ++-- packages/react/CHANGELOG.md | 8 ++++++++ packages/react/package-lock.json | 8 ++++---- packages/react/package.json | 4 ++-- packages/vue-router/CHANGELOG.md | 8 ++++++++ packages/vue-router/package-lock.json | 8 ++++---- packages/vue-router/package.json | 4 ++-- packages/vue/CHANGELOG.md | 8 ++++++++ packages/vue/package-lock.json | 8 ++++---- packages/vue/package.json | 4 ++-- 26 files changed, 123 insertions(+), 45 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 53f51d43a2..6de4f7473a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.8](https://github.com/ionic-team/ionic-framework/compare/v8.7.7...v8.7.8) (2025-10-29) + + +### Bug Fixes + +* **checkbox, toggle:** fire ionFocus and ionBlur ([#30733](https://github.com/ionic-team/ionic-framework/issues/30733)) ([54a1c86](https://github.com/ionic-team/ionic-framework/commit/54a1c86d6a5d533b0c8c2d18edc62454a7c17bab)) + + + + + ## [8.7.7](https://github.com/ionic-team/ionic-framework/compare/v8.7.6...v8.7.7) (2025-10-15) diff --git a/core/CHANGELOG.md b/core/CHANGELOG.md index 954300e852..b19ce77607 100644 --- a/core/CHANGELOG.md +++ b/core/CHANGELOG.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.8](https://github.com/ionic-team/ionic-framework/compare/v8.7.7...v8.7.8) (2025-10-29) + + +### Bug Fixes + +* **checkbox, toggle:** fire ionFocus and ionBlur ([#30733](https://github.com/ionic-team/ionic-framework/issues/30733)) ([54a1c86](https://github.com/ionic-team/ionic-framework/commit/54a1c86d6a5d533b0c8c2d18edc62454a7c17bab)) + + + + + ## [8.7.7](https://github.com/ionic-team/ionic-framework/compare/v8.7.6...v8.7.7) (2025-10-15) diff --git a/core/package-lock.json b/core/package-lock.json index e17c4cdf11..7488ed6d51 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ionic/core", - "version": "8.7.7", + "version": "8.7.8", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/core", - "version": "8.7.7", + "version": "8.7.8", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -18337,4 +18337,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/core/package.json b/core/package.json index 1e35ab8494..2408be873e 100644 --- a/core/package.json +++ b/core/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/core", - "version": "8.7.7", + "version": "8.7.8", "description": "Base components for Ionic", "keywords": [ "ionic", diff --git a/lerna.json b/lerna.json index c2c40f0bbd..e66bf5e640 100644 --- a/lerna.json +++ b/lerna.json @@ -3,5 +3,5 @@ "core", "packages/*" ], - "version": "8.7.7" + "version": "8.7.8" } \ No newline at end of file diff --git a/packages/angular-server/CHANGELOG.md b/packages/angular-server/CHANGELOG.md index 205417ccec..edaab782ea 100644 --- a/packages/angular-server/CHANGELOG.md +++ b/packages/angular-server/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.8](https://github.com/ionic-team/ionic-framework/compare/v8.7.7...v8.7.8) (2025-10-29) + +**Note:** Version bump only for package @ionic/angular-server + + + + + ## [8.7.7](https://github.com/ionic-team/ionic-framework/compare/v8.7.6...v8.7.7) (2025-10-15) **Note:** Version bump only for package @ionic/angular-server diff --git a/packages/angular-server/package-lock.json b/packages/angular-server/package-lock.json index 1146cb372e..38cbd14e0f 100644 --- a/packages/angular-server/package-lock.json +++ b/packages/angular-server/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/angular-server", - "version": "8.7.7", + "version": "8.7.8", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/angular-server", - "version": "8.7.7", + "version": "8.7.8", "license": "MIT", "dependencies": { - "@ionic/core": "^8.7.7" + "@ionic/core": "^8.7.8" }, "devDependencies": { "@angular-eslint/eslint-plugin": "^16.0.0", @@ -11286,4 +11286,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/angular-server/package.json b/packages/angular-server/package.json index ff9f2fde34..f1618b7b9c 100644 --- a/packages/angular-server/package.json +++ b/packages/angular-server/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/angular-server", - "version": "8.7.7", + "version": "8.7.8", "description": "Angular SSR Module for Ionic", "keywords": [ "ionic", @@ -62,6 +62,6 @@ }, "prettier": "@ionic/prettier-config", "dependencies": { - "@ionic/core": "^8.7.7" + "@ionic/core": "^8.7.8" } } diff --git a/packages/angular/CHANGELOG.md b/packages/angular/CHANGELOG.md index b376d9a41e..867e78764a 100644 --- a/packages/angular/CHANGELOG.md +++ b/packages/angular/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.8](https://github.com/ionic-team/ionic-framework/compare/v8.7.7...v8.7.8) (2025-10-29) + +**Note:** Version bump only for package @ionic/angular + + + + + ## [8.7.7](https://github.com/ionic-team/ionic-framework/compare/v8.7.6...v8.7.7) (2025-10-15) diff --git a/packages/angular/package-lock.json b/packages/angular/package-lock.json index 954fae40e7..65402778c8 100644 --- a/packages/angular/package-lock.json +++ b/packages/angular/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/angular", - "version": "8.7.7", + "version": "8.7.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@ionic/angular", - "version": "8.7.7", + "version": "8.7.8", "license": "MIT", "dependencies": { - "@ionic/core": "^8.7.7", + "@ionic/core": "^8.7.8", "ionicons": "^8.0.13", "jsonc-parser": "^3.0.0", "tslib": "^2.3.0" @@ -9079,4 +9079,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/angular/package.json b/packages/angular/package.json index 4a1c72e5c1..774f7903b7 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/angular", - "version": "8.7.7", + "version": "8.7.8", "description": "Angular specific wrappers for @ionic/core", "keywords": [ "ionic", @@ -48,7 +48,7 @@ } }, "dependencies": { - "@ionic/core": "^8.7.7", + "@ionic/core": "^8.7.8", "ionicons": "^8.0.13", "jsonc-parser": "^3.0.0", "tslib": "^2.3.0" diff --git a/packages/docs/CHANGELOG.md b/packages/docs/CHANGELOG.md index 4ed024dce3..da9d143bc8 100644 --- a/packages/docs/CHANGELOG.md +++ b/packages/docs/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.8](https://github.com/ionic-team/ionic-framework/compare/v8.7.7...v8.7.8) (2025-10-29) + +**Note:** Version bump only for package @ionic/docs + + + + + ## [8.7.7](https://github.com/ionic-team/ionic-framework/compare/v8.7.6...v8.7.7) (2025-10-15) **Note:** Version bump only for package @ionic/docs diff --git a/packages/docs/package-lock.json b/packages/docs/package-lock.json index 7c87c5f4af..1bcc4e39bc 100644 --- a/packages/docs/package-lock.json +++ b/packages/docs/package-lock.json @@ -1,13 +1,13 @@ { "name": "@ionic/docs", - "version": "8.7.7", + "version": "8.7.8", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/docs", - "version": "8.7.7", + "version": "8.7.8", "license": "MIT" } } -} +} \ No newline at end of file diff --git a/packages/docs/package.json b/packages/docs/package.json index 73a2f40470..c476871df0 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/docs", - "version": "8.7.7", + "version": "8.7.8", "description": "Pre-packaged API documentation for the Ionic docs.", "main": "core.json", "types": "core.d.ts", diff --git a/packages/react-router/CHANGELOG.md b/packages/react-router/CHANGELOG.md index 1eef525bee..c6ba55308b 100644 --- a/packages/react-router/CHANGELOG.md +++ b/packages/react-router/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.8](https://github.com/ionic-team/ionic-framework/compare/v8.7.7...v8.7.8) (2025-10-29) + +**Note:** Version bump only for package @ionic/react-router + + + + + ## [8.7.7](https://github.com/ionic-team/ionic-framework/compare/v8.7.6...v8.7.7) (2025-10-15) **Note:** Version bump only for package @ionic/react-router diff --git a/packages/react-router/package-lock.json b/packages/react-router/package-lock.json index b5638ec2e0..c270e44338 100644 --- a/packages/react-router/package-lock.json +++ b/packages/react-router/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/react-router", - "version": "8.7.7", + "version": "8.7.8", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/react-router", - "version": "8.7.7", + "version": "8.7.8", "license": "MIT", "dependencies": { - "@ionic/react": "^8.7.7", + "@ionic/react": "^8.7.8", "tslib": "*" }, "devDependencies": { @@ -6844,4 +6844,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/packages/react-router/package.json b/packages/react-router/package.json index 07cad69873..06ab972e0a 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/react-router", - "version": "8.7.7", + "version": "8.7.8", "description": "React Router wrapper for @ionic/react", "keywords": [ "ionic", @@ -36,7 +36,7 @@ "dist/" ], "dependencies": { - "@ionic/react": "^8.7.7", + "@ionic/react": "^8.7.8", "tslib": "*" }, "peerDependencies": { diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index d641157453..5db7354b37 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.8](https://github.com/ionic-team/ionic-framework/compare/v8.7.7...v8.7.8) (2025-10-29) + +**Note:** Version bump only for package @ionic/react + + + + + ## [8.7.7](https://github.com/ionic-team/ionic-framework/compare/v8.7.6...v8.7.7) (2025-10-15) **Note:** Version bump only for package @ionic/react diff --git a/packages/react/package-lock.json b/packages/react/package-lock.json index b70c0da4eb..c5e1d9ce63 100644 --- a/packages/react/package-lock.json +++ b/packages/react/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/react", - "version": "8.7.7", + "version": "8.7.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@ionic/react", - "version": "8.7.7", + "version": "8.7.8", "license": "MIT", "dependencies": { - "@ionic/core": "^8.7.7", + "@ionic/core": "^8.7.8", "ionicons": "^8.0.13", "tslib": "*" }, @@ -11913,4 +11913,4 @@ } } } -} +} \ No newline at end of file diff --git a/packages/react/package.json b/packages/react/package.json index e441982a66..bfe057dcfb 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/react", - "version": "8.7.7", + "version": "8.7.8", "description": "React specific wrapper for @ionic/core", "keywords": [ "ionic", @@ -40,7 +40,7 @@ "css/" ], "dependencies": { - "@ionic/core": "^8.7.7", + "@ionic/core": "^8.7.8", "ionicons": "^8.0.13", "tslib": "*" }, diff --git a/packages/vue-router/CHANGELOG.md b/packages/vue-router/CHANGELOG.md index 9ebef9caf7..dcde54de5d 100644 --- a/packages/vue-router/CHANGELOG.md +++ b/packages/vue-router/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.8](https://github.com/ionic-team/ionic-framework/compare/v8.7.7...v8.7.8) (2025-10-29) + +**Note:** Version bump only for package @ionic/vue-router + + + + + ## [8.7.7](https://github.com/ionic-team/ionic-framework/compare/v8.7.6...v8.7.7) (2025-10-15) **Note:** Version bump only for package @ionic/vue-router diff --git a/packages/vue-router/package-lock.json b/packages/vue-router/package-lock.json index fed6bd68c6..057c84368c 100644 --- a/packages/vue-router/package-lock.json +++ b/packages/vue-router/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/vue-router", - "version": "8.7.7", + "version": "8.7.8", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@ionic/vue-router", - "version": "8.7.7", + "version": "8.7.8", "license": "MIT", "dependencies": { - "@ionic/vue": "^8.7.7" + "@ionic/vue": "^8.7.8" }, "devDependencies": { "@ionic/eslint-config": "^0.3.0", @@ -12991,4 +12991,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/packages/vue-router/package.json b/packages/vue-router/package.json index 164fcc29e7..0cd615718f 100644 --- a/packages/vue-router/package.json +++ b/packages/vue-router/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/vue-router", - "version": "8.7.7", + "version": "8.7.8", "description": "Vue Router integration for @ionic/vue", "scripts": { "test.spec": "jest", @@ -44,7 +44,7 @@ }, "homepage": "https://github.com/ionic-team/ionic-framework#readme", "dependencies": { - "@ionic/vue": "^8.7.7" + "@ionic/vue": "^8.7.8" }, "devDependencies": { "@ionic/eslint-config": "^0.3.0", diff --git a/packages/vue/CHANGELOG.md b/packages/vue/CHANGELOG.md index fa8e9e7eab..0869ba8816 100644 --- a/packages/vue/CHANGELOG.md +++ b/packages/vue/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [8.7.8](https://github.com/ionic-team/ionic-framework/compare/v8.7.7...v8.7.8) (2025-10-29) + +**Note:** Version bump only for package @ionic/vue + + + + + ## [8.7.7](https://github.com/ionic-team/ionic-framework/compare/v8.7.6...v8.7.7) (2025-10-15) **Note:** Version bump only for package @ionic/vue diff --git a/packages/vue/package-lock.json b/packages/vue/package-lock.json index 667001bf45..adbace7a13 100644 --- a/packages/vue/package-lock.json +++ b/packages/vue/package-lock.json @@ -1,15 +1,15 @@ { "name": "@ionic/vue", - "version": "8.7.7", + "version": "8.7.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@ionic/vue", - "version": "8.7.7", + "version": "8.7.8", "license": "MIT", "dependencies": { - "@ionic/core": "^8.7.7", + "@ionic/core": "^8.7.8", "@stencil/vue-output-target": "0.10.7", "ionicons": "^8.0.13" }, @@ -4019,4 +4019,4 @@ "dev": true } } -} +} \ No newline at end of file diff --git a/packages/vue/package.json b/packages/vue/package.json index bf315a783f..b3fd59dbf6 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@ionic/vue", - "version": "8.7.7", + "version": "8.7.8", "description": "Vue specific wrapper for @ionic/core", "scripts": { "eslint": "eslint src", @@ -68,7 +68,7 @@ "vue-router": "^4.0.16" }, "dependencies": { - "@ionic/core": "^8.7.7", + "@ionic/core": "^8.7.8", "@stencil/vue-output-target": "0.10.7", "ionicons": "^8.0.13" }, From 66abc05c46df31af3d8af9ee5577d2f379eeda90 Mon Sep 17 00:00:00 2001 From: ionitron Date: Wed, 29 Oct 2025 17:41:33 +0000 Subject: [PATCH 20/20] chore(): update package lock files --- core/package-lock.json | 2 +- packages/angular-server/package-lock.json | 14 +++++------ packages/angular/package-lock.json | 8 +++--- packages/docs/package-lock.json | 2 +- packages/react-router/package-lock.json | 30 +++++++++++------------ packages/react/package-lock.json | 8 +++--- packages/vue-router/package-lock.json | 30 +++++++++++------------ packages/vue/package-lock.json | 8 +++--- 8 files changed, 51 insertions(+), 51 deletions(-) diff --git a/core/package-lock.json b/core/package-lock.json index 7488ed6d51..e1ae517d08 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -18337,4 +18337,4 @@ "dev": true } } -} \ No newline at end of file +} diff --git a/packages/angular-server/package-lock.json b/packages/angular-server/package-lock.json index 38cbd14e0f..feaed84d36 100644 --- a/packages/angular-server/package-lock.json +++ b/packages/angular-server/package-lock.json @@ -1031,9 +1031,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.7", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.7.tgz", - "integrity": "sha512-XMvVkiRiB9I1Jc63RqderjHzxxiyr6KM2vBDzYBQS6rk7Fb4wC/ZyUuFgnrYKk71r1mgwYTPMy/2qrCShNXgXQ==", + "version": "8.7.8", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.8.tgz", + "integrity": "sha512-GLWb/lz3kocpzTZTeQQ5xxoWz4CKHD6zpnbwJknTKsncebohAaw2KTe7uOw5toKQEDdohTseFuSGoDDBoRQ1Ug==", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -7306,9 +7306,9 @@ "dev": true }, "@ionic/core": { - "version": "8.7.7", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.7.tgz", - "integrity": "sha512-XMvVkiRiB9I1Jc63RqderjHzxxiyr6KM2vBDzYBQS6rk7Fb4wC/ZyUuFgnrYKk71r1mgwYTPMy/2qrCShNXgXQ==", + "version": "8.7.8", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.8.tgz", + "integrity": "sha512-GLWb/lz3kocpzTZTeQQ5xxoWz4CKHD6zpnbwJknTKsncebohAaw2KTe7uOw5toKQEDdohTseFuSGoDDBoRQ1Ug==", "requires": { "@stencil/core": "4.38.0", "ionicons": "^8.0.13", @@ -11286,4 +11286,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/angular/package-lock.json b/packages/angular/package-lock.json index 65402778c8..bb7adfaaf6 100644 --- a/packages/angular/package-lock.json +++ b/packages/angular/package-lock.json @@ -1398,9 +1398,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.7", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.7.tgz", - "integrity": "sha512-XMvVkiRiB9I1Jc63RqderjHzxxiyr6KM2vBDzYBQS6rk7Fb4wC/ZyUuFgnrYKk71r1mgwYTPMy/2qrCShNXgXQ==", + "version": "8.7.8", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.8.tgz", + "integrity": "sha512-GLWb/lz3kocpzTZTeQQ5xxoWz4CKHD6zpnbwJknTKsncebohAaw2KTe7uOw5toKQEDdohTseFuSGoDDBoRQ1Ug==", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -9079,4 +9079,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/docs/package-lock.json b/packages/docs/package-lock.json index 1bcc4e39bc..8b762e133e 100644 --- a/packages/docs/package-lock.json +++ b/packages/docs/package-lock.json @@ -10,4 +10,4 @@ "license": "MIT" } } -} \ No newline at end of file +} diff --git a/packages/react-router/package-lock.json b/packages/react-router/package-lock.json index c270e44338..6ee451ed4e 100644 --- a/packages/react-router/package-lock.json +++ b/packages/react-router/package-lock.json @@ -238,9 +238,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.7", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.7.tgz", - "integrity": "sha512-XMvVkiRiB9I1Jc63RqderjHzxxiyr6KM2vBDzYBQS6rk7Fb4wC/ZyUuFgnrYKk71r1mgwYTPMy/2qrCShNXgXQ==", + "version": "8.7.8", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.8.tgz", + "integrity": "sha512-GLWb/lz3kocpzTZTeQQ5xxoWz4CKHD6zpnbwJknTKsncebohAaw2KTe7uOw5toKQEDdohTseFuSGoDDBoRQ1Ug==", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -415,12 +415,12 @@ } }, "node_modules/@ionic/react": { - "version": "8.7.7", - "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.7.7.tgz", - "integrity": "sha512-X/olNPQrITyVbKkZRrhauC6cKXO+C6ISCnoDJFxH34TLphSrpOFOpVD/c+a17QMD8RMxe5/zsQ8oY/DOH8pC6w==", + "version": "8.7.8", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.7.8.tgz", + "integrity": "sha512-QRxGXcSkfmwVIFxdHI776bqiHpqT1FwwVNASBRPCD8RNCIT9NTZIvgNdJ2FokBZjHRfgk4QuYOcQntrbPmK0Hg==", "license": "MIT", "dependencies": { - "@ionic/core": "8.7.7", + "@ionic/core": "8.7.8", "ionicons": "^8.0.13", "tslib": "*" }, @@ -4175,9 +4175,9 @@ "dev": true }, "@ionic/core": { - "version": "8.7.7", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.7.tgz", - "integrity": "sha512-XMvVkiRiB9I1Jc63RqderjHzxxiyr6KM2vBDzYBQS6rk7Fb4wC/ZyUuFgnrYKk71r1mgwYTPMy/2qrCShNXgXQ==", + "version": "8.7.8", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.8.tgz", + "integrity": "sha512-GLWb/lz3kocpzTZTeQQ5xxoWz4CKHD6zpnbwJknTKsncebohAaw2KTe7uOw5toKQEDdohTseFuSGoDDBoRQ1Ug==", "requires": { "@stencil/core": "4.38.0", "ionicons": "^8.0.13", @@ -4281,11 +4281,11 @@ "requires": {} }, "@ionic/react": { - "version": "8.7.7", - "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.7.7.tgz", - "integrity": "sha512-X/olNPQrITyVbKkZRrhauC6cKXO+C6ISCnoDJFxH34TLphSrpOFOpVD/c+a17QMD8RMxe5/zsQ8oY/DOH8pC6w==", + "version": "8.7.8", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-8.7.8.tgz", + "integrity": "sha512-QRxGXcSkfmwVIFxdHI776bqiHpqT1FwwVNASBRPCD8RNCIT9NTZIvgNdJ2FokBZjHRfgk4QuYOcQntrbPmK0Hg==", "requires": { - "@ionic/core": "8.7.7", + "@ionic/core": "8.7.8", "ionicons": "^8.0.13", "tslib": "*" } @@ -6844,4 +6844,4 @@ "dev": true } } -} \ No newline at end of file +} diff --git a/packages/react/package-lock.json b/packages/react/package-lock.json index c5e1d9ce63..cd2c498fd3 100644 --- a/packages/react/package-lock.json +++ b/packages/react/package-lock.json @@ -736,9 +736,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.7", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.7.tgz", - "integrity": "sha512-XMvVkiRiB9I1Jc63RqderjHzxxiyr6KM2vBDzYBQS6rk7Fb4wC/ZyUuFgnrYKk71r1mgwYTPMy/2qrCShNXgXQ==", + "version": "8.7.8", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.8.tgz", + "integrity": "sha512-GLWb/lz3kocpzTZTeQQ5xxoWz4CKHD6zpnbwJknTKsncebohAaw2KTe7uOw5toKQEDdohTseFuSGoDDBoRQ1Ug==", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -11913,4 +11913,4 @@ } } } -} \ No newline at end of file +} diff --git a/packages/vue-router/package-lock.json b/packages/vue-router/package-lock.json index 057c84368c..bca37af942 100644 --- a/packages/vue-router/package-lock.json +++ b/packages/vue-router/package-lock.json @@ -673,9 +673,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.7", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.7.tgz", - "integrity": "sha512-XMvVkiRiB9I1Jc63RqderjHzxxiyr6KM2vBDzYBQS6rk7Fb4wC/ZyUuFgnrYKk71r1mgwYTPMy/2qrCShNXgXQ==", + "version": "8.7.8", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.8.tgz", + "integrity": "sha512-GLWb/lz3kocpzTZTeQQ5xxoWz4CKHD6zpnbwJknTKsncebohAaw2KTe7uOw5toKQEDdohTseFuSGoDDBoRQ1Ug==", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -865,12 +865,12 @@ } }, "node_modules/@ionic/vue": { - "version": "8.7.7", - "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.7.7.tgz", - "integrity": "sha512-ufnxZ2yl4Ep2xgemYOdl/rsAX/Dj01X9qWvk34+mX32Vo3vGRJrI1bySt9tmaBQBZyYll8TVD/xhvdw6sVzLHQ==", + "version": "8.7.8", + "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.7.8.tgz", + "integrity": "sha512-vB8JBfIduHDD8+MnhGX8w3zXB/abNqjqwOjv+0SOrMx1sp9TvpPi2vYGjtSrFlg1PvOv8EGNzVYTbURmwgvcHA==", "license": "MIT", "dependencies": { - "@ionic/core": "8.7.7", + "@ionic/core": "8.7.8", "@stencil/vue-output-target": "0.10.7", "ionicons": "^8.0.13" } @@ -8041,9 +8041,9 @@ "dev": true }, "@ionic/core": { - "version": "8.7.7", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.7.tgz", - "integrity": "sha512-XMvVkiRiB9I1Jc63RqderjHzxxiyr6KM2vBDzYBQS6rk7Fb4wC/ZyUuFgnrYKk71r1mgwYTPMy/2qrCShNXgXQ==", + "version": "8.7.8", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.8.tgz", + "integrity": "sha512-GLWb/lz3kocpzTZTeQQ5xxoWz4CKHD6zpnbwJknTKsncebohAaw2KTe7uOw5toKQEDdohTseFuSGoDDBoRQ1Ug==", "requires": { "@stencil/core": "4.38.0", "ionicons": "^8.0.13", @@ -8156,11 +8156,11 @@ "requires": {} }, "@ionic/vue": { - "version": "8.7.7", - "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.7.7.tgz", - "integrity": "sha512-ufnxZ2yl4Ep2xgemYOdl/rsAX/Dj01X9qWvk34+mX32Vo3vGRJrI1bySt9tmaBQBZyYll8TVD/xhvdw6sVzLHQ==", + "version": "8.7.8", + "resolved": "https://registry.npmjs.org/@ionic/vue/-/vue-8.7.8.tgz", + "integrity": "sha512-vB8JBfIduHDD8+MnhGX8w3zXB/abNqjqwOjv+0SOrMx1sp9TvpPi2vYGjtSrFlg1PvOv8EGNzVYTbURmwgvcHA==", "requires": { - "@ionic/core": "8.7.7", + "@ionic/core": "8.7.8", "@stencil/vue-output-target": "0.10.7", "ionicons": "^8.0.13" } @@ -12991,4 +12991,4 @@ "dev": true } } -} \ No newline at end of file +} diff --git a/packages/vue/package-lock.json b/packages/vue/package-lock.json index adbace7a13..2237b8dc2a 100644 --- a/packages/vue/package-lock.json +++ b/packages/vue/package-lock.json @@ -222,9 +222,9 @@ "dev": true }, "node_modules/@ionic/core": { - "version": "8.7.7", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.7.tgz", - "integrity": "sha512-XMvVkiRiB9I1Jc63RqderjHzxxiyr6KM2vBDzYBQS6rk7Fb4wC/ZyUuFgnrYKk71r1mgwYTPMy/2qrCShNXgXQ==", + "version": "8.7.8", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-8.7.8.tgz", + "integrity": "sha512-GLWb/lz3kocpzTZTeQQ5xxoWz4CKHD6zpnbwJknTKsncebohAaw2KTe7uOw5toKQEDdohTseFuSGoDDBoRQ1Ug==", "license": "MIT", "dependencies": { "@stencil/core": "4.38.0", @@ -4019,4 +4019,4 @@ "dev": true } } -} \ No newline at end of file +}