Skip to content

Commit 7ac8ec7

Browse files
committed
Merge branch 'major-9.0' into FW-7273
2 parents 1f0315e + a35e13d commit 7ac8ec7

389 files changed

Lines changed: 5143 additions & 431 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/assign-issues.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ jobs:
1111
issues: write
1212
steps:
1313
- name: 'Auto-assign issue'
14-
uses: pozil/auto-assign-issue@07fe6dc0e9771842b428f5739098d6140734e226 # v4.0.0
14+
uses: pozil/auto-assign-issue@af6beea6bdf1e8eb373f061c5bc168681fc6d011 # v4.0.1
1515
with:
1616
assignees: brandyscarney, thetaPC, ShaneK
1717
numOfAssignee: 1

BREAKING.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,10 +127,18 @@ The string form no longer behaves the same way. Because an HTML attribute coerce
127127

128128
<h4 id="version-9x-select">Select</h4>
129129

130+
**`ionChange` Only Fires When the Value Changes**
131+
130132
The `ionChange` event on `ion-select` now only fires when the selected value actually changes. Previously, the `alert` and `action-sheet` interfaces emitted `ionChange` every time the overlay was confirmed, even when the user chose the option that was already selected. This aligns the `alert` and `action-sheet` interfaces with the existing behavior of the `popover` and `modal` interfaces, and with the documented contract of `ionChange`.
131133

132134
Apps that relied on `ionChange` firing on every confirmation (for example, to detect overlay dismissal without a value change) should listen for `ionDismiss` instead, or use the `didDismiss` event on the underlying alert or action sheet.
133135

136+
**Action Sheet Interface `selected` Role Removed**
137+
138+
When using `interface="action-sheet"`, `ion-select` no longer assigns the `selected` role to the action sheet button for the currently selected option. This aligns the `action-sheet` interface with the `alert`, `popover`, and `modal` interfaces, none of which assign this role. This does not change the selected option's styling.
139+
140+
Previously, the `selected` role was assigned only to the option matching the select's current value. Because the dismiss role mirrors the tapped button, this surfaced in just one case: re-selecting the already-selected option dismissed the action sheet with `role: "selected"` in `ionActionSheetDidDismiss`. Tapping any other option changed the value and dismissed with `role: ""`. Now that the role is no longer assigned, both cases dismiss with `role: undefined`. Apps that inspected this role to detect that a value was chosen, such as reading `role` from the underlying action sheet's `onDidDismiss` result, should listen for `ion-select`'s `ionChange` event instead, which emits the selected value when the selection changes.
141+
134142
<h2 id="version-9x-framework-specific">Framework Specific</h2>
135143

136144
<h4 id="version-9x-angular">Angular</h4>

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,18 @@
33
All notable changes to this project will be documented in this file.
44
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
55

