@aurea-uds/native 0.31.0 → 0.33.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/dist/overlays.js CHANGED
@@ -55,11 +55,15 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
55
55
  // E o comentário do `.dialog-confirm` (aurea.css:1577-1579) decidiu uma coisa por nós: **o
56
56
  // ConfirmDialog é o MESMO `.dialog`**, não uma segunda superfície. Aqui isso vira literalmente a
57
57
  // mesma função interna com uma largura diferente.
58
+ //
59
+ // ⚠ 0.32.0 (ADR-0066): o recheio de 24, o cabeçalho em linha com o X e o título em seminegrito, da
60
+ // lista acima, valem hoje só para o `Drawer`. O `Dialog`, o `ConfirmDialog` e o `BottomSheet` seguem
61
+ // as medidas do pacote NATIVO da referência — ver a folha, logo abaixo.
58
62
  import * as React from "react";
59
63
  import { Animated, Easing, Modal, PanResponder, Pressable, ScrollView, View, } from "react-native";
60
64
  import { Button } from "./actions.js";
61
65
  import { canto, cantosDeCima, criarFolha } from "./estilos.js";
62
- import { IconButton } from "./actions.js";
66
+ import { CloseButton } from "./actions.js";
63
67
  import { RecuoDaFolha } from "./screen.js";
64
68
  import { Text } from "./text.js";
65
69
  import { useAureaStrings, useTokensDoApp, ForaDaMarca } from "./theme.js";
