@studiolxd/brand 49.16.0 → 49.17.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 +27 -0
- package/dist/_types/atoms/EmbedFrame/EmbedFrame.d.ts +33 -0
- package/dist/_types/atoms/ScrollArea/ScrollArea.d.ts +9 -2
- package/dist/_types/atoms/Stack/Stack.d.ts +7 -1
- package/dist/_types/sections/AppShell/AppShell.d.ts +9 -1
- package/dist/app-shell.css +1 -1
- package/dist/app-shell.js +37 -37
- package/dist/embed-frame.css +1 -0
- package/dist/embed-frame.js +18 -0
- package/dist/scroll-area.css +1 -1
- package/dist/scroll-area.js +13 -9
- package/dist/stack.css +1 -1
- package/dist/stack.js +5 -4
- package/package.json +6 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,33 @@ 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.17.0] — 2026-10-03
|
|
11
|
+
|
|
12
|
+
> **Minor.** Componente nuevo: `EmbedFrame`, el marco embebido del sistema, y las tres
|
|
13
|
+
> props de alto que lo colocan sin CSS de consumidor.
|
|
14
|
+
|
|
15
|
+
### `EmbedFrame` — nuevo
|
|
16
|
+
|
|
17
|
+
- Pinta un `<iframe>` que **llena su contenedor**: todo el ancho y todo el alto, sin
|
|
18
|
+
borde ni fondo propios; el desplazamiento ocurre dentro del documento embebido. En
|
|
19
|
+
una columna flexible con alto toma el que dejan sus hermanos.
|
|
20
|
+
- `title` **obligatorio** (nombre accesible del marco), `src`, `ref` al `<iframe>`
|
|
21
|
+
(para `contentWindow` y `postMessage`) y los atributos nativos (`allow`, `sandbox`,
|
|
22
|
+
`loading`, `referrerPolicy`, `name`, `onLoad`, `srcDoc`…). No acepta `width`,
|
|
23
|
+
`height` ni `frameBorder`.
|
|
24
|
+
- `fill?: 'container' | 'viewport'` (por defecto `container`): con `viewport` mide el
|
|
25
|
+
alto de la ventana, para cuando no hay contenedor con alto.
|
|
26
|
+
- Sin tokens propios. Import: `@studiolxd/brand/embed-frame` (también en el barril).
|
|
27
|
+
|
|
28
|
+
### Props nuevas para ocupar el alto
|
|
29
|
+
|
|
30
|
+
- **`Stack fill`**: la pila ocupa el alto de su contenedor (`block-size: 100%`), y lo que
|
|
31
|
+
crece dentro se queda con lo que dejan las demás piezas.
|
|
32
|
+
- **`ScrollArea fill`**: el área ocupa el alto que dejan sus hermanos en una columna con
|
|
33
|
+
alto. Solo desde `md`; por debajo mide su contenido.
|
|
34
|
+
- **`AppShell contentFlush`**: el contenido principal a sangre, sin relleno de sección
|
|
35
|
+
(respeta la zona segura del dispositivo). Story nueva «Contenido a sangre».
|
|
36
|
+
|
|
10
37
|
## [49.16.0] — 2026-10-02
|
|
11
38
|
|
|
12
39
|
> **Minor.** Los iconos, en una sola familia de tamaño y trazo: todo glifo cabe en el
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import './EmbedFrame.css';
|
|
2
|
+
export interface EmbedFrameProps extends Omit<React.ComponentPropsWithoutRef<'iframe'>, 'title' | 'width' | 'height' | 'frameBorder'> {
|
|
3
|
+
/**
|
|
4
|
+
* Nombre accesible del marco: lo que anuncia el lector de pantalla al entrar
|
|
5
|
+
* en él. Obligatorio — un `<iframe>` sin título es un hueco sin nombre.
|
|
6
|
+
*/
|
|
7
|
+
title: string;
|
|
8
|
+
/** Dirección del documento que se pinta dentro. */
|
|
9
|
+
src?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Qué alto llena. `container` (por defecto): el de la caja que le dan.
|
|
12
|
+
* `viewport`: el de la ventana, para cuando el marco no tiene un contenedor
|
|
13
|
+
* con alto —solo en la página, o como celda de `Columns`—.
|
|
14
|
+
*/
|
|
15
|
+
fill?: 'container' | 'viewport';
|
|
16
|
+
/** Se añade DESPUÉS de las clases propias. */
|
|
17
|
+
className?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Un documento dentro de la página: el `<iframe>` del sistema. Ocupa todo el
|
|
21
|
+
* ancho y todo el alto de su contenedor, sin borde ni fondo propios, y el
|
|
22
|
+
* desplazamiento ocurre dentro del documento embebido, no en la página.
|
|
23
|
+
*
|
|
24
|
+
* **El alto lo pone el contenedor**: el marco llena la caja que le dan. Dentro
|
|
25
|
+
* de `AppShell` esa caja es el contenido principal, que ya mide el resto de la
|
|
26
|
+
* ventana bajo la cabecera y junto a la barra lateral. Sin contenedor con alto,
|
|
27
|
+
* `fill="viewport"` le da el de la ventana.
|
|
28
|
+
*
|
|
29
|
+
* `ref` apunta al `<iframe>` —de ahí sale `contentWindow` para `postMessage`—
|
|
30
|
+
* y `{...rest}` (`allow`, `sandbox`, `loading`, `referrerPolicy`, `name`,
|
|
31
|
+
* `onLoad`, `aria-*`, `data-*`…) se reenvía tal cual.
|
|
32
|
+
*/
|
|
33
|
+
export declare const EmbedFrame: import("react").ForwardRefExoticComponent<EmbedFrameProps & import("react").RefAttributes<HTMLIFrameElement>>;
|
|
@@ -12,6 +12,13 @@ export interface ScrollAreaProps extends Omit<React.ComponentPropsWithoutRef<typ
|
|
|
12
12
|
* que decir de qué es; sin él el lector solo anuncia «región desplazable».
|
|
13
13
|
*/
|
|
14
14
|
label?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Ocupa el alto que dejan sus hermanos en una columna con alto (`Stack fill`,
|
|
17
|
+
* la celda estirada de `Columns`), en vez de medirlo quien lo usa. Desde
|
|
18
|
+
* `md`; por debajo mide su contenido, porque ahí la columna ya no tiene alto
|
|
19
|
+
* propio (en móvil `Columns` apila).
|
|
20
|
+
*/
|
|
21
|
+
fill?: boolean;
|
|
15
22
|
children: ReactNode;
|
|
16
23
|
/** Se añade DESPUÉS de las clases propias. */
|
|
17
24
|
className?: string;
|
|
@@ -21,8 +28,8 @@ export interface ScrollAreaProps extends Omit<React.ComponentPropsWithoutRef<typ
|
|
|
21
28
|
* Area): la lista de un panel lateral, el resultado largo de una consulta, el
|
|
22
29
|
* lienzo de un editor.
|
|
23
30
|
*
|
|
24
|
-
* **El alto lo pone quien lo usa** (`className
|
|
25
|
-
* no decide cuánto mide el hueco, solo cómo se desplaza dentro.
|
|
31
|
+
* **El alto lo pone quien lo usa** (`className`, el contenedor o `fill`): el
|
|
32
|
+
* componente no decide cuánto mide el hueco, solo cómo se desplaza dentro.
|
|
26
33
|
*
|
|
27
34
|
* Base UI hace la zona alcanzable con el teclado cuando de verdad hay
|
|
28
35
|
* desplazamiento, y la barra aparece al usarla.
|
|
@@ -23,6 +23,12 @@ export interface StackProps extends React.ComponentPropsWithoutRef<'div'> {
|
|
|
23
23
|
* (un enlace de vuelta sobre la cabecera).
|
|
24
24
|
*/
|
|
25
25
|
mobileOrder?: 'normal' | 'reverse';
|
|
26
|
+
/**
|
|
27
|
+
* Ocupa el alto de su contenedor. Con él, la pila es una columna con alto y
|
|
28
|
+
* una pieza que crece (`EmbedFrame`, `ScrollArea fill`) se queda con lo que
|
|
29
|
+
* dejan las demás. Para la raíz del contenido de `AppShell`.
|
|
30
|
+
*/
|
|
31
|
+
fill?: boolean;
|
|
26
32
|
children: ReactNode;
|
|
27
33
|
/** Se añade DESPUÉS de las clases propias. */
|
|
28
34
|
className?: string;
|
|
@@ -36,4 +42,4 @@ export interface StackProps extends React.ComponentPropsWithoutRef<'div'> {
|
|
|
36
42
|
* pila puede ser el grupo con nombre accesible que pide un formulario sin
|
|
37
43
|
* tener que envolverla en un elemento nativo aparte.
|
|
38
44
|
*/
|
|
39
|
-
export declare function Stack({ gap, align, mobileOrder, children, className, ...rest }: StackProps): import("react/jsx-runtime").JSX.Element;
|
|
45
|
+
export declare function Stack({ gap, align, mobileOrder, fill, children, className, ...rest }: StackProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -20,6 +20,14 @@ export interface AppShellProps {
|
|
|
20
20
|
/** La barra lateral: un `Sidebar`. Columna en escritorio, cajón en móvil. */
|
|
21
21
|
sidebar: ReactNode;
|
|
22
22
|
children: ReactNode;
|
|
23
|
+
/**
|
|
24
|
+
* Contenido a sangre: sin el relleno de sección del contenido principal, que
|
|
25
|
+
* llega al borde de la cabecera y de la sidebar. Para lo que trae sus propios
|
|
26
|
+
* márgenes —un `EmbedFrame` con el reproductor de un curso, cuyos márgenes
|
|
27
|
+
* son del tema del curso y no del armazón—. Respeta la zona segura del
|
|
28
|
+
* dispositivo.
|
|
29
|
+
*/
|
|
30
|
+
contentFlush?: boolean;
|
|
23
31
|
/** Estado inicial de la sidebar en escritorio (en móvil siempre arranca cerrada). */
|
|
24
32
|
defaultSidebar?: SidebarState;
|
|
25
33
|
/** Estado controlado de la sidebar en escritorio. */
|
|
@@ -51,4 +59,4 @@ export interface AppShellMessages {
|
|
|
51
59
|
* modo y su asa) y `SidebarNav` (rail). Persistir el estado es del producto:
|
|
52
60
|
* `onSidebarChange` / `onSidebarWidthChange` avisan de cada cambio.
|
|
53
61
|
*/
|
|
54
|
-
export declare function AppShell({ banner, header, sidebar, children, defaultSidebar, sidebarState, onSidebarChange, defaultSidebarWidth, onSidebarWidthChange, skipLabel, }: AppShellProps): import("react/jsx-runtime").JSX.Element;
|
|
62
|
+
export declare function AppShell({ banner, header, sidebar, children, contentFlush, defaultSidebar, sidebarState, onSidebarChange, defaultSidebarWidth, onSidebarWidthChange, skipLabel, }: AppShellProps): import("react/jsx-runtime").JSX.Element;
|
package/dist/app-shell.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.app-shell{--app-shell-sidebar-width:var(--sidebar-width);--app-shell-banner-height:0px;--app-shell-chrome-block-start:calc(var(--app-shell-banner-height) + var(--app-header-height) + env(safe-area-inset-top));flex-direction:column;block-size:100dvh;display:flex;overflow:clip}.app-shell__banner{flex-shrink:0}.app-shell__body{flex:1;min-block-size:0;display:flex;position:relative}.app-shell__content{min-inline-size:0;padding-inline:var(--section-padding-inline);padding-block:var(--section-padding-block-lg);flex:1;padding-block-end:max(var(--section-padding-block-lg), env(safe-area-inset-bottom));padding-inline-end:max(var(--section-padding-inline), env(safe-area-inset-right));overflow:auto}.app-shell__backdrop{inset:0;background-color:var(--sidebar-backdrop-bg);opacity:var(--sidebar-backdrop-opacity);z-index:var(--sidebar-backdrop-z-index);position:fixed;inset-block-start:var(--app-shell-chrome-block-start)}
|
|
1
|
+
.app-shell{--app-shell-sidebar-width:var(--sidebar-width);--app-shell-banner-height:0px;--app-shell-chrome-block-start:calc(var(--app-shell-banner-height) + var(--app-header-height) + env(safe-area-inset-top));flex-direction:column;block-size:100dvh;display:flex;overflow:clip}.app-shell__banner{flex-shrink:0}.app-shell__body{flex:1;min-block-size:0;display:flex;position:relative}.app-shell__content{min-inline-size:0;padding-inline:var(--section-padding-inline);padding-block:var(--section-padding-block-lg);flex:1;padding-block-end:max(var(--section-padding-block-lg), env(safe-area-inset-bottom));padding-inline-end:max(var(--section-padding-inline), env(safe-area-inset-right));overflow:auto}.app-shell__content.app-shell__content--flush{padding-block:0;padding-inline:0;padding-block-end:env(safe-area-inset-bottom);padding-inline-end:env(safe-area-inset-right)}.app-shell__backdrop{inset:0;background-color:var(--sidebar-backdrop-bg);opacity:var(--sidebar-backdrop-opacity);z-index:var(--sidebar-backdrop-z-index);position:fixed;inset-block-start:var(--app-shell-chrome-block-start)}
|
package/dist/app-shell.js
CHANGED
|
@@ -17,63 +17,63 @@ function p() {
|
|
|
17
17
|
return n(), e.addEventListener("change", n), () => e.removeEventListener("change", n);
|
|
18
18
|
}, []), e;
|
|
19
19
|
}
|
|
20
|
-
function m({ banner: i, header: f, sidebar: m, children: h,
|
|
21
|
-
let
|
|
22
|
-
|
|
23
|
-
}, [
|
|
24
|
-
|
|
25
|
-
}, [
|
|
20
|
+
function m({ banner: i, header: f, sidebar: m, children: h, contentFlush: g = !1, defaultSidebar: _ = "open", sidebarState: v, onSidebarChange: y, defaultSidebarWidth: b, onSidebarWidthChange: x, skipLabel: S }) {
|
|
21
|
+
let C = e("appShell"), w = p(), [T, E] = l(_), [D, O] = l(!1), [k, A] = l(b), j = w ? v ?? T : D ? "open" : "closed", M = o((e) => {
|
|
22
|
+
w ? (E(e), y?.(e)) : O(e === "open");
|
|
23
|
+
}, [w, y]), N = o(() => M(j === "open" ? "closed" : "open"), [M, j]), P = o(() => M("closed"), [M]), F = o((e) => {
|
|
24
|
+
A(e), x?.(e);
|
|
25
|
+
}, [x]);
|
|
26
26
|
s(() => {
|
|
27
|
-
if (
|
|
27
|
+
if (w || !D) return;
|
|
28
28
|
let e = (e) => {
|
|
29
|
-
e.key === "Escape" &&
|
|
29
|
+
e.key === "Escape" && O(!1);
|
|
30
30
|
};
|
|
31
31
|
document.addEventListener("keydown", e);
|
|
32
32
|
let t = document.body.style.overflow;
|
|
33
33
|
return document.body.style.overflow = "hidden", () => {
|
|
34
34
|
document.removeEventListener("keydown", e), document.body.style.overflow = t;
|
|
35
35
|
};
|
|
36
|
-
}, [
|
|
37
|
-
let
|
|
38
|
-
sidebar:
|
|
39
|
-
setSidebar:
|
|
40
|
-
sidebarWidth:
|
|
41
|
-
setSidebarWidth:
|
|
42
|
-
toggleSidebar:
|
|
43
|
-
closeSidebar:
|
|
44
|
-
isDesktop:
|
|
36
|
+
}, [w, D]);
|
|
37
|
+
let I = c(() => ({
|
|
38
|
+
sidebar: j,
|
|
39
|
+
setSidebar: M,
|
|
40
|
+
sidebarWidth: k ?? 0,
|
|
41
|
+
setSidebarWidth: F,
|
|
42
|
+
toggleSidebar: N,
|
|
43
|
+
closeSidebar: P,
|
|
44
|
+
isDesktop: w
|
|
45
45
|
}), [
|
|
46
|
-
A,
|
|
47
46
|
j,
|
|
48
|
-
O,
|
|
49
|
-
P,
|
|
50
47
|
M,
|
|
48
|
+
k,
|
|
49
|
+
F,
|
|
51
50
|
N,
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
P,
|
|
52
|
+
w
|
|
53
|
+
]), [L, R] = l(0), z = o((e) => {
|
|
54
54
|
if (!e) return;
|
|
55
|
-
let t = () =>
|
|
55
|
+
let t = () => R(e.getBoundingClientRect().height);
|
|
56
56
|
if (t(), typeof ResizeObserver > "u") return;
|
|
57
57
|
let n = new ResizeObserver(t);
|
|
58
58
|
return n.observe(e), () => {
|
|
59
|
-
n.disconnect(),
|
|
59
|
+
n.disconnect(), R(0);
|
|
60
60
|
};
|
|
61
|
-
}, []),
|
|
62
|
-
"--app-shell-sidebar-width":
|
|
63
|
-
"--app-shell-banner-height": i ? `${
|
|
64
|
-
}),
|
|
61
|
+
}, []), B = n({
|
|
62
|
+
"--app-shell-sidebar-width": k ? `${k}px` : void 0,
|
|
63
|
+
"--app-shell-banner-height": i ? `${L}px` : void 0
|
|
64
|
+
}), V = !w && D;
|
|
65
65
|
return /* @__PURE__ */ u(a.Provider, {
|
|
66
|
-
value:
|
|
66
|
+
value: I,
|
|
67
67
|
children: /* @__PURE__ */ d(r, { children: [/* @__PURE__ */ u(t, {
|
|
68
68
|
href: "#main-content",
|
|
69
|
-
children:
|
|
69
|
+
children: C("skipToContent", S)
|
|
70
70
|
}), /* @__PURE__ */ d("div", {
|
|
71
|
-
ref:
|
|
71
|
+
ref: B,
|
|
72
72
|
className: "app-shell",
|
|
73
|
-
"data-sidebar":
|
|
73
|
+
"data-sidebar": j,
|
|
74
74
|
children: [
|
|
75
75
|
i && /* @__PURE__ */ u("div", {
|
|
76
|
-
ref:
|
|
76
|
+
ref: z,
|
|
77
77
|
className: "app-shell__banner",
|
|
78
78
|
children: i
|
|
79
79
|
}),
|
|
@@ -82,16 +82,16 @@ function m({ banner: i, header: f, sidebar: m, children: h, defaultSidebar: g =
|
|
|
82
82
|
className: "app-shell__body",
|
|
83
83
|
children: [
|
|
84
84
|
m,
|
|
85
|
-
|
|
85
|
+
V && /* @__PURE__ */ u("div", {
|
|
86
86
|
className: "app-shell__backdrop",
|
|
87
|
-
onClick:
|
|
87
|
+
onClick: P,
|
|
88
88
|
"aria-hidden": "true"
|
|
89
89
|
}),
|
|
90
90
|
/* @__PURE__ */ u("main", {
|
|
91
91
|
id: "main-content",
|
|
92
92
|
tabIndex: -1,
|
|
93
|
-
className: "app-shell__content",
|
|
94
|
-
inert:
|
|
93
|
+
className: g ? "app-shell__content app-shell__content--flush" : "app-shell__content",
|
|
94
|
+
inert: V || void 0,
|
|
95
95
|
children: h
|
|
96
96
|
})
|
|
97
97
|
]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.embed-frame{border:0;flex:auto;block-size:100%;min-block-size:0;inline-size:100%;display:block}.embed-frame.embed-frame--viewport{block-size:100dvh}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import './embed-frame.css';
|
|
2
|
+
import { forwardRef as e } from "react";
|
|
3
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
4
|
+
//#region src/stories/atoms/EmbedFrame/EmbedFrame.tsx
|
|
5
|
+
var n = e(function({ title: e, fill: n = "container", className: r, ...i }, a) {
|
|
6
|
+
return /* @__PURE__ */ t("iframe", {
|
|
7
|
+
ref: a,
|
|
8
|
+
className: [
|
|
9
|
+
"embed-frame",
|
|
10
|
+
n === "viewport" ? "embed-frame--viewport" : "",
|
|
11
|
+
r
|
|
12
|
+
].filter(Boolean).join(" "),
|
|
13
|
+
title: e,
|
|
14
|
+
...i
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
//#endregion
|
|
18
|
+
export { n as EmbedFrame };
|
package/dist/scroll-area.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.scroll-area{position:relative;overflow:hidden}.scroll-area__viewport{overscroll-behavior:contain;block-size:100%}.scroll-area__viewport:focus-visible{outline:var(--scroll-area-focus-ring-width) solid var(--scroll-area-focus-ring-color);outline-offset:var(--scroll-area-focus-ring-offset)}.scroll-area__scrollbar{background-color:var(--scroll-area-scrollbar-bg);opacity:0;transition:opacity var(--scroll-area-transition-duration) var(--scroll-area-transition-easing);display:flex}.scroll-area__scrollbar[data-orientation=vertical]{inline-size:var(--scroll-area-scrollbar-size)}.scroll-area__scrollbar[data-orientation=horizontal]{block-size:var(--scroll-area-scrollbar-size);flex-direction:column}.scroll-area__scrollbar[data-orientation=vertical][data-has-overflow-y][data-hovering],.scroll-area__scrollbar[data-orientation=vertical][data-has-overflow-y][data-scrolling],.scroll-area__scrollbar[data-orientation=horizontal][data-has-overflow-x][data-hovering],.scroll-area__scrollbar[data-orientation=horizontal][data-has-overflow-x][data-scrolling]{opacity:1}.scroll-area__scrollbar[data-orientation=vertical]:not([data-has-overflow-y]),.scroll-area__scrollbar[data-orientation=horizontal]:not([data-has-overflow-x]){visibility:hidden;pointer-events:none}.scroll-area__thumb{background-color:var(--scroll-area-thumb-bg);border-radius:var(--scroll-area-thumb-border-radius);transition:background-color var(--scroll-area-transition-duration) var(--scroll-area-transition-easing);flex:1}.scroll-area__thumb:hover,.scroll-area__scrollbar[data-scrolling] .scroll-area__thumb{background-color:var(--scroll-area-thumb-hover-bg)}.scroll-area__corner{background-color:var(--scroll-area-scrollbar-bg)}
|
|
1
|
+
.scroll-area{position:relative;overflow:hidden}@media (width>=768px){.scroll-area.scroll-area--fill{flex:1 1 0;min-block-size:0}}.scroll-area__viewport{overscroll-behavior:contain;block-size:100%}.scroll-area__viewport:focus-visible{outline:var(--scroll-area-focus-ring-width) solid var(--scroll-area-focus-ring-color);outline-offset:var(--scroll-area-focus-ring-offset)}.scroll-area__scrollbar{background-color:var(--scroll-area-scrollbar-bg);opacity:0;transition:opacity var(--scroll-area-transition-duration) var(--scroll-area-transition-easing);display:flex}.scroll-area__scrollbar[data-orientation=vertical]{inline-size:var(--scroll-area-scrollbar-size)}.scroll-area__scrollbar[data-orientation=horizontal]{block-size:var(--scroll-area-scrollbar-size);flex-direction:column}.scroll-area__scrollbar[data-orientation=vertical][data-has-overflow-y][data-hovering],.scroll-area__scrollbar[data-orientation=vertical][data-has-overflow-y][data-scrolling],.scroll-area__scrollbar[data-orientation=horizontal][data-has-overflow-x][data-hovering],.scroll-area__scrollbar[data-orientation=horizontal][data-has-overflow-x][data-scrolling]{opacity:1}.scroll-area__scrollbar[data-orientation=vertical]:not([data-has-overflow-y]),.scroll-area__scrollbar[data-orientation=horizontal]:not([data-has-overflow-x]){visibility:hidden;pointer-events:none}.scroll-area__thumb{background-color:var(--scroll-area-thumb-bg);border-radius:var(--scroll-area-thumb-border-radius);transition:background-color var(--scroll-area-transition-duration) var(--scroll-area-transition-easing);flex:1}.scroll-area__thumb:hover,.scroll-area__scrollbar[data-scrolling] .scroll-area__thumb{background-color:var(--scroll-area-thumb-hover-bg)}.scroll-area__corner{background-color:var(--scroll-area-scrollbar-bg)}
|
package/dist/scroll-area.js
CHANGED
|
@@ -4,32 +4,36 @@ import { forwardRef as e } from "react";
|
|
|
4
4
|
import { jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
5
5
|
import { ScrollArea as r } from "@base-ui/react/scroll-area";
|
|
6
6
|
//#region src/stories/atoms/ScrollArea/ScrollArea.tsx
|
|
7
|
-
var i = e(function({ orientation: e = "vertical", label: i,
|
|
8
|
-
let
|
|
7
|
+
var i = e(function({ orientation: e = "vertical", label: i, fill: a = !1, children: o, className: s, ...c }, l) {
|
|
8
|
+
let u = e === "vertical" || e === "both", d = e === "horizontal" || e === "both";
|
|
9
9
|
return /* @__PURE__ */ n(r.Root, {
|
|
10
|
-
ref:
|
|
11
|
-
className: [
|
|
12
|
-
|
|
10
|
+
ref: l,
|
|
11
|
+
className: [
|
|
12
|
+
"scroll-area",
|
|
13
|
+
a ? "scroll-area--fill" : "",
|
|
14
|
+
s
|
|
15
|
+
].filter(Boolean).join(" "),
|
|
16
|
+
...c,
|
|
13
17
|
children: [
|
|
14
18
|
/* @__PURE__ */ t(r.Viewport, {
|
|
15
19
|
className: "scroll-area__viewport",
|
|
16
20
|
role: i ? "region" : void 0,
|
|
17
21
|
"aria-label": i,
|
|
18
|
-
children:
|
|
22
|
+
children: o
|
|
19
23
|
}),
|
|
20
|
-
|
|
24
|
+
u && /* @__PURE__ */ t(r.Scrollbar, {
|
|
21
25
|
keepMounted: !0,
|
|
22
26
|
orientation: "vertical",
|
|
23
27
|
className: "scroll-area__scrollbar",
|
|
24
28
|
children: /* @__PURE__ */ t(r.Thumb, { className: "scroll-area__thumb" })
|
|
25
29
|
}),
|
|
26
|
-
|
|
30
|
+
d && /* @__PURE__ */ t(r.Scrollbar, {
|
|
27
31
|
keepMounted: !0,
|
|
28
32
|
orientation: "horizontal",
|
|
29
33
|
className: "scroll-area__scrollbar",
|
|
30
34
|
children: /* @__PURE__ */ t(r.Thumb, { className: "scroll-area__thumb" })
|
|
31
35
|
}),
|
|
32
|
-
|
|
36
|
+
u && d && /* @__PURE__ */ t(r.Corner, { className: "scroll-area__corner" })
|
|
33
37
|
]
|
|
34
38
|
});
|
|
35
39
|
});
|
package/dist/stack.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.stack{align-items:flex-start;gap:var(--stack-gap-md);flex-direction:column;display:flex}.stack>*{max-inline-size:100%}.stack.stack--gap-sm{gap:var(--stack-gap-sm)}.stack.stack--gap-lg{gap:var(--stack-gap-lg)}.stack.stack--align-stretch{align-items:stretch}.stack.stack--mobile-reverse{flex-direction:column-reverse}@media (width>=768px){.stack.stack--mobile-reverse{flex-direction:column}}
|
|
1
|
+
.stack{align-items:flex-start;gap:var(--stack-gap-md);flex-direction:column;display:flex}.stack>*{max-inline-size:100%}.stack.stack--gap-sm{gap:var(--stack-gap-sm)}.stack.stack--gap-lg{gap:var(--stack-gap-lg)}.stack.stack--align-stretch{align-items:stretch}.stack.stack--fill{block-size:100%;min-block-size:0}.stack.stack--mobile-reverse{flex-direction:column-reverse}@media (width>=768px){.stack.stack--mobile-reverse{flex-direction:column}}
|
package/dist/stack.js
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import './stack.css';
|
|
2
2
|
import { jsx as e } from "react/jsx-runtime";
|
|
3
3
|
//#region src/stories/atoms/Stack/Stack.tsx
|
|
4
|
-
function t({ gap: t = "md", align: n = "start", mobileOrder: r = "normal",
|
|
4
|
+
function t({ gap: t = "md", align: n = "start", mobileOrder: r = "normal", fill: i = !1, children: a, className: o, ...s }) {
|
|
5
5
|
return /* @__PURE__ */ e("div", {
|
|
6
6
|
className: [
|
|
7
7
|
"stack",
|
|
8
8
|
t === "md" ? "" : `stack--gap-${t}`,
|
|
9
9
|
n === "stretch" ? "stack--align-stretch" : "",
|
|
10
10
|
r === "reverse" ? "stack--mobile-reverse" : "",
|
|
11
|
-
|
|
11
|
+
i ? "stack--fill" : "",
|
|
12
|
+
o
|
|
12
13
|
].filter(Boolean).join(" "),
|
|
13
|
-
...
|
|
14
|
-
children:
|
|
14
|
+
...s,
|
|
15
|
+
children: a
|
|
15
16
|
});
|
|
16
17
|
}
|
|
17
18
|
//#endregion
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@studiolxd/brand",
|
|
3
|
-
"version": "49.
|
|
3
|
+
"version": "49.17.0",
|
|
4
4
|
"description": "El sistema de diseño de Studio LXD: componentes React, tokens y documentación de la suite SLXD.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -398,6 +398,11 @@
|
|
|
398
398
|
"import": "./dist/hero.js",
|
|
399
399
|
"default": "./dist/hero.js"
|
|
400
400
|
},
|
|
401
|
+
"./embed-frame": {
|
|
402
|
+
"types": "./dist/_types/atoms/EmbedFrame/EmbedFrame.d.ts",
|
|
403
|
+
"import": "./dist/embed-frame.js",
|
|
404
|
+
"default": "./dist/embed-frame.js"
|
|
405
|
+
},
|
|
401
406
|
"./error-text": {
|
|
402
407
|
"types": "./dist/_types/atoms/ErrorText/ErrorText.d.ts",
|
|
403
408
|
"import": "./dist/error-text.js",
|