energy-foundations 2.5.0-beta.0 → 2.5.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/foundations/_grid.scss +9 -66
- package/dist/generated/icon-layers.js +1 -1
- package/dist/generated/icon-layers.ts +1 -1
- package/dist/generated/icon-names.js +1 -1
- package/dist/generated/icon-names.ts +1 -1
- package/dist/index.css +25 -34
- package/dist/mixins/_breakpoint-fixed.scss +26 -0
- package/dist/mixins/_layout.scss +205 -13
- package/dist/mixins/_typography.scss +8 -8
- package/dist/style.css +25 -34
- package/dist/variables/_grid.scss +1 -1
- package/llms/01-classes.md +1 -1
- package/llms/03-sass-variables-and-mixins.md +19 -0
- package/llms/04-layouts.md +170 -55
- package/package.json +2 -1
- package/src/foundations/_grid.scss +9 -66
- package/src/generated/icon-layers.js +1 -1
- package/src/generated/icon-layers.ts +1 -1
- package/src/generated/icon-names.js +1 -1
- package/src/generated/icon-names.ts +1 -1
- package/src/mixins/_breakpoint-fixed.scss +26 -0
- package/src/mixins/_layout.scss +205 -13
- package/src/mixins/_typography.scss +8 -8
- package/src/variables/_grid.scss +1 -1
package/llms/01-classes.md
CHANGED
|
@@ -12,7 +12,7 @@ For Layout A/B, read [the layout guide](./04-layouts.md) before choosing contain
|
|
|
12
12
|
|
|
13
13
|
## Grid
|
|
14
14
|
|
|
15
|
-
`rds-col`, `rds-col-ld-6`, `rds-col-md-4`, `rds-col-md-4-offset-2`, `rds-col-sd-4`, `rds-grid`, `rds-
|
|
15
|
+
`rds-col`, `rds-col-ld-6`, `rds-col-md-4`, `rds-col-md-4-offset-2`, `rds-col-sd-4`, `rds-grid`, `rds-layout`, `rds-layout-max`, `rds-variables`
|
|
16
16
|
|
|
17
17
|
## Spacing
|
|
18
18
|
|
|
@@ -385,16 +385,35 @@
|
|
|
385
385
|
|
|
386
386
|
## Mixins
|
|
387
387
|
|
|
388
|
+
### _elevation.scss
|
|
389
|
+
|
|
390
|
+
| Mixin | Parameters |
|
|
391
|
+
|---|---|
|
|
392
|
+
| rds-style-effect-overlay | — |
|
|
393
|
+
| rds-style-effect-glass | — |
|
|
394
|
+
| rds-style-effect-glassnavy | — |
|
|
395
|
+
|
|
388
396
|
### _layout.scss
|
|
389
397
|
|
|
390
398
|
| Mixin | Parameters |
|
|
391
399
|
|---|---|
|
|
392
400
|
| breakpoint | $breakpoint |
|
|
401
|
+
| layout-max | — |
|
|
402
|
+
| grid | — |
|
|
403
|
+
|
|
404
|
+
### _shadow.scss
|
|
405
|
+
|
|
406
|
+
| Mixin | Parameters |
|
|
407
|
+
|---|---|
|
|
408
|
+
| rds-style-shadow-s | — |
|
|
409
|
+
| rds-style-shadow-m | — |
|
|
410
|
+
| rds-style-shadow-negative | — |
|
|
393
411
|
|
|
394
412
|
### _state.scss
|
|
395
413
|
|
|
396
414
|
| Mixin | Parameters |
|
|
397
415
|
|---|---|
|
|
416
|
+
| rds-style-state-disabled | — |
|
|
398
417
|
| rds-style-border-focus | $color: $rds-color-interactive-border-state-focus,
|
|
399
418
|
$borderWidth: 2px,
|
|
400
419
|
$internalColor: $rds-color-neutral-white,
|
package/llms/04-layouts.md
CHANGED
|
@@ -6,10 +6,10 @@ Layout A es el valor por defecto y Layout B es editorial y opt-in. No migres por
|
|
|
6
6
|
|
|
7
7
|
| Perfil | Contexto tipográfico | Contenedor | Grid |
|
|
8
8
|
|---|---|---|---|
|
|
9
|
-
| A | body sin atributo data-rds-layout | .rds-layout-max | .rds-grid |
|
|
10
|
-
| B | body[data-rds-layout="b"] | .rds-layout-
|
|
9
|
+
| A | body sin atributo data-rds-layout | .rds-layout-max o @include rds.layout-max (contextual) | .rds-grid |
|
|
10
|
+
| B | body[data-rds-layout="b"] | .rds-layout-max o @include rds.layout-max (contextual) | .rds-grid (contextual) |
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
El contenedor .rds-layout-max y el grid .rds-grid siguen automáticamente el atributo del body. No existe contenedor ni clase de grid editorial local. Los helpers rds-col-* y Flex responsive siguen usando los cortes de A; no los trates como helpers B.
|
|
13
13
|
|
|
14
14
|
Solo la página o el shell controla el atributo global. Dos perfiles tipográficos simultáneos requieren un contexto local diseñado expresamente; no alternes el body desde componentes individuales.
|
|
15
15
|
|
|
@@ -17,88 +17,176 @@ Solo la página o el shell controla el atributo global. Dos perfiles tipográfic
|
|
|
17
17
|
|
|
18
18
|
### Breakpoints Sass
|
|
19
19
|
|
|
20
|
-
A Layout A
|
|
20
|
+
A Layout A Sin atributo en el body (por defecto)
|
|
21
21
|
`mobile`: max-width: 719px
|
|
22
22
|
`tablet`: min-width: 720px
|
|
23
23
|
`desktop`: min-width: 1280px
|
|
24
24
|
`desktop-large`: min-width: 1440px
|
|
25
25
|
`ultrawide`: min-width: 1600px
|
|
26
|
-
B Layout B
|
|
27
|
-
`mobile
|
|
28
|
-
`tablet
|
|
29
|
-
`desktop
|
|
30
|
-
`desktop-large
|
|
31
|
-
`ultrawide
|
|
26
|
+
B Layout B Con body[data-rds-layout="b"]
|
|
27
|
+
`mobile`: max-width: 799px
|
|
28
|
+
`tablet`: min-width: 800px
|
|
29
|
+
`desktop`: min-width: 1024px
|
|
30
|
+
`desktop-large`: min-width: 1250px
|
|
31
|
+
`ultrawide`: min-width: 1584px
|
|
32
32
|
|
|
33
|
-
Los nombres
|
|
33
|
+
Los nombres son los mismos en ambos layouts: el atributo del `body` decide qué valor se aplica.
|
|
34
34
|
|
|
35
35
|
```scss
|
|
36
36
|
.component {
|
|
37
37
|
// Mobile first
|
|
38
38
|
|
|
39
39
|
@include breakpoint(tablet) {
|
|
40
|
-
// Layout A desde 720px
|
|
40
|
+
// Layout A desde 720px y Layout B desde 800px, según el body
|
|
41
41
|
}
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
#### Breakpoints contextuales
|
|
42
46
|
|
|
43
|
-
|
|
44
|
-
|
|
47
|
+
`breakpoint` siempre tiene en cuenta el layout declarado en el `body` para los nombres semánticos (`mobile`, `tablet`, `desktop`, `desktop-large` y `ultrawide`). No hay parámetros ni configuración que activar:
|
|
48
|
+
|
|
49
|
+
```scss
|
|
50
|
+
@use 'energy-foundations/src/rds-variables' as rds;
|
|
51
|
+
|
|
52
|
+
.card {
|
|
53
|
+
flex-direction: column;
|
|
54
|
+
|
|
55
|
+
@include rds.breakpoint(desktop) {
|
|
56
|
+
flex-direction: row;
|
|
45
57
|
}
|
|
46
58
|
}
|
|
47
59
|
```
|
|
48
60
|
|
|
61
|
+
El mixin genera dos reglas excluyentes: desktop desde 1280px bajo `body:not([data-rds-layout="b"])`
|
|
62
|
+
y desde 1024px bajo `body[data-rds-layout="b"]`. `:where()` no aumenta la especificidad.
|
|
63
|
+
Sin atributo, o con `data-rds-layout="a"`, se aplica A. El mismo CSS compilado sirve para ambos layouts.
|
|
64
|
+
Los estilos base quedan fuera del mixin y se comparten.
|
|
65
|
+
|
|
66
|
+
También puede usarse en el nivel raíz, escribiendo los selectores dentro del bloque. Ambas formas aplican los mismos cortes:
|
|
67
|
+
|
|
68
|
+
```scss
|
|
69
|
+
@include rds.breakpoint(desktop) {
|
|
70
|
+
.card {
|
|
71
|
+
flex-direction: row;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
En el nivel raíz, Sass no permite al mixin inspeccionar los selectores del bloque, así que el contexto se añade delante (`:where(body…) .card`). Por eso, dentro del bloque solo deben ir selectores cuyos ancestros estén dentro del `body`. Usa la forma anidada cuando el selector:
|
|
77
|
+
|
|
78
|
+
- sea `:root`, `html` o `body`;
|
|
79
|
+
- dependa de una clase o atributo del `body` o del `html`, como `.dark .card`, `[dir='rtl'] .card` o `.no-js .card`.
|
|
80
|
+
|
|
81
|
+
Tampoco escribas declaraciones sueltas en el nivel raíz: se aplicarían sobre el propio `body`.
|
|
82
|
+
|
|
83
|
+
Los breakpoints anidados reutilizan el layout del breakpoint exterior, así que solo se añade un contexto:
|
|
84
|
+
|
|
85
|
+
```scss
|
|
86
|
+
.card {
|
|
87
|
+
@include rds.breakpoint(tablet) {
|
|
88
|
+
gap: 16px;
|
|
89
|
+
|
|
90
|
+
@include rds.breakpoint(desktop) {
|
|
91
|
+
gap: 24px; // A: 720px y 1280px · B: 800px y 1024px
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
En la forma anidada, la condición del layout se comprueba sobre el propio elemento seleccionado, así que funcionan también las condiciones del `body` o del `html` y los propios `body`, `html` y `:root`:
|
|
98
|
+
|
|
99
|
+
```scss
|
|
100
|
+
:root {
|
|
101
|
+
--page-gap: 16px;
|
|
102
|
+
|
|
103
|
+
@include rds.breakpoint(desktop) {
|
|
104
|
+
--page-gap: 24px;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.dark .card {
|
|
109
|
+
@include rds.breakpoint(tablet) {
|
|
110
|
+
padding: 24px; // funciona aunque .dark esté en el body
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
- La condición se inserta al principio del elemento seleccionado: `.dark :where(body[data-rds-layout='b'], body[data-rds-layout='b'] *).card`. Así siguen funcionando `&--modificador`, `&__elemento`, `&:hover` y los pseudoelementos.
|
|
116
|
+
- `html` y `:root` comprueban su `body` hijo con `:has()`: `:where(:has(> body[data-rds-layout='b'])):root`. Requiere Chrome 105, Safari 15.4 o Firefox 121; en navegadores sin `:has()` esa regla no se aplica y se mantiene el valor base.
|
|
117
|
+
- Todas las condiciones van dentro de `:where()`, así que la especificidad no cambia.
|
|
118
|
+
- Un selector que ya limita el layout a mano (`body[data-rds-layout='b'] .card`) compila y solo se aplica en Layout B, con los cortes de B.
|
|
119
|
+
|
|
120
|
+
Las claves personalizadas añadidas al mapa `$breakpoints` son cortes fijos que no dependen del `body`.
|
|
121
|
+
Los valores se leen del mapa `$breakpoints` configurado por el consumidor. Si falta uno de los dos cortes de un nombre semántico, la compilación falla.
|
|
122
|
+
Una clave desconocida mantiene el warning histórico.
|
|
123
|
+
|
|
124
|
+
El contexto se resuelve a partir del `body` del documento, así que no funciona dentro de Shadow DOM. Un iframe utiliza el atributo de su propio `body`.
|
|
125
|
+
En Vue `scoped`, el contexto global debe quedar fuera del scope: utiliza un bloque de estilos no scoped para estas reglas.
|
|
126
|
+
El atributo global del `body` selecciona B y las clases `.rds-layout-max` y `.rds-grid` adaptan sus reglas al contexto.
|
|
127
|
+
|
|
128
|
+
Si distribuyes CSS precompilado, el atributo del `body` debe estar presente en la página para seleccionar el perfil correspondiente.
|
|
129
|
+
|
|
130
|
+
Las primitivas internas que necesitan cortes fijos (helpers `rds-col-*`, Flex responsive y la escala tipográfica) usan un mixin interno que no forma parte de la API pública.
|
|
131
|
+
En páginas sin atributo, los cortes son los mismos que antes: no es necesario migrar las integraciones existentes de Layout A.
|
|
132
|
+
|
|
49
133
|
### Contenedores
|
|
50
134
|
|
|
51
135
|
LEGACY
|
|
52
136
|
`.rds-e-layout-max`
|
|
53
|
-
Alias compatible de `.rds-layout-max
|
|
54
|
-
|
|
137
|
+
Alias compatible de `.rds-layout-max`, con el mismo comportamiento contextual.
|
|
138
|
+
CONTEXTUAL A/B
|
|
55
139
|
`.rds-layout-max`
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
140
|
+
Layout A: padding 16px mobile, 24px tablet y 32px desktop, máximo 1600px. Layout B: padding progresivo hasta 72px, máximo 1584px.
|
|
141
|
+
MIXIN SASS
|
|
142
|
+
`@include layout-max`
|
|
143
|
+
El mismo contenedor aplicado a tu propio selector, para cuando no puedes o no quieres añadir la clase al HTML.
|
|
60
144
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
El contexto tipográfico del `body` y las clases de contenedor y grid son independientes. La librería no detecta ni corrige automáticamente las combinaciones incoherentes.
|
|
64
|
-
|
|
65
|
-
#### Caso incoherente: tipografía B con maquetación A
|
|
145
|
+
`.rds-layout-max` sigue el layout declarado en `body[data-rds-layout]`: aplica los márgenes de A sin atributo (o con `"a"`) y los de B con `data-rds-layout="b"`. Así, componentes y plantillas transversales no necesitan conocer el layout de la página.
|
|
66
146
|
|
|
67
147
|
```html
|
|
68
148
|
<body data-rds-layout="b">
|
|
69
|
-
<main class="rds-layout-max">
|
|
70
|
-
<div class="rds-grid"><!-- Contenido --></div>
|
|
71
|
-
</main>
|
|
149
|
+
<main class="rds-layout-max">...</main>
|
|
72
150
|
</body>
|
|
73
151
|
```
|
|
74
152
|
|
|
75
|
-
|
|
153
|
+
- No existe un contenedor editorial local: el contenedor siempre sigue al `body`.
|
|
154
|
+
- Los selectores de contexto usan `:where()`, así que la especificidad es la misma que la de una clase simple.
|
|
76
155
|
|
|
77
|
-
####
|
|
156
|
+
#### Como mixin Sass
|
|
78
157
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
158
|
+
Si no puedes añadir la clase al HTML (por ejemplo, en un componente de AEM o en una plantilla de terceros), aplica el mismo contenedor desde Sass con `layout-max`:
|
|
159
|
+
|
|
160
|
+
```scss
|
|
161
|
+
@use 'energy-foundations/src/rds-variables' as rds;
|
|
162
|
+
|
|
163
|
+
.portal-main {
|
|
164
|
+
@include rds.layout-max;
|
|
165
|
+
}
|
|
85
166
|
```
|
|
86
167
|
|
|
87
|
-
|
|
168
|
+
Genera exactamente las mismas reglas que `.rds-layout-max`, aplicadas a tu selector: los márgenes de A o de B según el atributo del `body`, sin parámetros que elegir.
|
|
169
|
+
|
|
170
|
+
- Debe usarse dentro de un selector; en el nivel raíz la compilación falla con un mensaje claro.
|
|
171
|
+
- Funciona con cualquier selector, también sobre el propio `body` o con condiciones del `body` o del `html`, como `.dark .portal-main`.
|
|
172
|
+
- La especificidad es la de tu selector: el mixin no la aumenta.
|
|
173
|
+
- Puedes combinarlo con tus propias reglas; declara después las que quieras que prevalezcan.
|
|
88
174
|
|
|
89
|
-
|
|
175
|
+
### Composición contextual
|
|
176
|
+
|
|
177
|
+
El contenedor `.rds-layout-max` y el grid `.rds-grid` siguen al `body`, por lo que la página no necesita seleccionar una clase de grid editorial alternativa.
|
|
90
178
|
|
|
91
179
|
```html
|
|
92
180
|
<body data-rds-layout="b">
|
|
93
|
-
<main class="rds-layout-
|
|
94
|
-
<div class="rds-grid
|
|
181
|
+
<main class="rds-layout-max">
|
|
182
|
+
<div class="rds-grid"><!-- Contenido --></div>
|
|
95
183
|
</main>
|
|
96
184
|
</body>
|
|
97
185
|
```
|
|
98
186
|
|
|
99
|
-
|
|
187
|
+
Con `data-rds-layout="b"`, la tipografía, el contenedor y el grid usan los cortes de Layout B. Para Layout A, omite el atributo. El contenedor solo controla ancho y márgenes; el grid controla columnas y gaps.
|
|
100
188
|
|
|
101
|
-
Resuelve el perfil una sola vez en el shell de Vue o en el Page Component de AEM
|
|
189
|
+
Resuelve el perfil una sola vez en el shell de Vue o en el Page Component de AEM. Al cambiar de ruta, actualiza el contexto global del destino y las primitivas se adaptan.
|
|
102
190
|
|
|
103
191
|
Esta composición no cambia los helpers `rds-col-*` ni Flex responsive: siguen usando los breakpoints de A. Para spans editoriales, utiliza las reglas Sass del perfil B descritas en Grid.
|
|
104
192
|
|
|
@@ -128,6 +216,24 @@ No existe una escala tipográfica específica para tablet. El breakpoint `deskto
|
|
|
128
216
|
|
|
129
217
|
## Grid: columnas, offsets y perfil editorial
|
|
130
218
|
|
|
219
|
+
### Mixin Sass de grid
|
|
220
|
+
|
|
221
|
+
El mixin público `grid` aplica el mismo comportamiento que `.rds-grid` a un selector propio, sin añadir esa clase al HTML:
|
|
222
|
+
|
|
223
|
+
```scss
|
|
224
|
+
@use 'energy-foundations/src/rds-variables' as rds;
|
|
225
|
+
|
|
226
|
+
.mi-grid {
|
|
227
|
+
@include rds.grid;
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
También está disponible desde `energy-foundations/src/mixins/layout`. Con `@use 'energy-foundations/src/rds-variables' as *`, se incluye mediante `@include grid`.
|
|
232
|
+
|
|
233
|
+
La clase `.rds-grid` consume ese mismo mixin. Ambos conservan display, ancho completo, centrado, columnas y gaps según los mapas `$grid-config` y `$grid-config-b` y el layout global del `body`. Inclúyelo dentro de un selector de un elemento descendiente del `body`; invocarlo en la raíz de la hoja Sass produce un error explícito.
|
|
234
|
+
|
|
235
|
+
El mixin solo configura el contenedor: no incorpora `layout-max`, no genera utilidades de columnas y no cambia `rds-col-*` ni sus offsets.
|
|
236
|
+
|
|
131
237
|
### Columnas y offsets · Layout A
|
|
132
238
|
|
|
133
239
|
El perfil A usa 4 columnas con gap de 16px hasta 719px, 8 columnas con gap de 16px desde 720px y 12 columnas con gap de 24px desde 1280px.
|
|
@@ -155,15 +261,14 @@ Los offsets disponibles van de cero a `máximo de columnas - n`.
|
|
|
155
261
|
</article>
|
|
156
262
|
```
|
|
157
263
|
|
|
158
|
-
### Grid
|
|
264
|
+
### Grid contextual · Layout B
|
|
159
265
|
|
|
160
|
-
El grid
|
|
161
|
-
|
|
162
|
-
Para un componente editorial, define sus columnas con los mixins de B:
|
|
266
|
+
El grid `.rds-grid` usa automáticamente los cortes de B cuando el `body` tiene `data-rds-layout="b"`.
|
|
267
|
+
Los helpers `rds-col-*` actuales se generan con los cortes de A. Para spans que sigan el layout de la página, define las columnas en el Sass del componente con `breakpoint`, que aplica los cortes de A o B según el `body`:
|
|
163
268
|
|
|
164
269
|
```html
|
|
165
|
-
<div class="rds-layout-
|
|
166
|
-
<div class="rds-grid
|
|
270
|
+
<div class="rds-layout-max">
|
|
271
|
+
<div class="rds-grid">
|
|
167
272
|
<article class="portal-editorial-card">Contenido</article>
|
|
168
273
|
</div>
|
|
169
274
|
</div>
|
|
@@ -175,12 +280,12 @@ Para un componente editorial, define sus columnas con los mixins de B:
|
|
|
175
280
|
.portal-editorial-card {
|
|
176
281
|
grid-column: span 4;
|
|
177
282
|
|
|
178
|
-
@include rds.breakpoint(tablet
|
|
179
|
-
grid-column: span 4;
|
|
283
|
+
@include rds.breakpoint(tablet) {
|
|
284
|
+
grid-column: span 4; // A: desde 720px · B: desde 800px
|
|
180
285
|
}
|
|
181
286
|
|
|
182
|
-
@include rds.breakpoint(desktop
|
|
183
|
-
grid-column: span 6;
|
|
287
|
+
@include rds.breakpoint(desktop) {
|
|
288
|
+
grid-column: span 6; // A: desde 1280px · B: desde 1024px
|
|
184
289
|
}
|
|
185
290
|
}
|
|
186
291
|
```
|
|
@@ -303,8 +408,8 @@ El layout debe resolverse en el Page Component, template o policy porque esa cap
|
|
|
303
408
|
```html
|
|
304
409
|
<!-- Layout B: selección editorial -->
|
|
305
410
|
<body data-rds-layout="b">
|
|
306
|
-
<main class="rds-layout-
|
|
307
|
-
<div class="rds-grid
|
|
411
|
+
<main class="rds-layout-max">
|
|
412
|
+
<div class="rds-grid"><!-- Contenido --></div>
|
|
308
413
|
</main>
|
|
309
414
|
</body>
|
|
310
415
|
```
|
|
@@ -336,5 +441,15 @@ Los componentes comunes y moleculares:
|
|
|
336
441
|
- No se duplican como componente A y componente B.
|
|
337
442
|
- Permiten que el Page Component y Foundations resuelvan el contexto.
|
|
338
443
|
|
|
339
|
-
Los componentes específicos de portal siguen el mismo contrato.
|
|
444
|
+
Los componentes específicos de portal siguen el mismo contrato. `.rds-layout-max` adapta sus márgenes al atributo del `body`, pero ninguna clase cambia por sí sola los breakpoints tipográficos de la página.
|
|
445
|
+
|
|
446
|
+
Si la plantilla HTL no permite añadir la clase al contenedor, aplica el mismo comportamiento desde el Sass del componente:
|
|
447
|
+
|
|
448
|
+
```scss
|
|
449
|
+
@use 'energy-foundations/src/rds-variables' as rds;
|
|
450
|
+
|
|
451
|
+
.cmp-page__main {
|
|
452
|
+
@include rds.layout-max;
|
|
453
|
+
}
|
|
454
|
+
```
|
|
340
455
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "energy-foundations",
|
|
3
|
-
"version": "2.5.0-beta.
|
|
3
|
+
"version": "2.5.0-beta.2",
|
|
4
4
|
"config": {
|
|
5
5
|
"commitizen": {
|
|
6
6
|
"path": "node_modules/cz-customizable"
|
|
@@ -98,6 +98,7 @@
|
|
|
98
98
|
"storybook:preview": "npx http-server storybook-static",
|
|
99
99
|
"stylelint": "npx stylelint '**/*.scss'",
|
|
100
100
|
"stylelint:fix": "npx stylelint '**/*.scss' --fix",
|
|
101
|
+
"test:breakpoints": "node tests/verify-breakpoints.mjs",
|
|
101
102
|
"test:typography": "node tests/verify-typography.mjs"
|
|
102
103
|
},
|
|
103
104
|
"style": "dist/style.css",
|
|
@@ -3,74 +3,17 @@
|
|
|
3
3
|
*************************/
|
|
4
4
|
@use 'sass:map';
|
|
5
5
|
@use '../rds-variables' as *;
|
|
6
|
+
@use '../mixins/breakpoint-fixed' as *;
|
|
6
7
|
|
|
8
|
+
// Contextual container: follows the page layout declared on body[data-rds-layout].
|
|
9
|
+
// Also available as the `layout-max` mixin for custom selectors.
|
|
7
10
|
.rds-e-layout-max,
|
|
8
11
|
.rds-layout-max {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
@include breakpoint(tablet) {
|
|
12
|
-
padding: 0 $g-padding-tablet;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
@include breakpoint(desktop) {
|
|
16
|
-
padding: 0 $g-padding-desktop;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
@include breakpoint(ultrawide) {
|
|
20
|
-
margin: 0 auto;
|
|
21
|
-
max-width: 1600px;
|
|
22
|
-
padding: 0 $g-padding-ultrawide;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
.rds-layout-editorial {
|
|
27
|
-
padding: 0 $g-padding-mobile;
|
|
28
|
-
|
|
29
|
-
@include breakpoint(tablet-v2) {
|
|
30
|
-
padding: 0 $g-padding-tablet;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
@include breakpoint(desktop-v2) {
|
|
34
|
-
padding: 0 $g-padding-desktop;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
@include breakpoint(desktop-large-v2) {
|
|
38
|
-
padding: 0 72px;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
@include breakpoint(ultrawide-v2) {
|
|
42
|
-
margin: 0 auto;
|
|
43
|
-
max-width: 1584px;
|
|
44
|
-
padding: 0 72px;
|
|
45
|
-
}
|
|
12
|
+
@include layout-max;
|
|
46
13
|
}
|
|
47
14
|
|
|
48
15
|
.rds-grid {
|
|
49
|
-
|
|
50
|
-
margin-left: auto;
|
|
51
|
-
margin-right: auto;
|
|
52
|
-
width: 100%;
|
|
53
|
-
|
|
54
|
-
@each $breakpoint, $config in $grid-config {
|
|
55
|
-
@include breakpoint($breakpoint) {
|
|
56
|
-
gap: map.get($config, gap);
|
|
57
|
-
grid-template-columns: repeat(map.get($config, max-columns), 1fr);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
.rds-grid-editorial {
|
|
63
|
-
display: grid;
|
|
64
|
-
margin-left: auto;
|
|
65
|
-
margin-right: auto;
|
|
66
|
-
width: 100%;
|
|
67
|
-
|
|
68
|
-
@each $breakpoint, $config in $grid-config-editorial {
|
|
69
|
-
@include breakpoint($breakpoint) {
|
|
70
|
-
gap: map.get($config, gap);
|
|
71
|
-
grid-template-columns: repeat(map.get($config, max-columns), 1fr);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
16
|
+
@include grid;
|
|
74
17
|
}
|
|
75
18
|
|
|
76
19
|
// Map of breakpoint names to abbreviations
|
|
@@ -86,7 +29,7 @@ $breakpoint-abbr: (
|
|
|
86
29
|
$max-columns: map.get($config, max-columns);
|
|
87
30
|
$abbr: map.get($breakpoint-abbr, $breakpoint);
|
|
88
31
|
|
|
89
|
-
@include breakpoint($breakpoint) {
|
|
32
|
+
@include fixed-breakpoint($breakpoint) {
|
|
90
33
|
// Clases sin offset: rds-col-sd-3
|
|
91
34
|
@for $i from 1 through $max-columns {
|
|
92
35
|
.rds-col-#{$abbr}-#{$i} {
|
|
@@ -111,7 +54,7 @@ $breakpoint-abbr: (
|
|
|
111
54
|
|
|
112
55
|
@for $i from 1 through $max-columns {
|
|
113
56
|
.rds-col-#{$i} {
|
|
114
|
-
@include breakpoint($breakpoint) {
|
|
57
|
+
@include fixed-breakpoint($breakpoint) {
|
|
115
58
|
grid-column: span #{$i};
|
|
116
59
|
}
|
|
117
60
|
}
|
|
@@ -153,7 +96,7 @@ $flex-prefix: 'rds-flex';
|
|
|
153
96
|
@each $breakpoint, $config in $grid-config {
|
|
154
97
|
$abbr: map.get($breakpoint-abbr, $breakpoint);
|
|
155
98
|
|
|
156
|
-
@include breakpoint($breakpoint) {
|
|
99
|
+
@include fixed-breakpoint($breakpoint) {
|
|
157
100
|
.#{$flex-prefix}-#{$abbr}-row {
|
|
158
101
|
flex-direction: row;
|
|
159
102
|
}
|
|
@@ -186,7 +129,7 @@ $flex-prefix: 'rds-flex';
|
|
|
186
129
|
@each $breakpoint, $config in $grid-config {
|
|
187
130
|
$abbr: map.get($breakpoint-abbr, $breakpoint);
|
|
188
131
|
|
|
189
|
-
@include breakpoint($breakpoint) {
|
|
132
|
+
@include fixed-breakpoint($breakpoint) {
|
|
190
133
|
.#{$flex-prefix}-grow-#{$abbr} {
|
|
191
134
|
flex-grow: 1;
|
|
192
135
|
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
@use 'sass:map';
|
|
2
|
+
@use '../variables/layout' as *;
|
|
3
|
+
|
|
4
|
+
// Internal fixed media query, independent of body[data-rds-layout].
|
|
5
|
+
// Not forwarded by rds-variables: consumers must use `breakpoint`.
|
|
6
|
+
@mixin fixed-breakpoint($breakpoint) {
|
|
7
|
+
$value: map.get($breakpoints, $breakpoint);
|
|
8
|
+
|
|
9
|
+
// If the key exists in the map
|
|
10
|
+
@if $value {
|
|
11
|
+
@if $breakpoint == mobile or $breakpoint == mobile-v2 {
|
|
12
|
+
@media (max-width: $value) {
|
|
13
|
+
@content;
|
|
14
|
+
}
|
|
15
|
+
} @else {
|
|
16
|
+
@media (min-width: $value) {
|
|
17
|
+
@content;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// If the key doesn't exist in the map
|
|
23
|
+
@else {
|
|
24
|
+
@warn "Unfortunately, no value could be retrieved from `#{$breakpoint}`. " + "Please make sure it is defined in `$breakpoints` map.";
|
|
25
|
+
}
|
|
26
|
+
}
|