@aurea-uds/native 0.19.1 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/actions.d.ts +10 -10
- package/dist/actions.js +10 -10
- package/dist/arquivo.js +6 -6
- package/dist/busca.d.ts +2 -2
- package/dist/busca.js +6 -5
- package/dist/chart.js +2 -2
- package/dist/data.d.ts +1 -1
- package/dist/data.js +3 -3
- package/dist/display.js +12 -12
- package/dist/estilos.d.ts +44 -0
- package/dist/estilos.js +34 -1
- package/dist/feedback.d.ts +4 -4
- package/dist/feedback.js +17 -12
- package/dist/icon.d.ts +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1 -1
- package/dist/inputs.d.ts +42 -17
- package/dist/inputs.js +53 -26
- package/dist/layout.d.ts +3 -3
- package/dist/layout.js +6 -11
- package/dist/midia.js +3 -3
- package/dist/moldura.js +2 -2
- package/dist/navigation.d.ts +29 -11
- package/dist/navigation.js +42 -39
- package/dist/numero.d.ts +4 -3
- package/dist/numero.js +14 -13
- package/dist/overlays.js +7 -4
- package/dist/rolagem.d.ts +8 -1
- package/dist/rolagem.js +3 -2
- package/dist/screen.js +1 -1
- package/dist/sistema.d.ts +15 -2
- package/dist/sistema.js +55 -12
- package/dist/text.d.ts +5 -5
- package/dist/text.js +8 -8
- package/dist/toast.js +4 -2
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -212,7 +212,7 @@ leitor anuncia.
|
|
|
212
212
|
|
|
213
213
|
| | |
|
|
214
214
|
|---|---|
|
|
215
|
-
| `Switch` | **não é o do React Native** — aquele traz o interruptor
|
|
215
|
+
| `Switch` | **não é o do React Native** — aquele traz o interruptor de cada sistema. Medidas do CSS |
|
|
216
216
|
| `Select` | não existe `<select>` no RN: é `Modal` + folha que sobe. O papel é `button`, não `combobox` — `combobox` promete um campo em que se digita |
|
|
217
217
|
| `Form` | é só o respiro. Não há `<form>`, `submit` nem validação de plataforma; o erro de cada campo vai no `Field` |
|
|
218
218
|
| `Field` | sem `orientation="horizontal"` — numa tela de 360dp a grade de `12rem` deixa o controle com menos de metade da largura |
|
|
@@ -300,8 +300,8 @@ devolve texto.
|
|
|
300
300
|
|
|
301
301
|
⚠ **Formata no BLUR, e só no blur** ([ADR-0024](../../decisions/0024-mascara-de-campo-e-o-momento-nao-o-formato.md)
|
|
302
302
|
e [ADR-0042](../../decisions/0042-o-intl-e-o-formatador-do-nativo-e-a-volta-e-nossa.md)). Enquanto
|
|
303
|
-
o campo tem foco, ele mostra exatamente o que foi digitado. Máscara ao vivo é o defeito que
|
|
304
|
-
|
|
303
|
+
o campo tem foco, ele mostra exatamente o que foi digitado. Máscara ao vivo é o defeito que
|
|
304
|
+
outro design system publicou com reprovação WCAG registrada e que uma das bibliotecas de referência abandonou.
|
|
305
305
|
|
|
306
306
|
⚠ **`notation: "compact"` é recusado** — quebrado no motor JS do RN nos dois sistemas. Sai aviso em
|
|
307
307
|
`__DEV__` e a opção é ignorada; o resto do formato sobrevive.
|
|
@@ -414,7 +414,7 @@ nega. Cada pergunta ficou com um padrão, e **cada padrão tem uma saída**:
|
|
|
414
414
|
| quantas cabem? | **uma** | `max` |
|
|
415
415
|
| como **olhar** a foto? | tocar na miniatura abre a foto grande, no mesmo zoom da `Gallery` (R-22) | — |
|
|
416
416
|
|
|
417
|
-
**Desde a `0.15.0` (R-22)**, a miniatura é quadrada de 64 (o `Avatar` `lg`
|
|
417
|
+
**Desde a `0.15.0` (R-22)**, a miniatura é quadrada de 64 (o `Avatar` `lg` da referência), do
|
|
418
418
|
tamanho do botão de pôr foto. O leitor de tela ouve *"Foto 2 de 3"* e *"Abre a foto"*; o X,
|
|
419
419
|
*"Remover foto 2"*. Com o campo inativo, a foto ainda abre e o X não remove.
|
|
420
420
|
|
package/dist/actions.d.ts
CHANGED
|
@@ -17,19 +17,19 @@ export interface ButtonProps extends Omit<PressableProps, "children" | "style">
|
|
|
17
17
|
/**
|
|
18
18
|
* Um desenho QUALQUER na frente do texto, para quando a marca não pode ser um ícone nosso.
|
|
19
19
|
*
|
|
20
|
-
* ⚠ **Ele existe por causa de MARCA REGISTRADA, não por conveniência.**
|
|
21
|
-
*
|
|
22
|
-
* viver dentro desta biblioteca:
|
|
23
|
-
*
|
|
20
|
+
* ⚠ **Ele existe por causa de MARCA REGISTRADA, não por conveniência.** Os botões de entrar com
|
|
21
|
+
* a conta de outras empresas exigem o desenho oficial de cada uma, e nenhum deles pode
|
|
22
|
+
* viver dentro desta biblioteca: uma delas proíbe redesenhar e manda usar o arquivo do pacote
|
|
23
|
+
* dela; outra proíbe usar o logo sem licença escrita. **Então a marca entra pelo app**, e o
|
|
24
24
|
* que a Aurea dá é a cápsula em volta.
|
|
25
25
|
*
|
|
26
|
-
* <Button appearance="outline" leading={<RNImage source={
|
|
27
|
-
* Entrar com
|
|
26
|
+
* <Button appearance="outline" leading={<RNImage source={logoDoServico} style={{width: 18, height: 18}} />}>
|
|
27
|
+
* Entrar com a conta do serviço
|
|
28
28
|
* </Button>
|
|
29
29
|
*
|
|
30
30
|
* ⚠ **A cor do texto NÃO atravessa para cá** — o que entra desenha a própria cor, e é assim
|
|
31
|
-
* que tem de ser: a marca
|
|
32
|
-
*
|
|
31
|
+
* que tem de ser: a marca da empresa tem cor fixa, e tingi-la seria justamente o que a regra
|
|
32
|
+
* dela proíbe. Um `leadingIcon` nosso continua herdando a cor do botão.
|
|
33
33
|
*/
|
|
34
34
|
leading?: React.ReactNode;
|
|
35
35
|
/** O mesmo, do outro lado. */
|
|
@@ -52,7 +52,7 @@ export interface ButtonProps extends Omit<PressableProps, "children" | "style">
|
|
|
52
52
|
export declare function Button(props: ButtonProps): React.JSX.Element;
|
|
53
53
|
export interface LinkButtonProps extends Omit<ButtonProps, "appearance" | "fullWidth"> {
|
|
54
54
|
}
|
|
55
|
-
/** Botão-texto sem recuo nem caixa, alinhado com o texto em volta. O `LinkButton`
|
|
55
|
+
/** Botão-texto sem recuo nem caixa, alinhado com o texto em volta. O `LinkButton` da referência. */
|
|
56
56
|
export declare function LinkButton(props: LinkButtonProps): React.JSX.Element;
|
|
57
57
|
export interface IconButtonProps extends Omit<ButtonProps, "children" | "leadingIcon" | "trailingIcon" | "fullWidth"> {
|
|
58
58
|
name: AureaIcon;
|
|
@@ -64,7 +64,7 @@ export interface IconButtonProps extends Omit<ButtonProps, "children" | "leading
|
|
|
64
64
|
*
|
|
65
65
|
* O raio é o da cápsula (`radiusControl`, 999) num quadrado, e um quadrado com raio 999 é um
|
|
66
66
|
* círculo — o mesmo que o `.btn-icon` do core faz. Decisão do Victor, 25/09/2026 (ADR-0052): era
|
|
67
|
-
* `--radius-md`/`--radius-sm`, e
|
|
67
|
+
* `--radius-md`/`--radius-sm`, e a referência faz o botão só de ícone redondo.
|
|
68
68
|
*
|
|
69
69
|
* ⚠ **`label` é obrigatório no tipo**, e é a única prop deste pacote que obriga texto. Um ícone
|
|
70
70
|
* sozinho não diz nada a quem não o vê, e deixar isso opcional é o mesmo que deixá-lo vazio.
|
package/dist/actions.js
CHANGED
|
@@ -22,7 +22,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
22
22
|
// do Lote 3. Aparência sem consumidor é a ADR-0034 ("ter a variante não é usar").
|
|
23
23
|
import * as React from "react";
|
|
24
24
|
import { Pressable, View } from "react-native";
|
|
25
|
-
import { criarFolha, REACAO_AO_TOQUE, estadoAcessivel } from "./estilos.js";
|
|
25
|
+
import { canto, criarFolha, REACAO_AO_TOQUE, estadoAcessivel } from "./estilos.js";
|
|
26
26
|
import { Icon } from "./icon.js";
|
|
27
27
|
import { Text } from "./text.js";
|
|
28
28
|
import { useAureaStrings, useAureaTheme, useAureaTokens, useSobreAMarca } from "./theme.js";
|
|
@@ -119,7 +119,7 @@ const folha = criarFolha((t) => ({
|
|
|
119
119
|
// pinta fundo, borda e raio é a `caixa` interna, com a altura do token. O botão continua com
|
|
120
120
|
// 36 dp de desenho e passa a ter 44 de alvo — e o leitor de tela enxerga os 44, porque o
|
|
121
121
|
// elemento acessível é o `Pressable`, não um retângulo invisível ao lado dele.
|
|
122
|
-
// E2 (25/09/2026): SEM `alignSelf`. O botão obedece o pai, como
|
|
122
|
+
// E2 (25/09/2026): SEM `alignSelf`. O botão obedece o pai, como na referência (a folha do botão dela
|
|
123
123
|
// não fixa alinhamento) e como o `.btn` da web num `.stack`. Era `alignSelf: "flex-start"`, e ele
|
|
124
124
|
// vencia o `alignItems: "center"` do pai: o botão do `EmptyState` ficava à esquerda com o resto
|
|
125
125
|
// no meio. ⚠ A consequência, decidida pelo Victor: numa coluna sem alinhamento o botão ESTICA,
|
|
@@ -128,7 +128,7 @@ const folha = criarFolha((t) => ({
|
|
|
128
128
|
alvoLargura: { alignSelf: "stretch" },
|
|
129
129
|
caixa: {
|
|
130
130
|
flexDirection: "row", alignItems: "center", justifyContent: "center",
|
|
131
|
-
|
|
131
|
+
...canto(t.size.radiusControl), // 999 — pill, identidade INTOCÁVEL
|
|
132
132
|
borderWidth: t.size.borderWidth,
|
|
133
133
|
},
|
|
134
134
|
// `.btn:active` e `.btn:disabled` do core — os números moram no `estilos.ts` desde que o
|
|
@@ -161,7 +161,7 @@ function CorpoDoBotao({ children, appearance = "solid", tone = "neutral", size =
|
|
|
161
161
|
backgroundColor: appearance === "solid" ? cor.solido : "transparent",
|
|
162
162
|
borderColor: cor.contorno ?? (appearance === "outline" ? corDaBorda : "transparent"),
|
|
163
163
|
...(fullWidth ? { flex: 1 } : null),
|
|
164
|
-
//
|
|
164
|
+
// A regra do botão-link da referência: `height: auto; padding: 0`, e a do botão dela já
|
|
165
165
|
// tem `border-width: 0`. A borda transparente de 1 empurraria o texto 1 para dentro.
|
|
166
166
|
...(semRecuo ? { height: undefined, paddingHorizontal: 0, borderWidth: 0 } : null),
|
|
167
167
|
}), [t, size, appearance, cor.solido, cor.contorno, corDaBorda, fullWidth, semRecuo]);
|
|
@@ -170,8 +170,8 @@ function CorpoDoBotao({ children, appearance = "solid", tone = "neutral", size =
|
|
|
170
170
|
s.alvo, fullWidth && s.alvoLargura,
|
|
171
171
|
tocando && s.pressionado, disabled && s.inerte,
|
|
172
172
|
], ...rest, children: _jsxs(View, { style: [s.caixa, caixa], children: [leading ?? null, leadingIcon ? _jsx(Icon, { name: leadingIcon, size: ICONE[size], color: corDoTexto, icons: icons }) : null, typeof children === "string"
|
|
173
|
-
// E1 (25/09/2026): entrelinha NORMAL (1,5), como o rótulo do botão
|
|
174
|
-
// (
|
|
173
|
+
// E1 (25/09/2026): entrelinha NORMAL (1,5), como o rótulo do botão da referência
|
|
174
|
+
// (a folha do botão dela usa a entrelinha de cada degrau da escala). Era `none` (1,0), e a letra
|
|
175
175
|
// precisa de 1,3 em para caber inteira — a IBM Plex subia 1,025 e descia 0,275; a
|
|
176
176
|
// Atkinson Hyperlegible (ADR-0053) sobe 0,984 e desce 0,316, o mesmo 1,3 (medido na
|
|
177
177
|
// tabela `hhea` dos dois arquivos, 01/10/2026): no Android o RN
|
|
@@ -181,7 +181,7 @@ function CorpoDoBotao({ children, appearance = "solid", tone = "neutral", size =
|
|
|
181
181
|
? _jsx(Text, { size: FONTE[size], weight: 500, leading: "normal", style: { color: corDoTexto }, children: children })
|
|
182
182
|
: children, trailingIcon ? _jsx(Icon, { name: trailingIcon, size: ICONE[size], color: corDoTexto, icons: icons }) : null, trailing ?? null] }) }));
|
|
183
183
|
}
|
|
184
|
-
/** Botão-texto sem recuo nem caixa, alinhado com o texto em volta. O `LinkButton`
|
|
184
|
+
/** Botão-texto sem recuo nem caixa, alinhado com o texto em volta. O `LinkButton` da referência. */
|
|
185
185
|
export function LinkButton(props) {
|
|
186
186
|
return _jsx(CorpoDoBotao, { ...props, appearance: "ghost", semRecuo: true });
|
|
187
187
|
}
|
|
@@ -190,7 +190,7 @@ export function LinkButton(props) {
|
|
|
190
190
|
*
|
|
191
191
|
* O raio é o da cápsula (`radiusControl`, 999) num quadrado, e um quadrado com raio 999 é um
|
|
192
192
|
* círculo — o mesmo que o `.btn-icon` do core faz. Decisão do Victor, 25/09/2026 (ADR-0052): era
|
|
193
|
-
* `--radius-md`/`--radius-sm`, e
|
|
193
|
+
* `--radius-md`/`--radius-sm`, e a referência faz o botão só de ícone redondo.
|
|
194
194
|
*
|
|
195
195
|
* ⚠ **`label` é obrigatório no tipo**, e é a única prop deste pacote que obriga texto. Um ícone
|
|
196
196
|
* sozinho não diz nada a quem não o vê, e deixar isso opcional é o mesmo que deixá-lo vazio.
|
|
@@ -209,12 +209,12 @@ function BotaoDeIcone({ name, label, appearance = "ghost", tone = "neutral", siz
|
|
|
209
209
|
const lado = t.size[ALTURA[size]];
|
|
210
210
|
const caixa = React.useMemo(() => ({
|
|
211
211
|
height: lado, width: lado, paddingHorizontal: 0,
|
|
212
|
-
|
|
212
|
+
...canto(t.size.radiusControl),
|
|
213
213
|
backgroundColor: appearance === "solid" ? cor.solido : "transparent",
|
|
214
214
|
borderColor: cor.contorno ?? (appearance === "outline" ? corDaBorda : "transparent"),
|
|
215
215
|
}), [t, lado, size, appearance, cor.solido, cor.contorno, corDaBorda]);
|
|
216
216
|
return (_jsx(Pressable, { disabled: disabled, accessibilityRole: "button", accessibilityLabel: label, ...estadoAcessivel({ disabled: !!disabled, pressed }), style: ({ pressed: tocando }) => [
|
|
217
|
-
// Largura FIXA, como o só-ícone
|
|
217
|
+
// Largura FIXA, como o só-ícone da referência: ele nunca estica,
|
|
218
218
|
// nem numa coluna sem alinhamento. O alvo é o maior entre o desenho e o `targetMin`.
|
|
219
219
|
s.alvo, { width: Math.max(lado, t.size.targetMin), alignItems: "center" },
|
|
220
220
|
tocando && s.pressionado, disabled && s.inerte,
|
package/dist/arquivo.js
CHANGED
|
@@ -6,10 +6,10 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
6
6
|
// Proposta aprovada pelo Victor em 02/10/2026 (*"3 sim"*).
|
|
7
7
|
//
|
|
8
8
|
// ── AS REFERÊNCIAS ───────────────────────────────────────────────────────────────────────────
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
// do `FileInput` da web. O limite é `max`, e não
|
|
9
|
+
// uma não tem: nem o pacote do nativo dela, nem o da web — medido nos pacotes.
|
|
10
|
+
// outra tem: tipos aceitos, tamanho máximo, número máximo de arquivos, vários de uma vez e
|
|
11
|
+
// o aviso de mudança. Daqui vêm `accept` e `maxSize`, que são também os nomes
|
|
12
|
+
// do `FileInput` da web. O limite é `max`, e não o nome que ela usa: é o nome do `PhotoInput`,
|
|
13
13
|
// o irmão que mora ao lado.
|
|
14
14
|
// web o `FileInput` do `@aurea-uds/react`: as frases (`fileTooLarge`, `fileWrongType`,
|
|
15
15
|
// `fileRemove`) e a conta do tamanho (`formatSize`) são as de lá.
|
|
@@ -33,7 +33,7 @@ import * as React from "react";
|
|
|
33
33
|
import { Pressable, View } from "react-native";
|
|
34
34
|
import * as DocumentPicker from "expo-document-picker";
|
|
35
35
|
import { IconButton } from "./actions.js";
|
|
36
|
-
import { criarFolha, estadoAcessivel } from "./estilos.js";
|
|
36
|
+
import { canto, criarFolha, estadoAcessivel } from "./estilos.js";
|
|
37
37
|
import { Icon } from "./icon.js";
|
|
38
38
|
import { alturaDoTamanho, respiroDoTamanho, useCampo } from "./inputs.js";
|
|
39
39
|
import { Text } from "./text.js";
|
|
@@ -44,7 +44,7 @@ const folha = criarFolha((t) => ({
|
|
|
44
44
|
caixa: {
|
|
45
45
|
flexDirection: "row", alignItems: "center", gap: t.size.space2,
|
|
46
46
|
width: "100%", minWidth: 0, borderWidth: t.size.borderWidth, borderColor: t.color.borderStrong,
|
|
47
|
-
|
|
47
|
+
...canto(t.size.radiusControl), backgroundColor: t.color.fieldBg,
|
|
48
48
|
},
|
|
49
49
|
invalido: { borderColor: t.color.danger400 ?? t.color.destructive },
|
|
50
50
|
desabilitado: { opacity: t.size.opacityDisabled },
|
package/dist/busca.d.ts
CHANGED
|
@@ -7,8 +7,8 @@ export interface AureaComboboxItem {
|
|
|
7
7
|
value: string;
|
|
8
8
|
label: string;
|
|
9
9
|
/**
|
|
10
|
-
* Uma segunda linha embaixo do rótulo, apagada ("Pacote de 1 kg") — R-14, 01/10/2026. É
|
|
11
|
-
* `Select
|
|
10
|
+
* Uma segunda linha embaixo do rótulo, apagada ("Pacote de 1 kg") — R-14, 01/10/2026. É a
|
|
11
|
+
* descrição de item do `Select` da referência (na folha de estilo do `Select` dela): letra
|
|
12
12
|
* `text-sm` (14), cor apagada. A busca continua olhando só o `label`.
|
|
13
13
|
*/
|
|
14
14
|
description?: string;
|
package/dist/busca.js
CHANGED
|
@@ -69,7 +69,7 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
|
|
|
69
69
|
import * as React from "react";
|
|
70
70
|
import { Animated, Easing, FlatList, Modal, PanResponder, Pressable, TextInput, View, } from "react-native";
|
|
71
71
|
import { IconButton } from "./actions.js";
|
|
72
|
-
import { criarFolha, estadoAcessivel } from "./estilos.js";
|
|
72
|
+
import { canto, cantosDeCima, criarFolha, estadoAcessivel } from "./estilos.js";
|
|
73
73
|
import { Spinner } from "./feedback.js";
|
|
74
74
|
import { Icon } from "./icon.js";
|
|
75
75
|
import { KeyboardAvoiding, useCampo } from "./inputs.js";
|
|
@@ -105,7 +105,7 @@ const folha = criarFolha((t) => ({
|
|
|
105
105
|
caixa: {
|
|
106
106
|
width: "100%", minWidth: 0,
|
|
107
107
|
borderWidth: t.size.borderWidth, borderColor: t.color.borderStrong,
|
|
108
|
-
|
|
108
|
+
...canto(t.size.radiusControl), backgroundColor: t.color.fieldBg,
|
|
109
109
|
flexDirection: "row", alignItems: "center",
|
|
110
110
|
},
|
|
111
111
|
invalido: { borderColor: t.color.danger400 ?? t.color.destructive },
|
|
@@ -152,12 +152,13 @@ const folha = criarFolha((t) => ({
|
|
|
152
152
|
// desenhar vazio.
|
|
153
153
|
lista: {
|
|
154
154
|
maxHeight: "90%",
|
|
155
|
-
|
|
155
|
+
// HER-03 (ADR-0058): a folha que sobe de baixo tem 32, como a `BottomSheet`.
|
|
156
|
+
...cantosDeCima(t.size.radiusSheet),
|
|
156
157
|
backgroundColor: t.color.popover, borderWidth: t.size.borderWidth, borderColor: t.color.border,
|
|
157
158
|
},
|
|
158
159
|
// O puxador, copiado do `BottomSheet` (`overlays.tsx:111-112`) — mesma medida, mesmo token.
|
|
159
160
|
puxadorArea: { alignItems: "center", paddingVertical: t.size.space2 },
|
|
160
|
-
puxador: { width: 40, height: 4,
|
|
161
|
+
puxador: { width: 40, height: 4, ...canto(t.size.radiusFull),
|
|
161
162
|
backgroundColor: t.color.borderStrong },
|
|
162
163
|
// O campo de digitar, no topo da folha. É o `.input-group` da web (`aurea.css:741`): a borda
|
|
163
164
|
// mora no GRUPO e o campo dentro dele é transparente e sem borda.
|
|
@@ -166,7 +167,7 @@ const folha = criarFolha((t) => ({
|
|
|
166
167
|
margin: t.size.space3,
|
|
167
168
|
paddingHorizontal: t.size.space3,
|
|
168
169
|
borderWidth: t.size.borderWidth, borderColor: t.color.borderStrong,
|
|
169
|
-
|
|
170
|
+
...canto(t.size.radiusControl), backgroundColor: t.color.fieldBg,
|
|
170
171
|
},
|
|
171
172
|
// ⚠ `paddingVertical: 0` e `textAlignVertical: "center"` — a MESMA correção que o `Input` do
|
|
172
173
|
// Lote 4 levou depois do vidro (`inputs.tsx:280-296`): sem elas o Android injeta o padding do
|
package/dist/chart.js
CHANGED
|
@@ -54,7 +54,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
54
54
|
import * as React from "react";
|
|
55
55
|
import { Pressable, View } from "react-native";
|
|
56
56
|
import Svg, { Circle, G, Line, Path, Rect, Text as SvgText } from "react-native-svg";
|
|
57
|
-
import { criarFolha, estadoAcessivel } from "./estilos.js";
|
|
57
|
+
import { canto, criarFolha, estadoAcessivel } from "./estilos.js";
|
|
58
58
|
import { Text } from "./text.js";
|
|
59
59
|
import { useAureaStrings, useAureaTokens } from "./theme.js";
|
|
60
60
|
/** A altura padrão, igual ao `--chart-h,220px` do `aurea.css:1329`. */
|
|
@@ -70,7 +70,7 @@ const folha = criarFolha((t) => ({
|
|
|
70
70
|
chave: { flexDirection: "row", alignItems: "center", gap: t.size.space2 },
|
|
71
71
|
amostra: {
|
|
72
72
|
flexGrow: 0, flexShrink: 0,
|
|
73
|
-
width: 9, height: 9,
|
|
73
|
+
width: 9, height: 9, ...canto(t.size.radiusSm),
|
|
74
74
|
},
|
|
75
75
|
valores: { gap: t.size.space1 },
|
|
76
76
|
linhaDeValor: { flexDirection: "row", alignItems: "center", gap: t.size.space2 },
|
package/dist/data.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export type AureaTimelineItem = {
|
|
|
13
13
|
time?: React.ReactNode;
|
|
14
14
|
/**
|
|
15
15
|
* R-18, 02/10/2026: o glifo numa moldura redonda, no lugar do ponto. Moldura de 40 (o `Avatar`
|
|
16
|
-
* `sm`
|
|
16
|
+
* `sm` da referência) e glifo de 20. Basta um item com `icon` para a coluna inteira ter a
|
|
17
17
|
* largura da moldura — os itens sem ícone ficam com o ponto, no centro dela.
|
|
18
18
|
*/
|
|
19
19
|
icon?: AureaIcon;
|
package/dist/data.js
CHANGED
|
@@ -56,7 +56,7 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
|
|
|
56
56
|
// .table th :1185 `subtle-foreground`, fundo `surface-2`, textXs, CAIXA ALTA
|
|
57
57
|
import * as React from "react";
|
|
58
58
|
import { FlatList, Pressable, View, useWindowDimensions, } from "react-native";
|
|
59
|
-
import { criarFolha } from "./estilos.js";
|
|
59
|
+
import { canto, criarFolha } from "./estilos.js";
|
|
60
60
|
import { IconeEmMoldura } from "./moldura.js";
|
|
61
61
|
import { Text } from "./text.js";
|
|
62
62
|
import { useAureaStrings, useAureaTokens } from "./theme.js";
|
|
@@ -73,7 +73,7 @@ const folha = criarFolha((t) => ({
|
|
|
73
73
|
evento: { flexDirection: "row", alignItems: "flex-start", gap: t.size.space3 },
|
|
74
74
|
ponto: {
|
|
75
75
|
flexGrow: 0, flexShrink: 0,
|
|
76
|
-
width: t.size.space3, height: t.size.space3,
|
|
76
|
+
width: t.size.space3, height: t.size.space3, ...canto(t.size.radiusFull),
|
|
77
77
|
marginTop: t.size.space1, backgroundColor: t.color.primary,
|
|
78
78
|
// O halo do CSS é `box-shadow: 0 0 0 space-05 surface-1`. No RN sombra não faz anel —
|
|
79
79
|
// uma BORDA da cor da superfície faz o mesmo buraco, e cresce o ponto pelo mesmo tanto.
|
|
@@ -99,7 +99,7 @@ const folha = criarFolha((t) => ({
|
|
|
99
99
|
linha: {
|
|
100
100
|
padding: t.size.space3, gap: t.size.space2,
|
|
101
101
|
borderWidth: t.size.borderWidth, borderColor: t.color.border,
|
|
102
|
-
|
|
102
|
+
...canto(t.size.radiusLg), backgroundColor: t.color.card,
|
|
103
103
|
},
|
|
104
104
|
linhaTocavel: { minHeight: t.size.targetMin ?? 44 },
|
|
105
105
|
celula: { flexDirection: "row", gap: t.size.space3, alignItems: "flex-start" },
|
package/dist/display.js
CHANGED
|
@@ -23,36 +23,36 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
23
23
|
// perderia o cartão, que é metade do que ela é.
|
|
24
24
|
import * as React from "react";
|
|
25
25
|
import { Image, View } from "react-native";
|
|
26
|
-
import { acentoDoTom, criarFolha, fundoDoTom } from "./estilos.js";
|
|
26
|
+
import { canto, acentoDoTom, criarFolha, fundoDoTom } from "./estilos.js";
|
|
27
27
|
import { Card } from "./layout.js";
|
|
28
28
|
import { gravidadeDoEstado } from "./strings.js";
|
|
29
29
|
import { Text } from "./text.js";
|
|
30
30
|
import { useAureaStrings, useAureaTokens } from "./theme.js";
|
|
31
31
|
const folha = criarFolha((t) => ({
|
|
32
32
|
// ── Badge ──────────────────────────────────────────────────────────────────────────────────
|
|
33
|
-
// 🔴 AS MEDIDAS SÃO AS DO
|
|
34
|
-
// 25/09/2026: "se
|
|
33
|
+
// 🔴 AS MEDIDAS SÃO AS DO CHIP DA REFERÊNCIA — ordem do Victor de
|
|
34
|
+
// 25/09/2026: "se [a referência] já tem, vamos usar as [dela]". Recheio, letra, linha e vão:
|
|
35
35
|
// sm 8 × 2 · letra 12 · linha 16 md 12 × 4 · letra 14 · linha 20
|
|
36
36
|
// lg 16 × 6 · letra 16 · linha 24 vão 4 entre ponto, texto e adornos
|
|
37
37
|
// Até a 0.10.1 eram `3px 9px` e `gap:6` crus, e o texto saía com entrelinha 1,0: no Android a
|
|
38
|
-
// perna do g e do p era cortada (a mesma causa do E1 no `Button`). A linha
|
|
38
|
+
// perna do g e do p era cortada (a mesma causa do E1 no `Button`). A linha da referência é ≥ 1,33 ×
|
|
39
39
|
// a letra, e a letra precisa de 1,3 (a IBM Plex e a Atkinson Hyperlegible da ADR-0053, medidas
|
|
40
40
|
// na tabela `hhea`). O raio continua a cápsula da Aurea (identidade) e a
|
|
41
41
|
// borda continua nossa.
|
|
42
|
-
// ⚠ O `xs` NÃO existe
|
|
42
|
+
// ⚠ O `xs` NÃO existe na referência (é o contador sobre ícone): fica a medida nossa, 16 de altura,
|
|
43
43
|
// agora com letra 12 e linha 16 para caber a letra inteira.
|
|
44
44
|
selo: {
|
|
45
45
|
flexDirection: "row", alignItems: "center", justifyContent: "center", gap: t.size.space1,
|
|
46
46
|
paddingVertical: t.size.space1, paddingHorizontal: t.size.space3,
|
|
47
|
-
borderWidth: t.size.borderWidth,
|
|
47
|
+
borderWidth: t.size.borderWidth, ...canto(t.size.radiusControl),
|
|
48
48
|
backgroundColor: t.color.secondary, borderColor: t.color.border,
|
|
49
49
|
},
|
|
50
50
|
selo_xs: { minHeight: t.size.space4, paddingVertical: 0, paddingHorizontal: t.size.space1, borderWidth: 0 },
|
|
51
51
|
selo_sm: { paddingVertical: t.size.space05, paddingHorizontal: t.size.space2 },
|
|
52
52
|
selo_md: {},
|
|
53
|
-
// 6 de recheio vertical:
|
|
53
|
+
// 6 de recheio vertical: na referência é 1,5 vez a unidade de espaço dela, e essa unidade é o `space1`.
|
|
54
54
|
selo_lg: { paddingVertical: t.size.space1 * 1.5, paddingHorizontal: t.size.space4 },
|
|
55
|
-
ponto: { width: t.size.space2, height: t.size.space2,
|
|
55
|
+
ponto: { width: t.size.space2, height: t.size.space2, ...canto(t.size.radiusFull) },
|
|
56
56
|
// `fit="content"` (R-01): o mesmo `alignSelf` que a âncora abaixo já usa para não esticar.
|
|
57
57
|
justo: { alignSelf: "flex-start" },
|
|
58
58
|
// A âncora é `position:relative` na web; aqui o filho absoluto já se posiciona por ela.
|
|
@@ -66,11 +66,11 @@ const folha = criarFolha((t) => ({
|
|
|
66
66
|
estado: { flexDirection: "row", alignItems: "center", gap: t.size.space2 },
|
|
67
67
|
// O halo é `box-shadow 0 0 0 3px` da cor corrente a 14% (aurea.css:1055). Sem `color-mix` no
|
|
68
68
|
// RN, o mesmo efeito sai com opacidade no próprio anel.
|
|
69
|
-
pontoDeEstado: { width: 8, height: 8,
|
|
69
|
+
pontoDeEstado: { width: 8, height: 8, ...canto(t.size.radiusFull) },
|
|
70
70
|
// ── Avatar ─────────────────────────────────────────────────────────────────────────────────
|
|
71
71
|
avatar: {
|
|
72
72
|
alignItems: "center", justifyContent: "center", overflow: "hidden",
|
|
73
|
-
|
|
73
|
+
...canto(t.size.radiusFull), backgroundColor: t.color.surface3,
|
|
74
74
|
borderWidth: t.size.borderWidth, borderColor: t.color.borderStrong,
|
|
75
75
|
},
|
|
76
76
|
imagem: { width: "100%", height: "100%" },
|
|
@@ -95,8 +95,8 @@ export const formatarContagem = (count, max = 99) => count > max ? `${max}+` : S
|
|
|
95
95
|
* usa selo com miniatura, e prop sem consumidor é superfície pública para manter de graça. Volta
|
|
96
96
|
* quando houver tela que peça.
|
|
97
97
|
*/
|
|
98
|
-
/** A letra e a linha do selo, do
|
|
99
|
-
* `size` do `Text`, que no telefone sobe um degrau (ADR-0050) —
|
|
98
|
+
/** A letra e a linha do selo, do chip da referência (ver a folha). O token direto, e não o
|
|
99
|
+
* `size` do `Text`, que no telefone sobe um degrau (ADR-0050) — a referência não sobe no chip. */
|
|
100
100
|
const LETRA_DO_SELO = (t, size) => size === "lg" ? { fontSize: t.size.textBase, lineHeight: t.size.space6 }
|
|
101
101
|
: size === "md" ? { fontSize: t.size.textSm, lineHeight: t.size.space5 }
|
|
102
102
|
: { fontSize: t.size.textXs, lineHeight: t.size.space4 };
|
package/dist/estilos.d.ts
CHANGED
|
@@ -33,6 +33,50 @@ export declare function criarFolha<T extends NamedStyles<T> | NamedStyles<Record
|
|
|
33
33
|
* um ícone) não tinha como escrevê-lo sem número à mão. O `check 39` cobra o teste dele.
|
|
34
34
|
*/
|
|
35
35
|
export declare const comOpacidade: (cor: string, pct: number) => string;
|
|
36
|
+
/**
|
|
37
|
+
* 🍎 O CANTO DO iOS — HER-01, 06/10/2026: todo canto arredondado do nativo passa por aqui.
|
|
38
|
+
*
|
|
39
|
+
* `borderCurve: "continuous"` é o canto do iPhone: a curva entra no lado aos poucos, em vez de
|
|
40
|
+
* começar de repente como um quarto de círculo. A referência o põe em 24 peças; a
|
|
41
|
+
* Aurea, até aqui, em nenhuma. Pela doc do React Native (tipos do 0.87.1), ele só vale no **iOS
|
|
42
|
+
* 13+**: o Android ignora, e o navegador também — o `react-native-web` 0.21 passa a propriedade
|
|
43
|
+
* adiante e o CSS não a conhece, sem erro. **No Android do Victor nada muda; no iPhone, muda.**
|
|
44
|
+
*
|
|
45
|
+
* ⚠ **Raio escrito fora daqui é defeito.** O `native-canto-continuo.test.tsx` lê o fonte do pacote
|
|
46
|
+
* e reprova `borderRadius` (ou um dos quatro cantos) escrito à mão — a regra *"quem mais tem esse
|
|
47
|
+
* problema?"* virando trava, para a próxima peça não nascer com o canto do Android no iPhone.
|
|
48
|
+
*/
|
|
49
|
+
export declare const canto: (raio: number, curva?: "continuous" | "circular") => {
|
|
50
|
+
readonly borderRadius: number;
|
|
51
|
+
readonly borderCurve: "circular" | "continuous";
|
|
52
|
+
};
|
|
53
|
+
/** Os dois cantos de CIMA — a folha que sobe de baixo (`BottomSheet`, a lista do `Select`). */
|
|
54
|
+
export declare const cantosDeCima: (raio: number) => {
|
|
55
|
+
readonly borderTopLeftRadius: number;
|
|
56
|
+
readonly borderTopRightRadius: number;
|
|
57
|
+
readonly borderCurve: "continuous";
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* A PELE DO CARTÃO — o raio 22, o recheio, o fundo e a borda do `Card`; e a do cartão ESCOLHIDO
|
|
61
|
+
* (`variant="selected"`): a borda do contorno da marca sobre o fundo `surface2`.
|
|
62
|
+
*
|
|
63
|
+
* ⚠ **Moravam dentro do `layout.tsx` e mudaram de casa em 06/10/2026**, quando o cartão de escolha
|
|
64
|
+
* (CHK-01, `RadioGroup variant="card"`) passou a precisar da mesma pele: um cartão escolhido tem de
|
|
65
|
+
* parecer o cartão escolhido que o app já usa, e não um parecido. Duas cópias dos números é o
|
|
66
|
+
* defeito que o `CLAUDE.md` nomeia.
|
|
67
|
+
*/
|
|
68
|
+
export declare const peleDoCartao: (t: AureaTokens) => {
|
|
69
|
+
borderRadius: number;
|
|
70
|
+
borderCurve: "circular" | "continuous";
|
|
71
|
+
padding: number;
|
|
72
|
+
backgroundColor: string;
|
|
73
|
+
borderWidth: number;
|
|
74
|
+
borderColor: string;
|
|
75
|
+
};
|
|
76
|
+
export declare const peleDoCartaoEscolhido: (t: AureaTokens) => {
|
|
77
|
+
borderColor: string;
|
|
78
|
+
backgroundColor: string;
|
|
79
|
+
};
|
|
36
80
|
/** O tom de cor com significado — o vocabulário do `Badge` (`AureaBadgeTone`). */
|
|
37
81
|
export type TomDeCor = "neutral" | "primary" | "info" | "success" | "warning" | "danger";
|
|
38
82
|
/**
|
package/dist/estilos.js
CHANGED
|
@@ -49,6 +49,39 @@ export function criarFolha(descrever) {
|
|
|
49
49
|
export const comOpacidade = (cor, pct) => /^#[0-9a-fA-F]{6}$/.test(cor)
|
|
50
50
|
? cor + Math.round(Math.max(0, Math.min(1, pct)) * 255).toString(16).padStart(2, "0")
|
|
51
51
|
: cor;
|
|
52
|
+
/**
|
|
53
|
+
* 🍎 O CANTO DO iOS — HER-01, 06/10/2026: todo canto arredondado do nativo passa por aqui.
|
|
54
|
+
*
|
|
55
|
+
* `borderCurve: "continuous"` é o canto do iPhone: a curva entra no lado aos poucos, em vez de
|
|
56
|
+
* começar de repente como um quarto de círculo. A referência o põe em 24 peças; a
|
|
57
|
+
* Aurea, até aqui, em nenhuma. Pela doc do React Native (tipos do 0.87.1), ele só vale no **iOS
|
|
58
|
+
* 13+**: o Android ignora, e o navegador também — o `react-native-web` 0.21 passa a propriedade
|
|
59
|
+
* adiante e o CSS não a conhece, sem erro. **No Android do Victor nada muda; no iPhone, muda.**
|
|
60
|
+
*
|
|
61
|
+
* ⚠ **Raio escrito fora daqui é defeito.** O `native-canto-continuo.test.tsx` lê o fonte do pacote
|
|
62
|
+
* e reprova `borderRadius` (ou um dos quatro cantos) escrito à mão — a regra *"quem mais tem esse
|
|
63
|
+
* problema?"* virando trava, para a próxima peça não nascer com o canto do Android no iPhone.
|
|
64
|
+
*/
|
|
65
|
+
export const canto = (raio, curva = "continuous") => ({ borderRadius: raio, borderCurve: curva });
|
|
66
|
+
/** Os dois cantos de CIMA — a folha que sobe de baixo (`BottomSheet`, a lista do `Select`). */
|
|
67
|
+
export const cantosDeCima = (raio) => ({ borderTopLeftRadius: raio, borderTopRightRadius: raio, borderCurve: "continuous" });
|
|
68
|
+
/**
|
|
69
|
+
* A PELE DO CARTÃO — o raio 22, o recheio, o fundo e a borda do `Card`; e a do cartão ESCOLHIDO
|
|
70
|
+
* (`variant="selected"`): a borda do contorno da marca sobre o fundo `surface2`.
|
|
71
|
+
*
|
|
72
|
+
* ⚠ **Moravam dentro do `layout.tsx` e mudaram de casa em 06/10/2026**, quando o cartão de escolha
|
|
73
|
+
* (CHK-01, `RadioGroup variant="card"`) passou a precisar da mesma pele: um cartão escolhido tem de
|
|
74
|
+
* parecer o cartão escolhido que o app já usa, e não um parecido. Duas cópias dos números é o
|
|
75
|
+
* defeito que o `CLAUDE.md` nomeia.
|
|
76
|
+
*/
|
|
77
|
+
export const peleDoCartao = (t) => ({
|
|
78
|
+
...canto(t.size.radiusCard),
|
|
79
|
+
padding: t.size.cardPad,
|
|
80
|
+
backgroundColor: t.color.card,
|
|
81
|
+
borderWidth: t.size.borderWidth,
|
|
82
|
+
borderColor: t.color.border,
|
|
83
|
+
});
|
|
84
|
+
export const peleDoCartaoEscolhido = (t) => ({ borderColor: t.color.primaryOutline, backgroundColor: t.color.surface2 });
|
|
52
85
|
/**
|
|
53
86
|
* A cor FORTE de um tom: o texto do selo, o ícone da moldura.
|
|
54
87
|
*
|
|
@@ -86,7 +119,7 @@ export const fundoDoTom = (t, tom) => tom === "info" ? t.color.infoBg
|
|
|
86
119
|
*/
|
|
87
120
|
export const fioDoEscolhido = (t) => ({
|
|
88
121
|
position: "absolute", left: 15, right: 15, bottom: 0, height: 2,
|
|
89
|
-
|
|
122
|
+
...canto(t.size.radiusFull), backgroundColor: comOpacidade(t.color.primary, 0.75),
|
|
90
123
|
});
|
|
91
124
|
/**
|
|
92
125
|
* A reação ao TOQUE de tudo que é alvo inteiro — hoje o `Button`, o `IconButton` e o `Card` com
|
package/dist/feedback.d.ts
CHANGED
|
@@ -54,7 +54,7 @@ export interface ProgressProps {
|
|
|
54
54
|
value?: number;
|
|
55
55
|
label?: string;
|
|
56
56
|
/**
|
|
57
|
-
* O texto de apoio, no alto à direita —
|
|
57
|
+
* O texto de apoio, no alto à direita — a saída de texto da barra de progresso da referência: velocidade, tempo que
|
|
58
58
|
* falta, bytes. Em texto, ele vai junto no `accessibilityValue`. É texto: a barra é um elemento
|
|
59
59
|
* só para o leitor de tela, e coisa tocável dentro dela some no iPhone (`check 43`).
|
|
60
60
|
*/
|
|
@@ -70,8 +70,8 @@ export interface ProgressProps {
|
|
|
70
70
|
* anuncia que existe uma barra e não diz em quanto ela está, que é a única informação que ela tem.
|
|
71
71
|
* Sem total, não há `now` — a barra não finge um 0%.
|
|
72
72
|
*
|
|
73
|
-
* Sem total, um pedaço de 2/5 corre de -100% a 350% da própria largura em 1,5 s, na curva
|
|
74
|
-
*
|
|
73
|
+
* Sem total, um pedaço de 2/5 corre de -100% a 350% da própria largura em 1,5 s, na curva da
|
|
74
|
+
* barra de progresso da referência — os mesmos números da web. Quando a pessoa pede menos movimento
|
|
75
75
|
* ele não corre: a barra inteira, apagada, e nunca um pedaço parado, que leria como 40% feito.
|
|
76
76
|
*/
|
|
77
77
|
export declare function Progress({ value, label, detail, tone, style, testID }: ProgressProps): React.JSX.Element;
|
|
@@ -106,7 +106,7 @@ export declare function Alert({ variant, state, title, icon, onDismiss, children
|
|
|
106
106
|
export interface EmptyStateProps {
|
|
107
107
|
/**
|
|
108
108
|
* O glifo, dentro de uma moldura redonda — R-15, 02/10/2026, escolhida pelo Victor na prancha
|
|
109
|
-
* (*"1 c"*). Moldura de 64 (o `Avatar` `lg`
|
|
109
|
+
* (*"1 c"*). Moldura de 64 (o `Avatar` `lg` da referência) e glifo de 32, o de antes. O desenho
|
|
110
110
|
* do próprio app entra aqui também (`icon={Logo}`, R-11).
|
|
111
111
|
*/
|
|
112
112
|
icon?: AureaIcon;
|
package/dist/feedback.js
CHANGED
|
@@ -22,7 +22,7 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
|
|
|
22
22
|
import * as React from "react";
|
|
23
23
|
import { Animated, Easing, View } from "react-native";
|
|
24
24
|
import { IconButton } from "./actions.js";
|
|
25
|
-
import { criarFolha, estadoAcessivel } from "./estilos.js";
|
|
25
|
+
import { canto, criarFolha, estadoAcessivel } from "./estilos.js";
|
|
26
26
|
import { Icon } from "./icon.js";
|
|
27
27
|
import { IconeEmMoldura } from "./moldura.js";
|
|
28
28
|
import { useReduceMotion, driverNativo } from "./movimento.js";
|
|
@@ -32,18 +32,21 @@ import { useAureaStrings, useAureaTokens } from "./theme.js";
|
|
|
32
32
|
const folha = criarFolha((t) => ({
|
|
33
33
|
// ── Spinner ────────────────────────────────────────────────────────────────────────────────
|
|
34
34
|
// Um ANEL, e não o `ActivityIndicator` do React Native. Não é preferência: o `ActivityIndicator`
|
|
35
|
-
// desenha a rosquinha do
|
|
36
|
-
// Aurea, e o `CLAUDE.md` proíbe
|
|
35
|
+
// desenha a rosquinha do sistema no Android e a coroa do iOS — duas aparências que não são a
|
|
36
|
+
// Aurea, e o `CLAUDE.md` proíbe a primeira como aparência em voz alta. O anel é reprodutível
|
|
37
37
|
// com borda, e `borderRightColor: transparent` existe no RN igual ao CSS.
|
|
38
|
-
|
|
38
|
+
// HER-01: a ÚNICA peça com o canto `circular`, declarada. O anel GIRA, e um contorno que não
|
|
39
|
+
// seja círculo perfeito balança ao girar. A referência também deixa o `Spinner` de
|
|
40
|
+
// fora das 24 peças com canto contínuo.
|
|
41
|
+
anel: { borderWidth: 2, borderRightColor: "transparent", ...canto(t.size.radiusFull, "circular") },
|
|
39
42
|
// ── Skeleton ───────────────────────────────────────────────────────────────────────────────
|
|
40
43
|
// O raio 7 é cru no CSS (`aurea.css:1111`) e entra aqui **como está**: inventar um token para
|
|
41
44
|
// ele faria o nativo e a web desenharem cantos diferentes para a mesma peça.
|
|
42
|
-
esqueleto: {
|
|
45
|
+
esqueleto: { ...canto(7), backgroundColor: t.color.surface3 },
|
|
43
46
|
// ── Progress ───────────────────────────────────────────────────────────────────────────────
|
|
44
|
-
trilho: { height: 8,
|
|
45
|
-
preenchimento: { height: "100%",
|
|
46
|
-
// AN-07: a caixa com o texto de apoio em cima — a grade
|
|
47
|
+
trilho: { height: 8, ...canto(t.size.radiusFull), backgroundColor: t.color.surface3, overflow: "hidden" },
|
|
48
|
+
preenchimento: { height: "100%", ...canto(t.size.radiusFull), backgroundColor: t.color.primary },
|
|
49
|
+
// AN-07: a caixa com o texto de apoio em cima — a grade da referência, o vão `space1` até o trilho, a saída
|
|
47
50
|
// à direita em algarismos de largura igual.
|
|
48
51
|
campoProgresso: { gap: t.size.space1 },
|
|
49
52
|
apoioProgresso: { alignSelf: "flex-end" },
|
|
@@ -56,7 +59,9 @@ const folha = criarFolha((t) => ({
|
|
|
56
59
|
alerta: {
|
|
57
60
|
flexDirection: "row", alignItems: "flex-start", gap: t.size.space3,
|
|
58
61
|
paddingVertical: 14, paddingHorizontal: t.size.space4,
|
|
59
|
-
|
|
62
|
+
// HER-02 (06/10/2026): era `radiusLg` (16). Painel é 22 na identidade da Aurea (`CLAUDE.md`
|
|
63
|
+
// §5), como o `Popover`, o `Dialog` e o `Banner`; a referência usa 24 na web e no nativo.
|
|
64
|
+
borderWidth: t.size.borderWidth, ...canto(t.size.radiusCard),
|
|
60
65
|
backgroundColor: t.color.secondary, borderColor: t.color.border,
|
|
61
66
|
},
|
|
62
67
|
// O GRUPO de leitura: ícone + texto, lidos como uma coisa só. Ele existe porque a moldura
|
|
@@ -152,7 +157,7 @@ export function Skeleton({ width, height, radius, style, testID }) {
|
|
|
152
157
|
return (_jsx(Animated.View, { testID: testID, accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants", style: [
|
|
153
158
|
s.esqueleto,
|
|
154
159
|
{ width: width ?? "100%", height: height ?? t.size.space4 },
|
|
155
|
-
radius != null && {
|
|
160
|
+
radius != null && { ...canto(radius) },
|
|
156
161
|
{ opacity: opacidade },
|
|
157
162
|
style,
|
|
158
163
|
] }));
|
|
@@ -168,8 +173,8 @@ const COR_DO_TOM = {
|
|
|
168
173
|
* anuncia que existe uma barra e não diz em quanto ela está, que é a única informação que ela tem.
|
|
169
174
|
* Sem total, não há `now` — a barra não finge um 0%.
|
|
170
175
|
*
|
|
171
|
-
* Sem total, um pedaço de 2/5 corre de -100% a 350% da própria largura em 1,5 s, na curva
|
|
172
|
-
*
|
|
176
|
+
* Sem total, um pedaço de 2/5 corre de -100% a 350% da própria largura em 1,5 s, na curva da
|
|
177
|
+
* barra de progresso da referência — os mesmos números da web. Quando a pessoa pede menos movimento
|
|
173
178
|
* ele não corre: a barra inteira, apagada, e nunca um pedaço parado, que leria como 40% feito.
|
|
174
179
|
*/
|
|
175
180
|
export function Progress({ value, label, detail, tone = "brand", style, testID }) {
|
package/dist/icon.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export type AureaIconComponent = (props: {
|
|
|
6
6
|
}) => React.ReactElement;
|
|
7
7
|
/**
|
|
8
8
|
* Um ícone: o NOME de um glifo do registro (`"truck"`) ou o próprio DESENHO (`Logo`) — R-11,
|
|
9
|
-
* 02/10/2026. É o jeito
|
|
9
|
+
* 02/10/2026. É o jeito da referência: lá nenhuma peça recebe nome de ícone, o app põe o componente
|
|
10
10
|
* dele dentro. Aqui os dois valem em toda prop de ícone, e o desenho dispensa registro e
|
|
11
11
|
* `declare module`: o logotipo do app entra como `icon={Logo}`, com o `Logo` de `criarGlifo` ou o
|
|
12
12
|
* `default` de um `icons/*`. Ele recebe o `size` e a `color` que a peça pedir.
|
package/dist/index.d.ts
CHANGED
|
@@ -22,10 +22,10 @@ export { useAureaStrings } from "./theme.js";
|
|
|
22
22
|
export { defaultStrings, ptBR, gravidadeDoEstado, AUREA_UNIVERSAL_STATES } from "./strings.js";
|
|
23
23
|
export type { AureaStrings, AureaUniversalState } from "./strings.js";
|
|
24
24
|
export { useReduceMotion } from "./movimento.js";
|
|
25
|
-
export { BottomNav, Topbar, NavList, Stepper, Tabs } from "./navigation.js";
|
|
26
|
-
export type { BottomNavProps, TopbarProps, NavListProps, StepperProps, AureaNavItem, AureaNavListItem, AureaNavListIndicator, AureaStepItem, AureaStepState, AureaBottomNavVariant, AureaBottomNavIndicator, AureaBottomNavWidth, AureaTopbarVariant, AureaTopbarInset, TabsProps, AureaTabItem, AureaTabsVariant, } from "./navigation.js";
|
|
25
|
+
export { BottomNav, Header, Topbar, NavList, Stepper, Tabs } from "./navigation.js";
|
|
26
|
+
export type { BottomNavProps, HeaderProps, TopbarProps, NavListProps, StepperProps, AureaNavItem, AureaNavListItem, AureaNavListIndicator, AureaStepItem, AureaStepState, AureaBottomNavVariant, AureaBottomNavIndicator, AureaBottomNavWidth, AureaHeaderVariant, AureaHeaderInset, AureaTopbarVariant, AureaTopbarInset, TabsProps, AureaTabItem, AureaTabsVariant, AureaTabsPanel, } from "./navigation.js";
|
|
27
27
|
export { Field, Label, Input, Textarea, Select, Switch, Checkbox, Radio, RadioGroup, SegmentedControl, Form, KeyboardAvoiding, useCampo, } from "./inputs.js";
|
|
28
|
-
export type { FieldProps, LabelProps, InputProps, TextareaProps, SelectProps, SwitchProps, CheckboxProps, RadioProps, RadioGroupProps, RadioGroupItemProps, AureaRadioIndicatorPlacement, SegmentedControlProps, FormProps, KeyboardAvoidingProps, AureaFieldSize, } from "./inputs.js";
|
|
28
|
+
export type { FieldProps, LabelProps, InputProps, TextareaProps, SelectProps, SwitchProps, CheckboxProps, RadioProps, RadioGroupProps, RadioGroupItemProps, AureaRadioIndicatorPlacement, AureaRadioGroupVariant, SegmentedControlProps, FormProps, KeyboardAvoidingProps, AureaFieldSize, } from "./inputs.js";
|
|
29
29
|
export { InputGroup, InputGroupAddon, PasswordField, useGrupoDeCampo } from "./inputs.js";
|
|
30
30
|
export type { InputGroupProps, InputGroupAddonProps, PasswordFieldProps } from "./inputs.js";
|
|
31
31
|
export { Dialog, ConfirmDialog, Drawer, BottomSheet } from "./overlays.js";
|
package/dist/index.js
CHANGED
|
@@ -54,7 +54,7 @@ export { useReduceMotion } from "./movimento.js";
|
|
|
54
54
|
// ⚠ **O `Tabs` entrou em 17/09/2026, e é a única peça daqui que NÃO saiu de um lote** — ele
|
|
55
55
|
// veio do consumidor, que precisava trocar de painel dentro de uma tela e só tinha o
|
|
56
56
|
// `SegmentedControl`, que anuncia "rádio". A fronteira com o `BottomNav` está no JSDoc dele.
|
|
57
|
-
export { BottomNav, Topbar, NavList, Stepper, Tabs } from "./navigation.js";
|
|
57
|
+
export { BottomNav, Header, Topbar, NavList, Stepper, Tabs } from "./navigation.js";
|
|
58
58
|
// ── Lote 4 — os formulários ────────────────────────────────────────────────────────────────
|
|
59
59
|
// ⚠ O `Field` NÃO nomeia o controle por referência, como o `<label for>` da web: ele empurra o
|
|
60
60
|
// nome, a dica e o estado de inválido para o controle por CONTEXTO. É a tradução que decidiu o
|