@cnvx/nodal 0.1.4 → 0.2.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/Diagram.svelte
CHANGED
|
@@ -62,6 +62,8 @@
|
|
|
62
62
|
edges: SvelteMap<string, DiagramEdgeDef>;
|
|
63
63
|
children: Snippet;
|
|
64
64
|
scaleToFit?: boolean;
|
|
65
|
+
width?: number;
|
|
66
|
+
height?: number;
|
|
65
67
|
figureAttributes: HTMLAttributes<HTMLElement>;
|
|
66
68
|
};
|
|
67
69
|
|
|
@@ -76,8 +78,15 @@
|
|
|
76
78
|
</script>
|
|
77
79
|
|
|
78
80
|
<script lang="ts">
|
|
79
|
-
let {
|
|
80
|
-
|
|
81
|
+
let {
|
|
82
|
+
nodes,
|
|
83
|
+
edges,
|
|
84
|
+
children,
|
|
85
|
+
scaleToFit,
|
|
86
|
+
figureAttributes,
|
|
87
|
+
width: userDefinedDiagramWidth,
|
|
88
|
+
height: userDefinedDiagramHeight,
|
|
89
|
+
}: DiagramProps = $props();
|
|
81
90
|
export function generateCurvePath(
|
|
82
91
|
x1: number,
|
|
83
92
|
y1: number,
|
|
@@ -154,6 +163,13 @@
|
|
|
154
163
|
}
|
|
155
164
|
|
|
156
165
|
function calculateDimensions(_nodes: typeof nodes) {
|
|
166
|
+
if (userDefinedDiagramHeight && userDefinedDiagramWidth) {
|
|
167
|
+
return {
|
|
168
|
+
min: vector2(0, 0),
|
|
169
|
+
max: vector2(userDefinedDiagramWidth, userDefinedDiagramHeight),
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
|
|
157
173
|
// console.time("dim");
|
|
158
174
|
let newMin = vector2(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);
|
|
159
175
|
let newMax = vector2(Number.MIN_SAFE_INTEGER, Number.MIN_SAFE_INTEGER);
|
|
@@ -189,6 +205,8 @@
|
|
|
189
205
|
dimensions.min = newDimensions.min;
|
|
190
206
|
dimensions.max = newDimensions.max;
|
|
191
207
|
});
|
|
208
|
+
|
|
209
|
+
$inspect({ dimensions });
|
|
192
210
|
// let dimensions = calculateDimensions(nodes);
|
|
193
211
|
// onMount(() => (dimensions = calculateDimensions(nodes)));
|
|
194
212
|
|
|
@@ -197,8 +215,14 @@
|
|
|
197
215
|
setContext("dimensions", () => dimensions);
|
|
198
216
|
setContext("prerendering", false);
|
|
199
217
|
|
|
200
|
-
let width = $derived(
|
|
201
|
-
|
|
218
|
+
let width = $derived(
|
|
219
|
+
// userDefinedDiagramWidth ??
|
|
220
|
+
Math.max(dimensions.max.x - dimensions.min.x, 1),
|
|
221
|
+
);
|
|
222
|
+
let height = $derived(
|
|
223
|
+
// userDefinedDiagramHeight ??
|
|
224
|
+
Math.max(dimensions.max.y - dimensions.min.y, 1),
|
|
225
|
+
);
|
|
202
226
|
|
|
203
227
|
function generateEdgePath(edge: DiagramEdgeDef) {
|
|
204
228
|
const sourceNode = nodes.get(edge.source)!;
|
|
@@ -263,6 +287,12 @@
|
|
|
263
287
|
let scale = $state(1);
|
|
264
288
|
onMount(() => {
|
|
265
289
|
if (scaleToFit) {
|
|
290
|
+
if (userDefinedDiagramHeight || userDefinedDiagramWidth) {
|
|
291
|
+
throw new Error(
|
|
292
|
+
"Cannot use user defined width/height with scaleToFit",
|
|
293
|
+
);
|
|
294
|
+
}
|
|
295
|
+
|
|
266
296
|
console.log(diagramContainer?.parentElement);
|
|
267
297
|
const scaleY = diagramContainer?.parentElement?.clientHeight
|
|
268
298
|
? diagramContainer.parentElement?.clientHeight / height
|
package/dist/Diagram.svelte.d.ts
CHANGED
|
@@ -37,6 +37,8 @@ export type DiagramProps = {
|
|
|
37
37
|
edges: SvelteMap<string, DiagramEdgeDef>;
|
|
38
38
|
children: Snippet;
|
|
39
39
|
scaleToFit?: boolean;
|
|
40
|
+
width?: number;
|
|
41
|
+
height?: number;
|
|
40
42
|
figureAttributes: HTMLAttributes<HTMLElement>;
|
|
41
43
|
};
|
|
42
44
|
declare const Diagram: import("svelte").Component<DiagramProps, {
|
|
@@ -18,17 +18,30 @@
|
|
|
18
18
|
let {
|
|
19
19
|
children,
|
|
20
20
|
eagerLoad = false,
|
|
21
|
-
scaleToFit
|
|
21
|
+
scaleToFit,
|
|
22
|
+
width,
|
|
23
|
+
height,
|
|
22
24
|
rootMargin = "100px", // start a bit before it enters the viewport
|
|
23
25
|
figureAttributes = { inert: true, "aria-hidden": true },
|
|
24
26
|
...rest
|
|
25
|
-
}: {
|
|
27
|
+
}: ({
|
|
26
28
|
children: Snippet;
|
|
27
29
|
eagerLoad?: boolean;
|
|
28
|
-
scaleToFit?: boolean;
|
|
29
30
|
rootMargin?: string;
|
|
30
|
-
figureAttributes
|
|
31
|
-
} &
|
|
31
|
+
figureAttributes?: HTMLAttributes<HTMLElement>;
|
|
32
|
+
} & (
|
|
33
|
+
| {
|
|
34
|
+
scaleToFit?: boolean;
|
|
35
|
+
width?: never;
|
|
36
|
+
height?: never;
|
|
37
|
+
}
|
|
38
|
+
| {
|
|
39
|
+
scaleToFit?: never;
|
|
40
|
+
width: number;
|
|
41
|
+
height: number;
|
|
42
|
+
}
|
|
43
|
+
)) &
|
|
44
|
+
Omit<HTMLAttributes<HTMLDivElement>, "width" | "height"> = $props();
|
|
32
45
|
|
|
33
46
|
const nodes = new SvelteMap<string, DiagramNodeDef>();
|
|
34
47
|
const layers = new SvelteMap<number, Record<string, DiagramNodeDef>>();
|
|
@@ -93,7 +106,14 @@
|
|
|
93
106
|
|
|
94
107
|
<!-- second pass: render with computed positions -->
|
|
95
108
|
<div {...rest}>
|
|
96
|
-
<Diagram
|
|
109
|
+
<Diagram
|
|
110
|
+
{nodes}
|
|
111
|
+
{edges}
|
|
112
|
+
{scaleToFit}
|
|
113
|
+
{width}
|
|
114
|
+
{height}
|
|
115
|
+
{figureAttributes}
|
|
116
|
+
>
|
|
97
117
|
{@render children()}
|
|
98
118
|
</Diagram>
|
|
99
119
|
</div>
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import { type Snippet } from "svelte";
|
|
2
2
|
import type { HTMLAttributes } from "svelte/elements";
|
|
3
|
-
type $$ComponentProps = {
|
|
3
|
+
type $$ComponentProps = ({
|
|
4
4
|
children: Snippet;
|
|
5
5
|
eagerLoad?: boolean;
|
|
6
|
-
scaleToFit?: boolean;
|
|
7
6
|
rootMargin?: string;
|
|
8
|
-
figureAttributes
|
|
9
|
-
} &
|
|
7
|
+
figureAttributes?: HTMLAttributes<HTMLElement>;
|
|
8
|
+
} & ({
|
|
9
|
+
scaleToFit?: boolean;
|
|
10
|
+
width?: never;
|
|
11
|
+
height?: never;
|
|
12
|
+
} | {
|
|
13
|
+
scaleToFit?: never;
|
|
14
|
+
width: number;
|
|
15
|
+
height: number;
|
|
16
|
+
})) & Omit<HTMLAttributes<HTMLDivElement>, "width" | "height">;
|
|
10
17
|
declare const DiagramController: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
11
18
|
type DiagramController = ReturnType<typeof DiagramController>;
|
|
12
19
|
export default DiagramController;
|