@aurea-uds/native 0.19.1 → 0.22.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 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 do Material. Medidas do CSS |
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 o
304
- USWDS publicou com reprovação WCAG registrada e que o MUI abandonou na v6.
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` do HeroUI Native), do
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.** O botão "Entrar com
21
- * Google" e o "Entrar com Apple" exigem o desenho oficial de cada um, e nenhum dos dois pode
22
- * viver dentro desta biblioteca: o Google proíbe redesenhar e manda usar o arquivo do pacote
23
- * dele; a Apple proíbe usar o logo sem licença escrita. **Então a marca entra pelo app**, e o
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={logoGoogle} style={{width: 18, height: 18}} />}>
27
- * Entrar com Google
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 do Google tem cor fixa, e tingi-la seria justamente o que a regra
32
- * dele proíbe. Um `leadingIcon` nosso continua herdando a cor do botão.
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` do HeroUI. */
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 o HeroUI 3.2.6 faz o botão só de ícone redondo.
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 no HeroUI Native (`button.css`
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
- borderRadius: t.size.radiusControl, // 999 — pill, identidade INTOCÁVEL
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
- // `.link-button__root` do HeroUI Native: `height: auto; padding: 0`, e o `.button__root` já
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 do HeroUI Native
174
- // (`button.css`: `line-height: var(--text-*--line-height)`). Era `none` (1,0), e a letra
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` do HeroUI. */
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 o HeroUI 3.2.6 faz o botão só de ícone redondo.
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
- borderRadius: t.size.radiusControl,
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 do HeroUI (`.button--icon-only`: `w-10`): ele nunca estica,
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
- // HeroUI não tem: nem o `heroui-native` 1.0.10, nem o `@heroui/styles` 3.2.6 (medido nos pacotes).
10
- // ReUI tem (`reui.io/docs/components/base/file-upload`): `accept`, `maxSize`, `maxFiles`,
11
- // `multiple`, `onFilesChange`. Daqui vêm `accept` e `maxSize`, que são também os nomes
12
- // do `FileInput` da web. O limite é `max`, e não `maxFiles`: é o nome do `PhotoInput`,
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
- borderRadius: t.size.radiusControl, backgroundColor: t.color.fieldBg,
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. É o
11
- * `Select.ItemDescription` do HeroUI Native 1.0.10 (`styles/components/select.css:117`): letra
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
- borderRadius: t.size.radiusControl, backgroundColor: t.color.fieldBg,
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
- borderTopLeftRadius: t.size.radiusCard, borderTopRightRadius: t.size.radiusCard,
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, borderRadius: t.size.radiusFull,
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
- borderRadius: t.size.radiusControl, backgroundColor: t.color.fieldBg,
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, borderRadius: t.size.radiusSm,
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` do HeroUI Native) e glifo de 20. Basta um item com `icon` para a coluna inteira ter a
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, borderRadius: t.size.radiusFull,
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
- borderRadius: t.size.radiusLg, backgroundColor: t.color.card,
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 `Chip` DO HeroUI NATIVE (1.0.10, `chip.css`) — ordem do Victor de
34
- // 25/09/2026: "se o HeroUI já tem, vamos usar as deles". Recheio, letra, linha e vão:
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 do HeroUI é ≥ 1,33 ×
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 no HeroUI (é o contador sobre ícone): fica a medida nossa, 16 de altura,
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, borderRadius: t.size.radiusControl,
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: no HeroUI é `calc(var(--spacing) * 1.5)`, e `--spacing` é o `space1`.
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, borderRadius: t.size.radiusFull },
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, borderRadius: t.size.radiusFull },
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
- borderRadius: t.size.radiusFull, backgroundColor: t.color.surface3,
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 `Chip` do HeroUI Native (ver a folha). O token direto, e não o
99
- * `size` do `Text`, que no telefone sobe um degrau (ADR-0050) — o HeroUI não sobe no chip. */
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
- borderRadius: t.size.radiusFull, backgroundColor: comOpacidade(t.color.primary, 0.75),
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
@@ -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 — o `ProgressBar.Output` do HeroUI: velocidade, tempo que
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 do
74
- * `ProgressBar` do HeroUI 3.2.6 — os mesmos números da web. Quando a pessoa pede menos movimento
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` do HeroUI) e glifo de 32, o de antes. O desenho
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 Material no Android e a coroa do iOS — duas aparências que não são a
36
- // Aurea, e o `CLAUDE.md` proíbe Material como aparência em voz alta. O anel é reprodutível
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
- anel: { borderWidth: 2, borderRightColor: "transparent", borderRadius: t.size.radiusFull },
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: { borderRadius: 7, backgroundColor: t.color.surface3 },
45
+ esqueleto: { ...canto(7), backgroundColor: t.color.surface3 },
43
46
  // ── Progress ───────────────────────────────────────────────────────────────────────────────
44
- trilho: { height: 8, borderRadius: t.size.radiusFull, backgroundColor: t.color.surface3, overflow: "hidden" },
45
- preenchimento: { height: "100%", borderRadius: t.size.radiusFull, backgroundColor: t.color.primary },
46
- // AN-07: a caixa com o texto de apoio em cima — a grade do HeroUI, `gap-1` até o trilho, a saída
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
- borderWidth: t.size.borderWidth, borderRadius: t.size.radiusLg,
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 && { borderRadius: radius },
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 do
172
- * `ProgressBar` do HeroUI 3.2.6 — os mesmos números da web. Quando a pessoa pede menos movimento
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 do HeroUI: lá nenhuma peça recebe nome de ícone, o app põe o componente
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
@@ -23,9 +23,9 @@ export { defaultStrings, ptBR, gravidadeDoEstado, AUREA_UNIVERSAL_STATES } from
23
23
  export type { AureaStrings, AureaUniversalState } from "./strings.js";
24
24
  export { useReduceMotion } from "./movimento.js";
25
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";
26
+ export type { BottomNavProps, TopbarProps, NavListProps, StepperProps, AureaNavItem, AureaNavListItem, AureaNavListIndicator, AureaStepItem, AureaStepState, AureaBottomNavVariant, AureaBottomNavIndicator, AureaBottomNavWidth, 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";