Commit Graph

196 Commits

Author SHA1 Message Date
Maria Hutt
eafa7b5dc6 test(many): gestures flakiness (#27808)
Issue number: multiple internals

---------

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

Multiple tests that use gestures are flaky on GitHub. Due to that those
tests are being skipped.

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

- `page.mouse.move` will not work as expected if it the mouse moves
outside of the viewport. This may lead to events to not fire every time.
There's now a check to determine if the coordinates are valid. If they
are not, then it will update the coordinates to be as close to the
viewport's edge instead of being outside.
- Safari doesn't repaint the frame as often as the other browsers. This
causes the tests on GitHub to appear to be lagging. Now the frame is
forced to repaint only for Safari.
- Most tests are no longer being skipped.
- Range is still having issues on GitHub. It is no longer flaky locally
with the changes in this PR. I've had to revert them back to skip until
further notice.

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

<!-- If this introduces a breaking change, please describe the impact
and migration path for existing applications below. -->


## Other information

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

If this PR is merged, then:
- FW-3006, FW-2795, and FW-3079 can be closed
- FW-4556 still needs to remain open since range is still flaky on
GitHub

---------

Co-authored-by: ionitron <hi@ionicframework.com>
Co-authored-by: Amanda Johnston <90629384+amandaejohnston@users.noreply.github.com>
2023-08-14 20:12:04 +00:00
Liam DeBeasi
6fab2a98b3 chore(): sync with main 2023-06-20 10:05:00 -04:00
Sean Perkins
e75fa582c4 fix(header, footer): resolve CSP violations with box shadow (#27560)
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 `ion-header` and `ion-footer` use a base64 encoded image for a box
shadow instead of using the CSS box-shadow property directly. The use of
the background image creates CSP violations. The historic reasoning of
using an image instead of box shadow was to improve scroll performance.
Browsers and devices have improved a lot since that was implemented (5
years ago).

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

- Updates the usage of `ion-header` and `ion-footer` to use a box
shadow. The value comes from Material's web implementation:
https://material-components.github.io/material-components-web-catalog/#/component/top-app-bar

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

<!-- If this introduces a breaking change, please describe the impact
and migration path for existing applications below. -->


## 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>
2023-06-06 23:44:59 +00:00
Sean Perkins
66d959f5bf Merge remote-tracking branch 'origin/main' into sp/sync-feature-7.1-with-main 2023-06-01 12:10:45 -04:00
Brandy Carney
995a848575 fix(many): update form controls (radio, checkbox, toggle, input, select) to have consistent disabled opacity (#27396)
Issue number: resolves #27184

---------

## What is the current behavior?
The modern form controls do not use the same opacity for their labels
when disabled, resulting in inconsistent UI when using two different
types in the same view (select vs checkbox, for example).

## What is the new behavior?
The checkbox, input, radio, range, select, textarea and toggle labels
have been updated on both modes to use the same opacity as each other
when disabled. The checkbox and radio icons have been updated to use a
different opacity than the label for `md` mode.

- Updates `ios` mode so all form controls use the same opacity of `0.3`
- I could not find any guidelines by Apple for what color these should
be, so I decided to just make them the same as what is most commonly
used & match item
- Updates `md` mode so all form control labels use the same opacity of
`0.38`
- I used the [Material Design 3
documentation](https://m2.material.io/components) to get this number as
well as the opacity of the disabled selection controls in the [Material
Design 2 figma design
kit](https://www.figma.com/community/file/778763161265841481). The
Material Design 2 documentation does not mention the opacity, but this
is also the number used by Material Design 1 so it's safe to assume it
is what the disabled form labels should also use for Material Design 2.
- Updates the `md` range so the slotted elements are also included when
setting the opacity on the label
- Updates the range, radio & checkbox tests to make sure there are
screenshots in the different disabled states
- Updates the item/disabled test to include radio & textarea so you can
see all form controls side by side

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

## Other information

I downloaded screenshots of the item disabled tests and put them side by
side for `main` and this branch in order to see the differences in the
labels. The grey boxes to the left of each item are just a bigger
version of the label color for that item, so it's easier to see when
they aren't the same.

![iOS before and
after](https://github.com/ionic-team/ionic-framework/assets/6577830/2ce53625-e4e3-4565-a741-a47e27cf0275)
![MD before and
after](https://github.com/ionic-team/ionic-framework/assets/6577830/9cd83cdc-ab45-49bf-a0dc-1d78ba7f43be)

---------

Co-authored-by: ionitron <hi@ionicframework.com>
2023-05-17 14:25:06 +00:00
ionitron
f08cb31b39 chore(): add updated snapshots 2023-05-16 17:58:30 +00:00
Liam DeBeasi
19ec41c965 chore: sync with main 2023-05-16 10:26:41 -04:00
Liam DeBeasi
381de0b3d3 fix(many): form controls labels have increased margin (#27447)
Issue number: resolves #27129

---------

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

Material Design has 16px of margin between the form control and the
label, but we have 8px:
https://m2.material.io/components/selection-controls#usage

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

- Updates default margin from 8px to 16px for checkbox, input, radio,
range, select, textarea, and toggle.

Note: This should only apply to labels that are on the same line as the
form control. In other words, they do not apply to stacked/floating
labels.

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

<!-- If this introduces a breaking change, please describe the impact
and migration path for existing applications below. -->


## 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>
2023-05-16 13:16:00 +00:00
Liam DeBeasi
159bffbb5f chore(): sync with main 2023-05-11 14:57:44 -04:00
Amanda Johnston
368add2a5c feat(range): add label prop (#27408)
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. -->

Labels on `ion-range` can only be set via the `label` slot. When only
plain text is needed, this is cumbersome because you need to add an
entire new element to wrap the label.

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

Label prop added. If both the prop and slot are used, the prop will take
priority.

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

<!-- If this introduces a breaking change, please describe the impact
and migration path for existing applications below. -->


## Other information

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

- Docs PR: https://github.com/ionic-team/ionic-docs/pull/2955
- Dev build: `7.0.6-dev.11683657201.139d03f4`
2023-05-10 10:13:26 -05:00
Liam DeBeasi
7176af714d test: update playwright threshold to 0.1 (#27423)
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 team has observed that Playwright's default screenshot diff
threshold of 0.2 is not sensitive enough, and screenshots that should be
getting updated are not getting updated.

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

- Updates the threshold to 0.1

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

<!-- If this introduces a breaking change, please describe the impact
and migration path for existing applications below. -->


## 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>
2023-05-09 12:54:51 +00:00
Amanda Johnston
6e83ba4051 fix(range): round value to same number of decimal places as props to avoid floating point rounding errors (#27375)
Issue number: Resolves #21968

---------

<!-- 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 fractional values for `min`, `max`, or `step`, it is possible
for floating point rounding errors to cause unexpected values to be
emitted. For example, `step="0.05" min="0.1" max="1"` emits a value of
`0.150000000004` after moving one step.

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

Values are rounded to the max number of decimal places between the three
props. Note that it isn't mathematically possible to arrive at a value
with more decimal places than the props*, since addition (i.e. starting
at `min` and adding multiples of `step`) can't increase the precision of
a number.

\* Unless the `value` is set manually, but in that case, `ion-range`
currently snaps to a multiple of `step` as soon as the slider is moved,
resuming normal behavior.

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

<!-- If this introduces a breaking change, please describe the impact
and migration path for existing applications below. -->


## Other information

<!-- Any other information that is important to this PR such as
screenshots of how the component looks before and after the change. -->
2023-05-08 18:10:25 +00:00
amandaesmith3
6c68c56a7f Merge remote-tracking branch 'origin/main' into chore/sync-with-main-6 2023-05-05 13:30:21 -05:00
Liam DeBeasi
625c872d93 test(range): migrate to generators (#27369)
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. -->

Range tests are using legacy syntax

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

- Range tests are using generator syntax


849e127974

- The scroll target tests do not vary across modes so I removed those
additional checks.


0b8c15838a

- The standalone directory had some screenshots that were not in use, so
I deleted them


5b306f28b7

- The modern range event tests do not vary across modes/directions, so I
removed the additional checks.


699fb62789

- The legacy scroll target tests do not vary across modes so I removed
those additional checks.


c7dbb2d380

- The legacy range functional tests do not vary across modes/directions,
so I removed the additional checks.


aa06ba8ebf

- The legacy range event tests do not vary across modes/directions, so I
removed the additional checks.

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

<!-- If this introduces a breaking change, please describe the impact
and migration path for existing applications below. -->


## Other information

<!-- Any other information that is important to this PR such as
screenshots of how the component looks before and after the change. -->
2023-05-04 15:26:40 +00:00
Sean Perkins
10d2c75f8d Merge remote-tracking branch 'origin/main' into chore/sync-with-main-5-3 2023-05-03 13:38:03 -04:00
Liam DeBeasi
bfe7b38831 fix(many): form components do not take up full width in slot (#27306)
Issue number: resolves #27305

---------

<!-- Please refer to our contributing documentation for any questions on
submitting a pull request, or let us know here if you need any help:
https://ionicframework.com/docs/building/contributing -->

<!-- Some docs updates need to be made in the `ionic-docs` repo, in a
separate PR. See
https://github.com/ionic-team/ionic-framework/blob/main/.github/CONTRIBUTING.md#modifying-documentation
for details. -->

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

Checkbox, radio, range, select, and toggle take up 100% of its width
even when in a start/end slot.

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

- Checkbox, radio, range, select, and toggle do not take up 100% of its
width even when in a start/end slot.
. The "no slot" behavior is unchanged and aligns with the legacy select.

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

<!-- If this introduces a breaking change, please describe the impact
and migration path for existing applications below. -->


## Other information

<!-- Any other information that is important to this PR such as
screenshots of how the component looks before and after the change. -->
2023-04-28 16:13:34 +00:00
Liam DeBeasi
4826a3d9f5 test(config): introduce legacy and modern playwright projects (#27228)
Issue number: N/A

---------

<!-- Please refer to our contributing documentation for any questions on
submitting a pull request, or let us know here if you need any help:
https://ionicframework.com/docs/building/contributing -->

<!-- Some docs updates need to be made in the `ionic-docs` repo, in a
separate PR. See
https://github.com/ionic-team/ionic-framework/blob/main/.github/CONTRIBUTING.md#modifying-documentation
for details. -->

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

This is the first PR to introduce the infrastructure required to add
test generators to the Ionic Framework project. This PR introduces the
file name changes necessary to support two playwright configs, so I
recommend reviewing the PR by commit:


1e5012cea1

- Created a `playwright.config-legacy.ts` file and updates
`package.json`.
- Running `npm run test.e2e` will run the generator tests, and running
`npm run test.e2e.legacy` will run the legacy tests.


4fe8de7df7

- Updates the GitHub Action scripts to run both the modern and legacy
E2E tests. I added command modifiers to avoid collisions with output
directories.


e8bcfaf926

- Updates `*.e2e.ts` files to have the legacy format name:
`*.e2e-legacy.ts`. This naming scheme is required for the two Playwright
configs to pull in the correct files. When migrating tests to
generators, team members will rename the file to remove the `-legacy`
part.


5bf196c36d
(warning: lots of files!)

- Updates the `*.e2e.ts-snapshots` directories to have the legacy format
name: `*.e2e-legacy.ts-snapshots`. The screenshot directory in
Playwright is generated based on the test file name which is why we are
updating the screenshot directory. When migrating tests to generators,
team members will rename the directory to remove the `-legacy` part.

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

<!-- If this introduces a breaking change, please describe the impact
and migration path for existing applications below. -->


## Other information

<!-- Any other information that is important to this PR such as
screenshots of how the component looks before and after the change. -->
2023-04-26 18:27:17 +00:00
Liam DeBeasi
c0aea33576 refactor(): update directories to use kebab case (#27230)
Issue number: N/A

---------

<!-- Please refer to our contributing documentation for any questions on
submitting a pull request, or let us know here if you need any help:
https://ionicframework.com/docs/building/contributing -->

<!-- Some docs updates need to be made in the `ionic-docs` repo, in a
separate PR. See
https://github.com/ionic-team/ionic-framework/blob/main/.github/CONTRIBUTING.md#modifying-documentation
for details. -->

<!-- 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 decided on some new processes for adding tests. One of those
processes is that test directories should use kebab case.

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

- Updates test directories to use kebab case

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

<!-- If this introduces a breaking change, please describe the impact
and migration path for existing applications below. -->


## Other information

<!-- Any other information that is important to this PR such as
screenshots of how the component looks before and after the change. -->
2023-04-18 20:10:56 +00:00
Sean Perkins
30b548b167 fix(many): dynamic label support for modern form controls (#27156)
<!-- Please refer to our contributing documentation for any questions on
submitting a pull request, or let us know here if you need any help:
https://ionicframework.com/docs/building/contributing -->

<!-- Some docs updates need to be made in the `ionic-docs` repo, in a
separate PR. See
https://github.com/ionic-team/ionic-framework/blob/main/.github/CONTRIBUTING.md#modifying-documentation
for details. -->

<!-- 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 that are using Ionic v7 are experiencing an issue where
implementations that are intended to use the modern control syntax will
render with the legacy syntax and a warning will be displayed.

The issue is most easily reproduced by not assigning a label to the
control and then asynchronously assigning a label after a duration.

Angular example:
```html
<ion-item>
  <ion-input [label]="label"></ion-input>
</ion-item>
```

```ts
@Component({ ... })
export class MyComponent {
  @Input() label?: string; // initially unset

  ngOnInit() {
    setTimeout(() => this.label = 'Hello world', 500);
  }
}
```

<!-- Issues are required for both bug fixes and features. -->
Issue URL: resolves #27085


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

- Form controls that do not have a decorative label or
`aria-label`/`aria-labelledby` assigned, will default render as modern
controls.
- Legacy form implementations that render an `<ion-label>` within the
item, will continue to render with the legacy template and a warning
will be displayed in the console.
- Modern form syntax supports dynamically set labels

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

<!-- If this introduces a breaking change, please describe the impact
and migration path for existing applications below. -->

Legacy implementations that do not have a decorative label and do not
specify `aria-label` on the control, will be upgraded to the modern
syntax.

For example:
```html
<ion-item>
  <ion-input></ion-input>
</ion-item>
```

Developers that do not want to update to the modern syntax yet should
add the `legacy="true"` attribute to their form control.

## 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.0.2-dev.11681157690.1060bc7f`

When migrating the range tests to modern syntax, I observed a visual
clipping issue. This is being addressed in:
https://github.com/ionic-team/ionic-framework/pull/27188. This PR simply
adds the legacy flag so that screenshots are the same as `main`.
2023-04-17 20:30:19 +00:00
Maria Hutt
0a0345a84a refactor(many): use utils import (#27160) 2023-04-12 13:25:14 -07:00
Liam DeBeasi
78303dccaa fix(many): add aria-hidden to decorative icons (#26922) 2023-03-07 11:57:18 -05:00
Amanda Johnston
78f5d960cf fix(item): prevent slotted form controls from taking whole width of item (#26897) 2023-03-06 11:34:52 -06:00
ionitron
b90d6bba7f chore(): add updated snapshots 2023-03-03 17:44:00 +00:00
Liam DeBeasi
3f888c0928 chore(): sync with main 2023-03-03 12:00:21 -05:00
Sean Perkins
89a465c9ea chore(playwright): update to v1.31.1 (#26869) 2023-03-02 13:43:29 -05:00
Sean Perkins
67578f6246 chore: format string values in comments with double quotes (#26857) 2023-02-28 21:16:15 -05:00
Liam DeBeasi
df3735765a fix(button): update for ios spec (#26864)
BREAKING CHANGE:

Button is updated to align with the design specification for iOS.

**Design tokens**

| Token                              | Previous Value | New Value |
| ---------------------------------- | -------------- | --------- |
| `$button-ios-letter-spacing`       | `-0.03em`      | `0`       |
| `$button-ios-clear-letter-spacing` | `0`            | Removed   |
| `$button-ios-height`               | `2.8em`        | `3.1em`   |
| `$button-ios-border-radius`        | `10px`         | `14px`    |
| `$button-ios-large-height`         | `2.8em`        | `3.1em`   |
| `$button-ios-large-border-radius`  | `12px`         | `16px`    |
2023-02-28 11:36:44 -05:00
ionitron
c3b619f76f chore(): add updated snapshots 2023-02-22 15:40:01 +00:00
Liam DeBeasi
b4c24d250d chore(): update merge conflict in tests 2023-02-22 10:18:36 -05:00
Liam DeBeasi
799871e95d chore(): sync with main 2023-02-22 10:00:56 -05:00
Liam DeBeasi
1457ce7be4 refactor(many): clarify deprecation warning (#26834) 2023-02-21 13:58:22 -05:00
Liam DeBeasi
804e54e5ca test(many): migrate to new toHaveScreenshot API (#26797) 2023-02-16 11:37:29 -05:00
Sean Perkins
edf696cac9 fix(range): allow overflow on range bar container (#26751) 2023-02-13 17:06:42 -05:00
Liam DeBeasi
92b06f2eb6 fix(range): assign auto increment id by default (#26740)
BREAKING CHANGE:

The `name` property on `ion-range` defaults to `ion-r-${rangeIds++}` where `rangeIds` is a number that is incremented for every instance of the component.
2023-02-06 16:37:39 -05:00
Masahiko Sakakibara
5e5f1a34fb chore(range): range warning typo (#26738) 2023-02-05 21:42:09 -05:00
Liam DeBeasi
1a8bd6d8c6 chore(deps): update to stencil v3 (#26663) 2023-01-31 18:07:22 -05:00
Liam DeBeasi
63f8525284 fix(many): legacy form control does not warn when using aria-labelledby (#26699)
resolves #26698
2023-01-30 16:02:00 -05:00
Liam DeBeasi
b78b454e08 revert(): revert base components feature (#26692)
The Ionic Framework team would like to re-evaluate our approach to improving customization options when building mobile applications. We are looking at other solutions that a) make customizing an app UI easier and b) are applicable to a broader set of developers.
2023-01-30 11:52:36 -05:00
Liam DeBeasi
18f109c7da feat(base-components): add ability to remove ios and md theme (#26669) 2023-01-24 16:18:35 -05:00
Liam DeBeasi
e8fb9e7328 chore(): sync with main 2023-01-23 13:38:16 -05:00
Liam DeBeasi
e612253fc6 fix(many): component wrappers inherit height (#26611) 2023-01-17 13:51:46 -05:00
Amanda Johnston
c2e1ad385d chore(many): replace any types and add tech debt tickets (#26293)
Co-authored-by: Liam DeBeasi <liamdebeasi@users.noreply.github.com>
2023-01-06 09:34:55 -06:00
Liam DeBeasi
96147ec1b0 fix(item): ios mode has correct padding (#26511) 2023-01-04 16:54:43 -05:00
Liam DeBeasi
37a91676a4 refactor(item, range): remove item-specific logic (#26520) 2023-01-04 09:03:16 -05:00
ionitron
20829f54cd chore(): add updated snapshots 2022-12-20 16:03:24 +00:00
Liam DeBeasi
d54b9dfdc0 chore(): sync with main 2022-12-20 10:44:26 -05:00
Liam DeBeasi
bd05fccf58 test(config): update to playwright 1.29.0 (#26388) 2022-12-20 09:26:51 -05:00
Liam DeBeasi
49baad8ee6 feat(range): component can be used outside of ion-item (#26479) 2022-12-15 15:52:56 -05:00
Liam DeBeasi
88e7ee985d chore(): sync with main 2022-12-09 12:37:06 -05:00
Liam DeBeasi
493e783b31 test(many): fix more flaky tests (#26450) 2022-12-08 17:56:43 -05:00