Commit Graph

110 Commits

Author SHA1 Message Date
Maria Hutt
73b8bfde3f fix(radio-group): emit value change on componentDidLoad (#28488)
Issue number: resolves #28356 

---------

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

`ion-radio-group` would not set the radio value when using it as a
Angular standalone component and data binding:

```html
<ion-radio-group [value]="fromValue">
  <ion-radio value="dogs">Dogs</ion-radio><br />
  <ion-radio value="cats">Cats</ion-radio><br />
  <ion-radio value="turtles">Turtles</ion-radio><br />
  <ion-radio value="fish">Fish</ion-radio><br />
</ion-radio-group>
```

This is happening because the value is set before the [value
watcher](c5dd622bbe/core/src/components/radio-group/radio-group.tsx (L34))
has been configured. The event, `ionValueChange`, does not get
[dispatched](c5dd622bbe/core/src/components/radio-group/radio-group.tsx (L37)).

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

Run `valueChanged()` in `componentDidLoad()`.
- `valueChanged()` function is tied to the [value
watcher](c5dd622bbe/core/src/components/radio-group/radio-group.tsx (L34))
so it will
[dispatch](c5dd622bbe/core/src/components/radio-group/radio-group.tsx (L37))
the `ionValueChange`.

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

In our testing, we observed that the issue described below only occurs
when assigning a value to the radio group within the primary content,
such as rendering within the app component template.

When the template is isolated to a route, the value is assigned
correctly. To address this issue, we need to ensure that the watcher is
called after the component has finished loading, allowing the emit to be
dispatched correctly.

Dev build: 7.5.4-dev.11699404450.136700d7
2023-11-10 22:12:08 +00:00
Liam DeBeasi
c70432e693 fix(checkbox, radio, toggle): disabled elements are not interactive (#28294)
Issue number: resolves #28293

---------

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

Disabled toggles, radios, and checkboxes can still be enabled by
manually dispatching a click event on them.


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

- Toggles, radios, and checkboxes no longer activate if `disabled` is
set to `true`

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

Dev build: `7.4.4-dev.11696545130.1171e7a9`
2023-10-09 21:05:09 +00:00
Liam DeBeasi
ba2f49b8a4 fix(radio): radios can be focused and are announced with group (#27817)
Issue number: resolves #27438

---------

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

There are a few issues with the modern radio syntax:

1. The native radio is inside the Shadow DOM. As a result, radios are
not announced with their parent group with screen readers (i.e. "1 of
3")
2. The native radio cannot be focused inside of `ion-select-popover` on
Firefox.
3. The `ionFocus` and `ionBlur` events do not fire.

I also discovered an issue with item:

1. Items inside of a Radio Group have a role of `listitem` which prevent
radios from being grouped correctly in some browsers. According to
https://bugzilla.mozilla.org/show_bug.cgi?id=1840916, browsers are
behaving correctly here. The `listitem` role should not be present when
an item is used in a radio group (even if the radio group itself is
inside a list).

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

Most of the changes are test-related, but I broke it down per commit to
make this easier to review:


ae77002afd

- Item no longer has `role="listitem"` when used inside of a radio
group.
- Added spec tests to verify the role behavior


0a9b7fb91d

- I discovered that some the legacy basic test were accidentally using
the modern syntax. I corrected this by adding `legacy="true"` to the
radios.


a8a90e53b2,
412d1d54e7,
and
1d1179b69a

- The current radio group tests only tested the legacy radio syntax, and
not the modern syntax.
- I created a `legacy` directory to house the legacy syntax tests.
- I created new tests in the root test directory for the modern syntax.
- I also deleted the screenshots for the modern tests here because the
tests for `ion-radio` already take screenshots of the radio (even in an
item).


e2c966e68b
- Moved radio roles to the host. This allows Firefox to focus radios and
for screen readers to announce the radios as part of a group.
- I also added focus/blur listeners so ionFocus and ionBlur fire


f10eff47a5

- I cleaned up the tests here to use a common radio fixture

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

I tested this with the following setups.  indicates the screen reader
announces the group count (i.e. "1 of 4").  indicates the screen reader
does not announce the group count.

**Radio in Radio Group:**
- iOS + VoiceOver: 
- Android + TalkBack: 
- macOS + VoiceOver + Safari: 
- macOS + VoiceOver + Firefox: 
- macOS + VoiceOver + Chrome: 
- Windows + NVDA + Chrome: 
- Windows + NVDA + Firefox: 

**Radio in Item in Radio Group :**
- iOS + VoiceOver: 
- Android + TalkBack: 
(https://bugs.chromium.org/p/chromium/issues/detail?id=1459006)
- macOS + VoiceOver + Safari: 
- macOS + VoiceOver + Firefox: 
- macOS + VoiceOver + Chrome: 
(https://bugs.chromium.org/p/chromium/issues/detail?id=1459003)
- Windows + NVDA + Chrome: 
- Windows + NVDA + Firefox: 
2023-07-31 14:07:44 +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
Liam DeBeasi
159bffbb5f chore(): sync with main 2023-05-11 14:57:44 -04:00
Brandy Carney
eabc6f3576 fix(checkbox, radio): update border colors to match MD2 spec (#27357)
Issue number: resolves #27170

---------

Updates the Material Design border colors for checkbox and radio to
`rgb($text-color-rgb, 0.60)` or `#666666`. This is based on the
[Material Design 2
kit](https://www.figma.com/community/file/778763161265841481/Material-2-Design-Kit).

The border color when disabled is also wrong, but changing this affects
the label so I have reverted this to do as part of FW-4037.

## Does this introduce a breaking change?

- [ ] Yes
- [x] No

---------

Co-authored-by: ionitron <hi@ionicframework.com>
Co-authored-by: Liam DeBeasi <liamdebeasi@users.noreply.github.com>
2023-05-11 16:20:00 +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
35256d70ec test(radio, radio-group): migrate to generators (#27365)
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. -->

Radio and radio group tests are using legacy syntax

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

- Radio and radio group tests are using generator syntax 


c0256f3ce1

- The radio group basic interaction tests do not vary across modes, so I
removed those extra checks.


579bcacab2

- The basic radio directory had some old screenshots that were not being
used, so I removed them.


997d652864

- The legacy radio keyboard behavior does not vary across modes, so I
removed that extra check

## 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-03 15:53:35 +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
Maria Hutt
0a0345a84a refactor(many): use utils import (#27160) 2023-04-12 13:25:14 -07:00
Maria Hutt
d925237082 fix(item-divider): removal of unneeded margin unset (#27042)
## Pull request checklist

Please check if your PR fulfills the following requirements:
- [ ] Tests for the changes have been added (for bug fixes / features)
- [ ] Docs have been reviewed and added / updated if needed (for bug
fixes / features)
- Some docs updates need to be made in the `ionic-docs` repo, in a
separate PR. See the [contributing
guide](https://github.com/ionic-team/ionic-framework/blob/main/.github/CONTRIBUTING.md#modifying-documentation)
for details.
- [x] Build (`npm run build`) was run locally and any changes were
pushed
- [x] Lint (`npm run lint`) has passed locally and any fixes were made
for failures


## Pull request type

Please check the type of change your PR introduces:
- [x] Bugfix
- [ ] Feature
- [ ] Code style update (formatting, renaming)
- [ ] Refactoring (no functional changes, no api changes)
- [ ] Build related changes
- [ ] Documentation content changes
- [ ] Other (please describe): 


## What is the current behavior?

End slots are lacking margin of 2px when in RTL.

Issue URL: Part of #17012  


## What is the new behavior?

- Simplifying `property-horizontal` by removing any margin unset

End slots with buttons will have a margin-end of 2px regardless of
direction.

### Screenshots

![Screen Shot 2023-03-24 at 13 48
25](https://user-images.githubusercontent.com/13530427/227642440-acf0f2c2-37c7-43da-bad4-67ef1b31b3ac.png)
![Screen Shot 2023-03-24 at 13 48
17](https://user-images.githubusercontent.com/13530427/227642445-79cf2986-c0b5-45d1-ba38-1beda698c2d5.png)


## Does this introduce a breaking change?

- [ ] Yes
- [x] No



## Other information

- Continuation of ionic-team/ionic-framework#27024 in order to apply it
to Framework v7

---------

Co-authored-by: Liam DeBeasi <liamdebeasi@users.noreply.github.com>
Co-authored-by: ionitron <hi@ionicframework.com>
2023-04-04 21:11:51 +00:00
Liam DeBeasi
f750c8756f chore(): sync with main 2023-03-29 09:17:21 -04:00
Maria Hutt
1ea0893643 refactor(radio-group): switch ev.code to ev.key (#27021)
Co-authored-by: Sean Perkins <sean@ionic.io>
2023-03-24 12:43:04 -07:00
Liam DeBeasi
eb10a2e5f6 chore(): sync with main 2023-03-24 14:37:39 -04:00
Liam DeBeasi
3b99c31bab fix(radio-group): radios participate in form submission (#27018)
resolves #27016
2023-03-24 12:43:30 -04:00
ionitron
c3b619f76f chore(): add updated snapshots 2023-02-22 15:40:01 +00:00
Liam DeBeasi
799871e95d chore(): sync with main 2023-02-22 10:00:56 -05:00
Liam DeBeasi
804e54e5ca test(many): migrate to new toHaveScreenshot API (#26797) 2023-02-16 11:37:29 -05:00
Liam DeBeasi
1a8bd6d8c6 chore(deps): update to stencil v3 (#26663) 2023-01-31 18:07:22 -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
c01600191e chore(): sync with main 2023-01-18 09:36:43 -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
Alice
c238ede622 chore(jsdoc): move comment on RadioGroup (#26558)
* chore(jsdoc): change JSDoc on RadioGroup to double slash (//) comment

This converts a multiline comment (like `/**...*/`) above the
`RadioGroup` component class to be a series of `//` comments instead.
This is done to prevent the comment from being accidentally recognized
as a JSDoc comment for the class when a Stencil version incorporating
this change is installed:
2e4b1fcdc0

* move down to the relevant line, keep as multi-line comment
2023-01-04 12:28:30 -05: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
c994a20710 chore(eslint): add async playwright assert rule (#26491) 2022-12-15 14:39:11 -05:00
Liam DeBeasi
8766f37bd4 test(radio-group): await toHaveClass assertion (#26490) 2022-12-15 10:00:03 -05:00
Liam DeBeasi
88e7ee985d chore(): sync with main 2022-12-09 12:37:06 -05:00
Liam DeBeasi
3481c44b2f test(many): add await to async asserts (#26456) 2022-12-09 10:36:19 -05:00
Sean Perkins
eea91bbbe1 fix(item): align iOS font size to spec (#26445) 2022-12-08 16:24:02 -05:00
Sean Perkins
c299d3666a feat(radio-group): ionChange will only emit from user committed changes (#26223) 2022-11-07 18:03:08 -05:00
Liam DeBeasi
f1cdf18316 chore(): sync with main: 2022-10-11 11:38:27 -04:00
Sean Perkins
70d8358a09 chore(radio-group): document radio-group purpose (#26079) 2022-10-07 11:26:45 -04:00
Amanda Johnston
b052d3b262 feat(searchbar): ionChange will only emit from user committed changes (#26026) 2022-10-03 15:08:43 -05:00
Liam DeBeasi
79c65dc382 test(playwright): add new utilities for skipping tests (#25758) 2022-08-16 09:18:42 -04:00
Sean Perkins
7b565c57b5 test(radio-group): migrate tests to playwright (#25713) 2022-08-04 15:55:37 -04:00
Liam DeBeasi
d085d7bc26 test(radio): migrate e2e tests to playwright (#25643) 2022-07-19 16:02:33 -04:00
Sean Perkins
15c169043f chore(docs): remove manual documentation (#24984) 2022-04-21 12:31:51 -04:00
Liam DeBeasi
5676bab316 lint(eslint): migrate to eslint and prettier (#25046) 2022-04-04 11:12:53 -04:00
Sean Perkins
2af24494f5 chore(playwright): enable type checking (#25034) 2022-03-31 15:42:09 -04:00
Liam DeBeasi
0aa6d124d6 test(e2e): add infrastructure for migration to playwright (#25033) 2022-03-31 11:23:21 -04:00
Liam DeBeasi
8708095111 feat(all): add CustomEvents types to components that emit events (#23956)
resolves #22925

BREAKING CHANGE: The `RadioChangeEventDetail` interface has been removed in favor of `RadioGroupChangeEventDetail`.
2021-09-24 16:28:49 -04:00
Evgeniy
8a941fd24c fix(checkbox, radio): change event interfaces correctly use TypeScript generics for value (#23044)
Co-authored-by: Liam DeBeasi <liamdebeasi@icloud.com>
2021-08-03 16:29:53 -04:00
Liam DeBeasi
d527414e10 chore(radio-group): clean up code to reuse helper function (#23396)
Co-authored-by: Daniel Simão <danielsimao@users.noreply.github.com>
2021-06-01 10:44:45 -04:00
Liam DeBeasi
6cc6f4c44b chore(): revert incorrect co-author credit (#23395)
This reverts commit 62ed9712e1.
2021-06-01 09:54:04 -04:00
Liam DeBeasi
62ed9712e1 chore(radio-group): use existing helper function for getting all radios (#23394)
Co-authored-by: Daniel Simão < danielsimao @users.noreply.github.com>
2021-06-01 09:22:12 -04:00