From a202959b3c1ac562f3d005a4798e46710b094ca2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 3 Jun 2026 14:08:10 -0400 Subject: [PATCH 1/8] chore(deps): update capacitor to v8.4.0 (#31188) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@capacitor/core](https://capacitorjs.com) ([source](https://redirect.github.com/ionic-team/capacitor)) | [`8.3.4` → `8.4.0`](https://renovatebot.com/diffs/npm/@capacitor%2fcore/8.3.4/8.4.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fcore/8.4.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fcore/8.3.4/8.4.0?slim=true) | --- ### Release Notes
ionic-team/capacitor (@​capacitor/core) ### [`v8.4.0`](https://redirect.github.com/ionic-team/capacitor/blob/HEAD/CHANGELOG.md#840-2026-06-02) [Compare Source](https://redirect.github.com/ionic-team/capacitor/compare/8.3.4...8.4.0) ##### Bug Fixes - **android:** show only the requested system bar ([#​8480](https://redirect.github.com/ionic-team/capacitor/issues/8480)) ([4c6c321](https://redirect.github.com/ionic-team/capacitor/commit/4c6c3219afb5223211e857457e46283c37eb9424)) - **cli:** revert live reload config on failure ([#​8485](https://redirect.github.com/ionic-team/capacitor/issues/8485)) ([1d031a4](https://redirect.github.com/ionic-team/capacitor/commit/1d031a4abec2c793079ba8897ad2e40c4cc6c7f9)) - **SystemBars:** make `safe-area-inset-x` available on API <= 34 ([#​8424](https://redirect.github.com/ionic-team/capacitor/issues/8424)) ([e456de0](https://redirect.github.com/ionic-team/capacitor/commit/e456de083e19644f484bec5a5359cb67960ac8bc)) - **SystemBars:** respect `insetsHandling` disable ([#​8481](https://redirect.github.com/ionic-team/capacitor/issues/8481)) ([d4ad7ff](https://redirect.github.com/ionic-team/capacitor/commit/d4ad7ffe39daf66e0cfc63af9028d5c05543bde7)) ##### Features - add method getDouble to plugin config ([#​7638](https://redirect.github.com/ionic-team/capacitor/issues/7638)) ([93c72de](https://redirect.github.com/ionic-team/capacitor/commit/93c72de40a2ec4c78b33659250cb08340083088e)) - **cli:** add experimental packageOptions ([#​8471](https://redirect.github.com/ionic-team/capacitor/issues/8471)) ([258867b](https://redirect.github.com/ionic-team/capacitor/commit/258867b7bf37b1837b99b02ec9638e5a6df08d97)) - **cli:** capture ios\_package\_manager in telemetry ([#​8482](https://redirect.github.com/ionic-team/capacitor/issues/8482)) ([b4b297a](https://redirect.github.com/ionic-team/capacitor/commit/b4b297a52f8732659662d5e5aaeff81c0f7d9835)) #### [8.3.4](https://redirect.github.com/ionic-team/capacitor/compare/8.3.3...8.3.4) (2026-05-12) **Note:** Version bump only for package capacitor #### [8.3.3](https://redirect.github.com/ionic-team/capacitor/compare/8.3.2...8.3.3) (2026-05-08) ##### Bug Fixes - **cli:** copy plugin files in CocoaPods projects ([#​8467](https://redirect.github.com/ionic-team/capacitor/issues/8467)) ([b2d7719](https://redirect.github.com/ionic-team/capacitor/commit/b2d771926a180e60deea31992d7d4abcd5ca3bc7)) #### [8.3.2](https://redirect.github.com/ionic-team/capacitor/compare/8.3.1...8.3.2) (2026-05-07) ##### Bug Fixes - **cli:** add cSettings support for compiler flags in generated Package.swift ([#​8448](https://redirect.github.com/ionic-team/capacitor/issues/8448)) ([0bd0676](https://redirect.github.com/ionic-team/capacitor/commit/0bd0676315c5fd77e50312dd7b5bf4990dcbd7d0)) - **cli:** add system framework and weak framework support in SPM Package.swift ([#​8447](https://redirect.github.com/ionic-team/capacitor/issues/8447)) ([3232f0f](https://redirect.github.com/ionic-team/capacitor/commit/3232f0fe1d9811b0b5c500e3dc05cb8a250177f8)) - **cli:** correct Capacitor plugin SPM compat check ([#​8440](https://redirect.github.com/ionic-team/capacitor/issues/8440)) ([e5ccc45](https://redirect.github.com/ionic-team/capacitor/commit/e5ccc451dda27d56bca824ed644bd20fe4d988cb)) - **cli:** generate binaryTarget entries for custom xcframeworks in Package.swift ([#​8445](https://redirect.github.com/ionic-team/capacitor/issues/8445)) ([1f7e33f](https://redirect.github.com/ionic-team/capacitor/commit/1f7e33fca43d183332ec19d22b0d75ef81d8cc6d)) - **cli:** generate resource entries in Package.swift ([#​8455](https://redirect.github.com/ionic-team/capacitor/issues/8455)) ([790bd27](https://redirect.github.com/ionic-team/capacitor/commit/790bd27123497111984227010c3162cec94a108e)) - **cli:** handle Cordova plugins without iOS source files ([#​8443](https://redirect.github.com/ionic-team/capacitor/issues/8443)) ([0da130e](https://redirect.github.com/ionic-team/capacitor/commit/0da130eb7a861bee4e2c35bc0aac53ba9c983fc3)) - **cli:** link plugin dependencies in Package.swift ([#​8457](https://redirect.github.com/ionic-team/capacitor/issues/8457)) ([b3c769e](https://redirect.github.com/ionic-team/capacitor/commit/b3c769e856c826b1174518877cf86ac7ce73bf09)) - **ios:** support Cordova plugins with Package.swift ([#​8438](https://redirect.github.com/ionic-team/capacitor/issues/8438)) ([139943b](https://redirect.github.com/ionic-team/capacitor/commit/139943b0c05fddb2d1ce2d6f468800fddf17b4cf)) - **SystemBars:** avoid extra view padding on API <= 34 ([#​8439](https://redirect.github.com/ionic-team/capacitor/issues/8439)) ([5b135a7](https://redirect.github.com/ionic-team/capacitor/commit/5b135a70217be560e7176c8d5b514cc92ed3e4e4)) #### [8.3.1](https://redirect.github.com/ionic-team/capacitor/compare/8.3.0...8.3.1) (2026-04-16) ##### Bug Fixes - **android:** handle null versionName in isNewBinary() ([#​8397](https://redirect.github.com/ionic-team/capacitor/issues/8397)) ([aa1a660](https://redirect.github.com/ionic-team/capacitor/commit/aa1a660f364f9b5f5a1e350e279c8864b04dd13b)) - boundary value extraction for form-data requests ([#​7518](https://redirect.github.com/ionic-team/capacitor/issues/7518)) ([64ab854](https://redirect.github.com/ionic-team/capacitor/commit/64ab854c12330804c24275d88d3a9f7c8e52a73d)) - **cli:** check CAPACITOR\_COCOAPODS\_PATH in determinePackageManager ([#​8407](https://redirect.github.com/ionic-team/capacitor/issues/8407)) ([acb64ab](https://redirect.github.com/ionic-team/capacitor/commit/acb64ab92a37ff53701cde453558e272e2e11eb6)) - **system-bars:** use separate current styles ([#​8409](https://redirect.github.com/ionic-team/capacitor/issues/8409)) ([3d1f8d1](https://redirect.github.com/ionic-team/capacitor/commit/3d1f8d1b61480187375f5cd4de7ba999db007542))
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekday before 11am" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] 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 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/package-lock.json b/core/package-lock.json index 41aa2358daa..edbd6a1a776 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -629,9 +629,9 @@ "license": "MIT" }, "node_modules/@capacitor/core": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-8.3.4.tgz", - "integrity": "sha512-CqRQCkb6HXxcx/N7s+hHTN6ef2CmamFiRMITwm4qB840ph56mS42bzUgn6tKCP+RZjdDweiRHj9ytDDeN6jFag==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-8.4.0.tgz", + "integrity": "sha512-LrS1xPIrqLtJABBIPDGXxxKmI9OyesrzWw8DiHbxhSC9JoiLUleUAJlX1a0LWIVLRbuY4Szgf9huFeRqYH2SAQ==", "dev": true, "license": "MIT", "dependencies": { From f5f9673e50020f422896138b0872282c41e4cc1f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 3 Jun 2026 18:08:58 +0000 Subject: [PATCH 2/8] chore(deps): update pozil/auto-assign-issue action to v4 (#31190) 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 | |---|---|---|---| | [pozil/auto-assign-issue](https://redirect.github.com/pozil/auto-assign-issue) | action | major | `v3.0.0` → `v4.0.0` | --- ### Release Notes
pozil/auto-assign-issue (pozil/auto-assign-issue) ### [`v4.0.0`](https://redirect.github.com/pozil/auto-assign-issue/compare/v3.0.0...v4.0.0) [Compare Source](https://redirect.github.com/pozil/auto-assign-issue/compare/v3.0.0...v4.0.0)
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekday before 11am" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] 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/assign-issues.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/assign-issues.yml b/.github/workflows/assign-issues.yml index d79a8c17c2c..2a3266eb751 100644 --- a/.github/workflows/assign-issues.yml +++ b/.github/workflows/assign-issues.yml @@ -11,7 +11,7 @@ jobs: issues: write steps: - name: 'Auto-assign issue' - uses: pozil/auto-assign-issue@70adb98ca8b3941524e9ecde48e89067c4f96736 # v3.0.0 + uses: pozil/auto-assign-issue@07fe6dc0e9771842b428f5739098d6140734e226 # v4.0.0 with: assignees: brandyscarney, thetaPC, ShaneK numOfAssignee: 1 From 3da72cd0ed6b35622ba4274340d456e8a9850b43 Mon Sep 17 00:00:00 2001 From: Maria Hutt Date: Wed, 3 Jun 2026 11:14:20 -0700 Subject: [PATCH 3/8] chore(renovate): add playwright-core to group (#31135) Issue number: N/A --------- ## What is the current behavior? The Renovate `playwright` npm rule only matched `@playwright/test` and `@axe-core/playwright`. As a result, `playwright-core` was not included in the `playwright` group and instead fell into Renovate's default `playwright-monorepo` grouping, opening a separate `renovate/playwright-monorepo` PR alongside the main `renovate/playwright` PR for every Playwright release. ## What is the new behavior? - Added `playwright-core` to the npm rule's `matchPackageNames` so it groups with the other Playwright packages. - Switched the npm rule from `matchPackagePatterns` to `matchPackageNames` since the entries are exact package names, not patterns; the explicit list is clearer for a small, stable set of dependencies. - All Playwright-related updates (`@playwright/test`, `@axe-core/playwright`, `playwright-core`, and the `mcr.microsoft.com/playwright` Docker image) will now land in a single `renovate/playwright` PR. ## Does this introduce a breaking change? - [ ] Yes - [x] No ## Other information N/A --- renovate.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/renovate.json5 b/renovate.json5 index 8435d337f6c..a25638f407e 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -38,7 +38,7 @@ }, { matchDatasources: ["npm"], - matchPackagePatterns: ["@playwright/test", "@axe-core/playwright"], + matchPackageNames: ["@playwright/test", "@axe-core/playwright", "playwright-core"], groupName: "playwright", matchFileNames: [ "core/package.json" From 02588a125b24ac1c401cdf7dda9e98ab360f196c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 4 Jun 2026 08:04:27 -0700 Subject: [PATCH 4/8] chore(deps): update actions/checkout action to v6.0.3 (#31187) 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/checkout](https://redirect.github.com/actions/checkout) | action | patch | `v6.0.2` → `v6.0.3` | --- ### Release Notes
actions/checkout (actions/checkout) ### [`v6.0.3`](https://redirect.github.com/actions/checkout/blob/HEAD/CHANGELOG.md#v603) [Compare Source](https://redirect.github.com/actions/checkout/compare/v6.0.2...v6.0.3) - Fix checkout init for SHA-256 repositories by [@​yaananth](https://redirect.github.com/yaananth) in [#​2439](https://redirect.github.com/actions/checkout/pull/2439) - fix: expand merge commit SHA regex and add SHA-256 test cases by [@​yaananth](https://redirect.github.com/yaananth) in [#​2414](https://redirect.github.com/actions/checkout/pull/2414)
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekday before 11am" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] 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> --- .../build-core-stencil-prerelease/action.yml | 2 +- .../workflows/actions/build-core/action.yml | 2 +- .github/workflows/build.yml | 30 +++++++++---------- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/dev-build.yml | 2 +- .github/workflows/nightly.yml | 2 +- .github/workflows/release-ionic.yml | 16 +++++----- .github/workflows/release.yml | 4 +-- .github/workflows/stencil-nightly.yml | 30 +++++++++---------- .github/workflows/update-screenshots.yml | 6 ++-- 10 files changed, 48 insertions(+), 48 deletions(-) diff --git a/.github/workflows/actions/build-core-stencil-prerelease/action.yml b/.github/workflows/actions/build-core-stencil-prerelease/action.yml index e23d9119831..4a684d5c570 100644 --- a/.github/workflows/actions/build-core-stencil-prerelease/action.yml +++ b/.github/workflows/actions/build-core-stencil-prerelease/action.yml @@ -8,7 +8,7 @@ inputs: runs: using: 'composite' steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: 24.x diff --git a/.github/workflows/actions/build-core/action.yml b/.github/workflows/actions/build-core/action.yml index 7524c8a97b3..376d3aedaed 100644 --- a/.github/workflows/actions/build-core/action.yml +++ b/.github/workflows/actions/build-core/action.yml @@ -8,7 +8,7 @@ inputs: runs: using: 'composite' steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: 24.x diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7772b2c432f..97abe2fedf8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,7 +22,7 @@ jobs: build-core: runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/build-core with: ionicons-version: ${{ inputs.ionicons_npm_release_tag }} @@ -31,21 +31,21 @@ jobs: needs: [build-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/test-core-clean-build test-core-lint: needs: [build-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/test-core-lint test-core-spec: needs: [build-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/test-core-spec test-core-screenshot: @@ -62,7 +62,7 @@ jobs: needs: [build-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/test-core-screenshot with: shard: ${{ matrix.shard }} @@ -90,14 +90,14 @@ jobs: needs: [build-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/build-vue build-vue-router: needs: [build-vue] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/build-vue-router test-vue-e2e: @@ -108,7 +108,7 @@ jobs: needs: [build-vue, build-vue-router] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/test-vue-e2e with: app: ${{ matrix.apps }} @@ -126,14 +126,14 @@ jobs: needs: [build-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/build-angular build-angular-server: needs: [build-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/build-angular-server test-angular-e2e: @@ -144,7 +144,7 @@ jobs: needs: [build-angular, build-angular-server] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/test-angular-e2e with: app: ${{ matrix.apps }} @@ -162,14 +162,14 @@ jobs: needs: [build-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/build-react build-react-router: needs: [build-react] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/build-react-router test-react-router-e2e: @@ -180,7 +180,7 @@ jobs: needs: [build-react, build-react-router] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/test-react-router-e2e with: app: ${{ matrix.apps }} @@ -202,7 +202,7 @@ jobs: needs: [build-react, build-react-router] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/test-react-e2e with: app: ${{ matrix.apps }} diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 5e6715d02b1..6d0aea91073 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -14,7 +14,7 @@ jobs: permissions: security-events: write steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: github/codeql-action/init@v4 with: languages: javascript diff --git a/.github/workflows/dev-build.yml b/.github/workflows/dev-build.yml index 51806128a8e..fec61782048 100644 --- a/.github/workflows/dev-build.yml +++ b/.github/workflows/dev-build.yml @@ -13,7 +13,7 @@ jobs: outputs: dev-hash: ${{ steps.create-dev-hash.outputs.DEV_HASH }} steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 # A 1 is required before the timestamp # as lerna will fail when there is a leading 0 # See https://github.com/lerna/lerna/issues/2840 diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 2f64d9f9bd5..ac48da4ab94 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -13,7 +13,7 @@ jobs: outputs: nightly-hash: ${{ steps.create-nightly-hash.outputs.NIGHTLY_HASH }} steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 # A 1 is required before the timestamp # as lerna will fail when there is a leading 0 # See https://github.com/lerna/lerna/issues/2840 diff --git a/.github/workflows/release-ionic.yml b/.github/workflows/release-ionic.yml index 70f1fb1956b..f430d6573f8 100644 --- a/.github/workflows/release-ionic.yml +++ b/.github/workflows/release-ionic.yml @@ -23,7 +23,7 @@ jobs: release-core: runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/actions/publish-npm with: scope: '@ionic/core' @@ -48,7 +48,7 @@ jobs: needs: [release-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: Restore @ionic/docs built cache uses: ./.github/workflows/actions/download-archive with: @@ -67,7 +67,7 @@ jobs: needs: [release-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: Restore @ionic/core built cache uses: ./.github/workflows/actions/download-archive with: @@ -93,7 +93,7 @@ jobs: needs: [release-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: Restore @ionic/core built cache uses: ./.github/workflows/actions/download-archive with: @@ -118,7 +118,7 @@ jobs: needs: [release-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: Restore @ionic/core built cache uses: ./.github/workflows/actions/download-archive with: @@ -143,7 +143,7 @@ jobs: needs: [release-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: Restore @ionic/core built cache uses: ./.github/workflows/actions/download-archive with: @@ -163,7 +163,7 @@ jobs: needs: [release-react] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: Restore @ionic/core built cache uses: ./.github/workflows/actions/download-archive with: @@ -188,7 +188,7 @@ jobs: needs: [release-vue] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - name: Restore @ionic/core built cache uses: ./.github/workflows/actions/download-archive with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index df4429a806b..a28539f6f73 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -58,7 +58,7 @@ jobs: contents: write id-token: write steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: token: ${{ secrets.IONITRON_TOKEN }} fetch-depth: 0 @@ -89,7 +89,7 @@ jobs: contents: write id-token: write steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 # Pull the latest version of the reference # branch instead of the revision that triggered # the workflow otherwise we won't get the commit diff --git a/.github/workflows/stencil-nightly.yml b/.github/workflows/stencil-nightly.yml index 3e8d714ccc1..764a6d1c823 100644 --- a/.github/workflows/stencil-nightly.yml +++ b/.github/workflows/stencil-nightly.yml @@ -26,7 +26,7 @@ jobs: build-core-with-stencil-nightly: runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/build-core-stencil-prerelease with: stencil-version: ${{ inputs.npm_release_tag || 'nightly' }} @@ -35,21 +35,21 @@ jobs: needs: [build-core-with-stencil-nightly] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/test-core-clean-build test-core-lint: needs: [build-core-with-stencil-nightly] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/test-core-lint test-core-spec: needs: [build-core-with-stencil-nightly] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/test-core-spec with: stencil-version: ${{ inputs.npm_release_tag || 'nightly' }} @@ -72,7 +72,7 @@ jobs: needs: [build-core-with-stencil-nightly] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/test-core-screenshot with: shard: ${{ matrix.shard }} @@ -100,14 +100,14 @@ jobs: needs: [build-core-with-stencil-nightly] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/build-vue build-vue-router: needs: [build-vue] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/build-vue-router test-vue-e2e: @@ -118,7 +118,7 @@ jobs: needs: [build-vue, build-vue-router] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/test-vue-e2e with: app: ${{ matrix.apps }} @@ -136,14 +136,14 @@ jobs: needs: [build-core-with-stencil-nightly] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/build-angular build-angular-server: needs: [build-core-with-stencil-nightly] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/build-angular-server test-angular-e2e: @@ -154,7 +154,7 @@ jobs: needs: [build-angular, build-angular-server] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/test-angular-e2e with: app: ${{ matrix.apps }} @@ -172,14 +172,14 @@ jobs: needs: [build-core-with-stencil-nightly] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/build-react build-react-router: needs: [build-react] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/build-react-router test-react-router-e2e: @@ -190,7 +190,7 @@ jobs: needs: [build-react, build-react-router] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/test-react-router-e2e with: app: ${{ matrix.apps }} @@ -212,7 +212,7 @@ jobs: needs: [build-react, build-react-router] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/test-react-e2e with: app: ${{ matrix.apps }} diff --git a/.github/workflows/update-screenshots.yml b/.github/workflows/update-screenshots.yml index 6efecbd8f95..aeab13d9fb0 100644 --- a/.github/workflows/update-screenshots.yml +++ b/.github/workflows/update-screenshots.yml @@ -26,7 +26,7 @@ jobs: build-core: runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/build-core test-core-screenshot: @@ -47,7 +47,7 @@ jobs: needs: [build-core] runs-on: ubuntu-latest steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 - uses: ./.github/workflows/actions/test-core-screenshot with: shard: ${{ matrix.shard }} @@ -59,7 +59,7 @@ jobs: runs-on: ubuntu-latest needs: [test-core-screenshot] steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 # Normally, we could just push with the # default GITHUB_TOKEN, but that will # not cause the build workflow From b8e8a415403d00b2f973d05a4d956afc3fdf8f75 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 9 Jun 2026 08:59:18 -0700 Subject: [PATCH 5/8] chore(deps): update playwright (#31136) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | Type | Update | |---|---|---|---|---|---| | [@playwright/test](https://playwright.dev) ([source](https://redirect.github.com/microsoft/playwright)) | [`^1.59.1` → `^1.60.0`](https://renovatebot.com/diffs/npm/@playwright%2ftest/1.59.1/1.60.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@playwright%2ftest/1.60.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@playwright%2ftest/1.59.1/1.60.0?slim=true) | devDependencies | minor | | [playwright-core](https://playwright.dev) ([source](https://redirect.github.com/microsoft/playwright)) | [`1.59.1` → `1.60.0`](https://renovatebot.com/diffs/npm/playwright-core/1.59.1/1.60.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/playwright-core/1.60.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/playwright-core/1.59.1/1.60.0?slim=true) | devDependencies | minor | | mcr.microsoft.com/playwright | `v1.59.1` → `v1.60.0` | ![age](https://developer.mend.io/api/mc/badges/age/docker/mcr.microsoft.com%2fplaywright/v1.60.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/mcr.microsoft.com%2fplaywright/v1.59.1/v1.60.0?slim=true) | final | minor | --- ### Release Notes
microsoft/playwright (@​playwright/test) ### [`v1.60.0`](https://redirect.github.com/microsoft/playwright/releases/tag/v1.60.0) [Compare Source](https://redirect.github.com/microsoft/playwright/compare/v1.59.1...v1.60.0) #### 🌐 HAR recording on Tracing [tracing.startHar()](https://playwright.dev/docs/api/class-tracing#tracing-start-har) / [tracing.stopHar()](https://playwright.dev/docs/api/class-tracing#tracing-stop-har) expose HAR recording as a first-class tracing API, with the same `content`, `mode` and `urlFilter` options as `recordHar`. The returned [Disposable](https://playwright.dev/docs/api/class-disposable) makes it easy to scope a recording with `await using`: ```js await using har = await context.tracing.startHar('trace.har'); const page = await context.newPage(); await page.goto('https://playwright.dev'); // HAR is finalized when `har` goes out of scope. ``` #### 🪝 Drop API New [locator.drop()](https://playwright.dev/docs/api/class-locator#locator-drop) simulates an external drag-and-drop of files or clipboard-like data onto an element. Playwright dispatches `dragenter`, `dragover`, and `drop` with a synthetic \[DataTransfer] in the page context — works cross-browser and is great for testing upload zones: ```js await page.locator('#dropzone').drop({ files: { name: 'note.txt', mimeType: 'text/plain', buffer: Buffer.from('hello') }, }); await page.locator('#dropzone').drop({ data: { 'text/plain': 'hello world', 'text/uri-list': 'https://example.com', }, }); ``` #### 🎯 Aria snapshots - [expect(page).toMatchAriaSnapshot()](https://playwright.dev/docs/api/class-pageassertions#page-assertions-to-match-aria-snapshot) now works on a [Page](https://playwright.dev/docs/api/class-page), in addition to a [Locator](https://playwright.dev/docs/api/class-locator) — equivalent to asserting against `page.locator('body')`. - New `boxes` option on [locator.ariaSnapshot()](https://playwright.dev/docs/api/class-locator#locator-aria-snapshot) / [page.ariaSnapshot()](https://playwright.dev/docs/api/class-page#page-aria-snapshot) appends each element's bounding box as `[box=x,y,width,height]`, useful for AI consumption. #### 🛑 test.abort() New [test.abort()](https://playwright.dev/docs/api/class-test#test-abort) aborts the currently running test from a fixture, hook, or route handler with an optional message. Use it when you have detected an unrecoverable misuse and want to fail the test right away: ```js test('does not publish to the shared page', async ({ page }) => { await page.route('**/publish', route => { test.abort('Tests must not publish to the shared page. Use the `clone` option.'); return route.abort(); }); // ... }); ``` #### New APIs ##### Browser, Context and Page - Event [browser.on('context')](https://playwright.dev/docs/api/class-browser#browser-event-context) — fired when a new context is created on the browser. - [BrowserContext](https://playwright.dev/docs/api/class-browsercontext) now mirrors lifecycle events from its pages: [browserContext.on('download')](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-download), [browserContext.on('frameattached')](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-frame-attached), [browserContext.on('framedetached')](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-frame-detached), [browserContext.on('framenavigated')](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-frame-navigated), [browserContext.on('pageclose')](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-page-close), [browserContext.on('pageload')](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-page-load). ##### Locators and Assertions - New option `description` in [page.getByRole()](https://playwright.dev/docs/api/class-page#page-get-by-role) / [locator.getByRole()](https://playwright.dev/docs/api/class-locator#locator-get-by-role) / [frame.getByRole()](https://playwright.dev/docs/api/class-frame#frame-get-by-role) / [frameLocator.getByRole()](https://playwright.dev/docs/api/class-framelocator#frame-locator-get-by-role) for matching the [accessible description](https://www.w3.org/TR/wai-aria-1.2/#dfn-accessible-description). - New option `pseudo` in [expect(locator).toHaveCSS()](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-have-css) reads computed styles from `::before` or `::after`. - New option `style` in [locator.highlight()](https://playwright.dev/docs/api/class-locator#locator-highlight) applies extra inline CSS to the highlight overlay, plus new [page.hideHighlight()](https://playwright.dev/docs/api/class-page#page-hide-highlight) to clear all highlights. ##### Network - [webSocketRoute.protocols()](https://playwright.dev/docs/api/class-websocketroute#web-socket-route-protocols) returns the WebSocket subprotocols requested by the page. - New option `noDefaults` in [browserType.connectOverCDP()](https://playwright.dev/docs/api/class-browsertype#browser-type-connect-over-cdp) disables Playwright's default overrides on the default context (download behavior, focus emulation, media emulation), so attaching to a user's daily-driver browser doesn't disturb its state. ##### Errors and Reporting - New [webError.location()](https://playwright.dev/docs/api/class-weberror#web-error-location) mirrors [consoleMessage.location()](https://playwright.dev/docs/api/class-consolemessage#console-message-location). - [consoleMessage.location()](https://playwright.dev/docs/api/class-consolemessage#console-message-location) now exposes `line` / `column` properties (`lineNumber` / `columnNumber` are deprecated). - New [testInfoError.errorContext](https://playwright.dev/docs/api/class-testinfoerror#test-info-error-error-context) surfaces additional diagnostic context, such as the aria snapshot of the receiver at the time of an `expect(...)` matcher failure. - [reporter.onError()](https://playwright.dev/docs/api/class-reporter#reporter-on-error) now receives a `workerInfo` argument with details about the worker for fixture teardown errors. ##### Test runner - New `{testFileBaseName}` token in [testProject.snapshotPathTemplate](https://playwright.dev/docs/api/class-testproject#test-project-snapshot-path-template) — file name without extension. - Test runner now errors when a config tries to override a non-option fixture, and rejects `workers: 0` or negative values. #### 🛠️ Other improvements - HTML reporter: - `npx playwright show-report` accepts `.zip` files directly — no need to unzip first. - Steps that contain attachments inside nested children show an indicator on the parent step. - The `repeatEachIndex` is shown in the test header when non-zero. - Trace Viewer adds a pretty-print toggle for JSON / form request and response bodies in the network details panel. #### Breaking Changes ⚠️ - Removed long-deprecated APIs: - `Locator.ariaRef()` — use the standard [locator.ariaSnapshot()](https://playwright.dev/docs/api/class-locator#locator-aria-snapshot) pipeline. - `handle` option on `BrowserContext.exposeBinding` and `Page.exposeBinding`. - `logger` option on `BrowserType.connect` and `BrowserType.connectOverCDP` — use [tracing](https://playwright.dev/docs/trace-viewer) instead. - Context options `videosPath` / `videoSize` — use `recordVideo` instead. #### Browser Versions - Chromium 148.0.7778.96 - Mozilla Firefox 150.0.2 - WebKit 26.4 This version was also tested against the following stable channels: - Google Chrome 147 - Microsoft Edge 147
microsoft/playwright (playwright-core) ### [`v1.60.0`](https://redirect.github.com/microsoft/playwright/releases/tag/v1.60.0) [Compare Source](https://redirect.github.com/microsoft/playwright/compare/v1.59.1...v1.60.0) #### 🌐 HAR recording on Tracing [tracing.startHar()](https://playwright.dev/docs/api/class-tracing#tracing-start-har) / [tracing.stopHar()](https://playwright.dev/docs/api/class-tracing#tracing-stop-har) expose HAR recording as a first-class tracing API, with the same `content`, `mode` and `urlFilter` options as `recordHar`. The returned [Disposable](https://playwright.dev/docs/api/class-disposable) makes it easy to scope a recording with `await using`: ```js await using har = await context.tracing.startHar('trace.har'); const page = await context.newPage(); await page.goto('https://playwright.dev'); // HAR is finalized when `har` goes out of scope. ``` #### 🪝 Drop API New [locator.drop()](https://playwright.dev/docs/api/class-locator#locator-drop) simulates an external drag-and-drop of files or clipboard-like data onto an element. Playwright dispatches `dragenter`, `dragover`, and `drop` with a synthetic \[DataTransfer] in the page context — works cross-browser and is great for testing upload zones: ```js await page.locator('#dropzone').drop({ files: { name: 'note.txt', mimeType: 'text/plain', buffer: Buffer.from('hello') }, }); await page.locator('#dropzone').drop({ data: { 'text/plain': 'hello world', 'text/uri-list': 'https://example.com', }, }); ``` #### 🎯 Aria snapshots - [expect(page).toMatchAriaSnapshot()](https://playwright.dev/docs/api/class-pageassertions#page-assertions-to-match-aria-snapshot) now works on a [Page](https://playwright.dev/docs/api/class-page), in addition to a [Locator](https://playwright.dev/docs/api/class-locator) — equivalent to asserting against `page.locator('body')`. - New `boxes` option on [locator.ariaSnapshot()](https://playwright.dev/docs/api/class-locator#locator-aria-snapshot) / [page.ariaSnapshot()](https://playwright.dev/docs/api/class-page#page-aria-snapshot) appends each element's bounding box as `[box=x,y,width,height]`, useful for AI consumption. #### 🛑 test.abort() New [test.abort()](https://playwright.dev/docs/api/class-test#test-abort) aborts the currently running test from a fixture, hook, or route handler with an optional message. Use it when you have detected an unrecoverable misuse and want to fail the test right away: ```js test('does not publish to the shared page', async ({ page }) => { await page.route('**/publish', route => { test.abort('Tests must not publish to the shared page. Use the `clone` option.'); return route.abort(); }); // ... }); ``` #### New APIs ##### Browser, Context and Page - Event [browser.on('context')](https://playwright.dev/docs/api/class-browser#browser-event-context) — fired when a new context is created on the browser. - [BrowserContext](https://playwright.dev/docs/api/class-browsercontext) now mirrors lifecycle events from its pages: [browserContext.on('download')](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-download), [browserContext.on('frameattached')](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-frame-attached), [browserContext.on('framedetached')](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-frame-detached), [browserContext.on('framenavigated')](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-frame-navigated), [browserContext.on('pageclose')](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-page-close), [browserContext.on('pageload')](https://playwright.dev/docs/api/class-browsercontext#browser-context-event-page-load). ##### Locators and Assertions - New option `description` in [page.getByRole()](https://playwright.dev/docs/api/class-page#page-get-by-role) / [locator.getByRole()](https://playwright.dev/docs/api/class-locator#locator-get-by-role) / [frame.getByRole()](https://playwright.dev/docs/api/class-frame#frame-get-by-role) / [frameLocator.getByRole()](https://playwright.dev/docs/api/class-framelocator#frame-locator-get-by-role) for matching the [accessible description](https://www.w3.org/TR/wai-aria-1.2/#dfn-accessible-description). - New option `pseudo` in [expect(locator).toHaveCSS()](https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-have-css) reads computed styles from `::before` or `::after`. - New option `style` in [locator.highlight()](https://playwright.dev/docs/api/class-locator#locator-highlight) applies extra inline CSS to the highlight overlay, plus new [page.hideHighlight()](https://playwright.dev/docs/api/class-page#page-hide-highlight) to clear all highlights. ##### Network - [webSocketRoute.protocols()](https://playwright.dev/docs/api/class-websocketroute#web-socket-route-protocols) returns the WebSocket subprotocols requested by the page. - New option `noDefaults` in [browserType.connectOverCDP()](https://playwright.dev/docs/api/class-browsertype#browser-type-connect-over-cdp) disables Playwright's default overrides on the default context (download behavior, focus emulation, media emulation), so attaching to a user's daily-driver browser doesn't disturb its state. ##### Errors and Reporting - New [webError.location()](https://playwright.dev/docs/api/class-weberror#web-error-location) mirrors [consoleMessage.location()](https://playwright.dev/docs/api/class-consolemessage#console-message-location). - [consoleMessage.location()](https://playwright.dev/docs/api/class-consolemessage#console-message-location) now exposes `line` / `column` properties (`lineNumber` / `columnNumber` are deprecated). - New [testInfoError.errorContext](https://playwright.dev/docs/api/class-testinfoerror#test-info-error-error-context) surfaces additional diagnostic context, such as the aria snapshot of the receiver at the time of an `expect(...)` matcher failure. - [reporter.onError()](https://playwright.dev/docs/api/class-reporter#reporter-on-error) now receives a `workerInfo` argument with details about the worker for fixture teardown errors. ##### Test runner - New `{testFileBaseName}` token in [testProject.snapshotPathTemplate](https://playwright.dev/docs/api/class-testproject#test-project-snapshot-path-template) — file name without extension. - Test runner now errors when a config tries to override a non-option fixture, and rejects `workers: 0` or negative values. #### 🛠️ Other improvements - HTML reporter: - `npx playwright show-report` accepts `.zip` files directly — no need to unzip first. - Steps that contain attachments inside nested children show an indicator on the parent step. - The `repeatEachIndex` is shown in the test header when non-zero. - Trace Viewer adds a pretty-print toggle for JSON / form request and response bodies in the network details panel. #### Breaking Changes ⚠️ - Removed long-deprecated APIs: - `Locator.ariaRef()` — use the standard [locator.ariaSnapshot()](https://playwright.dev/docs/api/class-locator#locator-aria-snapshot) pipeline. - `handle` option on `BrowserContext.exposeBinding` and `Page.exposeBinding`. - `logger` option on `BrowserType.connect` and `BrowserType.connectOverCDP` — use [tracing](https://playwright.dev/docs/trace-viewer) instead. - Context options `videosPath` / `videoSize` — use `recordVideo` instead. #### Browser Versions - Chromium 148.0.7778.96 - Mozilla Firefox 150.0.2 - WebKit 26.4 This version was also tested against the following stable channels: - Google Chrome 147 - Microsoft Edge 147
--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - "every weekday before 11am" - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 👻 **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> Co-authored-by: Maria Hutt Co-authored-by: ionitron --- core/Dockerfile | 2 +- core/package-lock.json | 26 +++++++++--------- core/package.json | 4 +-- ...kbox-scale-ios-ltr-Mobile-Safari-linux.png | Bin 39449 -> 38804 bytes ...ckbox-scale-md-ltr-Mobile-Safari-linux.png | Bin 38131 -> 37896 bytes ...-text-wrap-ios-ltr-Mobile-Safari-linux.png | Bin 19350 -> 18781 bytes ...adio-scale-ios-ltr-Mobile-Safari-linux.png | Bin 30973 -> 30325 bytes ...radio-scale-md-ltr-Mobile-Safari-linux.png | Bin 39741 -> 39501 bytes ...-text-wrap-ios-ltr-Mobile-Safari-linux.png | Bin 17268 -> 16863 bytes ...lert-scale-ios-ltr-Mobile-Safari-linux.png | Bin 20160 -> 19508 bytes ...alert-scale-md-ltr-Mobile-Safari-linux.png | Bin 23987 -> 23706 bytes ...lds-scale-ios-ltr-Mobile-Firefox-linux.png | Bin 32438 -> 32463 bytes ...elds-scale-ios-ltr-Mobile-Safari-linux.png | Bin 27955 -> 27303 bytes ...ields-scale-md-ltr-Mobile-Safari-linux.png | Bin 30521 -> 30285 bytes ...pleButtons-ios-ltr-Mobile-Safari-linux.png | Bin 13651 -> 13029 bytes ...ttons-ios-ltr-dark-Mobile-Safari-linux.png | Bin 13751 -> 13190 bytes ...pleButtons-ios-rtl-Mobile-Safari-linux.png | Bin 13867 -> 13245 bytes ...ttons-ios-rtl-dark-Mobile-Safari-linux.png | Bin 13893 -> 13340 bytes ...ipleButtons-md-ltr-Mobile-Safari-linux.png | Bin 18448 -> 18139 bytes ...uttons-md-ltr-dark-Mobile-Safari-linux.png | Bin 13479 -> 13258 bytes ...ipleButtons-md-rtl-Mobile-Safari-linux.png | Bin 18442 -> 18182 bytes ...uttons-md-rtl-dark-Mobile-Safari-linux.png | Bin 13481 -> 13256 bytes ...rt-prompt-ios-ltr-Mobile-Firefox-linux.png | Bin 38138 -> 38117 bytes ...rt-prompt-ios-rtl-Mobile-Firefox-linux.png | Bin 37945 -> 37964 bytes ...utton-icon-ios-rtl-Mobile-Safari-linux.png | Bin 39561 -> 39596 bytes ...button-icon-md-ltr-Mobile-Safari-linux.png | Bin 37214 -> 37056 bytes ...button-icon-md-rtl-Mobile-Safari-linux.png | Bin 38299 -> 38099 bytes ...t-or-header-md-ltr-Mobile-Safari-linux.png | Bin 13546 -> 13542 bytes ...kbox-focus-ios-ltr-Mobile-Safari-linux.png | Bin 2877 -> 2870 bytes ...item-focus-ios-ltr-Mobile-Safari-linux.png | Bin 2723 -> 2803 bytes .../datetime/test/basic/datetime.e2e.ts | 22 ++++++++------- ...ttons-diff-ios-ltr-Mobile-Safari-linux.png | Bin 89770 -> 89979 bytes ...ttons-diff-ios-rtl-Mobile-Safari-linux.png | Bin 89159 -> 89259 bytes ...uttons-diff-md-rtl-Mobile-Safari-linux.png | Bin 87889 -> 87890 bytes ...olors-diff-ios-ltr-Mobile-Safari-linux.png | Bin 59327 -> 59579 bytes ...rder-diff-ios-ltr-Mobile-Firefox-linux.png | Bin 42657 -> 43057 bytes ...rder-diff-ios-rtl-Mobile-Firefox-linux.png | Bin 42551 -> 42901 bytes .../modal/test/card/modal-card.e2e.ts | 12 +++++++- ...d-present-ios-ltr-Mobile-Firefox-linux.png | Bin 86024 -> 85953 bytes ...d-present-ios-ltr-Mobile-Firefox-linux.png | Bin 85157 -> 85106 bytes .../modal/test/card/modal-tablet.e2e.ts | 10 +++++++ ...nt-tablet-ios-ltr-Mobile-Firefox-linux.png | Bin 204627 -> 204597 bytes ...nt-tablet-ios-ltr-Mobile-Firefox-linux.png | Bin 202249 -> 202155 bytes .../picker-column-option.md.scss | 14 +++++++++- ...ggle-focus-ios-ltr-Mobile-Safari-linux.png | Bin 3431 -> 3423 bytes ...item-focus-ios-ltr-Mobile-Safari-linux.png | Bin 3190 -> 3266 bytes 46 files changed, 62 insertions(+), 28 deletions(-) diff --git a/core/Dockerfile b/core/Dockerfile index b5a20843d1b..46cd18822f2 100644 --- a/core/Dockerfile +++ b/core/Dockerfile @@ -1,5 +1,5 @@ # Get Playwright -FROM mcr.microsoft.com/playwright:v1.59.1 +FROM mcr.microsoft.com/playwright:v1.60.0 # Set the working directory WORKDIR /ionic diff --git a/core/package-lock.json b/core/package-lock.json index edbd6a1a776..5437a95b8ea 100644 --- a/core/package-lock.json +++ b/core/package-lock.json @@ -21,7 +21,7 @@ "@capacitor/status-bar": "^8.0.0", "@ionic/eslint-config": "^0.3.0", "@ionic/prettier-config": "^2.0.0", - "@playwright/test": "^1.59.1", + "@playwright/test": "^1.60.0", "@rollup/plugin-node-resolve": "^8.4.0", "@rollup/plugin-virtual": "^2.0.3", "@stencil/angular-output-target": "^0.10.0", @@ -42,7 +42,7 @@ "fs-extra": "^9.0.1", "jest": "^29.7.0", "jest-cli": "^29.7.0", - "playwright-core": "^1.59.1", + "playwright-core": "^1.60.0", "prettier": "^2.6.1", "rollup": "^2.26.4", "sass": "^1.33.0", @@ -1598,13 +1598,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.60.0.tgz", + "integrity": "sha512-O71yZIbAh/PxDMNGns37GHBIfrVkEVyn+AXyIa5dOTfb4/xNvRWV+Vv/NMbNCtODB/pO7vLlF2OTmMVLhmr7Ag==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.59.1" + "playwright": "1.60.0" }, "bin": { "playwright": "cli.js" @@ -7944,13 +7944,13 @@ } }, "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.60.0.tgz", + "integrity": "sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.59.1" + "playwright-core": "1.60.0" }, "bin": { "playwright": "cli.js" @@ -7963,9 +7963,9 @@ } }, "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.60.0.tgz", + "integrity": "sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/core/package.json b/core/package.json index 21a468438eb..85aa0472fa1 100644 --- a/core/package.json +++ b/core/package.json @@ -46,7 +46,7 @@ "@capacitor/status-bar": "^8.0.0", "@ionic/eslint-config": "^0.3.0", "@ionic/prettier-config": "^2.0.0", - "@playwright/test": "^1.59.1", + "@playwright/test": "^1.60.0", "@rollup/plugin-node-resolve": "^8.4.0", "@rollup/plugin-virtual": "^2.0.3", "@stencil/angular-output-target": "^0.10.0", @@ -67,7 +67,7 @@ "fs-extra": "^9.0.1", "jest": "^29.7.0", "jest-cli": "^29.7.0", - "playwright-core": "^1.59.1", + "playwright-core": "^1.60.0", "prettier": "^2.6.1", "rollup": "^2.26.4", "sass": "^1.33.0", diff --git a/core/src/components/alert/test/a11y/alert.e2e.ts-snapshots/alert-checkbox-scale-ios-ltr-Mobile-Safari-linux.png b/core/src/components/alert/test/a11y/alert.e2e.ts-snapshots/alert-checkbox-scale-ios-ltr-Mobile-Safari-linux.png index 14b67bab55bfcdb6598cffddaf9edcd36ff6139f..3132f10c7c1d1eb0e6ab758c18b7888da0927b58 100644 GIT binary patch literal 38804 zcmc$`byQXB`!Bi>ML`s$OO)oN>+_wM9n>IeacNYVgK@S zyWNPH>}pkZcD2(2Lsxy3d5wx3t8=`(tz~}ZNM3&@k7({k%YQsgcdg!06U}Kz;H!~i zC%?A2y?l7R(b=blfB8Gw6E*$A-;uv>6>m38FRyHPX8f&>YMYrc2)QG6WBXD&-tAi8 z9WfzY8e;hClQhQ-%0Q)9L-<`5Rnr6b(bLyY;78$C1K>vlm>86ScbIUo#coil{r~<3 zbq~!yM)5i2518t?zL2Lr8(Uv0T`6Y7mC z53}o>QTQsTqc*D4GK}RWWlg@p@})H99UmoydQDBu2h$f}ia(cJjc+#%2)^aw(XCzX zsPu}eaD9{a*~`X5b2m$AHh_|O^sWEz%9=Q%>yLAobR^vz@`4iO1V*3TP#)=(nlzh= z)-TJYsW{_^3%GiZ!5Ui=;YQF z(gwPJzpWQBUzPLoN3QlCP&nDT*R;Abi-szB0eWX@tvx*_6&TjE2If@zfmnPv8B*h zFs8FwonY11T3fuRm+PcF`x*w|wJN5Eykv{c_@6~aan+zZmwEc?*Mlp|(EgZu6F50N zT-43EUebK6W&8(|sTFJfVp^B8;xNPJ+6_tyu|8pS^yp3gEP!~hf(3#VpEjd&a7w- zRV7-h?12mhK!-I$0V7br`!qLCPY9m^nYJz8w``>Sn%t==~m*ylJ8EoE`T zuiYg4^Y5SCmh)m~f^h=3=iZ9|uC>t;1IbE4v3On&<2&K&>o)(UYAs6j@|dTI$jnSl ziQ`SoXfKBY-PJnq{$Fat4{=sz=E7fHzpN@-|M4-}3#Lb3 z*TKf`@hbcKv9YlqK725=wtkbBN3STnkMDD`XSC1}J2o+qqPO(Lq+P4hiePqjRzgC; z;qM4*(dW*M?i#+d~F&q=pLA3yl+M9OosY?md!pap6f|)@q}oi^CHIM(MjY=hbDMU=h;>ai`iW-xo-n?8^$O$E$;qkOWfeD( zO^@oq1OLs&%Z%j=uc+2HM5?*61aW3`G&CGOCoa79(>A5-EG!ZAUWYraL8-Qbg&E0;)W zV*t-^dbqiKyqw8LEbRJkvc`B+TgdkVqfC5l;+wGH) zlT*ECVPu4i%j#4upL&5BrHDv|-^Fpr{@+ouUx%Xxev5C|8@`W^Ymd8b{dvM`J7K!> z@>j85s>Wv>$I}Db-tP9ANw;8@Ny2;aVaJ5AIt z12&+;Z1c5YM_3^&+GT-!Gv4JL)&$;j121@BAH0o?HFEW7otJ<81V5j~c5#W{;SZ`k z>K^yl#r~+l?!j++X1~*;qy8Kz9E@9}5}VWYu(~@Nl9Gr=iuJmfOX{vHMDm}UZZ_WP z)U9=8g~?I1B@_1Kx%bF*p>kAT)fR?lsXt2`o0#MAxOvfMitoe22@kDD`pYd8&7O;i zT`_5kn9cONU|e4;JUTfcwXyDhj|OY1eP~E^{NM+k;#Tubb`IkoH?CZ{qSnr?QxR%8 z^fCEimu}7g2MqK_h4k>~XdHOf$y&GQjt=Sazbq66gYh(-J)H^6x4ypIm{2FcIwq+N zL$?_(d%AzPJ>M?icTu;4M^0{Y2g{Sa;V66Hu0oaFl!|X(cQ=pL4V)dj;#$`Ym7psN zKAkfSK9BARx^Q^*yl!r8=6BzE-*f=GO@;u=lb4s5MZZpKKmMwR5Bt)Ab&+;?@M2fu z&_{VPa&mH%gM-6+Cdsy2`(PZ5tjQHuSpSJ#t>|CD|w;<}wZaNm;C+q0yc4u&{qL+hW}Ziiu>FqE)5U zFqh{BwNwlMOz<4Nrq^5*=NfZpvp^*!)nkvSNZ7 z@R*Xh-Yo08&;GH(9nG7cSfD;|J7XJ%r=fQyz|uaWHs+gRTbaqQMpAQE)kLD z3MXu0$trg3vJYA>hvc3;3(Z{pm9rErr6)j|ZJWsi~<08?YyG zpm4Xc^)*v%a`(=*gdD?0yLI5@>B$8PQRl0TOi#)~M@Pq|@o^GOP0f^t){@VjMf@z= z?X&1$r=rU4kFxduJ6b}d?Piib6M%8c7<$Ij3}y-K7{fb@*|4j%baV=qXi&N}PC+A| zpC?vNA~iOCbz`F^OFSfE+COWBKv#aBmi&=x1ck6?k`Ox+Q)iLk*3J&s7$GTXcy6v) z>@t=zAyR#BUcY`lr-k)!4J=k zm?I-27|Zx0qa60rbyR;>XJ?J}80py9qGaOeNbdbRX}|Bcwc963q|LivkXi1TlX7{27|C-JF2Xw$41{?kS;L)Y*?25~T>FGmk ze}Cn)8RKYfX;BwVf8?f-q8A|?RAkVYVc>iGbohtM#>B(62$B|9iaiB?yVx6TTu$Gy zK41BjkJr%9us&WM0{xoHsQIeC_x98BkTyXwcb=J7;U#f~!qZBp_q@?IMcse`;`UD_D5Tr(_$ws0$3ds*ox2 z`J3|L-_gFJFe_JA*E485t)x1Fc9Z;V(f92~zGP%%6zSJbEcB0&@!2^XZ5go{G}!Rq zdmjE{ovEXfjf7R8Nk~WtphH{x-mvb!fB&F}28sBbeERxaTYLL&Nn=5Cb3EMf7tejG z^2XqD)jS28iHe^^^QU{OEp9VD78*64fCi2FGKAF%H9l)C-y-9U=t<>E#U`K(mxH-~ zWNmHzjzzl}5Y-CIN>*lPeSJLwG>nXlFbY%FhD!`Gp{78y&Lp{1TbdoL#aMUfWLC&;E^#jZZ?#1Ts9=7+(hjB=gy43>X!8!h(felk)xh!3m62zfOdnh@)Fd-~O=T;=KIilWGE7%-ZQNa^+UsOR&4IdK|Q!QU52nJWB z%1#gPV6bEkqlU-8z(8PdaQ489PwIt)(6QMQJk8C_9FKR*va_>4>DH7D;wYs+%K#Wh z$IDCjSwn8>+so~poou_QZ)Fv&=%uGF*m5|zsxzEH6vMI>bmuvb1v6X4^I+a#RagG% zgwfLZl4{XyWMU$|yVPSjUFVUX_<4C_LvLZ-ic&U}hZgg{lTI6KFm?uN6w

-R?Lo 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 literal 39449 zcmc$`c{G-78#j7;DwUM6LLo_Hh-4@kiXtLIBr=uEMTRm{nKLC*hKz+Mvm#UG5Hb@P z6G~*xynol;`&(fk|`TC*w51Fl+oHQx3`S2wEu-#T#UVRt-aoKgpmqa>3lD~LC-63}B zyS<%y=jQV4@~dTX`CZibSLrGJrAg*jTncn5=T(QE?x)|sBQxzFSt*5$#*B5QM&b~--49x@oq=@TV?oQ>^rSyn-=;?-W0mLakDv&DhOxwtO-P)qNc zb?4riVF@evD}?72a&{;-opjF$3}=j&n{;U=%oiggW{PpL;9|4n>vNFEq_&2%VMuQ%M$ z^s)enhOs&J>f5WggZN0-4~V%;o&KBKSX;r(>U@Pypf{OAWr1o zx653+R4+L?IklxI9h&;{$NEEkqHHPWgq@W+26HWQJ3Z-1_nRw|{an`@@Kp{D;chj~weP zeQvQhr0!?%l}t5ipXsC8Os`2I6VbI!^6V`J$2n@uvQsgxFrNMjxq?&?~(a5ps?prOw3KA z>vFqhsS?XICuW$VRy0N;w1l6qU9s5xsMLt%kvQKjwl7Kl```6`OShiERXxk%afv$F zwQ_#=KS$|Zs{4?cO4{(&okI%#2n{os7~{;@mi z $-xi9~JR({fJM@FR8pMUyvzOu4Xz0bwfl~K~gfur-X?{j&9U8;|}-fC67zt^YU z_t9<=rH{qDE$kTmo&&rI+6Ct1Qr(%lJQ`=&<${E`lHE2|_p4j5U33iPBv1U@*f=`< zy_mf3f!NECWTnRDW)UvAva1@t?)w~X|G$(`hqSSuKO>x@wBNn&*f<`pl-eE=ACH|# zt>L+_>#0vend@3lnd`Zo`wk!B=6<@cV0ZW4z1g|B5kJnj1m$>1N><6kH*em|YZP}| zKf|M$c}!e9*4KB}bbpaYL4ojt-(9cuN}aZE-!5SD<1#K>BVADRZqKLL(Kp=8c_+JU zK!R4D@$tr8d-oc(CS4-$J9ttjO~-J!((CY98_(a}S%!v&RYMgXQBv-kuARE;^YQ|| zK9zW@C_y6%xnLIIp2*P9sy}@nid@%3VnptZKv!}q~;MT^ByW@1x_>Fv1n$8SOQ7vONHQH+_inrQRl*rexhCLsw zSmWI{&sub6zP252HZHL#c=F`GpG`4!C64o#m6b)EHeS6tb~RqI34dmgbU8EVw#H{^ zX-QruD=RzKt}MlPSHJK++fFK$A1mYWq6`ubaZ_sDTH;QxPROf&+*n&~FR;)|PBi%P z?&b&L=dl?C9KT?J7=%opwW0-&z^mq+4A~I z?Wbe4#(s>C&;QEEqNSrVTq;Pt`cgqfAYOjb%^I^f$r#0%dZrl)X`FG!Gd0J`lSEsz9;*VgdO@r?rACNEV=G@*v zEKX)-X2bg`AF4d-QQ6R}s_yQ{>+iH_7#Zum_8cU-mXJ`#)bg#Ffl^+r+-iejAD^A= zsmiIYYfER&p0%DGxpaW{#wXmZdfkqlJM$c7Zx6W4H_>K2n4t@nO|IzbikOxC6dMYiK}OMO;6?mM?{|C%gEMZWLwW&EC2^MZ!5o}L@T zap%b@`Hw#6%(rs)@(WQGU2kuFe#Vx54~P7fVO>zk(l?9rKaP%$#6CBPbCm5he*2E) z)A#Q$u^Zd-Oq7joVnZg&29DsSxu(Z5zQl;O7~J$A-+RX4?-4ycy@vO7EY1N3^&B4G zs`AdU=swvwyXWA^J99tkjhh6!O@#tjB%~x`UO3g*-Odnu{i$8>v5r> zhS}6C^aDD0uXhwXxYonUUDqC>_ZciiFH`K6c1h^kwBZEt*H1)K$O{y>Dal->3R|KiNR0s0U>Z`8d%EhEv98?)GHgZaJ}fLT~2Z z?5F}==xA*vSsc(p1r_dn3{Py3WisL?o+FDw(vvsTo z*R&S`N~we`x_Fo5-#z^EO*U(zTi-q0p>(*)XTEX|{|gOKRblyS&(r8tRaGy_$}-(8 zx0|FTs(@0Q$=zxdSy}QAR)Z-hZ#8;(2?>v|hHY(amz9(_I5@oW^YdxX-JZGE(tYUE z?Tb0%*p7Sn`T0jiMxIJccf7eq-WMAi`_z?{l>D-Zjg74)Zrj%^{c_r18jYCk9$c-V z%94J`$;rKS@lx(_o}Qk!gHZ@YKf2D2)VxlQ(X+A1y&&-8$B%40qs{es<;~4CD`^>- z#*PYe^MB^@7hXxFyfP4YzxAs#!{u+q&Yv3DzOP=rq763tmT&f^aleK?@jIS#Tv6y; zTJN`QneDSG-|rl7Ry3Qqe2tBb(O@Y-`)QqIWscWI=3Mvwd@Hyj-re2(p}L4Zzsn4Q2e3tbA(s?%j$n1S%%( zcLVVK#hOIi5TPgc$ji$!kGY;PR=PaEvs8jkdZ^@JhGv$??`UayIh5>Z?BeeUqXpQK zn;UC+5C3RWP*8;ZSy@@R+xI?@O~#v=g(Y)!vcD*=ZR+;ai90Bd>+AC^>BmzJiCPMv zHsfiTT-ViiTQN%R6SW#pMDczhYQ^HbJZ-cxHx_V6H0YqdOY2l(PIGfJ{?u%+hStF- zc*plb_V*%NA5DGNaGa{N0iU!quGQrkt1e+LuAqfez6zsbV>QGgOBQf)a-O#AKXY6; zPBHYj(pOUXEzmEW+Es!Vg$N4Pt2DU*F4vRYlWw6tQ++IpkVAKJU)+_`gZ8;hF1y542n zJtW~Iq%1z`**f?9`SUZ*OK*S4e$UdE$~&Ik+uJ)!tcbbk(tfN6>#|M^PwRF>=w;wI`T`MDPUhtKT;K@{WEI0qUQ8979lB#|Y=dTzl$zvg3k^x_2r z7QSw=xOpl#^OEbhol^%_JmVtO=}DIZRLo#qA8{5e$2x&Er6qUu^z?i!akPyVwbGk5 z`n|HY7I~&v+js7`lKlTl_2ILo^HYk%PILLomq`@m>FvF}Mb9nNA5_=XT~kqc1gk+RrrGwn%6u zcKbhlDxKPX%gD&o)cvJ0&G0+(}MU9RQ)98yb=TrWIq)e zc&U~ct1`cWf(IO3+Ph}6Lkt`){`mPb*KSgcgZ@`{mh#r-hFM1%4O1XF*WG0)6wTs? ze~z-TJx1lv#cJxgt&BCi{YX8+#-99~g~okj@u2;5KiQ|j!T1x`QmCn^6FmQ;mz2o2 z8jSle;IxN|ii(6oRRh4p^ST*qI&^y#`$$7LPs2=$_&nwH>nW_{-~0O~+Eat)mRIJ- zdGal#eccb3DL7qx_4@UR^6s}T*Gap7tE+PW#0Q+;qEfG~%oFtm>t-j$+?lSCe98YnzD4)GD_0t6f9pmOwdKJt zdN4Y64vrll{Qcj*qf?&%N2%-Tdfzi&pv^bl{F43HG0*Dii*4=gvw#17YHtrUZi;Tr zH*2T;{p`hy&*%fY_v~Tkr!ev0bEb&6rNX9q>PG+LNilM zy~_OU{XLwX_}2N`hK6Td{t1vk0*DRu_wW56=5w-kc0#C&3p0c9xWj1OgR_5$#VIT* zvR+%dmvDa~rM%odr>?KJx3$RDBzf(Lhll)?E9^&(Bvc#xn{Sai!NoNMl*KQ?fZMzA z{w^a84NdwVASs;^hY(O1f*V9QrA>Owt<99rqePv!m3|N~9N4-i&x8uwFU5MaR<;F8 zW`aj{jDzFN`?}g%T3Xsl;4`!S!c%xjZD(hvDI@OmC>NJ+Nr|}8O&y)X-C6qM0G12W z-($$Ok%#@$#$mZpWW({n^1Ir-;NakKoS4I6cD{fJr$9?dpzIv? zEw|270IYmD`$mRQ4T5)}yNoSE;5gL(i2E8g`jrS?wxdV?!*eD;304L&m8N%NZFTkE zKOY94M@MVd7YOGA>Egl3;`Ij(8~_3STIy^c=eBA#Hpwe29M0S} z@~snF$8mrXuSA|CE*#f3JTbA0USwycRv!7wt0pS7=qJ7TW}&ncV2t^9d!J(;508)g z;9#LKk9|#)sVR#9@!MP*+~Q7Dd8aLmMj{7(VKz`wG}mD}_d`B{@8> zUU2vO$8h^WSIq+VmN*F@*o0P7hp})?)85?I=I#$4is1e^goMJLJ);Jzxa@y`PkqgP zswZ*%ox32{suk1z{WXBCJ*e9`StfNs%&$^Yw|&jfHhu_$56Zv z4K1xSz(qjBgMWW-;Ycxx++{$&aSMqc^Iyx*48#pVCcrE4o;-aG2uA5e~y(aM?v9VvUD3h(pK7!`y`M~}? z*|%igG@lZtp+18B2<{II86|M*$*+3FEL_mB^poWL8t}b)Z_8ColIe>dB#cuj^oV6EpbYgmYJ>H zHaLk_W6zM$Z#q*l34I=VVcwZO+rX10fJR_rW7G5g-l4!lq9Usml?@F~{pdKOJ5xC} zwTRLTr4|c(&L~CYd7Ax-fJd{)Uzpn`wwuwFXbrHmi<#H)xJDgV0qQP(9 zqT?i-=YD6Eqc5CwoO@;7p>B4^$jJJ~=aAg%8XOQAz$Qsv%I9jOFM!Lq9Ts<>etESn z>a+=NRW|vQ)3&lmYzlM{JZswh`(J-s22v$6Ff^3GUQmh{h8%{&6wVpz%zWnl`4v}! zt~FZQ+Kyr$j(mE&tsmeLST6aBSH9(UZRuee4)ny?g@rq9ujF5)q}crY!iW-FjgzYJ zGG%yp*we>{?(pF+zBKF&>y!ODZfQKIj3LyKz z$H#}KJhCGSjZGPR4UCKb+J-PwAk_MEk+!zB;j25gZy);cL;dbqlx9&z%GK`C$w@y* zkU3-Y_fDSPPgz!0RujRtS%gQd3ZcR7cUPe0_m3fwk#)GJqWi=Dp;c;%Imk#$-+<7A z8gR=iGfExG7HzP#jZG!wgV@-^MjBnYe-{>b7q#VQO6G$qOxd~aT6OQ)x9=wiMomQM z%a?m!?0b(Ff@I66tJ4DuVHrZAqU3RYP_olsD=s`OJGi`$N2Ipn)GCK+g23Gfeto^W zXD|J}{cAByNL+K>R$f4z3>Z#T?gLj_~sbqenfQ?$=7ph>tE_$SW>B zck0xs<^7anCr+Qfwo*E=z4AHnyTZd?zcq-7iD`tm0o5x$UD1}FS=YEZ^d%4rSb@S$ z+g7p3$@t?<8bU`dbsniusR0{nLj^p{%&b-FB&_l=Mo){r^hA_xf0bZ=&IH3I>O@qm zzJX$Ey%P}M&#B(Lh9#iGk+Cr^2+=`7K|Otaz#^Ye)#~f(Rl~2@IojC{$e}bY6eeZW zp#7ri#B6B4s!#hBVvv^f?SoYdq&IjEM^By%BF-XjM?1lUp7OEt^Ji5XekxIp1t(IV zi#)5OOeNjQf6%-qn+?j^$p?%k&9SP|6#x;D`fj~<*2;2P)h`Y1u^p%j3!_hNx{WQY z!0PSgbt&rHGVYG9pM}h%CC+G|#F4-|z{GjYt)@afy}e{!@q+&Q2-~(7&Z=) z!hhg0Wv#AX+W(S9S50owLv0~6*X?m-8~3-z5|FM!6Q6~I+{%xt@9flAS@!ky6%bo_ zmj<*G-Jd$666EiH`s^!>UC#_0jujRb-v8ajhyC@MGKyFJ?p*E z^(L4lr=jdbX_P~?HTn$vvb9+}=M0|Q#Qh-&7)Y6M*lwyPhc?Cr;z1E$^{rdC8r~XyfDs>7HoR_#PEWTfnqFcj{8jLlB&t1Bz@oeFg z_%(efo3+l(nJy+^4sfhFD&qBi={50j1rwZ{P9b$Gur3oK%V*-h3#~#pBQFM!1 zoTM*b6afZm@y6k7>3EiJ|IX|@NX5F_Tkaz09D|gbIMJqwQ>2`zaz@N(q}q?%mZ7Ay zbh7JROz!z_&{^y8^+v1~6%8$N9$+Gpff7*SH89=X-duvgM!U2zoVkAlotC4tV<+nH zlihU3v!STsp#oJ16cxtC#2kXY4wv9U@AWJ_iPfb)jkvDQO-&pE0?*)^bUNZB2Cz!S zK_6k*Oa6$4T^9F!9yJkV5MoEu5CaxzY>Vs~c!>-Et@F~$MhiV?Xl=#z zR-s0Ia*<#Huguz0zC;WAL+wRZqv@plmINj)J6PswHdt0#arsy&dUFIS5FGMwV9cX4q+tBx@b@|I0bgaAv)DEO*+toG&0myXNd?R!g|MX|lFdF7zC z-s^jB1QCj(Il#LzH5X_h*Lm5pvZ`utG&2No>0lNKmXFU4PzAwNPx}$q;9lt3T0j`o zagre&whF0`9A1BXvq5KMVnTQDAhFY-F`-VWmO4Ect5ZM15E>Bym5mpjK|SNTl5jxY zj^;qo|B(gYRZ~+7JM_xON6w4CUNsI}CMPEcjTijE1K)h}QxtHF?$9BBFRvYOadAdY z{2(sqANcO*#Ds5Tq-K-}+hD14B$`ZaUY@nRecku(rP3x9TkX}=)%U0S&t?ujFm|`& z`*kk0J=uHGEmqD;{FHdo)YMekwbY;r+EycA1hq__+>b>?;f2>*suYr2RUm{2x@X^i z_^@oopddg073BP74R2`Ap<2p}N#-G{|4aG&|2400TcdYB^%f;TgI}E5MmlupP}%0H z1)(eIHbVl2R!AC34wkHhu&VR>glC~UEoCJyn1@ksu2I9FgwuinpxA5fQOGmAI)y4L z&cHc{I*5D14hpMRmfBc2-%KMd?f_j$5nV;@#*G)fb#>L%+1Mo%Z$qe)N-hid3bsz# z@#=o;m>P}b*S`uEU`N;GU8;Jof-i)9gXPqO;sLdSqKOtcv`?Cb6M^i89fGI>%2Fz9|5O6 zkB`s#w!GM_-<~M5^LnO^JfzXR%}w?7gs#DR^Zl2Jc6rz-{|2`<<#36VOMH4IFV5Qj z1phY8oD4wm|?eFj1EZf?2hW}|~w}qy_C~A2aH<12E z-(_|Op**0T8lf-q;{9OEeKQr98Yqp?)N}O0QSop^|F{k1RaQTbIt5FrHvjjp0eZn( z?SiM!wBJ-4e6<&on*VaTCP