Estou tentando fazer um loop de mapas aninhados no sass para criar certas variáveis css para uma lista de temas.
Eu tenho um mapa de temas como este:
$themes: (
theme-1: (
primary: (
"el-background": #000,
"el-background-hover": #0d0d0d,
"el-color": #2c2f33,
"el-link-color": #fff,
),
secondary_1: (
"el-background": #000,
"el-background-hover": #ccc,
"el-color": #f2f2f2,
"el-link-color": #fff,
)
),
theme-2: (
primary: (
"el-background": #f90,
"el-background-hover": #ccc,
"el-color": #000,
"el-link-color": #fff,
),
secondary_1: (
"el-background": #f2f2f2,
"el-background-hover": #000,
"el-color": #f2f2f2,
"el-link-color": #fff,
)
)
);
Estou esperando um resultado como este em css:
.theme-1 {
.primary {
--el-background: ...;
--el-background-hover: ...;
--el-color: ...;
--el-link-color: ...;
}
.secondary_1 {
--el-background: ...;
--el-background-hover: ...;
--el-color: ...;
--el-link-color: ...;
}
}
.theme-2 {
.primary {
--el-background: ...;
--el-background-hover: ...;
--el-color: ...;
--el-link-color: ...;
}
.secondary_1 {
--el-background: ...;
--el-background-hover: ...;
--el-color: ...;
--el-link-color: ...;
}
}
Como faço para ajustar esse loop para conseguir isso? Acho que preciso embrulhá-lo em outro, @each
mas não sei como.
@mixin theme() {
@each $theme, $map in $themes {
.#{$theme} {
@each $key,
$value in $map {
--#{$key}: #{$value};
}
}
}
}
Você só precisa adicionar outro loop para revisar os valores em 'primário' e 'secundário_1'. Algo assim:
Solução no playground SCSS