Skip to content

merge release-8.8.7#31147

Merged
thetaPC merged 11 commits into
8.8.xfrom
release-8.8.7
May 13, 2026
Merged

merge release-8.8.7#31147
thetaPC merged 11 commits into
8.8.xfrom
release-8.8.7

Conversation

@thetaPC
Copy link
Copy Markdown
Contributor

@thetaPC thetaPC commented May 13, 2026

Release 8.8.7

ShaneK and others added 11 commits May 6, 2026 14:46
…sion (#31110)

Issue number: N/A

---------

## What is the current behavior?

When passing a Playwright flag with a space in its value (e.g.
`--project='Mobile Safari'`), the shell strips the quotes before Node
receives the argument. Since `docker.mjs` passed args to `execa` with
`shell: true`, the unquoted space caused the argument to be split and
Playwright never received the correct value.

Additionally, arguments like `-e DISPLAY=${display}`, `-v
${displayVolume}`, and `--mount` were constructed as combined strings
and passed through shell interpretation, meaning special characters in
those values (e.g. spaces in an absolute path) could cause the command
to fail unexpectedly. This caused CodeQL to trigger with security
issues.

## What is the new behavior?

Each Docker argument is now passed as a separate array element to
`execa` without `shell: true`, so values are forwarded directly to
Docker without shell re-interpretation. This preserves spaces within
argument values (e.g. `--project='Mobile Safari'`) and prevents
uncontrolled expansion of paths and environment variable values.

The security issues stated by CodeQL has been addressed.

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

## Other information

Verify that the following command works: `npm run test.e2e.docker
datetime/test/basic -- -g 'IO fallback' --project='Mobile Safari'
--repeat-each=20`
…le (#31114)

Issue number: N/A

---------

<!-- Please do not submit updates to dependencies unless it fixes an
issue. -->

<!-- Please try to limit your pull request to one type (bugfix, feature,
etc). Submit multiple pull requests if needed. -->

## What is the current behavior?
<!-- Please describe the current behavior that you are modifying. -->

We've decided to use `internal` as the prefix for internal CSS variables
and `ion` for public variables. We recently introduced a new internal
variable for the safe area that doesn't have the correct prefix.

## What is the new behavior?
<!-- Please describe the behavior or changes that are being added by
this PR. -->

- Updated `--ion-content-safe-area-padding-bottom` to
`--internal-content-safe-area-padding-bottom`

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

<!--
  If this introduces a breaking change:
1. Describe the impact and migration path for existing applications
below.
  2. Update the BREAKING.md file with the breaking change.
3. Add "BREAKING CHANGE: [...]" to the commit description when merging.
See
https://github.com/ionic-team/ionic-framework/blob/main/docs/CONTRIBUTING.md#footer
for more information.
-->


## Other information

<!-- Any other information that is important to this PR such as
screenshots of how the component looks before and after the change. -->

N/A
)

Issue number: resolves #30412

---------
## What is the current behavior?

When a user listener bound to `ion-input` or `ion-item` receives a tap
that requires scroll assist to scroll the input into view, the click
handler fires twice. Programmatic `setFocus()` and keyboard focus into
an offscreen input also dispatch a phantom click event the developer
didn't request.

The cause is `scroll-assist.ts`: after `relocateInput` moves the native
input, a RAF-scheduled `componentEl.click()` re-emits a click on the
host. That recovery was added in #22845 (Feb 2021) to fix #21871, when
scroll assist drove focus from its own touchstart/touchend listeners and
`relocateInput` ran during the in-flight click event's lifecycle.

## What is the new behavior?
<!-- Please describe the behavior or changes that are being added by
this PR. -->

The RAF recovery click is removed. #25848 (Sep 2022) restructured scroll
assist to react to `focusin` rather than drive focus from touch events,
so `relocateInput` now runs strictly after the click event has finished
propagating. Combined with `ion-input`'s click capture handler and
`ion-item`'s click-on-padding handler from #30373 (April 2025), the
click is always dispatched on the component host before scroll assist
runs. Re-firing it produced duplicate clicks for user interactions and
phantom clicks for programmatic and keyboard focus.

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

## Other information


Regression coverage in
`core/src/components/input/test/item/scroll-assist-double-click.e2e.ts`
covers four cases on iOS Mobile Safari and Mobile Chrome: padding click,
direct input click, programmatic `setFocus()`, and keyboard focus. The
first two assert one click event; the last two assert zero. All four
fail without this change and pass with it.

Preview:
-
https://ionic-framework-git-fw-6540-ionic1.vercel.app/src/utils/input-shims/hacks/test?ionic:mode=ios
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.1`
→
`8.3.2`](https://renovatebot.com/diffs/npm/@capacitor%2fcore/8.3.1/8.3.2)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fcore/8.3.2?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fcore/8.3.1/8.3.2?slim=true)
|

---

### Release Notes

<details>
<summary>ionic-team/capacitor (@&#8203;capacitor/core)</summary>

###
[`v8.3.2`](https://redirect.github.com/ionic-team/capacitor/blob/HEAD/CHANGELOG.md#832-2026-05-07)

[Compare
Source](https://redirect.github.com/ionic-team/capacitor/compare/8.3.1...8.3.2)

##### Bug Fixes

- **cli:** add cSettings support for compiler flags in generated
Package.swift
([#&#8203;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
([#&#8203;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
([#&#8203;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
([#&#8203;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
([#&#8203;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
([#&#8203;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
([#&#8203;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
([#&#8203;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
([#&#8203;8439](https://redirect.github.com/ionic-team/capacitor/issues/8439))
([5b135a7](https://redirect.github.com/ionic-team/capacitor/commit/5b135a70217be560e7176c8d5b514cc92ed3e4e4))

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - "every weekday before 11am"
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Never, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/ionic-team/ionic-framework).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNTkuMiIsInVwZGF0ZWRJblZlciI6IjQzLjE1OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Issue number: internal

---------

## What is the current behavior?

When an `ion-alert` has two buttons whose combined text is too long to
fit on one row, flex-wrap pushes the second button onto a new row. The
horizontal layout's right border (drawn between buttons via
`alert.ios.scss`) stays on the first button, leaving a stray vertical
separator at the wrap edge. The `alert-button-group-vertical` class only
triggers on `buttons.length > 2`, so two-button alerts can't opt into
the clean vertical layout even when they visually need it.

## What is the new behavior?

The alert now watches its button group with a `ResizeObserver` and
toggles `alert-button-group-vertical` whenever the buttons render at
different `offsetTop` values, so wrapping two-button alerts get the same
vertical treatment as three-or-more-button alerts. The wrap state resets
when the `buttons` prop changes so a new button set is re-evaluated from
scratch, and the observer is re-attached in `connectedCallback` so
reconnected alerts keep working. The layout read is deferred via `raf`
to avoid forcing synchronous layout and to sidestep `ResizeObserver`
loop warnings.

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

## Other information

The right-border styling between buttons only exists in iOS mode, so the
new e2e test is iOS only

Preview:
- iOS:
https://ionic-framework-git-fw-7244-ionic1.vercel.app/src/components/alert/test/basic?ionic:mode=ios

A lot of the updated screenshots are because of the new alert button. We
should probably make note of these to go back and update the tests so
they focus on the modal and don't include the background to prevent this
sort of update spam in the future.

---------

Co-authored-by: ionitron <hi@ionicframework.com>
Co-authored-by: Maria Hutt <thetaPC@users.noreply.github.com>
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [@capacitor/core](https://capacitorjs.com)
([source](https://redirect.github.com/ionic-team/capacitor)) | [`8.3.2`
→
`8.3.3`](https://renovatebot.com/diffs/npm/@capacitor%2fcore/8.3.2/8.3.3)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fcore/8.3.3?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fcore/8.3.2/8.3.3?slim=true)
|

---

### Release Notes

<details>
<summary>ionic-team/capacitor (@&#8203;capacitor/core)</summary>

###
[`v8.3.3`](https://redirect.github.com/ionic-team/capacitor/blob/HEAD/CHANGELOG.md#833-2026-05-08)

[Compare
Source](https://redirect.github.com/ionic-team/capacitor/compare/8.3.2...8.3.3)

##### Bug Fixes

- **cli:** copy plugin files in CocoaPods projects
([#&#8203;8467](https://redirect.github.com/ionic-team/capacitor/issues/8467))
([b2d7719](https://redirect.github.com/ionic-team/capacitor/commit/b2d771926a180e60deea31992d7d4abcd5ca3bc7))

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - "every weekday before 11am"
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Never, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/ionic-team/ionic-framework).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNTkuMiIsInVwZGF0ZWRJblZlciI6IjQzLjE1OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) | Type |
Update |
|---|---|---|---|---|---|
|
[@axe-core/playwright](https://redirect.github.com/dequelabs/axe-core-npm)
| [`^4.11.1` →
`^4.11.3`](https://renovatebot.com/diffs/npm/@axe-core%2fplaywright/4.11.1/4.11.3)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@axe-core%2fplaywright/4.11.3?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@axe-core%2fplaywright/4.11.1/4.11.3?slim=true)
| devDependencies | patch |
| [@playwright/test](https://playwright.dev)
([source](https://redirect.github.com/microsoft/playwright)) |
[`^1.58.2` →
`^1.59.1`](https://renovatebot.com/diffs/npm/@playwright%2ftest/1.58.2/1.59.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@playwright%2ftest/1.59.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@playwright%2ftest/1.58.2/1.59.1?slim=true)
| devDependencies | minor |
| mcr.microsoft.com/playwright | `v1.58.2` → `v1.59.1` |
![age](https://developer.mend.io/api/mc/badges/age/docker/mcr.microsoft.com%2fplaywright/v1.59.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/mcr.microsoft.com%2fplaywright/v1.58.2/v1.59.1?slim=true)
| final | minor |

---

### Release Notes

<details>
<summary>dequelabs/axe-core-npm (@&#8203;axe-core/playwright)</summary>

###
[`v4.11.3`](https://redirect.github.com/dequelabs/axe-core-npm/compare/v4.11.2...25fbfd2a7b4d38fcdca487d393192e811592f1ec)

[Compare
Source](https://redirect.github.com/dequelabs/axe-core-npm/compare/v4.11.2...v4.11.3)

###
[`v4.11.2`](https://redirect.github.com/dequelabs/axe-core-npm/releases/tag/v4.11.2):
Release 4.11.2

[Compare
Source](https://redirect.github.com/dequelabs/axe-core-npm/compare/v4.11.1...v4.11.2)

##### Bug Fixes

- Update axe-core to v4.11.3
([#&#8203;1306](https://redirect.github.com/dequelabs/axe-core-npm/issues/1306))
([71c4179](https://redirect.github.com/dequelabs/axe-core-npm/commit/71c41796f4cdf2aebcb5e49d1bf6896f4ad72a2a))
- **wdio:** support v9 wdio switchFrame and switchWindow
([#&#8203;1302](https://redirect.github.com/dequelabs/axe-core-npm/issues/1302))
([4689273](https://redirect.github.com/dequelabs/axe-core-npm/commit/4689273aead05133e161fe1d419a60224763ed7c)),
closes
[#&#8203;1164](https://redirect.github.com/dequelabs/axe-core-npm/issues/1164)

</details>

<details>
<summary>microsoft/playwright (@&#8203;playwright/test)</summary>

###
[`v1.59.1`](https://redirect.github.com/microsoft/playwright/compare/v1.59.0...d466ac5358cae058cdc75d2ae3ab3ad220042730)

[Compare
Source](https://redirect.github.com/microsoft/playwright/compare/v1.59.0...v1.59.1)

###
[`v1.59.0`](https://redirect.github.com/microsoft/playwright/compare/v1.58.2...01b2b1533e0bfa1c582117e3ec109fcb57657747)

[Compare
Source](https://redirect.github.com/microsoft/playwright/compare/v1.58.2...v1.59.0)

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - "every weekday before 11am"
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Never, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/ionic-team/ionic-framework).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNTkuMiIsInVwZGF0ZWRJblZlciI6IjQzLjE1OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: ionitron <hi@ionicframework.com>
Co-authored-by: Maria Hutt <thetaPC@users.noreply.github.com>
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.3`
→
`8.3.4`](https://renovatebot.com/diffs/npm/@capacitor%2fcore/8.3.3/8.3.4)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fcore/8.3.4?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fcore/8.3.3/8.3.4?slim=true)
|

---

### Release Notes

<details>
<summary>ionic-team/capacitor (@&#8203;capacitor/core)</summary>

###
[`v8.3.4`](https://redirect.github.com/ionic-team/capacitor/blob/HEAD/CHANGELOG.md#834-2026-05-12)

[Compare
Source](https://redirect.github.com/ionic-team/capacitor/compare/8.3.3...8.3.4)

**Note:** Version bump only for package capacitor

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - "every weekday before 11am"
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Never, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/ionic-team/ionic-framework).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNzMuNiIsInVwZGF0ZWRJblZlciI6IjQzLjE3My42IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
@github-actions github-actions Bot added package: core @ionic/core package package: angular @ionic/angular package package: vue @ionic/vue package package: react @ionic/react package labels May 13, 2026
@thetaPC thetaPC marked this pull request as ready for review May 13, 2026 21:51
@thetaPC thetaPC requested a review from a team as a code owner May 13, 2026 21:51
@thetaPC thetaPC requested review from OS-jacobbell and removed request for a team May 13, 2026 21:51
@thetaPC thetaPC merged commit 6b5e50e into 8.8.x May 13, 2026
98 checks passed
@thetaPC thetaPC deleted the release-8.8.7 branch May 13, 2026 21:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

package: angular @ionic/angular package package: core @ionic/core package package: react @ionic/react package package: vue @ionic/vue package

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants