@studiolxd/brand 47.0.0 → 47.1.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 +42 -0
- package/dist/_types/molecules/EmptyState/EmptyState.d.ts +2 -0
- package/dist/_types/molecules/PageIntro/PageIntro.d.ts +12 -7
- package/dist/_types/sections/Hero/Hero.d.ts +4 -1
- package/dist/brand.css +12 -2
- package/dist/link.css +1 -1
- package/dist/page-intro.css +1 -1
- package/dist/page-intro.js +23 -17
- package/dist/tokens.css +2 -2
- package/package.json +1 -1
- package/src/tokens/molecules/page-intro.css +1 -1
- package/src/tokens/scss/molecules/_page-intro.scss +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,48 @@ 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
|
+
## [47.1.0] — 2026-09-15
|
|
11
|
+
|
|
12
|
+
> **Minor.** La norma de puntuación de subtítulos y estados vacíos, fijada por escrito en
|
|
13
|
+
> Foundations → Redacción, con el JSDoc de `Hero`, `PageIntro` y `EmptyState` remitiendo a
|
|
14
|
+
> ella. Documentación y ejemplos, sin cambios de comportamiento ni de CSS de por sí — salvo
|
|
15
|
+
> el `fix` suelto que viaja en la misma release: un `Link` dejaba de medir su texto al ser
|
|
16
|
+
> ítem directo de un `Stack align="stretch"`.
|
|
17
|
+
|
|
18
|
+
### `PageIntro` gana `eyebrow`: la ranura encima del título
|
|
19
|
+
|
|
20
|
+
Prop nueva, `eyebrow?: ReactNode`: lo que va **encima** del título —una `Tag` de estado,
|
|
21
|
+
una categoría, un `Breadcrumb` corto—, nunca un subtítulo ni una frase larga (para eso
|
|
22
|
+
sigue estando `description`). Con `actions`, el eyebrow se queda en la **columna del
|
|
23
|
+
título**, nunca en la de las acciones: el título y las acciones pasan a compartir fila
|
|
24
|
+
dentro de una nueva `.page-intro__title-group` que agrupa eyebrow y título, y las reglas
|
|
25
|
+
de la fila (ancho flexible, línea base, aire bajo el bloque) se mueven de `.heading` a
|
|
26
|
+
ese grupo. El hueco entre eyebrow y título es `--page-intro-row-gap`, el mismo que ya
|
|
27
|
+
separaba el título de las acciones apiladas — ningún token nuevo. Sin `eyebrow`, el
|
|
28
|
+
marcado es exactamente el de siempre. Story «Con eyebrow» y su test de contrato en
|
|
29
|
+
`Molecules/PageIntro`.
|
|
30
|
+
|
|
31
|
+
### Redacción: subtítulo y estado vacío terminan en punto
|
|
32
|
+
|
|
33
|
+
Página nueva, `Foundations/Redacción`: todo subtítulo (`Hero.description`,
|
|
34
|
+
`PageIntro.description`) y toda `EmptyState.description` terminan en punto; el `title` de
|
|
35
|
+
`EmptyState`, los rótulos, los botones y los tags, no. Sin puntos suspensivos ni
|
|
36
|
+
exclamación; el signo de interrogación solo si la frase es una pregunta de verdad. El
|
|
37
|
+
JSDoc de las tres props afectadas remite a la página. `dataTable.empty` del catálogo de
|
|
38
|
+
Storybook (`.storybook/brandMessagesFixture.ts`) llevaba un punto de más: alimenta el
|
|
39
|
+
`title` de `EmptyState` dentro de `DataTable`, y un título no lleva punto.
|
|
40
|
+
|
|
41
|
+
### Fix: un `Link` directo de un `Stack align="stretch"` no se estira
|
|
42
|
+
|
|
43
|
+
`Link` fijaba su color, su subrayado y su relleno pero no su ancho: como ítem de un flex en
|
|
44
|
+
columna con `align-items: stretch`, ocupaba todo el ancho del `Stack` y la línea de su
|
|
45
|
+
subrayado cruzaba la página entera —el caso de un «← Volver» sobre un `PageIntro`—. Ahora
|
|
46
|
+
`inline-size: fit-content` en la cara base del enlace (`a:not(.button)`, `.link`): su caja
|
|
47
|
+
vuelve a ser la de su texto, sin tocar el enlace suelto en un párrafo (donde `width` no
|
|
48
|
+
aplica a una caja `inline`) ni el centrado vertical de `Inline` (`align-items: center`),
|
|
49
|
+
que un `align-self` habría descuadrado. Story «El enlace dentro de una columna» en
|
|
50
|
+
`Atoms/Link`, con su test de contrato.
|
|
51
|
+
|
|
10
52
|
## [47.0.0] — 2026-09-15
|
|
11
53
|
|
|
12
54
|
> **Major.** Octava familia al proveedor de textos: el cromo de aplicación y la navegación.
|
|
@@ -5,7 +5,9 @@ export interface EmptyStateAction {
|
|
|
5
5
|
href?: string;
|
|
6
6
|
}
|
|
7
7
|
export interface EmptyStateProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
8
|
+
/** El rótulo del estado: sin punto (ver Foundations → Redacción). */
|
|
8
9
|
title: string;
|
|
10
|
+
/** La frase que lo explica, opcional: termina en punto (ver Foundations → Redacción). */
|
|
9
11
|
description?: string;
|
|
10
12
|
icon?: React.ReactNode;
|
|
11
13
|
action?: EmptyStateAction;
|
|
@@ -2,16 +2,21 @@ import type { ReactNode } from 'react';
|
|
|
2
2
|
import { type HeadingProps } from '../../atoms/Heading/Heading';
|
|
3
3
|
import './PageIntro.css';
|
|
4
4
|
export interface PageIntroProps {
|
|
5
|
+
/**
|
|
6
|
+
* Encima del título: una `Tag` de estado, una categoría, un `Breadcrumb`
|
|
7
|
+
* corto. No es un subtítulo ni acepta una frase larga —para eso está
|
|
8
|
+
* `description`—, es una pieza pequeña que sitúa la página antes de
|
|
9
|
+
* nombrarla. Con `actions`, queda en la columna del título, nunca en la
|
|
10
|
+
* de las acciones.
|
|
11
|
+
*/
|
|
12
|
+
eyebrow?: ReactNode;
|
|
5
13
|
/** El título de la página: un `Heading` de nivel 1 (o el que diga `level`). */
|
|
6
14
|
title: ReactNode;
|
|
7
15
|
/**
|
|
8
16
|
* La frase bajo el título, opcional: va como entradilla (`Paragraph
|
|
9
|
-
* size="large"`, un peldaño por encima del cuerpo).
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* le toque—: no es un rótulo ni un subtítulo. Sin el punto, el párrafo se
|
|
13
|
-
* lee como un `Heading` menor y la jerarquía de la cabecera se deshace. Lo
|
|
14
|
-
* que no llegue a frase o cabe en el título, o va en `children`.
|
|
17
|
+
* size="large"`, un peldaño por encima del cuerpo). Termina en punto (ver
|
|
18
|
+
* Foundations → Redacción). Lo que no llegue a frase, o cabe en el título,
|
|
19
|
+
* o va en `children`.
|
|
15
20
|
*/
|
|
16
21
|
description?: ReactNode;
|
|
17
22
|
/** Más texto bajo la frase (otro `Paragraph`, una lista…): mismo aire. */
|
|
@@ -45,4 +50,4 @@ export interface PageIntroProps {
|
|
|
45
50
|
* Con `actions` sirve además de cabecera de una sección dentro de la página
|
|
46
51
|
* (`level={2}`): el título a la izquierda y la acción principal a la derecha.
|
|
47
52
|
*/
|
|
48
|
-
export declare function PageIntro({ title, description, actions, level, size, as: Tag, className, children, }: PageIntroProps): import("react/jsx-runtime").JSX.Element;
|
|
53
|
+
export declare function PageIntro({ eyebrow, title, description, actions, level, size, as: Tag, className, children, }: PageIntroProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -4,7 +4,10 @@ import './Hero.css';
|
|
|
4
4
|
export interface HeroProps {
|
|
5
5
|
/** El título de la portada: un `Heading` de nivel 1 a talla 10 (display). */
|
|
6
6
|
title: ReactNode;
|
|
7
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* La frase bajo el título, opcional: `Paragraph size="large"`. Termina en
|
|
9
|
+
* punto (ver Foundations → Redacción).
|
|
10
|
+
*/
|
|
8
11
|
description?: ReactNode;
|
|
9
12
|
/** Uno o varios botones (`Button`), en fila con envoltura (`Inline`), bajo el texto. Van a talla `lg`: la escala del Hero lo pide, y el consumidor no tiene que acordarse de pasarla. */
|
|
10
13
|
actions?: ReactNode;
|