-
Notifications
You must be signed in to change notification settings - Fork 6.8k
feat(material-experimental/mdc-chips): switch to evolution API #23931
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
7ca6bb2
to
518c5b3
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Got about halfway through so far
@mixin _base-chip($is-dark) { | ||
$on-surface-state-content: if($is-dark, mdc-color-palette.$grey-50, mdc-color-palette.$grey-900); | ||
$surface: | ||
color.mix(mdc-theme-color.prop-value(on-surface), mdc-theme-color.prop-value(surface), 12%); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we add a comment here to explain why we're doing the color mix?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think there's a good explanation tbh, we had the mixing there with the previous implementation so I moved it over to the new one.
// which overrides our own handling. If we detect such a case, assign it to the same property | ||
// as the Angular binding in order to maintain consistency. | ||
if (name === 'tabindex') { | ||
this._updateTabindex(parseInt(value)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we use Number(value)
here instead? IIRC Number
is more predictable (e.g. doesn't interpret a leading 0
as octal)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We've been using parseInt
for cases like this everywhere else so I went along with it. I also think that it's unlikely for somebody to write out tabindex="007"
.
// and error prone, and we need them in several places. | ||
const classList = _elementRef.nativeElement.classList; | ||
const actionType = this._foundation.actionType(); | ||
classList.add('mdc-evolution-chip__action', 'mat-mdc-chip-action'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't 100% follow- why not set these classes in the host
block?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There were two reasons when I was working on this initially:
- We still had to support ViewEngine which meant that I would've had to repeat the class bindings in two other places.
- I wouldn't have been able to use the enum values in the
host
block.
I think that both of these issues are resolved with Ivy though.
static ngAcceptInputType_disabled: BooleanInput; | ||
static ngAcceptInputType_tabIndex: NumberInput; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can drop these now, right?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There were some internal issues with #23606 so I decided to keep them here.
// MDC sets the tabindex directly on the DOM node when the user is navigating which means | ||
// that we may end up with a `0` value from a previous interaction. We reset it manually | ||
// here to ensure that the state is correct. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we file an issue for this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is working as expected, as far as MDC is concerned. I don't think that it makes sense for people to customize the tabindex
here to begin with, but we need it for backwards compatibility.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've addressed the feedback so far.
@mixin _base-chip($is-dark) { | ||
$on-surface-state-content: if($is-dark, mdc-color-palette.$grey-50, mdc-color-palette.$grey-900); | ||
$surface: | ||
color.mix(mdc-theme-color.prop-value(on-surface), mdc-theme-color.prop-value(surface), 12%); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think there's a good explanation tbh, we had the mixing there with the previous implementation so I moved it over to the new one.
// which overrides our own handling. If we detect such a case, assign it to the same property | ||
// as the Angular binding in order to maintain consistency. | ||
if (name === 'tabindex') { | ||
this._updateTabindex(parseInt(value)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We've been using parseInt
for cases like this everywhere else so I went along with it. I also think that it's unlikely for somebody to write out tabindex="007"
.
// and error prone, and we need them in several places. | ||
const classList = _elementRef.nativeElement.classList; | ||
const actionType = this._foundation.actionType(); | ||
classList.add('mdc-evolution-chip__action', 'mat-mdc-chip-action'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There were two reasons when I was working on this initially:
- We still had to support ViewEngine which meant that I would've had to repeat the class bindings in two other places.
- I wouldn't have been able to use the enum values in the
host
block.
I think that both of these issues are resolved with Ivy though.
static ngAcceptInputType_disabled: BooleanInput; | ||
static ngAcceptInputType_tabIndex: NumberInput; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There were some internal issues with #23606 so I decided to keep them here.
// MDC sets the tabindex directly on the DOM node when the user is navigating which means | ||
// that we may end up with a `0` value from a previous interaction. We reset it manually | ||
// here to ensure that the state is correct. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is working as expected, as far as MDC is concerned. I don't think that it makes sense for people to customize the tabindex
here to begin with, but we need it for backwards compatibility.
518c5b3
to
cf23b4c
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm
252953d
to
809462b
Compare
82dba32
to
0f5247d
Compare
5795315
to
8109c1a
Compare
62433de
to
9f25785
Compare
Heads-up: I've pushed a second commit that simplifies the theming setup for the chips. The previous approach that was using the |
1020a33
to
496e5dd
Compare
496e5dd
to
d76f71d
Compare
Reworks the MDC-based chips to use the new `evolution` API instead of the deprecated one we're currently using. The new API comes with a lot of markup changes and some behavior differences. The new API also allows to remove the `GridKeyManager`, because the keyboard navigation is handled correctly by MDC.
…dle size Reworks the theme of the MDC-based chips to produce less specific and more compact CSS.
d76f71d
to
7013946
Compare
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [@angular/cdk](https://github.com/angular/components) | dependencies | minor | [`13.1.2` -> `13.2.1`](https://renovatebot.com/diffs/npm/@angular%2fcdk/13.1.2/13.2.1) | | [@angular/material](https://github.com/angular/components) | dependencies | minor | [`13.1.2` -> `13.2.1`](https://renovatebot.com/diffs/npm/@angular%2fmaterial/13.1.2/13.2.1) | --- ### Release Notes <details> <summary>angular/components</summary> ### [`v13.2.1`](https://github.com/angular/components/blob/HEAD/CHANGELOG.md#​1321-vinyl-viola-2022-02-02) [Compare Source](angular/components@13.2.0...13.2.1) ##### cdk | Commit | Type | Description | | -- | -- | -- | | [70d1634e70](angular/components@70d1634) | fix | **a11y:** allow for multiple browser-generated description containers ([#​23507](angular/components#23507)) | ##### material | Commit | Type | Description | | -- | -- | -- | | [d8ddfb04ca](angular/components@d8ddfb0) | fix | **datepicker:** content overflowing when large custom header is provided ([#​24255](angular/components#24255)) | | [d7fe423a3e](angular/components@d7fe423) | fix | **menu:** adjust overlay size when amount of items changes ([#​21457](angular/components#21457)) | | [974d330dc8](angular/components@974d330) | fix | **slider:** Ticks updated wrongly if the max property 0 ([#​24218](angular/components#24218)) | | [a634505190](angular/components@a634505) | fix | **tabs:** use buttons for paginator ([#​14640](angular/components#14640)) | ##### cdk-experimental | Commit | Type | Description | | -- | -- | -- | | [7aff50a6d8](angular/components@7aff50a) | fix | **menu:** keep context menus open when mouse is released ([#​24308](angular/components#24308)) | ##### material-experimental | Commit | Type | Description | | -- | -- | -- | | [c02c43a2b9](angular/components@c02c43a) | fix | **mdc-button:** align outline color with spec ([#​24249](angular/components#24249)) | | [5d7d6ea107](angular/components@5d7d6ea) | perf | **mdc-list:** reduce bundle size ([#​24291](angular/components#24291)) | ##### multiple | Commit | Type | Description | | -- | -- | -- | | [b32d8d1624](angular/components@b32d8d1) | perf | Remove IE 11 cruft from table, column-resize, and popover-edit. ([#​23900](angular/components#23900)) | #### Special Thanks Dmytro Mezhenskyi, Joey Perrott, Karl Seamon, Kristiyan Kostadinov, Miles Malerba, Paul Gschwendtner, Zach Arend and ram <!-- CHANGELOG SPLIT MARKER --> ### [`v13.2.0`](https://github.com/angular/components/blob/HEAD/CHANGELOG.md#​1320-terracotta-tiramisu-2022-01-26) [Compare Source](angular/components@13.1.3...13.2.0) ##### material | Commit | Type | Description | | -- | -- | -- | | [b9a3908fcf](angular/components@b9a3908) | feat | **tabs:** add API to update the pagination ([#​23288](angular/components#23288)) | | [f10d245cca](angular/components@f10d245) | feat | **tabs:** label & body classes ([#​23691](angular/components#23691)) | | [ea78a473a1](angular/components@ea78a47) | feat | **tabs:** Refactor MatTabNav to follow the ARIA tabs pattern ([#​24062](angular/components#24062)) | | [337634f899](angular/components@337634f) | fix | **chips:** don't stop propagation on all click events ([#​19763](angular/components#19763)) | | [2b6739742b](angular/components@2b67397) | fix | **datepicker:** change calendar cells to buttons ([#​24171](angular/components#24171)) | | [c55524a8eb](angular/components@c55524a) | fix | **list:** add isDisabled to all list item harnesses ([#​24212](angular/components#24212)) | | [fa7cd154d0](angular/components@fa7cd15) | fix | **list:** fix duplicate focus with chromevox on action-list items ([#​23361](angular/components#23361)) | | [0477022d2c](angular/components@0477022) | fix | **slide-toggle:** remove divs nested inside label ([#​21224](angular/components#21224)) | ##### google-maps | Commit | Type | Description | | -- | -- | -- | | [e6359cdc67](angular/components@e6359cd) | feat | allow for info window focus behavior to be customized ([#​23831](angular/components#23831)) | ##### material-experimental | Commit | Type | Description | | -- | -- | -- | | [c5482c945f](angular/components@c5482c9) | feat | **mdc-chips:** switch to evolution API ([#​23931](angular/components#23931)) | | [723b77ad1f](angular/components@723b77a) | feat | **mdc-core:** add missing color, density, typography mixins ([#​24063](angular/components#24063)) | | [407682012d](angular/components@4076820) | feat | **mdc-form-field:** Add option for dynamic su… ([#​24241](angular/components#24241)) | | [871a500fb8](angular/components@871a500) | feat | **mdc-list:** rework API to support secondary text with wrapping | | [b0f38b7a64](angular/components@b0f38b7) | fix | **mdc-button:** remove unwanted native button styles ([#​24186](angular/components#24186)) | | [c9ab38bcae](angular/components@c9ab38b) | fix | **mdc-chips:** fix changed after checked error when restoring focus to input ([#​24243](angular/components#24243)) | | [68a29ff1dd](angular/components@68a29ff) | fix | **mdc-core:** make mat-option typography easier to override ([#​24247](angular/components#24247)) | | [b79406fee8](angular/components@b79406f) | fix | **mdc-form-field:** Properly handle when defaults setting is 'dynamic' and the subscriptSizing input is not present. ([#​24263](angular/components#24263)) | | [38affc3d43](angular/components@38affc3) | fix | **mdc-list:** ensure selection change event fires properly ([#​24174](angular/components#24174)) | | [c199aa2544](angular/components@c199aa2) | fix | **mdc-list:** incorrect active/hover color for selected items | | [1ce3e5e905](angular/components@1ce3e5e) | perf | **mdc-checkbox:** reduce bundle size ([#​24256](angular/components#24256)) | | [152c60ba12](angular/components@152c60b) | perf | **mdc-radio:** reduce bundle size ([#​24267](angular/components#24267)) | | [02c8f2aa02](angular/components@02c8f2a) | perf | **mdc-tabs:** reduce bundle size ([#​24262](angular/components#24262)) | ##### expansion-panel | Commit | Type | Description | | -- | -- | -- | | [4ec34b5400](angular/components@4ec34b5) | fix | title text not centered with taller description ([#​12161](angular/components#12161)) | #### Special Thanks Amy Sorto, Andrew Seguin, Karl Seamon, Kristiyan Kostadinov, Miles Malerba, Paul Gschwendtner, Ruslan Lekhman, Wagner Maciel, Zach Arend, Zack Elliott, coopermeitz and renovate\[bot] <!-- CHANGELOG SPLIT MARKER --> ### [`v13.1.3`](https://github.com/angular/components/blob/HEAD/CHANGELOG.md#​1313-plastic-koala-2022-01-19) [Compare Source](angular/components@13.1.2...13.1.3) ##### cdk | Commit | Type | Description | | -- | -- | -- | | [109d5a150f](angular/components@109d5a1) | fix | **a11y:** not detecting fake mousedown on firefox ([#​23493](angular/components#23493)) | | [c48742eb4e](angular/components@c48742e) | fix | **table:** revert breaking change of CdkTable constructor ([#​24202](angular/components#24202)) | ##### material | Commit | Type | Description | | -- | -- | -- | | [70e0170b95](angular/components@70e0170) | fix | **autocomplete:** don't handle enter events with modifier keys ([#​14717](angular/components#14717)) | | [eae436fdab](angular/components@eae436f) | fix | **autocomplete:** optionSelections not emitting when the list of options changes ([#​14813](angular/components#14813)) | | [402c07b3c7](angular/components@402c07b) | fix | **autocomplete** restore focus after emitting option selected event ([#​18707](angular/components#18707)) | | [761f9f25a8](angular/components@761f9f2) | fix | **card:** handle picture element as mat-card-image ([#​23678](angular/components#23678)) | | [3565cfac59](angular/components@3565cfa) | fix | **core:** make MatOption generic ([#​20242](angular/components#20242)) | | [f0272cf5eb](angular/components@f0272cf) | fix | **core:** throw error if hue does not exist ([#​23612](angular/components#23612)) | | [304afaef1d](angular/components@304afae) | fix | **datepicker:** add focus indication to calendar selected date in high contrast mode ([#​22889](angular/components#22889)) | | [805eee8d07](angular/components@805eee8) | fix | **form-field:** outline gap not recalculated when switching to empty label ([#​23949](angular/components#23949)) | | [feac08f138](angular/components@feac08f) | fix | **input:** inconsistently reading name from input with ngModel ([#​19233](angular/components#19233)) | | [439ad2c59d](angular/components@439ad2c) | fix | **list:** fix up disabled list item styles ([#​18881](angular/components#18881)) | | [4182717c57](angular/components@4182717) | fix | **menu:** not interrupting keyboard events to other overlays ([#​23310](angular/components#23310)) | | [a4f655856e](angular/components@a4f6558) | fix | **paginator:** allow readonly options ([#​24054](angular/components#24054)) | | [966b2c52b7](angular/components@966b2c5) | fix | **progress-bar:** unable to change value through property setter ([#​19025](angular/components#19025)) | | [462cb6d713](angular/components@462cb6d) | fix | **progress-spinner:** animation not working on some zoom levels in Safari ([#​23674](angular/components#23674)) | | [94d466235a](angular/components@94d4662) | fix | **select** component value not in sync with control value on init ([#​18443](angular/components#18443)) | | [ce9d8caa1f](angular/components@ce9d8ca) | fix | **sidenav:** end position sidenav tab order not matching visual order ([#​18101](angular/components#18101)) | | [cb0a2ad940](angular/components@cb0a2ad) | fix | **sidenav** implicit content element being registered twice with scroll dispatcher ([#​13973](angular/components#13973)) | | [7be61b6357](angular/components@7be61b6) | fix | **slider:** avoid error on some touchstart events ([#​23823](angular/components#23823)) | | [81528bc6a1](angular/components@81528bc) | fix | **slider:** first keypress ignored if out-of-bounds value is assigned ([#​23827](angular/components#23827)) | | [64dd8ed8b5](angular/components@64dd8ed) | fix | **slider:** incorrectly inheriting color when nested inside component with theme ([#​21334](angular/components#21334)) | | [99e77829cc](angular/components@99e7782) | fix | **snack-bar:** handle long single-line content ([#​24135](angular/components#24135)) | | [ad21ee20ae](angular/components@ad21ee2) | fix | **table** not clearing some internal references on destroy ([#​16051](angular/components#16051)) | | [9752b1d18f](angular/components@9752b1d) | fix | **table:** better handling of invalid data ([#​18953](angular/components#18953)) | | [e01e579a49](angular/components@e01e579) | fix | **tooltip:** not closing if escape is pressed while trigger isn't focused ([#​14434](angular/components#14434)) | | [4972dc5585](angular/components@4972dc5) | perf | **button:** do not run change detection when the anchor is clicked ([#​23992](angular/components#23992)) | ##### material-experimental | Commit | Type | Description | | -- | -- | -- | | [fe39b55f93](angular/components@fe39b55) | fix | **mdc-checkbox:** emitting fallback values for density CSS variables ([#​24184](angular/components#24184)) | | [0ab3dce58a](angular/components@0ab3dce) | fix | **mdc-snack-bar:** avoid hard reference to base components and align API ([#​21425](angular/components#21425)) | #### Special Thanks Andrew Seguin, Artur Androsovych, Jeri Peier, Joey Perrott, Kristiyan Kostadinov, Paul Gschwendtner and Ruslan Lekhman <!-- CHANGELOG SPLIT MARKER --> </details> --- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). Co-authored-by: cabr2-bot <[email protected]> Reviewed-on: https://codeberg.org/Calciumdibromid/CaBr2/pulls/1149 Reviewed-by: crapStone <[email protected]> Co-authored-by: Calciumdibromid Bot <[email protected]> Co-committed-by: Calciumdibromid Bot <[email protected]>
This issue has been automatically locked due to inactivity. Read more about our automatic conversation locking policy. This action has been performed automatically by a bot. |
Reworks the MDC-based chips to use the new
evolution
API instead of the deprecated one we're currently using. The new API comes with a lot of markup changes and some behavior differences.The new API also allows to remove the
GridKeyManager
, because the keyboard navigation is handled correctly by MDC.