Commit Graph

14559 Commits

Author SHA1 Message Date
ShaneK
640f430ecc fix(react-router): cancel in-flight rAFs and MutationObserver on StackManager unmount 2026-03-11 10:01:17 -07:00
ShaneK
0b1af4fdcb fix(react-router): add useCallback to HashRouter and MemoryRouter for consistency with BrowserRouter 2026-03-11 09:36:20 -07:00
ShaneK
5016e33628 fix(react-router): prevent parameterized routes from catching multi-segment paths meant for wildcards 2026-03-11 09:15:42 -07:00
ShaneK
cfed206e28 fix(react-router): use reRender callback in getChildrenToRender to clean up stale views 2026-03-11 07:56:25 -07:00
ShaneK
7196910b1b fix(react-router): push to forwardStack on non-linear POP so browser forward works 2026-03-11 06:28:09 -07:00
ShaneK
97d35179ba fix(react-router): fix wildcard route reuse preventing navigation to specific routes after back 2026-03-11 04:45:59 -07:00
ShaneK
8ea275b555 fix(react-router): use stored parent paths for index route matching in findViewItemByPath 2026-03-10 14:03:25 -07:00
ShaneK
6a681e480a test(nested-params): adding extra coverage for deeply nested routing 2026-03-10 13:20:51 -07:00
ShaneK
a864822477 fix(react-router): forward index and caseSensitive props through IonRoute 2026-03-10 13:10:55 -07:00
ShaneK
0ff44ec629 fix(react-router): fix dead code in handleNavigateBack breaking browser forward button 2026-03-10 12:53:58 -07:00
ShaneK
f98be5dfcc fix(react-router): include search params in navigation change detection 2026-03-10 12:37:57 -07:00
ShaneK
f9c0eb8a89 fix(tabs-similar-prefixes): migrating to rr6 2026-03-10 11:20:16 -07:00
ShaneK
b5ff48d248 fix(react-router): use location keys for forward detection and prevent overlap in nested outlets 2026-03-10 11:07:51 -07:00
ShaneK
28f94d8761 fix(react-router): distinguish browser forward from back in POP events 2026-03-09 11:28:49 -07:00
ShaneK
a9f94ec0d1 fix(react-router): hide all views in outlet for container route transitions, allowing navigation to pages not properly wrapped in ion-pages 2026-03-05 13:38:21 -08:00
ShaneK
073c8ba809 chore(git): merging from main, v8.8.0 2026-03-05 12:16:08 -08:00
Shane
18868640ee chore(git): sync main (#30994)
This PR just serves to update major-9.0 to reflect the current state of
main
2026-03-05 11:39:20 -08:00
David Lourenço
0e76a69370 fix(accordion): update tabindex based on disabled state (#30986)
Issue number: resolves internal

---------

## What is the current behavior?
When an accordion item was set as disabled, it was still possible to
focus using keyboard navigation.

## What is the new behavior?
When an accordion item is disabled, `tabindex` is set as -1 to stop
being focusable using the keyboard navigation.

## Does this introduce a breaking change?

- [ ] Yes
- [ ] No

## Other information


[preview](https://ionic-framework-qznd9tqne-ionic1.vercel.app/src/components/accordion-group/test/states/)

---------

Co-authored-by: Maria Hutt <maria.hutt@outsystems.com>
2026-03-05 18:45:32 +00:00
Shane
366f00e25f feat(toast): add wrapper and content parts (#30992)
Issue number: resolves #30735

---------

## What is the current behavior?
Toast's wrapper and content divs do not have part attributes.

## What is the new behavior?
- Adds `wrapper` and `content` parts to Toast.

## 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

This PR was originally opened by @Hurubon here in #30737. It was lost in
`feature-8.8` due to a bad merge, so this PR is to re-apply this feature
so it can go out in 8.8.1 (it was originally supposed to go out in
8.8.0)

Co-authored-by: Hurubon <58346722+Hurubon@users.noreply.github.com>

Co-authored-by: Hurubon <58346722+Hurubon@users.noreply.github.com>
2026-03-05 16:34:20 +00:00
ShaneK
70da68cf86 refactor(react): remove IonRedirect and update BREAKING.md for React Router v6 2026-03-04 13:33:11 -08:00
Brandy Smith
d36aef38a8 merge release-8.8.0 (#30989)
v8.8.0
2026-03-04 16:10:22 -05:00
ionitron
1de6b7a1cb chore(): update package lock files 2026-03-04 20:45:22 +00:00
ionitron
32ab505363 v8.8.0 v8.8.0 2026-03-04 20:43:44 +00:00
Brandy Smith
818c138633 chore: merge main (#30988) 2026-03-04 15:33:15 -05:00
Brandy Smith
af0949f5bb Merge branch 'main' into update-from-main 2026-03-04 15:16:31 -05:00
Maria Hutt
d29ac713fa feat(modal): add drag events for sheet and card modals (#30962)
Issue number: internal

---------

## What is the current behavior?
The sheet and card modal can be dragged to view content. However, there
are no events that determine when drag has started or ended.

## What is the new behavior?
- Added drag events for sheet and card modal: `ionDragStart`, `ionDragMove`, `ionDragEnd`
- Added a drag interface
- Added tests

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

---------

Co-authored-by: Shane <shane@shanessite.net>
Co-authored-by: Brandy Smith <brandyscarney@users.noreply.github.com>
2026-03-04 14:53:50 -05:00
Brandy Smith
5bcf921841 feat(range): add classes and expose parts to allow individual styling of dual knobs (#30941)
Issue number: resolves #29862

---------

## What is the current behavior?
Range exposes a single part for both knobs & pins. This makes it impossible to style the knobs/pins differently when dual knobs is enabled.

## What is the new behavior?
- Fixes a bug where the knobs would swap A & B when they cross over each other
- Fixes the focus behavior so that dual knobs act the same as a single knob range when focusing a knob
- Adds the following classes to the host element when `dualKnobs` is enabled:
  - `range-dual-knobs`
  - `range-pressed-a` when the knob with name A is pressed
  - `range-pressed-b` when the knob with name B is pressed
  - `range-pressed-lower` when the lower knob is pressed
  - `range-pressed-upper` when the upper knob is pressed
- Adds parts for the following:
  - `knob-handle-a` — The container for the knob with the static `A` identity when `dualKnobs` is `true`. This identity does not change, even if the knobs cross and swap which one represents the lower or upper value.
  - `knob-handle-b` — The container for the knob with the static `B` identity when `dualKnobs` is `true`. This identity does not change, even if the knobs cross and swap which one represents the lower or upper value.
  - `knob-handle-lower` — The container for the knob whose current `value` is `lower` when `dualKnobs` is `true`. The lower and upper parts swap which knob handle they refer to when the knobs cross.
  - `knob-handle-upper` — The container for the knob whose current `value` is `upper` when `dualKnobs` is `true`. The lower and upper parts swap which knob handle they refer to when the knobs cross.
  - `pin-a` — The value indicator above the knob with the static `A` identity when `dualKnobs` is `true`. This identity does not change, even if the knobs cross and swap which one represents the lower or upper value.
  - `pin-b` — The value indicator above the knob with the static `B` identity when `dualKnobs` is `true`. This identity does not change, even if the knobs cross and swap which one represents the lower or upper value.
  - `pin-lower` — The value indicator above the knob whose current `value` is `lower` when `dualKnobs` is `true`. The lower and upper parts swap which pin they refer to when the knobs cross.
  - `pin-upper` — The value indicator above the knob whose current `value` is `upper` when `dualKnobs` is `true`. The lower and upper parts swap which pin they refer to when the knobs cross.
  - `knob-a` — The visual knob for the static `A` identity when `dualKnobs` is `true`. This identity does not change, even if the knobs cross and swap which one represents the lower or upper value.
  - `knob-b` — The visual knob for the static `B` identity when `dualKnobs` is `true`. This identity does not change, even if the knobs cross and swap which one represents the lower or upper value.
  - `knob-lower` — The visual knob whose current `value` is `lower` when `dualKnobs` is `true`. The lower and upper parts swap which knob they refer to when the knobs cross.
  - `knob-upper` — The visual knob whose current `value` is `upper` when `dualKnobs` is `true`. The lower and upper parts swap which knob they refer to when the knobs cross.
  - `activated` — Added to the knob-handle, knob, and pin when the knob is active. Only one set has this part at a time when `dualKnobs` is `true`.
  - `focused` — Added to the knob-handle, knob, and pin that currently has focus. Only one set has this part at a time when `dualKnobs` is `true`.
  - `hover` — Added to the knob-handle, knob, and pin when the knob has hover. Only one set has this part at a time when `dualKnobs` is `true`.
  - `pressed` — Added to the knob-handle, knob, and pin that is currently being pressed to drag. Only one set has this part at a time when `dualKnobs` is `true`.
- Adds e2e tests for the following:
  - customizing label part
  - customizing bar parts
  - customizing pin parts
  - customizing tick parts
  - customizing knob parts
  - customizing dual knob a & b parts
  - customizing dual knob lower & upper parts
- verifies that a & b parts stay on the original elements but lower & upper parts swap when the values swap
- Adds spec tests for the following:
  - css classes
    - value state classes
    - boolean property classes
    - pressed state classes
  - shadow parts
    - static shadow parts
- verifies the shadow parts exist based on the existence of certain range properties
  - state shadow parts
- verifies the shadow parts exist based on the state of the range knob (pressed, focused, activated, hover)

## Does this introduce a breaking change?
- [ ] Yes
- [x] No

---------

Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com>
2026-03-04 10:36:50 -05:00
Brandy Smith
ef73476e08 feat(list-header): add inner part (#30930)
Issue number: N/A

---------

## What is the current behavior?
The inner structural element of list-header is not exposed as a shadow part, preventing users from being able to customize its styles directly.

## What is the new behavior?
- Exposes `inner` shadow part
- Adds e2e test coverage for customizing the shadow part

## Does this introduce a breaking change?
- [ ] Yes
- [x] No

---------

Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com>
2026-02-27 13:40:42 -05:00
Brandy Smith
f8f7ffda31 feat(item-option): add inner and container parts (#30929)
Issue number: N/A

---------

## What is the current behavior?
The inner structural elements of item-option are not exposed as shadow parts, preventing users from being able to customize their styles directly.

## What is the new behavior?
- Exposes `inner` and `container` shadow parts
- Adds e2e test coverage for customizing the shadow parts

## Does this introduce a breaking change?
- [ ] Yes
- [x] No

---------

Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com>
2026-02-27 13:26:01 -05:00
Brandy Smith
5cdeb7fd35 feat(item-divider): add inner and container parts (#30928)
Issue number: N/A

---------

## What is the current behavior?
The inner structural elements of item-divider are not exposed as shadow parts, preventing users from being able to customize their styles directly.

## What is the new behavior?
- Exposes `inner` and `container` shadow parts
- Adds e2e test coverage for customizing the shadow parts

## Does this introduce a breaking change?
- [ ] Yes
- [x] No

---------

Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com>
2026-02-27 12:53:49 -05:00
OS-jacobbell
2be39da9d3 docs(stencil): document externalRuntime: false in config (#30975)
## Does this introduce a breaking change?

- [ ] Yes
- [X] No
2026-02-27 16:22:36 +00:00
Brandy Smith
a2c655923b feat(item): add inner and container parts (#30927)
Issue number: N/A

---------

## What is the current behavior?
The inner structural elements of item are not exposed as shadow parts, preventing users from being able to customize their styles directly.

## What is the new behavior?
- Exposes `inner` and `container` shadow parts
- Adds e2e test coverage for customizing the shadow parts
- Removes css variables test, combining it with the shadow parts test

## Does this introduce a breaking change?
- [ ] Yes
- [x] No

---------

Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com>
2026-02-27 11:18:27 -05:00
Brandy Smith
1d7b28694e docs(core): add guidelines for naming CSS shadow parts (#30931)
Adds guidelines document establishing standardized naming conventions for CSS Shadow Parts in Ionic Framework components.

---------

Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com>
2026-02-27 10:59:46 -05:00
Brandy Smith
90858582a6 merge release-8.7.18 (#30971)
v8.7.18
2026-02-25 15:11:47 -05:00
ionitron
abdf9ce932 chore(): update package lock files 2026-02-25 17:14:12 +00:00
ionitron
f68ce9456a v8.7.18 v8.7.18 2026-02-25 17:12:35 +00:00
renovate[bot]
0c715700b2 chore(deps): update capacitor to v8.0.1 (#30970)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[@capacitor/haptics](https://redirect.github.com/ionic-team/capacitor-haptics)
| [`8.0.0` →
`8.0.1`](https://renovatebot.com/diffs/npm/@capacitor%2fhaptics/8.0.0/8.0.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fhaptics/8.0.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fhaptics/8.0.0/8.0.1?slim=true)
|
|
[@capacitor/keyboard](https://redirect.github.com/ionic-team/capacitor-keyboard)
| [`8.0.0` →
`8.0.1`](https://renovatebot.com/diffs/npm/@capacitor%2fkeyboard/8.0.0/8.0.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fkeyboard/8.0.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fkeyboard/8.0.0/8.0.1?slim=true)
|

---

### Release Notes

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

###
[`v8.0.1`](https://redirect.github.com/ionic-team/capacitor-haptics/blob/HEAD/CHANGELOG.md#801-2026-02-24)

[Compare
Source](https://redirect.github.com/ionic-team/capacitor-haptics/compare/v8.0.0...v8.0.1)

##### Bug Fixes

- **android:** AGP 9.0 no longer supporting `proguard-android.txt`
([#&#8203;21](https://redirect.github.com/ionic-team/capacitor-haptics/issues/21))
([797ccbe](797ccbe5b8))

</details>

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

###
[`v8.0.1`](https://redirect.github.com/ionic-team/capacitor-keyboard/blob/HEAD/CHANGELOG.md#801-2026-02-24)

[Compare
Source](https://redirect.github.com/ionic-team/capacitor-keyboard/compare/v8.0.0...v8.0.1)

##### Bug Fixes

- **android:** AGP 9.0 no longer supporting `proguard-android.txt`
([#&#8203;47](https://redirect.github.com/ionic-team/capacitor-keyboard/issues/47))
([e9b1ad9](e9b1ad9b96))

</details>

---

### 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 these
updates again.

---

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

---

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

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4zMi4wIiwidXBkYXRlZEluVmVyIjoiNDMuMzIuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-25 16:22:27 +00:00
Maria Hutt
d46b0b15f6 fix(datetime): stretch ion-buttons to fill space for ios (#30963)
Issue number: N/A

---------

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

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

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

The `iOS` datetime buttons do not stretch to its available height. This
can lead to style inconsistencies with `md`.

<img width="926" height="444" alt="Screenshot 2026-02-23 at 10 35 10 AM"
src="https://github.com/user-attachments/assets/79835a34-5039-4ed8-8ce8-fbb696258052"
/>


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

- The buttons fill in the available height.

<img width="359" height="362" alt="Screenshot 2026-02-23 at 10 37 18 AM"
src="https://github.com/user-attachments/assets/362410eb-ec0b-46c3-87c5-e92af659830d"
/>

- The arrows also line up with each other.

<img width="806" height="590" alt="Screenshot 2026-02-23 at 10 30 17 AM"
src="https://github.com/user-attachments/assets/31ab043c-858e-498b-a947-1f08bb6fb7a1"
/>


## 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. -->


[Preview](https://ionic-framework-git-datetime-ios-buttons-ionic1.vercel.app/src/components/datetime/test/basic/?ionic%3Amode=ios)

---------

Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com>
2026-02-23 21:29:03 +00:00
Maria Hutt
6ea186d96d feat(datetime): add header parts (#30945)
Co-authored-by: Brandy Smith <brandyscarney@users.noreply.github.com>
2026-02-20 13:36:39 -08:00
OS-jacobbell
23e998b731 chore(deps): update stencil/core to 4.43.0 (#30960)
Stencil core updated to 4.43.0.
2026-02-19 13:27:25 -07:00
OS-jacobbell
682a17ebb7 fix(radio-group): prevent DOMException and NotFoundError when filtering radios (#30958)
resolves #30279 resolves #30359

## What is the current behavior?
While Ionic's `stencil.config.ts` sets `experimentalSlotFixes: true`,
the fixes never get applied at runtime. Ionic is using an external
runtime, so Ionic components import `defineCustomElement` from
`@stencil/core/internal/client` at runtime and this code has no
awareness of the project's stencil configuration.

This leads to a `NotFoundError` (Failed to execute 'removeChild' on
'Node') when filtering or dynamically removing radios in an
`ion-radio-group`. The error occurs because `ion-radio-group` wraps its
slotted content in an internal `<div>`.

## What is the new behavior?
By setting `externalRuntime: false`, Stencil generates a
project-specific file with `defineCustomElement` that components import.
This file has the project's build settings baked in, correctly applying
slot fixes.

Additionally, the internal wrapper `<div>` around the slotted content in
`ion-radio-group` is removed. With slot fixes correctly applied and the
wrapper removed, radios can be filtered or dynamically removed without
triggering `NotFoundError` or `DOMExceptions`.

## Does this introduce a breaking change?

- [ ] Yes
- [X] No

## Other information
External Runtime is enabled by default and designed for projects that
import Stencil components from multiple sources. This is flawed because
those components will not be running with the runtime settings for which
they were made.
2026-02-19 17:03:48 +00:00
Shane
814c2e5ccd feat(refresher): add ionPullStart and ionPullEnd events (#30946)
Issue number: resolves #24524

---------

<!-- 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?
There is no way to know when the refresher has fully returned to its
inactive state after a pull gesture. The existing `ionStart` event fires
when pulling begins, but there is no corresponding end event. Watching
the progress property is insufficient because hitting zero doesn’t
necessarily mean the user has completed the pull gesture.


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

Two new events are added to the refresher component:
- `ionPullStart`: Emitted when the user begins pulling down (same as
`ionStart`, which is now deprecated)
- `ionPullEnd`: Emitted when the refresher returns to inactive state,
with a `reason` property of `'complete'` or `'cancel'` indicating
whether the refresh operation completed successfully or was cancelled

This allows you to know both when the user is no longer touching the
screen AND when the refresher is ready to be pulled again.

## 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. -->

Test page:

https://ionic-framework-git-fw-6591-ionic1.vercel.app/src/components/refresher/test/basic/index.html

Current dev build:
```
8.7.17-dev.11770319814.172b4f50
```

---------

Co-authored-by: Patrick McDonald <764290+WhatsThatItsPat@users.noreply.github.com>
2026-02-19 08:57:48 -08:00
Bengt Weiße
70b1237823 fix(many): clear timeouts (#30851)
Issue number: resolves #30860

## What is the current behavior?
We have flaky tests in an ionic angular project that root cause are not
cleaned up timeouts.
I commented out the timeout in the searchbar componentWillLoad method.
and after several runs no flaky tests at all.

My guess -> test runs faster than the 300ms it takes til the timeout
runs. Everything is cleaned up, but not the ionic timeouts (i think i
saw something similar in other components)

## What is the new behavior?
Timeouts are cleaned on disconnect.

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

## Other information

Testrunner is vitest + angular 20 and latest ionic version 8.x
2026-02-18 10:25:43 +00:00
Maria Hutt
5cea5aeb44 feat(select): add wrapper and bottom shadow parts (#30951) 2026-02-17 12:50:22 -08:00
Shane
53172d1a40 fix(nav-controller): reset direction state when navigation is canceled (#30955)
Issue number: resolves internal

---------

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

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

## What is the current behavior?
When a CanDeactivate guard cancels a back navigation (like when it's
initiated by ion-back-button), the NavController’s explicit direction
state (back) is never consumed because consumeTransition() is not called
for canceled navigations. This stale direction leaks into the next
forward navigation, causing it to be incorrectly treated as a back/root
navigation.

## What is the new behavior?
The NavController now listens for NavigationCancel and NavigationError
router events and resets direction, animated, and animationBuilder back
to their defaults. This ensures stale state from a canceled navigation
does not affect subsequent navigations. The reset puts the NavController
into 'auto' mode, which correctly uses guessDirection for the next
navigation.

## 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

Current dev build:
```
8.7.18-dev.11771020096.1ca03a6d
```
2026-02-17 17:37:54 +00:00
Shane
6490797851 fix(modal, popover): respect safe area insets on popovers and modals (#30949)
Issue number: resolves #28411

---------

<!-- 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?
When a modal is displayed on tablet-sized screens (>= 768px × >= 600px),
the `--ion-safe-area-*` CSS variables are explicitly set to 0px. This
was intended for inset modals that don't touch screen edges, but it
breaks safe area handling on newer iPads with Face ID/home indicators,
causing content to overlap with system UI elements.

## What is the new behavior?
Modals now dynamically handle safe-area insets based on their type and
position. This has to be done because modals that don't touch the edges
cannot have a safe area applied (because it will add unnecessary
padding), but modals that do touch the edges need to apply safe area
correctly or the edges will be obstructed by whatever is in the safe
area.

## 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. -->

[Modals test
page](https://ionic-framework-git-fw-6830-2-ionic1.vercel.app/src/components/modal/test/safe-area/index.html)
[Popovers test
page](https://ionic-framework-git-fw-6830-2-ionic1.vercel.app/src/components/popover/test/safe-area/index.html)

Current dev build:
```
8.7.18-dev.11770674094.18396f54
```

---------

Co-authored-by: ionitron <hi@ionicframework.com>
2026-02-13 19:41:39 +00:00
renovate[bot]
c8a65dcd7e chore(deps): update dependency @capacitor/status-bar to v8.0.1 (#30954)
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[@capacitor/status-bar](https://redirect.github.com/ionic-team/capacitor-plugins)
| [`8.0.0` →
`8.0.1`](https://renovatebot.com/diffs/npm/@capacitor%2fstatus-bar/8.0.0/8.0.1)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fstatus-bar/8.0.1?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fstatus-bar/8.0.0/8.0.1?slim=true)
|

---

### Release Notes

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

###
[`v8.0.1`](https://redirect.github.com/ionic-team/capacitor-plugins/compare/@capacitor/splash-screen@8.0.0...bf4fe8c9ace79237c048c9b5ee0ab7455042bc86)

[Compare
Source](https://redirect.github.com/ionic-team/capacitor-plugins/compare/@capacitor/status-bar@8.0.0...@capacitor/status-bar@8.0.1)

</details>

---

### 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.

---

- [ ] <!-- 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:eyJjcmVhdGVkSW5WZXIiOiI0My44LjUiLCJ1cGRhdGVkSW5WZXIiOiI0My44LjUiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-13 18:12:03 +00:00
renovate[bot]
a1fa50b8e2 chore(deps): update dependency @capacitor/core to v8.1.0 (#30953)
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.0.2`
→
`8.1.0`](https://renovatebot.com/diffs/npm/@capacitor%2fcore/8.0.2/8.1.0)
|
![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fcore/8.1.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fcore/8.0.2/8.1.0?slim=true)
|

---

### Release Notes

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

###
[`v8.1.0`](https://redirect.github.com/ionic-team/capacitor/blob/HEAD/CHANGELOG.md#810-2026-02-11)

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

##### Bug Fixes

- **cookies:** only send expires param on web if a date is set
([b10cd7f](b10cd7ff15))

##### Features

- **cli:** Add packageManager to iOS config
([#&#8203;8321](https://redirect.github.com/ionic-team/capacitor/issues/8321))
([a125498](a1254983bb))

##### Reverts

- revert version bump from
[#&#8203;8319](https://redirect.github.com/ionic-team/capacitor/issues/8319)
and
[#&#8203;8320](https://redirect.github.com/ionic-team/capacitor/issues/8320)
([a48ebb6](a48ebb622e))

####
[8.0.2](https://redirect.github.com/ionic-team/capacitor/compare/8.0.1...8.0.2)
(2026-01-27)

##### Bug Fixes

- **android:** AGP 9.0 no longer supports `proguard-android.txt`
([#&#8203;8315](https://redirect.github.com/ionic-team/capacitor/issues/8315))
([dcc76c3](dcc76c3750))
- **cli:** Update tar package
([#&#8203;8311](https://redirect.github.com/ionic-team/capacitor/issues/8311))
([0969c5c](0969c5cd0b))
- **core:** make SystemBars hide and show options optional
([#&#8203;8305](https://redirect.github.com/ionic-team/capacitor/issues/8305))
([95dc7d8](95dc7d8ace))
- **SystemBars:** get correct style on handleOnConfigurationChanged
([#&#8203;8295](https://redirect.github.com/ionic-team/capacitor/issues/8295))
([2a66b44](2a66b44915))
- **SystemBars:** Set window background color according to theme
([#&#8203;8306](https://redirect.github.com/ionic-team/capacitor/issues/8306))
([6037e38](6037e3836e))
- **SystemBars:** Skipping margin manipulation when on a fixed WebView
([#&#8203;8309](https://redirect.github.com/ionic-team/capacitor/issues/8309))
([53c33b6](53c33b6142))

####
[8.0.1](https://redirect.github.com/ionic-team/capacitor/compare/8.0.0...8.0.1)
(2026-01-13)

##### Bug Fixes

- **android:** Remove calculated bottom inset if keyboard is visible
([#&#8203;8280](https://redirect.github.com/ionic-team/capacitor/issues/8280))
([196b642](196b642236))
- **cli:** Support wireless iOS devices in `cap run`
([#&#8203;8301](https://redirect.github.com/ionic-team/capacitor/issues/8301))
([dcb368c](dcb368c335))
- **cli:** use latest native-run
([#&#8203;8296](https://redirect.github.com/ionic-team/capacitor/issues/8296))
([121d830](121d83013f))

</details>

---

### 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.

---

- [ ] <!-- 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:eyJjcmVhdGVkSW5WZXIiOiI0Mi45Ny4wIiwidXBkYXRlZEluVmVyIjoiNDIuOTcuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-12 21:50:12 +00:00
Bengt Weiße
55735df3fa feat(textarea): reflect disabled and readonly props (#30910)
Co-authored-by: Maria Hutt <maria.hutt@outsystems.com>
2026-02-10 16:24:39 -08:00
Brandy Smith
46806bd6e2 feat(segment-view): add swipeGesture property to disable swiping (#30948)
Issue number: resolves #30290

---------

## What is the current behavior?
The segment view swipe gesture can only be disabled by adding the `disabled` property and setting `opacity: 1`.

## What is the new behavior?
- Adds a new property, `swipeGesture`, to disable swiping on the segment view
- Adds an e2e test which verifies the styles blocking the swipe are correctly applied when `swipeGesture` is `false`

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

---------

Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com>
2026-02-10 09:59:24 -05:00