6+
## [8.8.11](https://github.com/ionic-team/ionic-framework/compare/v8.8.10...v8.8.11) (2026-06-17)
7+
8+
9+
### Bug Fixes
10+
11+
* **react:** remove relocated inline overlays orphaned on unmount ([#31223](https://github.com/ionic-team/ionic-framework/issues/31223)) ([d28d25b](https://github.com/ionic-team/ionic-framework/commit/d28d25b798d32db6148155bb34fdbd13243286d9))
12+
* **searchbar:** fix search icon sometimes being offset incorrectly ([#31212](https://github.com/ionic-team/ionic-framework/issues/31212)) ([3394c30](https://github.com/ionic-team/ionic-framework/commit/3394c305b5141326cc045132507dff62dd0e4dd6)), closes [#30434](https://github.com/ionic-team/ionic-framework/issues/30434)
13+
14+
15+
16+
17+
618
## [8.8.10](https://github.com/ionic-team/ionic-framework/compare/v8.8.9...v8.8.10) (2026-06-10)
719

820

core/CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,17 @@
33
All notable changes to this project will be documented in this file.
44
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
55

6+
## [8.8.11](https://github.com/ionic-team/ionic-framework/compare/v8.8.10...v8.8.11) (2026-06-17)
7+
8+
9+
### Bug Fixes
10+
11+
* **searchbar:** fix search icon sometimes being offset incorrectly ([#31212](https://github.com/ionic-team/ionic-framework/issues/31212)) ([3394c30](https://github.com/ionic-team/ionic-framework/commit/3394c305b5141326cc045132507dff62dd0e4dd6)), closes [#30434](https://github.com/ionic-team/ionic-framework/issues/30434)
12+
13+
14+
15+
16+
617
## [8.8.10](https://github.com/ionic-team/ionic-framework/compare/v8.8.9...v8.8.10) (2026-06-10)
718

819

core/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Get Playwright
2-
FROM mcr.microsoft.com/playwright:v1.60.0
2+
FROM mcr.microsoft.com/playwright:v1.61.0
33

44
# Set the working directory
55
WORKDIR /ionic

core/api.txt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1741,6 +1741,20 @@ ion-select,css-prop,--placeholder-opacity,ios
17411741
ion-select,css-prop,--placeholder-opacity,md
17421742
ion-select,css-prop,--ripple-color,ios
17431743
ion-select,css-prop,--ripple-color,md
1744+
ion-select,css-prop,--select-text-gap,ios
1745+
ion-select,css-prop,--select-text-gap,md
1746+
ion-select,css-prop,--select-text-media-border-color,ios
1747+
ion-select,css-prop,--select-text-media-border-color,md
1748+
ion-select,css-prop,--select-text-media-border-radius,ios
1749+
ion-select,css-prop,--select-text-media-border-radius,md
1750+
ion-select,css-prop,--select-text-media-border-style,ios
1751+
ion-select,css-prop,--select-text-media-border-style,md
1752+
ion-select,css-prop,--select-text-media-border-width,ios
1753+
ion-select,css-prop,--select-text-media-border-width,md
1754+
ion-select,css-prop,--select-text-media-height,ios
1755+
ion-select,css-prop,--select-text-media-height,md
1756+
ion-select,css-prop,--select-text-media-width,ios
1757+
ion-select,css-prop,--select-text-media-width,md
17441758
ion-select,part,bottom
17451759
ion-select,part,container
17461760
ion-select,part,error-text
@@ -1760,7 +1774,11 @@ ion-select-modal,prop,multiple,boolean | undefined,undefined,false,false
17601774
ion-select-modal,prop,options,SelectModalOption[],[],false,false
17611775

17621776
ion-select-option,shadow
1777+
ion-select-option,prop,description,string | undefined,undefined,false,false
17631778
ion-select-option,prop,disabled,boolean,false,false,false
1779+
ion-select-option,prop,justify,"end" | "space-between" | "start" | undefined,undefined,false,false
1780+
ion-select-option,prop,labelPlacement,"end" | "start" | undefined,undefined,false,false
1781+
ion-select-option,prop,mode,"ios" | "md",undefined,false,false
17641782
ion-select-option,prop,value,any,undefined,false,false
17651783

17661784
ion-skeleton-text,shadow

core/package-lock.json

Lines changed: 18 additions & 18 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

core/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@ionic/core",
3-
"version": "8.8.10",
3+
"version": "8.8.11",
44
"description": "Base components for Ionic",
55
"engines": {
66
"node": ">= 16"
@@ -78,7 +78,7 @@
7878
"@capacitor/status-bar": "^8.0.0",
7979
"@ionic/eslint-config": "^0.3.0",
8080
"@ionic/prettier-config": "^2.0.0",
81-
"@playwright/test": "^1.60.0",
81+
"@playwright/test": "^1.61.0",
8282
"@rollup/plugin-node-resolve": "^8.4.0",
8383
"@rollup/plugin-virtual": "^2.0.3",
8484
"@stencil/angular-output-target": "^1.3.2",
@@ -99,7 +99,7 @@
9999
"fs-extra": "^9.0.1",
100100
"jest": "^29.7.0",
101101
"jest-cli": "^29.7.0",
102-
"playwright-core": "^1.60.0",
102+
"playwright-core": "^1.61.0",
103103
"prettier": "^2.6.1",
104104
"rollup": "^2.26.4",
105105
"sass": "^1.33.0",

core/src/components.d.ts

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3143,10 +3143,26 @@ export namespace Components {
31433143
}
31443144
interface IonSelectOption {
31453145
/**
3146-
* If `true`, the user cannot interact with the select option. This property does not apply when `interface="action-sheet"` as `ion-action-sheet` does not allow for disabled buttons.
3146+
* Text that is placed underneath the option text to provide additional details about the option.
3147+
*/
3148+
"description"?: string;
3149+
/**
3150+
* If `true`, the user cannot interact with the select option.
31473151
* @default false
31483152
*/
31493153
"disabled": boolean;
3154+
/**
3155+
* How to pack the label and the option's selection control within a line. `"start"`: The label and radio will appear on the left in LTR and on the right in RTL. `"end"`: The label and radio will appear on the right in LTR and on the left in RTL. `"space-between"`: The label and radio will appear on opposite ends of the line with space between the two elements. Applies to the `alert`, `popover`, and `modal` interfaces, but has no visible effect on radio options in `popover` or `modal` on `md` (the radio control is hidden there). When unset, the interface picks a default based on mode and control type.
3156+
*/
3157+
"justify"?: 'start' | 'end' | 'space-between';
3158+
/**
3159+
* Where the label is placed relative to the option's selection control (radio circle or checkbox box) when the option is rendered in an `alert`, `popover`, or `modal` interface. `"start"`: The label will appear to the left of the radio in LTR and to the right in RTL. `"end"`: The label will appear to the right of the radio in LTR and to the left in RTL. Applies to the `alert`, `popover`, and `modal` interfaces, but has no visible effect on radio options in `popover` or `modal` on `md` (the radio control is hidden there). When unset, the interface picks a default based on mode and control type.
3160+
*/
3161+
"labelPlacement"?: 'start' | 'end';
3162+
/**
3163+
* The mode determines the platform behaviors of the component.
3164+
*/
3165+
"mode"?: "ios" | "md";
31503166
/**
31513167
* The text value of the option.
31523168
*/
@@ -8345,10 +8361,26 @@ declare namespace LocalJSX {
83458361
}
83468362
interface IonSelectOption {
83478363
/**
8348-
* If `true`, the user cannot interact with the select option. This property does not apply when `interface="action-sheet"` as `ion-action-sheet` does not allow for disabled buttons.
8364+
* Text that is placed underneath the option text to provide additional details about the option.
8365+
*/
8366+
"description"?: string;
8367+
/**
8368+
* If `true`, the user cannot interact with the select option.
83498369
* @default false
83508370
*/
83518371
"disabled"?: boolean;
8372+
/**
8373+
* How to pack the label and the option's selection control within a line. `"start"`: The label and radio will appear on the left in LTR and on the right in RTL. `"end"`: The label and radio will appear on the right in LTR and on the left in RTL. `"space-between"`: The label and radio will appear on opposite ends of the line with space between the two elements. Applies to the `alert`, `popover`, and `modal` interfaces, but has no visible effect on radio options in `popover` or `modal` on `md` (the radio control is hidden there). When unset, the interface picks a default based on mode and control type.
8374+
*/
8375+
"justify"?: 'start' | 'end' | 'space-between';
8376+
/**
8377+
* Where the label is placed relative to the option's selection control (radio circle or checkbox box) when the option is rendered in an `alert`, `popover`, or `modal` interface. `"start"`: The label will appear to the left of the radio in LTR and to the right in RTL. `"end"`: The label will appear to the right of the radio in LTR and to the left in RTL. Applies to the `alert`, `popover`, and `modal` interfaces, but has no visible effect on radio options in `popover` or `modal` on `md` (the radio control is hidden there). When unset, the interface picks a default based on mode and control type.
8378+
*/
8379+
"labelPlacement"?: 'start' | 'end';
8380+
/**
8381+
* The mode determines the platform behaviors of the component.
8382+
*/
8383+
"mode"?: "ios" | "md";
83528384
/**
83538385
* The text value of the option.
83548386
*/
@@ -9528,6 +9560,9 @@ declare namespace LocalJSX {
95289560
interface IonSelectOptionAttributes {
95299561
"disabled": boolean;
95309562
"value": string;
9563+
"description": string;
9564+
"labelPlacement": 'start' | 'end';
9565+
"justify": 'start' | 'end' | 'space-between';
95319566
}
95329567
interface IonSelectPopoverAttributes {
95339568
"header": string;

core/src/components/action-sheet/action-sheet.ios.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
@use "../select-option/select-option.ios.overlay";
12
@import "./action-sheet";
23
@import "./action-sheet.ios.vars";
34

0 commit comments

Comments
 (0)