Compare commits

...

39 Commits

Author SHA1 Message Date
Marta Carlos
828470aaed fix(select-modal): hide focus option's border for ionic theme (#30660)
Issue number: resolves internal

---------
## What is the current behavior?
When opening a ion-select with a modal interface, the first option is
focused and, as such, has a border.
This happens because an ion-item is being rendered, which has a specific
styling for focused stated.

## What is the new behavior?
When inside a `ion-select-modal`, we don't want this specific `ion-item`
styling.

## Does this introduce a breaking change?
- [ ] Yes
- [x] No
2025-09-03 11:18:30 +01:00
João Ferreira
f72f753117 fix(accordion): update design and tokens (#30606)
Issue number: internal
---------
## What is the new behavior?
<!-- Please describe the behavior or changes that are being added by
this PR. -->
- update tokens;
- fix item content padding;

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

[basic](https://ionic-framework-git-rou-12135-ionic1.vercel.app/src/components/accordion/test/basic?ionic:theme=ionic)

[states](https://ionic-framework-git-rou-12135-ionic1.vercel.app/src/components/accordion/test/states?ionic:theme=ionic)
[Group
States](https://ionic-framework-git-rou-12135-ionic1.vercel.app/src/components/accordion-group/test/states?ionic:theme=ionic)

---------

Co-authored-by: ionitron <hi@ionicframework.com>
2025-08-08 19:09:57 +01:00
João Ferreira
6a70082d31 fix(avatar): update tokens and fix disable state (#30618)
Issue number: 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 new behavior?
<!-- Please describe the behavior or changes that are being added by
this PR. -->
- improve tokens usage;
- now disable layer respects border-radius;

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

[basic](https://ionic-framework-git-rou-12136-ionic1.vercel.app/src/components/avatar/test/basic?ionic:theme=ionic)

[shape](https://ionic-framework-git-rou-12136-ionic1.vercel.app/src/components/avatar/test/shape?ionic:theme=ionic)

[size](https://ionic-framework-git-rou-12136-ionic1.vercel.app/src/components/avatar/test/size?ionic:theme=ionic)

[states](https://ionic-framework-git-rou-12136-ionic1.vercel.app/src/components/avatar/test/states?ionic:theme=ionic)
2025-08-08 16:12:56 +01:00
João Ferreira
560a791e03 fix(badge): update tokens usage on shapes (#30603)
Issue number: 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 new behavior?
<!-- Please describe the behavior or changes that are being added by
this PR. -->
- improve tokens usage;

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

[shapes](https://ionic-framework-git-rou-12131-ionic1.vercel.app/src/components/badge/test/shape?ionic:theme=ionic)
2025-08-07 18:16:26 +01:00
João Ferreira
feddbf9237 fix(range): update tokens usage, and add pressed state (#30601)
Issue number: 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 new behavior?
<!-- Please describe the behavior or changes that are being added by
this PR. -->
- improve tokens usage;
- increase white space to 44px square;

## 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. -->
-
[Basic](https://ionic-framework-git-rou-12075-ionic1.vercel.app/src/components/range/test/basic?ionic:theme=ionic)
-
[States](https://ionic-framework-git-rou-12075-ionic1.vercel.app/src/components/range/test/states?ionic:theme=ionic)
-
[Custom](https://ionic-framework-git-rou-12075-ionic1.vercel.app/src/components/range/test/custom?ionic:theme=ionic)

---------

Co-authored-by: ionitron <hi@ionicframework.com>
Co-authored-by: Brandy Smith <brandyscarney@users.noreply.github.com>
2025-08-07 17:25:26 +01:00
Brandy Smith
8361fd2405 chore: update from main (#30590) 2025-08-05 18:01:16 -04:00
Brandy Smith
d9eb400a00 test(toolbar): fix flaky tests for toolbar 2025-08-05 17:37:46 -04:00
Brandy Smith
0f2c69804d chore(): add updated snapshots 2025-08-05 12:52:37 -04:00
Brandy Smith
a934e48315 Merge branch 'main' into chore/update-next-from-main 2025-08-04 18:56:38 -04:00
Shane
a2e803a553 fix(tabs): add fallback to select tab if router integration fails (#30599)
Issue number: resolves #30552

---------

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

Something caused a timing shift in v8.6.0 that messed up the timing
required for react router to set the active tab ID. Currently, when the
router goes to set the tab ID, it's possibly too early and the tab may
not exist yet, causing it to go unset.

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

This PR is a workaround that allows tabs to check when they're rendered
if a tab should be selected as a fallback for the router not setting
them. I don't think the tabs, in the long run, should be responsible for
this, but I think this is a good intermediate step until the upcoming
react router upgrade, when we can look into a better solution for react
router that may require less timing precision.

This PR also adds regression tests for React to make sure this doesn't
happen again without getting noticed.

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

**Current dev build:**
```
8.7.2-dev.11754338216.1a548096
```
2025-08-04 22:08:04 +00:00
Brandy Smith
56265e35d1 test(core): fix flaky datetime and input-otp tests (#30598)
This fixes the flaky/failing tests here:

`should not have visual regressions with a custom styled calendar`
<img width="1658" height="916" alt="CleanShot 2025-08-04 at 13 46 12@2x"
src="https://github.com/user-attachments/assets/b5d54ee8-b315-4db0-b09b-65d9cd2fa7ca"
/>

`should switch the calendar header when moving to a month with a
different number of days`
<img width="2104" height="1752" alt="CleanShot 2025-08-04 at 13 45
33@2x"
src="https://github.com/user-attachments/assets/8a0cdb0b-6e9d-4b5c-a2df-f9174431492b"
/>

You can run them locally using:

- `npm run test.e2e.docker src/components/datetime/test/datetime.e2e.ts
-- --repeat-each=10`
- `npm run test.e2e.docker
src/components/datetime/test/custom/datetime.e2e.ts -- --repeat-each=10`

---------

Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com>
2025-08-04 21:23:45 +00:00
renovate[bot]
95a7d710e7 chore(deps): update dependency chalk to v5.5.0 (#30597)
This PR contains the following updates:

| Package | Change | Age | Confidence |
|---|---|---|---|
| [chalk](https://redirect.github.com/chalk/chalk) | [`5.4.1` ->
`5.5.0`](https://renovatebot.com/diffs/npm/chalk/5.4.1/5.5.0) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/chalk/5.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/chalk/5.4.1/5.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>chalk/chalk (chalk)</summary>

###
[`v5.5.0`](https://redirect.github.com/chalk/chalk/compare/v5.4.1...67db246ae0a2bbcc57c190d641c5d767e5275160)

[Compare
Source](https://redirect.github.com/chalk/chalk/compare/v5.4.1...v5.5.0)

</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:eyJjcmVhdGVkSW5WZXIiOiI0MS41MS4xIiwidXBkYXRlZEluVmVyIjoiNDEuNTEuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-04 15:59:56 +00:00
Brandy Smith
a00a389df7 merge release-8.7.1 (#30588)
v8.7.1
2025-07-31 12:24:41 -04:00
Brandy Smith
a62d382171 docs(changelog): include stencil update 2025-07-31 12:00:21 -04:00
ionitron
8d39ea0c6e chore(): update package lock files 2025-07-31 15:56:19 +00:00
ionitron
e4c042834c v8.7.1 2025-07-31 15:55:42 +00:00
Brandy Smith
6203b88b9f chore(deps): update @stencil/core to v4.36.2 (#30587)
Issue number: resolves #30565

---------

## What is the current behavior?
Stencil is on v4.33.1

## What is the new behavior?
- Updates Stencil to v4.36.2
- Updates `children` references to `__children` in `reorder-group`

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

## Other information

I searched through the repository for other components that may be
affected but did not find any.

Dev build: `8.7.1-dev.11753971948.1b297d94`
Reorder Example using dev build:
[StackBlitz](https://stackblitz.com/edit/5nrzhbja)
Router Example using dev build:
[StackBlitz](https://stackblitz.com/edit/rvpcflzx)

---------

Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com>
2025-07-31 15:35:43 +00:00
rug
9547a9e380 chore(deps): update outsystems design tokens package (#30586)
Updating outsystems-design-tokens reference. This package removes the
Inter font from being the default font, and replaced it with the
respective system fonts.

## What is the current behavior?
<!-- Please describe the current behavior that you are modifying. -->
The default font was Inter, that had to be loaded from Google CDN,
causing CSP problems with default rules.

## What is the new behavior?
<!-- Please describe the behavior or changes that are being added by
this PR. -->
- Update to latest version of `outsystems-design-tokens` that no longer
uses the Inter font.

## 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. -->
2025-07-31 17:24:49 +02:00
Brandy Smith
fdb77960ad merge release-8.7.0 (#30583)
v8.7.0
2025-07-30 17:23:36 -04:00
ionitron
227d637998 chore(): update package lock files 2025-07-30 21:05:52 +00:00
ionitron
cbb4ad5683 v8.7.0 2025-07-30 21:05:10 +00:00
Brandy Smith
75f6c05fb9 feat(css): add new css utility classes for display and flex utils (#30567)
Issue number: resolves #22469

---------

- Adds new responsive display classes with the following values: `none`, `inline`, `inline-block`, `block`, `flex`, `inline-flex`, `grid`, `inline-grid`, `table`, `table-cell`, `table-row`
- Adds new responsive flex util classes for the following properties: `align-content`, `align-items`, `align-self`, `justify-content`, `flex-direction`, `flex-wrap`, `flex`, `flex-grow` , `flex-shrink`, `order`
- Adds e2e tests to verify the correct classes are in the CSS files

---------

Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com>
2025-07-30 16:45:45 -04:00
Brandy Smith
d5627c7368 feat(datetime): add border property to highlightedDates (#30534)
Issue number: resolves #29833

---------

- Adds the `border` property for customizing the border of highlighted dates
- Adds the `border` to the e2e test for highlightedDates
- Updates screenshots

---------

Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com>
2025-07-30 16:45:38 -04:00
Christian Bromann
74cd71af24 feat(deps): update ionicons to v8 (#30390)
Issue number: resolves #30445

---------

Updates all packages to use the latest version of Ionicons v8

---------

Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com>
2025-07-30 16:45:20 -04:00
Shane
30d1910d6e feat(modal): add IonModalToken for injecting modal elements in Angular components (#30474)
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?
<!-- Please describe the current behavior that you are modifying. -->

Currently, we provide no injection access to angular modals, which makes
it difficult to connect to their events normally.

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

This is an attempt to allow easier programmatic access to the internals
of injected modals.

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

Dev build: `8.6.2-dev.11749830167.1460aa73`
2025-07-30 16:43:02 -04:00
Brandy Smith
b154f4ed09 feat(reorder-group): add ionReorderStart, ionReorderMove, ionReorderEnd events (#30471)
Issue number: resolves #23148 resolves #27614

---------

The `ion-reorder-group` only emits an `ionItemReorder` event when the reorder gesture ends AND the item position has changed. There is no way to listen for when the gesture starts, is actively moving, or ends without the item changing position.

- Adds an `ionReorderStart` event that is fired without any details on the start of the gesture.
- Adds an `ionReorderMove` event that is fired continuously during gesture move and includes the `from` and `to` detail.
- Adds an `ionReorderEnd` event that is fired at the end of the gesture and always includes the `from` and `to` detail, even if they are the same.
- Deprecates the `ionItemReorder` event, recommending to use the `ionReorderEnd` instead.

- [ ] Yes
- [x] No

While this does not introduce a breaking change, it does deprecate the `ionItemReorder` event in favor of the `ionReorderEnd` event. This event behaves a bit differently since it is always emitted on end. If the `from` and `to` are the same, it will still emit them, so it's possible to check if they are the same to determine if `ionReorderEnd` fired without moving item positions.

----

Co-authored-by: sfinktah <sfinktah@github.spamtrak.org>
Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com>
2025-07-30 16:42:53 -04:00
Brandy Smith
d25b8a34f2 merge release-8.6.7 (#30580)
v8.6.7
2025-07-30 16:40:34 -04:00
Brandy Smith
244f9a1dd6 docs(changelog): add in deps updates 2025-07-30 16:22:23 -04:00
ionitron
ffcf5d0268 chore(): update package lock files 2025-07-30 20:15:16 +00:00
ionitron
759147fab6 v8.6.7 2025-07-30 20:14:30 +00:00
Brandy Smith
dc713167f9 chore(deps): downgrade Stencil to v4.33.1 (#30579)
A major regression related to Reorder was found in Stencil v4.36. Downgrade Stencil until this can be resolved.

Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com>
2025-07-30 16:07:32 -04:00
Brandy Smith
0f7dd51767 merge release-8.6.6 (#30575)
v8.6.6
2025-07-30 14:40:27 -04:00
Brandy Smith
31c5416a51 docs(changelog): include stencil version bump 2025-07-30 14:18:12 -04:00
ionitron
baed34722b chore(): update package lock files 2025-07-30 18:12:14 +00:00
ionitron
708d5845b9 v8.6.6 2025-07-30 18:11:38 +00:00
Shane
344a43feca feat(infinite-scroll): adding preserveRerenderScrollPosition property (#30566)
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?
<!-- Please describe the current behavior that you are modifying. -->

Currently, if you use infinite scroll and fully change out elements in
the DOM, you'll lose your scroll position. This can present as a race
condition in some frameworks, like React, but will present pretty
consistently in vanilla JavaScript. This happens because the browser is
removing the old elements from the DOM and adding the new ones, and
during that time the container holding the old elements will shrink and
the browser will adjust the top position to be the maximum of the new
container height.

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

With this new property (`preserveRerenderScrollPosition`) set, we will
loop through siblings of the infinite scroll and set their min-heights
to be their current heights before triggering the `ionInfinite` event,
then we clean up after complete is called by restoring their previous
min-heights or setting them to auto if there were none. This prevents
the container from resizing and the browser from losing the scroll
position.

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

**Current dev build**: 
```
8.6.6-dev.11753719591.13a5c65f
```
2025-07-30 10:23:00 -07:00
renovate[bot]
5780a95a9c chore(deps): update dependency @stencil/core to v4.36.2 (#30574)
This PR contains the following updates:

| Package | Change | Age | Confidence |
|---|---|---|---|
| [@stencil/core](https://stenciljs.com/)
([source](https://redirect.github.com/stenciljs/core)) | [`4.36.1` ->
`4.36.2`](https://renovatebot.com/diffs/npm/@stencil%2fcore/4.36.1/4.36.2)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@stencil%2fcore/4.36.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@stencil%2fcore/4.36.1/4.36.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>stenciljs/core (@&#8203;stencil/core)</summary>

###
[`v4.36.2`](https://redirect.github.com/stenciljs/core/blob/HEAD/CHANGELOG.md#-4362-2025-07-28)

[Compare
Source](https://redirect.github.com/stenciljs/core/compare/v4.36.1...v4.36.2)

##### Bug Fixes

- **bundle:** remove post order of node-resolve
([#&#8203;6353](https://redirect.github.com/stenciljs/core/issues/6353))
([19b56d1](19b56d1977)),
closes
[#&#8203;6335](https://redirect.github.com/stenciljs/core/issues/6335)

</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:eyJjcmVhdGVkSW5WZXIiOiI0MS40My41IiwidXBkYXRlZEluVmVyIjoiNDEuNDMuNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-30 13:43:31 +00:00
renovate[bot]
dd68369338 chore(deps): update dependency @stencil/core to v4.36.1 (#30524)
This PR contains the following updates:

| Package | Change | Age | Confidence |
|---|---|---|---|
| [@stencil/core](https://stenciljs.com/)
([source](https://redirect.github.com/stenciljs/core)) | [`4.33.1` ->
`4.36.0`](https://renovatebot.com/diffs/npm/@stencil%2fcore/4.33.1/4.36.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@stencil%2fcore/4.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@stencil%2fcore/4.33.1/4.36.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>stenciljs/core (@&#8203;stencil/core)</summary>

###
[`v4.36.0`](https://redirect.github.com/stenciljs/core/blob/HEAD/CHANGELOG.md#-4360-2025-07-15)

[Compare
Source](https://redirect.github.com/stenciljs/core/compare/v4.36.0...58bc2b5403312dd227b0c5d6f1de167559f2b015)

##### Bug Fixes

* contructable stylesheets with older immutable spec (chrome <99)
([#6332](https://github.com/stenciljs/core/issues/6332))
([2f363dd](2f363dd130)),
closes [#6326](https://github.com/stenciljs/core/issues/6326)
* **runtime:** check shadow root nodes before appending them
([#6342](https://github.com/stenciljs/core/issues/6342))
([c63f25d](c63f25d0b4))
* **runtime:** do not remove first comment - can break frameworks
([#6343](https://github.com/stenciljs/core/issues/6343))
([188e7db](188e7dbfd7))
* **runtime:** double check hostRef value
([#6341](https://github.com/stenciljs/core/issues/6341))
([051522f](051522f598))
* **runtime:** fix blur handling of non-scoped elements
([#6314](https://github.com/stenciljs/core/issues/6314))
([bfbd683](bfbd683efd))
* **runtime:** fix prettier
([d84f9e7](d84f9e7e5f))
* **ssr:** `scoped: true` components forwarded slots
([#6340](https://github.com/stenciljs/core/issues/6340))
([fd4b892](fd4b892a73)),
closes [#6337](https://github.com/stenciljs/core/issues/6337), closes
[#6339](https://github.com/stenciljs/core/issues/6339)


##### Features

* **moc-doc:** serialize `delegatesFocus` shadow DOM property
([#6333](https://github.com/stenciljs/core/issues/6333))
([56fe6e3](56fe6e35a3)),
closes [#6265](https://github.com/stenciljs/core/issues/6265)
* **runtime:** skip initial task queue to improve first time rendering
([#6331](https://github.com/stenciljs/core/issues/6331))
([6106c70](6106c70aa3)),
closes [#6317](https://github.com/stenciljs/core/issues/6317)


###
[`v4.35.3`](https://redirect.github.com/stenciljs/core/blob/HEAD/CHANGELOG.md#-4353-2025-07-02)

[Compare
Source](https://redirect.github.com/stenciljs/core/compare/v4.35.2...58bc2b5403312dd227b0c5d6f1de167559f2b015)

##### Bug Fixes

- **declarations:** add ToggleEvent type
([ac92210](ac9221076c))

###
[`v4.35.2`](https://redirect.github.com/stenciljs/core/blob/HEAD/CHANGELOG.md#-4352-2025-07-02)

[Compare
Source](https://redirect.github.com/stenciljs/core/compare/v4.35.1...v4.35.2)

##### Bug Fixes

- **ci:** hardening security of GH actions
([#&#8203;6305](https://redirect.github.com/stenciljs/core/issues/6305))
([3f80413](3f80413171))
- **compiler:** fix attachInternals should be usable without formAssoc…
([#&#8203;6286](https://redirect.github.com/stenciljs/core/issues/6286))
([7132259](7132259c40)),
closes
[#&#8203;6285](https://redirect.github.com/stenciljs/core/issues/6285)
- **declarations:** update toggle event handler types
([#&#8203;6323](https://redirect.github.com/stenciljs/core/issues/6323))
([5925974](5925974d85)),
closes
[#&#8203;6322](https://redirect.github.com/stenciljs/core/issues/6322)
- **mock-doc:** prevent infinite recursion in blur event handlers
([#&#8203;6310](https://redirect.github.com/stenciljs/core/issues/6310))
([092cacd](092cacda99)),
closes
[#&#8203;6307](https://redirect.github.com/stenciljs/core/issues/6307)
- **security:** update email for outreach
([9da2c90](9da2c907af))
- **ssr:** fixes for `scoped: true` components during SSR
([#&#8203;6311](https://redirect.github.com/stenciljs/core/issues/6311))
([b07dda6](b07dda6c94)),
closes
[#&#8203;6313](https://redirect.github.com/stenciljs/core/issues/6313)
- **ssr:** slow property hydration, incorrect rendering
([#&#8203;6325](https://redirect.github.com/stenciljs/core/issues/6325))
([f018c73](f018c7349c)),
closes
[#&#8203;6324](https://redirect.github.com/stenciljs/core/issues/6324)
- **utils:** single global stylesheet instance for performance
([#&#8203;6320](https://redirect.github.com/stenciljs/core/issues/6320))
([fe5d130](fe5d130127))
- **testing:** support browser executable path detection via environm…
([#&#8203;6308](https://redirect.github.com/stenciljs/core/issues/6308))
([b7e2b50](b7e2b50120)),
closes
[#&#8203;6213](https://redirect.github.com/stenciljs/core/issues/6213)

###
[`v4.35.1`](https://redirect.github.com/stenciljs/core/blob/HEAD/CHANGELOG.md#-4351-2025-06-17)

[Compare
Source](https://redirect.github.com/stenciljs/core/compare/v4.35.0...v4.35.1)

##### Bug Fixes

- **mock-doc:** ensure event bubbling follows shadow DOM boundaries
([#&#8203;6301](https://redirect.github.com/stenciljs/core/issues/6301))
([1304ffc](1304ffcbfe)),
closes
[#&#8203;5676](https://redirect.github.com/stenciljs/core/issues/5676)
- **ssr:** expand `::part` css selectors for ssr `scoped` components
([#&#8203;6298](https://redirect.github.com/stenciljs/core/issues/6298))
([da24af6](da24af6f5c)),
closes
[#&#8203;6297](https://redirect.github.com/stenciljs/core/issues/6297)
- **ssr:** named slot dom order with `serializeShadowRoot: 'scoped'`
components
([#&#8203;6300](https://redirect.github.com/stenciljs/core/issues/6300))
([96c0f13](96c0f13b06)),
closes
[#&#8203;6299](https://redirect.github.com/stenciljs/core/issues/6299)

###
[`v4.35.0`](https://redirect.github.com/stenciljs/core/blob/HEAD/CHANGELOG.md#-4350-2025-06-13)

[Compare
Source](https://redirect.github.com/stenciljs/core/compare/v4.34.0...v4.35.0)

##### Bug Fixes

- **ssr:** retain slotted node order in serializeShadowRoot: `scoped`
([#&#8203;6294](https://redirect.github.com/stenciljs/core/issues/6294))
([c1e032d](c1e032d562)),
closes
[#&#8203;6293](https://redirect.github.com/stenciljs/core/issues/6293)

##### Features

- **global-styles:** add new `addGlobalStyleToComponents` extras config
option to "opt-out" of new globalStyle behaviour
([#&#8203;6292](https://redirect.github.com/stenciljs/core/issues/6292))
([cd9778a](cd9778a2ac))

###
[`v4.34.0`](https://redirect.github.com/stenciljs/core/blob/HEAD/CHANGELOG.md#-4340-2025-06-11)

[Compare
Source](https://redirect.github.com/stenciljs/core/compare/v4.33.1...v4.34.0)

##### Bug Fixes

- **compiler:** Prevent `extTransformsPlugin` from outputting collection
dependency css
([#&#8203;3306](https://redirect.github.com/stenciljs/core/issues/3306))
([28e2a06](28e2a062f6)),
closes
[#&#8203;3305](https://redirect.github.com/stenciljs/core/issues/3305)
- **declarations:** update PluginTransformResults after Rollup update
([#&#8203;6232](https://redirect.github.com/stenciljs/core/issues/6232))
([6ff8075](6ff8075a85)),
closes
[#&#8203;6231](https://redirect.github.com/stenciljs/core/issues/6231)
- **mock-doc:** move slot event listener support from runtime to MockDoc
([#&#8203;6287](https://redirect.github.com/stenciljs/core/issues/6287))
([f2dd25d](f2dd25d7e0))
- resolve TypeScript interface conflicts between component methods and
HTMLElement
([#&#8203;6282](https://redirect.github.com/stenciljs/core/issues/6282))
([614d305](614d305b1d)),
closes
[#&#8203;4467](https://redirect.github.com/stenciljs/core/issues/4467)
- **runtime:** add addEventListener support for slot elements in scope
components
([#&#8203;6281](https://redirect.github.com/stenciljs/core/issues/6281))
([32f66bd](32f66bd1cf)),
closes
[#&#8203;6269](https://redirect.github.com/stenciljs/core/issues/6269)
- **runtime:** correct boolean attribute handling for form-associated
components
([#&#8203;6280](https://redirect.github.com/stenciljs/core/issues/6280))
([7fe6372](7fe6372c2a)),
closes
[#&#8203;5461](https://redirect.github.com/stenciljs/core/issues/5461)
- **ssr:** mixed ssr methods styles
([#&#8203;6289](https://redirect.github.com/stenciljs/core/issues/6289))
([e253ceb](e253cebf54)),
closes
[#&#8203;6288](https://redirect.github.com/stenciljs/core/issues/6288)
- update `CHANGELOG.md` location
([#&#8203;6283](https://redirect.github.com/stenciljs/core/issues/6283))
([36fca61](36fca61886))

##### Features

- **compiler:** improve file watching architecture and add external d…
([#&#8203;6279](https://redirect.github.com/stenciljs/core/issues/6279))
([0844538](0844538a04)),
closes
[#&#8203;3151](https://redirect.github.com/stenciljs/core/issues/3151)

#### 🥃
[4.33.1](https://redirect.github.com/stenciljs/core/compare/v4.33.0...v4.33.1)
(2025-06-03)

##### Bug Fixes

- **runtime:** conditionally apply global styles using
`supportsConstructableStylesheets` flag
([f4f815f](f4f815f462))

</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:eyJjcmVhdGVkSW5WZXIiOiI0MC42Mi4xIiwidXBkYXRlZEluVmVyIjoiNDEuMTcuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Christian Bromann <git@bromann.dev>
Co-authored-by: Brandy Smith <6577830+brandyscarney@users.noreply.github.com>
2025-07-29 18:13:53 +00:00
João Ferreira
7f904d0d6d fix(checkbox): improve states and colors (#30559)
Issue number: 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 new behavior?
<!-- Please describe the behavior or changes that are being added by
this PR. -->

- update scss to use vars;
- add more examples to states page;
- now the invalid state is only possible for unchecked checkboxes;

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

[basic](https://ionic-framework-git-rou-12073-ionic1.vercel.app/src/components/checkbox/test/basic?ionic:theme=ionic)

[indeterminate](https://ionic-framework-git-rou-12073-ionic1.vercel.app/src/components/checkbox/test/indeterminate?ionic:theme=ionic)
[Bottom
Content](https://ionic-framework-git-rou-12073-ionic1.vercel.app/src/components/checkbox/test/bottom-content?ionic:theme=ionic)

[States](https://ionic-framework-git-rou-12073-ionic1.vercel.app/src/components/checkbox/test/states?ionic:theme=ionic)

---------

Co-authored-by: ionitron <hi@ionicframework.com>
2025-07-22 09:42:41 +01:00
233 changed files with 8797 additions and 20634 deletions

View File

@@ -3,6 +3,53 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [8.7.1](https://github.com/ionic-team/ionic-framework/compare/v8.7.0...v8.7.1) (2025-07-31)
### Dependencies
* **stencil:** upgrade `@stencil/core` to version 4.36.2
# [8.7.0](https://github.com/ionic-team/ionic-framework/compare/v8.6.7...v8.7.0) (2025-07-30)
### Features
* **css:** add new css utility classes for display and flex utils ([#30567](https://github.com/ionic-team/ionic-framework/issues/30567)) ([75f6c05](https://github.com/ionic-team/ionic-framework/commit/75f6c05fb96313ef890cc80a229a3a3ed3d57460)), closes [#22469](https://github.com/ionic-team/ionic-framework/issues/22469)
* **datetime:** add border property to highlightedDates ([#30534](https://github.com/ionic-team/ionic-framework/issues/30534)) ([d5627c7](https://github.com/ionic-team/ionic-framework/commit/d5627c73681faf658ea3b869f3fb04d708391eb9)), closes [#29833](https://github.com/ionic-team/ionic-framework/issues/29833)
* **deps:** update ionicons to v8 ([#30390](https://github.com/ionic-team/ionic-framework/issues/30390)) ([74cd71a](https://github.com/ionic-team/ionic-framework/commit/74cd71af243183aa738d11b280e155bdfd652126)), closes [#30445](https://github.com/ionic-team/ionic-framework/issues/30445)
* **modal:** add IonModalToken for injecting modal elements in Angular components ([#30474](https://github.com/ionic-team/ionic-framework/issues/30474)) ([30d1910](https://github.com/ionic-team/ionic-framework/commit/30d1910d6ea5428b414d0e127e7681f59426c538))
* **reorder-group:** add ionReorderStart, ionReorderMove, ionReorderEnd events ([#30471](https://github.com/ionic-team/ionic-framework/issues/30471)) ([b154f4e](https://github.com/ionic-team/ionic-framework/commit/b154f4ed095890f57ccab539fd9217976a5466e5)), closes [#23148](https://github.com/ionic-team/ionic-framework/issues/23148) [#27614](https://github.com/ionic-team/ionic-framework/issues/27614)
## [8.6.7](https://github.com/ionic-team/ionic-framework/compare/v8.6.6...v8.6.7) (2025-07-30)
### Dependencies
* **stencil:** downgrade `@stencil/core` to version 4.33.1
_Stencil has been downgraded due to an uncaught regression in Reorder._
## [8.6.6](https://github.com/ionic-team/ionic-framework/compare/v8.6.5...v8.6.6) (2025-07-30)
### Dependencies
* **stencil:** upgrade `@stencil/core` to version 4.36.2
## [8.6.5](https://github.com/ionic-team/ionic-framework/compare/v8.6.4...v8.6.5) (2025-07-16)

View File

@@ -3,6 +3,52 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [8.7.1](https://github.com/ionic-team/ionic-framework/compare/v8.7.0...v8.7.1) (2025-07-31)
### Dependencies
* **stencil:** upgrade `@stencil/core` to version 4.36.2
# [8.7.0](https://github.com/ionic-team/ionic-framework/compare/v8.6.7...v8.7.0) (2025-07-30)
### Features
* **css:** add new css utility classes for display and flex utils ([#30567](https://github.com/ionic-team/ionic-framework/issues/30567)) ([75f6c05](https://github.com/ionic-team/ionic-framework/commit/75f6c05fb96313ef890cc80a229a3a3ed3d57460)), closes [#22469](https://github.com/ionic-team/ionic-framework/issues/22469)
* **datetime:** add border property to highlightedDates ([#30534](https://github.com/ionic-team/ionic-framework/issues/30534)) ([d5627c7](https://github.com/ionic-team/ionic-framework/commit/d5627c73681faf658ea3b869f3fb04d708391eb9)), closes [#29833](https://github.com/ionic-team/ionic-framework/issues/29833)
* **deps:** update ionicons to v8 ([#30390](https://github.com/ionic-team/ionic-framework/issues/30390)) ([74cd71a](https://github.com/ionic-team/ionic-framework/commit/74cd71af243183aa738d11b280e155bdfd652126)), closes [#30445](https://github.com/ionic-team/ionic-framework/issues/30445)
* **reorder-group:** add ionReorderStart, ionReorderMove, ionReorderEnd events ([#30471](https://github.com/ionic-team/ionic-framework/issues/30471)) ([b154f4e](https://github.com/ionic-team/ionic-framework/commit/b154f4ed095890f57ccab539fd9217976a5466e5)), closes [#23148](https://github.com/ionic-team/ionic-framework/issues/23148) [#27614](https://github.com/ionic-team/ionic-framework/issues/27614)
## [8.6.7](https://github.com/ionic-team/ionic-framework/compare/v8.6.6...v8.6.7) (2025-07-30)
### Dependencies
* **stencil:** downgrade `@stencil/core` to version 4.33.1
_Stencil has been downgraded due to an uncaught regression in Reorder._
## [8.6.6](https://github.com/ionic-team/ionic-framework/compare/v8.6.5...v8.6.6) (2025-07-30)
### Dependencies
* **stencil:** upgrade `@stencil/core` to version 4.36.2
## [8.6.5](https://github.com/ionic-team/ionic-framework/compare/v8.6.4...v8.6.5) (2025-07-16)

View File

@@ -919,6 +919,7 @@ ion-infinite-scroll,none
ion-infinite-scroll,prop,disabled,boolean,false,false,false
ion-infinite-scroll,prop,mode,"ios" | "md",undefined,false,false
ion-infinite-scroll,prop,position,"bottom" | "top",'bottom',false,false
ion-infinite-scroll,prop,preserveRerenderScrollPosition,boolean,false,false,false
ion-infinite-scroll,prop,theme,"ios" | "md" | "ionic",undefined,false,false
ion-infinite-scroll,prop,threshold,string,'15%',false,false
ion-infinite-scroll,method,complete,complete() => Promise<void>
@@ -1949,6 +1950,9 @@ ion-reorder-group,prop,mode,"ios" | "md",undefined,false,false
ion-reorder-group,prop,theme,"ios" | "md" | "ionic",undefined,false,false
ion-reorder-group,method,complete,complete(listOrReorder?: boolean | any[]) => Promise<any>
ion-reorder-group,event,ionItemReorder,ItemReorderEventDetail,true
ion-reorder-group,event,ionReorderEnd,ReorderEndEventDetail,true
ion-reorder-group,event,ionReorderMove,ReorderMoveEventDetail,true
ion-reorder-group,event,ionReorderStart,void,true
ion-ripple-effect,shadow
ion-ripple-effect,prop,mode,"ios" | "md",undefined,false,false

126
core/package-lock.json generated
View File

@@ -1,17 +1,17 @@
{
"name": "@ionic/core",
"version": "8.6.5",
"version": "8.7.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@ionic/core",
"version": "8.6.5",
"version": "8.7.1",
"license": "MIT",
"dependencies": {
"@phosphor-icons/core": "^2.1.1",
"@stencil/core": "4.33.1",
"ionicons": "^7.2.2",
"@stencil/core": "4.36.2",
"ionicons": "^8.0.13",
"tslib": "^2.1.0"
},
"devDependencies": {
@@ -44,7 +44,7 @@
"fs-extra": "^9.0.1",
"jest": "^29.7.0",
"jest-cli": "^29.7.0",
"outsystems-design-tokens": "^1.2.6",
"outsystems-design-tokens": "^1.3.0",
"prettier": "^2.8.8",
"rollup": "^2.26.4",
"sass": "^1.33.0",
@@ -2132,9 +2132,9 @@
}
},
"node_modules/@stencil/core": {
"version": "4.33.1",
"resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.33.1.tgz",
"integrity": "sha512-12k9xhAJBkpg598it+NRmaYIdEe6TSnsL/v6/KRXDcUyTK11VYwZQej2eHnMWtqot+znJ+GNTqb5YbiXi+5Low==",
"version": "4.36.2",
"resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.36.2.tgz",
"integrity": "sha512-PRFSpxNzX9Oi0Wfh02asztN9Sgev/MacfZwmd+VVyE6ZxW+a/kEpAYZhzGAmE+/aKVOGYuug7R9SulanYGxiDQ==",
"license": "MIT",
"bin": {
"stencil": "bin/stencil"
@@ -3818,9 +3818,9 @@
]
},
"node_modules/chalk": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz",
"integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==",
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.5.0.tgz",
"integrity": "sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==",
"dev": true,
"engines": {
"node": "^12.17.0 || ^14.13 || >=16.0.0"
@@ -6291,11 +6291,12 @@
}
},
"node_modules/ionicons": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.4.0.tgz",
"integrity": "sha512-ZK94MMqgzMCPPMhmk8Ouu6goyVHFIlw/ACP6oe3FrikcI0N7CX0xcwVaEbUc0G/v3W0shI93vo+9ve/KpvcNhQ==",
"version": "8.0.13",
"resolved": "https://registry.npmjs.org/ionicons/-/ionicons-8.0.13.tgz",
"integrity": "sha512-2QQVyG2P4wszne79jemMjWYLp0DBbDhr4/yFroPCxvPP1wtMxgdIV3l5n+XZ5E9mgoXU79w7yTWpm2XzJsISxQ==",
"license": "MIT",
"dependencies": {
"@stencil/core": "^4.0.3"
"@stencil/core": "^4.35.3"
}
},
"node_modules/is-alphabetical": {
@@ -9206,19 +9207,30 @@
}
},
"node_modules/outsystems-design-tokens": {
"version": "1.2.6",
"resolved": "https://registry.npmjs.org/outsystems-design-tokens/-/outsystems-design-tokens-1.2.6.tgz",
"integrity": "sha512-Wqv7vR1nB6G8WfwKVMqpifhugT+iz5dh25QMWW/XFkblIm2e+mQcUqQw0W9lPSihWKH8wgJfe7zY0mT5G5h3VA==",
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/outsystems-design-tokens/-/outsystems-design-tokens-1.3.0.tgz",
"integrity": "sha512-VEYce0sdh9EfqH3NIBlyIZ6d2AtNRSj6ZjufHar2nsJTi+6LXxCogCXOZoFY3FRZ3Mf3fW0wUDrzi9772p4F7Q==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"glob": "^11.0.0",
"minimist": "^1.2.8",
"style-dictionary": "^4.3.0"
"style-dictionary": "^5.0.0"
},
"bin": {
"build.tokens": "scripts/index.js"
}
},
"node_modules/outsystems-design-tokens/node_modules/@types/node": {
"version": "22.17.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.17.0.tgz",
"integrity": "sha512-bbAKTCqX5aNVryi7qXVMi+OkB3w/OyblodicMbvE38blyAz7GxXf6XYhklokijuPwwVg9sDLKRxt0ZHXQwZVfQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~6.21.0"
}
},
"node_modules/outsystems-design-tokens/node_modules/balanced-match": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-3.0.1.tgz",
@@ -9240,6 +9252,16 @@
"node": ">= 18"
}
},
"node_modules/outsystems-design-tokens/node_modules/commander": {
"version": "12.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
"integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/outsystems-design-tokens/node_modules/glob": {
"version": "11.0.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-11.0.2.tgz",
@@ -9263,6 +9285,19 @@
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/outsystems-design-tokens/node_modules/is-plain-obj": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
"integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/outsystems-design-tokens/node_modules/jackspeak": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz",
@@ -9318,6 +9353,59 @@
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/outsystems-design-tokens/node_modules/prettier": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz",
"integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
"dev": true,
"license": "MIT",
"bin": {
"prettier": "bin/prettier.cjs"
},
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/prettier/prettier?sponsor=1"
}
},
"node_modules/outsystems-design-tokens/node_modules/style-dictionary": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/style-dictionary/-/style-dictionary-5.0.1.tgz",
"integrity": "sha512-j+yQ4hM7a52iUQg5LVC8bnRkem4sU+unIY2qsyjoikPVzaxjkHd4ER7bnK+znW/Rhha69t4Fi5O46UHg6w8jFQ==",
"dev": true,
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
"@bundled-es-modules/deepmerge": "^4.3.1",
"@bundled-es-modules/glob": "^10.4.2",
"@bundled-es-modules/memfs": "^4.9.4",
"@types/node": "^22.10.5",
"@zip.js/zip.js": "^2.7.44",
"chalk": "^5.3.0",
"change-case": "^5.3.0",
"commander": "^12.1.0",
"is-plain-obj": "^4.1.0",
"json5": "^2.2.2",
"patch-package": "^8.0.0",
"path-unified": "^0.2.0",
"prettier": "^3.3.3",
"tinycolor2": "^1.6.0"
},
"bin": {
"style-dictionary": "bin/style-dictionary.js"
},
"engines": {
"node": ">=22.0.0"
}
},
"node_modules/outsystems-design-tokens/node_modules/undici-types": {
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
"dev": true,
"license": "MIT"
},
"node_modules/p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",

View File

@@ -1,6 +1,6 @@
{
"name": "@ionic/core",
"version": "8.6.5",
"version": "8.7.1",
"description": "Base components for Ionic",
"keywords": [
"ionic",
@@ -32,8 +32,8 @@
],
"dependencies": {
"@phosphor-icons/core": "^2.1.1",
"@stencil/core": "4.33.1",
"ionicons": "^7.2.2",
"@stencil/core": "4.36.2",
"ionicons": "^8.0.13",
"tslib": "^2.1.0"
},
"devDependencies": {
@@ -66,7 +66,7 @@
"fs-extra": "^9.0.1",
"jest": "^29.7.0",
"jest-cli": "^29.7.0",
"outsystems-design-tokens": "^1.2.6",
"outsystems-design-tokens": "^1.3.0",
"prettier": "^2.8.8",
"rollup": "^2.26.4",
"sass": "^1.33.0",

View File

@@ -30,7 +30,7 @@ import { PopoverSize, PositionAlign, PositionReference, PositionSide, TriggerAct
import { RadioGroupChangeEventDetail, RadioGroupCompareFn } from "./components/radio-group/radio-group-interface";
import { PinFormatter, RangeChangeEventDetail, RangeKnobMoveEndEventDetail, RangeKnobMoveStartEventDetail, RangeValue } from "./components/range/range-interface";
import { RefresherEventDetail } from "./components/refresher/refresher-interface";
import { ItemReorderEventDetail } from "./components/reorder-group/reorder-group-interface";
import { ItemReorderEventDetail, ReorderEndEventDetail, ReorderMoveEventDetail } from "./components/reorder-group/reorder-group-interface";
import { NavigationHookCallback } from "./components/route/route-interface";
import { SearchbarChangeEventDetail, SearchbarInputEventDetail } from "./components/searchbar/searchbar-interface";
import { SegmentChangeEventDetail, SegmentValue } from "./components/segment/segment-interface";
@@ -68,7 +68,7 @@ export { PopoverSize, PositionAlign, PositionReference, PositionSide, TriggerAct
export { RadioGroupChangeEventDetail, RadioGroupCompareFn } from "./components/radio-group/radio-group-interface";
export { PinFormatter, RangeChangeEventDetail, RangeKnobMoveEndEventDetail, RangeKnobMoveStartEventDetail, RangeValue } from "./components/range/range-interface";
export { RefresherEventDetail } from "./components/refresher/refresher-interface";
export { ItemReorderEventDetail } from "./components/reorder-group/reorder-group-interface";
export { ItemReorderEventDetail, ReorderEndEventDetail, ReorderMoveEventDetail } from "./components/reorder-group/reorder-group-interface";
export { NavigationHookCallback } from "./components/route/route-interface";
export { SearchbarChangeEventDetail, SearchbarInputEventDetail } from "./components/searchbar/searchbar-interface";
export { SegmentChangeEventDetail, SegmentValue } from "./components/segment/segment-interface";
@@ -1505,6 +1505,11 @@ export namespace Components {
* @default 'bottom'
*/
"position": 'top' | 'bottom';
/**
* If `true`, the infinite scroll will preserve the scroll position when the content is re-rendered. This is useful when the content is re-rendered with new keys, and the scroll position should be preserved.
* @default false
*/
"preserveRerenderScrollPosition": boolean;
/**
* The theme determines the visual appearance of the component.
*/
@@ -3226,7 +3231,7 @@ export namespace Components {
}
interface IonReorderGroup {
/**
* Completes the reorder operation. Must be called by the `ionItemReorder` event. If a list of items is passed, the list will be reordered and returned in the proper order. If no parameters are passed or if `true` is passed in, the reorder will complete and the item will remain in the position it was dragged to. If `false` is passed, the reorder will complete and the item will bounce back to its original position.
* Completes the reorder operation. Must be called by the `ionReorderEnd` event. If a list of items is passed, the list will be reordered and returned in the proper order. If no parameters are passed or if `true` is passed in, the reorder will complete and the item will remain in the position it was dragged to. If `false` is passed, the reorder will complete and the item will bounce back to its original position.
* @param listOrReorder A list of items to be sorted and returned in the new order or a boolean of whether or not the reorder should reposition the item.
*/
"complete": (listOrReorder?: boolean | any[]) => Promise<any>;
@@ -5428,6 +5433,9 @@ declare global {
};
interface HTMLIonReorderGroupElementEventMap {
"ionItemReorder": ItemReorderEventDetail;
"ionReorderStart": void;
"ionReorderMove": ReorderMoveEventDetail;
"ionReorderEnd": ReorderEndEventDetail;
}
interface HTMLIonReorderGroupElement extends Components.IonReorderGroup, HTMLStencilElement {
addEventListener<K extends keyof HTMLIonReorderGroupElementEventMap>(type: K, listener: (this: HTMLIonReorderGroupElement, ev: IonReorderGroupCustomEvent<HTMLIonReorderGroupElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
@@ -7436,6 +7444,11 @@ declare namespace LocalJSX {
* @default 'bottom'
*/
"position"?: 'top' | 'bottom';
/**
* If `true`, the infinite scroll will preserve the scroll position when the content is re-rendered. This is useful when the content is re-rendered with new keys, and the scroll position should be preserved.
* @default false
*/
"preserveRerenderScrollPosition"?: boolean;
/**
* The theme determines the visual appearance of the component.
*/
@@ -9160,9 +9173,22 @@ declare namespace LocalJSX {
*/
"mode"?: "ios" | "md";
/**
* Event that needs to be listened to in order to complete the reorder action. Once the event has been emitted, the `complete()` method then needs to be called in order to finalize the reorder action.
* Event that needs to be listened to in order to complete the reorder action.
* @deprecated Use `ionReorderEnd` instead. If you are accessing `event.detail.from` or `event.detail.to` and relying on them being different you should now add checks as they are always emitted in `ionReorderEnd`, even when they are the same.
*/
"onIonItemReorder"?: (event: IonReorderGroupCustomEvent<ItemReorderEventDetail>) => void;
/**
* Event that is emitted when the reorder gesture ends. The from and to properties are always available, regardless of if the reorder gesture moved the item. If the item did not change from its start position, the from and to properties will be the same. Once the event has been emitted, the `complete()` method then needs to be called in order to finalize the reorder action.
*/
"onIonReorderEnd"?: (event: IonReorderGroupCustomEvent<ReorderEndEventDetail>) => void;
/**
* Event that is emitted as the reorder gesture moves.
*/
"onIonReorderMove"?: (event: IonReorderGroupCustomEvent<ReorderMoveEventDetail>) => void;
/**
* Event that is emitted when the reorder gesture starts.
*/
"onIonReorderStart"?: (event: IonReorderGroupCustomEvent<void>) => void;
/**
* The theme determines the visual appearance of the component.
*/

View File

@@ -19,19 +19,19 @@
}
:host(.accordion-group-expand-inset.accordion-group-shape-round) {
--border-radius: #{globals.$ion-border-radius-400};
--border-radius: #{globals.$ion-round-xl};
@include globals.border-radius(globals.$ion-border-radius-400);
@include globals.border-radius(globals.$ion-round-xl);
}
:host(.accordion-group-expand-inset.accordion-group-shape-soft) {
--border-radius: #{globals.$ion-border-radius-200};
--border-radius: #{globals.$ion-soft-xl};
@include globals.border-radius(globals.$ion-border-radius-200);
@include globals.border-radius(globals.$ion-soft-xl);
}
:host(.accordion-group-expand-inset.accordion-group-shape-rectangular) {
--border-radius: #{globals.$ion-border-radius-0};
--border-radius: #{globals.$ion-rectangular-xl};
@include globals.border-radius(globals.$ion-border-radius-0);
@include globals.border-radius(globals.$ion-rectangular-xl);
}

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -59,7 +59,7 @@
// --------------------------------------------------
#content-wrapper {
@include globals.padding(null, globals.$ion-space-400, globals.$ion-space-300, globals.$ion-space-400);
@include globals.padding(globals.$ion-space-300, globals.$ion-space-400);
@include globals.typography(globals.$ion-body-md-regular);
color: globals.$ion-text-default;

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -96,19 +96,40 @@
:host(.avatar-xxsmall.avatar-soft),
:host(.avatar-xsmall.avatar-soft),
:host(.avatar-small.avatar-soft) {
--border-radius: #{globals.$ion-border-radius-100};
--border-radius: #{globals.$ion-soft-2xs};
}
:host(.avatar-medium.avatar-soft) {
--border-radius: #{globals.$ion-soft-xs};
}
:host(.avatar-large.avatar-soft),
:host(.avatar-xlarge.avatar-soft) {
--border-radius: #{globals.$ion-soft-md};
}
:host(.avatar-soft) {
--border-radius: #{globals.$ion-border-radius-200};
:host(.avatar-xxsmall.avatar-round),
:host(.avatar-xsmall.avatar-round),
:host(.avatar-small.avatar-round) {
--border-radius: #{globals.$ion-round-2xs};
}
:host(.avatar-medium.avatar-round) {
--border-radius: #{globals.$ion-round-xs};
}
:host(.avatar-large.avatar-round),
:host(.avatar-xlarge.avatar-round) {
--border-radius: #{globals.$ion-round-md};
}
:host(.avatar-round) {
--border-radius: #{globals.$ion-border-radius-full};
:host(.avatar-xxsmall.avatar-rectangular),
:host(.avatar-xsmall.avatar-rectangular),
:host(.avatar-small.avatar-rectangular) {
--border-radius: #{globals.$ion-rectangular-2xs};
}
:host(.avatar-rectangular) {
--border-radius: #{globals.$ion-border-radius-0};
:host(.avatar-medium.avatar-rectangular) {
--border-radius: #{globals.$ion-rectangular-xs};
}
:host(.avatar-large.avatar-rectangular),
:host(.avatar-xlarge.avatar-rectangular) {
--border-radius: #{globals.$ion-rectangular-md};
}
// Avatar Icon
@@ -224,5 +245,6 @@
// Avatar Disabled
// --------------------------------------------------
:host(.avatar-disabled)::before {
@include globals.border-radius(var(--border-radius));
@include globals.disabled-state();
}

View File

@@ -125,7 +125,7 @@
<ion-toolbar color="dark">
<ion-buttons slot="start">
<ion-back-button class="ion-hide"></ion-back-button>
<ion-back-button class="ion-display-none"></ion-back-button>
</ion-buttons>
<ion-title>Hidden</ion-title>
</ion-toolbar>

View File

@@ -51,21 +51,21 @@
/* Soft Badge */
:host(.badge-soft) {
@include globals.border-radius(globals.$ion-border-radius-200);
@include globals.border-radius(globals.$ion-soft-xs);
}
:host(.badge-small.badge-soft) {
@include globals.border-radius(globals.$ion-border-radius-100);
@include globals.border-radius(globals.$ion-soft-2xs);
}
/* Round Badge */
:host(.badge-round) {
@include globals.border-radius(globals.$ion-border-radius-full);
@include globals.border-radius(globals.$ion-round-sm);
}
/* Rectangular Badge */
:host(.badge-rectangular) {
@include globals.border-radius(globals.$ion-border-radius-0);
@include globals.border-radius(globals.$ion-rectangular-sm);
}
// Badge Sizes

View File

@@ -57,6 +57,40 @@
</ion-badge>
</ion-item>
</ion-list>
<ion-list>
<ion-item>
<ion-label>Medium Default</ion-label>
<ion-badge size="medium" slot="end">1</ion-badge>
<ion-badge size="medium" slot="end">99+</ion-badge>
<ion-badge size="medium" slot="end">
<ion-icon name="logo-ionic"></ion-icon>
</ion-badge>
</ion-item>
<ion-item>
<ion-label>Medium Soft</ion-label>
<ion-badge size="medium" slot="end" shape="soft">1</ion-badge>
<ion-badge size="medium" slot="end" shape="soft">99+</ion-badge>
<ion-badge size="medium" slot="end" shape="soft">
<ion-icon name="logo-ionic"></ion-icon>
</ion-badge>
</ion-item>
<ion-item>
<ion-label>Medium Round</ion-label>
<ion-badge size="medium" slot="end" shape="round">1</ion-badge>
<ion-badge size="medium" slot="end" shape="round">99+</ion-badge>
<ion-badge size="medium" slot="end" shape="round">
<ion-icon name="logo-ionic"></ion-icon>
</ion-badge>
</ion-item>
<ion-item>
<ion-label>Medium Rectangular</ion-label>
<ion-badge size="medium" slot="end" shape="rectangular">1</ion-badge>
<ion-badge size="medium" slot="end" shape="rectangular">99+</ion-badge>
<ion-badge size="medium" slot="end" shape="rectangular">
<ion-icon name="logo-ionic"></ion-icon>
</ion-badge>
</ion-item>
</ion-list>
</ion-content>
</ion-app>
</body>

View File

@@ -27,7 +27,8 @@
// Size
--size: #{globals.$ion-scale-600};
--checkbox-background-checked: #{globals.$ion-semantics-primary-base};
--checkbox-background: #{globals.$ion-bg-input-default};
--checkbox-background-checked: #{globals.$ion-bg-primary-base-default};
--border-color-checked: #{globals.$ion-semantics-primary-base};
--checkmark-color: #{globals.$ion-primitives-base-white};
--transition: none;
@@ -120,7 +121,7 @@ input {
}
.checkbox-bottom .helper-text {
color: globals.$ion-primitives-neutral-800;
color: globals.$ion-text-subtlest;
}
// Label Placement - Start
@@ -187,7 +188,6 @@ input {
// Checked / Indeterminate Checkbox
// ---------------------------------------------
:host(.checkbox-checked) .native-wrapper,
:host(.checkbox-indeterminate) .native-wrapper {
border-color: var(--border-color-checked);
@@ -199,9 +199,12 @@ input {
// --------------------------------------------------
:host(.ion-invalid) {
--focus-ring-color: #{globals.$ion-border-focus-error};
}
:host(.ion-invalid:not(.checkbox-checked)),
:host(.ion-invalid:not(.checkbox-checked).checkbox-disabled) {
.native-wrapper {
border-color: globals.$ion-semantics-danger-800;
border-color: globals.$ion-border-danger-default;
}
}
@@ -222,7 +225,7 @@ input {
:host(.checkbox-disabled.checkbox-checked) .native-wrapper {
border-width: globals.$ion-border-size-0;
background-color: globals.$ion-semantics-primary-base;
background-color: globals.$ion-bg-primary-base-default;
}
// Checkbox Hover
@@ -233,7 +236,9 @@ input {
}
:host(:hover.checkbox-checked) .native-wrapper,
:host(:hover.checkbox-indeterminate) .native-wrapper {
:host(:hover.checkbox-checked) .checkbox-icon,
:host(:hover.checkbox-indeterminate) .native-wrapper,
:host(:hover.checkbox-indeterminate) .checkbox-icon {
background-color: globals.$ion-semantics-primary-800;
}
}
@@ -248,12 +253,22 @@ input {
// Checkbox: Active
// --------------------------------------------------------
:host(.ion-activated) .native-wrapper {
background-color: globals.$ion-primitives-neutral-200;
background-color: globals.$ion-bg-input-press;
}
:host(.ion-activated.checkbox-checked) .native-wrapper,
:host(.ion-activated.checkbox-indeterminate) .native-wrapper {
background-color: globals.$ion-semantics-primary-900;
:host(.ion-activated.checkbox-checked) .checkbox-icon,
:host(.ion-activated.checkbox-indeterminate) .native-wrapper,
:host(.ion-activated.checkbox-indeterminate) .checkbox-icon {
background-color: globals.$ion-bg-primary-base-press;
}
:host(.ion-activated.ion-invalid:not(.checkbox-checked)) {
background-color: globals.$ion-bg-input-press;
.native-wrapper {
border-color: globals.$ion-border-danger-press;
}
}
// Ionic Design Checkbox Shapes

View File

@@ -15,6 +15,18 @@ configs({ modes: ['ios', 'md', 'ionic-md'], directions: ['ltr'] }).forEach(({ ti
await expect(checkbox).toHaveScreenshot(screenshot(`checkbox-disabled`));
});
test('should render disabled invalid checkbox correctly', async ({ page }) => {
await page.setContent(
`
<ion-checkbox disabled="true" error-text="Error text" class="ion-invalid">Label</ion-checkbox>
`,
config
);
const checkbox = page.locator('ion-checkbox');
await expect(checkbox).toHaveScreenshot(screenshot(`invalid-checkbox-disabled`));
});
test('should render disabled checked checkbox correctly', async ({ page }) => {
await page.setContent(
`
@@ -57,6 +69,7 @@ configs({ modes: ['ios', 'md', 'ionic-md'], directions: ['ltr'] }).forEach(({ ti
<div id="checkboxes" style="padding: 8px">
<ion-checkbox class="ion-focused">Label</ion-checkbox>
<ion-checkbox class="ion-focused" checked>Label</ion-checkbox>
<ion-checkbox class="ion-invalid ion-focused">Label</ion-checkbox>
</div>
`,
config

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 1015 B

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 800 B

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 977 B

View File

@@ -81,6 +81,18 @@
<h2>Focused, Checked</h2>
<ion-checkbox checked class="ion-focused">Enable Notifications</ion-checkbox>
</div>
<div class="grid-item">
<h2>Focused, Invalid</h2>
<ion-checkbox error-text="Error text" class="ion-invalid ion-focused">Enable Notifications</ion-checkbox>
</div>
<div class="grid-item">
<h2>Disabled, Invalid</h2>
<ion-checkbox disabled="true" error-text="Error text" class="ion-invalid"
>Enable Notifications
</ion-checkbox>
</div>
</div>
</ion-content>
</ion-app>

View File

@@ -22,15 +22,15 @@ export type DatetimePresentation = 'date-time' | 'time-date' | 'date' | 'time' |
export type TitleSelectedDatesFormatter = (selectedDates: string[]) => string;
export type DatetimeHighlightStyle =
| {
textColor: string;
backgroundColor?: string;
}
| {
textColor?: string;
backgroundColor: string;
};
/**
* DatetimeHighlightStyle must include textColor, backgroundColor, or border.
* It cannot be an empty object.
*/
export type DatetimeHighlightStyle = {
textColor?: string;
backgroundColor?: string;
border?: string;
} & ({ textColor: string } | { backgroundColor: string } | { border: string });
export type DatetimeHighlight = { date: string } & DatetimeHighlightStyle;

View File

@@ -2343,6 +2343,7 @@ export class Datetime implements ComponentInterface {
`${dateStyle ? dateStyle.backgroundColor : ''}`,
'important'
);
el.style.setProperty('border', `${dateStyle ? dateStyle.border : ''}`, 'important');
}
}}
tabindex="-1"

View File

@@ -5,6 +5,8 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
test.describe(title('datetime: custom'), () => {
test.beforeEach(async ({ page }) => {
await page.goto(`/src/components/datetime/test/custom`, config);
await page.locator('.datetime-ready').last().waitFor();
});
test('should allow styling wheel style datetimes', async ({ page }) => {
@@ -30,6 +32,13 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
test('should allow styling calendar days in grid style datetimes', async ({ page }) => {
const datetime = page.locator('#custom-calendar-days');
// Wait for calendar days to be rendered
await page.waitForFunction(() => {
const datetime = document.querySelector('#custom-calendar-days');
const calendarDays = datetime?.shadowRoot?.querySelectorAll('.calendar-day');
return calendarDays && calendarDays.length > 0;
});
await expect(datetime).toHaveScreenshot(screenshot(`datetime-custom-calendar-days`));
});
});

View File

@@ -164,7 +164,7 @@
const customDatetime = document.querySelector('#custom-calendar-days');
// Mock the current day to always have the same screenshots
const mockToday = '2023-06-10T16:22';
const mockToday = '2023-06-10T16:22:00.000Z';
Date = class extends Date {
constructor(...args) {
if (args.length === 0) {

View File

@@ -22,11 +22,23 @@ configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, config }) => {
await expect(monthYearToggle).toContainText('January 2022');
// Click to open the picker
await monthYearToggle.click();
await page.waitForChanges();
// February
await monthColumnItems.nth(1).click();
// Wait for the picker to be open
await page.locator('.month-year-picker-open').waitFor();
// Wait a bit for the picker to fully load
await page.waitForTimeout(200);
const ionChange = await page.spyOnEvent('ionChange');
// Click on February
await monthColumnItems.filter({ hasText: 'February' }).click();
// Wait for changes
await ionChange.next();
await page.waitForChanges();
await expect(monthYearToggle).toContainText('February 2022');
@@ -38,13 +50,23 @@ configs({ modes: ['md'], directions: ['ltr'] }).forEach(({ title, config }) => {
const datetime = page.locator('ion-datetime');
const ionChange = await page.spyOnEvent('ionChange');
// Click to open the picker
await monthYearToggle.click();
await page.waitForChanges();
// February
await monthColumnItems.nth(1).click();
// Wait for the picker to be open
await page.locator('.month-year-picker-open').waitFor();
// Wait a bit for the picker to fully load
await page.waitForTimeout(200);
// Click on February
await monthColumnItems.filter({ hasText: 'February' }).click();
// Wait for changes
await ionChange.next();
await page.waitForChanges();
await expect(ionChange).toHaveReceivedEventTimes(1);
await expect(datetime).toHaveJSProperty('value', '2022-02-28');
});

View File

@@ -21,16 +21,19 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
date: '2023-01-01', // ensure selected date style overrides highlight
textColor: '#800080',
backgroundColor: '#ffc0cb',
border: '2px solid purple',
},
{
date: '2023-01-02',
textColor: '#b22222',
backgroundColor: '#fa8072',
border: '2px solid purple',
},
{
date: '2023-01-03',
textColor: '#0000ff',
backgroundColor: '#add8e6',
border: '2px solid purple',
},
];
});
@@ -52,6 +55,7 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
return {
textColor: '#b22222',
backgroundColor: '#fa8072',
border: '2px solid purple',
};
}
@@ -59,6 +63,7 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
return {
textColor: '#800080',
backgroundColor: '#ffc0cb',
border: '2px solid purple',
};
}
@@ -66,6 +71,7 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
return {
textColor: '#0000ff',
backgroundColor: '#add8e6',
border: '2px solid purple',
};
}
@@ -77,7 +83,7 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
await expect(datetime).toHaveScreenshot(screenshot(`datetime-highlightedDates-callback`));
});
test('should render highlights correctly when only using one color or the other', async ({ page }) => {
test('should render highlights correctly when only using only one color property', async ({ page }) => {
const datetime = page.locator('ion-datetime');
await datetime.evaluate((el: HTMLIonDatetimeElement) => {
@@ -90,6 +96,10 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
date: '2023-01-03',
textColor: '#0000ff',
},
{
date: '2023-01-04',
border: '2px solid purple',
},
];
});

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Some files were not shown because too many files have changed in this diff Show More