feat(all theming): Clean and reusable way to override all components theme colors
- 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