react-html-graph 1.0.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.
Files changed (110) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -0
  3. package/dist/calculations/index.d.ts +32 -0
  4. package/dist/calculations/index.d.ts.map +1 -0
  5. package/dist/calculations/index.js +247 -0
  6. package/dist/calculations/index.js.map +1 -0
  7. package/dist/calculations/types.d.ts +43 -0
  8. package/dist/calculations/types.d.ts.map +1 -0
  9. package/dist/calculations/types.js +2 -0
  10. package/dist/calculations/types.js.map +1 -0
  11. package/dist/context/connection-context.d.ts +3 -0
  12. package/dist/context/connection-context.d.ts.map +1 -0
  13. package/dist/context/connection-context.js +13 -0
  14. package/dist/context/connection-context.js.map +1 -0
  15. package/dist/context/error-context.d.ts +3 -0
  16. package/dist/context/error-context.d.ts.map +1 -0
  17. package/dist/context/error-context.js +5 -0
  18. package/dist/context/error-context.js.map +1 -0
  19. package/dist/context/graph-context.d.ts +3 -0
  20. package/dist/context/graph-context.d.ts.map +1 -0
  21. package/dist/context/graph-context.js +8 -0
  22. package/dist/context/graph-context.js.map +1 -0
  23. package/dist/context/graph-root-context.d.ts +7 -0
  24. package/dist/context/graph-root-context.d.ts.map +1 -0
  25. package/dist/context/graph-root-context.js +8 -0
  26. package/dist/context/graph-root-context.js.map +1 -0
  27. package/dist/example/App.css +39 -0
  28. package/dist/example/App.d.ts +3 -0
  29. package/dist/example/App.d.ts.map +1 -0
  30. package/dist/example/App.js +7 -0
  31. package/dist/example/App.js.map +1 -0
  32. package/dist/example/graph-teste.d.ts +2 -0
  33. package/dist/example/graph-teste.d.ts.map +1 -0
  34. package/dist/example/graph-teste.js +205 -0
  35. package/dist/example/graph-teste.js.map +1 -0
  36. package/dist/example/index.css +48 -0
  37. package/dist/example/reportWebVitals.d.ts +4 -0
  38. package/dist/example/reportWebVitals.d.ts.map +1 -0
  39. package/dist/example/reportWebVitals.js +13 -0
  40. package/dist/example/reportWebVitals.js.map +1 -0
  41. package/dist/graph/index.d.ts +11 -0
  42. package/dist/graph/index.d.ts.map +1 -0
  43. package/dist/graph/index.js +161 -0
  44. package/dist/graph/index.js.map +1 -0
  45. package/dist/graph/viewbox.d.ts +9 -0
  46. package/dist/graph/viewbox.d.ts.map +1 -0
  47. package/dist/graph/viewbox.js +30 -0
  48. package/dist/graph/viewbox.js.map +1 -0
  49. package/dist/hooks/api.d.ts +9 -0
  50. package/dist/hooks/api.d.ts.map +1 -0
  51. package/dist/hooks/api.js +13 -0
  52. package/dist/hooks/api.js.map +1 -0
  53. package/dist/hooks/connection.d.ts +46 -0
  54. package/dist/hooks/connection.d.ts.map +1 -0
  55. package/dist/hooks/connection.js +81 -0
  56. package/dist/hooks/connection.js.map +1 -0
  57. package/dist/hooks/error.d.ts +10 -0
  58. package/dist/hooks/error.d.ts.map +1 -0
  59. package/dist/hooks/error.js +16 -0
  60. package/dist/hooks/error.js.map +1 -0
  61. package/dist/hooks/get-zoom.d.ts +2 -0
  62. package/dist/hooks/get-zoom.d.ts.map +1 -0
  63. package/dist/hooks/get-zoom.js +14 -0
  64. package/dist/hooks/get-zoom.js.map +1 -0
  65. package/dist/hooks/graph-mode.d.ts +8 -0
  66. package/dist/hooks/graph-mode.d.ts.map +1 -0
  67. package/dist/hooks/graph-mode.js +13 -0
  68. package/dist/hooks/graph-mode.js.map +1 -0
  69. package/dist/hooks/graph-root.d.ts +9 -0
  70. package/dist/hooks/graph-root.d.ts.map +1 -0
  71. package/dist/hooks/graph-root.js +13 -0
  72. package/dist/hooks/graph-root.js.map +1 -0
  73. package/dist/hooks/graph.d.ts +10 -0
  74. package/dist/hooks/graph.d.ts.map +1 -0
  75. package/dist/hooks/graph.js +12 -0
  76. package/dist/hooks/graph.js.map +1 -0
  77. package/dist/hooks/viewbox.d.ts +7 -0
  78. package/dist/hooks/viewbox.d.ts.map +1 -0
  79. package/dist/hooks/viewbox.js +12 -0
  80. package/dist/hooks/viewbox.js.map +1 -0
  81. package/dist/link/base.d.ts +34 -0
  82. package/dist/link/base.d.ts.map +1 -0
  83. package/dist/link/base.js +202 -0
  84. package/dist/link/base.js.map +1 -0
  85. package/dist/link/temp-link.d.ts +9 -0
  86. package/dist/link/temp-link.d.ts.map +1 -0
  87. package/dist/link/temp-link.js +60 -0
  88. package/dist/link/temp-link.js.map +1 -0
  89. package/dist/module.d.ts +18 -0
  90. package/dist/module.d.ts.map +1 -0
  91. package/dist/module.js +18 -0
  92. package/dist/module.js.map +1 -0
  93. package/dist/nodes/base.d.ts +11 -0
  94. package/dist/nodes/base.d.ts.map +1 -0
  95. package/dist/nodes/base.js +117 -0
  96. package/dist/nodes/base.js.map +1 -0
  97. package/dist/ports/base.d.ts +11 -0
  98. package/dist/ports/base.d.ts.map +1 -0
  99. package/dist/ports/base.js +115 -0
  100. package/dist/ports/base.js.map +1 -0
  101. package/dist/providers/connection-provider.d.ts +10 -0
  102. package/dist/providers/connection-provider.d.ts.map +1 -0
  103. package/dist/providers/connection-provider.js +120 -0
  104. package/dist/providers/connection-provider.js.map +1 -0
  105. package/dist/style.css +78 -0
  106. package/dist/types.d.ts +349 -0
  107. package/dist/types.d.ts.map +1 -0
  108. package/dist/types.js +11 -0
  109. package/dist/types.js.map +1 -0
  110. package/package.json +73 -0
