@aurea-uds/react 0.52.0 → 0.54.1
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/actions.d.ts +11 -4
- package/dist/actions.js +6 -4
- package/dist/code-client.d.ts +6 -1
- package/dist/code-client.js +21 -3
- package/dist/data-display-client.d.ts +8 -1
- package/dist/data-display-client.js +1 -1
- package/dist/disclosure.d.ts +3 -1
- package/dist/disclosure.js +10 -2
- package/dist/feedback-client.d.ts +5 -2
- package/dist/feedback-client.js +6 -2
- package/dist/inputs-client.d.ts +12 -4
- package/dist/inputs-client.js +9 -6
- package/dist/markup.d.ts +21 -5
- package/dist/markup.js +21 -6
- package/dist/navigation-client.d.ts +27 -3
- package/dist/navigation-client.js +44 -18
- package/dist/pure.d.ts +3 -0
- package/dist/pure.js +2 -2
- package/package.json +1 -1
package/dist/actions.d.ts
CHANGED
|
@@ -88,7 +88,8 @@ interface ToggleBase {
|
|
|
88
88
|
* mudou, e a composição fica bonita e morta. Solto, não faz diferença nenhuma. */
|
|
89
89
|
value?: string;
|
|
90
90
|
icon?: IconName;
|
|
91
|
-
|
|
91
|
+
/** `xl` (o site B, 0.54.0 — as marcas do menu do celular, aprovado pela bancada em 01/11/2026): o botão de 50, o `xl` do `Button`. */
|
|
92
|
+
size?: Responsive<Extract<ComponentSize, "sm" | "md" | "lg" | "xl">>;
|
|
92
93
|
disabled?: boolean;
|
|
93
94
|
id?: string;
|
|
94
95
|
className?: string;
|
|
@@ -98,6 +99,10 @@ interface ToggleBase {
|
|
|
98
99
|
/** A cor do LIGADO (ADR-0084, 27/10/2026): `brand` — o amarelo do botão primário, o padrão —, `neutral` (o cinza) ou
|
|
99
100
|
* `contrast` (o grafite, invertido). Dentro de um `ToggleGroup` ou de um `Toolbar` com `pressedStyle`, o do botão vale. */
|
|
100
101
|
pressedStyle?: TogglePressedStyle;
|
|
102
|
+
/** A ÁREA (o site B, 0.54.0 — aprovada pela bancada em 01/11/2026): o toggle em volta de um bloco (uma miniatura, um ícone
|
|
103
|
+
* com o nome). `true` ocupa a largura; `"pill"` fica do tamanho do conteúdo, em cápsula. Com `variant="ghost"`, sem fundo;
|
|
104
|
+
* com o `default`, o fundo cinza e, ligada, o amarelo cheio. */
|
|
105
|
+
area?: boolean | "pill";
|
|
101
106
|
}
|
|
102
107
|
export type ToggleVariant = "default" | "ghost";
|
|
103
108
|
/** As três cores do ligado aprovadas pelo Victor em 26/10/2026 (A cinza, B grafite, C amarelo — o padrão). */
|
|
@@ -110,7 +115,7 @@ export type ToggleProps = ToggleBase & ({
|
|
|
110
115
|
children?: never;
|
|
111
116
|
label: string;
|
|
112
117
|
});
|
|
113
|
-
export declare function Toggle({ pressed, defaultPressed, onPressedChange, value, icon, label, size: sizePedido, disabled, id, className, children, variant, pressedStyle }: ToggleProps): React.JSX.Element;
|
|
118
|
+
export declare function Toggle({ pressed, defaultPressed, onPressedChange, value, icon, label, size: sizePedido, disabled, id, className, children, variant, pressedStyle, area }: ToggleProps): React.JSX.Element;
|
|
114
119
|
export interface IconButtonProps extends Omit<ButtonProps, "children"> {
|
|
115
120
|
label: string;
|
|
116
121
|
icon: AureaIcon;
|
|
@@ -142,10 +147,12 @@ export interface ButtonGroupProps extends HTMLAttributes<HTMLDivElement>, RefAtt
|
|
|
142
147
|
detached?: boolean;
|
|
143
148
|
}
|
|
144
149
|
export declare function ButtonGroup({ label, orientation, variant, size, fullWidth, disabled, detached, className, ...props }: ButtonGroupProps): React.JSX.Element;
|
|
145
|
-
export declare function Toolbar({ orientation, label, className, pressedStyle, ...props }: HTMLAttributes<HTMLDivElement> & RefAttributes<HTMLDivElement> & {
|
|
150
|
+
export declare function Toolbar({ orientation, label, className, pressedStyle, tone, ...props }: HTMLAttributes<HTMLDivElement> & RefAttributes<HTMLDivElement> & {
|
|
146
151
|
orientation?: Responsive<Orientation>;
|
|
147
152
|
label?: string;
|
|
148
153
|
pressedStyle?: TogglePressedStyle;
|
|
154
|
+
/** `brand`: a barra amarela da seleção em lote ("3 selected", "Clear", "Remove"), com os botões brancos. */
|
|
155
|
+
tone?: "default" | "brand";
|
|
149
156
|
}): React.JSX.Element;
|
|
150
157
|
export declare function ToolbarGroup({ label, className, ...props }: HTMLAttributes<HTMLDivElement> & RefAttributes<HTMLDivElement> & {
|
|
151
158
|
label?: string;
|
|
@@ -167,7 +174,7 @@ export interface ToggleGroupProps {
|
|
|
167
174
|
className?: string;
|
|
168
175
|
children: React.ReactNode;
|
|
169
176
|
/** O tamanho de todos os botões de dentro; cada um pode trocar o seu (valor simples, como o dela). */
|
|
170
|
-
size?: Extract<ComponentSize, "sm" | "md" | "lg">;
|
|
177
|
+
size?: Extract<ComponentSize, "sm" | "md" | "lg" | "xl">;
|
|
171
178
|
/** Ocupa a largura do pai, e os botões repartem em partes iguais. */
|
|
172
179
|
fullWidth?: boolean;
|
|
173
180
|
/** Botões soltos (vão de 4), em vez de colados. */
|
package/dist/actions.js
CHANGED
|
@@ -206,7 +206,7 @@ function temConteudoVisivel(children) {
|
|
|
206
206
|
// entre os estados**. Se o texto vira "Mute"/"Unmute" ou "Play"/"Pause", não é toggle — é
|
|
207
207
|
// botão de ação, porque quem lê tela ouve o rótulo NOVO e o estado ao mesmo tempo e não sabe
|
|
208
208
|
// se o botão descreve o que é ou o que fará.
|
|
209
|
-
export function Toggle({ pressed, defaultPressed, onPressedChange, value, icon, label, size: sizePedido, disabled, id, className, children, variant = "default", pressedStyle }) {
|
|
209
|
+
export function Toggle({ pressed, defaultPressed, onPressedChange, value, icon, label, size: sizePedido, disabled, id, className, children, variant = "default", pressedStyle, area }) {
|
|
210
210
|
const grupo = React.useContext(GrupoDeBotoesContext);
|
|
211
211
|
const size = sizePedido ?? grupo?.size;
|
|
212
212
|
// O tipo barra o consumidor TypeScript; este aviso barra o de JavaScript, que não tem tipo nenhum.
|
|
@@ -223,7 +223,7 @@ export function Toggle({ pressed, defaultPressed, onPressedChange, value, icon,
|
|
|
223
223
|
// sem `size` saía a classe `btn-undefined` (medido no catálogo, nos três botões do `ToggleGroup`); com
|
|
224
224
|
// valor responsivo sairia `btn-[object Object]`.
|
|
225
225
|
const tamanho = ehResponsivo(size) ? classesResponsivas("size", size) : ((valorBase(size) ?? "md") !== "md" && `btn-${valorBase(size)}`);
|
|
226
|
-
return _jsxs(BaseToggle, { id: id, value: value, disabled: disabled, pressed: pressed, defaultPressed: defaultPressed, onPressedChange: soOValor(onPressedChange), "aria-label": textoVisivel ? undefined : (rotuloVisivel ? label : undefined), "data-pressed-style": pressedStyle, className: cx("btn", variant === "ghost" ? "btn-ghost" : "btn-tertiary", tamanho, !textoVisivel && "btn-icon", "toggle", className), children: [icon && _jsx(Icon, { name: icon }), children] });
|
|
226
|
+
return _jsxs(BaseToggle, { id: id, value: value, disabled: disabled, pressed: pressed, defaultPressed: defaultPressed, onPressedChange: soOValor(onPressedChange), "aria-label": textoVisivel ? undefined : (rotuloVisivel ? label : undefined), "data-pressed-style": pressedStyle, className: cx("btn", variant === "ghost" ? "btn-ghost" : "btn-tertiary", !area && tamanho, !textoVisivel && !area && "btn-icon", "toggle", area && "toggle-area", area === "pill" && "toggle-area-pill", className), children: [icon && _jsx(Icon, { name: icon }), children] });
|
|
227
227
|
}
|
|
228
228
|
// default ghost (não secondary): um ícone-ação solto — hambúrguer, tema, fechar — é sem
|
|
229
229
|
// caixa por convenção (pedido do Victor: hambúrguer sem borda). Quem quer a caixa passa
|
|
@@ -268,11 +268,13 @@ export function ButtonGroup({ label, orientation, variant, size, fullWidth, disa
|
|
|
268
268
|
// diz outra coisa — seriam duas fontes de verdade e uma janela em que visual e comportamento
|
|
269
269
|
// divergem. Ver `decisions/0047-css-first-para-apresentacao-runtime-para-semantica.md`.
|
|
270
270
|
// `pressedStyle` (ADR-0084): a cor do ligado de todos os botões de dentro; cada um pode trocar a sua.
|
|
271
|
-
|
|
271
|
+
// `tone="brand"` (o site B — a barra de seleção da página inicial, aprovada pela bancada em 01/11/2026, o D-7.7, a forma B):
|
|
272
|
+
// a barra AMARELA, de 52, o texto na tinta, 600, e os botões de dentro BRANCOS com a tinta. Sem `tone`, a barra de sempre.
|
|
273
|
+
export function Toolbar({ orientation, label, className, pressedStyle, tone = "default", ...props }) {
|
|
272
274
|
const s = useAureaStrings();
|
|
273
275
|
const ancora = useRef(null);
|
|
274
276
|
const resolvida = useValorResponsivo(orientation, "horizontal", ancora);
|
|
275
|
-
return _jsx(BaseToolbar.Root, { ref: ancora, orientation: resolvida, "aria-label": label ?? s.toolbarLabel, "data-pressed-style": pressedStyle, className: cx("toolbar", className), ...props });
|
|
277
|
+
return _jsx(BaseToolbar.Root, { ref: ancora, orientation: resolvida, "aria-label": label ?? s.toolbarLabel, "data-pressed-style": pressedStyle, className: cx("toolbar", tone === "brand" && "toolbar-brand", className), ...props });
|
|
276
278
|
}
|
|
277
279
|
export function ToolbarGroup({ label, className, ...props }) { return _jsx(BaseToolbar.Group, { "aria-label": label, className: cx("toolbar-group", className), ...props }); }
|
|
278
280
|
export function ToolbarSeparator({ className, ...props }) { return _jsx(BaseToolbar.Separator, { className: cx("toolbar-sep", className), ...props }); }
|
package/dist/code-client.d.ts
CHANGED
|
@@ -15,12 +15,17 @@ export type CodeLine = CodeToken[];
|
|
|
15
15
|
/** Quem colore: recebe o código e a língua e devolve as linhas, ou `null` quando não conhece a língua. O da Aurea é o
|
|
16
16
|
* `highlightCode` de `@aurea-uds/react/code-highlight`. */
|
|
17
17
|
export type CodeHighlighter = (code: string, language: string) => CodeLine[] | null;
|
|
18
|
-
export declare function CodeBlock({ children, language, copyable, preview, lineNumbers, highlight, tabs, className }: {
|
|
18
|
+
export declare function CodeBlock({ children, language, copyable, preview, previewLayout, lineNumbers, highlight, tabs, filename, className }: {
|
|
19
19
|
children?: string;
|
|
20
20
|
language?: string;
|
|
21
21
|
copyable?: boolean;
|
|
22
|
+
/** O nome do arquivo na cabeça do bloco; com ele, o "Copy" é escrito e a linha longa desce. */
|
|
23
|
+
filename?: React.ReactNode;
|
|
22
24
|
/** A prévia viva do código: com ela, o bloco vira a caixa de exemplo, com as abas Prévia | Código. */
|
|
23
25
|
preview?: React.ReactNode;
|
|
26
|
+
/** Com `preview`: `tabs` (as abas Prévia | Código, o padrão) ou `stacked` (a peça em cima e o código embaixo; mais de 5
|
|
27
|
+
* linhas, recolhido com o "Expand code" — ADR-0089). */
|
|
28
|
+
previewLayout?: "tabs" | "stacked";
|
|
24
29
|
/** Mostra o número de cada linha à esquerda. O número não entra no texto copiado nem é lido pelo leitor de tela. */
|
|
25
30
|
lineNumbers?: boolean;
|
|
26
31
|
/** Colore o código. Passe o `highlightCode` de `@aurea-uds/react/code-highlight` (os analisadores são peer opcional). */
|
package/dist/code-client.js
CHANGED
|
@@ -14,6 +14,15 @@ import { Icon } from "./system.js";
|
|
|
14
14
|
// moldura. É a caixa do site de hoje (decisão do Victor, 06/10/2026: a da Aurea, não a da referência),
|
|
15
15
|
// agora no pacote, para o site usar só peças da Aurea. O teclado é o das abas do APG: setas, Home e End.
|
|
16
16
|
// Sem o `aurea.js` na página — quem troca a aba é o React.
|
|
17
|
+
// A CAIXA EMPILHADA (`previewLayout="stacked"`, ADR-0089): a peça em cima e o código embaixo, sem as abas; mais de 5
|
|
18
|
+
// linhas, o código vem recolhido com o "Expand code".
|
|
19
|
+
function CaixaEmpilhada({ preview, codigo, linhas, className }) {
|
|
20
|
+
const s = useAureaStrings();
|
|
21
|
+
const id = React.useId();
|
|
22
|
+
const [aberto, setAberto] = React.useState(false);
|
|
23
|
+
const dobra = linhas > 5;
|
|
24
|
+
return _jsxs("div", { className: cx("demo code-preview demo-stacked", className), "data-collapsed": dobra && !aberto ? "" : undefined, "data-expanded": dobra && aberto ? "" : undefined, children: [_jsx("div", { className: "demo-panel", "data-panel": "preview", children: preview }), _jsxs("div", { className: "demo-panel demo-code", "data-panel": "code", id: `${id}-code`, children: [codigo, dobra && _jsx("button", { type: "button", className: "btn btn-tertiary btn-sm demo-stacked-toggle", "aria-expanded": aberto, "aria-controls": `${id}-code`, onClick: () => setAberto(!aberto), children: aberto ? s.codeBlockCollapse : s.codeBlockExpand })] })] });
|
|
25
|
+
}
|
|
17
26
|
function CaixaDeExemplo({ preview, codigo, className }) {
|
|
18
27
|
const s = useAureaStrings();
|
|
19
28
|
const id = React.useId();
|
|
@@ -57,9 +66,14 @@ function linhasDoCodigo(codigo, language, highlight) {
|
|
|
57
66
|
const linhas = highlight?.(codigo, language) ?? codigo.split("\n").map(l => l === "" ? [] : [{ text: l }]);
|
|
58
67
|
return codigo.endsWith("\n") && linhas.length > 1 && linhas[linhas.length - 1].length === 0 ? linhas.slice(0, -1) : linhas;
|
|
59
68
|
}
|
|
60
|
-
|
|
69
|
+
// `filename` (o site B, aprovado pela bancada em 01/11/2026, o item 6 — "Ícone + nome"): a CABEÇA do arquivo — o nome do
|
|
70
|
+
// arquivo à esquerda e, com `copyable`, o "Copy" ESCRITO (o botão secundário, com o ícone antes do nome; vira "Copied").
|
|
71
|
+
// O bloco vira o cartão (canto 22, a cor do cartão) e a linha longa DESCE em vez de rolar. Sem `filename`, o de sempre.
|
|
72
|
+
export function CodeBlock({ children, language = "text", copyable, preview, previewLayout = "tabs", lineNumbers, highlight, tabs, filename, className }) {
|
|
61
73
|
if (tabs && tabs.length > 0)
|
|
62
74
|
return _jsx(CodigoEmAbas, { tabs: tabs, language: language, copyable: copyable, highlight: highlight, className: className });
|
|
75
|
+
if (preview !== undefined && previewLayout === "stacked")
|
|
76
|
+
return _jsx(CaixaEmpilhada, { preview: preview, className: className, linhas: (children ?? "").split("\n").length, codigo: _jsx(CodeBlock, { language: language, copyable: copyable, lineNumbers: lineNumbers, highlight: highlight, children: children }) });
|
|
63
77
|
if (preview !== undefined)
|
|
64
78
|
return _jsx(CaixaDeExemplo, { preview: preview, className: className, codigo: _jsx(CodeBlock, { language: language, copyable: copyable, lineNumbers: lineNumbers, highlight: highlight, children: children }) });
|
|
65
79
|
const s = useAureaStrings();
|
|
@@ -74,11 +88,13 @@ export function CodeBlock({ children, language = "text", copyable, preview, line
|
|
|
74
88
|
const colorido = linhas != null && highlight != null && linhas.some(l => l.some(p => p.className));
|
|
75
89
|
// Os algarismos da última linha: a coluna do número tem a largura deles (99 → 2, 100 → 3).
|
|
76
90
|
const digitos = lineNumbers && linhas ? { "--code-line-digits": String(linhas.length).length } : undefined;
|
|
77
|
-
const pre = _jsx("pre", { className: cx("code-block", lineNumbers && "code-block-numbered", colorido && "code-block-highlighted", !copyable && className), style: digitos, "data-language": language, tabIndex: 0, children: _jsx("code", { children: linhas
|
|
91
|
+
const pre = _jsx("pre", { className: cx("code-block", lineNumbers && "code-block-numbered", colorido && "code-block-highlighted", !copyable && filename == null && className), style: digitos, "data-language": language, tabIndex: 0, children: _jsx("code", { children: linhas
|
|
78
92
|
? _jsxs(_Fragment, { children: [linhas.map((l, i) => _jsxs(React.Fragment, { children: [_jsx("span", { className: "code-line", children: l.map((p, j) => p.className ? _jsx("span", { className: p.className, children: p.text }, j) : p.text) }), i < linhas.length - 1 ? "\n" : null] }, i)), children.endsWith("\n") ? "\n" : null] })
|
|
79
93
|
: children }) });
|
|
80
|
-
if (!copyable)
|
|
94
|
+
if (!copyable && filename == null)
|
|
81
95
|
return pre;
|
|
96
|
+
if (!copyable)
|
|
97
|
+
return _jsxs("div", { className: cx("code-block-wrap", "code-block-file", className), children: [_jsx("div", { className: "code-block-head", children: _jsx("span", { className: "code-block-title", children: filename }) }), pre] });
|
|
82
98
|
// 0.28.0: o "copiado" é dito ao leitor de tela. Com o `aurea.js` na página, é ele quem diz (pelo
|
|
83
99
|
// texto do `data-aurea-copy-done`, na língua do app); sem ele, a região de status daqui.
|
|
84
100
|
const [copiado, setCopiado] = React.useState(false);
|
|
@@ -95,5 +111,7 @@ export function CodeBlock({ children, language = "text", copyable, preview, line
|
|
|
95
111
|
return;
|
|
96
112
|
void copia.then(() => { setCopiado(true); setTimeout(() => setCopiado(false), 1500); }, () => { });
|
|
97
113
|
};
|
|
114
|
+
if (filename != null)
|
|
115
|
+
return _jsxs("div", { className: cx("code-block-wrap", "code-block-file", className), "data-aurea-copy-scope": true, children: [_jsx("span", { className: "sr-only", role: "status", "aria-live": "polite", children: copiado ? s.copied : "" }), _jsxs("div", { className: "code-block-head", children: [_jsx("span", { className: "code-block-title", children: filename }), _jsxs("button", { type: "button", className: cx("btn btn-secondary copy-code-text", copiado && "is-done"), "data-aurea-copy": true, "data-aurea-copy-done": s.copied, onClick: onCopy, children: [_jsx(Icon, { name: "copy", size: "sm", className: "c-copy" }), _jsx(Icon, { name: "check", size: "sm", className: "c-done" }), _jsx("span", { className: "c-copy", children: s.copy }), _jsx("span", { className: "c-done", children: s.copied })] })] }), pre] });
|
|
98
116
|
return _jsxs("div", { className: cx("code-block-wrap", className), "data-aurea-copy-scope": true, children: [_jsx("span", { className: "sr-only", role: "status", "aria-live": "polite", children: copiado ? s.copied : "" }), _jsxs("button", { type: "button", className: cx("btn btn-icon btn-ghost copy-code", copiado && "is-done"), "data-aurea-copy": true, "data-aurea-copy-done": s.copied, "aria-label": s.copyCode, onClick: onCopy, children: [_jsx(Icon, { name: "copy", size: "sm", className: "c-copy" }), _jsx(Icon, { name: "check", size: "sm", className: "c-done" })] }), pre] });
|
|
99
117
|
}
|
|
@@ -8,10 +8,17 @@ export interface TableProps extends HTMLAttributes<HTMLTableElement>, RefAttribu
|
|
|
8
8
|
stickyFirstColumn?: boolean;
|
|
9
9
|
/** GAR-12: a tabela cabe na largura da caixa, sem o mínimo de 720 — a comparação de dois itens no celular. */
|
|
10
10
|
fit?: boolean;
|
|
11
|
+
/** `rows` (o site B, 0.54.0 — a lista de membros da página inicial, aprovada pela bancada em 01/11/2026, o D-7.6): sem a
|
|
12
|
+
* caixa, cada linha é uma CÁPSULA de 54, 4 entre elas; com o mouse, o `--fill-1`; a linha com `data-selected`, o amarelo
|
|
13
|
+
* a 14%. O cabeçalho em mono maiúsculo, apagado. Cabe na largura (sem o mínimo de 720). */
|
|
14
|
+
variant?: "default" | "rows";
|
|
11
15
|
/** GAR-12: esconde as linhas marcadas como iguais (`<tr data-same>`) — o "Só diferenças". */
|
|
12
16
|
differencesOnly?: boolean;
|
|
17
|
+
/** As linhas ímpares do corpo com fundo (o site B, 02/11/2026, a "B" na imagem): a 1ª, a 3ª… — o olho segue a linha
|
|
18
|
+
* numa tabela larga. Nos dois arranjos (`default` e `rows`). */
|
|
19
|
+
striped?: boolean;
|
|
13
20
|
}
|
|
14
|
-
export declare function Table({ caption, stickyHeader, stickyFirstColumn, fit, differencesOnly, children, className, ...props }: TableProps): React.JSX.Element;
|
|
21
|
+
export declare function Table({ caption, stickyHeader, stickyFirstColumn, fit, differencesOnly, striped, variant, children, className, ...props }: TableProps): React.JSX.Element;
|
|
15
22
|
export interface SortableItem {
|
|
16
23
|
id: string;
|
|
17
24
|
label: ReactNode;
|
|
@@ -6,7 +6,7 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
|
|
|
6
6
|
import React from "react";
|
|
7
7
|
import { cx, useAureaStrings, useReorder } from "./internal.js";
|
|
8
8
|
import { Icon } from "./system.js";
|
|
9
|
-
export function Table({ caption, stickyHeader, stickyFirstColumn, fit, differencesOnly, children, className, ...props }) { const s = useAureaStrings(); return _jsx("div", { className: cx("table-region", stickyHeader && "table-sticky-header", stickyFirstColumn && "table-sticky-first"), role: "region", "aria-label": typeof caption === "string" ? caption : s.tableLabel, tabIndex: 0, children: _jsxs("table", { className: cx("table", fit && "table-fit", differencesOnly && "table-differences-only", className), ...props, children: [caption && _jsx("caption", { children: caption }), children] }) }); }
|
|
9
|
+
export function Table({ caption, stickyHeader, stickyFirstColumn, fit, differencesOnly, striped, variant = "default", children, className, ...props }) { const s = useAureaStrings(); return _jsx("div", { className: cx("table-region", stickyHeader && "table-sticky-header", stickyFirstColumn && "table-sticky-first", variant === "rows" && "table-region-rows"), role: "region", "aria-label": typeof caption === "string" ? caption : s.tableLabel, tabIndex: 0, children: _jsxs("table", { className: cx("table", fit && "table-fit", differencesOnly && "table-differences-only", variant === "rows" && "table-rows", striped && "table-striped", className), ...props, children: [caption && _jsx("caption", { children: caption }), children] }) }); }
|
|
10
10
|
// O protocolo de teclado e de ponteiro saiu daqui para o `useReorder` do `internal` no item N1,
|
|
11
11
|
// quando o `BlockEditor` virou o segundo dono dele. A DOM abaixo não mudou uma vírgula na
|
|
12
12
|
// extração — é o que o gate de pixel e o `skin.spec` continuam medindo.
|
package/dist/disclosure.d.ts
CHANGED
|
@@ -7,9 +7,11 @@ export interface AccordionItem {
|
|
|
7
7
|
/** O item que não abre: anunciado como desligado e fora do Tab. */
|
|
8
8
|
disabled?: boolean;
|
|
9
9
|
}
|
|
10
|
-
export declare function Accordion({ items, variant, multiple, defaultValue, indicator, size, className }: {
|
|
10
|
+
export declare function Accordion({ items, variant, multiple, defaultValue, indicator, size, orientation, className }: {
|
|
11
11
|
items: AccordionItem[];
|
|
12
12
|
variant?: AccordionVariant;
|
|
13
|
+
/** `horizontal`: o acordeão de lado — os itens em pé, o aberto toma o resto da linha. */
|
|
14
|
+
orientation?: "vertical" | "horizontal";
|
|
13
15
|
/** O desenho de abrir: `"chevron"` (o padrão, a setinha) ou `"plus"` (o "+" numa bolinha, que vira "×" quando abre). */
|
|
14
16
|
indicator?: "chevron" | "plus";
|
|
15
17
|
/** A altura da linha: `"md"` (o padrão) ou `"lg"` (60, com a letra do texto). */
|
package/dist/disclosure.js
CHANGED
|
@@ -10,9 +10,17 @@ import { soOValor } from "./pure.js";
|
|
|
10
10
|
import { Icon } from "./system.js";
|
|
11
11
|
// O SITE B (30/10/2026, protótipo): `indicator="plus"` troca a setinha pelo "+" numa bolinha, que gira e vira o "×"
|
|
12
12
|
// amarelo quando abre; `size="lg"` é a linha de 60 com a letra do texto (16), a das perguntas do desenho aprovado.
|
|
13
|
-
|
|
13
|
+
// `orientation="horizontal"` (o site B — a página inicial, aprovada pela bancada em 01/11/2026, o D-7.1): o acordeão DE LADO.
|
|
14
|
+
// Cada item é um cartão (canto 22) em pé, fechado com 104 de largura; o aberto toma o resto da linha. Um aberto de cada vez,
|
|
15
|
+
// e o aberto não fecha pelo clique (sempre há um à vista). Num contêiner estreito (até 47.5rem) vira o de pé. A altura é
|
|
16
|
+
// a do pai. Sem `horizontal`, o acordeão de sempre.
|
|
17
|
+
export function Accordion({ items, variant = "default", multiple = false, defaultValue, indicator = "chevron", size = "md", orientation = "vertical", className }) {
|
|
14
18
|
const grupo = React.useId();
|
|
15
|
-
|
|
19
|
+
const deLado = orientation === "horizontal";
|
|
20
|
+
const lista = _jsx("div", { className: cx("accordion", variant === "surface" && "accordion-surface", indicator === "plus" && "accordion-plus", size === "lg" && "accordion-lg", deLado && "accordion-horizontal", !deLado && className), children: items.map(i => _jsxs("details", { className: "accordion-item", name: multiple && !deLado ? undefined : grupo, open: defaultValue?.includes(i.id) || undefined, children: [_jsxs("summary", { "aria-disabled": i.disabled || undefined, tabIndex: i.disabled ? -1 : undefined, onClick: i.disabled ? (e) => e.preventDefault()
|
|
21
|
+
: deLado ? (e) => { if (e.currentTarget.parentElement.open)
|
|
22
|
+
e.preventDefault(); } : undefined, children: [_jsx("span", { className: "accordion-title", children: i.title }), _jsx("span", { className: "accordion-chevron", "aria-hidden": "true" })] }), _jsx("div", { className: "accordion-content", children: i.content })] }, i.id)) });
|
|
23
|
+
return deLado ? _jsx("div", { className: cx("accordion-horizontal-frame", className), children: lista }) : lista;
|
|
16
24
|
}
|
|
17
25
|
// COLLAPSIBLE — uma seção que abre e fecha, com o estado do lado de quem usa.
|
|
18
26
|
//
|
|
@@ -9,12 +9,14 @@ export declare function Status({ variant, state, children, className, ...props }
|
|
|
9
9
|
state?: UniversalState;
|
|
10
10
|
}): React.JSX.Element;
|
|
11
11
|
export type AlertVariant = "info" | "success" | "warning" | "danger" | "accent";
|
|
12
|
-
export declare function Alert({ variant, state, title, icon, onDismiss, action, children, className, ...props }: HTMLAttributes<HTMLDivElement> & RefAttributes<HTMLDivElement> & {
|
|
12
|
+
export declare function Alert({ variant, state, title, icon, onDismiss, action, appearance, children, className, ...props }: HTMLAttributes<HTMLDivElement> & RefAttributes<HTMLDivElement> & {
|
|
13
13
|
variant?: AlertVariant;
|
|
14
14
|
state?: UniversalState;
|
|
15
15
|
title?: ReactNode;
|
|
16
16
|
icon?: IconName;
|
|
17
17
|
onDismiss?: () => void;
|
|
18
|
+
/** A pele: `card` (o cartão, o padrão) ou `soft` (o fundo da cor do estado, sem sombra, o texto maior). */
|
|
19
|
+
appearance?: "card" | "soft";
|
|
18
20
|
/** O botão do aviso ("Atualizar", "Desfazer"): depois do texto, antes do X. No celular, embaixo do texto. */
|
|
19
21
|
action?: ReactNode;
|
|
20
22
|
}): React.JSX.Element;
|
|
@@ -69,13 +71,14 @@ export type DataStateProps = Omit<HTMLAttributes<HTMLDivElement>, "children"> &
|
|
|
69
71
|
onCatch?: (error: unknown, info: React.ErrorInfo) => void;
|
|
70
72
|
};
|
|
71
73
|
export declare function DataState({ catchErrors, onCatch, ...props }: DataStateProps): React.JSX.Element;
|
|
72
|
-
export declare function EmptyState({ icon, title, titleAs: TitleTag, description, action, state }: {
|
|
74
|
+
export declare function EmptyState({ icon, title, titleAs: TitleTag, description, action, state, framed }: {
|
|
73
75
|
icon?: IconName;
|
|
74
76
|
title: ReactNode;
|
|
75
77
|
titleAs?: "h2" | "h3" | "h4" | "p";
|
|
76
78
|
description?: ReactNode;
|
|
77
79
|
action?: ReactNode;
|
|
78
80
|
state?: UniversalState;
|
|
81
|
+
framed?: boolean;
|
|
79
82
|
}): React.JSX.Element;
|
|
80
83
|
export interface NotificationItem {
|
|
81
84
|
id: string;
|
package/dist/feedback-client.js
CHANGED
|
@@ -55,7 +55,9 @@ const ICONE_DA_VARIANTE = { info: "info",
|
|
|
55
55
|
// "esperando" dele é grave.
|
|
56
56
|
// `action` (15/10/2026, o "Upgrade" da referência): o botão do aviso, depois do texto e antes do X; no celular ele desce
|
|
57
57
|
// para baixo do texto, na mesma coluna (a referência repete o botão; aqui ele só muda de lugar).
|
|
58
|
-
|
|
58
|
+
// `appearance="soft"` (o site B, 02/11/2026, a "B" na imagem): o fundo da cor do estado a 14%, sem sombra, e o texto a 16
|
|
59
|
+
// na cor do texto. Sem ele (`"card"`), o cartão de sempre.
|
|
60
|
+
export function Alert({ variant, state, title, icon, onDismiss, action, appearance, children, className, ...props }) { const s = useAureaStrings(); const v = variant ?? (state ? stateSeverity(state) : "info"); return _jsxs("div", { className: cx("alert", `alert-${v}`, appearance === "soft" && "alert-soft", action != null && "alert-has-action", className), role: v === "danger" ? "alert" : "status", "data-state": state, ...props, children: [_jsx(Icon, { name: icon ?? proprio(ICONE_DA_VARIANTE, v) ?? "info", weight: icon ? undefined : "fill" }), _jsxs("div", { children: [title && _jsx("strong", { children: title }), children ?? (state ? proprio(s.universalState, state) : null)] }), action != null && _jsx("div", { className: "alert-action", children: action }), onDismiss ? _jsx(CloseButton, { onClick: onDismiss }) : _jsx("span", {})] }); }
|
|
59
61
|
export function Banner(props) {
|
|
60
62
|
if (props.variant === "consent")
|
|
61
63
|
return _jsx(BannerConsent, { ...props });
|
|
@@ -144,7 +146,9 @@ function CorpoDoDataState({ state, message, skeleton, emptyTitle, emptyIcon, act
|
|
|
144
146
|
return caixa(_jsxs(_Fragment, { children: [_jsx(Alert, { variant: stateSeverity(state), state: state, children: message }), conteudo()] }));
|
|
145
147
|
return caixa(conteudo());
|
|
146
148
|
}
|
|
147
|
-
|
|
149
|
+
// `framed` (o site B, aprovado pela bancada em 01/11/2026): o ícone dentro da moldura redonda, a mesma do nativo (R-15).
|
|
150
|
+
// Variação: sem ele, o ícone continua solto, como sempre.
|
|
151
|
+
export function EmptyState({ icon = "file", title, titleAs: TitleTag = "h3", description, action, state, framed }) { const s = useAureaStrings(); const desc = description ?? (state ? proprio(s.universalState, state) : null); const glifo = _jsx(Icon, { name: icon, size: "xl" }); return _jsxs("div", { className: "empty-state", "data-state": state, children: [framed ? _jsx("span", { className: "empty-state-frame", children: glifo }) : glifo, _jsx(TitleTag, { className: "empty-title", children: title }), desc && _jsx("p", { className: "muted", children: desc }), action] }); }
|
|
148
152
|
function groupNotifications(items) {
|
|
149
153
|
const out = [];
|
|
150
154
|
for (const it of items) {
|
package/dist/inputs-client.d.ts
CHANGED
|
@@ -94,8 +94,13 @@ export interface RadioGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, "d
|
|
|
94
94
|
orientation?: "vertical" | "horizontal";
|
|
95
95
|
/** O asterisco no rótulo, como o `Field`. */
|
|
96
96
|
required?: boolean;
|
|
97
|
+
/** `card` faz de cada opção um cartão inteiro — o cartão de escolha, o mesmo nome do nativo (CHK-01). O escolhido sobe com
|
|
98
|
+
* sombra. O site B (aprovado pela bancada em 01/11/2026). */
|
|
99
|
+
variant?: "list" | "card";
|
|
100
|
+
/** Na web a marca fica no início. `none` tira a bolinha — só no `card`, em que o cartão inteiro já mostra a escolha. */
|
|
101
|
+
indicatorPlacement?: "start" | "none";
|
|
97
102
|
}
|
|
98
|
-
export declare function RadioGroup({ label, labelHidden, description, error, value, defaultValue, onValueChange, name, disabled, invalid, orientation, required, children, className, ...props }: RadioGroupProps): React.JSX.Element;
|
|
103
|
+
export declare function RadioGroup({ label, labelHidden, description, error, value, defaultValue, onValueChange, name, disabled, invalid, orientation, required, variant, indicatorPlacement, children, className, ...props }: RadioGroupProps): React.JSX.Element;
|
|
99
104
|
export declare namespace RadioGroup {
|
|
100
105
|
export { Radio as Item };
|
|
101
106
|
}
|
|
@@ -310,19 +315,22 @@ export declare function OTPField({ length, value, defaultValue, onValueChange, m
|
|
|
310
315
|
/** `secondary`: o fundo neutro do `Input` secundário, para o campo dentro de um cartão. */
|
|
311
316
|
variant?: "primary" | "secondary";
|
|
312
317
|
}): React.JSX.Element;
|
|
313
|
-
export type SegmentedControlSelectedStyle = "current" | "neutral" | "contrast" | "brand" | "ring" | "dot";
|
|
314
|
-
export declare function SegmentedControl({ items, value, onChange, label, fullWidth, size, selectedStyle }: {
|
|
318
|
+
export type SegmentedControlSelectedStyle = "current" | "neutral" | "contrast" | "brand" | "ring" | "dot" | "emphasis";
|
|
319
|
+
export declare function SegmentedControl({ items, value, onChange, label, fullWidth, size, selectedStyle, wrap, orientation }: {
|
|
315
320
|
items: Array<{
|
|
316
321
|
value: string;
|
|
317
322
|
label: ReactNode;
|
|
318
323
|
href?: string;
|
|
324
|
+
icon?: IconName;
|
|
319
325
|
}>;
|
|
320
326
|
value: string;
|
|
321
327
|
onChange?: (v: string) => void;
|
|
322
328
|
label?: string;
|
|
323
329
|
fullWidth?: boolean;
|
|
324
|
-
size?: "sm" | "md";
|
|
330
|
+
size?: "sm" | "md" | "lg" | "xl" | "2xl";
|
|
325
331
|
selectedStyle?: SegmentedControlSelectedStyle;
|
|
332
|
+
wrap?: boolean;
|
|
333
|
+
orientation?: "horizontal" | "vertical";
|
|
326
334
|
}): React.JSX.Element;
|
|
327
335
|
export interface ComboboxOption {
|
|
328
336
|
value: string;
|
package/dist/inputs-client.js
CHANGED
|
@@ -433,7 +433,7 @@ export function CheckboxGroup({ label, description, error, value, defaultValue,
|
|
|
433
433
|
});
|
|
434
434
|
return _jsxs("div", { role: "group", "aria-labelledby": idRotulo, "aria-describedby": [idDescricao, idErro].filter(Boolean).join(" ") || undefined, className: cx("checkbox-group", className), ...props, children: [_jsx("span", { className: "label", id: idRotulo, children: _jsxs("span", { children: [label, required ? _jsx("span", { className: "label-required", "aria-hidden": "true", children: "*" }) : null] }) }), description && _jsx("span", { className: "field-description", id: idDescricao, children: description }), caixas, error && _jsx("span", { className: "field-error", id: idErro, children: error })] });
|
|
435
435
|
}
|
|
436
|
-
export function RadioGroup({ label, labelHidden, description, error, value, defaultValue, onValueChange, name, disabled, invalid, orientation = "vertical", required, children, className, ...props }) {
|
|
436
|
+
export function RadioGroup({ label, labelHidden, description, error, value, defaultValue, onValueChange, name, disabled, invalid, orientation = "vertical", required, variant = "list", indicatorPlacement = "start", children, className, ...props }) {
|
|
437
437
|
const auto = React.useId();
|
|
438
438
|
const [proprio, setProprio] = React.useState(defaultValue);
|
|
439
439
|
const escolhido = value ?? proprio;
|
|
@@ -456,7 +456,7 @@ export function RadioGroup({ label, labelHidden, description, error, value, defa
|
|
|
456
456
|
onValueChange?.(v);
|
|
457
457
|
} });
|
|
458
458
|
});
|
|
459
|
-
return _jsxs("div", { role: "radiogroup", "aria-labelledby": idRotulo, "aria-describedby": [idDescricao, idErro].filter(Boolean).join(" ") || undefined, "aria-orientation": orientation, "aria-required": required || undefined, "aria-invalid": error || invalid ? true : undefined, className: cx("radio-group", orientation === "horizontal" && "radio-group-horizontal", labelHidden && "radio-group-bare", className), ...props, children: [_jsx("span", { className: cx("label", labelHidden && "sr-only"), id: idRotulo, children: _jsxs("span", { children: [label, required ? _jsx("span", { className: "label-required", "aria-hidden": "true", children: "*" }) : null] }) }), description && _jsx("span", { className: "field-description", id: idDescricao, children: description }), orientation === "horizontal" ? _jsx("div", { className: "radio-group-items", children: opcoes }) : opcoes, error && _jsx("span", { className: "field-error", id: idErro, children: error })] });
|
|
459
|
+
return _jsxs("div", { role: "radiogroup", "aria-labelledby": idRotulo, "aria-describedby": [idDescricao, idErro].filter(Boolean).join(" ") || undefined, "aria-orientation": orientation, "aria-required": required || undefined, "aria-invalid": error || invalid ? true : undefined, className: cx("radio-group", orientation === "horizontal" && "radio-group-horizontal", labelHidden && "radio-group-bare", variant === "card" && indicatorPlacement === "none" && "radio-group-indicator-none", className), ...props, children: [_jsx("span", { className: cx("label", labelHidden && "sr-only"), id: idRotulo, children: _jsxs("span", { children: [label, required ? _jsx("span", { className: "label-required", "aria-hidden": "true", children: "*" }) : null] }) }), description && _jsx("span", { className: "field-description", id: idDescricao, children: description }), variant === "card" ? _jsx("div", { className: "radio-group-cards", children: opcoes }) : orientation === "horizontal" ? _jsx("div", { className: "radio-group-items", children: opcoes }) : opcoes, error && _jsx("span", { className: "field-error", id: idErro, children: error })] });
|
|
460
460
|
}
|
|
461
461
|
/** A opção do grupo: o `Radio`, como o `RadioGroup.Item` do nativo. */
|
|
462
462
|
RadioGroup.Item = Radio;
|
|
@@ -730,12 +730,15 @@ export function OTPField({ length, value, defaultValue, onValueChange, mask, dis
|
|
|
730
730
|
const s = useAureaStrings();
|
|
731
731
|
return _jsx(BaseOTPField.Root, { id: id, length: length, value: value, defaultValue: defaultValue, onValueChange: soOValor(onValueChange), mask: mask, disabled: disabled, required: required, role: "group", "aria-label": label, className: cx("otp-field", className), children: Array.from({ length }, (_, i) => _jsxs(React.Fragment, { children: [_jsx(BaseOTPField.Input, { render: _jsx("input", { "aria-label": `${s.otpDigit} ${i + 1}` }), className: cx("input otp-slot", variant === "secondary" && "input-secondary") }), groupSize && groupSize > 0 && (i + 1) % groupSize === 0 && i < length - 1 ? _jsx(BaseOTPField.Separator, { className: "otp-separator" }) : null] }, i)) });
|
|
732
732
|
}
|
|
733
|
-
|
|
733
|
+
// O SITE B (aprovado pela bancada em 01/11/2026, os itens 3 e 8): `items[].icon` (o escolhido troca sozinho para a forma
|
|
734
|
+
// cheia), `size="2xl"` (segmento de 48), `wrap` (quebra linha, o trilho com canto 22) e `orientation="vertical"` (em pé).
|
|
735
|
+
export function SegmentedControl({ items, value, onChange, label, fullWidth, size = "md", selectedStyle, wrap, orientation = "horizontal" }) {
|
|
734
736
|
const s = useAureaStrings();
|
|
735
|
-
const classe = cx("segmented", fullWidth && "segmented-full", size === "sm" && "segmented-sm");
|
|
737
|
+
const classe = cx("segmented", fullWidth && "segmented-full", size === "sm" && "segmented-sm", size === "lg" && "segmented-lg", size === "xl" && "segmented-xl", size === "2xl" && "segmented-2xl", wrap && orientation !== "vertical" && "segmented-wrap", orientation === "vertical" && "segmented-vertical");
|
|
738
|
+
const miolo = (i) => i.icon ? _jsxs(_Fragment, { children: [_jsx(Icon, { name: i.icon, weight: i.value === value ? "fill" : "regular" }), i.label] }) : i.label;
|
|
736
739
|
if (items.length > 0 && items.every(i => i.href != null))
|
|
737
|
-
return _jsx("nav", { className: classe, "data-segment-style": selectedStyle, "aria-label": label ?? s.optionsLabel, children: items.map(i => _jsx("a", { href: i.href, className: i.value === value ? "active" : undefined, "aria-current": i.value === value ? "page" : undefined, children: i
|
|
738
|
-
return _jsx(BaseRadioGroup, { className: classe, "data-segment-style": selectedStyle, "aria-label": label ?? s.optionsLabel, value: value, onValueChange: v => onChange?.(String(v)), children: items.map(i => _jsx(BaseRadio.Root, { value: i.value, className: i.value === value ? "active" : undefined, nativeButton: true, render: _jsx("button", { type: "button" }), children: i
|
|
740
|
+
return _jsx("nav", { className: classe, "data-segment-style": selectedStyle, "aria-label": label ?? s.optionsLabel, children: items.map(i => _jsx("a", { href: i.href, className: i.value === value ? "active" : undefined, "aria-current": i.value === value ? "page" : undefined, children: miolo(i) }, i.value)) });
|
|
741
|
+
return _jsx(BaseRadioGroup, { className: classe, "data-segment-style": selectedStyle, "aria-label": label ?? s.optionsLabel, "aria-orientation": orientation === "vertical" ? "vertical" : undefined, value: value, onValueChange: v => onChange?.(String(v)), children: items.map(i => _jsx(BaseRadio.Root, { value: i.value, className: i.value === value ? "active" : undefined, nativeButton: true, render: _jsx("button", { type: "button" }), children: miolo(i) }, i.value)) });
|
|
739
742
|
}
|
|
740
743
|
const ehAgrupado = (items) => items != null && items.length > 0 && typeof items[0] === "object" && items[0] != null && "items" in items[0];
|
|
741
744
|
// UM renderizador e UMA lista para os dois combobox: duas cópias da mesma árvore é como a
|
package/dist/markup.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ type CardBase = HTMLAttributes<HTMLDivElement> & RefAttributes<HTMLDivElement> &
|
|
|
13
13
|
padding?: "normal" | "none";
|
|
14
14
|
orientation?: "vertical" | "horizontal";
|
|
15
15
|
accent?: CardAccent;
|
|
16
|
+
lift?: boolean;
|
|
17
|
+
fill?: "brand";
|
|
16
18
|
};
|
|
17
19
|
export type CardProps = CardBase & ({
|
|
18
20
|
variant?: "base" | "raised" | "inset" | "outline" | "selected" | "danger" | "contrast";
|
|
@@ -21,7 +23,7 @@ export type CardProps = CardBase & ({
|
|
|
21
23
|
variant: "interactive";
|
|
22
24
|
render: ReactElement;
|
|
23
25
|
});
|
|
24
|
-
export declare function Card({ variant, padding, orientation, accent, className, render, ...props }: CardProps): ReactElement<unknown, string | React.JSXElementConstructor<any>>;
|
|
26
|
+
export declare function Card({ variant, padding, orientation, accent, lift, fill, className, render, ...props }: CardProps): ReactElement<unknown, string | React.JSXElementConstructor<any>>;
|
|
25
27
|
export declare namespace Card {
|
|
26
28
|
export { CardMedia as Media };
|
|
27
29
|
export { CardHeader as Header };
|
|
@@ -174,7 +176,13 @@ export interface SectionProps extends Omit<HTMLAttributes<HTMLElement>, "title">
|
|
|
174
176
|
export declare function Section({ surface, spacing, theme, variant, brand, links, legal, layout, maxWidth, navLabel, title, titleAs: Titulo, eyebrow, description, actions, media, align, children, className, ...props }: SectionProps): React.JSX.Element;
|
|
175
177
|
export type KPIDirection = "up" | "down" | "flat";
|
|
176
178
|
export type KPITone = "success" | "danger" | "neutral";
|
|
177
|
-
export type KPIVariant = "card" | "plain";
|
|
179
|
+
export type KPIVariant = "card" | "plain" | "brand";
|
|
180
|
+
/** Uma barra do `KPI` (o site B): o nome curto ("Jun"), o valor dito na leitura ("$48.2k") e o número que dá a altura. */
|
|
181
|
+
export interface KPIBar {
|
|
182
|
+
label: string;
|
|
183
|
+
value: ReactNode;
|
|
184
|
+
amount: number;
|
|
185
|
+
}
|
|
178
186
|
export interface KPIProps extends HTMLAttributes<HTMLDivElement>, RefAttributes<HTMLDivElement> {
|
|
179
187
|
label: ReactNode;
|
|
180
188
|
value: ReactNode;
|
|
@@ -186,10 +194,16 @@ export interface KPIProps extends HTMLAttributes<HTMLDivElement>, RefAttributes<
|
|
|
186
194
|
tone?: KPITone;
|
|
187
195
|
/** A palavra que o leitor de tela ouve antes da tendência. Padrão em inglês: "Up", "Down", "No change". */
|
|
188
196
|
directionLabel?: string;
|
|
189
|
-
/** `plain` tira a caixa: o número dentro de um cartão que já existe.
|
|
197
|
+
/** `plain` tira a caixa: o número dentro de um cartão que já existe. `brand` (o site B, 0.54.0) é o cartão AMARELO, com
|
|
198
|
+
* a tinta e a sombra média. */
|
|
190
199
|
variant?: KPIVariant;
|
|
200
|
+
/** As barras embaixo do número (o site B, 0.54.0): cada uma é um botão de opção nativo; a escolhida fica branca no
|
|
201
|
+
* `brand` (na cor do texto, fora dele) e a leitura diz o nome e o valor dela. */
|
|
202
|
+
bars?: KPIBar[];
|
|
203
|
+
/** A barra que começa escolhida (o índice). Padrão: a última. */
|
|
204
|
+
defaultBar?: number;
|
|
191
205
|
}
|
|
192
|
-
export declare function KPI({ label, value, trend, direction, tone, directionLabel, variant, className, ...props }: KPIProps): React.JSX.Element;
|
|
206
|
+
export declare function KPI({ label, value, trend, direction, tone, directionLabel, variant, bars, defaultBar, className, ...props }: KPIProps): React.JSX.Element;
|
|
193
207
|
export declare function DataList({ items }: {
|
|
194
208
|
items: Array<{
|
|
195
209
|
term: ReactNode;
|
|
@@ -405,11 +419,13 @@ export interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElemen
|
|
|
405
419
|
variant?: FieldVariant;
|
|
406
420
|
}
|
|
407
421
|
export declare const Textarea: React.ForwardRefExoticComponent<Omit<TextareaProps, "ref"> & RefAttributes<HTMLTextAreaElement>>;
|
|
408
|
-
export declare function Checkbox({ label, labelHidden, description, size, className, ...props }: Omit<InputHTMLAttributes<HTMLInputElement>, "size"> & RefAttributes<HTMLInputElement> & {
|
|
422
|
+
export declare function Checkbox({ label, labelHidden, description, size, variant, tone, className, ...props }: Omit<InputHTMLAttributes<HTMLInputElement>, "size"> & RefAttributes<HTMLInputElement> & {
|
|
409
423
|
label: ReactNode;
|
|
410
424
|
labelHidden?: boolean;
|
|
411
425
|
description?: ReactNode;
|
|
412
426
|
size?: Responsive<FieldSize>;
|
|
427
|
+
variant?: "default" | "pill";
|
|
428
|
+
tone?: "success";
|
|
413
429
|
}): React.JSX.Element;
|
|
414
430
|
export declare function Radio({ label, labelHidden, description, size, className, ...props }: Omit<InputHTMLAttributes<HTMLInputElement>, "size"> & RefAttributes<HTMLInputElement> & {
|
|
415
431
|
label: ReactNode;
|
package/dist/markup.js
CHANGED
|
@@ -39,8 +39,8 @@ import React, { forwardRef } from "react";
|
|
|
39
39
|
import { cx, fundirRender, peleDoEixo } from "./pure.js";
|
|
40
40
|
// As contas de cor são funções puras, sem estado e sem navegador (ADR-0069): o `ColorSwatch` usa a do contraste.
|
|
41
41
|
import { contrastingInk, hsbToRgb, parseColor } from "./color.js";
|
|
42
|
-
export function Card({ variant = "base", padding = "normal", orientation = "vertical", accent, className, render, ...props }) {
|
|
43
|
-
return fundirRender(render, { className: cx("card", variant !== "base" && `card-${variant}`, accent && `card-accent card-accent-${accent}`, padding === "none" && "card-flush", orientation === "horizontal" && "card-horizontal", className), ...(variant === "contrast" ? { "data-theme": "dark" } : null), ...props });
|
|
42
|
+
export function Card({ variant = "base", padding = "normal", orientation = "vertical", accent, lift, fill, className, render, ...props }) {
|
|
43
|
+
return fundirRender(render, { className: cx("card", variant !== "base" && `card-${variant}`, lift && variant === "interactive" && "card-lift", accent && `card-accent card-accent-${accent}`, fill === "brand" && "card-fill-brand", padding === "none" && "card-flush", orientation === "horizontal" && "card-horizontal", className), ...(variant === "contrast" ? { "data-theme": "dark" } : null), ...props });
|
|
44
44
|
}
|
|
45
45
|
/** A mídia do cartão — a primeira das partes da especificação do `Card` (A-14). No vertical,
|
|
46
46
|
* primeira filha, ela SANGRA até a borda de cima e dos lados; no horizontal, fica à esquerda com a
|
|
@@ -119,11 +119,19 @@ export function Section({ surface = "background", spacing = "md", theme, variant
|
|
|
119
119
|
}
|
|
120
120
|
const TOM_DA_DIRECAO = { up: "success", down: "danger", flat: "neutral" };
|
|
121
121
|
const PALAVRA_DA_DIRECAO = { up: "Up", down: "Down", flat: "No change" };
|
|
122
|
-
export function KPI({ label, value, trend, direction, tone, directionLabel, variant = "card", className, ...props }) {
|
|
122
|
+
export function KPI({ label, value, trend, direction, tone, directionLabel, variant = "card", bars, defaultBar, className, ...props }) {
|
|
123
123
|
const tom = direction ? (tone ?? TOM_DA_DIRECAO[direction]) : undefined;
|
|
124
124
|
const miolo = _jsxs(_Fragment, { children: [_jsx("span", { className: "muted", children: label }), _jsx("strong", { children: value }), (trend || trend === 0 || direction) && _jsxs("small", { className: direction ? cx("kpi-trend", `kpi-trend-${direction}`, `kpi-tone-${tom}`) : undefined, children: [direction && _jsx("span", { className: "kpi-trend-icon", "aria-hidden": "true" }), direction && _jsx("span", { className: "sr-only", children: directionLabel ?? PALAVRA_DA_DIRECAO[direction] }), trend] })] });
|
|
125
|
-
|
|
126
|
-
|
|
125
|
+
const maior = bars && bars.length > 0 ? Math.max(...bars.map(b => b.amount), 1) : 1;
|
|
126
|
+
const escolhida = bars && bars.length > 0 ? Math.min(Math.max(defaultBar ?? bars.length - 1, 0), bars.length - 1) : -1;
|
|
127
|
+
const leituraDe = (b) => `${b.label} · ${typeof b.value === "string" || typeof b.value === "number" ? b.value : ""}`;
|
|
128
|
+
// As barras são botões de opção NATIVOS (o KPI é marcação pura, roda no servidor): o grupo é um `fieldset` com o rótulo
|
|
129
|
+
// do KPI, cada barra o `label` de um rádio com a leitura dela; o CSS mostra a leitura da escolhida e a da que está sob o
|
|
130
|
+
// mouse. O `name` vem do rótulo quando é texto.
|
|
131
|
+
const nomeDoGrupo = `kpi-bars-${typeof label === "string" ? label.toLowerCase().replace(/[^a-z0-9]+/g, "-") : "x"}`;
|
|
132
|
+
const barras = bars && bars.length > 0 && _jsxs("fieldset", { className: "kpi-bars-wrap", children: [typeof label === "string" && _jsx("legend", { className: "sr-only", children: label }), _jsx("div", { className: "kpi-bars", style: { "--kpi-bars": bars.length }, children: bars.map((b, i) => _jsxs("label", { className: "kpi-bar", children: [_jsx("input", { type: "radio", className: "kpi-bar-input", name: nomeDoGrupo, value: String(i), defaultChecked: i === escolhida, "aria-label": leituraDe(b) }), _jsx("span", { className: "kpi-bar-fill", style: { "--kpi-bar-h": `${Math.round(b.amount / maior * 100)}%` } }), _jsx("span", { className: "kpi-bar-reading", "aria-hidden": "true", children: leituraDe(b) })] }, i)) }), _jsx("div", { className: "kpi-bars-x", "aria-hidden": "true", style: { "--kpi-bars": bars.length }, children: bars.map((b, i) => _jsx("span", { children: b.label }, i)) })] });
|
|
133
|
+
return variant === "plain" ? _jsxs("div", { className: cx("kpi", className), ...props, children: [miolo, barras] })
|
|
134
|
+
: _jsxs(Card, { className: cx("kpi", variant === "brand" && "kpi-brand", className), ...props, children: [miolo, barras] });
|
|
127
135
|
}
|
|
128
136
|
export function DataList({ items }) { return _jsx("dl", { className: "data-list", children: items.map((i, n) => _jsxs(React.Fragment, { children: [_jsx("dt", { children: i.term }), _jsx("dd", { children: i.value })] }, n)) }); }
|
|
129
137
|
export function Timeline({ items, variant }) { return _jsx("ol", { className: "timeline", "data-timeline-style": variant, children: items.map((i, n) => _jsxs("li", { children: [_jsx("span", { className: "timeline-dot" }), _jsxs("div", { children: [_jsx("strong", { children: i.title }), i.description && _jsx("p", { children: i.description }), i.time && _jsx("small", { className: "muted", children: i.time })] })] }, n)) }); }
|
|
@@ -233,7 +241,14 @@ export function Kbd({ children, className, ...props }) { return _jsx("kbd", { cl
|
|
|
233
241
|
export const Textarea = forwardRef(function Textarea({ className, size, variant, ...props }, ref) { return _jsx("textarea", { ref: ref, className: cx("textarea", peleDoEixo("textarea", size), variant === "secondary" && "textarea-secondary", className), ...props }); });
|
|
234
242
|
// `size` nos três marcáveis pela mesma razão do campo: uma linha de formulário com um campo `sm`
|
|
235
243
|
// e um checkbox de tamanho fixo ao lado desalinha. O degrau vai na MARCA, não no rótulo.
|
|
236
|
-
|
|
244
|
+
// `variant="pill"` (o site B, o "Mark as done" — aprovado pela bancada em 01/11/2026, o item 4): a cápsula em volta, o alvo
|
|
245
|
+
// inteiro, de 44 (`--target-min`, a caixa 24) ou, com `size` sm/md, de 36 (`--control-h-md`, a caixa 20). `tone="success"`
|
|
246
|
+
// pinta a marcada de "feito" (a cápsula no verde a 18%, a letra e a caixa no verde). Sem `pill`, a caixa de sempre.
|
|
247
|
+
export function Checkbox({ label, labelHidden, description, size, variant = "default", tone, className, ...props }) {
|
|
248
|
+
if (variant === "pill")
|
|
249
|
+
return _jsxs("label", { className: cx("checkbox", "checkbox-pill", (size === "sm" || size === "md") && "checkbox-pill-md", className), "data-tone": tone, children: [_jsx("input", { type: "checkbox", ...props }), _jsx("span", { className: "control-mark" }), _jsx("span", { className: labelHidden ? "sr-only" : undefined, children: label })] });
|
|
250
|
+
return _jsxs("label", { className: cx("checkbox", labelHidden && "checkbox-bare", className), children: [_jsx("input", { type: "checkbox", ...props }), _jsx("span", { className: cx("control-mark", peleDoEixo("control-mark", size)) }), _jsxs("span", { className: labelHidden ? "sr-only" : undefined, children: [_jsx("strong", { children: label }), description && _jsxs(_Fragment, { children: [_jsx("br", {}), _jsx("span", { className: "muted", children: description })] })] })] });
|
|
251
|
+
}
|
|
237
252
|
// `description` no `Radio` e no `Switch` (15/10/2026, a referência tem nos dois): a linha apagada embaixo do nome, do
|
|
238
253
|
// mesmo jeito do `Checkbox`. Sem ela, a marcação é a de sempre.
|
|
239
254
|
const comDescricao = (label, description) => description ? _jsxs("span", { children: [_jsx("strong", { children: label }), _jsx("br", {}), _jsx("span", { className: "muted", children: description })] }) : label;
|
|
@@ -8,10 +8,15 @@ export interface StepItem {
|
|
|
8
8
|
state?: StepState;
|
|
9
9
|
optional?: ReactNode;
|
|
10
10
|
onClick?: () => void;
|
|
11
|
+
href?: string;
|
|
11
12
|
}
|
|
12
|
-
export
|
|
13
|
+
export type StepperVariant = "default" | "path" | "bar";
|
|
14
|
+
export declare function Stepper({ items, label, variant, startContent, endContent, className }: {
|
|
13
15
|
items: StepItem[];
|
|
14
16
|
label?: string;
|
|
17
|
+
variant?: StepperVariant;
|
|
18
|
+
startContent?: ReactNode;
|
|
19
|
+
endContent?: ReactNode;
|
|
15
20
|
className?: string;
|
|
16
21
|
}): React.JSX.Element;
|
|
17
22
|
export interface BreadcrumbItem {
|
|
@@ -249,10 +254,18 @@ export interface NavListItem {
|
|
|
249
254
|
};
|
|
250
255
|
/** Os sinais ao lado do `value` (AN-04): fixada, silenciada. Pequenos e apagados, cada um com nome. */
|
|
251
256
|
indicators?: NavListIndicator[];
|
|
257
|
+
/** A cor de categoria do círculo do ícone, no `size="lg"` (as cores do `Badge`). */
|
|
258
|
+
tone?: BadgeCategory;
|
|
259
|
+
/** A linha da página em que se está: `aria-current="page"`, o fundo, e o selo `currentLabel` no lugar da seta. */
|
|
260
|
+
current?: boolean;
|
|
252
261
|
}
|
|
253
|
-
export declare function NavList({ items, className, ...props }: HTMLAttributes<HTMLUListElement> & RefAttributes<HTMLUListElement> & {
|
|
262
|
+
export declare function NavList({ items, size, currentLabel, className, ...props }: HTMLAttributes<HTMLUListElement> & RefAttributes<HTMLUListElement> & {
|
|
254
263
|
items: NavListItem[];
|
|
264
|
+
size?: "md" | "lg";
|
|
265
|
+
/** O texto do selo da linha atual (só aparece com `current` num item). */
|
|
266
|
+
currentLabel?: ReactNode;
|
|
255
267
|
}): React.JSX.Element;
|
|
268
|
+
import type { BadgeCategory } from "./markup.js";
|
|
256
269
|
export interface CommandItem {
|
|
257
270
|
id: string;
|
|
258
271
|
label: string;
|
|
@@ -262,8 +275,12 @@ export interface CommandItem {
|
|
|
262
275
|
/** 0.32.0 (DOC-06): o grupo do item ("Componentes", "Páginas"). Itens com o mesmo grupo saem juntos,
|
|
263
276
|
* sob o título dele, na ordem em que o grupo aparece primeiro. */
|
|
264
277
|
group?: string;
|
|
278
|
+
/** A linha de baixo do item, apagada e cortada (no `size="lg"`). */
|
|
279
|
+
description?: string;
|
|
280
|
+
/** A cor de categoria do círculo do ícone (no `size="lg"`), como as do `Badge`. Sem ela, o círculo neutro. */
|
|
281
|
+
tone?: BadgeCategory;
|
|
265
282
|
}
|
|
266
|
-
export declare function CommandPalette({ open, onClose, items, placeholder, label, shortcuts }: {
|
|
283
|
+
export declare function CommandPalette({ open, onClose, items, placeholder, label, shortcuts, size, filters, preview, footer }: {
|
|
267
284
|
open: boolean;
|
|
268
285
|
onClose: () => void;
|
|
269
286
|
items: CommandItem[];
|
|
@@ -271,6 +288,13 @@ export declare function CommandPalette({ open, onClose, items, placeholder, labe
|
|
|
271
288
|
label?: string;
|
|
272
289
|
/** 0.32.0 (DOC-07): a linha que ensina as teclas, embaixo — ↑ ↓ mover, Enter abrir, Esc fechar. */
|
|
273
290
|
shortcuts?: boolean;
|
|
291
|
+
size?: "md" | "lg";
|
|
292
|
+
/** No `lg`: o que vai embaixo do campo — os filtros que o app desenha (um `ToggleGroup`, por exemplo). */
|
|
293
|
+
filters?: ReactNode;
|
|
294
|
+
/** No `lg`: a prévia do item ativo, ao lado da lista. Some quando a janela é estreita. */
|
|
295
|
+
preview?: (item: CommandItem) => ReactNode;
|
|
296
|
+
/** No `lg`: o que vai no pé, ao lado da linha das teclas. */
|
|
297
|
+
footer?: ReactNode;
|
|
274
298
|
}): React.JSX.Element;
|
|
275
299
|
export declare function CommandPaletteShell({ open, query, onQueryChange, onClose, label, children }: {
|
|
276
300
|
open: boolean;
|
|
@@ -21,14 +21,20 @@ import { SearchField } from "./inputs.js";
|
|
|
21
21
|
// mudou foi a ORDEM documentada, que colocava overlays no "resto" sem motivo medido.
|
|
22
22
|
import { Tooltip } from "./overlays.js";
|
|
23
23
|
import { Avatar } from "./identity-client.js";
|
|
24
|
-
export function Stepper({ items, label, className }) {
|
|
24
|
+
export function Stepper({ items, label, variant = "default", startContent, endContent, className }) {
|
|
25
25
|
const s = useAureaStrings();
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
26
|
+
const comPontas = variant === "path";
|
|
27
|
+
const lista = _jsxs("div", { role: "list", "aria-label": label ?? s.stepperLabel, className: cx("stepper", variant === "default" && className), style: comPontas ? { "--stepper-cols": items.length + (startContent != null ? 1 : 0) + (endContent != null ? 1 : 0) } : undefined, children: [comPontas && startContent != null && _jsx("div", { role: "listitem", className: "step-end step-end-start", children: startContent }), items.map((it, n) => {
|
|
28
|
+
const st = it.state ?? "default";
|
|
29
|
+
const marca = st === "done" && variant !== "path" ? _jsx(Icon, { name: "check" }) : st === "error" ? _jsx(Icon, { name: "x-circle" }) : n + 1;
|
|
30
|
+
const miolo = variant === "bar" ? _jsx("span", { className: "sr-only", children: it.label }) : _jsxs(_Fragment, { children: [_jsx("span", { className: "step-dot", children: marca }), _jsx("strong", { children: it.label }), it.optional && _jsx("small", { className: "step-optional", children: it.optional })] });
|
|
31
|
+
return _jsx("div", { role: "listitem", className: cx("step", st !== "default" && `step-${st}`), "aria-current": st === "active" ? "step" : undefined, children: it.href ? _jsx("a", { className: "step-trigger", href: it.href, onClick: it.onClick, children: miolo }) : it.onClick || variant === "bar" ? _jsx("button", { type: "button", className: "step-trigger", onClick: it.onClick, children: miolo }) : miolo }, n);
|
|
32
|
+
}), comPontas && endContent != null && _jsx("div", { role: "listitem", className: "step-end", children: endContent })] });
|
|
33
|
+
if (variant === "path")
|
|
34
|
+
return _jsx("div", { className: cx("stepper-path", className), children: lista });
|
|
35
|
+
if (variant === "bar")
|
|
36
|
+
return _jsxs("div", { className: cx("stepper-bar", className), children: [startContent != null && _jsx("span", { className: "stepper-bar-label", children: startContent }), lista, endContent != null && _jsx("span", { className: "stepper-bar-count", role: "status", children: endContent })] });
|
|
37
|
+
return lista;
|
|
32
38
|
}
|
|
33
39
|
export function Breadcrumb({ items, label }) { const s = useAureaStrings(); return _jsx("nav", { className: "breadcrumb", "aria-label": label ?? s.breadcrumbLabel, children: items.map((i, n) => _jsxs(React.Fragment, { children: [n > 0 && _jsx(Icon, { name: "caret-right", size: "sm" }), " ", i.render ? fundirRender(i.render, { children: i.label }, "a") : i.href ? _jsx("a", { href: i.href, children: i.label }) : _jsx("strong", { "aria-current": "page", children: i.label })] }, n)) }); }
|
|
34
40
|
export function Tabs({ tabs, value, onChange, label, orientation, activateOnFocus = true, loopFocus, panel = "card", variant = "primary" }) { const s = useAureaStrings(); const ancora = useRef(null); const resolvida = useValorResponsivo(orientation, "horizontal", ancora); return _jsxs(BaseTabs.Root, { ref: ancora, value: value, onValueChange: v => onChange(String(v)), orientation: resolvida, className: "tabs-root", children: [_jsx(BaseTabs.List, { className: cx("tabs", variant === "secondary" && "tabs-secondary"), "aria-label": label ?? s.tabsLabel, activateOnFocus: activateOnFocus, loopFocus: loopFocus, children: tabs.map(t => _jsx(BaseTabs.Tab, { value: t.id, className: "tab", children: t.label }, t.id)) }), tabs.map(t => _jsx(BaseTabs.Panel, { value: t.id, className: panel === "plain" ? "tabs-panel" : "card card-inset", tabIndex: 0, children: t.content }, t.id))] }); }
|
|
@@ -483,17 +489,32 @@ export function BottomNav({ items, current, variant = "floating", indicator = "n
|
|
|
483
489
|
: _jsx("button", { type: "button", className: "bottom-nav-item", "aria-current": ativo ? "page" : undefined, onClick: it.onClick, children: miolo }, it.id);
|
|
484
490
|
}) });
|
|
485
491
|
}
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
492
|
+
// `size="lg"` (o site B — o menu do celular, aprovado pela bancada em 01/11/2026, o item 10): a linha de 56 em cápsula (o
|
|
493
|
+
// ícone de 40 + 8 em cima e embaixo), o ícone num círculo de 40 tingido (`tone`), a letra 18 seminegrito. `current` marca a
|
|
494
|
+
// linha atual (o fundo `--fill-2`), e `currentLabel` é o selo que ela leva no lugar da seta ("You are here"). Sem `lg`, a
|
|
495
|
+
// lista de sempre; `current` vale nos dois tamanhos.
|
|
496
|
+
export function NavList({ items, size = "md", currentLabel, className, ...props }) {
|
|
497
|
+
const grande = size === "lg";
|
|
498
|
+
return _jsx("ul", { className: cx("nav-list", grande && "nav-list-lg", className), ...props, children: items.map(it => {
|
|
499
|
+
const icone = it.icon && (grande ? _jsx("span", { className: "nav-list-tile", "data-tone": it.tone, children: _jsx(Icon, { name: it.icon }) }) : _jsx(Icon, { name: it.icon }));
|
|
500
|
+
const miolo = _jsxs(_Fragment, { children: [it.avatar ? _jsx(Avatar, { src: it.avatar.src, fallback: it.avatar.fallback }) : icone, _jsxs("span", { className: "nav-list-text", children: [_jsx("span", { className: "nav-list-label", children: it.label }), it.description != null && _jsx("span", { className: "nav-list-description", children: it.description })] }), it.indicators && it.indicators.length > 0 && _jsx("span", { className: "nav-list-indicators", children: it.indicators.map(x => _jsxs("span", { children: [_jsx(Icon, { name: x.icon, size: "sm" }), _jsx("span", { className: "sr-only", children: x.label })] }, x.label)) }), it.value != null && _jsx("span", { className: "nav-list-value", children: it.value }), it.current && currentLabel != null ? _jsx(Badge, { variant: "primary", emphasis: "solid", className: "nav-list-here", children: currentLabel })
|
|
501
|
+
: (it.href || it.render) && _jsx(Icon, { name: "caret-right", size: "sm", className: "nav-list-chevron" })] });
|
|
502
|
+
const atual = it.current ? "page" : undefined;
|
|
489
503
|
return _jsx("li", { children: it.render && !it.disabled
|
|
490
|
-
? fundirRender(it.render, { className: "nav-list-row", onClick: it.onClick, children: miolo }, "a")
|
|
504
|
+
? fundirRender(it.render, { className: "nav-list-row", onClick: it.onClick, "aria-current": atual, children: miolo }, "a")
|
|
491
505
|
: it.href && !it.disabled
|
|
492
|
-
? _jsx("a", { href: it.href, className: "nav-list-row", onClick: it.onClick, children: miolo })
|
|
493
|
-
: _jsx("button", { type: "button", className: "nav-list-row", "aria-disabled": it.disabled || undefined, onClick: it.disabled ? undefined : it.onClick, children: miolo }) }, it.id);
|
|
506
|
+
? _jsx("a", { href: it.href, className: "nav-list-row", "aria-current": atual, onClick: it.onClick, children: miolo })
|
|
507
|
+
: _jsx("button", { type: "button", className: "nav-list-row", "aria-current": atual, "aria-disabled": it.disabled || undefined, onClick: it.disabled ? undefined : it.onClick, children: miolo }) }, it.id);
|
|
494
508
|
}) });
|
|
495
509
|
}
|
|
496
|
-
|
|
510
|
+
// `size="lg"` (o site B — a busca nova, aprovada pela bancada em 01/11/2026, o item 2 e o D-2): a janela da largura `lg`
|
|
511
|
+
// (1024), o campo de 52 (era 64 na 0.54.0; o Victor, 03/11/2026, como a referência) com a lupa e o "Esc" dentro, o encaixe `filters` embaixo dele, o título do grupo em mono maiúsculo
|
|
512
|
+
// com a contagem, o item de 50 com o ícone num círculo de 40 tingido (`tone`), o título e a descrição cortada, o "↵" na
|
|
513
|
+
// linha ativa, a prévia (`preview`) do item ativo ao lado da lista — some abaixo de 1240 — e o encaixe `footer` no pé,
|
|
514
|
+
// ao lado das teclas. Sem `size="lg"`, a paleta de sempre; os encaixes só valem no `lg`.
|
|
515
|
+
export function CommandPalette({ open, onClose, items, placeholder, label, shortcuts = true, size = "md", filters, preview, footer }) {
|
|
516
|
+
const grande = size === "lg";
|
|
517
|
+
const [ativo, setAtivo] = React.useState(undefined);
|
|
497
518
|
const s = useAureaStrings();
|
|
498
519
|
const idAtalhos = React.useId();
|
|
499
520
|
// GRUPOS (0.32.0, DOC-06). Em 13/08/2026 a Aurea ficou SEM grupo, e a medição decidiu: dar a cada
|
|
@@ -516,7 +537,9 @@ export function CommandPalette({ open, onClose, items, placeholder, label, short
|
|
|
516
537
|
const portal = usePortalContainer();
|
|
517
538
|
const campo = useRef(null);
|
|
518
539
|
const executa = (item) => { onClose(); item.run(); };
|
|
519
|
-
const linha = (item) =>
|
|
540
|
+
const linha = (item) => grande
|
|
541
|
+
? _jsxs(BaseAutocomplete.Item, { value: item, className: "menu-item command-item", onClick: () => executa(item), children: [_jsx("span", { className: "command-item-tile", "data-tone": item.tone, children: item.icon && _jsx(Icon, { name: item.icon }) }), _jsxs("span", { className: "command-item-text", children: [_jsx("span", { className: "command-item-label", children: item.label }), item.description && _jsx("span", { className: "command-item-description", children: item.description })] }), item.kbd ? _jsx(Kbd, { children: item.kbd }) : _jsx(Kbd, { className: "command-item-enter", "aria-hidden": "true", children: "\u21B5" })] }, item.id)
|
|
542
|
+
: _jsxs(BaseAutocomplete.Item, { value: item, className: "menu-item command-item", onClick: () => executa(item), children: [item.icon && _jsx(Icon, { name: item.icon }), _jsx("span", { className: "command-item-label", children: item.label }), item.kbd && _jsx(Kbd, { children: item.kbd })] }, item.id);
|
|
520
543
|
// A JANELA É A DO MOTOR (14/10/2026), como na paleta de exemplo dele (1.6.0): `Dialog` por fora,
|
|
521
544
|
// `Autocomplete` `inline` por dentro. Até aqui a moldura era uma `div` feita à mão, e o Victor achou no site
|
|
522
545
|
// publicado: o clique no fundo não fechava, e depois dele o foco ia para a página — o Esc, que era escutado
|
|
@@ -525,9 +548,12 @@ export function CommandPalette({ open, onClose, items, placeholder, label, short
|
|
|
525
548
|
// (`onOpenChange`), e quem fecha é o `onClose` — mesma regra do Dialog e do Drawer daqui. Os nomes de classe
|
|
526
549
|
// ficaram: a moldura (`Viewport`) é a `.command-overlay`, a caixa (`Popup`) é a `.command-palette`.
|
|
527
550
|
return _jsx(BaseDialog.Root, { open: open, onOpenChange: o => { if (!o)
|
|
528
|
-
onClose(); }, children: _jsx(BaseDialog.Portal, { container: portal, children: _jsx(BaseDialog.Viewport, { className: "command-overlay", children: _jsxs(BaseDialog.Popup, { className: "command-palette", "aria-label": label ?? s.commandLabel, initialFocus: campo, children: [_jsxs(BaseAutocomplete.Root, { items: (grupos ?? items), itemToStringValue: (i) => i.label, mode: "list", open: true, inline: true, autoHighlight: "always", keepHighlight: true,
|
|
529
|
-
|
|
530
|
-
|
|
551
|
+
onClose(); }, children: _jsx(BaseDialog.Portal, { container: portal, children: _jsx(BaseDialog.Viewport, { className: "command-overlay", children: _jsxs(BaseDialog.Popup, { className: cx("command-palette", grande && "command-palette-lg"), "aria-label": label ?? s.commandLabel, initialFocus: campo, children: [_jsxs(BaseAutocomplete.Root, { items: (grupos ?? items), itemToStringValue: (i) => i.label, mode: "list", open: true, inline: true, autoHighlight: "always", keepHighlight: true, onItemHighlighted: grande && preview ? (v) => { if (v)
|
|
552
|
+
setAtivo(v); } : undefined, children: [grande
|
|
553
|
+
? _jsxs("div", { className: "command-field", children: [_jsx(Icon, { name: "magnifying-glass" }), _jsx(BaseAutocomplete.Input, { ref: campo, className: "command-input", "aria-label": placeholder ?? s.commandPlaceholder, placeholder: placeholder ?? s.commandPlaceholder, "aria-expanded": true, "aria-describedby": shortcuts ? idAtalhos : undefined }), _jsx(Kbd, { children: "Esc" })] })
|
|
554
|
+
: _jsx(BaseAutocomplete.Input, { ref: campo, className: "input", "aria-label": placeholder ?? s.commandPlaceholder, placeholder: placeholder ?? s.commandPlaceholder, "aria-expanded": true, "aria-describedby": shortcuts ? idAtalhos : undefined }), grande && filters != null && _jsx("div", { className: "command-filters", children: filters }), _jsxs("div", { className: grande && preview ? "command-body" : "command-body-plain", children: [_jsxs("div", { className: "menu command-list", children: [_jsx(BaseAutocomplete.Empty, { className: "combobox-empty", children: s.comboboxEmpty }), _jsx(BaseAutocomplete.List, { children: grupos
|
|
555
|
+
? (g) => _jsxs(BaseAutocomplete.Group, { items: g.items, className: "command-group", children: [g.value && _jsxs(BaseAutocomplete.GroupLabel, { className: "command-group-label", children: [g.value, grande && _jsx("span", { className: "command-group-count", children: g.items.length })] }), _jsx(BaseAutocomplete.Collection, { children: linha })] }, g.value)
|
|
556
|
+
: _jsx(BaseAutocomplete.Collection, { children: linha }) })] }), grande && preview && ativo && _jsx("div", { className: "command-preview", children: preview(ativo) })] })] }), (shortcuts || (grande && footer != null)) && _jsxs("div", { className: grande ? "command-foot" : "command-foot-plain", children: [shortcuts && _jsxs("p", { className: "command-shortcuts", id: idAtalhos, children: [_jsxs("span", { children: [_jsx(Kbd, { children: "\u2191" }), _jsx(Kbd, { children: "\u2193" }), " ", s.commandHintMove] }), _jsxs("span", { children: [_jsx(Kbd, { children: "Enter" }), " ", s.commandHintSelect] }), _jsxs("span", { children: [_jsx(Kbd, { children: "Esc" }), " ", s.commandHintClose] })] }), grande && footer] })] }) }) }) });
|
|
531
557
|
}
|
|
532
558
|
// A CASCA (15/10/2026, o Victor: "C sim"): a mesma janela do motor da `CommandPalette` acima. Até aqui era uma `div`
|
|
533
559
|
// feita à mão — o mesmo defeito que a busca do site teve: o clique fora e o Esc não fechavam, e o Tab saía da caixa.
|
package/dist/pure.d.ts
CHANGED
|
@@ -222,8 +222,11 @@ export interface AureaStrings {
|
|
|
222
222
|
qrCode: string;
|
|
223
223
|
chartLabel: string;
|
|
224
224
|
copyCode: string;
|
|
225
|
+
copy: string;
|
|
225
226
|
codeBlockPreview: string;
|
|
226
227
|
codeBlockCode: string;
|
|
228
|
+
codeBlockExpand: string;
|
|
229
|
+
codeBlockCollapse: string;
|
|
227
230
|
copied: string;
|
|
228
231
|
linkCopied: string;
|
|
229
232
|
linkCopyFailed: string;
|
package/dist/pure.js
CHANGED
|
@@ -57,10 +57,10 @@ export const universalStates = ["waiting_user", "waiting_approval", "waiting_dep
|
|
|
57
57
|
// perdeu qualidade é avisado. Um `role="alert"` aqui interromperia o leitor de tela por uma
|
|
58
58
|
// condição que não pede ação imediata, que é o oposto do que o papel serve.
|
|
59
59
|
export const stateSeverity = (state) => state.startsWith("waiting_") ? "info" : "warning";
|
|
60
|
-
export const defaultStrings = { passwordShow: "Show password", passwordHide: "Hide password", skipToContent: "Skip to content", close: "Close", confirmCancel: "Cancel", dataError: "This could not be loaded.", dataCrashed: "Something went wrong here.", dataRetry: "Try again", dataEmpty: "Nothing here yet", confirmProceed: "Continue", paginationLabel: "Pagination", paginationPage: "Page", previous: "Previous", next: "Next", breadcrumbLabel: "Breadcrumb", tabsLabel: "Tabs", optionsLabel: "Options", tableLabel: "Table", commandLabel: "Command palette", commandPlaceholder: "Type a command…", commandHintMove: "move", commandHintSelect: "open", commandHintClose: "close", dismissNotification: "Dismiss notification", toolbarLabel: "Toolbar", loading: "Loading", otpDigit: "Digit", stepperLabel: "Steps", increment: "Increase", decrement: "Decrease", comboboxEmpty: "No results", comboboxClear: "Clear selection", comboboxOpen: "Open list", comboboxRemove: "Remove", comboboxLoading: "Loading…", fileDropPrompt: "Drag files here or click to select", fileAdded: "File added", fileRemoved: "File removed", fileRemove: "Remove", fileTooLarge: "File exceeds the size limit", fileWrongType: "File type not allowed", treeLabel: "Tree", notificationsLabel: "Notifications", notificationMarkAll: "Mark all as read", notificationEmpty: "No notifications", notificationUnread: "Unread", notificationNew: "new notifications", dataGridFilter: "Filter", dataGridEmpty: "No results", dataGridSelectAll: "Select all rows", dataGridSelectRow: "Select row", dataGridSelected: "selected", dataGridClearSelection: "Clear selection", dataGridBulkLabel: "Bulk actions", dataGridColumns: "Columns", dataGridResize: "Resize column", dataGridStale: "Showing data that may be out of date.", dataGridPartial: "Some rows could not be loaded. What you see is incomplete.", dataGridError: "The rows could not be loaded.", dataGridDetails: "Details", dataGridDetailPanel: "Row detail", dataGridExport: "Export", dataGridExportRows: "rows", dataGridExportFiltered: "filtered rows", dataGridExportSelected: "selected rows", mediaPlayer: "Media player", mediaPlay: "Play", mediaPause: "Pause", mediaMute: "Mute", mediaUnmute: "Unmute", mediaSeek: "Seek", mediaVolume: "Volume", mediaCaptionsShow: "Show captions", mediaCaptionsHide: "Hide captions", mediaSkipBack: "Skip back 10 seconds", mediaSkipForward: "Skip forward 10 seconds", mediaFullscreenEnter: "Enter full screen", mediaFullscreenExit: "Exit full screen", mediaEmbedOpen: "Open the video on its own site", carouselLabel: "Carousel", carouselSlide: "Slide", positionOf: "of", carouselPrev: "Previous slide", carouselNext: "Next slide", galleryLabel: "Gallery", galleryVideo: "Video", sortableLabel: "Sortable list", sortableHandle: "Reorder", sortableHelp: "Press Space to pick this up, then Arrow Up and Arrow Down to move it. Space drops it, Escape puts it back.", sortableGrabbed: "Picked up", sortableDropped: "Dropped", sortableMoved: "Moved", sortableCanceled: "Put back", blockEditorLabel: "Content blocks", blockLabel: "Block", blockRemove: "Remove block", uploadSending: "Uploading", uploadCancel: "Cancel upload", uploadRetry: "Retry upload", uploadError: "Upload failed", uploadCanceled: "Upload canceled", uploadComplete: "Upload complete", uploadPause: "Pause upload", uploadResume: "Resume upload", uploadPaused: "Paused", uploadPending: "Waiting", uploadChecksum: "Checksum", uploadChecksumBad: "The server received different bytes than the ones sent.", fileConflict: "A file with this name is already in the queue", fileReplace: "Replace", fileKeepBoth: "Keep both", fileSkip: "Skip", uploadReceipt: "Receipt", uploadReceiptCopy: "Copy receipt", agentInspector: "Agent inspector", invocationLabel: "Invocation", invocationInput: "Input", invocationOutput: "Output", taskQueueLabel: "Task queue", taskState: { queued: "Queued", running: "Running", completed: "Completed", failed: "Failed", blocked: "Blocked", paused: "Paused" }, taskPriority: { low: "Low", medium: "Medium", high: "High" }, approvalLabel: "Approval", approvalApprove: "Approve", approvalDeny: "Deny", approvalApproved: "Approved", approvalDenied: "Denied", approvalDeadline: "Decide by", approvalRisk: { low: "Low risk", medium: "Medium risk", high: "High risk" }, permissionLabel: "Tool permissions", permissionAsk: "Ask", permissionAlways: "Always", permissionNever: "Never", eventStreamLabel: "Events", traceLabel: "Trace", healthLabel: "Health", healthState: { operational: "Operational", degraded: "Degraded", down: "Down", maintenance: "Maintenance", unknown: "Unknown" }, modelUsageLabel: "Model usage", usageMetric: { tokens: "Tokens", cost: "Cost", requests: "Requests" }, costMeterLabel: "Cost", costMeterSpent: "Spent", costMeterRemaining: "left", costMeterExceeded: "Over the limit", costMeterNear: "Spending is past the soft limit.", costMeterOver: "The limit has been reached. Further calls are blocked.", memoryLabel: "Memory ledger", memoryProvenance: "Where this came from", memoryOperation: { added: "Added", updated: "Updated", recalled: "Recalled", forgotten: "Forgotten" }, memoryScope: { episodic: "Episodic", semantic: "Semantic", procedural: "Procedural" }, agentMessageLabel: "Agent messages", agentMessageTo: "to", agentMessageBroadcast: "all agents", agentMessageReason: "Why it went this way", agentMessageKind: { request: "Request", response: "Response", handoff: "Handoff", broadcast: "Broadcast", error: "Error" }, automationWhen: "When", automationThen: "Then", automationEnabled: "Enabled", automationLastRun: "Last run", automationResult: { success: "Succeeded", failure: "Failed" }, graphLabel: "Dependency graph", graphZoomIn: "Zoom in", graphZoomOut: "Zoom out", graphFit: "Fit to screen", graphLegend: "Legend", graphLegendKind: "Link type", graphLegendStatus: "Status", graphOverview: "Overview", graphConnections: "connections", graphShow: "Show", graphJoin: "Join", graphArrange: "Arrange the map", graphUndo: "Undo", graphRedo: "Redo", graphAlignLeft: "Align left", graphAlignCenter: "Align centers", graphAlignRight: "Align right", graphAlignTop: "Align top", graphAlignMiddle: "Align middles", graphAlignBottom: "Align bottom", graphDistributeH: "Distribute horizontally", graphDistributeV: "Distribute vertically", graphPin: "Pin in place", graphPinned: "pinned", graphRelayout: "Rearrange", graphExpand: "Open", graphCollapse: "Close", graphHidden: "hidden", graphEdge: "Connection", graphEdgeHelp: "Enter selects the connection.", graphHandle: "Connection point", graphNodeHelp: "Enter or Space selects the node. Once selected, the arrow keys move it; with Shift, further. Escape releases it.", graphMoved: "Node moved", graphSelectionCleared: "No node selected", agentState: { idle: "Idle", thinking: "Thinking", running: "Running", paused: "Paused", error: "Error", completed: "Completed" }, codeEditor: "Code editor", chatLabel: "Conversation", chatMessage: "Message", chatSend: "Send", chatAttach: "Attach file", chatAttachments: "Attachments", chatReplyTo: "Replying to", chatReplyCancel: "Cancel reply", chatEditing: "Editing message", chatEditCancel: "Cancel editing", chatSave: "Save", chatEdited: "edited", chatForwardedFrom: "Forwarded from", qrCode: "QR code", chartLabel: "Chart", copyCode: "Copy code", codeBlockPreview: "Preview", codeBlockCode: "Code", copied: "Copied", linkCopied: "Link copied", linkCopyFailed: "Could not copy. Copy the link below.", tocLabel: "On this page", navigationToggle: "Navigation", sidebarLabel: "Sidebar", sidebarCollapse: "Collapse sidebar", sidebarExpand: "Expand sidebar", bottomNavLabel: "Main", themeToDark: "Switch to dark theme", themeChoice: "Theme", themeLight: "Light", themeDark: "Dark", themeSystem: "System", themeToLight: "Switch to light theme", datePlaceholder: "Pick a date", dateRangePlaceholder: "Pick a date range", colorPicker: "Color picker", colorArea2D: "2D slider", colorChannel: { hue: "Hue", saturation: "Saturation", brightness: "Brightness", lightness: "Lightness", red: "Red", green: "Green", blue: "Blue", alpha: "Alpha" }, colorHue: { red: "red", orange: "orange", yellow: "yellow", green: "green", cyan: "cyan", blue: "blue", purple: "purple", magenta: "magenta", pink: "pink", brown: "brown", gray: "gray", white: "white", black: "black" }, colorTone: { veryDark: "very dark", dark: "dark", light: "light", veryLight: "very light", vivid: "vivid", pale: "pale", grayish: "grayish" }, colorNameFormat: "{lightness} {chroma} {hue}", colorHex: "Hex", colorSwatches: "Swatches", consentTitle: "Cookies on this site", consentReject: "Reject non-essential cookies", consentAccept: "Accept all cookies", consentChoose: "Choose cookies", consentPreferences: "Cookie preferences", consentSave: "Save my choices", consentRequired: "Always on", consentAccepted: "You accepted all cookies. You can change your choice at any time.", consentRejected: "You rejected the non-essential cookies. You can change your choice at any time.", consentSaved: "Your cookie choices were saved. You can change them at any time.", consentHide: "Hide this message", universalState: { waiting_user: "Waiting for someone to act.", waiting_approval: "Waiting for approval.", waiting_dependency: "Waiting for something else to finish.", offline: "No connection. This was loaded earlier.", stale: "This may be out of date.", partial: "Some of this could not be loaded.", degraded: "Working with reduced capability." } };
|
|
60
|
+
export const defaultStrings = { passwordShow: "Show password", passwordHide: "Hide password", skipToContent: "Skip to content", close: "Close", confirmCancel: "Cancel", dataError: "This could not be loaded.", dataCrashed: "Something went wrong here.", dataRetry: "Try again", dataEmpty: "Nothing here yet", confirmProceed: "Continue", paginationLabel: "Pagination", paginationPage: "Page", previous: "Previous", next: "Next", breadcrumbLabel: "Breadcrumb", tabsLabel: "Tabs", optionsLabel: "Options", tableLabel: "Table", commandLabel: "Command palette", commandPlaceholder: "Type a command…", commandHintMove: "move", commandHintSelect: "open", commandHintClose: "close", dismissNotification: "Dismiss notification", toolbarLabel: "Toolbar", loading: "Loading", otpDigit: "Digit", stepperLabel: "Steps", increment: "Increase", decrement: "Decrease", comboboxEmpty: "No results", comboboxClear: "Clear selection", comboboxOpen: "Open list", comboboxRemove: "Remove", comboboxLoading: "Loading…", fileDropPrompt: "Drag files here or click to select", fileAdded: "File added", fileRemoved: "File removed", fileRemove: "Remove", fileTooLarge: "File exceeds the size limit", fileWrongType: "File type not allowed", treeLabel: "Tree", notificationsLabel: "Notifications", notificationMarkAll: "Mark all as read", notificationEmpty: "No notifications", notificationUnread: "Unread", notificationNew: "new notifications", dataGridFilter: "Filter", dataGridEmpty: "No results", dataGridSelectAll: "Select all rows", dataGridSelectRow: "Select row", dataGridSelected: "selected", dataGridClearSelection: "Clear selection", dataGridBulkLabel: "Bulk actions", dataGridColumns: "Columns", dataGridResize: "Resize column", dataGridStale: "Showing data that may be out of date.", dataGridPartial: "Some rows could not be loaded. What you see is incomplete.", dataGridError: "The rows could not be loaded.", dataGridDetails: "Details", dataGridDetailPanel: "Row detail", dataGridExport: "Export", dataGridExportRows: "rows", dataGridExportFiltered: "filtered rows", dataGridExportSelected: "selected rows", mediaPlayer: "Media player", mediaPlay: "Play", mediaPause: "Pause", mediaMute: "Mute", mediaUnmute: "Unmute", mediaSeek: "Seek", mediaVolume: "Volume", mediaCaptionsShow: "Show captions", mediaCaptionsHide: "Hide captions", mediaSkipBack: "Skip back 10 seconds", mediaSkipForward: "Skip forward 10 seconds", mediaFullscreenEnter: "Enter full screen", mediaFullscreenExit: "Exit full screen", mediaEmbedOpen: "Open the video on its own site", carouselLabel: "Carousel", carouselSlide: "Slide", positionOf: "of", carouselPrev: "Previous slide", carouselNext: "Next slide", galleryLabel: "Gallery", galleryVideo: "Video", sortableLabel: "Sortable list", sortableHandle: "Reorder", sortableHelp: "Press Space to pick this up, then Arrow Up and Arrow Down to move it. Space drops it, Escape puts it back.", sortableGrabbed: "Picked up", sortableDropped: "Dropped", sortableMoved: "Moved", sortableCanceled: "Put back", blockEditorLabel: "Content blocks", blockLabel: "Block", blockRemove: "Remove block", uploadSending: "Uploading", uploadCancel: "Cancel upload", uploadRetry: "Retry upload", uploadError: "Upload failed", uploadCanceled: "Upload canceled", uploadComplete: "Upload complete", uploadPause: "Pause upload", uploadResume: "Resume upload", uploadPaused: "Paused", uploadPending: "Waiting", uploadChecksum: "Checksum", uploadChecksumBad: "The server received different bytes than the ones sent.", fileConflict: "A file with this name is already in the queue", fileReplace: "Replace", fileKeepBoth: "Keep both", fileSkip: "Skip", uploadReceipt: "Receipt", uploadReceiptCopy: "Copy receipt", agentInspector: "Agent inspector", invocationLabel: "Invocation", invocationInput: "Input", invocationOutput: "Output", taskQueueLabel: "Task queue", taskState: { queued: "Queued", running: "Running", completed: "Completed", failed: "Failed", blocked: "Blocked", paused: "Paused" }, taskPriority: { low: "Low", medium: "Medium", high: "High" }, approvalLabel: "Approval", approvalApprove: "Approve", approvalDeny: "Deny", approvalApproved: "Approved", approvalDenied: "Denied", approvalDeadline: "Decide by", approvalRisk: { low: "Low risk", medium: "Medium risk", high: "High risk" }, permissionLabel: "Tool permissions", permissionAsk: "Ask", permissionAlways: "Always", permissionNever: "Never", eventStreamLabel: "Events", traceLabel: "Trace", healthLabel: "Health", healthState: { operational: "Operational", degraded: "Degraded", down: "Down", maintenance: "Maintenance", unknown: "Unknown" }, modelUsageLabel: "Model usage", usageMetric: { tokens: "Tokens", cost: "Cost", requests: "Requests" }, costMeterLabel: "Cost", costMeterSpent: "Spent", costMeterRemaining: "left", costMeterExceeded: "Over the limit", costMeterNear: "Spending is past the soft limit.", costMeterOver: "The limit has been reached. Further calls are blocked.", memoryLabel: "Memory ledger", memoryProvenance: "Where this came from", memoryOperation: { added: "Added", updated: "Updated", recalled: "Recalled", forgotten: "Forgotten" }, memoryScope: { episodic: "Episodic", semantic: "Semantic", procedural: "Procedural" }, agentMessageLabel: "Agent messages", agentMessageTo: "to", agentMessageBroadcast: "all agents", agentMessageReason: "Why it went this way", agentMessageKind: { request: "Request", response: "Response", handoff: "Handoff", broadcast: "Broadcast", error: "Error" }, automationWhen: "When", automationThen: "Then", automationEnabled: "Enabled", automationLastRun: "Last run", automationResult: { success: "Succeeded", failure: "Failed" }, graphLabel: "Dependency graph", graphZoomIn: "Zoom in", graphZoomOut: "Zoom out", graphFit: "Fit to screen", graphLegend: "Legend", graphLegendKind: "Link type", graphLegendStatus: "Status", graphOverview: "Overview", graphConnections: "connections", graphShow: "Show", graphJoin: "Join", graphArrange: "Arrange the map", graphUndo: "Undo", graphRedo: "Redo", graphAlignLeft: "Align left", graphAlignCenter: "Align centers", graphAlignRight: "Align right", graphAlignTop: "Align top", graphAlignMiddle: "Align middles", graphAlignBottom: "Align bottom", graphDistributeH: "Distribute horizontally", graphDistributeV: "Distribute vertically", graphPin: "Pin in place", graphPinned: "pinned", graphRelayout: "Rearrange", graphExpand: "Open", graphCollapse: "Close", graphHidden: "hidden", graphEdge: "Connection", graphEdgeHelp: "Enter selects the connection.", graphHandle: "Connection point", graphNodeHelp: "Enter or Space selects the node. Once selected, the arrow keys move it; with Shift, further. Escape releases it.", graphMoved: "Node moved", graphSelectionCleared: "No node selected", agentState: { idle: "Idle", thinking: "Thinking", running: "Running", paused: "Paused", error: "Error", completed: "Completed" }, codeEditor: "Code editor", chatLabel: "Conversation", chatMessage: "Message", chatSend: "Send", chatAttach: "Attach file", chatAttachments: "Attachments", chatReplyTo: "Replying to", chatReplyCancel: "Cancel reply", chatEditing: "Editing message", chatEditCancel: "Cancel editing", chatSave: "Save", chatEdited: "edited", chatForwardedFrom: "Forwarded from", qrCode: "QR code", chartLabel: "Chart", copyCode: "Copy code", copy: "Copy", codeBlockPreview: "Preview", codeBlockCode: "Code", codeBlockExpand: "Expand code", codeBlockCollapse: "Collapse code", copied: "Copied", linkCopied: "Link copied", linkCopyFailed: "Could not copy. Copy the link below.", tocLabel: "On this page", navigationToggle: "Navigation", sidebarLabel: "Sidebar", sidebarCollapse: "Collapse sidebar", sidebarExpand: "Expand sidebar", bottomNavLabel: "Main", themeToDark: "Switch to dark theme", themeChoice: "Theme", themeLight: "Light", themeDark: "Dark", themeSystem: "System", themeToLight: "Switch to light theme", datePlaceholder: "Pick a date", dateRangePlaceholder: "Pick a date range", colorPicker: "Color picker", colorArea2D: "2D slider", colorChannel: { hue: "Hue", saturation: "Saturation", brightness: "Brightness", lightness: "Lightness", red: "Red", green: "Green", blue: "Blue", alpha: "Alpha" }, colorHue: { red: "red", orange: "orange", yellow: "yellow", green: "green", cyan: "cyan", blue: "blue", purple: "purple", magenta: "magenta", pink: "pink", brown: "brown", gray: "gray", white: "white", black: "black" }, colorTone: { veryDark: "very dark", dark: "dark", light: "light", veryLight: "very light", vivid: "vivid", pale: "pale", grayish: "grayish" }, colorNameFormat: "{lightness} {chroma} {hue}", colorHex: "Hex", colorSwatches: "Swatches", consentTitle: "Cookies on this site", consentReject: "Reject non-essential cookies", consentAccept: "Accept all cookies", consentChoose: "Choose cookies", consentPreferences: "Cookie preferences", consentSave: "Save my choices", consentRequired: "Always on", consentAccepted: "You accepted all cookies. You can change your choice at any time.", consentRejected: "You rejected the non-essential cookies. You can change your choice at any time.", consentSaved: "Your cookie choices were saved. You can change them at any time.", consentHide: "Hide this message", universalState: { waiting_user: "Waiting for someone to act.", waiting_approval: "Waiting for approval.", waiting_dependency: "Waiting for something else to finish.", offline: "No connection. This was loaded earlier.", stale: "This may be out of date.", partial: "Some of this could not be loaded.", degraded: "Working with reduced capability." } };
|
|
61
61
|
// pt-BR preservado como locale (mesmos valores que já eram o default): passe
|
|
62
62
|
// <AureaProvider strings={ptBR}> para restaurar português.
|
|
63
|
-
export const ptBR = { passwordShow: "Mostrar senha", passwordHide: "Ocultar senha", skipToContent: "Pular para o conteúdo", close: "Fechar", confirmCancel: "Cancelar", dataError: "Não foi possível carregar.", dataCrashed: "Algo deu errado aqui.", dataRetry: "Tentar de novo", dataEmpty: "Ainda não há nada aqui", confirmProceed: "Continuar", paginationLabel: "Paginação", paginationPage: "Página", previous: "Anterior", next: "Próxima", breadcrumbLabel: "Breadcrumb", tabsLabel: "Abas", optionsLabel: "Opções", tableLabel: "Tabela", commandLabel: "Paleta de comandos", commandPlaceholder: "Digite um comando…", commandHintMove: "mover", commandHintSelect: "abrir", commandHintClose: "fechar", dismissNotification: "Dispensar notificação", toolbarLabel: "Barra de ferramentas", loading: "Carregando", otpDigit: "Dígito", stepperLabel: "Etapas", increment: "Aumentar", decrement: "Diminuir", comboboxEmpty: "Nenhum resultado", comboboxClear: "Limpar seleção", comboboxOpen: "Abrir lista", comboboxRemove: "Remover", comboboxLoading: "Carregando…", fileDropPrompt: "Arraste arquivos aqui ou clique para selecionar", fileAdded: "Arquivo adicionado", fileRemoved: "Arquivo removido", fileRemove: "Remover", fileTooLarge: "Arquivo maior que o limite", fileWrongType: "Tipo de arquivo não aceito", treeLabel: "Árvore", notificationsLabel: "Notificações", notificationMarkAll: "Marcar todas como lidas", notificationEmpty: "Nenhuma notificação", notificationUnread: "Não lida", notificationNew: "novas notificações", dataGridFilter: "Filtrar", dataGridEmpty: "Nenhum resultado", dataGridSelectAll: "Selecionar todas as linhas", dataGridSelectRow: "Selecionar linha", dataGridSelected: "selecionadas", dataGridClearSelection: "Limpar seleção", dataGridBulkLabel: "Ações em lote", dataGridColumns: "Colunas", dataGridResize: "Redimensionar coluna", dataGridStale: "Mostrando dados que podem estar desatualizados.", dataGridPartial: "Algumas linhas não puderam ser carregadas. O que aparece está incompleto.", dataGridError: "Não foi possível carregar as linhas.", dataGridDetails: "Detalhes", dataGridDetailPanel: "Detalhe da linha", dataGridExport: "Exportar", dataGridExportRows: "linhas", dataGridExportFiltered: "linhas filtradas", dataGridExportSelected: "linhas selecionadas", mediaPlayer: "Reprodutor de mídia", mediaPlay: "Reproduzir", mediaPause: "Pausar", mediaMute: "Silenciar", mediaUnmute: "Ativar som", mediaSeek: "Posição da reprodução", mediaVolume: "Volume", mediaCaptionsShow: "Ativar legendas", mediaCaptionsHide: "Desativar legendas", mediaSkipBack: "Voltar 10 segundos", mediaSkipForward: "Avançar 10 segundos", mediaFullscreenEnter: "Tela cheia", mediaFullscreenExit: "Sair da tela cheia", mediaEmbedOpen: "Abrir o vídeo no site de origem", carouselLabel: "Carrossel", carouselSlide: "Slide", positionOf: "de", carouselPrev: "Slide anterior", carouselNext: "Próximo slide", galleryLabel: "Galeria", galleryVideo: "Vídeo", sortableLabel: "Lista ordenável", sortableHandle: "Reordenar", sortableHelp: "Aperte Espaço para pegar, e as setas para cima e para baixo para mover. Espaço solta, Esc devolve ao lugar.", sortableGrabbed: "Pego", sortableDropped: "Solto", sortableMoved: "Movido", sortableCanceled: "Devolvido", blockEditorLabel: "Blocos de conteúdo", blockLabel: "Bloco", blockRemove: "Remover bloco", uploadSending: "Enviando", uploadCancel: "Cancelar envio", uploadRetry: "Tentar envio novamente", uploadError: "Falha no envio", uploadCanceled: "Envio cancelado", uploadComplete: "Envio concluído", uploadPause: "Pausar envio", uploadResume: "Retomar envio", uploadPaused: "Pausado", uploadPending: "Aguardando", uploadChecksum: "Soma de verificação", uploadChecksumBad: "O servidor recebeu bytes diferentes dos enviados.", fileConflict: "Já existe um arquivo com este nome na fila", fileReplace: "Substituir", fileKeepBoth: "Manter os dois", fileSkip: "Pular", uploadReceipt: "Recibo", uploadReceiptCopy: "Copiar recibo", agentInspector: "Inspetor do agente", invocationLabel: "Invocação", invocationInput: "Entrada", invocationOutput: "Saída", taskQueueLabel: "Fila de tarefas", taskState: { queued: "Na fila", running: "Executando", completed: "Concluída", failed: "Falhou", blocked: "Bloqueada", paused: "Pausada" }, taskPriority: { low: "Baixa", medium: "Média", high: "Alta" }, approvalLabel: "Aprovação", approvalApprove: "Aprovar", approvalDeny: "Negar", approvalApproved: "Aprovado", approvalDenied: "Negado", approvalDeadline: "Decidir até", approvalRisk: { low: "Risco baixo", medium: "Risco médio", high: "Risco alto" }, permissionLabel: "Permissões de ferramenta", permissionAsk: "Perguntar", permissionAlways: "Sempre", permissionNever: "Nunca", eventStreamLabel: "Eventos", traceLabel: "Rastro", healthLabel: "Saúde", healthState: { operational: "Operando", degraded: "Degradado", down: "Fora do ar", maintenance: "Em manutenção", unknown: "Desconhecido" }, modelUsageLabel: "Consumo por modelo", usageMetric: { tokens: "Tokens", cost: "Custo", requests: "Chamadas" }, costMeterLabel: "Custo", costMeterSpent: "Gasto", costMeterRemaining: "restantes", costMeterExceeded: "Acima do limite", costMeterNear: "O gasto passou do limite brando.", costMeterOver: "O limite foi atingido. As próximas chamadas estão bloqueadas.", memoryLabel: "Livro-razão de memória", memoryProvenance: "De onde isto veio", memoryOperation: { added: "Guardada", updated: "Atualizada", recalled: "Lembrada", forgotten: "Esquecida" }, memoryScope: { episodic: "Episódica", semantic: "Semântica", procedural: "Procedural" }, agentMessageLabel: "Recados entre agentes", agentMessageTo: "para", agentMessageBroadcast: "todos os agentes", agentMessageReason: "Por que foi por aqui", agentMessageKind: { request: "Pedido", response: "Resposta", handoff: "Passagem", broadcast: "Difusão", error: "Erro" }, automationWhen: "Quando", automationThen: "Então", automationEnabled: "Ativa", automationLastRun: "Última execução", automationResult: { success: "Concluiu", failure: "Falhou" }, graphLabel: "Grafo de dependências", graphZoomIn: "Aproximar", graphZoomOut: "Afastar", graphFit: "Caber na tela", graphLegend: "Legenda", graphLegendKind: "Tipo de ligação", graphLegendStatus: "Estado", graphOverview: "Visão geral", graphConnections: "conexões", graphShow: "Mostrar", graphJoin: "Juntar", graphArrange: "Arrumar o mapa", graphUndo: "Desfazer", graphRedo: "Refazer", graphAlignLeft: "Alinhar à esquerda", graphAlignCenter: "Alinhar pelo centro", graphAlignRight: "Alinhar à direita", graphAlignTop: "Alinhar em cima", graphAlignMiddle: "Alinhar pelo meio", graphAlignBottom: "Alinhar embaixo", graphDistributeH: "Distribuir na horizontal", graphDistributeV: "Distribuir na vertical", graphPin: "Fixar no lugar", graphPinned: "fixo", graphRelayout: "Reorganizar", graphExpand: "Abrir", graphCollapse: "Fechar", graphHidden: "ocultos", graphEdge: "Ligação", graphEdgeHelp: "Enter escolhe a ligação.", graphHandle: "Ponto de ligação", graphNodeHelp: "Enter ou Espaço escolhe o nó. Escolhido, as setas o movem; com Shift, mais longe. Esc solta.", graphMoved: "Nó movido", graphSelectionCleared: "Nenhum nó escolhido", agentState: { idle: "Ocioso", thinking: "Pensando", running: "Executando", paused: "Pausado", error: "Erro", completed: "Concluído" }, codeEditor: "Editor de código", chatLabel: "Conversa", chatMessage: "Mensagem", chatSend: "Enviar", chatAttach: "Anexar arquivo", chatAttachments: "Anexos", chatReplyTo: "Respondendo a", chatReplyCancel: "Cancelar resposta", chatEditing: "Editando mensagem", chatEditCancel: "Cancelar edição", chatSave: "Salvar", chatEdited: "editada", chatForwardedFrom: "Encaminhada de", qrCode: "Código QR", chartLabel: "Gráfico", copyCode: "Copiar código", codeBlockPreview: "Prévia", codeBlockCode: "Código", copied: "Copiado", linkCopied: "Link copiado", linkCopyFailed: "Não deu para copiar. Copie o link abaixo.", tocLabel: "Nesta página", navigationToggle: "Navegação", sidebarLabel: "Lateral", sidebarCollapse: "Recolher o menu", sidebarExpand: "Abrir o menu", bottomNavLabel: "Principal", themeToDark: "Mudar para o tema escuro", themeChoice: "Tema", themeLight: "Claro", themeDark: "Escuro", themeSystem: "Sistema", themeToLight: "Mudar para o tema claro", datePlaceholder: "Escolher data", dateRangePlaceholder: "Escolher período", colorPicker: "Seletor de cor", colorArea2D: "controle 2D", colorChannel: { hue: "Matiz", saturation: "Saturação", brightness: "Brilho", lightness: "Luminosidade", red: "Vermelho", green: "Verde", blue: "Azul", alpha: "Alfa" }, colorHue: { red: "vermelho", orange: "laranja", yellow: "amarelo", green: "verde", cyan: "ciano", blue: "azul", purple: "roxo", magenta: "magenta", pink: "rosa", brown: "marrom", gray: "cinza", white: "branco", black: "preto" }, colorTone: { veryDark: "muito escuro", dark: "escuro", light: "claro", veryLight: "muito claro", vivid: "vivo", pale: "pálido", grayish: "acinzentado" }, colorNameFormat: "{hue} {chroma} {lightness}", colorHex: "Código hex", colorSwatches: "Amostras", consentTitle: "Cookies neste site", consentReject: "Rejeitar cookies não necessários", consentAccept: "Aceitar todos os cookies", consentChoose: "Selecionar cookies", consentPreferences: "Preferências de cookies", consentSave: "Salvar minhas escolhas", consentRequired: "Sempre ativos", consentAccepted: "Você aceitou todos os cookies. Pode mudar a escolha quando quiser.", consentRejected: "Você rejeitou os cookies não necessários. Pode mudar a escolha quando quiser.", consentSaved: "Suas escolhas de cookies foram salvas. Pode mudá-las quando quiser.", consentHide: "Ocultar esta mensagem", universalState: { waiting_user: "Esperando alguém agir.", waiting_approval: "Esperando aprovação.", waiting_dependency: "Esperando outra coisa terminar.", offline: "Sem conexão. Isto foi carregado antes.", stale: "Isto pode estar desatualizado.", partial: "Parte disto não pôde ser carregada.", degraded: "Funcionando com capacidade reduzida." } };
|
|
63
|
+
export const ptBR = { passwordShow: "Mostrar senha", passwordHide: "Ocultar senha", skipToContent: "Pular para o conteúdo", close: "Fechar", confirmCancel: "Cancelar", dataError: "Não foi possível carregar.", dataCrashed: "Algo deu errado aqui.", dataRetry: "Tentar de novo", dataEmpty: "Ainda não há nada aqui", confirmProceed: "Continuar", paginationLabel: "Paginação", paginationPage: "Página", previous: "Anterior", next: "Próxima", breadcrumbLabel: "Breadcrumb", tabsLabel: "Abas", optionsLabel: "Opções", tableLabel: "Tabela", commandLabel: "Paleta de comandos", commandPlaceholder: "Digite um comando…", commandHintMove: "mover", commandHintSelect: "abrir", commandHintClose: "fechar", dismissNotification: "Dispensar notificação", toolbarLabel: "Barra de ferramentas", loading: "Carregando", otpDigit: "Dígito", stepperLabel: "Etapas", increment: "Aumentar", decrement: "Diminuir", comboboxEmpty: "Nenhum resultado", comboboxClear: "Limpar seleção", comboboxOpen: "Abrir lista", comboboxRemove: "Remover", comboboxLoading: "Carregando…", fileDropPrompt: "Arraste arquivos aqui ou clique para selecionar", fileAdded: "Arquivo adicionado", fileRemoved: "Arquivo removido", fileRemove: "Remover", fileTooLarge: "Arquivo maior que o limite", fileWrongType: "Tipo de arquivo não aceito", treeLabel: "Árvore", notificationsLabel: "Notificações", notificationMarkAll: "Marcar todas como lidas", notificationEmpty: "Nenhuma notificação", notificationUnread: "Não lida", notificationNew: "novas notificações", dataGridFilter: "Filtrar", dataGridEmpty: "Nenhum resultado", dataGridSelectAll: "Selecionar todas as linhas", dataGridSelectRow: "Selecionar linha", dataGridSelected: "selecionadas", dataGridClearSelection: "Limpar seleção", dataGridBulkLabel: "Ações em lote", dataGridColumns: "Colunas", dataGridResize: "Redimensionar coluna", dataGridStale: "Mostrando dados que podem estar desatualizados.", dataGridPartial: "Algumas linhas não puderam ser carregadas. O que aparece está incompleto.", dataGridError: "Não foi possível carregar as linhas.", dataGridDetails: "Detalhes", dataGridDetailPanel: "Detalhe da linha", dataGridExport: "Exportar", dataGridExportRows: "linhas", dataGridExportFiltered: "linhas filtradas", dataGridExportSelected: "linhas selecionadas", mediaPlayer: "Reprodutor de mídia", mediaPlay: "Reproduzir", mediaPause: "Pausar", mediaMute: "Silenciar", mediaUnmute: "Ativar som", mediaSeek: "Posição da reprodução", mediaVolume: "Volume", mediaCaptionsShow: "Ativar legendas", mediaCaptionsHide: "Desativar legendas", mediaSkipBack: "Voltar 10 segundos", mediaSkipForward: "Avançar 10 segundos", mediaFullscreenEnter: "Tela cheia", mediaFullscreenExit: "Sair da tela cheia", mediaEmbedOpen: "Abrir o vídeo no site de origem", carouselLabel: "Carrossel", carouselSlide: "Slide", positionOf: "de", carouselPrev: "Slide anterior", carouselNext: "Próximo slide", galleryLabel: "Galeria", galleryVideo: "Vídeo", sortableLabel: "Lista ordenável", sortableHandle: "Reordenar", sortableHelp: "Aperte Espaço para pegar, e as setas para cima e para baixo para mover. Espaço solta, Esc devolve ao lugar.", sortableGrabbed: "Pego", sortableDropped: "Solto", sortableMoved: "Movido", sortableCanceled: "Devolvido", blockEditorLabel: "Blocos de conteúdo", blockLabel: "Bloco", blockRemove: "Remover bloco", uploadSending: "Enviando", uploadCancel: "Cancelar envio", uploadRetry: "Tentar envio novamente", uploadError: "Falha no envio", uploadCanceled: "Envio cancelado", uploadComplete: "Envio concluído", uploadPause: "Pausar envio", uploadResume: "Retomar envio", uploadPaused: "Pausado", uploadPending: "Aguardando", uploadChecksum: "Soma de verificação", uploadChecksumBad: "O servidor recebeu bytes diferentes dos enviados.", fileConflict: "Já existe um arquivo com este nome na fila", fileReplace: "Substituir", fileKeepBoth: "Manter os dois", fileSkip: "Pular", uploadReceipt: "Recibo", uploadReceiptCopy: "Copiar recibo", agentInspector: "Inspetor do agente", invocationLabel: "Invocação", invocationInput: "Entrada", invocationOutput: "Saída", taskQueueLabel: "Fila de tarefas", taskState: { queued: "Na fila", running: "Executando", completed: "Concluída", failed: "Falhou", blocked: "Bloqueada", paused: "Pausada" }, taskPriority: { low: "Baixa", medium: "Média", high: "Alta" }, approvalLabel: "Aprovação", approvalApprove: "Aprovar", approvalDeny: "Negar", approvalApproved: "Aprovado", approvalDenied: "Negado", approvalDeadline: "Decidir até", approvalRisk: { low: "Risco baixo", medium: "Risco médio", high: "Risco alto" }, permissionLabel: "Permissões de ferramenta", permissionAsk: "Perguntar", permissionAlways: "Sempre", permissionNever: "Nunca", eventStreamLabel: "Eventos", traceLabel: "Rastro", healthLabel: "Saúde", healthState: { operational: "Operando", degraded: "Degradado", down: "Fora do ar", maintenance: "Em manutenção", unknown: "Desconhecido" }, modelUsageLabel: "Consumo por modelo", usageMetric: { tokens: "Tokens", cost: "Custo", requests: "Chamadas" }, costMeterLabel: "Custo", costMeterSpent: "Gasto", costMeterRemaining: "restantes", costMeterExceeded: "Acima do limite", costMeterNear: "O gasto passou do limite brando.", costMeterOver: "O limite foi atingido. As próximas chamadas estão bloqueadas.", memoryLabel: "Livro-razão de memória", memoryProvenance: "De onde isto veio", memoryOperation: { added: "Guardada", updated: "Atualizada", recalled: "Lembrada", forgotten: "Esquecida" }, memoryScope: { episodic: "Episódica", semantic: "Semântica", procedural: "Procedural" }, agentMessageLabel: "Recados entre agentes", agentMessageTo: "para", agentMessageBroadcast: "todos os agentes", agentMessageReason: "Por que foi por aqui", agentMessageKind: { request: "Pedido", response: "Resposta", handoff: "Passagem", broadcast: "Difusão", error: "Erro" }, automationWhen: "Quando", automationThen: "Então", automationEnabled: "Ativa", automationLastRun: "Última execução", automationResult: { success: "Concluiu", failure: "Falhou" }, graphLabel: "Grafo de dependências", graphZoomIn: "Aproximar", graphZoomOut: "Afastar", graphFit: "Caber na tela", graphLegend: "Legenda", graphLegendKind: "Tipo de ligação", graphLegendStatus: "Estado", graphOverview: "Visão geral", graphConnections: "conexões", graphShow: "Mostrar", graphJoin: "Juntar", graphArrange: "Arrumar o mapa", graphUndo: "Desfazer", graphRedo: "Refazer", graphAlignLeft: "Alinhar à esquerda", graphAlignCenter: "Alinhar pelo centro", graphAlignRight: "Alinhar à direita", graphAlignTop: "Alinhar em cima", graphAlignMiddle: "Alinhar pelo meio", graphAlignBottom: "Alinhar embaixo", graphDistributeH: "Distribuir na horizontal", graphDistributeV: "Distribuir na vertical", graphPin: "Fixar no lugar", graphPinned: "fixo", graphRelayout: "Reorganizar", graphExpand: "Abrir", graphCollapse: "Fechar", graphHidden: "ocultos", graphEdge: "Ligação", graphEdgeHelp: "Enter escolhe a ligação.", graphHandle: "Ponto de ligação", graphNodeHelp: "Enter ou Espaço escolhe o nó. Escolhido, as setas o movem; com Shift, mais longe. Esc solta.", graphMoved: "Nó movido", graphSelectionCleared: "Nenhum nó escolhido", agentState: { idle: "Ocioso", thinking: "Pensando", running: "Executando", paused: "Pausado", error: "Erro", completed: "Concluído" }, codeEditor: "Editor de código", chatLabel: "Conversa", chatMessage: "Mensagem", chatSend: "Enviar", chatAttach: "Anexar arquivo", chatAttachments: "Anexos", chatReplyTo: "Respondendo a", chatReplyCancel: "Cancelar resposta", chatEditing: "Editando mensagem", chatEditCancel: "Cancelar edição", chatSave: "Salvar", chatEdited: "editada", chatForwardedFrom: "Encaminhada de", qrCode: "Código QR", chartLabel: "Gráfico", copyCode: "Copiar código", copy: "Copiar", codeBlockPreview: "Prévia", codeBlockCode: "Código", codeBlockExpand: "Expandir código", codeBlockCollapse: "Recolher código", copied: "Copiado", linkCopied: "Link copiado", linkCopyFailed: "Não deu para copiar. Copie o link abaixo.", tocLabel: "Nesta página", navigationToggle: "Navegação", sidebarLabel: "Lateral", sidebarCollapse: "Recolher o menu", sidebarExpand: "Abrir o menu", bottomNavLabel: "Principal", themeToDark: "Mudar para o tema escuro", themeChoice: "Tema", themeLight: "Claro", themeDark: "Escuro", themeSystem: "Sistema", themeToLight: "Mudar para o tema claro", datePlaceholder: "Escolher data", dateRangePlaceholder: "Escolher período", colorPicker: "Seletor de cor", colorArea2D: "controle 2D", colorChannel: { hue: "Matiz", saturation: "Saturação", brightness: "Brilho", lightness: "Luminosidade", red: "Vermelho", green: "Verde", blue: "Azul", alpha: "Alfa" }, colorHue: { red: "vermelho", orange: "laranja", yellow: "amarelo", green: "verde", cyan: "ciano", blue: "azul", purple: "roxo", magenta: "magenta", pink: "rosa", brown: "marrom", gray: "cinza", white: "branco", black: "preto" }, colorTone: { veryDark: "muito escuro", dark: "escuro", light: "claro", veryLight: "muito claro", vivid: "vivo", pale: "pálido", grayish: "acinzentado" }, colorNameFormat: "{hue} {chroma} {lightness}", colorHex: "Código hex", colorSwatches: "Amostras", consentTitle: "Cookies neste site", consentReject: "Rejeitar cookies não necessários", consentAccept: "Aceitar todos os cookies", consentChoose: "Selecionar cookies", consentPreferences: "Preferências de cookies", consentSave: "Salvar minhas escolhas", consentRequired: "Sempre ativos", consentAccepted: "Você aceitou todos os cookies. Pode mudar a escolha quando quiser.", consentRejected: "Você rejeitou os cookies não necessários. Pode mudar a escolha quando quiser.", consentSaved: "Suas escolhas de cookies foram salvas. Pode mudá-las quando quiser.", consentHide: "Ocultar esta mensagem", universalState: { waiting_user: "Esperando alguém agir.", waiting_approval: "Esperando aprovação.", waiting_dependency: "Esperando outra coisa terminar.", offline: "Sem conexão. Isto foi carregado antes.", stale: "Isto pode estar desatualizado.", partial: "Parte disto não pôde ser carregada.", degraded: "Funcionando com capacidade reduzida." } };
|
|
64
64
|
// Sprite de ícones: CONFIGURAÇÃO DE APLICAÇÃO, então entra pelo provider, uma vez.
|
|
65
65
|
// Antes o default absoluto "/aurea-icons.svg" vivia no Icon e 15 componentes declaravam
|
|
66
66
|
// e repassavam `spriteUrl` à mão — 52 sítios de código. Consequência: aplicação servida
|