Canvas: Auto-assign position to nodes if missing

Change-Id: Ica80878e0cb280c9a44f58637c11b53d78e07892
diff --git a/apps/canvas/config/src/graph.ts b/apps/canvas/config/src/graph.ts
index e309926..c2f8e05 100644
--- a/apps/canvas/config/src/graph.ts
+++ b/apps/canvas/config/src/graph.ts
@@ -577,6 +577,14 @@
 	targetHandle: z.string().optional(),
 });
 
+export const ViewportTransformSchema = z.object({
+	transformX: z.number(),
+	transformY: z.number(),
+	transformZoom: z.number(),
+	width: z.number(),
+	height: z.number(),
+});
+
 export const GraphSchema = z.object({
 	nodes: z.array(NodeSchema),
 	edges: z.array(EdgeSchema),
@@ -587,6 +595,7 @@
 			zoom: z.number(),
 		})
 		.optional(),
+	viewportTransform: ViewportTransformSchema.optional(),
 });
 
 export const GraphOrConfigSchema = z.discriminatedUnion("type", [
@@ -601,4 +610,5 @@
 ]);
 
 export type Edge = z.infer<typeof EdgeSchema>;
+export type ViewportTransform = z.infer<typeof ViewportTransformSchema>;
 export type Graph = z.infer<typeof GraphSchema>;