angular / angular/components

feat(all theming): Clean and reusable way to override all components theme colors

Ouverte
#30,244 0 commentaires 3 réactions 0 personnes assignées Voir sur GitHub
area: material/core feature P3
Langage dominant
TypeScript
Étoiles
25k
Forks
6.8k
Merge moyen
1 j 8 h
PR mergées (30 j)
91

Description

### Feature Description

Currently, there is a way to generate a custom color palette using the generation tool. However, all components appear too dark regardless of the target color, and there is no single-line solution to specify a base color tone for all components since `--mat-sys-primary` is hardcoded to the tone value `40` by the theme mixin.

Unfortunately, with Material v19, picking colors from the theme no longer works. You can still specify a material theme using `$app-theme: mat.define-theme(...)` with some restrictions, but applying it using the new mixin `@include mat.theme($app-theme)` doesn't work.

**So please provide clean and simple solution to:**

**1. Specify and reuse a theme object**
For example:
```scss
// Define theme object
$app_theme: mat.define-theme((
color: (primary: $primary-palette),
...
)); // Like it was in Material 18

// then use this theme object to apply theme or get theme color:
@include mat.theme($app-theme);
$theme-color: mat.get-theme-color($app-theme, primary, 70);

```
**2. Specify a base color tone for all components at once**
For example:
```scss
@include mat.theme((
color: (
theme-type: light,
primary: themes.$app-theme-palette, // Generated color palette
primary-color-tone: 70 // Here we specify which tone level to pick from color palette for --mat-sys-primary color
...
)
));
```
**_or as an alternative_** output all theme-palette tones as css variables, so we can easily reuse them to customize theme and component colors:
```scss
@include mat.theme-overrides((
primary: var(--mat-sys-primary-70),
on-primary: var(--mat-sys-primary-100)
));

@include mat.autocomplete-overrides((
background-color: var(--mat-sys-primary-80); // or any other custom color
));

```

**3. Specify a base color for a specific component (single-line override)**
For example:
```scss
@include mat.autocomplete-overrides((
base-color: mat.get-theme-color($theme, primary, 30); // or any other custom color
));
```

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez par examiner les points d’entrée mentionnés mat.define-theme, mat.theme, mat.get-theme-color, mat.theme-overrides et mat.autocomplete-overrides, ainsi que la manière dont ils gèrent les couleurs du thème. L’issue ne nomme aucun fichier ni test ; l’implémentation finale devrait fournir un objet de thème réutilisable, des tons de base configurables et des overrides de couleur de composant sur une seule ligne, sans les restrictions décrites.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
angular, scss
Domaine
frontend
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.