@studiolxd/brand 49.10.0 → 49.11.0
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/CHANGELOG.md +51 -0
- package/dist/_shared/tokens.js +3 -0
- package/dist/_types/molecules/SiteNav/SiteNav.d.ts +14 -0
- package/dist/app-launcher.css +1 -1
- package/dist/app-launcher.js +7 -4
- package/dist/brand.css +7 -4
- package/dist/site-nav.css +1 -1
- package/dist/site-nav.js +3 -2
- package/dist/tokens.css +7 -4
- package/package.json +1 -1
- package/src/tokens/molecules/app-launcher.css +5 -3
- package/src/tokens/molecules/site-nav.css +1 -0
- package/src/tokens/scss/molecules/_app-launcher.scss +5 -3
- package/src/tokens/scss/molecules/_site-nav.scss +1 -0
- package/src/tokens/tokens.json +3 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,57 @@ El paquete sigue [semver](https://semver.org/lang/es/): **patch** para bug fixes
|
|
|
7
7
|
regeneración de `dist`, **minor** para componentes/props/variantes/tokens nuevos, **major**
|
|
8
8
|
para breaking changes.
|
|
9
9
|
|
|
10
|
+
## [49.11.0] — 2026-09-19
|
|
11
|
+
|
|
12
|
+
> **Minor.** Tres decisiones de maqueta sobre lo que la 49.10.0 dejó puesto: dónde va el
|
|
13
|
+
> distintivo en el lanzador, que su panel crezca en vez de desplazarse, y que un grupo largo
|
|
14
|
+
> del índice público quepa a dos columnas bajo un solo título.
|
|
15
|
+
|
|
16
|
+
### El distintivo va encima del nombre, y su hueco se reserva siempre
|
|
17
|
+
|
|
18
|
+
En `AppLauncher`, el distintivo de la baldosa se pinta **sobre** el nombre de la app, no a su
|
|
19
|
+
lado. Y su fila se pinta **siempre**, lleve distintivo la baldosa o no: vacía es el hueco
|
|
20
|
+
reservado que deja todos los nombres de la rejilla a la misma altura, de modo que una app que
|
|
21
|
+
estrena píldora no empuja hacia abajo el nombre de su vecina.
|
|
22
|
+
|
|
23
|
+
El alto de esa fila es el de una `Tag` y sale de sus tokens —
|
|
24
|
+
`app-launcher.tile-badge-block-size` = `calc({tag.font-size} * {tag.line-height} + 2 *
|
|
25
|
+
{tag.padding-block})` —, así que sigue cuadrando si la píldora cambia de talla. No hay medida
|
|
26
|
+
escrita a mano.
|
|
27
|
+
|
|
28
|
+
### El panel del lanzador crece con su contenido
|
|
29
|
+
|
|
30
|
+
El panel **no tiene tope propio**: con las doce aplicaciones de la suite se ve entero. El único
|
|
31
|
+
límite es el hueco que de verdad queda en la ventana (`--available-height`, que mide Base UI y
|
|
32
|
+
que `app-launcher.content-max-height` no hace más que nombrar); solo cuando ni ese hueco da, el
|
|
33
|
+
panel se recorta ahí y hace scroll. Un tope propio —una altura fija, «tantas filas»— recortaría
|
|
34
|
+
la rejilla teniendo pantalla de sobra, y ahora lo impide un guardián sobre la hoja
|
|
35
|
+
(`AppLauncher.panel.test.ts`).
|
|
36
|
+
|
|
37
|
+
La rejilla pasa a **dos columnas en un panel estrecho** y tres desde `sm`
|
|
38
|
+
(`app-launcher.content-columns-narrow`, nuevo, junto al `content-columns` de siempre): con tres
|
|
39
|
+
columnas en móvil, doce baldosas dejaban los nombres partidos en tres líneas.
|
|
40
|
+
|
|
41
|
+
### `SiteNav`: un grupo a dos columnas, bajo un solo título
|
|
42
|
+
|
|
43
|
+
`SiteNavGroup` gana **`columns?: 1 | 2`** (por defecto `1`, el grupo de siempre). Con `2` el
|
|
44
|
+
grupo ocupa en la rejilla el **ancho de dos** —doce tramos en `md`, ocho en `lg`, seis en `xl`—
|
|
45
|
+
y reparte sus ítems en **dos columnas bajo un solo título**. Es lo que da sitio a un grupo largo
|
|
46
|
+
—«Aplicaciones», con las diez o doce de la suite— sin partirlo en dos grupos con dos cabeceras,
|
|
47
|
+
que sería otro índice.
|
|
48
|
+
|
|
49
|
+
- El pasillo entre esas dos columnas es el mismo que separa dos grupos
|
|
50
|
+
(`site-nav.item-column-gap`, nuevo, que apunta a `group-gap`): más estrecho, el grupo ancho se
|
|
51
|
+
leería como dos grupos pegados.
|
|
52
|
+
- Los ítems se leen **por filas**, en el orden del DOM.
|
|
53
|
+
- **Por debajo de `md` vuelve a una columna**, como todo el índice.
|
|
54
|
+
- El grupo ancho cuenta **por dos** en el tope de columnas (`site-nav.columns-max`) y queda
|
|
55
|
+
fuera del reparto de la última fila: ya ocupa lo que le toca y no tiene sobrante que recoger.
|
|
56
|
+
- `disabled` y `badge` de la 49.10.0 siguen valiendo dentro de las dos columnas.
|
|
57
|
+
|
|
58
|
+
El dato viaja en `data-group-columns`, nunca en un atributo `style` — el mismo motivo que
|
|
59
|
+
`data-columns`.
|
|
60
|
+
|
|
10
61
|
## [49.10.0] — 2026-09-18
|
|
11
62
|
|
|
12
63
|
> **Minor.** La suite marca productos como «próximamente»: se ven en su sitio pero apagados,
|
package/dist/_shared/tokens.js
CHANGED
|
@@ -193,6 +193,7 @@ var e = {
|
|
|
193
193
|
"--app-launcher-trigger-label-color": "#111e30",
|
|
194
194
|
"--app-launcher-content-min-width": "20rem",
|
|
195
195
|
"--app-launcher-content-columns": "3",
|
|
196
|
+
"--app-launcher-content-columns-narrow": "2",
|
|
196
197
|
"--app-launcher-content-gap": "0.25rem",
|
|
197
198
|
"--app-launcher-content-bg": "#ffffff",
|
|
198
199
|
"--app-launcher-content-border-width": "1px",
|
|
@@ -208,6 +209,7 @@ var e = {
|
|
|
208
209
|
"--app-launcher-tile-padding-block": "0.5rem",
|
|
209
210
|
"--app-launcher-tile-padding-inline": "1rem",
|
|
210
211
|
"--app-launcher-tile-gap": "0.25rem",
|
|
212
|
+
"--app-launcher-tile-badge-block-size": "calc(0.875rem * 1 + 2 * 0.25rem)",
|
|
211
213
|
"--app-launcher-tile-border-radius": "0px",
|
|
212
214
|
"--app-launcher-tile-name-font-size": "0.875rem",
|
|
213
215
|
"--app-launcher-tile-name-font-weight": "300",
|
|
@@ -2891,6 +2893,7 @@ var e = {
|
|
|
2891
2893
|
"--site-nav-item-hover-line-width": "1px",
|
|
2892
2894
|
"--site-nav-item-disabled-color": "#4a4a4a",
|
|
2893
2895
|
"--site-nav-item-badge-gap": "0.5rem",
|
|
2896
|
+
"--site-nav-item-column-gap": "2rem",
|
|
2894
2897
|
"--site-nav-item-current-font-weight": "300",
|
|
2895
2898
|
"--site-nav-focus-ring-width": "2px",
|
|
2896
2899
|
"--site-nav-focus-ring-offset": "2px",
|
|
@@ -29,6 +29,16 @@ export interface SiteNavGroup {
|
|
|
29
29
|
label: string;
|
|
30
30
|
/** Si se indica, la cabecera es también un enlace (la portada de la sección). */
|
|
31
31
|
href?: string;
|
|
32
|
+
/**
|
|
33
|
+
* En cuántas columnas se reparten los ítems de ESTE grupo, bajo **un solo
|
|
34
|
+
* título**. Por defecto `1`, el grupo de siempre. Con `2` —el caso de un
|
|
35
|
+
* grupo largo, como «Aplicaciones»— el grupo ocupa en la rejilla el ancho de
|
|
36
|
+
* dos y sus ítems se pintan en dos columnas dentro de él; por debajo de `md`
|
|
37
|
+
* vuelve a una, como todo lo demás. No es otro componente ni dos grupos: la
|
|
38
|
+
* cabecera sigue siendo una, y con ella el encabezado por el que se recorre
|
|
39
|
+
* el índice.
|
|
40
|
+
*/
|
|
41
|
+
columns?: 1 | 2;
|
|
32
42
|
items: SiteNavItem[];
|
|
33
43
|
}
|
|
34
44
|
export type SiteNavRenderLinkProps = {
|
|
@@ -60,6 +70,10 @@ export interface SiteNavProps {
|
|
|
60
70
|
* en `data-columns`, no en un atributo `style`: una app con
|
|
61
71
|
* `style-src 'self'` descarta el atributo sin avisar y el grupo de más caía
|
|
62
72
|
* a la segunda fila.
|
|
73
|
+
*
|
|
74
|
+
* Un grupo puede valer por dos (`columns: 2`): ocupa el ancho de dos en la
|
|
75
|
+
* rejilla y reparte sus ítems en dos columnas bajo un solo título. El dato va
|
|
76
|
+
* también en un atributo, `data-group-columns`, por el mismo motivo.
|
|
63
77
|
*/
|
|
64
78
|
/**
|
|
65
79
|
* El único texto que el índice dice por su cuenta, y es **cromo**: el nombre de
|
package/dist/app-launcher.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.app-launcher__trigger{all:unset;box-sizing:border-box;width:var(--app-launcher-trigger-size);height:var(--app-launcher-trigger-size);border-radius:var(--app-launcher-trigger-border-radius);color:var(--app-launcher-trigger-color);cursor:pointer;transition:box-shadow var(--app-launcher-transition-duration) var(--app-launcher-transition-easing);justify-content:center;align-items:center;display:flex}.app-launcher__trigger:hover{background-color:var(--app-launcher-trigger-hover-bg);color:var(--app-launcher-trigger-hover-color)}.app-launcher__trigger:focus-visible{outline:var(--app-launcher-focus-ring-width) solid var(--app-launcher-focus-ring-color);outline-offset:var(--app-launcher-focus-ring-offset)}.app-launcher__trigger--label{gap:var(--app-launcher-trigger-label-gap);width:auto;height:auto;padding-block:var(--app-launcher-trigger-label-padding-block);padding-inline:var(--app-launcher-trigger-label-padding-inline);border-radius:var(--app-launcher-trigger-label-border-radius);color:var(--app-launcher-trigger-label-color)}.app-launcher__trigger-label{font-size:var(--app-launcher-trigger-label-font-size);font-weight:var(--app-launcher-trigger-label-font-weight);line-height:var(--app-launcher-trigger-label-line-height)}.app-launcher__trigger--label:hover{color:var(--app-launcher-trigger-label-color);background-color:#0000}.app-launcher__content{box-sizing:border-box;background-color:var(--app-launcher-content-bg);border-width:var(--app-launcher-content-border-width);border-style:solid;border-color:var(--app-launcher-content-border-color);border-radius:var(--app-launcher-content-border-radius);box-shadow:var(--app-launcher-content-shadow);padding-block:var(--app-launcher-content-padding-block);padding-inline:var(--app-launcher-content-padding-inline);min-width:var(--app-launcher-content-min-width);transform-origin:var(--transform-origin);animation-duration:var(--app-launcher-transition-duration);animation-timing-function:var(--app-launcher-transition-easing);max-height:var(--app-launcher-content-max-height,var(--available-height));overscroll-behavior:contain;outline:none;overflow-y:auto}.app-launcher__content[data-open]{animation-name:app-launcher-in}.app-launcher__content[data-closed]{animation-name:app-launcher-out}@keyframes app-launcher-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes app-launcher-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}.app-launcher__grid{grid-template-columns:repeat(var(--app-launcher-content-columns), 1fr);gap:var(--app-launcher-content-gap);margin:0;padding:0;list-style:none;display:grid}.app-launcher__tile{box-sizing:border-box;align-items:
|
|
1
|
+
.app-launcher__trigger{all:unset;box-sizing:border-box;width:var(--app-launcher-trigger-size);height:var(--app-launcher-trigger-size);border-radius:var(--app-launcher-trigger-border-radius);color:var(--app-launcher-trigger-color);cursor:pointer;transition:box-shadow var(--app-launcher-transition-duration) var(--app-launcher-transition-easing);justify-content:center;align-items:center;display:flex}.app-launcher__trigger:hover{background-color:var(--app-launcher-trigger-hover-bg);color:var(--app-launcher-trigger-hover-color)}.app-launcher__trigger:focus-visible{outline:var(--app-launcher-focus-ring-width) solid var(--app-launcher-focus-ring-color);outline-offset:var(--app-launcher-focus-ring-offset)}.app-launcher__trigger--label{gap:var(--app-launcher-trigger-label-gap);width:auto;height:auto;padding-block:var(--app-launcher-trigger-label-padding-block);padding-inline:var(--app-launcher-trigger-label-padding-inline);border-radius:var(--app-launcher-trigger-label-border-radius);color:var(--app-launcher-trigger-label-color)}.app-launcher__trigger-label{font-size:var(--app-launcher-trigger-label-font-size);font-weight:var(--app-launcher-trigger-label-font-weight);line-height:var(--app-launcher-trigger-label-line-height)}.app-launcher__trigger--label:hover{color:var(--app-launcher-trigger-label-color);background-color:#0000}.app-launcher__content{box-sizing:border-box;background-color:var(--app-launcher-content-bg);border-width:var(--app-launcher-content-border-width);border-style:solid;border-color:var(--app-launcher-content-border-color);border-radius:var(--app-launcher-content-border-radius);box-shadow:var(--app-launcher-content-shadow);padding-block:var(--app-launcher-content-padding-block);padding-inline:var(--app-launcher-content-padding-inline);min-width:var(--app-launcher-content-min-width);transform-origin:var(--transform-origin);animation-duration:var(--app-launcher-transition-duration);animation-timing-function:var(--app-launcher-transition-easing);max-height:var(--app-launcher-content-max-height,var(--available-height));overscroll-behavior:contain;outline:none;overflow-y:auto}.app-launcher__content[data-open]{animation-name:app-launcher-in}.app-launcher__content[data-closed]{animation-name:app-launcher-out}@keyframes app-launcher-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}@keyframes app-launcher-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.95)}}.app-launcher__grid{grid-template-columns:repeat(var(--app-launcher-content-columns-narrow), 1fr);gap:var(--app-launcher-content-gap);margin:0;padding:0;list-style:none;display:grid}@media (width>=480px){.app-launcher__grid{grid-template-columns:repeat(var(--app-launcher-content-columns), 1fr)}}.app-launcher__grid>li{min-inline-size:0}.app-launcher__tile{box-sizing:border-box;align-items:flex-start;gap:var(--app-launcher-tile-gap);padding-block:var(--app-launcher-tile-padding-block);padding-inline:var(--app-launcher-tile-padding-inline);border-radius:var(--app-launcher-tile-border-radius);box-shadow:none;text-align:start;cursor:pointer;transition:background-color var(--app-launcher-transition-duration) var(--app-launcher-transition-easing), box-shadow var(--app-launcher-transition-duration) var(--app-launcher-transition-easing);outline:none;flex-direction:column;text-decoration:none;display:flex}.app-launcher__tile:not(.app-launcher__tile--disabled):hover,.app-launcher__tile:focus-visible{background-color:var(--app-launcher-tile-highlighted-bg);color:var(--app-launcher-tile-highlighted-color)}.app-launcher__tile:not(.app-launcher__tile--disabled):hover .app-launcher__tile-name,.app-launcher__tile:focus-visible .app-launcher__tile-name{color:inherit}.app-launcher__tile:focus-visible{outline:var(--app-launcher-focus-ring-width) solid var(--app-launcher-focus-ring-color);outline-offset:var(--app-launcher-focus-ring-offset)}.app-launcher__tile--active .app-launcher__tile-name{font-weight:var(--app-launcher-tile-name-active-font-weight)}.app-launcher__tile.app-launcher__tile--disabled{cursor:default}.app-launcher__tile--disabled .app-launcher__tile-name{color:var(--app-launcher-tile-disabled-color)}.app-launcher__tile-badge-row{min-block-size:var(--app-launcher-tile-badge-block-size);align-items:center;display:flex}.app-launcher__tile-name{font-size:var(--app-launcher-tile-name-font-size);font-weight:var(--app-launcher-tile-name-font-weight);line-height:var(--app-launcher-tile-name-line-height);color:var(--app-launcher-tile-name-color)}.app-launcher__tile-badge{pointer-events:none}.app-launcher__tile:not(.app-launcher__tile--disabled):hover .app-launcher__tile-badge,.app-launcher__tile:focus-visible .app-launcher__tile-badge{--tag-info-bg:var(--app-launcher-tile-badge-hover-bg);--tag-info-color:var(--app-launcher-tile-badge-hover-color)}.app-launcher__positioner{z-index:var(--app-launcher-content-z-index)}
|
package/dist/app-launcher.js
CHANGED
|
@@ -11,12 +11,15 @@ import { Popover as l } from "@base-ui/react/popover";
|
|
|
11
11
|
//#region src/stories/molecules/AppLauncher/AppLauncher.tsx
|
|
12
12
|
function u({ app: t, isCurrent: n, newLabel: i }) {
|
|
13
13
|
let a = e("appLauncher"), l = t.badge ?? (t.isNew ? a("new", i) : void 0), u = /* @__PURE__ */ c(o, { children: [/* @__PURE__ */ s("span", {
|
|
14
|
+
className: "app-launcher__tile-badge-row",
|
|
15
|
+
children: l && /* @__PURE__ */ s(r, {
|
|
16
|
+
variant: t.disabled ? "neutral" : "info",
|
|
17
|
+
className: "app-launcher__tile-badge",
|
|
18
|
+
children: l
|
|
19
|
+
})
|
|
20
|
+
}), /* @__PURE__ */ s("span", {
|
|
14
21
|
className: "app-launcher__tile-name",
|
|
15
22
|
children: t.name
|
|
16
|
-
}), l && /* @__PURE__ */ s(r, {
|
|
17
|
-
variant: t.disabled ? "neutral" : "info",
|
|
18
|
-
className: "app-launcher__tile-badge",
|
|
19
|
-
children: l
|
|
20
23
|
})] });
|
|
21
24
|
return t.disabled ? /* @__PURE__ */ s("span", {
|
|
22
25
|
className: "app-launcher__tile app-launcher__tile--disabled",
|