@aurea-uds/native 0.11.0 → 0.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/dist/actions.d.ts +14 -5
- package/dist/actions.js +42 -11
- package/dist/busca.js +2 -2
- package/dist/icon-names.d.ts +14 -0
- package/dist/icon-names.js +3 -0
- package/dist/icon.d.ts +4 -4
- package/dist/index.d.ts +6 -6
- package/dist/index.js +2 -2
- package/dist/inputs.js +2 -2
- package/dist/layout.d.ts +19 -7
- package/dist/layout.js +40 -11
- package/dist/numero.d.ts +3 -4
- package/dist/overlays.js +2 -2
- package/dist/screen.d.ts +10 -0
- package/dist/screen.js +84 -2
- package/dist/strings.d.ts +3 -0
- package/dist/strings.js +4 -0
- package/dist/text.d.ts +38 -1
- package/dist/text.js +45 -4
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -862,6 +862,16 @@ const Logo = criarGlifo({fill: "none", stroke: "currentColor", strokeWidth: 2,
|
|
|
862
862
|
const ICONES = criarRegistroDeIcones({...OS_DO_APP, logo: Logo});
|
|
863
863
|
```
|
|
864
864
|
|
|
865
|
+
**O nome é checado pelo TypeScript** (desde a A-04): `<Icon name="chevron-down">`, com um traço
|
|
866
|
+
só, não compila, e a chave do registro também é conferida. Um glifo próprio entra declarando o
|
|
867
|
+
nome **uma vez**:
|
|
868
|
+
|
|
869
|
+
```tsx
|
|
870
|
+
declare module "@aurea-uds/native" {
|
|
871
|
+
interface AureaIconNames { logo: true }
|
|
872
|
+
}
|
|
873
|
+
```
|
|
874
|
+
|
|
865
875
|
## O que este pacote não faz
|
|
866
876
|
|
|
867
877
|
- **Não promete paridade** com a web. O React Native não tem `<p>`, cascata de tipografia,
|
package/dist/actions.d.ts
CHANGED
|
@@ -49,19 +49,28 @@ export interface ButtonProps extends Omit<PressableProps, "children" | "style">
|
|
|
49
49
|
* descreve: lá, um botão desabilitado some da ordem de foco e a explicação pendurada nele não é
|
|
50
50
|
* lida por ninguém. Aqui não há o dilema, então não há o par `aria-disabled` — um só basta.
|
|
51
51
|
*/
|
|
52
|
-
export declare function Button(
|
|
52
|
+
export declare function Button(props: ButtonProps): React.JSX.Element;
|
|
53
|
+
export interface LinkButtonProps extends Omit<ButtonProps, "appearance" | "fullWidth"> {
|
|
54
|
+
}
|
|
55
|
+
/** Botão-texto sem recuo nem caixa, alinhado com o texto em volta. O `LinkButton` do HeroUI. */
|
|
56
|
+
export declare function LinkButton(props: LinkButtonProps): React.JSX.Element;
|
|
53
57
|
export interface IconButtonProps extends Omit<ButtonProps, "children" | "leadingIcon" | "trailingIcon" | "fullWidth"> {
|
|
54
58
|
name: IconName;
|
|
55
59
|
/** **Obrigatório**: um botão que só tem glifo não tem texto para o leitor de tela anunciar. */
|
|
56
60
|
label: string;
|
|
57
61
|
}
|
|
58
62
|
/**
|
|
59
|
-
* Botão
|
|
63
|
+
* Botão REDONDO, só glifo.
|
|
60
64
|
*
|
|
61
|
-
* O raio
|
|
62
|
-
*
|
|
65
|
+
* O raio é o da cápsula (`radiusControl`, 999) num quadrado, e um quadrado com raio 999 é um
|
|
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.
|
|
63
68
|
*
|
|
64
69
|
* ⚠ **`label` é obrigatório no tipo**, e é a única prop deste pacote que obriga texto. Um ícone
|
|
65
70
|
* sozinho não diz nada a quem não o vê, e deixar isso opcional é o mesmo que deixá-lo vazio.
|
|
66
71
|
*/
|
|
67
|
-
export declare function IconButton(
|
|
72
|
+
export declare function IconButton(props: IconButtonProps): React.JSX.Element;
|
|
73
|
+
/** Fechado: sem `appearance` e sem `tone`, porque a cor é a do glifo. */
|
|
74
|
+
export interface ThemeToggleProps extends Omit<IconButtonProps, "name" | "label" | "onPress" | "appearance" | "tone"> {
|
|
75
|
+
}
|
|
76
|
+
export declare function ThemeToggle(props: ThemeToggleProps): React.JSX.Element;
|
package/dist/actions.js
CHANGED
|
@@ -25,7 +25,7 @@ import { Pressable, View } from "react-native";
|
|
|
25
25
|
import { criarFolha, REACAO_AO_TOQUE } from "./estilos.js";
|
|
26
26
|
import { Icon } from "./icon.js";
|
|
27
27
|
import { Text } from "./text.js";
|
|
28
|
-
import { useAureaTokens, useSobreAMarca } from "./theme.js";
|
|
28
|
+
import { useAureaStrings, useAureaTheme, useAureaTokens, useSobreAMarca } from "./theme.js";
|
|
29
29
|
const ALTURA = {
|
|
30
30
|
xs: "controlHXs", sm: "controlHSm", md: "controlHMd", lg: "controlHLg", xl: "controlHXl",
|
|
31
31
|
};
|
|
@@ -119,7 +119,12 @@ 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
|
-
|
|
122
|
+
// E2 (25/09/2026): SEM `alignSelf`. O botão obedece o pai, como no HeroUI Native (`button.css`
|
|
123
|
+
// não fixa alinhamento) e como o `.btn` da web num `.stack`. Era `alignSelf: "flex-start"`, e ele
|
|
124
|
+
// vencia o `alignItems: "center"` do pai: o botão do `EmptyState` ficava à esquerda com o resto
|
|
125
|
+
// no meio. ⚠ A consequência, decidida pelo Victor: numa coluna sem alinhamento o botão ESTICA,
|
|
126
|
+
// como na web. "Do tamanho do texto" se diz no pai — `Stack align="start"`.
|
|
127
|
+
alvo: { minHeight: t.size.targetMin, justifyContent: "center" },
|
|
123
128
|
alvoLargura: { alignSelf: "stretch" },
|
|
124
129
|
caixa: {
|
|
125
130
|
flexDirection: "row", alignItems: "center", justifyContent: "center",
|
|
@@ -139,7 +144,11 @@ const folha = criarFolha((t) => ({
|
|
|
139
144
|
* descreve: lá, um botão desabilitado some da ordem de foco e a explicação pendurada nele não é
|
|
140
145
|
* lida por ninguém. Aqui não há o dilema, então não há o par `aria-disabled` — um só basta.
|
|
141
146
|
*/
|
|
142
|
-
export function Button(
|
|
147
|
+
export function Button(props) {
|
|
148
|
+
return _jsx(CorpoDoBotao, { ...props });
|
|
149
|
+
}
|
|
150
|
+
/** O corpo do `Button`. `semRecuo` é só do `LinkButton`: sem recuo, sem borda e sem altura. */
|
|
151
|
+
function CorpoDoBotao({ children, appearance = "solid", tone = "neutral", size = "md", leadingIcon, trailingIcon, leading, trailing, icons, fullWidth = false, pressed, disabled, accessibilityLabel, semRecuo = false, ...rest }) {
|
|
143
152
|
const t = useAureaTokens();
|
|
144
153
|
const s = folha(t);
|
|
145
154
|
const marca = useSobreAMarca();
|
|
@@ -152,7 +161,10 @@ export function Button({ children, appearance = "solid", tone = "neutral", size
|
|
|
152
161
|
backgroundColor: appearance === "solid" ? cor.solido : "transparent",
|
|
153
162
|
borderColor: cor.contorno ?? (appearance === "outline" ? corDaBorda : "transparent"),
|
|
154
163
|
...(fullWidth ? { flex: 1 } : null),
|
|
155
|
-
|
|
164
|
+
// `.link-button__root` do HeroUI Native: `height: auto; padding: 0`, e o `.button__root` já
|
|
165
|
+
// tem `border-width: 0`. A borda transparente de 1 empurraria o texto 1 para dentro.
|
|
166
|
+
...(semRecuo ? { height: undefined, paddingHorizontal: 0, borderWidth: 0 } : null),
|
|
167
|
+
}), [t, size, appearance, cor.solido, cor.contorno, corDaBorda, fullWidth, semRecuo]);
|
|
156
168
|
const corDoTexto = appearance === "solid" ? cor.texto : cor.sobre;
|
|
157
169
|
return (_jsx(Pressable, { disabled: disabled, accessibilityRole: "button", accessibilityLabel: accessibilityLabel, accessibilityState: { disabled: !!disabled, ...(pressed === undefined ? null : { checked: pressed }) }, style: ({ pressed: tocando }) => [
|
|
158
170
|
s.alvo, fullWidth && s.alvoLargura,
|
|
@@ -167,16 +179,26 @@ export function Button({ children, appearance = "solid", tone = "neutral", size
|
|
|
167
179
|
? _jsx(Text, { size: FONTE[size], weight: 500, leading: "normal", style: { color: corDoTexto }, children: children })
|
|
168
180
|
: children, trailingIcon ? _jsx(Icon, { name: trailingIcon, size: ICONE[size], color: corDoTexto, icons: icons }) : null, trailing ?? null] }) }));
|
|
169
181
|
}
|
|
182
|
+
/** Botão-texto sem recuo nem caixa, alinhado com o texto em volta. O `LinkButton` do HeroUI. */
|
|
183
|
+
export function LinkButton(props) {
|
|
184
|
+
return _jsx(CorpoDoBotao, { ...props, appearance: "ghost", semRecuo: true });
|
|
185
|
+
}
|
|
170
186
|
/**
|
|
171
|
-
* Botão
|
|
187
|
+
* Botão REDONDO, só glifo.
|
|
172
188
|
*
|
|
173
|
-
* O raio
|
|
174
|
-
*
|
|
189
|
+
* O raio é o da cápsula (`radiusControl`, 999) num quadrado, e um quadrado com raio 999 é um
|
|
190
|
+
* círculo — o mesmo que o `.btn-icon` do core faz. Decisão do Victor, 25/09/2026 (ADR-0052): era
|
|
191
|
+
* `--radius-md`/`--radius-sm`, e o HeroUI 3.2.6 faz o botão só de ícone redondo.
|
|
175
192
|
*
|
|
176
193
|
* ⚠ **`label` é obrigatório no tipo**, e é a única prop deste pacote que obriga texto. Um ícone
|
|
177
194
|
* sozinho não diz nada a quem não o vê, e deixar isso opcional é o mesmo que deixá-lo vazio.
|
|
178
195
|
*/
|
|
179
|
-
export function IconButton(
|
|
196
|
+
export function IconButton(props) {
|
|
197
|
+
return _jsx(BotaoDeIcone, { ...props });
|
|
198
|
+
}
|
|
199
|
+
/** O corpo do `IconButton`. A cor própria do ícone (`corDoIcone`) é só do `ThemeToggle`: o
|
|
200
|
+
* `IconButton` público não tem cor solta, e dentro do cartão da marca ela não vale (a tinta vence). */
|
|
201
|
+
function BotaoDeIcone({ name, label, appearance = "ghost", tone = "neutral", size = "md", icons, pressed, disabled, corDoIcone, ...rest }) {
|
|
180
202
|
const t = useAureaTokens();
|
|
181
203
|
const s = folha(t);
|
|
182
204
|
const marca = useSobreAMarca();
|
|
@@ -185,12 +207,21 @@ export function IconButton({ name, label, appearance = "ghost", tone = "neutral"
|
|
|
185
207
|
const lado = t.size[ALTURA[size]];
|
|
186
208
|
const caixa = React.useMemo(() => ({
|
|
187
209
|
height: lado, width: lado, paddingHorizontal: 0,
|
|
188
|
-
borderRadius:
|
|
210
|
+
borderRadius: t.size.radiusControl,
|
|
189
211
|
backgroundColor: appearance === "solid" ? cor.solido : "transparent",
|
|
190
212
|
borderColor: cor.contorno ?? (appearance === "outline" ? corDaBorda : "transparent"),
|
|
191
213
|
}), [t, lado, size, appearance, cor.solido, cor.contorno, corDaBorda]);
|
|
192
214
|
return (_jsx(Pressable, { disabled: disabled, accessibilityRole: "button", accessibilityLabel: label, accessibilityState: { disabled: !!disabled, ...(pressed === undefined ? null : { checked: pressed }) }, style: ({ pressed: tocando }) => [
|
|
193
|
-
|
|
215
|
+
// Largura FIXA, como o só-ícone do HeroUI (`.button--icon-only`: `w-10`): ele nunca estica,
|
|
216
|
+
// nem numa coluna sem alinhamento. O alvo é o maior entre o desenho e o `targetMin`.
|
|
217
|
+
s.alvo, { width: Math.max(lado, t.size.targetMin), alignItems: "center" },
|
|
194
218
|
tocando && s.pressionado, disabled && s.inerte,
|
|
195
|
-
], ...rest, children: _jsx(View, { style: [s.caixa, caixa], children: _jsx(Icon, { name: name, size: ICONE[size], color: appearance === "solid" ? cor.texto : cor.sobre
|
|
219
|
+
], ...rest, children: _jsx(View, { style: [s.caixa, caixa], children: _jsx(Icon, { name: name, size: ICONE[size], icons: icons, color: corDoIcone && !marca ? corDoIcone : appearance === "solid" ? cor.texto : cor.sobre }) }) }));
|
|
220
|
+
}
|
|
221
|
+
export function ThemeToggle(props) {
|
|
222
|
+
const { theme, toggleTheme } = useAureaTheme();
|
|
223
|
+
const t = useAureaTokens();
|
|
224
|
+
const s = useAureaStrings();
|
|
225
|
+
const escuro = theme === "dark";
|
|
226
|
+
return (_jsx(BotaoDeIcone, { ...props, name: escuro ? "light--filled" : "asleep--filled", label: escuro ? s.themeToLight : s.themeToDark, corDoIcone: escuro ? t.color.primary : t.color.foreground, onPress: toggleTheme }));
|
|
196
227
|
}
|
package/dist/busca.js
CHANGED
|
@@ -68,13 +68,13 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
|
|
|
68
68
|
// folha, e ele leva `search` — que mapeia nos dois.
|
|
69
69
|
import * as React from "react";
|
|
70
70
|
import { Animated, Easing, FlatList, Modal, PanResponder, Pressable, TextInput, View, } from "react-native";
|
|
71
|
-
import { SafeAreaView } from "react-native-safe-area-context";
|
|
72
71
|
import { IconButton } from "./actions.js";
|
|
73
72
|
import { criarFolha } from "./estilos.js";
|
|
74
73
|
import { Spinner } from "./feedback.js";
|
|
75
74
|
import { Icon } from "./icon.js";
|
|
76
75
|
import { KeyboardAvoiding, useCampo } from "./inputs.js";
|
|
77
76
|
import { useReduceMotion } from "./movimento.js";
|
|
77
|
+
import { RecuoDaFolha } from "./screen.js";
|
|
78
78
|
import { Text } from "./text.js";
|
|
79
79
|
import { useAureaStrings, useAureaTokens, ForaDaMarca, usePeleSobreAMarca } from "./theme.js";
|
|
80
80
|
// As mesmas contas do `inputs.tsx`, e elas são repetidas AQUI de propósito: exportá-las de lá
|
|
@@ -328,7 +328,7 @@ export function Combobox({ items, value, onValueChange, onSearchChange, searchDe
|
|
|
328
328
|
s.opcao,
|
|
329
329
|
item.value === value?.value && s.opcaoEscolhida,
|
|
330
330
|
item.disabled && s.desabilitado,
|
|
331
|
-
], children: _jsx(Text, { size: "md", weight: item.value === value?.value ? 600 : 400, children: item.label }) })) }), _jsx(
|
|
331
|
+
], children: _jsx(Text, { size: "md", weight: item.value === value?.value ? 600 : 400, children: item.label }) })) }), _jsx(RecuoDaFolha, { comTeclado: true })] })] }) }) })] }));
|
|
332
332
|
}
|
|
333
333
|
// ── A DOBRA DE ACENTO, e por que ela é sondada em vez de presumida ───────────────────────────
|
|
334
334
|
// Buscar "acucar" tem de achar "açúcar" — num catálogo em português, exigir o acento certo é
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Os 2571 nomes do Carbon que a Aurea desenha, os mesmos na web e no nativo. */
|
|
2
|
+
export type CarbonIconName = "4K--filled" | "4K" | "AI-enabled-EDT" | "AI-enabled-PDLC" | "AI" | "API--1" | "ASM" | "BPMN-compensation--fill" | "BPMN-compensation--outline" | "BPMN-conditional--fill" | "BPMN-conditional--outline" | "BPMN-error--fill" | "BPMN-error--outline" | "BPMN-escalation--fill" | "BPMN-escalation--outline" | "BPMN-link--fill" | "BPMN-link--outline" | "C" | "CAD" | "CBL" | "CDA" | "CPlusPlus" | "CSV" | "DOC" | "DVR" | "Db2-Developer-Extension" | "GIF" | "HD--filled" | "HD" | "HDR" | "HTML--reference" | "HTML" | "HTTP" | "IP" | "ISO--filled" | "ISO--outline" | "ISO" | "JAVA" | "JCL" | "JPG" | "JSON--reference" | "JSON" | "KEY" | "MAC" | "MOV" | "MP3" | "MP4" | "MPEG" | "MPG2" | "PDF--reference" | "PDF" | "PLI" | "PNG" | "PPT" | "RAG" | "RAW" | "REXX" | "SAP" | "SDK" | "SLM" | "SQL" | "SVG" | "Serverless-Fleet" | "TIF" | "TSV" | "TXT--reference" | "TXT" | "URL" | "USB" | "VPN" | "WMV" | "XLS" | "XML" | "ZIP--reference" | "ZIP" | "accept-action--usage" | "accessibility--alt" | "accessibility--color--filled" | "accessibility--color" | "accessibility" | "account" | "accumulation--ice" | "accumulation--precipitation" | "accumulation--rain" | "accumulation--snow" | "action--definition" | "action--usage" | "activity" | "adapter-notification" | "add--alt" | "add--child-node" | "add--filled" | "add--large" | "add--parent-node" | "add--server" | "add-comment" | "add" | "agent-detached" | "aggregator--count-rows" | "aggregator--recalculation" | "agriculture-analytics" | "ai--observability" | "ai-agent-invocation" | "ai-business-impact-assessment" | "ai-financial-sustainability-check" | "ai-generate" | "ai-governance--lifecycle" | "ai-governance--tracked" | "ai-governance--untracked" | "ai-label" | "ai-launch" | "ai-recommend" | "airline--digital-gate" | "airline--manage-gates" | "airline--passenger-care" | "airline--rapid-board" | "airplay--filled" | "airplay" | "airport--01" | "airport--02" | "airport-location" | "alarm--add" | "alarm--subtract" | "alarm" | "align--horizontal-center" | "align--horizontal-left" | "align--horizontal-right" | "align--vertical-bottom" | "align--vertical-center" | "align--vertical-top" | "align-box--bottom-center" | "align-box--bottom-left" | "align-box--bottom-right" | "align-box--middle-center" | "align-box--middle-left" | "align-box--middle-right" | "align-box--top-center" | "align-box--top-left" | "align-box--top-right" | "analytics--custom" | "analytics--reference" | "analytics" | "anchor" | "aperture" | "api--key" | "api" | "app-connectivity" | "app" | "apple--dash" | "apple" | "application--mobile" | "application--virtual" | "application--web" | "application" | "apps" | "archive" | "area--custom" | "area-range--dashed" | "area-range--solid" | "area" | "arithmetic-mean" | "arithmetic-median" | "arrange--horizontal" | "arrange--vertical" | "arrange" | "array--booleans" | "array--date-time" | "array--dates" | "array--numbers" | "array--objects" | "array--strings" | "array--time" | "array-decimal" | "array-files" | "array-users" | "array" | "arrival" | "arrow--down-left" | "arrow--down-right" | "arrow--down" | "arrow--left" | "arrow--right" | "arrow--up-left" | "arrow--up-right" | "arrow--up" | "arrow-shift-down" | "arrows--horizontal" | "arrows--vertical" | "asleep--filled" | "asleep" | "assembly--cluster" | "assembly--reference" | "assembly" | "asset--confirm" | "asset--digital-twin" | "asset--view" | "asset-movement" | "asset" | "assignment-action--usage" | "asterisk" | "async" | "at" | "attachment" | "attribute--definition" | "attribute--usage" | "audio-console" | "augmented-reality" | "automatic" | "autoscaling" | "avro" | "awake" | "badge" | "baggage-claim" | "bank--vault" | "bar" | "barcode" | "bare-metal-server--01" | "bare-metal-server--02" | "bare-metal-server" | "base-document-set" | "basketball" | "bastion-host" | "bat" | "batch-job--step" | "batch-job" | "battery--charging" | "battery--empty" | "battery--error" | "battery--full" | "battery--half" | "battery--low" | "battery--quarter" | "battery--warning" | "bee-bat" | "bee" | "beta" | "bicycle" | "binding--01" | "binding--02" | "binoculars" | "bland-altman-plot" | "block-storage--alt" | "block-storage" | "blockchain" | "blog" | "bluetooth--off" | "bluetooth" | "book" | "bookmark--add" | "bookmark--filled" | "bookmark" | "boolean" | "boot-volume--alt" | "boot-volume" | "boot" | "border--bottom" | "border--full" | "border--left" | "border--none" | "border--right" | "border--top" | "bot" | "bottles--01--dash" | "bottles--01" | "bottles--02--dash" | "bottles--02" | "bottles--container" | "bottom-panel--close--filled" | "bottom-panel--close" | "bottom-panel--open--filled" | "bottom-panel--open" | "box--extra-large" | "box--large" | "box--medium" | "box--small" | "box-plot" | "box" | "brainstorm--filled" | "brainstorm" | "branch" | "breaking-change" | "brightness-contrast" | "bring-forward" | "bring-to-front" | "bsam-qsam-zedc" | "build--image" | "build--run" | "build-tool" | "building--electrical" | "building--insights-1" | "building--insights-2" | "building--insights-3" | "building" | "bullhorn" | "buoy" | "bus" | "business-metrics" | "business-processes" | "button--centered" | "button--flush-left" | "cabin-care--alert" | "cabin-care--alt" | "cabin-care" | "cafe" | "calculation--alt" | "calculation" | "calculator--check" | "calculator" | "calendar--add--alt" | "calendar--add" | "calendar--heat-map" | "calendar--settings" | "calendar--tools" | "calendar" | "calibrate" | "calls--all" | "calls--incoming" | "calls" | "camera--action" | "camera" | "campsite" | "car--front" | "car" | "carbon--ui-builder" | "carbon-accounting" | "carbon-for-AEM" | "carbon-for-ibm-dotcom" | "carbon-for-ibm-product" | "carbon-for-mobile" | "carbon-for-salesforce" | "carbon" | "caret--down" | "caret--left" | "caret--right" | "caret--sort--down" | "caret--sort--up" | "caret--sort" | "caret--up" | "carousel--horizontal" | "carousel--vertical" | "catalog--publish" | "catalog" | "categorical-palette" | "categories" | "category--add" | "category--and" | "category--new-each" | "category--new" | "category" | "cell-tower" | "center--circle" | "center--square" | "center-to-fit" | "certificate--check" | "certificate" | "change--catalog" | "change--circle" | "channels" | "character--decimal" | "character--fraction" | "character--integer" | "character--lower-case" | "character--negative-number" | "character--sentence-case" | "character--upper-case" | "character--whole-number" | "character-patterns" | "charging-station--filled" | "charging-station" | "chart--3D" | "chart--area-smooth" | "chart--area-stepper" | "chart--area" | "chart--average" | "chart--bar-floating" | "chart--bar-overlay" | "chart--bar-stacked" | "chart--bar-target" | "chart--bar" | "chart--bubble-packed" | "chart--bubble" | "chart--bullet" | "chart--candlestick" | "chart--cluster-bar" | "chart--column-floating" | "chart--column-target" | "chart--column" | "chart--combo-stacked" | "chart--combo" | "chart--custom" | "chart--donut" | "chart--dual-y-axis" | "chart--error-bar--alt" | "chart--error-bar" | "chart--evaluation" | "chart--high-low" | "chart--histogram" | "chart--line--data" | "chart--line-smooth" | "chart--line" | "chart--logistic-regression" | "chart--lollipop" | "chart--marimekko" | "chart--maximum" | "chart--median" | "chart--minimum" | "chart--multi-line" | "chart--multitype" | "chart--network" | "chart--parallel" | "chart--performance" | "chart--pie" | "chart--planning-waterfall" | "chart--point" | "chart--population" | "chart--radar" | "chart--radial" | "chart--relationship" | "chart--ring" | "chart--river" | "chart--rose" | "chart--scatter" | "chart--spiral" | "chart--stacked" | "chart--stepper" | "chart--sunburst" | "chart--t-sne" | "chart--treemap" | "chart--venn-diagram" | "chart--violin-plot" | "chart--waterfall" | "chart--win-loss" | "chat--launch" | "chat--off" | "chat--operational" | "chat-bot" | "chat" | "checkbox--checked--filled" | "checkbox--checked" | "checkbox--indeterminate--filled" | "checkbox--indeterminate" | "checkbox" | "checkmark--filled--error" | "checkmark--filled--warning" | "checkmark--filled" | "checkmark--outline--error" | "checkmark--outline--warning" | "checkmark--outline" | "checkmark" | "chemistry--reference" | "chemistry" | "chevron--down--outline" | "chevron--down" | "chevron--left" | "chevron--mini" | "chevron--right" | "chevron--sort--down" | "chevron--sort--up" | "chevron--sort" | "chevron--up--outline" | "chevron--up" | "child-node" | "chip" | "choices" | "choose-item" | "choropleth-map" | "cics--cmas" | "cics--db2-connection" | "cics--explorer" | "cics--program" | "cics--sit-overrides" | "cics--sit" | "cics--system-group" | "cics--transaction-server-zos" | "cics--wui-region" | "cics-region--alt" | "cics-region--routing" | "cics-region--target" | "cics-region" | "cicsplex" | "circle--filled" | "circle--outline" | "circle--solid" | "circle-dash" | "circle-packing" | "classic-batch" | "classification" | "classifier--language" | "clean" | "close--filled" | "close--large" | "close--outline" | "close" | "closed-caption--alt" | "closed-caption--filled" | "closed-caption" | "cloud--alerting" | "cloud--auditing" | "cloud--data-ops" | "cloud--download" | "cloud--infra-migration" | "cloud--logging" | "cloud--monitoring" | "cloud--offline" | "cloud--service-management" | "cloud--upload" | "cloud-app" | "cloud-ceiling" | "cloud-foundry--1" | "cloud-foundry--2" | "cloud-registry" | "cloud-satellite--config" | "cloud-satellite--link" | "cloud-satellite--services" | "cloud-satellite" | "cloud-services" | "cloud" | "cloudy" | "cobol-upgrade-advisor" | "code--hide" | "code--reference" | "code-block" | "code-signing-service" | "code" | "cognitive" | "collaborate" | "collapse--stripe" | "collapse--title-2" | "collapse--title" | "collapse-all" | "collapse-categories" | "color-palette" | "color-picker" | "color-switch" | "column--delete" | "column--insert" | "column-dependency" | "column" | "comments" | "commit-alt" | "commit" | "communication--unified" | "compare" | "compass" | "concept" | "condition--point" | "condition--wait-point" | "connect--recursive" | "connect--reference" | "connect--source" | "connect--target" | "connect" | "connection--receive" | "connection--send" | "connection--signal--alt" | "connection--two-way" | "connection--usage" | "connection-flow--usage" | "connection-signal--off" | "connection-signal" | "connection" | "constraint" | "construction" | "container--engine" | "container--image" | "container--runtime-monitor" | "container--runtime" | "container-image--pull" | "container-image--push-pull" | "container-image--push" | "container-registry" | "container-services" | "container-software" | "content-delivery-network" | "content-view" | "continue--filled" | "continue" | "continuous-deployment" | "continuous-integration" | "contrast" | "convert-to-cloud" | "cookie" | "copy--file" | "copy--link" | "copy--to-clipboard" | "copy" | "corn" | "corner" | "coronavirus" | "cost--total" | "cost" | "cough" | "coupling-facility-encryption" | "coupling-facility" | "course" | "covariate" | "create-link" | "credentials" | "crop-growth" | "crop-health" | "crop" | "cross-tab" | "crossroads" | "crowd-report--filled" | "crowd-report" | "cube-view" | "cube" | "currency--baht" | "currency--dollar" | "currency--euro" | "currency--lira" | "currency--pound" | "currency--ruble" | "currency--rupee" | "currency--shekel" | "currency--won" | "currency--yen" | "currency" | "cursor--1" | "cursor--2" | "curved-line--dashed" | "curved-line--solid" | "customer-service--filled" | "customer-service" | "customer" | "cut-out" | "cut" | "cyclist" | "dashboard--reference" | "dashboard" | "data--1" | "data--2" | "data--add" | "data--alert" | "data--base--alt" | "data--base" | "data--categorical" | "data--center" | "data--check" | "data--connected" | "data--error" | "data--format" | "data--reference" | "data--regular" | "data--set" | "data--structured" | "data--unreal" | "data--unstructured" | "data--view--alt" | "data--view" | "data-accessor" | "data-analytics" | "data-backup" | "data-bin" | "data-blob" | "data-class" | "data-collection" | "data-definition" | "data-dictionary" | "data-diode" | "data-enrichment--add" | "data-enrichment" | "data-glossary" | "data-player" | "data-quality-definition" | "data-refinery--reference" | "data-refinery" | "data-set-encryption" | "data-share" | "data-table--reference" | "data-table" | "data-vis--1" | "data-vis--2" | "data-vis--3" | "data-vis--4" | "data-volume--alt" | "data-volume" | "database--datastax" | "database--elastic" | "database--enterprise-db2" | "database--enterprisedb" | "database--etcd" | "database--messaging" | "database--mongodb" | "database--postgreSQL" | "database--rabbit" | "database--redis" | "datastore" | "db2--buffer-pool" | "db2--data-sharing-group" | "db2--database" | "debug" | "decision-node" | "decision-tree" | "decline" | "delay" | "delete" | "delivery--add" | "delivery--parcel" | "delivery--time" | "delivery-settings" | "delivery-truck" | "delivery" | "demo" | "departure" | "dependency" | "deploy-rules" | "deploy" | "deployment-canary" | "deployment-pattern" | "deployment-policy" | "deployment-unit--data" | "deployment-unit--execution" | "deployment-unit--installation" | "deployment-unit--presentation" | "deployment-unit--technical--data" | "deployment-unit--technical--execution" | "deployment-unit--technical--installation" | "deployment-unit--technical--presentation" | "desk--adjustable" | "development" | "devices--apps" | "devices" | "dew-point--filled" | "dew-point" | "dfsort-ibm-z-sort" | "diagram--reference" | "diagram" | "diamond--outline" | "diamond--solid" | "digital--identity" | "direct-link" | "direction--bear-right--01--filled" | "direction--bear-right--01" | "direction--bear-right--02--filled" | "direction--bear-right--02" | "direction--curve--filled" | "direction--curve" | "direction--fork--filled" | "direction--fork" | "direction--loop-left--filled" | "direction--loop-left" | "direction--loop-right--filled" | "direction--loop-right" | "direction--merge--filled" | "direction--merge" | "direction--right--01--filled" | "direction--right--01" | "direction--right--02--filled" | "direction--right--02" | "direction--rotary--first-right--filled" | "direction--rotary--first-right" | "direction--rotary--right--filled" | "direction--rotary--right" | "direction--rotary--straight--filled" | "direction--rotary--straight" | "direction--sharp-turn--filled" | "direction--sharp-turn" | "direction--straight--filled" | "direction--straight--right--filled" | "direction--straight--right" | "direction--straight" | "direction--u-turn--filled" | "direction--u-turn" | "directory-domain" | "disable-step" | "distribute--horizontal-center" | "distribute--horizontal-left" | "distribute--horizontal-right" | "distribute--vertical-bottom" | "distribute--vertical-center" | "distribute--vertical-top" | "dns-services" | "document--add" | "document--attachment" | "document--audio" | "document--blank" | "document--comment" | "document--configuration" | "document--download" | "document--epdf" | "document--export" | "document--horizontal" | "document--import" | "document--multiple-01" | "document--multiple-02" | "document--pdf" | "document--preliminary" | "document--processor" | "document--protected" | "document--requirements" | "document--security" | "document--signed" | "document--sketch" | "document--subject" | "document--subtract" | "document--tasks" | "document--unknown" | "document--unprotected" | "document--vertical" | "document--video" | "document--view" | "document--word-processor--reference" | "document--word-processor" | "document-sentiment" | "document-set" | "document" | "documentation" | "dog-walker" | "dot-mark" | "double-axis-chart--bar" | "double-axis-chart--column" | "double-chevron--left" | "double-chevron--right" | "double-integer" | "down-to-bottom" | "download" | "downstream" | "drag--horizontal" | "drag--vertical" | "draggable" | "draw" | "drill-back" | "drill-down" | "drill-through" | "drink--01" | "drink--02" | "driver-analysis" | "drone--delivery" | "drone--front" | "drone--video" | "drone" | "drop-photo--filled" | "drop-photo" | "drought" | "earth--americas--filled" | "earth--americas" | "earth--europe-africa--filled" | "earth--europe-africa" | "earth--filled" | "earth--southeast-asia--filled" | "earth--southeast-asia" | "earth" | "earthquake" | "edge-cluster" | "edge-device" | "edge-node--alt" | "edge-node" | "edge-service" | "edit--off" | "edit" | "edt-loop" | "education" | "element-picker" | "email--new" | "email--user" | "email" | "emissions-management" | "emissions" | "enable-step" | "encryption" | "energy--renewable" | "energy--report" | "energy--waste" | "enterprise" | "enumeration--definition" | "enumeration--usage" | "equal--approximately" | "equalizer" | "erase" | "error--filled" | "error--outline" | "error" | "event--change" | "event--incident" | "event--number" | "event--schedule" | "event--warning" | "event" | "events--alt" | "events" | "exam-mode" | "executable-program" | "execution-history" | "exit" | "expand-all" | "expand-categories" | "expand-screen--filled" | "expand-screen" | "explore" | "export" | "extensions" | "eyedropper" | "face--activated--add" | "face--activated--filled" | "face--activated" | "face--add" | "face--cool" | "face--dissatisfied--filled" | "face--dissatisfied" | "face--dizzy--filled" | "face--dizzy" | "face--mask" | "face--neutral--filled" | "face--neutral" | "face--pending--filled" | "face--pending" | "face--satisfied--filled" | "face--satisfied" | "face--wink--filled" | "face--wink" | "facility--group--alternate" | "facility--group" | "factor" | "fade" | "favorite--filled" | "favorite--half" | "favorite" | "feature-membership--filled" | "feature-membership" | "feature-picker" | "feature-typing" | "feedback-documentation" | "fetch-upload--cloud" | "fetch-upload" | "file--change" | "file--diff" | "file--storage" | "file--x" | "filter--edit" | "filter--remove" | "filter--reset" | "filter" | "finance" | "financial-assets" | "fingerprint-recognition" | "fire--fill" | "fire" | "firewall--classic" | "firewall" | "fish--multiple" | "fish" | "fit-to-height" | "fit-to-screen" | "fit-to-width" | "flag--filled" | "flag" | "flagging-taxi" | "flash--filled" | "flash--off--filled" | "flash--off" | "flash" | "flight--international" | "flight--roster" | "flight--schedule" | "floating-ip" | "flood--warning" | "flood" | "floorplan" | "flow--connection" | "flow--data" | "flow--modeler--reference" | "flow--modeler" | "flow--sequence" | "flow--stream--reference" | "flow--stream" | "flow-logs-vpc" | "flow" | "fog" | "folder--add" | "folder--details--reference" | "folder--details" | "folder--move-to" | "folder--off" | "folder--open" | "folder--parent" | "folder--shared" | "folder--tree" | "folder" | "folders" | "follow-up-work-order" | "for-loop" | "forecast--hail-30" | "forecast--hail" | "forecast--lightning-30" | "forecast--lightning" | "fork-node" | "fork" | "forum" | "forward--10" | "forward--30" | "forward--5" | "fragile" | "fragments" | "friendship" | "fruit-bowl" | "fuel-can" | "function--2" | "function-math" | "function" | "funnel--sequence" | "funnel--sort" | "game--console" | "game--wireless" | "gamification" | "gas-station--diesel" | "gas-station--eco" | "gas-station--filled" | "gas-station" | "gateway--api" | "gateway--mail" | "gateway--public" | "gateway--security" | "gateway--user-access" | "gateway--vpn" | "gateway" | "gears" | "gem--reference" | "gem" | "gender--female" | "gender--male" | "generate--pdf" | "gift" | "git--repo" | "global-filters" | "global-loan-and-trial" | "globe--private" | "globe" | "gradient" | "graph-aggregator" | "graphical-data-flow" | "grid" | "group--access" | "group--account" | "group--presentation" | "group--resource" | "group--security" | "group-objects--new" | "group-objects--save" | "group-objects" | "group" | "growth" | "gui--management" | "gui" | "hail" | "harbor" | "hardware-security-module" | "hashtag" | "haze--night" | "haze" | "heading" | "headphones" | "headset" | "health-cross" | "hearing" | "heat-map--02" | "heat-map--03" | "heat-map--stocks" | "heat-map" | "helicopter" | "helmet" | "help--filled" | "help-desk" | "help" | "hexagon--outline" | "hexagon--solid" | "hexagon--vertical--outline" | "hexagon--vertical--solid" | "history" | "home" | "horizontal-line--dashed" | "horizontal-line--solid" | "horizontal-view" | "hospital-bed" | "hospital" | "hotel" | "hourglass" | "humidity--alt" | "humidity" | "hurricane" | "hybrid-networking--alt" | "hybrid-networking" | "ibm--ai-on-z" | "ibm--aiops-insights" | "ibm--api-connect" | "ibm--app-connect-enterprise" | "ibm--application-and-discovery-delivery-intelligence" | "ibm--aspera" | "ibm--cloudant" | "ibm--content-cortex-repository" | "ibm--data-power" | "ibm--data-product-exchange" | "ibm--data-replication" | "ibm--databand" | "ibm--datastage" | "ibm--db2--alt" | "ibm--db2-warehouse" | "ibm--db2" | "ibm--deployable-architecture" | "ibm--devops-test" | "ibm--dynamic-route-server" | "ibm--elo--automotive-compliance" | "ibm--elo--engineering-insights" | "ibm--elo--method-composer" | "ibm--elo--publishing" | "ibm--engineering-lifecycle-mgmt" | "ibm--engineering-requirements-doors-next" | "ibm--engineering-systems-design-rhapsody-model-manager" | "ibm--engineering-systems-design-rhapsody-sn1" | "ibm--engineering-systems-design-rhapsody-sn2" | "ibm--engineering-systems-design-rhapsody" | "ibm--engineering-test-mgmt" | "ibm--engineering-workflow-mgmt" | "ibm--event-automation" | "ibm--event-endpoint-mgmt" | "ibm--event-processing" | "ibm--event-streams" | "ibm--gcm" | "ibm--global-storage-architecture" | "ibm--granite" | "ibm--ibv" | "ibm--instana" | "ibm--jrs" | "ibm--knowledge-catalog-premium" | "ibm--knowledge-catalog-standard" | "ibm--knowledge-catalog" | "ibm--launchpad-s4" | "ibm--lpa" | "ibm--lqe" | "ibm--machine-learning-for-zos" | "ibm--match-360" | "ibm--maximo-application-suite" | "ibm--mq" | "ibm--open-enterprise-languages" | "ibm--openshift-container-platform-on-vpc-for-regulated-industries" | "ibm--planning-analytics" | "ibm--power-vs-private-cloud" | "ibm--power-vs" | "ibm--power-with-vpc" | "ibm--private-path-services" | "ibm--process-mining" | "ibm--saas-console" | "ibm--sap-on-power" | "ibm--secure-infrastructure-on-vpc-for-regulated-industries" | "ibm--streamsets" | "ibm--telehealth" | "ibm--test-accelerator-for-z" | "ibm--toolchain" | "ibm--turbonomic" | "ibm--unstructured-data-processor" | "ibm--vpn-for-vpc" | "ibm--vsi-on-vpc-for-regulated-industries" | "ibm--wazi-deploy" | "ibm--webmethods-api-gateway" | "ibm--webmethods-api-studio" | "ibm--webmethods-b2b-integration" | "ibm--webmethods-developer-portal" | "ibm--webmethods-hybrid-integration" | "ibm--webmethods-integration-server" | "ibm--webmethods-integration" | "ibm--webmethods-managed-file-transfer" | "ibm-cloud--HSM" | "ibm-cloud--app-id" | "ibm-cloud--backup-and-recovery" | "ibm-cloud--backup-service-vpc" | "ibm-cloud--bare-metal-server" | "ibm-cloud--bare-metal-servers-vpc" | "ibm-cloud--citrix-daas" | "ibm-cloud--code-engine" | "ibm-cloud--continuous-delivery" | "ibm-cloud--databases" | "ibm-cloud--dedicated-host" | "ibm-cloud--direct-link-1--connect" | "ibm-cloud--direct-link-1--dedicated-hosting" | "ibm-cloud--direct-link-1--dedicated" | "ibm-cloud--direct-link-1--exchange" | "ibm-cloud--direct-link-2--connect" | "ibm-cloud--direct-link-2--dedicated-hosting" | "ibm-cloud--direct-link-2--dedicated" | "ibm-cloud--essential-security-and-observability-services" | "ibm-cloud--event-notification" | "ibm-cloud--event-streams" | "ibm-cloud--for-education" | "ibm-cloud--gate-keeper" | "ibm-cloud--hpc" | "ibm-cloud--hyper-protect-crypto-services" | "ibm-cloud--hyper-protect-dbaas" | "ibm-cloud--hyper-protect-vs" | "ibm-cloud--internet-services" | "ibm-cloud--ipsec-vpn" | "ibm-cloud--key-protect" | "ibm-cloud--kubernetes-service" | "ibm-cloud--logging" | "ibm-cloud--mass-data-migration" | "ibm-cloud--observability" | "ibm-cloud--pal" | "ibm-cloud--privileged-access-gateway" | "ibm-cloud--projects" | "ibm-cloud--resiliency" | "ibm-cloud--secrets-manager" | "ibm-cloud--security-compliance-center-workload-protection" | "ibm-cloud--security-compliance-center" | "ibm-cloud--security-groups" | "ibm-cloud--security" | "ibm-cloud--subnets" | "ibm-cloud--sysdig-secure" | "ibm-cloud--transit-gateway" | "ibm-cloud--virtual-server-classic" | "ibm-cloud--virtual-server-vpc" | "ibm-cloud--vpc-block-storage-snapshots" | "ibm-cloud--vpc-client-vpn" | "ibm-cloud--vpc-endpoints" | "ibm-cloud--vpc-file-storage" | "ibm-cloud--vpc-images" | "ibm-cloud--vpc" | "ibm-cloud-pak--MANTA-automated-data-lineage" | "ibm-cloud-pak--applications" | "ibm-cloud-pak--business-automation" | "ibm-cloud-pak--data" | "ibm-cloud-pak--integration" | "ibm-cloud-pak--multicloud-mgmt" | "ibm-cloud-pak--netezza" | "ibm-cloud-pak--network-automation" | "ibm-cloud-pak--security" | "ibm-cloud-pak--system" | "ibm-cloud-pak--watson-aiops" | "ibm-cloud" | "ibm-consulting-advantage--agent" | "ibm-consulting-advantage--application" | "ibm-consulting-advantage--assistant" | "ibm-devops--control" | "ibm-federated-api-management" | "ibm-hybrid-control-plane" | "ibm-partner-plus" | "ibm-quantum--safe-advisor" | "ibm-quantum--safe-explorer" | "ibm-quantum--safe-remediator" | "ibm-security--services" | "ibm-security" | "ibm-software--watsonx--data--analyze-and-process" | "ibm-software--watsonx--data--structured--enrichment" | "ibm-software--watsonx--data--structured--import" | "ibm-software--watsonx--data--unstructured--enrichment" | "ibm-software--watsonx--data--unstructured--import" | "ibm-software--watsonx--document--library" | "ibm-watson--assistant" | "ibm-watson--discovery" | "ibm-watson--knowledge-catalog" | "ibm-watson--knowledge-studio" | "ibm-watson--language-translator" | "ibm-watson--machine-learning" | "ibm-watson--natural-language-classifier" | "ibm-watson--natural-language-understanding" | "ibm-watson--openscale" | "ibm-watson--orders" | "ibm-watson--query" | "ibm-watson--speech-to-text" | "ibm-watson--studio" | "ibm-watson--text-to-speech" | "ibm-watson--tone-analyzer" | "ibm-watsonx--assistant" | "ibm-watsonx--code-assistant-for-enterprise-java-applications" | "ibm-watsonx--code-assistant-for-z--refactor" | "ibm-watsonx--code-assistant-for-z-understand" | "ibm-watsonx--code-assistant-for-z-validation-assistant" | "ibm-watsonx--code-assistant-for-z" | "ibm-watsonx--code-assistant" | "ibm-watsonx--orchestrate" | "ibm-z--cloud-mod-stack" | "ibm-z--environments-dev-sec-ops" | "ibm-z--open-editor" | "ibm-z--processor-capacity-reference" | "ibm-z-cloud--provisioning" | "ibm-z-os--ai-control-interface" | "ibm-z-os--containers" | "ibm-z-os--package-manager" | "ibm-z-os" | "ice--accretion" | "ice--vision" | "id-management" | "idea" | "identification" | "if--action" | "if--else" | "image--copy" | "image--medical" | "image--reference" | "image--search--alt" | "image--search" | "image-service" | "image-store--local" | "image" | "import-export" | "important" | "improve-relevance" | "in-progress--error" | "in-progress--warning" | "in-progress" | "incident-reporter" | "incomplete--cancel" | "incomplete--error" | "incomplete--warning" | "incomplete" | "increase-level" | "industry" | "infinity-symbol" | "information--disabled" | "information--filled" | "information--square--filled" | "information--square" | "information" | "infrastructure--classic" | "insert--page" | "insert-syntax" | "insert" | "inspection" | "instance--bx" | "instance--classic" | "instance--cx" | "instance--mx" | "instance--virtual" | "integration" | "intent-request--active" | "intent-request--create" | "intent-request--heal" | "intent-request--inactive" | "intent-request--scale-in" | "intent-request--scale-out" | "intent-request--uninstall" | "intent-request--upgrade" | "interactions" | "interface--definition--alt" | "interface--definition" | "interface--usage--1" | "interface--usage--alt" | "interface--usage" | "intersect" | "intrusion-prevention" | "inventory-management" | "iot--connect" | "iot--platform" | "item--definition" | "item--usage" | "job--daemon" | "job--run" | "join--full" | "join--inner--alt" | "join--inner" | "join--left-outer" | "join--left" | "join--outer" | "join--right-outer" | "join--right" | "join-node" | "js-error" | "jump-link" | "keep-dry" | "key--values" | "keyboard--off" | "keyboard" | "keychain" | "kiosk-device" | "kubelet" | "kubernetes--control-plane-node" | "kubernetes--ip-address" | "kubernetes--operator" | "kubernetes--pod" | "kubernetes--worker-node" | "kubernetes" | "label" | "language" | "laptop" | "lasso--polygon" | "lasso" | "launch" | "layers--external" | "layers" | "legend" | "letter--Aa" | "letter--Bb" | "letter--Cc" | "letter--Dd" | "letter--Ee" | "letter--Ff" | "letter--Gg" | "letter--Hh" | "letter--Ii" | "letter--Jj" | "letter--Kk" | "letter--Ll" | "letter--Mm" | "letter--Nn" | "letter--Oo" | "letter--Pp" | "letter--Qq" | "letter--Rr" | "letter--Ss" | "letter--Tt" | "letter--Uu" | "letter--Vv" | "letter--Ww" | "letter--Xx" | "letter--Yy" | "letter--Zz" | "license--draft" | "license--global" | "license--maintenance-draft" | "license--maintenance" | "license--third-party-draft" | "license--third-party" | "license" | "lifesaver" | "light--filled" | "light" | "lightning" | "line--thick" | "line--thin" | "link" | "linux--alt" | "linux--namespace" | "linux" | "list--boxes" | "list--bulleted" | "list--checked--mirror" | "list--checked" | "list--dropdown" | "list--numbered--mirror" | "list--numbered" | "list-tree" | "list" | "load-balancer--application" | "load-balancer--classic" | "load-balancer--global" | "load-balancer--listener" | "load-balancer--local" | "load-balancer--network" | "load-balancer--pool" | "load-balancer--vpc" | "location--company--filled" | "location--company" | "location--current" | "location--filled" | "location--group" | "location--hazard--filled" | "location--hazard" | "location--heart--filled" | "location--heart" | "location--info--filled" | "location--info" | "location--person--filled" | "location--person" | "location--save" | "location--star--filled" | "location--star" | "location--supplier" | "location" | "locked-and-blocked" | "locked" | "logical-partition" | "login" | "logo--angular" | "logo--ansible-community" | "logo--bluesky" | "logo--digg" | "logo--discord" | "logo--facebook" | "logo--figma" | "logo--flickr" | "logo--git" | "logo--github" | "logo--gitlab" | "logo--glassdoor" | "logo--instagram" | "logo--invision" | "logo--jupyter" | "logo--keybase" | "logo--kubernetes" | "logo--linkedin" | "logo--livestream" | "logo--mastodon" | "logo--medium" | "logo--model-context-protocol" | "logo--npm" | "logo--openshift" | "logo--pinterest" | "logo--python" | "logo--quora" | "logo--r-script" | "logo--react" | "logo--red-hat-ai-instructlab-on-ibm-cloud" | "logo--red-hat-ansible" | "logo--sketch" | "logo--skype" | "logo--slack" | "logo--snapchat" | "logo--svelte" | "logo--tumblr" | "logo--twitter" | "logo--vmware--alt" | "logo--vmware" | "logo--vue" | "logo--wechat" | "logo--x" | "logo--xing" | "logo--yelp" | "logo--youtube" | "logout" | "loop--alt" | "loop" | "mac--command" | "mac--option" | "mac--shift" | "machine-learning-model" | "machine-learning" | "magic-wand--filled" | "magic-wand" | "mail--all" | "mail--reply" | "manage-protection" | "managed-solutions" | "map--center" | "map--identify" | "map-boundary--vegetation" | "map-boundary" | "map" | "mapping--clear" | "mapping--hide" | "mapping--show" | "marginal" | "marine-warning" | "material-request" | "math-curve" | "maximize" | "media--library--filled" | "media--library" | "media-cast" | "medication--alert" | "medication--reminder" | "medication" | "menu" | "merge-node" | "merge" | "message-queue" | "meter--alt" | "meter" | "microphone--filled" | "microphone--off--filled" | "microphone--off" | "microphone" | "microscope" | "microservices--1" | "microservices--2" | "migrate--alt" | "migrate" | "milestone" | "military-camp" | "minimap-off" | "minimap-on" | "minimize" | "minus--plus" | "misuse--outline" | "misuse" | "mixed-rain-hail" | "ml-model--reference" | "mobile--add" | "mobile--audio" | "mobile--check" | "mobile--crash" | "mobile--download" | "mobile--event" | "mobile--landscape" | "mobile--request" | "mobile--session" | "mobile--view-orientation" | "mobile--view" | "mobile" | "mobility--services" | "model--alt" | "model--content--doc" | "model--foundation" | "model--reference" | "model--tuned" | "model-builder--reference" | "model-builder" | "model" | "modified--newest" | "modified--oldest" | "money" | "monster" | "monument" | "moon" | "moonrise" | "moonset" | "mostly-cloudy--night" | "mostly-cloudy" | "mountain" | "move" | "movement" | "multiuser-device" | "music--add" | "music--remove" | "music" | "mysql" | "name-space" | "naming-conventions" | "navaid--civil" | "navaid--dme" | "navaid--helipad" | "navaid--military-civil" | "navaid--military" | "navaid--ndb-dme" | "navaid--ndb" | "navaid--private" | "navaid--seaplane" | "navaid--tacan" | "navaid--vhfor" | "navaid--vor-dme" | "navaid--vor-tac" | "navaid--vor" | "need" | "network--1" | "network--2" | "network--3--reference" | "network--3" | "network--4--reference" | "network--4" | "network--admin-control" | "network--enterprise" | "network--overlay" | "network--public" | "network-interface" | "network-time-protocol" | "new-tab" | "next--filled" | "next--outline" | "no-image" | "no-ticket" | "nominal" | "non-certified" | "noodle-bowl" | "not-available" | "not-sent--filled" | "not-sent" | "notebook--reference" | "notebook" | "notification--filled" | "notification--new" | "notification--off--filled" | "notification--off" | "notification-counter" | "notification" | "notifications-paused" | "null-sign" | "number--0" | "number--1" | "number--2" | "number--3" | "number--4" | "number--5" | "number--6" | "number--7" | "number--8" | "number--9" | "number--small--0" | "number--small--1" | "number--small--2" | "number--small--3" | "number--small--4" | "number--small--5" | "number--small--6" | "number--small--7" | "number--small--8" | "number--small--9" | "object-storage--alt" | "object-storage" | "object" | "observed--hail" | "observed--lightning" | "offset--environmental" | "omega" | "opacity" | "open--stripe" | "open-panel--bottom" | "open-panel--filled--bottom" | "open-panel--filled--left" | "open-panel--filled--right" | "open-panel--filled--top" | "open-panel--left" | "open-panel--right" | "open-panel--top" | "operations--field" | "operations--record" | "orchestrate" | "order--server" | "order--storm" | "order--stratus" | "order-details" | "ordinal" | "outage" | "outlook-severe" | "overflow-menu--horizontal" | "overflow-menu--vertical" | "overlay" | "package--text-analysis" | "package-node" | "package" | "page--first" | "page--last" | "page-break" | "page-number" | "paint-brush--alt" | "paint-brush" | "palm-tree" | "pan--horizontal" | "pan--vertical" | "panel-expansion" | "paragraph" | "parameter" | "parent-child" | "parent-node" | "part--definition" | "part--usage" | "partition--auto" | "partition--collection" | "partition--repartition" | "partition--same" | "partition--specific" | "partly-cloudy--night" | "partly-cloudy" | "partnership" | "party-popper" | "passenger--drinks" | "passenger--plus" | "password" | "paste" | "pause--filled" | "pause--outline--filled" | "pause--outline" | "pause-future" | "pause-past" | "pause" | "payment--methods" | "pcn--e-node" | "pcn--military" | "pcn--p-node" | "pcn--z-node" | "pedestrian--family" | "pedestrian-child" | "pedestrian" | "pen--fountain" | "pen" | "pending--filled" | "pending" | "pentagon--down--outline" | "pentagon--down--solid" | "pentagon--left--outline" | "pentagon--left--solid" | "pentagon--outline" | "pentagon--right--outline" | "pentagon--right--solid" | "pentagon--solid" | "percentage--filled" | "percentage" | "perform--action" | "person--favorite" | "person" | "pest" | "phone--application" | "phone--block--filled" | "phone--block" | "phone--filled" | "phone--incoming--filled" | "phone--incoming" | "phone--ip" | "phone--off--filled" | "phone--off" | "phone--outgoing--filled" | "phone--outgoing" | "phone--settings" | "phone--voice--filled" | "phone--voice" | "phone" | "phrase-sentiment" | "picnic-area" | "piggy-bank--slot" | "piggy-bank" | "pills--add" | "pills--subtract" | "pills" | "pin--filled" | "pin" | "pipelines" | "pivot--horizontal" | "pivot--vertical" | "plan" | "plane--private" | "plane--sea" | "plane" | "platform-automation" | "platforms" | "play--filled--alt" | "play--filled" | "play--outline--filled" | "play--outline" | "play" | "playlist" | "plug--filled" | "plug" | "point-of-presence" | "point" | "police" | "policy" | "pop-in" | "popup" | "port--definition" | "port--input" | "port--output" | "port--usage" | "portfolio--management" | "portfolio" | "power-enterprise-pools-metered-capacity-integration" | "power-virtual-server-disaster-recovery-automation" | "power" | "pre-prod-environment" | "presentation-file" | "pressure--filled" | "pressure" | "previous--filled" | "previous--outline" | "pricing--consumption" | "pricing--container" | "pricing--quick-proposal" | "pricing--tailored" | "pricing--traditional" | "printer" | "priority--high" | "priority--low" | "private-network" | "process-automate" | "process" | "product" | "production-environment" | "production-service" | "program--action" | "program" | "progress-bar--round" | "progress-bar" | "promote" | "prompt-session" | "prompt-template" | "property-relationship" | "pull-request" | "punctuation-check" | "purchase" | "qiskit" | "qq-plot" | "qr-code" | "quadrant-plot" | "query-queue" | "query" | "question-answering" | "queued" | "quotes" | "radar--enhanced" | "radar--weather" | "radar" | "radio--combat" | "radio--push-to-talk" | "radio-button--checked" | "radio-button" | "radio" | "rain--drizzle" | "rain--heavy" | "rain--scattered--night" | "rain--scattered" | "rain-drop" | "rain" | "read-me" | "reading--glasses" | "receipt--verification" | "receipt" | "recently-viewed" | "recommend" | "recording--filled--alt" | "recording--filled" | "recording" | "recycle" | "red-hat-ai-instructlab-on-ibm-cloud" | "redefinition" | "redo" | "ref-evapotranspiration" | "reference-architecture" | "reflect--horizontal" | "reflect--vertical" | "refrigerant" | "reminder--medical" | "reminder" | "remote-connection" | "renew--alt" | "renew" | "repeat--one" | "repeat" | "replicate" | "reply--all" | "reply" | "repo--artifact" | "repo--source-code" | "report--chart" | "report--data" | "report--growth" | "report" | "request-quote" | "requirement--definition" | "requirement--usage" | "reset--alt" | "reset" | "restart" | "restaurant--fine" | "restaurant" | "result--draft" | "result--new" | "result--old" | "result" | "retry--failed" | "return" | "review" | "rewind--10" | "rewind--30" | "rewind--5" | "right-panel--close--filled" | "right-panel--close" | "right-panel--open--filled" | "right-panel--open" | "road--weather" | "road" | "roadmap" | "rocket" | "rotate--clockwise--alt--filled" | "rotate--clockwise--alt" | "rotate--clockwise--filled" | "rotate--clockwise" | "rotate--counterclockwise--alt--filled" | "rotate--counterclockwise--alt" | "rotate--counterclockwise--filled" | "rotate--counterclockwise" | "rotate" | "router--voice" | "router--wifi" | "router" | "row--collapse" | "row--delete" | "row--expand" | "row--insert" | "row" | "rss" | "rule--cancelled" | "rule--data-quality" | "rule--draft" | "rule--filled" | "rule--locked" | "rule--partial" | "rule--test" | "rule-grouping--data-quality" | "rule" | "ruler--alt" | "ruler" | "run--mirror" | "run-view-icon" | "run" | "running" | "sailboat--coastal" | "sailboat--offshore" | "sales-ops" | "sankey-diagram--alt" | "sankey-diagram" | "satellite--radar" | "satellite--weather" | "satellite" | "satisfy--definition" | "satisfy--usage" | "save--model" | "save" | "scale" | "scales--tipped" | "scales" | "scalpel" | "scan--alt" | "scan--disabled" | "scan" | "scatter-matrix" | "schematics" | "scis--control-tower" | "scis--transparent-supply" | "scooter--front" | "scooter" | "screen--off" | "screen-map--set" | "screen-map" | "screen" | "script--reference" | "script" | "search--advanced" | "search--locate--mirror" | "search--locate" | "search" | "security-services" | "security" | "select--01" | "select--02" | "select--window" | "send--alt--filled" | "send--alt" | "send--filled" | "send-action--usage" | "send-backward" | "send-to-back" | "send" | "sensor" | "sequential-palette" | "server--dns" | "server--proxy" | "server--time--usage" | "server--time" | "service-desk" | "service-id" | "service-levels" | "session-border-control" | "settings--adjust" | "settings--check" | "settings--edit" | "settings--services" | "settings--view" | "settings" | "shadow" | "shape--except" | "shape--exclude" | "shape--intersect" | "shape--join" | "shape--unite" | "shapes" | "share-knowledge" | "share" | "shield--alert" | "shipment--delivery" | "shopping--bag" | "shopping--cart--arrow-down" | "shopping--cart--arrow-up" | "shopping--cart--clear" | "shopping--cart--error" | "shopping--cart--minus" | "shopping--cart--plus" | "shopping--cart" | "shopping--catalog" | "show-data--cards" | "shrink-screen--filled" | "shrink-screen" | "shuffle" | "shuttle" | "side-panel--close--filled" | "side-panel--close" | "side-panel--open--filled" | "side-panel--open" | "sight" | "sigma" | "signal-strength" | "sim-card" | "skill-level--advanced" | "skill-level--basic" | "skill-level--intermediate" | "skill-level" | "skip--back--filled" | "skip--back--outline--filled" | "skip--back--outline--solid" | "skip--back--outline" | "skip--back--solid--filled" | "skip--back" | "skip--forward--filled" | "skip--forward--outline--filled" | "skip--forward--outline--solid" | "skip--forward--outline" | "skip--forward--solid--filled" | "skip--forward" | "sleet" | "slisor" | "smell" | "smoke" | "snooze" | "snow--blizzard" | "snow--heavy" | "snow--scattered--night" | "snow--scattered" | "snow-density" | "snow" | "snowflake" | "soccer" | "socket" | "software-resource--cluster" | "software-resource--reference" | "software-resource" | "soil-moisture--field" | "soil-moisture--global" | "soil-moisture" | "soil-temperature--field" | "soil-temperature--global" | "soil-temperature" | "solar-panel" | "sort--ascending" | "sort--descending" | "sort--remove" | "sorting-a-to-z" | "sorting-highest-to-lowest-number" | "sorting-lowest-to-highest-number" | "sorting-z-to-a" | "source-control" | "spell-check" | "split-screen" | "split" | "spray-paint" | "sprout" | "spyre-accelerator" | "square--outline" | "square--slash" | "square--solid" | "stack-limitation" | "stamp" | "star--filled" | "star--half" | "star--review" | "star" | "stay-inside" | "stem-leaf-plot" | "stethoscope" | "stickies" | "stop--filled--alt" | "stop--filled" | "stop--outline--filled" | "stop--outline" | "stop-sign--filled" | "stop-sign" | "stop" | "storage-pool" | "storage-request" | "store" | "storm-tracker" | "storm" | "strategy-play" | "stratus" | "strawberry" | "string-integer" | "string-text" | "subclassification" | "subdirectory" | "subflow--local" | "subflow" | "subject--definition" | "subject--usage" | "subnet-acl-rules" | "subsetting" | "subtract--alt" | "subtract--filled" | "subtract--large" | "subtract" | "succession--flow-connection" | "succession" | "summary--KPI--mirror" | "summary--KPI" | "sun" | "sunrise" | "sunset" | "support-vector-machine" | "surrogate--key-database" | "surrogate--key-flat-file" | "sustainability" | "swim" | "swimlane-d--vertical" | "switch-layer-2" | "switch-layer-3" | "switch" | "switcher" | "swot--filled" | "swot" | "sync-settings" | "sys-provision" | "sysplex--distributor" | "table--add" | "table--alias" | "table--built" | "table--shortcut" | "table--split" | "table-of-contents" | "table" | "tablet--landscape" | "tablet" | "tag--edit" | "tag--export" | "tag--group" | "tag--import" | "tag--none" | "tag" | "tank" | "target" | "task--add" | "task--approved" | "task--asset-view" | "task--blank" | "task--complete" | "task--edit" | "task--hold" | "task--location" | "task--progress" | "task--remove" | "task--settings" | "task--star" | "task--tools" | "task--view" | "task" | "taste" | "taxi" | "tcp-ip-service" | "temperature--celsius--alt" | "temperature--celsius" | "temperature--fahrenheit--alt" | "temperature--fahrenheit" | "temperature--feels-like" | "temperature--frigid" | "temperature--hot" | "temperature--inversion" | "temperature--max" | "temperature--min" | "temperature--water" | "temperature" | "template" | "tennis-ball" | "tennis" | "term--reference" | "term" | "terminal--3270" | "terminal" | "test-tool" | "text--align--center" | "text--align--justify" | "text--align--left" | "text--align--mixed" | "text--align--right" | "text--all-caps" | "text--bold" | "text--clear-format" | "text--color" | "text--creation" | "text--fill" | "text--font" | "text--footnote" | "text--highlight" | "text--indent--less" | "text--indent--more" | "text--indent" | "text--italic" | "text--kerning" | "text--leading" | "text--line-spacing" | "text--long-paragraph" | "text--new-line" | "text--scale" | "text--selection" | "text--short-paragraph" | "text--small-caps" | "text--strikethrough" | "text--subscript" | "text--superscript" | "text--tracking" | "text--underline" | "text--vertical-alignment" | "text--wrap" | "text-link--analysis" | "text-link" | "text-mining--applier" | "text-mining" | "theater" | "this-side-up" | "thumbnail--1" | "thumbnail--2" | "thumbs-down--filled" | "thumbs-down" | "thumbs-up--filled" | "thumbs-up-double--filled" | "thumbs-up-double" | "thumbs-up" | "thunderstorm--scattered--night" | "thunderstorm--scattered" | "thunderstorm--severe" | "thunderstorm--strong" | "thunderstorm" | "ticket" | "tides" | "time--filled" | "time-plot" | "time" | "timeline" | "timer" | "timing-belt" | "toggle--off--fill" | "toggle--on--fill" | "toggle-off" | "toggle-on" | "tool-box" | "tool-kit" | "tools--alt" | "tools" | "top-data-sets" | "top-programs" | "tornado-warning" | "tornado" | "touch--1--filled" | "touch--1-down--filled" | "touch--1-down" | "touch--1" | "touch--2--filled" | "touch--2" | "touch--interaction" | "tour" | "trace" | "traffic--event" | "traffic--flow-incident" | "traffic--flow" | "traffic--incident" | "traffic--weather-incident" | "traffic-cone" | "train--heart" | "train--profile" | "train--speed" | "train--ticket" | "train--time" | "train" | "tram" | "transform--binary" | "transform--code" | "transform--instructions" | "transform--language" | "transform--pipeline" | "transgender" | "translate" | "transmission-lte" | "transpose" | "trash-can" | "tree--fall-risk" | "tree-view--alt" | "tree-view" | "tree" | "triangle--down--outline" | "triangle--down--solid" | "triangle--left--outline" | "triangle--left--solid" | "triangle--outline" | "triangle--right--outline" | "triangle--right--solid" | "triangle--solid" | "trigger" | "trophy--filled" | "trophy" | "tropical-storm--model-tracks" | "tropical-storm--tracks" | "tropical-storm" | "tropical-warning" | "try-catch" | "tsq" | "tsunami" | "tuning" | "two-factor-authentication" | "two-person-lift" | "type-pattern" | "types" | "umbrella" | "undefined--filled" | "undefined" | "undo" | "unfold--open" | "ungroup-objects" | "unknown--filled" | "unknown" | "unlink" | "unlocked" | "unplug" | "unsaved" | "up-to-top" | "update-complete" | "update-now" | "upgrade" | "upload" | "upstream" | "usage--included-use-case" | "use-case--definition" | "use-case--usage" | "user--access-locked" | "user--access-unlocked" | "user--access" | "user--activity" | "user--admin" | "user--avatar--filled--alt" | "user--avatar--filled" | "user--avatar" | "user--certification" | "user--data" | "user--favorite--alt--filled" | "user--favorite--alt" | "user--favorite" | "user--feedback" | "user--filled" | "user--follow" | "user--identification" | "user--military" | "user--minus" | "user--multiple" | "user--online" | "user--profile" | "user--role" | "user--service-desk" | "user--service" | "user--settings" | "user--simulation" | "user--speaker" | "user--sponsor" | "user--x-ray" | "user-profile--alt" | "user" | "utility--expense" | "uv-index--alt" | "uv-index--filled" | "uv-index" | "value--variable--alt" | "value--variable" | "van" | "vegetation--asset" | "vegetation--encroachment" | "vegetation--height" | "vehicle--api" | "vehicle--connected" | "vehicle--insights" | "vehicle--services" | "version--major" | "version--minor" | "version--patch" | "version" | "vertical--fold" | "vertical-view" | "video--add" | "video--chat" | "video--filled" | "video--off--filled" | "video--off" | "video-player" | "video" | "view--filled" | "view--mode-1" | "view--mode-2" | "view--off--filled" | "view--off" | "view-next" | "view" | "vintage-mac" | "virtual-column--key" | "virtual-column" | "virtual-desktop" | "virtual-machine" | "virtual-private-cloud--alt" | "virtual-private-cloud" | "visual-inspection" | "visual-recognition" | "vlan--ibm" | "vlan" | "vmdk-disk" | "voice-activate" | "voice-mode" | "voicemail" | "volume--block-storage" | "volume--down--alt" | "volume--down--filled--alt" | "volume--down--filled" | "volume--down" | "volume--file-storage" | "volume--mute--filled" | "volume--mute" | "volume--object-storage" | "volume--up--alt" | "volume--up--filled--alt" | "volume--up--filled" | "volume--up" | "vpn--connection" | "vpn--policy" | "wallet" | "warning--alt--filled" | "warning--alt-inverted--filled" | "warning--alt-inverted" | "warning--alt" | "warning--diamond-fill" | "warning--diamond" | "warning--filled" | "warning--hex--filled" | "warning--hex" | "warning--multiple" | "warning--other" | "warning-square--filled" | "warning-square" | "warning" | "watch" | "watson--machine-learning" | "watson" | "watsonx-ai" | "watsonx-data" | "watsonx-governance" | "watsonx" | "wave-direction" | "wave-height" | "wave-period" | "waveform" | "weather-front--cold" | "weather-front--stationary" | "weather-front--warm" | "weather-station" | "web-services--cluster" | "web-services--container" | "web-services--definition" | "web-services--service" | "web-services--task-definition-version" | "web-services--task" | "webhook" | "websheet" | "wheat" | "while-loop" | "white-paper" | "wifi--controller" | "wifi--not-secure" | "wifi--off" | "wifi--secure" | "wifi-bridge--alt" | "wifi-bridge" | "wifi" | "wikis" | "wind-gusts" | "wind-power" | "wind-stream" | "windy--dust" | "windy--snow" | "windy--strong" | "windy" | "winter-warning" | "wintry-mix" | "wireless-checkout" | "word-cloud" | "workflow-automation" | "workspace--import" | "workspace" | "worship--christian" | "worship--jewish" | "worship--muslim" | "worship" | "x-axis" | "y-axis" | "z--lpar" | "z--systems" | "z-HyperLink" | "z-axis" | "zoom--area" | "zoom--fit" | "zoom--in-area" | "zoom--in" | "zoom--out-area" | "zoom--out" | "zoom--reset" | "zos--partition" | "zos--sysplex" | "zos";
|
|
3
|
+
/**
|
|
4
|
+
* Nomes que o APP acrescenta: um sprite próprio na web, um glifo de `criarGlifo` no nativo.
|
|
5
|
+
* Vazio de propósito. O app declara os seus uma vez, e só eles passam a valer:
|
|
6
|
+
*
|
|
7
|
+
* declare module "@aurea-uds/react" { // ou "@aurea-uds/native"
|
|
8
|
+
* interface AureaIconNames { marca: true }
|
|
9
|
+
* }
|
|
10
|
+
*/
|
|
11
|
+
export interface AureaIconNames {
|
|
12
|
+
}
|
|
13
|
+
/** Nome de ícone aceito: um do Carbon ou um que o app declarou em `AureaIconNames`. */
|
|
14
|
+
export type IconName = CarbonIconName | Extract<keyof AureaIconNames, string>;
|
package/dist/icon.d.ts
CHANGED
|
@@ -4,9 +4,10 @@ export type AureaIconComponent = (props: {
|
|
|
4
4
|
size?: number;
|
|
5
5
|
color?: string;
|
|
6
6
|
}) => React.ReactElement;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
export type { IconName, CarbonIconName, AureaIconNames } from "./icon-names.js";
|
|
8
|
+
import type { IconName } from "./icon-names.js";
|
|
9
|
+
/** Parcial: o app registra só os que usa, e uma chave com erro de digitação reprova. */
|
|
10
|
+
export type AureaIconRegistry = Readonly<Partial<Record<IconName, AureaIconComponent>>>;
|
|
10
11
|
/**
|
|
11
12
|
* Declara o registro. É uma função de identidade tipada, e ela existe por um motivo prático:
|
|
12
13
|
* escrita como constante no módulo do app, a referência é estável — e um registro recriado a cada
|
|
@@ -118,4 +119,3 @@ export interface IconProps {
|
|
|
118
119
|
* um aviso nomeando o ícone e o caminho do import que resolve.
|
|
119
120
|
*/
|
|
120
121
|
export declare function Icon({ name, size, color, icons, label }: IconProps): React.JSX.Element | null;
|
|
121
|
-
export {};
|
package/dist/index.d.ts
CHANGED
|
@@ -4,16 +4,16 @@ export { BottomNavProvider, useBottomNavSpace } from "./barranav.js";
|
|
|
4
4
|
export { resolverTokens } from "./tokens.js";
|
|
5
5
|
export type { AureaDensity, AureaFontFamilies, AureaFontInput, AureaFontScale, AureaShadow, AureaThemeName, AureaTokens, } from "./tokens.js";
|
|
6
6
|
export { criarFolha, comOpacidade } from "./estilos.js";
|
|
7
|
-
export { Text } from "./text.js";
|
|
8
|
-
export type { TextProps, AureaTextFont, AureaTextLeading, AureaTextSize, AureaTextTone, AureaTextWeight, } from "./text.js";
|
|
7
|
+
export { Text, Heading, Paragraph, Code } from "./text.js";
|
|
8
|
+
export type { TextProps, AureaTextFont, AureaTextLeading, AureaTextSize, AureaTextTone, AureaTextWeight, AureaTextType, HeadingProps, ParagraphProps, CodeProps, AureaTypographyColor, AureaTypographyWeight, AureaTypographyAlign, } from "./text.js";
|
|
9
9
|
export { Icon, IconRegistryProvider, criarRegistroDeIcones, criarGlifo } from "./icon.js";
|
|
10
|
-
export type { IconProps, IconName, AureaIconComponent, AureaIconRegistry, AureaIconSize, AureaGlifoDesenho, AureaGlifoCaminho, AureaGlifoCirculo, AureaGlifoRetangulo, } from "./icon.js";
|
|
10
|
+
export type { IconProps, IconName, CarbonIconName, AureaIconNames, AureaIconComponent, AureaIconRegistry, AureaIconSize, AureaGlifoDesenho, AureaGlifoCaminho, AureaGlifoCirculo, AureaGlifoRetangulo, } from "./icon.js";
|
|
11
11
|
export { Screen } from "./screen.js";
|
|
12
12
|
export type { ScreenProps, AureaScreenBackground, AureaScreenEdge } from "./screen.js";
|
|
13
13
|
export { Stack, Cluster, Grid, Card, Separator } from "./layout.js";
|
|
14
|
-
export type { StackProps, ClusterProps, AureaClusterAlign, AureaClusterJustify, GridProps, CardProps, SeparatorProps, AureaCardVariant, } from "./layout.js";
|
|
15
|
-
export { Button, IconButton } from "./actions.js";
|
|
16
|
-
export type { ButtonProps, IconButtonProps, AureaButtonAppearance, AureaButtonSize, AureaButtonTone, } from "./actions.js";
|
|
14
|
+
export type { StackProps, ClusterProps, AureaStackAlign, AureaClusterAlign, AureaClusterJustify, GridProps, CardProps, SeparatorProps, AureaCardVariant, } from "./layout.js";
|
|
15
|
+
export { Button, IconButton, LinkButton, ThemeToggle } from "./actions.js";
|
|
16
|
+
export type { ButtonProps, IconButtonProps, LinkButtonProps, ThemeToggleProps, AureaButtonAppearance, AureaButtonSize, AureaButtonTone, } from "./actions.js";
|
|
17
17
|
export { Spinner, Skeleton, Progress, Alert, EmptyState, DataState, ICONE_DA_VARIANTE } from "./feedback.js";
|
|
18
18
|
export type { SpinnerProps, SkeletonProps, ProgressProps, AlertProps, EmptyStateProps, DataStateProps, AureaSpinnerSize, AureaAlertVariant, AureaDataStateValue, } from "./feedback.js";
|
|
19
19
|
export { Badge, Status, Avatar, KPI, formatarContagem } from "./display.js";
|
package/dist/index.js
CHANGED
|
@@ -31,13 +31,13 @@ export { resolverTokens } from "./tokens.js";
|
|
|
31
31
|
// A fábrica de folhas memoizada por (tema, densidade). Pública porque o consumidor tem o mesmo
|
|
32
32
|
// problema que os componentes daqui — e a medição em aparelho mostrou que ele é real.
|
|
33
33
|
export { criarFolha, comOpacidade } from "./estilos.js";
|
|
34
|
-
export { Text } from "./text.js";
|
|
34
|
+
export { Text, Heading, Paragraph, Code } from "./text.js";
|
|
35
35
|
export { Icon, IconRegistryProvider, criarRegistroDeIcones, criarGlifo } from "./icon.js";
|
|
36
36
|
// A ÚNICA peça do Lote 1 com dependência de terceiro — `react-native-safe-area-context`,
|
|
37
37
|
// autorizada pelo Victor em 03/09/2026 depois de o lote parar por ela (`BUILDING.md` §3).
|
|
38
38
|
export { Screen } from "./screen.js";
|
|
39
39
|
export { Stack, Cluster, Grid, Card, Separator } from "./layout.js";
|
|
40
|
-
export { Button, IconButton } from "./actions.js";
|
|
40
|
+
export { Button, IconButton, LinkButton, ThemeToggle } from "./actions.js";
|
|
41
41
|
// ── Lote 2 — o painel, que é só leitura ────────────────────────────────────────────────────
|
|
42
42
|
export { Spinner, Skeleton, Progress, Alert, EmptyState, DataState, ICONE_DA_VARIANTE } from "./feedback.js";
|
|
43
43
|
export { Badge, Status, Avatar, KPI, formatarContagem } from "./display.js";
|
package/dist/inputs.js
CHANGED
|
@@ -39,12 +39,12 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
|
|
|
39
39
|
// .segmented :922 linha, gap 3, padding 3, minH controlHMd, fundo muted
|
|
40
40
|
import * as React from "react";
|
|
41
41
|
import { Animated, KeyboardAvoidingView as KeyboardAvoidingViewRN, Modal, Platform, Pressable, ScrollView, TextInput, View, } from "react-native";
|
|
42
|
-
import { SafeAreaView } from "react-native-safe-area-context";
|
|
43
42
|
import { comOpacidade, criarFolha } from "./estilos.js";
|
|
44
43
|
import { FilaRolante } from "./rolagem.js";
|
|
45
44
|
import { IconButton } from "./actions.js";
|
|
46
45
|
import { Icon } from "./icon.js";
|
|
47
46
|
import { useReduceMotion } from "./movimento.js";
|
|
47
|
+
import { RecuoDaFolha } from "./screen.js";
|
|
48
48
|
import { Text } from "./text.js";
|
|
49
49
|
import { useAureaStrings, useAureaTokens, usePeleSobreAMarca, ForaDaMarca } from "./theme.js";
|
|
50
50
|
const alturaDoTamanho = (t, s) => s === "sm" ? t.size.controlHSm : s === "lg" ? t.size.controlHLg : t.size.controlHMd;
|
|
@@ -527,7 +527,7 @@ export function Select({ items, value, onChange, placeholder, disabled, size, ch
|
|
|
527
527
|
peleDaMarca,
|
|
528
528
|
inativo && s.desabilitado,
|
|
529
529
|
style,
|
|
530
|
-
], children: [_jsx(Text, { size: tam === "sm" ? "xs" : tam === "lg" ? "base" : "md", tone: escolhido ? "default" : "subtle", numberOfLines: 1, children: escolhido?.label ?? placeholder ?? "" }), chevron && _jsx(Icon, { name: chevron, size: "sm", color: peleDaMarca?.color ?? t.color.subtleForeground })] }), _jsx(ForaDaMarca, { children: _jsx(Modal, { visible: aberto, transparent: true, animationType: "slide", onRequestClose: () => setAberto(false), children: _jsxs(View, { style: s.fundoDaLista, children: [_jsx(Pressable, { style: s.fundoDeToque, onPress: () => setAberto(false), accessible: false }),
|
|
530
|
+
], children: [_jsx(Text, { size: tam === "sm" ? "xs" : tam === "lg" ? "base" : "md", tone: escolhido ? "default" : "subtle", numberOfLines: 1, children: escolhido?.label ?? placeholder ?? "" }), chevron && _jsx(Icon, { name: chevron, size: "sm", color: peleDaMarca?.color ?? t.color.subtleForeground })] }), _jsx(ForaDaMarca, { children: _jsx(Modal, { visible: aberto, transparent: true, animationType: "slide", statusBarTranslucent: true, navigationBarTranslucent: true, onRequestClose: () => setAberto(false), children: _jsxs(View, { style: s.fundoDaLista, children: [_jsx(Pressable, { style: s.fundoDeToque, onPress: () => setAberto(false), accessible: false }), _jsxs(View, { style: s.lista, children: [_jsx(ScrollView, { children: items.map((it) => (_jsx(Pressable, { disabled: it.disabled, onPress: () => { onChange?.(it.value); setAberto(false); }, accessibilityRole: "menuitem", accessibilityState: { selected: it.value === value, disabled: !!it.disabled }, style: [s.opcao, it.disabled && s.desabilitado], children: _jsx(Text, { size: "md", weight: it.value === value ? 600 : 400, children: it.label }) }, it.value))) }), _jsx(RecuoDaFolha, {})] })] }) }) })] }));
|
|
531
531
|
}
|
|
532
532
|
/**
|
|
533
533
|
* A pilha de campos, com o respiro do `--space-5`.
|
package/dist/layout.d.ts
CHANGED
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { type ViewProps } from "react-native";
|
|
3
|
+
/** Eixo cruzado do `Stack` — os MESMOS valores do `Stack` da web (B-01). */
|
|
4
|
+
export type AureaStackAlign = "start" | "center" | "end" | "stretch";
|
|
3
5
|
export interface StackProps extends ViewProps {
|
|
4
6
|
children?: React.ReactNode;
|
|
7
|
+
/**
|
|
8
|
+
* Eixo cruzado (o horizontal). Padrão `stretch`: os filhos ocupam a largura, como sempre e como
|
|
9
|
+
* na web. E2, 25/09/2026: desde que o `Button` passou a obedecer o pai (como no HeroUI Native e
|
|
10
|
+
* na web), é aqui que se diz "botão do tamanho do texto" (`start`) ou "no meio" (`center`).
|
|
11
|
+
*/
|
|
12
|
+
align?: AureaStackAlign;
|
|
5
13
|
}
|
|
6
14
|
/** Coluna com `--space-4` entre os filhos. **Sem prop de espaçamento, de propósito.** */
|
|
7
|
-
export declare function Stack({ style, ...rest }: StackProps): React.JSX.Element;
|
|
15
|
+
export declare function Stack({ align, style, ...rest }: StackProps): React.JSX.Element;
|
|
8
16
|
export type AureaClusterAlign = "start" | "center" | "end" | "baseline";
|
|
9
17
|
export type AureaClusterJustify = "start" | "center" | "end" | "between";
|
|
10
|
-
export interface ClusterProps extends StackProps {
|
|
18
|
+
export interface ClusterProps extends Omit<StackProps, "align"> {
|
|
11
19
|
/** Eixo cruzado (o vertical). Padrão `center`, o `align-items:center` do `.cluster`. */
|
|
12
20
|
align?: AureaClusterAlign;
|
|
13
21
|
/** Eixo principal (o horizontal). Padrão `start`. `between` espalha o que sobrar entre os itens. */
|
|
@@ -41,15 +49,19 @@ export interface GridProps extends ViewProps {
|
|
|
41
49
|
* sozinho e ESTICA a última linha. **No React Native não existe CSS Grid**: o layout é flexbox e
|
|
42
50
|
* nada mais (medido no contrato do `react-native`; não há `display:grid`).
|
|
43
51
|
*
|
|
44
|
-
* O que se faz aqui é o mais próximo honesto: `flexWrap` com uma largura mínima por filho. A
|
|
45
|
-
* diferença visível é uma
|
|
46
|
-
*
|
|
47
|
-
*
|
|
52
|
+
* ~~O que se faz aqui é o mais próximo honesto: `flexWrap` com uma largura mínima por filho. A
|
|
53
|
+
* diferença visível é uma só (…) os itens da última linha não esticam para preencher a sobra.~~
|
|
54
|
+
* **E11 (0.12.1):** a diferença era maior do que a declarada — nenhuma linha repartia a sobra.
|
|
55
|
+
* Com `minColumnWidth={150}` numa linha de 372 ficavam duas colunas de 150 e 56 vazios (medido no
|
|
56
|
+
* Yoga). Agora a grade mede a própria largura (`onLayout`) e faz a conta do `auto-fill` da web:
|
|
57
|
+
* cabem `⌊(largura + vão) / (mínimo + vão)⌋` colunas, e a sobra se reparte entre elas. Na última
|
|
58
|
+
* linha a célula continua do tamanho de UMA coluna, como na web. Antes da medida (o primeiro
|
|
59
|
+
* quadro), vale a largura mínima de sempre.
|
|
48
60
|
*
|
|
49
61
|
* O `min(…, 100%)` da web tem par aqui: `maxWidth: "100%"` no filho, para a coluna não estourar o
|
|
50
62
|
* contêiner quando o texto cresce — a mesma lição que a Fase 11 registrou no CSS.
|
|
51
63
|
*/
|
|
52
|
-
export declare function Grid({ minColumnWidth, style, children, ...rest }: GridProps): React.JSX.Element;
|
|
64
|
+
export declare function Grid({ minColumnWidth, style, children, onLayout, ...rest }: GridProps): React.JSX.Element;
|
|
53
65
|
/** Qual superfície o cartão é. Mesmos seis nomes da ficha da web. */
|
|
54
66
|
export interface SeparatorProps extends ViewProps {
|
|
55
67
|
orientation?: "horizontal" | "vertical";
|
package/dist/layout.js
CHANGED
|
@@ -12,7 +12,7 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
|
|
|
12
12
|
// do `Stack` na web escreve o porquê — *"um primitivo de layout que aceita qualquer espaçamento é
|
|
13
13
|
// como um sistema deixa de ter espaçamento"*. Reabrir isso no nativo criaria dois sistemas.
|
|
14
14
|
import * as React from "react";
|
|
15
|
-
import { Pressable, View } from "react-native";
|
|
15
|
+
import { Pressable, StyleSheet, View } from "react-native";
|
|
16
16
|
// `ref` chega por PROPS, sem `forwardRef` — e' o padrao do React 19, e e' o que o
|
|
17
17
|
// `@aurea-uds/react` ja' faz (o `Stack` da web e' `HTMLAttributes & RefAttributes`, sem
|
|
18
18
|
// envelope). O `ViewProps`/`TextProps` do RN 0.87 ja' declaram `ref`, entao ele viaja no
|
|
@@ -59,10 +59,11 @@ const folha = criarFolha((t) => ({
|
|
|
59
59
|
// A ação fica embaixo, separada pelo mesmo respiro que o resto da casa usa entre blocos.
|
|
60
60
|
acaoDaMarca: { marginTop: t.size.space3 },
|
|
61
61
|
}));
|
|
62
|
+
const ALINHAR_COLUNA = { start: "flex-start", center: "center", end: "flex-end", stretch: "stretch" };
|
|
62
63
|
/** Coluna com `--space-4` entre os filhos. **Sem prop de espaçamento, de propósito.** */
|
|
63
|
-
export function Stack({ style, ...rest }) {
|
|
64
|
+
export function Stack({ align, style, ...rest }) {
|
|
64
65
|
const s = folha(useAureaTokens());
|
|
65
|
-
return _jsx(View, { style: [s.stack, style], ...rest });
|
|
66
|
+
return _jsx(View, { style: [s.stack, align != null && { alignItems: ALINHAR_COLUNA[align] }, style], ...rest });
|
|
66
67
|
}
|
|
67
68
|
const ALINHAR = { start: "flex-start", center: "center", end: "flex-end", baseline: "baseline" };
|
|
68
69
|
const JUSTIFICAR = { start: "flex-start", center: "center", end: "flex-end", between: "space-between" };
|
|
@@ -93,18 +94,44 @@ export function Cluster({ align, justify, wrap, style, ...rest }) {
|
|
|
93
94
|
* sozinho e ESTICA a última linha. **No React Native não existe CSS Grid**: o layout é flexbox e
|
|
94
95
|
* nada mais (medido no contrato do `react-native`; não há `display:grid`).
|
|
95
96
|
*
|
|
96
|
-
* O que se faz aqui é o mais próximo honesto: `flexWrap` com uma largura mínima por filho. A
|
|
97
|
-
* diferença visível é uma
|
|
98
|
-
*
|
|
99
|
-
*
|
|
97
|
+
* ~~O que se faz aqui é o mais próximo honesto: `flexWrap` com uma largura mínima por filho. A
|
|
98
|
+
* diferença visível é uma só (…) os itens da última linha não esticam para preencher a sobra.~~
|
|
99
|
+
* **E11 (0.12.1):** a diferença era maior do que a declarada — nenhuma linha repartia a sobra.
|
|
100
|
+
* Com `minColumnWidth={150}` numa linha de 372 ficavam duas colunas de 150 e 56 vazios (medido no
|
|
101
|
+
* Yoga). Agora a grade mede a própria largura (`onLayout`) e faz a conta do `auto-fill` da web:
|
|
102
|
+
* cabem `⌊(largura + vão) / (mínimo + vão)⌋` colunas, e a sobra se reparte entre elas. Na última
|
|
103
|
+
* linha a célula continua do tamanho de UMA coluna, como na web. Antes da medida (o primeiro
|
|
104
|
+
* quadro), vale a largura mínima de sempre.
|
|
100
105
|
*
|
|
101
106
|
* O `min(…, 100%)` da web tem par aqui: `maxWidth: "100%"` no filho, para a coluna não estourar o
|
|
102
107
|
* contêiner quando o texto cresce — a mesma lição que a Fase 11 registrou no CSS.
|
|
103
108
|
*/
|
|
104
|
-
export function Grid({ minColumnWidth = 240, style, children, ...rest }) {
|
|
105
|
-
const
|
|
106
|
-
const
|
|
107
|
-
|
|
109
|
+
export function Grid({ minColumnWidth = 240, style, children, onLayout, ...rest }) {
|
|
110
|
+
const t = useAureaTokens();
|
|
111
|
+
const s = folha(t);
|
|
112
|
+
const [largura, setLargura] = React.useState(null);
|
|
113
|
+
const plano = (StyleSheet.flatten([s.grid, style]) ?? {});
|
|
114
|
+
const vao = numero(plano.columnGap) ?? numero(plano.gap) ?? t.size.space4;
|
|
115
|
+
// A largura por dentro: o `onLayout` dá a de fora, e o recuo e a borda do `style` saem dela.
|
|
116
|
+
const recuo = (numero(plano.paddingLeft) ?? numero(plano.paddingHorizontal) ?? numero(plano.padding) ?? 0)
|
|
117
|
+
+ (numero(plano.paddingRight) ?? numero(plano.paddingHorizontal) ?? numero(plano.padding) ?? 0)
|
|
118
|
+
+ (numero(plano.borderLeftWidth) ?? numero(plano.borderWidth) ?? 0)
|
|
119
|
+
+ (numero(plano.borderRightWidth) ?? numero(plano.borderWidth) ?? 0);
|
|
120
|
+
const celula = React.useMemo(() => {
|
|
121
|
+
if (largura == null || largura <= 0) {
|
|
122
|
+
return { flexGrow: 0, flexShrink: 1, flexBasis: minColumnWidth, minWidth: minColumnWidth, maxWidth: "100%" };
|
|
123
|
+
}
|
|
124
|
+
// `repeat(auto-fill, minmax(min(mínimo, 100%), 1fr))` da web, em conta.
|
|
125
|
+
const colunas = Math.max(1, Math.floor((largura + vao) / (minColumnWidth + vao)));
|
|
126
|
+
const coluna = (largura - vao * (colunas - 1)) / colunas;
|
|
127
|
+
// ⚠ A base vai ARREDONDADA PARA BAIXO e o teto é o número exato: o motor arredonda cada
|
|
128
|
+
// largura ao pixel do aparelho, e duas colunas exatas podiam somar um fio a mais que a linha
|
|
129
|
+
// e cair uma para a linha de baixo. Com a base menor elas sempre cabem, e o `flexGrow` as
|
|
130
|
+
// leva até o teto — a linha cheia fecha certo, e a célula sozinha da última linha para no
|
|
131
|
+
// tamanho de uma coluna.
|
|
132
|
+
return { flexGrow: 1, flexShrink: 1, flexBasis: Math.floor(coluna), maxWidth: coluna, minWidth: 0 };
|
|
133
|
+
}, [largura, minColumnWidth, vao]);
|
|
134
|
+
return (_jsx(View, { style: [s.grid, style], ...rest, onLayout: (e) => { setLargura(e.nativeEvent.layout.width - recuo); onLayout?.(e); }, children: React.Children.map(children, (filho) => {
|
|
108
135
|
if (!React.isValidElement(filho))
|
|
109
136
|
return filho;
|
|
110
137
|
// 🔴 O `flexGrow: 1` É O ITEM C14, e ele existe porque a célula NÃO basta.
|
|
@@ -128,6 +155,8 @@ export function Grid({ minColumnWidth = 240, style, children, ...rest }) {
|
|
|
128
155
|
return _jsx(View, { style: celula, children: estica });
|
|
129
156
|
}) }));
|
|
130
157
|
}
|
|
158
|
+
/** O número de um estilo, ou nada — porcentagem e `"auto"` não entram na conta da grade. */
|
|
159
|
+
const numero = (v) => (typeof v === "number" ? v : undefined);
|
|
131
160
|
/**
|
|
132
161
|
* A linha de divisão do sistema. Mesma cor e mesma espessura do `.separator` da web.
|
|
133
162
|
*
|
package/dist/numero.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { type StyleProp, type ViewStyle } from "react-native";
|
|
3
|
+
import type { IconName } from "./icon-names.js";
|
|
3
4
|
import { type AureaFieldSize } from "./inputs.js";
|
|
4
5
|
/** Os separadores de um locale, derivados de um número-sonda. */
|
|
5
6
|
export type AureaSeparadores = {
|
|
@@ -71,13 +72,12 @@ export interface NumberFieldProps {
|
|
|
71
72
|
keyboardType?: "numeric" | "decimal-pad" | "number-pad" | "numbers-and-punctuation";
|
|
72
73
|
/** Os glifos dos botões. Registre-os, ou passe `false` para tirar os dois. */
|
|
73
74
|
icons?: {
|
|
74
|
-
increment:
|
|
75
|
-
decrement:
|
|
75
|
+
increment: IconName;
|
|
76
|
+
decrement: IconName;
|
|
76
77
|
} | false;
|
|
77
78
|
style?: StyleProp<ViewStyle>;
|
|
78
79
|
testID?: string;
|
|
79
80
|
}
|
|
80
|
-
type IconNameLocal = string;
|
|
81
81
|
/**
|
|
82
82
|
* O número que se digita OU se empurra de um em um.
|
|
83
83
|
*
|
|
@@ -116,4 +116,3 @@ type IconNameLocal = string;
|
|
|
116
116
|
* partir de outros dois funcionar.
|
|
117
117
|
*/
|
|
118
118
|
export declare function NumberField({ value, defaultValue, onValueChange, min, max, step, format, locale, disabled, readOnly, size, fullWidth, label, placeholder, keyboardType, icons, style, testID, }: NumberFieldProps): React.JSX.Element;
|
|
119
|
-
export {};
|
package/dist/overlays.js
CHANGED
|
@@ -57,10 +57,10 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
57
57
|
// mesma função interna com uma largura diferente.
|
|
58
58
|
import * as React from "react";
|
|
59
59
|
import { Animated, Easing, Modal, PanResponder, Pressable, ScrollView, View, } from "react-native";
|
|
60
|
-
import { SafeAreaView } from "react-native-safe-area-context";
|
|
61
60
|
import { Button } from "./actions.js";
|
|
62
61
|
import { criarFolha } from "./estilos.js";
|
|
63
62
|
import { IconButton } from "./actions.js";
|
|
63
|
+
import { RecuoDaFolha } from "./screen.js";
|
|
64
64
|
import { Text } from "./text.js";
|
|
65
65
|
import { useAureaStrings, useAureaTokens, ForaDaMarca } from "./theme.js";
|
|
66
66
|
import { useReduceMotion } from "./movimento.js";
|
|
@@ -294,5 +294,5 @@ export function BottomSheet({ open, title, children, onClose, grabber = true, dr
|
|
|
294
294
|
}).start();
|
|
295
295
|
},
|
|
296
296
|
}), [draggable, onClose, arrasto, reduzir, t.easing.easeEmphasized]);
|
|
297
|
-
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(
|
|
297
|
+
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, {})] })] }) }) }));
|
|
298
298
|
}
|
package/dist/screen.d.ts
CHANGED
|
@@ -66,3 +66,13 @@ export interface ScreenProps extends ViewProps {
|
|
|
66
66
|
* nenhum). Quem exige o provider são os HOOKS — e quem usa `react-navigation` já o tem.
|
|
67
67
|
*/
|
|
68
68
|
export declare function Screen({ edges, padded, scroll, background, onRefresh, refreshing, footer, style, children, ...rest }: ScreenProps): React.JSX.Element;
|
|
69
|
+
/** O recuo de baixo do sistema (barra de botões ou de gestos), em dp. */
|
|
70
|
+
export declare function useRecuoDoSistema(): number;
|
|
71
|
+
/**
|
|
72
|
+
* O espaço do recuo do sistema no fim de uma folha de baixo. Uso interno.
|
|
73
|
+
* `comTeclado`: com o teclado aberto a folha sobe acima dele e deixa de ficar atrás da barra do
|
|
74
|
+
* sistema, e o espaço vai a zero — senão sobraria uma faixa vazia entre a lista e o teclado.
|
|
75
|
+
*/
|
|
76
|
+
export declare function RecuoDaFolha({ comTeclado }: {
|
|
77
|
+
comTeclado?: boolean;
|
|
78
|
+
}): React.JSX.Element;
|
package/dist/screen.js
CHANGED
|
@@ -1,6 +1,45 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
// Aurea nativo — `Screen`, a casca de uma tela.
|
|
3
|
+
//
|
|
4
|
+
// **NÃO TEM PAR NA WEB, e a razão é a plataforma.** Lá o `<body>` já é a tela: o navegador
|
|
5
|
+
// desenha a barra de status, o browser resolve o entalhe, e a única regra da Aurea é
|
|
6
|
+
// `body { background: var(--background) }` (medido no `packages/core/src/aurea.css`). No React
|
|
7
|
+
// Native não há `<body>`: a raiz de cada tela é um `View` que alguém precisa mandar preencher,
|
|
8
|
+
// pintar e afastar do entalhe.
|
|
9
|
+
//
|
|
10
|
+
// ── A DEPENDÊNCIA, E POR QUE ELA EXISTE ──────────────────────────────────────────────────────
|
|
11
|
+
// Este é o único componente do Lote 1 que precisou de dependência nova, e por isso ele parou o
|
|
12
|
+
// lote e voltou para o Victor (`BUILDING.md` §3). Ele autorizou o peer em 03/09/2026.
|
|
13
|
+
//
|
|
14
|
+
// O que foi medido antes de pedir:
|
|
15
|
+
// • o `SafeAreaView` do PRÓPRIO React Native está **deprecado** desde a 0.81 — e nunca fez nada
|
|
16
|
+
// no Android, onde ele é literalmente um `View`;
|
|
17
|
+
// • o substituto de fato é `react-native-safe-area-context` (**MIT**), que é o que o
|
|
18
|
+
// `react-navigation` e o `expo-router` já arrastam. Adotá-lo como peer não adiciona peso ao
|
|
19
|
+
// app: declara o que já ia estar lá;
|
|
20
|
+
// • ele é **módulo nativo** (`android/`, `ios/`, `common/cpp/` no tarball) — vem embutido no
|
|
21
|
+
// Expo Go, então o caminho de smoke test continua valendo.
|
|
22
|
+
//
|
|
23
|
+
// ── POR QUE `SafeAreaView` E NÃO `useSafeAreaInsets` ─────────────────────────────────────────
|
|
24
|
+
// A biblioteca oferece os dois. O hook devolve números e deixa você somar; o componente resolve
|
|
25
|
+
// no lado NATIVO. Escolhi o componente, e a razão saiu da leitura do fonte C++
|
|
26
|
+
// (`RNCSafeAreaViewShadowNode.cpp`, versão 5.9.1), não de preferência:
|
|
27
|
+
//
|
|
28
|
+
// getEdgeValue: "off" -> só o seu padding
|
|
29
|
+
// "maximum" -> max(inset, padding)
|
|
30
|
+
// qualquer outro (o padrão é "additive") -> inset + padding
|
|
31
|
+
//
|
|
32
|
+
// Ou seja: o inset **SOMA** ao padding que a folha da Aurea já pôs, no cálculo de layout do Yoga,
|
|
33
|
+
// antes do primeiro frame. Com o hook, o padding sairia de um `useState` que só tem valor DEPOIS
|
|
34
|
+
// que o nativo avisa — um quadro com o conteúdo embaixo do entalhe, e um re-render a cada
|
|
35
|
+
// rotação. O componente não tem esse quadro.
|
|
36
|
+
//
|
|
37
|
+
// ⚠ Um limite que o mesmo fonte declara e que herdamos: **padding em porcentagem não é
|
|
38
|
+
// suportado** na soma. Os tokens da Aurea são todos numéricos (dp), então isto não morde aqui —
|
|
39
|
+
// mas morde quem passar `padding: "5%"` no `style`.
|
|
40
|
+
import * as React from "react";
|
|
41
|
+
import { Keyboard, RefreshControl, ScrollView, View } from "react-native";
|
|
42
|
+
import { SafeAreaInsetsContext, SafeAreaView, initialWindowMetrics } from "react-native-safe-area-context";
|
|
4
43
|
import { useBottomNavSpace } from "./barranav.js";
|
|
5
44
|
import { criarFolha } from "./estilos.js";
|
|
6
45
|
import { useAureaTokens } from "./theme.js";
|
|
@@ -95,3 +134,46 @@ function Rodape({ dentroDoRespiro, pegaABorda, respiroDaBarra, children }) {
|
|
|
95
134
|
return _jsx(View, { style: recuo, children: children });
|
|
96
135
|
return _jsx(SafeAreaView, { edges: ["bottom"], style: recuo, children: children });
|
|
97
136
|
}
|
|
137
|
+
// ── E10 · O RECUO DAS FOLHAS DE BAIXO (`Select`, `Combobox`, `BottomSheet`) ──────────────────
|
|
138
|
+
// 🔴 DENTRO DE UM `Modal`, O `SafeAreaView` NÃO SERVE, e a razão foi lida no fonte da biblioteca
|
|
139
|
+
// (`SafeAreaView.kt` e `SafeAreaUtils.kt`, versão 5.9.1), não presumida:
|
|
140
|
+
//
|
|
141
|
+
// findProvider(): sobe pelos pais atrás de um `SafeAreaProvider`; sem achar, usa A SI MESMO.
|
|
142
|
+
// getSafeAreaInsets(view): if (view.height == 0) return null // "ainda sem layout"
|
|
143
|
+
//
|
|
144
|
+
// O `Modal` é outra janela do Android: o `SafeAreaProvider` do app não é pai de nada lá dentro.
|
|
145
|
+
// Então a peça mede a si mesma — e a da 0.11.0 era VAZIA, de altura 0, esperando o recuo para
|
|
146
|
+
// ganhar altura. Nunca ganhava: o recuo ficava em zero e o último item, atrás dos botões do
|
|
147
|
+
// sistema (achado E10 do app).
|
|
148
|
+
//
|
|
149
|
+
// A saída é a do HeroUI Native (`select.tsx`, `useSafeAreaInsets`): o número vem do CONTEXTO
|
|
150
|
+
// do React, que atravessa o `Modal`, e vira um espaço de altura conhecida no fim da folha. Sem
|
|
151
|
+
// `SafeAreaProvider` no app, vale a medida da abertura (`initialWindowMetrics`), que a
|
|
152
|
+
// biblioteca calcula sem provider — e o componente não quebra quem não tem provider.
|
|
153
|
+
// ⚠ As três folhas cobrem a tela toda (`navigationBarTranslucent`): é o que faz o recuo do
|
|
154
|
+
// contexto, que é o da janela do app, ser exatamente o que a folha fica atrás da barra.
|
|
155
|
+
/** O recuo de baixo do sistema (barra de botões ou de gestos), em dp. */
|
|
156
|
+
export function useRecuoDoSistema() {
|
|
157
|
+
const doContexto = React.useContext(SafeAreaInsetsContext);
|
|
158
|
+
return (doContexto ?? initialWindowMetrics?.insets)?.bottom ?? 0;
|
|
159
|
+
}
|
|
160
|
+
/** O teclado está aberto? Pelos avisos do próprio React Native. */
|
|
161
|
+
function useTecladoAberto() {
|
|
162
|
+
const [aberto, setAberto] = React.useState(false);
|
|
163
|
+
React.useEffect(() => {
|
|
164
|
+
const mostra = Keyboard.addListener("keyboardDidShow", () => setAberto(true));
|
|
165
|
+
const esconde = Keyboard.addListener("keyboardDidHide", () => setAberto(false));
|
|
166
|
+
return () => { mostra.remove(); esconde.remove(); };
|
|
167
|
+
}, []);
|
|
168
|
+
return aberto;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* O espaço do recuo do sistema no fim de uma folha de baixo. Uso interno.
|
|
172
|
+
* `comTeclado`: com o teclado aberto a folha sobe acima dele e deixa de ficar atrás da barra do
|
|
173
|
+
* sistema, e o espaço vai a zero — senão sobraria uma faixa vazia entre a lista e o teclado.
|
|
174
|
+
*/
|
|
175
|
+
export function RecuoDaFolha({ comTeclado = false }) {
|
|
176
|
+
const recuo = useRecuoDoSistema();
|
|
177
|
+
const teclado = useTecladoAberto();
|
|
178
|
+
return _jsx(View, { style: { height: comTeclado && teclado ? 0 : recuo } });
|
|
179
|
+
}
|
package/dist/strings.d.ts
CHANGED
|
@@ -62,6 +62,9 @@ export interface AureaStrings {
|
|
|
62
62
|
comboboxEmpty: string;
|
|
63
63
|
/** O botão que desfaz a escolha do `Combobox`. Mesmo nome da web. */
|
|
64
64
|
comboboxClear: string;
|
|
65
|
+
/** O nome do `ThemeToggle` quando ele leva ao tema escuro, e ao claro. Mesmos nomes da web. */
|
|
66
|
+
themeToDark: string;
|
|
67
|
+
themeToLight: string;
|
|
65
68
|
/** O que o `Combobox` anuncia enquanto a busca remota não voltou. Mesmo nome da web. */
|
|
66
69
|
comboboxLoading: string;
|
|
67
70
|
/**
|
package/dist/strings.js
CHANGED
|
@@ -50,6 +50,8 @@ export const defaultStrings = {
|
|
|
50
50
|
decrement: "Decrease",
|
|
51
51
|
comboboxEmpty: "No results",
|
|
52
52
|
comboboxClear: "Clear selection",
|
|
53
|
+
themeToDark: "Switch to dark theme",
|
|
54
|
+
themeToLight: "Switch to light theme",
|
|
53
55
|
comboboxLoading: "Loading…",
|
|
54
56
|
comboboxSearch: "Search",
|
|
55
57
|
searchClear: "Clear search",
|
|
@@ -88,6 +90,8 @@ export const ptBR = {
|
|
|
88
90
|
decrement: "Diminuir",
|
|
89
91
|
comboboxEmpty: "Nenhum resultado",
|
|
90
92
|
comboboxClear: "Limpar seleção",
|
|
93
|
+
themeToDark: "Mudar para o tema escuro",
|
|
94
|
+
themeToLight: "Mudar para o tema claro",
|
|
91
95
|
comboboxLoading: "Carregando…",
|
|
92
96
|
comboboxSearch: "Buscar",
|
|
93
97
|
searchClear: "Limpar busca",
|
package/dist/text.d.ts
CHANGED
|
@@ -9,7 +9,18 @@ export type AureaTextFont = "ui" | "editorial" | "code";
|
|
|
9
9
|
/** O que a cor SIGNIFICA. Mesmo vocabulário do `tone` do Button (ADR-0044). */
|
|
10
10
|
export type AureaTextTone = "default" | "muted" | "subtle" | "primary" | "link" | "danger" | "success" | "warning" | "info";
|
|
11
11
|
export type AureaTextLeading = "none" | "tight" | "normal" | "relaxed";
|
|
12
|
+
/**
|
|
13
|
+
* O PAPEL do texto — B-02, 25/09/2026, no molde do `Typography` do HeroUI Native 1.0.10. Uma lista
|
|
14
|
+
* fechada: título 1–6, texto, texto pequeno, texto mínimo e código.
|
|
15
|
+
*/
|
|
16
|
+
export type AureaTextType = "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "body" | "body-sm" | "body-xs" | "code";
|
|
12
17
|
export interface TextProps extends TextPropsRN {
|
|
18
|
+
/**
|
|
19
|
+
* O papel (B-02). Dá tamanho, peso, entrelinha e fonte de uma vez, com os números do HeroUI
|
|
20
|
+
* Native — os MESMOS da web, sem o degrau a mais do `size`. Uma opção solta passada junto
|
|
21
|
+
* (`size`, `weight`…) continua valendo por cima dele.
|
|
22
|
+
*/
|
|
23
|
+
type?: AureaTextType;
|
|
13
24
|
size?: AureaTextSize;
|
|
14
25
|
weight?: AureaTextWeight;
|
|
15
26
|
font?: AureaTextFont;
|
|
@@ -30,4 +41,30 @@ export interface TextProps extends TextPropsRN {
|
|
|
30
41
|
* próprias. Pedir peso 600 por `fontWeight` devolveria o Regular sintetizado — **em silêncio**.
|
|
31
42
|
* Quem escolhe a fonte aqui é o `fontFamily`, com o nome PostScript que o provider já resolveu.
|
|
32
43
|
*/
|
|
33
|
-
export declare function Text({ size, weight, font, tone, leading, italic, align, tracking, style, ...rest }: TextProps): React.JSX.Element;
|
|
44
|
+
export declare function Text({ type, size, weight: pesoPedido, font: fontePedida, tone, leading, italic, align, tracking: trackingPedido, style, ...rest }: TextProps): React.JSX.Element;
|
|
45
|
+
export type AureaTypographyColor = "default" | "muted";
|
|
46
|
+
export type AureaTypographyWeight = "normal" | "medium" | "semibold" | "bold";
|
|
47
|
+
export type AureaTypographyAlign = "start" | "center" | "end" | "justify";
|
|
48
|
+
interface AureaTypographyBase extends Omit<TextPropsRN, "children"> {
|
|
49
|
+
color?: AureaTypographyColor;
|
|
50
|
+
weight?: AureaTypographyWeight;
|
|
51
|
+
/** `start`/`end` viram `left`/`right`, que o React Native já espelha em RTL (nota do HeroUI Native). */
|
|
52
|
+
align?: AureaTypographyAlign;
|
|
53
|
+
/** Uma linha só, cortada com reticências (`numberOfLines={1}`). */
|
|
54
|
+
truncate?: boolean;
|
|
55
|
+
children?: React.ReactNode;
|
|
56
|
+
}
|
|
57
|
+
export interface HeadingProps extends AureaTypographyBase {
|
|
58
|
+
type?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
|
|
59
|
+
}
|
|
60
|
+
/** Título. Marca `accessibilityRole="header"` sozinho, como o HeroUI Native. */
|
|
61
|
+
export declare function Heading({ type, accessibilityRole, ...rest }: HeadingProps): React.JSX.Element;
|
|
62
|
+
export interface ParagraphProps extends AureaTypographyBase {
|
|
63
|
+
type?: "body" | "body-sm" | "body-xs";
|
|
64
|
+
}
|
|
65
|
+
/** Parágrafo de texto corrido, em três tamanhos: 16, 14 e 12. */
|
|
66
|
+
export declare function Paragraph({ type, ...rest }: ParagraphProps): React.JSX.Element;
|
|
67
|
+
export type CodeProps = AureaTypographyBase;
|
|
68
|
+
/** Um trecho curto de código no meio da frase, com a fonte mono e o fundo do `code` da web. */
|
|
69
|
+
export declare function Code(props: CodeProps): React.JSX.Element;
|
|
70
|
+
export {};
|
package/dist/text.js
CHANGED
|
@@ -66,6 +66,15 @@ const TAMANHO = {
|
|
|
66
66
|
const ENTRELINHA = {
|
|
67
67
|
none: "leadingNone", tight: "leadingTight", normal: "leadingNormal", relaxed: "leadingRelaxed",
|
|
68
68
|
};
|
|
69
|
+
const titulo = (tamanho) => ({ tamanho, peso: 600, entrelinha: "leadingTight", fonte: "ui", junto: true });
|
|
70
|
+
const PAPEL = {
|
|
71
|
+
h1: titulo("text4xl"), h2: titulo("text3xl"), h3: titulo("text2xl"),
|
|
72
|
+
h4: titulo("textXl"), h5: titulo("textLg"), h6: titulo("textBase"),
|
|
73
|
+
body: { tamanho: "textBase", peso: 400, entrelinha: "leadingRelaxed", fonte: "ui" },
|
|
74
|
+
"body-sm": { tamanho: "textSm", peso: 400, entrelinha: "leadingRelaxed", fonte: "ui" },
|
|
75
|
+
"body-xs": { tamanho: "textXs", peso: 400, entrelinha: "leadingRelaxed", fonte: "ui" },
|
|
76
|
+
code: { tamanho: "textSm", peso: 400, entrelinha: "leadingNormal", fonte: "code" },
|
|
77
|
+
};
|
|
69
78
|
const COR = {
|
|
70
79
|
default: "foreground", muted: "mutedForeground", subtle: "subtleForeground",
|
|
71
80
|
// ⚠ `primary` e `link` são o MESMO amarelo em matiz, e NÃO são intercambiáveis.
|
|
@@ -94,12 +103,22 @@ const folha = criarFolha((t) => {
|
|
|
94
103
|
* próprias. Pedir peso 600 por `fontWeight` devolveria o Regular sintetizado — **em silêncio**.
|
|
95
104
|
* Quem escolhe a fonte aqui é o `fontFamily`, com o nome PostScript que o provider já resolveu.
|
|
96
105
|
*/
|
|
97
|
-
export function Text({ size
|
|
106
|
+
export function Text({ type, size, weight: pesoPedido, font: fontePedida, tone = "default", leading, italic = false, align, tracking: trackingPedido, style, ...rest }) {
|
|
98
107
|
const t = useAureaTokens();
|
|
99
108
|
const s = folha(t);
|
|
100
109
|
const sobreAMarca = useSobreAMarca();
|
|
110
|
+
// Sem `type`, os padrões de sempre (`md`, 400, `ui`, `normal`) — nada muda para quem já usa.
|
|
111
|
+
const papel = type ? PAPEL[type] : undefined;
|
|
112
|
+
const weight = pesoPedido ?? papel?.peso ?? 400;
|
|
113
|
+
const font = fontePedida ?? papel?.fonte ?? "ui";
|
|
114
|
+
const tracking = trackingPedido ?? (papel?.junto ? "tight" : undefined);
|
|
101
115
|
const proprio = React.useMemo(() => {
|
|
102
|
-
const fontSize =
|
|
116
|
+
const fontSize = size
|
|
117
|
+
? t.size[TAMANHO[size]] ?? t.size.textBase
|
|
118
|
+
: papel ? t.size[papel.tamanho] ?? t.size.textBase : t.size[TAMANHO.md];
|
|
119
|
+
const razao = leading
|
|
120
|
+
? t.size[ENTRELINHA[leading]] ?? t.size.leadingNormal
|
|
121
|
+
: papel ? t.size[papel.entrelinha] ?? t.size.leadingNormal : t.size.leadingNormal;
|
|
103
122
|
const escala = t.font[font];
|
|
104
123
|
// O itálico é UMA fonte, não um estilo sintético: `fontStyle:"italic"` faria o sistema
|
|
105
124
|
// inclinar o desenho reto, e o Plex tem itálico desenhado. Só o `ui` o tem — nos outros
|
|
@@ -109,13 +128,18 @@ export function Text({ size = "md", weight = 400, font = "ui", tone = "default",
|
|
|
109
128
|
fontFamily: familia,
|
|
110
129
|
fontSize,
|
|
111
130
|
// `lineHeight` no RN é ABSOLUTO (dp), não múltiplo — os tokens de entrelinha são razão.
|
|
112
|
-
lineHeight: fontSize *
|
|
131
|
+
lineHeight: fontSize * razao,
|
|
113
132
|
// `letterSpacing` também é absoluto: o token é razão de `em` e multiplica o tamanho.
|
|
114
133
|
// É a impedância que a Etapa 2 mediu e resolveu emitindo razão em vez de dp.
|
|
115
134
|
...(tracking ? { letterSpacing: fontSize * t.tracking[`tracking${tracking[0].toUpperCase()}${tracking.slice(1)}`] } : null),
|
|
116
135
|
...(align ? { textAlign: align } : null),
|
|
136
|
+
// O código leva a pele do `code` da web: fundo, canto e um recheio pequeno (HeroUI Native).
|
|
137
|
+
...(type === "code" ? {
|
|
138
|
+
alignSelf: "flex-start", backgroundColor: t.color.surface2, borderRadius: t.size.radiusXs,
|
|
139
|
+
paddingHorizontal: t.size.space1, paddingVertical: t.size.space05,
|
|
140
|
+
} : null),
|
|
117
141
|
};
|
|
118
|
-
}, [t, size, weight, font, leading, italic, align, tracking]);
|
|
142
|
+
}, [t, type, papel, size, weight, font, leading, italic, align, tracking]);
|
|
119
143
|
// 🔴 SOBRE UMA SUPERFÍCIE DA MARCA A COR É FORÇADA, e ela vence até o tom explícito.
|
|
120
144
|
// Medido contra o `primary` nos dois temas: texto comum dá **1,83 no escuro**, esmaecido
|
|
121
145
|
// **1,35**, e `danger` menos ainda. **Nenhum tom alcança os 4,5 da norma sobre o amarelo** —
|
|
@@ -126,3 +150,20 @@ export function Text({ size = "md", weight = 400, font = "ui", tone = "default",
|
|
|
126
150
|
// ⚠ E `style` continua por último de propósito: quem passa cor à mão assume a conta.
|
|
127
151
|
return _jsx(TextRN, { style: [s[tone], sobreAMarca && { color: sobreAMarca.tinta }, proprio, style], ...rest });
|
|
128
152
|
}
|
|
153
|
+
const PESO = { normal: 400, medium: 500, semibold: 600, bold: 700 };
|
|
154
|
+
const ALINHA = { start: "left", center: "center", end: "right", justify: "justify" };
|
|
155
|
+
function papelDe(type, { color, weight, align, truncate, style, ...rest }) {
|
|
156
|
+
return (_jsx(Text, { ...rest, type: type, tone: color === "muted" ? "muted" : "default", weight: weight ? PESO[weight] : undefined, numberOfLines: truncate ? 1 : rest.numberOfLines, style: [align ? { textAlign: ALINHA[align] } : null, style] }));
|
|
157
|
+
}
|
|
158
|
+
/** Título. Marca `accessibilityRole="header"` sozinho, como o HeroUI Native. */
|
|
159
|
+
export function Heading({ type = "h1", accessibilityRole = "header", ...rest }) {
|
|
160
|
+
return papelDe(type, { accessibilityRole, ...rest });
|
|
161
|
+
}
|
|
162
|
+
/** Parágrafo de texto corrido, em três tamanhos: 16, 14 e 12. */
|
|
163
|
+
export function Paragraph({ type = "body", ...rest }) {
|
|
164
|
+
return papelDe(type, rest);
|
|
165
|
+
}
|
|
166
|
+
/** Um trecho curto de código no meio da frase, com a fonte mono e o fundo do `code` da web. */
|
|
167
|
+
export function Code(props) {
|
|
168
|
+
return papelDe("code", props);
|
|
169
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aurea-uds/native",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.1",
|
|
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.
|
|
54
|
+
"@aurea-uds/tokens": "^0.12.1"
|
|
55
55
|
},
|
|
56
56
|
"peerDependencies": {
|
|
57
57
|
"@react-native-community/datetimepicker": ">=8",
|