Compare commits

...

130 Commits
FW-5872 ... new

Author SHA1 Message Date
Liam DeBeasi
6e8bf4914f chore(theming): remove Sass default flags (#29401)
Issue number: N/A

---------

## What is the current behavior?
Currently, every Sass variable in Ionic has the `!default` flag added to
the end.

From the [Sass variables
documentation](https://sass-lang.com/documentation/variables/):

> Normally when you assign a value to a variable, if that variable
already had a value, its old value is overwritten. But if you’re writing
a Sass library, you might want to allow your users to configure your
library’s variables before you use them to generate CSS.
> 
> To make this possible, Sass provides the `!default` flag. This assigns
a value to a variable only if that variable isn’t defined or its value
is [null](https://sass-lang.com/documentation/values/null). Otherwise,
the existing value will be used.

In past versions of Ionic Framework, developers wrote Sass variables to
rebuild Ionic Framework using their own values. In the latest versions
of Ionic Framework, this is not possible.

## What is the new behavior?
Removes the `!default` flag from all Sass variables.

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

-------

Co-authored-by: brandyscarney <brandyscarney@users.noreply.github.com>
2024-04-25 19:59:10 +00:00
Liam DeBeasi
0873dc2ffb test(item): re-enable nested interactive check (#29399)
The ticket was marked as done, but this one was missed.
2024-04-25 14:40:56 +00:00
Liam DeBeasi
dc1172a841 chore: remove v5 and v4 lts tags (#29389)
This PR removes the v5 and v4 lts tags from the release scripts. The
main branch should always be used to deploy to the latest/next tags and
never in the past. Instead, the version branches have the option to
deploy to their respective LTS tags.
2024-04-24 14:34:46 +00:00
Liam DeBeasi
e60890c483 merge release-8.0.1 (#29390) 2024-04-24 10:17:33 -04:00
ionitron
6fd4b50697 chore(): update package lock files 2024-04-24 13:45:53 +00:00
ionitron
fa60838702 v8.0.1 2024-04-24 13:45:04 +00:00
Sean Perkins
b76debe7ea chore(deps): update stencil to v4.17.1 (#29384)
Issue number: N/A

---------

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

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

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

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

- Updates to the latest version of Stencil
- Includes a fix for the api.txt diff issue we are experiencing off
`next`

## 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. -->
2024-04-23 21:04:56 +00:00
Liam DeBeasi
ee49824a84 fix(input): clear button can be navigated using screen reader (#29366)
Issue number: resolves #29358

---------

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

When the clear button is focused, `focusin` is dispatched and bubbles up
to the `ion-input`. Our [scroll assist utility listens for
`focusin`](2fc81ddc9b/core/src/utils/input-shims/hacks/scroll-assist.ts (L135))
to adjust the scroll position. It also causes the input to be
re-focused. As a result, when swiping to the clear button with a screen
reader, focus will be forcibly moved back to the input. This means that
users cannot swipe away from the input to the right when using a screen
reader.

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

- To fix this, I decided to have the `focusin` event from the clear
button not bubble (as opposed to add a really specific workaround to the
scroll assist utility).

Adding `stopPropagation` was easy enough, but it turned out that the
scroll assist listeners were all configured to listen during the capture
phase instead of the bubble phase. As a result, `stopPropgation` had no
effect because the scroll assist callback had already fired. To address
this, I updated the listeners to listen during the bubbling phase
instead of the capture phase. Based on my testing the capture phase was
not required for scroll assist to work, so it appears safe to remove.

## 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.0.1-dev.11713535425.1a4afba3`

Reviewers: Please test this on a physical iOS device and be sure to test
the scroll assist behavior. There is a test at
http://localhost:3333/src/utils/input-shims/hacks/test you can use.
2024-04-23 20:27:15 +00:00
Sean Perkins
23321f7ab2 fix(input): debounce is set with binding syntax in angular on load (#29377)
Issue number: resolves #29374

---------

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

When using Angular binding syntax, the `debounce` value can be set after
`connectedCallback`, but before `componentDidLoad`. This results in the
internal representation of the `debounce` value to be the default and
the watch callback to never fire.

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

- The callback handler for `debounce` is called on component load,
identical to what we do for the same exact reasons for the input `type`.
- `debounce` will correctly reflect and apply the developers value when
using binding syntax on initial load

## 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.0.1-dev.11713879639.102f51a0`

Forked reproduction with the dev-build is available here:
https://github.com/ionic-team/ionic-framework/issues/29374#issuecomment-2072377087
2024-04-23 19:50:47 +00:00
renovate[bot]
3a10821217 chore(deps): update dependency @capacitor/core to v5.7.5 (#29362)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@capacitor/core](https://capacitorjs.com)
([source](https://togithub.com/ionic-team/capacitor)) | [`5.7.4` ->
`5.7.5`](https://renovatebot.com/diffs/npm/@capacitor%2fcore/5.7.4/5.7.5)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fcore/5.7.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capacitor%2fcore/5.7.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capacitor%2fcore/5.7.4/5.7.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fcore/5.7.4/5.7.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

###
[`v5.7.5`](https://togithub.com/ionic-team/capacitor/releases/tag/5.7.5)

[Compare
Source](https://togithub.com/ionic-team/capacitor/compare/5.7.4...5.7.5)

##### Bug Fixes

- **cli:** Removing extra dash in android apk name flavor parsing
([#&#8203;7383](https://togithub.com/ionic-team/capacitor/issues/7383))
([aed075f](aed075ffcf))
- **http:** Add URLSearchParams support
([#&#8203;7376](https://togithub.com/ionic-team/capacitor/issues/7376))
([080be74](080be74fa8))
- **http:** prevent POST request from being proxied
([#&#8203;7402](https://togithub.com/ionic-team/capacitor/issues/7402))
([6a96ce7](6a96ce7276))
- vue 3 log warning causes error on iOS
([#&#8203;7364](https://togithub.com/ionic-team/capacitor/issues/7364))
([bc39b6b](bc39b6b8cf))

</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 has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/ionic-team/ionic-framework).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMDEuNCIsInVwZGF0ZWRJblZlciI6IjM3LjMwMS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-23 18:52:03 +00:00
Maria Hutt
e8e5c4e1b6 refactor(dark): use palettes through url queries in test pages (#29238)
Issue number: N/A

---------

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

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

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

If a dev wants to view a test page in dark mode, they have to manually
add the styles. This can lead to a slowdown. Plus they can't use
Playwright's `goto` to test both light and dark. In order to test dark
mode with Playwright, the dev would need to use `setContent` instead of
`goto`.

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

Dark mode can be added to any page by appending `palette=dark` to the
URL.

- The param will be used to add a link tag with the correct palette
file.
- Playwright will load the correct palette file when a dev uses `goto`
and `{ themes: ['dark'] }`

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

I recommend using badge to try this out. It already has a `goto` in the
basic tests.
2024-04-19 18:48:29 +00:00
renovate[bot]
2fc81ddc9b chore(deps): update dependency @stencil/core to v4.16.0 (#29363)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@stencil/core](https://stenciljs.com/)
([source](https://togithub.com/ionic-team/stencil)) | [`4.15.0` ->
`4.16.0`](https://renovatebot.com/diffs/npm/@stencil%2fcore/4.15.0/4.16.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@stencil%2fcore/4.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@stencil%2fcore/4.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@stencil%2fcore/4.15.0/4.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@stencil%2fcore/4.15.0/4.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

###
[`v4.16.0`](https://togithub.com/ionic-team/stencil/blob/HEAD/CHANGELOG.md#-4160-2024-04-15)

[Compare
Source](https://togithub.com/ionic-team/stencil/compare/v4.15.0...v4.16.0)

##### Bug Fixes

- **cli:** fix a bug in CLI argument parsing
([#&#8203;5646](https://togithub.com/ionic-team/stencil/issues/5646))
([1fdea63](1fdea63acf)),
refs [#&#8203;5640](https://togithub.com/ionic-team/stencil/issues/5640)
- **testing:** prevent `find` from throwing error when query has no
match
([#&#8203;5641](https://togithub.com/ionic-team/stencil/issues/5641))
([b3886aa](b3886aa928)),
closes
[#&#8203;5639](https://togithub.com/ionic-team/stencil/issues/5639)

##### Features

- **dev-server:** dark mode support
([#&#8203;5642](https://togithub.com/ionic-team/stencil/issues/5642))
([89a5e40](89a5e40adf))
- **typescript:** Update dependency typescript to v5.4.5
([#&#8203;5663](https://togithub.com/ionic-team/stencil/issues/5663))
([2596536](25965364c3))

</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 has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/ionic-team/ionic-framework).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMDEuNCIsInVwZGF0ZWRJblZlciI6IjM3LjMwMS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-19 13:37:43 +00:00
Liam DeBeasi
5dcf5748c6 chore: remove beta from issue template (#29360) 2024-04-18 17:04:23 +00:00
Brandy Carney
6b13e1323f test: remove hardcoded dark palette from tests (#29357)
Issue number: N/A

---------

## What is the current behavior?
Dark palette is hardcoded in style tags in tests. 

## What is the new behavior?

Updated the following tests:
- **datetime/basic** - added an import for `dark.class.css` which works
with the checkbox to toggle the `ion-palette-dark` class
- does not update the e2e test to include dark palette because this was
not tested previously
- **datetime/color** - added an import for `dark.class.css` which works
with the checkbox to toggle the `ion-palette-dark` class
    - updates the e2e test to use the dark palette
- **modal/dark-mode** - added an import for `dark.always.css` which
always applies the dark palette
- does not update the e2e test to include dark palette because this test
needs to be moved but I am not sure where it should go yet
- **toggle/enable-on-off-labels** - added an import for `dark.class.css`
which works with the checkbox to toggle the `ion-palette-dark` class
- updates the e2e test to use the dark palette & splits the color into a
separate screenshot test

Did not update the following tests:
- **item/buttons** - has already been updated to remove the dark palette
- **toggle/legacy/enable-on-off-labels** - test was removed in v8

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

## Other information

- We could probably remove the checkbox toggles entirely when we add
support for the `palette` query param.

---------

Co-authored-by: ionitron <hi@ionicframework.com>
2024-04-17 19:46:48 +00:00
Liam DeBeasi
eb7ba2355a chore: update issue assignment list (#29356)
This PR revises the list of who gets automatically assigned to issues.
2024-04-17 17:32:14 +00:00
Liam DeBeasi
30552f1cef merge release-8.0.0 (#29352) 2024-04-17 10:03:58 -04:00
ionitron
2d8c9f4942 chore(): update package lock files 2024-04-17 13:52:16 +00:00
ionitron
bf1ae7b6fe v8.0.0 2024-04-17 13:51:23 +00:00
Liam DeBeasi
84ea30db4e merge release-8.0.0.rc.2 (#29351) 2024-04-17 09:42:58 -04:00
Liam DeBeasi
f7aa4a7e6b chore: clean up changelog 2024-04-17 09:32:04 -04:00
ionitron
ffd1bf5139 chore(): update package lock files 2024-04-17 13:27:46 +00:00
ionitron
73af759906 v8.0.0-rc.2 2024-04-17 13:27:08 +00:00
Liam DeBeasi
4f68044f84 chore: sync with main (#29349) 2024-04-17 09:19:23 -04:00
Liam DeBeasi
c69adbf988 merge release-7.8.5 (#29348) 2024-04-17 09:11:01 -04:00
Liam DeBeasi
cde84983b2 chore: sync with main 2024-04-17 09:08:24 -04:00
ionitron
3f3f196a24 chore(): update package lock files 2024-04-17 13:01:00 +00:00
ionitron
ffce443585 v7.8.5 2024-04-17 12:59:14 +00:00
Liam DeBeasi
4698d22413 fix(dark-palette): improve base colors (#29239)
Issue number: resolves #29219

---------

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

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

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

We got feedback that the current dark theme is a bit jarring when
compared with native. In particular, devs are expecting the contrast to
be white for many of these colors to match native iOS. Currently, text
inside of a primary button is black on dark mode, but devs expect it to
be white. Additionally, the dark mode colors appear to be too washed out
when compared with their light mode counterparts.

The team discussed this and we think we can find a way to make the
colors more in line with what devs expect while still allowing for AA
color contrast levels.

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

- Adjusted the secondary and danger colors to be slightly more
vibrant/inline with what developers expect in mobile apps while still
meeting AA color contrast.

## 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/.github/CONTRIBUTING.md#footer
for more information.
-->


## Other information

I intentionally did not change the contrast color, and I intentionally
did not significantly change the vibrancy of each color token. I did
some research into how the native platforms handle colors. I'll place
this information here, because there are some subtle differences between
web and native that make a difference.

### Material Design


[Source](https://m2.material.io/design/color/dark-theme.html#ui-application)

Material Design 2 calls for desaturated color tokens as well as flipping
contrast colors. For example, a vibrant purple background with light
text on light mode is a washed purple with dark text on dark mode. The
colors in Ionic <=7 did not follow these patterns. The tokens in Ionic 8
now follows these patterns, so what we have in `main` means we are
aligning closer with native MD than have in the past.


![image](https://github.com/ionic-team/ionic-framework/assets/2721089/b1067e7c-ee51-4170-91b1-27c0753fae72)

### iOS


[Source](https://developer.apple.com/design/human-interface-guidelines/accessibility#Color-and-effects)

iOS is a bit tricky. On the docs, Apple references the WCAG color
contrast formula (what Ionic follows). However, the table they present
below is slightly different:

| Text Size | Text Weight | Minimum Contrast Ratio |
| - | - | - |
| Up to 17 points | All | 4.5:1 |
| 18 points and larger | All | 3:1 |
| All | Bold | 3:1 |

The last row is the main difference. WCAG states that text that is bold
AND >=14pts (~18.66px) needs to meet a minimum contrast ratio of 3:1.
Apple's guidelines state that any text that is bold (regardless of size)
needs to meet a minimum contrast ratio of 3:1. In other words, **Apple
is using different guidelines to choose colors which is why colored dark
mode buttons on iOS typically use white text**.

However, Apple is inconsistent in implementing its own guidelines.
Consider the following red buttons in the Apple Music app.

| Screenshot | Meets Web guidelines | Meets Apple guidelines | Notes |
| - | - | - | - |
| <img
src="https://github.com/ionic-team/ionic-framework/assets/2721089/6bb0e0b3-c29e-4b96-9ad5-e45e59bf0415"
width="300" /> |  |  | Text is not bold which makes it not meet either
guidelines. |
| <img
src="https://github.com/ionic-team/ionic-framework/assets/2721089/8ce93b45-0b2b-4160-97a4-19852134684c"
width="300" /> |  |  | Text is bold which makes it pass the Apple
guidelines, but it's still too small to also pass the Web guidelines. |

### Ionic

One of the things I tried is adjusting the base color to work well with
white and black backgrounds. It's common to have a blue background with
white text (such as a button) AND to have a blue link on a black
background (such as an `a` element). This approach does not work well
for the shade/tint colors used for hover/focus states. These colors also
need to meet Web guidelines.

Consider the following example:

| Screenshot | Notes | Text/Link passes AA guidelines | Tint passes AA
guidelines |
| - | - | - | - |
| ![Screenshot 2024-04-15 at 3 28
47 PM](https://github.com/ionic-team/ionic-framework/assets/2721089/3d8c56a6-6d0c-4c93-bc13-9c93508f76bc)
| This uses the same primary color found in the light palette |  |  |
| ![Screenshot 2024-04-15 at 3 29
21 PM](https://github.com/ionic-team/ionic-framework/assets/2721089/beaf26c9-c30f-4a39-900e-74b0f2433280)
| This changes the base color such that the Text/Link passes with a
4.5:1 ratio |  |  |
| ![Screenshot 2024-04-15 at 3 34
14 PM](https://github.com/ionic-team/ionic-framework/assets/2721089/43dbd81c-1338-4fff-af30-efbe51fce08a)
| This changes the base color such that the Tint passes with a 4:5:1
ratio |  |  |

We also considered adjusting the `a` and `ion-text` colors to use the
tint color. We decided against that because it a) felt a little odd
given that tint is typically used for states (hover, focus, etc) and b)
we were concerned that making this change would impose future
restrictions on how this color palette can evolve.

### Conclusion

While Ionic's colors don't exactly match the iOS colors, the reality is
that we are a web-based tool, so we are going to be evaluated using
web-based tools/standards. As a result, it's recommended that we align
closer with the Web guidelines than Apple's guidelines.

## Testing

Testing:

Developers can look at the colors by opening
http://localhost:3333/src/themes/test/colors

In the video below, the first state is the dark theme in `main`. The
second state is the proposed changes.
| Visual Comparison |
| - |
| <video
src="https://github.com/ionic-team/ionic-framework/assets/2721089/241fb1b6-212b-4f03-83cd-9558b9a53761"></video>
|
2024-04-15 17:00:36 -04:00
Liam DeBeasi
bfaf528e61 docs(test): clarify docker usage for windows (#29274)
Team members on Windows were having trouble running tests inside of
Docker. Given that headed tests must use WSL, I think it makes sense to
have Windows devs use WSL for any E2E tests run inside of Docker. That
way they aren't switching back and forth between shells.

This PR clarifies the Docker docs that instruct devs on how to use WSL.
2024-04-15 17:46:17 +00:00
Brandy Carney
9b59138011 fix(form-controls): adjust flex properties inside of an item (#29328)
Issue number: resolves #29319

---------

## What is the current behavior?
Icons (not slotted) alongside a checkbox, toggle, or radio in an item
using the modern syntax cause the icon to shrink in width.

## What is the new behavior?
Allow the checkbox, toggle, and radio to shrink to accommodate the icon.
This matches the select behavior:
f0da2c1727/core/src/components/select/select.scss (L84)

| Before | After |
| --- | --- |
|
![before](https://github.com/ionic-team/ionic-framework/assets/6577830/ca32e2a7-ee10-427e-b060-3c554e9e7fec)
|
![after](https://github.com/ionic-team/ionic-framework/assets/6577830/8be2d918-0caa-4b7a-8fc7-a57456307a84)
|

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

---------

Co-authored-by: ionitron <hi@ionicframework.com>
2024-04-12 11:36:05 -04:00
renovate[bot]
4efdc88a29 chore(deps): update dependency @stencil/core to v4.15.0 (#29332)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@stencil/core](https://stenciljs.com/)
([source](https://togithub.com/ionic-team/stencil)) | [`4.14.1` ->
`4.15.0`](https://renovatebot.com/diffs/npm/@stencil%2fcore/4.14.1/4.15.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@stencil%2fcore/4.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@stencil%2fcore/4.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@stencil%2fcore/4.14.1/4.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@stencil%2fcore/4.14.1/4.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

###
[`v4.15.0`](https://togithub.com/ionic-team/stencil/blob/HEAD/CHANGELOG.md#-4150-2024-04-08)

[Compare
Source](https://togithub.com/ionic-team/stencil/compare/v4.14.1...v4.15.0)

##### Features

- **compiler:** perform automatic key insertion in more situations
([#&#8203;5594](https://togithub.com/ionic-team/stencil/issues/5594))
([8ee071b](8ee071bf3a))
- **typescript:** Update dependency typescript to v5.4.4
([#&#8203;5636](https://togithub.com/ionic-team/stencil/issues/5636))
([a463871](a463871230))

#### 🏋
[4.14.1](https://togithub.com/ionic-team/stencil/compare/v4.14.0...v4.14.1)
(2024-04-04)

##### Bug Fixes

- **compiler:** don't mistake aliased paths for collections imports
([#&#8203;5620](https://togithub.com/ionic-team/stencil/issues/5620))
([af22bb8](af22bb858d)),
closes
[#&#8203;2319](https://togithub.com/ionic-team/stencil/issues/2319)
- **runtime:** nested multiple default slot relocation
([#&#8203;5403](https://togithub.com/ionic-team/stencil/issues/5403))
([363c07b](363c07b472)),
partially closes
[#&#8203;5335](https://togithub.com/ionic-team/stencil/issues/5335)
- **runtime:** prevent ref callbacks from being called too early
([#&#8203;5614](https://togithub.com/ionic-team/stencil/issues/5614))
([81fa375](81fa37587e)),
closes
[#&#8203;4074](https://togithub.com/ionic-team/stencil/issues/4074)

</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 has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/ionic-team/ionic-framework).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNjkuMiIsInVwZGF0ZWRJblZlciI6IjM3LjI2OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-12 14:39:54 +00:00
renovate[bot]
7b90025d31 chore(deps): update pozil/auto-assign-issue action to v1.14.0 (#29293)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[pozil/auto-assign-issue](https://togithub.com/pozil/auto-assign-issue)
| action | minor | `v1.13.0` -> `v1.14.0` |

---

### Release Notes

<details>
<summary>pozil/auto-assign-issue (pozil/auto-assign-issue)</summary>

###
[`v1.14.0`](https://togithub.com/pozil/auto-assign-issue/releases/tag/v1.14.0):
- Random assignments with weights

[Compare
Source](https://togithub.com/pozil/auto-assign-issue/compare/v1.13.0...v1.14.0)

- feat: support for weights in random assignments (addresses
[#&#8203;120](https://togithub.com/pozil/auto-assign-issue/issues/120))
-   build: bumped dependencies

</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 has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/ionic-team/ionic-framework).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNjkuMiIsInVwZGF0ZWRJblZlciI6IjM3LjI2OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-10 21:41:10 +00:00
Liam DeBeasi
176bb43262 chore(ci): ignore images when uploading to vercel (#29310)
As part of the Vercel flow for creating public previews of the test
files, we'd like to exclude screenshots from being downloaded as they
are not required to create the previews.
2024-04-10 21:04:57 +00:00
renovate[bot]
c9916ff4b5 chore(deps): update dependency @stencil/core to v4.14.1 (#29301)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@stencil/core](https://stenciljs.com/)
([source](https://togithub.com/ionic-team/stencil)) | [`4.14.0` ->
`4.14.1`](https://renovatebot.com/diffs/npm/@stencil%2fcore/4.14.0/4.14.1)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@stencil%2fcore/4.14.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@stencil%2fcore/4.14.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@stencil%2fcore/4.14.0/4.14.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@stencil%2fcore/4.14.0/4.14.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

###
[`v4.14.1`](https://togithub.com/ionic-team/stencil/blob/HEAD/CHANGELOG.md#-4141-2024-04-04)

[Compare
Source](https://togithub.com/ionic-team/stencil/compare/v4.14.0...v4.14.1)

##### Bug Fixes

- **compiler:** don't mistake aliased paths for collections imports
([#&#8203;5620](https://togithub.com/ionic-team/stencil/issues/5620))
([af22bb8](af22bb858d)),
closes
[#&#8203;2319](https://togithub.com/ionic-team/stencil/issues/2319)
- **runtime:** nested multiple default slot relocation
([#&#8203;5403](https://togithub.com/ionic-team/stencil/issues/5403))
([363c07b](363c07b472)),
partially closes
[#&#8203;5335](https://togithub.com/ionic-team/stencil/issues/5335)
- **runtime:** prevent ref callbacks from being called too early
([#&#8203;5614](https://togithub.com/ionic-team/stencil/issues/5614))
([81fa375](81fa37587e)),
closes
[#&#8203;4074](https://togithub.com/ionic-team/stencil/issues/4074)

</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 has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/ionic-team/ionic-framework).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNjkuMiIsInVwZGF0ZWRJblZlciI6IjM3LjI2OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-10 18:28:11 +00:00
Liam DeBeasi
9738228bc0 fix(modal): improve sheet modal scrolling and gesture behavior (#29312)
Issue number: resolves #24583

---------

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

See
https://github.com/ionic-team/ionic-framework/issues/24583#issuecomment-2033478601

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

- See https://github.com/ionic-team/ionic-framework/pull/29260 and
https://github.com/ionic-team/ionic-framework/pull/29259. This PR is a
combination of previously reviewed fixes.

## 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: `7.8.3-dev.11712695191.1d7ec370`
2024-04-10 17:24:54 +00:00
Liam DeBeasi
f0da2c1727 merge release-8.0.0-rc.1 (#29317) 2024-04-10 10:36:57 -04:00
Liam DeBeasi
368fb2fc70 chore: add correct links 2024-04-10 10:19:11 -04:00
Liam DeBeasi
8259cd0cd9 chore: clean up changelog 2024-04-10 10:18:14 -04:00
ionitron
638ad30b59 chore(): update package lock files 2024-04-10 14:12:43 +00:00
ionitron
ea8e220861 v8.0.0-rc.1 2024-04-10 14:11:56 +00:00
Liam DeBeasi
8ee5790d1f chore: sync with main (#29316) 2024-04-10 10:04:35 -04:00
Liam DeBeasi
2562392a62 chore: push vue package changes 2024-04-10 09:53:53 -04:00
Liam DeBeasi
d8599b3282 chore: sync with main 2024-04-10 09:50:08 -04:00
Liam DeBeasi
1388014b65 merge release-7.8.4 (#29314) 2024-04-10 09:45:06 -04:00
ionitron
1073d22b56 chore(): update package lock files 2024-04-10 13:34:52 +00:00
ionitron
cea0b493fc v7.8.4 2024-04-10 13:34:07 +00:00
Sean Perkins
adf220b681 chore: sync with main (#29300)
Issue number: N/A
---------

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

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

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

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

- Syncs the `feature.8.0` branch with the latest from `main`.

## 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. -->
2024-04-09 12:51:45 -04:00
Sean Perkins
e64015a609 Merge remote-tracking branch 'origin/main' into sp/sync-feature-8.0-with-main-04-08 2024-04-09 12:17:38 -04:00
Liam DeBeasi
3d9871a77f chore: update codeowners (#29305)
Discussed with Sean and most of these codeowner directories should be
reviewable by anyone on the team, so we don't want to block on a
specific person.

The exceptions are the gesture/input-shim directories due to the lack of
documentation at the moment.
2024-04-09 15:10:51 +00:00
Sean Perkins
e91fee4f2d Merge remote-tracking branch 'origin/main' into sp/sync-feature-8.0-with-main-04-08 2024-04-08 18:48:00 -04:00
Brandy Carney
b315b0cb29 chore(docs): consolidate the developer resource files into a docs/ directory (#29266)
Start your review here 👉
[docs/README.md](https://github.com/ionic-team/ionic-framework/blob/FW-6107/docs/README.md)

## What is the current behavior?

Documentation files with information on how to contribute, component
implementations, testing, etc. are scattered throughout various folders
in this repository.

## What is the new behavior?

Consolidates the documentation files into a root `docs/` directory for
easier discovery and organization.

`/docs` tree:

```
├── _config.yml
├── component-guide.md
├── CONTRIBUTING.md
├── README.md
├── sass-guidelines.md
├── angular
│   ├── README.md
│   └── testing.md
├── core
│   ├── README.md
│   └── testing
│       ├── README.md
│       ├── api.md
│       ├── best-practices.md
│       ├── preview-changes.md
│       └── usage-instructions.md
├── react
│   ├── README.md
│   └── testing.md
├── react-router
│   ├── README.md
│   └── testing.md
├── vue
│   ├── README.md
│   └── testing.md
└── vue-router
    ├── README.md
    └── testing.md
```

**Migrates the following:**

| Previous Location | New Location |
| ----------------------------------------------------------- |
----------------------------------------- |
| `.github/COMPONENT-GUIDE.md` | `docs/component-guide.md` |
| `.github/CONTRIBUTING.md` | `docs/CONTRIBUTING.md` |
| `core/scripts/README.md` | `docs/core/testing/preview-changes.md` |
| `core/src/utils/test/playwright/docs/api.md` |
`docs/core/testing/api.md` |
| `core/src/utils/test/playwright/docs/best-practices.md` |
`docs/core/testing/best-practices.md` |
| `core/src/utils/test/playwright/docs/README.md` |
`docs/core/testing/README.md` |
| `core/src/utils/test/playwright/docs/usage-instructions.md` |
`docs/core/testing/usage-instructions.md` |
| `packages/angular/test/README.md` | `docs/angular/testing.md` |
| `packages/react-router/test/README.md` |
`docs/react-router/testing.md` |
| `packages/react/test/README.md` | `docs/react/testing.md` |
| `packages/react/test/base/README.md` | `docs/react/testing.md` |
| `packages/vue/test/README.md` | `docs/vue/testing.md` |

**Adds the following:**

| File | Description |
| ----------------------------- |
-----------------------------------------------------------------------
|
| `docs/sass-guidelines.md` | Sass Variable guidelines taken from
`ionic-framework-design-documents` |
| `docs/README.md` | Entry file that should link to all other files |
| `docs/_config.yml` | Config file for use with GitHub pages |
| `docs/core/README.md` | Description of core, links to contributing and
testing |
| `docs/angular/README.md` | Description of angular, links to
contributing and testing |
| `docs/react/README.md` | Description of react, links to contributing
and testing |
| `docs/react-router/README.md` | Description of react-router, links to
contributing and testing |
| `docs/vue/README.md` | Description of vue, links to contributing and
testing |
| `docs/vue-router/README.md` | Description of vue-router, links to
contributing and testing |
| `docs/vue-router/testing.md` | Testing file for vue-router, populated
from vue-router's main README |

**Does not** add any files for `angular-server`. This is because the
README is essentially empty and there is no testing in that directory. I
can add blank files if we want to have something to add to later.

**Does not** migrate the content of the packages' root `README.md`
files. These files are used for their npm package descriptions so we
should not edit them.

## Hosting Documentation

We can (and should) host these files using GitHub Pages. I have
duplicated them in a personal repository to see how this would look:
[docs-consolidation](https://brandyscarney.github.io/docs-consolidation/).

Doing so will require some formatting fixes (see [Sass
Guidelines](https://brandyscarney.github.io/docs-consolidation/sass-guidelines.html#-reusable-values))
so I did not publish them now but we can easily enable GitHub pages by
toggling a setting in this repository.

## Other information

- Verify that no documentation files were missed in the migration
- You can use these commands to search for `*.md` files in a directory:
    - `find core/src -type f -name "*.md" -print`
- `find packages/angular -type f -name "*.md" -not -path
"**/node_modules/*" -print`
- I did add some redirect links in some of the existing markdown files
so they might still exist for that reason
- We should probably break up the contributing + component guide
documentation into smaller files, such as including best practices, but
I wanted to get everything in the same place first
- The contributing has sections on each of the packages that we could
move to that package's docs folder:
https://github.com/ionic-team/ionic-framework/blob/main/.github/CONTRIBUTING.md#core

---------

Co-authored-by: Maria Hutt <thetaPC@users.noreply.github.com>
2024-04-08 19:06:26 +00:00
renovate[bot]
7b6c330f17 chore(deps): update dependency @stencil/core to v4.14.0 (#29278)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@stencil/core](https://stenciljs.com/)
([source](https://togithub.com/ionic-team/stencil)) | [`4.13.0` ->
`4.14.0`](https://renovatebot.com/diffs/npm/@stencil%2fcore/4.13.0/4.14.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@stencil%2fcore/4.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@stencil%2fcore/4.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@stencil%2fcore/4.13.0/4.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@stencil%2fcore/4.13.0/4.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

###
[`v4.14.0`](https://togithub.com/ionic-team/stencil/blob/HEAD/CHANGELOG.md#-4140-2024-04-01)

[Compare
Source](https://togithub.com/ionic-team/stencil/compare/v4.13.0...v4.14.0)

##### Bug Fixes

- **mock-doc:** provide a local name
([#&#8203;5480](https://togithub.com/ionic-team/stencil/issues/5480))
([2f67b35](2f67b3526c)),
closes
[#&#8203;5342](https://togithub.com/ionic-team/stencil/issues/5342)
- **mock-doc:** resolve type issue for localName
([#&#8203;5595](https://togithub.com/ionic-team/stencil/issues/5595))
([d91af87](d91af87d4e)),
closes
[#&#8203;5342](https://togithub.com/ionic-team/stencil/issues/5342)

##### Features

- **testing:** allow to set screenshot timeout option in Jest v28+
([#&#8203;5537](https://togithub.com/ionic-team/stencil/issues/5537))
([6df12b2](6df12b2a44))
- **testing:** support deep piercing with Puppeteer
([#&#8203;5481](https://togithub.com/ionic-team/stencil/issues/5481))
([13d5d41](13d5d4188a))
- **typescript:** Update dependency typescript to v5.4.3
([#&#8203;5588](https://togithub.com/ionic-team/stencil/issues/5588))
([9d489e4](9d489e42a6))

</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 has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/ionic-team/ionic-framework).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNjkuMiIsInVwZGF0ZWRJblZlciI6IjM3LjI2OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: amandaesmith3 <amanda.s@ionic.io>
2024-04-08 17:58:37 +00:00
Sean Perkins
b3cd49bf22 perf(styles): compress distributed global stylesheets (#29275)
Issue number: N/A

---------

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

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

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

Ionic Framework developers make extensive use of multi-line comments in
the Sass files. However these comments are not stripped from the
generated output.

This leads to a significant increase to the file size of CSS and can
have an impact on runtime performance.

For example: https://cdn.jsdelivr.net/npm/@ionic/core/css/core.css has
183 lines of comment blocks before a single line of CSS.

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

- Compresses the generated output from Sass → CSS to strip out
multi-line comment blocks.
- Developers can use [loud
comments](https://sass-lang.com/documentation/syntax/comments/) if they
want to include comments in the generated output.
- In the case of just the core.css file, the file size goes from 20kb to
10kb.
  - The entire CSS global styles goes from 758 KB to 606kb.

## 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/.github/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: `7.8.4-dev.11712251308.1da8aede`
2024-04-05 14:01:20 +00:00
Sean Perkins
6c36cef241 docs(contributing): using vscode on windows (#29257)
Issue number: N/A

---------

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

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

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

Developers on a Windows environment using VS Code will experience an
issue when using prettier, where files will be tracked as modified even
though they have no actual diffs.

This is due to differences in how Unix based operating systems and
Windows treat carriage returns.

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

- Updates the contributing guide to educate developers using VS Code on
how to configure their local environment to not track additional diffs
when formatting the codebase.

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

This is the same documentation that exists on the ionic-docs repository
for the same reason. I've applied co-authored-by credit to Netkow for
his wonderful contribution to that documentation.

Co-authored-by: Matt Netkow <matt.netkow@gmail.com>
2024-04-04 15:08:02 +00:00
Maria Hutt
4d6edee89c fix(button): use clamp for font sizes on circle shape (#29200) 2024-04-03 14:28:04 -07:00
Liam DeBeasi
4b79bbef7d chore: sync with main (#29267) 2024-04-03 13:38:12 -04:00
Liam DeBeasi
ac7631a324 chore: sync with main 2024-04-03 13:17:55 -04:00
Liam DeBeasi
b5cb828861 merge release-7.8.3 (#29264) 2024-04-03 11:54:16 -04:00
ionitron
101ad5402f chore(): update package lock files 2024-04-03 15:38:52 +00:00
ionitron
de35fa8b94 v7.8.3 2024-04-03 15:38:11 +00:00
Liam DeBeasi
c766528a17 chore: run build (#29262)
I forgot to run the core build in
f726c35868,
so the latest Vue output target wrapper was not generated.
2024-04-03 13:59:10 +00:00
Brandy Carney
9b3cf9fbc2 chore(docs): move docs to the packages directory (#29256)
Move the `docs/` directory into the `packages/` directory. This will
enable us to create a top level `docs/` folder for onboarding and
contributing guidelines. It will also be necessary when migrating to
pnpm.

---------

Co-authored-by: Liam DeBeasi <liamdebeasi@users.noreply.github.com>
2024-04-03 01:27:00 +00:00
Amanda Johnston
ee5da7a747 fix(button): activated outline button in toolbar no longer blends into background on MD dark mode (#29216)
Issue number: N/A

---------

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

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

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

When using an outline-style button in a toolbar on `md` dark mode, the
activated style causes the button to become invisible.

Steps to repro in `main`:
1. Update the `css-variables` themes test to use the latest dark theme
styles (at least for v7) by replacing the contents of [this
file](https://github.com/ionic-team/ionic-framework/blob/main/core/src/themes/test/css-variables/css/dark.css)
with the [styles from the
docs](https://ionicframework.com/docs/theming/dark-mode#ionic-dark-theme).
2. Host the project locally and navigate to the test at
`themes/test/css-variables/index.html`.
3. Switch to dark mode within the page. Note that the activated outline
button isn't visible:

![image](https://github.com/ionic-team/ionic-framework/assets/90629384/fae1009f-4962-4e6b-b710-42deec083e84)


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

- Button styles corrected. The colors were correct for `ios` mode, but
had to be flipped for `md`, so I pulled the relevant styles into the
mode-specific stylesheets.
- CSS variables test has also been updated to use the same dark mode CSS
as in [the
docs](https://ionicframework.com/docs/theming/dark-mode#ionic-dark-theme),
as per the repro steps above. Let me know if you would rather this be
split into a separate PR.

Changes to the toolbar test were split into a separate PR to keep this
one clean and ensure the screenshot changes can be reviewed more
effectively: https://github.com/ionic-team/ionic-framework/pull/29231

## 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.
  5. Update the BREAKING.md file with the breaking change.
6. Add "BREAKING CHANGE: [...]" to the commit description when merging.
See
https://github.com/ionic-team/ionic-framework/blob/main/.github/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. -->

---------

Co-authored-by: ionitron <hi@ionicframework.com>
2024-04-02 20:25:19 +00:00
Amanda Johnston
c4bfc783e0 chore: remove Amanda from codeowners (#29252)
Removes myself as a codeowner in favor of the round robin assignment.
2024-04-02 15:16:55 +00:00
Liam DeBeasi
0137e732ce chore: remove myself from code owners (#29251)
I'm removing myself from code owners in several places in favor of the
auto-assignment. However, I did keep my name on areas of the code that I
felt are still higher risk for potential regressions due to the nature
of how the code is built/tested.
2024-04-02 14:24:39 +00:00
Brandy Carney
88ecb29e39 chore: remove self from codeowners (#29250)
Remove myself as the codeowner of specific directories as this bypasses
the random review assignment and automatically assigns me to any PRs
changing these files.
2024-04-02 13:59:58 +00:00
renovate[bot]
f726c35868 chore(deps): update dependency @stencil/vue-output-target to v0.8.8 (#29243)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@stencil/vue-output-target](https://stenciljs.com/)
([source](https://togithub.com/ionic-team/stencil-ds-output-targets)) |
[`0.8.7` ->
`0.8.8`](https://renovatebot.com/diffs/npm/@stencil%2fvue-output-target/0.8.7/0.8.8)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@stencil%2fvue-output-target/0.8.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@stencil%2fvue-output-target/0.8.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@stencil%2fvue-output-target/0.8.7/0.8.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@stencil%2fvue-output-target/0.8.7/0.8.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>ionic-team/stencil-ds-output-targets
(@&#8203;stencil/vue-output-target)</summary>

###
[`v0.8.8`](https://togithub.com/ionic-team/stencil-ds-output-targets/releases/tag/%40stencil/vue-output-target%400.8.8)

[Compare
Source](a3588e9051...@stencil/vue-output-target@0.8.8)

#### What's Changed

- fix(vue): v-model does not update when other events bubble up by
[@&#8203;liamdebeasi](https://togithub.com/liamdebeasi) in
[https://github.com/ionic-team/stencil-ds-output-targets/pull/425](https://togithub.com/ionic-team/stencil-ds-output-targets/pull/425)

**Full Changelog**:
https://github.com/ionic-team/stencil-ds-output-targets/compare/[@&#8203;stencil/angular-output-target](https://togithub.com/stencil/angular-output-target)[@&#8203;0](https://togithub.com/0).8.4...[@&#8203;stencil/vue-output-target](https://togithub.com/stencil/vue-output-target)[@&#8203;0](https://togithub.com/0).8.8

</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 has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/ionic-team/ionic-framework).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNjkuMiIsInVwZGF0ZWRJblZlciI6IjM3LjI2OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-02 13:49:18 +00:00
Liam DeBeasi
4a9d84ecbd chore: remove mapsandapps from issue auto assignment (#29248) 2024-04-01 22:11:07 +00:00
Liam DeBeasi
f08759c2b8 fix(popover): viewport can be scrolled if no content present (#29215)
Issue number: resolves #29211

---------

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

In https://github.com/ionic-team/ionic-framework/pull/28861 I fixed a
bug that caused `.popover-viewport` to have `overflow: hidden`. In
reality, this code should have always applied but due to an incorrect
selector it never did.

As it turns out in
https://github.com/ionic-team/ionic-framework/issues/29211, some
developers were relying on the broken behavior to build their
applications. In particular, developers were using `ion-popover` without
an `ion-content`. The linked change made it so that using popovers
without `ion-content` were not scrollable.

After talking with @mapsandapps we think it makes sense to officially
support this behavior. We support using [modals without
`ion-content`](https://ionicframework.com/docs/api/modal#custom-dialogs),
and we could not think of a reason to not support the same use case for
popover.

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

- If the `.popover-viewport` element has a child content then
`.popover-viewport `will not be scrollable.
- If the `.popover-viewport` element does not have a child content then
`.popover-viewport` will be scrollable.

I implemented this behavior using progressive enhancement via `:has`.
The [`:has` pseudo-class](https://caniuse.com/?search=%3Ahas) has
cross-browser support. Ionic v7 supports some versions of browsers that
do not have `:has` support. As a result, we fall back to the existing
behavior in this environment. Developers are able to get this behavior
on older browsers by explicitly setting `overflow: auto` on
`.popover-viewport`.

Fortunately, we will be dropping support for several of the older
browsers versions in Ionic v8, so the need to do the manual opt-in
should be less frequent as time goes on.

## 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/.github/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: `7.8.2-dev.11711383079.118d48a5`

Testing:

1. Open https://codepen.io/liamdebeasi/pen/JjVJrZQ?editors=1100 (this
has a dev build installed)
2. Click each button to open a popover.
3. Verify that each popover can be scrolled.

I could not find a great way to automate this test, but let me know if
anyone has ideas!
2024-04-01 20:29:03 +00:00
Amanda Johnston
2053bc77a6 test(toolbar): add dark theme to basic test (#29231)
Issue number: N/A

---------

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

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

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

The toolbar `basic` test only checks light theme. Dark theme coverage is
required to test against the bug fixed in
https://github.com/ionic-team/ionic-framework/pull/29216.

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

Dark theme coverage added. This required converting the test to
`page.setContent` instead of `page.goto`, so I went ahead and split the
captured toolbars into multiple tests, including some cleanup of the
test content. Since this included changes across many different tests,
even ones not strictly related to the bug, this work has been split into
a separate PR.

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

---------

Co-authored-by: ionitron <hi@ionicframework.com>
2024-04-01 18:18:42 +00:00
Liam DeBeasi
02e05bd7cb merge release-8.0.0-rc.0 (#29232) 2024-03-27 11:35:23 -04:00
ionitron
fa387cb2a2 chore(): update package lock files 2024-03-27 15:24:33 +00:00
ionitron
8ab116150c v8.0.0-rc.0 2024-03-27 15:23:52 +00:00
Liam DeBeasi
8c9182c52f merge release-8.0.0-beta.4 (#29230) 2024-03-27 11:16:27 -04:00
Liam DeBeasi
c0a8e7a95d chore: clean up changelog 2024-03-27 11:02:19 -04:00
ionitron
0c5a2967d8 chore(): update package lock files 2024-03-27 14:57:27 +00:00
ionitron
6ebb3c4e38 v8.0.0-beta.4 2024-03-27 14:56:50 +00:00
Liam DeBeasi
cdcb6decbd chore: sync with main (#29229) 2024-03-27 10:46:58 -04:00
Liam DeBeasi
652ea169b7 chore: update package-lock 2024-03-27 10:29:57 -04:00
Liam DeBeasi
42c09a7ea1 chore: sync with main 2024-03-27 09:54:28 -04:00
Liam DeBeasi
c23be1befd merge release-7.8.2 2024-03-27 09:45:05 -04:00
ionitron
a2923aaeb3 chore(): update package lock files 2024-03-27 13:34:23 +00:00
ionitron
eeab96de55 v7.8.2 2024-03-27 13:33:47 +00:00
Liam DeBeasi
6c500fd6b2 feat(input): add input-password-toggle component (#29175)
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 current behavior?
<!-- Please describe the current behavior that you are modifying. -->

When given a password input it is hard to know what users are typing as
the contents of the input are obscured. As a result, it is a common
pattern to have a button that lets users temporarily toggle the
visibility of the password so they can correct any mistakes. Ionic
currently has the infrastructure for developers to implement this on
their own, but this use case is so common that the team thinks it is
worth having this functionality built-in to Ionic.

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

- Introduces the `ion-input-password-toggle` component. This component
is a button that toggles the visibility of the text in the input it is
slotted into.

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


⚠️ Give co-author credit to
https://github.com/ionic-team/ionic-framework/pull/29141 on merge.

Docs PR: https://github.com/ionic-team/ionic-docs/pull/3541

Note: We did not do the approach listed in the other PR due to
https://github.com/ionic-team/ionic-framework/pull/29141#discussion_r1523631811.

---------

Co-authored-by: OS-giulianasilva <OS-giulianasilva@users.noreply.github.com>
2024-03-25 13:22:06 -04:00
renovate[bot]
ca0923812a chore(deps): update dependency @capacitor/core to v5.7.4 (#29209)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@capacitor/core](https://capacitorjs.com)
([source](https://togithub.com/ionic-team/capacitor)) | [`5.7.3` ->
`5.7.4`](https://renovatebot.com/diffs/npm/@capacitor%2fcore/5.7.3/5.7.4)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fcore/5.7.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capacitor%2fcore/5.7.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capacitor%2fcore/5.7.3/5.7.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fcore/5.7.3/5.7.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

###
[`v5.7.4`](https://togithub.com/ionic-team/capacitor/releases/tag/5.7.4)

[Compare
Source](https://togithub.com/ionic-team/capacitor/compare/5.7.3...5.7.4)

##### Bug Fixes

- **http:** change proxy url generation
([30a32f4](30a32f467f))

</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 has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/ionic-team/ionic-framework).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNjkuMiIsInVwZGF0ZWRJblZlciI6IjM3LjI2OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-25 13:31:09 +00:00
renovate[bot]
1be956bd18 chore(deps): update dependency @stencil/core to v4.13.0 (#29203)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@stencil/core](https://stenciljs.com/)
([source](https://togithub.com/ionic-team/stencil)) | [`4.12.6` ->
`4.13.0`](https://renovatebot.com/diffs/npm/@stencil%2fcore/4.12.6/4.13.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@stencil%2fcore/4.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@stencil%2fcore/4.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@stencil%2fcore/4.12.6/4.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@stencil%2fcore/4.12.6/4.13.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

###
[`v4.13.0`](https://togithub.com/ionic-team/stencil/blob/HEAD/CHANGELOG.md#-4130-2024-03-18)

[Compare
Source](https://togithub.com/ionic-team/stencil/compare/v4.12.6...v4.13.0)

##### Bug Fixes

- **compiler:** allow to set custom root directory
([#&#8203;5446](https://togithub.com/ionic-team/stencil/issues/5446))
([b6b9617](b6b96175c5))
- **compiler:** don't validate references for
[@&#8203;Prop](https://togithub.com/Prop),
[@&#8203;Method](https://togithub.com/Method) and
[@&#8203;Event](https://togithub.com/Event) decorator
([#&#8203;5475](https://togithub.com/ionic-team/stencil/issues/5475))
([3e45a82](3e45a82353)),
closes
[#&#8203;1352](https://togithub.com/ionic-team/stencil/issues/1352)
- **renderer:** fix conditional rendering issue
([#&#8203;5365](https://togithub.com/ionic-team/stencil/issues/5365))
([5aa886e](5aa886eb52)),
closes
[#&#8203;5335](https://togithub.com/ionic-team/stencil/issues/5335)
- **renderer:** fix missing slot ref callback handling
([#&#8203;5337](https://togithub.com/ionic-team/stencil/issues/5337))
([41f877e](41f877ec48)),
closes
[#&#8203;5335](https://togithub.com/ionic-team/stencil/issues/5335)
- **runtime:** remove `forceUpdate` in `appendChild` patch
([#&#8203;5437](https://togithub.com/ionic-team/stencil/issues/5437))
([e03795b](e03795b38e))
- **sys:** fix expected types for `createNodeLogger` and `createNodeSys`
([#&#8203;5375](https://togithub.com/ionic-team/stencil/issues/5375))
([7a70281](7a70281bb4))
- **testing:** use viewport for Puppeteer screenshot clip dimensions
([#&#8203;5359](https://togithub.com/ionic-team/stencil/issues/5359))
([c879800](c8798002ab)),
closes
[#&#8203;5353](https://togithub.com/ionic-team/stencil/issues/5353)

##### Features

- **dev-server:** add "ping" route
([#&#8203;5414](https://togithub.com/ionic-team/stencil/issues/5414))
([b279858](b279858e2f))
- **typescript:** Update dependency typescript to ~5.4.0
([#&#8203;5464](https://togithub.com/ionic-team/stencil/issues/5464))
([0833dc4](0833dc4929))

#### 🍍
[4.12.6](https://togithub.com/ionic-team/stencil/compare/v4.12.5...v4.12.6)
(2024-03-11)

##### Bug Fixes

- **cli:** move version logging earlier in CLI to allow `-v`,
`--version`
([#&#8203;5425](https://togithub.com/ionic-team/stencil/issues/5425))
([194b0fc](194b0fc0d9))
- **compiler:** fix generated import statement
([#&#8203;5419](https://togithub.com/ionic-team/stencil/issues/5419))
([502da1b](502da1bc3d))
- **test:** ensure screenshot dir is cleaned up
([#&#8203;5421](https://togithub.com/ionic-team/stencil/issues/5421))
([15e7a49](15e7a4960b))

#### 💙
[4.12.5](https://togithub.com/ionic-team/stencil/compare/v4.12.4...v4.12.5)
(2024-03-04)

##### Bug Fixes

- **custom-elements:** hydrate on client side
([#&#8203;5317](https://togithub.com/ionic-team/stencil/issues/5317))
([d809658](d809658635)),
closes
[#&#8203;3319](https://togithub.com/ionic-team/stencil/issues/3319)

#### 🐮
[4.12.4](https://togithub.com/ionic-team/stencil/compare/v4.12.3...v4.12.4)
(2024-02-26)

##### Bug Fixes

- **build:** address issue with dynamic import and vite
([#&#8203;5399](https://togithub.com/ionic-team/stencil/issues/5399))
([8ebacae](8ebacae110)),
closes
[#&#8203;5389](https://togithub.com/ionic-team/stencil/issues/5389)

#### 🐍
[4.12.3](https://togithub.com/ionic-team/stencil/compare/v4.12.2...v4.12.3)
(2024-02-20)

##### Bug Fixes

- **compiler:** point crypto import at `crypto` instead of `node:crypto`
([#&#8203;5369](https://togithub.com/ionic-team/stencil/issues/5369))
([7fb783f](7fb783fbc0)),
closes
[#&#8203;5358](https://togithub.com/ionic-team/stencil/issues/5358)
- **runtime:** replace `innerHTML` with `textContent` for CSS injection
([#&#8203;5207](https://togithub.com/ionic-team/stencil/issues/5207))
([8de2ab5](8de2ab5a8a)),
closes
[#&#8203;5206](https://togithub.com/ionic-team/stencil/issues/5206)

#### 🎯
[4.12.2](https://togithub.com/ionic-team/stencil/compare/v4.12.1...v4.12.2)
(2024-02-12)

##### Bug Fixes

- **compiler:** support async globalScripts functions
([#&#8203;5158](https://togithub.com/ionic-team/stencil/issues/5158))
([8a129ce](8a129ce734)),
closes
[#&#8203;3392](https://togithub.com/ionic-team/stencil/issues/3392)
- **mock-doc:** overwrite parentElement in MockHTMLElement to return
null
([#&#8203;5336](https://togithub.com/ionic-team/stencil/issues/5336))
([0d9ed22](0d9ed22c80)),
closes
[#&#8203;5252](https://togithub.com/ionic-team/stencil/issues/5252)

#### 🏸
[4.12.1](https://togithub.com/ionic-team/stencil/compare/v4.12.0...v4.12.1)
(2024-02-05)

##### Bug Fixes

- **mock-doc:** improve error message when `:scope` selector is used
([#&#8203;5318](https://togithub.com/ionic-team/stencil/issues/5318))
([f5d4e98](f5d4e98d0e))
- **runtime:** dynamic slot name change
([#&#8203;5304](https://togithub.com/ionic-team/stencil/issues/5304))
([9d9fe41](9d9fe419c6)),
closes
[#&#8203;2982](https://togithub.com/ionic-team/stencil/issues/2982)
- **runtime:** only generate lazy build CSS when there are component
tags
([#&#8203;5305](https://togithub.com/ionic-team/stencil/issues/5305))
([a0c1bd0](a0c1bd0f91)),
closes
[#&#8203;3771](https://togithub.com/ionic-team/stencil/issues/3771)

</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 has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/ionic-team/ionic-framework).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNjEuMCIsInVwZGF0ZWRJblZlciI6IjM3LjI2MS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Liam DeBeasi <liamdebeasi@users.noreply.github.com>
2024-03-22 13:54:02 +00:00
Liam DeBeasi
6e477b743e refactor(searchbar): autocapitalize defaults to off (#29107)
BREAKING CHANGE: The `autocapitalize` property on Searchbar now defaults to `'off'`.
2024-03-22 09:13:15 -04:00
Maria Hutt
44529f0a62 feat(button): add circular shape as round (#29161)
Co-authored-by: ionitron <hi@ionicframework.com>
Co-authored-by: Brandy Carney <brandyscarney@users.noreply.github.com>
2024-03-21 11:49:26 -07:00
Liam DeBeasi
500854d929 refactor(tap-click): use pointer events api (#29192)
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 current behavior?
<!-- Please describe the current behavior that you are modifying. -->

[Amanda pointed out that the ripple effect for the Button inside of
InputPasswordToggle was not
working](https://github.com/ionic-team/ionic-framework/pull/29175#discussion_r1532627841).
I found out that calling `ev.preventDefault` on `pointerdown` causes
`mouseup` to not get fired. On desktop, we rely on `mouseup` to know
when to add the ripple effect. (`touchend` is not impacted)

Interestingly, calling `ev.preventDefault` on `pointerdown` does **not**
prevent `pointerup` from being fired. The idea here is that if we
migrate the tap click utility to use the PointerEvents API instead of
separate mouse/touch listeners we can keep the existing tap click
behavior while also fixing the bug that Amanda noted.

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

- Tap click nows listens for the Pointer Events instead of separate
mouse/touch events

Impact to developers is fairly minimal. There should be no behavior
change (other than the bug I noted being fixed). There should be a very
small perf boost because this util now only adds 4 event listeners on
the document instead of 7 previously.

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


Reviewers: Please manually test this on desktop devices as well as iOS
and Android devices (not Chrome Dev Tools. iOS simulators are fine).
Test that components such as `ion-button` correctly add the activated
state (or ripple effect for MD). Also verify that the activated state is
not added when tapping the button and then scrolling. For desktop, check
that right clicking does not add the activated state.
2024-03-21 14:02:38 -04:00
Liam DeBeasi
8ad66c03d7 fix(searchbar): autocapitalize is initialized correctly (#29197)
Issue number: resolves #29193

---------

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

In an attempt to preserve backwards compatibility when adding
`autocapitalize` to Searchbar, we used `!` to indicate that the prop was
never undefined. The `autocapitalize` on `HTMLElement` expects this
value to be a string and never undefined.

For the purposes of the property on Searchbar, setting this prop to one
of the accepted values would constitute a breaking change because it
would override the default browser behavior (which we previously relied
upon). As a result, we used `!` to not set a default prop but inform
TypeScript that this prop is always defined. This unintentionally made
it so developers needed to define the `autocapitalize` property every
time which is not what we want.

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

- `autocapitalize` now defaults to the `'default'` keyword. This is an
internal keyword that is used to tell Ionic to **not** set the
`autocapitalize` attribute on the inner `input` element and instead rely
on the default browser behavior. This satisfies the `HTMLElement`
requirement that `autocapitalize` is never undefined. In Ionic 8 this
`'default'` value will be replaced with `'off'`.

[Typescript currently sets the `HTMLElement` `autocapitalize` type to
`string`](65812bf3ec/src/lib/dom.generated.d.ts (L10087))
which is why we can add a `'default'` keyword here. There is some risk
that if these type definitions change in the future that applications
may encounter errors. However, changing this on the TypeScript side
would itself be a breaking change. Additionally, we are moving away from
`'default'` in Ionic 8, so I think this is an acceptable amount of risk.

## 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/.github/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: `7.8.2-dev.11711027016.13b2a920`

Tested in a React starter app with Searchbar, and I verified this fix
works.
2024-03-21 16:50:00 +00:00
Liam DeBeasi
9efeb0ad31 refactor(haptics): remove cordova haptics support (#29186)
BREAKING CHANGE: Support for the Cordova Haptics plugin has been removed. Components that integrate with haptics, such as `ion-picker` and `ion-toggle`, will continue to function but will no longer play haptics in Cordova environments. Developers should migrate to Capacitor to continue to have haptics in these components.
2024-03-20 17:28:34 -04:00
Liam DeBeasi
b0a10dfa56 fix(angular): schematics account for new theme files (#29185)
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 current behavior?
<!-- Please describe the current behavior that you are modifying. -->

While doing other work I noticed that the Angular schematics still
reference the old dark theme.

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

- The Angular schematics now import the new dark theme found in Ionic
v8.
## 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/.github/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. -->
2024-03-20 14:02:32 -04:00
Liam DeBeasi
63a2d4fb44 refactor(input, textarea) remove unused event (#29183) 2024-03-20 12:47:49 -04:00
Sean Perkins
892594de06 feat: remove css animations support for ionic animations (#29123)
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 current behavior?
<!-- Please describe the current behavior that you are modifying. -->

Ionic Framework provides a small utility wrapper around the Web
Animations API. Historically not all browsers that Ionic Framework
supported, had support for the Web Animations API. To offer backwards
compatibility, Ionic Framework provided fallback behaviors for the
different wrapped APIs.


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

- Removes the legacy CSS animations fallback behavior from the Web
Animations API animation utility. Maintaining a few no-op behaviors for
test environments.
- Resolved a few internal type usages that were casting to any
- Removed spec tests that were testing the fallback CSS animations
behavior and/or already had test coverage from other unit tests.

## Does this introduce a breaking change?

- [x] Yes
- [ ] 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/.github/CONTRIBUTING.md#footer
for more information.
-->

All modern browsers support the Web Animations API today. If a developer
needs to target an older browser that does not support Web Animations,
they should either use [a
polyfill](https://github.com/web-animations/web-animations-js), or
implement the fallback behavior themselves.

## Other information

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

---------

Co-authored-by: Liam DeBeasi <liamdebeasi@users.noreply.github.com>
2024-03-20 11:23:00 -04:00
Liam DeBeasi
bb1402e71e merge release-8.0.0-beta.3 (#29191) 2024-03-20 10:54:55 -04:00
Liam DeBeasi
90fcddea3d chore: clean up changelog 2024-03-20 10:43:06 -04:00
ionitron
f6c3141a82 chore(): update package lock files 2024-03-20 14:36:55 +00:00
ionitron
48abe43a85 v8.0.0-beta.3 2024-03-20 14:36:07 +00:00
Liam DeBeasi
a8302769dd chore: use lerna 5 2024-03-20 10:27:32 -04:00
Liam DeBeasi
3057ab5217 chore: update package-lock 2024-03-20 10:15:35 -04:00
Liam DeBeasi
4a29c64675 chore: sync with main (#29189) 2024-03-20 10:08:16 -04:00
Liam DeBeasi
cdcb2025c9 chore(ci): use local version of lerna 2024-03-20 09:54:50 -04:00
Liam DeBeasi
8c578da8cb chore: remove additional merge conflict markers 2024-03-20 09:53:33 -04:00
Liam DeBeasi
8c56b0b94a chore: sync with main 2024-03-20 09:50:04 -04:00
Liam DeBeasi
d1253c08c1 merge release-7.8.1 (#29188) 2024-03-20 09:34:17 -04:00
ionitron
7ca6b80b04 chore(): update package lock files 2024-03-20 13:19:42 +00:00
ionitron
4cd8fb15af v7.8.1 2024-03-20 13:18:53 +00:00
Liam DeBeasi
78653868fe chore: sync with main (#29184) 2024-03-19 14:54:15 -04:00
ionitron
d9f97d0f52 chore(): add updated snapshots 2024-03-19 18:42:46 +00:00
Liam DeBeasi
9619ee30d9 test(item): update terminology to palettes 2024-03-19 14:26:59 -04:00
Liam DeBeasi
e8f63560eb chore: sync with main 2024-03-19 14:24:51 -04:00
Liam DeBeasi
58d217d0cf fix(react): avoid definitely typed errors with @types/react@18 (#29182)
Issue number: resolves #29178

---------

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

[DefinitelyTyped removed the `onPointerEnterCaptured` and
`onPointerLeaveCaptured` types for
`@types/react`](https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/69006).
This caused issues when multiple versions of `@types/react` are
installed where an older version inlined these types, but they did not
exist in newer versions.

For Ionic React, we build with React 16 which did inline the types. In
an Ionic React starter app we build with React 18 which does not want
these types. As a result, there is a type mismatch.

Note that this type change is being [reverted in React
16-17](https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/69006#discussioncomment-8826095)
so presumably this issue will go away in its own for those versions.
However, developers are building with React 18 too, so this issue will
persist for those developers.

However, React 17 should still have this problem (at least until the
change is reverted), yet the build here passes. The main difference is
that the `onPointer{Enter,Leave}Captured` event is no longer inlined.
After talking with the Stencil team this is the current understanding of
why the issue no longer reproduces.


**Building with React 17**

```ts
import type { JSX as LocalJSX } from '@ionic/core/components';
import React from 'react';
import type { IonicReactProps } from './IonicReactProps';
export declare const IonRouterOutlet: React.ForwardRefExoticComponent<Pick<LocalJSX.IonRouterOutlet & {
    basePath?: string | undefined;
    ref?: React.Ref<any> | undefined;
    ionPage?: boolean | undefined;
} & IonicReactProps & Omit<React.HTMLAttributes<HTMLIonRouterOutletElement>, "style" | "placeholder">, "children" | "slot" | "title" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "spellCheck" | "tabIndex" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | keyof IonicReactProps | keyof LocalJSX.IonRouterOutlet | "basePath" | "ionPage"> & React.RefAttributes<HTMLIonRouterOutletElement>>;
```

**Building with React 18**

```ts
export declare const IonRouterOutlet: React.ForwardRefExoticComponent<Omit<LocalJSX.IonRouterOutlet & {
    basePath?: string | undefined;
    ref?: React.Ref<any> | undefined;
    ionPage?: boolean | undefined;
} & IonicReactProps & Omit<React.HTMLAttributes<HTMLIonRouterOutletElement>, "style" | "placeholder">, "ref"> & React.RefAttributes<HTMLIonRouterOutletElement>>;
```

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

- Updated types in our React test apps and verified that the [issue
reproduces there without this
fix](https://github.com/ionic-team/ionic-framework/actions/runs/8345186602).
- Updated Ionic React and Ionic React Router to build with React 17.

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

Ionic v7 expects React 17 or newer, so building with React 17 instead of
React 16 is not a breaking change.

<!--
  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/.github/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: `7.8.1-dev.11710859149.114e57ae` Verified with sample repro
2024-03-19 17:36:29 +00:00
Liam DeBeasi
acc1042124 fix(input, textarea, select): account for multiple start/end slot elements (#29172)
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 current behavior?
<!-- Please describe the current behavior that you are modifying. -->

We add margin on content in the start/end slots so they do not run up
against either the visible text label of the text in the input. However,
we did not account for when multiple elements are placed into the same
slot. As a result, this margin is added more times than it needs to be.

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

- Updated the selector so the margin is only applied to either the last
or first element in the slot.

## 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/.github/CONTRIBUTING.md#footer
for more information.
-->


## Other information

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


Test Steps: 

1. Check out `feature-8.0`
2. Add multiple `ion-button` elements into either the start or end slot
on an input (you can reuse the template in
`src/components/input/test/slots`
3. Observe that margin is added to every `ion-button`.

---------

Co-authored-by: ionitron <hi@ionicframework.com>
2024-03-19 13:36:06 -04:00
Maria Hutt
73d661a3a2 chore(github-actions): use flexible options to update screenshots (#29044)
Issue number: N/A

---------

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

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

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

GitHub actions allow screenshots to be updated either by updating all
the components or providing a component name.

If a component name is given, then the screenshots will only be updated
on `src/components/{component-name}`. This isn't ideal when wanting to
update a specific path.

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

- The script no longer strips out `ion-`. The developer needs to submit
a valid component name or valid path.
- The script no longer appends the value to `src/components/`
- The script will run all instances of a component if only the name is
given
- The script will run tests within a given path

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

How to test:

1. Create a new branch based off this one
2. Make a style change
3. Push it to the new branch
4. Update the reference images using the new branch
5. This will show you all the options

Recommended to test:
- a component name (`chip`)
- a path (`src/components/chip/test/a11y`)
- a component that doesn't exist (`random-component`)
- no provided component, leave the first input blank
2024-03-19 17:24:31 +00:00
renovate[bot]
fc5d692a05 chore(deps): update dependency @capacitor/core to v5.7.3 (#29176)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@capacitor/core](https://capacitorjs.com)
([source](https://togithub.com/ionic-team/capacitor)) | [`5.7.2` ->
`5.7.3`](https://renovatebot.com/diffs/npm/@capacitor%2fcore/5.7.2/5.7.3)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@capacitor%2fcore/5.7.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@capacitor%2fcore/5.7.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@capacitor%2fcore/5.7.2/5.7.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@capacitor%2fcore/5.7.2/5.7.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

###
[`v5.7.3`](https://togithub.com/ionic-team/capacitor/releases/tag/5.7.3)

[Compare
Source](https://togithub.com/ionic-team/capacitor/compare/5.7.2...5.7.3)

##### Bug Fixes

- **cli:** apkName for multi-dimensional flavors
([#&#8203;7347](https://togithub.com/ionic-team/capacitor/issues/7347))
([771d678](771d67820e))
- **http:** keep original URL properties on proxy
([#&#8203;7338](https://togithub.com/ionic-team/capacitor/issues/7338))
([9ef8b1d](9ef8b1d5bc))
- **http:** Make proxy work with Request objects
([#&#8203;7348](https://togithub.com/ionic-team/capacitor/issues/7348))
([#&#8203;7351](https://togithub.com/ionic-team/capacitor/issues/7351))
([0139aa8](0139aa8cf3))
- **http:** set port for proxy url
([#&#8203;7346](https://togithub.com/ionic-team/capacitor/issues/7346))
([5bd33c4](5bd33c4080))
- **ios:** overwrite CORS headers on livereload
([#&#8203;7349](https://togithub.com/ionic-team/capacitor/issues/7349))
([1aad9c6](1aad9c6aa9))

</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 has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/ionic-team/ionic-framework).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNDUuMCIsInVwZGF0ZWRJblZlciI6IjM3LjI0NS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-19 13:43:58 +00:00
renovate[bot]
e50d32a388 chore(deps): update dependency @stencil/core to v4.12.6 (#29165)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@stencil/core](https://stenciljs.com/)
([source](https://togithub.com/ionic-team/stencil)) | [`4.12.5` ->
`4.12.6`](https://renovatebot.com/diffs/npm/@stencil%2fcore/4.12.5/4.12.6)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@stencil%2fcore/4.12.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@stencil%2fcore/4.12.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@stencil%2fcore/4.12.5/4.12.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@stencil%2fcore/4.12.5/4.12.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

###
[`v4.12.6`](https://togithub.com/ionic-team/stencil/blob/HEAD/CHANGELOG.md#-4126-2024-03-11)

[Compare
Source](https://togithub.com/ionic-team/stencil/compare/v4.12.5...v4.12.6)

##### Bug Fixes

- **cli:** move version logging earlier in CLI to allow `-v`,
`--version`
([#&#8203;5425](https://togithub.com/ionic-team/stencil/issues/5425))
([194b0fc](194b0fc0d9))
- **compiler:** fix generated import statement
([#&#8203;5419](https://togithub.com/ionic-team/stencil/issues/5419))
([502da1b](502da1bc3d))
- **test:** ensure screenshot dir is cleaned up
([#&#8203;5421](https://togithub.com/ionic-team/stencil/issues/5421))
([15e7a49](15e7a4960b))

</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 has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/ionic-team/ionic-framework).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNDUuMCIsInVwZGF0ZWRJblZlciI6IjM3LjI0NS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-18 21:07:26 +00:00
Sean Perkins
761e1b47dd feat: rename dark/high-contrast themes to palettes (#29149)
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 current behavior?
<!-- Please describe the current behavior that you are modifying. -->

Ionic Framework currently plans to offer dark and high contrast "themes"
in v8. However this naming nomenclature conflicts with a significant new
feature that the team is working on towards v9+.

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

- Migrates previous dark and high contrast "themes" to "palettes"
- Updates test infrastructure to import from the new stylesheet
locations

## Does this introduce a breaking change?

- [x] Yes
- [ ] 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/.github/CONTRIBUTING.md#footer
for more information.
-->

Developers that have updated to the Ionic v8 beta and have implemented
the dark and high contrast themes, will need to update the import path:

```diff
-@import '@ionic/angular/css/themes/dark.always.css';
+@import '@ionic/angular/css/palettes/dark.always.css';
```


## Other information

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

Blocked by: https://github.com/ionic-team/ionic-framework/pull/29148.
Review that first.

Documentation PR: https://github.com/ionic-team/ionic-docs/pull/3521

---------

Co-authored-by: Liam DeBeasi <liamdebeasi@users.noreply.github.com>
2024-03-18 14:45:47 -04:00
Liam DeBeasi
55464ddf84 docs(test): fix link for configuring docker for headed tests (#29173)
Creates a link to the correct section of the docs. The old verbiage
existed when the configuring step was in the section below.
2024-03-18 15:35:11 +00:00
Liam DeBeasi
e98620ee99 test(ci): run tests in docker container (#28893)
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 current behavior?
<!-- Please describe the current behavior that you are modifying. -->

The team currently faces two challenges:

1. Verifying visual changes locally is difficult because we cannot use
the existing ground truths as they were generated in Linux environments
and most of our team uses either macOS or Windows. While team members
can generate ground truths in the correct environment, they need to
remember to do that first before making changes.
2. Updating visual diffs is time consuming and can only be done by team
members. Our GitHub Action runs the entire test suite which can take ~10
even if only a handful of screenshots are generated. Additionally, this
job can only be run by team members meaning community contributors
cannot update/add screenshots. This limits them to non-visual tasks when
contributing. In the event that they do want to make visual changes, the
team needs to copy all their code into a branch and manually run
screenshot diffs for them.

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

- This PR introduces the ability to run all Playwright tests inside of a
Docker container using an image with Playwright dependencies. The
container will have access to the local project, so developers can make
changes and then run tests in the container after the changes are
compiled. This enables anyone to propose new screenshot changes.
However, the "update screenshot" job will still be available for folks
who do not want/are unable to use docker.
- There are some typeface differences between GH Actions and the Docker
image which is why there are a handful of screenshots that needed to be
updated.

One risk here is that the Playwright npm and Docker image versions must
be kept in sync. As a result, I also updatRenovate to allow us to auto
update the npm and Docker image versions at the same time.

## 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.
  3. Update the BREAKING.md file with the breaking change.
4. Add "BREAKING CHANGE: [...]" to the commit description when merging.
See
https://github.com/ionic-team/ionic-framework/blob/main/.github/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. -->


⚠️ There are still some issues I need to sort out with mounting the
local project on Windows. However, using Ubuntu with the linux subsystem
for windows can be used as a workaround. I'd like to merge this so we
can start testing it in our day-to-day workflow and ironing out any
bugs.

---------

Co-authored-by: ionitron <hi@ionicframework.com>
2024-03-18 14:08:30 +00:00
Liam DeBeasi
5577d3866f refactor(angular): remove angular 14 and 15 dependencies (#29169)
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 current behavior?
<!-- Please describe the current behavior that you are modifying. -->

With Ionic 8 we are dropping Angular 14 and 15 support.

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

- This PR officially drops Angular 14 and 15 support.
Note: The work to do this was done a while ago, but this branch was
never merged into `feature-8.0`. The breaking change was already noted
in the breaking change guide, so this is not an additional breaking
change on top of what was already specified.


## Does this introduce a breaking change?

- [x] Yes
- [ ] 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/.github/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. -->

---------

Co-authored-by: Brandy Carney <brandyscarney@users.noreply.github.com>
Co-authored-by: Maria Hutt <thetaPC@users.noreply.github.com>
Co-authored-by: Amanda Johnston <90629384+amandaejohnston@users.noreply.github.com>
2024-03-15 21:47:04 -04:00
Brandy Carney
02f89bbc42 docs(contributing): update component guide with order for states (#29111)
Updates the component guide to use the proper order for the `focused`,
`hover`, and `activated` states. Reorders the sections based on the
recommended order and adds emphasis and blockquotes to call out the
order.

I have created ticket
[FW-6039](https://outsystemsrd.atlassian.net/browse/FW-6039) for
investigating components that don't follow the recommended order here.

---------

Co-authored-by: Sean Perkins <13732623+sean-perkins@users.noreply.github.com>
2024-03-15 21:47:35 +00:00
Liam DeBeasi
f75977699d perf(datetime): calendar body shows immediately in modal on ios (#29163)
Issue number: resolves #24542

---------

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

WebKit has a quirk where IntersectionObserver callbacks are delayed
until after an accelerated animation finishes if the "root" specified in
the config is the browser viewport (the default behavior if "root" is
not specified) This means that when presenting a datetime in a modal on
iOS the calendar body appears blank until the modal animation finishes.

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

- We can work around this issue by observing an element inside of the
datetime component and using the datetime component itself as the root.
To do this, I added an `.intersection-tracker` element inside of
datetime. This element has a dimension of 0x0 so it should not affect
component layout or functionality.

I opted to add this element instead of re-using an existing element
because the existing elements are not guaranteed to always be in the DOM
due to different datetime presentation styles.

| `main` | branch |
| - | - |
| <video
src="https://github.com/ionic-team/ionic-framework/assets/2721089/e84d111d-b156-4f45-887a-d68a1097e5dd"></video>
| <video
src="https://github.com/ionic-team/ionic-framework/assets/2721089/3dccf1e5-cf79-46ab-b542-0537fd46fa76"></video>
|


## 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/.github/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: `7.8.1-dev.11710449785.14ebd5a0`

---------

Co-authored-by: Amanda Johnston <90629384+amandaejohnston@users.noreply.github.com>
2024-03-15 16:17:35 +00:00
Liam DeBeasi
fdfecd32c3 fix(header): iOS headers in MD app are not hidden (#29164)
Issue number: resolves #28867

---------

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

I missed an edge case in
https://github.com/ionic-team/ionic-framework/pull/28277 that caused an
MD headers in an MD app to be hidden due to the presence of an iOS
header (via `mode="ios"`). This was happening because I forgot to scope
the selector in `header.ios.scss` to only iOS headers.

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

- The headers in the relevant selector are now scoped to the iOS headers
which avoids this bug while preserving the anti-flicker mechanism added
in the linked PR.

## 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/.github/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: `7.8.1-dev.11710452743.1ca99e5e`

---------

Co-authored-by: ionitron <hi@ionicframework.com>
2024-03-15 16:03:42 +00:00
Liam DeBeasi
d67fdcc43a test(item): use themes options in config (#29168)
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 current behavior?
<!-- Please describe the current behavior that you are modifying. -->

In https://github.com/ionic-team/ionic-framework/pull/27134 we fixed a
bug for item button colors on dark mode. We added a test for this in
dark mode, but it was created before we had the infrastructure to test
dark mode within Playwright. As a result, the dark mode theme is hard
coded into the test.

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

- This test has been simplified to only test the things we need to test
- It also relies on the built-in dark theme testing instead of hard
coding the theme.

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

---------

Co-authored-by: ionitron <hi@ionicframework.com>
2024-03-15 16:03:30 +00:00
Liam DeBeasi
56014cf64c fix(range, select): prefer labels passed by developer (#29145) 2024-03-14 11:14:21 -04:00
renovate[bot]
9ed692ce4f chore(deps): update dependency @playwright/test to v1.42.1 (#29162)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@playwright/test](https://playwright.dev)
([source](https://togithub.com/microsoft/playwright)) | [`1.42.0` ->
`1.42.1`](https://renovatebot.com/diffs/npm/@playwright%2ftest/1.42.0/1.42.1)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@playwright%2ftest/1.42.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@playwright%2ftest/1.42.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@playwright%2ftest/1.42.0/1.42.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@playwright%2ftest/1.42.0/1.42.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

###
[`v1.42.1`](https://togithub.com/microsoft/playwright/releases/tag/v1.42.1)

[Compare
Source](https://togithub.com/microsoft/playwright/compare/v1.42.0...v1.42.1)

##### Highlights


[https://github.com/microsoft/playwright/issues/29732](https://togithub.com/microsoft/playwright/issues/29732)
- \[Regression]: HEAD requests to webServer.url since
v1.42.0[https://github.com/microsoft/playwright/issues/29746](https://togithub.com/microsoft/playwright/issues/29746)6
- \[Regression]: Playwright CT CLI scripts fail due to broken
initializePlugin
impor[https://github.com/microsoft/playwright/issues/29739](https://togithub.com/microsoft/playwright/issues/29739)39
- \[Bug]: Component tests fails when imported a module with a dot in a
na[https://github.com/microsoft/playwright/issues/29731](https://togithub.com/microsoft/playwright/issues/29731)731
- \[Regression]: 1.42.0 breaks some import
stateme[https://github.com/microsoft/playwright/issues/29760](https://togithub.com/microsoft/playwright/issues/29760)9760
- \[Bug]: Possible regression with chained locators in v1.42

##### Browser Versions

-   Chromium 123.0.6312.4
-   Mozilla Firefox 123.0
-   WebKit 17.4

This version was also tested against the following stable channels:

-   Google Chrome 122
-   Microsoft Edge 123

</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 has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/ionic-team/ionic-framework).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMzguMSIsInVwZGF0ZWRJblZlciI6IjM3LjIzOC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-14 14:59:12 +00:00
Sean Perkins
b148b3225b chore(playwright): migrate themes to palettes (#29148)
Issue number: N/A

---------

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

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

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

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

- Migrates the test infrastructure to use `palettes` instead of `themes`

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

This **does not** change where the light/dark/high contrast styles live
or how they are consumed in the test infra. That work is done here:
https://github.com/ionic-team/ionic-framework/pull/29149

Co-authored-by: Liam DeBeasi <liamdebeasi@users.noreply.github.com>
2024-03-14 10:29:09 -04:00
Brandy Carney
5a42841d52 docs(toggle): remove extra backtick to fix formatting (#29160)
Removes the extra backtick in the `alignment` property description that
is causing formatting issues in the [Toggle
documentation](https://ionicframework.com/docs/api/toggle#properties):

<img width="754" alt="Screenshot 2024-03-13 at 4 45 58 PM"
src="https://github.com/ionic-team/ionic-framework/assets/6577830/d1430baf-c316-41b8-ba9c-c1b196c99d41">
2024-03-13 21:27:34 +00:00
Liam DeBeasi
19c1bc16cb fix(datetime): wheel picker shows consistently in overlays (#29147)
Issue number: resolves #26234

---------

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

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

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

We use an IntersectionObserver to know when each picker column is
visible so we can properly scroll the active option in each column into
view. The IO callback passes an array of entries. Up until this PR, we
have always grabbed the first entry in the array. The problem is that
browsers will sometimes group multiple events into a single array. This
means it's possible to have an event with `isIntersecting: false` and
then another event with `isIntersecting: true` in the same callback.
Since we always grabbed the first event we did not account for the
instances where events were coalesced.

This resulted in column options sometimes not scrolling into view when
presented via an overlay.

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

- Picker column now grabs the last event in the entries array. This
represents the most recent threshold change.

## 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/.github/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: `7.7.5-dev.11710347256.1954cae9`
2024-03-13 19:57:30 +00:00
renovate[bot]
459a023bac chore(deps): update dependency @playwright/test to v1.42.0 (#29110)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@playwright/test](https://playwright.dev)
([source](https://togithub.com/microsoft/playwright)) | [`1.41.2` ->
`1.42.0`](https://renovatebot.com/diffs/npm/@playwright%2ftest/1.41.2/1.42.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@playwright%2ftest/1.42.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@playwright%2ftest/1.42.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@playwright%2ftest/1.41.2/1.42.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@playwright%2ftest/1.41.2/1.42.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

###
[`v1.42.0`](https://togithub.com/microsoft/playwright/releases/tag/v1.42.0)

[Compare
Source](https://togithub.com/microsoft/playwright/compare/v1.41.2...v1.42.0)

#### New APIs

-   **Test tags**

[New tag syntax](https://playwright.dev/docs/test-annotations#tag-tests)
for adding tags to the tests (@&#8203;-tokens in the test title are
still supported).

    ```js
test('test customer login', { tag: ['@&#8203;fast', '@&#8203;login'] },
async ({ page }) => {
      // ...
    });
    ```

Use `--grep` command line option to run only tests with certain tags.

    ```sh
    npx playwright test --grep @&#8203;fast
    ```

-   **Annotating skipped tests**

[New annotation
syntax](https://playwright.dev/docs/test-annotations#annotate-tests) for
test annotations allows annotating the tests that do not run.

    ```js
    test('test full report', {
      annotation: [
{ type: 'issue', description:
'https://github.com/microsoft/playwright/issues/23180' },
{ type: 'docs', description:
'https://playwright.dev/docs/test-annotations#tag-tests' },
      ],
    }, async ({ page }) => {
      // ...
    });
    ```

-   **page.addLocatorHandler()**

New method
[page.addLocatorHandler()](https://playwright.dev/docs/api/class-page#page-add-locator-handler)
registers a callback that will be invoked when specified element becomes
visible and may block Playwright actions. The callback can get rid of
the overlay. Here is an example that closes a cookie dialog when it
appears.

    ```js
    // Setup the handler.
    await page.addLocatorHandler(
page.getByRole('heading', { name: 'Hej! You are in control of your
cookies.' }),
        async () => {
await page.getByRole('button', { name: 'Accept all' }).click();
        });
    // Write the test as usual.
    await page.goto('https://www.ikea.com/');
await page.getByRole('link', { name: 'Collection of blue and white'
}).click();
await expect(page.getByRole('heading', { name: 'Light and easy'
})).toBeVisible();
    ```

-   **Project wildcard filter**
Playwright command line
[flag](https://playwright.dev/docs/test-cli#reference) now supports '\*'
wildcard when filtering by project.

    ```sh
    npx playwright test --project='*mobile*'
    ```

-   **Other APIs**
    -   expect(callback).toPass({ timeout })
The timeout can now be configured by `expect.toPass.timeout` option
[globally](https://playwright.dev/docs/api/class-testconfig#test-config-expect)
or in [project
config](https://playwright.dev/docs/api/class-testproject#test-project-expect)

    -   electronApplication.on('console')

[electronApplication.on('console')](https://playwright.dev/docs/api/class-electronapplication#electron-application-event-console)
event is emitted when Electron main process calls console API methods.

        ```js
        electronApp.on('console', async msg => {
          const values = [];
          for (const arg of msg.args())
            values.push(await arg.jsonValue());
          console.log(...values);
        });
await electronApp.evaluate(() => console.log('hello', 5, { foo: 'bar'
}));
        ```

- [page.pdf()](https://playwright.dev/docs/api/class-page#page-pdf)
accepts two new options
[`tagged`](https://playwright.dev/docs/api/class-page#page-pdf-option-tagged)
and
[`outline`](https://playwright.dev/docs/api/class-page#page-pdf-option-outline).

#### Breaking changes

Mixing the test instances in the same suite is no longer supported.
Allowing it was an oversight as it makes reasoning about the semantics
unnecessarily hard.

```js
const test = baseTest.extend({ item: async ({}, use) => {} });
baseTest.describe('Admin user', () => {
  test('1', async ({ page, item }) => {});
  test('2', async ({ page, item }) => {});
});
```

#### Announcements

-   ⚠️ Ubuntu 18 is not supported anymore.

#### Browser Versions

-   Chromium 123.0.6312.4
-   Mozilla Firefox 123.0
-   WebKit 17.4

This version was also tested against the following stable channels:

-   Google Chrome 122
-   Microsoft Edge 123

</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 has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/ionic-team/ionic-framework).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMjAuMiIsInVwZGF0ZWRJblZlciI6IjM3LjIyMC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: ionitron <hi@ionicframework.com>
Co-authored-by: Maria Hutt <maria@ionic.io>
2024-03-13 18:49:19 +00:00
773 changed files with 14605 additions and 68356 deletions

66
.github/CODEOWNERS vendored
View File

@@ -13,73 +13,7 @@
* @ionic-team/framework
# Frameworks
## Angular
/packages/angular/ @sean-perkins @thetaPC
/packages/angular-server @sean-perkins @thetaPC
/packages/angular/test @thetaPC
## React
/packages/react/ @amandaejohnston
/packages/react-router @amandaejohnston
/packages/react/test-app/
/packages/react-router/test-app/
## Vue
/packages/vue/ @liamdebeasi @thetaPC
/packages/vue-router/ @liamdebeasi @thetaPC
/packages/vue/test/ @thetaPC
/packages/vue-router/__tests__ @thetaPC
# Components
/core/src/components/accordion/ @liamdebeasi
/core/src/components/accordion-group/ @liamdebeasi
/core/src/components/checkbox/ @amandaejohnston
/core/src/components/datetime/ @liamdebeasi @amandaejohnston @sean-perkins
/core/src/components/datetime-button/ @liamdebeasi
/core/src/components/item/ @brandyscarney
/core/src/components/menu/ @amandaejohnston
/core/src/components/menu-toggle/ @amandaejohnston
/core/src/components/nav/ @sean-perkins
/core/src/components/nav-link/ @sean-perkins
/core/src/components/picker/ @liamdebeasi
/core/src/components/picker-column/ @liamdebeasi
/core/src/components/radio/ @amandaejohnston
/core/src/components/radio-group/ @amandaejohnston
/core/src/components/refresher/ @liamdebeasi
/core/src/components/refresher-content/ @liamdebeasi
/core/src/components/searchbar/ @brandyscarney
/core/src/components/segment/ @brandyscarney
/core/src/components/segment-button/ @brandyscarney
/core/src/components/skeleton-text/ @brandyscarney
# Utilities
/core/src/utils/animation/ @liamdebeasi
/core/src/utils/content/ @sean-perkins
/core/src/utils/gesture/ @liamdebeasi
/core/src/utils/input-shims/ @liamdebeasi
/core/src/utils/keyboard/ @liamdebeasi
/core/src/utils/logging/ @amandaejohnston
/core/src/utils/sanitization/ @liamdebeasi
/core/src/utils/tap-click/ @liamdebeasi
/core/src/utils/transition/ @liamdebeasi
/core/src/css/ @brandyscarney
/core/src/themes/ @brandyscarney

View File

@@ -23,7 +23,7 @@ body:
description: Which version(s) of Ionic Framework does this issue impact? [Ionic Framework 1.x to 6.x are no longer supported](https://ionicframework.com/docs/reference/support#framework-maintenance-and-support-status). For extended support, considering visiting [Ionic's Enterprise offering](https://ionic.io/enterprise).
options:
- v7.x
- v8.x (Beta)
- v8.x
- Nightly
multiple: true
validations:

View File

@@ -25,7 +25,7 @@ Issue number: resolves #
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/.github/CONTRIBUTING.md#footer for more information.
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.
-->

View File

@@ -32,11 +32,11 @@ runs:
run: npm ci
shell: bash
- name: Install Dependencies
run: npx lerna bootstrap --include-dependencies --scope ${{ inputs.scope }} --ignore-scripts -- --legacy-peer-deps
run: npx lerna@5 bootstrap --include-dependencies --scope ${{ inputs.scope }} --ignore-scripts -- --legacy-peer-deps
shell: bash
working-directory: ${{ inputs.working-directory }}
- name: Update Version
run: npx lerna version ${{ inputs.version }} --yes --exact --no-changelog --no-push --no-git-tag-version --preid=${{ inputs.preid }}
run: npx lerna@5 version ${{ inputs.version }} --yes --exact --no-changelog --no-push --no-git-tag-version --preid=${{ inputs.preid }}
shell: bash
working-directory: ${{ inputs.working-directory }}
- name: Run Build

View File

@@ -21,33 +21,13 @@ runs:
name: ionic-core
path: ./core
filename: CoreBuild.zip
- name: Install Playwright Dependencies
run: npm install && npx playwright install && npx playwright install-deps
- name: Install Dependencies
run: npm install
shell: bash
working-directory: ./core
- id: clean-component-name
name: Clean Component Name
# Remove `ion-` prefix from the `component` variable if it exists.
run: |
echo "component=$(echo ${{ inputs.component }} | sed 's/ion-//g')" >> $GITHUB_OUTPUT
shell: bash
- id: set-test-file
name: Set Test File
# Screenshots can be updated for all components or specified component(s).
# If the `component` variable is set, then the test has the option to
# - run all the file paths that are in a component folder.
# -- For example: if the `component` value is "item", then the test will run all the file paths that are in the "src/components/item" folder.
# -- For example: if the `component` value is "item chip", then the test will run all the file paths that are in the "src/components/item" and "src/components/chip" folders.
run: |
if [ -n "${{ steps.clean-component-name.outputs.component }}" ]; then
echo "testFile=\$(echo '${{ steps.clean-component-name.outputs.component }}' | awk '{for(i=1;i<=NF;i++) \$i=\"src/components/\"\$i}1')" >> $GITHUB_OUTPUT
else
echo "testFile=$(echo '')" >> $GITHUB_OUTPUT
fi
shell: bash
- name: Test
if: inputs.update != 'true'
run: npm run test.e2e ${{ steps.set-test-file.outputs.testFile }} -- --shard=${{ inputs.shard }}/${{ inputs.totalShards }}
run: npm run test.e2e.docker.ci ${{ inputs.component }} -- --shard=${{ inputs.shard }}/${{ inputs.totalShards }}
shell: bash
working-directory: ./core
- name: Test and Update
@@ -69,7 +49,7 @@ runs:
# which is why we not using the upload-archive
# composite step here.
run: |
npm run test.e2e ${{ steps.set-test-file.outputs.testFile }} -- --shard=${{ inputs.shard }}/${{ inputs.totalShards }} --update-snapshots
npm run test.e2e.docker.ci ${{ inputs.component }} -- --shard=${{ inputs.shard }}/${{ inputs.totalShards }} --update-snapshots
git add src/\*.png --force
mkdir updated-screenshots
cd ../ && rsync -R --progress $(git diff --name-only --cached) core/updated-screenshots

View File

@@ -25,12 +25,9 @@ runs:
# Configure user as Ionitron
# and push only the changed .png snapshots
# to the remote branch.
# Screenshots are in .gitignore
# Non-Linux screenshots are in .gitignore
# to prevent local screenshots from getting
# pushed to Git. As a result, we need --force
# here so that CI generated screenshots can
# get added to git. Screenshot ground truths
# should only be added via this CI process.
# pushed to Git.
run: |
git config user.name ionitron
git config user.email hi@ionicframework.com
@@ -38,7 +35,7 @@ runs:
# This adds an empty entry for new
# screenshot files so we can track them with
# git diff
git add src/\*.png --force -N
git add src/\*.png -N
if git diff --exit-code; then
echo -e "\033[1;31m⚠ Error: No new screenshots generated ⚠️\033[0m"
@@ -48,7 +45,7 @@ runs:
else
# This actually adds the contents
# of the screenshots (including new ones)
git add src/\*.png --force
git add src/\*.png
git commit -m "chore(): add updated snapshots"
git push
fi

View File

@@ -11,8 +11,8 @@ jobs:
issues: write
steps:
- name: 'Auto-assign issue'
uses: pozil/auto-assign-issue@edee9537367a8fbc625d27f9e10aa8bad47b8723 # v1.13.0
uses: pozil/auto-assign-issue@65947009a243e6b3993edeef4e64df3ca85d760c # v1.14.0
with:
assignees: liamdebeasi, sean-perkins, brandyscarney, amandaejohnston, mapsandapps, thetaPC
assignees: liamdebeasi, sean-perkins, brandyscarney, thetaPC
numOfAssignee: 1
allowSelfAssign: false

View File

@@ -140,7 +140,7 @@ jobs:
strategy:
fail-fast: false
matrix:
apps: [ng14, ng15, ng16, ng17]
apps: [ng16, ng17]
needs: [build-angular, build-angular-server]
runs-on: ubuntu-latest
steps:

View File

@@ -41,8 +41,8 @@ jobs:
uses: ./.github/workflows/actions/upload-archive
with:
name: ionic-docs
output: docs/DocsBuild.zip
paths: docs/core.json docs/core.d.ts
output: packages/docs/DocsBuild.zip
paths: packages/docs/core.json packages/docs/core.d.ts
release-docs:
needs: [release-core]
@@ -53,7 +53,7 @@ jobs:
uses: ./.github/workflows/actions/download-archive
with:
name: ionic-docs
path: ./docs
path: ./packages/docs
filename: DocsBuild.zip
- uses: ./.github/workflows/actions/publish-npm
with:
@@ -61,7 +61,7 @@ jobs:
tag: ${{ inputs.tag }}
version: ${{ inputs.version }}
preid: ${{ inputs.preid }}
working-directory: 'docs'
working-directory: 'packages/docs'
token: ${{ secrets.NPM_TOKEN }}
release-angular:

View File

@@ -22,8 +22,6 @@ on:
options:
- latest
- next
- v5-lts
- v4-lts
preid:
type: choice
description: Which prerelease identifier should be used? This is only needed when version is "prepatch", "preminor", "premajor", or "prerelease".

View File

@@ -3,6 +3,20 @@ name: 'Update Reference Screenshots'
on:
workflow_dispatch:
inputs:
# Screenshots can be updated for all components or specified component(s).
# If the `component` variable is set, then the test has the option to
# - run all the instances of the specified component(s) in the `src/components` folder
# -- For example: if the `component` value is "item", then the following command will be: `npm run test.e2e item`
# - run the specified file path
# -- For example: if the `component` value is "src/components/item/test/basic", then the following command will be: `npm run test.e2e src/components/item/test/basic`
# - run multiple specified components based on the space-separated value
# -- For example: if the `component` value is "item basic", then the following command will be: `npm run test.e2e item basic`
# -- For example: if the `component` value is "src/components/item/test/basic src/components/item/test/a11y", then the following command will be: `npm run test.e2e src/components/item/test/basic src/components/item/test/a11y`
#
# If the `component` variable is not set, then the test will run all the instances of the components in the `src/components` folder.
# - For example: `npm run test.e2e`
#
# More common options can be found at the Playwright Command line page: https://playwright.dev/docs/test-cli
component:
description: 'What component(s) should be updated? (leave blank to update all or use a space-separated list for multiple components)'
required: false

11
.gitignore vendored
View File

@@ -68,7 +68,16 @@ core/www/
# playwright
core/test-results/
core/playwright-report/
core/**/*-snapshots
# ground truths generated outside of docker should not be committed to the repo
core/**/*-snapshots/*
# new ground truths should only be generated inside of docker which will result in -linux.png screenshots
!core/**/*-snapshots/*-linux.png
# these files are going to be different per-developer environment so do not add them to the repo
core/docker-display.txt
core/docker-display-volume.txt
# angular
packages/angular/css/

1
.vercelignore Normal file
View File

@@ -0,0 +1 @@
core/src/components/**/*/*.png

View File

@@ -14,8 +14,9 @@ This is a comprehensive list of the breaking changes introduced in the major ver
## Version 8.x
- [Browser and Platform Support](#version-8x-browser-platform-support)
- [Dark Theme](#version-8x-dark-theme)
- [Dark Mode](#version-8x-dark-mode)
- [Global Styles](#version-8x-global-styles)
- [Haptics](#version-8x-haptics)
- [Components](#version-8x-components)
- [Button](#version-8x-button)
- [Checkbox](#version-8x-checkbox)
@@ -29,6 +30,7 @@ This is a comprehensive list of the breaking changes introduced in the major ver
- [Progress bar](#version-8x-progress-bar)
- [Radio](#version-8x-radio)
- [Range](#version-8x-range)
- [Searchbar](#version-8x-searchbar)
- [Select](#version-8x-select)
- [Textarea](#version-8x-textarea)
- [Toggle](#version-8x-toggle)
@@ -60,9 +62,12 @@ This section details the desktop browser, JavaScript framework, and mobile platf
| iOS | 15+ |
| Android | 5.1+ with Chromium 89+ |
<h2 id="version-8x-dark-theme">Dark Theme</h2>
Ionic Framework v8 removes backwards support for CSS Animations in favor of the [Web Animations API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API). All minimum browser versions listed above support the Web Animations API.
In previous versions, it was recommended to define the dark theme in the following way:
<h2 id="version-8x-dark-mode">Dark Mode</h2>
In previous versions, it was recommended to define the dark palette in the following way:
```css
@media (prefers-color-scheme: dark) {
@@ -80,15 +85,15 @@ In previous versions, it was recommended to define the dark theme in the followi
}
```
In Ionic Framework version 8, the dark theme is being distributed via css files that can be imported. Below is an example of importing a dark theme file in Angular:
In Ionic Framework version 8, the dark palette is being distributed via css files that can be imported. Below is an example of importing a dark palette file in Angular:
```css
/* @import '@ionic/angular/css/themes/dark.always.css'; */
/* @import "@ionic/angular/css/themes/dark.class.css"; */
@import "@ionic/angular/css/themes/dark.system.css";
/* @import '@ionic/angular/css/palettes/dark.always.css'; */
/* @import "@ionic/angular/css/palettes/dark.class.css"; */
@import "@ionic/angular/css/palettes/dark.system.css";
```
By importing the `dark.system.css` file, the dark theme variables will be defined like the following:
By importing the `dark.system.css` file, the dark palette variables will be defined like the following:
```css
@media (prefers-color-scheme: dark) {
@@ -106,11 +111,11 @@ By importing the `dark.system.css` file, the dark theme variables will be define
}
```
Notice that the dark theme is now applied to the `:root` selector instead of the `body` selector. The [`:root`](https://developer.mozilla.org/en-US/docs/Web/CSS/:root) selector represents the `<html>` element and is identical to the selector `html`, except that its specificity is higher.
Notice that the dark palette is now applied to the `:root` selector instead of the `body` selector. The [`:root`](https://developer.mozilla.org/en-US/docs/Web/CSS/:root) selector represents the `<html>` element and is identical to the selector `html`, except that its specificity is higher.
While migrating to include the new dark theme files is unlikely to cause breaking changes, these new selectors can lead to unexpected overrides if custom CSS variables are being set on the `body` element. We recommend updating any instances where global application variables are set to target the `:root` selector instead.
While migrating to include the new dark palette files is unlikely to cause breaking changes, these new selectors can lead to unexpected overrides if custom CSS variables are being set on the `body` element. We recommend updating any instances where global application variables are set to target the `:root` selector instead.
For more information on the new dark theme files, refer to the [Dark Mode documentation](https://ionicframework.com/docs/theming/dark-mode).
For more information on the new dark palette files, refer to the [Dark Mode documentation](https://ionicframework.com/docs/theming/dark-mode).
<h2 id="version-8x-global-styles">Global Styles</h2>
@@ -138,6 +143,10 @@ Developers who want to disable dynamic font scaling can set `--ion-dynamic-font:
For more information on the dynamic font, refer to the [Dynamic Font Scaling documentation](https://ionicframework.com/docs/layout/dynamic-font-scaling).
<h2 id="version-8x-haptics">Haptics</h2>
- Support for the Cordova Haptics plugin has been removed. Components that integrate with haptics, such as `ion-picker` and `ion-toggle`, will continue to function but will no longer play haptics in Cordova environments. Developers should migrate to Capacitor to continue to have haptics in these components.
<h2 id="version-8x-components">Components</h2>
<h4 id="version-8x-button">Button</h4>
@@ -254,11 +263,15 @@ For more information on styling toast buttons, refer to the [Toast Theming docum
<h4 id="version-8x-range">Range</h4>
- The `legacy` property and support for the legacy syntax, which involved placing an `ion-range` inside of an `ion-item` with an `ion-label`, have been removed. For more information on migrating from the legacy range syntax, refer to the [Range documentation](https://ionicframework.com/docs/api/range#migrating-from-legacy-range-syntax).
- The `legacy` property and support for the legacy syntax, which involved placing an `ion-range` inside of an `ion-item` with an `ion-label`, have been removed. Ionic will also no longer attempt to automatically associate form controls with sibling `<label>` elements as these label elements are now used inside the form control. Developers should provide a label (either visible text or `aria-label`) directly to the form control. For more information on migrating from the legacy range syntax, refer to the [Range documentation](https://ionicframework.com/docs/api/range#migrating-from-legacy-range-syntax).
<h4 id="version-8x-searchbar">Searchbar</h4>
- The `autocapitalize` property now defaults to `'off'`.
<h4 id="version-8x-select">Select</h4>
- The `legacy` property and support for the legacy syntax, which involved placing an `ion-select` inside of an `ion-item` with an `ion-label`, have been removed. For more information on migrating from the legacy select syntax, refer to the [Select documentation](https://ionicframework.com/docs/api/select#migrating-from-legacy-select-syntax).
- The `legacy` property and support for the legacy syntax, which involved placing an `ion-select` inside of an `ion-item` with an `ion-label`, have been removed. Ionic will also no longer attempt to automatically associate form controls with sibling `<label>` elements as these label elements are now used inside the form control. Developers should provide a label (either visible text or `aria-label`) directly to the form control. For more information on migrating from the legacy select syntax, refer to the [Select documentation](https://ionicframework.com/docs/api/select#migrating-from-legacy-select-syntax).
<h4 id="version-8x-textarea">Textarea</h4>

View File

@@ -3,6 +3,166 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [8.0.1](https://github.com/ionic-team/ionic-framework/compare/v8.0.0...v8.0.1) (2024-04-24)
### Bug Fixes
* **input:** clear button can be navigated using screen reader ([#29366](https://github.com/ionic-team/ionic-framework/issues/29366)) ([ee49824](https://github.com/ionic-team/ionic-framework/commit/ee49824a84df7a7b002f41dab7b935fbcdb64946)), closes [#29358](https://github.com/ionic-team/ionic-framework/issues/29358)
* **input:** debounce is set with binding syntax in angular on load ([#29377](https://github.com/ionic-team/ionic-framework/issues/29377)) ([23321f7](https://github.com/ionic-team/ionic-framework/commit/23321f7ab2a242c3c4193fd6cece3f1c7c0034ef)), closes [#29374](https://github.com/ionic-team/ionic-framework/issues/29374)
# [8.0.0](https://github.com/ionic-team/ionic-framework/compare/v8.0.0-rc.2...v8.0.0) (2024-04-17)
**Note:** Version bump only for package ionic-framework
# [8.0.0-rc.2](https://github.com/ionic-team/ionic-framework/compare/v8.0.0-rc.1...v8.0.0-rc.2) (2024-04-17)
### Bug Fixes
* **dark-palette:** improve base colors ([#29239](https://github.com/ionic-team/ionic-framework/issues/29239)) ([4698d22](https://github.com/ionic-team/ionic-framework/commit/4698d22413966b59f9fa65b4e2533695cf00ed70)), closes [#29219](https://github.com/ionic-team/ionic-framework/issues/29219)
* **form-controls:** adjust flex properties inside of an item ([#29328](https://github.com/ionic-team/ionic-framework/issues/29328)) ([9b59138](https://github.com/ionic-team/ionic-framework/commit/9b59138011fd1e71def209ec3a43fb7f91b58949)), closes [#29319](https://github.com/ionic-team/ionic-framework/issues/29319)
## [7.8.5](https://github.com/ionic-team/ionic-framework/compare/v7.8.4...v7.8.5) (2024-04-17)
### Bug Fixes
* **modal:** improve sheet modal scrolling and gesture behavior ([#29312](https://github.com/ionic-team/ionic-framework/issues/29312)) ([9738228](https://github.com/ionic-team/ionic-framework/commit/9738228bc05abe3e2012e57b0e6b85f0ec06f66b)), closes [#24583](https://github.com/ionic-team/ionic-framework/issues/24583)
# [8.0.0-rc.1](https://github.com/ionic-team/ionic-framework/compare/v8.0.0-rc.0...v8.0.0-rc.1) (2024-04-10)
### Bug Fixes
* **button:** use clamp for font sizes on circle shape ([#29200](https://github.com/ionic-team/ionic-framework/issues/29200)) ([4d6edee](https://github.com/ionic-team/ionic-framework/commit/4d6edee89c7bb2cb669d67730d7ddf24c78b3cb1))
## [7.8.4](https://github.com/ionic-team/ionic-framework/compare/v7.8.3...v7.8.4) (2024-04-10)
### Performance Improvements
* **styles:** compress distributed global stylesheets ([#29275](https://github.com/ionic-team/ionic-framework/issues/29275)) ([b3cd49b](https://github.com/ionic-team/ionic-framework/commit/b3cd49bf2219aacffc1ac34acbae7c76ef243765))
## [7.8.3](https://github.com/ionic-team/ionic-framework/compare/v7.8.2...v7.8.3) (2024-04-03)
### Bug Fixes
* **button:** activated outline button in toolbar no longer blends into background on MD dark mode ([#29216](https://github.com/ionic-team/ionic-framework/issues/29216)) ([ee5da7a](https://github.com/ionic-team/ionic-framework/commit/ee5da7a747c0a0b420c5e371a9fe9ec4938d179e))
* **popover:** viewport can be scrolled if no content present ([#29215](https://github.com/ionic-team/ionic-framework/issues/29215)) ([f08759c](https://github.com/ionic-team/ionic-framework/commit/f08759c2b8256ff66f8d1901bd8e0be4617db262)), closes [#29211](https://github.com/ionic-team/ionic-framework/issues/29211)
# [8.0.0-rc.0](https://github.com/ionic-team/ionic-framework/compare/v8.0.0-beta.4...v8.0.0-rc.0) (2024-03-27)
**Note:** Version bump only for package ionic-framework
# [8.0.0-beta.4](https://github.com/ionic-team/ionic-framework/compare/v8.0.0-beta.3...v8.0.0-beta.4) (2024-03-27)
### Bug Fixes
* **angular:** schematics account for new theme files ([#29185](https://github.com/ionic-team/ionic-framework/issues/29185)) ([b0a10df](https://github.com/ionic-team/ionic-framework/commit/b0a10dfa56a65ee3905cc2c3d48d2221a42f222f))
### Code Refactoring
* **haptics:** remove cordova haptics support ([#29186](https://github.com/ionic-team/ionic-framework/issues/29186)) ([9efeb0a](https://github.com/ionic-team/ionic-framework/commit/9efeb0ad31aadee5f5ae542641d928ecf93fe82a))
* **searchbar:** autocapitalize defaults to off ([#29107](https://github.com/ionic-team/ionic-framework/issues/29107)) ([6e477b7](https://github.com/ionic-team/ionic-framework/commit/6e477b743e41b2b37627c8208901704f599b762a))
### Features
* **button:** add circular shape as round ([#29161](https://github.com/ionic-team/ionic-framework/issues/29161)) ([44529f0](https://github.com/ionic-team/ionic-framework/commit/44529f0a62f1b1ce42750a20f19e829b2789febd))
* **input:** add input-password-toggle component ([#29175](https://github.com/ionic-team/ionic-framework/issues/29175)) ([6c500fd](https://github.com/ionic-team/ionic-framework/commit/6c500fd6b2e2553c11fcddc9d86ac9a29f76e172))
* remove css animations support for ionic animations ([#29123](https://github.com/ionic-team/ionic-framework/issues/29123)) ([892594d](https://github.com/ionic-team/ionic-framework/commit/892594de0665e8fc5c8a737d292812842ea03d64))
### BREAKING CHANGES
* **searchbar:** The `autocapitalize` property on Searchbar now defaults to `'off'`.
* **haptics:** Support for the Cordova Haptics plugin has been removed. Components that integrate with haptics, such as `ion-picker` and `ion-toggle`, will continue to function but will no longer play haptics in Cordova environments. Developers should migrate to Capacitor to continue to have haptics in these components.
## [7.8.2](https://github.com/ionic-team/ionic-framework/compare/v7.8.1...v7.8.2) (2024-03-27)
### Bug Fixes
* **searchbar:** autocapitalize is initialized correctly ([#29197](https://github.com/ionic-team/ionic-framework/issues/29197)) ([8ad66c0](https://github.com/ionic-team/ionic-framework/commit/8ad66c03d777edcab19c97cba696b171acc2d2e8)), closes [#29193](https://github.com/ionic-team/ionic-framework/issues/29193)
# [8.0.0-beta.3](https://github.com/ionic-team/ionic-framework/compare/v8.0.0-beta.2...v8.0.0-beta.3) (2024-03-20)
### Bug Fixes
* **input, textarea, select:** account for multiple start/end slot elements ([#29172](https://github.com/ionic-team/ionic-framework/issues/29172)) ([acc1042](https://github.com/ionic-team/ionic-framework/commit/acc104212468e2324b94c85ba6eebc2934fba812))
* **range, select:** prefer labels passed by developer ([#29145](https://github.com/ionic-team/ionic-framework/issues/29145)) ([56014cf](https://github.com/ionic-team/ionic-framework/commit/56014cf64c387bd4492270905327c570f6814a6b))
### Features
* rename dark/high-contrast themes to palettes ([#29149](https://github.com/ionic-team/ionic-framework/issues/29149)) ([761e1b4](https://github.com/ionic-team/ionic-framework/commit/761e1b47dd5d49ab44c81ddba5490b6d2106f123))
## [7.8.1](https://github.com/ionic-team/ionic-framework/compare/v7.8.0...v7.8.1) (2024-03-20)
### Bug Fixes
* **datetime:** wheel picker shows consistently in overlays ([#29147](https://github.com/ionic-team/ionic-framework/issues/29147)) ([19c1bc1](https://github.com/ionic-team/ionic-framework/commit/19c1bc16cbc6725463890382365203824b7fd353)), closes [#26234](https://github.com/ionic-team/ionic-framework/issues/26234)
* **header:** iOS headers in MD app are not hidden ([#29164](https://github.com/ionic-team/ionic-framework/issues/29164)) ([fdfecd3](https://github.com/ionic-team/ionic-framework/commit/fdfecd32c33c41cf202d3b30c073bfb1b077e2d6)), closes [#28867](https://github.com/ionic-team/ionic-framework/issues/28867)
* **react:** avoid definitely typed errors with @types/react@18 ([#29182](https://github.com/ionic-team/ionic-framework/issues/29182)) ([58d217d](https://github.com/ionic-team/ionic-framework/commit/58d217d0cf6b716da855c71c169fb1870d4067d3)), closes [#29178](https://github.com/ionic-team/ionic-framework/issues/29178)
### Performance Improvements
* **datetime:** calendar body shows immediately in modal on ios ([#29163](https://github.com/ionic-team/ionic-framework/issues/29163)) ([f759776](https://github.com/ionic-team/ionic-framework/commit/f75977699dae5aeea3d97d4318377633e935afb9)), closes [#24542](https://github.com/ionic-team/ionic-framework/issues/24542)
# [8.0.0-beta.2](https://github.com/ionic-team/ionic-framework/compare/v8.0.0-beta.1...v8.0.0-beta.2) (2024-03-13)

View File

@@ -20,7 +20,7 @@
<a href="https://github.com/ionic-team/ionic-framework/blob/main/LICENSE">
<img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="Ionic Framework is released under the MIT license." />
</a>
<a href="https://github.com/ionic-team/ionic/blob/main/.github/CONTRIBUTING.md">
<a href="https://github.com/ionic-team/ionic/blob/main/docs/CONTRIBUTING.md">
<img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg" alt="PRs welcome!" />
</a>
<a href="https://twitter.com/Ionicframework">
@@ -38,7 +38,7 @@
Documentation
</a>
<span> · </span>
<a href="https://github.com/ionic-team/ionic/blob/main/.github/CONTRIBUTING.md">Contribute</a>
<a href="https://github.com/ionic-team/ionic/blob/main/docs/CONTRIBUTING.md">Contribute</a>
<span> · </span>
<a href="https://blog.ionicframework.com/">Blog</a>
<br />
@@ -88,7 +88,7 @@ The Ionic Conference App is a full featured Ionic app. It is the perfect startin
### Contributing
Thanks for your interest in contributing! Read up on our guidelines for
[contributing](https://github.com/ionic-team/ionic/blob/main/.github/CONTRIBUTING.md)
[contributing](https://github.com/ionic-team/ionic/blob/main/docs/CONTRIBUTING.md)
and then look through our issues with a [help wanted](https://github.com/ionic-team/ionic/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)
label.

View File

@@ -3,6 +3,161 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [8.0.1](https://github.com/ionic-team/ionic-framework/compare/v8.0.0...v8.0.1) (2024-04-24)
### Bug Fixes
* **input:** clear button can be navigated using screen reader ([#29366](https://github.com/ionic-team/ionic-framework/issues/29366)) ([ee49824](https://github.com/ionic-team/ionic-framework/commit/ee49824a84df7a7b002f41dab7b935fbcdb64946)), closes [#29358](https://github.com/ionic-team/ionic-framework/issues/29358)
* **input:** debounce is set with binding syntax in angular on load ([#29377](https://github.com/ionic-team/ionic-framework/issues/29377)) ([23321f7](https://github.com/ionic-team/ionic-framework/commit/23321f7ab2a242c3c4193fd6cece3f1c7c0034ef)), closes [#29374](https://github.com/ionic-team/ionic-framework/issues/29374)
# [8.0.0](https://github.com/ionic-team/ionic-framework/compare/v8.0.0-rc.2...v8.0.0) (2024-04-17)
**Note:** Version bump only for package @ionic/core
# [8.0.0-rc.2](https://github.com/ionic-team/ionic-framework/compare/v8.0.0-rc.1...v8.0.0-rc.2) (2024-04-17)
### Bug Fixes
* **dark-palette:** improve base colors ([#29239](https://github.com/ionic-team/ionic-framework/issues/29239)) ([4698d22](https://github.com/ionic-team/ionic-framework/commit/4698d22413966b59f9fa65b4e2533695cf00ed70)), closes [#29219](https://github.com/ionic-team/ionic-framework/issues/29219)
* **form-controls:** adjust flex properties inside of an item ([#29328](https://github.com/ionic-team/ionic-framework/issues/29328)) ([9b59138](https://github.com/ionic-team/ionic-framework/commit/9b59138011fd1e71def209ec3a43fb7f91b58949)), closes [#29319](https://github.com/ionic-team/ionic-framework/issues/29319)
## [7.8.5](https://github.com/ionic-team/ionic-framework/compare/v7.8.4...v7.8.5) (2024-04-17)
### Bug Fixes
* **modal:** improve sheet modal scrolling and gesture behavior ([#29312](https://github.com/ionic-team/ionic-framework/issues/29312)) ([9738228](https://github.com/ionic-team/ionic-framework/commit/9738228bc05abe3e2012e57b0e6b85f0ec06f66b)), closes [#24583](https://github.com/ionic-team/ionic-framework/issues/24583)
# [8.0.0-rc.1](https://github.com/ionic-team/ionic-framework/compare/v8.0.0-rc.0...v8.0.0-rc.1) (2024-04-10)
### Bug Fixes
* **button:** use clamp for font sizes on circle shape ([#29200](https://github.com/ionic-team/ionic-framework/issues/29200)) ([4d6edee](https://github.com/ionic-team/ionic-framework/commit/4d6edee89c7bb2cb669d67730d7ddf24c78b3cb1))
## [7.8.4](https://github.com/ionic-team/ionic-framework/compare/v7.8.3...v7.8.4) (2024-04-10)
### Performance Improvements
* **styles:** compress distributed global stylesheets ([#29275](https://github.com/ionic-team/ionic-framework/issues/29275)) ([b3cd49b](https://github.com/ionic-team/ionic-framework/commit/b3cd49bf2219aacffc1ac34acbae7c76ef243765))
## [7.8.3](https://github.com/ionic-team/ionic-framework/compare/v7.8.2...v7.8.3) (2024-04-03)
### Bug Fixes
* **button:** activated outline button in toolbar no longer blends into background on MD dark mode ([#29216](https://github.com/ionic-team/ionic-framework/issues/29216)) ([ee5da7a](https://github.com/ionic-team/ionic-framework/commit/ee5da7a747c0a0b420c5e371a9fe9ec4938d179e))
* **popover:** viewport can be scrolled if no content present ([#29215](https://github.com/ionic-team/ionic-framework/issues/29215)) ([f08759c](https://github.com/ionic-team/ionic-framework/commit/f08759c2b8256ff66f8d1901bd8e0be4617db262)), closes [#29211](https://github.com/ionic-team/ionic-framework/issues/29211)
# [8.0.0-rc.0](https://github.com/ionic-team/ionic-framework/compare/v8.0.0-beta.4...v8.0.0-rc.0) (2024-03-27)
**Note:** Version bump only for package @ionic/core
# [8.0.0-beta.4](https://github.com/ionic-team/ionic-framework/compare/v8.0.0-beta.3...v8.0.0-beta.4) (2024-03-27)
### Code Refactoring
* **haptics:** remove cordova haptics support ([#29186](https://github.com/ionic-team/ionic-framework/issues/29186)) ([9efeb0a](https://github.com/ionic-team/ionic-framework/commit/9efeb0ad31aadee5f5ae542641d928ecf93fe82a))
* **searchbar:** autocapitalize defaults to off ([#29107](https://github.com/ionic-team/ionic-framework/issues/29107)) ([6e477b7](https://github.com/ionic-team/ionic-framework/commit/6e477b743e41b2b37627c8208901704f599b762a))
### Features
* **button:** add circular shape as round ([#29161](https://github.com/ionic-team/ionic-framework/issues/29161)) ([44529f0](https://github.com/ionic-team/ionic-framework/commit/44529f0a62f1b1ce42750a20f19e829b2789febd))
* **input:** add input-password-toggle component ([#29175](https://github.com/ionic-team/ionic-framework/issues/29175)) ([6c500fd](https://github.com/ionic-team/ionic-framework/commit/6c500fd6b2e2553c11fcddc9d86ac9a29f76e172))
* remove css animations support for ionic animations ([#29123](https://github.com/ionic-team/ionic-framework/issues/29123)) ([892594d](https://github.com/ionic-team/ionic-framework/commit/892594de0665e8fc5c8a737d292812842ea03d64))
### BREAKING CHANGES
* **searchbar:** The `autocapitalize` property on Searchbar now defaults to `'off'`.
* **haptics:** Support for the Cordova Haptics plugin has been removed. Components that integrate with haptics, such as `ion-picker` and `ion-toggle`, will continue to function but will no longer play haptics in Cordova environments. Developers should migrate to Capacitor to continue to have haptics in these components.
## [7.8.2](https://github.com/ionic-team/ionic-framework/compare/v7.8.1...v7.8.2) (2024-03-27)
### Bug Fixes
* **searchbar:** autocapitalize is initialized correctly ([#29197](https://github.com/ionic-team/ionic-framework/issues/29197)) ([8ad66c0](https://github.com/ionic-team/ionic-framework/commit/8ad66c03d777edcab19c97cba696b171acc2d2e8)), closes [#29193](https://github.com/ionic-team/ionic-framework/issues/29193)
# [8.0.0-beta.3](https://github.com/ionic-team/ionic-framework/compare/v7.8.1...v8.0.0-beta.3) (2024-03-20)
### Bug Fixes
* **input, textarea, select:** account for multiple start/end slot elements ([#29172](https://github.com/ionic-team/ionic-framework/issues/29172)) ([acc1042](https://github.com/ionic-team/ionic-framework/commit/acc104212468e2324b94c85ba6eebc2934fba812))
* **range, select:** prefer labels passed by developer ([#29145](https://github.com/ionic-team/ionic-framework/issues/29145)) ([56014cf](https://github.com/ionic-team/ionic-framework/commit/56014cf64c387bd4492270905327c570f6814a6b))
### Features
* rename dark/high-contrast themes to palettes ([#29149](https://github.com/ionic-team/ionic-framework/issues/29149)) ([761e1b4](https://github.com/ionic-team/ionic-framework/commit/761e1b47dd5d49ab44c81ddba5490b6d2106f123))
## [7.8.1](https://github.com/ionic-team/ionic-framework/compare/v7.8.0...v7.8.1) (2024-03-20)
### Bug Fixes
* **datetime:** wheel picker shows consistently in overlays ([#29147](https://github.com/ionic-team/ionic-framework/issues/29147)) ([19c1bc1](https://github.com/ionic-team/ionic-framework/commit/19c1bc16cbc6725463890382365203824b7fd353)), closes [#26234](https://github.com/ionic-team/ionic-framework/issues/26234)
* **header:** iOS headers in MD app are not hidden ([#29164](https://github.com/ionic-team/ionic-framework/issues/29164)) ([fdfecd3](https://github.com/ionic-team/ionic-framework/commit/fdfecd32c33c41cf202d3b30c073bfb1b077e2d6)), closes [#28867](https://github.com/ionic-team/ionic-framework/issues/28867)
### Performance Improvements
* **datetime:** calendar body shows immediately in modal on ios ([#29163](https://github.com/ionic-team/ionic-framework/issues/29163)) ([f759776](https://github.com/ionic-team/ionic-framework/commit/f75977699dae5aeea3d97d4318377633e935afb9)), closes [#24542](https://github.com/ionic-team/ionic-framework/issues/24542)
# [8.0.0-beta.2](https://github.com/ionic-team/ionic-framework/compare/v8.0.0-beta.1...v8.0.0-beta.2) (2024-03-13)

5
core/Dockerfile Normal file
View File

@@ -0,0 +1,5 @@
# Get Playwright
FROM mcr.microsoft.com/playwright:v1.42.1
# Set the working directory
WORKDIR /ionic

View File

@@ -558,7 +558,7 @@ ion-input,prop,color,"danger" | "dark" | "light" | "medium" | "primary" | "secon
ion-input,prop,counter,boolean,false,false,false
ion-input,prop,counterFormatter,((inputLength: number, maxLength: number) => string) | undefined,undefined,false,false
ion-input,prop,debounce,number | undefined,undefined,false,false
ion-input,prop,disabled,boolean,false,false,false
ion-input,prop,disabled,boolean,false,false,true
ion-input,prop,enterkeyhint,"done" | "enter" | "go" | "next" | "previous" | "search" | "send" | undefined,undefined,false,false
ion-input,prop,errorText,string | undefined,undefined,false,false
ion-input,prop,fill,"outline" | "solid" | undefined,undefined,false,false
@@ -575,7 +575,7 @@ ion-input,prop,multiple,boolean | undefined,undefined,false,false
ion-input,prop,name,string,this.inputId,false,false
ion-input,prop,pattern,string | undefined,undefined,false,false
ion-input,prop,placeholder,string | undefined,undefined,false,false
ion-input,prop,readonly,boolean,false,false,false
ion-input,prop,readonly,boolean,false,false,true
ion-input,prop,required,boolean,false,false,false
ion-input,prop,shape,"round" | undefined,undefined,false,false
ion-input,prop,spellcheck,boolean,false,false,false
@@ -607,6 +607,12 @@ ion-input,css-prop,--placeholder-font-style
ion-input,css-prop,--placeholder-font-weight
ion-input,css-prop,--placeholder-opacity
ion-input-password-toggle,shadow
ion-input-password-toggle,prop,color,"danger" | "dark" | "light" | "medium" | "primary" | "secondary" | "success" | "tertiary" | "warning" | string & Record<never, never> | undefined,undefined,false,true
ion-input-password-toggle,prop,hideIcon,string | undefined,undefined,false,false
ion-input-password-toggle,prop,mode,"ios" | "md",undefined,false,false
ion-input-password-toggle,prop,showIcon,string | undefined,undefined,false,false
ion-item,shadow
ion-item,prop,button,boolean,false,false,false
ion-item,prop,color,"danger" | "dark" | "light" | "medium" | "primary" | "secondary" | "success" | "tertiary" | "warning" | string & Record<never, never> | undefined,undefined,false,true
@@ -1166,7 +1172,7 @@ ion-row,shadow
ion-searchbar,scoped
ion-searchbar,prop,animated,boolean,false,false,false
ion-searchbar,prop,autocapitalize,string,undefined,true,false
ion-searchbar,prop,autocapitalize,string,'off',false,false
ion-searchbar,prop,autocomplete,"name" | "email" | "tel" | "url" | "on" | "off" | "honorific-prefix" | "given-name" | "additional-name" | "family-name" | "honorific-suffix" | "nickname" | "username" | "new-password" | "current-password" | "one-time-code" | "organization-title" | "organization" | "street-address" | "address-line1" | "address-line2" | "address-line3" | "address-level4" | "address-level3" | "address-level2" | "address-level1" | "country" | "country-name" | "postal-code" | "cc-name" | "cc-given-name" | "cc-additional-name" | "cc-family-name" | "cc-number" | "cc-exp" | "cc-exp-month" | "cc-exp-year" | "cc-csc" | "cc-type" | "transaction-currency" | "transaction-amount" | "language" | "bday" | "bday-day" | "bday-month" | "bday-year" | "sex" | "tel-country-code" | "tel-national" | "tel-area-code" | "tel-local" | "tel-extension" | "impp" | "photo",'off',false,false
ion-searchbar,prop,autocorrect,"off" | "on",'off',false,false
ion-searchbar,prop,cancelButtonIcon,string,config.get('backButtonIcon', arrowBackSharp) as string,false,false

801
core/package-lock.json generated
View File

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "@ionic/core",
"version": "8.0.0-beta.2",
"version": "8.0.1",
"description": "Base components for Ionic",
"keywords": [
"ionic",
@@ -31,7 +31,7 @@
"loader/"
],
"dependencies": {
"@stencil/core": "^4.12.2",
"@stencil/core": "^4.17.1",
"ionicons": "^7.2.2",
"tslib": "^2.1.0"
},
@@ -54,12 +54,13 @@
"@types/node": "^14.6.0",
"@typescript-eslint/eslint-plugin": "^6.7.2",
"@typescript-eslint/parser": "^6.7.2",
"chalk": "^5.3.0",
"clean-css-cli": "^5.6.1",
"domino": "^2.1.6",
"eslint": "^7.32.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-custom-rules": "file:custom-rules",
"execa": "^5.0.0",
"execa": "^8.0.1",
"fs-extra": "^9.0.1",
"jest": "^29.7.0",
"jest-cli": "^29.7.0",
@@ -77,7 +78,7 @@
"build.docs.json": "stencil build --docs-json dist/docs.json",
"clean": "node scripts/clean.js",
"css.minify": "cleancss -O2 -o ./css/ionic.bundle.css ./css/ionic.bundle.css",
"css.sass": "sass --embed-sources src/css:./css",
"css.sass": "sass --embed-sources --style compressed src/css:./css",
"eslint": "eslint src",
"lint": "npm run lint.ts && npm run lint.sass && npm run prettier -- --write --cache",
"lint.fix": "npm run lint.ts.fix && npm run lint.sass.fix && npm run prettier -- --write --cache",
@@ -94,7 +95,11 @@
"test.e2e.update-snapshots": "npm run test.e2e -- --update-snapshots",
"test.watch": "jest --watch --no-cache",
"test.treeshake": "node scripts/treeshaking.js dist/index.js",
"validate": "npm run lint && npm run test && npm run build && npm run test.treeshake"
"validate": "npm run lint && npm run test && npm run build && npm run test.treeshake",
"docker.build": "docker build -t ionic-playwright .",
"test.e2e.docker": "npm run docker.build && node ./scripts/docker.mjs",
"test.e2e.docker.update-snapshots": "npm run test.e2e.docker -- --update-snapshots",
"test.e2e.docker.ci": "npm run docker.build && CI=true node ./scripts/docker.mjs"
},
"author": "Ionic Team",
"license": "MIT",

56
core/scripts/docker.mjs Normal file
View File

@@ -0,0 +1,56 @@
import { execa } from 'execa';
import * as fs from 'fs';
import { resolve } from 'path';
import chalk from 'chalk';
const removeNewline = (string) => {
return string.replace(/(\r\n|\n|\r)/gm, "");
}
const readConfigFile = (file) => {
if (fs.existsSync(file)) {
return fs.readFileSync(file, { encoding: 'utf-8' });
}
return '';
}
// These files are optional, so we don't want to error if they don't exist
const display = removeNewline(readConfigFile('docker-display.txt'));
const displayVolume = removeNewline(readConfigFile('docker-display-volume.txt'));
// Using --mount requires an absolute path which is what this gives us.
const pwd = resolve('./');
/**
* -it will let the user gracefully kill the process using Ctrl+C (or equivalent)
* -e DISPLAY and -v handle configuration for headed mode
* --ipc=host is recommended when using Chromium to avoid out of memory crashes: https://playwright.dev/docs/ci#docker
* --init is recommended to avoid zombie processes: https://playwright.dev/docs/ci#docker
* --mount allow us to mount the local Ionic project inside of the Docker container so devs do not need to re-build the project in Docker.
*/
const args = ['run', '--rm', '--init', `-e DISPLAY=${display}`, `-v ${displayVolume}`, '--ipc=host', `--mount=type=bind,source=${pwd},target=/ionic`, 'ionic-playwright', 'npm run test.e2e --', ...process.argv.slice(2)];
// Set the CI env variable so Playwright uses the CI config
if (process.env.CI) {
args.splice(1, 0, '-e CI=true');
/**
* Otherwise, we should let the session be interactive locally. This will
* not work on CI which is why we do not apply it there.
*/
} else {
args.splice(1, 0, '-it');
}
/**
* While these config files are optional to run the tests, they are required to run
* the tests in headed mode. Add a warning if dev tries to run headed tests without
* the correct config files.
*/
const requestHeaded = process.argv.find(arg => arg.includes('headed'));
const hasHeadedConfigFiles = display && displayVolume;
if (requestHeaded && !hasHeadedConfigFiles) {
console.warn(chalk.yellow.bold('\n⚠ You are running tests in headed mode, but one or more of your headed config files was not found.\nPlease ensure that both docker-display.txt and docker-display-volume.txt have been created in the correct location.\n'));
}
execa('docker', args, { shell: true, stdio: 'inherit' });

View File

@@ -1,44 +1,4 @@
## Build
# Core Scripts
### 1. Clone ionic
git@github.com:ionic-team/ionic.git
cd ionic
### 2. Run `npm install`
cd core
npm install
Notice that `@ionic/core` lives in `core`.
### 3. Run `npm start`
Make sure you are inside the `core` directory.
npm start
With the `dev` command, Ionic components will be built with [Stencil](https://stenciljs.com/), changes to source files are watched, a local http server will startup, and http://localhost:3333/ will open in a browser.
### 4. Preview
Navigate to http://localhost:3333/src/components/. Each component has small e2e apps found in the `test` directory, for example: http://localhost:3333/src/components/button/test/basic
As changes are made in an editor to source files, the e2e app will live-reload.
## How to contribute
1. `npm start` allows you to modify the components and have live reloading, just like another ionic app.
2. When everything looks good, run `npm run validate` to verify the tests linter and production build passes.
# Deploy
1. `npm run prepare.deploy`
2. Review/update changelog
3. Commit updates using the package name and version number as the commit message.
4. `npm run deploy`
5. :tada:
This file has been moved to [/docs/core/testing/preview-changes.md](/docs/core/testing/preview-changes.md).

View File

@@ -14,6 +14,20 @@
document.head.appendChild(style);
}
/**
* The term `palette` is used to as a param to match the
* Ionic docs, plus here is already a `ionic:theme` query being
* used for `md`, `ios`, and `ionic` themes.
*/
const palette = window.location.search.match(/palette=([a-z]+)/);
if (palette && palette[1] !== 'light') {
const linkTag = document.createElement('link');
linkTag.setAttribute('rel', 'stylesheet');
linkTag.setAttribute('type', 'text/css');
linkTag.setAttribute('href', `/css/palettes/${palette[1]}.always.css`);
document.head.appendChild(linkTag);
}
window.Ionic = window.Ionic || {};
window.Ionic.config = window.Ionic.config || {};

View File

@@ -1287,6 +1287,25 @@ export namespace Components {
*/
"value"?: string | number | null;
}
interface IonInputPasswordToggle {
/**
* The color to use from your application's color palette. Default options are: `"primary"`, `"secondary"`, `"tertiary"`, `"success"`, `"warning"`, `"danger"`, `"light"`, `"medium"`, and `"dark"`. For more information on colors, see [theming](/docs/theming/basics).
*/
"color"?: Color;
/**
* The icon that can be used to represent hiding a password. If not set, the "eyeOff" Ionicon will be used.
*/
"hideIcon"?: string;
/**
* The mode determines which platform styles to use.
*/
"mode"?: "ios" | "md";
/**
* The icon that can be used to represent showing a password. If not set, the "eye" Ionicon will be used.
*/
"showIcon"?: string;
"type": TextFieldTypes;
}
interface IonItem {
/**
* If `true`, a button tag will be rendered and the item will be tappable.
@@ -3179,7 +3198,7 @@ export namespace Components {
}
interface IonToggle {
/**
* How to control the alignment of the toggle and label on the cross axis. ``"start"`: The label and control will appear on the left of the cross axis in LTR, and on the right side in RTL. `"center"`: The label and control will appear at the center of the cross axis in both LTR and RTL.
* How to control the alignment of the toggle and label on the cross axis. `"start"`: The label and control will appear on the left of the cross axis in LTR, and on the right side in RTL. `"center"`: The label and control will appear at the center of the cross axis in both LTR and RTL.
*/
"alignment": 'start' | 'center';
/**
@@ -3796,7 +3815,6 @@ declare global {
"ionChange": InputChangeEventDetail;
"ionBlur": FocusEvent;
"ionFocus": FocusEvent;
"ionStyle": StyleEventDetail;
}
interface HTMLIonInputElement extends Components.IonInput, HTMLStencilElement {
addEventListener<K extends keyof HTMLIonInputElementEventMap>(type: K, listener: (this: HTMLIonInputElement, ev: IonInputCustomEvent<HTMLIonInputElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
@@ -3812,6 +3830,12 @@ declare global {
prototype: HTMLIonInputElement;
new (): HTMLIonInputElement;
};
interface HTMLIonInputPasswordToggleElement extends Components.IonInputPasswordToggle, HTMLStencilElement {
}
var HTMLIonInputPasswordToggleElement: {
prototype: HTMLIonInputPasswordToggleElement;
new (): HTMLIonInputPasswordToggleElement;
};
interface HTMLIonItemElement extends Components.IonItem, HTMLStencilElement {
}
var HTMLIonItemElement: {
@@ -4512,7 +4536,6 @@ declare global {
interface HTMLIonTextareaElementEventMap {
"ionChange": TextareaChangeEventDetail;
"ionInput": TextareaInputEventDetail;
"ionStyle": StyleEventDetail;
"ionBlur": FocusEvent;
"ionFocus": FocusEvent;
}
@@ -4637,6 +4660,7 @@ declare global {
"ion-infinite-scroll": HTMLIonInfiniteScrollElement;
"ion-infinite-scroll-content": HTMLIonInfiniteScrollContentElement;
"ion-input": HTMLIonInputElement;
"ion-input-password-toggle": HTMLIonInputPasswordToggleElement;
"ion-item": HTMLIonItemElement;
"ion-item-divider": HTMLIonItemDividerElement;
"ion-item-group": HTMLIonItemGroupElement;
@@ -5958,10 +5982,6 @@ declare namespace LocalJSX {
* The `ionInput` event is fired each time the user modifies the input's value. Unlike the `ionChange` event, the `ionInput` event is fired for each alteration to the input's value. This typically happens for each keystroke as the user types. For elements that accept text input (`type=text`, `type=tel`, etc.), the interface is [`InputEvent`](https://developer.mozilla.org/en-US/docs/Web/API/InputEvent); for others, the interface is [`Event`](https://developer.mozilla.org/en-US/docs/Web/API/Event). If the input is cleared on edit, the type is `null`.
*/
"onIonInput"?: (event: IonInputCustomEvent<InputInputEventDetail>) => void;
/**
* Emitted when the styles change.
*/
"onIonStyle"?: (event: IonInputCustomEvent<StyleEventDetail>) => void;
/**
* A regular expression that the value is checked against. The pattern must match the entire value, not just some subset. Use the title attribute to describe the pattern to help the user. This attribute applies when the value of the type attribute is `"text"`, `"search"`, `"tel"`, `"url"`, `"email"`, `"date"`, or `"password"`, otherwise it is ignored. When the type attribute is `"date"`, `pattern` will only be used in browsers that do not support the `"date"` input type natively. See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date for more information.
*/
@@ -5999,6 +6019,25 @@ declare namespace LocalJSX {
*/
"value"?: string | number | null;
}
interface IonInputPasswordToggle {
/**
* The color to use from your application's color palette. Default options are: `"primary"`, `"secondary"`, `"tertiary"`, `"success"`, `"warning"`, `"danger"`, `"light"`, `"medium"`, and `"dark"`. For more information on colors, see [theming](/docs/theming/basics).
*/
"color"?: Color;
/**
* The icon that can be used to represent hiding a password. If not set, the "eyeOff" Ionicon will be used.
*/
"hideIcon"?: string;
/**
* The mode determines which platform styles to use.
*/
"mode"?: "ios" | "md";
/**
* The icon that can be used to represent showing a password. If not set, the "eye" Ionicon will be used.
*/
"showIcon"?: string;
"type"?: TextFieldTypes;
}
interface IonItem {
/**
* If `true`, a button tag will be rendered and the item will be tappable.
@@ -7219,7 +7258,7 @@ declare namespace LocalJSX {
/**
* Indicates whether and how the text value should be automatically capitalized as it is entered/edited by the user. Available options: `"off"`, `"none"`, `"on"`, `"sentences"`, `"words"`, `"characters"`.
*/
"autocapitalize": string;
"autocapitalize"?: string;
/**
* Set the input's autocomplete property.
*/
@@ -7781,10 +7820,6 @@ declare namespace LocalJSX {
* The `ionInput` event is fired each time the user modifies the textarea's value. Unlike the `ionChange` event, the `ionInput` event is fired for each alteration to the textarea's value. This typically happens for each keystroke as the user types. When `clearOnEdit` is enabled, the `ionInput` event will be fired when the user clears the textarea by performing a keydown event.
*/
"onIonInput"?: (event: IonTextareaCustomEvent<TextareaInputEventDetail>) => void;
/**
* Emitted when the styles change.
*/
"onIonStyle"?: (event: IonTextareaCustomEvent<StyleEventDetail>) => void;
/**
* Instructional text that shows before the input has a value.
*/
@@ -7953,7 +7988,7 @@ declare namespace LocalJSX {
}
interface IonToggle {
/**
* How to control the alignment of the toggle and label on the cross axis. ``"start"`: The label and control will appear on the left of the cross axis in LTR, and on the right side in RTL. `"center"`: The label and control will appear at the center of the cross axis in both LTR and RTL.
* How to control the alignment of the toggle and label on the cross axis. `"start"`: The label and control will appear on the left of the cross axis in LTR, and on the right side in RTL. `"center"`: The label and control will appear at the center of the cross axis in both LTR and RTL.
*/
"alignment"?: 'start' | 'center';
/**
@@ -8050,6 +8085,7 @@ declare namespace LocalJSX {
"ion-infinite-scroll": IonInfiniteScroll;
"ion-infinite-scroll-content": IonInfiniteScrollContent;
"ion-input": IonInput;
"ion-input-password-toggle": IonInputPasswordToggle;
"ion-item": IonItem;
"ion-item-divider": IonItemDivider;
"ion-item-group": IonItemGroup;
@@ -8148,6 +8184,7 @@ declare module "@stencil/core" {
"ion-infinite-scroll": LocalJSX.IonInfiniteScroll & JSXBase.HTMLAttributes<HTMLIonInfiniteScrollElement>;
"ion-infinite-scroll-content": LocalJSX.IonInfiniteScrollContent & JSXBase.HTMLAttributes<HTMLIonInfiniteScrollContentElement>;
"ion-input": LocalJSX.IonInput & JSXBase.HTMLAttributes<HTMLIonInputElement>;
"ion-input-password-toggle": LocalJSX.IonInputPasswordToggle & JSXBase.HTMLAttributes<HTMLIonInputPasswordToggleElement>;
"ion-item": LocalJSX.IonItem & JSXBase.HTMLAttributes<HTMLIonItemElement>;
"ion-item-divider": LocalJSX.IonItemDivider & JSXBase.HTMLAttributes<HTMLIonItemDividerElement>;
"ion-item-group": LocalJSX.IonItemGroup & JSXBase.HTMLAttributes<HTMLIonItemGroupElement>;

View File

@@ -4,10 +4,10 @@
// --------------------------------------------------
/// @prop - Border radius applied to the accordion
$accordion-md-border-radius: 6px !default;
$accordion-md-border-radius: 6px;
/// @prop - Box shadow of the accordion
$accordion-md-box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12) !default;
$accordion-md-box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);
/// @prop - Margin of the expanded accordion
$accordion-md-expanded-margin: 16px !default;
$accordion-md-expanded-margin: 16px;

View File

@@ -4,16 +4,16 @@
// --------------------------------------------------
/// @prop - Background color of the accordion
$accordion-background-color: var(--ion-background-color, #ffffff) !default;
$accordion-background-color: var(--ion-background-color, #ffffff);
/// @prop - Duration of the accordion transition
$accordion-transition-duration: 300ms !default;
$accordion-transition-duration: 300ms;
/// @prop - Timing function of the accordion transition
$accordion-transition-easing: cubic-bezier(0.25, 0.8, 0.5, 1) !default;
$accordion-transition-easing: cubic-bezier(0.25, 0.8, 0.5, 1);
/// @prop - Opacity of the disabled accordion
$accordion-disabled-opacity: 0.4 !default;
$accordion-disabled-opacity: 0.4;
/// @prop - Margin of the inset accordion
$accordion-inset-margin: 16px !default;
$accordion-inset-margin: 16px;

View File

@@ -4,145 +4,145 @@
// --------------------------------------------------
/// @prop - Text align of the action sheet
$action-sheet-ios-text-align: center !default;
$action-sheet-ios-text-align: center;
/// @prop - Padding top of the action sheet
$action-sheet-ios-padding-top: 0 !default;
$action-sheet-ios-padding-top: 0;
/// @prop - Padding end of the action sheet
$action-sheet-ios-padding-end: 8px !default;
$action-sheet-ios-padding-end: 8px;
/// @prop - Padding bottom of the action sheet
$action-sheet-ios-padding-bottom: $action-sheet-ios-padding-top !default;
$action-sheet-ios-padding-bottom: $action-sheet-ios-padding-top;
/// @prop - Padding start of the action sheet
$action-sheet-ios-padding-start: $action-sheet-ios-padding-end !default;
$action-sheet-ios-padding-start: $action-sheet-ios-padding-end;
/// @prop - Top margin of the action sheet button group
$action-sheet-ios-group-margin-top: 10px !default;
$action-sheet-ios-group-margin-top: 10px;
/// @prop - Bottom margin of the action sheet button group
$action-sheet-ios-group-margin-bottom: 10px !default;
$action-sheet-ios-group-margin-bottom: 10px;
/// @prop - Background color of the action sheet
$action-sheet-ios-background-color: $overlay-ios-background-color !default;
$action-sheet-ios-background-color: $overlay-ios-background-color;
/// @prop - Border radius of the action sheet
$action-sheet-ios-border-radius: 13px !default;
$action-sheet-ios-border-radius: 13px;
// Action Sheet Title
// --------------------------------------------------
/// @prop - Padding top of the action sheet title
$action-sheet-ios-title-padding-top: 14px !default;
$action-sheet-ios-title-padding-top: 14px;
/// @prop - Padding end of the action sheet title
$action-sheet-ios-title-padding-end: 10px !default;
$action-sheet-ios-title-padding-end: 10px;
/// @prop - Padding bottom of the action sheet title
$action-sheet-ios-title-padding-bottom: 13px !default;
$action-sheet-ios-title-padding-bottom: 13px;
/// @prop - Padding start of the action sheet title
$action-sheet-ios-title-padding-start: $action-sheet-ios-title-padding-end !default;
$action-sheet-ios-title-padding-start: $action-sheet-ios-title-padding-end;
/// @prop - Color of the action sheet title
$action-sheet-ios-title-color: $text-color-step-600 !default;
$action-sheet-ios-title-color: $text-color-step-600;
/// @prop - Font size of the action sheet title
$action-sheet-ios-title-font-size: dynamic-font-min(1, 13px) !default;
$action-sheet-ios-title-font-size: dynamic-font-min(1, 13px);
/// @prop - Font weight of the action sheet title
$action-sheet-ios-title-font-weight: 400 !default;
$action-sheet-ios-title-font-weight: 400;
/// @prop - Font weight of the action sheet title when it has a sub title
$action-sheet-ios-title-with-sub-title-font-weight: 600 !default;
$action-sheet-ios-title-with-sub-title-font-weight: 600;
// Action Sheet Subtitle
// --------------------------------------------------
/// @prop - Font size of the action sheet sub title
$action-sheet-ios-sub-title-font-size: dynamic-font-min(1, 13px) !default;
$action-sheet-ios-sub-title-font-size: dynamic-font-min(1, 13px);
/// @prop - Padding top of the action sheet sub title
$action-sheet-ios-sub-title-padding-top: 6px !default;
$action-sheet-ios-sub-title-padding-top: 6px;
/// @prop - Padding end of the action sheet sub title
$action-sheet-ios-sub-title-padding-end: 0 !default;
$action-sheet-ios-sub-title-padding-end: 0;
/// @prop - Padding bottom of the action sheet sub title
$action-sheet-ios-sub-title-padding-bottom: 0 !default;
$action-sheet-ios-sub-title-padding-bottom: 0;
/// @prop - Padding start of the action sheet sub title
$action-sheet-ios-sub-title-padding-start: $action-sheet-ios-sub-title-padding-end !default;
$action-sheet-ios-sub-title-padding-start: $action-sheet-ios-sub-title-padding-end;
// Action Sheet Button
// --------------------------------------------------
/// @prop - Minimum height of the action sheet button
$action-sheet-ios-button-height: 56px !default;
$action-sheet-ios-button-height: 56px;
/// @prop - Padding of the action sheet button
$action-sheet-ios-button-padding: 14px !default;
$action-sheet-ios-button-padding: 14px;
/// @prop - Text color of the action sheet button
$action-sheet-ios-button-text-color: ion-color(primary, base) !default;
$action-sheet-ios-button-text-color: ion-color(primary, base);
/// @prop - Font size of the action sheet button icon
$action-sheet-ios-button-icon-font-size: dynamic-font-min(1, 28px) !default;
$action-sheet-ios-button-icon-font-size: dynamic-font-min(1, 28px);
/// @prop - Padding right of the action sheet button icon
$action-sheet-ios-button-icon-padding-right: .3em !default;
$action-sheet-ios-button-icon-padding-right: .3em;
/// @prop - Font size of the action sheet button
$action-sheet-ios-button-font-size: dynamic-font-min(1, 20px) !default;
$action-sheet-ios-button-font-size: dynamic-font-min(1, 20px);
/// @prop - Border color alpha of the action sheet button
$action-sheet-ios-button-border-color-alpha: .08 !default;
$action-sheet-ios-button-border-color-alpha: .08;
/// @prop - Border color of the action sheet button
$action-sheet-ios-button-border-color: rgba($text-color-rgb, $action-sheet-ios-button-border-color-alpha) !default;
$action-sheet-ios-button-border-color: rgba($text-color-rgb, $action-sheet-ios-button-border-color-alpha);
/// @prop - Background color of the action sheet button
$action-sheet-ios-button-background: linear-gradient(0deg, $action-sheet-ios-button-border-color, $action-sheet-ios-button-border-color 50%, transparent 50%) bottom / 100% 1px no-repeat transparent !default;
$action-sheet-ios-button-background: linear-gradient(0deg, $action-sheet-ios-button-border-color, $action-sheet-ios-button-border-color 50%, transparent 50%) bottom / 100% 1px no-repeat transparent;
/// @prop - Background color of the activated action sheet button
$action-sheet-ios-button-background-activated: $text-color !default;
$action-sheet-ios-button-background-activated: $text-color;
/// @prop - Background color of the selected action sheet button
$action-sheet-ios-button-background-selected: var(--ion-color-step-150, var(--ion-background-color-step-150, $background-color)) !default;
$action-sheet-ios-button-background-selected: var(--ion-color-step-150, var(--ion-background-color-step-150, $background-color));
/// @prop - Destructive text color of the action sheet button
$action-sheet-ios-button-destructive-text-color: ion-color(danger, base) !default;
$action-sheet-ios-button-destructive-text-color: ion-color(danger, base);
/// @prop - Font weight of the action sheet cancel button
$action-sheet-ios-button-cancel-font-weight: 600 !default;
$action-sheet-ios-button-cancel-font-weight: 600;
// Action Sheet Translucent
// --------------------------------------------------
/// @prop - Background color alpha of the action sheet when translucent
$action-sheet-ios-translucent-background-color-alpha: .8 !default;
$action-sheet-ios-translucent-background-color-alpha: .8;
/// @prop - Background color of the action sheet when translucent
$action-sheet-ios-translucent-background-color: rgba($background-color-rgb, $action-sheet-ios-translucent-background-color-alpha) !default;
$action-sheet-ios-translucent-background-color: rgba($background-color-rgb, $action-sheet-ios-translucent-background-color-alpha);
/// @prop - Border color alpha of the action sheet when translucent
$action-sheet-ios-translucent-border-color-alpha: .4 !default;
$action-sheet-ios-translucent-border-color-alpha: .4;
/// @prop - Border color of the action sheet when translucent
$action-sheet-ios-translucent-border-color: rgba($background-color-rgb, $action-sheet-ios-translucent-border-color-alpha) !default;
$action-sheet-ios-translucent-border-color: rgba($background-color-rgb, $action-sheet-ios-translucent-border-color-alpha);
/// @prop - Background color alpha of the activated action sheet when translucent
$action-sheet-ios-translucent-background-color-activated-alpha: .7 !default;
$action-sheet-ios-translucent-background-color-activated-alpha: .7;
/// @prop - Background color of the activated action sheet when translucent
$action-sheet-ios-translucent-background-color-activated: rgba($background-color-rgb, $action-sheet-ios-translucent-background-color-activated-alpha) !default;
$action-sheet-ios-translucent-background-color-activated: rgba($background-color-rgb, $action-sheet-ios-translucent-background-color-activated-alpha);
/// @prop - Filter of the translucent action-sheet group
$action-sheet-ios-group-translucent-filter: saturate(280%) blur(20px) !default;
$action-sheet-ios-group-translucent-filter: saturate(280%) blur(20px);
/// @prop - Filter of the translucent action-sheet button
$action-sheet-ios-button-translucent-filter: saturate(120%) !default;
$action-sheet-ios-button-translucent-filter: saturate(120%);

View File

@@ -4,100 +4,100 @@
// --------------------------------------------------
/// @prop - Text align of the action sheet
$action-sheet-md-text-align: start !default;
$action-sheet-md-text-align: start;
/// @prop - Background color of the action sheet
$action-sheet-md-background-color: $overlay-md-background-color !default;
$action-sheet-md-background-color: $overlay-md-background-color;
/// @prop - Padding top of the action sheet
$action-sheet-md-padding-top: 0 !default;
$action-sheet-md-padding-top: 0;
/// @prop - Padding bottom of the action sheet
$action-sheet-md-padding-bottom: var(--ion-safe-area-bottom) !default;
$action-sheet-md-padding-bottom: var(--ion-safe-area-bottom);
// Action Sheet Title
// --------------------------------------------------
/// @prop - Height of the action sheet title
$action-sheet-md-title-height: 60px !default;
$action-sheet-md-title-height: 60px;
/// @prop - Color of the action sheet title
$action-sheet-md-title-color: rgba($text-color-rgb, 0.54) !default;
$action-sheet-md-title-color: rgba($text-color-rgb, 0.54);
/// @prop - Font size of the action sheet title
$action-sheet-md-title-font-size: dynamic-font(16px) !default;
$action-sheet-md-title-font-size: dynamic-font(16px);
/// @prop - Padding top of the action sheet title
$action-sheet-md-title-padding-top: 20px !default;
$action-sheet-md-title-padding-top: 20px;
/// @prop - Padding end of the action sheet title
$action-sheet-md-title-padding-end: 16px !default;
$action-sheet-md-title-padding-end: 16px;
/// @prop - Padding bottom of the action sheet title
$action-sheet-md-title-padding-bottom: 17px !default;
$action-sheet-md-title-padding-bottom: 17px;
/// @prop - Padding start of the action sheet title
$action-sheet-md-title-padding-start: $action-sheet-md-title-padding-end !default;
$action-sheet-md-title-padding-start: $action-sheet-md-title-padding-end;
// Action Sheet Subtitle
// --------------------------------------------------
/// @prop - Font size of the action sheet sub title
$action-sheet-md-sub-title-font-size: dynamic-font(14px) !default;
$action-sheet-md-sub-title-font-size: dynamic-font(14px);
/// @prop - Padding top of the action sheet sub title
$action-sheet-md-sub-title-padding-top: 16px !default;
$action-sheet-md-sub-title-padding-top: 16px;
/// @prop - Padding end of the action sheet sub title
$action-sheet-md-sub-title-padding-end: 0 !default;
$action-sheet-md-sub-title-padding-end: 0;
/// @prop - Padding bottom of the action sheet sub title
$action-sheet-md-sub-title-padding-bottom: 0 !default;
$action-sheet-md-sub-title-padding-bottom: 0;
/// @prop - Padding start of the action sheet sub title
$action-sheet-md-sub-title-padding-start: $action-sheet-md-sub-title-padding-end !default;
$action-sheet-md-sub-title-padding-start: $action-sheet-md-sub-title-padding-end;
// Action Sheet Button
// --------------------------------------------------
/// @prop - Minimum height of the action sheet button
$action-sheet-md-button-height: 52px !default;
$action-sheet-md-button-height: 52px;
/// @prop - Text color of the action sheet button
$action-sheet-md-button-text-color: $text-color-step-150 !default;
$action-sheet-md-button-text-color: $text-color-step-150;
/// @prop - Font size of the action sheet button
$action-sheet-md-button-font-size: dynamic-font(16px) !default;
$action-sheet-md-button-font-size: dynamic-font(16px);
/// @prop - Padding top of the action sheet button
$action-sheet-md-button-padding-top: 12px !default;
$action-sheet-md-button-padding-top: 12px;
/// @prop - Padding end of the action sheet button
$action-sheet-md-button-padding-end: 16px !default;
$action-sheet-md-button-padding-end: 16px;
/// @prop - Padding bottom of the action sheet button
$action-sheet-md-button-padding-bottom: $action-sheet-md-button-padding-top !default;
$action-sheet-md-button-padding-bottom: $action-sheet-md-button-padding-top;
/// @prop - Padding start of the action sheet button
$action-sheet-md-button-padding-start: $action-sheet-md-button-padding-end !default;
$action-sheet-md-button-padding-start: $action-sheet-md-button-padding-end;
// Action Sheet Icon
// --------------------------------------------------
/// @prop - Font size of the icon in the action sheet button
$action-sheet-md-icon-font-size: dynamic-font(24px) !default;
$action-sheet-md-icon-font-size: dynamic-font(24px);
/// @prop - Margin top of the icon in the action sheet button
$action-sheet-md-icon-margin-top: 0 !default;
$action-sheet-md-icon-margin-top: 0;
/// @prop - Margin end of the icon in the action sheet button
$action-sheet-md-icon-margin-end: 32px !default;
$action-sheet-md-icon-margin-end: 32px;
/// @prop - Margin bottom of the icon in the action sheet button
$action-sheet-md-icon-margin-bottom: 0 !default;
$action-sheet-md-icon-margin-bottom: 0;
/// @prop - Margin start of the icon in the action sheet button
$action-sheet-md-icon-margin-start: 0 !default;
$action-sheet-md-icon-margin-start: 0;

View File

@@ -4,7 +4,7 @@
// --------------------------------------------------
/// @prop - Width of the action sheet
$action-sheet-width: 100% !default;
$action-sheet-width: 100%;
/// @prop - Maximum width of the action sheet
$action-sheet-max-width: 500px !default;
$action-sheet-max-width: 500px;

View File

@@ -40,7 +40,7 @@ const testAriaButton = async (
await expect(actionSheetButton).toHaveAttribute('aria-label', expectedAriaLabel);
};
configs({ directions: ['ltr'], themes: ['dark', 'light'] }).forEach(({ config, title }) => {
configs({ directions: ['ltr'], palettes: ['dark', 'light'] }).forEach(({ config, title }) => {
test.describe(title('action-sheet: Axe testing'), () => {
test('should not have accessibility violations when header is defined', async ({ page }) => {
await page.setContent(

View File

@@ -6,136 +6,136 @@
// --------------------------------------------------
/// @prop - Font size of the alert
$alert-ios-font-size: dynamic-font-min(1, 14px) !default;
$alert-ios-font-size: dynamic-font-min(1, 14px);
/// @prop - Max width of the alert
$alert-ios-max-width: dynamic-font-clamp(1, 270px, 1.2) !default;
$alert-ios-max-width: dynamic-font-clamp(1, 270px, 1.2);
/// @prop - Border radius of the alert
$alert-ios-border-radius: 13px !default;
$alert-ios-border-radius: 13px;
/// @prop - Background color of the alert
$alert-ios-background-color: $overlay-ios-background-color !default;
$alert-ios-background-color: $overlay-ios-background-color;
/// @prop - Background color alpha of the alert when translucent
$alert-ios-translucent-background-color-alpha: .9 !default;
$alert-ios-translucent-background-color-alpha: .9;
/// @prop - Background color of the alert when translucent
$alert-ios-translucent-background-color: rgba($background-color-rgb, $alert-ios-translucent-background-color-alpha) !default;
$alert-ios-translucent-background-color: rgba($background-color-rgb, $alert-ios-translucent-background-color-alpha);
/// @prop - Box shadow of the alert
$alert-ios-box-shadow: none !default;
$alert-ios-box-shadow: none;
/// @prop - Padding top of the alert head
$alert-ios-head-padding-top: 12px !default;
$alert-ios-head-padding-top: 12px;
/// @prop - Padding end of the alert head
$alert-ios-head-padding-end: 16px !default;
$alert-ios-head-padding-end: 16px;
/// @prop - Padding bottom of the alert head
$alert-ios-head-padding-bottom: 7px !default;
$alert-ios-head-padding-bottom: 7px;
/// @prop - Padding start of the alert head
$alert-ios-head-padding-start: $alert-ios-head-padding-end !default;
$alert-ios-head-padding-start: $alert-ios-head-padding-end;
/// @prop - Text align of the alert head
$alert-ios-head-text-align: center !default;
$alert-ios-head-text-align: center;
/// @prop - Color of the alert title
$alert-ios-title-color: $text-color !default;
$alert-ios-title-color: $text-color;
/// @prop - Margin top of the alert title
$alert-ios-title-margin-top: 8px !default;
$alert-ios-title-margin-top: 8px;
/// @prop - Font size of the alert title
$alert-ios-title-font-size: dynamic-font-min(1, 17px) !default;
$alert-ios-title-font-size: dynamic-font-min(1, 17px);
/// @prop - Font weight of the alert title
$alert-ios-title-font-weight: 600 !default;
$alert-ios-title-font-weight: 600;
/// @prop - Font size of the alert sub title
$alert-ios-sub-title-font-size: dynamic-font-min(1, 14px) !default;
$alert-ios-sub-title-font-size: dynamic-font-min(1, 14px);
/// @prop - Text color of the alert sub title
$alert-ios-sub-title-text-color: $text-color-step-400 !default;
$alert-ios-sub-title-text-color: $text-color-step-400;
/// @prop - Padding top of the alert message
$alert-ios-message-padding-top: 0 !default;
$alert-ios-message-padding-top: 0;
/// @prop - Padding end of the alert message
$alert-ios-message-padding-end: 16px !default;
$alert-ios-message-padding-end: 16px;
/// @prop - Padding bottom of the alert message
$alert-ios-message-padding-bottom: 21px !default;
$alert-ios-message-padding-bottom: 21px;
/// @prop - Padding start of the alert message
$alert-ios-message-padding-start: $alert-ios-message-padding-end !default;
$alert-ios-message-padding-start: $alert-ios-message-padding-end;
/// @prop - Font size of the alert message
$alert-ios-message-font-size: dynamic-font-min(1, 13px) !default;
$alert-ios-message-font-size: dynamic-font-min(1, 13px);
/// @prop - Text align of the alert message
$alert-ios-message-text-align: center !default;
$alert-ios-message-text-align: center;
/// @prop - Text color of the alert message
$alert-ios-message-text-color: $text-color !default;
$alert-ios-message-text-color: $text-color;
/// @prop - Padding top of the alert empty message
$alert-ios-message-empty-padding-top: 0 !default;
$alert-ios-message-empty-padding-top: 0;
/// @prop - Padding end of the alert empty message
$alert-ios-message-empty-padding-end: 0 !default;
$alert-ios-message-empty-padding-end: 0;
/// @prop - Padding bottom of the alert empty message
$alert-ios-message-empty-padding-bottom: 12px !default;
$alert-ios-message-empty-padding-bottom: 12px;
/// @prop - Padding start of the alert empty message
$alert-ios-message-empty-padding-start: 0 !default;
$alert-ios-message-empty-padding-start: 0;
/// @prop - Maximum height of the alert content
$alert-ios-content-max-height: 240px !default;
$alert-ios-content-max-height: 240px;
/// @prop - Margin top of the alert input
$alert-ios-input-margin-top: 10px !default;
$alert-ios-input-margin-top: 10px;
/// @prop - Padding top on the alert input
$alert-ios-input-padding-top: 7px !default;
$alert-ios-input-padding-top: 7px;
/// @prop - Padding end on the alert input
$alert-ios-input-padding-end: $alert-ios-input-padding-top !default;
$alert-ios-input-padding-end: $alert-ios-input-padding-top;
/// @prop - Padding bottom on the alert input
$alert-ios-input-padding-bottom: $alert-ios-input-padding-top !default;
$alert-ios-input-padding-bottom: $alert-ios-input-padding-top;
/// @prop - Padding start on the alert input
$alert-ios-input-padding-start: $alert-ios-input-padding-end !default;
$alert-ios-input-padding-start: $alert-ios-input-padding-end;
/// @prop - Placeholder Color for input
$alert-ios-input-placeholder-color: $placeholder-text-color !default;
$alert-ios-input-placeholder-color: $placeholder-text-color;
/// @prop - Border color of the alert input
$alert-ios-input-border-color: $background-color-step-250 !default;
$alert-ios-input-border-color: $background-color-step-250;
/// @prop - Border of the alert input
$alert-ios-input-border: $hairlines-width solid $alert-ios-input-border-color !default;
$alert-ios-input-border: $hairlines-width solid $alert-ios-input-border-color;
/// @prop - Border radius of the alert input
$alert-ios-input-border-radius: 7px !default;
$alert-ios-input-border-radius: 7px;
/// @prop - Background color of the alert input
$alert-ios-input-background-color: $background-color !default;
$alert-ios-input-background-color: $background-color;
/// @prop - Flex wrap of the alert button group
$alert-ios-button-group-flex-wrap: wrap !default;
$alert-ios-button-group-flex-wrap: wrap;
/// @prop - Flex of the alert button
$alert-ios-button-flex: 1 1 auto !default;
$alert-ios-button-flex: 1 1 auto;
/// @prop - Margin of the alert button
$alert-ios-button-margin: 0 !default;
$alert-ios-button-margin: 0;
/// @prop - Min width of the alert button
$alert-ios-button-min-width: 50% !default;
$alert-ios-button-min-width: 50%;
/// @prop - Height of the alert button
/**
@@ -147,172 +147,172 @@ $alert-ios-button-min-width: 50% !default;
* a hairline (<1px) width, this will cause subpixel rendering
* differences across browsers.
*/
$alert-ios-button-height: dynamic-font-min(1, 44px) !default;
$alert-ios-button-height: dynamic-font-min(1, 44px);
/// @prop - Padding of the alert button
$alert-ios-button-padding: 8px !default;
$alert-ios-button-padding: 8px;
/// @prop - Font size of the alert button
$alert-ios-button-font-size: dynamic-font-min(1, 17px) !default;
$alert-ios-button-font-size: dynamic-font-min(1, 17px);
/// @prop - Color of the text in the alert button
$alert-ios-button-text-color: ion-color(primary, base) !default;
$alert-ios-button-text-color: ion-color(primary, base);
/// @prop - Destructive text color of the alert button
$alert-ios-button-destructive-text-color: ion-color(danger, base) !default;
$alert-ios-button-destructive-text-color: ion-color(danger, base);
/// @prop - Background color of the alert button
$alert-ios-button-background-color: transparent !default;
$alert-ios-button-background-color: transparent;
/// @prop - Background color alpha of the alert activated button
$alert-ios-button-background-color-alpha-activated: .1 !default;
$alert-ios-button-background-color-alpha-activated: .1;
/// @prop - Background color of the alert activated button
$alert-ios-button-background-color-activated: rgba($text-color-rgb, $alert-ios-button-background-color-alpha-activated) !default;
$alert-ios-button-background-color-activated: rgba($text-color-rgb, $alert-ios-button-background-color-alpha-activated);
/// @prop - Border width of the alert button
$alert-ios-button-border-width: $hairlines-width !default;
$alert-ios-button-border-width: $hairlines-width;
/// @prop - Border style of the alert button
$alert-ios-button-border-style: solid !default;
$alert-ios-button-border-style: solid;
/// @prop - Border color alpha of the alert button
$alert-ios-button-border-color-alpha: .2 !default;
$alert-ios-button-border-color-alpha: .2;
/// @prop - Border color of the alert button
$alert-ios-button-border-color: rgba($text-color-rgb, $alert-ios-button-border-color-alpha) !default;
$alert-ios-button-border-color: rgba($text-color-rgb, $alert-ios-button-border-color-alpha);
/// @prop - Border radius of the alert button
$alert-ios-button-border-radius: 0 !default;
$alert-ios-button-border-radius: 0;
/// @prop - Font weight of the main text on the alert button
$alert-ios-button-main-font-weight: bold !default;
$alert-ios-button-main-font-weight: bold;
/// @prop - Border top of the alert list
$alert-ios-list-border-top: $alert-ios-button-border-width $alert-ios-button-border-style $alert-ios-button-border-color !default;
$alert-ios-list-border-top: $alert-ios-button-border-width $alert-ios-button-border-style $alert-ios-button-border-color;
/// @prop - Padding top on the label for the radio alert
$alert-ios-radio-label-padding-top: 13px !default;
$alert-ios-radio-label-padding-top: 13px;
/// @prop - Padding end on the label for the radio alert
$alert-ios-radio-label-padding-end: $alert-ios-radio-label-padding-top !default;
$alert-ios-radio-label-padding-end: $alert-ios-radio-label-padding-top;
/// @prop - Padding bottom on the label for the radio alert
$alert-ios-radio-label-padding-bottom: $alert-ios-radio-label-padding-top !default;
$alert-ios-radio-label-padding-bottom: $alert-ios-radio-label-padding-top;
/// @prop - Padding start on the label for the radio alert
$alert-ios-radio-label-padding-start: $alert-ios-radio-label-padding-end !default;
$alert-ios-radio-label-padding-start: $alert-ios-radio-label-padding-end;
/// @prop - Text color of the label for the radio alert
$alert-ios-radio-label-text-color: $text-color !default;
$alert-ios-radio-label-text-color: $text-color;
/// @prop - Text color of the label for the checked radio alert
$alert-ios-radio-label-text-color-checked: $alert-ios-button-text-color !default;
$alert-ios-radio-label-text-color-checked: $alert-ios-button-text-color;
/// @prop - Min width of the radio alert
$alert-ios-radio-min-width: 30px !default;
$alert-ios-radio-min-width: 30px;
/// @prop - Top of the icon in the radio alert
$alert-ios-radio-icon-top: -7px !default;
$alert-ios-radio-icon-top: -7px;
/// @prop - Start of the icon in the radio alert
$alert-ios-radio-icon-start: 7px !default;
$alert-ios-radio-icon-start: 7px;
/// @prop - Width of the icon in the radio alert
$alert-ios-radio-icon-width: 6px !default;
$alert-ios-radio-icon-width: 6px;
/// @prop - Height of the icon in the radio alert
$alert-ios-radio-icon-height: 12px !default;
$alert-ios-radio-icon-height: 12px;
/// @prop - Border width of the icon in the radio alert
$alert-ios-radio-icon-border-width: 2px !default;
$alert-ios-radio-icon-border-width: 2px;
/// @prop - Border style of the icon in the radio alert
$alert-ios-radio-icon-border-style: solid !default;
$alert-ios-radio-icon-border-style: solid;
/// @prop - Border color of the icon in the radio alert
$alert-ios-radio-icon-border-color: $alert-ios-button-text-color !default;
$alert-ios-radio-icon-border-color: $alert-ios-button-text-color;
/// @prop - Transform of the icon in the radio alert
$alert-ios-radio-icon-transform: rotate(45deg) !default;
$alert-ios-radio-icon-transform: rotate(45deg);
/// @prop - Padding top of the label for the checkbox in the alert
$alert-ios-checkbox-label-padding-top: 13px !default;
$alert-ios-checkbox-label-padding-top: 13px;
/// @prop - Padding end of the label for the checkbox in the alert
$alert-ios-checkbox-label-padding-end: $alert-ios-checkbox-label-padding-top !default;
$alert-ios-checkbox-label-padding-end: $alert-ios-checkbox-label-padding-top;
/// @prop - Padding bottom of the label for the checkbox in the alert
$alert-ios-checkbox-label-padding-bottom: $alert-ios-checkbox-label-padding-top !default;
$alert-ios-checkbox-label-padding-bottom: $alert-ios-checkbox-label-padding-top;
/// @prop - Padding start of the label for the checkbox in the alert
$alert-ios-checkbox-label-padding-start: $alert-ios-checkbox-label-padding-end !default;
$alert-ios-checkbox-label-padding-start: $alert-ios-checkbox-label-padding-end;
/// @prop - Text color of the label for the checkbox in the alert
$alert-ios-checkbox-label-text-color: $text-color !default;
$alert-ios-checkbox-label-text-color: $text-color;
/// @prop - Margin top of the checkbox in the alert
$alert-ios-checkbox-margin-top: 10px !default;
$alert-ios-checkbox-margin-top: 10px;
/// @prop - Margin end of the checkbox in the alert
$alert-ios-checkbox-margin-end: 6px !default;
$alert-ios-checkbox-margin-end: 6px;
/// @prop - Margin bottom of the checkbox in the alert
$alert-ios-checkbox-margin-bottom: 10px !default;
$alert-ios-checkbox-margin-bottom: 10px;
/// @prop - Margin start of the checkbox in the alert
$alert-ios-checkbox-margin-start: 16px !default;
$alert-ios-checkbox-margin-start: 16px;
/// @prop - Size of the checkbox in the alert
$alert-ios-checkbox-size: dynamic-font-max(22px, 2.538) !default;
$alert-ios-checkbox-size: dynamic-font-max(22px, 2.538);
/// @prop - Border width of the checkbox in the alert
$alert-ios-checkbox-border-width: dynamic-font(2px) !default;
$alert-ios-checkbox-border-width: dynamic-font(2px);
/// @prop - Border style of the checkbox in the alert
$alert-ios-checkbox-border-style: solid !default;
$alert-ios-checkbox-border-style: solid;
/// @prop - Border radius of the checkbox in the alert
$alert-ios-checkbox-border-radius: 50% !default;
$alert-ios-checkbox-border-radius: 50%;
/// @prop - Border color of the checkbox in the alert when off
$alert-ios-checkbox-border-color-off: $item-ios-border-color !default;
$alert-ios-checkbox-border-color-off: $item-ios-border-color;
/// @prop - Border color of the checkbox in the alert when on
$alert-ios-checkbox-border-color-on: ion-color(primary, base) !default;
$alert-ios-checkbox-border-color-on: ion-color(primary, base);
/// @prop - Background color of the checkbox in the alert when off
$alert-ios-checkbox-background-color-off: $item-ios-background !default;
$alert-ios-checkbox-background-color-off: $item-ios-background;
/// @prop - Background color of the checkbox in the alert when on
$alert-ios-checkbox-background-color-on: ion-color(primary, base) !default;
$alert-ios-checkbox-background-color-on: ion-color(primary, base);
/// @prop - Top of the icon in the checkbox alert
$alert-ios-checkbox-icon-top: calc($alert-ios-checkbox-size / 8) !default;
$alert-ios-checkbox-icon-top: calc($alert-ios-checkbox-size / 8);
/// @prop - Start of the icon in the checkbox alert
$alert-ios-checkbox-icon-start: calc($alert-ios-checkbox-size / 3) !default;
$alert-ios-checkbox-icon-start: calc($alert-ios-checkbox-size / 3);
/// @prop - Width of the icon in the checkbox alert
$alert-ios-checkbox-icon-width: calc($alert-ios-checkbox-size / 6 + 1px) !default;
$alert-ios-checkbox-icon-width: calc($alert-ios-checkbox-size / 6 + 1px);
/// @prop - Height of the icon in the checkbox alert
$alert-ios-checkbox-icon-height: calc($alert-ios-checkbox-size * 0.5) !default;
$alert-ios-checkbox-icon-height: calc($alert-ios-checkbox-size * 0.5);
/// @prop - Border width of the icon in the checkbox alert
$alert-ios-checkbox-icon-border-width: $alert-ios-checkbox-border-width !default;
$alert-ios-checkbox-icon-border-width: $alert-ios-checkbox-border-width;
/// @prop - Border style of the icon in the checkbox alert
$alert-ios-checkbox-icon-border-style: $alert-ios-checkbox-border-style !default;
$alert-ios-checkbox-icon-border-style: $alert-ios-checkbox-border-style;
/// @prop - Border color of the icon in the checkbox alert
$alert-ios-checkbox-icon-border-color: $background-color !default;
$alert-ios-checkbox-icon-border-color: $background-color;
/// @prop - Transform of the icon in the checkbox alert
$alert-ios-checkbox-icon-transform: rotate(45deg) !default;
$alert-ios-checkbox-icon-transform: rotate(45deg);
/// @prop - Filter of the translucent alert
$alert-ios-translucent-filter: saturate(180%) blur(20px) !default;
$alert-ios-translucent-filter: saturate(180%) blur(20px);
/// @prop - Height of the tappable inputs in the checkbox alert
$alert-ios-tappable-height: $item-ios-min-height !default;
$alert-ios-tappable-height: $item-ios-min-height;

View File

@@ -5,10 +5,10 @@
// --------------------------------------------------
/// @prop - Font size of the alert
$alert-md-font-size: dynamic-font(14px) !default;
$alert-md-font-size: dynamic-font(14px);
/// @prop - Max width of the alert
$alert-md-max-width: 280px !default;
$alert-md-max-width: 280px;
/// @prop - Max width of the alert on a tablet
/**
@@ -19,313 +19,313 @@ $alert-md-max-width: 280px !default;
* 3. The height can increase up to 560px.
* Source: https://m2.material.io/components/dialogs#behavior
*/
$alert-md-max-width-tablet: min(calc(100vw - 96px), 560px) !default;
$alert-md-max-width-tablet: min(calc(100vw - 96px), 560px);
/// @prop - Max width of the alert on a tablet
$alert-md-max-height-tablet: min(calc(100vh - 96px), 560px) !default;
$alert-md-max-height-tablet: min(calc(100vh - 96px), 560px);
/// @prop - Border radius of the alert
$alert-md-border-radius: 4px !default;
$alert-md-border-radius: 4px;
/// @prop - Background color of the alert
$alert-md-background-color: $overlay-md-background-color !default;
$alert-md-background-color: $overlay-md-background-color;
/// @prop - Box shadow color of the alert
$alert-md-box-shadow: 0 11px 15px -7px rgba(0, 0, 0, .2), 0 24px 38px 3px rgba(0, 0, 0, .14), 0 9px 46px 8px rgba(0, 0, 0, .12) !default;
$alert-md-box-shadow: 0 11px 15px -7px rgba(0, 0, 0, .2), 0 24px 38px 3px rgba(0, 0, 0, .14), 0 9px 46px 8px rgba(0, 0, 0, .12);
/// @prop - Padding top of the alert head
$alert-md-head-padding-top: 20px !default;
$alert-md-head-padding-top: 20px;
/// @prop - Padding end of the alert head
$alert-md-head-padding-end: 23px !default;
$alert-md-head-padding-end: 23px;
/// @prop - Padding bottom of the alert head
$alert-md-head-padding-bottom: 15px !default;
$alert-md-head-padding-bottom: 15px;
/// @prop - Padding start of the alert head
$alert-md-head-padding-start: $alert-md-head-padding-end !default;
$alert-md-head-padding-start: $alert-md-head-padding-end;
/// @prop - Text align of the alert head
$alert-md-head-text-align: start !default;
$alert-md-head-text-align: start;
/// @prop - Color of the alert title
$alert-md-title-color: $text-color !default;
$alert-md-title-color: $text-color;
/// @prop - Font size of the alert title
$alert-md-title-font-size: dynamic-font(20px) !default;
$alert-md-title-font-size: dynamic-font(20px);
/// @prop - Font weight of the alert title
$alert-md-title-font-weight: 500 !default;
$alert-md-title-font-weight: 500;
/// @prop - Font size of the alert sub title
$alert-md-sub-title-font-size: dynamic-font(16px) !default;
$alert-md-sub-title-font-size: dynamic-font(16px);
/// @prop - Text color of the alert sub title
$alert-md-sub-title-text-color: $text-color !default;
$alert-md-sub-title-text-color: $text-color;
/// @prop - Padding top of the alert message
$alert-md-message-padding-top: 20px !default;
$alert-md-message-padding-top: 20px;
/// @prop - Padding end of the alert message
$alert-md-message-padding-end: 24px !default;
$alert-md-message-padding-end: 24px;
/// @prop - Padding bottom of the alert message
$alert-md-message-padding-bottom: $alert-md-message-padding-top !default;
$alert-md-message-padding-bottom: $alert-md-message-padding-top;
/// @prop - Padding start of the alert message
$alert-md-message-padding-start: $alert-md-message-padding-end !default;
$alert-md-message-padding-start: $alert-md-message-padding-end;
/// @prop - Font size of the alert message
$alert-md-message-font-size: dynamic-font(16px) !default;
$alert-md-message-font-size: dynamic-font(16px);
/// @prop - Text color of the alert message
$alert-md-message-text-color: $text-color-step-450 !default;
$alert-md-message-text-color: $text-color-step-450;
/// @prop - Padding top of the alert empty message
$alert-md-message-empty-padding-top: 0 !default;
$alert-md-message-empty-padding-top: 0;
/// @prop - Padding end of the alert empty message
$alert-md-message-empty-padding-end: $alert-md-message-empty-padding-top !default;
$alert-md-message-empty-padding-end: $alert-md-message-empty-padding-top;
/// @prop - Padding bottom of the alert empty message
$alert-md-message-empty-padding-bottom: $alert-md-message-empty-padding-top !default;
$alert-md-message-empty-padding-bottom: $alert-md-message-empty-padding-top;
/// @prop - Padding start of the alert empty message
$alert-md-message-empty-padding-start: $alert-md-message-empty-padding-end !default;
$alert-md-message-empty-padding-start: $alert-md-message-empty-padding-end;
/// @prop - Maximum height of the alert content
$alert-md-content-max-height: 266px !default;
$alert-md-content-max-height: 266px;
/// @prop - Border width of the alert input
$alert-md-input-border-width: 1px !default;
$alert-md-input-border-width: 1px;
/// @prop - Border style of the alert input
$alert-md-input-border-style: solid !default;
$alert-md-input-border-style: solid;
/// @prop - Border color of the alert input
$alert-md-input-border-color: $background-color-step-150 !default;
$alert-md-input-border-color: $background-color-step-150;
/// @prop - Text color of the alert input
$alert-md-input-text-color: $text-color !default;
$alert-md-input-text-color: $text-color;
/// @prop - Border width of the alert input when focused
$alert-md-input-border-width-focused: 2px !default;
$alert-md-input-border-width-focused: 2px;
/// @prop - Border style of the alert input when focused
$alert-md-input-border-style-focused: $alert-md-input-border-style !default;
$alert-md-input-border-style-focused: $alert-md-input-border-style;
/// @prop - Border color of the alert input when focused
$alert-md-input-border-color-focused: ion-color(primary, base) !default;
$alert-md-input-border-color-focused: ion-color(primary, base);
/// @prop - Margin top of the alert input
$alert-md-input-margin-top: 5px !default;
$alert-md-input-margin-top: 5px;
/// @prop - Margin end of the alert input
$alert-md-input-margin-end: 0 !default;
$alert-md-input-margin-end: 0;
/// @prop - Margin bottom of the alert input
$alert-md-input-margin-bottom: 5px !default;
$alert-md-input-margin-bottom: 5px;
/// @prop - Margin start of the alert input
$alert-md-input-margin-start: 0 !default;
$alert-md-input-margin-start: 0;
/// @prop - Placeholder Color for input
$alert-md-input-placeholder-color: $placeholder-text-color !default;
$alert-md-input-placeholder-color: $placeholder-text-color;
/// @prop - Flex wrap of the alert button group
$alert-md-button-group-flex-wrap: wrap-reverse !default;
$alert-md-button-group-flex-wrap: wrap-reverse;
/// @prop - Justify content of the alert button group
$alert-md-button-group-justify-content: flex-end !default;
$alert-md-button-group-justify-content: flex-end;
/// @prop - Padding top of the alert button
$alert-md-button-padding-top: 10px !default;
$alert-md-button-padding-top: 10px;
/// @prop - Padding end of the alert button
$alert-md-button-padding-end: $alert-md-button-padding-top !default;
$alert-md-button-padding-end: $alert-md-button-padding-top;
/// @prop - Padding bottom of the alert button
$alert-md-button-padding-bottom: $alert-md-button-padding-top !default;
$alert-md-button-padding-bottom: $alert-md-button-padding-top;
/// @prop - Padding start of the alert button
$alert-md-button-padding-start: $alert-md-button-padding-end !default;
$alert-md-button-padding-start: $alert-md-button-padding-end;
/// @prop - Margin top of the alert button
$alert-md-button-margin-top: 0 !default;
$alert-md-button-margin-top: 0;
/// @prop - Margin end of the alert button
$alert-md-button-margin-end: 8px !default;
$alert-md-button-margin-end: 8px;
/// @prop - Margin bottom of the alert button
$alert-md-button-margin-bottom: 0 !default;
$alert-md-button-margin-bottom: 0;
/// @prop - Margin start of the alert button
$alert-md-button-margin-start: 0 !default;
$alert-md-button-margin-start: 0;
/// @prop - Font weight of the alert button
$alert-md-button-font-weight: 500 !default;
$alert-md-button-font-weight: 500;
/// @prop - Text color of the alert button
$alert-md-button-text-color: ion-color(primary, base) !default;
$alert-md-button-text-color: ion-color(primary, base);
/// @prop - Background color of the alert button
$alert-md-button-background-color: transparent !default;
$alert-md-button-background-color: transparent;
/// @prop - Border radius of the alert button
$alert-md-button-border-radius: 2px !default;
$alert-md-button-border-radius: 2px;
/// @prop - Text transform of the alert button
$alert-md-button-text-transform: uppercase !default;
$alert-md-button-text-transform: uppercase;
/// @prop - Text align of the alert button
$alert-md-button-text-align: end !default;
$alert-md-button-text-align: end;
/// @prop - Border top of the alert list
$alert-md-list-border-top: 1px solid $alert-md-input-border-color !default;
$alert-md-list-border-top: 1px solid $alert-md-input-border-color;
/// @prop - Border bottom of the alert list
$alert-md-list-border-bottom: $alert-md-list-border-top !default;
$alert-md-list-border-bottom: $alert-md-list-border-top;
/// @prop - Top of the alert radio
$alert-md-radio-top: 0 !default;
$alert-md-radio-top: 0;
/// @prop - Left of the alert radio
$alert-md-radio-left: 26px !default;
$alert-md-radio-left: 26px;
/// @prop - Width of the alert radio
$alert-md-radio-width: 20px !default;
$alert-md-radio-width: 20px;
/// @prop - Height of the alert radio
$alert-md-radio-height: $alert-md-radio-width !default;
$alert-md-radio-height: $alert-md-radio-width;
/// @prop - Border width of the alert radio
$alert-md-radio-border-width: 2px !default;
$alert-md-radio-border-width: 2px;
/// @prop - Border style of the alert radio
$alert-md-radio-border-style: solid !default;
$alert-md-radio-border-style: solid;
/// @prop - Border radius of the alert radio
$alert-md-radio-border-radius: 50% !default;
$alert-md-radio-border-radius: 50%;
/// @prop - Border color of the alert radio when off
$alert-md-radio-border-color-off: $background-color-step-550 !default;
$alert-md-radio-border-color-off: $background-color-step-550;
/// @prop - Border color of the alert radio when on
$alert-md-radio-border-color-on: $alert-md-button-text-color !default;
$alert-md-radio-border-color-on: $alert-md-button-text-color;
/// @prop - Width of the icon in the alert radio
$alert-md-radio-icon-width: $alert-md-radio-width * 0.5 !default;
$alert-md-radio-icon-width: $alert-md-radio-width * 0.5;
/// @prop - Height of the icon in the alert radio
$alert-md-radio-icon-height: $alert-md-radio-icon-width !default;
$alert-md-radio-icon-height: $alert-md-radio-icon-width;
/// @prop - Top of the icon in the alert radio
$alert-md-radio-icon-top: ($alert-md-radio-width - $alert-md-radio-icon-width - $alert-md-radio-border-width * 2) * 0.5 !default;
$alert-md-radio-icon-top: ($alert-md-radio-width - $alert-md-radio-icon-width - $alert-md-radio-border-width * 2) * 0.5;
/// @prop - Start of the icon in the radio alert
$alert-md-radio-icon-start: $alert-md-radio-icon-top !default;
$alert-md-radio-icon-start: $alert-md-radio-icon-top;
/// @prop - Border radius of the icon in the alert radio
$alert-md-radio-icon-border-radius: $alert-md-radio-border-radius !default;
$alert-md-radio-icon-border-radius: $alert-md-radio-border-radius;
/// @prop - Transform of the icon in the alert radio when off
$alert-md-radio-icon-transform-off: scale3d(0, 0, 0) !default;
$alert-md-radio-icon-transform-off: scale3d(0, 0, 0);
/// @prop - Transform of the icon in the alert radio when on
$alert-md-radio-icon-transform-on: scale3d(1, 1, 1) !default;
$alert-md-radio-icon-transform-on: scale3d(1, 1, 1);
/// @prop - Transition of the icon in the alert radio
$alert-md-radio-icon-transition: transform 280ms cubic-bezier(.4, 0, .2, 1) !default;
$alert-md-radio-icon-transition: transform 280ms cubic-bezier(.4, 0, .2, 1);
/// @prop - Padding top on the label for the radio alert
$alert-md-radio-label-padding-top: 13px !default;
$alert-md-radio-label-padding-top: 13px;
/// @prop - Padding end on the label for the radio alert
$alert-md-radio-label-padding-end: 26px !default;
$alert-md-radio-label-padding-end: 26px;
/// @prop - Padding bottom on the label for the radio alert
$alert-md-radio-label-padding-bottom: $alert-md-radio-label-padding-top !default;
$alert-md-radio-label-padding-bottom: $alert-md-radio-label-padding-top;
/// @prop - Padding start on the label for the radio alert
$alert-md-radio-label-padding-start: $alert-md-radio-label-padding-end + 26px !default;
$alert-md-radio-label-padding-start: $alert-md-radio-label-padding-end + 26px;
/// @prop - Font size of the label for the radio alert
$alert-md-radio-label-font-size: dynamic-font(16px) !default;
$alert-md-radio-label-font-size: dynamic-font(16px);
/// @prop - Text color of the label for the radio alert
$alert-md-radio-label-text-color: $text-color-step-150 !default;
$alert-md-radio-label-text-color: $text-color-step-150;
/// @prop - Text color of the label for the checked radio alert
$alert-md-radio-label-text-color-checked: $alert-md-radio-label-text-color !default;
$alert-md-radio-label-text-color-checked: $alert-md-radio-label-text-color;
/// @prop - Top of the checkbox in the alert
$alert-md-checkbox-top: 0 !default;
$alert-md-checkbox-top: 0;
/// @prop - Left of the checkbox in the alert
$alert-md-checkbox-left: 26px !default;
$alert-md-checkbox-left: 26px;
/// @prop - Width of the checkbox in the alert
$alert-md-checkbox-width: 16px !default;
$alert-md-checkbox-width: 16px;
/// @prop - Height of the checkbox in the alert
$alert-md-checkbox-height: 16px !default;
$alert-md-checkbox-height: 16px;
/// @prop - Border width of the checkbox in the alert
$alert-md-checkbox-border-width: 2px !default;
$alert-md-checkbox-border-width: 2px;
/// @prop - Border style of the checkbox in the alert
$alert-md-checkbox-border-style: solid !default;
$alert-md-checkbox-border-style: solid;
/// @prop - Border radius of the checkbox in the alert
$alert-md-checkbox-border-radius: 2px !default;
$alert-md-checkbox-border-radius: 2px;
/// @prop - Border color of the checkbox in the alert when off
$alert-md-checkbox-border-color-off: $background-color-step-550 !default;
$alert-md-checkbox-border-color-off: $background-color-step-550;
/// @prop - Border color of the checkbox in the alert when on
$alert-md-checkbox-border-color-on: $alert-md-button-text-color !default;
$alert-md-checkbox-border-color-on: $alert-md-button-text-color;
/// @prop - Top of the icon in the checkbox alert
$alert-md-checkbox-icon-top: 0 !default;
$alert-md-checkbox-icon-top: 0;
/// @prop - Start of the icon in the checkbox alert
$alert-md-checkbox-icon-start: 3px !default;
$alert-md-checkbox-icon-start: 3px;
/// @prop - Width of the icon in the checkbox alert
$alert-md-checkbox-icon-width: 6px !default;
$alert-md-checkbox-icon-width: 6px;
/// @prop - Height of the icon in the checkbox alert
$alert-md-checkbox-icon-height: 10px !default;
$alert-md-checkbox-icon-height: 10px;
/// @prop - Border width of the icon in the checkbox alert
$alert-md-checkbox-icon-border-width: 2px !default;
$alert-md-checkbox-icon-border-width: 2px;
/// @prop - Border style of the icon in the checkbox alert
$alert-md-checkbox-icon-border-style: solid !default;
$alert-md-checkbox-icon-border-style: solid;
/// @prop - Border color of the icon in the checkbox alert
$alert-md-checkbox-icon-border-color: ion-color(primary, contrast) !default;
$alert-md-checkbox-icon-border-color: ion-color(primary, contrast);
/// @prop - Transform of the icon in the checkbox alert
$alert-md-checkbox-icon-transform: rotate(45deg) !default;
$alert-md-checkbox-icon-transform: rotate(45deg);
/// @prop - Padding top of the label for the checkbox in the alert
$alert-md-checkbox-label-padding-top: 13px !default;
$alert-md-checkbox-label-padding-top: 13px;
/// @prop - Padding end of the label for the checkbox in the alert
$alert-md-checkbox-label-padding-end: $alert-md-checkbox-left !default;
$alert-md-checkbox-label-padding-end: $alert-md-checkbox-left;
/// @prop - Padding bottom of the label for the checkbox in the alert
$alert-md-checkbox-label-padding-bottom: $alert-md-checkbox-label-padding-top !default;
$alert-md-checkbox-label-padding-bottom: $alert-md-checkbox-label-padding-top;
/// @prop - Padding start of the label for the checkbox in the alert
$alert-md-checkbox-label-padding-start: $alert-md-checkbox-label-padding-end + 27px !default;
$alert-md-checkbox-label-padding-start: $alert-md-checkbox-label-padding-end + 27px;
/// @prop - Text color of the label for the checkbox in the alert
$alert-md-checkbox-label-text-color: $text-color-step-150 !default;
$alert-md-checkbox-label-text-color: $text-color-step-150;
/// @prop - Font size of the label for the checkbox in the alert
$alert-md-checkbox-label-font-size: dynamic-font(16px) !default;
$alert-md-checkbox-label-font-size: dynamic-font(16px);
/// @prop - Height of the tappable inputs in the checkbox alert
$alert-md-tappable-height: $item-md-min-height !default;
$alert-md-tappable-height: $item-md-min-height;

View File

@@ -4,16 +4,16 @@
// --------------------------------------------------
/// @prop - Minimum width of the alert
$alert-min-width: 250px !default;
$alert-min-width: 250px;
/// @prop - Maximum height of the alert
$alert-max-height: 90% !default;
$alert-max-height: 90%;
/// @prop - Line height of the alert button
$alert-button-line-height: dynamic-font(20px) !default;
$alert-button-line-height: dynamic-font(20px);
/// @prop - Font size of the alert button
$alert-button-font-size: dynamic-font(14px) !default;
$alert-button-font-size: dynamic-font(14px);
/// @prop - Minimum height of a textarea in the alert
$alert-input-min-height: 37px !default;
$alert-input-min-height: 37px;

View File

@@ -28,7 +28,7 @@ const testAria = async (
expect(ariaDescribedBy).toBe(expectedAriaDescribedBy);
};
configs({ directions: ['ltr'], themes: ['dark', 'light'] }).forEach(({ title, config }) => {
configs({ directions: ['ltr'], palettes: ['dark', 'light'] }).forEach(({ title, config }) => {
test.describe(title('alert: Axe testing'), () => {
test('should not have accessibility violations when header and message are defined', async ({ page }) => {
await page.setContent(
@@ -306,6 +306,10 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
await alert.evaluate((el: HTMLIonAlertElement) => el.present());
await ionAlertDidPresent.next();
/**
* The borders on the text fields may not be visible in the screenshot
* when using Safari, this is due to a WebKit rendering quirk.
*/
await expect(page).toHaveScreenshot(screenshot(`alert-text-fields-scale`));
});
});

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -100,7 +100,7 @@ configs().forEach(({ config, screenshot, title }) => {
});
});
configs({ themes: ['light', 'dark'] }).forEach(({ config, screenshot, title }) => {
configs({ palettes: ['light', 'dark'] }).forEach(({ config, screenshot, title }) => {
test.describe(title('should not have visual regressions'), () => {
test('more than two buttons', async ({ page }) => {
await page.setContent(

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -5,10 +5,10 @@
// --------------------------------------------------
/// @prop - Width of the avatar
$avatar-ios-width: 48px !default;
$avatar-ios-width: 48px;
/// @prop - Height of the avatar
$avatar-ios-height: $avatar-ios-width !default;
$avatar-ios-height: $avatar-ios-width;
/// @prop - Border radius of the avatar
$avatar-ios-border-radius: 50% !default;
$avatar-ios-border-radius: 50%;

View File

@@ -5,10 +5,10 @@
// --------------------------------------------------
/// @prop - Width of the avatar
$avatar-md-width: 64px !default;
$avatar-md-width: 64px;
/// @prop - Height of the avatar
$avatar-md-height: $avatar-md-width !default;
$avatar-md-height: $avatar-md-width;
/// @prop - Border radius of the avatar
$avatar-md-border-radius: 50% !default;
$avatar-md-border-radius: 50%;

View File

@@ -4,7 +4,7 @@
// --------------------------------------------------
/// @prop - Z index of the back button
$back-button-ios-button-z-index: $z-index-toolbar-buttons !default;
$back-button-ios-button-z-index: $z-index-toolbar-buttons;
/// @prop - Text color of the back button
$back-button-ios-color: ion-color(primary, base) !default;
$back-button-ios-color: ion-color(primary, base);

View File

@@ -4,4 +4,4 @@
// --------------------------------------------------
/// @prop - Text color of the back button
$back-button-md-color: currentColor !default;
$back-button-md-color: currentColor;

View File

@@ -5,7 +5,7 @@ import { configs, test } from '@utils/test/playwright';
/**
* Only ios mode uses ion-color() for the back button
*/
configs({ directions: ['ltr'], modes: ['ios'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
configs({ directions: ['ltr'], modes: ['ios'], palettes: ['light', 'dark'] }).forEach(({ title, config }) => {
test.describe(title('back-button: a11y for ion-color()'), () => {
test('should not have accessibility violations', async ({ page }) => {
await page.setContent(

View File

@@ -4,4 +4,4 @@
// --------------------------------------------------
/// @prop - Border radius of the badge
$badge-ios-border-radius: 10px !default;
$badge-ios-border-radius: 10px;

View File

@@ -4,4 +4,4 @@
// --------------------------------------------------
/// @prop - Border radius of the badge
$badge-md-border-radius: 4px !default;
$badge-md-border-radius: 4px;

View File

@@ -4,25 +4,25 @@
// --------------------------------------------------
/// @prop - Padding top of the badge
$badge-padding-top: 3px !default;
$badge-padding-top: 3px;
/// @prop - Padding end of the badge
$badge-padding-end: 8px !default;
$badge-padding-end: 8px;
/// @prop - Padding bottom of the badge
$badge-padding-bottom: $badge-padding-top !default;
$badge-padding-bottom: $badge-padding-top;
/// @prop - Padding start of the badge
$badge-padding-start: $badge-padding-end !default;
$badge-padding-start: $badge-padding-end;
/// @prop - Minimum width of the badge
$badge-min-width: 10px !default;
$badge-min-width: 10px;
/// @prop - Baseline font size of the badge
$badge-baseline-font-size: 13px !default;
$badge-baseline-font-size: 13px;
/// @prop - Font size of the badge
$badge-font-size: dynamic-font($badge-baseline-font-size) !default;
$badge-font-size: dynamic-font($badge-baseline-font-size);
/// @prop - Font weight of the badge
$badge-font-weight: bold !default;
$badge-font-weight: bold;

View File

@@ -25,7 +25,7 @@ configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
});
});
configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ config, title }) => {
configs({ directions: ['ltr'], palettes: ['light', 'dark'] }).forEach(({ config, title }) => {
test.describe(title('badge: a11y'), () => {
test('should not have accessibility violations', async ({ page }) => {
/**

View File

@@ -4,31 +4,31 @@
// --------------------------------------------------
/// @prop - Color of the breadcrumb
$breadcrumb-ios-color: var(--ion-color-step-850, var(--ion-text-color-step-150, #2d4665)) !default;
$breadcrumb-ios-color: var(--ion-color-step-850, var(--ion-text-color-step-150, #2d4665));
/// @prop - Color of the active breadcrumb
$breadcrumb-ios-color-active: var(--ion-text-color, #03060b) !default;
$breadcrumb-ios-color-active: var(--ion-text-color, #03060b);
/// @prop - Background color of the focused breadcrumb
$breadcrumb-ios-background-focused: var(--ion-color-step-50, var(--ion-background-color-step-50, rgba(233, 237, 243, 0.7))) !default;
$breadcrumb-ios-background-focused: var(--ion-color-step-50, var(--ion-background-color-step-50, rgba(233, 237, 243, 0.7)));
/// @prop - Color of the breadcrumb icon
$breadcrumb-ios-icon-color: var(--ion-color-step-400, var(--ion-text-color-step-600, #92a0b3)) !default;
$breadcrumb-ios-icon-color: var(--ion-color-step-400, var(--ion-text-color-step-600, #92a0b3));
/// @prop - Color of the breadcrumb icon when active
$breadcrumb-ios-icon-color-active: var(--ion-color-step-850, var(--ion-text-color-step-150, #242d39)) !default;
$breadcrumb-ios-icon-color-active: var(--ion-color-step-850, var(--ion-text-color-step-150, #242d39));
/// @prop - Color of the breadcrumb icon when focused
$breadcrumb-ios-icon-color-focused: var(--ion-color-step-750, var(--ion-text-color-step-250, #445b78)) !default;
$breadcrumb-ios-icon-color-focused: var(--ion-color-step-750, var(--ion-text-color-step-250, #445b78));
/// @prop - Color of the breadcrumb separator
$breadcrumb-ios-separator-color: $breadcrumb-separator-color !default;
$breadcrumb-ios-separator-color: $breadcrumb-separator-color;
/// @prop - Color of the breadcrumb indicator
$breadcrumb-ios-indicator-color: $breadcrumb-ios-separator-color !default;
$breadcrumb-ios-indicator-color: $breadcrumb-ios-separator-color;
/// @prop - Background color of the breadcrumb indicator
$breadcrumb-ios-indicator-background: var(--ion-color-step-100, var(--ion-background-color-step-100, #e9edf3)) !default;
$breadcrumb-ios-indicator-background: var(--ion-color-step-100, var(--ion-background-color-step-100, #e9edf3));
/// @prop - Background color of the breadcrumb indicator when focused
$breadcrumb-ios-indicator-background-focused: var(--ion-color-step-150, var(--ion-background-color-step-150, #d9e0ea)) !default;
$breadcrumb-ios-indicator-background-focused: var(--ion-color-step-150, var(--ion-background-color-step-150, #d9e0ea));

View File

@@ -4,43 +4,43 @@
// --------------------------------------------------
/// @prop - Color of the breadcrumb
$breadcrumb-md-color: var(--ion-color-step-600, var(--ion-text-color-step-400, #677483)) !default;
$breadcrumb-md-color: var(--ion-color-step-600, var(--ion-text-color-step-400, #677483));
/// @prop - Color of the active breadcrumb
$breadcrumb-md-color-active: var(--ion-text-color, #03060b) !default;
$breadcrumb-md-color-active: var(--ion-text-color, #03060b);
/// @prop - Color of the focused breadcrumb
$breadcrumb-md-color-focused: var(--ion-color-step-800, var(--ion-text-color-step-200, #35404e)) !default;
$breadcrumb-md-color-focused: var(--ion-color-step-800, var(--ion-text-color-step-200, #35404e));
/// @prop - Background color of the focused breadcrumb
$breadcrumb-md-background-focused: var(--ion-color-step-50, var(--ion-background-color-step-50, #fff)) !default;
$breadcrumb-md-background-focused: var(--ion-color-step-50, var(--ion-background-color-step-50, #fff));
/// @prop - Color of the breadcrumb icon
$breadcrumb-md-icon-color: var(--ion-color-step-550, var(--ion-text-color-step-450, #7d8894)) !default;
$breadcrumb-md-icon-color: var(--ion-color-step-550, var(--ion-text-color-step-450, #7d8894));
/// @prop - Color of the breadcrumb icon when active
$breadcrumb-md-icon-color-active: var(--ion-color-step-850, var(--ion-text-color-step-150, #222d3a)) !default;
$breadcrumb-md-icon-color-active: var(--ion-color-step-850, var(--ion-text-color-step-150, #222d3a));
/// @prop - Margin top of the breadcrumb separator
$breadcrumb-md-separator-margin-top: -1px !default;
$breadcrumb-md-separator-margin-top: -1px;
/// @prop - Margin end of the breadcrumb separator
$breadcrumb-md-separator-margin-end: 10px !default;
$breadcrumb-md-separator-margin-end: 10px;
/// @prop - Margin bottom of the breadcrumb separator
$breadcrumb-md-separator-margin-bottom: null !default;
$breadcrumb-md-separator-margin-bottom: null;
/// @prop - Margin start of the breadcrumb separator
$breadcrumb-md-separator-margin-start: 10px !default;
$breadcrumb-md-separator-margin-start: 10px;
/// @prop - Color of the breadcrumb separator
$breadcrumb-md-separator-color: $breadcrumb-separator-color !default;
$breadcrumb-md-separator-color: $breadcrumb-separator-color;
/// @prop - Color of the breadcrumb indicator
$breadcrumb-md-indicator-color: $breadcrumb-md-separator-color !default;
$breadcrumb-md-indicator-color: $breadcrumb-md-separator-color;
/// @prop - Background color of the breadcrumb indicator
$breadcrumb-md-indicator-background: var(--ion-color-step-100, var(--ion-background-color-step-100, #eef1f3)) !default;
$breadcrumb-md-indicator-background: var(--ion-color-step-100, var(--ion-background-color-step-100, #eef1f3));
/// @prop - Background color of the breadcrumb indicator when focused
$breadcrumb-md-indicator-background-focused: var(--ion-color-step-150, var(--ion-background-color-step-150, #dfe5e8)) !default;
$breadcrumb-md-indicator-background-focused: var(--ion-color-step-150, var(--ion-background-color-step-150, #dfe5e8));

View File

@@ -4,12 +4,12 @@
// --------------------------------------------------
/// @prop - Font weight of the breadcrumb
$breadcrumb-font-weight: 400 !default;
$breadcrumb-font-weight: 400;
$breadcrumb-baseline-font-size: 16px !default;
$breadcrumb-baseline-font-size: 16px;
/// @prop - Font size of the breadcrumb
$breadcrumb-font-size: dynamic-font($breadcrumb-baseline-font-size) !default;
$breadcrumb-font-size: dynamic-font($breadcrumb-baseline-font-size);
/// @prop - Color of the breadcrumb separator
$breadcrumb-separator-color: var(--ion-color-step-550, var(--ion-text-color-step-450, #73849a)) !default;
$breadcrumb-separator-color: var(--ion-color-step-550, var(--ion-text-color-step-450, #73849a));

View File

@@ -114,11 +114,6 @@
font-size: #{$button-ios-small-font-size};
}
:host(.button-has-icon-only) {
--padding-top: 0;
--padding-bottom: 0;
}
// iOS Round Button
// --------------------------------------------------
@@ -131,7 +126,6 @@
--padding-bottom: #{$button-ios-round-padding-bottom};
}
// iOS Strong Button
// --------------------------------------------------
@@ -139,6 +133,85 @@
font-weight: #{$button-ios-strong-font-weight};
}
// iOS Icon Only Button
// --------------------------------------------------
:host(.button-has-icon-only) {
--padding-top: 0;
--padding-bottom: var(--padding-top);
--padding-end: var(--padding-top);
--padding-start: var(--padding-end);
// TODO(FW-6053): replace em value with the min-height variable.
min-width: clamp(30px, 2.125em, 60px);
// TODO(FW-6053): replace em value with the min-height variable.
min-height: clamp(30px, 2.125em, 60px);
}
::slotted(ion-icon[slot="icon-only"]) {
/**
* The values were provided through a native iOS app.
* min font size: 15px, default font size: 18px, max font size: 43px
*
* Since the `ion-button` uses `rem` for the font size, we can't
* just pass the desired icon font size in `em` to the `
* dynamic-font-clamp`. Instead, we need to adjust the base size
* to account for the ion-button` font size.
*
* For example, if the default font size of `ion-button` is 16px
* (derived from rem), then the base size can use the default font
* size of the icon.
*/
font-size: dynamic-font-clamp(0.84, 18px, 2.39, 1em);
}
:host(.button-small.button-has-icon-only) {
// TODO(FW-6053): replace em value with the min-height variable.
min-width: clamp(23px, 2.16em, 54px);
// TODO(FW-6053): replace em value with the min-height variable.
min-height: clamp(23px, 2.16em, 54px);
}
:host(.button-small) ::slotted(ion-icon[slot="icon-only"]) {
/**
* The values were provided through a native iOS app.
* min font size: 12px, default font size: 17px, max font size: 40px
*
* Since the `ion-button` uses `rem` for the font size, we can't
* just pass the desired icon font size in `em` to the `
* dynamic-font-clamp`. Instead, we need to adjust the base size
* to account for the ion-button` font size.
*
* For example, if the default font size of `ion-button` is 13px
* (derived from rem) and the default font size of the icon is
* 17px, then the base size would need to be increased.
*/
font-size: dynamic-font-clamp(0.58, 20.93px, 1.92, 1em);
}
:host(.button-large.button-has-icon-only) {
// TODO(FW-6053): replace em value with the min-height variable.
min-width: clamp(46px, 2.5em, 78px);
// TODO(FW-6053): replace em value with the min-height variable.
min-height: clamp(46px, 2.5em, 78px);
}
:host(.button-large) ::slotted(ion-icon[slot="icon-only"]) {
/**
* The values were provided through a native iOS app.
* min font size: 15px, default font size: 18px, max font size: 43px
*
* Since the `ion-button` uses `rem` for the font size, we can't
* just pass the desired icon font size in `em` to the `
* dynamic-font-clamp`. Instead, we need to adjust the base size
* to account for the ion-button` font size.
*
* For example, if the default font size of `ion-button` is 20px
* (derived from rem) and the default font size of the icon is
* 18px, then the base size would need to be decreased.
*/
font-size: dynamic-font-clamp(1.05, 14.4px, 2.99, 1em);
}
// iOS Button Focused
// --------------------------------------------------
@@ -212,3 +285,12 @@
:host(.button-solid.ion-color.ion-activated) .button-native::after {
background: #{current-color(shade)};
}
// Activated Button in Toolbar
// --------------------------------------------------
:host(.button-outline.ion-activated.in-toolbar:not(.ion-color):not(.in-toolbar-color)) .button-native {
background: var(--ion-toolbar-color, var(--color));
color: #{var(--ion-toolbar-background, var(--background), ion-color(primary, contrast))};
}

View File

@@ -4,108 +4,108 @@
// --------------------------------------------------
/// @prop - Margin top of the button
$button-ios-margin-top: 4px !default;
$button-ios-margin-top: 4px;
/// @prop - Margin end of the button
$button-ios-margin-end: 2px !default;
$button-ios-margin-end: 2px;
/// @prop - Margin bottom of the button
$button-ios-margin-bottom: 4px !default;
$button-ios-margin-bottom: 4px;
/// @prop - Margin start of the button
$button-ios-margin-start: 2px !default;
$button-ios-margin-start: 2px;
/// @prop - Padding top of the button
$button-ios-padding-top: 13px !default;
$button-ios-padding-top: 13px;
/// @prop - Padding end of the button
$button-ios-padding-end: 1em !default;
$button-ios-padding-end: 1em;
/// @prop - Padding bottom of the button
$button-ios-padding-bottom: $button-ios-padding-top !default;
$button-ios-padding-bottom: $button-ios-padding-top;
/// @prop - Padding start of the button
$button-ios-padding-start: $button-ios-padding-end !default;
$button-ios-padding-start: $button-ios-padding-end;
/// @prop - Minimum height of the button
$button-ios-min-height: 3.1em !default;
$button-ios-min-height: 3.1em;
/// @prop - Border radius of the button
$button-ios-border-radius: 14px !default;
$button-ios-border-radius: 14px;
/// @prop - Font size of the button text
/// The maximum font size is calculated by taking the default font size
/// and multiplying it by 3, since 310% of the default is the maximum
$button-ios-font-size: dynamic-font-max(16px, 3) !default;
$button-ios-font-size: dynamic-font-max(16px, 3);
/// @prop - Font weight of the button text
$button-ios-font-weight: 500 !default;
$button-ios-font-weight: 500;
// iOS Large Button
// --------------------------------------------------
/// @prop - Padding top of the large button
$button-ios-large-padding-top: 17px !default;
$button-ios-large-padding-top: 17px;
/// @prop - Padding end of the large button
$button-ios-large-padding-end: 1em !default;
$button-ios-large-padding-end: 1em;
/// @prop - Padding bottom of the large button
$button-ios-large-padding-bottom: $button-ios-large-padding-top !default;
$button-ios-large-padding-bottom: $button-ios-large-padding-top;
/// @prop - Padding start of the large button
$button-ios-large-padding-start: $button-ios-large-padding-end !default;
$button-ios-large-padding-start: $button-ios-large-padding-end;
/// @prop - Minimum height of the large button
$button-ios-large-min-height: 3.1em !default;
$button-ios-large-min-height: 3.1em;
/// @prop - Border radius of the large button
$button-ios-large-border-radius: 16px !default;
$button-ios-large-border-radius: 16px;
/// @prop - Font size of the large button
/// The maximum font size is calculated by taking the default font size
/// and multiplying it by 3, since 310% of the default is the maximum
$button-ios-large-font-size: dynamic-font-max(20px, 3) !default;
$button-ios-large-font-size: dynamic-font-max(20px, 3);
// iOS Small Button
// --------------------------------------------------
/// @prop - Padding top of the small button
$button-ios-small-padding-top: 4px !default;
$button-ios-small-padding-top: 4px;
/// @prop - Padding end of the small button
$button-ios-small-padding-end: .9em !default;
$button-ios-small-padding-end: .9em;
/// @prop - Padding bottom of the small button
$button-ios-small-padding-bottom: $button-ios-small-padding-top !default;
$button-ios-small-padding-bottom: $button-ios-small-padding-top;
/// @prop - Padding start of the small button
$button-ios-small-padding-start: $button-ios-small-padding-end !default;
$button-ios-small-padding-start: $button-ios-small-padding-end;
/// @prop - Minimum height of the small button
$button-ios-small-min-height: 2.1em !default;
$button-ios-small-min-height: 2.1em;
/// @prop - Border radius of the small button
$button-ios-small-border-radius: 6px !default;
$button-ios-small-border-radius: 6px;
/// @prop - Font size of the small button
/// The maximum font size is calculated by taking the default font size
/// and multiplying it by 3, since 310% of the default is the maximum
$button-ios-small-font-size: dynamic-font-max(13px, 3) !default;
$button-ios-small-font-size: dynamic-font-max(13px, 3);
// iOS Outline Button
// --------------------------------------------------
/// @prop - Border width of the outline button
$button-ios-outline-border-width: 1px !default;
$button-ios-outline-border-width: 1px;
/// @prop - Border style of the outline button
$button-ios-outline-border-style: solid !default;
$button-ios-outline-border-style: solid;
/// @prop - Border radius of the outline button
$button-ios-outline-border-radius: $button-ios-border-radius !default;
$button-ios-outline-border-radius: $button-ios-border-radius;
// iOS Clear Button
// --------------------------------------------------
@@ -113,41 +113,41 @@ $button-ios-outline-border-radius: $button-ios-border-radius
/// @prop - Font size of the clear button
/// The maximum font size is calculated by taking the default font size
/// and multiplying it by 3, since 310% of the default is the maximum
$button-ios-clear-font-size: dynamic-font-max(17px, 3) !default;
$button-ios-clear-font-size: dynamic-font-max(17px, 3);
/// @prop - Font weight of the clear button
$button-ios-clear-font-weight: normal !default;
$button-ios-clear-font-weight: normal;
/// @prop - Letter spacing of the button
$button-ios-letter-spacing: 0 !default;
$button-ios-letter-spacing: 0;
/// @prop - Opacity of the activated clear button
$button-ios-clear-opacity-activated: .4 !default;
$button-ios-clear-opacity-activated: .4;
/// @prop - Opacity of the clear button on hover
$button-ios-clear-opacity-hover: .6 !default;
$button-ios-clear-opacity-hover: .6;
// iOS Round Button
// --------------------------------------------------
/// @prop - Padding top of the round button
$button-ios-round-padding-top: $button-round-padding-top !default;
$button-ios-round-padding-top: $button-round-padding-top;
/// @prop - Padding end of the round button
$button-ios-round-padding-end: $button-round-padding-end !default;
$button-ios-round-padding-end: $button-round-padding-end;
/// @prop - Padding bottom of the round button
$button-ios-round-padding-bottom: $button-round-padding-bottom !default;
$button-ios-round-padding-bottom: $button-round-padding-bottom;
/// @prop - Padding start of the round button
$button-ios-round-padding-start: $button-round-padding-start !default;
$button-ios-round-padding-start: $button-round-padding-start;
/// @prop - Border radius of the round button
$button-ios-round-border-radius: $button-round-border-radius !default;
$button-ios-round-border-radius: $button-round-border-radius;
// iOS Decorator Button
// --------------------------------------------------
/// @prop - Font weight of the strong button
$button-ios-strong-font-weight: 600 !default;
$button-ios-strong-font-weight: 600;

View File

@@ -113,12 +113,6 @@
font-size: #{$button-md-small-font-size};
}
:host(.button-has-icon-only) {
--padding-top: 0;
--padding-bottom: 0;
}
// MD strong Button
// --------------------------------------------------
@@ -126,10 +120,94 @@
font-weight: #{$button-md-strong-font-weight};
}
::slotted(ion-icon[slot="icon-only"]) {
@include padding(0);
// MD Icon Only Button
//
// MD does not specify a small size, these
// styles are based on the iOS small size.
//
// MD does not specify a large size, these
// styles are based on the iOS large size.
// --------------------------------------------------
:host(.button-has-icon-only) {
--padding-top: 0;
--padding-bottom: var(--padding-top);
--padding-end: var(--padding-top);
--padding-start: var(--padding-end);
// TODO(FW-6053): replace em value with the min-height variable.
min-width: clamp(30px, 2.86em, 60px);
// TODO(FW-6053): replace em value with the min-height variable.
min-height: clamp(30px, 2.86em, 60px);
}
::slotted(ion-icon[slot="icon-only"]) {
/**
* The values were provided through MD design,
* large and small are based on the iOS sizes.
* min font size: 15px, default font size: 22.4px, max font size: 43px
*
* Since the `ion-button` uses `rem` for the font size, we can't
* just pass the desired icon font size in `em` to the `
* dynamic-font-clamp`. Instead, we need to adjust the base size
* to account for the ion-button` font size.
*
* For example, if the default font size of `ion-button` is 14px
* (derived from rem) and the default font size of the icon is
* 22.4px, then the base size would need to be increased.
*/
font-size: dynamic-font-clamp(0.59, 25.6px, 1.68, 1em);
}
:host(.button-small.button-has-icon-only) {
// TODO(FW-6053): replace em value with the min-height variable.
min-width: clamp(23px, 2.16em, 54px);
// TODO(FW-6053): replace em value with the min-height variable.
min-height: clamp(23px, 2.16em, 54px);
}
:host(.button-small) ::slotted(ion-icon[slot="icon-only"]) {
/**
* The values were provided through MD design,
* large and small are based on the iOS sizes.
* min font size: 12px, default font size: 16px, max font size: 40px
*
* Since the `ion-button` uses `rem` for the font size, we can't
* just pass the desired icon font size in `em` to the `
* dynamic-font-clamp`. Instead, we need to adjust the base size
* to account for the ion-button` font size.
*
* For example, if the default font size of `ion-button` is 13px
* (derived from rem) and the default font size of the icon is
* 16px, then the base size would need to be increased.
*/
font-size: dynamic-font-clamp(0.66, 19.7px, 2.05, 1em);
}
:host(.button-large.button-has-icon-only) {
// TODO(FW-6053): replace em value with the min-height variable.
min-width: clamp(46px, 2.5em, 78px);
// TODO(FW-6053): replace em value with the min-height variable.
min-height: clamp(46px, 2.5em, 78px);
}
:host(.button-large) ::slotted(ion-icon[slot="icon-only"]) {
/**
* The values were provided through MD design,
* large and small are based on the iOS sizes.
* min font size: 15px, default font size: 28px, max font size: 43px
*
* Since the `ion-button` uses `rem` for the font size, we can't
* just pass the desired icon font size in `em` to the `
* dynamic-font-clamp`. Instead, we need to adjust the base size
* to account for the ion-button` font size.
*
* For example, if the default font size of `ion-button` is 20px
* (derived from rem) and the default font size of the icon is
* 28px, then the base size would need to be increased.
*/
font-size: dynamic-font-clamp(0.67, 22.4px, 1.92, 1em);
}
// Material Design Button: Hover
// --------------------------------------------------
@@ -160,3 +238,12 @@
background: #{current-color(base)};
}
}
// Activated Button in Toolbar
// --------------------------------------------------
:host(.button-outline.ion-activated.in-toolbar:not(.ion-color):not(.in-toolbar-color)) .button-native {
background: var(--ion-toolbar-background, var(--color));
color: #{var(--ion-toolbar-color, var(--background), ion-color(primary, contrast))};
}

View File

@@ -7,113 +7,113 @@
$button-md-margin-top: 4px;
/// @prop - Margin end of the button
$button-md-margin-end: 2px !default;
$button-md-margin-end: 2px;
/// @prop - Margin bottom of the button
$button-md-margin-bottom: 4px !default;
$button-md-margin-bottom: 4px;
/// @prop - Margin start of the button
$button-md-margin-start: 2px !default;
$button-md-margin-start: 2px;
/// @prop - Padding top of the button
$button-md-padding-top: 8px !default;
$button-md-padding-top: 8px;
/// @prop - Padding end of the button
$button-md-padding-end: 1.1em !default;
$button-md-padding-end: 1.1em;
/// @prop - Padding bottom of the button
$button-md-padding-bottom: $button-md-padding-top !default;
$button-md-padding-bottom: $button-md-padding-top;
/// @prop - Padding start of the button
$button-md-padding-start: 1.1em !default;
$button-md-padding-start: 1.1em;
/// @prop - Minimum height of the button
$button-md-min-height: 36px !default;
$button-md-min-height: 36px;
/// @prop - Border radius of the button
$button-md-border-radius: 4px !default;
$button-md-border-radius: 4px;
/// @prop - Font size of the button text
$button-md-font-size: dynamic-font(14px) !default;
$button-md-font-size: dynamic-font(14px);
/// @prop - Font weight of the button text
$button-md-font-weight: 500 !default;
$button-md-font-weight: 500;
/// @prop - Capitalization of the button text
$button-md-text-transform: uppercase !default;
$button-md-text-transform: uppercase;
$button-md-letter-spacing: 0.06em;
/// @prop - Box shadow of the button
$button-md-box-shadow: 0 3px 1px -2px rgba(0, 0, 0, .2), 0 2px 2px 0 rgba(0, 0, 0, .14), 0 1px 5px 0 rgba(0, 0, 0, .12) !default;
$button-md-box-shadow: 0 3px 1px -2px rgba(0, 0, 0, .2), 0 2px 2px 0 rgba(0, 0, 0, .14), 0 1px 5px 0 rgba(0, 0, 0, .12);
/// @prop - Box shadow of the activated button
$button-md-box-shadow-activated: 0 5px 5px -3px rgba(0, 0, 0, .2), 0 8px 10px 1px rgba(0, 0, 0, .14), 0 3px 14px 2px rgba(0, 0, 0, .12) !default;
$button-md-box-shadow-activated: 0 5px 5px -3px rgba(0, 0, 0, .2), 0 8px 10px 1px rgba(0, 0, 0, .14), 0 3px 14px 2px rgba(0, 0, 0, .12);
// Material Design Large Button
// --------------------------------------------------
/// @prop - Padding top of the large button
$button-md-large-padding-top: 14px !default;
$button-md-large-padding-top: 14px;
/// @prop - Padding end of the large button
$button-md-large-padding-end: 1em !default;
$button-md-large-padding-end: 1em;
/// @prop - Padding bottom of the large button
$button-md-large-padding-bottom: $button-md-large-padding-top !default;
$button-md-large-padding-bottom: $button-md-large-padding-top;
/// @prop - Padding start of the large button
$button-md-large-padding-start: $button-md-large-padding-end !default;
$button-md-large-padding-start: $button-md-large-padding-end;
/// @prop - Minimum height of the large button
$button-md-large-min-height: 2.8em !default;
$button-md-large-min-height: 2.8em;
/// @prop - Font size of the large button
$button-md-large-font-size: dynamic-font(20px) !default;
$button-md-large-font-size: dynamic-font(20px);
// Material Design Small Button
// --------------------------------------------------
/// @prop - Padding top of the small button
$button-md-small-padding-top: 4px !default;
$button-md-small-padding-top: 4px;
/// @prop - Padding end of the small button
$button-md-small-padding-end: .9em !default;
$button-md-small-padding-end: .9em;
/// @prop - Padding bottom of the small button
$button-md-small-padding-bottom: $button-md-small-padding-top !default;
$button-md-small-padding-bottom: $button-md-small-padding-top;
/// @prop - Padding start of the small button
$button-md-small-padding-start: $button-md-small-padding-end !default;
$button-md-small-padding-start: $button-md-small-padding-end;
/// @prop - Minimum height of the small button
$button-md-small-min-height: 2.1em !default;
$button-md-small-min-height: 2.1em;
/// @prop - Font size of the small button
$button-md-small-font-size: dynamic-font(13px) !default;
$button-md-small-font-size: dynamic-font(13px);
// Material Design Round Button
// --------------------------------------------------
/// @prop - Padding top of the round button
$button-md-round-padding-top: $button-round-padding-top !default;
$button-md-round-padding-top: $button-round-padding-top;
/// @prop - Padding end of the round button
$button-md-round-padding-end: $button-round-padding-end !default;
$button-md-round-padding-end: $button-round-padding-end;
/// @prop - Padding bottom of the round button
$button-md-round-padding-bottom: $button-round-padding-bottom !default;
$button-md-round-padding-bottom: $button-round-padding-bottom;
/// @prop - Padding start of the round button
$button-md-round-padding-start: $button-round-padding-start !default;
$button-md-round-padding-start: $button-round-padding-start;
/// @prop - Border radius of the round button
$button-md-round-border-radius: $button-round-border-radius !default;
$button-md-round-border-radius: $button-round-border-radius;
// Material Design Decorator Button
// --------------------------------------------------
/// @prop - Font weight of the strong button
$button-md-strong-font-weight: bold !default;
$button-md-strong-font-weight: bold;

View File

@@ -235,11 +235,6 @@
@include margin(0, -0.2em, 0, 0.3em);
}
::slotted(ion-icon[slot="icon-only"]) {
font-size: 1.8em;
}
// Button Ripple effect
// --------------------------------------------------
@@ -330,11 +325,3 @@ ion-ripple-effect {
background: #{var(--ion-toolbar-color, var(--background))};
color: #{var(--ion-toolbar-background, var(--color))};
}
// Activated Button in Toolbar
// --------------------------------------------------
:host(.button-outline.ion-activated.in-toolbar:not(.ion-color):not(.in-toolbar-color)) .button-native {
background: var(--ion-toolbar-color, var(--color));
color: #{var(--ion-toolbar-background, var(--background), ion-color(primary, contrast))};
}

View File

@@ -1,5 +1,5 @@
import type { ComponentInterface, EventEmitter } from '@stencil/core';
import { Component, Element, Event, Host, Prop, Watch, h } from '@stencil/core';
import { Component, Element, Event, Host, Prop, Watch, State, h } from '@stencil/core';
import type { AnchorInterface, ButtonInterface } from '@utils/element-interface';
import type { Attributes } from '@utils/helpers';
import { inheritAriaAttributes, hasShadowDom } from '@utils/helpers';
@@ -38,6 +38,11 @@ export class Button implements ComponentInterface, AnchorInterface, ButtonInterf
@Element() el!: HTMLElement;
/**
* If `true`, the button only has an icon.
*/
@State() isCircle: boolean = false;
/**
* The color to use from your application's color palette.
* Default options are: `"primary"`, `"secondary"`, `"tertiary"`, `"success"`, `"warning"`, `"danger"`, `"light"`, `"medium"`, and `"dark"`.
@@ -295,6 +300,18 @@ export class Button implements ComponentInterface, AnchorInterface, ButtonInterf
this.ionBlur.emit();
};
private slotChanged = () => {
/**
* Ensures that the 'has-icon-only' class is properly added
* or removed from `ion-button` when manipulating the
* `icon-only` slot.
*
* Without this, the 'has-icon-only' class is only checked
* or added when `ion-button` component first renders.
*/
this.isCircle = this.hasIconOnly;
};
render() {
const mode = getIonMode(this);
const {
@@ -374,7 +391,7 @@ export class Button implements ComponentInterface, AnchorInterface, ButtonInterf
{...inheritedAttributes}
>
<span class="button-inner">
<slot name="icon-only"></slot>
<slot name="icon-only" onSlotchange={this.slotChanged}></slot>
<slot name="start"></slot>
<slot></slot>
<slot name="end"></slot>

View File

@@ -4,16 +4,16 @@
// --------------------------------------------------
/// @prop - Padding top of the round button
$button-round-padding-top: 0 !default;
$button-round-padding-top: 0;
/// @prop - Padding end of the round button
$button-round-padding-end: 26px !default;
$button-round-padding-end: 26px;
/// @prop - Padding bottom of the round button
$button-round-padding-bottom: $button-round-padding-top !default;
$button-round-padding-bottom: $button-round-padding-top;
/// @prop - Padding start of the round button
$button-round-padding-start: $button-round-padding-end !default;
$button-round-padding-start: $button-round-padding-end;
/// @prop - Border radius of the round button
$button-round-border-radius: 64px !default;
$button-round-border-radius: 999px;

View File

@@ -2,7 +2,7 @@ import AxeBuilder from '@axe-core/playwright';
import { expect } from '@playwright/test';
import { configs, test } from '@utils/test/playwright';
configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
configs({ directions: ['ltr'], palettes: ['light', 'dark'] }).forEach(({ title, config }) => {
test.describe(title('button: a11y for ion-color()'), () => {
test('should not have accessibility violations', async ({ page }) => {
await page.setContent(
@@ -52,7 +52,7 @@ configs({ directions: ['ltr'], themes: ['light', 'dark'] }).forEach(({ title, co
/**
* Only ios mode uses ion-color() for the activated button state
*/
configs({ directions: ['ltr'], modes: ['ios'], themes: ['light', 'dark'] }).forEach(({ title, config }) => {
configs({ directions: ['ltr'], modes: ['ios'], palettes: ['light', 'dark'] }).forEach(({ title, config }) => {
test.describe(title('button: ios contrast'), () => {
test('activated state should not have accessibility violations', async ({ page }) => {
await page.setContent(

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

After

Width:  |  Height:  |  Size: 93 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

After

Width:  |  Height:  |  Size: 93 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 89 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 89 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 42 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 43 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 44 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 118 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 117 KiB

View File

@@ -6,12 +6,64 @@ import { configs, test } from '@utils/test/playwright';
*/
configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
test.describe(title('button: round'), () => {
test('should not have visual regressions', async ({ page }) => {
await page.goto(`/src/components/button/test/round`, config);
test.describe('default', () => {
test('should not have visual regressions', async ({ page }) => {
await page.goto(`/src/components/button/test/round`, config);
await page.setIonViewport();
await page.setIonViewport();
await expect(page).toHaveScreenshot(screenshot(`button-round`));
const container = page.locator('#default');
await expect(container).toHaveScreenshot(screenshot(`button-round`));
});
});
test.describe('outline', () => {
test('should not have visual regressions', async ({ page }) => {
await page.goto(`/src/components/button/test/round`, config);
await page.setIonViewport();
const container = page.locator('#outline');
await expect(container).toHaveScreenshot(screenshot(`button-outline-round`));
});
});
test.describe('clear', () => {
test('should not have visual regressions', async ({ page }) => {
await page.goto(`/src/components/button/test/round`, config);
await page.setIonViewport();
const container = page.locator('#clear');
await expect(container).toHaveScreenshot(screenshot(`button-clear-round`));
});
});
test.describe('color', () => {
test('should not have visual regressions', async ({ page }) => {
await page.goto(`/src/components/button/test/round`, config);
await page.setIonViewport();
const container = page.locator('#color');
await expect(container).toHaveScreenshot(screenshot(`button-color-round`));
});
});
test.describe('expand', () => {
test('should not have visual regressions', async ({ page }) => {
await page.goto(`/src/components/button/test/round`, config);
await page.setIonViewport();
const container = page.locator('#expand');
await expect(container).toHaveScreenshot(screenshot(`button-expand-round`));
});
});
});
});

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

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