@studiolxd/brand 46.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 +176 -0
- package/dist/_shared/portal-container.js +9 -0
- package/dist/_types/atoms/AsyncMultiSelect/AsyncMultiSelect.d.ts +8 -7
- package/dist/_types/atoms/AsyncSelect/AsyncSelect.d.ts +8 -6
- package/dist/_types/atoms/InputPhone/InputPhone.d.ts +8 -5
- package/dist/_types/atoms/MenuButton/MenuButton.d.ts +22 -2
- package/dist/_types/atoms/MultiSelect/MultiSelect.d.ts +8 -6
- package/dist/_types/atoms/Popover/Popover.d.ts +8 -1
- package/dist/_types/atoms/Select/Select.d.ts +8 -7
- package/dist/_types/atoms/Tooltip/Tooltip.d.ts +7 -0
- package/dist/_types/constants/portal-container.d.ts +42 -0
- package/dist/_types/messages/BrandMessages.d.ts +29 -1
- package/dist/_types/messages/index.d.ts +1 -1
- package/dist/_types/molecules/Breadcrumb/Breadcrumb.d.ts +10 -2
- package/dist/_types/molecules/EmptyState/EmptyState.d.ts +2 -0
- package/dist/_types/molecules/Menu/Menu.d.ts +8 -1
- package/dist/_types/molecules/Modal/Modal.d.ts +8 -6
- package/dist/_types/molecules/OrgSwitcher/OrgSwitcher.d.ts +15 -1
- package/dist/_types/molecules/PageIntro/PageIntro.d.ts +12 -7
- package/dist/_types/molecules/PrevNextNav/PrevNextNav.d.ts +17 -2
- package/dist/_types/molecules/Sheet/Sheet.d.ts +8 -7
- package/dist/_types/molecules/SidebarNav/SidebarNav.d.ts +18 -3
- package/dist/_types/molecules/SiteNav/SiteNav.d.ts +9 -0
- package/dist/_types/molecules/TableOfContents/TableOfContents.d.ts +11 -2
- package/dist/_types/molecules/UserMenu/UserMenu.d.ts +16 -1
- package/dist/_types/sections/AppHeader/AppHeader.d.ts +8 -2
- package/dist/_types/sections/AppRoot/AppRoot.d.ts +12 -1
- package/dist/_types/sections/AppShell/AppShell.d.ts +14 -1
- package/dist/_types/sections/Hero/Hero.d.ts +4 -1
- package/dist/_types/sections/Sidebar/Sidebar.d.ts +27 -3
- package/dist/_types/sections/SiteHeader/SiteHeader.d.ts +22 -3
- package/dist/_types/sections/SiteShell/SiteShell.d.ts +11 -5
- package/dist/_types/templates/OnboardingShell/OnboardingShell.d.ts +19 -2
- package/dist/_types/templates/PublicPageShell/PublicPageShell.d.ts +42 -6
- package/dist/app-header.js +1 -1
- package/dist/app-launcher.js +62 -58
- package/dist/app-root.js +10 -8
- package/dist/app-shell.js +51 -50
- package/dist/async-multi-select.js +65 -64
- package/dist/async-select.js +49 -48
- package/dist/brand.css +12 -2
- package/dist/breadcrumb.js +24 -21
- package/dist/input-phone.js +38 -37
- package/dist/link.css +1 -1
- package/dist/menu-button.js +16 -14
- package/dist/menu.js +44 -40
- package/dist/modal.js +32 -31
- package/dist/multi-select.js +106 -105
- package/dist/onboarding-shell.js +36 -35
- package/dist/org-switcher.js +64 -59
- package/dist/page-intro.css +1 -1
- package/dist/page-intro.js +23 -17
- package/dist/popover.js +27 -22
- package/dist/prev-next-nav.js +38 -36
- package/dist/public-page-shell.js +24 -20
- package/dist/select.js +70 -69
- package/dist/sheet.js +30 -29
- package/dist/sidebar-nav.js +91 -90
- package/dist/sidebar.js +72 -71
- package/dist/site-header.js +44 -43
- package/dist/site-nav.js +27 -25
- package/dist/site-shell.js +23 -15
- package/dist/table-of-contents.js +30 -27
- package/dist/toaster.js +57 -53
- package/dist/tokens.css +2 -2
- package/dist/tooltip.js +45 -41
- package/dist/user-menu.js +58 -52
- package/package.json +1 -1
- package/src/tokens/molecules/page-intro.css +1 -1
- package/src/tokens/scss/molecules/_page-intro.scss +1 -1
|
@@ -16,10 +16,14 @@ export interface PrevNextNavProps {
|
|
|
16
16
|
/**
|
|
17
17
|
* Rótulo del control anterior. Sin `prevTitle` es el `aria-label` del
|
|
18
18
|
* chevron; con `prevTitle` es el rótulo **visible** que lo encabeza.
|
|
19
|
-
*
|
|
19
|
+
* **Sin default**: sin él, sale de `prevNextNav.previous` del
|
|
20
|
+
* `BrandMessagesProvider`.
|
|
20
21
|
*/
|
|
21
22
|
prevLabel?: string;
|
|
22
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* Rótulo del control siguiente. Mismo contrato que `prevLabel`. **Sin
|
|
25
|
+
* default**: sale de `prevNextNav.next`.
|
|
26
|
+
*/
|
|
23
27
|
nextLabel?: string;
|
|
24
28
|
/**
|
|
25
29
|
* Título visible del destino anterior (el de la página, el capítulo…). Con
|
|
@@ -47,4 +51,15 @@ export interface PrevNextNavProps {
|
|
|
47
51
|
/** Variante de densidad. Default: "md" */
|
|
48
52
|
size?: 'sm' | 'md';
|
|
49
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Los dos textos del par, y los dos son **cromo**: «anterior» y «siguiente»
|
|
56
|
+
* dicen la dirección, no el destino. El destino —`prevTitle`, `nextTitle`, el
|
|
57
|
+
* rótulo del medio— es **contenido** y lo escribe la página.
|
|
58
|
+
*/
|
|
59
|
+
export interface PrevNextNavMessages {
|
|
60
|
+
/** Rótulo del control anterior. */
|
|
61
|
+
previous: string;
|
|
62
|
+
/** Rótulo del control siguiente. */
|
|
63
|
+
next: string;
|
|
64
|
+
}
|
|
50
65
|
export declare function PrevNextNav({ prevHref, nextHref, prevOnClick, nextOnClick, prevLabel, nextLabel, prevTitle, nextTitle, label, labelId, linkComponent, size, }: PrevNextNavProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -39,13 +39,14 @@ export interface SheetProps extends Omit<React.ComponentPropsWithoutRef<'div'>,
|
|
|
39
39
|
/** Elemento que abre el panel. Sin él, la apertura la controla el consumidor. */
|
|
40
40
|
trigger?: ReactNode;
|
|
41
41
|
/**
|
|
42
|
-
* Nodo DOM donde montar el portal del panel (reenviado a Base UI
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
42
|
+
* Nodo DOM donde montar el portal del panel (reenviado a Base UI `Portal.container`).
|
|
43
|
+
* Por defecto, el nodo de la superficie que llegue por contexto:
|
|
44
|
+
* `SiteShell` publica el suyo, de modo que la capa hereda la talla de la
|
|
45
|
+
* superficie pública en vez de abrirse a la de aplicación. Si no hay
|
|
46
|
+
* superficie, `document.body` — que ya hereda el tema activado en la raíz
|
|
47
|
+
* (`html.dark`/`[data-theme="dark"]`) sin configuración adicional. Pásalo
|
|
48
|
+
* solo para llevar la capa a otro sitio: un `.surface-dark` **anidado**, el
|
|
49
|
+
* cajón de un shell propio. Gana siempre.
|
|
49
50
|
*/
|
|
50
51
|
container?: React.ComponentPropsWithoutRef<typeof Dialog.Portal>['container'];
|
|
51
52
|
/**
|
|
@@ -41,11 +41,14 @@ export type SidebarNavRenderLinkProps = React.AnchorHTMLAttributes<HTMLAnchorEle
|
|
|
41
41
|
'aria-current'?: 'page';
|
|
42
42
|
};
|
|
43
43
|
export interface SidebarNavProps {
|
|
44
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Nombre accesible del `nav`. **Sin default**: sin él, sale de
|
|
46
|
+
* `sidebarNav.label` del `BrandMessagesProvider`.
|
|
47
|
+
*/
|
|
45
48
|
label?: string;
|
|
46
49
|
/**
|
|
47
|
-
* Marca de las entradas vacías (`empty`).
|
|
48
|
-
*
|
|
50
|
+
* Marca de las entradas vacías (`empty`). **Sin default**: sale de
|
|
51
|
+
* `sidebarNav.empty`. Solo se lee cuando hay alguna entrada vacía.
|
|
49
52
|
*/
|
|
50
53
|
emptyLabel?: string;
|
|
51
54
|
/** Solo iconos: los enlaces con tooltip, los grupos como menú. Sin él, lo decide la `Sidebar` (rail). */
|
|
@@ -56,4 +59,16 @@ export interface SidebarNavProps {
|
|
|
56
59
|
onValueChange?: (value: string[]) => void;
|
|
57
60
|
renderLink?: (props: SidebarNavRenderLinkProps) => ReactNode;
|
|
58
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Los dos textos de la navegación, los dos **cromo**: el nombre de la región
|
|
64
|
+
* («Principal», el mismo en toda la suite) y la marca que se pone a una entrada
|
|
65
|
+
* sin contenido. Los rótulos de las entradas son **contenido** y siguen
|
|
66
|
+
* viniendo en `entries`.
|
|
67
|
+
*/
|
|
68
|
+
export interface SidebarNavMessages {
|
|
69
|
+
/** Nombre accesible del `nav`. */
|
|
70
|
+
label: string;
|
|
71
|
+
/** Marca de las entradas sin contenido. */
|
|
72
|
+
empty: string;
|
|
73
|
+
}
|
|
59
74
|
export declare function SidebarNav({ label, emptyLabel, rail, entries, defaultValue, value, onValueChange, renderLink, }: SidebarNavProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -49,4 +49,13 @@ export interface SiteNavProps {
|
|
|
49
49
|
* `style-src 'self'` descarta el atributo sin avisar y el grupo de más caía
|
|
50
50
|
* a la segunda fila.
|
|
51
51
|
*/
|
|
52
|
+
/**
|
|
53
|
+
* El único texto que el índice dice por su cuenta, y es **cromo**: el nombre de
|
|
54
|
+
* la región de navegación. Los grupos y sus enlaces son **contenido** y vienen
|
|
55
|
+
* en `groups`.
|
|
56
|
+
*/
|
|
57
|
+
export interface SiteNavMessages {
|
|
58
|
+
/** Nombre accesible del `nav`. */
|
|
59
|
+
label: string;
|
|
60
|
+
}
|
|
52
61
|
export declare function SiteNav({ groups, label, renderLink, className, }: SiteNavProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -17,8 +17,8 @@ export interface TableOfContentsProps extends Omit<React.ComponentPropsWithoutRe
|
|
|
17
17
|
*/
|
|
18
18
|
activeId?: string;
|
|
19
19
|
/**
|
|
20
|
-
* Nombre accesible del `nav`.
|
|
21
|
-
*
|
|
20
|
+
* Nombre accesible del `nav`. **Sin default**: sin él, sale de
|
|
21
|
+
* `tableOfContents.label` del `BrandMessagesProvider`.
|
|
22
22
|
*/
|
|
23
23
|
ariaLabel?: string;
|
|
24
24
|
/** Rótulo visible sobre la lista. Sin él, no se pinta ninguno. */
|
|
@@ -46,4 +46,13 @@ export interface TableOfContentsProps extends Omit<React.ComponentPropsWithoutRe
|
|
|
46
46
|
* `{...rest}` (`id`, `data-*`, `role`…) se reenvía al `<nav>`. El nombre
|
|
47
47
|
* accesible sigue siendo `ariaLabel`.
|
|
48
48
|
*/
|
|
49
|
+
/**
|
|
50
|
+
* El único texto que el índice dice por su cuenta, y es **cromo**: «En esta
|
|
51
|
+
* página» nombra la región, no la página. El rótulo visible (`title`) y los
|
|
52
|
+
* encabezados (`items`) son **contenido**.
|
|
53
|
+
*/
|
|
54
|
+
export interface TableOfContentsMessages {
|
|
55
|
+
/** Nombre accesible del `nav`. */
|
|
56
|
+
label: string;
|
|
57
|
+
}
|
|
49
58
|
export declare const TableOfContents: import("react").ForwardRefExoticComponent<TableOfContentsProps & import("react").RefAttributes<HTMLElement>>;
|
|
@@ -1,11 +1,26 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
2
|
import type { MenuItem, MenuRenderLinkProps } from '../Menu/Menu';
|
|
3
3
|
import './UserMenu.css';
|
|
4
|
+
/**
|
|
5
|
+
* Lo que el menú de cuenta dice por su cuenta, y es **cromo**: cómo se nombra
|
|
6
|
+
* su botón y cómo se cuentan las notificaciones sin leer. Los dos interpolan un
|
|
7
|
+
* dato —el nombre, el número—, así que son funciones. El nombre, el correo y
|
|
8
|
+
* los ítems son **contenido** y siguen viniendo por props.
|
|
9
|
+
*/
|
|
10
|
+
export interface UserMenuMessages {
|
|
11
|
+
/** Nombre accesible del botón, a partir del nombre del usuario. */
|
|
12
|
+
trigger: (name: string) => string;
|
|
13
|
+
/** Nombre accesible del contador de notificaciones sin leer. */
|
|
14
|
+
unread: (count: number) => string;
|
|
15
|
+
}
|
|
4
16
|
export interface UserMenuProps {
|
|
5
17
|
name: string;
|
|
6
18
|
email: string;
|
|
7
19
|
avatarUrl?: string;
|
|
8
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Nombre accesible del botón. **Sin default**: sin él, sale de
|
|
22
|
+
* `userMenu.trigger` del `BrandMessagesProvider`, que recibe el nombre.
|
|
23
|
+
*/
|
|
9
24
|
label?: string;
|
|
10
25
|
/** Sin nombre — avatar, badge y chevron: para la barra del AppHeader. El nombre sigue en el panel y en el nombre accesible. */
|
|
11
26
|
compact?: boolean;
|
|
@@ -7,9 +7,15 @@ export interface AppHeaderProps {
|
|
|
7
7
|
notifications?: ReactNode;
|
|
8
8
|
/** Al final, siempre: el `UserMenu` (compacto). */
|
|
9
9
|
end?: ReactNode;
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Texto accesible del botón de menú. **Reenvío puro** al `MenuButton`: sin
|
|
12
|
+
* él, el botón lee `menuButton.open` del `BrandMessagesProvider`.
|
|
13
|
+
*/
|
|
11
14
|
menuLabel?: string;
|
|
12
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* Texto accesible del botón con la sidebar abierta. **Reenvío puro** al
|
|
17
|
+
* `MenuButton`: sin él, lee `menuButton.close`.
|
|
18
|
+
*/
|
|
13
19
|
menuCloseLabel?: string;
|
|
14
20
|
/** id de la sidebar que gobierna el botón (`aria-controls`). */
|
|
15
21
|
sidebarId?: string;
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* El único texto de la raíz, y es **cromo**: el enlace de salto al contenido
|
|
4
|
+
* dice lo mismo en todo el documento y en todos los productos.
|
|
5
|
+
*/
|
|
6
|
+
export interface AppRootMessages {
|
|
3
7
|
/** Texto del enlace de salto al contenido. */
|
|
8
|
+
skipToContent: string;
|
|
9
|
+
}
|
|
10
|
+
export interface AppRootProps {
|
|
11
|
+
/**
|
|
12
|
+
* Texto del enlace de salto al contenido. **Sin default**: sin él, sale de
|
|
13
|
+
* `appRoot.skipToContent` del `BrandMessagesProvider`.
|
|
14
|
+
*/
|
|
4
15
|
skipLabel?: string;
|
|
5
16
|
/** Destino del salto: el `id` del contenido principal de la página. */
|
|
6
17
|
skipHref?: string;
|
|
@@ -17,9 +17,22 @@ export interface AppShellProps {
|
|
|
17
17
|
/** Ancho inicial de la sidebar desplegada (px). Sin él, el token `sidebar.width`. */
|
|
18
18
|
defaultSidebarWidth?: number;
|
|
19
19
|
onSidebarWidthChange?: (width: number) => void;
|
|
20
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Texto del enlace de salto al contenido (`SkipLink`). **Sin default**: sin
|
|
22
|
+
* él, sale de `appShell.skipToContent` del `BrandMessagesProvider`.
|
|
23
|
+
*/
|
|
21
24
|
skipLabel?: string;
|
|
22
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* El único texto que el armazón dice por su cuenta, y es **cromo**: el enlace
|
|
28
|
+
* de salto al contenido dice lo mismo en todas las pantallas de todas las
|
|
29
|
+
* aplicaciones. Lo que hay dentro del armazón —la barra, la navegación, la
|
|
30
|
+
* página— lo escribe el producto.
|
|
31
|
+
*/
|
|
32
|
+
export interface AppShellMessages {
|
|
33
|
+
/** Texto del enlace de salto al contenido. */
|
|
34
|
+
skipToContent: string;
|
|
35
|
+
}
|
|
23
36
|
/**
|
|
24
37
|
* El armazón de una aplicación: barra superior, barra lateral y contenido.
|
|
25
38
|
* Lleva el estado de la sidebar (abierta, rail o cerrada; su ancho) y lo
|
|
@@ -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;
|
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
2
|
import './Sidebar.css';
|
|
3
3
|
export { useSidebar } from './SidebarContext';
|
|
4
|
+
/**
|
|
5
|
+
* Lo que la barra dice por su cuenta, y todo es **cromo**: su nombre de región,
|
|
6
|
+
* el nombre del asa que la ensancha y cómo se lee su ancho. Ninguno depende de
|
|
7
|
+
* qué haya dentro —eso lo escribe el producto en `children`—, así que los tres
|
|
8
|
+
* van al catálogo.
|
|
9
|
+
*/
|
|
10
|
+
export interface SidebarMessages {
|
|
11
|
+
/** Nombre accesible del `aside`. */
|
|
12
|
+
label: string;
|
|
13
|
+
/** Nombre accesible del asa de redimensión. */
|
|
14
|
+
resizer: string;
|
|
15
|
+
/** Valor hablado del asa: el ancho con su unidad. */
|
|
16
|
+
resizerValue: (width: number) => string;
|
|
17
|
+
}
|
|
4
18
|
export interface SidebarProps {
|
|
5
19
|
/** Arriba del todo (un `Logo`). */
|
|
6
20
|
logo?: ReactNode;
|
|
@@ -9,11 +23,21 @@ export interface SidebarProps {
|
|
|
9
23
|
/** Pie fijo, fuera del scroll del panel. */
|
|
10
24
|
footer?: ReactNode;
|
|
11
25
|
id?: string;
|
|
12
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* Nombre accesible del `aside`. **Sin default**: sin él, sale de
|
|
28
|
+
* `sidebar.label` del `BrandMessagesProvider`.
|
|
29
|
+
*/
|
|
13
30
|
label?: string;
|
|
14
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* Nombre accesible del asa de redimensión. **Sin default**: sale de
|
|
33
|
+
* `sidebar.resizer`. Solo se lee cuando el asa existe (escritorio, dentro de
|
|
34
|
+
* un `AppShell`, con la barra no cerrada).
|
|
35
|
+
*/
|
|
15
36
|
resizerLabel?: string;
|
|
16
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* Valor hablado del asa: el ancho con su unidad. **Sin default**: sale de
|
|
39
|
+
* `sidebar.resizerValue`. Interpola el ancho, así que es una función.
|
|
40
|
+
*/
|
|
17
41
|
resizerValueText?: (width: number) => string;
|
|
18
42
|
/** Fuerza el modo sin `AppShell` (Storybook, pruebas). Con shell, lo decide el shell. */
|
|
19
43
|
mode?: 'open' | 'rail';
|
|
@@ -11,11 +11,20 @@ export type SiteHeaderLogoLinkProps = {
|
|
|
11
11
|
export interface SiteHeaderProps {
|
|
12
12
|
/** Destino del logotipo. */
|
|
13
13
|
logoHref?: string;
|
|
14
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Texto accesible del enlace del logotipo. **Sin default**: sin él, sale de
|
|
16
|
+
* `siteHeader.logo` del `BrandMessagesProvider`.
|
|
17
|
+
*/
|
|
15
18
|
logoLabel?: string;
|
|
16
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* aria-label del botón de menú. **Reenvío puro** al `MenuButton`: sin él, el
|
|
21
|
+
* botón lee `menuButton.open`.
|
|
22
|
+
*/
|
|
17
23
|
menuLabel?: string;
|
|
18
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* aria-label del botón de menú abierto. **Reenvío puro** al `MenuButton`:
|
|
26
|
+
* sin él, lee `menuButton.close`.
|
|
27
|
+
*/
|
|
19
28
|
menuCloseLabel?: string;
|
|
20
29
|
/** La marca. Por defecto el `Logo` de Studio LXD a `logoSize`; un producto de la suite pone la suya. */
|
|
21
30
|
logo?: ReactNode;
|
|
@@ -55,4 +64,14 @@ export interface SiteHeaderProps {
|
|
|
55
64
|
* El enlace de salto al contenido no va aquí: lo pone `AppRoot`, una vez por
|
|
56
65
|
* documento.
|
|
57
66
|
*/
|
|
67
|
+
/**
|
|
68
|
+
* El único texto propio de la cabecera, y es **cromo**: qué hace el logotipo
|
|
69
|
+
* («ir al inicio»), no qué marca es. Lo que dice el botón de menú no se repite
|
|
70
|
+
* aquí —es un reenvío puro al `MenuButton`—, y los enlaces de `actions` y del
|
|
71
|
+
* panel son **contenido** del producto.
|
|
72
|
+
*/
|
|
73
|
+
export interface SiteHeaderMessages {
|
|
74
|
+
/** Texto accesible del enlace del logotipo. */
|
|
75
|
+
logo: string;
|
|
76
|
+
}
|
|
58
77
|
export declare function SiteHeader({ logoHref, logoLabel, menuLabel, menuCloseLabel, logoSize, logo, menuButtonSize, renderLogoLink, width, open, onOpenChange, children, settings, panelId, actions, language, }: SiteHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -17,10 +17,16 @@ export interface SiteShellProps {
|
|
|
17
17
|
* Para las aplicaciones con barra y sidebar está `AppShell`.
|
|
18
18
|
*/
|
|
19
19
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
20
|
+
* **Los portales que se abran dentro heredan la superficie.** El shell publica
|
|
21
|
+
* su nodo raíz por `PortalContainerContext`, y todo componente con portal
|
|
22
|
+
* —`Select`, `MultiSelect`, `DatePicker`, `Popover`, `Tooltip`, `Menu`,
|
|
23
|
+
* `Modal`, `Sheet`, `Toaster`…— lo toma como destino cuando no recibe
|
|
24
|
+
* `container`. Sin eso, la lista de un `Select` montaba en `document.body`,
|
|
25
|
+
* fuera de `.site-shell`, y se abría a la talla de aplicación mientras su
|
|
26
|
+
* campo iba a la pública. No hay nada que pasar en cada uso; la prop
|
|
27
|
+
* `container` sigue ahí para quien quiera otro destino y gana siempre.
|
|
28
|
+
*
|
|
29
|
+
* Reenvía además el `ref` al nodo raíz (`.site-shell`), para quien necesite
|
|
30
|
+
* apuntar ahí a mano.
|
|
25
31
|
*/
|
|
26
32
|
export declare const SiteShell: import("react").ForwardRefExoticComponent<SiteShellProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
@@ -29,7 +29,10 @@ export interface OnboardingShellProps {
|
|
|
29
29
|
* @deprecated Usa `preferences`.
|
|
30
30
|
*/
|
|
31
31
|
switchers?: ReactNode;
|
|
32
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* Nombre accesible de la banda de preferencias. **Reenvío puro** al
|
|
34
|
+
* `PublicPageShell`: sin él, la banda lee `publicPageShell.preferences`.
|
|
35
|
+
*/
|
|
33
36
|
preferencesLabel?: string;
|
|
34
37
|
/**
|
|
35
38
|
* El progreso: un `Stepper`. La ranura se monta siempre; es el `Stepper`
|
|
@@ -47,7 +50,11 @@ export interface OnboardingShellProps {
|
|
|
47
50
|
* escritorio, y debajo y centrada en móvil.
|
|
48
51
|
*/
|
|
49
52
|
exitAction?: ReactNode;
|
|
50
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* Nombre accesible del grupo de acciones del pie. **Sin default**: sin él,
|
|
55
|
+
* sale de `onboardingShell.actions` del `BrandMessagesProvider`. Solo se lee
|
|
56
|
+
* cuando el paso trae alguna acción.
|
|
57
|
+
*/
|
|
51
58
|
actionsLabel?: string;
|
|
52
59
|
/** `id` del `main` (`main-content` por defecto, destino del `SkipLink`). */
|
|
53
60
|
id?: string;
|
|
@@ -101,4 +108,14 @@ export interface OnboardingShellProps {
|
|
|
101
108
|
* dentro —un `Form`, un campo suelto, un `AvatarUpload`— sale a la talla que
|
|
102
109
|
* le toca sin que la aplicación tenga que acordarse de pedirla.
|
|
103
110
|
*/
|
|
111
|
+
/**
|
|
112
|
+
* El único texto propio de la plantilla, y es **cromo**: el nombre del grupo de
|
|
113
|
+
* acciones del pie. Lo que digan los botones —«Continuar», «Atrás», «Omitir por
|
|
114
|
+
* ahora»— es **contenido** y viene en las ranuras. El nombre de la banda de
|
|
115
|
+
* preferencias tampoco está aquí: es un reenvío puro al `PublicPageShell`.
|
|
116
|
+
*/
|
|
117
|
+
export interface OnboardingShellMessages {
|
|
118
|
+
/** Nombre accesible del grupo de acciones del pie. */
|
|
119
|
+
actions: string;
|
|
120
|
+
}
|
|
104
121
|
export declare function OnboardingShell({ children, brand, preferences, switchers, preferencesLabel, stepper, primaryAction, backAction, exitAction, actionsLabel, id, shell, width, className, }: OnboardingShellProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
|
+
import { type ContainerSpace, type ContainerWidth } from '../../atoms/Container/Container';
|
|
2
3
|
import './PublicPageShell.css';
|
|
3
4
|
export interface PublicPageShellProps {
|
|
4
5
|
/** El contenido de la página: lo que va dentro del `main`. */
|
|
@@ -19,8 +20,31 @@ export interface PublicPageShellProps {
|
|
|
19
20
|
* pie, igual que `header` y `footer`.
|
|
20
21
|
*/
|
|
21
22
|
preferences?: ReactNode;
|
|
22
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* Nombre accesible de la banda de preferencias. **Sin default**: sin él,
|
|
25
|
+
* sale de `publicPageShell.preferences` del `BrandMessagesProvider`. Solo se
|
|
26
|
+
* lee cuando hay banda.
|
|
27
|
+
*/
|
|
23
28
|
preferencesLabel?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Medida del contenido del `main`, tal cual la de `Container`. Por defecto
|
|
31
|
+
* `'xl'` (1280px), el ancho de las páginas públicas; `'full'` para que el
|
|
32
|
+
* contenido llegue tan lejos como la banda, que es lo que necesita una
|
|
33
|
+
* portada que abre con un `Hero` de lado a lado.
|
|
34
|
+
*/
|
|
35
|
+
mainWidth?: ContainerWidth;
|
|
36
|
+
/**
|
|
37
|
+
* Aire vertical del `main`. Por defecto `'xl'`, el de una página pública
|
|
38
|
+
* corriente; `'none'` cuando lo que va dentro son secciones que ya traen su
|
|
39
|
+
* propio aire (ver `Container` § «Las secciones traen su aire»).
|
|
40
|
+
*/
|
|
41
|
+
mainSpace?: ContainerSpace;
|
|
42
|
+
/**
|
|
43
|
+
* Quita el aire lateral del `main`, para contenido que debe tocar el borde
|
|
44
|
+
* de la pantalla. Por defecto `false`. Va con `mainWidth="full"`: sin él, el
|
|
45
|
+
* contenido seguiría acotado y solo se perdería el margen.
|
|
46
|
+
*/
|
|
47
|
+
mainFlush?: boolean;
|
|
24
48
|
/** `id` del `main` (`main-content` por defecto, destino del `SkipLink`). */
|
|
25
49
|
id?: string;
|
|
26
50
|
/**
|
|
@@ -50,10 +74,22 @@ export interface PublicPageShellProps {
|
|
|
50
74
|
* flotante abierto desde la página —`ConsentPreferences`, un `Modal`, un
|
|
51
75
|
* `Sheet`—: su portal monta por defecto en `document.body`, que no es
|
|
52
76
|
* descendiente de `.site-shell` y por tanto no hereda el remapeo de superficie
|
|
53
|
-
* pública. Apuntarlo al `main` no serviría: el `main` es un `Container`
|
|
54
|
-
* acotado y con su aire
|
|
55
|
-
* de contenido en vez de flotar sobre la página. Con `shell={false}`
|
|
56
|
-
* marco y el `ref` se queda sin asignar: ahí el contenedor es el
|
|
57
|
-
* la app.
|
|
77
|
+
* pública. Apuntarlo al `main` no serviría: el `main` es un `Container` —por
|
|
78
|
+
* defecto acotado y con su aire—, así que el panel quedaría metido dentro de
|
|
79
|
+
* la columna de contenido en vez de flotar sobre la página. Con `shell={false}`
|
|
80
|
+
* no hay marco y el `ref` se queda sin asignar: ahí el contenedor es el
|
|
81
|
+
* `AppShell` de la app.
|
|
82
|
+
*
|
|
83
|
+
* **El `main` lleva los mismos mandos que un `Container`** (`mainWidth`,
|
|
84
|
+
* `mainSpace`, `mainFlush`), con los defaults de siempre. Es lo que permite que
|
|
85
|
+
* una portada abra con un `Hero` de lado a lado sin salirse del marco.
|
|
58
86
|
*/
|
|
87
|
+
/**
|
|
88
|
+
* El único texto del marco, y es **cromo**: el nombre de la banda donde viven
|
|
89
|
+
* el idioma y el tema. Lo que se ponga dentro es **contenido**.
|
|
90
|
+
*/
|
|
91
|
+
export interface PublicPageShellMessages {
|
|
92
|
+
/** Nombre accesible de la banda de preferencias. */
|
|
93
|
+
preferences: string;
|
|
94
|
+
}
|
|
59
95
|
export declare const PublicPageShell: import("react").ForwardRefExoticComponent<PublicPageShellProps & import("react").RefAttributes<HTMLDivElement>>;
|
package/dist/app-header.js
CHANGED
|
@@ -5,7 +5,7 @@ import { t } from "./_shared/appshellcontext.js";
|
|
|
5
5
|
import { useContext as n, useState as r } from "react";
|
|
6
6
|
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
7
7
|
//#region src/stories/sections/AppHeader/AppHeader.tsx
|
|
8
|
-
function o({ start: o, notifications: s, end: c, menuLabel: l
|
|
8
|
+
function o({ start: o, notifications: s, end: c, menuLabel: l, menuCloseLabel: u, sidebarId: d }) {
|
|
9
9
|
let f = n(t), [p, m] = r(!1), h = f ? f.sidebar === "open" : p;
|
|
10
10
|
return /* @__PURE__ */ a("header", {
|
|
11
11
|
className: "app-header",
|