@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.
@@ -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:show;user-select:none;"
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}
@@ -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, {}, "">;
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@cnvx/nodal",
3
3
  "private": false,
4
4
  "license": "MIT",
5
- "version": "0.1.2",
5
+ "version": "0.1.3",
6
6
  "scripts": {
7
7
  "dev": "vite dev",
8
8
  "dev-lib": "svelte-package -w",