@@ -71,8 +75,10 @@ const folha = criarFolha((t) => ({
71
75
  // contêiner; este só recebe o toque de fora do painel.
72
76
  fundoDeToque: { position: "absolute", top: 0, right: 0, bottom: 0, left: 0 },
73
77
  centro: { flex: 1, alignItems: "center", justifyContent: "center", padding: 20 },
78
+ // 0.32.0 (ADR-0066): a janela do pacote NATIVO da referência — recheio de 20 (era 24, o da web),
79
+ // título 18 em peso médio e descrição 16 (no componente).
74
80
  superficie: {
75
- width: "100%", maxWidth: 560, padding: 24,
81
+ width: "100%", maxWidth: 560, padding: t.size.space5,
76
82
  borderWidth: t.size.borderWidth, borderColor: t.color.border,
77
83
  ...canto(t.size.radiusCard),
78
84
  backgroundColor: t.color.popover,
@@ -84,13 +90,30 @@ const folha = criarFolha((t) => ({
84
90
  gap: 16, marginBottom: 16,
85
91
  },
86
92
  titulo: { flex: 1 },
93
+ // O título do `Dialog` e do `ConfirmDialog` (0.32.0): sozinho no alto, e não mais em linha com o
94
+ // X; 8 até o corpo — o `.dialog-header + .dialog-body` da web desta versão (era 16).
95
+ tituloDaJanela: { marginBottom: t.size.space2 },
96
+ // O X fica no CANTO, solto do fluxo, como o `.dialog-close` da web: a 16 da borda de FORA em cima e
97
+ // no fim (o absoluto conta de dentro da borda de 1). É o `CloseButton`, o círculo de 40 da escala
98
+ // de toque (`touchControlHSm`).
99
+ fechar: {
100
+ position: "absolute",
101
+ top: t.size.space4 - t.size.borderWidth, right: t.size.space4 - t.size.borderWidth,
102
+ },
103
+ // E o título não passa por baixo dele: reserva no fim a largura do X. Da borda de fora, o título
104
+ // acaba em 20 + 1 + 40 = 61 e o X começa em 16 + 40 = 56 — sobram 5 (a diferença entre o recheio
105
+ // e o canto do X, mais a borda).
106
+ tituloComFechar: { paddingRight: t.size.touchControlHSm },
107
+ // Na gaveta não há borda em cima nem do lado da tela (só a de dentro): o X fica a 16 cheios.
108
+ fecharDaGaveta: { top: t.size.space4, right: t.size.space4 },
87
109
  corpo: { gap: 14 },
88
110
  rodape: {
89
111
  flexDirection: "row", justifyContent: "flex-end", gap: t.size.space2,
90
112
  marginTop: t.size.space5,
91
113
  },
92
114
  gaveta: {
93
- position: "absolute", top: 0, bottom: 0, width: "92%", maxWidth: 480, padding: 24,
115
+ // 0.32.0: o recheio de 20 do `Dialog` nativo da referência (era 24 cru).
116
+ position: "absolute", top: 0, bottom: 0, width: "92%", maxWidth: 480, padding: t.size.space5,
94
117
  backgroundColor: t.color.surface1,
95
118
  ...(t.shadow.shadowLg ? { boxShadow: [t.shadow.shadowLg] } : null),
96
119
  },
@@ -99,7 +122,10 @@ const folha = criarFolha((t) => ({
99
122
  folhaBaixo: {
100
123
  position: "absolute", left: 0, right: 0, bottom: 0,
101
124
  maxHeight: "90%",
102
- paddingHorizontal: 24, paddingTop: t.size.space2, paddingBottom: 24,
125
+ // 0.32.0 (ADR-0066): recheio de 20, o da folha do pacote nativo da referência (era 24). Em cima,
126
+ // com o puxador, ficam estes 8 e a faixa dele (8 + o puxador de 4 + 8); sem o puxador, vale o
127
+ // `folhaSemPuxador`, 20 (eram estes 8 sozinhos).
128
+ paddingHorizontal: t.size.space5, paddingTop: t.size.space2, paddingBottom: t.size.space5,
103
129
  backgroundColor: t.color.popover,
104
130
  // HER-03 (06/10/2026, ADR-0058): 32 e não o 22 de painel — a folha acompanha o canto da tela
105
131
  // do telefone. Decisão do Victor, olhando as duas na bancada. A lista do `Select` e a folha do
@@ -108,6 +134,7 @@ const folha = criarFolha((t) => ({
108
134
  borderTopWidth: t.size.borderWidth, borderTopColor: t.color.border,
109
135
  ...(t.shadow.shadowLg ? { boxShadow: [t.shadow.shadowLg] } : null),
110
136
  },
137
+ folhaSemPuxador: { paddingTop: t.size.space5 },
111
138
  puxadorArea: { alignItems: "center", paddingVertical: t.size.space2 },
112
139
  puxador: { width: 40, height: 4, ...canto(999), backgroundColor: t.color.borderStrong },
113
140
  }));
@@ -165,9 +192,8 @@ const naoAtravessa = { onStartShouldSetResponder: () => true };
165
192
  export function Dialog({ open, title, children, footer, onClose, scroll = true, style, testID, }) {
166
193
  const t = useTokensDoApp();
167
194
  const s = folha(t);
168
- const strings = useAureaStrings();
169
195
  const Corpo = scroll ? ScrollView : View;
170
- return (_jsx(ForaDaMarca, { children: _jsx(Modal, { visible: open, transparent: true, animationType: "fade", statusBarTranslucent: true, navigationBarTranslucent: true, onRequestClose: onClose, testID: testID, children: _jsxs(View, { style: [s.fundo, s.centro], children: [_jsx(Pressable, { style: s.fundoDeToque, onPress: onClose, accessible: false, testID: testID ? `${testID}-fundo` : undefined }), _jsxs(View, { style: [s.superficie, style], children: [_jsxs(View, { style: s.cabecalho, children: [_jsx(Text, { size: "lg", weight: 600, accessibilityRole: "header", style: s.titulo, children: title }), _jsx(IconButton, { name: "x", label: strings.close, appearance: "ghost", size: "sm", onPress: onClose })] }), _jsx(Corpo, { ...(scroll ? { contentContainerStyle: s.corpo } : { style: s.corpo }), children: children }), footer ? _jsx(View, { style: s.rodape, children: footer }) : null] })] }) }) }));
196
+ return (_jsx(ForaDaMarca, { children: _jsx(Modal, { visible: open, transparent: true, animationType: "fade", statusBarTranslucent: true, navigationBarTranslucent: true, onRequestClose: onClose, testID: testID, children: _jsxs(View, { style: [s.fundo, s.centro], children: [_jsx(Pressable, { style: s.fundoDeToque, onPress: onClose, accessible: false, testID: testID ? `${testID}-fundo` : undefined }), _jsxs(View, { style: [s.superficie, style], children: [_jsx(Text, { size: "lg", weight: 500, accessibilityRole: "header", style: [s.tituloDaJanela, s.tituloComFechar], children: title }), _jsx(View, { style: s.fechar, children: _jsx(CloseButton, { onPress: onClose }) }), _jsx(Corpo, { ...(scroll ? { contentContainerStyle: s.corpo } : { style: s.corpo }), children: children }), footer ? _jsx(View, { style: s.rodape, children: footer }) : null] })] }) }) }));
171
197
  }
172
198
  /**
173
199
  * A decisão que não se desfaz.
@@ -195,7 +221,7 @@ export function ConfirmDialog({ open, title, description, confirmLabel, cancelLa
195
221
  const t = useTokensDoApp();
196
222
  const s = folha(t);
197
223
  const strings = useAureaStrings();
198
- return (_jsx(ForaDaMarca, { children: _jsx(Modal, { visible: open, transparent: true, animationType: "fade", statusBarTranslucent: true, navigationBarTranslucent: true, onRequestClose: onCancel, testID: testID, children: _jsx(View, { style: [s.fundo, s.centro], children: _jsxs(View, { ...naoAtravessa, style: [s.superficie, s.confirmar], children: [_jsx(View, { style: s.cabecalho, children: _jsx(Text, { size: "lg", weight: 600, accessibilityRole: "header", style: s.titulo, children: title }) }), _jsx(View, { style: s.corpo, children: typeof description === "string"
224
+ return (_jsx(ForaDaMarca, { children: _jsx(Modal, { visible: open, transparent: true, animationType: "fade", statusBarTranslucent: true, navigationBarTranslucent: true, onRequestClose: onCancel, testID: testID, children: _jsx(View, { style: [s.fundo, s.centro], children: _jsxs(View, { ...naoAtravessa, style: [s.superficie, s.confirmar], children: [_jsx(Text, { size: "lg", weight: 500, accessibilityRole: "header", style: s.tituloDaJanela, children: title }), _jsx(View, { style: s.corpo, children: typeof description === "string"
199
225
  ? _jsx(Text, { size: "md", tone: "muted", children: description })
200
226
  : description }), _jsxs(View, { style: s.rodape, children: [_jsx(Button, { appearance: "outline", onPress: onCancel, testID: testID ? `${testID}-cancelar` : undefined, children: cancelLabel ?? strings.confirmCancel }), _jsx(Button, { appearance: "solid", tone: destructive ? "danger" : "brand", onPress: onConfirm, testID: testID ? `${testID}-confirmar` : undefined, children: confirmLabel ?? strings.confirmProceed })] })] }) }) }) }));
201
227
  }
@@ -242,7 +268,7 @@ export function Drawer({ open, title, children, onClose, side = "right", scroll
242
268
  return (_jsx(ForaDaMarca, { children: _jsx(Modal, { visible: open, transparent: true, animationType: "none", statusBarTranslucent: true, navigationBarTranslucent: true, onRequestClose: onClose, testID: testID, children: _jsxs(View, { style: s.fundo, children: [_jsx(Pressable, { style: s.fundoDeToque, onPress: onClose, accessible: false, testID: testID ? `${testID}-fundo` : undefined }), _jsxs(Animated.View, { style: [
243
269
  s.gaveta, side === "right" ? s.gavetaDireita : s.gavetaEsquerda,
244
270
  { transform: [{ translateX: desloca }] }, style,
245
- ], children: [_jsxs(View, { style: s.cabecalho, children: [_jsx(Text, { size: "lg", weight: 600, accessibilityRole: "header", style: s.titulo, children: title }), _jsx(IconButton, { name: "x", label: strings.close, appearance: "ghost", size: "sm", onPress: onClose })] }), _jsx(Corpo, { ...(scroll ? { contentContainerStyle: s.corpo } : { style: s.corpo }), children: children })] })] }) }) }));
271
+ ], children: [_jsx(Text, { size: "lg", weight: 500, accessibilityRole: "header", style: [s.tituloDaJanela, s.tituloComFechar], children: title }), _jsx(View, { style: [s.fechar, s.fecharDaGaveta], children: _jsx(CloseButton, { label: strings.close, onPress: onClose }) }), _jsx(Corpo, { ...(scroll ? { contentContainerStyle: s.corpo } : { style: s.corpo }), children: children })] })] }) }) }));
246
272
  }
247
273
  /**
248
274
  * A folha que sobe de baixo. **NÃO existe na web** — é o único componente deste lote sem ficha.
@@ -297,5 +323,5 @@ export function BottomSheet({ open, title, children, onClose, grabber = true, dr
297
323
  }).start();
298
324
  },
299
325
  }), [draggable, onClose, arrasto, reduzir, t.easing.easeEmphasized]);
300
- return (_jsx(ForaDaMarca, { children: _jsx(Modal, { visible: open, transparent: true, animationType: reduzir !== false ? "none" : "slide", statusBarTranslucent: true, navigationBarTranslucent: true, onRequestClose: onClose, testID: testID, children: _jsxs(View, { style: s.fundo, children: [_jsx(Pressable, { style: s.fundoDeToque, onPress: onClose, accessible: false, testID: testID ? `${testID}-fundo` : undefined }), _jsxs(Animated.View, { ...naoAtravessa, ...gestos.panHandlers, onLayout: (e) => { altura.current = e.nativeEvent.layout.height; }, style: [s.folhaBaixo, { transform: [{ translateY: arrasto }] }, style], children: [grabber ? (_jsx(View, { style: s.puxadorArea, accessible: false, importantForAccessibility: "no-hide-descendants", children: _jsx(View, { style: s.puxador }) })) : null, title ? (_jsx(View, { style: s.cabecalho, children: _jsx(Text, { size: "lg", weight: 600, accessibilityRole: "header", style: s.titulo, children: title }) })) : null, _jsx(Corpo, { ...(scroll ? { contentContainerStyle: s.corpo } : { style: s.corpo }), children: children }), _jsx(RecuoDaFolha, {})] })] }) }) }));
326
+ return (_jsx(ForaDaMarca, { children: _jsx(Modal, { visible: open, transparent: true, animationType: reduzir !== false ? "none" : "slide", statusBarTranslucent: true, navigationBarTranslucent: true, onRequestClose: onClose, testID: testID, children: _jsxs(View, { style: s.fundo, children: [_jsx(Pressable, { style: s.fundoDeToque, onPress: onClose, accessible: false, testID: testID ? `${testID}-fundo` : undefined }), _jsxs(Animated.View, { ...naoAtravessa, ...gestos.panHandlers, onLayout: (e) => { altura.current = e.nativeEvent.layout.height; }, style: [s.folhaBaixo, !grabber && s.folhaSemPuxador, { transform: [{ translateY: arrasto }] }, style], children: [grabber ? (_jsx(View, { style: s.puxadorArea, accessible: false, importantForAccessibility: "no-hide-descendants", children: _jsx(View, { style: s.puxador }) })) : null, title ? (_jsx(View, { style: s.cabecalho, children: _jsx(Text, { size: "lg", weight: 500, accessibilityRole: "header", style: s.titulo, children: title }) })) : null, _jsx(Corpo, { ...(scroll ? { contentContainerStyle: s.corpo } : { style: s.corpo }), children: children }), _jsx(RecuoDaFolha, {})] })] }) }) }));
301
327
  }
package/dist/sistema.js CHANGED
@@ -38,7 +38,7 @@ import { IconButton } from "./actions.js";
38
38
  import { canto, criarFolha, estadoAcessivel } from "./estilos.js";
39
39
  import { Alert } from "./feedback.js";
40
40
  import { Icon } from "./icon.js";
41
- import { useCampo } from "./inputs.js";
41
+ import { alturaDoTamanho, respiroDoTamanho, useCampo } from "./inputs.js";
42
42
  import { FotoAmpliada, Image } from "./midia.js";
43
43
  import { Text } from "./text.js";
44
44
  import { useAureaStrings, useAureaTokens } from "./theme.js";
@@ -55,10 +55,11 @@ const folha = criarFolha((t) => ({
55
55
  desabilitado: { opacity: t.size.opacityDisabled },
56
56
  // R-22 (02/10/2026), a "B" da prancha: miniatura QUADRADA de 64 — o `Avatar` `lg` da
57
57
  // referência, e a medida que o botão de pôr foto passou a ter também (era 72, número à mão) — e o X
58
- // TODO FORA da foto. O X é o `IconButton` `sm` (30) com fundo; a área de toque dele é de 44
59
- // (`targetMin`), com o desenho no centro, então o deslocamento que põe o canto do DESENHO no
60
- // canto da foto é (30 + 44) / 2. A grade deixa esse espaço em cima, à direita e entre as linhas,
61
- // porque no Android o toque fora da caixa do pai não chega.
58
+ // TODO FORA da foto. O X é o `IconButton` `sm` (40 desde a 0.32.0) com fundo; a área de toque
59
+ // dele é a maior entre o desenho e o `targetMin` (44), com o desenho no centro, então o
60
+ // deslocamento que põe o canto do DESENHO no canto da foto é (40 + 44) / 2. A grade deixa esse
61
+ // espaço em cima, à direita e entre as linhas, porque no Android o toque fora da caixa do pai
62
+ // não chega.
62
63
  galeria: {
63
64
  flexDirection: "row", flexWrap: "wrap", columnGap: t.size.space4,
64
65
  rowGap: foraDoX(t) + t.size.space2,
@@ -73,9 +74,12 @@ const folha = criarFolha((t) => ({
73
74
  borderStyle: "dashed", backgroundColor: t.color.fieldBg,
74
75
  },
75
76
  }));
76
- /** Quanto o X do `PhotoInput` sai da foto: metade do desenho (30) mais metade do alvo (44). */
77
- const foraDoX = (t) => (t.size.controlHSm + Math.max(t.size.controlHSm, t.size.targetMin)) / 2;
78
- const alturaDoTamanho = (t, s) => s === "sm" ? t.size.controlHSm : s === "lg" ? t.size.controlHLg : t.size.controlHMd;
77
+ /**
78
+ * Quanto o X do `PhotoInput` sai da foto: metade do desenho mais metade do alvo (44). 0.32.0: o
79
+ * `IconButton` `sm` passou à escala de toque (`touchControlHSm`, 40; era o `controlHSm`, 32), e a
80
+ * conta segue o desenho — com a antiga, o X voltava a cobrir 4 da foto.
81
+ */
82
+ const foraDoX = (t) => (t.size.touchControlHSm + Math.max(t.size.touchControlHSm, t.size.targetMin)) / 2;
79
83
  // E16 (09/10/2026) · NO NAVEGADOR, o calendário "deles" é o do NAVEGADOR. A biblioteca de data não
80
84
  // tem versão web: o arquivo genérico dela devolve `null` e só avisa no console — tocar no campo não
81
85
  // abria nada (achado do app rodando no `react-native-web`). A saída é o `<input type="date">` do
@@ -163,10 +167,11 @@ export function DatePicker({ value, onChange, mode = "date", minimumDate, maximu
163
167
  }, [value, mode, minimumDate, maximumDate, receber]);
164
168
  const mostrarSeletorIOS = abertoNoIOS && Platform.OS !== "android";
165
169
  const conteudo = (_jsxs(_Fragment, { children: [_jsx(Text, { size: tam === "sm" ? "xs" : tam === "lg" ? "base" : "md", tone: value ? "default" : "subtle", numberOfLines: 1, children: texto }), icon && _jsx(Icon, { name: icon, size: "sm", color: t.color.subtleForeground })] }));
170
+ // 0.32.0: a medida do campo vem do `inputs.tsx` — a altura de toque (48 no `md`; era 36) e 12
171
+ // dos lados (era 13). Era uma cópia das contas de lá.
166
172
  const pele = [
167
173
  s.gatilho,
168
- { height: alturaDoTamanho(t, tam),
169
- paddingHorizontal: tam === "sm" ? t.size.space3 : tam === "lg" ? t.size.space4 : 13 },
174
+ { height: alturaDoTamanho(t, tam), paddingHorizontal: respiroDoTamanho(t, tam) },
170
175
  campo?.invalido && s.invalido,
171
176
  inativo && s.desabilitado,
172
177
  style,
package/dist/strings.d.ts CHANGED
@@ -18,6 +18,10 @@ export interface AureaStrings {
18
18
  loading: string;
19
19
  /** O que o `DataState` mostra em `error` sem `message`. */
20
20
  dataError: string;
21
+ /** O que o `DataState catchErrors` mostra quando o conteúdo quebra (MNT-25, 0.32.0). */
22
+ dataCrashed: string;
23
+ /** O botão que desenha de novo o conteúdo que quebrou. */
24
+ dataRetry: string;
21
25
  /** O título que o `EmptyState` e o `DataState` usam sem `title`. */
22
26
  dataEmpty: string;
23
27
  /** O nome da barra inferior para o leitor de tela. */
package/dist/strings.js CHANGED
@@ -30,6 +30,8 @@ export const gravidadeDoEstado = (estado) => estado.startsWith("waiting_") ? "in
30
30
  export const defaultStrings = {
31
31
  loading: "Loading",
32
32
  dataError: "This could not be loaded.",
33
+ dataCrashed: "Something went wrong here.",
34
+ dataRetry: "Try again",
33
35
  dataEmpty: "Nothing here yet",
34
36
  bottomNavLabel: "Main",
35
37
  tabsLabel: "Tabs",
@@ -80,6 +82,8 @@ export const defaultStrings = {
80
82
  export const ptBR = {
81
83
  loading: "Carregando",
82
84
  dataError: "Não foi possível carregar.",
85
+ dataCrashed: "Algo deu errado aqui.",
86
+ dataRetry: "Tentar de novo",
83
87
  dataEmpty: "Ainda não há nada aqui",
84
88
  bottomNavLabel: "Principal",
85
89
  tabsLabel: "Abas",
package/dist/text.js CHANGED
@@ -67,7 +67,13 @@ const ENTRELINHA = {
67
67
  none: "leadingNone", tight: "leadingTight", normal: "leadingNormal", relaxed: "leadingRelaxed",
68
68
  };
69
69
  // O título usa o papel `heading` (GAR-16, 0.28.0) — hoje a mesma fonte do texto, no mesmo peso 600.
70
- const titulo = (tamanho) => ({ tamanho, peso: 600, entrelinha: "leadingTight", fonte: "heading", junto: true });
70
+ // 0.32.0: a entrelinha é a de CADA tamanho (40 · 36 · 32 · 28 · 28 · 24), como na escala publicada
71
+ // da referência e na web; até aqui era `leadingTight` (1,2) em todos.
72
+ const ENTRELINHA_DO_TITULO = {
73
+ text4xl: "text4xlLeading", text3xl: "text3xlLeading", text2xl: "text2xlLeading",
74
+ textXl: "textXlLeading", textLg: "textLgLeading", textBase: "leadingNormal",
75
+ };
76
+ const titulo = (tamanho) => ({ tamanho, peso: 600, entrelinha: ENTRELINHA_DO_TITULO[tamanho] ?? "leadingTight", fonte: "heading", junto: true });
71
77
  const PAPEL = {
72
78
  h1: titulo("text4xl"), h2: titulo("text3xl"), h3: titulo("text2xl"),
73
79
  h4: titulo("textXl"), h5: titulo("textLg"), h6: titulo("textBase"),
package/dist/toast.js CHANGED
@@ -56,7 +56,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
56
56
  import * as React from "react";
57
57
  import { Animated, Easing, View } from "react-native";
58
58
  import { useSafeAreaInsets } from "react-native-safe-area-context";
59
- import { IconButton } from "./actions.js";
59
+ import { CloseButton } from "./actions.js";
60
60
  import { canto, criarFolha } from "./estilos.js";
61
61
  import { Icon } from "./icon.js";
62
62
  import { ICONE_DA_VARIANTE } from "./feedback.js";
@@ -71,7 +71,8 @@ const folha = criarFolha((t) => ({
71
71
  zIndex: t.size.zToast,
72
72
  },
73
73
  aviso: {
74
- flexDirection: "row", alignItems: "center", gap: 11, padding: 14,
74
+ // 0.32.0: 16 de recheio, o do aviso do nativo da referência (era 14, o da web antiga).
75
+ flexDirection: "row", alignItems: "center", gap: 11, padding: t.size.space4,
75
76
  maxWidth: 360, width: "100%", alignSelf: "flex-end",
76
77
  borderWidth: t.size.borderWidth, borderColor: t.color.border,
77
78
  // HER-02 (06/10/2026): era `radiusLg` (16). O aviso é superfície flutuante, e superfície
@@ -81,13 +82,9 @@ const folha = criarFolha((t) => ({
81
82
  ...(t.shadow.shadowMd ? { boxShadow: [t.shadow.shadowMd] } : null),
82
83
  },
83
84
  texto: { flex: 1, minWidth: 0, gap: 2 },
84
- aviso_info: { backgroundColor: t.color.infoBg, borderColor: t.color.info400 ?? t.color.info },
85
- aviso_success: { backgroundColor: t.color.successBg, borderColor: t.color.success400 ?? t.color.success },
86
- aviso_warning: { backgroundColor: t.color.warningBg, borderColor: t.color.warning400 ?? t.color.warning },
87
- aviso_danger: {
88
- backgroundColor: t.color.dangerBg,
89
- borderColor: t.color.danger400 ?? t.color.destructive,
90
- },
85
+ // 0.32.0: o tipo deixou de tingir o fundo e a borda (eram `aviso_info`…`aviso_danger`). Como o aviso
86
+ // da web desta versão e o da referência: o fundo é o da janela, e a cor do tipo vai no ícone e no
87
+ // TÍTULO.
91
88
  }));
92
89
  /** Quanto um aviso fica na tela sem `duration`. */
93
90
  const DURACAO_PADRAO = 5000;
@@ -201,14 +198,14 @@ export function Toast({ toast, onClose }) {
201
198
  : (t.color.info400 ?? t.color.info);
202
199
  const glifo = toast.icon === false ? null : (toast.icon ?? ICONE_DA_VARIANTE[tipo]);
203
200
  return (_jsxs(Animated.View, { accessible: true, ...(tipo === "danger" ? { accessibilityRole: "alert" } : null), accessibilityLiveRegion: tipo === "danger" ? "assertive" : "polite", style: [
204
- s.aviso, s[`aviso_${tipo}`],
201
+ s.aviso,
205
202
  // Os mesmos 12dp de baixo que o `.toast[data-starting-style]` da web usa.
206
203
  { opacity: entrada, transform: [{ translateY: entrada.interpolate({
207
204
  inputRange: [0, 1], outputRange: [12, 0],
208
205
  }) }] },
209
- ], testID: `toast-${toast.id}`, children: [glifo ? _jsx(Icon, { name: glifo, size: "md", color: corDoIcone, weight: toast.icon ? undefined : "fill" }) : null, _jsxs(View, { style: s.texto, children: [_jsx(Text, { size: "sm", weight: 600, children: toast.title }), toast.description != null
206
+ ], testID: `toast-${toast.id}`, children: [glifo ? _jsx(Icon, { name: glifo, size: "md", color: corDoIcone, weight: toast.icon ? undefined : "fill" }) : null, _jsxs(View, { style: s.texto, children: [_jsx(Text, { size: "base", weight: 500, style: { color: corDoIcone }, children: toast.title }), toast.description != null
210
207
  ? (typeof toast.description === "string"
211
208
  ? _jsx(Text, { size: "sm", tone: "muted", children: toast.description })
212
209
  : toast.description)
213
- : null] }), toast.action, _jsx(IconButton, { name: "x", label: strings.dismissNotification, appearance: "ghost", size: "sm", onPress: onClose })] }));
210
+ : null] }), toast.action, _jsx(CloseButton, { label: strings.dismissNotification, onPress: onClose })] }));
214
211
  }
package/icons/index.d.ts CHANGED
@@ -2858,6 +2858,7 @@ export {default as Wrench} from "./wrench.js";
2858
2858
  export {default as WrenchFill} from "./wrench-fill.js";
2859
2859
  export {default as X} from "./x.js";
2860
2860
  export {default as XFill} from "./x-fill.js";
2861
+ export {default as XBold} from "./x-bold.js";
2861
2862
  export {default as XCircle} from "./x-circle.js";
2862
2863
  export {default as XCircleFill} from "./x-circle-fill.js";
2863
2864
  export {default as XSquare} from "./x-square.js";
package/icons/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // GERADO por packages/native/build-icons-native.mjs. NÃO EDITAR.
2
2
  // Glifo do @phosphor-icons/core (Phosphor Icons, MIT) — ver NOTICE. Desenho copiado sem alteração.
3
3
  //
4
- // ⚠ ESTE BARRIL NÃO É A FORMA DOCUMENTADA. Ele traz os 2866 ícones ao grafo do bundler
4
+ // ⚠ ESTE BARRIL NÃO É A FORMA DOCUMENTADA. Ele traz os 2867 ícones ao grafo do bundler
5
5
  // a menos que o tree-shaking do Metro (experimental, três flags, só em produção) esteja
6
6
  // ligado. A forma que não depende de configuração alheia é o caminho profundo:
7
7
  //
@@ -2865,6 +2865,7 @@ export {default as Wrench} from "./wrench.js";
2865
2865
  export {default as WrenchFill} from "./wrench-fill.js";
2866
2866
  export {default as X} from "./x.js";
2867
2867
  export {default as XFill} from "./x-fill.js";
2868
+ export {default as XBold} from "./x-bold.js";
2868
2869
  export {default as XCircle} from "./x-circle.js";
2869
2870
  export {default as XCircleFill} from "./x-circle-fill.js";
2870
2871
  export {default as XSquare} from "./x-square.js";
@@ -0,0 +1,6 @@
1
+ // GERADO por packages/native/build-icons-native.mjs. NÃO EDITAR.
2
+ // Glifo do @phosphor-icons/core (Phosphor Icons, MIT) — ver NOTICE. Desenho copiado sem alteração.
3
+ import type * as React from "react";
4
+ import type {AureaIconProps} from "./props.js";
5
+ declare const XBold: (props: AureaIconProps) => React.ReactElement;
6
+ export default XBold;
@@ -0,0 +1,10 @@
1
+ // GERADO por packages/native/build-icons-native.mjs. NÃO EDITAR.
2
+ // Glifo do @phosphor-icons/core (Phosphor Icons, MIT) — ver NOTICE. Desenho copiado sem alteração.
3
+ import * as React from "react";
4
+ import Svg, {Path} from "react-native-svg";
5
+
6
+ export default function XBold({size = 32, color = "#000000", ...rest}) {
7
+ return React.createElement(Svg, {width: size, height: size, viewBox: "0 0 256 256", ...rest},
8
+ React.createElement(Path, {d: "M208.49,191.51a12,12,0,0,1-17,17L128,145,64.49,208.49a12,12,0,0,1-17-17L111,128,47.51,64.49a12,12,0,0,1,17-17L128,111l63.51-63.52a12,12,0,0,1,17,17L145,128Z", fill: color})
9
+ );
10
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aurea-uds/native",
3
- "version": "0.31.0",
3
+ "version": "0.33.0",
4
4
  "description": "A Aurea UDS para React Native: o provider de tema e densidade, os componentes e os ícones do Phosphor sobre react-native-svg.",
5
5
  "keywords": [
6
6
  "aurea",
@@ -55,7 +55,7 @@
55
55
  "NOTICE"
56
56
  ],
57
57
  "dependencies": {
58
- "@aurea-uds/tokens": "^0.31.0"
58
+ "@aurea-uds/tokens": "^0.33.0"
59
59
  },
60
60
  "peerDependencies": {
61
61
  "@react-native-community/datetimepicker": ">=8",