@aurea-uds/native 0.12.2 → 0.12.3
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/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/inputs.d.ts +54 -1
- package/dist/inputs.js +50 -0
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -24,8 +24,8 @@ 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
26
|
export type { BottomNavProps, TopbarProps, NavListProps, StepperProps, AureaNavItem, AureaNavListItem, AureaStepItem, AureaStepState, AureaBottomNavVariant, AureaBottomNavIndicator, AureaBottomNavWidth, AureaTopbarVariant, AureaTopbarInset, TabsProps, AureaTabItem, } from "./navigation.js";
|
|
27
|
-
export { Field, Label, Input, Textarea, Select, Switch, Checkbox, Radio, SegmentedControl, Form, KeyboardAvoiding, useCampo, } from "./inputs.js";
|
|
28
|
-
export type { FieldProps, LabelProps, InputProps, TextareaProps, SelectProps, SwitchProps, CheckboxProps, RadioProps, SegmentedControlProps, FormProps, KeyboardAvoidingProps, AureaFieldSize, } from "./inputs.js";
|
|
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";
|
|
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
|
@@ -59,7 +59,7 @@ export { BottomNav, Topbar, NavList, Stepper, Tabs } from "./navigation.js";
|
|
|
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
|
|
61
61
|
// lote — o RN não tem `id` nem `htmlFor`.
|
|
62
|
-
export { Field, Label, Input, Textarea, Select, Switch, Checkbox, Radio, SegmentedControl, Form, KeyboardAvoiding, useCampo, } from "./inputs.js";
|
|
62
|
+
export { Field, Label, Input, Textarea, Select, Switch, Checkbox, Radio, RadioGroup, SegmentedControl, Form, KeyboardAvoiding, useCampo, } from "./inputs.js";
|
|
63
63
|
// ⚠ O GRUPO e o campo de SENHA entraram depois do Lote 4, medidos pelo app na tela de entrar
|
|
64
64
|
// (15/09/2026): o campo não tinha onde encaixar glifo, e `secureTextEntry` esconde a senha sem
|
|
65
65
|
// dar botão para mostrá-la. **Os dois já existiam na web desde 29/08/2026** — a falta era só
|
package/dist/inputs.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import { TextInput, type KeyboardTypeOptions, type StyleProp, type TextInputProps, type TextStyle, type ViewProps, type ViewStyle } from "react-native";
|
|
2
|
+
import { TextInput, type KeyboardTypeOptions, type PressableProps, type StyleProp, type TextInputProps, type TextStyle, type ViewProps, type ViewStyle } from "react-native";
|
|
3
3
|
import { type AureaFilaJustify } from "./rolagem.js";
|
|
4
4
|
import { type AureaIconRegistry, type IconName } from "./icon.js";
|
|
5
5
|
export type AureaFieldSize = "sm" | "md" | "lg";
|
|
@@ -249,6 +249,59 @@ export declare function Checkbox(p: CheckboxProps): React.JSX.Element;
|
|
|
249
249
|
* estado do app — quem sabe qual está escolhido é o `useState` da tela, e `checked` sai dele.
|
|
250
250
|
*/
|
|
251
251
|
export declare function Radio(p: RadioProps): React.JSX.Element;
|
|
252
|
+
/** De que lado da linha a marca fica: `end` (padrão, como o exemplo do HeroUI) ou `start`. */
|
|
253
|
+
export type AureaRadioIndicatorPlacement = "start" | "end";
|
|
254
|
+
export interface RadioGroupProps extends ViewProps {
|
|
255
|
+
/** O valor do item escolhido. Controlado: quem guarda é a tela. */
|
|
256
|
+
value?: string;
|
|
257
|
+
onValueChange?: (value: string) => void;
|
|
258
|
+
/** Desliga o grupo inteiro. */
|
|
259
|
+
disabled?: boolean;
|
|
260
|
+
/** Pinta o grupo de erro (marca e rótulo na cor de perigo), como o `isInvalid` do HeroUI. */
|
|
261
|
+
invalid?: boolean;
|
|
262
|
+
/** O nome do grupo para quem usa leitor de tela ("Forma de entrega"). */
|
|
263
|
+
label?: string;
|
|
264
|
+
/** `vertical` (padrão) ou `horizontal`, como o HeroUI. */
|
|
265
|
+
orientation?: "vertical" | "horizontal";
|
|
266
|
+
/**
|
|
267
|
+
* De que lado fica a marca, em todos os itens: `end` (padrão) ou `start`. O HeroUI decide isso
|
|
268
|
+
* pela ORDEM dos filhos do item (`<Radio />` antes ou depois do texto); aqui o texto é prop, então
|
|
269
|
+
* o lado vira uma lista fechada de duas opções, com o nome que o HeroUI usa para posição.
|
|
270
|
+
*/
|
|
271
|
+
indicatorPlacement?: AureaRadioIndicatorPlacement;
|
|
272
|
+
children?: React.ReactNode;
|
|
273
|
+
}
|
|
274
|
+
export interface RadioGroupItemProps extends Omit<PressableProps, "children" | "style" | "disabled"> {
|
|
275
|
+
/** O valor que este item escreve no grupo quando é tocado. */
|
|
276
|
+
value: string;
|
|
277
|
+
label?: React.ReactNode;
|
|
278
|
+
description?: React.ReactNode;
|
|
279
|
+
/** Desliga só este item. */
|
|
280
|
+
disabled?: boolean;
|
|
281
|
+
/** Erro só neste item. */
|
|
282
|
+
invalid?: boolean;
|
|
283
|
+
/** O lado da marca só neste item; sem ele, vale o do grupo. */
|
|
284
|
+
indicatorPlacement?: AureaRadioIndicatorPlacement;
|
|
285
|
+
style?: StyleProp<ViewStyle>;
|
|
286
|
+
}
|
|
287
|
+
declare function RaizDoGrupoDeRadio({ value, onValueChange, disabled, invalid, label, orientation, indicatorPlacement, style, children, ...rest }: RadioGroupProps): React.JSX.Element;
|
|
288
|
+
declare function ItemDoGrupoDeRadio({ value, label, description, disabled, invalid, indicatorPlacement, style, accessibilityLabel, ...rest }: RadioGroupItemProps): React.JSX.Element;
|
|
289
|
+
/**
|
|
290
|
+
* Um conjunto de opções em que só uma fica escolhida — o `RadioGroup` do HeroUI Native.
|
|
291
|
+
*
|
|
292
|
+
* <RadioGroup label="Forma de entrega" value={entrega} onValueChange={setEntrega}>
|
|
293
|
+
* <RadioGroup.Item value="normal" label="Normal" description="Em 5 a 7 dias úteis" />
|
|
294
|
+
* <Separator />
|
|
295
|
+
* <RadioGroup.Item value="expressa" label="Expressa" description="Em 2 a 3 dias úteis" />
|
|
296
|
+
* </RadioGroup>
|
|
297
|
+
*
|
|
298
|
+
* Os filhos são livres: entre os itens cabe um `Separator`, e o grupo inteiro cabe num `Card`,
|
|
299
|
+
* como no exemplo do HeroUI. Tocar no item já escolhido não muda nada. Com
|
|
300
|
+
* `indicatorPlacement="start"` a marca vai para o início da linha.
|
|
301
|
+
*/
|
|
302
|
+
export declare const RadioGroup: typeof RaizDoGrupoDeRadio & {
|
|
303
|
+
Item: typeof ItemDoGrupoDeRadio;
|
|
304
|
+
};
|
|
252
305
|
/**
|
|
253
306
|
* ⚠ **Ele TIRAVA a `description`, e passou a aceitá-la em 17/09/2026** — pedido do consumidor
|
|
254
307
|
* (uma linha de explicação embaixo de "Desbloqueio por digital", no Perfil).
|
package/dist/inputs.js
CHANGED
|
@@ -382,6 +382,56 @@ export function Checkbox(p) { return _jsx(ControleMarcado, { ...p, papel: "check
|
|
|
382
382
|
* estado do app — quem sabe qual está escolhido é o `useState` da tela, e `checked` sai dele.
|
|
383
383
|
*/
|
|
384
384
|
export function Radio(p) { return _jsx(ControleMarcado, { ...p, papel: "radio" }); }
|
|
385
|
+
const GrupoDeRadio = React.createContext(null);
|
|
386
|
+
function RaizDoGrupoDeRadio({ value, onValueChange, disabled, invalid, label, orientation = "vertical", indicatorPlacement, style, children, ...rest }) {
|
|
387
|
+
const t = useAureaTokens();
|
|
388
|
+
const contexto = React.useMemo(() => ({ value, onValueChange, disabled, invalid, indicatorPlacement }), [value, onValueChange, disabled, invalid, indicatorPlacement]);
|
|
389
|
+
return (_jsx(GrupoDeRadio.Provider, { value: contexto, children: _jsx(View, { accessibilityRole: "radiogroup", accessibilityLabel: label, accessibilityState: { disabled: !!disabled }, style: [{ gap: t.size.space3, flexDirection: orientation === "horizontal" ? "row" : "column" }, style], ...rest, children: children }) }));
|
|
390
|
+
}
|
|
391
|
+
function ItemDoGrupoDeRadio({ value, label, description, disabled, invalid, indicatorPlacement, style, accessibilityLabel, ...rest }) {
|
|
392
|
+
const t = useAureaTokens();
|
|
393
|
+
const s = folha(t);
|
|
394
|
+
const grupo = React.useContext(GrupoDeRadio);
|
|
395
|
+
if (__DEV__ && !grupo)
|
|
396
|
+
console.warn("Aurea: RadioGroup.Item fora de um RadioGroup não escolhe nada.");
|
|
397
|
+
const escolhido = grupo?.value === value;
|
|
398
|
+
const inativo = disabled ?? grupo?.disabled;
|
|
399
|
+
const erro = invalid ?? grupo?.invalid;
|
|
400
|
+
const perigo = t.color.danger400 ?? t.color.destructive;
|
|
401
|
+
const marca = t.size.space6;
|
|
402
|
+
const ponto = t.size.space2 + t.size.space05;
|
|
403
|
+
const noInicio = (indicatorPlacement ?? grupo?.indicatorPlacement ?? "end") === "start";
|
|
404
|
+
const texto = (label != null || description != null) && (_jsxs(View, { style: { flex: 1, minWidth: 0 }, children: [typeof label === "string"
|
|
405
|
+
? _jsx(Text, { size: "base", weight: 500, tone: erro ? "danger" : "default", children: label }) : label, description != null && (typeof description === "string"
|
|
406
|
+
? _jsx(Text, { size: "sm", tone: "muted", children: description }) : description)] }, "texto"));
|
|
407
|
+
const marcaDesenhada = (_jsx(View, { style: [
|
|
408
|
+
s.marcaBase,
|
|
409
|
+
{ width: marca, height: marca, borderRadius: t.size.radiusFull },
|
|
410
|
+
erro && { borderColor: perigo, backgroundColor: "transparent" },
|
|
411
|
+
escolhido && { backgroundColor: erro ? perigo : t.color.controlSelected,
|
|
412
|
+
borderColor: erro ? perigo : t.color.controlSelected },
|
|
413
|
+
], children: escolhido && _jsx(View, { style: { width: ponto, height: ponto, borderRadius: t.size.radiusFull,
|
|
414
|
+
backgroundColor: t.color.controlSelectedForeground } }) }, "marca"));
|
|
415
|
+
return (_jsx(Pressable, { onPress: inativo || escolhido ? undefined : () => grupo?.onValueChange?.(value), disabled: inativo, accessibilityRole: "radio", accessibilityState: { checked: escolhido, disabled: !!inativo }, accessibilityLabel: accessibilityLabel ?? (typeof label === "string" ? label : undefined), accessibilityHint: typeof description === "string" ? description : undefined, style: [
|
|
416
|
+
{ flexDirection: "row", alignItems: "center", justifyContent: "space-between",
|
|
417
|
+
gap: t.size.space3, minHeight: t.size.targetMin },
|
|
418
|
+
inativo && s.desabilitado, style,
|
|
419
|
+
], ...rest, children: noInicio ? [marcaDesenhada, texto] : [texto, marcaDesenhada] }));
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Um conjunto de opções em que só uma fica escolhida — o `RadioGroup` do HeroUI Native.
|
|
423
|
+
*
|
|
424
|
+
* <RadioGroup label="Forma de entrega" value={entrega} onValueChange={setEntrega}>
|
|
425
|
+
* <RadioGroup.Item value="normal" label="Normal" description="Em 5 a 7 dias úteis" />
|
|
426
|
+
* <Separator />
|
|
427
|
+
* <RadioGroup.Item value="expressa" label="Expressa" description="Em 2 a 3 dias úteis" />
|
|
428
|
+
* </RadioGroup>
|
|
429
|
+
*
|
|
430
|
+
* Os filhos são livres: entre os itens cabe um `Separator`, e o grupo inteiro cabe num `Card`,
|
|
431
|
+
* como no exemplo do HeroUI. Tocar no item já escolhido não muda nada. Com
|
|
432
|
+
* `indicatorPlacement="start"` a marca vai para o início da linha.
|
|
433
|
+
*/
|
|
434
|
+
export const RadioGroup = Object.assign(RaizDoGrupoDeRadio, { Item: ItemDoGrupoDeRadio });
|
|
385
435
|
/**
|
|
386
436
|
* O interruptor.
|
|
387
437
|
*
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aurea-uds/native",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.3",
|
|
4
4
|
"description": "A Aurea UDS para React Native: o provider de tema e densidade, os componentes e os ícones do Carbon sobre react-native-svg.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"aurea",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"NOTICE"
|
|
52
52
|
],
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"@aurea-uds/tokens": "^0.12.
|
|
54
|
+
"@aurea-uds/tokens": "^0.12.3"
|
|
55
55
|
},
|
|
56
56
|
"peerDependencies": {
|
|
57
57
|
"@react-native-community/datetimepicker": ">=8",
|