@@ -0,0 +1,205 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useRef } from "react";
3
+ import Graph from "../graph";
4
+ const TEST_LINKS = [
5
+ {
6
+ id: "link-a",
7
+ from: {
8
+ node: "foo",
9
+ port: "output"
10
+ },
11
+ to: {
12
+ node: "bar",
13
+ port: "output"
14
+ },
15
+ labels: [
16
+ { text: "Link A", position: -0.5, color: "#fff", fontSize: 14, textAnchor: "forward", offset: 10 },
17
+ { text: "Link B", position: 0.5, color: "#fff", fontSize: 14, textAnchor: "reverse", offset: 10 },
18
+ ],
19
+ width: 1,
20
+ forwardColor: "#c7c700",
21
+ reverseColor: "#c71d07",
22
+ forwardDuration: 3,
23
+ reverseDuration: 0,
24
+ },
25
+ {
26
+ id: "link-b",
27
+ from: {
28
+ node: "tar",
29
+ port: "input"
30
+ },
31
+ to: {
32
+ node: "bar",
33
+ port: "input"
34
+ },
35
+ width: 2,
36
+ labels: [
37
+ { text: "Link A", position: -0.5, color: "#fff", fontSize: 14, textAnchor: "forward", offset: 10 },
38
+ { text: "Link B", position: 0.5, color: "#fff", fontSize: 14, textAnchor: "reverse", offset: 10 },
39
+ ],
40
+ forwardColor: "#c71d07",
41
+ reverseColor: "#1dc707",
42
+ forwardDuration: 0,
43
+ reverseDuration: 1,
44
+ },
45
+ {
46
+ id: "link-c",
47
+ from: {
48
+ node: "foo",
49
+ port: "input"
50
+ },
51
+ to: {
52
+ node: "tar",
53
+ port: "output"
54
+ },
55
+ width: 3,
56
+ labels: [
57
+ { text: "Link A", position: -0.5, color: "#fff", fontSize: 14, textAnchor: "forward", offset: 10 },
58
+ { text: "Link B", position: 0.5, color: "#fff", fontSize: 14, textAnchor: "reverse", offset: 10 },
59
+ ],
60
+ forwardColor: "#c71d07",
61
+ reverseColor: "#1dc707",
62
+ forwardDuration: 0,
63
+ reverseDuration: 1,
64
+ }
65
+ ];
66
+ const TEST_OBJECTS = [
67
+ {
68
+ id: "foo",
69
+ position: { x: 300, y: 100, z: 0 },
70
+ ports: [
71
+ {
72
+ id: "input",
73
+ type: "data",
74
+ direction: "input",
75
+ location: "left",
76
+ children: () => _jsx("div", { className: "node-port" }),
77
+ },
78
+ {
79
+ id: "output",
80
+ type: "data",
81
+ direction: "output",
82
+ location: "right",
83
+ onDragEnd: async (api, event) => {
84
+ if (event.targetNodeId && event.targetPortName) {
85
+ api.connect({
86
+ connectionType: event.connectionType,
87
+ from: { nodeId: event.sourceNodeId, portName: event.sourcePortName },
88
+ to: { nodeId: event.targetNodeId, portName: event.targetPortName },
89
+ });
90
+ }
91
+ },
92
+ children: () => _jsx("div", { className: "node-port" }),
93
+ },
94
+ ],
95
+ template: ({ id, ports }) => (_jsxs("div", { style: { background: "red", display: "flex", alignItems: "center" }, children: [ports.left, _jsx("span", { children: "Foo" }), ports.right] }))
96
+ },
97
+ {
98
+ id: "bar",
99
+ position: { x: 200, y: 300, z: 0 },
100
+ ports: [
101
+ {
102
+ id: "input",
103
+ type: "data",
104
+ direction: "input",
105
+ location: "left",
106
+ children: () => _jsx("div", { className: "node-port" }),
107
+ },
108
+ {
109
+ id: "output",
110
+ type: "data",
111
+ direction: "output",
112
+ location: "right",
113
+ onDragEnd: async (api, event) => {
114
+ if (event.targetNodeId && event.targetPortName) {
115
+ api.connect({
116
+ connectionType: event.connectionType,
117
+ from: { nodeId: event.sourceNodeId, portName: event.sourcePortName },
118
+ to: { nodeId: event.targetNodeId, portName: event.targetPortName },
119
+ });
120
+ }
121
+ }, children: () => _jsx("div", { className: "node-port" }),
122
+ },
123
+ ],
124
+ template: ({ id, ports }) => (_jsxs("div", { style: { background: "blue", display: "flex", alignItems: "center" }, children: [ports.left, _jsx("span", { children: "Bar" }), ports.right] }))
125
+ },
126
+ {
127
+ id: "tar",
128
+ position: { x: 100, y: 100, z: 0 },
129
+ ports: [
130
+ {
131
+ id: "input",
132
+ type: "data",
133
+ direction: "input",
134
+ location: "left",
135
+ children: () => _jsx("div", { className: "node-port" }),
136
+ },
137
+ {
138
+ id: "output",
139
+ type: "data",
140
+ direction: "output",
141
+ location: "right",
142
+ onDragEnd: async (api, event) => {
143
+ if (event.targetNodeId && event.targetPortName) {
144
+ api.connect({
145
+ connectionType: event.connectionType,
146
+ from: { nodeId: event.sourceNodeId, portName: event.sourcePortName },
147
+ to: { nodeId: event.targetNodeId, portName: event.targetPortName },
148
+ });
149
+ }
150
+ }, children: () => _jsx("div", { className: "node-port" }),
151
+ },
152
+ ],
153
+ template: ({ id, ports }) => (_jsxs("div", { style: { background: "blue", display: "flex", alignItems: "center" }, children: [ports.left, _jsx("span", { children: "Tar" }), ports.right] }))
154
+ }
155
+ ];
156
+ export default function GraphTest() {
157
+ const apiRef = useRef(null);
158
+ const fpsRef = useRef(null);
159
+ const fpsCountRef = useRef(0);
160
+ const lastTimeRef = useRef(0);
161
+ useEffect(() => {
162
+ const timeout = window.setTimeout(() => {
163
+ const api = apiRef.current;
164
+ if (api) {
165
+ TEST_OBJECTS.forEach(obj => {
166
+ api.addNode(obj);
167
+ });
168
+ TEST_LINKS.forEach(obj => {
169
+ api.addLink(obj);
170
+ });
171
+ }
172
+ }, 1000);
173
+ return () => {
174
+ window.clearTimeout(timeout);
175
+ };
176
+ }, []);
177
+ useEffect(() => {
178
+ let running = true;
179
+ function calculateFPS(td) {
180
+ if (!running)
181
+ return;
182
+ if (!lastTimeRef.current)
183
+ lastTimeRef.current = performance.now();
184
+ fpsCountRef.current += 1;
185
+ requestAnimationFrame(calculateFPS);
186
+ }
187
+ requestAnimationFrame(calculateFPS);
188
+ let interval = window.setInterval(() => {
189
+ const now = performance.now();
190
+ const delta = now - lastTimeRef.current;
191
+ const fps = ((fpsCountRef.current / delta) * 1000);
192
+ if (fpsRef.current) {
193
+ fpsRef.current.textContent = `FPS: ${fps.toFixed(0)}`;
194
+ }
195
+ fpsCountRef.current = 0;
196
+ lastTimeRef.current = now;
197
+ }, 500);
198
+ return () => {
199
+ running = false;
200
+ window.clearInterval(interval);
201
+ };
202
+ }, []);
203
+ return (_jsx(_Fragment, { children: _jsxs("div", { className: "graph-test-container", children: [_jsx("span", { ref: fpsRef }), _jsx("div", { className: "graph-test-graph", children: _jsx(Graph, { ref: apiRef, mode: "edit", onError: (err) => console.error("[GraphError]", err) }) })] }) }));
204
+ }
205
+ //# sourceMappingURL=graph-teste.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-teste.js","sourceRoot":"","sources":["../../src/example/graph-teste.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ body {
2
+ margin: 0;
3
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4
+ 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5
+ sans-serif;
6
+ -webkit-font-smoothing: antialiased;
7
+ -moz-osx-font-smoothing: grayscale;
8
+ }
9
+
10
+ code {
11
+ font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12
+ monospace;
13
+ }
14
+
15
+ .graph-test-container {
16
+ width: 100vw;
17
+ height: 100vh;
18
+ display: flex;
19
+ flex-direction: column;
20
+
21
+ .graph-test-graph {
22
+ flex: 1;
23
+ background: #000;
24
+ }
25
+ }
26
+
27
+ .node-port {
28
+ width: 10px;
29
+ height: 10px;
30
+ border-radius: 50%;
31
+ background: #888;
32
+ cursor: crosshair;
33
+ flex-shrink: 0;
34
+ transition: background 0.15s ease, transform 0.15s ease;
35
+ }
36
+
37
+ .node-port:hover {
38
+ background: #fff;
39
+ transform: scale(1.4);
40
+ }
41
+
42
+ .port-input {
43
+ margin-right: 6px;
44
+ }
45
+
46
+ .port-output {
47
+ margin-left: 6px;
48
+ }
@@ -0,0 +1,4 @@
1
+ import { MetricType } from 'web-vitals';
2
+ declare const reportWebVitals: (onPerfEntry?: (metric: MetricType) => void) => void;
3
+ export default reportWebVitals;
4
+ //# sourceMappingURL=reportWebVitals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reportWebVitals.d.ts","sourceRoot":"","sources":["../../src/example/reportWebVitals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,QAAA,MAAM,eAAe,GAAI,cAAc,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,SAUlE,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,13 @@
1
+ const reportWebVitals = (onPerfEntry) => {
2
+ if (onPerfEntry && onPerfEntry instanceof Function) {
3
+ import('web-vitals').then(({ onCLS, onINP, onFCP, onLCP, onTTFB }) => {
4
+ onCLS(onPerfEntry);
5
+ onINP(onPerfEntry);
6
+ onFCP(onPerfEntry);
7
+ onLCP(onPerfEntry);
8
+ onTTFB(onPerfEntry);
9
+ });
10
+ }
11
+ };
12
+ export default reportWebVitals;
13
+ //# sourceMappingURL=reportWebVitals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reportWebVitals.js","sourceRoot":"","sources":["../../src/example/reportWebVitals.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAAG,CAAC,WAA0C,EAAE,EAAE;IACrE,IAAI,WAAW,IAAI,WAAW,YAAY,QAAQ,EAAE,CAAC;QACnD,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;YACnE,KAAK,CAAC,WAAW,CAAC,CAAC;YACnB,KAAK,CAAC,WAAW,CAAC,CAAC;YACnB,KAAK,CAAC,WAAW,CAAC,CAAC;YACnB,KAAK,CAAC,WAAW,CAAC,CAAC;YACnB,MAAM,CAAC,WAAW,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { GraphProps } from "../types";
2
+ import "../style.css";
3
+ /**
4
+ * Componente Graph que orquestra o contexto do grafo, providers e o viewbox.
5
+ * Recebe chamadas imperativas via ref (GraphApi) expostas por GraphHandle.
6
+ *
7
+ * @param props Propriedades do componente Graph
8
+ * @returns JSX.Element
9
+ */
10
+ export default function Graph({ ref, mode, onError }: GraphProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/graph/index.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAW,UAAU,EAAwD,MAAM,UAAU,CAAC;AASrG,OAAO,cAAc,CAAC;AAStB;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAAE,GAAG,EAAE,IAAa,EAAE,OAAO,EAAE,EAAE,UAAU,2CA0KxE"}
@@ -0,0 +1,161 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useContext, useEffect, useImperativeHandle, useMemo, useRef, useState, } from "react";
3
+ import { GraphContext } from "../context/graph-context";
4
+ import { ErrorContext } from "../context/error-context";
5
+ import { ConnectionContext } from "../context/connection-context";
6
+ import { GraphRootContext } from "../context/graph-root-context";
7
+ import ConnectionProvider from "../providers/connection-provider";
8
+ import GraphObject from "../nodes/base";
9
+ import GraphLink from "../link/base";
10
+ import ViewBox from "./viewbox";
11
+ import "../style.css";
12
+ /**
13
+ * Componente Graph que orquestra o contexto do grafo, providers e o viewbox.
14
+ * Recebe chamadas imperativas via ref (GraphApi) expostas por GraphHandle.
15
+ *
16
+ * @param props Propriedades do componente Graph
17
+ * @returns JSX.Element
18
+ */
19
+ export default function Graph({ ref, mode = "edit", onError }) {
20
+ const rootRef = useRef(null);
21
+ const graphApiRef = useRef(null);
22
+ const [nodeDefs, setNodeDefs] = useState([]);
23
+ const [linkDefs, setLinkDefs] = useState([]);
24
+ const [viewbox, setViewBox] = useState({
25
+ x: 0, y: 0, zoom: 1, width: 0, height: 0,
26
+ });
27
+ // Converte definicoes em React elements para GraphContext
28
+ const nodes = useMemo(() => nodeDefs.map(def => (_jsx(GraphObject, { id: def.id, ports: def.ports, data: def.data, initialPosition: def.position, children: def.template }, def.id))), [nodeDefs]);
29
+ const links = useMemo(() => linkDefs.map(def => (_jsx(GraphLink, { ...def }, def.id))), [linkDefs]);
30
+ const panRef = useRef({
31
+ panning: false,
32
+ panPointStart: { x: 0, y: 0 }
33
+ });
34
+ const handleError = useCallback((error) => {
35
+ onError?.(error);
36
+ }, [onError]);
37
+ const handleMouseDown = useCallback((ev) => {
38
+ if (ev.button !== 1 || !rootRef.current)
39
+ return;
40
+ panRef.current.panning = true;
41
+ rootRef.current.style.userSelect = 'none';
42
+ }, []);
43
+ const handleMouseUp = useCallback((e) => {
44
+ if (panRef.current.panning && rootRef.current && e.button === 1) {
45
+ panRef.current.panning = false;
46
+ rootRef.current.style.userSelect = "";
47
+ }
48
+ }, []);
49
+ const handleWheel = useCallback((e) => {
50
+ e.preventDefault();
51
+ const root = rootRef.current ?? e.target;
52
+ if (!root)
53
+ return;
54
+ const rect = root.getBoundingClientRect();
55
+ const offsetX = e.clientX - rect.left;
56
+ const offsetY = e.clientY - rect.top;
57
+ const delta = -e.deltaY;
58
+ setViewBox(vb => {
59
+ const MIN_ZOOM = 0.1;
60
+ const MAX_ZOOM = 2;
61
+ const FACTOR = 1.2;
62
+ const newZoom = delta > 0 ? Math.min(MAX_ZOOM, vb.zoom * FACTOR) : Math.max(MIN_ZOOM, vb.zoom / FACTOR);
63
+ if (newZoom === vb.zoom)
64
+ return vb;
65
+ const worldX = offsetX / vb.zoom + vb.x;
66
+ const worldY = offsetY / vb.zoom + vb.y;
67
+ const x = worldX - offsetX / newZoom;
68
+ const y = worldY - offsetY / newZoom;
69
+ return { ...vb, x, y, zoom: newZoom };
70
+ });
71
+ }, []);
72
+ const handleMouseMove = useCallback((e) => {
73
+ if (!panRef.current.panning)
74
+ return;
75
+ setViewBox(vb => {
76
+ return {
77
+ ...vb,
78
+ x: vb.x - e.movementX / vb.zoom,
79
+ y: vb.y - e.movementY / vb.zoom,
80
+ };
81
+ });
82
+ }, []);
83
+ useEffect(() => {
84
+ const el = rootRef.current;
85
+ if (!el)
86
+ return;
87
+ function checkDimension() {
88
+ setViewBox(vb => {
89
+ if (!el)
90
+ return vb;
91
+ return {
92
+ ...vb,
93
+ width: el.clientWidth,
94
+ height: el.clientHeight,
95
+ };
96
+ });
97
+ }
98
+ el.addEventListener('wheel', handleWheel, { passive: false });
99
+ checkDimension();
100
+ const observer = new ResizeObserver(checkDimension);
101
+ observer.observe(el);
102
+ return () => {
103
+ el.removeEventListener('wheel', handleWheel);
104
+ observer.disconnect();
105
+ };
106
+ }, [handleWheel]);
107
+ // Valida IDs duplicados entre nós e links
108
+ useEffect(() => {
109
+ const ids = new Map();
110
+ for (const def of nodeDefs) {
111
+ if (!ids.has(def.id))
112
+ ids.set(def.id, []);
113
+ ids.get(def.id).push("node");
114
+ }
115
+ for (const def of linkDefs) {
116
+ if (!ids.has(def.id))
117
+ ids.set(def.id, []);
118
+ ids.get(def.id).push("link");
119
+ }
120
+ for (const [id, types] of ids) {
121
+ if (types.length > 1) {
122
+ handleError({
123
+ code: "DUPLICATE_ID",
124
+ message: `Duplicate id "${id}" found across: ${types.join(", ")}`,
125
+ details: { id, types },
126
+ });
127
+ }
128
+ }
129
+ }, [nodeDefs, linkDefs, handleError]);
130
+ return (_jsx(ErrorContext.Provider, { value: { reportError: handleError }, children: _jsx(GraphContext.Provider, { value: {
131
+ viewbox,
132
+ nodes,
133
+ links,
134
+ mode,
135
+ }, children: _jsx(GraphRootContext.Provider, { value: rootRef, children: _jsxs(ConnectionProvider, { graphApiRef: graphApiRef, children: [_jsx(GraphHandle, { ref: ref, graphApiRef: graphApiRef, setNodeDefs: setNodeDefs, setLinkDefs: setLinkDefs }), _jsx("graph-root", { ref: rootRef, onMouseDown: handleMouseDown, onMouseUp: handleMouseUp, onMouseMove: handleMouseMove, children: _jsx(ViewBox, {}) })] }) }) }) }));
136
+ }
137
+ /**
138
+ * Componente auxiliar que implementa a API imperativa do Graph (GraphApi)
139
+ * e a expõe através da ref fornecida pelo componente pai.
140
+ *
141
+ * Esta função não renderiza nada (retorna null) e serve apenas para vincular
142
+ * handlers/estado ao objeto de API.
143
+ */
144
+ function GraphHandle({ ref, graphApiRef, setNodeDefs, setLinkDefs }) {
145
+ const { connect, disconnect, connections } = useContext(ConnectionContext);
146
+ useImperativeHandle(ref, () => {
147
+ const api = {
148
+ addNode: (node) => setNodeDefs(prev => [...prev, node]),
149
+ removeNode: (id) => setNodeDefs(prev => prev.filter(n => n.id !== id)),
150
+ addLink: (link) => setLinkDefs(prev => [...prev, link]),
151
+ removeLink: (id) => setLinkDefs(prev => prev.filter(l => l.id !== id)),
152
+ connect,
153
+ disconnect,
154
+ getConnections: () => connections,
155
+ };
156
+ graphApiRef.current = api;
157
+ return api;
158
+ }, [connect, disconnect, connections, setNodeDefs, setLinkDefs, graphApiRef]);
159
+ return null;
160
+ }
161
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/graph/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Componente ViewBox responsável por aplicar a transformação de escala e
3
+ * translação do graph com base no estado do viewbox. Renderiza nós, links
4
+ * e o componente temporário de link quando em modo de edição.
5
+ *
6
+ * @returns JSX.Element
7
+ */
8
+ export default function ViewBox(): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=viewbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewbox.d.ts","sourceRoot":"","sources":["../../src/graph/viewbox.tsx"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO,4CAuB9B"}
@@ -0,0 +1,30 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useRef, useEffect } from "react";
3
+ import useGraphItems from "../hooks/graph";
4
+ import useViewbox from "../hooks/viewbox";
5
+ import TempLink from "../link/temp-link";
6
+ import useGraphMode from "../hooks/graph-mode";
7
+ /**
8
+ * Componente ViewBox responsável por aplicar a transformação de escala e
9
+ * translação do graph com base no estado do viewbox. Renderiza nós, links
10
+ * e o componente temporário de link quando em modo de edição.
11
+ *
12
+ * @returns JSX.Element
13
+ */
14
+ export default function ViewBox() {
15
+ const ref = useRef(null);
16
+ const viewbox = useViewbox();
17
+ const mode = useGraphMode();
18
+ const { nodes, links } = useGraphItems();
19
+ useEffect(() => {
20
+ if (!ref.current)
21
+ return;
22
+ ref.current.style.transform = [
23
+ `scale(${viewbox.zoom})`,
24
+ `translate(${-viewbox.x}px, ${-viewbox.y}px)`,
25
+ ].join(' ');
26
+ ref.current.style.transformOrigin = '0 0';
27
+ }, [viewbox]);
28
+ return (_jsxs("graph-viewbox", { ref: ref, children: [links, nodes, mode === 'edit' && _jsx(TempLink, {})] }));
29
+ }
30
+ //# sourceMappingURL=viewbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewbox.js","sourceRoot":"","sources":["../../src/graph/viewbox.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAC3C,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AACzC,OAAO,YAAY,MAAM,qBAAqB,CAAC;AAG/C;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,OAAO;IAC3B,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IACxC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,CAAC;IAEzC,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,GAAG,CAAC,OAAO;YAAE,OAAO;QACzB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG;YAC1B,SAAS,OAAO,CAAC,IAAI,GAAG;YACxB,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK;SAChD,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACX,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC;IAC9C,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAEb,OAAO,CACH,yBAAe,GAAG,EAAE,GAAG,aAClB,KAAK,EACL,KAAK,EACL,IAAI,KAAK,MAAM,IAAI,KAAC,QAAQ,KAAG,IACpB,CACnB,CAAA;AAEL,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { ConnectionApi } from "../types";
2
+ /**
3
+ * Hook que expõe a API de conexões do grafo (connect/disconnect/getConnections)
4
+ * a partir do ConnectionContext.
5
+ *
6
+ * @returns ConnectionApi
7
+ */
8
+ export default function useConnectionApi(): ConnectionApi;
9
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/hooks/api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,IAAI,aAAa,CAGxD"}
@@ -0,0 +1,13 @@
1
+ import { useContext } from "react";
2
+ import { ConnectionContext } from "../context/connection-context";
3
+ /**
4
+ * Hook que expõe a API de conexões do grafo (connect/disconnect/getConnections)
5
+ * a partir do ConnectionContext.
6
+ *
7
+ * @returns ConnectionApi
8
+ */
9
+ export default function useConnectionApi() {
10
+ const { connect, disconnect, connections } = useContext(ConnectionContext);
11
+ return { connect, disconnect, getConnections: () => connections };
12
+ }
13
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/hooks/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGlE;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB;IACpC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAC3E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;AACtE,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { ConnectionType } from "../types";
2
+ /**
3
+ * Hook que expõe o estado de conexões e operações básicas (connect/disconnect)
4
+ * a partir do ConnectionContext.
5
+ *
6
+ * @returns {{ connections: PortConnection[], connect: Function, disconnect: Function }}
7
+ */
8
+ export declare function useConnections(): {
9
+ connections: import("../types").PortConnection[];
10
+ connect: (connection: import("../types").PortConnection) => void;
11
+ disconnect: (connection: import("../types").PortConnection) => void;
12
+ };
13
+ /**
14
+ * Hook que fornece handlers de drag para uma porta específica. Inicia o
15
+ * processo de arraste quando o usuário pressiona a porta (somente em modo
16
+ * de edição).
17
+ *
18
+ * @param nodeId Id do nó que contém a porta
19
+ * @param portName Nome da porta
20
+ * @param connectionType Tipo de conexão suportada
21
+ * @returns dragHandlers, isDragging, canDrag
22
+ */
23
+ export declare function usePortDrag(nodeId: string, portName: string, connectionType: ConnectionType): {
24
+ dragHandlers: {
25
+ onMouseDown: (e: React.MouseEvent) => void;
26
+ };
27
+ isDragging: boolean;
28
+ canDrag: boolean;
29
+ };
30
+ /**
31
+ * Hook que fornece handlers de drop para uma porta específica. Finaliza o
32
+ * arraste e chama endDrag quando o usuário solta sobre a porta (somente em
33
+ * modo de edição).
34
+ *
35
+ * @param nodeId Id do nó que contém a porta
36
+ * @param portName Nome da porta
37
+ * @param connectionType Tipo de conexão suportada
38
+ * @returns dropHandlers, canDrop
39
+ */
40
+ export declare function usePortDrop(nodeId: string, portName: string, connectionType: ConnectionType): {
41
+ dropHandlers: {
42
+ onMouseUp: (e: React.MouseEvent) => void;
43
+ };
44
+ canDrop: boolean;
45
+ };
46
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/hooks/connection.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C;;;;;GAKG;AACH,wBAAgB,cAAc;;;;EAG7B;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc;;yBAKhF,KAAK,CAAC,UAAU;;;;EAmB3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc;;uBAWhF,KAAK,CAAC,UAAU;;;EAuB3B"}