@cnvx/nodal 0.1.2 → 0.1.4
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
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
browser,
|
|
15
15
|
dev,
|
|
16
16
|
} from "./diagram-lib.js";
|
|
17
|
+
import type { HTMLAttributes } from "svelte/elements";
|
|
17
18
|
|
|
18
19
|
export interface DiagramNodeDef {
|
|
19
20
|
id: string;
|
|
@@ -60,6 +61,8 @@
|
|
|
60
61
|
nodes: SvelteMap<string, DiagramNodeDef>;
|
|
61
62
|
edges: SvelteMap<string, DiagramEdgeDef>;
|
|
62
63
|
children: Snippet;
|
|
64
|
+
scaleToFit?: boolean;
|
|
65
|
+
figureAttributes: HTMLAttributes<HTMLElement>;
|
|
63
66
|
};
|
|
64
67
|
|
|
65
68
|
// const getNodeOrigin = (node: DiagramNode) => node.origin ?? vector2(0.0, 0.5);
|
|
@@ -73,7 +76,8 @@
|
|
|
73
76
|
</script>
|
|
74
77
|
|
|
75
78
|
<script lang="ts">
|
|
76
|
-
let { nodes, edges, children }: DiagramProps =
|
|
79
|
+
let { nodes, edges, children, scaleToFit, figureAttributes }: DiagramProps =
|
|
80
|
+
$props();
|
|
77
81
|
export function generateCurvePath(
|
|
78
82
|
x1: number,
|
|
79
83
|
y1: number,
|
|
@@ -94,7 +98,7 @@
|
|
|
94
98
|
return normaliseAngle(raw);
|
|
95
99
|
}
|
|
96
100
|
|
|
97
|
-
// CRUCIAL TO
|
|
101
|
+
// CRUCIAL TO INVERT THE Y DIRECTION SINCE IT GOES FROM
|
|
98
102
|
// NEGATIVE TO POSITIVE!!!!!!!!!!!!!
|
|
99
103
|
const leaveAngle = Math.atan2(y1 - y2, x2 - x1);
|
|
100
104
|
const arriveAngle = leaveAngle + Math.PI;
|
|
@@ -255,7 +259,20 @@
|
|
|
255
259
|
// }
|
|
256
260
|
// });
|
|
257
261
|
|
|
262
|
+
let diagramContainer: HTMLElement | null = null;
|
|
263
|
+
let scale = $state(1);
|
|
258
264
|
onMount(() => {
|
|
265
|
+
if (scaleToFit) {
|
|
266
|
+
console.log(diagramContainer?.parentElement);
|
|
267
|
+
const scaleY = diagramContainer?.parentElement?.clientHeight
|
|
268
|
+
? diagramContainer.parentElement?.clientHeight / height
|
|
269
|
+
: 1;
|
|
270
|
+
const scaleX = diagramContainer?.parentElement?.clientWidth
|
|
271
|
+
? diagramContainer?.parentElement?.clientWidth / width
|
|
272
|
+
: 1;
|
|
273
|
+
|
|
274
|
+
scale = Math.min(scaleX, scaleY);
|
|
275
|
+
}
|
|
259
276
|
dimensions = calculateDimensions(nodes);
|
|
260
277
|
});
|
|
261
278
|
</script>
|
|
@@ -275,11 +292,13 @@
|
|
|
275
292
|
{/snippet}
|
|
276
293
|
|
|
277
294
|
<figure
|
|
295
|
+
bind:this={diagramContainer}
|
|
278
296
|
aria-label="Diagram"
|
|
279
297
|
aria-hidden={!dev}
|
|
280
298
|
inert={!dev}
|
|
299
|
+
{...figureAttributes}
|
|
281
300
|
role="img"
|
|
282
|
-
style="position:relative;width:{width}px;height:{height}px;overflow:
|
|
301
|
+
style="position:relative;width:{width}px;height:{height}px;overflow:visible;user-select:none;transform:scale({scale});transform-origin:center center;"
|
|
283
302
|
>
|
|
284
303
|
<!-- <svg class="absolute top-0 right-0 bottom-0 left-0 z-0 h-full w-full overflow-visible"> -->
|
|
285
304
|
<!-- {#each edges.values() as edge, i}
|
package/dist/Diagram.svelte.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type Snippet } from "svelte";
|
|
2
2
|
import { SvelteMap } from "svelte/reactivity";
|
|
3
3
|
import { type Vector2 } from "./diagram-lib.js";
|
|
4
|
+
import type { HTMLAttributes } from "svelte/elements";
|
|
4
5
|
export interface DiagramNodeDef {
|
|
5
6
|
id: string;
|
|
6
7
|
x: number;
|
|
@@ -35,6 +36,8 @@ export type DiagramProps = {
|
|
|
35
36
|
nodes: SvelteMap<string, DiagramNodeDef>;
|
|
36
37
|
edges: SvelteMap<string, DiagramEdgeDef>;
|
|
37
38
|
children: Snippet;
|
|
39
|
+
scaleToFit?: boolean;
|
|
40
|
+
figureAttributes: HTMLAttributes<HTMLElement>;
|
|
38
41
|
};
|
|
39
42
|
declare const Diagram: import("svelte").Component<DiagramProps, {
|
|
40
43
|
generateCurvePath: (x1: number, y1: number, x2: number, y2: number, edge: DiagramEdgeDef) => string;
|
|
@@ -18,12 +18,16 @@
|
|
|
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
|
|
23
|
+
figureAttributes = { inert: true, "aria-hidden": true },
|
|
22
24
|
...rest
|
|
23
25
|
}: {
|
|
24
26
|
children: Snippet;
|
|
25
27
|
eagerLoad?: boolean;
|
|
28
|
+
scaleToFit?: boolean;
|
|
26
29
|
rootMargin?: string;
|
|
30
|
+
figureAttributes: HTMLAttributes<HTMLElement>;
|
|
27
31
|
} & HTMLAttributes<HTMLDivElement> = $props();
|
|
28
32
|
|
|
29
33
|
const nodes = new SvelteMap<string, DiagramNodeDef>();
|
|
@@ -85,11 +89,11 @@
|
|
|
85
89
|
|
|
86
90
|
{#if shouldRender}
|
|
87
91
|
<!-- first pass: register all the nodes and edges -->
|
|
88
|
-
<PrerenderDiagram {nodes} {edges} {children} />
|
|
92
|
+
<PrerenderDiagram {nodes} {edges} {children} {figureAttributes} />
|
|
89
93
|
|
|
90
94
|
<!-- second pass: render with computed positions -->
|
|
91
95
|
<div {...rest}>
|
|
92
|
-
<Diagram {nodes} {edges}>
|
|
96
|
+
<Diagram {nodes} {edges} {scaleToFit} {figureAttributes}>
|
|
93
97
|
{@render children()}
|
|
94
98
|
</Diagram>
|
|
95
99
|
</div>
|
|
@@ -3,7 +3,9 @@ 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;
|
|
8
|
+
figureAttributes: HTMLAttributes<HTMLElement>;
|
|
7
9
|
} & HTMLAttributes<HTMLDivElement>;
|
|
8
10
|
declare const DiagramController: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
9
11
|
type DiagramController = ReturnType<typeof DiagramController>;
|