angular / angular/components

feat(mat.*-overrides): Improve the styles overrides functions to not generate so much duplicity selectors in the css.

Abierto
#30,248 1 comentario 0 reacciones 0 asignados Ver en GitHub
area: theming feature P4
Lenguaje dominante
TypeScript
Estrellas
25k
Forks
6.8k
Merge medio
1 d 8 h
PR fusionados (30 d)
91

Descripción

### Feature Description

# Explain the issue
Following your documentation, when we override the style we can do the next:
``` scss
.SELECTOR {
@include mat.*-overrides((
TOKEN_1,
TOKEN_2,
TOKEN_3,
...
TOKEN_n,
));
}
```

But this is translated into css in N duplicate definitios of SELECTOR:
``` scss
.SELECTOR {
TOKEN_1_RESULT;
}
.SELECTOR {
TOKEN_2_RESULT;
}
.SELECTOR {
TOKEN_3_RESULT;
}
...
.SELECTOR {
TOKEN_n_RESULT;
}
```

And they should be filled togeteher in only one SELECTOR:
``` scss
.SELECTOR {
TOKEN_1_RESULT;
TOKEN_2_RESULT;
TOKEN_3_RESULT;
TOKEN_n_RESULT;
}
```

## Example with button
For example to override the button style we can do the next:
``` scss
@use '@angular/material' as mat;

:root {
@include mat.button-overrides((
filled-container-color: orange,
filled-label-text-color: red,
));
}
```

But this is translated into css in two duplicate definitios of :root
``` scss
:root {
--mdc-filled-button-container-color: orange;
}
:root {
--mdc-filled-button-label-text-color: red;
}
```

And they should be filled togeteher:
``` scss
:root {
--mdc-filled-button-container-color: orange;
--mdc-filled-button-label-text-color: red;
}
```
# Explanation of why this should be improved
If we edit a lot of things it generate a lot of unnecessary verbiage that is unefficiency and cause greatly hinders debugging during develmpment.

For example, if we edit 100 Selectors and modify 20 tokens in each one, we have at the end 20 duplicate definitions per each selector that is a total of 2000 selector definitions with one line each instead of 100 selector definitions with 20 lines each.

Logically this makes the final css inefficient as it has many selectors to check, in this case 2000 instead of 100.

# Thanks
Thank you very much for your great work. I hope you correct this, and if there is already a way to avoid these duplicities please let me know and you should add it to the official documentation.

### Use Case

_No response_

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Comienza con los mixins mat.*-overrides documentados, especialmente con el ejemplo de button-overrides, e inspecciona cómo se emiten varias sobrescrituras de tokens. Se considera terminado cuando el ejemplo produce una sola regla :root que contiene ambas propiedades personalizadas en lugar de selectores duplicados; compara el CSS generado antes y después.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
sass
Área
frontend
Tipo de issue
Nueva funcionalidad
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.