@aurea-uds/native 0.9.0 → 0.10.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 CHANGED
@@ -852,6 +852,16 @@ poda nenhuma: módulo que não é importado não entra no grafo.
852
852
  Os nomes são **os mesmos do sprite da web**, e um gate cobra isso (check 38): o que `<Icon name>`
853
853
  desenha lá, `icons/<nome>` desenha aqui.
854
854
 
855
+ **Um glifo próprio** (o logotipo do app) sai de `criarGlifo`, sem o app importar o
856
+ `react-native-svg`: retângulos, círculos e caminhos, preenchidos ou a traço. A tinta usa os nomes
857
+ do SVG, e `"currentColor"` é a cor do `Icon`:
858
+
859
+ ```tsx
860
+ const Logo = criarGlifo({fill: "none", stroke: "currentColor", strokeWidth: 2,
861
+ strokeLinecap: "round", paths: ["M…"]});
862
+ const ICONES = criarRegistroDeIcones({...OS_DO_APP, logo: Logo});
863
+ ```
864
+
855
865
  ## O que este pacote não faz
856
866
 
857
867
  - **Não promete paridade** com a web. O React Native não tem `<p>`, cascata de tipografia,
package/dist/icon.d.ts CHANGED
@@ -13,10 +13,25 @@ export type AureaIconRegistry = Readonly<Record<IconName, AureaIconComponent>>;
13
13
  * render invalidaria o `useMemo` de todo componente que o recebe.
14
14
  */
15
15
  export declare const criarRegistroDeIcones: <T extends AureaIconRegistry>(r: T) => T;
16
- /** Uma forma do glifo. Sem `fill`, ela pinta com a cor que o `Icon` passar (a do tema, por padrão). */
16
+ /**
17
+ * A tinta de uma forma. Sem `fill`, ela pinta com a cor que o `Icon` passar (a do tema, por
18
+ * padrão). Os nomes são os do SVG, para quem copia de um arquivo `.svg` copiar sem traduzir.
19
+ *
20
+ * **`"currentColor"`** em `fill` ou `stroke` quer dizer "a cor do `Icon`", como na web — e é o que
21
+ * faz um desenho a traço trocar de cor com o tema.
22
+ */
17
23
  interface Pintura {
18
- /** Cor fixa desta forma, ou `"none"` para não pintar. Sem isto, a forma segue o `color`. */
24
+ /** Cor fixa desta forma, `"currentColor"`, ou `"none"` para não pintar. Sem isto, segue o `color`. */
19
25
  fill?: string;
26
+ /**
27
+ * Cor do TRAÇO. Sem isto não há traço. Desenho só de traço leva `fill: "none"`, como no SVG.
28
+ * R-05, a metade que faltava.
29
+ */
30
+ stroke?: string;
31
+ /** Espessura do traço, na unidade do `viewBox`: cresce e encolhe junto com o glifo. */
32
+ strokeWidth?: number;
33
+ strokeLinecap?: "butt" | "round" | "square";
34
+ strokeLinejoin?: "miter" | "round" | "bevel";
20
35
  }
