angular / angular/components

bug(style): Custom palette's text hue not propagated to MDC styles

未关闭
#29,076 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
area: material/form-field P4
主要语言
TypeScript
星标
25k
派生
6.8k
平均合并
1 天 8 小时
30 天内合并 PR
91

描述

### Is this a regression?

- [X] Yes, this behavior used to work in the previous version

### The previous version in which this bug was not present was

14.x

### Description

[Re-opening #26021 which was incorrectly closed as a duplicate of a similar but different issue]

[This is a regression insofar as the legacy non-MDC implementations do not have this problem]

Hi, after running the MDC schematic on one of my projects I have found that the MDC-based components do not use the `$text` hue specified in the theme config, which can cause accessibility issues for themes whose default hues do not provide sufficient contrast against a neutral background. In particular I have noticed this causes legibility issues for the floating placeholder on form fields and the label text on default-appearance buttons, but it might apply to other components as well.

My theme is configured as follows:

`$my-palette: mat.define-palette($greens, 600, 200, 900, 700);`
Note that the $text hue is overridden to `700` in the call to `define-palette`.

Here is a screenshot showing the 700 hue being correctly applied to the aforementioned text elements under the legacy components:

![image](https://github.com/angular/components/assets/4996462/2739e6f4-784d-41a3-81b6-4f4ee4741aa7)

And here is how the new MDC components look:

![image](https://github.com/angular/components/assets/4996462/a57571a7-f795-4c5a-8ba5-ba4d551d5b22)

I had a hard time reading the Angular Material => MDC SCSS theming code but it seems like the $text hue preference isn't being passed to the MDC mixins in any way.

### Reproduction

StackBlitz link:
Steps to reproduce:
1. https://stackblitz.com/edit/components-issue-9ugktp?file=src%2Fstyles.scss
2. Note that text hue is set to 900 but text button and form field label use 500

### Expected Behavior

MDC components should use specified text hue where applicable

### Actual Behavior

MDC components used primary hue regardless

### Environment

Environment
Angular: 15.0.0-18.0.1
CDK/Material: 15.0.0-18.0.1
Browser(s): Chrome
Operating System (e.g. Windows, macOS, Ubuntu): Windows 10

贡献指南

打开贡献指南

调研方向

从链接的 StackBlitz 中的 src/styles.scss 开始,跟踪 mat.define-palette 和 MDC mixins 周围的 Angular Material MDC SCSS 主题代码。比较配置的 $text 色调对应的 legacy 和 MDC 输出,然后验证适用的 MDC 文本元素(包括表单字段标签和默认按钮)在复现中使用了指定的色调。

由索引模型根据 Issue 内容生成。

评估

技术栈
angular, scss, typescript
领域
accessibility, frontend
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。