@cnvx/nodal 0.1.2 → 0.1.3
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
|
@@ -60,6 +60,7 @@
|
|
|
60
60
|
nodes: SvelteMap<string, DiagramNodeDef>;
|
|
61
61
|
edges: SvelteMap<string, DiagramEdgeDef>;
|
|
62
62
|
children: Snippet;
|
|
63
|
+
scaleToFit?: boolean;
|
|
63
64
|
};
|
|
64
65
|
|
|
65
66
|
// const getNodeOrigin = (node: DiagramNode) => node.origin ?? vector2(0.0, 0.5);
|
|
@@ -73,7 +74,7 @@
|
|
|
73
74
|
</script>
|
|
74
75
|
|
|
75
76
|
<script lang="ts">
|
|
76
|
-
let { nodes, edges, children }: DiagramProps = $props();
|
|
77
|
+
let { nodes, edges, children, scaleToFit }: DiagramProps = $props();
|
|
77
78
|
export function generateCurvePath(
|
|
78
79
|
x1: number,
|
|
79
80
|
y1: number,
|
|
@@ -255,7 +256,20 @@
|
|
|
255
256
|
// }
|
|
256
257
|
// });
|
|
257
258
|
|
|
259
|
+
let diagramContainer: HTMLElement | null = null;
|
|
260
|
+
let scale = $state(1);
|
|
258
261
|
onMount(() => {
|
|
262
|
+
if (scaleToFit) {
|
|
263
|
+
console.log(diagramContainer?.parentElement);
|
|
264
|
+
const scaleY = diagramContainer?.parentElement?.clientHeight
|
|
265
|
+
? diagramContainer.parentElement?.clientHeight / height
|
|
266
|
+
: 1;
|
|
267
|
+
const scaleX = diagramContainer?.parentElement?.clientWidth
|
|
268
|
+
? diagramContainer?.parentElement?.clientWidth / width
|
|
269
|
+
: 1;
|
|
270
|
+
|
|
271
|
+
scale = Math.min(scaleX, scaleY);
|
|
272
|
+
}
|
|
259
273
|
dimensions = calculateDimensions(nodes);
|
|
260
274
|
});
|
|
261
275
|
</script>
|
|
@@ -275,11 +289,12 @@
|
|
|
275
289
|
{/snippet}
|
|
276
290
|
|
|
277
291
|
<figure
|
|
292
|
+
bind:this={diagramContainer}
|
|
278
293
|
aria-label="Diagram"
|
|
279
294
|
aria-hidden={!dev}
|
|
280
295
|
inert={!dev}
|
|
281
296
|
role="img"
|
|
282
|
-
style="position:relative;width:{width}px;height:{height}px;overflow:
|
|
297
|
+
style="position:relative;width:{width}px;height:{height}px;overflow:visible;user-select:none;transform:scale({scale});transform-origin:center center;"
|
|
283
298
|
>
|
|
284
299
|
<!-- <svg class="absolute top-0 right-0 bottom-0 left-0 z-0 h-full w-full overflow-visible"> -->
|
|
285
300
|
<!-- {#each edges.values() as edge, i}
|
package/dist/Diagram.svelte.d.ts
CHANGED
|
@@ -35,6 +35,7 @@ export type DiagramProps = {
|
|
|
35
35
|
nodes: SvelteMap<string, DiagramNodeDef>;
|
|
36
36
|
edges: SvelteMap<string, DiagramEdgeDef>;
|
|
37
37
|
children: Snippet;
|
|
38
|
+
scaleToFit?: boolean;
|
|
38
39
|
};
|
|
39
40
|
declare const Diagram: import("svelte").Component<DiagramProps, {
|
|
40
41
|
generateCurvePath: (x1: number, y1: number, x2: number, y2: number, edge: DiagramEdgeDef) => string;
|
|
@@ -18,11 +18,13 @@
|
|
|
18
18
|
let {
|
|
19
19
|
children,
|
|
20
20
|
eagerLoad = false,
|
|
21
|
+
scaleToFit = false,
|
|
21
22
|
rootMargin = "100px", // start a bit before it enters the viewport
|
|
22
23
|
...rest
|
|
23
24
|
}: {
|
|
24
25
|
children: Snippet;
|
|
25
26
|
eagerLoad?: boolean;
|
|
27
|
+
scaleToFit?: boolean;
|
|
26
28
|
rootMargin?: string;
|
|
27
29
|
} & HTMLAttributes<HTMLDivElement> = $props();
|
|
28
30
|
|
|
@@ -89,7 +91,7 @@
|
|
|
89
91
|
|
|
90
92
|
<!-- second pass: render with computed positions -->
|
|
91
93
|
<div {...rest}>
|
|
92
|
-
<Diagram {nodes} {edges}>
|
|
94
|
+
<Diagram {nodes} {edges} {scaleToFit}>
|
|
93
95
|
{@render children()}
|
|
94
96
|
</Diagram>
|
|
95
97
|
</div>
|
|
@@ -3,6 +3,7 @@ import type { HTMLAttributes } from "svelte/elements";
|
|
|
3
3
|
type $$ComponentProps = {
|
|
4
4
|
children: Snippet;
|
|
5
5
|
eagerLoad?: boolean;
|
|
6
|
+
scaleToFit?: boolean;
|
|
6
7
|
rootMargin?: string;
|
|
7
8
|
} & HTMLAttributes<HTMLDivElement>;
|
|
8
9
|
declare const DiagramController: import("svelte").Component<$$ComponentProps, {}, "">;
|