@aurea-uds/react 0.29.0 → 0.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/graph.d.ts CHANGED
@@ -1,4 +1,21 @@
1
1
  import React, { type ReactNode } from "react";
2
+ import { type AureaIcon } from "./system.js";
3
+ import { type Borda } from "./graph-geometria.js";
4
+ export type GraphOrientation = "horizontal" | "vertical";
5
+ /**
6
+ * `simple` (a de sempre, sem dependência), `layered` (camadas, com contêineres por dentro), `tree`
7
+ * (árvore compacta) e `radial` (a raiz no centro, as linhas retas). As três últimas pedem o `elkjs`.
8
+ */
9
+ export type GraphLayout = "simple" | "layered" | "tree" | "radial";
10
+ export type GraphEdgeShape = "curve" | "step";
11
+ export type GraphPortSide = "top" | "right" | "bottom" | "left";
12
+ /** Uma porta do nó: uma alça com nome e lado (MNT-14). A aresta liga nela por `fromPort`/`toPort`. */
13
+ export interface GraphPort {
14
+ id: string;
15
+ side: GraphPortSide;
16
+ label?: string;
17
+ }
18
+ export type GraphTone = "neutral" | "info" | "success" | "warning" | "danger";
2
19
  export interface GraphNodeItem {
3
20
  id: string;
4
21
  label: string;
@@ -6,15 +23,90 @@ export interface GraphNodeItem {
6
23
  detail?: ReactNode;
7
24
  x?: number;
8
25
  y?: number;
26
+ /** O ícone do tipo, JUNTO do texto do tipo, nunca no lugar dele (MNT-07). Nome do sprite ou desenho do app. */
27
+ icon?: AureaIcon;
28
+ /** O selo de quantidade no canto (MNT-09): "20". `countLabel` é o que o leitor de tela ouve ("20 estações"). */
29
+ count?: number;
30
+ countLabel?: string;
31
+ /** O selo de estado, no outro canto (MNT-16): a palavra, e o tom só reforça. */
32
+ status?: {
33
+ label: string;
34
+ tone?: GraphTone;
35
+ };
36
+ ports?: GraphPort[];
37
+ /** A camada sugerida pelo app, contada de 0 (só na arrumação `layered`). */
38
+ layer?: number;
39
+ /** O CONTÊINER deste nó (site, andar, rack): um só. O contêiner é um nó como os outros, e vira
40
+ * a caixa em volta dos filhos, com o botão de fechar (MNT-16.6). VLAN não é contêiner: um
41
+ * equipamento está em várias — ela é filtro e destaque (`hiddenIds`, `highlight`). */
42
+ parentId?: string;
43
+ /** Começa FECHADO: o contêiner esconde o que tem dentro, e o nó com `collapsible` esconde a
44
+ * subárvore. Fechado, ele mostra quantos guarda (MNT-16.4 e 16.7). */
45
+ collapsed?: boolean;
46
+ /** Fixo no lugar: não arrasta, e "Reorganizar" não o move (MNT-13.4). */
47
+ pinned?: boolean;
48
+ /** `cloud` desenha o nó como nuvem: Internet, nuvem pública, site remoto (MNT-16.5). */
49
+ shape?: "box" | "cloud";
9
50
  }
51
+ export type GraphEdgePattern = "solid" | "dashed" | "dotted" | "double";
52
+ export type GraphEdgeWeight = "regular" | "thick" | "heavy";
53
+ export type GraphEdgeMark = "cross" | "dot" | "lock";
10
54
  export interface GraphEdgeItem {
11
55
  id?: string;
12
56
  from: string;
13
57
  to: string;
14
58
  label?: string;
15
59
  animated?: boolean;
60
+ /** A porta de cada ponta (MNT-14); sem ela, o lado de sempre. */
61
+ fromPort?: string;
62
+ toPort?: string;
63
+ /** O nome da porta escrito na PONTA da linha, perto do nó (MNT-14.3). */
64
+ sourceLabel?: string;
65
+ targetLabel?: string;
66
+ /** O desenho do traço, que diz o que a linha é SEM depender de cor (MNT-08 e MNT-15). */
67
+ pattern?: GraphEdgePattern;
68
+ weight?: GraphEdgeWeight;
69
+ mark?: GraphEdgeMark;
70
+ /** Um número no meio da linha: os membros de uma agregação (LAG). */
71
+ count?: number;
72
+ /** O nome desta espécie de linha na legenda automática (`legend`). */
73
+ legend?: string;
74
+ /** Quando dois rótulos se encostam, fica o de prioridade MAIOR; no empate, o que vem antes na
75
+ * lista (MNT-12.5). O nome da porta na ponta conta com a mesma prioridade da linha. */
76
+ priority?: number;
77
+ }
78
+ /** A arrumação para o app guardar (MNT-13.6): onde cada nó está e quais estão fixos. */
79
+ export interface GraphLayoutChange {
80
+ positions: Record<string, {
81
+ x: number;
82
+ y: number;
83
+ }>;
84
+ pinned: string[];
16
85
  }
17
- export declare function DependencyGraph({ nodes, edges, label, selectedId, onSelect, connectable, onConnect, onNodeMove, height, className, ...props }: {
86
+ export type GraphAlign = Borda;
87
+ /** O que o app pede ao mapa pelo `apiRef` (MNT-18 e MNT-19). */
88
+ export interface DependencyGraphApi {
89
+ fitView(): void;
90
+ zoomIn(): void;
91
+ zoomOut(): void;
92
+ focus(id: string): void;
93
+ /** O mapa como arquivo do draw.io (`.drawio`), com as posições e as dobras de agora. */
94
+ toDrawio(): string;
95
+ /** A foto do mapa inteiro, como `data:` URL. Pede o peer opcional `modern-screenshot`. */
96
+ toPng(): Promise<string>;
97
+ toSvg(): Promise<string>;
98
+ undo(): void;
99
+ redo(): void;
100
+ /** Alinha os nós escolhidos pela borda pedida. */
101
+ align(edge: GraphAlign): void;
102
+ /** Deixa os vãos iguais entre os escolhidos (três ou mais). */
103
+ distribute(axis: "horizontal" | "vertical"): void;
104
+ /** Volta à arrumação automática, menos os fixos. */
105
+ relayout(): void;
106
+ /** A arrumação de agora, no mesmo formato do `onLayoutChange`. */
107
+ getLayout(): GraphLayoutChange;
108
+ }
109
+ export interface DependencyGraphProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onSelect"> {
18
110
  nodes: GraphNodeItem[];
19
111
  edges: GraphEdgeItem[];
20
112
  label?: string;
@@ -24,6 +116,8 @@ export declare function DependencyGraph({ nodes, edges, label, selectedId, onSel
24
116
  onConnect?: (edge: {
25
117
  from: string;
26
118
  to: string;
119
+ fromPort?: string;
120
+ toPort?: string;
27
121
  }) => void;
28
122
  onNodeMove?: (id: string, pos: {
29
123
  x: number;
@@ -31,4 +125,64 @@ export declare function DependencyGraph({ nodes, edges, label, selectedId, onSel
31
125
  }) => void;
32
126
  height?: string;
33
127
  className?: string;
34
- } & Omit<React.HTMLAttributes<HTMLDivElement>, "onSelect">): React.JSX.Element;
128
+ /** `vertical` desenha de cima para baixo: a linha entra por cima e sai por baixo (MNT-06). */
129
+ orientation?: GraphOrientation;
130
+ /** `layered` arruma em camadas com o `elkjs` (peer opcional): menos cruzamento, raiz no topo (MNT-11). */
131
+ layout?: GraphLayout;
132
+ /** O nó do topo, na arrumação `layered`. */
133
+ rootId?: string;
134
+ /** `step` desenha a linha em ângulo reto, com o canto arredondado (MNT-10). */
135
+ edgeShape?: GraphEdgeShape;
136
+ /** As linhas entre o mesmo par viram uma só, com o número; o número abre e junta (MNT-12.4). */
137
+ groupParallel?: boolean;
138
+ /** A visão geral no canto, com o retângulo da parte que está na tela (MNT-18.1). */
139
+ minimap?: boolean;
140
+ /** Os botões de aproximar, afastar e caber na tela (MNT-18.1). */
141
+ controls?: boolean;
142
+ /** A legenda das espécies de linha, montada sozinha pelo `legend` de cada aresta (MNT-15). */
143
+ legend?: boolean;
144
+ /** Centraliza e marca este nó — o "ir até" de uma busca (MNT-18.2). */
145
+ focusId?: string | null;
146
+ /** Destaca um caminho (nós e arestas) e apaga o resto (MNT-18.3). */
147
+ highlight?: {
148
+ nodes?: string[];
149
+ edges?: string[];
150
+ } | null;
151
+ /** Com um nó escolhido, destaca ele e os vizinhos e apaga o resto (MNT-18.6). */
152
+ highlightNeighbors?: boolean;
153
+ /** Some com estes nós SEM refazer a arrumação: o resto fica onde estava (MNT-18.5). */
154
+ hiddenIds?: string[];
155
+ onNodeHover?: (id: string | null) => void;
156
+ onNodeContextMenu?: (id: string, point: {
157
+ x: number;
158
+ y: number;
159
+ }) => void;
160
+ onEdgeSelect?: (id: string) => void;
161
+ /** O texto do nó, independente do zoom (MNT-19.3). */
162
+ textSize?: "md" | "lg";
163
+ /** Linhas e bordas no tom da letra, e mais grossas (MNT-19.3). */
164
+ highContrast?: boolean;
165
+ /** Os comandos do mapa para o app: caber, aproximar, ir até, e exportar (MNT-18 e MNT-19). */
166
+ apiRef?: React.Ref<DependencyGraphApi>;
167
+ /**
168
+ * O MODO DE ARRUMAR (MNT-13): arrastar na área vazia faz o laço; Shift soma à escolha; arrastar
169
+ * move todos os escolhidos; a barra alinha, distribui, fixa, reorganiza, desfaz e refaz; as setas
170
+ * movem os escolhidos (com Shift, quatro passos). Desligado, é o mapa de leitura.
171
+ */
172
+ editable?: boolean;
173
+ /** A grade com encaixe do modo de arrumar. Ligada por padrão. */
174
+ grid?: boolean;
175
+ /** A arrumação mudou (arraste, alinhar, fixar, reorganizar, desfazer): guardar é do app (MNT-13.6). */
176
+ onLayoutChange?: (layout: GraphLayoutChange) => void;
177
+ /** Os nós escolhidos no modo de arrumar. Com UM escolhido, o `onSelect` também é chamado. */
178
+ onSelectionChange?: (ids: string[]) => void;
179
+ /** Os nós com subárvore ganham o botão de fechar e abrir (MNT-16.7). O contêiner sempre tem. */
180
+ collapsible?: boolean;
181
+ /** Um contêiner ou uma subárvore abriu ou fechou. */
182
+ onCollapseChange?: (id: string, collapsed: boolean) => void;
183
+ /** Desenha só o que está na tela (mapa muito grande, MNT-19.1). */
184
+ visibleOnly?: boolean;
185
+ /** O trabalhador que arruma FORA da tela principal (MNT-19.1). A receita de cada empacotador está no README. */
186
+ layoutWorker?: () => Worker;
187
+ }
188
+ export declare function DependencyGraph({ nodes, edges, label, selectedId, onSelect, connectable, onConnect, onNodeMove, height, className, orientation, layout, rootId, edgeShape, groupParallel, minimap, controls, legend, focusId, highlight, highlightNeighbors, hiddenIds, onNodeHover, onNodeContextMenu, onEdgeSelect, textSize, highContrast, apiRef, editable, grid, onLayoutChange, onSelectionChange, collapsible, onCollapseChange, visibleOnly, layoutWorker, style, ...props }: DependencyGraphProps): React.JSX.Element;