21
36
  export interface AureaGlifoCaminho extends Pintura {
22
37
  d: string;
@@ -34,7 +49,11 @@ export interface AureaGlifoRetangulo extends Pintura {
34
49
  height: number;
35
50
  rx?: number;
36
51
  }
37
- export interface AureaGlifoDesenho {
52
+ /**
53
+ * A tinta declarada aqui vale para TODAS as formas, como os atributos no `<svg>` raiz de um
54
+ * arquivo. A tinta de cada forma vence a do desenho.
55
+ */
56
+ export interface AureaGlifoDesenho extends Pintura {
38
57
  /** Padrão `"0 0 32 32"`, a caixa dos glifos do Carbon. */
39
58
  viewBox?: string;
40
59
  rects?: readonly AureaGlifoRetangulo[];
@@ -48,6 +67,9 @@ export interface AureaGlifoDesenho {
48
67
  *
49
68
  * ```tsx
50
69
  * const Marca = criarGlifo({viewBox: "0 0 64 64", circles: [{cx: 32, cy: 32, r: 30}], paths: ["M…"]});
70
+ * // a traço: a tinta no desenho inteiro, como no `<svg>` raiz
71
+ * const Logo = criarGlifo({fill: "none", stroke: "currentColor", strokeWidth: 2,
72
+ * strokeLinecap: "round", paths: ["M…"]});
51
73
  * const ICONES = criarRegistroDeIcones({...OS_DO_APP, marca: Marca});
52
74
  * <Icon name="marca" size="xl" />
53
75
  * ```
package/dist/icon.js CHANGED
@@ -28,12 +28,30 @@ import { useAureaTokens } from "./theme.js";
28
28
  * render invalidaria o `useMemo` de todo componente que o recebe.
29
29
  */
30
30
  export const criarRegistroDeIcones = (r) => r;
31
+ /** `"currentColor"` vira a cor do `Icon`; o resto passa como veio. */
32
+ const tinta = (v, color) => (v === "currentColor" ? color : v);
33
+ /** A tinta final de uma forma: a dela, senão a do desenho, senão a cor do `Icon` no `fill`. */
34
+ function pintar(forma, desenho, color) {
35
+ const stroke = tinta(forma.stroke ?? desenho.stroke, color);
36
+ return {
37
+ fill: tinta(forma.fill ?? desenho.fill, color) ?? color,
38
+ ...(stroke !== undefined && {
39
+ stroke,
40
+ strokeWidth: forma.strokeWidth ?? desenho.strokeWidth,
41
+ strokeLinecap: forma.strokeLinecap ?? desenho.strokeLinecap,
42
+ strokeLinejoin: forma.strokeLinejoin ?? desenho.strokeLinejoin,
43
+ }),
44
+ };
45
+ }
31
46
  /**
32
47
  * Um glifo PRÓPRIO do app — um logotipo, por exemplo — desenhado pela Aurea a partir dos dados
33
48
  * do desenho. R-05, 24/09/2026.
34
49
  *
35
50
  * ```tsx
36
51
  * const Marca = criarGlifo({viewBox: "0 0 64 64", circles: [{cx: 32, cy: 32, r: 30}], paths: ["M…"]});
52
+ * // a traço: a tinta no desenho inteiro, como no `<svg>` raiz
53
+ * const Logo = criarGlifo({fill: "none", stroke: "currentColor", strokeWidth: 2,
54
+ * strokeLinecap: "round", paths: ["M…"]});
37
55
  * const ICONES = criarRegistroDeIcones({...OS_DO_APP, marca: Marca});
38
56
  * <Icon name="marca" size="xl" />
39
57
  * ```
@@ -51,9 +69,9 @@ export const criarRegistroDeIcones = (r) => r;
51
69
  */
52
70
  export function criarGlifo(desenho) {
53
71
  const { viewBox = "0 0 32 32", rects = [], circles = [], paths = [] } = desenho;
54
- const Glifo = ({ size = 32, color = "#000000" }) => (_jsxs(Svg, { width: size, height: size, viewBox: viewBox, children: [rects.map((r, i) => _jsx(Rect, { ...r, fill: r.fill ?? color }, `r${i}`)), circles.map((c, i) => _jsx(Circle, { ...c, fill: c.fill ?? color }, `c${i}`)), paths.map((p, i) => {
72
+ const Glifo = ({ size = 32, color = "#000000" }) => (_jsxs(Svg, { width: size, height: size, viewBox: viewBox, children: [rects.map((r, i) => _jsx(Rect, { ...r, ...pintar(r, desenho, color) }, `r${i}`)), circles.map((c, i) => _jsx(Circle, { ...c, ...pintar(c, desenho, color) }, `c${i}`)), paths.map((p, i) => {
55
73
  const c = typeof p === "string" ? { d: p } : p;
56
- return _jsx(Path, { ...c, fill: c.fill ?? color }, `p${i}`);
74
+ return _jsx(Path, { ...c, ...pintar(c, desenho, color) }, `p${i}`);
57
75
  })] }));
58
76
  return Glifo;
59
77
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@aurea-uds/native",
3
- "version": "0.9.0",
4
- "description": "React Native target for Aurea UDS: the theme x density provider, the first components and the Carbon icons, drawn on react-native-svg.",
3
+ "version": "0.10.1",
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",
7
7
  "design-system",
@@ -16,6 +16,10 @@
16
16
  "url": "git+https://github.com/victor1mor/aurea-uds.git",
17
17
  "directory": "packages/native"
18
18
  },
19
+ "homepage": "https://github.com/victor1mor/aurea-uds/tree/main/packages/native#readme",
20
+ "bugs": {
21
+ "url": "https://github.com/victor1mor/aurea-uds/issues"
22
+ },
19
23
  "publishConfig": {
20
24
  "access": "public"
21
25
  },
@@ -47,7 +51,7 @@
47
51
  "NOTICE"
48
52
  ],
49
53
  "dependencies": {
50
- "@aurea-uds/tokens": "^0.9.0"
54
+ "@aurea-uds/tokens": "^0.10.1"
51
55
  },
52
56
  "peerDependencies": {
53
57
  "@react-native-community/datetimepicker": ">=8",