@crazyhappyone/auto-graph 0.0.3 → 0.0.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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/geometry/boxes.ts","../src/constraints/solver.ts","../src/dsl/diagnostics.ts","../src/dsl/edges.ts","../src/geometry/shapes.ts","../src/geometry/containers.ts","../src/text/types.ts","../src/text/fallback.ts","../src/text/node-canvas.ts","../src/text/pretext.ts","../src/text/default.ts","../src/labels/fit.ts","../src/dsl/normalize.ts","../src/dsl/schema.ts","../src/dsl/parse.ts","../src/exporters/arrow.ts","../src/exporters/excalidraw.ts","../src/exporters/svg.ts","../src/layout/dagre.ts","../src/routing/routes.ts","../src/solver/solve.ts","../src/dsl/render.ts","../src/serialization/canonical.ts"],"names":["movingCenter","fixedCenter","point","contentBox","style","require","normalizeMinSize","renderGroup","renderNode","compartments","offset","layout","hasErrorDiagnostics"],"mappings":"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","file":"index.js","sourcesContent":["import type { Box, Insets, Point } from \"../ir/geometry.js\";\n\nexport function normalizeInsets(input: Insets | number = 0): Insets {\n\tif (typeof input === \"number\") {\n\t\tvalidateMargin(input, \"margin\");\n\t\treturn {\n\t\t\ttop: input,\n\t\t\tright: input,\n\t\t\tbottom: input,\n\t\t\tleft: input,\n\t\t};\n\t}\n\n\tvalidateMargin(input.top, \"insets.top\");\n\tvalidateMargin(input.right, \"insets.right\");\n\tvalidateMargin(input.bottom, \"insets.bottom\");\n\tvalidateMargin(input.left, \"insets.left\");\n\n\treturn {\n\t\ttop: input.top,\n\t\tright: input.right,\n\t\tbottom: input.bottom,\n\t\tleft: input.left,\n\t};\n}\n\nexport function validateBox(box: Box, label = \"box\"): void {\n\tvalidateFinite(box.x, `${label}.x`);\n\tvalidateFinite(box.y, `${label}.y`);\n\tvalidateFinite(box.width, `${label}.width`);\n\tvalidateFinite(box.height, `${label}.height`);\n\n\tif (box.width < 0 || box.height < 0) {\n\t\tthrow new TypeError(`${label} dimensions must be non-negative`);\n\t}\n}\n\nexport function boxCenter(box: Box): Point {\n\tvalidateBox(box);\n\n\treturn {\n\t\tx: box.x + box.width / 2,\n\t\ty: box.y + box.height / 2,\n\t};\n}\n\nexport function expandBox(box: Box, margin: number | Insets): Box {\n\tvalidateBox(box);\n\n\tconst insets = normalizeInsets(margin);\n\n\treturn {\n\t\tx: box.x - insets.left,\n\t\ty: box.y - insets.top,\n\t\twidth: box.width + insets.left + insets.right,\n\t\theight: box.height + insets.top + insets.bottom,\n\t};\n}\n\nexport function unionBoxes(boxes: readonly Box[]): Box {\n\tif (boxes.length === 0) {\n\t\tthrow new TypeError(\"Cannot union empty box collection\");\n\t}\n\n\tfor (const [index, box] of boxes.entries()) {\n\t\tvalidateBox(box, `boxes[${index}]`);\n\t}\n\n\tconst minX = Math.min(...boxes.map((box) => box.x));\n\tconst minY = Math.min(...boxes.map((box) => box.y));\n\tconst maxX = Math.max(...boxes.map((box) => box.x + box.width));\n\tconst maxY = Math.max(...boxes.map((box) => box.y + box.height));\n\n\treturn {\n\t\tx: minX,\n\t\ty: minY,\n\t\twidth: maxX - minX,\n\t\theight: maxY - minY,\n\t};\n}\n\nexport function intersectsAabb(a: Box, b: Box): boolean {\n\tvalidateBox(a, \"a\");\n\tvalidateBox(b, \"b\");\n\n\treturn (\n\t\ta.x <= b.x + b.width &&\n\t\ta.x + a.width >= b.x &&\n\t\ta.y <= b.y + b.height &&\n\t\ta.y + a.height >= b.y\n\t);\n}\n\nfunction validateMargin(value: number, label: string): void {\n\tvalidateFinite(value, label);\n\n\tif (value < 0) {\n\t\tthrow new TypeError(`${label} must be non-negative`);\n\t}\n}\n\nfunction validateFinite(value: number, label: string): void {\n\tif (!Number.isFinite(value)) {\n\t\tthrow new TypeError(`${label} must be finite`);\n\t}\n}\n","import { intersectsAabb, validateBox } from \"../geometry/boxes.js\";\nimport type {\n\tAlignConstraint,\n\tConstraint,\n\tDistributeConstraint,\n\tRelativePositionConstraint,\n} from \"../ir/constraints.js\";\nimport type { Diagnostic } from \"../ir/diagnostics.js\";\nimport type { NormalizedNode } from \"../ir/elements.js\";\nimport type { Box, Insets, Point } from \"../ir/geometry.js\";\nimport type {\n\tConstraintSolverInput,\n\tConstraintSolverResult,\n\tLayoutLock,\n} from \"./types.js\";\n\nexport function applyLayoutConstraints(\n\tinput: ConstraintSolverInput,\n): ConstraintSolverResult {\n\tconst diagnostics: Diagnostic[] = [];\n\tconst boxes = cloneValidBoxes(input.boxes, diagnostics);\n\tconst locks = new Map<string, LayoutLock>();\n\tconst nodeById = new Map(input.nodes.map((node) => [node.id, node]));\n\n\tapplyFixedPositionLocks(input.nodes, boxes, locks, diagnostics);\n\tapplyExactPositions(input.constraints, boxes, locks, diagnostics, nodeById);\n\tapplyContainment(input.constraints, boxes, locks, diagnostics);\n\tapplyRelative(input.constraints, boxes, locks, diagnostics);\n\tapplyAlign(input.constraints, boxes, locks, diagnostics);\n\tapplyDistribute(input.constraints, boxes, locks, diagnostics);\n\trepairOverlaps(input, boxes, locks, diagnostics);\n\n\treturn { boxes, locks, diagnostics };\n}\n\nfunction cloneValidBoxes(\n\tinput: ReadonlyMap<string, Box>,\n\tdiagnostics: Diagnostic[],\n): Map<string, Box> {\n\tconst boxes = new Map<string, Box>();\n\n\tfor (const [id, box] of input) {\n\t\tif (isFiniteBox(box)) {\n\t\t\tboxes.set(id, { ...box });\n\t\t} else {\n\t\t\tdiagnostics.push({\n\t\t\t\tseverity: \"error\",\n\t\t\t\tcode: \"constraints.position.invalid\",\n\t\t\t\tmessage: `Box ${id} contains invalid coordinates.`,\n\t\t\t\tpath: [\"boxes\", id],\n\t\t\t\tdetail: { nodeId: id },\n\t\t\t});\n\t\t}\n\t}\n\n\treturn boxes;\n}\n\nfunction applyFixedPositionLocks(\n\tnodes: readonly NormalizedNode[],\n\tboxes: Map<string, Box>,\n\tlocks: Map<string, LayoutLock>,\n\tdiagnostics: Diagnostic[],\n): void {\n\tfor (const node of nodes) {\n\t\tif (node.position === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst box = boxes.get(node.id);\n\t\tif (box === undefined) {\n\t\t\tmissingReference(diagnostics, \"node\", node.id);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!isFinitePoint(node.position)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tseverity: \"error\",\n\t\t\t\tcode: \"constraints.position.invalid\",\n\t\t\t\tmessage: `Fixed position for ${node.id} is invalid.`,\n\t\t\t\tpath: [\"nodes\", node.id, \"position\"],\n\t\t\t\tdetail: { nodeId: node.id },\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tboxes.set(node.id, { ...box, x: node.position.x, y: node.position.y });\n\t\tlocks.set(node.id, { nodeId: node.id, source: \"fixed-position\" });\n\t}\n}\n\nfunction applyExactPositions(\n\tconstraints: readonly Constraint[],\n\tboxes: Map<string, Box>,\n\tlocks: Map<string, LayoutLock>,\n\tdiagnostics: Diagnostic[],\n\tnodeById: ReadonlyMap<string, NormalizedNode>,\n): void {\n\tfor (const constraint of constraints) {\n\t\tif (constraint.kind !== \"exact-position\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst targetId = constraintTargetId(constraint);\n\t\tif (targetId === undefined || !nodeById.has(targetId)) {\n\t\t\tmissingReference(diagnostics, \"target\", targetId);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst box = boxes.get(targetId);\n\t\tif (box === undefined) {\n\t\t\tmissingReference(diagnostics, \"box\", targetId);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!isFinitePoint(constraint.position)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tseverity: \"error\",\n\t\t\t\tcode: \"constraints.position.invalid\",\n\t\t\t\tmessage: `Exact position for ${targetId} is invalid.`,\n\t\t\t\tpath: [\"constraints\", constraint.id ?? targetId, \"position\"],\n\t\t\t\tdetail: { nodeId: targetId },\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst existingLock = locks.get(targetId);\n\t\tif (\n\t\t\texistingLock !== undefined &&\n\t\t\t(box.x !== constraint.position.x || box.y !== constraint.position.y)\n\t\t) {\n\t\t\tdiagnostics.push({\n\t\t\t\tseverity: \"error\",\n\t\t\t\tcode: \"constraints.conflict.exact-position\",\n\t\t\t\tmessage: `Exact position conflicts with existing lock for ${targetId}.`,\n\t\t\t\tpath: [\"constraints\", constraint.id ?? targetId],\n\t\t\t\tdetail: { nodeId: targetId, source: existingLock.source },\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tboxes.set(targetId, {\n\t\t\t...box,\n\t\t\tx: constraint.position.x,\n\t\t\ty: constraint.position.y,\n\t\t});\n\t\tlocks.set(targetId, { nodeId: targetId, source: \"exact-position\" });\n\t}\n}\n\nfunction applyContainment(\n\tconstraints: readonly Constraint[],\n\tboxes: Map<string, Box>,\n\tlocks: ReadonlyMap<string, LayoutLock>,\n\tdiagnostics: Diagnostic[],\n): void {\n\tfor (const constraint of constraints) {\n\t\tif (constraint.kind !== \"containment\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst container = boxes.get(constraint.containerId);\n\t\tif (container === undefined) {\n\t\t\tmissingReference(diagnostics, \"container\", constraint.containerId);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst content = contentBox(container, constraint.padding);\n\t\tfor (const childId of constraint.childIds) {\n\t\t\tconst child = boxes.get(childId);\n\t\t\tif (child === undefined) {\n\t\t\t\tmissingReference(diagnostics, \"child\", childId);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst next = moveInside(child, content);\n\t\t\tif (samePosition(child, next)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (locks.has(childId)) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t\tcode: \"constraints.locked-target-not-moved\",\n\t\t\t\t\tmessage: `Locked child ${childId} was not moved into containment.`,\n\t\t\t\t\tpath: [\"constraints\", constraint.id ?? constraint.containerId],\n\t\t\t\t\tdetail: { nodeId: childId },\n\t\t\t\t});\n\t\t\t\tif (!isInside(child, content)) {\n\t\t\t\t\tdiagnostics.push({\n\t\t\t\t\t\tseverity: \"error\",\n\t\t\t\t\t\tcode: \"constraints.containment.impossible\",\n\t\t\t\t\t\tmessage: `Locked child ${childId} cannot fit inside ${constraint.containerId}.`,\n\t\t\t\t\t\tpath: [\"constraints\", constraint.id ?? constraint.containerId],\n\t\t\t\t\t\tdetail: { nodeId: childId, containerId: constraint.containerId },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (next.width > content.width || next.height > content.height) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\tseverity: \"error\",\n\t\t\t\t\tcode: \"constraints.containment.impossible\",\n\t\t\t\t\tmessage: `Child ${childId} cannot fit inside ${constraint.containerId}.`,\n\t\t\t\t\tpath: [\"constraints\", constraint.id ?? constraint.containerId],\n\t\t\t\t\tdetail: { nodeId: childId, containerId: constraint.containerId },\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tboxes.set(childId, next);\n\t\t}\n\t}\n}\n\nfunction applyRelative(\n\tconstraints: readonly Constraint[],\n\tboxes: Map<string, Box>,\n\tlocks: ReadonlyMap<string, LayoutLock>,\n\tdiagnostics: Diagnostic[],\n): void {\n\tfor (const constraint of constraints) {\n\t\tif (constraint.kind !== \"relative-position\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst source = boxes.get(constraint.sourceId);\n\t\tconst reference = boxes.get(constraint.referenceId);\n\t\tif (source === undefined) {\n\t\t\tmissingReference(diagnostics, \"source\", constraint.sourceId);\n\t\t\tcontinue;\n\t\t}\n\t\tif (reference === undefined) {\n\t\t\tmissingReference(diagnostics, \"reference\", constraint.referenceId);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst next = relativeBox(source, reference, constraint);\n\t\tsetUnlockedBox(\n\t\t\tconstraint.sourceId,\n\t\t\tnext,\n\t\t\tboxes,\n\t\t\tlocks,\n\t\t\tdiagnostics,\n\t\t\tconstraint,\n\t\t);\n\t}\n}\n\nfunction applyAlign(\n\tconstraints: readonly Constraint[],\n\tboxes: Map<string, Box>,\n\tlocks: ReadonlyMap<string, LayoutLock>,\n\tdiagnostics: Diagnostic[],\n): void {\n\tfor (const constraint of constraints) {\n\t\tif (constraint.kind !== \"align\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst targets = collectTargets(constraint.targetIds, boxes, diagnostics);\n\t\tconst anchor = targets[0];\n\t\tif (anchor === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst value = alignmentValue(anchor.box, constraint.axis);\n\t\tfor (const { id, box } of targets.slice(1)) {\n\t\t\tconst next = alignBox(box, constraint.axis, value);\n\t\t\tsetUnlockedBox(id, next, boxes, locks, diagnostics, constraint);\n\t\t}\n\t}\n}\n\nfunction applyDistribute(\n\tconstraints: readonly Constraint[],\n\tboxes: Map<string, Box>,\n\tlocks: ReadonlyMap<string, LayoutLock>,\n\tdiagnostics: Diagnostic[],\n): void {\n\tfor (const constraint of constraints) {\n\t\tif (constraint.kind !== \"distribute\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst targets = collectTargets(\n\t\t\tconstraint.targetIds,\n\t\t\tboxes,\n\t\t\tdiagnostics,\n\t\t).sort((a, b) => {\n\t\t\tconst delta =\n\t\t\t\tconstraint.axis === \"horizontal\"\n\t\t\t\t\t? a.box.x - b.box.x\n\t\t\t\t\t: a.box.y - b.box.y;\n\t\t\treturn delta === 0 ? a.id.localeCompare(b.id) : delta;\n\t\t});\n\t\tif (targets.length < 3) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst first = targets[0];\n\t\tconst last = targets[targets.length - 1];\n\t\tif (first === undefined || last === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst spacing =\n\t\t\tconstraint.spacing ??\n\t\t\t(distributionStart(last.box, constraint.axis) -\n\t\t\t\tdistributionStart(first.box, constraint.axis)) /\n\t\t\t\t(targets.length - 1);\n\n\t\tfor (const [index, target] of targets.slice(1, -1).entries()) {\n\t\t\tconst nextStart =\n\t\t\t\tdistributionStart(first.box, constraint.axis) + spacing * (index + 1);\n\t\t\tconst next =\n\t\t\t\tconstraint.axis === \"horizontal\"\n\t\t\t\t\t? { ...target.box, x: nextStart }\n\t\t\t\t\t: { ...target.box, y: nextStart };\n\t\t\tsetUnlockedBox(target.id, next, boxes, locks, diagnostics, constraint);\n\t\t}\n\t}\n}\n\nfunction repairOverlaps(\n\tinput: ConstraintSolverInput,\n\tboxes: Map<string, Box>,\n\tlocks: ReadonlyMap<string, LayoutLock>,\n\tdiagnostics: Diagnostic[],\n): void {\n\tconst spacing = input.overlapSpacing ?? 40;\n\tconst axis = input.direction === \"LR\" || input.direction === \"RL\" ? \"x\" : \"y\";\n\tconst ids = [...boxes.keys()].sort();\n\n\tfor (const firstId of ids) {\n\t\tfor (const secondId of ids) {\n\t\t\tif (firstId >= secondId) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst first = boxes.get(firstId);\n\t\t\tconst second = boxes.get(secondId);\n\t\t\tif (\n\t\t\t\tfirst === undefined ||\n\t\t\t\tsecond === undefined ||\n\t\t\t\t!intersectsAabb(first, second)\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst firstLocked = locks.has(firstId);\n\t\t\tconst secondLocked = locks.has(secondId);\n\t\t\tif (firstLocked === secondLocked) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst movingId = firstLocked ? secondId : firstId;\n\t\t\tconst moving = firstLocked ? second : first;\n\t\t\tconst fixed = firstLocked ? first : second;\n\t\t\tconst moved = movePastOverlap(moving, fixed, axis, spacing);\n\t\t\tboxes.set(movingId, moved);\n\t\t}\n\t}\n\n\tfor (const firstId of ids) {\n\t\tfor (const secondId of ids) {\n\t\t\tif (firstId >= secondId) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst first = boxes.get(firstId);\n\t\t\tconst second = boxes.get(secondId);\n\t\t\tif (\n\t\t\t\tfirst !== undefined &&\n\t\t\t\tsecond !== undefined &&\n\t\t\t\tintersectsAabb(first, second)\n\t\t\t) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t\tcode: \"constraints.overlap.unresolved\",\n\t\t\t\t\tmessage: `Boxes ${firstId} and ${secondId} still overlap after stable sorted primary axis repair with configured spacing.`,\n\t\t\t\t\tpath: [\"boxes\"],\n\t\t\t\t\tdetail: { firstId, secondId },\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction setUnlockedBox(\n\tid: string,\n\tnext: Box,\n\tboxes: Map<string, Box>,\n\tlocks: ReadonlyMap<string, LayoutLock>,\n\tdiagnostics: Diagnostic[],\n\tconstraint: Constraint,\n): void {\n\tconst current = boxes.get(id);\n\tif (current === undefined) {\n\t\tmissingReference(diagnostics, \"target\", id);\n\t\treturn;\n\t}\n\n\tif (!isFiniteBox(next)) {\n\t\tdiagnostics.push({\n\t\t\tseverity: \"error\",\n\t\t\tcode: \"constraints.position.invalid\",\n\t\t\tmessage: `Constraint produced an invalid position for ${id}.`,\n\t\t\tpath: [\"constraints\", constraint.id ?? id],\n\t\t\tdetail: { nodeId: id },\n\t\t});\n\t\treturn;\n\t}\n\n\tif (locks.has(id) && !samePosition(current, next)) {\n\t\tdiagnostics.push({\n\t\t\tseverity: \"warning\",\n\t\t\tcode: \"constraints.locked-target-not-moved\",\n\t\t\tmessage: `Locked target ${id} was not moved by ${constraint.kind}.`,\n\t\t\tpath: [\"constraints\", constraint.id ?? id],\n\t\t\tdetail: { nodeId: id, constraintKind: constraint.kind },\n\t\t});\n\t\treturn;\n\t}\n\n\tboxes.set(id, next);\n}\n\nfunction constraintTargetId(\n\tconstraint: Extract<Constraint, { kind: \"exact-position\" }>,\n): string | undefined {\n\treturn constraint.targetId ?? constraint.target?.id;\n}\n\nfunction collectTargets(\n\tids: readonly string[],\n\tboxes: ReadonlyMap<string, Box>,\n\tdiagnostics: Diagnostic[],\n): { id: string; box: Box }[] {\n\tconst targets: { id: string; box: Box }[] = [];\n\tfor (const id of ids) {\n\t\tconst box = boxes.get(id);\n\t\tif (box === undefined) {\n\t\t\tmissingReference(diagnostics, \"target\", id);\n\t\t} else {\n\t\t\ttargets.push({ id, box });\n\t\t}\n\t}\n\treturn targets;\n}\n\nfunction relativeBox(\n\tsource: Box,\n\treference: Box,\n\tconstraint: RelativePositionConstraint,\n): Box {\n\tconst offset = constraint.offset ?? { x: 0, y: 0 };\n\tswitch (constraint.relation) {\n\t\tcase \"above\":\n\t\t\treturn {\n\t\t\t\t...source,\n\t\t\t\tx: reference.x + offset.x,\n\t\t\t\ty: reference.y - source.height + offset.y,\n\t\t\t};\n\t\tcase \"right-of\":\n\t\t\treturn {\n\t\t\t\t...source,\n\t\t\t\tx: reference.x + reference.width + offset.x,\n\t\t\t\ty: reference.y + offset.y,\n\t\t\t};\n\t\tcase \"below\":\n\t\t\treturn {\n\t\t\t\t...source,\n\t\t\t\tx: reference.x + offset.x,\n\t\t\t\ty: reference.y + reference.height + offset.y,\n\t\t\t};\n\t\tcase \"left-of\":\n\t\t\treturn {\n\t\t\t\t...source,\n\t\t\t\tx: reference.x - source.width + offset.x,\n\t\t\t\ty: reference.y + offset.y,\n\t\t\t};\n\t}\n}\n\nfunction alignmentValue(box: Box, axis: AlignConstraint[\"axis\"]): number {\n\tswitch (axis) {\n\t\tcase \"x\":\n\t\tcase \"left\":\n\t\t\treturn box.x;\n\t\tcase \"y\":\n\t\tcase \"top\":\n\t\t\treturn box.y;\n\t\tcase \"center-x\":\n\t\t\treturn box.x + box.width / 2;\n\t\tcase \"center-y\":\n\t\t\treturn box.y + box.height / 2;\n\t\tcase \"right\":\n\t\t\treturn box.x + box.width;\n\t\tcase \"bottom\":\n\t\t\treturn box.y + box.height;\n\t}\n}\n\nfunction alignBox(box: Box, axis: AlignConstraint[\"axis\"], value: number): Box {\n\tswitch (axis) {\n\t\tcase \"x\":\n\t\tcase \"left\":\n\t\t\treturn { ...box, x: value };\n\t\tcase \"y\":\n\t\tcase \"top\":\n\t\t\treturn { ...box, y: value };\n\t\tcase \"center-x\":\n\t\t\treturn { ...box, x: value - box.width / 2 };\n\t\tcase \"center-y\":\n\t\t\treturn { ...box, y: value - box.height / 2 };\n\t\tcase \"right\":\n\t\t\treturn { ...box, x: value - box.width };\n\t\tcase \"bottom\":\n\t\t\treturn { ...box, y: value - box.height };\n\t}\n}\n\nfunction distributionStart(\n\tbox: Box,\n\taxis: DistributeConstraint[\"axis\"],\n): number {\n\treturn axis === \"horizontal\" ? box.x : box.y;\n}\n\nfunction contentBox(container: Box, padding: Insets | undefined): Box {\n\tconst margin = padding ?? { top: 0, right: 0, bottom: 0, left: 0 };\n\treturn {\n\t\tx: container.x + margin.left,\n\t\ty: container.y + margin.top,\n\t\twidth: container.width - margin.left - margin.right,\n\t\theight: container.height - margin.top - margin.bottom,\n\t};\n}\n\nfunction moveInside(child: Box, container: Box): Box {\n\treturn {\n\t\t...child,\n\t\tx: Math.min(\n\t\t\tMath.max(child.x, container.x),\n\t\t\tcontainer.x + container.width - child.width,\n\t\t),\n\t\ty: Math.min(\n\t\t\tMath.max(child.y, container.y),\n\t\t\tcontainer.y + container.height - child.height,\n\t\t),\n\t};\n}\n\nfunction isInside(child: Box, container: Box): boolean {\n\treturn (\n\t\tchild.x >= container.x &&\n\t\tchild.y >= container.y &&\n\t\tchild.x + child.width <= container.x + container.width &&\n\t\tchild.y + child.height <= container.y + container.height\n\t);\n}\n\nfunction movePastOverlap(\n\tmoving: Box,\n\tfixed: Box,\n\tprimaryAxis: \"x\" | \"y\",\n\tspacing: number,\n): Box {\n\tif (primaryAxis === \"x\") {\n\t\tconst movingCenter = moving.x + moving.width / 2;\n\t\tconst fixedCenter = fixed.x + fixed.width / 2;\n\t\tconst x =\n\t\t\tmovingCenter >= fixedCenter\n\t\t\t\t? fixed.x + fixed.width + spacing\n\t\t\t\t: fixed.x - moving.width - spacing;\n\t\treturn { ...moving, x };\n\t}\n\n\tconst movingCenter = moving.y + moving.height / 2;\n\tconst fixedCenter = fixed.y + fixed.height / 2;\n\tconst y =\n\t\tmovingCenter >= fixedCenter\n\t\t\t? fixed.y + fixed.height + spacing\n\t\t\t: fixed.y - moving.height - spacing;\n\treturn { ...moving, y };\n}\n\nfunction samePosition(a: Box, b: Box): boolean {\n\treturn a.x === b.x && a.y === b.y;\n}\n\nfunction isFiniteBox(box: Box): boolean {\n\ttry {\n\t\tvalidateBox(box);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction isFinitePoint(point: Point): boolean {\n\treturn Number.isFinite(point.x) && Number.isFinite(point.y);\n}\n\nfunction missingReference(\n\tdiagnostics: Diagnostic[],\n\treferenceKind: string,\n\tid: string | undefined,\n): void {\n\tdiagnostics.push({\n\t\tseverity: \"error\",\n\t\tcode: \"constraints.reference.missing\",\n\t\tmessage: `Missing ${referenceKind} reference${id === undefined ? \"\" : `: ${id}`}.`,\n\t\tpath: [\"constraints\", referenceKind],\n\t\tdetail: id === undefined ? {} : { id },\n\t});\n}\n","import type { DslDiagnostic, DslDiagnosticLayer } from \"./types.js\";\n\nconst SEVERITY_RANK = new Map([\n\t[\"error\", 0],\n\t[\"warning\", 1],\n\t[\"info\", 2],\n] as const);\n\nconst LAYER_RANK = new Map<DslDiagnosticLayer, number>([\n\t[\"parse\", 0],\n\t[\"validate\", 1],\n\t[\"solve\", 2],\n\t[\"export\", 3],\n\t[\"io\", 4],\n]);\n\nexport function sortDslDiagnostics(\n\tdiagnostics: DslDiagnostic[],\n): DslDiagnostic[] {\n\treturn [...diagnostics].sort((a, b) => {\n\t\tconst severityDelta =\n\t\t\t(SEVERITY_RANK.get(a.severity) ?? 99) -\n\t\t\t(SEVERITY_RANK.get(b.severity) ?? 99);\n\t\tif (severityDelta !== 0) {\n\t\t\treturn severityDelta;\n\t\t}\n\n\t\tconst layerDelta =\n\t\t\t(LAYER_RANK.get(a.layer) ?? 99) - (LAYER_RANK.get(b.layer) ?? 99);\n\t\tif (layerDelta !== 0) {\n\t\t\treturn layerDelta;\n\t\t}\n\n\t\tconst pathDelta = pathKey(a.path).localeCompare(pathKey(b.path));\n\t\tif (pathDelta !== 0) {\n\t\t\treturn pathDelta;\n\t\t}\n\n\t\treturn a.code.localeCompare(b.code);\n\t});\n}\n\nexport function createSchemaDiagnostic(\n\tpath: Array<string | number>,\n\tmessage: string,\n): DslDiagnostic {\n\treturn {\n\t\tseverity: \"error\",\n\t\tlayer: \"validate\",\n\t\tcode: \"validate.schema.invalid\",\n\t\tmessage,\n\t\tpath,\n\t\thint: hintForPath(path),\n\t};\n}\n\nexport function createParseDiagnostic(\n\tcode: string,\n\tmessage: string,\n\thint: string,\n): DslDiagnostic {\n\treturn {\n\t\tseverity: \"error\",\n\t\tlayer: \"parse\",\n\t\tcode,\n\t\tmessage,\n\t\thint,\n\t};\n}\n\nfunction hintForPath(path: Array<string | number>): string {\n\tconst pathText = pathKey(path);\n\n\tif (pathText.endsWith(\".shape\")) {\n\t\treturn \"Use one of: rectangle, rounded-rectangle, ellipse, diamond, parallelogram, hexagon, cylinder.\";\n\t}\n\n\tif (pathText.endsWith(\".format\")) {\n\t\treturn \"Use output format svg or excalidraw.\";\n\t}\n\n\tif (pathText.includes(\".position.\")) {\n\t\treturn \"Use finite numeric x and y coordinates.\";\n\t}\n\n\treturn \"Check the DSL value at this path against the supported schema.\";\n}\n\nfunction pathKey(path: DslDiagnostic[\"path\"]): string {\n\treturn (path ?? []).map(String).join(\".\");\n}\n","import type { DslDiagnostic } from \"./types.js\";\n\nconst EDGE_ID_PATTERN = /^[A-Za-z0-9_.:-]+$/;\nconst SHORTHAND_PATTERN = /^(.+?)\\s*->\\s*([^:]+)(?::(.*))?$/;\n\nexport interface ParsedEdgeShorthand {\n\tsourceId: string;\n\ttargetId: string;\n\tlabel?: { text: string };\n}\n\nexport function parseEdgeShorthand(\n\tvalue: string,\n\tpath: Array<string | number>,\n): { edge?: ParsedEdgeShorthand; diagnostics: DslDiagnostic[] } {\n\tconst match = SHORTHAND_PATTERN.exec(value.trim());\n\tif (match === null) {\n\t\treturn invalidEdgeShorthand(path);\n\t}\n\n\tconst sourceId = match[1]?.trim() ?? \"\";\n\tconst targetId = match[2]?.trim() ?? \"\";\n\tconst labelText = match[3]?.trim();\n\n\tif (!isValidEdgeId(sourceId) || !isValidEdgeId(targetId)) {\n\t\treturn invalidEdgeShorthand(path);\n\t}\n\n\treturn {\n\t\tedge: {\n\t\t\tsourceId,\n\t\t\ttargetId,\n\t\t\t...(labelText === undefined || labelText === \"\"\n\t\t\t\t? {}\n\t\t\t\t: { label: { text: labelText } }),\n\t\t},\n\t\tdiagnostics: [],\n\t};\n}\n\nfunction invalidEdgeShorthand(path: Array<string | number>): {\n\tdiagnostics: DslDiagnostic[];\n} {\n\treturn {\n\t\tdiagnostics: [\n\t\t\t{\n\t\t\t\tseverity: \"error\",\n\t\t\t\tlayer: \"validate\",\n\t\t\t\tcode: \"validate.edge-shorthand.invalid\",\n\t\t\t\tmessage: \"Invalid edge shorthand.\",\n\t\t\t\tpath,\n\t\t\t\thint: 'Use \"source -> target\" or \"source -> target: label\".',\n\t\t\t},\n\t\t],\n\t};\n}\n\nfunction isValidEdgeId(value: string): boolean {\n\treturn value.length > 0 && EDGE_ID_PATTERN.test(value);\n}\n","import type { NodeShape } from \"../ir/elements.js\";\nimport type {\n\tAnchorName,\n\tAnchorPoint,\n\tBox,\n\tInsets,\n\tPoint,\n} from \"../ir/geometry.js\";\nimport { boxCenter, expandBox, validateBox } from \"./boxes.js\";\n\nconst SUPPORTED_SHAPES = new Set<NodeShape>([\n\t\"rectangle\",\n\t\"rounded-rectangle\",\n\t\"ellipse\",\n\t\"diamond\",\n\t\"parallelogram\",\n\t\"hexagon\",\n\t\"cylinder\",\n]);\n\nexport interface ShapeGeometryInput {\n\tshape: NodeShape;\n\tbox: Box;\n\tobstacleMargin?: number | Insets;\n}\n\nexport interface ShapeGeometry {\n\tshape: NodeShape;\n\tbox: Box;\n\tcenter: Point;\n\tanchors: AnchorPoint[];\n\tobstacleBox: Box;\n}\n\nexport function computeShapeGeometry(input: ShapeGeometryInput): ShapeGeometry {\n\tvalidateShape(input.shape);\n\tvalidateBox(input.box);\n\n\tconst box = { ...input.box };\n\n\treturn {\n\t\tshape: input.shape,\n\t\tbox,\n\t\tcenter: boxCenter(box),\n\t\tanchors: createAnchors(box),\n\t\tobstacleBox: expandBox(box, input.obstacleMargin ?? 0),\n\t};\n}\n\nexport function getEdgePort(\n\tgeometry: ShapeGeometry,\n\ttoward: Point,\n\tpreferredAnchor?: AnchorName,\n): Point {\n\tvalidateShape(geometry.shape);\n\tvalidateBox(geometry.box);\n\tvalidatePoint(toward, \"toward\");\n\n\tif (preferredAnchor !== undefined) {\n\t\tconst anchor = geometry.anchors.find((candidate) => {\n\t\t\treturn candidate.name === preferredAnchor;\n\t\t});\n\n\t\tif (anchor === undefined) {\n\t\t\tthrow new TypeError(`Unsupported anchor: ${preferredAnchor}`);\n\t\t}\n\n\t\treturn { ...anchor.point };\n\t}\n\n\tif (\n\t\tgeometry.shape === \"rectangle\" ||\n\t\tgeometry.shape === \"rounded-rectangle\"\n\t) {\n\t\treturn rayToBox(geometry.box, toward);\n\t}\n\n\t// Practical deterministic approximation: precise visual boundary intersections\n\t// are deferred; Phase 2 returns stable ports inside the outer shape box.\n\treturn snapToNearestAnchor(geometry, toward);\n}\n\nfunction createAnchors(box: Box): AnchorPoint[] {\n\tconst left = box.x;\n\tconst right = box.x + box.width;\n\tconst top = box.y;\n\tconst bottom = box.y + box.height;\n\tconst center = boxCenter(box);\n\n\treturn [\n\t\t{ name: \"center\", point: center },\n\t\t{ name: \"top\", point: { x: center.x, y: top } },\n\t\t{ name: \"right\", point: { x: right, y: center.y } },\n\t\t{ name: \"bottom\", point: { x: center.x, y: bottom } },\n\t\t{ name: \"left\", point: { x: left, y: center.y } },\n\t\t{ name: \"top-left\", point: { x: left, y: top } },\n\t\t{ name: \"top-right\", point: { x: right, y: top } },\n\t\t{ name: \"bottom-right\", point: { x: right, y: bottom } },\n\t\t{ name: \"bottom-left\", point: { x: left, y: bottom } },\n\t];\n}\n\nfunction rayToBox(box: Box, toward: Point): Point {\n\tconst center = boxCenter(box);\n\tconst dx = toward.x - center.x;\n\tconst dy = toward.y - center.y;\n\n\tif (dx === 0 && dy === 0) {\n\t\treturn center;\n\t}\n\n\tconst halfWidth = box.width / 2;\n\tconst halfHeight = box.height / 2;\n\tconst scaleX = dx === 0 ? Number.POSITIVE_INFINITY : halfWidth / Math.abs(dx);\n\tconst scaleY =\n\t\tdy === 0 ? Number.POSITIVE_INFINITY : halfHeight / Math.abs(dy);\n\tconst scale = Math.min(scaleX, scaleY);\n\n\treturn clampPointToBox(\n\t\t{\n\t\t\tx: center.x + dx * scale,\n\t\t\ty: center.y + dy * scale,\n\t\t},\n\t\tbox,\n\t);\n}\n\nfunction snapToNearestAnchor(geometry: ShapeGeometry, toward: Point): Point {\n\tlet best = geometry.anchors[0];\n\tlet bestDistance = Number.POSITIVE_INFINITY;\n\n\tfor (const anchor of geometry.anchors) {\n\t\tif (anchor.name === \"center\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst distance = squaredDistance(anchor.point, toward);\n\n\t\tif (distance < bestDistance) {\n\t\t\tbest = anchor;\n\t\t\tbestDistance = distance;\n\t\t}\n\t}\n\n\tif (best === undefined) {\n\t\treturn { ...geometry.center };\n\t}\n\n\treturn clampPointToBox(best.point, geometry.box);\n}\n\nfunction clampPointToBox(point: Point, box: Box): Point {\n\treturn {\n\t\tx: Math.min(Math.max(point.x, box.x), box.x + box.width),\n\t\ty: Math.min(Math.max(point.y, box.y), box.y + box.height),\n\t};\n}\n\nfunction squaredDistance(a: Point, b: Point): number {\n\tconst dx = a.x - b.x;\n\tconst dy = a.y - b.y;\n\n\treturn dx * dx + dy * dy;\n}\n\nfunction validateShape(shape: NodeShape): void {\n\tif (!SUPPORTED_SHAPES.has(shape)) {\n\t\tthrow new TypeError(`Unsupported shape: ${shape}`);\n\t}\n}\n\nfunction validatePoint(point: Point, label: string): void {\n\tif (!Number.isFinite(point.x) || !Number.isFinite(point.y)) {\n\t\tthrow new TypeError(`${label} point must be finite`);\n\t}\n}\n","import type { Diagnostic } from \"../ir/diagnostics.js\";\nimport type { AnchorPoint, Box, Insets, Size } from \"../ir/geometry.js\";\nimport type { LabelLayout } from \"../labels/index.js\";\nimport { expandBox, normalizeInsets, unionBoxes } from \"./boxes.js\";\nimport { computeShapeGeometry } from \"./shapes.js\";\n\nexport interface ContainerGeometryInput {\n\tid: string;\n\tchildBoxes: readonly Box[];\n\tpadding: Insets | number;\n\tlabelLayout?: LabelLayout;\n\tminSize?: Partial<Size>;\n\tobstacleMargin?: number | Insets;\n}\n\nexport interface ContainerGeometry {\n\tid: string;\n\tbox: Box;\n\tcontentBox: Box;\n\tchildBounds: Box;\n\tlabelLayout?: LabelLayout;\n\tanchors: AnchorPoint[];\n\tobstacleBox: Box;\n\tdiagnostics: Diagnostic[];\n}\n\nexport function computeContainerGeometry(\n\tinput: ContainerGeometryInput,\n): ContainerGeometry {\n\tconst childBounds = unionBoxes(input.childBoxes);\n\tconst padding = normalizeInsets(input.padding);\n\tconst minSize = normalizeMinSize(input.minSize);\n\tconst headerHeight =\n\t\tinput.labelLayout?.fittedSize.height ?? input.labelLayout?.box.height ?? 0;\n\tconst intrinsicBox = {\n\t\tx: childBounds.x - padding.left,\n\t\ty: childBounds.y - padding.top - headerHeight,\n\t\twidth: childBounds.width + padding.left + padding.right,\n\t\theight: childBounds.height + padding.top + padding.bottom + headerHeight,\n\t};\n\tconst box = {\n\t\t...intrinsicBox,\n\t\twidth: Math.max(intrinsicBox.width, minSize.width ?? 0),\n\t\theight: Math.max(intrinsicBox.height, minSize.height ?? 0),\n\t};\n\tconst contentBox = {\n\t\tx: childBounds.x,\n\t\ty: childBounds.y,\n\t\twidth: childBounds.width,\n\t\theight: childBounds.height,\n\t};\n\tconst shape = computeShapeGeometry({\n\t\tshape: \"rectangle\",\n\t\tbox,\n\t});\n\tconst obstacleBox = expandBox(box, input.obstacleMargin ?? 0);\n\n\treturn {\n\t\tid: input.id,\n\t\tbox,\n\t\tcontentBox,\n\t\tchildBounds,\n\t\t...(input.labelLayout === undefined\n\t\t\t? {}\n\t\t\t: { labelLayout: input.labelLayout }),\n\t\tanchors: shape.anchors,\n\t\tobstacleBox,\n\t\tdiagnostics: [],\n\t};\n}\n\nfunction normalizeMinSize(minSize: Partial<Size> = {}): Partial<Size> {\n\tif (minSize.width !== undefined) {\n\t\tvalidateSize(minSize.width, \"minSize.width\");\n\t}\n\n\tif (minSize.height !== undefined) {\n\t\tvalidateSize(minSize.height, \"minSize.height\");\n\t}\n\n\treturn { ...minSize };\n}\n\nfunction validateSize(value: number, label: string): void {\n\tif (!Number.isFinite(value) || value < 0) {\n\t\tthrow new TypeError(`${label} must be finite and non-negative`);\n\t}\n}\n","import type { Diagnostic } from \"../ir/diagnostics.js\";\n\nexport interface TextStyleOptions {\n\tfontFamily: string;\n\tfontSize: number;\n\tfontWeight?: number | string;\n\tfontStyle?: \"normal\" | \"italic\";\n\tlineHeight?: number;\n\tletterSpacing?: number;\n\twhiteSpace?: \"normal\" | \"pre-wrap\";\n\twordBreak?: \"normal\" | \"keep-all\";\n}\n\nexport type TextMeasurementBackend = \"deterministic\" | \"pretext\";\n\nexport interface PreparedText {\n\ttext: string;\n\tfont: string;\n\tstyle: TextStyleOptions;\n\tbackend: TextMeasurementBackend;\n}\n\nexport interface TextCursor {\n\tsegmentIndex: number;\n\tgraphemeIndex: number;\n}\n\nexport interface TextLayoutLine {\n\ttext: string;\n\twidth: number;\n\tstart: TextCursor;\n\tend: TextCursor;\n}\n\nexport interface TextLayout {\n\twidth: number;\n\theight: number;\n\tlineHeight: number;\n\tlineCount: number;\n\tlines: TextLayoutLine[];\n\tdiagnostics: Diagnostic[];\n}\n\nexport interface TextMeasurer {\n\tprepare(text: string, style: TextStyleOptions): PreparedText;\n\tlayout(\n\t\tprepared: PreparedText,\n\t\tmaxWidth: number,\n\t\tlineHeight?: number,\n\t): TextLayout;\n\tnaturalWidth(prepared: PreparedText): number;\n}\n\nexport function assertFinitePositive(value: number, label: string): void {\n\tif (!Number.isFinite(value) || value <= 0) {\n\t\tthrow new TypeError(`${label} must be finite and positive`);\n\t}\n}\n\nexport function assertFiniteNonNegative(value: number, label: string): void {\n\tif (!Number.isFinite(value) || value < 0) {\n\t\tthrow new TypeError(`${label} must be a finite non-negative width`);\n\t}\n}\n\nexport function validateTextStyle(style: TextStyleOptions): void {\n\tassertFinitePositive(style.fontSize, \"fontSize\");\n\n\tif (style.lineHeight !== undefined) {\n\t\tassertFinitePositive(style.lineHeight, \"lineHeight\");\n\t}\n\n\tif (\n\t\tstyle.letterSpacing !== undefined &&\n\t\t!Number.isFinite(style.letterSpacing)\n\t) {\n\t\tthrow new TypeError(\"letterSpacing must be finite\");\n\t}\n}\n\nexport function resolveLineHeight(style: TextStyleOptions): number {\n\tvalidateTextStyle(style);\n\treturn style.lineHeight ?? style.fontSize * 1.2;\n}\n\nexport function toCanvasFont(style: TextStyleOptions): string {\n\tvalidateTextStyle(style);\n\n\tconst fontStyle = style.fontStyle === \"italic\" ? \"italic \" : \"\";\n\tconst fontWeight = style.fontWeight ?? 400;\n\n\treturn `${fontStyle}${fontWeight} ${style.fontSize}px ${style.fontFamily}`;\n}\n","import type {\n\tPreparedText,\n\tTextLayout,\n\tTextLayoutLine,\n\tTextMeasurer,\n\tTextStyleOptions,\n} from \"./types.js\";\nimport {\n\tassertFiniteNonNegative,\n\tresolveLineHeight,\n\ttoCanvasFont,\n\tvalidateTextStyle,\n} from \"./types.js\";\n\nexport class DeterministicTextMeasurer implements TextMeasurer {\n\tprepare(text: string, style: TextStyleOptions): PreparedText {\n\t\tvalidateTextStyle(style);\n\n\t\treturn {\n\t\t\ttext,\n\t\t\tfont: toCanvasFont(style),\n\t\t\tstyle: { ...style },\n\t\t\tbackend: \"deterministic\",\n\t\t};\n\t}\n\n\tlayout(\n\t\tprepared: PreparedText,\n\t\tmaxWidth: number,\n\t\tlineHeight = resolveLineHeight(prepared.style),\n\t): TextLayout {\n\t\tassertFiniteNonNegative(maxWidth, \"maxWidth\");\n\t\tassertFinitePositiveLineHeight(lineHeight);\n\n\t\tconst lines = this.wrap(prepared, maxWidth);\n\t\tconst width = lines.reduce(\n\t\t\t(current, line) => Math.max(current, line.width),\n\t\t\t0,\n\t\t);\n\n\t\treturn {\n\t\t\twidth,\n\t\t\theight: lines.length * lineHeight,\n\t\t\tlineHeight,\n\t\t\tlineCount: lines.length,\n\t\t\tlines,\n\t\t\tdiagnostics: [],\n\t\t};\n\t}\n\n\tnaturalWidth(prepared: PreparedText): number {\n\t\tconst charWidth = getCharacterWidth(prepared.style);\n\n\t\treturn prepared.text.split(\"\\n\").reduce((width, line) => {\n\t\t\treturn Math.max(width, line.length * charWidth);\n\t\t}, 0);\n\t}\n\n\tprivate wrap(prepared: PreparedText, maxWidth: number): TextLayoutLine[] {\n\t\tconst charWidth = getCharacterWidth(prepared.style);\n\t\tconst sourceLines = prepared.text.split(\"\\n\");\n\t\tconst output: TextLayoutLine[] = [];\n\t\tlet segmentIndex = 0;\n\n\t\tfor (const sourceLine of sourceLines) {\n\t\t\tif (sourceLine.length === 0) {\n\t\t\t\toutput.push(createLine(\"\", 0, segmentIndex, 0, 0));\n\t\t\t\tsegmentIndex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst maxChars =\n\t\t\t\tmaxWidth <= 0 ? 1 : Math.max(1, Math.floor(maxWidth / charWidth));\n\n\t\t\tfor (let start = 0; start < sourceLine.length; start += maxChars) {\n\t\t\t\tconst text = sourceLine.slice(start, start + maxChars);\n\t\t\t\toutput.push(\n\t\t\t\t\tcreateLine(\n\t\t\t\t\t\ttext,\n\t\t\t\t\t\ttext.length * charWidth,\n\t\t\t\t\t\tsegmentIndex,\n\t\t\t\t\t\tstart,\n\t\t\t\t\t\tstart + text.length,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tsegmentIndex += 1;\n\t\t}\n\n\t\tif (output.length === 0) {\n\t\t\toutput.push(createLine(\"\", 0, 0, 0, 0));\n\t\t}\n\n\t\treturn output;\n\t}\n}\n\nfunction getCharacterWidth(style: TextStyleOptions): number {\n\tconst letterSpacing = style.letterSpacing ?? 0;\n\treturn Math.max(0, style.fontSize * 0.6 + letterSpacing);\n}\n\nfunction createLine(\n\ttext: string,\n\twidth: number,\n\tsegmentIndex: number,\n\tstart: number,\n\tend: number,\n): TextLayoutLine {\n\treturn {\n\t\ttext,\n\t\twidth,\n\t\tstart: {\n\t\t\tsegmentIndex,\n\t\t\tgraphemeIndex: start,\n\t\t},\n\t\tend: {\n\t\t\tsegmentIndex,\n\t\t\tgraphemeIndex: end,\n\t\t},\n\t};\n}\n\nfunction assertFinitePositiveLineHeight(lineHeight: number): void {\n\tif (!Number.isFinite(lineHeight) || lineHeight <= 0) {\n\t\tthrow new TypeError(\"lineHeight must be finite and positive\");\n\t}\n}\n","import { createRequire } from \"node:module\";\n\ntype OffscreenCanvasConstructor = typeof globalThis.OffscreenCanvas;\ntype NodeCanvas = import(\"@napi-rs/canvas\").Canvas;\ntype NodeCanvasModule = {\n\tcreateCanvas(width: number, height: number): NodeCanvas;\n};\ntype LoadNodeCanvasModule = () => NodeCanvasModule;\n\nconst require = createRequire(import.meta.url);\n\nexport function installNodeCanvasRuntime(\n\tloadNodeCanvasModule: LoadNodeCanvasModule = loadDefaultNodeCanvasModule,\n): boolean {\n\tif (typeof globalThis.OffscreenCanvas === \"function\") {\n\t\treturn true;\n\t}\n\n\ttry {\n\t\tconst canvasModule = loadNodeCanvasModule();\n\t\tconst { createCanvas } = canvasModule;\n\t\tconst NodeOffscreenCanvas = class {\n\t\t\tprivate readonly canvas: NodeCanvas;\n\n\t\t\tconstructor(width: number, height: number) {\n\t\t\t\tthis.canvas = createCanvas(width, height);\n\t\t\t}\n\n\t\t\tgetContext(contextId: \"2d\") {\n\t\t\t\treturn contextId === \"2d\" ? this.canvas.getContext(\"2d\") : null;\n\t\t\t}\n\t\t};\n\n\t\tglobalThis.OffscreenCanvas =\n\t\t\tNodeOffscreenCanvas as unknown as OffscreenCanvasConstructor;\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction loadDefaultNodeCanvasModule(): NodeCanvasModule {\n\treturn require(\"@napi-rs/canvas\") as NodeCanvasModule;\n}\n","import type { PreparedTextWithSegments } from \"@chenglou/pretext\";\nimport {\n\tlayoutWithLines,\n\tmeasureNaturalWidth,\n\tprepareWithSegments,\n} from \"@chenglou/pretext\";\nimport type {\n\tPreparedText,\n\tTextLayout,\n\tTextMeasurer,\n\tTextStyleOptions,\n} from \"./types.js\";\nimport {\n\tassertFiniteNonNegative,\n\tresolveLineHeight,\n\ttoCanvasFont,\n\tvalidateTextStyle,\n} from \"./types.js\";\n\ntype InternalPretextPrepared = PreparedText & {\n\treadonly pretextPrepared: PreparedTextWithSegments;\n};\n\nconst RUNTIME_UNAVAILABLE = \"text.pretext.runtime-unavailable\";\n\nexport function isPretextRuntimeAvailable(): boolean {\n\treturn (\n\t\ttypeof Intl.Segmenter === \"function\" &&\n\t\ttypeof globalThis.OffscreenCanvas === \"function\"\n\t);\n}\n\nexport class PretextTextMeasurer implements TextMeasurer {\n\tprepare(text: string, style: TextStyleOptions): PreparedText {\n\t\tif (!isPretextRuntimeAvailable()) {\n\t\t\tthrow new TypeError(RUNTIME_UNAVAILABLE);\n\t\t}\n\n\t\tvalidateTextStyle(style);\n\n\t\tconst font = toCanvasFont(style);\n\t\tconst options = {\n\t\t\t...(style.whiteSpace === undefined\n\t\t\t\t? {}\n\t\t\t\t: { whiteSpace: style.whiteSpace }),\n\t\t\t...(style.wordBreak === undefined ? {} : { wordBreak: style.wordBreak }),\n\t\t\t...(style.letterSpacing === undefined\n\t\t\t\t? {}\n\t\t\t\t: { letterSpacing: style.letterSpacing }),\n\t\t};\n\t\tconst prepared = prepareWithSegments(text, font, options);\n\n\t\treturn {\n\t\t\ttext,\n\t\t\tfont,\n\t\t\tstyle: { ...style },\n\t\t\tbackend: \"pretext\",\n\t\t\tpretextPrepared: prepared,\n\t\t} as InternalPretextPrepared;\n\t}\n\n\tlayout(\n\t\tprepared: PreparedText,\n\t\tmaxWidth: number,\n\t\tlineHeight = resolveLineHeight(prepared.style),\n\t): TextLayout {\n\t\tassertFiniteNonNegative(maxWidth, \"maxWidth\");\n\t\tif (!Number.isFinite(lineHeight) || lineHeight <= 0) {\n\t\t\tthrow new TypeError(\"lineHeight must be finite and positive\");\n\t\t}\n\n\t\tconst result = layoutWithLines(\n\t\t\ttoInternalPrepared(prepared),\n\t\t\tmaxWidth,\n\t\t\tlineHeight,\n\t\t);\n\t\tconst width = result.lines.reduce(\n\t\t\t(current, line) => Math.max(current, line.width),\n\t\t\t0,\n\t\t);\n\n\t\treturn {\n\t\t\twidth,\n\t\t\theight: result.height,\n\t\t\tlineHeight,\n\t\t\tlineCount: result.lineCount,\n\t\t\tlines: result.lines.map((line) => ({\n\t\t\t\ttext: line.text,\n\t\t\t\twidth: line.width,\n\t\t\t\tstart: {\n\t\t\t\t\tsegmentIndex: line.start.segmentIndex,\n\t\t\t\t\tgraphemeIndex: line.start.graphemeIndex,\n\t\t\t\t},\n\t\t\t\tend: {\n\t\t\t\t\tsegmentIndex: line.end.segmentIndex,\n\t\t\t\t\tgraphemeIndex: line.end.graphemeIndex,\n\t\t\t\t},\n\t\t\t})),\n\t\t\tdiagnostics: [],\n\t\t};\n\t}\n\n\tnaturalWidth(prepared: PreparedText): number {\n\t\treturn measureNaturalWidth(toInternalPrepared(prepared));\n\t}\n}\n\nfunction toInternalPrepared(prepared: PreparedText): PreparedTextWithSegments {\n\tif (prepared.backend !== \"pretext\" || !(\"pretextPrepared\" in prepared)) {\n\t\tthrow new TypeError(\"prepared text was not created by PretextTextMeasurer\");\n\t}\n\n\treturn prepared.pretextPrepared as PreparedTextWithSegments;\n}\n","import { DeterministicTextMeasurer } from \"./fallback.js\";\nimport { installNodeCanvasRuntime } from \"./node-canvas.js\";\nimport { isPretextRuntimeAvailable, PretextTextMeasurer } from \"./pretext.js\";\nimport type { TextMeasurer } from \"./types.js\";\n\nexport interface DefaultTextMeasurerOptions {\n\tinstallNodeCanvasRuntime?: () => boolean;\n}\n\nexport function createDefaultTextMeasurer(\n\toptions: DefaultTextMeasurerOptions = {},\n): TextMeasurer {\n\tconst installRuntime =\n\t\toptions.installNodeCanvasRuntime ?? installNodeCanvasRuntime;\n\tinstallRuntime();\n\n\treturn isPretextRuntimeAvailable()\n\t\t? new PretextTextMeasurer()\n\t\t: new DeterministicTextMeasurer();\n}\n","import { normalizeInsets } from \"../geometry/index.js\";\nimport type { Diagnostic } from \"../ir/diagnostics.js\";\nimport type { Box, Insets, Size } from \"../ir/geometry.js\";\nimport type { TextLayout, TextMeasurer } from \"../text/index.js\";\nimport { assertFiniteNonNegative, resolveLineHeight } from \"../text/index.js\";\nimport type { LabelFitOptions, LabelLayout, LabelLineLayout } from \"./types.js\";\n\nexport function fitLabel(\n\ttext: string,\n\toptions: LabelFitOptions,\n\tmeasurer: TextMeasurer,\n): LabelLayout {\n\treturn computeLabelLayout(text, options, measurer);\n}\n\nexport class LabelFitter {\n\tconstructor(private readonly measurer: TextMeasurer) {}\n\n\tfit(text: string, options: LabelFitOptions): LabelLayout {\n\t\treturn computeLabelLayout(text, options, this.measurer);\n\t}\n}\n\nfunction computeLabelLayout(\n\ttext: string,\n\toptions: LabelFitOptions,\n\tmeasurer: TextMeasurer,\n): LabelLayout {\n\tconst padding = normalizeInsets(options.padding);\n\tconst minSize = normalizeMinSize(options.minSize);\n\tconst lineHeight = resolveLineHeight(options.font);\n\tconst maxWidth = normalizeMaxWidth(options.maxWidth);\n\tconst prepared = measurer.prepare(text, options.font);\n\tconst naturalTextWidth = measurer.naturalWidth(prepared);\n\tconst contentMaxWidth =\n\t\tmaxWidth === undefined\n\t\t\t? naturalTextWidth\n\t\t\t: Math.max(0, maxWidth - padding.left - padding.right);\n\tconst textLayout = measurer.layout(prepared, contentMaxWidth, lineHeight);\n\tconst naturalSize = {\n\t\twidth: naturalTextWidth,\n\t\theight: textLayout.height,\n\t};\n\tconst contentWidth = Math.max(\n\t\ttextLayout.width,\n\t\tminContentWidth(minSize, padding),\n\t);\n\tconst contentHeight = Math.max(\n\t\ttextLayout.height,\n\t\tminContentHeight(minSize, padding),\n\t);\n\tconst idealWidth = contentWidth + padding.left + padding.right;\n\tconst idealHeight = contentHeight + padding.top + padding.bottom;\n\tconst fittedSize = {\n\t\twidth: maxWidth === undefined ? idealWidth : Math.min(maxWidth, idealWidth),\n\t\theight: idealHeight,\n\t};\n\tconst box: Box = {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: fittedSize.width,\n\t\theight: fittedSize.height,\n\t};\n\tconst contentBox: Box = {\n\t\tx: padding.left,\n\t\ty: padding.top,\n\t\twidth: Math.max(0, box.width - padding.left - padding.right),\n\t\theight: Math.max(0, box.height - padding.top - padding.bottom),\n\t};\n\tconst overflow = {\n\t\thorizontal: textLayout.width > contentBox.width,\n\t\tvertical:\n\t\t\ttextLayout.height > contentBox.height ||\n\t\t\tdiagnosedHeightConstraintOverflow(textLayout.height, padding, minSize),\n\t\ttruncated:\n\t\t\toptions.overflow === \"truncate\" && textLayout.width > contentBox.width,\n\t};\n\tconst diagnostics = buildDiagnostics(overflow, options.overflow);\n\n\treturn {\n\t\ttext,\n\t\tbox,\n\t\tcontentBox,\n\t\tnaturalSize,\n\t\tfittedSize,\n\t\tpadding,\n\t\tfont: { ...options.font },\n\t\ttextBackend: prepared.backend,\n\t\tlineHeight,\n\t\tlines: buildLines(textLayout, contentBox, lineHeight),\n\t\toverflow,\n\t\tdiagnostics,\n\t};\n}\n\nfunction buildLines(\n\ttextLayout: TextLayout,\n\tcontentBox: Box,\n\tlineHeight: number,\n): LabelLineLayout[] {\n\treturn textLayout.lines.map((line, lineIndex) => ({\n\t\ttext: line.text,\n\t\tbox: {\n\t\t\tx: contentBox.x,\n\t\t\ty: contentBox.y + lineIndex * lineHeight,\n\t\t\twidth: line.width,\n\t\t\theight: lineHeight,\n\t\t},\n\t\tbaselineY: contentBox.y + lineIndex * lineHeight + lineHeight * 0.8,\n\t\twidth: line.width,\n\t\tlineIndex,\n\t\tsourceStart: { ...line.start },\n\t\tsourceEnd: { ...line.end },\n\t}));\n}\n\nfunction normalizeMinSize(minSize: Partial<Size> = {}): Partial<Size> {\n\tif (minSize.width !== undefined) {\n\t\tassertFiniteNonNegative(minSize.width, \"minSize.width\");\n\t}\n\n\tif (minSize.height !== undefined) {\n\t\tassertFiniteNonNegative(minSize.height, \"minSize.height\");\n\t}\n\n\treturn { ...minSize };\n}\n\nfunction normalizeMaxWidth(maxWidth: number | undefined): number | undefined {\n\tif (maxWidth === undefined) {\n\t\treturn undefined;\n\t}\n\n\tassertFiniteNonNegative(maxWidth, \"maxWidth\");\n\n\treturn maxWidth;\n}\n\nfunction minContentWidth(minSize: Partial<Size>, padding: Insets): number {\n\treturn Math.max(0, (minSize.width ?? 0) - padding.left - padding.right);\n}\n\nfunction minContentHeight(minSize: Partial<Size>, padding: Insets): number {\n\treturn Math.max(0, (minSize.height ?? 0) - padding.top - padding.bottom);\n}\n\nfunction diagnosedHeightConstraintOverflow(\n\ttextHeight: number,\n\tpadding: Insets,\n\tminSize: Partial<Size>,\n): boolean {\n\treturn (\n\t\tminSize.height !== undefined &&\n\t\ttextHeight + padding.top + padding.bottom > minSize.height\n\t);\n}\n\nfunction buildDiagnostics(\n\toverflow: LabelLayout[\"overflow\"],\n\tmode: LabelFitOptions[\"overflow\"] = \"allow\",\n): Diagnostic[] {\n\tif (mode !== \"diagnose\") {\n\t\treturn [];\n\t}\n\n\tconst diagnostics: Diagnostic[] = [];\n\n\tif (overflow.horizontal) {\n\t\tdiagnostics.push({\n\t\t\tseverity: \"warning\",\n\t\t\tcode: \"label.overflow.horizontal\",\n\t\t\tmessage: \"Label text exceeds the fitted content width.\",\n\t\t});\n\t}\n\n\tif (overflow.vertical) {\n\t\tdiagnostics.push({\n\t\t\tseverity: \"warning\",\n\t\t\tcode: \"label.overflow.vertical\",\n\t\t\tmessage: \"Label text exceeds the fitted content height.\",\n\t\t});\n\t}\n\n\treturn diagnostics;\n}\n","import type { Constraint } from \"../ir/constraints.js\";\nimport type { NormalizedDiagram } from \"../ir/diagram.js\";\nimport type {\n\tLabel,\n\tNodeCompartments,\n\tNodePort,\n\tNormalizedEdge,\n\tNormalizedGroup,\n\tNormalizedNode,\n\tSwimlane,\n\tVisualStyle,\n} from \"../ir/elements.js\";\nimport type { Insets, Point, Size } from \"../ir/geometry.js\";\nimport { fitLabel } from \"../labels/index.js\";\nimport { createDefaultTextMeasurer, type TextMeasurer } from \"../text/index.js\";\nimport { sortDslDiagnostics } from \"./diagnostics.js\";\nimport type { DiagramDsl } from \"./schema.js\";\nimport type { DslDiagnostic, NormalizeDiagramDslResult } from \"./types.js\";\n\nconst DEFAULT_NODE_PADDING: Insets = {\n\ttop: 12,\n\tright: 16,\n\tbottom: 12,\n\tleft: 16,\n};\nconst DEFAULT_NODE_MIN_SIZE: Size = { width: 80, height: 40 };\nconst DEFAULT_GROUP_PADDING: Insets = {\n\ttop: 16,\n\tright: 16,\n\tbottom: 16,\n\tleft: 16,\n};\nconst DEFAULT_LABEL_MAX_WIDTH = 160;\nconst DEFAULT_FONT = { fontFamily: \"Arial\", fontSize: 14, lineHeight: 18 };\n\nexport interface NormalizeDiagramDslOptions {\n\tid?: string;\n\ttextMeasurer?: TextMeasurer;\n}\n\nexport function normalizeDiagramDsl(\n\tdslValue: unknown,\n\toptions: NormalizeDiagramDslOptions = {},\n): NormalizeDiagramDslResult {\n\tconst dsl = dslValue as DiagramDsl;\n\tconst diagnostics = validateReferences(dsl);\n\tif (diagnostics.some((diagnostic) => diagnostic.severity === \"error\")) {\n\t\treturn {\n\t\t\tdiagnostics: sortDslDiagnostics(diagnostics),\n\t\t\t...outputResult(dsl),\n\t\t};\n\t}\n\n\tconst measurer = options.textMeasurer ?? createDefaultTextMeasurer();\n\tconst routeKind = dsl.routing?.kind ?? \"orthogonal\";\n\tconst portShifting = normalizePortShifting(dsl.routing?.portShifting);\n\tconst diagram: NormalizedDiagram = {\n\t\tid: options.id ?? dsl.id ?? \"diagram\",\n\t\t...(dsl.title === undefined ? {} : { title: dsl.title }),\n\t\tdirection: dsl.layout?.direction ?? dsl.direction ?? \"TB\",\n\t\tnodes: normalizeNodes(dsl, measurer),\n\t\tedges: normalizeEdges(dsl),\n\t\tgroups: normalizeGroups(dsl, measurer),\n\t\tswimlanes: normalizeSwimlanes(dsl),\n\t\tconstraints: normalizeConstraints(dsl),\n\t\tdiagnostics: [],\n\t\t...(dsl.frame === undefined ? {} : { frame: normalizeFrame(dsl.frame) }),\n\t\tmetadata: {\n\t\t\trouteKind,\n\t\t\t...(portShifting === undefined ? {} : { portShifting }),\n\t\t},\n\t};\n\n\treturn {\n\t\tdiagram,\n\t\tdiagnostics: [],\n\t\t...outputResult(dsl),\n\t};\n}\n\nfunction normalizePortShifting(\n\tportShifting: NonNullable<DiagramDsl[\"routing\"]>[\"portShifting\"] | undefined,\n):\n\t| {\n\t\t\tenabled?: boolean;\n\t\t\tspacing?: number;\n\t }\n\t| undefined {\n\tif (portShifting === undefined) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\t...(portShifting.enabled === undefined\n\t\t\t? {}\n\t\t\t: { enabled: portShifting.enabled }),\n\t\t...(portShifting.spacing === undefined\n\t\t\t? {}\n\t\t\t: { spacing: portShifting.spacing }),\n\t};\n}\n\nfunction outputResult(\n\tdsl: DiagramDsl,\n): Pick<NormalizeDiagramDslResult, \"output\"> {\n\treturn dsl.output?.format === undefined\n\t\t? {}\n\t\t: { output: { format: dsl.output.format } };\n}\n\nfunction normalizeNodes(\n\tdsl: DiagramDsl,\n\tmeasurer: TextMeasurer,\n): NormalizedNode[] {\n\treturn Object.keys(dsl.nodes)\n\t\t.sort()\n\t\t.map((id) => {\n\t\t\tconst node = dsl.nodes[id];\n\t\t\tconst label = toLabel(node?.label);\n\t\t\tconst labelLayout =\n\t\t\t\tlabel === undefined ? undefined : fitDslLabel(label, measurer);\n\t\t\tconst fittedSize = labelLayout?.fittedSize;\n\t\t\tconst nodeCompartments =\n\t\t\t\tnode?.compartments === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: compartments(node.compartments);\n\t\t\tconst compartmentWidth =\n\t\t\t\tnodeCompartments === undefined\n\t\t\t\t\t? 0\n\t\t\t\t\t: compartmentNaturalWidth(id, label, nodeCompartments, measurer);\n\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\t...(label === undefined ? {} : { label }),\n\t\t\t\tshape: node?.shape ?? \"rectangle\",\n\t\t\t\t...(node?.position === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { position: point(node.position) }),\n\t\t\t\t...(node?.style === undefined ? {} : { style: style(node.style) }),\n\t\t\t\t...(node?.ports === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { ports: normalizePorts(node.ports) }),\n\t\t\t\t...(nodeCompartments === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { compartments: nodeCompartments }),\n\t\t\t\tsize: {\n\t\t\t\t\twidth: Math.max(\n\t\t\t\t\t\tDEFAULT_NODE_MIN_SIZE.width,\n\t\t\t\t\t\tfittedSize?.width ?? 0,\n\t\t\t\t\t\tcompartmentWidth,\n\t\t\t\t\t),\n\t\t\t\t\theight: Math.max(\n\t\t\t\t\t\tnodeCompartments === undefined\n\t\t\t\t\t\t\t? DEFAULT_NODE_MIN_SIZE.height\n\t\t\t\t\t\t\t: compartmentHeight(nodeCompartments),\n\t\t\t\t\t\tfittedSize?.height ?? 0,\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\tpadding: { ...DEFAULT_NODE_PADDING },\n\t\t\t\t...(labelLayout === undefined ? {} : { labelLayout }),\n\t\t\t};\n\t\t});\n}\n\nfunction compartmentHeight(value: NodeCompartments): number {\n\tconst rowCount =\n\t\t(value.stereotype === undefined ? 0 : 1) +\n\t\t1 +\n\t\t(value.properties?.length ?? 0) +\n\t\t(value.constraints?.length ?? 0);\n\tconst rowHeight = 16;\n\tconst verticalPadding = 20;\n\treturn Math.max(\n\t\tDEFAULT_NODE_MIN_SIZE.height,\n\t\trowCount * rowHeight + verticalPadding,\n\t);\n}\n\nfunction compartmentNaturalWidth(\n\tid: string,\n\tlabel: Label | undefined,\n\tvalue: NodeCompartments,\n\tmeasurer: TextMeasurer,\n): number {\n\tconst rows = compartmentRows(id, label, value);\n\tconst maxRowWidth = rows.reduce((width, row) => {\n\t\tconst prepared = measurer.prepare(row, DEFAULT_FONT);\n\t\treturn Math.max(width, measurer.naturalWidth(prepared));\n\t}, 0);\n\treturn Math.ceil(\n\t\tmaxRowWidth + DEFAULT_NODE_PADDING.left + DEFAULT_NODE_PADDING.right,\n\t);\n}\n\nfunction compartmentRows(\n\tid: string,\n\tlabel: Label | undefined,\n\tvalue: NodeCompartments,\n): string[] {\n\treturn [\n\t\t...(value.stereotype === undefined ? [] : [value.stereotype]),\n\t\tvalue.name ?? label?.text ?? id,\n\t\t...(value.properties ?? []),\n\t\t...(value.constraints ?? []),\n\t];\n}\n\nfunction normalizeEdges(dsl: DiagramDsl): NormalizedEdge[] {\n\tconst counts = new Map<string, number>();\n\n\treturn (dsl.edges ?? []).map((edge) => {\n\t\tconst source = typeof edge === \"string\" ? undefined : edge.source;\n\t\tconst target = typeof edge === \"string\" ? undefined : edge.target;\n\t\tconst sourceId =\n\t\t\ttypeof edge === \"string\"\n\t\t\t\t? \"\"\n\t\t\t\t: (edge.sourceId ?? endpointNodeId(source) ?? \"\");\n\t\tconst targetId =\n\t\t\ttypeof edge === \"string\"\n\t\t\t\t? \"\"\n\t\t\t\t: (edge.targetId ?? endpointNodeId(target) ?? \"\");\n\t\tconst sourceEndpoint =\n\t\t\ttypeof edge === \"string\"\n\t\t\t\t? { nodeId: sourceId }\n\t\t\t\t: endpoint(source, edge.sourceId);\n\t\tconst targetEndpoint =\n\t\t\ttypeof edge === \"string\"\n\t\t\t\t? { nodeId: targetId }\n\t\t\t\t: endpoint(target, edge.targetId);\n\t\tconst baseId = `${sourceId}-${targetId}`;\n\t\tconst count = counts.get(baseId) ?? 0;\n\t\tcounts.set(baseId, count + 1);\n\t\tconst id =\n\t\t\ttypeof edge === \"string\"\n\t\t\t\t? baseId\n\t\t\t\t: (edge.id ?? (count === 0 ? baseId : `${baseId}-${count + 1}`));\n\t\tconst label = typeof edge === \"string\" ? undefined : toLabel(edge.label);\n\n\t\treturn {\n\t\t\tid,\n\t\t\tsource: sourceEndpoint,\n\t\t\ttarget: targetEndpoint,\n\t\t\t...(label === undefined ? {} : { label }),\n\t\t\t...(typeof edge === \"string\" || edge.style === undefined\n\t\t\t\t? {}\n\t\t\t\t: { style: edge.style }),\n\t\t\t...(typeof edge === \"string\" || edge.arrowhead === undefined\n\t\t\t\t? {}\n\t\t\t\t: { arrowhead: edge.arrowhead }),\n\t\t};\n\t});\n}\n\nfunction normalizePorts(\n\tports: NonNullable<DiagramDsl[\"nodes\"][string]>[\"ports\"],\n): NodePort[] {\n\treturn Object.keys(ports ?? {})\n\t\t.sort()\n\t\t.map((id) => {\n\t\t\tconst port = ports?.[id];\n\t\t\tconst label = toLabel(port?.label);\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\t...(label === undefined ? {} : { label }),\n\t\t\t\tside: port?.side ?? \"right\",\n\t\t\t\tkind: port?.kind ?? \"proxy\",\n\t\t\t\t...(port?.order === undefined ? {} : { order: port.order }),\n\t\t\t\t...(port?.style === undefined ? {} : { style: style(port.style) }),\n\t\t\t};\n\t\t});\n}\n\nfunction endpoint(\n\tvalue: string | { node: string; port?: string | undefined } | undefined,\n\tnodeIdOverride?: string | undefined,\n): NormalizedEdge[\"source\"] {\n\tif (nodeIdOverride !== undefined) {\n\t\treturn {\n\t\t\tnodeId: nodeIdOverride,\n\t\t\t...(typeof value === \"object\" &&\n\t\t\tvalue.node === nodeIdOverride &&\n\t\t\tvalue.port !== undefined\n\t\t\t\t? { portId: value.port }\n\t\t\t\t: {}),\n\t\t};\n\t}\n\tif (value === undefined) {\n\t\treturn { nodeId: \"\" };\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn { nodeId: value };\n\t}\n\treturn {\n\t\tnodeId: value.node,\n\t\t...(value.port === undefined ? {} : { portId: value.port }),\n\t};\n}\n\nfunction style(value: {\n\tfill?: string | undefined;\n\tstroke?: string | undefined;\n}): VisualStyle {\n\treturn {\n\t\t...(value.fill === undefined ? {} : { fill: value.fill }),\n\t\t...(value.stroke === undefined ? {} : { stroke: value.stroke }),\n\t};\n}\n\nfunction compartments(value: {\n\tstereotype?: string | undefined;\n\tname?: string | undefined;\n\tproperties?: Array<Record<string, string> | string> | undefined;\n\tconstraints?: string[] | undefined;\n}): NodeCompartments {\n\treturn {\n\t\t...(value.stereotype === undefined ? {} : { stereotype: value.stereotype }),\n\t\t...(value.name === undefined ? {} : { name: value.name }),\n\t\t...(value.properties === undefined\n\t\t\t? {}\n\t\t\t: { properties: value.properties.map(formatCompartmentEntry) }),\n\t\t...(value.constraints === undefined\n\t\t\t? {}\n\t\t\t: { constraints: [...value.constraints] }),\n\t};\n}\n\nfunction normalizeFrame(frame: NonNullable<DiagramDsl[\"frame\"]>) {\n\treturn {\n\t\tkind: frame.kind,\n\t\t...(frame.context === undefined ? {} : { context: frame.context }),\n\t\t...(frame.name === undefined ? {} : { name: frame.name }),\n\t\ttitleTab: frame.titleTab,\n\t\t...(frame.style === undefined ? {} : { style: style(frame.style) }),\n\t};\n}\n\nfunction formatCompartmentEntry(\n\tvalue: Record<string, string> | string,\n): string {\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t}\n\tconst [entry] = Object.entries(value);\n\tif (entry === undefined) {\n\t\treturn \"\";\n\t}\n\treturn `${entry[0]}: ${entry[1]}`;\n}\n\nfunction normalizeSwimlanes(dsl: DiagramDsl): Swimlane[] {\n\treturn Object.keys(dsl.swimlanes ?? {})\n\t\t.sort()\n\t\t.map((id) => {\n\t\t\tconst swimlane = dsl.swimlanes?.[id];\n\t\t\tconst label = toLabel(swimlane?.label);\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\t...(label === undefined ? {} : { label }),\n\t\t\t\torientation: swimlane?.orientation ?? \"vertical\",\n\t\t\t\tlanes: Object.keys(swimlane?.lanes ?? {})\n\t\t\t\t\t.sort()\n\t\t\t\t\t.map((laneId) => {\n\t\t\t\t\t\tconst lane = swimlane?.lanes[laneId];\n\t\t\t\t\t\tconst laneLabel = toLabel(lane?.label);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tid: laneId,\n\t\t\t\t\t\t\t...(laneLabel === undefined ? {} : { label: laneLabel }),\n\t\t\t\t\t\t\tchildren: [...(lane?.children ?? [])],\n\t\t\t\t\t\t};\n\t\t\t\t\t}),\n\t\t\t};\n\t\t});\n}\n\nfunction normalizeGroups(\n\tdsl: DiagramDsl,\n\tmeasurer: TextMeasurer,\n): NormalizedGroup[] {\n\treturn Object.keys(dsl.groups ?? {})\n\t\t.sort()\n\t\t.map((id) => {\n\t\t\tconst group = dsl.groups?.[id];\n\t\t\tconst label = toLabel(group?.label);\n\t\t\tconst labelLayout =\n\t\t\t\tlabel === undefined ? undefined : fitDslLabel(label, measurer);\n\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\t...(label === undefined ? {} : { label }),\n\t\t\t\tnodeIds: [...(group?.nodes ?? [])],\n\t\t\t\tgroupIds: [...(group?.groups ?? [])],\n\t\t\t\tpadding: group?.padding ?? { ...DEFAULT_GROUP_PADDING },\n\t\t\t\t...(labelLayout === undefined ? {} : { labelLayout }),\n\t\t\t};\n\t\t});\n}\n\nfunction normalizeConstraints(dsl: DiagramDsl): Constraint[] {\n\tconst constraints: Constraint[] = [];\n\n\tfor (const constraint of dsl.constraints ?? []) {\n\t\tswitch (constraint.kind) {\n\t\t\tcase \"exact-position\":\n\t\t\t\tconstraints.push({\n\t\t\t\t\tkind: \"exact-position\",\n\t\t\t\t\ttargetId: constraint.targetId ?? constraint.target ?? \"\",\n\t\t\t\t\tposition: point(constraint.position),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"relative-position\":\n\t\t\t\tconstraints.push({\n\t\t\t\t\tkind: \"relative-position\",\n\t\t\t\t\tsourceId: constraint.sourceId ?? constraint.source ?? \"\",\n\t\t\t\t\treferenceId: constraint.referenceId ?? constraint.reference ?? \"\",\n\t\t\t\t\trelation: constraint.relation,\n\t\t\t\t\t...(constraint.offset === undefined\n\t\t\t\t\t\t? {}\n\t\t\t\t\t\t: { offset: point(constraint.offset) }),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"align\":\n\t\t\t\tconstraints.push({\n\t\t\t\t\tkind: \"align\",\n\t\t\t\t\taxis: constraint.axis,\n\t\t\t\t\ttargetIds: [...(constraint.targetIds ?? constraint.targets ?? [])],\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"distribute\":\n\t\t\t\tconstraints.push({\n\t\t\t\t\tkind: \"distribute\",\n\t\t\t\t\taxis: constraint.axis,\n\t\t\t\t\ttargetIds: [...(constraint.targetIds ?? constraint.targets ?? [])],\n\t\t\t\t\t...(constraint.spacing === undefined\n\t\t\t\t\t\t? {}\n\t\t\t\t\t\t: { spacing: constraint.spacing }),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"containment\":\n\t\t\t\tconstraints.push({\n\t\t\t\t\tkind: \"containment\",\n\t\t\t\t\tcontainerId: constraint.containerId ?? constraint.container ?? \"\",\n\t\t\t\t\tchildIds: [...(constraint.childIds ?? constraint.children ?? [])],\n\t\t\t\t\t...(constraint.padding === undefined\n\t\t\t\t\t\t? {}\n\t\t\t\t\t\t: { padding: constraint.padding }),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn constraints;\n}\n\nfunction validateReferences(dsl: DiagramDsl): DslDiagnostic[] {\n\tconst diagnostics: DslDiagnostic[] = [];\n\tconst nodeIds = new Set(Object.keys(dsl.nodes));\n\tconst groupIds = new Set(Object.keys(dsl.groups ?? {}));\n\n\t(dsl.edges ?? []).forEach((edge, index) => {\n\t\tif (typeof edge === \"string\") {\n\t\t\treturn;\n\t\t}\n\t\tconst sourceId = edge.sourceId ?? endpointNodeId(edge.source);\n\t\tconst targetId = edge.targetId ?? endpointNodeId(edge.target);\n\t\tconst sourceEndpoint = endpoint(edge.source, edge.sourceId);\n\t\tconst targetEndpoint = endpoint(edge.target, edge.targetId);\n\t\tif (sourceId !== undefined && !nodeIds.has(sourceId)) {\n\t\t\tdiagnostics.push(referenceMissing([\"edges\", index, \"source\"], sourceId));\n\t\t}\n\t\tif (targetId !== undefined && !nodeIds.has(targetId)) {\n\t\t\tdiagnostics.push(referenceMissing([\"edges\", index, \"target\"], targetId));\n\t\t}\n\t\tvalidateEndpointPort(\n\t\t\tdsl,\n\t\t\tsourceEndpoint,\n\t\t\t[\"edges\", index, \"source\"],\n\t\t\tdiagnostics,\n\t\t);\n\t\tvalidateEndpointPort(\n\t\t\tdsl,\n\t\t\ttargetEndpoint,\n\t\t\t[\"edges\", index, \"target\"],\n\t\t\tdiagnostics,\n\t\t);\n\t});\n\n\tfor (const [groupId, group] of Object.entries(dsl.groups ?? {})) {\n\t\t(group.nodes ?? []).forEach((nodeId, index) => {\n\t\t\tif (!nodeIds.has(nodeId)) {\n\t\t\t\tdiagnostics.push(\n\t\t\t\t\treferenceMissing([\"groups\", groupId, \"nodes\", index], nodeId),\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t\t(group.groups ?? []).forEach((childGroupId, index) => {\n\t\t\tif (!groupIds.has(childGroupId)) {\n\t\t\t\tdiagnostics.push(\n\t\t\t\t\treferenceMissing([\"groups\", groupId, \"groups\", index], childGroupId),\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\tfor (const [swimlaneId, swimlane] of Object.entries(dsl.swimlanes ?? {})) {\n\t\tfor (const [laneId, lane] of Object.entries(swimlane.lanes)) {\n\t\t\t(lane.children ?? []).forEach((child, childIndex) => {\n\t\t\t\tif (!nodeIds.has(child)) {\n\t\t\t\t\tdiagnostics.push(\n\t\t\t\t\t\treferenceMissing(\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\"swimlanes\",\n\t\t\t\t\t\t\t\tswimlaneId,\n\t\t\t\t\t\t\t\t\"lanes\",\n\t\t\t\t\t\t\t\tlaneId,\n\t\t\t\t\t\t\t\t\"children\",\n\t\t\t\t\t\t\t\tchildIndex,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tchild,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t(dsl.constraints ?? []).forEach((constraint, index) => {\n\t\tswitch (constraint.kind) {\n\t\t\tcase \"exact-position\": {\n\t\t\t\tconst target = constraint.targetId ?? constraint.target;\n\t\t\t\tif (\n\t\t\t\t\ttarget !== undefined &&\n\t\t\t\t\t!hasNodeOrGroup(target, nodeIds, groupIds)\n\t\t\t\t) {\n\t\t\t\t\tdiagnostics.push(\n\t\t\t\t\t\treferenceMissing([\"constraints\", index, \"target\"], target),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"relative-position\": {\n\t\t\t\tconst source = constraint.sourceId ?? constraint.source;\n\t\t\t\tconst reference = constraint.referenceId ?? constraint.reference;\n\t\t\t\tif (\n\t\t\t\t\tsource !== undefined &&\n\t\t\t\t\t!hasNodeOrGroup(source, nodeIds, groupIds)\n\t\t\t\t) {\n\t\t\t\t\tdiagnostics.push(\n\t\t\t\t\t\treferenceMissing([\"constraints\", index, \"source\"], source),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\treference !== undefined &&\n\t\t\t\t\t!hasNodeOrGroup(reference, nodeIds, groupIds)\n\t\t\t\t) {\n\t\t\t\t\tdiagnostics.push(\n\t\t\t\t\t\treferenceMissing([\"constraints\", index, \"reference\"], reference),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"align\":\n\t\t\tcase \"distribute\":\n\t\t\t\t(constraint.targetIds ?? constraint.targets ?? []).forEach(\n\t\t\t\t\t(target, targetIndex) => {\n\t\t\t\t\t\tif (!hasNodeOrGroup(target, nodeIds, groupIds)) {\n\t\t\t\t\t\t\tdiagnostics.push(\n\t\t\t\t\t\t\t\treferenceMissing(\n\t\t\t\t\t\t\t\t\t[\"constraints\", index, \"targets\", targetIndex],\n\t\t\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"containment\": {\n\t\t\t\tconst container = constraint.containerId ?? constraint.container;\n\t\t\t\tif (container !== undefined) {\n\t\t\t\t\tif (!nodeIds.has(container)) {\n\t\t\t\t\t\tdiagnostics.push(\n\t\t\t\t\t\t\treferenceMissing([\"constraints\", index, \"container\"], container),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t(constraint.childIds ?? constraint.children ?? []).forEach(\n\t\t\t\t\t(child, childIndex) => {\n\t\t\t\t\t\tif (!hasNodeOrGroup(child, nodeIds, groupIds)) {\n\t\t\t\t\t\t\tdiagnostics.push(\n\t\t\t\t\t\t\t\treferenceMissing(\n\t\t\t\t\t\t\t\t\t[\"constraints\", index, \"children\", childIndex],\n\t\t\t\t\t\t\t\t\tchild,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\n\treturn sortDslDiagnostics(diagnostics);\n}\n\nfunction referenceMissing(\n\tpath: Array<string | number>,\n\tid: string,\n): DslDiagnostic {\n\treturn {\n\t\tseverity: \"error\",\n\t\tlayer: \"validate\",\n\t\tcode: \"validate.reference.missing\",\n\t\tmessage: `Reference \"${id}\" does not exist.`,\n\t\tpath,\n\t\thint: \"Define the referenced node or group id, or update this reference.\",\n\t};\n}\n\nfunction hasNodeOrGroup(\n\tid: string,\n\tnodeIds: ReadonlySet<string>,\n\tgroupIds: ReadonlySet<string>,\n\tswimlaneLaneIds: ReadonlySet<string> = new Set(),\n): boolean {\n\treturn nodeIds.has(id) || groupIds.has(id) || swimlaneLaneIds.has(id);\n}\n\nfunction endpointNodeId(\n\tendpointValue:\n\t\t| string\n\t\t| { node: string; port?: string | undefined }\n\t\t| undefined,\n): string | undefined {\n\tif (typeof endpointValue === \"string\" || endpointValue === undefined) {\n\t\treturn endpointValue;\n\t}\n\treturn endpointValue.node;\n}\n\nfunction validateEndpointPort(\n\tdsl: DiagramDsl,\n\tendpointValue: NormalizedEdge[\"source\"],\n\tpath: Array<string | number>,\n\tdiagnostics: DslDiagnostic[],\n): void {\n\tif (endpointValue.portId === undefined) {\n\t\treturn;\n\t}\n\n\tconst node = dsl.nodes[endpointValue.nodeId];\n\tif (node !== undefined && node.ports?.[endpointValue.portId] === undefined) {\n\t\tdiagnostics.push(referenceMissing([...path, \"port\"], endpointValue.portId));\n\t}\n}\n\nfunction toLabel(\n\tvalue: DiagramDsl[\"nodes\"][string][\"label\"],\n): Label | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\n\tif (typeof value === \"string\") {\n\t\treturn { text: value };\n\t}\n\n\treturn value.maxWidth === undefined\n\t\t? { text: value.text }\n\t\t: { text: value.text, maxWidth: value.maxWidth };\n}\n\nfunction fitDslLabel(label: Label, measurer: TextMeasurer) {\n\treturn fitLabel(\n\t\tlabel.text,\n\t\t{\n\t\t\tfont: DEFAULT_FONT,\n\t\t\tpadding: DEFAULT_NODE_PADDING,\n\t\t\tminSize: DEFAULT_NODE_MIN_SIZE,\n\t\t\tmaxWidth: label.maxWidth ?? DEFAULT_LABEL_MAX_WIDTH,\n\t\t},\n\t\tmeasurer,\n\t);\n}\n\nfunction point(value: Point): Point {\n\treturn { x: value.x, y: value.y };\n}\n","import { z } from \"zod\";\nimport { createSchemaDiagnostic, sortDslDiagnostics } from \"./diagnostics.js\";\nimport type { DslDiagnostic } from \"./types.js\";\n\nconst directionSchema = z.enum([\"TB\", \"LR\", \"BT\", \"RL\"]);\nconst routeKindSchema = z.enum([\"orthogonal\", \"straight\"]);\nconst outputFormatSchema = z.enum([\"svg\", \"excalidraw\"]);\nconst edgeStrokeStyleSchema = z.enum([\"solid\", \"dashed\"]);\nconst edgeArrowheadSchema = z.enum([\"triangle\", \"hollowTriangle\"]);\nconst nodeShapeSchema = z.enum([\n\t\"rectangle\",\n\t\"rounded-rectangle\",\n\t\"ellipse\",\n\t\"diamond\",\n\t\"parallelogram\",\n\t\"hexagon\",\n\t\"cylinder\",\n]);\n\nconst finiteNumberSchema = z.number().finite();\n\nconst pointSchema = z.object({\n\tx: finiteNumberSchema,\n\ty: finiteNumberSchema,\n});\n\nconst insetsSchema = z.object({\n\ttop: finiteNumberSchema,\n\tright: finiteNumberSchema,\n\tbottom: finiteNumberSchema,\n\tleft: finiteNumberSchema,\n});\n\nconst labelSchema = z.union([\n\tz.string(),\n\tz.object({\n\t\ttext: z.string(),\n\t\tmaxWidth: finiteNumberSchema.optional(),\n\t}),\n]);\n\nconst styleSchema = z.object({\n\tfill: z.string().optional(),\n\tstroke: z.string().optional(),\n});\n\nconst portSideSchema = z.enum([\"top\", \"right\", \"bottom\", \"left\"]);\nconst portKindSchema = z.enum([\"proxy\", \"flow\"]);\n\nconst portSchema = z.object({\n\tlabel: labelSchema.optional(),\n\tside: portSideSchema,\n\tkind: portKindSchema.optional(),\n\torder: finiteNumberSchema.optional(),\n\tstyle: styleSchema.optional(),\n});\n\nconst compartmentsSchema = z.object({\n\tstereotype: z.string().optional(),\n\tname: z.string().optional(),\n\tproperties: z\n\t\t.array(z.record(z.string(), z.string()).or(z.string()))\n\t\t.optional(),\n\tconstraints: z.array(z.string()).optional(),\n});\n\nconst nodeSchema = z.object({\n\tlabel: labelSchema.optional(),\n\tshape: nodeShapeSchema.optional(),\n\tposition: pointSchema.optional(),\n\tstyle: styleSchema.optional(),\n\tports: z.record(z.string(), portSchema).optional(),\n\tcompartments: compartmentsSchema.optional(),\n});\n\nconst endpointSchema = z.union([\n\tz.string(),\n\tz.object({\n\t\tnode: z.string(),\n\t\tport: z.string().optional(),\n\t}),\n]);\n\nconst structuredEdgeSchema = z\n\t.object({\n\t\tid: z.string().optional(),\n\t\tsource: endpointSchema.optional(),\n\t\ttarget: endpointSchema.optional(),\n\t\tsourceId: z.string().optional(),\n\t\ttargetId: z.string().optional(),\n\t\tlabel: labelSchema.optional(),\n\t\tstyle: edgeStrokeStyleSchema.optional(),\n\t\tarrowhead: edgeArrowheadSchema.optional(),\n\t})\n\t.superRefine((edge, context) => {\n\t\tif (edge.source === undefined && edge.sourceId === undefined) {\n\t\t\tcontext.addIssue({\n\t\t\t\tcode: \"custom\",\n\t\t\t\tmessage: \"Edge requires source or sourceId.\",\n\t\t\t\tpath: [\"source\"],\n\t\t\t});\n\t\t}\n\t\tif (edge.target === undefined && edge.targetId === undefined) {\n\t\t\tcontext.addIssue({\n\t\t\t\tcode: \"custom\",\n\t\t\t\tmessage: \"Edge requires target or targetId.\",\n\t\t\t\tpath: [\"target\"],\n\t\t\t});\n\t\t}\n\t});\n\nconst edgeSchema = z.union([z.string(), structuredEdgeSchema]);\n\nconst groupSchema = z.object({\n\tlabel: labelSchema.optional(),\n\tnodes: z.array(z.string()).optional(),\n\tgroups: z.array(z.string()).optional(),\n\tpadding: insetsSchema.optional(),\n});\n\nconst swimlaneSchema = z.object({\n\tlabel: labelSchema.optional(),\n\torientation: z.enum([\"vertical\", \"horizontal\"]).optional(),\n\tlanes: z.record(\n\t\tz.string(),\n\t\tz.object({\n\t\t\tlabel: labelSchema.optional(),\n\t\t\tchildren: z.array(z.string()).optional(),\n\t\t}),\n\t),\n});\n\nconst exactPositionConstraintSchema = z.object({\n\tkind: z.literal(\"exact-position\"),\n\ttarget: z.string().optional(),\n\ttargetId: z.string().optional(),\n\tposition: pointSchema,\n});\n\nconst relativePositionConstraintSchema = z.object({\n\tkind: z.literal(\"relative-position\"),\n\tsource: z.string().optional(),\n\tsourceId: z.string().optional(),\n\treference: z.string().optional(),\n\treferenceId: z.string().optional(),\n\trelation: z.enum([\"above\", \"right-of\", \"below\", \"left-of\"]),\n\toffset: pointSchema.optional(),\n});\n\nconst alignConstraintSchema = z.object({\n\tkind: z.literal(\"align\"),\n\taxis: z.enum([\n\t\t\"x\",\n\t\t\"y\",\n\t\t\"center-x\",\n\t\t\"center-y\",\n\t\t\"top\",\n\t\t\"right\",\n\t\t\"bottom\",\n\t\t\"left\",\n\t]),\n\ttargets: z.array(z.string()).optional(),\n\ttargetIds: z.array(z.string()).optional(),\n});\n\nconst distributeConstraintSchema = z.object({\n\tkind: z.literal(\"distribute\"),\n\taxis: z.enum([\"horizontal\", \"vertical\"]),\n\ttargets: z.array(z.string()).optional(),\n\ttargetIds: z.array(z.string()).optional(),\n\tspacing: finiteNumberSchema.optional(),\n});\n\nconst containmentConstraintSchema = z.object({\n\tkind: z.literal(\"containment\"),\n\tcontainer: z.string().optional(),\n\tcontainerId: z.string().optional(),\n\tchildren: z.array(z.string()).optional(),\n\tchildIds: z.array(z.string()).optional(),\n\tpadding: insetsSchema.optional(),\n});\n\nconst constraintSchema = z.union([\n\texactPositionConstraintSchema,\n\trelativePositionConstraintSchema,\n\talignConstraintSchema,\n\tdistributeConstraintSchema,\n\tcontainmentConstraintSchema,\n]);\n\nexport const diagramDslSchema = z.object({\n\tid: z.string().optional(),\n\ttitle: z.string().optional(),\n\tdirection: directionSchema.optional(),\n\tlayout: z\n\t\t.object({\n\t\t\tdirection: directionSchema.optional(),\n\t\t})\n\t\t.optional(),\n\trouting: z\n\t\t.object({\n\t\t\tkind: routeKindSchema.optional(),\n\t\t\tportShifting: z\n\t\t\t\t.object({\n\t\t\t\t\tenabled: z.boolean().optional(),\n\t\t\t\t\tspacing: finiteNumberSchema.optional(),\n\t\t\t\t})\n\t\t\t\t.optional(),\n\t\t})\n\t\t.optional(),\n\tnodes: z.record(z.string(), nodeSchema),\n\tedges: z.array(edgeSchema).optional(),\n\tgroups: z.record(z.string(), groupSchema).optional(),\n\tswimlanes: z.record(z.string(), swimlaneSchema).optional(),\n\tconstraints: z.array(constraintSchema).optional(),\n\tframe: z\n\t\t.object({\n\t\t\tkind: z.string(),\n\t\t\tcontext: z.string().optional(),\n\t\t\tname: z.string().optional(),\n\t\t\ttitleTab: z.string(),\n\t\t\tstyle: styleSchema.optional(),\n\t\t})\n\t\t.optional(),\n\toutput: z\n\t\t.object({\n\t\t\tformat: outputFormatSchema.optional(),\n\t\t})\n\t\t.optional(),\n});\n\nexport type DiagramDsl = z.infer<typeof diagramDslSchema>;\n\nexport function validateDiagramDsl(value: unknown): {\n\tvalue?: DiagramDsl;\n\tdiagnostics: DslDiagnostic[];\n} {\n\tconst result = diagramDslSchema.safeParse(value);\n\n\tif (result.success) {\n\t\treturn { value: result.data, diagnostics: [] };\n\t}\n\n\treturn {\n\t\tdiagnostics: sortDslDiagnostics(\n\t\t\tresult.error.issues.map((issue) =>\n\t\t\t\tcreateSchemaDiagnostic(toDiagnosticPath(issue.path), issue.message),\n\t\t\t),\n\t\t),\n\t};\n}\n\nfunction toDiagnosticPath(path: PropertyKey[]): Array<string | number> {\n\treturn path.flatMap((segment) =>\n\t\ttypeof segment === \"string\" || typeof segment === \"number\" ? [segment] : [],\n\t);\n}\n","import { Buffer } from \"node:buffer\";\nimport { parseDocument } from \"yaml\";\nimport { createParseDiagnostic, sortDslDiagnostics } from \"./diagnostics.js\";\nimport { parseEdgeShorthand } from \"./edges.js\";\nimport { validateDiagramDsl } from \"./schema.js\";\nimport type {\n\tDslDiagnostic,\n\tParseDiagramDslOptions,\n\tParseDiagramDslResult,\n} from \"./types.js\";\n\nexport const DEFAULT_DSL_MAX_BYTES = 1_000_000;\n\nexport function parseDiagramDsl(\n\tsource: string,\n\toptions: ParseDiagramDslOptions = {},\n): ParseDiagramDslResult {\n\tconst maxBytes = options.maxBytes ?? DEFAULT_DSL_MAX_BYTES;\n\n\tif (Buffer.byteLength(source, \"utf8\") > maxBytes) {\n\t\treturn {\n\t\t\tdiagnostics: [\n\t\t\t\tcreateParseDiagnostic(\n\t\t\t\t\t\"parse.input.too-large\",\n\t\t\t\t\t`Input exceeds the ${maxBytes} byte limit.`,\n\t\t\t\t\t\"Split the diagram into smaller inputs or raise maxBytes for trusted sources.\",\n\t\t\t\t),\n\t\t\t],\n\t\t};\n\t}\n\n\tconst parsed = parseSource(source, options);\n\tif (parsed.value === undefined || hasErrorDiagnostics(parsed.diagnostics)) {\n\t\treturn { diagnostics: sortDslDiagnostics(parsed.diagnostics) };\n\t}\n\n\tconst expanded = expandEdgeShorthand(parsed.value);\n\tif (hasErrorDiagnostics(expanded.diagnostics)) {\n\t\treturn { diagnostics: sortDslDiagnostics(expanded.diagnostics) };\n\t}\n\n\tconst validated = validateDiagramDsl(expanded.value);\n\n\treturn {\n\t\tvalue: validated.value,\n\t\tdiagnostics: sortDslDiagnostics([\n\t\t\t...parsed.diagnostics,\n\t\t\t...validated.diagnostics,\n\t\t]),\n\t};\n}\n\nfunction parseSource(\n\tsource: string,\n\toptions: ParseDiagramDslOptions,\n): { value?: unknown; diagnostics: DslDiagnostic[] } {\n\tif (isJsonSource(options)) {\n\t\treturn parseJsonSource(source);\n\t}\n\n\treturn parseYamlSource(source);\n}\n\nfunction parseJsonSource(source: string): {\n\tvalue?: unknown;\n\tdiagnostics: DslDiagnostic[];\n} {\n\ttry {\n\t\treturn { value: JSON.parse(source), diagnostics: [] };\n\t} catch (error) {\n\t\treturn {\n\t\t\tdiagnostics: [\n\t\t\t\tcreateParseDiagnostic(\n\t\t\t\t\t\"parse.json.invalid\",\n\t\t\t\t\t`Invalid JSON: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\t\"Fix the JSON syntax or use a .yaml source file.\",\n\t\t\t\t),\n\t\t\t],\n\t\t};\n\t}\n}\n\nfunction parseYamlSource(source: string): {\n\tvalue?: unknown;\n\tdiagnostics: DslDiagnostic[];\n} {\n\tconst document = parseDocument(source);\n\tconst diagnostics: DslDiagnostic[] = [\n\t\t...document.errors.map((error) =>\n\t\t\tcreateParseDiagnostic(\n\t\t\t\t\"parse.yaml.invalid\",\n\t\t\t\t`Invalid YAML: ${error.message}`,\n\t\t\t\t\"Fix the YAML syntax near the reported parser error.\",\n\t\t\t),\n\t\t),\n\t\t...document.warnings.map((warning) => ({\n\t\t\tseverity: \"warning\" as const,\n\t\t\tlayer: \"parse\" as const,\n\t\t\tcode: \"parse.yaml.warning\",\n\t\t\tmessage: `YAML warning: ${warning.message}`,\n\t\t\thint: \"Review the YAML warning before relying on the parsed value.\",\n\t\t})),\n\t];\n\n\tif (document.errors.length > 0) {\n\t\treturn { diagnostics };\n\t}\n\n\treturn { value: document.toJS(), diagnostics };\n}\n\nfunction isJsonSource(options: ParseDiagramDslOptions): boolean {\n\treturn (\n\t\toptions.sourceFormat === \"json\" ||\n\t\t(options.sourcePath?.toLowerCase().endsWith(\".json\") ?? false)\n\t);\n}\n\nfunction hasErrorDiagnostics(diagnostics: DslDiagnostic[]): boolean {\n\treturn diagnostics.some((diagnostic) => diagnostic.severity === \"error\");\n}\n\nfunction expandEdgeShorthand(value: unknown): {\n\tvalue: unknown;\n\tdiagnostics: DslDiagnostic[];\n} {\n\tif (\n\t\tvalue === null ||\n\t\ttypeof value !== \"object\" ||\n\t\tArray.isArray(value) ||\n\t\t!(\"edges\" in value)\n\t) {\n\t\treturn { value, diagnostics: [] };\n\t}\n\n\tconst record = value as Record<string, unknown>;\n\tif (!Array.isArray(record.edges)) {\n\t\treturn { value, diagnostics: [] };\n\t}\n\n\tconst diagnostics: DslDiagnostic[] = [];\n\tconst edges = record.edges.map((edge, index) => {\n\t\tconst shorthand = edgeShorthandText(edge);\n\t\tif (shorthand === undefined) {\n\t\t\treturn edge;\n\t\t}\n\n\t\tconst result = parseEdgeShorthand(shorthand, [\"edges\", index]);\n\t\tdiagnostics.push(...result.diagnostics);\n\n\t\tif (result.edge === undefined) {\n\t\t\treturn edge;\n\t\t}\n\n\t\treturn {\n\t\t\tsourceId: result.edge.sourceId,\n\t\t\ttargetId: result.edge.targetId,\n\t\t\t...(result.edge.label === undefined ? {} : { label: result.edge.label }),\n\t\t};\n\t});\n\n\treturn { value: { ...record, edges }, diagnostics };\n}\n\nfunction edgeShorthandText(edge: unknown): string | undefined {\n\tif (typeof edge === \"string\") {\n\t\treturn edge;\n\t}\n\n\tif (edge === null || typeof edge !== \"object\" || Array.isArray(edge)) {\n\t\treturn undefined;\n\t}\n\n\tconst entries = Object.entries(edge);\n\tif (entries.length !== 1) {\n\t\treturn undefined;\n\t}\n\n\tconst entry = entries[0];\n\tif (entry === undefined) {\n\t\treturn undefined;\n\t}\n\n\tconst [key, value] = entry;\n\tif (!key.includes(\"->\") || typeof value !== \"string\") {\n\t\treturn undefined;\n\t}\n\n\treturn `${key}: ${value}`;\n}\n","import type { Point } from \"../ir/geometry.js\";\n\nexport interface Arrowhead {\n\ttip: Point;\n\tleft: Point;\n\tright: Point;\n\tdirection: Point;\n}\n\nexport function computeArrowhead(\n\tpoints: readonly Point[],\n\toptions: { length?: number; width?: number } = {},\n): Arrowhead {\n\tconst { length = 10, width = 8 } = options;\n\n\tfor (let index = points.length - 1; index > 0; index -= 1) {\n\t\tconst tip = points[index];\n\t\tconst previous = points[index - 1];\n\t\tif (tip === undefined || previous === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst dx = tip.x - previous.x;\n\t\tconst dy = tip.y - previous.y;\n\t\tconst magnitude = Math.hypot(dx, dy);\n\t\tif (magnitude === 0) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst direction = { x: dx / magnitude, y: dy / magnitude };\n\t\tconst perpendicular = { x: -direction.y, y: direction.x };\n\t\tconst base = {\n\t\t\tx: tip.x - direction.x * length,\n\t\t\ty: tip.y - direction.y * length,\n\t\t};\n\t\tconst halfWidth = width / 2;\n\n\t\treturn {\n\t\t\ttip: { ...tip },\n\t\t\tleft: {\n\t\t\t\tx: base.x + perpendicular.x * halfWidth,\n\t\t\t\ty: base.y + perpendicular.y * halfWidth,\n\t\t\t},\n\t\t\tright: {\n\t\t\t\tx: base.x - perpendicular.x * halfWidth,\n\t\t\t\ty: base.y - perpendicular.y * halfWidth,\n\t\t\t},\n\t\t\tdirection,\n\t\t};\n\t}\n\n\tthrow new TypeError(\"Arrowhead requires at least one non-zero segment\");\n}\n","import type { CoordinatedDiagram } from \"../ir/diagram.js\";\nimport type {\n\tCoordinatedEdge,\n\tCoordinatedGroup,\n\tCoordinatedNode,\n\tEdgeArrowhead,\n\tLabel,\n\tNodeShape,\n} from \"../ir/elements.js\";\nimport type { Box, Point } from \"../ir/geometry.js\";\nimport type { ExportOptions } from \"./types.js\";\n\ntype ExcalidrawElement =\n\t| ExcalidrawShapeElement\n\t| ExcalidrawTextElement\n\t| ExcalidrawArrowElement;\n\ntype ExcalidrawElementType =\n\t| \"rectangle\"\n\t| \"ellipse\"\n\t| \"diamond\"\n\t| \"parallelogram\"\n\t| \"hexagon\"\n\t| \"cylinder\"\n\t| \"text\"\n\t| \"arrow\";\n\ninterface ExcalidrawElementBase<TType extends ExcalidrawElementType> {\n\tid: string;\n\ttype: TType;\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n\tangle: 0;\n\tstrokeColor: string;\n\tbackgroundColor: string;\n\tfillStyle: \"solid\";\n\tstrokeWidth: number;\n\tstrokeStyle: \"solid\" | \"dashed\";\n\troughness: 0;\n\topacity: 100;\n\tgroupIds: string[];\n\tseed: number;\n\tversion: 1;\n\tversionNonce: number;\n\tisDeleted: false;\n\tboundElements: null;\n\tupdated: 0;\n\tlink: null;\n\tlocked: false;\n}\n\ninterface ExcalidrawShapeElement\n\textends ExcalidrawElementBase<\n\t\t| \"rectangle\"\n\t\t| \"ellipse\"\n\t\t| \"diamond\"\n\t\t| \"parallelogram\"\n\t\t| \"hexagon\"\n\t\t| \"cylinder\"\n\t> {\n\ttype:\n\t\t| \"rectangle\"\n\t\t| \"ellipse\"\n\t\t| \"diamond\"\n\t\t| \"parallelogram\"\n\t\t| \"hexagon\"\n\t\t| \"cylinder\";\n}\n\ninterface ExcalidrawTextElement extends ExcalidrawElementBase<\"text\"> {\n\ttype: \"text\";\n\ttext: string;\n\tfontSize: number;\n\tfontFamily: 1;\n\ttextAlign: \"center\" | \"left\";\n\tverticalAlign: \"middle\" | \"top\";\n\tbaseline: number;\n\tcontainerId: string | null;\n\toriginalText: string;\n\tlineHeight: number;\n}\n\ninterface ExcalidrawArrowElement extends ExcalidrawElementBase<\"arrow\"> {\n\ttype: \"arrow\";\n\tpoints: Point[];\n\tstartBinding: { elementId: string; focus: 0; gap: 0 };\n\tendBinding: { elementId: string; focus: 0; gap: 0 };\n\tstartArrowhead: null;\n\tendArrowhead: \"arrow\" | \"triangle\" | \"triangle_outline\";\n}\n\nexport function exportExcalidraw(\n\tdiagram: CoordinatedDiagram,\n\toptions: ExportOptions = {},\n): string {\n\tconst elements: ExcalidrawElement[] = [];\n\tconst groupIdByChildId = createGroupMembership(diagram.groups);\n\n\tfor (const group of diagram.groups) {\n\t\tconst groupElementId = groupElementIdFor(group.id);\n\t\telements.push(renderGroup(group));\n\t\tconst text = renderText(\n\t\t\t`group-text:${group.id}`,\n\t\t\tgroup.label,\n\t\t\tgroup.box,\n\t\t\tgroupElementId,\n\t\t\tgroupIdByChildId.get(group.id) ?? [],\n\t\t);\n\t\tif (text !== undefined) {\n\t\t\telements.push(text);\n\t\t}\n\t}\n\n\tfor (const node of diagram.nodes) {\n\t\telements.push(renderNode(node, groupIdByChildId.get(node.id) ?? []));\n\t\tconst text = renderText(\n\t\t\t`node-text:${node.id}`,\n\t\t\tnode.label,\n\t\t\tnode.box,\n\t\t\t`node:${node.id}`,\n\t\t\tgroupIdByChildId.get(node.id) ?? [],\n\t\t);\n\t\tif (text !== undefined) {\n\t\t\telements.push(text);\n\t\t}\n\t}\n\n\tfor (const edge of diagram.edges) {\n\t\telements.push(renderArrow(edge));\n\t}\n\n\tconst scene = {\n\t\ttype: \"excalidraw\",\n\t\tversion: 2,\n\t\tsource: \"auto-graph\",\n\t\telements,\n\t\tappState: {\n\t\t\tname: options.title ?? diagram.title ?? diagram.id,\n\t\t\tviewBackgroundColor: \"#ffffff\",\n\t\t\tgridSize: null,\n\t\t},\n\t\tfiles: {},\n\t};\n\n\treturn `${JSON.stringify(scene, null, 2)}\\n`;\n}\n\nfunction renderGroup(group: CoordinatedGroup): ExcalidrawShapeElement {\n\treturn {\n\t\t...baseElement(`group:${group.id}`, \"rectangle\", group.box),\n\t\tbackgroundColor: \"transparent\",\n\t\tstrokeStyle: \"dashed\",\n\t\tgroupIds: groupGroupIds(group.id),\n\t};\n}\n\nfunction renderNode(\n\tnode: CoordinatedNode,\n\tgroupIds: string[],\n): ExcalidrawShapeElement {\n\treturn {\n\t\t...baseElement(`node:${node.id}`, mapShape(node.shape), node.box),\n\t\tgroupIds,\n\t};\n}\n\nfunction renderArrow(edge: CoordinatedEdge): ExcalidrawArrowElement {\n\tconst first = edge.points[0];\n\tif (first === undefined) {\n\t\tthrow new TypeError(\n\t\t\t`Excalidraw edge ${edge.id} requires at least one point`,\n\t\t);\n\t}\n\n\tconst relativePoints = edge.points.map((point) => ({\n\t\tx: point.x - first.x,\n\t\ty: point.y - first.y,\n\t}));\n\tconst box = pointsBox(relativePoints);\n\n\treturn {\n\t\t...baseElement(`edge:${edge.id}`, \"arrow\", {\n\t\t\tx: first.x,\n\t\t\ty: first.y,\n\t\t\twidth: box.width,\n\t\t\theight: box.height,\n\t\t}),\n\t\tbackgroundColor: \"transparent\",\n\t\tstrokeStyle: edge.style ?? \"solid\",\n\t\tpoints: relativePoints,\n\t\tstartBinding: { elementId: `node:${edge.source.nodeId}`, focus: 0, gap: 0 },\n\t\tendBinding: { elementId: `node:${edge.target.nodeId}`, focus: 0, gap: 0 },\n\t\tstartArrowhead: null,\n\t\tendArrowhead: mapArrowhead(edge.arrowhead),\n\t};\n}\n\nfunction renderText(\n\tid: string,\n\tlabel: Label | undefined,\n\tbox: Box,\n\tcontainerId: string,\n\tgroupIds: string[],\n): ExcalidrawTextElement | undefined {\n\tif (label?.text === undefined) {\n\t\treturn undefined;\n\t}\n\n\tconst fontSize = 14;\n\treturn {\n\t\t...baseElement(id, \"text\", {\n\t\t\tx: box.x,\n\t\t\ty: box.y + box.height / 2 - fontSize / 2,\n\t\t\twidth: box.width,\n\t\t\theight: fontSize,\n\t\t}),\n\t\tbackgroundColor: \"transparent\",\n\t\tstrokeColor: \"#111827\",\n\t\tgroupIds,\n\t\ttext: label.text,\n\t\tfontSize,\n\t\tfontFamily: 1,\n\t\ttextAlign: \"center\",\n\t\tverticalAlign: \"middle\",\n\t\tbaseline: fontSize,\n\t\tcontainerId,\n\t\toriginalText: label.text,\n\t\tlineHeight: 1.25,\n\t\tboundElements: null,\n\t\tlink: null,\n\t\tlocked: false,\n\t\tseed: seedFor(id),\n\t\tversionNonce: seedFor(`${id}:nonce`),\n\t};\n}\n\nfunction baseElement<TType extends ExcalidrawElementType>(\n\tid: string,\n\ttype: TType,\n\tbox: Box,\n): ExcalidrawElementBase<TType> {\n\treturn {\n\t\tid,\n\t\ttype,\n\t\tx: finite(box.x),\n\t\ty: finite(box.y),\n\t\twidth: finite(box.width),\n\t\theight: finite(box.height),\n\t\tangle: 0,\n\t\tstrokeColor: \"#374151\",\n\t\tbackgroundColor: \"#f8fafc\",\n\t\tfillStyle: \"solid\",\n\t\tstrokeWidth: 1,\n\t\tstrokeStyle: \"solid\",\n\t\troughness: 0,\n\t\topacity: 100,\n\t\tgroupIds: [],\n\t\tseed: seedFor(id),\n\t\tversion: 1,\n\t\tversionNonce: seedFor(`${id}:nonce`),\n\t\tisDeleted: false,\n\t\tboundElements: null,\n\t\tupdated: 0,\n\t\tlink: null,\n\t\tlocked: false,\n\t};\n}\n\nfunction mapShape(shape: NodeShape): ExcalidrawShapeElement[\"type\"] {\n\tswitch (shape) {\n\t\tcase \"rounded-rectangle\":\n\t\tcase \"rectangle\":\n\t\t\treturn \"rectangle\";\n\t\tcase \"ellipse\":\n\t\t\treturn \"ellipse\";\n\t\tcase \"diamond\":\n\t\t\treturn \"diamond\";\n\t\tcase \"parallelogram\":\n\t\t\treturn \"parallelogram\";\n\t\tcase \"hexagon\":\n\t\t\treturn \"hexagon\";\n\t\tcase \"cylinder\":\n\t\t\treturn \"cylinder\";\n\t}\n}\n\nfunction mapArrowhead(\n\tarrowhead: EdgeArrowhead | undefined,\n): ExcalidrawArrowElement[\"endArrowhead\"] {\n\tswitch (arrowhead) {\n\t\tcase undefined:\n\t\t\treturn \"arrow\";\n\t\tcase \"triangle\":\n\t\t\treturn \"triangle\";\n\t\tcase \"hollowTriangle\":\n\t\t\treturn \"triangle_outline\";\n\t}\n}\n\nfunction createGroupMembership(\n\tgroups: readonly CoordinatedGroup[],\n): Map<string, string[]> {\n\tconst membership = new Map<string, string[]>();\n\tfor (const group of groups) {\n\t\tconst groupElementId = groupElementIdFor(group.id);\n\t\tfor (const nodeId of group.nodeIds) {\n\t\t\taddMembership(membership, nodeId, groupElementId);\n\t\t}\n\t\tfor (const childGroupId of group.groupIds) {\n\t\t\taddMembership(membership, childGroupId, groupElementId);\n\t\t}\n\t}\n\treturn membership;\n}\n\nfunction addMembership(\n\tmembership: Map<string, string[]>,\n\tchildId: string,\n\tgroupElementId: string,\n): void {\n\tconst existing = membership.get(childId) ?? [];\n\tmembership.set(childId, [...existing, groupElementId].sort());\n}\n\nfunction groupGroupIds(groupId: string): string[] {\n\treturn [groupElementIdFor(groupId)];\n}\n\nfunction groupElementIdFor(groupId: string): string {\n\treturn `group:${groupId}`;\n}\n\nfunction pointsBox(points: readonly Point[]): Box {\n\tconst xs = points.map((point) => point.x);\n\tconst ys = points.map((point) => point.y);\n\tconst minX = Math.min(...xs);\n\tconst maxX = Math.max(...xs);\n\tconst minY = Math.min(...ys);\n\tconst maxY = Math.max(...ys);\n\treturn {\n\t\tx: minX,\n\t\ty: minY,\n\t\twidth: maxX - minX,\n\t\theight: maxY - minY,\n\t};\n}\n\nfunction finite(value: number): number {\n\tif (!Number.isFinite(value)) {\n\t\tthrow new TypeError(\n\t\t\t\"Excalidraw export requires finite coordinated numbers\",\n\t\t);\n\t}\n\treturn Number.parseFloat(value.toFixed(3));\n}\n\nfunction seedFor(id: string): number {\n\tlet hash = 2166136261;\n\tfor (let index = 0; index < id.length; index += 1) {\n\t\thash ^= id.charCodeAt(index);\n\t\thash = Math.imul(hash, 16777619);\n\t}\n\treturn Math.abs(hash);\n}\n","import type { CoordinatedDiagram } from \"../ir/diagram.js\";\nimport type {\n\tCoordinatedEdge,\n\tCoordinatedFrame,\n\tCoordinatedGroup,\n\tCoordinatedNode,\n\tLabel,\n\tNodeShape,\n\tSwimlane,\n} from \"../ir/elements.js\";\nimport type { Box, Point } from \"../ir/geometry.js\";\nimport { computeArrowhead } from \"./arrow.js\";\nimport type { ExportOptions } from \"./types.js\";\n\nconst NODE_FILL = \"#f8fafc\";\nconst GROUP_FILL = \"#f9fafb\";\nconst STROKE = \"#374151\";\nconst EDGE_STROKE = \"#111827\";\nconst FONT_FAMILY = \"Arial, sans-serif\";\n\nexport function exportSvg(\n\tdiagram: CoordinatedDiagram,\n\toptions: ExportOptions = {},\n): string {\n\tconst title = options.title ?? diagram.title;\n\tconst lines = [\n\t\t`<svg xmlns=\"http://www.w3.org/2000/svg\" role=\"img\" viewBox=\"${formatBoxViewBox(diagram.bounds)}\">`,\n\t\t...(title === undefined ? [] : [` <title>${escapeXml(title)}</title>`]),\n\t\t` <rect class=\"background\" x=\"${formatNumber(diagram.bounds.x)}\" y=\"${formatNumber(diagram.bounds.y)}\" width=\"${formatNumber(diagram.bounds.width)}\" height=\"${formatNumber(diagram.bounds.height)}\" fill=\"#ffffff\"/>`,\n\t\t...(diagram.frame === undefined\n\t\t\t? []\n\t\t\t: [indent(renderFrame(diagram.frame))]),\n\t\t...(diagram.swimlanes ?? []).flatMap((swimlane) =>\n\t\t\trenderSwimlane(swimlane),\n\t\t),\n\t\t...diagram.groups.map((group) => indent(renderGroup(group))),\n\t\t...diagram.edges.flatMap((edge) => {\n\t\t\tconst path = renderEdgePath(edge);\n\t\t\tif (path === undefined) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\treturn [indent(path), indent(renderArrowhead(edge))];\n\t\t}),\n\t\t...diagram.nodes.map((node) => indent(renderNode(node))),\n\t\t...diagram.nodes.flatMap((node) => renderCompartments(node)),\n\t\t...diagram.nodes.flatMap((node) => renderPorts(node)),\n\t\t...diagram.groups.flatMap((group) =>\n\t\t\trenderLabel(group.label, group.box, group),\n\t\t),\n\t\t...diagram.nodes.flatMap((node) =>\n\t\t\tnode.compartments === undefined\n\t\t\t\t? renderLabel(node.label, node.box, node)\n\t\t\t\t: [],\n\t\t),\n\t\t...diagram.edges.flatMap((edge) => renderEdgeLabel(edge)),\n\t\t\"</svg>\",\n\t];\n\n\treturn `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction renderGroup(group: CoordinatedGroup): string {\n\treturn `<rect class=\"group\" data-id=\"${escapeAttribute(group.id)}\" x=\"${formatNumber(group.box.x)}\" y=\"${formatNumber(group.box.y)}\" width=\"${formatNumber(group.box.width)}\" height=\"${formatNumber(group.box.height)}\" fill=\"${GROUP_FILL}\" stroke=\"${STROKE}\" stroke-dasharray=\"6 4\"/>`;\n}\n\nfunction renderNode(node: CoordinatedNode): string {\n\tconst fill = node.style?.fill ?? NODE_FILL;\n\tconst stroke = node.style?.stroke ?? STROKE;\n\tconst common = `class=\"node node-${node.shape}\" data-id=\"${escapeAttribute(node.id)}\" fill=\"${escapeAttribute(fill)}\" stroke=\"${escapeAttribute(stroke)}\"`;\n\tswitch (node.shape) {\n\t\tcase \"rectangle\":\n\t\t\treturn renderRect(node.box, common);\n\t\tcase \"rounded-rectangle\":\n\t\t\treturn renderRect(node.box, `${common} rx=\"8\" ry=\"8\"`);\n\t\tcase \"ellipse\":\n\t\t\treturn `<ellipse ${common} cx=\"${formatNumber(node.box.x + node.box.width / 2)}\" cy=\"${formatNumber(node.box.y + node.box.height / 2)}\" rx=\"${formatNumber(node.box.width / 2)}\" ry=\"${formatNumber(node.box.height / 2)}\"/>`;\n\t\tcase \"diamond\":\n\t\tcase \"parallelogram\":\n\t\tcase \"hexagon\":\n\t\t\treturn `<polygon ${common} points=\"${formatPoints(shapePoints(node.shape, node.box))}\"/>`;\n\t\tcase \"cylinder\":\n\t\t\treturn `<path ${common} d=\"${formatCylinderPath(node.box)}\"/>`;\n\t}\n}\n\nfunction renderFrame(frame: CoordinatedFrame): string {\n\tconst stroke = frame.style?.stroke ?? \"#6b7280\";\n\tconst fill = frame.style?.fill ?? \"transparent\";\n\treturn [\n\t\t`<g class=\"sysml-frame\" data-kind=\"${escapeAttribute(frame.kind)}\">`,\n\t\t` <rect class=\"sysml-frame-border\" x=\"${formatNumber(frame.box.x)}\" y=\"${formatNumber(frame.box.y)}\" width=\"${formatNumber(frame.box.width)}\" height=\"${formatNumber(frame.box.height)}\" fill=\"${escapeAttribute(fill)}\" stroke=\"${escapeAttribute(stroke)}\"/>`,\n\t\t` <path class=\"sysml-title-tab\" d=\"M ${formatNumber(frame.titleBox.x)} ${formatNumber(frame.titleBox.y + frame.titleBox.height)} L ${formatNumber(frame.titleBox.x)} ${formatNumber(frame.titleBox.y)} L ${formatNumber(frame.titleBox.x + frame.titleBox.width - 16)} ${formatNumber(frame.titleBox.y)} L ${formatNumber(frame.titleBox.x + frame.titleBox.width)} ${formatNumber(frame.titleBox.y + frame.titleBox.height)} Z\" fill=\"#f3f4f6\" stroke=\"${escapeAttribute(stroke)}\"/>`,\n\t\t` <text class=\"sysml-title-tab-label\" x=\"${formatNumber(frame.titleBox.x + 8)}\" y=\"${formatNumber(frame.titleBox.y + frame.titleBox.height / 2)}\" dominant-baseline=\"middle\" font-family=\"${FONT_FAMILY}\" font-size=\"12\" fill=\"#111827\">${escapeXml(frame.titleTab)}</text>`,\n\t\t\"</g>\",\n\t].join(\"\\n\");\n}\n\nfunction renderSwimlane(swimlane: Swimlane): string[] {\n\tif (swimlane.box === undefined) {\n\t\treturn [];\n\t}\n\tconst lines = [\n\t\t` <g class=\"swimlane\" data-id=\"${escapeAttribute(swimlane.id)}\">`,\n\t\t` <rect class=\"swimlane-frame\" x=\"${formatNumber(swimlane.box.x)}\" y=\"${formatNumber(swimlane.box.y)}\" width=\"${formatNumber(swimlane.box.width)}\" height=\"${formatNumber(swimlane.box.height)}\" fill=\"#ffffff\" stroke=\"${STROKE}\"/>`,\n\t];\n\tfor (const lane of swimlane.lanes) {\n\t\tif (lane.box === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tlines.push(\n\t\t\t` <rect class=\"swimlane-lane\" data-lane=\"${escapeAttribute(`${swimlane.id}.${lane.id}`)}\" x=\"${formatNumber(lane.box.x)}\" y=\"${formatNumber(lane.box.y)}\" width=\"${formatNumber(lane.box.width)}\" height=\"${formatNumber(lane.box.height)}\" fill=\"none\" stroke=\"${STROKE}\"/>`,\n\t\t);\n\t\tif (lane.label?.text !== undefined) {\n\t\t\tlines.push(\n\t\t\t\t` <text class=\"swimlane-label\" x=\"${formatNumber(lane.box.x + lane.box.width / 2)}\" y=\"${formatNumber(lane.box.y + 16)}\" text-anchor=\"middle\" font-family=\"${FONT_FAMILY}\" font-size=\"12\" fill=\"#111827\">${escapeXml(lane.label.text)}</text>`,\n\t\t\t);\n\t\t}\n\t}\n\tlines.push(\" </g>\");\n\treturn lines;\n}\n\nfunction renderPorts(node: CoordinatedNode): string[] {\n\treturn (node.ports ?? []).flatMap((port) => [\n\t\t` <rect class=\"port\" data-kind=\"${escapeAttribute(port.kind)}\" data-port=\"${escapeAttribute(`${node.id}.${port.id}`)}\" x=\"${formatNumber(port.box.x)}\" y=\"${formatNumber(port.box.y)}\" width=\"${formatNumber(port.box.width)}\" height=\"${formatNumber(port.box.height)}\" fill=\"${escapeAttribute(port.style?.fill ?? \"#d9ead3\")}\" stroke=\"${escapeAttribute(port.style?.stroke ?? STROKE)}\"/>`,\n\t\t...(port.label?.text === undefined\n\t\t\t? []\n\t\t\t: [\n\t\t\t\t\t` <text class=\"port-label\" data-for=\"${escapeAttribute(`${node.id}.${port.id}`)}\" x=\"${formatNumber(portLabelX(port.anchor.x, port.side))}\" y=\"${formatNumber(port.anchor.y - 8)}\" text-anchor=\"${port.side === \"left\" ? \"end\" : \"start\"}\" font-family=\"${FONT_FAMILY}\" font-size=\"10\" fill=\"#111827\">${escapeXml(port.label.text)}</text>`,\n\t\t\t\t]),\n\t]);\n}\n\nfunction renderCompartments(node: CoordinatedNode): string[] {\n\tconst compartments = node.compartments;\n\tif (compartments === undefined) {\n\t\treturn [];\n\t}\n\tconst rows = [\n\t\t...(compartments.stereotype === undefined\n\t\t\t? []\n\t\t\t: [{ className: \"stereotype\", text: compartments.stereotype }]),\n\t\t{\n\t\t\tclassName: \"name\",\n\t\t\ttext: compartments.name ?? node.label?.text ?? node.id,\n\t\t},\n\t\t...(compartments.properties ?? []).map((text) => ({\n\t\t\tclassName: \"properties\",\n\t\t\ttext,\n\t\t})),\n\t\t...(compartments.constraints ?? []).map((text) => ({\n\t\t\tclassName: \"constraints\",\n\t\t\ttext,\n\t\t})),\n\t];\n\tconst lineHeight = 16;\n\tconst lines = [\n\t\t` <g class=\"compartment\" data-for=\"${escapeAttribute(node.id)}\">`,\n\t];\n\tfor (let index = 0; index < rows.length; index += 1) {\n\t\tconst row = rows[index];\n\t\tif (row === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst y = node.box.y + 18 + index * lineHeight;\n\t\tif (index > 1) {\n\t\t\tlines.push(\n\t\t\t\t` <line class=\"compartment-separator\" x1=\"${formatNumber(node.box.x)}\" y1=\"${formatNumber(y - 12)}\" x2=\"${formatNumber(node.box.x + node.box.width)}\" y2=\"${formatNumber(y - 12)}\" stroke=\"${STROKE}\"/>`,\n\t\t\t);\n\t\t}\n\t\tlines.push(\n\t\t\t` <text class=\"compartment-${row.className}\" x=\"${formatNumber(node.box.x + node.box.width / 2)}\" y=\"${formatNumber(y)}\" text-anchor=\"middle\" font-family=\"${FONT_FAMILY}\" font-size=\"11\" fill=\"#111827\">${escapeXml(row.text)}</text>`,\n\t\t);\n\t}\n\tlines.push(\" </g>\");\n\treturn lines;\n}\n\nfunction portLabelX(x: number, side: string): number {\n\tif (side === \"left\") {\n\t\treturn x - 8;\n\t}\n\tif (side === \"right\") {\n\t\treturn x + 8;\n\t}\n\treturn x + 8;\n}\n\nfunction renderRect(box: Box, attributes: string): string {\n\treturn `<rect ${attributes} x=\"${formatNumber(box.x)}\" y=\"${formatNumber(box.y)}\" width=\"${formatNumber(box.width)}\" height=\"${formatNumber(box.height)}\"/>`;\n}\n\nfunction renderLabel(\n\tlabel: Label | undefined,\n\tbox: Box,\n\titem: CoordinatedNode | CoordinatedGroup,\n): string[] {\n\tconst labelLayout = item.labelLayout;\n\tif (labelLayout?.lines !== undefined && labelLayout.lines.length > 0) {\n\t\tconst offset = { x: box.x, y: box.y };\n\t\treturn [\n\t\t\t` <text class=\"label\" data-for=\"${escapeAttribute(item.id)}\" font-family=\"${FONT_FAMILY}\" font-size=\"${formatNumber(labelLayout.font.fontSize)}\" fill=\"#111827\">`,\n\t\t\t...labelLayout.lines.map(\n\t\t\t\t(line) =>\n\t\t\t\t\t` <tspan x=\"${formatNumber(offset.x + line.box.x)}\" y=\"${formatNumber(offset.y + line.baselineY)}\">${escapeXml(line.text)}</tspan>`,\n\t\t\t),\n\t\t\t\" </text>\",\n\t\t];\n\t}\n\n\tif (label?.text === undefined) {\n\t\treturn [];\n\t}\n\n\treturn [\n\t\t` <text class=\"label\" data-for=\"${escapeAttribute(item.id)}\" x=\"${formatNumber(box.x + box.width / 2)}\" y=\"${formatNumber(box.y + box.height / 2)}\" text-anchor=\"middle\" dominant-baseline=\"middle\" font-family=\"${FONT_FAMILY}\" font-size=\"14\" fill=\"#111827\">${escapeXml(label.text)}</text>`,\n\t];\n}\n\nfunction renderEdgePath(edge: CoordinatedEdge): string | undefined {\n\tif (edge.points.length < 2) {\n\t\treturn undefined;\n\t}\n\n\tconst dash = edge.style === \"dashed\" ? ' stroke-dasharray=\"6 4\"' : \"\";\n\treturn `<path class=\"edge\" data-id=\"${escapeAttribute(edge.id)}\" d=\"${formatPath(pathPointsBeforeArrowhead(edge.points))}\" fill=\"none\" stroke=\"${EDGE_STROKE}\" stroke-width=\"1.5\"${dash}/>`;\n}\n\nfunction renderEdgeLabel(edge: CoordinatedEdge): string[] {\n\tif (edge.label?.text === undefined || edge.points.length < 2) {\n\t\treturn [];\n\t}\n\n\tconst placement = labelPlacementOnPolyline(edge.points);\n\tif (placement === undefined) {\n\t\treturn [];\n\t}\n\n\treturn [\n\t\t` <text class=\"edge-label\" data-for=\"${escapeAttribute(edge.id)}\" x=\"${formatNumber(placement.x)}\" y=\"${formatNumber(placement.y)}\" text-anchor=\"middle\" dominant-baseline=\"middle\" font-family=\"${FONT_FAMILY}\" font-size=\"12\" fill=\"#111827\">${escapeXml(edge.label.text)}</text>`,\n\t];\n}\n\nfunction renderArrowhead(edge: CoordinatedEdge): string {\n\tconst arrowhead = computeArrowhead(edge.points);\n\tconst fill = edge.arrowhead === \"hollowTriangle\" ? \"none\" : EDGE_STROKE;\n\treturn `<polygon class=\"edge-arrowhead\" data-edge=\"${escapeAttribute(edge.id)}\" points=\"${formatPoints([arrowhead.tip, arrowhead.left, arrowhead.right])}\" fill=\"${fill}\" stroke=\"${EDGE_STROKE}\"/>`;\n}\n\nfunction labelPlacementOnPolyline(points: readonly Point[]): Point | undefined {\n\tconst segments = nonZeroSegments(points);\n\tconst totalLength = segments.reduce(\n\t\t(sum, segment) => sum + segment.length,\n\t\t0,\n\t);\n\tif (totalLength <= 0) {\n\t\treturn undefined;\n\t}\n\n\tlet remaining = totalLength / 2;\n\tfor (const segment of segments) {\n\t\tif (remaining <= segment.length) {\n\t\t\tconst ratio = remaining / segment.length;\n\t\t\tconst x = segment.start.x + (segment.end.x - segment.start.x) * ratio;\n\t\t\tconst y = segment.start.y + (segment.end.y - segment.start.y) * ratio;\n\t\t\tconst offset = labelOffset(segment);\n\t\t\treturn { x: x + offset.x, y: y + offset.y };\n\t\t}\n\t\tremaining -= segment.length;\n\t}\n\n\tconst last = segments.at(-1);\n\tif (last === undefined) {\n\t\treturn undefined;\n\t}\n\tconst offset = labelOffset(last);\n\treturn { x: last.end.x + offset.x, y: last.end.y + offset.y };\n}\n\nfunction nonZeroSegments(points: readonly Point[]): Array<{\n\tstart: Point;\n\tend: Point;\n\tlength: number;\n}> {\n\tconst segments: Array<{ start: Point; end: Point; length: number }> = [];\n\tfor (let index = 0; index < points.length - 1; index += 1) {\n\t\tconst start = points[index];\n\t\tconst end = points[index + 1];\n\t\tif (start === undefined || end === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst length = Math.hypot(end.x - start.x, end.y - start.y);\n\t\tif (length > 0) {\n\t\t\tsegments.push({ start, end, length });\n\t\t}\n\t}\n\treturn segments;\n}\n\nfunction labelOffset(segment: {\n\tstart: Point;\n\tend: Point;\n\tlength: number;\n}): Point {\n\tconst offset = 10;\n\tconst dx = segment.end.x - segment.start.x;\n\tconst dy = segment.end.y - segment.start.y;\n\treturn {\n\t\tx: (-dy / segment.length) * offset,\n\t\ty: (dx / segment.length) * offset,\n\t};\n}\n\nfunction pathPointsBeforeArrowhead(points: readonly Point[]): Point[] {\n\tconst arrowhead = computeArrowhead(points);\n\tconst base = {\n\t\tx: (arrowhead.left.x + arrowhead.right.x) / 2,\n\t\ty: (arrowhead.left.y + arrowhead.right.y) / 2,\n\t};\n\treturn [...points.slice(0, -1), base];\n}\n\nfunction shapePoints(\n\tshape: Exclude<\n\t\tNodeShape,\n\t\t\"rectangle\" | \"rounded-rectangle\" | \"ellipse\" | \"cylinder\"\n\t>,\n\tbox: Box,\n): Point[] {\n\tconst left = box.x;\n\tconst right = box.x + box.width;\n\tconst top = box.y;\n\tconst bottom = box.y + box.height;\n\tconst midX = box.x + box.width / 2;\n\tconst midY = box.y + box.height / 2;\n\tconst skew = Math.min(box.width * 0.2, 24);\n\n\tswitch (shape) {\n\t\tcase \"diamond\":\n\t\t\treturn [\n\t\t\t\t{ x: midX, y: top },\n\t\t\t\t{ x: right, y: midY },\n\t\t\t\t{ x: midX, y: bottom },\n\t\t\t\t{ x: left, y: midY },\n\t\t\t];\n\t\tcase \"parallelogram\":\n\t\t\treturn [\n\t\t\t\t{ x: left + skew, y: top },\n\t\t\t\t{ x: right, y: top },\n\t\t\t\t{ x: right - skew, y: bottom },\n\t\t\t\t{ x: left, y: bottom },\n\t\t\t];\n\t\tcase \"hexagon\": {\n\t\t\tconst inset = Math.min(box.width * 0.2, 24);\n\t\t\treturn [\n\t\t\t\t{ x: left + inset, y: top },\n\t\t\t\t{ x: right - inset, y: top },\n\t\t\t\t{ x: right, y: midY },\n\t\t\t\t{ x: right - inset, y: bottom },\n\t\t\t\t{ x: left + inset, y: bottom },\n\t\t\t\t{ x: left, y: midY },\n\t\t\t];\n\t\t}\n\t}\n}\n\nfunction formatCylinderPath(box: Box): string {\n\tconst rx = box.width / 2;\n\tconst ry = Math.min(12, box.height / 4);\n\tconst left = box.x;\n\tconst right = box.x + box.width;\n\tconst top = box.y;\n\tconst bottom = box.y + box.height;\n\tconst midX = box.x + rx;\n\n\treturn [\n\t\t`M ${formatNumber(left)} ${formatNumber(top + ry)}`,\n\t\t`A ${formatNumber(rx)} ${formatNumber(ry)} 0 0 1 ${formatNumber(right)} ${formatNumber(top + ry)}`,\n\t\t`L ${formatNumber(right)} ${formatNumber(bottom - ry)}`,\n\t\t`A ${formatNumber(rx)} ${formatNumber(ry)} 0 0 1 ${formatNumber(left)} ${formatNumber(bottom - ry)}`,\n\t\t\"Z\",\n\t\t`M ${formatNumber(left)} ${formatNumber(top + ry)}`,\n\t\t`A ${formatNumber(rx)} ${formatNumber(ry)} 0 0 0 ${formatNumber(right)} ${formatNumber(top + ry)}`,\n\t\t`M ${formatNumber(left)} ${formatNumber(bottom - ry)}`,\n\t\t`A ${formatNumber(rx)} ${formatNumber(ry)} 0 0 0 ${formatNumber(right)} ${formatNumber(bottom - ry)}`,\n\t\t`M ${formatNumber(midX)} ${formatNumber(top)}`,\n\t].join(\" \");\n}\n\nfunction formatPath(points: readonly Point[]): string {\n\treturn points\n\t\t.map((point, index) => {\n\t\t\tconst command = index === 0 ? \"M\" : \"L\";\n\t\t\treturn `${command} ${formatNumber(point.x)} ${formatNumber(point.y)}`;\n\t\t})\n\t\t.join(\" \");\n}\n\nfunction formatPoints(points: readonly Point[]): string {\n\treturn points\n\t\t.map((point) => `${formatNumber(point.x)},${formatNumber(point.y)}`)\n\t\t.join(\" \");\n}\n\nfunction formatBoxViewBox(box: Box): string {\n\treturn `${formatNumber(box.x)} ${formatNumber(box.y)} ${formatNumber(box.width)} ${formatNumber(box.height)}`;\n}\n\nfunction formatNumber(value: number): string {\n\tif (!Number.isFinite(value)) {\n\t\tthrow new TypeError(\"SVG export requires finite coordinated numbers\");\n\t}\n\treturn Number.isInteger(value)\n\t\t? String(value)\n\t\t: value.toFixed(3).replace(/0+$/, \"\").replace(/\\.$/, \"\");\n}\n\nfunction escapeXml(value: string): string {\n\treturn value\n\t\t.replaceAll(\"&\", \"&amp;\")\n\t\t.replaceAll(\"<\", \"&lt;\")\n\t\t.replaceAll(\">\", \"&gt;\");\n}\n\nfunction escapeAttribute(value: string): string {\n\treturn escapeXml(value).replaceAll('\"', \"&quot;\");\n}\n\nfunction indent(value: string): string {\n\treturn ` ${value}`;\n}\n","import type { EdgeLabel, GraphLabel, NodeLabel } from \"@dagrejs/dagre\";\nimport { Graph, layout } from \"@dagrejs/dagre\";\nimport type { Diagnostic } from \"../ir/diagnostics.js\";\nimport type { Box } from \"../ir/geometry.js\";\nimport type {\n\tDagreLayoutInput,\n\tDagreLayoutOptions,\n\tInitialLayoutResult,\n} from \"./types.js\";\n\nconst DEFAULT_OPTIONS: DagreLayoutOptions = {\n\tnodesep: 80,\n\tranksep: 100,\n\tedgesep: 40,\n\tmarginx: 0,\n\tmarginy: 0,\n\tranker: \"network-simplex\",\n};\n\nexport function runDagreInitialLayout(\n\tinput: DagreLayoutInput,\n): InitialLayoutResult {\n\tconst diagnostics: Diagnostic[] = [];\n\tconst boxes = new Map<string, Box>();\n\tconst validNodeIds = new Set<string>();\n\tconst graph = new Graph<GraphLabel, NodeLabel, EdgeLabel>({\n\t\tdirected: true,\n\t\tmultigraph: true,\n\t\tcompound: false,\n\t});\n\tconst options = { ...DEFAULT_OPTIONS, ...input.options };\n\n\tgraph.setGraph({\n\t\trankdir: input.direction,\n\t\tnodesep: options.nodesep,\n\t\tranksep: options.ranksep,\n\t\tedgesep: options.edgesep,\n\t\tmarginx: options.marginx,\n\t\tmarginy: options.marginy,\n\t\tranker: options.ranker,\n\t});\n\tgraph.setDefaultEdgeLabel(() => ({}));\n\n\tfor (const node of input.nodes) {\n\t\tif (\n\t\t\t!isValidDimension(node.size.width) ||\n\t\t\t!isValidDimension(node.size.height)\n\t\t) {\n\t\t\tdiagnostics.push({\n\t\t\t\tseverity: \"error\",\n\t\t\t\tcode: \"layout.node-size.invalid\",\n\t\t\t\tmessage: `Node ${node.id} has invalid layout dimensions.`,\n\t\t\t\tpath: [\"nodes\", node.id, \"size\"],\n\t\t\t\tdetail: { nodeId: node.id },\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalidNodeIds.add(node.id);\n\t\tgraph.setNode(node.id, {\n\t\t\twidth: node.size.width,\n\t\t\theight: node.size.height,\n\t\t});\n\t}\n\n\tfor (const edge of input.edges) {\n\t\tif (!validNodeIds.has(edge.sourceId) || !validNodeIds.has(edge.targetId)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tseverity: \"error\",\n\t\t\t\tcode: \"layout.edge-reference.missing\",\n\t\t\t\tmessage: `Edge ${edge.id} references a missing layout node.`,\n\t\t\t\tpath: [\"edges\", edge.id],\n\t\t\t\tdetail: {\n\t\t\t\t\tedgeId: edge.id,\n\t\t\t\t\tsourceId: edge.sourceId,\n\t\t\t\t\ttargetId: edge.targetId,\n\t\t\t\t},\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tgraph.setEdge(\n\t\t\tedge.sourceId,\n\t\t\tedge.targetId,\n\t\t\t{ minlen: 1, weight: 1 },\n\t\t\tedge.id,\n\t\t);\n\t}\n\n\tlayout(graph);\n\n\tfor (const node of input.nodes) {\n\t\tif (!validNodeIds.has(node.id)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst label = graph.node(node.id);\n\t\tconst centerX = label?.x;\n\t\tconst centerY = label?.y;\n\t\tif (\n\t\t\ttypeof centerX !== \"number\" ||\n\t\t\ttypeof centerY !== \"number\" ||\n\t\t\t!Number.isFinite(centerX) ||\n\t\t\t!Number.isFinite(centerY)\n\t\t) {\n\t\t\tdiagnostics.push({\n\t\t\t\tseverity: \"error\",\n\t\t\t\tcode: \"layout.node-position.invalid\",\n\t\t\t\tmessage: `Dagre returned an invalid position for node ${node.id}.`,\n\t\t\t\tpath: [\"nodes\", node.id],\n\t\t\t\tdetail: { nodeId: node.id },\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tboxes.set(node.id, {\n\t\t\tx: centerX - node.size.width / 2,\n\t\t\ty: centerY - node.size.height / 2,\n\t\t\twidth: node.size.width,\n\t\t\theight: node.size.height,\n\t\t});\n\t}\n\n\treturn { boxes, diagnostics };\n}\n\nfunction isValidDimension(value: number): boolean {\n\treturn Number.isFinite(value) && value >= 0;\n}\n","import { intersectsAabb, validateBox } from \"../geometry/boxes.js\";\nimport { getEdgePort } from \"../geometry/shapes.js\";\nimport type { Diagnostic } from \"../ir/diagnostics.js\";\nimport type {\n\tAnchorName,\n\tBox,\n\tDiagramDirection,\n\tPoint,\n} from \"../ir/geometry.js\";\nimport type { RouteEdgeInput, RouteEdgeResult } from \"./types.js\";\n\nexport function routeEdge(input: RouteEdgeInput): RouteEdgeResult {\n\tconst diagnostics: Diagnostic[] = [];\n\tconst defaultAnchors = defaultAnchorsForGeometry(\n\t\tinput.source.box,\n\t\tinput.target.box,\n\t\tinput.direction,\n\t);\n\tconst source = getEdgePort(\n\t\tinput.source,\n\t\tinput.target.center,\n\t\tinput.sourceAnchor ?? defaultAnchors.sourceAnchor,\n\t);\n\tconst target = getEdgePort(\n\t\tinput.target,\n\t\tinput.source.center,\n\t\tinput.targetAnchor ?? defaultAnchors.targetAnchor,\n\t);\n\n\tif ((input.kind ?? \"orthogonal\") === \"straight\") {\n\t\treturn { points: simplifyRoute([source, target]), diagnostics };\n\t}\n\n\tconst candidates = orthogonalCandidates(source, target, input.direction);\n\tcandidates.push(\n\t\t...expandedObstacleCandidates(\n\t\t\tsource,\n\t\t\ttarget,\n\t\t\tinput.direction,\n\t\t\tinput.obstacles ?? [],\n\t\t),\n\t);\n\tfor (const candidate of candidates) {\n\t\tif (!routeIntersectsObstacles(candidate, input.obstacles ?? [])) {\n\t\t\treturn { points: simplifyRoute(candidate), diagnostics };\n\t\t}\n\t}\n\n\tdiagnostics.push({\n\t\tseverity: \"warning\",\n\t\tcode: \"routing.obstacle.unavoidable\",\n\t\tmessage: \"No bounded orthogonal route candidate avoided all obstacles.\",\n\t});\n\n\treturn {\n\t\tpoints: simplifyRoute(candidates[0] ?? [source, target]),\n\t\tdiagnostics,\n\t};\n}\n\nexport function simplifyRoute(points: readonly Point[]): Point[] {\n\tconst withoutDuplicates: Point[] = [];\n\tfor (const point of points) {\n\t\tconst previous = withoutDuplicates.at(-1);\n\t\tif (\n\t\t\tprevious === undefined ||\n\t\t\tprevious.x !== point.x ||\n\t\t\tprevious.y !== point.y\n\t\t) {\n\t\t\twithoutDuplicates.push({ ...point });\n\t\t}\n\t}\n\n\tconst simplified: Point[] = [];\n\tfor (const point of withoutDuplicates) {\n\t\tconst previous = simplified.at(-1);\n\t\tconst beforePrevious = simplified.at(-2);\n\t\tif (\n\t\t\tprevious !== undefined &&\n\t\t\tbeforePrevious !== undefined &&\n\t\t\tareCollinear(beforePrevious, previous, point)\n\t\t) {\n\t\t\tsimplified[simplified.length - 1] = { ...point };\n\t\t} else {\n\t\t\tsimplified.push({ ...point });\n\t\t}\n\t}\n\n\treturn simplified;\n}\n\nfunction orthogonalCandidates(\n\tsource: Point,\n\ttarget: Point,\n\tdirection: RouteEdgeInput[\"direction\"],\n): Point[][] {\n\tconst midpointX = (source.x + target.x) / 2;\n\tconst midpointY = (source.y + target.y) / 2;\n\tconst candidates: Point[][] = [];\n\n\tif (direction === \"TB\" || direction === \"BT\") {\n\t\tcandidates.push([\n\t\t\tsource,\n\t\t\t{ x: source.x, y: midpointY },\n\t\t\t{ x: target.x, y: midpointY },\n\t\t\ttarget,\n\t\t]);\n\t} else {\n\t\tcandidates.push([\n\t\t\tsource,\n\t\t\t{ x: midpointX, y: source.y },\n\t\t\t{ x: midpointX, y: target.y },\n\t\t\ttarget,\n\t\t]);\n\t}\n\n\tcandidates.push(\n\t\t[source, { x: target.x, y: source.y }, target],\n\t\t[source, { x: source.x, y: target.y }, target],\n\t);\n\n\treturn candidates;\n}\n\nfunction defaultSourceAnchor(direction: DiagramDirection): AnchorName {\n\tswitch (direction) {\n\t\tcase \"LR\":\n\t\t\treturn \"right\";\n\t\tcase \"RL\":\n\t\t\treturn \"left\";\n\t\tcase \"TB\":\n\t\t\treturn \"bottom\";\n\t\tcase \"BT\":\n\t\t\treturn \"top\";\n\t}\n}\n\nfunction defaultAnchorsForGeometry(\n\tsource: Box,\n\ttarget: Box,\n\tdirection: DiagramDirection,\n): { sourceAnchor: AnchorName; targetAnchor: AnchorName } {\n\tconst dx = target.x + target.width / 2 - (source.x + source.width / 2);\n\tconst dy = target.y + target.height / 2 - (source.y + source.height / 2);\n\n\tif (Math.abs(dy) > Math.abs(dx)) {\n\t\treturn dy >= 0\n\t\t\t? { sourceAnchor: \"bottom\", targetAnchor: \"top\" }\n\t\t\t: { sourceAnchor: \"top\", targetAnchor: \"bottom\" };\n\t}\n\n\tif (Math.abs(dx) > 0) {\n\t\treturn dx >= 0\n\t\t\t? { sourceAnchor: \"right\", targetAnchor: \"left\" }\n\t\t\t: { sourceAnchor: \"left\", targetAnchor: \"right\" };\n\t}\n\n\treturn {\n\t\tsourceAnchor: defaultSourceAnchor(direction),\n\t\ttargetAnchor: defaultTargetAnchor(direction),\n\t};\n}\n\nfunction defaultTargetAnchor(direction: DiagramDirection): AnchorName {\n\tswitch (direction) {\n\t\tcase \"LR\":\n\t\t\treturn \"left\";\n\t\tcase \"RL\":\n\t\t\treturn \"right\";\n\t\tcase \"TB\":\n\t\t\treturn \"top\";\n\t\tcase \"BT\":\n\t\t\treturn \"bottom\";\n\t}\n}\n\nfunction expandedObstacleCandidates(\n\tsource: Point,\n\ttarget: Point,\n\tdirection: RouteEdgeInput[\"direction\"],\n\tobstacles: readonly Box[],\n): Point[][] {\n\tif (obstacles.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst margin = 16;\n\tconst candidates: Point[][] = [];\n\n\tif (direction === \"TB\" || direction === \"BT\") {\n\t\tconst lanes = sortedUniqueLanes(\n\t\t\tobstacles.flatMap((obstacle) => [\n\t\t\t\tobstacle.x - margin,\n\t\t\t\tobstacle.x + obstacle.width + margin,\n\t\t\t]),\n\t\t\t(source.x + target.x) / 2,\n\t\t);\n\n\t\tfor (const laneX of lanes) {\n\t\t\tcandidates.push([\n\t\t\t\tsource,\n\t\t\t\t{ x: laneX, y: source.y },\n\t\t\t\t{ x: laneX, y: target.y },\n\t\t\t\ttarget,\n\t\t\t]);\n\t\t}\n\t} else {\n\t\tconst lanes = sortedUniqueLanes(\n\t\t\tobstacles.flatMap((obstacle) => [\n\t\t\t\tobstacle.y - margin,\n\t\t\t\tobstacle.y + obstacle.height + margin,\n\t\t\t]),\n\t\t\t(source.y + target.y) / 2,\n\t\t);\n\n\t\tfor (const laneY of lanes) {\n\t\t\tcandidates.push([\n\t\t\t\tsource,\n\t\t\t\t{ x: source.x, y: laneY },\n\t\t\t\t{ x: target.x, y: laneY },\n\t\t\t\ttarget,\n\t\t\t]);\n\t\t}\n\t}\n\n\treturn candidates;\n}\n\nfunction sortedUniqueLanes(\n\tlanes: readonly number[],\n\tmidpoint: number,\n): number[] {\n\treturn [...new Set(lanes)]\n\t\t.filter((lane) => Number.isFinite(lane))\n\t\t.sort((left, right) => {\n\t\t\tconst distance = Math.abs(left - midpoint) - Math.abs(right - midpoint);\n\t\t\treturn distance === 0 ? left - right : distance;\n\t\t});\n}\n\nfunction routeIntersectsObstacles(\n\tpoints: readonly Point[],\n\tobstacles: readonly Box[],\n): boolean {\n\tfor (let index = 0; index < points.length - 1; index += 1) {\n\t\tconst a = points[index];\n\t\tconst b = points[index + 1];\n\t\tif (a === undefined || b === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst segment = segmentBox(a, b);\n\t\tfor (const obstacle of obstacles) {\n\t\t\tvalidateBox(obstacle);\n\t\t\tif (intersectsAabb(segment, obstacle)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false;\n}\n\nfunction segmentBox(a: Point, b: Point): Box {\n\tconst minX = Math.min(a.x, b.x);\n\tconst minY = Math.min(a.y, b.y);\n\treturn {\n\t\tx: minX,\n\t\ty: minY,\n\t\twidth: Math.max(1, Math.abs(a.x - b.x)),\n\t\theight: Math.max(1, Math.abs(a.y - b.y)),\n\t};\n}\n\nfunction areCollinear(a: Point, b: Point, c: Point): boolean {\n\treturn (a.x === b.x && b.x === c.x) || (a.y === b.y && b.y === c.y);\n}\n","import { applyLayoutConstraints } from \"../constraints/index.js\";\nimport {\n\tcomputeContainerGeometry,\n\tcomputeShapeGeometry,\n\tunionBoxes,\n} from \"../geometry/index.js\";\nimport type { Diagnostic } from \"../ir/diagnostics.js\";\nimport type { CoordinatedDiagram, NormalizedDiagram } from \"../ir/diagram.js\";\nimport type {\n\tCoordinatedEdge,\n\tCoordinatedFrame,\n\tCoordinatedGroup,\n\tCoordinatedNode,\n\tCoordinatedPort,\n\tNormalizedEdge,\n\tNormalizedGroup,\n\tNormalizedNode,\n\tSwimlane,\n} from \"../ir/elements.js\";\nimport type { Box, Insets, Point } from \"../ir/geometry.js\";\nimport { runDagreInitialLayout } from \"../layout/index.js\";\nimport { type RouteKind, routeEdge } from \"../routing/index.js\";\n\nexport interface SolveDiagramOptions {\n\trouteKind?: RouteKind;\n\tobstacleMargin?: number | Insets;\n\toverlapSpacing?: number;\n\tportShifting?: PortShiftingOptions;\n}\n\nexport interface PortShiftingOptions {\n\tenabled?: boolean;\n\tspacing?: number;\n}\n\nexport function solveDiagram(\n\tdiagram: NormalizedDiagram,\n\toptions: SolveDiagramOptions = {},\n): CoordinatedDiagram {\n\tconst diagnostics: Diagnostic[] = [...diagram.diagnostics];\n\tconst nodes = stableById(diagram.nodes);\n\tconst edges = stableById(diagram.edges);\n\tconst groups = stableById(diagram.groups);\n\tconst constraints = stableByConstraintId(diagram.constraints);\n\tconst layout = runDagreInitialLayout({\n\t\tdirection: diagram.direction,\n\t\tnodes: nodes.map((node) => ({ id: node.id, size: node.size })),\n\t\tedges: edges.map((edge) => ({\n\t\t\tid: edge.id,\n\t\t\tsourceId: edge.source.nodeId,\n\t\t\ttargetId: edge.target.nodeId,\n\t\t})),\n\t});\n\n\tdiagnostics.push(...layout.diagnostics);\n\n\tconst constrained = applyLayoutConstraints({\n\t\tdirection: diagram.direction,\n\t\toverlapSpacing: options?.overlapSpacing ?? 40,\n\t\tboxes: layout.boxes,\n\t\tnodes,\n\t\tgroups,\n\t\tconstraints,\n\t});\n\n\tdiagnostics.push(...constrained.diagnostics);\n\n\tconst coordinatedNodes = coordinateNodes(\n\t\tnodes,\n\t\tconstrained.boxes,\n\t\toptions,\n\t\tdiagnostics,\n\t);\n\tconst nodeGeometryById = new Map(\n\t\tcoordinatedNodes.map((node) => [\n\t\t\tnode.id,\n\t\t\tcomputeShapeGeometry({\n\t\t\t\tshape: node.shape,\n\t\t\t\tbox: node.box,\n\t\t\t\tobstacleMargin: options.obstacleMargin ?? 0,\n\t\t\t}),\n\t\t]),\n\t);\n\tconst coordinatedGroups = coordinateGroups(\n\t\tgroups,\n\t\tconstrained.boxes,\n\t\toptions,\n\t\tdiagnostics,\n\t);\n\tconst coordinatedSwimlanes = coordinateSwimlanes(\n\t\tdiagram.swimlanes ?? [],\n\t\tconstrained.boxes,\n\t);\n\tconst groupBoxes = new Map(\n\t\tcoordinatedGroups.map((group) => [group.id, group.box]),\n\t);\n\tconst coordinatedEdges = coordinateEdges(\n\t\tedges,\n\t\tnodeGeometryById,\n\t\tcoordinatedNodes,\n\t\t[...nodeGeometryById.values()].map((geometry) => geometry.obstacleBox),\n\t\tdiagram.direction,\n\t\toptions,\n\t\tdiagnostics,\n\t);\n\tconst allBoxes = [\n\t\t...coordinatedNodes.map((node) => node.box),\n\t\t...coordinatedNodes.flatMap((node) =>\n\t\t\t(node.ports ?? []).flatMap((port) =>\n\t\t\t\tport.label === undefined ? [port.box] : [port.box, portLabelBox(port)],\n\t\t\t),\n\t\t),\n\t\t...groupBoxes.values(),\n\t\t...coordinatedSwimlanes.flatMap((swimlane) =>\n\t\t\tswimlane.box === undefined ? [] : [swimlane.box],\n\t\t),\n\t];\n\tconst contentBounds =\n\t\tallBoxes.length === 0\n\t\t\t? { x: 0, y: 0, width: 0, height: 0 }\n\t\t\t: unionBoxes(allBoxes);\n\tconst frame =\n\t\tdiagram.frame === undefined\n\t\t\t? undefined\n\t\t\t: coordinateFrame(diagram.frame, contentBounds);\n\n\treturn {\n\t\tid: diagram.id,\n\t\t...(diagram.title === undefined ? {} : { title: diagram.title }),\n\t\tdirection: diagram.direction,\n\t\tnodes: coordinatedNodes,\n\t\tedges: coordinatedEdges,\n\t\tgroups: coordinatedGroups,\n\t\t...(coordinatedSwimlanes.length === 0\n\t\t\t? {}\n\t\t\t: { swimlanes: coordinatedSwimlanes }),\n\t\tdiagnostics,\n\t\tbounds:\n\t\t\tframe === undefined\n\t\t\t\t? contentBounds\n\t\t\t\t: unionBoxes([contentBounds, frame.box, frame.titleBox]),\n\t\t...(frame === undefined ? {} : { frame }),\n\t\t...(diagram.metadata === undefined ? {} : { metadata: diagram.metadata }),\n\t};\n}\n\nfunction coordinateNodes(\n\tnodes: readonly NormalizedNode[],\n\tboxes: ReadonlyMap<string, Box>,\n\toptions: SolveDiagramOptions,\n\tdiagnostics: Diagnostic[],\n): CoordinatedNode[] {\n\tconst coordinated: CoordinatedNode[] = [];\n\n\tfor (const node of nodes) {\n\t\tconst box = boxes.get(node.id);\n\t\tif (box === undefined) {\n\t\t\tdiagnostics.push({\n\t\t\t\tseverity: \"error\",\n\t\t\t\tcode: \"solver.node-box.missing\",\n\t\t\t\tmessage: `Node ${node.id} has no solved box.`,\n\t\t\t\tpath: [\"nodes\", node.id],\n\t\t\t\tdetail: { nodeId: node.id },\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst geometry = computeShapeGeometry({\n\t\t\tshape: node.shape,\n\t\t\tbox,\n\t\t\tobstacleMargin: options.obstacleMargin ?? 0,\n\t\t});\n\n\t\tcoordinated.push({\n\t\t\tid: node.id,\n\t\t\t...(node.label === undefined ? {} : { label: node.label }),\n\t\t\t...(node.style === undefined ? {} : { style: node.style }),\n\t\t\t...(node.ports === undefined\n\t\t\t\t? {}\n\t\t\t\t: { ports: coordinatePorts(node, box, options.portShifting) }),\n\t\t\t...(node.compartments === undefined\n\t\t\t\t? {}\n\t\t\t\t: { compartments: node.compartments }),\n\t\t\t...(node.labelLayout === undefined\n\t\t\t\t? {}\n\t\t\t\t: { labelLayout: node.labelLayout }),\n\t\t\tshape: node.shape,\n\t\t\t...(node.metadata === undefined ? {} : { metadata: node.metadata }),\n\t\t\tbox: geometry.box,\n\t\t\tanchors: geometry.anchors,\n\t\t\t...(node.parentId === undefined ? {} : { parentId: node.parentId }),\n\t\t});\n\t}\n\n\treturn coordinated;\n}\n\nfunction coordinatePorts(\n\tnode: NormalizedNode,\n\tnodeBox: Box,\n\tportShifting: PortShiftingOptions | undefined,\n): CoordinatedPort[] {\n\tconst portsBySide = new Map<string, NormalizedNode[\"ports\"]>();\n\tfor (const port of node.ports ?? []) {\n\t\tconst ports = portsBySide.get(port.side) ?? [];\n\t\tports.push(port);\n\t\tportsBySide.set(port.side, ports);\n\t}\n\n\tconst coordinated: CoordinatedPort[] = [];\n\tfor (const [side, ports] of portsBySide) {\n\t\tconst sorted = [...(ports ?? [])].sort((a, b) => {\n\t\t\tconst order = (a.order ?? 0) - (b.order ?? 0);\n\t\t\treturn order === 0 ? a.id.localeCompare(b.id) : order;\n\t\t});\n\t\tfor (let index = 0; index < sorted.length; index += 1) {\n\t\t\tconst port = sorted[index];\n\t\t\tif (port === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst anchor = portAnchor(\n\t\t\t\tnodeBox,\n\t\t\t\tside as CoordinatedPort[\"side\"],\n\t\t\t\tindex,\n\t\t\t\tsorted.length,\n\t\t\t\tportShifting,\n\t\t\t);\n\t\t\tconst box = portBox(anchor);\n\t\t\tcoordinated.push({ ...port, box, anchor });\n\t\t}\n\t}\n\n\treturn coordinated.sort((a, b) => a.id.localeCompare(b.id));\n}\n\nfunction portAnchor(\n\tnodeBox: Box,\n\tside: CoordinatedPort[\"side\"],\n\tindex: number,\n\tcount: number,\n\tportShifting: PortShiftingOptions | undefined,\n): Point {\n\tconst shiftingEnabled = portShifting?.enabled ?? true;\n\tconst spacing = portShifting?.spacing ?? 24;\n\tconst centeredOffset = shiftingEnabled\n\t\t? (index - (count - 1) / 2) * spacing\n\t\t: 0;\n\tswitch (side) {\n\t\tcase \"left\":\n\t\t\treturn {\n\t\t\t\tx: nodeBox.x,\n\t\t\t\ty: nodeBox.y + nodeBox.height / 2 + centeredOffset,\n\t\t\t};\n\t\tcase \"right\":\n\t\t\treturn {\n\t\t\t\tx: nodeBox.x + nodeBox.width,\n\t\t\t\ty: nodeBox.y + nodeBox.height / 2 + centeredOffset,\n\t\t\t};\n\t\tcase \"top\":\n\t\t\treturn {\n\t\t\t\tx: nodeBox.x + nodeBox.width / 2 + centeredOffset,\n\t\t\t\ty: nodeBox.y,\n\t\t\t};\n\t\tcase \"bottom\":\n\t\t\treturn {\n\t\t\t\tx: nodeBox.x + nodeBox.width / 2 + centeredOffset,\n\t\t\t\ty: nodeBox.y + nodeBox.height,\n\t\t\t};\n\t}\n}\n\nfunction portBox(anchor: Point): Box {\n\tconst size = 10;\n\treturn {\n\t\tx: anchor.x - size / 2,\n\t\ty: anchor.y - size / 2,\n\t\twidth: size,\n\t\theight: size,\n\t};\n}\n\nfunction portLabelBox(port: CoordinatedPort): Box {\n\tconst textWidth = Math.max(0, (port.label?.text.length ?? 0) * 6);\n\tconst height = 12;\n\tconst gap = 8;\n\tconst x =\n\t\tport.side === \"left\"\n\t\t\t? port.anchor.x - gap - textWidth\n\t\t\t: port.anchor.x + gap;\n\treturn {\n\t\tx,\n\t\ty: port.anchor.y - 8 - height,\n\t\twidth: textWidth,\n\t\theight,\n\t};\n}\n\nfunction coordinateSwimlanes(\n\tswimlanes: readonly Swimlane[],\n\tnodeBoxes: ReadonlyMap<string, Box>,\n): Swimlane[] {\n\tconst titleSize = 28;\n\tconst padding = 16;\n\treturn swimlanes.map((swimlane) => {\n\t\tconst laneBoxes = swimlane.lanes.flatMap((lane) => {\n\t\t\tconst childBoxes = lane.children\n\t\t\t\t.map((child) => nodeBoxes.get(child))\n\t\t\t\t.filter((box): box is Box => box !== undefined);\n\t\t\treturn childBoxes.length === 0 ? [] : [unionBoxes(childBoxes)];\n\t\t});\n\t\tconst laneUnion =\n\t\t\tlaneBoxes.length === 0\n\t\t\t\t? { x: 0, y: 0, width: 120, height: 80 }\n\t\t\t\t: unionBoxes(laneBoxes);\n\t\tconst outer = expand(laneUnion, padding, titleSize);\n\t\tconst laneCount = Math.max(1, swimlane.lanes.length);\n\t\tconst lanes = swimlane.lanes.map((lane, index) => {\n\t\t\tconst box =\n\t\t\t\tswimlane.orientation === \"vertical\"\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tx: outer.x + (outer.width / laneCount) * index,\n\t\t\t\t\t\t\ty: outer.y,\n\t\t\t\t\t\t\twidth: outer.width / laneCount,\n\t\t\t\t\t\t\theight: outer.height,\n\t\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tx: outer.x,\n\t\t\t\t\t\t\ty: outer.y + (outer.height / laneCount) * index,\n\t\t\t\t\t\t\twidth: outer.width,\n\t\t\t\t\t\t\theight: outer.height / laneCount,\n\t\t\t\t\t\t};\n\t\t\treturn { ...lane, box };\n\t\t});\n\t\treturn { ...swimlane, lanes, box: outer };\n\t});\n}\n\nfunction coordinateFrame(\n\tframe: NonNullable<NormalizedDiagram[\"frame\"]>,\n\tcontentBounds: Box,\n): CoordinatedFrame {\n\tconst padding = 32;\n\tconst titleHeight = 28;\n\tconst titleWidth = Math.max(180, frame.titleTab.length * 7);\n\tconst box = {\n\t\tx: contentBounds.x - padding,\n\t\ty: contentBounds.y - padding - titleHeight,\n\t\twidth: contentBounds.width + padding * 2,\n\t\theight: contentBounds.height + padding * 2 + titleHeight,\n\t};\n\treturn {\n\t\t...frame,\n\t\tbox,\n\t\ttitleBox: {\n\t\t\tx: box.x,\n\t\t\ty: box.y,\n\t\t\twidth: Math.min(titleWidth, box.width * 0.8),\n\t\t\theight: titleHeight,\n\t\t},\n\t};\n}\n\nfunction expand(box: Box, padding: number, titleSize: number): Box {\n\treturn {\n\t\tx: box.x - padding,\n\t\ty: box.y - padding - titleSize,\n\t\twidth: box.width + padding * 2,\n\t\theight: box.height + padding * 2 + titleSize,\n\t};\n}\n\nfunction coordinateGroups(\n\tgroups: readonly NormalizedGroup[],\n\tnodeBoxes: ReadonlyMap<string, Box>,\n\toptions: SolveDiagramOptions,\n\tdiagnostics: Diagnostic[],\n): CoordinatedGroup[] {\n\tconst coordinated: CoordinatedGroup[] = [];\n\tconst groupBoxes = new Map<string, Box>();\n\n\tfor (const group of groups) {\n\t\tconst childBoxes: Box[] = [];\n\t\tlet missing = false;\n\n\t\tfor (const nodeId of group.nodeIds) {\n\t\t\tconst box = nodeBoxes.get(nodeId);\n\t\t\tif (box === undefined) {\n\t\t\t\tmissing = true;\n\t\t\t\tdiagnostics.push(groupReferenceMissing(group.id, \"node\", nodeId));\n\t\t\t} else {\n\t\t\t\tchildBoxes.push(box);\n\t\t\t}\n\t\t}\n\n\t\tfor (const childGroupId of group.groupIds) {\n\t\t\tconst box = groupBoxes.get(childGroupId);\n\t\t\tif (box === undefined) {\n\t\t\t\tmissing = true;\n\t\t\t\tdiagnostics.push(\n\t\t\t\t\tgroupReferenceMissing(group.id, \"group\", childGroupId),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tchildBoxes.push(box);\n\t\t\t}\n\t\t}\n\n\t\tif (missing || childBoxes.length === 0) {\n\t\t\tif (childBoxes.length === 0) {\n\t\t\t\tdiagnostics.push(groupReferenceMissing(group.id, \"child\", undefined));\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst geometry = computeContainerGeometry({\n\t\t\tid: group.id,\n\t\t\tchildBoxes,\n\t\t\tpadding: group.padding,\n\t\t\t...(group.labelLayout === undefined\n\t\t\t\t? {}\n\t\t\t\t: { labelLayout: group.labelLayout }),\n\t\t\tobstacleMargin: options.obstacleMargin ?? 0,\n\t\t});\n\t\tgroupBoxes.set(group.id, geometry.box);\n\t\tdiagnostics.push(...geometry.diagnostics);\n\t\tcoordinated.push({\n\t\t\t...group,\n\t\t\tbox: geometry.box,\n\t\t});\n\t}\n\n\treturn coordinated;\n}\n\nfunction coordinateEdges(\n\tedges: readonly NormalizedEdge[],\n\tnodes: ReadonlyMap<string, ReturnType<typeof computeShapeGeometry>>,\n\tcoordinatedNodes: readonly CoordinatedNode[],\n\tobstacles: readonly Box[],\n\tdirection: NormalizedDiagram[\"direction\"],\n\toptions: SolveDiagramOptions,\n\tdiagnostics: Diagnostic[],\n): CoordinatedEdge[] {\n\tconst coordinated: CoordinatedEdge[] = [];\n\tconst coordinatedNodeById = new Map(\n\t\tcoordinatedNodes.map((node) => [node.id, node]),\n\t);\n\n\tfor (const edge of edges) {\n\t\tconst source = nodes.get(edge.source.nodeId);\n\t\tconst target = nodes.get(edge.target.nodeId);\n\t\tif (source === undefined || target === undefined) {\n\t\t\tdiagnostics.push({\n\t\t\t\tseverity: \"error\",\n\t\t\t\tcode: \"solver.edge-reference.missing\",\n\t\t\t\tmessage: `Edge ${edge.id} references a missing coordinated node.`,\n\t\t\t\tpath: [\"edges\", edge.id],\n\t\t\t\tdetail: {\n\t\t\t\t\tedgeId: edge.id,\n\t\t\t\t\tsourceId: edge.source.nodeId,\n\t\t\t\t\ttargetId: edge.target.nodeId,\n\t\t\t\t},\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst sourcePort = coordinatedNodeById\n\t\t\t.get(edge.source.nodeId)\n\t\t\t?.ports?.find((port) => port.id === edge.source.portId);\n\t\tconst targetPort = coordinatedNodeById\n\t\t\t.get(edge.target.nodeId)\n\t\t\t?.ports?.find((port) => port.id === edge.target.portId);\n\n\t\tconst route = routeEdge({\n\t\t\tkind: options.routeKind ?? \"orthogonal\",\n\t\t\tdirection,\n\t\t\tsource: portGeometry(source, sourcePort),\n\t\t\ttarget: portGeometry(target, targetPort),\n\t\t\t...(edge.source.anchor === undefined\n\t\t\t\t? {}\n\t\t\t\t: { sourceAnchor: edge.source.anchor }),\n\t\t\t...(edge.target.anchor === undefined\n\t\t\t\t? {}\n\t\t\t\t: { targetAnchor: edge.target.anchor }),\n\t\t\tobstacles: obstacles.filter(\n\t\t\t\t(obstacle) =>\n\t\t\t\t\tobstacle !== source.obstacleBox && obstacle !== target.obstacleBox,\n\t\t\t),\n\t\t});\n\t\tdiagnostics.push(\n\t\t\t...route.diagnostics.map((diagnostic) => ({\n\t\t\t\t...diagnostic,\n\t\t\t\tdetail: { ...diagnostic.detail, edgeId: edge.id },\n\t\t\t})),\n\t\t);\n\t\tcoordinated.push({\n\t\t\t...edge,\n\t\t\tpoints: route.points,\n\t\t});\n\t}\n\n\treturn coordinated;\n}\n\nfunction portGeometry(\n\tnodeGeometry: ReturnType<typeof computeShapeGeometry>,\n\tport: CoordinatedPort | undefined,\n): ReturnType<typeof computeShapeGeometry> {\n\tif (port === undefined) {\n\t\treturn nodeGeometry;\n\t}\n\treturn {\n\t\t...nodeGeometry,\n\t\tbox: port.box,\n\t\tcenter: port.anchor,\n\t\tanchors: nodeGeometry.anchors.map((anchor) => ({\n\t\t\tname: anchor.name,\n\t\t\tpoint: port.anchor,\n\t\t})),\n\t\tobstacleBox: port.box,\n\t};\n}\n\nfunction stableById<T extends { id: string }>(items: readonly T[]): T[] {\n\treturn [...items].sort((a, b) => a.id.localeCompare(b.id));\n}\n\nfunction stableByConstraintId<T extends { id?: string; kind: string }>(\n\titems: readonly T[],\n): T[] {\n\treturn [...items].sort((a, b) =>\n\t\t`${a.id ?? a.kind}`.localeCompare(`${b.id ?? b.kind}`),\n\t);\n}\n\nfunction groupReferenceMissing(\n\tgroupId: string,\n\treferenceKind: string,\n\tid: string | undefined,\n): Diagnostic {\n\treturn {\n\t\tseverity: \"error\",\n\t\tcode: \"solver.group-reference.missing\",\n\t\tmessage: `Group ${groupId} references a missing ${referenceKind}.`,\n\t\tpath: [\"groups\", groupId],\n\t\tdetail: id === undefined ? { groupId } : { groupId, id },\n\t};\n}\n","import { exportExcalidraw, exportSvg } from \"../exporters/index.js\";\nimport type { ExportResult } from \"../exporters/types.js\";\nimport type { CoordinatedDiagram } from \"../ir/diagram.js\";\nimport type { JsonObject } from \"../ir/geometry.js\";\nimport type { PortShiftingOptions } from \"../solver/index.js\";\nimport { solveDiagram } from \"../solver/index.js\";\nimport { sortDslDiagnostics } from \"./diagnostics.js\";\nimport { normalizeDiagramDsl } from \"./normalize.js\";\nimport { parseDiagramDsl } from \"./parse.js\";\nimport type {\n\tDslDiagnostic,\n\tDslOutputFormat,\n\tRenderDiagramDslOptions,\n\tRenderDiagramDslResult,\n} from \"./types.js\";\n\nexport function resolveOutputFormat(\n\tcliFormat?: string,\n\tdslFormat?: DslOutputFormat,\n): { format?: DslOutputFormat; diagnostics: DslDiagnostic[] } {\n\tconst selected = cliFormat ?? dslFormat ?? \"svg\";\n\n\tif (selected === \"svg\" || selected === \"excalidraw\") {\n\t\treturn { format: selected, diagnostics: [] };\n\t}\n\n\treturn {\n\t\tdiagnostics: [\n\t\t\t{\n\t\t\t\tseverity: \"error\",\n\t\t\t\tlayer: \"validate\",\n\t\t\t\tcode: \"validate.output-format.unsupported\",\n\t\t\t\tmessage: `Unsupported output format \"${selected}\".`,\n\t\t\t\tpath: [\"output\", \"format\"],\n\t\t\t\thint: \"Use svg or excalidraw.\",\n\t\t\t},\n\t\t],\n\t};\n}\n\nexport function exportDiagram(\n\tformat: DslOutputFormat,\n\tdiagram: CoordinatedDiagram,\n): ExportResult {\n\tconst content =\n\t\tformat === \"svg\" ? exportSvg(diagram) : exportExcalidraw(diagram);\n\n\treturn { format, content, diagnostics: [] };\n}\n\nexport function renderDiagramDsl(\n\tsource: string,\n\toptions: RenderDiagramDslOptions = {},\n): RenderDiagramDslResult {\n\tconst parsed = parseDiagramDsl(source, options);\n\tif (hasErrorDiagnostics(parsed.diagnostics) || parsed.value === undefined) {\n\t\treturn { diagnostics: parsed.diagnostics };\n\t}\n\n\tconst normalized = normalizeDiagramDsl(\n\t\tparsed.value,\n\t\toptions.textMeasurer === undefined\n\t\t\t? {}\n\t\t\t: { textMeasurer: options.textMeasurer },\n\t);\n\tconst format = resolveOutputFormat(options.format, normalized.output?.format);\n\tconst diagnostics = sortDslDiagnostics([\n\t\t...parsed.diagnostics,\n\t\t...normalized.diagnostics,\n\t\t...format.diagnostics,\n\t]);\n\n\tif (\n\t\tnormalized.diagram === undefined ||\n\t\tformat.format === undefined ||\n\t\thasErrorDiagnostics(diagnostics)\n\t) {\n\t\treturn { diagnostics };\n\t}\n\n\tconst solved = solveDiagram(normalized.diagram, {\n\t\trouteKind:\n\t\t\tnormalized.diagram.metadata?.routeKind === \"straight\"\n\t\t\t\t? \"straight\"\n\t\t\t\t: \"orthogonal\",\n\t\t...solvePortShiftingOption(normalized.diagram.metadata?.portShifting),\n\t});\n\tconst solveDiagnostics = solved.diagnostics.map(toSolveDiagnostic);\n\tif (hasErrorDiagnostics(solveDiagnostics)) {\n\t\treturn {\n\t\t\tdiagram: solved,\n\t\t\tdiagnostics: sortDslDiagnostics(solveDiagnostics),\n\t\t};\n\t}\n\n\ttry {\n\t\tconst exported = exportDiagram(format.format, solved);\n\t\treturn {\n\t\t\tformat: exported.format,\n\t\t\tcontent: exported.content,\n\t\t\tdiagram: solved,\n\t\t\tdiagnostics: sortDslDiagnostics([\n\t\t\t\t...diagnostics,\n\t\t\t\t...solveDiagnostics,\n\t\t\t\t...exported.diagnostics.map(toExportDiagnostic),\n\t\t\t]),\n\t\t};\n\t} catch (error) {\n\t\treturn {\n\t\t\tdiagram: solved,\n\t\t\tdiagnostics: [\n\t\t\t\t{\n\t\t\t\t\tseverity: \"error\",\n\t\t\t\t\tlayer: \"export\",\n\t\t\t\t\tcode: \"export.failed\",\n\t\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t\thint: \"Check the coordinated diagram and selected output format.\",\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t}\n}\n\nfunction toSolveDiagnostic(\n\tdiagnostic: CoordinatedDiagram[\"diagnostics\"][number],\n): DslDiagnostic {\n\treturn { ...diagnostic, layer: \"solve\" };\n}\n\nfunction solvePortShiftingOption(value: unknown):\n\t| {\n\t\t\tportShifting: PortShiftingOptions;\n\t }\n\t| Record<string, never> {\n\tif (!isJsonObject(value)) {\n\t\treturn {};\n\t}\n\tconst portShifting: PortShiftingOptions = {};\n\tif (value.enabled === false) {\n\t\tportShifting.enabled = false;\n\t}\n\tif (typeof value.spacing === \"number\") {\n\t\tportShifting.spacing = value.spacing;\n\t}\n\treturn { portShifting };\n}\n\nfunction isJsonObject(value: unknown): value is JsonObject {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction toExportDiagnostic(\n\tdiagnostic: ExportResult[\"diagnostics\"][number],\n): DslDiagnostic {\n\treturn { ...diagnostic, layer: \"export\" };\n}\n\nfunction hasErrorDiagnostics(diagnostics: DslDiagnostic[]): boolean {\n\treturn diagnostics.some((diagnostic) => diagnostic.severity === \"error\");\n}\n","export const DEFAULT_CANONICAL_PRECISION = 3;\n\nexport interface CanonicalizeOptions {\n\tprecision?: number;\n}\n\nexport type CanonicalJson =\n\t| null\n\t| boolean\n\t| number\n\t| string\n\t| CanonicalJson[]\n\t| { [key: string]: CanonicalJson };\n\nconst UNORDERED_COLLECTION_KEYS = new Set([\n\t\"nodes\",\n\t\"edges\",\n\t\"groups\",\n\t\"constraints\",\n\t\"diagnostics\",\n\t\"anchors\",\n]);\n\nconst IDENTITY_KEYS = [\n\t\"id\",\n\t\"name\",\n\t\"sourceId\",\n\t\"targetId\",\n\t\"nodeId\",\n\t\"groupId\",\n\t\"kind\",\n] as const;\n\ntype IdentityKey = (typeof IDENTITY_KEYS)[number];\n\nexport function canonicalize(\n\tvalue: unknown,\n\toptions: CanonicalizeOptions = {},\n): CanonicalJson {\n\tconst precision = resolvePrecision(\n\t\toptions.precision ?? DEFAULT_CANONICAL_PRECISION,\n\t);\n\n\treturn canonicalizeValue(value, precision);\n}\n\nexport function stringifyCanonical(\n\tvalue: unknown,\n\tprecision = DEFAULT_CANONICAL_PRECISION,\n): string {\n\treturn `${JSON.stringify(\n\t\tcanonicalize(value, { precision: resolvePrecision(precision) }),\n\t\tnull,\n\t\t2,\n\t)}\\n`;\n}\n\nfunction resolvePrecision(precision: number): number {\n\tif (!Number.isInteger(precision) || precision < 0) {\n\t\tthrow new TypeError(\"Canonical precision must be a non-negative integer\");\n\t}\n\n\treturn precision;\n}\n\nfunction canonicalizeValue(\n\tvalue: unknown,\n\tprecision: number,\n\tparentKey?: string,\n): CanonicalJson {\n\tif (\n\t\tvalue === null ||\n\t\ttypeof value === \"boolean\" ||\n\t\ttypeof value === \"string\"\n\t) {\n\t\treturn value;\n\t}\n\n\tif (typeof value === \"number\") {\n\t\tif (!Number.isFinite(value)) {\n\t\t\tthrow new TypeError(\"Non-finite number cannot be canonicalized\");\n\t\t}\n\n\t\tif (Object.is(value, -0)) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst factor = 10 ** precision;\n\t\tconst rounded = Math.round(value * factor) / factor;\n\n\t\treturn Object.is(rounded, -0) ? 0 : rounded;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\treturn canonicalizeArray(value, precision, parentKey);\n\t}\n\n\tif (typeof value === \"object\") {\n\t\treturn canonicalizeObject(value, precision);\n\t}\n\n\tthrow new TypeError(\"Unsupported value cannot be canonicalized\");\n}\n\nfunction canonicalizeArray(\n\tvalue: unknown[],\n\tprecision: number,\n\tparentKey?: string,\n): CanonicalJson[] {\n\tconst canonicalItems = value.map((item) =>\n\t\tcanonicalizeValue(item, precision, parentKey),\n\t);\n\n\tif (!shouldSortArray(value, parentKey)) {\n\t\treturn canonicalItems;\n\t}\n\n\treturn [...canonicalItems].sort(compareCanonicalItems);\n}\n\nfunction canonicalizeObject(\n\tvalue: object,\n\tprecision: number,\n): { [key: string]: CanonicalJson } {\n\tconst result: { [key: string]: CanonicalJson } = {};\n\n\tfor (const key of Object.keys(value).sort()) {\n\t\tconst rawValue = (value as Record<string, unknown>)[key];\n\n\t\tif (rawValue === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tresult[key] = canonicalizeValue(rawValue, precision, key);\n\t}\n\n\treturn result;\n}\n\nfunction shouldSortArray(value: unknown[], parentKey?: string): boolean {\n\tif (parentKey === \"points\" || value.every(isPointLikeRecord)) {\n\t\treturn false;\n\t}\n\n\tif (parentKey !== undefined && UNORDERED_COLLECTION_KEYS.has(parentKey)) {\n\t\treturn value.every(isPlainObject);\n\t}\n\n\treturn (\n\t\tvalue.length > 0 &&\n\t\tvalue.every((item) => isPlainObject(item) && hasIdentityKey(item))\n\t);\n}\n\nfunction compareCanonicalItems(a: CanonicalJson, b: CanonicalJson): number {\n\tconst aKey = itemSortKey(a);\n\tconst bKey = itemSortKey(b);\n\n\treturn aKey.localeCompare(bKey);\n}\n\nfunction itemSortKey(value: CanonicalJson): string {\n\tif (!isCanonicalObject(value)) {\n\t\treturn \"\";\n\t}\n\n\treturn IDENTITY_KEYS.map((key) => identityPart(key, value)).join(\"\\u0000\");\n}\n\nfunction identityPart(\n\tkey: IdentityKey,\n\tvalue: { [key: string]: CanonicalJson },\n): string {\n\tconst part = value[key];\n\n\tif (typeof part === \"string\" || typeof part === \"number\") {\n\t\treturn String(part);\n\t}\n\n\treturn \"\";\n}\n\nfunction hasIdentityKey(value: object): boolean {\n\treturn IDENTITY_KEYS.some((key) => key in value);\n}\n\nfunction isPlainObject(value: unknown): value is object {\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\n\treturn prototype === Object.prototype || prototype === null;\n}\n\nfunction isCanonicalObject(\n\tvalue: CanonicalJson,\n): value is { [key: string]: CanonicalJson } {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isPointLikeRecord(value: unknown): boolean {\n\treturn (\n\t\tisPlainObject(value) &&\n\t\ttypeof (value as Record<string, unknown>).x === \"number\" &&\n\t\ttypeof (value as Record<string, unknown>).y === \"number\"\n\t);\n}\n"]}
1
+ {"version":3,"sources":["../src/geometry/boxes.ts","../src/constraints/solver.ts","../src/dsl/diagnostics.ts","../src/dsl/edges.ts","../src/geometry/shapes.ts","../src/geometry/containers.ts","../src/text/types.ts","../src/text/fallback.ts","../src/text/node-canvas.ts","../src/text/pretext.ts","../src/text/default.ts","../src/labels/fit.ts","../src/dsl/normalize.ts","../src/dsl/schema.ts","../src/dsl/parse.ts","../src/exporters/arrow.ts","../src/exporters/excalidraw.ts","../src/exporters/svg.ts","../src/layout/dagre.ts","../src/routing/routes.ts","../src/solver/solve.ts","../src/dsl/render.ts","../src/serialization/canonical.ts"],"names":["movingCenter","fixedCenter","point","contentBox","style","require","normalizeMinSize","renderGroup","renderNode","compartments","offset","layout","alignmentValue","distributionStart","lanes","hasErrorDiagnostics"],"mappings":"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","file":"index.js","sourcesContent":["import type { Box, Insets, Point } from \"../ir/geometry.js\";\n\nexport function normalizeInsets(input: Insets | number = 0): Insets {\n\tif (typeof input === \"number\") {\n\t\tvalidateMargin(input, \"margin\");\n\t\treturn {\n\t\t\ttop: input,\n\t\t\tright: input,\n\t\t\tbottom: input,\n\t\t\tleft: input,\n\t\t};\n\t}\n\n\tvalidateMargin(input.top, \"insets.top\");\n\tvalidateMargin(input.right, \"insets.right\");\n\tvalidateMargin(input.bottom, \"insets.bottom\");\n\tvalidateMargin(input.left, \"insets.left\");\n\n\treturn {\n\t\ttop: input.top,\n\t\tright: input.right,\n\t\tbottom: input.bottom,\n\t\tleft: input.left,\n\t};\n}\n\nexport function validateBox(box: Box, label = \"box\"): void {\n\tvalidateFinite(box.x, `${label}.x`);\n\tvalidateFinite(box.y, `${label}.y`);\n\tvalidateFinite(box.width, `${label}.width`);\n\tvalidateFinite(box.height, `${label}.height`);\n\n\tif (box.width < 0 || box.height < 0) {\n\t\tthrow new TypeError(`${label} dimensions must be non-negative`);\n\t}\n}\n\nexport function boxCenter(box: Box): Point {\n\tvalidateBox(box);\n\n\treturn {\n\t\tx: box.x + box.width / 2,\n\t\ty: box.y + box.height / 2,\n\t};\n}\n\nexport function expandBox(box: Box, margin: number | Insets): Box {\n\tvalidateBox(box);\n\n\tconst insets = normalizeInsets(margin);\n\n\treturn {\n\t\tx: box.x - insets.left,\n\t\ty: box.y - insets.top,\n\t\twidth: box.width + insets.left + insets.right,\n\t\theight: box.height + insets.top + insets.bottom,\n\t};\n}\n\nexport function unionBoxes(boxes: readonly Box[]): Box {\n\tif (boxes.length === 0) {\n\t\tthrow new TypeError(\"Cannot union empty box collection\");\n\t}\n\n\tfor (const [index, box] of boxes.entries()) {\n\t\tvalidateBox(box, `boxes[${index}]`);\n\t}\n\n\tconst minX = Math.min(...boxes.map((box) => box.x));\n\tconst minY = Math.min(...boxes.map((box) => box.y));\n\tconst maxX = Math.max(...boxes.map((box) => box.x + box.width));\n\tconst maxY = Math.max(...boxes.map((box) => box.y + box.height));\n\n\treturn {\n\t\tx: minX,\n\t\ty: minY,\n\t\twidth: maxX - minX,\n\t\theight: maxY - minY,\n\t};\n}\n\nexport function intersectsAabb(a: Box, b: Box): boolean {\n\tvalidateBox(a, \"a\");\n\tvalidateBox(b, \"b\");\n\n\treturn (\n\t\ta.x <= b.x + b.width &&\n\t\ta.x + a.width >= b.x &&\n\t\ta.y <= b.y + b.height &&\n\t\ta.y + a.height >= b.y\n\t);\n}\n\nfunction validateMargin(value: number, label: string): void {\n\tvalidateFinite(value, label);\n\n\tif (value < 0) {\n\t\tthrow new TypeError(`${label} must be non-negative`);\n\t}\n}\n\nfunction validateFinite(value: number, label: string): void {\n\tif (!Number.isFinite(value)) {\n\t\tthrow new TypeError(`${label} must be finite`);\n\t}\n}\n","import { intersectsAabb, validateBox } from \"../geometry/boxes.js\";\nimport type {\n\tAlignConstraint,\n\tConstraint,\n\tDistributeConstraint,\n\tRelativePositionConstraint,\n} from \"../ir/constraints.js\";\nimport type { Diagnostic } from \"../ir/diagnostics.js\";\nimport type { NormalizedNode } from \"../ir/elements.js\";\nimport type { Box, Insets, Point } from \"../ir/geometry.js\";\nimport type {\n\tConstraintSolverInput,\n\tConstraintSolverResult,\n\tLayoutLock,\n} from \"./types.js\";\n\nexport function applyLayoutConstraints(\n\tinput: ConstraintSolverInput,\n): ConstraintSolverResult {\n\tconst diagnostics: Diagnostic[] = [];\n\tconst boxes = cloneValidBoxes(input.boxes, diagnostics);\n\tconst locks = new Map<string, LayoutLock>();\n\tconst nodeById = new Map(input.nodes.map((node) => [node.id, node]));\n\n\tapplyFixedPositionLocks(input.nodes, boxes, locks, diagnostics);\n\tapplyExactPositions(input.constraints, boxes, locks, diagnostics, nodeById);\n\tapplyContainment(input.constraints, boxes, locks, diagnostics);\n\tapplyRelative(input.constraints, boxes, locks, diagnostics);\n\tapplyAlign(input.constraints, boxes, locks, diagnostics);\n\tapplyDistribute(input.constraints, boxes, locks, diagnostics);\n\trepairOverlaps(input, boxes, locks, diagnostics);\n\n\treturn { boxes, locks, diagnostics };\n}\n\nfunction cloneValidBoxes(\n\tinput: ReadonlyMap<string, Box>,\n\tdiagnostics: Diagnostic[],\n): Map<string, Box> {\n\tconst boxes = new Map<string, Box>();\n\n\tfor (const [id, box] of input) {\n\t\tif (isFiniteBox(box)) {\n\t\t\tboxes.set(id, { ...box });\n\t\t} else {\n\t\t\tdiagnostics.push({\n\t\t\t\tseverity: \"error\",\n\t\t\t\tcode: \"constraints.position.invalid\",\n\t\t\t\tmessage: `Box ${id} contains invalid coordinates.`,\n\t\t\t\tpath: [\"boxes\", id],\n\t\t\t\tdetail: { nodeId: id },\n\t\t\t});\n\t\t}\n\t}\n\n\treturn boxes;\n}\n\nfunction applyFixedPositionLocks(\n\tnodes: readonly NormalizedNode[],\n\tboxes: Map<string, Box>,\n\tlocks: Map<string, LayoutLock>,\n\tdiagnostics: Diagnostic[],\n): void {\n\tfor (const node of nodes) {\n\t\tif (node.position === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst box = boxes.get(node.id);\n\t\tif (box === undefined) {\n\t\t\tmissingReference(diagnostics, \"node\", node.id);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!isFinitePoint(node.position)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tseverity: \"error\",\n\t\t\t\tcode: \"constraints.position.invalid\",\n\t\t\t\tmessage: `Fixed position for ${node.id} is invalid.`,\n\t\t\t\tpath: [\"nodes\", node.id, \"position\"],\n\t\t\t\tdetail: { nodeId: node.id },\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tboxes.set(node.id, { ...box, x: node.position.x, y: node.position.y });\n\t\tlocks.set(node.id, { nodeId: node.id, source: \"fixed-position\" });\n\t}\n}\n\nfunction applyExactPositions(\n\tconstraints: readonly Constraint[],\n\tboxes: Map<string, Box>,\n\tlocks: Map<string, LayoutLock>,\n\tdiagnostics: Diagnostic[],\n\tnodeById: ReadonlyMap<string, NormalizedNode>,\n): void {\n\tfor (const constraint of constraints) {\n\t\tif (constraint.kind !== \"exact-position\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst targetId = constraintTargetId(constraint);\n\t\tif (targetId === undefined || !nodeById.has(targetId)) {\n\t\t\tmissingReference(diagnostics, \"target\", targetId);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst box = boxes.get(targetId);\n\t\tif (box === undefined) {\n\t\t\tmissingReference(diagnostics, \"box\", targetId);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!isFinitePoint(constraint.position)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tseverity: \"error\",\n\t\t\t\tcode: \"constraints.position.invalid\",\n\t\t\t\tmessage: `Exact position for ${targetId} is invalid.`,\n\t\t\t\tpath: [\"constraints\", constraint.id ?? targetId, \"position\"],\n\t\t\t\tdetail: { nodeId: targetId },\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst existingLock = locks.get(targetId);\n\t\tif (\n\t\t\texistingLock !== undefined &&\n\t\t\t(box.x !== constraint.position.x || box.y !== constraint.position.y)\n\t\t) {\n\t\t\tdiagnostics.push({\n\t\t\t\tseverity: \"error\",\n\t\t\t\tcode: \"constraints.conflict.exact-position\",\n\t\t\t\tmessage: `Exact position conflicts with existing lock for ${targetId}.`,\n\t\t\t\tpath: [\"constraints\", constraint.id ?? targetId],\n\t\t\t\tdetail: { nodeId: targetId, source: existingLock.source },\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tboxes.set(targetId, {\n\t\t\t...box,\n\t\t\tx: constraint.position.x,\n\t\t\ty: constraint.position.y,\n\t\t});\n\t\tlocks.set(targetId, { nodeId: targetId, source: \"exact-position\" });\n\t}\n}\n\nfunction applyContainment(\n\tconstraints: readonly Constraint[],\n\tboxes: Map<string, Box>,\n\tlocks: ReadonlyMap<string, LayoutLock>,\n\tdiagnostics: Diagnostic[],\n): void {\n\tfor (const constraint of constraints) {\n\t\tif (constraint.kind !== \"containment\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst container = boxes.get(constraint.containerId);\n\t\tif (container === undefined) {\n\t\t\tmissingReference(diagnostics, \"container\", constraint.containerId);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst content = contentBox(container, constraint.padding);\n\t\tfor (const childId of constraint.childIds) {\n\t\t\tconst child = boxes.get(childId);\n\t\t\tif (child === undefined) {\n\t\t\t\tmissingReference(diagnostics, \"child\", childId);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst next = moveInside(child, content);\n\t\t\tif (samePosition(child, next)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (locks.has(childId)) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t\tcode: \"constraints.locked-target-not-moved\",\n\t\t\t\t\tmessage: `Locked child ${childId} was not moved into containment.`,\n\t\t\t\t\tpath: [\"constraints\", constraint.id ?? constraint.containerId],\n\t\t\t\t\tdetail: { nodeId: childId },\n\t\t\t\t});\n\t\t\t\tif (!isInside(child, content)) {\n\t\t\t\t\tdiagnostics.push({\n\t\t\t\t\t\tseverity: \"error\",\n\t\t\t\t\t\tcode: \"constraints.containment.impossible\",\n\t\t\t\t\t\tmessage: `Locked child ${childId} cannot fit inside ${constraint.containerId}.`,\n\t\t\t\t\t\tpath: [\"constraints\", constraint.id ?? constraint.containerId],\n\t\t\t\t\t\tdetail: { nodeId: childId, containerId: constraint.containerId },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (next.width > content.width || next.height > content.height) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\tseverity: \"error\",\n\t\t\t\t\tcode: \"constraints.containment.impossible\",\n\t\t\t\t\tmessage: `Child ${childId} cannot fit inside ${constraint.containerId}.`,\n\t\t\t\t\tpath: [\"constraints\", constraint.id ?? constraint.containerId],\n\t\t\t\t\tdetail: { nodeId: childId, containerId: constraint.containerId },\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tboxes.set(childId, next);\n\t\t}\n\t}\n}\n\nfunction applyRelative(\n\tconstraints: readonly Constraint[],\n\tboxes: Map<string, Box>,\n\tlocks: ReadonlyMap<string, LayoutLock>,\n\tdiagnostics: Diagnostic[],\n): void {\n\tfor (const constraint of constraints) {\n\t\tif (constraint.kind !== \"relative-position\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst source = boxes.get(constraint.sourceId);\n\t\tconst reference = boxes.get(constraint.referenceId);\n\t\tif (source === undefined) {\n\t\t\tmissingReference(diagnostics, \"source\", constraint.sourceId);\n\t\t\tcontinue;\n\t\t}\n\t\tif (reference === undefined) {\n\t\t\tmissingReference(diagnostics, \"reference\", constraint.referenceId);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst next = relativeBox(source, reference, constraint);\n\t\tsetUnlockedBox(\n\t\t\tconstraint.sourceId,\n\t\t\tnext,\n\t\t\tboxes,\n\t\t\tlocks,\n\t\t\tdiagnostics,\n\t\t\tconstraint,\n\t\t);\n\t}\n}\n\nfunction applyAlign(\n\tconstraints: readonly Constraint[],\n\tboxes: Map<string, Box>,\n\tlocks: ReadonlyMap<string, LayoutLock>,\n\tdiagnostics: Diagnostic[],\n): void {\n\tfor (const constraint of constraints) {\n\t\tif (constraint.kind !== \"align\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst targets = collectTargets(constraint.targetIds, boxes, diagnostics);\n\t\tconst anchor = targets[0];\n\t\tif (anchor === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst value = alignmentValue(anchor.box, constraint.axis);\n\t\tfor (const { id, box } of targets.slice(1)) {\n\t\t\tconst next = alignBox(box, constraint.axis, value);\n\t\t\tsetUnlockedBox(id, next, boxes, locks, diagnostics, constraint);\n\t\t}\n\t}\n}\n\nfunction applyDistribute(\n\tconstraints: readonly Constraint[],\n\tboxes: Map<string, Box>,\n\tlocks: ReadonlyMap<string, LayoutLock>,\n\tdiagnostics: Diagnostic[],\n): void {\n\tfor (const constraint of constraints) {\n\t\tif (constraint.kind !== \"distribute\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst targets = collectTargets(\n\t\t\tconstraint.targetIds,\n\t\t\tboxes,\n\t\t\tdiagnostics,\n\t\t).sort((a, b) => {\n\t\t\tconst delta =\n\t\t\t\tconstraint.axis === \"horizontal\"\n\t\t\t\t\t? a.box.x - b.box.x\n\t\t\t\t\t: a.box.y - b.box.y;\n\t\t\treturn delta === 0 ? a.id.localeCompare(b.id) : delta;\n\t\t});\n\t\tif (targets.length < 3) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst first = targets[0];\n\t\tconst last = targets[targets.length - 1];\n\t\tif (first === undefined || last === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst spacing =\n\t\t\tconstraint.spacing ??\n\t\t\t(distributionStart(last.box, constraint.axis) -\n\t\t\t\tdistributionStart(first.box, constraint.axis)) /\n\t\t\t\t(targets.length - 1);\n\n\t\tfor (const [index, target] of targets.slice(1, -1).entries()) {\n\t\t\tconst nextStart =\n\t\t\t\tdistributionStart(first.box, constraint.axis) + spacing * (index + 1);\n\t\t\tconst next =\n\t\t\t\tconstraint.axis === \"horizontal\"\n\t\t\t\t\t? { ...target.box, x: nextStart }\n\t\t\t\t\t: { ...target.box, y: nextStart };\n\t\t\tsetUnlockedBox(target.id, next, boxes, locks, diagnostics, constraint);\n\t\t}\n\t}\n}\n\nfunction repairOverlaps(\n\tinput: ConstraintSolverInput,\n\tboxes: Map<string, Box>,\n\tlocks: ReadonlyMap<string, LayoutLock>,\n\tdiagnostics: Diagnostic[],\n): void {\n\tconst spacing = input.overlapSpacing ?? 40;\n\tconst axis = input.direction === \"LR\" || input.direction === \"RL\" ? \"x\" : \"y\";\n\tconst ids = [...boxes.keys()].sort();\n\n\tfor (const firstId of ids) {\n\t\tfor (const secondId of ids) {\n\t\t\tif (firstId >= secondId) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst first = boxes.get(firstId);\n\t\t\tconst second = boxes.get(secondId);\n\t\t\tif (\n\t\t\t\tfirst === undefined ||\n\t\t\t\tsecond === undefined ||\n\t\t\t\t!intersectsAabb(first, second)\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst firstLocked = locks.has(firstId);\n\t\t\tconst secondLocked = locks.has(secondId);\n\t\t\tif (firstLocked === secondLocked) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst movingId = firstLocked ? secondId : firstId;\n\t\t\tconst moving = firstLocked ? second : first;\n\t\t\tconst fixed = firstLocked ? first : second;\n\t\t\tconst moved = movePastOverlap(moving, fixed, axis, spacing);\n\t\t\tboxes.set(movingId, moved);\n\t\t}\n\t}\n\n\tfor (const firstId of ids) {\n\t\tfor (const secondId of ids) {\n\t\t\tif (firstId >= secondId) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst first = boxes.get(firstId);\n\t\t\tconst second = boxes.get(secondId);\n\t\t\tif (\n\t\t\t\tfirst !== undefined &&\n\t\t\t\tsecond !== undefined &&\n\t\t\t\tintersectsAabb(first, second)\n\t\t\t) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t\tcode: \"constraints.overlap.unresolved\",\n\t\t\t\t\tmessage: `Boxes ${firstId} and ${secondId} still overlap after stable sorted primary axis repair with configured spacing.`,\n\t\t\t\t\tpath: [\"boxes\"],\n\t\t\t\t\tdetail: { firstId, secondId },\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction setUnlockedBox(\n\tid: string,\n\tnext: Box,\n\tboxes: Map<string, Box>,\n\tlocks: ReadonlyMap<string, LayoutLock>,\n\tdiagnostics: Diagnostic[],\n\tconstraint: Constraint,\n): void {\n\tconst current = boxes.get(id);\n\tif (current === undefined) {\n\t\tmissingReference(diagnostics, \"target\", id);\n\t\treturn;\n\t}\n\n\tif (!isFiniteBox(next)) {\n\t\tdiagnostics.push({\n\t\t\tseverity: \"error\",\n\t\t\tcode: \"constraints.position.invalid\",\n\t\t\tmessage: `Constraint produced an invalid position for ${id}.`,\n\t\t\tpath: [\"constraints\", constraint.id ?? id],\n\t\t\tdetail: { nodeId: id },\n\t\t});\n\t\treturn;\n\t}\n\n\tif (locks.has(id) && !samePosition(current, next)) {\n\t\tdiagnostics.push({\n\t\t\tseverity: \"warning\",\n\t\t\tcode: \"constraints.locked-target-not-moved\",\n\t\t\tmessage: `Locked target ${id} was not moved by ${constraint.kind}.`,\n\t\t\tpath: [\"constraints\", constraint.id ?? id],\n\t\t\tdetail: { nodeId: id, constraintKind: constraint.kind },\n\t\t});\n\t\treturn;\n\t}\n\n\tboxes.set(id, next);\n}\n\nfunction constraintTargetId(\n\tconstraint: Extract<Constraint, { kind: \"exact-position\" }>,\n): string | undefined {\n\treturn constraint.targetId ?? constraint.target?.id;\n}\n\nfunction collectTargets(\n\tids: readonly string[],\n\tboxes: ReadonlyMap<string, Box>,\n\tdiagnostics: Diagnostic[],\n): { id: string; box: Box }[] {\n\tconst targets: { id: string; box: Box }[] = [];\n\tfor (const id of ids) {\n\t\tconst box = boxes.get(id);\n\t\tif (box === undefined) {\n\t\t\tmissingReference(diagnostics, \"target\", id);\n\t\t} else {\n\t\t\ttargets.push({ id, box });\n\t\t}\n\t}\n\treturn targets;\n}\n\nfunction relativeBox(\n\tsource: Box,\n\treference: Box,\n\tconstraint: RelativePositionConstraint,\n): Box {\n\tconst offset = constraint.offset ?? { x: 0, y: 0 };\n\tswitch (constraint.relation) {\n\t\tcase \"above\":\n\t\t\treturn {\n\t\t\t\t...source,\n\t\t\t\tx: reference.x + offset.x,\n\t\t\t\ty: reference.y - source.height + offset.y,\n\t\t\t};\n\t\tcase \"right-of\":\n\t\t\treturn {\n\t\t\t\t...source,\n\t\t\t\tx: reference.x + reference.width + offset.x,\n\t\t\t\ty: reference.y + offset.y,\n\t\t\t};\n\t\tcase \"below\":\n\t\t\treturn {\n\t\t\t\t...source,\n\t\t\t\tx: reference.x + offset.x,\n\t\t\t\ty: reference.y + reference.height + offset.y,\n\t\t\t};\n\t\tcase \"left-of\":\n\t\t\treturn {\n\t\t\t\t...source,\n\t\t\t\tx: reference.x - source.width + offset.x,\n\t\t\t\ty: reference.y + offset.y,\n\t\t\t};\n\t}\n}\n\nfunction alignmentValue(box: Box, axis: AlignConstraint[\"axis\"]): number {\n\tswitch (axis) {\n\t\tcase \"x\":\n\t\tcase \"left\":\n\t\t\treturn box.x;\n\t\tcase \"y\":\n\t\tcase \"top\":\n\t\t\treturn box.y;\n\t\tcase \"center-x\":\n\t\t\treturn box.x + box.width / 2;\n\t\tcase \"center-y\":\n\t\t\treturn box.y + box.height / 2;\n\t\tcase \"right\":\n\t\t\treturn box.x + box.width;\n\t\tcase \"bottom\":\n\t\t\treturn box.y + box.height;\n\t}\n}\n\nfunction alignBox(box: Box, axis: AlignConstraint[\"axis\"], value: number): Box {\n\tswitch (axis) {\n\t\tcase \"x\":\n\t\tcase \"left\":\n\t\t\treturn { ...box, x: value };\n\t\tcase \"y\":\n\t\tcase \"top\":\n\t\t\treturn { ...box, y: value };\n\t\tcase \"center-x\":\n\t\t\treturn { ...box, x: value - box.width / 2 };\n\t\tcase \"center-y\":\n\t\t\treturn { ...box, y: value - box.height / 2 };\n\t\tcase \"right\":\n\t\t\treturn { ...box, x: value - box.width };\n\t\tcase \"bottom\":\n\t\t\treturn { ...box, y: value - box.height };\n\t}\n}\n\nfunction distributionStart(\n\tbox: Box,\n\taxis: DistributeConstraint[\"axis\"],\n): number {\n\treturn axis === \"horizontal\" ? box.x : box.y;\n}\n\nfunction contentBox(container: Box, padding: Insets | undefined): Box {\n\tconst margin = padding ?? { top: 0, right: 0, bottom: 0, left: 0 };\n\treturn {\n\t\tx: container.x + margin.left,\n\t\ty: container.y + margin.top,\n\t\twidth: container.width - margin.left - margin.right,\n\t\theight: container.height - margin.top - margin.bottom,\n\t};\n}\n\nfunction moveInside(child: Box, container: Box): Box {\n\treturn {\n\t\t...child,\n\t\tx: Math.min(\n\t\t\tMath.max(child.x, container.x),\n\t\t\tcontainer.x + container.width - child.width,\n\t\t),\n\t\ty: Math.min(\n\t\t\tMath.max(child.y, container.y),\n\t\t\tcontainer.y + container.height - child.height,\n\t\t),\n\t};\n}\n\nfunction isInside(child: Box, container: Box): boolean {\n\treturn (\n\t\tchild.x >= container.x &&\n\t\tchild.y >= container.y &&\n\t\tchild.x + child.width <= container.x + container.width &&\n\t\tchild.y + child.height <= container.y + container.height\n\t);\n}\n\nfunction movePastOverlap(\n\tmoving: Box,\n\tfixed: Box,\n\tprimaryAxis: \"x\" | \"y\",\n\tspacing: number,\n): Box {\n\tif (primaryAxis === \"x\") {\n\t\tconst movingCenter = moving.x + moving.width / 2;\n\t\tconst fixedCenter = fixed.x + fixed.width / 2;\n\t\tconst x =\n\t\t\tmovingCenter >= fixedCenter\n\t\t\t\t? fixed.x + fixed.width + spacing\n\t\t\t\t: fixed.x - moving.width - spacing;\n\t\treturn { ...moving, x };\n\t}\n\n\tconst movingCenter = moving.y + moving.height / 2;\n\tconst fixedCenter = fixed.y + fixed.height / 2;\n\tconst y =\n\t\tmovingCenter >= fixedCenter\n\t\t\t? fixed.y + fixed.height + spacing\n\t\t\t: fixed.y - moving.height - spacing;\n\treturn { ...moving, y };\n}\n\nfunction samePosition(a: Box, b: Box): boolean {\n\treturn a.x === b.x && a.y === b.y;\n}\n\nfunction isFiniteBox(box: Box): boolean {\n\ttry {\n\t\tvalidateBox(box);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction isFinitePoint(point: Point): boolean {\n\treturn Number.isFinite(point.x) && Number.isFinite(point.y);\n}\n\nfunction missingReference(\n\tdiagnostics: Diagnostic[],\n\treferenceKind: string,\n\tid: string | undefined,\n): void {\n\tdiagnostics.push({\n\t\tseverity: \"error\",\n\t\tcode: \"constraints.reference.missing\",\n\t\tmessage: `Missing ${referenceKind} reference${id === undefined ? \"\" : `: ${id}`}.`,\n\t\tpath: [\"constraints\", referenceKind],\n\t\tdetail: id === undefined ? {} : { id },\n\t});\n}\n","import type { DslDiagnostic, DslDiagnosticLayer } from \"./types.js\";\n\nconst SEVERITY_RANK = new Map([\n\t[\"error\", 0],\n\t[\"warning\", 1],\n\t[\"info\", 2],\n] as const);\n\nconst LAYER_RANK = new Map<DslDiagnosticLayer, number>([\n\t[\"parse\", 0],\n\t[\"validate\", 1],\n\t[\"solve\", 2],\n\t[\"export\", 3],\n\t[\"io\", 4],\n]);\n\nexport function sortDslDiagnostics(\n\tdiagnostics: DslDiagnostic[],\n): DslDiagnostic[] {\n\treturn [...diagnostics].sort((a, b) => {\n\t\tconst severityDelta =\n\t\t\t(SEVERITY_RANK.get(a.severity) ?? 99) -\n\t\t\t(SEVERITY_RANK.get(b.severity) ?? 99);\n\t\tif (severityDelta !== 0) {\n\t\t\treturn severityDelta;\n\t\t}\n\n\t\tconst layerDelta =\n\t\t\t(LAYER_RANK.get(a.layer) ?? 99) - (LAYER_RANK.get(b.layer) ?? 99);\n\t\tif (layerDelta !== 0) {\n\t\t\treturn layerDelta;\n\t\t}\n\n\t\tconst pathDelta = pathKey(a.path).localeCompare(pathKey(b.path));\n\t\tif (pathDelta !== 0) {\n\t\t\treturn pathDelta;\n\t\t}\n\n\t\treturn a.code.localeCompare(b.code);\n\t});\n}\n\nexport function createSchemaDiagnostic(\n\tpath: Array<string | number>,\n\tmessage: string,\n): DslDiagnostic {\n\treturn {\n\t\tseverity: \"error\",\n\t\tlayer: \"validate\",\n\t\tcode: \"validate.schema.invalid\",\n\t\tmessage,\n\t\tpath,\n\t\thint: hintForPath(path),\n\t};\n}\n\nexport function createParseDiagnostic(\n\tcode: string,\n\tmessage: string,\n\thint: string,\n): DslDiagnostic {\n\treturn {\n\t\tseverity: \"error\",\n\t\tlayer: \"parse\",\n\t\tcode,\n\t\tmessage,\n\t\thint,\n\t};\n}\n\nfunction hintForPath(path: Array<string | number>): string {\n\tconst pathText = pathKey(path);\n\n\tif (pathText.endsWith(\".shape\")) {\n\t\treturn \"Use one of: rectangle, rounded-rectangle, ellipse, diamond, parallelogram, hexagon, cylinder.\";\n\t}\n\n\tif (pathText.endsWith(\".format\")) {\n\t\treturn \"Use output format svg or excalidraw.\";\n\t}\n\n\tif (pathText.includes(\".position.\")) {\n\t\treturn \"Use finite numeric x and y coordinates.\";\n\t}\n\n\treturn \"Check the DSL value at this path against the supported schema.\";\n}\n\nfunction pathKey(path: DslDiagnostic[\"path\"]): string {\n\treturn (path ?? []).map(String).join(\".\");\n}\n","import type { DslDiagnostic } from \"./types.js\";\n\nconst EDGE_ID_PATTERN = /^[A-Za-z0-9_.:-]+$/;\nconst SHORTHAND_PATTERN = /^(.+?)\\s*->\\s*([^:]+)(?::(.*))?$/;\n\nexport interface ParsedEdgeShorthand {\n\tsourceId: string;\n\ttargetId: string;\n\tlabel?: { text: string };\n}\n\nexport function parseEdgeShorthand(\n\tvalue: string,\n\tpath: Array<string | number>,\n): { edge?: ParsedEdgeShorthand; diagnostics: DslDiagnostic[] } {\n\tconst match = SHORTHAND_PATTERN.exec(value.trim());\n\tif (match === null) {\n\t\treturn invalidEdgeShorthand(path);\n\t}\n\n\tconst sourceId = match[1]?.trim() ?? \"\";\n\tconst targetId = match[2]?.trim() ?? \"\";\n\tconst labelText = match[3]?.trim();\n\n\tif (!isValidEdgeId(sourceId) || !isValidEdgeId(targetId)) {\n\t\treturn invalidEdgeShorthand(path);\n\t}\n\n\treturn {\n\t\tedge: {\n\t\t\tsourceId,\n\t\t\ttargetId,\n\t\t\t...(labelText === undefined || labelText === \"\"\n\t\t\t\t? {}\n\t\t\t\t: { label: { text: labelText } }),\n\t\t},\n\t\tdiagnostics: [],\n\t};\n}\n\nfunction invalidEdgeShorthand(path: Array<string | number>): {\n\tdiagnostics: DslDiagnostic[];\n} {\n\treturn {\n\t\tdiagnostics: [\n\t\t\t{\n\t\t\t\tseverity: \"error\",\n\t\t\t\tlayer: \"validate\",\n\t\t\t\tcode: \"validate.edge-shorthand.invalid\",\n\t\t\t\tmessage: \"Invalid edge shorthand.\",\n\t\t\t\tpath,\n\t\t\t\thint: 'Use \"source -> target\" or \"source -> target: label\".',\n\t\t\t},\n\t\t],\n\t};\n}\n\nfunction isValidEdgeId(value: string): boolean {\n\treturn value.length > 0 && EDGE_ID_PATTERN.test(value);\n}\n","import type { NodeShape } from \"../ir/elements.js\";\nimport type {\n\tAnchorName,\n\tAnchorPoint,\n\tBox,\n\tInsets,\n\tPoint,\n} from \"../ir/geometry.js\";\nimport { boxCenter, expandBox, validateBox } from \"./boxes.js\";\n\nconst SUPPORTED_SHAPES = new Set<NodeShape>([\n\t\"rectangle\",\n\t\"rounded-rectangle\",\n\t\"ellipse\",\n\t\"diamond\",\n\t\"parallelogram\",\n\t\"hexagon\",\n\t\"cylinder\",\n]);\n\nexport interface ShapeGeometryInput {\n\tshape: NodeShape;\n\tbox: Box;\n\tobstacleMargin?: number | Insets;\n}\n\nexport interface ShapeGeometry {\n\tshape: NodeShape;\n\tbox: Box;\n\tcenter: Point;\n\tanchors: AnchorPoint[];\n\tobstacleBox: Box;\n}\n\nexport function computeShapeGeometry(input: ShapeGeometryInput): ShapeGeometry {\n\tvalidateShape(input.shape);\n\tvalidateBox(input.box);\n\n\tconst box = { ...input.box };\n\n\treturn {\n\t\tshape: input.shape,\n\t\tbox,\n\t\tcenter: boxCenter(box),\n\t\tanchors: createAnchors(box),\n\t\tobstacleBox: expandBox(box, input.obstacleMargin ?? 0),\n\t};\n}\n\nexport function getEdgePort(\n\tgeometry: ShapeGeometry,\n\ttoward: Point,\n\tpreferredAnchor?: AnchorName,\n): Point {\n\tvalidateShape(geometry.shape);\n\tvalidateBox(geometry.box);\n\tvalidatePoint(toward, \"toward\");\n\n\tif (preferredAnchor !== undefined) {\n\t\tconst anchor = geometry.anchors.find((candidate) => {\n\t\t\treturn candidate.name === preferredAnchor;\n\t\t});\n\n\t\tif (anchor === undefined) {\n\t\t\tthrow new TypeError(`Unsupported anchor: ${preferredAnchor}`);\n\t\t}\n\n\t\treturn { ...anchor.point };\n\t}\n\n\tif (\n\t\tgeometry.shape === \"rectangle\" ||\n\t\tgeometry.shape === \"rounded-rectangle\"\n\t) {\n\t\treturn rayToBox(geometry.box, toward);\n\t}\n\n\t// Practical deterministic approximation: precise visual boundary intersections\n\t// are deferred; Phase 2 returns stable ports inside the outer shape box.\n\treturn snapToNearestAnchor(geometry, toward);\n}\n\nfunction createAnchors(box: Box): AnchorPoint[] {\n\tconst left = box.x;\n\tconst right = box.x + box.width;\n\tconst top = box.y;\n\tconst bottom = box.y + box.height;\n\tconst center = boxCenter(box);\n\n\treturn [\n\t\t{ name: \"center\", point: center },\n\t\t{ name: \"top\", point: { x: center.x, y: top } },\n\t\t{ name: \"right\", point: { x: right, y: center.y } },\n\t\t{ name: \"bottom\", point: { x: center.x, y: bottom } },\n\t\t{ name: \"left\", point: { x: left, y: center.y } },\n\t\t{ name: \"top-left\", point: { x: left, y: top } },\n\t\t{ name: \"top-right\", point: { x: right, y: top } },\n\t\t{ name: \"bottom-right\", point: { x: right, y: bottom } },\n\t\t{ name: \"bottom-left\", point: { x: left, y: bottom } },\n\t];\n}\n\nfunction rayToBox(box: Box, toward: Point): Point {\n\tconst center = boxCenter(box);\n\tconst dx = toward.x - center.x;\n\tconst dy = toward.y - center.y;\n\n\tif (dx === 0 && dy === 0) {\n\t\treturn center;\n\t}\n\n\tconst halfWidth = box.width / 2;\n\tconst halfHeight = box.height / 2;\n\tconst scaleX = dx === 0 ? Number.POSITIVE_INFINITY : halfWidth / Math.abs(dx);\n\tconst scaleY =\n\t\tdy === 0 ? Number.POSITIVE_INFINITY : halfHeight / Math.abs(dy);\n\tconst scale = Math.min(scaleX, scaleY);\n\n\treturn clampPointToBox(\n\t\t{\n\t\t\tx: center.x + dx * scale,\n\t\t\ty: center.y + dy * scale,\n\t\t},\n\t\tbox,\n\t);\n}\n\nfunction snapToNearestAnchor(geometry: ShapeGeometry, toward: Point): Point {\n\tlet best = geometry.anchors[0];\n\tlet bestDistance = Number.POSITIVE_INFINITY;\n\n\tfor (const anchor of geometry.anchors) {\n\t\tif (anchor.name === \"center\") {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst distance = squaredDistance(anchor.point, toward);\n\n\t\tif (distance < bestDistance) {\n\t\t\tbest = anchor;\n\t\t\tbestDistance = distance;\n\t\t}\n\t}\n\n\tif (best === undefined) {\n\t\treturn { ...geometry.center };\n\t}\n\n\treturn clampPointToBox(best.point, geometry.box);\n}\n\nfunction clampPointToBox(point: Point, box: Box): Point {\n\treturn {\n\t\tx: Math.min(Math.max(point.x, box.x), box.x + box.width),\n\t\ty: Math.min(Math.max(point.y, box.y), box.y + box.height),\n\t};\n}\n\nfunction squaredDistance(a: Point, b: Point): number {\n\tconst dx = a.x - b.x;\n\tconst dy = a.y - b.y;\n\n\treturn dx * dx + dy * dy;\n}\n\nfunction validateShape(shape: NodeShape): void {\n\tif (!SUPPORTED_SHAPES.has(shape)) {\n\t\tthrow new TypeError(`Unsupported shape: ${shape}`);\n\t}\n}\n\nfunction validatePoint(point: Point, label: string): void {\n\tif (!Number.isFinite(point.x) || !Number.isFinite(point.y)) {\n\t\tthrow new TypeError(`${label} point must be finite`);\n\t}\n}\n","import type { Diagnostic } from \"../ir/diagnostics.js\";\nimport type { AnchorPoint, Box, Insets, Size } from \"../ir/geometry.js\";\nimport type { LabelLayout } from \"../labels/index.js\";\nimport { expandBox, normalizeInsets, unionBoxes } from \"./boxes.js\";\nimport { computeShapeGeometry } from \"./shapes.js\";\n\nexport interface ContainerGeometryInput {\n\tid: string;\n\tchildBoxes: readonly Box[];\n\tpadding: Insets | number;\n\tlabelLayout?: LabelLayout;\n\tminSize?: Partial<Size>;\n\tobstacleMargin?: number | Insets;\n}\n\nexport interface ContainerGeometry {\n\tid: string;\n\tbox: Box;\n\tcontentBox: Box;\n\tchildBounds: Box;\n\tlabelLayout?: LabelLayout;\n\tanchors: AnchorPoint[];\n\tobstacleBox: Box;\n\tdiagnostics: Diagnostic[];\n}\n\nexport function computeContainerGeometry(\n\tinput: ContainerGeometryInput,\n): ContainerGeometry {\n\tconst childBounds = unionBoxes(input.childBoxes);\n\tconst padding = normalizeInsets(input.padding);\n\tconst minSize = normalizeMinSize(input.minSize);\n\tconst headerHeight =\n\t\tinput.labelLayout?.fittedSize.height ?? input.labelLayout?.box.height ?? 0;\n\tconst intrinsicBox = {\n\t\tx: childBounds.x - padding.left,\n\t\ty: childBounds.y - padding.top - headerHeight,\n\t\twidth: childBounds.width + padding.left + padding.right,\n\t\theight: childBounds.height + padding.top + padding.bottom + headerHeight,\n\t};\n\tconst box = {\n\t\t...intrinsicBox,\n\t\twidth: Math.max(intrinsicBox.width, minSize.width ?? 0),\n\t\theight: Math.max(intrinsicBox.height, minSize.height ?? 0),\n\t};\n\tconst contentBox = {\n\t\tx: childBounds.x,\n\t\ty: childBounds.y,\n\t\twidth: childBounds.width,\n\t\theight: childBounds.height,\n\t};\n\tconst shape = computeShapeGeometry({\n\t\tshape: \"rectangle\",\n\t\tbox,\n\t});\n\tconst obstacleBox = expandBox(box, input.obstacleMargin ?? 0);\n\n\treturn {\n\t\tid: input.id,\n\t\tbox,\n\t\tcontentBox,\n\t\tchildBounds,\n\t\t...(input.labelLayout === undefined\n\t\t\t? {}\n\t\t\t: { labelLayout: input.labelLayout }),\n\t\tanchors: shape.anchors,\n\t\tobstacleBox,\n\t\tdiagnostics: [],\n\t};\n}\n\nfunction normalizeMinSize(minSize: Partial<Size> = {}): Partial<Size> {\n\tif (minSize.width !== undefined) {\n\t\tvalidateSize(minSize.width, \"minSize.width\");\n\t}\n\n\tif (minSize.height !== undefined) {\n\t\tvalidateSize(minSize.height, \"minSize.height\");\n\t}\n\n\treturn { ...minSize };\n}\n\nfunction validateSize(value: number, label: string): void {\n\tif (!Number.isFinite(value) || value < 0) {\n\t\tthrow new TypeError(`${label} must be finite and non-negative`);\n\t}\n}\n","import type { Diagnostic } from \"../ir/diagnostics.js\";\n\nexport interface TextStyleOptions {\n\tfontFamily: string;\n\tfontSize: number;\n\tfontWeight?: number | string;\n\tfontStyle?: \"normal\" | \"italic\";\n\tlineHeight?: number;\n\tletterSpacing?: number;\n\twhiteSpace?: \"normal\" | \"pre-wrap\";\n\twordBreak?: \"normal\" | \"keep-all\";\n}\n\nexport type TextMeasurementBackend = \"deterministic\" | \"pretext\";\n\nexport interface PreparedText {\n\ttext: string;\n\tfont: string;\n\tstyle: TextStyleOptions;\n\tbackend: TextMeasurementBackend;\n}\n\nexport interface TextCursor {\n\tsegmentIndex: number;\n\tgraphemeIndex: number;\n}\n\nexport interface TextLayoutLine {\n\ttext: string;\n\twidth: number;\n\tstart: TextCursor;\n\tend: TextCursor;\n}\n\nexport interface TextLayout {\n\twidth: number;\n\theight: number;\n\tlineHeight: number;\n\tlineCount: number;\n\tlines: TextLayoutLine[];\n\tdiagnostics: Diagnostic[];\n}\n\nexport interface TextMeasurer {\n\tprepare(text: string, style: TextStyleOptions): PreparedText;\n\tlayout(\n\t\tprepared: PreparedText,\n\t\tmaxWidth: number,\n\t\tlineHeight?: number,\n\t): TextLayout;\n\tnaturalWidth(prepared: PreparedText): number;\n}\n\nexport function assertFinitePositive(value: number, label: string): void {\n\tif (!Number.isFinite(value) || value <= 0) {\n\t\tthrow new TypeError(`${label} must be finite and positive`);\n\t}\n}\n\nexport function assertFiniteNonNegative(value: number, label: string): void {\n\tif (!Number.isFinite(value) || value < 0) {\n\t\tthrow new TypeError(`${label} must be a finite non-negative width`);\n\t}\n}\n\nexport function validateTextStyle(style: TextStyleOptions): void {\n\tassertFinitePositive(style.fontSize, \"fontSize\");\n\n\tif (style.lineHeight !== undefined) {\n\t\tassertFinitePositive(style.lineHeight, \"lineHeight\");\n\t}\n\n\tif (\n\t\tstyle.letterSpacing !== undefined &&\n\t\t!Number.isFinite(style.letterSpacing)\n\t) {\n\t\tthrow new TypeError(\"letterSpacing must be finite\");\n\t}\n}\n\nexport function resolveLineHeight(style: TextStyleOptions): number {\n\tvalidateTextStyle(style);\n\treturn style.lineHeight ?? style.fontSize * 1.2;\n}\n\nexport function toCanvasFont(style: TextStyleOptions): string {\n\tvalidateTextStyle(style);\n\n\tconst fontStyle = style.fontStyle === \"italic\" ? \"italic \" : \"\";\n\tconst fontWeight = style.fontWeight ?? 400;\n\n\treturn `${fontStyle}${fontWeight} ${style.fontSize}px ${style.fontFamily}`;\n}\n","import type {\n\tPreparedText,\n\tTextLayout,\n\tTextLayoutLine,\n\tTextMeasurer,\n\tTextStyleOptions,\n} from \"./types.js\";\nimport {\n\tassertFiniteNonNegative,\n\tresolveLineHeight,\n\ttoCanvasFont,\n\tvalidateTextStyle,\n} from \"./types.js\";\n\nexport class DeterministicTextMeasurer implements TextMeasurer {\n\tprepare(text: string, style: TextStyleOptions): PreparedText {\n\t\tvalidateTextStyle(style);\n\n\t\treturn {\n\t\t\ttext,\n\t\t\tfont: toCanvasFont(style),\n\t\t\tstyle: { ...style },\n\t\t\tbackend: \"deterministic\",\n\t\t};\n\t}\n\n\tlayout(\n\t\tprepared: PreparedText,\n\t\tmaxWidth: number,\n\t\tlineHeight = resolveLineHeight(prepared.style),\n\t): TextLayout {\n\t\tassertFiniteNonNegative(maxWidth, \"maxWidth\");\n\t\tassertFinitePositiveLineHeight(lineHeight);\n\n\t\tconst lines = this.wrap(prepared, maxWidth);\n\t\tconst width = lines.reduce(\n\t\t\t(current, line) => Math.max(current, line.width),\n\t\t\t0,\n\t\t);\n\n\t\treturn {\n\t\t\twidth,\n\t\t\theight: lines.length * lineHeight,\n\t\t\tlineHeight,\n\t\t\tlineCount: lines.length,\n\t\t\tlines,\n\t\t\tdiagnostics: [],\n\t\t};\n\t}\n\n\tnaturalWidth(prepared: PreparedText): number {\n\t\tconst charWidth = getCharacterWidth(prepared.style);\n\n\t\treturn prepared.text.split(\"\\n\").reduce((width, line) => {\n\t\t\treturn Math.max(width, line.length * charWidth);\n\t\t}, 0);\n\t}\n\n\tprivate wrap(prepared: PreparedText, maxWidth: number): TextLayoutLine[] {\n\t\tconst charWidth = getCharacterWidth(prepared.style);\n\t\tconst sourceLines = prepared.text.split(\"\\n\");\n\t\tconst output: TextLayoutLine[] = [];\n\t\tlet segmentIndex = 0;\n\n\t\tfor (const sourceLine of sourceLines) {\n\t\t\tif (sourceLine.length === 0) {\n\t\t\t\toutput.push(createLine(\"\", 0, segmentIndex, 0, 0));\n\t\t\t\tsegmentIndex += 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst maxChars =\n\t\t\t\tmaxWidth <= 0 ? 1 : Math.max(1, Math.floor(maxWidth / charWidth));\n\n\t\t\tfor (let start = 0; start < sourceLine.length; start += maxChars) {\n\t\t\t\tconst text = sourceLine.slice(start, start + maxChars);\n\t\t\t\toutput.push(\n\t\t\t\t\tcreateLine(\n\t\t\t\t\t\ttext,\n\t\t\t\t\t\ttext.length * charWidth,\n\t\t\t\t\t\tsegmentIndex,\n\t\t\t\t\t\tstart,\n\t\t\t\t\t\tstart + text.length,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tsegmentIndex += 1;\n\t\t}\n\n\t\tif (output.length === 0) {\n\t\t\toutput.push(createLine(\"\", 0, 0, 0, 0));\n\t\t}\n\n\t\treturn output;\n\t}\n}\n\nfunction getCharacterWidth(style: TextStyleOptions): number {\n\tconst letterSpacing = style.letterSpacing ?? 0;\n\treturn Math.max(0, style.fontSize * 0.6 + letterSpacing);\n}\n\nfunction createLine(\n\ttext: string,\n\twidth: number,\n\tsegmentIndex: number,\n\tstart: number,\n\tend: number,\n): TextLayoutLine {\n\treturn {\n\t\ttext,\n\t\twidth,\n\t\tstart: {\n\t\t\tsegmentIndex,\n\t\t\tgraphemeIndex: start,\n\t\t},\n\t\tend: {\n\t\t\tsegmentIndex,\n\t\t\tgraphemeIndex: end,\n\t\t},\n\t};\n}\n\nfunction assertFinitePositiveLineHeight(lineHeight: number): void {\n\tif (!Number.isFinite(lineHeight) || lineHeight <= 0) {\n\t\tthrow new TypeError(\"lineHeight must be finite and positive\");\n\t}\n}\n","import { createRequire } from \"node:module\";\n\ntype OffscreenCanvasConstructor = typeof globalThis.OffscreenCanvas;\ntype NodeCanvas = import(\"@napi-rs/canvas\").Canvas;\ntype NodeCanvasModule = {\n\tcreateCanvas(width: number, height: number): NodeCanvas;\n};\ntype LoadNodeCanvasModule = () => NodeCanvasModule;\n\nconst require = createRequire(import.meta.url);\n\nexport function installNodeCanvasRuntime(\n\tloadNodeCanvasModule: LoadNodeCanvasModule = loadDefaultNodeCanvasModule,\n): boolean {\n\tif (typeof globalThis.OffscreenCanvas === \"function\") {\n\t\treturn true;\n\t}\n\n\ttry {\n\t\tconst canvasModule = loadNodeCanvasModule();\n\t\tconst { createCanvas } = canvasModule;\n\t\tconst NodeOffscreenCanvas = class {\n\t\t\tprivate readonly canvas: NodeCanvas;\n\n\t\t\tconstructor(width: number, height: number) {\n\t\t\t\tthis.canvas = createCanvas(width, height);\n\t\t\t}\n\n\t\t\tgetContext(contextId: \"2d\") {\n\t\t\t\treturn contextId === \"2d\" ? this.canvas.getContext(\"2d\") : null;\n\t\t\t}\n\t\t};\n\n\t\tglobalThis.OffscreenCanvas =\n\t\t\tNodeOffscreenCanvas as unknown as OffscreenCanvasConstructor;\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction loadDefaultNodeCanvasModule(): NodeCanvasModule {\n\treturn require(\"@napi-rs/canvas\") as NodeCanvasModule;\n}\n","import type { PreparedTextWithSegments } from \"@chenglou/pretext\";\nimport {\n\tlayoutWithLines,\n\tmeasureNaturalWidth,\n\tprepareWithSegments,\n} from \"@chenglou/pretext\";\nimport type {\n\tPreparedText,\n\tTextLayout,\n\tTextMeasurer,\n\tTextStyleOptions,\n} from \"./types.js\";\nimport {\n\tassertFiniteNonNegative,\n\tresolveLineHeight,\n\ttoCanvasFont,\n\tvalidateTextStyle,\n} from \"./types.js\";\n\ntype InternalPretextPrepared = PreparedText & {\n\treadonly pretextPrepared: PreparedTextWithSegments;\n};\n\nconst RUNTIME_UNAVAILABLE = \"text.pretext.runtime-unavailable\";\n\nexport function isPretextRuntimeAvailable(): boolean {\n\treturn (\n\t\ttypeof Intl.Segmenter === \"function\" &&\n\t\ttypeof globalThis.OffscreenCanvas === \"function\"\n\t);\n}\n\nexport class PretextTextMeasurer implements TextMeasurer {\n\tprepare(text: string, style: TextStyleOptions): PreparedText {\n\t\tif (!isPretextRuntimeAvailable()) {\n\t\t\tthrow new TypeError(RUNTIME_UNAVAILABLE);\n\t\t}\n\n\t\tvalidateTextStyle(style);\n\n\t\tconst font = toCanvasFont(style);\n\t\tconst options = {\n\t\t\t...(style.whiteSpace === undefined\n\t\t\t\t? {}\n\t\t\t\t: { whiteSpace: style.whiteSpace }),\n\t\t\t...(style.wordBreak === undefined ? {} : { wordBreak: style.wordBreak }),\n\t\t\t...(style.letterSpacing === undefined\n\t\t\t\t? {}\n\t\t\t\t: { letterSpacing: style.letterSpacing }),\n\t\t};\n\t\tconst prepared = prepareWithSegments(text, font, options);\n\n\t\treturn {\n\t\t\ttext,\n\t\t\tfont,\n\t\t\tstyle: { ...style },\n\t\t\tbackend: \"pretext\",\n\t\t\tpretextPrepared: prepared,\n\t\t} as InternalPretextPrepared;\n\t}\n\n\tlayout(\n\t\tprepared: PreparedText,\n\t\tmaxWidth: number,\n\t\tlineHeight = resolveLineHeight(prepared.style),\n\t): TextLayout {\n\t\tassertFiniteNonNegative(maxWidth, \"maxWidth\");\n\t\tif (!Number.isFinite(lineHeight) || lineHeight <= 0) {\n\t\t\tthrow new TypeError(\"lineHeight must be finite and positive\");\n\t\t}\n\n\t\tconst result = layoutWithLines(\n\t\t\ttoInternalPrepared(prepared),\n\t\t\tmaxWidth,\n\t\t\tlineHeight,\n\t\t);\n\t\tconst width = result.lines.reduce(\n\t\t\t(current, line) => Math.max(current, line.width),\n\t\t\t0,\n\t\t);\n\n\t\treturn {\n\t\t\twidth,\n\t\t\theight: result.height,\n\t\t\tlineHeight,\n\t\t\tlineCount: result.lineCount,\n\t\t\tlines: result.lines.map((line) => ({\n\t\t\t\ttext: line.text,\n\t\t\t\twidth: line.width,\n\t\t\t\tstart: {\n\t\t\t\t\tsegmentIndex: line.start.segmentIndex,\n\t\t\t\t\tgraphemeIndex: line.start.graphemeIndex,\n\t\t\t\t},\n\t\t\t\tend: {\n\t\t\t\t\tsegmentIndex: line.end.segmentIndex,\n\t\t\t\t\tgraphemeIndex: line.end.graphemeIndex,\n\t\t\t\t},\n\t\t\t})),\n\t\t\tdiagnostics: [],\n\t\t};\n\t}\n\n\tnaturalWidth(prepared: PreparedText): number {\n\t\treturn measureNaturalWidth(toInternalPrepared(prepared));\n\t}\n}\n\nfunction toInternalPrepared(prepared: PreparedText): PreparedTextWithSegments {\n\tif (prepared.backend !== \"pretext\" || !(\"pretextPrepared\" in prepared)) {\n\t\tthrow new TypeError(\"prepared text was not created by PretextTextMeasurer\");\n\t}\n\n\treturn prepared.pretextPrepared as PreparedTextWithSegments;\n}\n","import { DeterministicTextMeasurer } from \"./fallback.js\";\nimport { installNodeCanvasRuntime } from \"./node-canvas.js\";\nimport { isPretextRuntimeAvailable, PretextTextMeasurer } from \"./pretext.js\";\nimport type { TextMeasurer } from \"./types.js\";\n\nexport interface DefaultTextMeasurerOptions {\n\tinstallNodeCanvasRuntime?: () => boolean;\n}\n\nexport function createDefaultTextMeasurer(\n\toptions: DefaultTextMeasurerOptions = {},\n): TextMeasurer {\n\tconst installRuntime =\n\t\toptions.installNodeCanvasRuntime ?? installNodeCanvasRuntime;\n\tinstallRuntime();\n\n\treturn isPretextRuntimeAvailable()\n\t\t? new PretextTextMeasurer()\n\t\t: new DeterministicTextMeasurer();\n}\n","import { normalizeInsets } from \"../geometry/index.js\";\nimport type { Diagnostic } from \"../ir/diagnostics.js\";\nimport type { Box, Insets, Size } from \"../ir/geometry.js\";\nimport type { TextLayout, TextMeasurer } from \"../text/index.js\";\nimport { assertFiniteNonNegative, resolveLineHeight } from \"../text/index.js\";\nimport type { LabelFitOptions, LabelLayout, LabelLineLayout } from \"./types.js\";\n\nexport function fitLabel(\n\ttext: string,\n\toptions: LabelFitOptions,\n\tmeasurer: TextMeasurer,\n): LabelLayout {\n\treturn computeLabelLayout(text, options, measurer);\n}\n\nexport class LabelFitter {\n\tconstructor(private readonly measurer: TextMeasurer) {}\n\n\tfit(text: string, options: LabelFitOptions): LabelLayout {\n\t\treturn computeLabelLayout(text, options, this.measurer);\n\t}\n}\n\nfunction computeLabelLayout(\n\ttext: string,\n\toptions: LabelFitOptions,\n\tmeasurer: TextMeasurer,\n): LabelLayout {\n\tconst padding = normalizeInsets(options.padding);\n\tconst minSize = normalizeMinSize(options.minSize);\n\tconst lineHeight = resolveLineHeight(options.font);\n\tconst maxWidth = normalizeMaxWidth(options.maxWidth);\n\tconst prepared = measurer.prepare(text, options.font);\n\tconst naturalTextWidth = measurer.naturalWidth(prepared);\n\tconst contentMaxWidth =\n\t\tmaxWidth === undefined\n\t\t\t? naturalTextWidth\n\t\t\t: Math.max(0, maxWidth - padding.left - padding.right);\n\tconst textLayout = measurer.layout(prepared, contentMaxWidth, lineHeight);\n\tconst naturalSize = {\n\t\twidth: naturalTextWidth,\n\t\theight: textLayout.height,\n\t};\n\tconst contentWidth = Math.max(\n\t\ttextLayout.width,\n\t\tminContentWidth(minSize, padding),\n\t);\n\tconst contentHeight = Math.max(\n\t\ttextLayout.height,\n\t\tminContentHeight(minSize, padding),\n\t);\n\tconst idealWidth = contentWidth + padding.left + padding.right;\n\tconst idealHeight = contentHeight + padding.top + padding.bottom;\n\tconst fittedSize = {\n\t\twidth: maxWidth === undefined ? idealWidth : Math.min(maxWidth, idealWidth),\n\t\theight: idealHeight,\n\t};\n\tconst box: Box = {\n\t\tx: 0,\n\t\ty: 0,\n\t\twidth: fittedSize.width,\n\t\theight: fittedSize.height,\n\t};\n\tconst contentBox: Box = {\n\t\tx: padding.left,\n\t\ty: padding.top,\n\t\twidth: Math.max(0, box.width - padding.left - padding.right),\n\t\theight: Math.max(0, box.height - padding.top - padding.bottom),\n\t};\n\tconst overflow = {\n\t\thorizontal: textLayout.width > contentBox.width,\n\t\tvertical:\n\t\t\ttextLayout.height > contentBox.height ||\n\t\t\tdiagnosedHeightConstraintOverflow(textLayout.height, padding, minSize),\n\t\ttruncated:\n\t\t\toptions.overflow === \"truncate\" && textLayout.width > contentBox.width,\n\t};\n\tconst diagnostics = buildDiagnostics(overflow, options.overflow);\n\n\treturn {\n\t\ttext,\n\t\tbox,\n\t\tcontentBox,\n\t\tnaturalSize,\n\t\tfittedSize,\n\t\tpadding,\n\t\tfont: { ...options.font },\n\t\ttextBackend: prepared.backend,\n\t\tlineHeight,\n\t\tlines: buildLines(textLayout, contentBox, lineHeight),\n\t\toverflow,\n\t\tdiagnostics,\n\t};\n}\n\nfunction buildLines(\n\ttextLayout: TextLayout,\n\tcontentBox: Box,\n\tlineHeight: number,\n): LabelLineLayout[] {\n\treturn textLayout.lines.map((line, lineIndex) => ({\n\t\ttext: line.text,\n\t\tbox: {\n\t\t\tx: contentBox.x,\n\t\t\ty: contentBox.y + lineIndex * lineHeight,\n\t\t\twidth: line.width,\n\t\t\theight: lineHeight,\n\t\t},\n\t\tbaselineY: contentBox.y + lineIndex * lineHeight + lineHeight * 0.8,\n\t\twidth: line.width,\n\t\tlineIndex,\n\t\tsourceStart: { ...line.start },\n\t\tsourceEnd: { ...line.end },\n\t}));\n}\n\nfunction normalizeMinSize(minSize: Partial<Size> = {}): Partial<Size> {\n\tif (minSize.width !== undefined) {\n\t\tassertFiniteNonNegative(minSize.width, \"minSize.width\");\n\t}\n\n\tif (minSize.height !== undefined) {\n\t\tassertFiniteNonNegative(minSize.height, \"minSize.height\");\n\t}\n\n\treturn { ...minSize };\n}\n\nfunction normalizeMaxWidth(maxWidth: number | undefined): number | undefined {\n\tif (maxWidth === undefined) {\n\t\treturn undefined;\n\t}\n\n\tassertFiniteNonNegative(maxWidth, \"maxWidth\");\n\n\treturn maxWidth;\n}\n\nfunction minContentWidth(minSize: Partial<Size>, padding: Insets): number {\n\treturn Math.max(0, (minSize.width ?? 0) - padding.left - padding.right);\n}\n\nfunction minContentHeight(minSize: Partial<Size>, padding: Insets): number {\n\treturn Math.max(0, (minSize.height ?? 0) - padding.top - padding.bottom);\n}\n\nfunction diagnosedHeightConstraintOverflow(\n\ttextHeight: number,\n\tpadding: Insets,\n\tminSize: Partial<Size>,\n): boolean {\n\treturn (\n\t\tminSize.height !== undefined &&\n\t\ttextHeight + padding.top + padding.bottom > minSize.height\n\t);\n}\n\nfunction buildDiagnostics(\n\toverflow: LabelLayout[\"overflow\"],\n\tmode: LabelFitOptions[\"overflow\"] = \"allow\",\n): Diagnostic[] {\n\tif (mode !== \"diagnose\") {\n\t\treturn [];\n\t}\n\n\tconst diagnostics: Diagnostic[] = [];\n\n\tif (overflow.horizontal) {\n\t\tdiagnostics.push({\n\t\t\tseverity: \"warning\",\n\t\t\tcode: \"label.overflow.horizontal\",\n\t\t\tmessage: \"Label text exceeds the fitted content width.\",\n\t\t});\n\t}\n\n\tif (overflow.vertical) {\n\t\tdiagnostics.push({\n\t\t\tseverity: \"warning\",\n\t\t\tcode: \"label.overflow.vertical\",\n\t\t\tmessage: \"Label text exceeds the fitted content height.\",\n\t\t});\n\t}\n\n\treturn diagnostics;\n}\n","import type { Constraint } from \"../ir/constraints.js\";\nimport type { NormalizedDiagram } from \"../ir/diagram.js\";\nimport type {\n\tLabel,\n\tNodeCompartments,\n\tNodePort,\n\tNormalizedEdge,\n\tNormalizedGroup,\n\tNormalizedNode,\n\tSwimlane,\n\tVisualStyle,\n} from \"../ir/elements.js\";\nimport type { Insets, Point, Size } from \"../ir/geometry.js\";\nimport { fitLabel } from \"../labels/index.js\";\nimport { createDefaultTextMeasurer, type TextMeasurer } from \"../text/index.js\";\nimport { sortDslDiagnostics } from \"./diagnostics.js\";\nimport type { DiagramDsl } from \"./schema.js\";\nimport type { DslDiagnostic, NormalizeDiagramDslResult } from \"./types.js\";\n\nconst DEFAULT_NODE_PADDING: Insets = {\n\ttop: 12,\n\tright: 16,\n\tbottom: 12,\n\tleft: 16,\n};\nconst DEFAULT_NODE_MIN_SIZE: Size = { width: 80, height: 40 };\nconst DEFAULT_GROUP_PADDING: Insets = {\n\ttop: 16,\n\tright: 16,\n\tbottom: 16,\n\tleft: 16,\n};\nconst DEFAULT_LABEL_MAX_WIDTH = 160;\nconst DEFAULT_FONT = { fontFamily: \"Arial\", fontSize: 14, lineHeight: 18 };\n\nexport interface NormalizeDiagramDslOptions {\n\tid?: string;\n\ttextMeasurer?: TextMeasurer;\n}\n\nexport function normalizeDiagramDsl(\n\tdslValue: unknown,\n\toptions: NormalizeDiagramDslOptions = {},\n): NormalizeDiagramDslResult {\n\tconst dsl = dslValue as DiagramDsl;\n\tconst diagnostics = validateReferences(dsl);\n\tif (diagnostics.some((diagnostic) => diagnostic.severity === \"error\")) {\n\t\treturn {\n\t\t\tdiagnostics: sortDslDiagnostics(diagnostics),\n\t\t\t...outputResult(dsl),\n\t\t};\n\t}\n\n\tconst measurer = options.textMeasurer ?? createDefaultTextMeasurer();\n\tconst routeKind = dsl.routing?.kind ?? \"orthogonal\";\n\tconst portShifting = normalizePortShifting(dsl.routing?.portShifting);\n\tconst primaryReadingDirection = dsl.layout?.primaryReadingDirection;\n\tconst diagram: NormalizedDiagram = {\n\t\tid: options.id ?? dsl.id ?? \"diagram\",\n\t\t...(dsl.title === undefined ? {} : { title: dsl.title }),\n\t\tdirection: dsl.layout?.direction ?? dsl.direction ?? \"TB\",\n\t\tnodes: normalizeNodes(dsl, measurer),\n\t\tedges: normalizeEdges(dsl),\n\t\tgroups: normalizeGroups(dsl, measurer),\n\t\tswimlanes: normalizeSwimlanes(dsl),\n\t\tconstraints: normalizeConstraints(dsl),\n\t\tdiagnostics: [],\n\t\t...(dsl.frame === undefined ? {} : { frame: normalizeFrame(dsl.frame) }),\n\t\tmetadata: {\n\t\t\trouteKind,\n\t\t\t...(primaryReadingDirection === undefined\n\t\t\t\t? {}\n\t\t\t\t: { primaryReadingDirection }),\n\t\t\t...(portShifting === undefined ? {} : { portShifting }),\n\t\t},\n\t};\n\n\treturn {\n\t\tdiagram,\n\t\tdiagnostics: [],\n\t\t...outputResult(dsl),\n\t};\n}\n\nfunction normalizePortShifting(\n\tportShifting: NonNullable<DiagramDsl[\"routing\"]>[\"portShifting\"] | undefined,\n):\n\t| {\n\t\t\tenabled?: boolean;\n\t\t\tspacing?: number;\n\t }\n\t| undefined {\n\tif (portShifting === undefined) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\t...(portShifting.enabled === undefined\n\t\t\t? {}\n\t\t\t: { enabled: portShifting.enabled }),\n\t\t...(portShifting.spacing === undefined\n\t\t\t? {}\n\t\t\t: { spacing: portShifting.spacing }),\n\t};\n}\n\nfunction outputResult(\n\tdsl: DiagramDsl,\n): Pick<NormalizeDiagramDslResult, \"output\"> {\n\treturn dsl.output?.format === undefined\n\t\t? {}\n\t\t: { output: { format: dsl.output.format } };\n}\n\nfunction normalizeNodes(\n\tdsl: DiagramDsl,\n\tmeasurer: TextMeasurer,\n): NormalizedNode[] {\n\treturn Object.keys(dsl.nodes)\n\t\t.sort()\n\t\t.map((id) => {\n\t\t\tconst node = dsl.nodes[id];\n\t\t\tconst label = toLabel(node?.label);\n\t\t\tconst labelLayout =\n\t\t\t\tlabel === undefined ? undefined : fitDslLabel(label, measurer);\n\t\t\tconst fittedSize = labelLayout?.fittedSize;\n\t\t\tconst nodeCompartments =\n\t\t\t\tnode?.compartments === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: compartments(node.compartments);\n\t\t\tconst compartmentWidth =\n\t\t\t\tnodeCompartments === undefined\n\t\t\t\t\t? 0\n\t\t\t\t\t: compartmentNaturalWidth(id, label, nodeCompartments, measurer);\n\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\t...(label === undefined ? {} : { label }),\n\t\t\t\tshape: node?.shape ?? \"rectangle\",\n\t\t\t\t...(node?.position === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { position: point(node.position) }),\n\t\t\t\t...(node?.style === undefined ? {} : { style: style(node.style) }),\n\t\t\t\t...(node?.ports === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { ports: normalizePorts(node.ports) }),\n\t\t\t\t...(nodeCompartments === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: { compartments: nodeCompartments }),\n\t\t\t\tsize: {\n\t\t\t\t\twidth: Math.max(\n\t\t\t\t\t\tDEFAULT_NODE_MIN_SIZE.width,\n\t\t\t\t\t\tfittedSize?.width ?? 0,\n\t\t\t\t\t\tcompartmentWidth,\n\t\t\t\t\t),\n\t\t\t\t\theight: Math.max(\n\t\t\t\t\t\tnodeCompartments === undefined\n\t\t\t\t\t\t\t? DEFAULT_NODE_MIN_SIZE.height\n\t\t\t\t\t\t\t: compartmentHeight(nodeCompartments),\n\t\t\t\t\t\tfittedSize?.height ?? 0,\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t\tpadding: { ...DEFAULT_NODE_PADDING },\n\t\t\t\t...(labelLayout === undefined ? {} : { labelLayout }),\n\t\t\t};\n\t\t});\n}\n\nfunction compartmentHeight(value: NodeCompartments): number {\n\tconst rowCount =\n\t\t(value.stereotype === undefined ? 0 : 1) +\n\t\t1 +\n\t\t(value.properties?.length ?? 0) +\n\t\t(value.constraints?.length ?? 0);\n\tconst rowHeight = 16;\n\tconst verticalPadding = 20;\n\treturn Math.max(\n\t\tDEFAULT_NODE_MIN_SIZE.height,\n\t\trowCount * rowHeight + verticalPadding,\n\t);\n}\n\nfunction compartmentNaturalWidth(\n\tid: string,\n\tlabel: Label | undefined,\n\tvalue: NodeCompartments,\n\tmeasurer: TextMeasurer,\n): number {\n\tconst rows = compartmentRows(id, label, value);\n\tconst maxRowWidth = rows.reduce((width, row) => {\n\t\tconst prepared = measurer.prepare(row, DEFAULT_FONT);\n\t\treturn Math.max(width, measurer.naturalWidth(prepared));\n\t}, 0);\n\treturn Math.ceil(\n\t\tmaxRowWidth + DEFAULT_NODE_PADDING.left + DEFAULT_NODE_PADDING.right,\n\t);\n}\n\nfunction compartmentRows(\n\tid: string,\n\tlabel: Label | undefined,\n\tvalue: NodeCompartments,\n): string[] {\n\treturn [\n\t\t...(value.stereotype === undefined ? [] : [value.stereotype]),\n\t\tvalue.name ?? label?.text ?? id,\n\t\t...(value.properties ?? []),\n\t\t...(value.constraints ?? []),\n\t];\n}\n\nfunction normalizeEdges(dsl: DiagramDsl): NormalizedEdge[] {\n\tconst counts = new Map<string, number>();\n\n\treturn (dsl.edges ?? []).map((edge) => {\n\t\tconst source = typeof edge === \"string\" ? undefined : edge.source;\n\t\tconst target = typeof edge === \"string\" ? undefined : edge.target;\n\t\tconst sourceId =\n\t\t\ttypeof edge === \"string\"\n\t\t\t\t? \"\"\n\t\t\t\t: (edge.sourceId ?? endpointNodeId(source) ?? \"\");\n\t\tconst targetId =\n\t\t\ttypeof edge === \"string\"\n\t\t\t\t? \"\"\n\t\t\t\t: (edge.targetId ?? endpointNodeId(target) ?? \"\");\n\t\tconst sourceEndpoint =\n\t\t\ttypeof edge === \"string\"\n\t\t\t\t? { nodeId: sourceId }\n\t\t\t\t: endpoint(source, edge.sourceId);\n\t\tconst targetEndpoint =\n\t\t\ttypeof edge === \"string\"\n\t\t\t\t? { nodeId: targetId }\n\t\t\t\t: endpoint(target, edge.targetId);\n\t\tconst baseId = `${sourceId}-${targetId}`;\n\t\tconst count = counts.get(baseId) ?? 0;\n\t\tcounts.set(baseId, count + 1);\n\t\tconst id =\n\t\t\ttypeof edge === \"string\"\n\t\t\t\t? baseId\n\t\t\t\t: (edge.id ?? (count === 0 ? baseId : `${baseId}-${count + 1}`));\n\t\tconst label = typeof edge === \"string\" ? undefined : toLabel(edge.label);\n\n\t\treturn {\n\t\t\tid,\n\t\t\tsource: sourceEndpoint,\n\t\t\ttarget: targetEndpoint,\n\t\t\t...(label === undefined ? {} : { label }),\n\t\t\t...(typeof edge === \"string\" || edge.style === undefined\n\t\t\t\t? {}\n\t\t\t\t: { style: edge.style }),\n\t\t\t...(typeof edge === \"string\" || edge.arrowhead === undefined\n\t\t\t\t? {}\n\t\t\t\t: { arrowhead: edge.arrowhead }),\n\t\t};\n\t});\n}\n\nfunction normalizePorts(\n\tports: NonNullable<DiagramDsl[\"nodes\"][string]>[\"ports\"],\n): NodePort[] {\n\treturn Object.keys(ports ?? {})\n\t\t.sort()\n\t\t.map((id) => {\n\t\t\tconst port = ports?.[id];\n\t\t\tconst label = toLabel(port?.label);\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\t...(label === undefined ? {} : { label }),\n\t\t\t\tside: port?.side ?? \"right\",\n\t\t\t\tkind: port?.kind ?? \"proxy\",\n\t\t\t\t...(port?.order === undefined ? {} : { order: port.order }),\n\t\t\t\t...(port?.style === undefined ? {} : { style: style(port.style) }),\n\t\t\t};\n\t\t});\n}\n\nfunction endpoint(\n\tvalue: string | { node: string; port?: string | undefined } | undefined,\n\tnodeIdOverride?: string | undefined,\n): NormalizedEdge[\"source\"] {\n\tif (nodeIdOverride !== undefined) {\n\t\treturn {\n\t\t\tnodeId: nodeIdOverride,\n\t\t\t...(typeof value === \"object\" &&\n\t\t\tvalue.node === nodeIdOverride &&\n\t\t\tvalue.port !== undefined\n\t\t\t\t? { portId: value.port }\n\t\t\t\t: {}),\n\t\t};\n\t}\n\tif (value === undefined) {\n\t\treturn { nodeId: \"\" };\n\t}\n\tif (typeof value === \"string\") {\n\t\treturn { nodeId: value };\n\t}\n\treturn {\n\t\tnodeId: value.node,\n\t\t...(value.port === undefined ? {} : { portId: value.port }),\n\t};\n}\n\nfunction style(value: {\n\tfill?: string | undefined;\n\tstroke?: string | undefined;\n}): VisualStyle {\n\treturn {\n\t\t...(value.fill === undefined ? {} : { fill: value.fill }),\n\t\t...(value.stroke === undefined ? {} : { stroke: value.stroke }),\n\t};\n}\n\nfunction compartments(value: {\n\tstereotype?: string | undefined;\n\tname?: string | undefined;\n\tproperties?: Array<Record<string, string> | string> | undefined;\n\tconstraints?: string[] | undefined;\n}): NodeCompartments {\n\treturn {\n\t\t...(value.stereotype === undefined ? {} : { stereotype: value.stereotype }),\n\t\t...(value.name === undefined ? {} : { name: value.name }),\n\t\t...(value.properties === undefined\n\t\t\t? {}\n\t\t\t: { properties: value.properties.map(formatCompartmentEntry) }),\n\t\t...(value.constraints === undefined\n\t\t\t? {}\n\t\t\t: { constraints: [...value.constraints] }),\n\t};\n}\n\nfunction normalizeFrame(frame: NonNullable<DiagramDsl[\"frame\"]>) {\n\treturn {\n\t\tkind: frame.kind,\n\t\t...(frame.context === undefined ? {} : { context: frame.context }),\n\t\t...(frame.name === undefined ? {} : { name: frame.name }),\n\t\ttitleTab: frame.titleTab,\n\t\t...(frame.style === undefined ? {} : { style: style(frame.style) }),\n\t};\n}\n\nfunction formatCompartmentEntry(\n\tvalue: Record<string, string> | string,\n): string {\n\tif (typeof value === \"string\") {\n\t\treturn value;\n\t}\n\tconst [entry] = Object.entries(value);\n\tif (entry === undefined) {\n\t\treturn \"\";\n\t}\n\treturn `${entry[0]}: ${entry[1]}`;\n}\n\nfunction normalizeSwimlanes(dsl: DiagramDsl): Swimlane[] {\n\treturn Object.keys(dsl.swimlanes ?? {}).map((id) => {\n\t\tconst swimlane = dsl.swimlanes?.[id];\n\t\tconst label = toLabel(swimlane?.label);\n\t\treturn {\n\t\t\tid,\n\t\t\t...(label === undefined ? {} : { label }),\n\t\t\torientation: swimlane?.orientation ?? \"vertical\",\n\t\t\tlayout: swimlane?.layout ?? \"overlay\",\n\t\t\t...(swimlane?.headerHeight === undefined\n\t\t\t\t? {}\n\t\t\t\t: { headerHeight: swimlane.headerHeight }),\n\t\t\t...(swimlane?.padding === undefined ? {} : { padding: swimlane.padding }),\n\t\t\tlanes: Object.keys(swimlane?.lanes ?? {}).map((laneId) => {\n\t\t\t\tconst lane = swimlane?.lanes[laneId];\n\t\t\t\tconst laneLabel = toLabel(lane?.label);\n\t\t\t\treturn {\n\t\t\t\t\tid: laneId,\n\t\t\t\t\t...(laneLabel === undefined ? {} : { label: laneLabel }),\n\t\t\t\t\tchildren: [...(lane?.children ?? [])],\n\t\t\t\t};\n\t\t\t}),\n\t\t};\n\t});\n}\n\nfunction normalizeGroups(\n\tdsl: DiagramDsl,\n\tmeasurer: TextMeasurer,\n): NormalizedGroup[] {\n\treturn Object.keys(dsl.groups ?? {})\n\t\t.sort()\n\t\t.map((id) => {\n\t\t\tconst group = dsl.groups?.[id];\n\t\t\tconst label = toLabel(group?.label);\n\t\t\tconst labelLayout =\n\t\t\t\tlabel === undefined ? undefined : fitDslLabel(label, measurer);\n\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\t...(label === undefined ? {} : { label }),\n\t\t\t\tnodeIds: [...(group?.nodes ?? [])],\n\t\t\t\tgroupIds: [...(group?.groups ?? [])],\n\t\t\t\tpadding: group?.padding ?? { ...DEFAULT_GROUP_PADDING },\n\t\t\t\t...(labelLayout === undefined ? {} : { labelLayout }),\n\t\t\t};\n\t\t});\n}\n\nfunction normalizeConstraints(dsl: DiagramDsl): Constraint[] {\n\tconst constraints: Constraint[] = [];\n\n\tfor (const constraint of dsl.constraints ?? []) {\n\t\tswitch (constraint.kind) {\n\t\t\tcase \"exact-position\":\n\t\t\t\tconstraints.push({\n\t\t\t\t\tkind: \"exact-position\",\n\t\t\t\t\ttargetId: constraint.targetId ?? constraint.target ?? \"\",\n\t\t\t\t\tposition: point(constraint.position),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"relative-position\":\n\t\t\t\tconstraints.push({\n\t\t\t\t\tkind: \"relative-position\",\n\t\t\t\t\tsourceId: constraint.sourceId ?? constraint.source ?? \"\",\n\t\t\t\t\treferenceId: constraint.referenceId ?? constraint.reference ?? \"\",\n\t\t\t\t\trelation: constraint.relation,\n\t\t\t\t\t...(constraint.offset === undefined\n\t\t\t\t\t\t? {}\n\t\t\t\t\t\t: { offset: point(constraint.offset) }),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"align\":\n\t\t\t\tconstraints.push({\n\t\t\t\t\tkind: \"align\",\n\t\t\t\t\taxis: constraint.axis,\n\t\t\t\t\ttargetIds: [...(constraint.targetIds ?? constraint.targets ?? [])],\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"distribute\":\n\t\t\t\tconstraints.push({\n\t\t\t\t\tkind: \"distribute\",\n\t\t\t\t\taxis: constraint.axis,\n\t\t\t\t\ttargetIds: [...(constraint.targetIds ?? constraint.targets ?? [])],\n\t\t\t\t\t...(constraint.spacing === undefined\n\t\t\t\t\t\t? {}\n\t\t\t\t\t\t: { spacing: constraint.spacing }),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"containment\":\n\t\t\t\tconstraints.push({\n\t\t\t\t\tkind: \"containment\",\n\t\t\t\t\tcontainerId: constraint.containerId ?? constraint.container ?? \"\",\n\t\t\t\t\tchildIds: [...(constraint.childIds ?? constraint.children ?? [])],\n\t\t\t\t\t...(constraint.padding === undefined\n\t\t\t\t\t\t? {}\n\t\t\t\t\t\t: { padding: constraint.padding }),\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn constraints;\n}\n\nfunction validateReferences(dsl: DiagramDsl): DslDiagnostic[] {\n\tconst diagnostics: DslDiagnostic[] = [];\n\tconst nodeIds = new Set(Object.keys(dsl.nodes));\n\tconst groupIds = new Set(Object.keys(dsl.groups ?? {}));\n\n\t(dsl.edges ?? []).forEach((edge, index) => {\n\t\tif (typeof edge === \"string\") {\n\t\t\treturn;\n\t\t}\n\t\tconst sourceId = edge.sourceId ?? endpointNodeId(edge.source);\n\t\tconst targetId = edge.targetId ?? endpointNodeId(edge.target);\n\t\tconst sourceEndpoint = endpoint(edge.source, edge.sourceId);\n\t\tconst targetEndpoint = endpoint(edge.target, edge.targetId);\n\t\tif (sourceId !== undefined && !nodeIds.has(sourceId)) {\n\t\t\tdiagnostics.push(referenceMissing([\"edges\", index, \"source\"], sourceId));\n\t\t}\n\t\tif (targetId !== undefined && !nodeIds.has(targetId)) {\n\t\t\tdiagnostics.push(referenceMissing([\"edges\", index, \"target\"], targetId));\n\t\t}\n\t\tvalidateEndpointPort(\n\t\t\tdsl,\n\t\t\tsourceEndpoint,\n\t\t\t[\"edges\", index, \"source\"],\n\t\t\tdiagnostics,\n\t\t);\n\t\tvalidateEndpointPort(\n\t\t\tdsl,\n\t\t\ttargetEndpoint,\n\t\t\t[\"edges\", index, \"target\"],\n\t\t\tdiagnostics,\n\t\t);\n\t});\n\n\tfor (const [groupId, group] of Object.entries(dsl.groups ?? {})) {\n\t\t(group.nodes ?? []).forEach((nodeId, index) => {\n\t\t\tif (!nodeIds.has(nodeId)) {\n\t\t\t\tdiagnostics.push(\n\t\t\t\t\treferenceMissing([\"groups\", groupId, \"nodes\", index], nodeId),\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t\t(group.groups ?? []).forEach((childGroupId, index) => {\n\t\t\tif (!groupIds.has(childGroupId)) {\n\t\t\t\tdiagnostics.push(\n\t\t\t\t\treferenceMissing([\"groups\", groupId, \"groups\", index], childGroupId),\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\n\tfor (const [swimlaneId, swimlane] of Object.entries(dsl.swimlanes ?? {})) {\n\t\tfor (const [laneId, lane] of Object.entries(swimlane.lanes)) {\n\t\t\t(lane.children ?? []).forEach((child, childIndex) => {\n\t\t\t\tif (!nodeIds.has(child)) {\n\t\t\t\t\tdiagnostics.push(\n\t\t\t\t\t\treferenceMissing(\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\"swimlanes\",\n\t\t\t\t\t\t\t\tswimlaneId,\n\t\t\t\t\t\t\t\t\"lanes\",\n\t\t\t\t\t\t\t\tlaneId,\n\t\t\t\t\t\t\t\t\"children\",\n\t\t\t\t\t\t\t\tchildIndex,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tchild,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\t(dsl.constraints ?? []).forEach((constraint, index) => {\n\t\tswitch (constraint.kind) {\n\t\t\tcase \"exact-position\": {\n\t\t\t\tconst target = constraint.targetId ?? constraint.target;\n\t\t\t\tif (\n\t\t\t\t\ttarget !== undefined &&\n\t\t\t\t\t!hasNodeOrGroup(target, nodeIds, groupIds)\n\t\t\t\t) {\n\t\t\t\t\tdiagnostics.push(\n\t\t\t\t\t\treferenceMissing([\"constraints\", index, \"target\"], target),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"relative-position\": {\n\t\t\t\tconst source = constraint.sourceId ?? constraint.source;\n\t\t\t\tconst reference = constraint.referenceId ?? constraint.reference;\n\t\t\t\tif (\n\t\t\t\t\tsource !== undefined &&\n\t\t\t\t\t!hasNodeOrGroup(source, nodeIds, groupIds)\n\t\t\t\t) {\n\t\t\t\t\tdiagnostics.push(\n\t\t\t\t\t\treferenceMissing([\"constraints\", index, \"source\"], source),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\treference !== undefined &&\n\t\t\t\t\t!hasNodeOrGroup(reference, nodeIds, groupIds)\n\t\t\t\t) {\n\t\t\t\t\tdiagnostics.push(\n\t\t\t\t\t\treferenceMissing([\"constraints\", index, \"reference\"], reference),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"align\":\n\t\t\tcase \"distribute\":\n\t\t\t\t(constraint.targetIds ?? constraint.targets ?? []).forEach(\n\t\t\t\t\t(target, targetIndex) => {\n\t\t\t\t\t\tif (!hasNodeOrGroup(target, nodeIds, groupIds)) {\n\t\t\t\t\t\t\tdiagnostics.push(\n\t\t\t\t\t\t\t\treferenceMissing(\n\t\t\t\t\t\t\t\t\t[\"constraints\", index, \"targets\", targetIndex],\n\t\t\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase \"containment\": {\n\t\t\t\tconst container = constraint.containerId ?? constraint.container;\n\t\t\t\tif (container !== undefined) {\n\t\t\t\t\tif (!nodeIds.has(container)) {\n\t\t\t\t\t\tdiagnostics.push(\n\t\t\t\t\t\t\treferenceMissing([\"constraints\", index, \"container\"], container),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t(constraint.childIds ?? constraint.children ?? []).forEach(\n\t\t\t\t\t(child, childIndex) => {\n\t\t\t\t\t\tif (!hasNodeOrGroup(child, nodeIds, groupIds)) {\n\t\t\t\t\t\t\tdiagnostics.push(\n\t\t\t\t\t\t\t\treferenceMissing(\n\t\t\t\t\t\t\t\t\t[\"constraints\", index, \"children\", childIndex],\n\t\t\t\t\t\t\t\t\tchild,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t});\n\n\treturn sortDslDiagnostics(diagnostics);\n}\n\nfunction referenceMissing(\n\tpath: Array<string | number>,\n\tid: string,\n): DslDiagnostic {\n\treturn {\n\t\tseverity: \"error\",\n\t\tlayer: \"validate\",\n\t\tcode: \"validate.reference.missing\",\n\t\tmessage: `Reference \"${id}\" does not exist.`,\n\t\tpath,\n\t\thint: \"Define the referenced node or group id, or update this reference.\",\n\t};\n}\n\nfunction hasNodeOrGroup(\n\tid: string,\n\tnodeIds: ReadonlySet<string>,\n\tgroupIds: ReadonlySet<string>,\n\tswimlaneLaneIds: ReadonlySet<string> = new Set(),\n): boolean {\n\treturn nodeIds.has(id) || groupIds.has(id) || swimlaneLaneIds.has(id);\n}\n\nfunction endpointNodeId(\n\tendpointValue:\n\t\t| string\n\t\t| { node: string; port?: string | undefined }\n\t\t| undefined,\n): string | undefined {\n\tif (typeof endpointValue === \"string\" || endpointValue === undefined) {\n\t\treturn endpointValue;\n\t}\n\treturn endpointValue.node;\n}\n\nfunction validateEndpointPort(\n\tdsl: DiagramDsl,\n\tendpointValue: NormalizedEdge[\"source\"],\n\tpath: Array<string | number>,\n\tdiagnostics: DslDiagnostic[],\n): void {\n\tif (endpointValue.portId === undefined) {\n\t\treturn;\n\t}\n\n\tconst node = dsl.nodes[endpointValue.nodeId];\n\tif (node !== undefined && node.ports?.[endpointValue.portId] === undefined) {\n\t\tdiagnostics.push(referenceMissing([...path, \"port\"], endpointValue.portId));\n\t}\n}\n\nfunction toLabel(\n\tvalue: DiagramDsl[\"nodes\"][string][\"label\"],\n): Label | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\n\tif (typeof value === \"string\") {\n\t\treturn { text: value };\n\t}\n\n\treturn value.maxWidth === undefined\n\t\t? { text: value.text }\n\t\t: { text: value.text, maxWidth: value.maxWidth };\n}\n\nfunction fitDslLabel(label: Label, measurer: TextMeasurer) {\n\treturn fitLabel(\n\t\tlabel.text,\n\t\t{\n\t\t\tfont: DEFAULT_FONT,\n\t\t\tpadding: DEFAULT_NODE_PADDING,\n\t\t\tminSize: DEFAULT_NODE_MIN_SIZE,\n\t\t\tmaxWidth: label.maxWidth ?? DEFAULT_LABEL_MAX_WIDTH,\n\t\t},\n\t\tmeasurer,\n\t);\n}\n\nfunction point(value: Point): Point {\n\treturn { x: value.x, y: value.y };\n}\n","import { z } from \"zod\";\nimport { createSchemaDiagnostic, sortDslDiagnostics } from \"./diagnostics.js\";\nimport type { DslDiagnostic } from \"./types.js\";\n\nconst directionSchema = z.enum([\"TB\", \"LR\", \"BT\", \"RL\"]);\nconst routeKindSchema = z.enum([\"orthogonal\", \"straight\"]);\nconst outputFormatSchema = z.enum([\"svg\", \"excalidraw\"]);\nconst edgeStrokeStyleSchema = z.enum([\"solid\", \"dashed\"]);\nconst edgeArrowheadSchema = z.enum([\"triangle\", \"hollowTriangle\"]);\nconst primaryReadingDirectionSchema = z.enum([\n\t\"top_to_bottom\",\n\t\"top-to-bottom\",\n]);\nconst nodeShapeSchema = z.enum([\n\t\"rectangle\",\n\t\"rounded-rectangle\",\n\t\"ellipse\",\n\t\"diamond\",\n\t\"parallelogram\",\n\t\"hexagon\",\n\t\"cylinder\",\n]);\n\nconst finiteNumberSchema = z.number().finite();\nconst nonNegativeNumberSchema = finiteNumberSchema.min(0);\n\nconst pointSchema = z.object({\n\tx: finiteNumberSchema,\n\ty: finiteNumberSchema,\n});\n\nconst insetsSchema = z.object({\n\ttop: finiteNumberSchema,\n\tright: finiteNumberSchema,\n\tbottom: finiteNumberSchema,\n\tleft: finiteNumberSchema,\n});\n\nconst labelSchema = z.union([\n\tz.string(),\n\tz.object({\n\t\ttext: z.string(),\n\t\tmaxWidth: finiteNumberSchema.optional(),\n\t}),\n]);\n\nconst styleSchema = z.object({\n\tfill: z.string().optional(),\n\tstroke: z.string().optional(),\n});\n\nconst portSideSchema = z.enum([\"top\", \"right\", \"bottom\", \"left\"]);\nconst portKindSchema = z.enum([\"proxy\", \"flow\"]);\n\nconst portSchema = z.object({\n\tlabel: labelSchema.optional(),\n\tside: portSideSchema,\n\tkind: portKindSchema.optional(),\n\torder: finiteNumberSchema.optional(),\n\tstyle: styleSchema.optional(),\n});\n\nconst compartmentsSchema = z.object({\n\tstereotype: z.string().optional(),\n\tname: z.string().optional(),\n\tproperties: z\n\t\t.array(z.record(z.string(), z.string()).or(z.string()))\n\t\t.optional(),\n\tconstraints: z.array(z.string()).optional(),\n});\n\nconst nodeSchema = z.object({\n\tlabel: labelSchema.optional(),\n\tshape: nodeShapeSchema.optional(),\n\tposition: pointSchema.optional(),\n\tstyle: styleSchema.optional(),\n\tports: z.record(z.string(), portSchema).optional(),\n\tcompartments: compartmentsSchema.optional(),\n});\n\nconst endpointSchema = z.union([\n\tz.string(),\n\tz.object({\n\t\tnode: z.string(),\n\t\tport: z.string().optional(),\n\t}),\n]);\n\nconst structuredEdgeSchema = z\n\t.object({\n\t\tid: z.string().optional(),\n\t\tsource: endpointSchema.optional(),\n\t\ttarget: endpointSchema.optional(),\n\t\tsourceId: z.string().optional(),\n\t\ttargetId: z.string().optional(),\n\t\tlabel: labelSchema.optional(),\n\t\tstyle: edgeStrokeStyleSchema.optional(),\n\t\tarrowhead: edgeArrowheadSchema.optional(),\n\t})\n\t.superRefine((edge, context) => {\n\t\tif (edge.source === undefined && edge.sourceId === undefined) {\n\t\t\tcontext.addIssue({\n\t\t\t\tcode: \"custom\",\n\t\t\t\tmessage: \"Edge requires source or sourceId.\",\n\t\t\t\tpath: [\"source\"],\n\t\t\t});\n\t\t}\n\t\tif (edge.target === undefined && edge.targetId === undefined) {\n\t\t\tcontext.addIssue({\n\t\t\t\tcode: \"custom\",\n\t\t\t\tmessage: \"Edge requires target or targetId.\",\n\t\t\t\tpath: [\"target\"],\n\t\t\t});\n\t\t}\n\t});\n\nconst edgeSchema = z.union([z.string(), structuredEdgeSchema]);\n\nconst groupSchema = z.object({\n\tlabel: labelSchema.optional(),\n\tnodes: z.array(z.string()).optional(),\n\tgroups: z.array(z.string()).optional(),\n\tpadding: insetsSchema.optional(),\n});\n\nconst swimlaneSchema = z.object({\n\tlabel: labelSchema.optional(),\n\torientation: z.enum([\"vertical\", \"horizontal\"]).optional(),\n\tlayout: z.enum([\"overlay\", \"contract\"]).optional(),\n\theaderHeight: nonNegativeNumberSchema.optional(),\n\tpadding: nonNegativeNumberSchema.optional(),\n\tlanes: z.record(\n\t\tz.string(),\n\t\tz.object({\n\t\t\tlabel: labelSchema.optional(),\n\t\t\tchildren: z.array(z.string()).optional(),\n\t\t}),\n\t),\n});\n\nconst exactPositionConstraintSchema = z.object({\n\tkind: z.literal(\"exact-position\"),\n\ttarget: z.string().optional(),\n\ttargetId: z.string().optional(),\n\tposition: pointSchema,\n});\n\nconst relativePositionConstraintSchema = z.object({\n\tkind: z.literal(\"relative-position\"),\n\tsource: z.string().optional(),\n\tsourceId: z.string().optional(),\n\treference: z.string().optional(),\n\treferenceId: z.string().optional(),\n\trelation: z.enum([\"above\", \"right-of\", \"below\", \"left-of\"]),\n\toffset: pointSchema.optional(),\n});\n\nconst alignConstraintSchema = z.object({\n\tkind: z.literal(\"align\"),\n\taxis: z.enum([\n\t\t\"x\",\n\t\t\"y\",\n\t\t\"center-x\",\n\t\t\"center-y\",\n\t\t\"top\",\n\t\t\"right\",\n\t\t\"bottom\",\n\t\t\"left\",\n\t]),\n\ttargets: z.array(z.string()).optional(),\n\ttargetIds: z.array(z.string()).optional(),\n});\n\nconst distributeConstraintSchema = z.object({\n\tkind: z.literal(\"distribute\"),\n\taxis: z.enum([\"horizontal\", \"vertical\"]),\n\ttargets: z.array(z.string()).optional(),\n\ttargetIds: z.array(z.string()).optional(),\n\tspacing: finiteNumberSchema.optional(),\n});\n\nconst containmentConstraintSchema = z.object({\n\tkind: z.literal(\"containment\"),\n\tcontainer: z.string().optional(),\n\tcontainerId: z.string().optional(),\n\tchildren: z.array(z.string()).optional(),\n\tchildIds: z.array(z.string()).optional(),\n\tpadding: insetsSchema.optional(),\n});\n\nconst constraintSchema = z.union([\n\texactPositionConstraintSchema,\n\trelativePositionConstraintSchema,\n\talignConstraintSchema,\n\tdistributeConstraintSchema,\n\tcontainmentConstraintSchema,\n]);\n\nexport const diagramDslSchema = z.object({\n\tid: z.string().optional(),\n\ttitle: z.string().optional(),\n\tdirection: directionSchema.optional(),\n\tlayout: z\n\t\t.object({\n\t\t\tdirection: directionSchema.optional(),\n\t\t\tprimaryReadingDirection: primaryReadingDirectionSchema.optional(),\n\t\t})\n\t\t.optional(),\n\trouting: z\n\t\t.object({\n\t\t\tkind: routeKindSchema.optional(),\n\t\t\tportShifting: z\n\t\t\t\t.object({\n\t\t\t\t\tenabled: z.boolean().optional(),\n\t\t\t\t\tspacing: finiteNumberSchema.optional(),\n\t\t\t\t})\n\t\t\t\t.optional(),\n\t\t})\n\t\t.optional(),\n\tnodes: z.record(z.string(), nodeSchema),\n\tedges: z.array(edgeSchema).optional(),\n\tgroups: z.record(z.string(), groupSchema).optional(),\n\tswimlanes: z.record(z.string(), swimlaneSchema).optional(),\n\tconstraints: z.array(constraintSchema).optional(),\n\tframe: z\n\t\t.object({\n\t\t\tkind: z.string(),\n\t\t\tcontext: z.string().optional(),\n\t\t\tname: z.string().optional(),\n\t\t\ttitleTab: z.string(),\n\t\t\tstyle: styleSchema.optional(),\n\t\t})\n\t\t.optional(),\n\toutput: z\n\t\t.object({\n\t\t\tformat: outputFormatSchema.optional(),\n\t\t})\n\t\t.optional(),\n});\n\nexport type DiagramDsl = z.infer<typeof diagramDslSchema>;\n\nexport function validateDiagramDsl(value: unknown): {\n\tvalue?: DiagramDsl;\n\tdiagnostics: DslDiagnostic[];\n} {\n\tconst result = diagramDslSchema.safeParse(value);\n\n\tif (result.success) {\n\t\treturn { value: result.data, diagnostics: [] };\n\t}\n\n\treturn {\n\t\tdiagnostics: sortDslDiagnostics(\n\t\t\tresult.error.issues.map((issue) =>\n\t\t\t\tcreateSchemaDiagnostic(toDiagnosticPath(issue.path), issue.message),\n\t\t\t),\n\t\t),\n\t};\n}\n\nfunction toDiagnosticPath(path: PropertyKey[]): Array<string | number> {\n\treturn path.flatMap((segment) =>\n\t\ttypeof segment === \"string\" || typeof segment === \"number\" ? [segment] : [],\n\t);\n}\n","import { Buffer } from \"node:buffer\";\nimport { parseDocument } from \"yaml\";\nimport { createParseDiagnostic, sortDslDiagnostics } from \"./diagnostics.js\";\nimport { parseEdgeShorthand } from \"./edges.js\";\nimport { validateDiagramDsl } from \"./schema.js\";\nimport type {\n\tDslDiagnostic,\n\tParseDiagramDslOptions,\n\tParseDiagramDslResult,\n} from \"./types.js\";\n\nexport const DEFAULT_DSL_MAX_BYTES = 1_000_000;\n\nexport function parseDiagramDsl(\n\tsource: string,\n\toptions: ParseDiagramDslOptions = {},\n): ParseDiagramDslResult {\n\tconst maxBytes = options.maxBytes ?? DEFAULT_DSL_MAX_BYTES;\n\n\tif (Buffer.byteLength(source, \"utf8\") > maxBytes) {\n\t\treturn {\n\t\t\tdiagnostics: [\n\t\t\t\tcreateParseDiagnostic(\n\t\t\t\t\t\"parse.input.too-large\",\n\t\t\t\t\t`Input exceeds the ${maxBytes} byte limit.`,\n\t\t\t\t\t\"Split the diagram into smaller inputs or raise maxBytes for trusted sources.\",\n\t\t\t\t),\n\t\t\t],\n\t\t};\n\t}\n\n\tconst parsed = parseSource(source, options);\n\tif (parsed.value === undefined || hasErrorDiagnostics(parsed.diagnostics)) {\n\t\treturn { diagnostics: sortDslDiagnostics(parsed.diagnostics) };\n\t}\n\n\tconst expanded = expandEdgeShorthand(parsed.value);\n\tif (hasErrorDiagnostics(expanded.diagnostics)) {\n\t\treturn { diagnostics: sortDslDiagnostics(expanded.diagnostics) };\n\t}\n\n\tconst validated = validateDiagramDsl(expanded.value);\n\n\treturn {\n\t\tvalue: validated.value,\n\t\tdiagnostics: sortDslDiagnostics([\n\t\t\t...parsed.diagnostics,\n\t\t\t...validated.diagnostics,\n\t\t]),\n\t};\n}\n\nfunction parseSource(\n\tsource: string,\n\toptions: ParseDiagramDslOptions,\n): { value?: unknown; diagnostics: DslDiagnostic[] } {\n\tif (isJsonSource(options)) {\n\t\treturn parseJsonSource(source);\n\t}\n\n\treturn parseYamlSource(source);\n}\n\nfunction parseJsonSource(source: string): {\n\tvalue?: unknown;\n\tdiagnostics: DslDiagnostic[];\n} {\n\ttry {\n\t\treturn { value: JSON.parse(source), diagnostics: [] };\n\t} catch (error) {\n\t\treturn {\n\t\t\tdiagnostics: [\n\t\t\t\tcreateParseDiagnostic(\n\t\t\t\t\t\"parse.json.invalid\",\n\t\t\t\t\t`Invalid JSON: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\t\"Fix the JSON syntax or use a .yaml source file.\",\n\t\t\t\t),\n\t\t\t],\n\t\t};\n\t}\n}\n\nfunction parseYamlSource(source: string): {\n\tvalue?: unknown;\n\tdiagnostics: DslDiagnostic[];\n} {\n\tconst document = parseDocument(source);\n\tconst diagnostics: DslDiagnostic[] = [\n\t\t...document.errors.map((error) =>\n\t\t\tcreateParseDiagnostic(\n\t\t\t\t\"parse.yaml.invalid\",\n\t\t\t\t`Invalid YAML: ${error.message}`,\n\t\t\t\t\"Fix the YAML syntax near the reported parser error.\",\n\t\t\t),\n\t\t),\n\t\t...document.warnings.map((warning) => ({\n\t\t\tseverity: \"warning\" as const,\n\t\t\tlayer: \"parse\" as const,\n\t\t\tcode: \"parse.yaml.warning\",\n\t\t\tmessage: `YAML warning: ${warning.message}`,\n\t\t\thint: \"Review the YAML warning before relying on the parsed value.\",\n\t\t})),\n\t];\n\n\tif (document.errors.length > 0) {\n\t\treturn { diagnostics };\n\t}\n\n\treturn { value: document.toJS(), diagnostics };\n}\n\nfunction isJsonSource(options: ParseDiagramDslOptions): boolean {\n\treturn (\n\t\toptions.sourceFormat === \"json\" ||\n\t\t(options.sourcePath?.toLowerCase().endsWith(\".json\") ?? false)\n\t);\n}\n\nfunction hasErrorDiagnostics(diagnostics: DslDiagnostic[]): boolean {\n\treturn diagnostics.some((diagnostic) => diagnostic.severity === \"error\");\n}\n\nfunction expandEdgeShorthand(value: unknown): {\n\tvalue: unknown;\n\tdiagnostics: DslDiagnostic[];\n} {\n\tif (\n\t\tvalue === null ||\n\t\ttypeof value !== \"object\" ||\n\t\tArray.isArray(value) ||\n\t\t!(\"edges\" in value)\n\t) {\n\t\treturn { value, diagnostics: [] };\n\t}\n\n\tconst record = value as Record<string, unknown>;\n\tif (!Array.isArray(record.edges)) {\n\t\treturn { value, diagnostics: [] };\n\t}\n\n\tconst diagnostics: DslDiagnostic[] = [];\n\tconst edges = record.edges.map((edge, index) => {\n\t\tconst shorthand = edgeShorthandText(edge);\n\t\tif (shorthand === undefined) {\n\t\t\treturn edge;\n\t\t}\n\n\t\tconst result = parseEdgeShorthand(shorthand, [\"edges\", index]);\n\t\tdiagnostics.push(...result.diagnostics);\n\n\t\tif (result.edge === undefined) {\n\t\t\treturn edge;\n\t\t}\n\n\t\treturn {\n\t\t\tsourceId: result.edge.sourceId,\n\t\t\ttargetId: result.edge.targetId,\n\t\t\t...(result.edge.label === undefined ? {} : { label: result.edge.label }),\n\t\t};\n\t});\n\n\treturn { value: { ...record, edges }, diagnostics };\n}\n\nfunction edgeShorthandText(edge: unknown): string | undefined {\n\tif (typeof edge === \"string\") {\n\t\treturn edge;\n\t}\n\n\tif (edge === null || typeof edge !== \"object\" || Array.isArray(edge)) {\n\t\treturn undefined;\n\t}\n\n\tconst entries = Object.entries(edge);\n\tif (entries.length !== 1) {\n\t\treturn undefined;\n\t}\n\n\tconst entry = entries[0];\n\tif (entry === undefined) {\n\t\treturn undefined;\n\t}\n\n\tconst [key, value] = entry;\n\tif (!key.includes(\"->\") || typeof value !== \"string\") {\n\t\treturn undefined;\n\t}\n\n\treturn `${key}: ${value}`;\n}\n","import type { Point } from \"../ir/geometry.js\";\n\nexport interface Arrowhead {\n\ttip: Point;\n\tleft: Point;\n\tright: Point;\n\tdirection: Point;\n}\n\nexport function computeArrowhead(\n\tpoints: readonly Point[],\n\toptions: { length?: number; width?: number } = {},\n): Arrowhead {\n\tconst { length = 10, width = 8 } = options;\n\n\tfor (let index = points.length - 1; index > 0; index -= 1) {\n\t\tconst tip = points[index];\n\t\tconst previous = points[index - 1];\n\t\tif (tip === undefined || previous === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst dx = tip.x - previous.x;\n\t\tconst dy = tip.y - previous.y;\n\t\tconst magnitude = Math.hypot(dx, dy);\n\t\tif (magnitude === 0) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst direction = { x: dx / magnitude, y: dy / magnitude };\n\t\tconst perpendicular = { x: -direction.y, y: direction.x };\n\t\tconst base = {\n\t\t\tx: tip.x - direction.x * length,\n\t\t\ty: tip.y - direction.y * length,\n\t\t};\n\t\tconst halfWidth = width / 2;\n\n\t\treturn {\n\t\t\ttip: { ...tip },\n\t\t\tleft: {\n\t\t\t\tx: base.x + perpendicular.x * halfWidth,\n\t\t\t\ty: base.y + perpendicular.y * halfWidth,\n\t\t\t},\n\t\t\tright: {\n\t\t\t\tx: base.x - perpendicular.x * halfWidth,\n\t\t\t\ty: base.y - perpendicular.y * halfWidth,\n\t\t\t},\n\t\t\tdirection,\n\t\t};\n\t}\n\n\tthrow new TypeError(\"Arrowhead requires at least one non-zero segment\");\n}\n","import type { CoordinatedDiagram } from \"../ir/diagram.js\";\nimport type {\n\tCoordinatedEdge,\n\tCoordinatedGroup,\n\tCoordinatedNode,\n\tEdgeArrowhead,\n\tLabel,\n\tNodeShape,\n} from \"../ir/elements.js\";\nimport type { Box, Point } from \"../ir/geometry.js\";\nimport type { ExportOptions } from \"./types.js\";\n\ntype ExcalidrawElement =\n\t| ExcalidrawShapeElement\n\t| ExcalidrawTextElement\n\t| ExcalidrawArrowElement;\n\ntype ExcalidrawElementType =\n\t| \"rectangle\"\n\t| \"ellipse\"\n\t| \"diamond\"\n\t| \"parallelogram\"\n\t| \"hexagon\"\n\t| \"cylinder\"\n\t| \"text\"\n\t| \"arrow\";\n\ninterface ExcalidrawElementBase<TType extends ExcalidrawElementType> {\n\tid: string;\n\ttype: TType;\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n\tangle: 0;\n\tstrokeColor: string;\n\tbackgroundColor: string;\n\tfillStyle: \"solid\";\n\tstrokeWidth: number;\n\tstrokeStyle: \"solid\" | \"dashed\";\n\troughness: 0;\n\topacity: 100;\n\tgroupIds: string[];\n\tseed: number;\n\tversion: 1;\n\tversionNonce: number;\n\tisDeleted: false;\n\tboundElements: null;\n\tupdated: 0;\n\tlink: null;\n\tlocked: false;\n}\n\ninterface ExcalidrawShapeElement\n\textends ExcalidrawElementBase<\n\t\t| \"rectangle\"\n\t\t| \"ellipse\"\n\t\t| \"diamond\"\n\t\t| \"parallelogram\"\n\t\t| \"hexagon\"\n\t\t| \"cylinder\"\n\t> {\n\ttype:\n\t\t| \"rectangle\"\n\t\t| \"ellipse\"\n\t\t| \"diamond\"\n\t\t| \"parallelogram\"\n\t\t| \"hexagon\"\n\t\t| \"cylinder\";\n}\n\ninterface ExcalidrawTextElement extends ExcalidrawElementBase<\"text\"> {\n\ttype: \"text\";\n\ttext: string;\n\tfontSize: number;\n\tfontFamily: 1;\n\ttextAlign: \"center\" | \"left\";\n\tverticalAlign: \"middle\" | \"top\";\n\tbaseline: number;\n\tcontainerId: string | null;\n\toriginalText: string;\n\tlineHeight: number;\n}\n\ninterface ExcalidrawArrowElement extends ExcalidrawElementBase<\"arrow\"> {\n\ttype: \"arrow\";\n\tpoints: Point[];\n\tstartBinding: { elementId: string; focus: 0; gap: 0 };\n\tendBinding: { elementId: string; focus: 0; gap: 0 };\n\tstartArrowhead: null;\n\tendArrowhead: \"arrow\" | \"triangle\" | \"triangle_outline\";\n}\n\nexport function exportExcalidraw(\n\tdiagram: CoordinatedDiagram,\n\toptions: ExportOptions = {},\n): string {\n\tconst elements: ExcalidrawElement[] = [];\n\tconst groupIdByChildId = createGroupMembership(diagram.groups);\n\n\tfor (const group of diagram.groups) {\n\t\tconst groupElementId = groupElementIdFor(group.id);\n\t\telements.push(renderGroup(group));\n\t\tconst text = renderText(\n\t\t\t`group-text:${group.id}`,\n\t\t\tgroup.label,\n\t\t\tgroup.box,\n\t\t\tgroupElementId,\n\t\t\tgroupIdByChildId.get(group.id) ?? [],\n\t\t);\n\t\tif (text !== undefined) {\n\t\t\telements.push(text);\n\t\t}\n\t}\n\n\tfor (const node of diagram.nodes) {\n\t\telements.push(renderNode(node, groupIdByChildId.get(node.id) ?? []));\n\t\tconst text = renderText(\n\t\t\t`node-text:${node.id}`,\n\t\t\tnode.label,\n\t\t\tnode.box,\n\t\t\t`node:${node.id}`,\n\t\t\tgroupIdByChildId.get(node.id) ?? [],\n\t\t);\n\t\tif (text !== undefined) {\n\t\t\telements.push(text);\n\t\t}\n\t}\n\n\tfor (const edge of diagram.edges) {\n\t\telements.push(renderArrow(edge));\n\t}\n\n\tconst scene = {\n\t\ttype: \"excalidraw\",\n\t\tversion: 2,\n\t\tsource: \"auto-graph\",\n\t\telements,\n\t\tappState: {\n\t\t\tname: options.title ?? diagram.title ?? diagram.id,\n\t\t\tviewBackgroundColor: \"#ffffff\",\n\t\t\tgridSize: null,\n\t\t},\n\t\tfiles: {},\n\t};\n\n\treturn `${JSON.stringify(scene, null, 2)}\\n`;\n}\n\nfunction renderGroup(group: CoordinatedGroup): ExcalidrawShapeElement {\n\treturn {\n\t\t...baseElement(`group:${group.id}`, \"rectangle\", group.box),\n\t\tbackgroundColor: \"transparent\",\n\t\tstrokeStyle: \"dashed\",\n\t\tgroupIds: groupGroupIds(group.id),\n\t};\n}\n\nfunction renderNode(\n\tnode: CoordinatedNode,\n\tgroupIds: string[],\n): ExcalidrawShapeElement {\n\treturn {\n\t\t...baseElement(`node:${node.id}`, mapShape(node.shape), node.box),\n\t\tgroupIds,\n\t};\n}\n\nfunction renderArrow(edge: CoordinatedEdge): ExcalidrawArrowElement {\n\tconst first = edge.points[0];\n\tif (first === undefined) {\n\t\tthrow new TypeError(\n\t\t\t`Excalidraw edge ${edge.id} requires at least one point`,\n\t\t);\n\t}\n\n\tconst relativePoints = edge.points.map((point) => ({\n\t\tx: point.x - first.x,\n\t\ty: point.y - first.y,\n\t}));\n\tconst box = pointsBox(relativePoints);\n\n\treturn {\n\t\t...baseElement(`edge:${edge.id}`, \"arrow\", {\n\t\t\tx: first.x,\n\t\t\ty: first.y,\n\t\t\twidth: box.width,\n\t\t\theight: box.height,\n\t\t}),\n\t\tbackgroundColor: \"transparent\",\n\t\tstrokeStyle: edge.style ?? \"solid\",\n\t\tpoints: relativePoints,\n\t\tstartBinding: { elementId: `node:${edge.source.nodeId}`, focus: 0, gap: 0 },\n\t\tendBinding: { elementId: `node:${edge.target.nodeId}`, focus: 0, gap: 0 },\n\t\tstartArrowhead: null,\n\t\tendArrowhead: mapArrowhead(edge.arrowhead),\n\t};\n}\n\nfunction renderText(\n\tid: string,\n\tlabel: Label | undefined,\n\tbox: Box,\n\tcontainerId: string,\n\tgroupIds: string[],\n): ExcalidrawTextElement | undefined {\n\tif (label?.text === undefined) {\n\t\treturn undefined;\n\t}\n\n\tconst fontSize = 14;\n\treturn {\n\t\t...baseElement(id, \"text\", {\n\t\t\tx: box.x,\n\t\t\ty: box.y + box.height / 2 - fontSize / 2,\n\t\t\twidth: box.width,\n\t\t\theight: fontSize,\n\t\t}),\n\t\tbackgroundColor: \"transparent\",\n\t\tstrokeColor: \"#111827\",\n\t\tgroupIds,\n\t\ttext: label.text,\n\t\tfontSize,\n\t\tfontFamily: 1,\n\t\ttextAlign: \"center\",\n\t\tverticalAlign: \"middle\",\n\t\tbaseline: fontSize,\n\t\tcontainerId,\n\t\toriginalText: label.text,\n\t\tlineHeight: 1.25,\n\t\tboundElements: null,\n\t\tlink: null,\n\t\tlocked: false,\n\t\tseed: seedFor(id),\n\t\tversionNonce: seedFor(`${id}:nonce`),\n\t};\n}\n\nfunction baseElement<TType extends ExcalidrawElementType>(\n\tid: string,\n\ttype: TType,\n\tbox: Box,\n): ExcalidrawElementBase<TType> {\n\treturn {\n\t\tid,\n\t\ttype,\n\t\tx: finite(box.x),\n\t\ty: finite(box.y),\n\t\twidth: finite(box.width),\n\t\theight: finite(box.height),\n\t\tangle: 0,\n\t\tstrokeColor: \"#374151\",\n\t\tbackgroundColor: \"#f8fafc\",\n\t\tfillStyle: \"solid\",\n\t\tstrokeWidth: 1,\n\t\tstrokeStyle: \"solid\",\n\t\troughness: 0,\n\t\topacity: 100,\n\t\tgroupIds: [],\n\t\tseed: seedFor(id),\n\t\tversion: 1,\n\t\tversionNonce: seedFor(`${id}:nonce`),\n\t\tisDeleted: false,\n\t\tboundElements: null,\n\t\tupdated: 0,\n\t\tlink: null,\n\t\tlocked: false,\n\t};\n}\n\nfunction mapShape(shape: NodeShape): ExcalidrawShapeElement[\"type\"] {\n\tswitch (shape) {\n\t\tcase \"rounded-rectangle\":\n\t\tcase \"rectangle\":\n\t\t\treturn \"rectangle\";\n\t\tcase \"ellipse\":\n\t\t\treturn \"ellipse\";\n\t\tcase \"diamond\":\n\t\t\treturn \"diamond\";\n\t\tcase \"parallelogram\":\n\t\t\treturn \"parallelogram\";\n\t\tcase \"hexagon\":\n\t\t\treturn \"hexagon\";\n\t\tcase \"cylinder\":\n\t\t\treturn \"cylinder\";\n\t}\n}\n\nfunction mapArrowhead(\n\tarrowhead: EdgeArrowhead | undefined,\n): ExcalidrawArrowElement[\"endArrowhead\"] {\n\tswitch (arrowhead) {\n\t\tcase undefined:\n\t\t\treturn \"arrow\";\n\t\tcase \"triangle\":\n\t\t\treturn \"triangle\";\n\t\tcase \"hollowTriangle\":\n\t\t\treturn \"triangle_outline\";\n\t}\n}\n\nfunction createGroupMembership(\n\tgroups: readonly CoordinatedGroup[],\n): Map<string, string[]> {\n\tconst membership = new Map<string, string[]>();\n\tfor (const group of groups) {\n\t\tconst groupElementId = groupElementIdFor(group.id);\n\t\tfor (const nodeId of group.nodeIds) {\n\t\t\taddMembership(membership, nodeId, groupElementId);\n\t\t}\n\t\tfor (const childGroupId of group.groupIds) {\n\t\t\taddMembership(membership, childGroupId, groupElementId);\n\t\t}\n\t}\n\treturn membership;\n}\n\nfunction addMembership(\n\tmembership: Map<string, string[]>,\n\tchildId: string,\n\tgroupElementId: string,\n): void {\n\tconst existing = membership.get(childId) ?? [];\n\tmembership.set(childId, [...existing, groupElementId].sort());\n}\n\nfunction groupGroupIds(groupId: string): string[] {\n\treturn [groupElementIdFor(groupId)];\n}\n\nfunction groupElementIdFor(groupId: string): string {\n\treturn `group:${groupId}`;\n}\n\nfunction pointsBox(points: readonly Point[]): Box {\n\tconst xs = points.map((point) => point.x);\n\tconst ys = points.map((point) => point.y);\n\tconst minX = Math.min(...xs);\n\tconst maxX = Math.max(...xs);\n\tconst minY = Math.min(...ys);\n\tconst maxY = Math.max(...ys);\n\treturn {\n\t\tx: minX,\n\t\ty: minY,\n\t\twidth: maxX - minX,\n\t\theight: maxY - minY,\n\t};\n}\n\nfunction finite(value: number): number {\n\tif (!Number.isFinite(value)) {\n\t\tthrow new TypeError(\n\t\t\t\"Excalidraw export requires finite coordinated numbers\",\n\t\t);\n\t}\n\treturn Number.parseFloat(value.toFixed(3));\n}\n\nfunction seedFor(id: string): number {\n\tlet hash = 2166136261;\n\tfor (let index = 0; index < id.length; index += 1) {\n\t\thash ^= id.charCodeAt(index);\n\t\thash = Math.imul(hash, 16777619);\n\t}\n\treturn Math.abs(hash);\n}\n","import type { CoordinatedDiagram } from \"../ir/diagram.js\";\nimport type {\n\tCoordinatedEdge,\n\tCoordinatedFrame,\n\tCoordinatedGroup,\n\tCoordinatedNode,\n\tLabel,\n\tNodeShape,\n\tSwimlane,\n} from \"../ir/elements.js\";\nimport type { Box, Point } from \"../ir/geometry.js\";\nimport { computeArrowhead } from \"./arrow.js\";\nimport type { ExportOptions } from \"./types.js\";\n\nconst NODE_FILL = \"#f8fafc\";\nconst GROUP_FILL = \"#f9fafb\";\nconst STROKE = \"#374151\";\nconst EDGE_STROKE = \"#111827\";\nconst FONT_FAMILY = \"Arial, sans-serif\";\n\nexport function exportSvg(\n\tdiagram: CoordinatedDiagram,\n\toptions: ExportOptions = {},\n): string {\n\tconst title = options.title ?? diagram.title;\n\tconst lines = [\n\t\t`<svg xmlns=\"http://www.w3.org/2000/svg\" role=\"img\" viewBox=\"${formatBoxViewBox(diagram.bounds)}\">`,\n\t\t...(title === undefined ? [] : [` <title>${escapeXml(title)}</title>`]),\n\t\t` <rect class=\"background\" x=\"${formatNumber(diagram.bounds.x)}\" y=\"${formatNumber(diagram.bounds.y)}\" width=\"${formatNumber(diagram.bounds.width)}\" height=\"${formatNumber(diagram.bounds.height)}\" fill=\"#ffffff\"/>`,\n\t\t...(diagram.frame === undefined\n\t\t\t? []\n\t\t\t: [indent(renderFrame(diagram.frame))]),\n\t\t...(diagram.swimlanes ?? []).flatMap((swimlane) =>\n\t\t\trenderSwimlane(swimlane),\n\t\t),\n\t\t...diagram.groups.map((group) => indent(renderGroup(group))),\n\t\t...diagram.edges.flatMap((edge) => {\n\t\t\tconst path = renderEdgePath(edge);\n\t\t\tif (path === undefined) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\treturn [indent(path), indent(renderArrowhead(edge))];\n\t\t}),\n\t\t...diagram.nodes.map((node) => indent(renderNode(node))),\n\t\t...diagram.nodes.flatMap((node) => renderCompartments(node)),\n\t\t...diagram.nodes.flatMap((node) => renderPorts(node)),\n\t\t...diagram.groups.flatMap((group) =>\n\t\t\trenderLabel(group.label, group.box, group),\n\t\t),\n\t\t...diagram.nodes.flatMap((node) =>\n\t\t\tnode.compartments === undefined\n\t\t\t\t? renderLabel(node.label, node.box, node)\n\t\t\t\t: [],\n\t\t),\n\t\t...diagram.edges.flatMap((edge) => renderEdgeLabel(edge)),\n\t\t\"</svg>\",\n\t];\n\n\treturn `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction renderGroup(group: CoordinatedGroup): string {\n\treturn `<rect class=\"group\" data-id=\"${escapeAttribute(group.id)}\" x=\"${formatNumber(group.box.x)}\" y=\"${formatNumber(group.box.y)}\" width=\"${formatNumber(group.box.width)}\" height=\"${formatNumber(group.box.height)}\" fill=\"${GROUP_FILL}\" stroke=\"${STROKE}\" stroke-dasharray=\"6 4\"/>`;\n}\n\nfunction renderNode(node: CoordinatedNode): string {\n\tconst fill = node.style?.fill ?? NODE_FILL;\n\tconst stroke = node.style?.stroke ?? STROKE;\n\tconst common = `class=\"node node-${node.shape}\" data-id=\"${escapeAttribute(node.id)}\" fill=\"${escapeAttribute(fill)}\" stroke=\"${escapeAttribute(stroke)}\"`;\n\tswitch (node.shape) {\n\t\tcase \"rectangle\":\n\t\t\treturn renderRect(node.box, common);\n\t\tcase \"rounded-rectangle\":\n\t\t\treturn renderRect(node.box, `${common} rx=\"8\" ry=\"8\"`);\n\t\tcase \"ellipse\":\n\t\t\treturn `<ellipse ${common} cx=\"${formatNumber(node.box.x + node.box.width / 2)}\" cy=\"${formatNumber(node.box.y + node.box.height / 2)}\" rx=\"${formatNumber(node.box.width / 2)}\" ry=\"${formatNumber(node.box.height / 2)}\"/>`;\n\t\tcase \"diamond\":\n\t\tcase \"parallelogram\":\n\t\tcase \"hexagon\":\n\t\t\treturn `<polygon ${common} points=\"${formatPoints(shapePoints(node.shape, node.box))}\"/>`;\n\t\tcase \"cylinder\":\n\t\t\treturn `<path ${common} d=\"${formatCylinderPath(node.box)}\"/>`;\n\t}\n}\n\nfunction renderFrame(frame: CoordinatedFrame): string {\n\tconst stroke = frame.style?.stroke ?? \"#6b7280\";\n\tconst fill = frame.style?.fill ?? \"transparent\";\n\treturn [\n\t\t`<g class=\"sysml-frame\" data-kind=\"${escapeAttribute(frame.kind)}\">`,\n\t\t` <rect class=\"sysml-frame-border\" x=\"${formatNumber(frame.box.x)}\" y=\"${formatNumber(frame.box.y)}\" width=\"${formatNumber(frame.box.width)}\" height=\"${formatNumber(frame.box.height)}\" fill=\"${escapeAttribute(fill)}\" stroke=\"${escapeAttribute(stroke)}\"/>`,\n\t\t` <path class=\"sysml-title-tab\" d=\"M ${formatNumber(frame.titleBox.x)} ${formatNumber(frame.titleBox.y + frame.titleBox.height)} L ${formatNumber(frame.titleBox.x)} ${formatNumber(frame.titleBox.y)} L ${formatNumber(frame.titleBox.x + frame.titleBox.width - 16)} ${formatNumber(frame.titleBox.y)} L ${formatNumber(frame.titleBox.x + frame.titleBox.width)} ${formatNumber(frame.titleBox.y + frame.titleBox.height)} Z\" fill=\"#f3f4f6\" stroke=\"${escapeAttribute(stroke)}\"/>`,\n\t\t` <text class=\"sysml-title-tab-label\" x=\"${formatNumber(frame.titleBox.x + 8)}\" y=\"${formatNumber(frame.titleBox.y + frame.titleBox.height / 2)}\" dominant-baseline=\"middle\" font-family=\"${FONT_FAMILY}\" font-size=\"12\" fill=\"#111827\">${escapeXml(frame.titleTab)}</text>`,\n\t\t\"</g>\",\n\t].join(\"\\n\");\n}\n\nfunction renderSwimlane(swimlane: Swimlane): string[] {\n\tif (swimlane.box === undefined) {\n\t\treturn [];\n\t}\n\tconst lines = [\n\t\t` <g class=\"swimlane\" data-id=\"${escapeAttribute(swimlane.id)}\">`,\n\t\t` <rect class=\"swimlane-frame\" x=\"${formatNumber(swimlane.box.x)}\" y=\"${formatNumber(swimlane.box.y)}\" width=\"${formatNumber(swimlane.box.width)}\" height=\"${formatNumber(swimlane.box.height)}\" fill=\"#ffffff\" stroke=\"${STROKE}\"/>`,\n\t];\n\tfor (const lane of swimlane.lanes) {\n\t\tif (lane.box === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tlines.push(\n\t\t\t` <rect class=\"swimlane-lane\" data-lane=\"${escapeAttribute(`${swimlane.id}.${lane.id}`)}\" x=\"${formatNumber(lane.box.x)}\" y=\"${formatNumber(lane.box.y)}\" width=\"${formatNumber(lane.box.width)}\" height=\"${formatNumber(lane.box.height)}\" fill=\"none\" stroke=\"${STROKE}\"/>`,\n\t\t);\n\t\tif (lane.headerBox !== undefined) {\n\t\t\tlines.push(\n\t\t\t\t` <rect class=\"swimlane-header\" data-lane-header=\"${escapeAttribute(`${swimlane.id}.${lane.id}`)}\" x=\"${formatNumber(lane.headerBox.x)}\" y=\"${formatNumber(lane.headerBox.y)}\" width=\"${formatNumber(lane.headerBox.width)}\" height=\"${formatNumber(lane.headerBox.height)}\" fill=\"#f3f4f6\" stroke=\"${STROKE}\"/>`,\n\t\t\t);\n\t\t}\n\t\tif (lane.contentBox !== undefined) {\n\t\t\tlines.push(\n\t\t\t\t` <rect class=\"swimlane-content\" data-lane-content=\"${escapeAttribute(`${swimlane.id}.${lane.id}`)}\" x=\"${formatNumber(lane.contentBox.x)}\" y=\"${formatNumber(lane.contentBox.y)}\" width=\"${formatNumber(lane.contentBox.width)}\" height=\"${formatNumber(lane.contentBox.height)}\" fill=\"none\" stroke=\"none\"/>`,\n\t\t\t);\n\t\t}\n\t\tif (lane.label?.text !== undefined) {\n\t\t\tconst labelBox = lane.headerBox ?? lane.box;\n\t\t\tlines.push(renderSwimlaneLabel(swimlane, lane.label.text, labelBox));\n\t\t}\n\t}\n\tlines.push(\" </g>\");\n\treturn lines;\n}\n\nfunction renderSwimlaneLabel(\n\tswimlane: Swimlane,\n\ttext: string,\n\tlabelBox: Box,\n): string {\n\tconst x = labelBox.x + labelBox.width / 2;\n\tconst y = labelBox.y + labelBox.height / 2;\n\tconst transform =\n\t\tswimlane.orientation === \"horizontal\"\n\t\t\t? ` transform=\"rotate(-90 ${formatNumber(x)} ${formatNumber(y)})\"`\n\t\t\t: \"\";\n\treturn ` <text class=\"swimlane-label\" x=\"${formatNumber(x)}\" y=\"${formatNumber(y)}\" text-anchor=\"middle\" dominant-baseline=\"middle\"${transform} font-family=\"${FONT_FAMILY}\" font-size=\"12\" fill=\"#111827\">${escapeXml(text)}</text>`;\n}\n\nfunction renderPorts(node: CoordinatedNode): string[] {\n\treturn (node.ports ?? []).flatMap((port) => [\n\t\t` <rect class=\"port\" data-kind=\"${escapeAttribute(port.kind)}\" data-port=\"${escapeAttribute(`${node.id}.${port.id}`)}\" x=\"${formatNumber(port.box.x)}\" y=\"${formatNumber(port.box.y)}\" width=\"${formatNumber(port.box.width)}\" height=\"${formatNumber(port.box.height)}\" fill=\"${escapeAttribute(port.style?.fill ?? \"#d9ead3\")}\" stroke=\"${escapeAttribute(port.style?.stroke ?? STROKE)}\"/>`,\n\t\t...(port.label?.text === undefined\n\t\t\t? []\n\t\t\t: [\n\t\t\t\t\t` <text class=\"port-label\" data-for=\"${escapeAttribute(`${node.id}.${port.id}`)}\" x=\"${formatNumber(portLabelX(port.anchor.x, port.side))}\" y=\"${formatNumber(port.anchor.y - 8)}\" text-anchor=\"${port.side === \"left\" ? \"end\" : \"start\"}\" font-family=\"${FONT_FAMILY}\" font-size=\"10\" fill=\"#111827\">${escapeXml(port.label.text)}</text>`,\n\t\t\t\t]),\n\t]);\n}\n\nfunction renderCompartments(node: CoordinatedNode): string[] {\n\tconst compartments = node.compartments;\n\tif (compartments === undefined) {\n\t\treturn [];\n\t}\n\tconst rows = [\n\t\t...(compartments.stereotype === undefined\n\t\t\t? []\n\t\t\t: [{ className: \"stereotype\", text: compartments.stereotype }]),\n\t\t{\n\t\t\tclassName: \"name\",\n\t\t\ttext: compartments.name ?? node.label?.text ?? node.id,\n\t\t},\n\t\t...(compartments.properties ?? []).map((text) => ({\n\t\t\tclassName: \"properties\",\n\t\t\ttext,\n\t\t})),\n\t\t...(compartments.constraints ?? []).map((text) => ({\n\t\t\tclassName: \"constraints\",\n\t\t\ttext,\n\t\t})),\n\t];\n\tconst lineHeight = 16;\n\tconst lines = [\n\t\t` <g class=\"compartment\" data-for=\"${escapeAttribute(node.id)}\">`,\n\t];\n\tfor (let index = 0; index < rows.length; index += 1) {\n\t\tconst row = rows[index];\n\t\tif (row === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst y = node.box.y + 18 + index * lineHeight;\n\t\tif (index > 1) {\n\t\t\tlines.push(\n\t\t\t\t` <line class=\"compartment-separator\" x1=\"${formatNumber(node.box.x)}\" y1=\"${formatNumber(y - 12)}\" x2=\"${formatNumber(node.box.x + node.box.width)}\" y2=\"${formatNumber(y - 12)}\" stroke=\"${STROKE}\"/>`,\n\t\t\t);\n\t\t}\n\t\tlines.push(\n\t\t\t` <text class=\"compartment-${row.className}\" x=\"${formatNumber(node.box.x + node.box.width / 2)}\" y=\"${formatNumber(y)}\" text-anchor=\"middle\" font-family=\"${FONT_FAMILY}\" font-size=\"11\" fill=\"#111827\">${escapeXml(row.text)}</text>`,\n\t\t);\n\t}\n\tlines.push(\" </g>\");\n\treturn lines;\n}\n\nfunction portLabelX(x: number, side: string): number {\n\tif (side === \"left\") {\n\t\treturn x - 8;\n\t}\n\tif (side === \"right\") {\n\t\treturn x + 8;\n\t}\n\treturn x + 8;\n}\n\nfunction renderRect(box: Box, attributes: string): string {\n\treturn `<rect ${attributes} x=\"${formatNumber(box.x)}\" y=\"${formatNumber(box.y)}\" width=\"${formatNumber(box.width)}\" height=\"${formatNumber(box.height)}\"/>`;\n}\n\nfunction renderLabel(\n\tlabel: Label | undefined,\n\tbox: Box,\n\titem: CoordinatedNode | CoordinatedGroup,\n): string[] {\n\tconst labelLayout = item.labelLayout;\n\tif (labelLayout?.lines !== undefined && labelLayout.lines.length > 0) {\n\t\tconst offset = { x: box.x, y: box.y };\n\t\treturn [\n\t\t\t` <text class=\"label\" data-for=\"${escapeAttribute(item.id)}\" font-family=\"${FONT_FAMILY}\" font-size=\"${formatNumber(labelLayout.font.fontSize)}\" fill=\"#111827\">`,\n\t\t\t...labelLayout.lines.map(\n\t\t\t\t(line) =>\n\t\t\t\t\t` <tspan x=\"${formatNumber(offset.x + line.box.x)}\" y=\"${formatNumber(offset.y + line.baselineY)}\">${escapeXml(line.text)}</tspan>`,\n\t\t\t),\n\t\t\t\" </text>\",\n\t\t];\n\t}\n\n\tif (label?.text === undefined) {\n\t\treturn [];\n\t}\n\n\treturn [\n\t\t` <text class=\"label\" data-for=\"${escapeAttribute(item.id)}\" x=\"${formatNumber(box.x + box.width / 2)}\" y=\"${formatNumber(box.y + box.height / 2)}\" text-anchor=\"middle\" dominant-baseline=\"middle\" font-family=\"${FONT_FAMILY}\" font-size=\"14\" fill=\"#111827\">${escapeXml(label.text)}</text>`,\n\t];\n}\n\nfunction renderEdgePath(edge: CoordinatedEdge): string | undefined {\n\tif (edge.points.length < 2) {\n\t\treturn undefined;\n\t}\n\n\tconst dash = edge.style === \"dashed\" ? ' stroke-dasharray=\"6 4\"' : \"\";\n\treturn `<path class=\"edge\" data-id=\"${escapeAttribute(edge.id)}\" d=\"${formatPath(pathPointsBeforeArrowhead(edge.points))}\" fill=\"none\" stroke=\"${EDGE_STROKE}\" stroke-width=\"1.5\"${dash}/>`;\n}\n\nfunction renderEdgeLabel(edge: CoordinatedEdge): string[] {\n\tif (edge.label?.text === undefined || edge.points.length < 2) {\n\t\treturn [];\n\t}\n\n\tconst placement = labelPlacementOnPolyline(edge.points);\n\tif (placement === undefined) {\n\t\treturn [];\n\t}\n\n\treturn [\n\t\t` <text class=\"edge-label\" data-for=\"${escapeAttribute(edge.id)}\" x=\"${formatNumber(placement.x)}\" y=\"${formatNumber(placement.y)}\" text-anchor=\"middle\" dominant-baseline=\"middle\" font-family=\"${FONT_FAMILY}\" font-size=\"12\" fill=\"#111827\">${escapeXml(edge.label.text)}</text>`,\n\t];\n}\n\nfunction renderArrowhead(edge: CoordinatedEdge): string {\n\tconst arrowhead = computeArrowhead(edge.points);\n\tconst fill = edge.arrowhead === \"hollowTriangle\" ? \"none\" : EDGE_STROKE;\n\treturn `<polygon class=\"edge-arrowhead\" data-edge=\"${escapeAttribute(edge.id)}\" points=\"${formatPoints([arrowhead.tip, arrowhead.left, arrowhead.right])}\" fill=\"${fill}\" stroke=\"${EDGE_STROKE}\"/>`;\n}\n\nfunction labelPlacementOnPolyline(points: readonly Point[]): Point | undefined {\n\tconst segments = nonZeroSegments(points);\n\tconst totalLength = segments.reduce(\n\t\t(sum, segment) => sum + segment.length,\n\t\t0,\n\t);\n\tif (totalLength <= 0) {\n\t\treturn undefined;\n\t}\n\n\tlet remaining = totalLength / 2;\n\tfor (const segment of segments) {\n\t\tif (remaining <= segment.length) {\n\t\t\tconst ratio = remaining / segment.length;\n\t\t\tconst x = segment.start.x + (segment.end.x - segment.start.x) * ratio;\n\t\t\tconst y = segment.start.y + (segment.end.y - segment.start.y) * ratio;\n\t\t\tconst offset = labelOffset(segment);\n\t\t\treturn { x: x + offset.x, y: y + offset.y };\n\t\t}\n\t\tremaining -= segment.length;\n\t}\n\n\tconst last = segments.at(-1);\n\tif (last === undefined) {\n\t\treturn undefined;\n\t}\n\tconst offset = labelOffset(last);\n\treturn { x: last.end.x + offset.x, y: last.end.y + offset.y };\n}\n\nfunction nonZeroSegments(points: readonly Point[]): Array<{\n\tstart: Point;\n\tend: Point;\n\tlength: number;\n}> {\n\tconst segments: Array<{ start: Point; end: Point; length: number }> = [];\n\tfor (let index = 0; index < points.length - 1; index += 1) {\n\t\tconst start = points[index];\n\t\tconst end = points[index + 1];\n\t\tif (start === undefined || end === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst length = Math.hypot(end.x - start.x, end.y - start.y);\n\t\tif (length > 0) {\n\t\t\tsegments.push({ start, end, length });\n\t\t}\n\t}\n\treturn segments;\n}\n\nfunction labelOffset(segment: {\n\tstart: Point;\n\tend: Point;\n\tlength: number;\n}): Point {\n\tconst offset = 10;\n\tconst dx = segment.end.x - segment.start.x;\n\tconst dy = segment.end.y - segment.start.y;\n\treturn {\n\t\tx: (-dy / segment.length) * offset,\n\t\ty: (dx / segment.length) * offset,\n\t};\n}\n\nfunction pathPointsBeforeArrowhead(points: readonly Point[]): Point[] {\n\tconst arrowhead = computeArrowhead(points);\n\tconst base = {\n\t\tx: (arrowhead.left.x + arrowhead.right.x) / 2,\n\t\ty: (arrowhead.left.y + arrowhead.right.y) / 2,\n\t};\n\treturn [...points.slice(0, -1), base];\n}\n\nfunction shapePoints(\n\tshape: Exclude<\n\t\tNodeShape,\n\t\t\"rectangle\" | \"rounded-rectangle\" | \"ellipse\" | \"cylinder\"\n\t>,\n\tbox: Box,\n): Point[] {\n\tconst left = box.x;\n\tconst right = box.x + box.width;\n\tconst top = box.y;\n\tconst bottom = box.y + box.height;\n\tconst midX = box.x + box.width / 2;\n\tconst midY = box.y + box.height / 2;\n\tconst skew = Math.min(box.width * 0.2, 24);\n\n\tswitch (shape) {\n\t\tcase \"diamond\":\n\t\t\treturn [\n\t\t\t\t{ x: midX, y: top },\n\t\t\t\t{ x: right, y: midY },\n\t\t\t\t{ x: midX, y: bottom },\n\t\t\t\t{ x: left, y: midY },\n\t\t\t];\n\t\tcase \"parallelogram\":\n\t\t\treturn [\n\t\t\t\t{ x: left + skew, y: top },\n\t\t\t\t{ x: right, y: top },\n\t\t\t\t{ x: right - skew, y: bottom },\n\t\t\t\t{ x: left, y: bottom },\n\t\t\t];\n\t\tcase \"hexagon\": {\n\t\t\tconst inset = Math.min(box.width * 0.2, 24);\n\t\t\treturn [\n\t\t\t\t{ x: left + inset, y: top },\n\t\t\t\t{ x: right - inset, y: top },\n\t\t\t\t{ x: right, y: midY },\n\t\t\t\t{ x: right - inset, y: bottom },\n\t\t\t\t{ x: left + inset, y: bottom },\n\t\t\t\t{ x: left, y: midY },\n\t\t\t];\n\t\t}\n\t}\n}\n\nfunction formatCylinderPath(box: Box): string {\n\tconst rx = box.width / 2;\n\tconst ry = Math.min(12, box.height / 4);\n\tconst left = box.x;\n\tconst right = box.x + box.width;\n\tconst top = box.y;\n\tconst bottom = box.y + box.height;\n\tconst midX = box.x + rx;\n\n\treturn [\n\t\t`M ${formatNumber(left)} ${formatNumber(top + ry)}`,\n\t\t`A ${formatNumber(rx)} ${formatNumber(ry)} 0 0 1 ${formatNumber(right)} ${formatNumber(top + ry)}`,\n\t\t`L ${formatNumber(right)} ${formatNumber(bottom - ry)}`,\n\t\t`A ${formatNumber(rx)} ${formatNumber(ry)} 0 0 1 ${formatNumber(left)} ${formatNumber(bottom - ry)}`,\n\t\t\"Z\",\n\t\t`M ${formatNumber(left)} ${formatNumber(top + ry)}`,\n\t\t`A ${formatNumber(rx)} ${formatNumber(ry)} 0 0 0 ${formatNumber(right)} ${formatNumber(top + ry)}`,\n\t\t`M ${formatNumber(left)} ${formatNumber(bottom - ry)}`,\n\t\t`A ${formatNumber(rx)} ${formatNumber(ry)} 0 0 0 ${formatNumber(right)} ${formatNumber(bottom - ry)}`,\n\t\t`M ${formatNumber(midX)} ${formatNumber(top)}`,\n\t].join(\" \");\n}\n\nfunction formatPath(points: readonly Point[]): string {\n\treturn points\n\t\t.map((point, index) => {\n\t\t\tconst command = index === 0 ? \"M\" : \"L\";\n\t\t\treturn `${command} ${formatNumber(point.x)} ${formatNumber(point.y)}`;\n\t\t})\n\t\t.join(\" \");\n}\n\nfunction formatPoints(points: readonly Point[]): string {\n\treturn points\n\t\t.map((point) => `${formatNumber(point.x)},${formatNumber(point.y)}`)\n\t\t.join(\" \");\n}\n\nfunction formatBoxViewBox(box: Box): string {\n\treturn `${formatNumber(box.x)} ${formatNumber(box.y)} ${formatNumber(box.width)} ${formatNumber(box.height)}`;\n}\n\nfunction formatNumber(value: number): string {\n\tif (!Number.isFinite(value)) {\n\t\tthrow new TypeError(\"SVG export requires finite coordinated numbers\");\n\t}\n\treturn Number.isInteger(value)\n\t\t? String(value)\n\t\t: value.toFixed(3).replace(/0+$/, \"\").replace(/\\.$/, \"\");\n}\n\nfunction escapeXml(value: string): string {\n\treturn value\n\t\t.replaceAll(\"&\", \"&amp;\")\n\t\t.replaceAll(\"<\", \"&lt;\")\n\t\t.replaceAll(\">\", \"&gt;\");\n}\n\nfunction escapeAttribute(value: string): string {\n\treturn escapeXml(value).replaceAll('\"', \"&quot;\");\n}\n\nfunction indent(value: string): string {\n\treturn ` ${value}`;\n}\n","import type { EdgeLabel, GraphLabel, NodeLabel } from \"@dagrejs/dagre\";\nimport { Graph, layout } from \"@dagrejs/dagre\";\nimport type { Diagnostic } from \"../ir/diagnostics.js\";\nimport type { Box } from \"../ir/geometry.js\";\nimport type {\n\tDagreLayoutInput,\n\tDagreLayoutOptions,\n\tInitialLayoutResult,\n} from \"./types.js\";\n\nconst DEFAULT_OPTIONS: DagreLayoutOptions = {\n\tnodesep: 80,\n\tranksep: 100,\n\tedgesep: 40,\n\tmarginx: 0,\n\tmarginy: 0,\n\tranker: \"network-simplex\",\n};\n\nexport function runDagreInitialLayout(\n\tinput: DagreLayoutInput,\n): InitialLayoutResult {\n\tconst diagnostics: Diagnostic[] = [];\n\tconst boxes = new Map<string, Box>();\n\tconst validNodeIds = new Set<string>();\n\tconst graph = new Graph<GraphLabel, NodeLabel, EdgeLabel>({\n\t\tdirected: true,\n\t\tmultigraph: true,\n\t\tcompound: false,\n\t});\n\tconst options = { ...DEFAULT_OPTIONS, ...input.options };\n\n\tgraph.setGraph({\n\t\trankdir: input.direction,\n\t\tnodesep: options.nodesep,\n\t\tranksep: options.ranksep,\n\t\tedgesep: options.edgesep,\n\t\tmarginx: options.marginx,\n\t\tmarginy: options.marginy,\n\t\tranker: options.ranker,\n\t});\n\tgraph.setDefaultEdgeLabel(() => ({}));\n\n\tfor (const node of input.nodes) {\n\t\tif (\n\t\t\t!isValidDimension(node.size.width) ||\n\t\t\t!isValidDimension(node.size.height)\n\t\t) {\n\t\t\tdiagnostics.push({\n\t\t\t\tseverity: \"error\",\n\t\t\t\tcode: \"layout.node-size.invalid\",\n\t\t\t\tmessage: `Node ${node.id} has invalid layout dimensions.`,\n\t\t\t\tpath: [\"nodes\", node.id, \"size\"],\n\t\t\t\tdetail: { nodeId: node.id },\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalidNodeIds.add(node.id);\n\t\tgraph.setNode(node.id, {\n\t\t\twidth: node.size.width,\n\t\t\theight: node.size.height,\n\t\t});\n\t}\n\n\tfor (const edge of input.edges) {\n\t\tif (!validNodeIds.has(edge.sourceId) || !validNodeIds.has(edge.targetId)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tseverity: \"error\",\n\t\t\t\tcode: \"layout.edge-reference.missing\",\n\t\t\t\tmessage: `Edge ${edge.id} references a missing layout node.`,\n\t\t\t\tpath: [\"edges\", edge.id],\n\t\t\t\tdetail: {\n\t\t\t\t\tedgeId: edge.id,\n\t\t\t\t\tsourceId: edge.sourceId,\n\t\t\t\t\ttargetId: edge.targetId,\n\t\t\t\t},\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tgraph.setEdge(\n\t\t\tedge.sourceId,\n\t\t\tedge.targetId,\n\t\t\t{ minlen: 1, weight: 1 },\n\t\t\tedge.id,\n\t\t);\n\t}\n\n\tlayout(graph);\n\n\tfor (const node of input.nodes) {\n\t\tif (!validNodeIds.has(node.id)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst label = graph.node(node.id);\n\t\tconst centerX = label?.x;\n\t\tconst centerY = label?.y;\n\t\tif (\n\t\t\ttypeof centerX !== \"number\" ||\n\t\t\ttypeof centerY !== \"number\" ||\n\t\t\t!Number.isFinite(centerX) ||\n\t\t\t!Number.isFinite(centerY)\n\t\t) {\n\t\t\tdiagnostics.push({\n\t\t\t\tseverity: \"error\",\n\t\t\t\tcode: \"layout.node-position.invalid\",\n\t\t\t\tmessage: `Dagre returned an invalid position for node ${node.id}.`,\n\t\t\t\tpath: [\"nodes\", node.id],\n\t\t\t\tdetail: { nodeId: node.id },\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tboxes.set(node.id, {\n\t\t\tx: centerX - node.size.width / 2,\n\t\t\ty: centerY - node.size.height / 2,\n\t\t\twidth: node.size.width,\n\t\t\theight: node.size.height,\n\t\t});\n\t}\n\n\treturn { boxes, diagnostics };\n}\n\nfunction isValidDimension(value: number): boolean {\n\treturn Number.isFinite(value) && value >= 0;\n}\n","import { intersectsAabb, validateBox } from \"../geometry/boxes.js\";\nimport { getEdgePort } from \"../geometry/shapes.js\";\nimport type { Diagnostic } from \"../ir/diagnostics.js\";\nimport type {\n\tAnchorName,\n\tBox,\n\tDiagramDirection,\n\tPoint,\n} from \"../ir/geometry.js\";\nimport type { RouteEdgeInput, RouteEdgeResult } from \"./types.js\";\n\nexport function routeEdge(input: RouteEdgeInput): RouteEdgeResult {\n\tconst diagnostics: Diagnostic[] = [];\n\tconst defaultAnchors = defaultAnchorsForGeometry(\n\t\tinput.source.box,\n\t\tinput.target.box,\n\t\tinput.direction,\n\t);\n\tconst source = getEdgePort(\n\t\tinput.source,\n\t\tinput.target.center,\n\t\tinput.sourceAnchor ?? defaultAnchors.sourceAnchor,\n\t);\n\tconst target = getEdgePort(\n\t\tinput.target,\n\t\tinput.source.center,\n\t\tinput.targetAnchor ?? defaultAnchors.targetAnchor,\n\t);\n\n\tif ((input.kind ?? \"orthogonal\") === \"straight\") {\n\t\treturn { points: simplifyRoute([source, target]), diagnostics };\n\t}\n\n\tconst candidates = orthogonalCandidates(source, target, input.direction);\n\tcandidates.push(\n\t\t...expandedObstacleCandidates(\n\t\t\tsource,\n\t\t\ttarget,\n\t\t\tinput.direction,\n\t\t\tinput.obstacles ?? [],\n\t\t),\n\t);\n\tfor (const candidate of candidates) {\n\t\tif (!routeIntersectsObstacles(candidate, input.obstacles ?? [])) {\n\t\t\treturn { points: simplifyRoute(candidate), diagnostics };\n\t\t}\n\t}\n\n\tdiagnostics.push({\n\t\tseverity: \"warning\",\n\t\tcode: \"routing.obstacle.unavoidable\",\n\t\tmessage: \"No bounded orthogonal route candidate avoided all obstacles.\",\n\t});\n\n\treturn {\n\t\tpoints: simplifyRoute(candidates[0] ?? [source, target]),\n\t\tdiagnostics,\n\t};\n}\n\nexport function simplifyRoute(points: readonly Point[]): Point[] {\n\tconst withoutDuplicates: Point[] = [];\n\tfor (const point of points) {\n\t\tconst previous = withoutDuplicates.at(-1);\n\t\tif (\n\t\t\tprevious === undefined ||\n\t\t\tprevious.x !== point.x ||\n\t\t\tprevious.y !== point.y\n\t\t) {\n\t\t\twithoutDuplicates.push({ ...point });\n\t\t}\n\t}\n\n\tconst simplified: Point[] = [];\n\tfor (const point of withoutDuplicates) {\n\t\tconst previous = simplified.at(-1);\n\t\tconst beforePrevious = simplified.at(-2);\n\t\tif (\n\t\t\tprevious !== undefined &&\n\t\t\tbeforePrevious !== undefined &&\n\t\t\tareCollinear(beforePrevious, previous, point)\n\t\t) {\n\t\t\tsimplified[simplified.length - 1] = { ...point };\n\t\t} else {\n\t\t\tsimplified.push({ ...point });\n\t\t}\n\t}\n\n\treturn simplified;\n}\n\nfunction orthogonalCandidates(\n\tsource: Point,\n\ttarget: Point,\n\tdirection: RouteEdgeInput[\"direction\"],\n): Point[][] {\n\tconst midpointX = (source.x + target.x) / 2;\n\tconst midpointY = (source.y + target.y) / 2;\n\tconst candidates: Point[][] = [];\n\n\tif (direction === \"TB\" || direction === \"BT\") {\n\t\tcandidates.push([\n\t\t\tsource,\n\t\t\t{ x: source.x, y: midpointY },\n\t\t\t{ x: target.x, y: midpointY },\n\t\t\ttarget,\n\t\t]);\n\t} else {\n\t\tcandidates.push([\n\t\t\tsource,\n\t\t\t{ x: midpointX, y: source.y },\n\t\t\t{ x: midpointX, y: target.y },\n\t\t\ttarget,\n\t\t]);\n\t}\n\n\tcandidates.push(\n\t\t[source, { x: target.x, y: source.y }, target],\n\t\t[source, { x: source.x, y: target.y }, target],\n\t);\n\n\treturn candidates;\n}\n\nfunction defaultSourceAnchor(direction: DiagramDirection): AnchorName {\n\tswitch (direction) {\n\t\tcase \"LR\":\n\t\t\treturn \"right\";\n\t\tcase \"RL\":\n\t\t\treturn \"left\";\n\t\tcase \"TB\":\n\t\t\treturn \"bottom\";\n\t\tcase \"BT\":\n\t\t\treturn \"top\";\n\t}\n}\n\nfunction defaultAnchorsForGeometry(\n\tsource: Box,\n\ttarget: Box,\n\tdirection: DiagramDirection,\n): { sourceAnchor: AnchorName; targetAnchor: AnchorName } {\n\tconst dx = target.x + target.width / 2 - (source.x + source.width / 2);\n\tconst dy = target.y + target.height / 2 - (source.y + source.height / 2);\n\n\tif (Math.abs(dy) > Math.abs(dx)) {\n\t\treturn dy >= 0\n\t\t\t? { sourceAnchor: \"bottom\", targetAnchor: \"top\" }\n\t\t\t: { sourceAnchor: \"top\", targetAnchor: \"bottom\" };\n\t}\n\n\tif (Math.abs(dx) > 0) {\n\t\treturn dx >= 0\n\t\t\t? { sourceAnchor: \"right\", targetAnchor: \"left\" }\n\t\t\t: { sourceAnchor: \"left\", targetAnchor: \"right\" };\n\t}\n\n\treturn {\n\t\tsourceAnchor: defaultSourceAnchor(direction),\n\t\ttargetAnchor: defaultTargetAnchor(direction),\n\t};\n}\n\nfunction defaultTargetAnchor(direction: DiagramDirection): AnchorName {\n\tswitch (direction) {\n\t\tcase \"LR\":\n\t\t\treturn \"left\";\n\t\tcase \"RL\":\n\t\t\treturn \"right\";\n\t\tcase \"TB\":\n\t\t\treturn \"top\";\n\t\tcase \"BT\":\n\t\t\treturn \"bottom\";\n\t}\n}\n\nfunction expandedObstacleCandidates(\n\tsource: Point,\n\ttarget: Point,\n\tdirection: RouteEdgeInput[\"direction\"],\n\tobstacles: readonly Box[],\n): Point[][] {\n\tif (obstacles.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst margin = 16;\n\tconst candidates: Point[][] = [];\n\n\tif (direction === \"TB\" || direction === \"BT\") {\n\t\tconst lanes = sortedUniqueLanes(\n\t\t\tobstacles.flatMap((obstacle) => [\n\t\t\t\tobstacle.x - margin,\n\t\t\t\tobstacle.x + obstacle.width + margin,\n\t\t\t]),\n\t\t\t(source.x + target.x) / 2,\n\t\t);\n\n\t\tfor (const laneX of lanes) {\n\t\t\tcandidates.push([\n\t\t\t\tsource,\n\t\t\t\t{ x: laneX, y: source.y },\n\t\t\t\t{ x: laneX, y: target.y },\n\t\t\t\ttarget,\n\t\t\t]);\n\t\t}\n\t} else {\n\t\tconst lanes = sortedUniqueLanes(\n\t\t\tobstacles.flatMap((obstacle) => [\n\t\t\t\tobstacle.y - margin,\n\t\t\t\tobstacle.y + obstacle.height + margin,\n\t\t\t]),\n\t\t\t(source.y + target.y) / 2,\n\t\t);\n\n\t\tfor (const laneY of lanes) {\n\t\t\tcandidates.push([\n\t\t\t\tsource,\n\t\t\t\t{ x: source.x, y: laneY },\n\t\t\t\t{ x: target.x, y: laneY },\n\t\t\t\ttarget,\n\t\t\t]);\n\t\t}\n\t}\n\n\treturn candidates;\n}\n\nfunction sortedUniqueLanes(\n\tlanes: readonly number[],\n\tmidpoint: number,\n): number[] {\n\treturn [...new Set(lanes)]\n\t\t.filter((lane) => Number.isFinite(lane))\n\t\t.sort((left, right) => {\n\t\t\tconst distance = Math.abs(left - midpoint) - Math.abs(right - midpoint);\n\t\t\treturn distance === 0 ? left - right : distance;\n\t\t});\n}\n\nfunction routeIntersectsObstacles(\n\tpoints: readonly Point[],\n\tobstacles: readonly Box[],\n): boolean {\n\tfor (let index = 0; index < points.length - 1; index += 1) {\n\t\tconst a = points[index];\n\t\tconst b = points[index + 1];\n\t\tif (a === undefined || b === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst segment = segmentBox(a, b);\n\t\tfor (const obstacle of obstacles) {\n\t\t\tvalidateBox(obstacle);\n\t\t\tif (intersectsAabb(segment, obstacle)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false;\n}\n\nfunction segmentBox(a: Point, b: Point): Box {\n\tconst minX = Math.min(a.x, b.x);\n\tconst minY = Math.min(a.y, b.y);\n\treturn {\n\t\tx: minX,\n\t\ty: minY,\n\t\twidth: Math.max(1, Math.abs(a.x - b.x)),\n\t\theight: Math.max(1, Math.abs(a.y - b.y)),\n\t};\n}\n\nfunction areCollinear(a: Point, b: Point, c: Point): boolean {\n\treturn (a.x === b.x && b.x === c.x) || (a.y === b.y && b.y === c.y);\n}\n","import { applyLayoutConstraints } from \"../constraints/index.js\";\nimport {\n\tcomputeContainerGeometry,\n\tcomputeShapeGeometry,\n\tintersectsAabb,\n\tunionBoxes,\n} from \"../geometry/index.js\";\nimport type { Constraint } from \"../ir/constraints.js\";\nimport type { Diagnostic } from \"../ir/diagnostics.js\";\nimport type { CoordinatedDiagram, NormalizedDiagram } from \"../ir/diagram.js\";\nimport type {\n\tCoordinatedEdge,\n\tCoordinatedFrame,\n\tCoordinatedGroup,\n\tCoordinatedNode,\n\tCoordinatedPort,\n\tNormalizedEdge,\n\tNormalizedGroup,\n\tNormalizedNode,\n\tSwimlane,\n} from \"../ir/elements.js\";\nimport type { Box, Insets, Point } from \"../ir/geometry.js\";\nimport { runDagreInitialLayout } from \"../layout/index.js\";\nimport { type RouteKind, routeEdge } from \"../routing/index.js\";\n\nexport interface SolveDiagramOptions {\n\trouteKind?: RouteKind;\n\tobstacleMargin?: number | Insets;\n\toverlapSpacing?: number;\n\tportShifting?: PortShiftingOptions;\n}\n\nexport interface PortShiftingOptions {\n\tenabled?: boolean;\n\tspacing?: number;\n}\n\ninterface SwimlaneContractLayout {\n\tbox: Box;\n\tslotWidth: number;\n\tslotHeight: number;\n}\n\ninterface SwimlaneContractResult {\n\tlayouts: Map<string, SwimlaneContractLayout>;\n\tdiagnostics: Diagnostic[];\n\tmovedChildIds: Set<string>;\n}\n\ninterface LayoutLockLike {\n\tnodeId: string;\n\tsource: string;\n}\n\nexport function solveDiagram(\n\tdiagram: NormalizedDiagram,\n\toptions: SolveDiagramOptions = {},\n): CoordinatedDiagram {\n\tconst diagnostics: Diagnostic[] = [...diagram.diagnostics];\n\tconst nodes = stableById(diagram.nodes);\n\tconst edges = stableById(diagram.edges);\n\tconst groups = stableById(diagram.groups);\n\tconst constraints = stableByConstraintId(diagram.constraints);\n\tconst layout = runDagreInitialLayout({\n\t\tdirection: diagram.direction,\n\t\tnodes: nodes.map((node) => ({ id: node.id, size: node.size })),\n\t\tedges: edges.map((edge) => ({\n\t\t\tid: edge.id,\n\t\t\tsourceId: edge.source.nodeId,\n\t\t\ttargetId: edge.target.nodeId,\n\t\t})),\n\t});\n\n\tdiagnostics.push(...layout.diagnostics);\n\n\tconst constrained = applyLayoutConstraints({\n\t\tdirection: diagram.direction,\n\t\toverlapSpacing: options?.overlapSpacing ?? 40,\n\t\tboxes: layout.boxes,\n\t\tnodes,\n\t\tgroups,\n\t\tconstraints,\n\t});\n\n\tdiagnostics.push(...constrained.diagnostics);\n\tconst swimlaneContracts = applySwimlaneLayoutContracts(\n\t\tdiagram.swimlanes ?? [],\n\t\tconstraints,\n\t\tedges,\n\t\tisTopToBottomReadingDirection(diagram.metadata?.primaryReadingDirection),\n\t\tconstrained.boxes,\n\t\tconstrained.locks,\n\t\toptions?.overlapSpacing ?? 40,\n\t);\n\tif (swimlaneContracts.layouts.size > 0) {\n\t\tremoveResolvedOverlapDiagnostics(diagnostics, constrained.boxes);\n\t}\n\tdiagnostics.push(...swimlaneContracts.diagnostics);\n\n\tconst coordinatedNodes = coordinateNodes(\n\t\tnodes,\n\t\tconstrained.boxes,\n\t\toptions,\n\t\tdiagnostics,\n\t);\n\tconst nodeGeometryById = new Map(\n\t\tcoordinatedNodes.map((node) => [\n\t\t\tnode.id,\n\t\t\tcomputeShapeGeometry({\n\t\t\t\tshape: node.shape,\n\t\t\t\tbox: node.box,\n\t\t\t\tobstacleMargin: options.obstacleMargin ?? 0,\n\t\t\t}),\n\t\t]),\n\t);\n\tconst coordinatedGroups = coordinateGroups(\n\t\tgroups,\n\t\tconstrained.boxes,\n\t\toptions,\n\t\tdiagnostics,\n\t);\n\tconst coordinatedSwimlanes = coordinateSwimlanes(\n\t\tdiagram.swimlanes ?? [],\n\t\tconstrained.boxes,\n\t\tswimlaneContracts.layouts,\n\t);\n\tconst groupBoxes = new Map(\n\t\tcoordinatedGroups.map((group) => [group.id, group.box]),\n\t);\n\tconst coordinatedEdges = coordinateEdges(\n\t\tedges,\n\t\tnodeGeometryById,\n\t\tcoordinatedNodes,\n\t\t[...nodeGeometryById.values()].map((geometry) => geometry.obstacleBox),\n\t\tdiagram.direction,\n\t\toptions,\n\t\tdiagnostics,\n\t);\n\tconst allBoxes = [\n\t\t...coordinatedNodes.map((node) => node.box),\n\t\t...coordinatedNodes.flatMap((node) =>\n\t\t\t(node.ports ?? []).flatMap((port) =>\n\t\t\t\tport.label === undefined ? [port.box] : [port.box, portLabelBox(port)],\n\t\t\t),\n\t\t),\n\t\t...groupBoxes.values(),\n\t\t...coordinatedSwimlanes.flatMap((swimlane) =>\n\t\t\tswimlane.box === undefined ? [] : [swimlane.box],\n\t\t),\n\t];\n\tconst contentBounds =\n\t\tallBoxes.length === 0\n\t\t\t? { x: 0, y: 0, width: 0, height: 0 }\n\t\t\t: unionBoxes(allBoxes);\n\tconst frame =\n\t\tdiagram.frame === undefined\n\t\t\t? undefined\n\t\t\t: coordinateFrame(diagram.frame, contentBounds);\n\n\treturn {\n\t\tid: diagram.id,\n\t\t...(diagram.title === undefined ? {} : { title: diagram.title }),\n\t\tdirection: diagram.direction,\n\t\tnodes: coordinatedNodes,\n\t\tedges: coordinatedEdges,\n\t\tgroups: coordinatedGroups,\n\t\t...(coordinatedSwimlanes.length === 0\n\t\t\t? {}\n\t\t\t: { swimlanes: coordinatedSwimlanes }),\n\t\tdiagnostics,\n\t\tbounds:\n\t\t\tframe === undefined\n\t\t\t\t? contentBounds\n\t\t\t\t: unionBoxes([contentBounds, frame.box, frame.titleBox]),\n\t\t...(frame === undefined ? {} : { frame }),\n\t\t...(diagram.metadata === undefined ? {} : { metadata: diagram.metadata }),\n\t};\n}\n\nfunction applySwimlaneLayoutContracts(\n\tswimlanes: readonly Swimlane[],\n\tconstraints: readonly Constraint[],\n\tedges: readonly NormalizedEdge[],\n\ttopToBottomFlow: boolean,\n\tnodeBoxes: Map<string, Box>,\n\tlocks: ReadonlyMap<string, LayoutLockLike>,\n\toverlapSpacing: number,\n): SwimlaneContractResult {\n\tconst layouts = new Map<string, SwimlaneContractLayout>();\n\tconst diagnostics: Diagnostic[] = [];\n\tconst movedChildIds = new Set<string>();\n\tfor (const swimlane of swimlanes) {\n\t\tif ((swimlane.layout ?? \"overlay\") !== \"contract\") {\n\t\t\tcontinue;\n\t\t}\n\t\tif (swimlane.lanes.length === 0) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst layout = applySingleSwimlaneContract(\n\t\t\tswimlane,\n\t\t\tedges,\n\t\t\ttopToBottomFlow,\n\t\t\tnodeBoxes,\n\t\t\tlocks,\n\t\t\tdiagnostics,\n\t\t\tmovedChildIds,\n\t\t);\n\t\tif (layout !== undefined) {\n\t\t\tlayouts.set(swimlane.id, layout);\n\t\t}\n\t}\n\tif (layouts.size > 0) {\n\t\tdiagnostics.push(\n\t\t\t...reportSwimlaneOverlaps(nodeBoxes, locks, overlapSpacing),\n\t\t\t...reportSwimlaneConstraintInvalidations(\n\t\t\t\tconstraints,\n\t\t\t\tnodeBoxes,\n\t\t\t\tmovedChildIds,\n\t\t\t),\n\t\t);\n\t}\n\treturn { layouts, diagnostics, movedChildIds };\n}\n\nfunction applySingleSwimlaneContract(\n\tswimlane: Swimlane,\n\tedges: readonly NormalizedEdge[],\n\ttopToBottomFlow: boolean,\n\tnodeBoxes: Map<string, Box>,\n\tlocks: ReadonlyMap<string, LayoutLockLike>,\n\tdiagnostics: Diagnostic[],\n\tmovedChildIds: Set<string>,\n): SwimlaneContractLayout | undefined {\n\tconst headerHeight = swimlane.headerHeight ?? 28;\n\tconst padding = swimlane.padding ?? 16;\n\tconst laneBounds = swimlane.lanes.map((lane) => {\n\t\tconst childBoxes = lane.children\n\t\t\t.map((child) => nodeBoxes.get(child))\n\t\t\t.filter((box): box is Box => box !== undefined);\n\t\treturn childBoxes.length === 0 ? undefined : unionBoxes(childBoxes);\n\t});\n\tconst populatedBounds = laneBounds.filter(\n\t\t(box): box is Box => box !== undefined,\n\t);\n\tif (populatedBounds.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tif (swimlane.orientation === \"vertical\") {\n\t\treturn applyVerticalSwimlaneContract(\n\t\t\tswimlane,\n\t\t\tedges,\n\t\t\ttopToBottomFlow,\n\t\t\tnodeBoxes,\n\t\t\tlaneBounds,\n\t\t\theaderHeight,\n\t\t\tpadding,\n\t\t\tlocks,\n\t\t\tdiagnostics,\n\t\t\tmovedChildIds,\n\t\t);\n\t}\n\treturn applyHorizontalSwimlaneContract(\n\t\tswimlane,\n\t\tnodeBoxes,\n\t\tlaneBounds,\n\t\theaderHeight,\n\t\tpadding,\n\t\tlocks,\n\t\tdiagnostics,\n\t\tmovedChildIds,\n\t);\n}\n\nfunction applyVerticalSwimlaneContract(\n\tswimlane: Swimlane,\n\tedges: readonly NormalizedEdge[],\n\ttopToBottomFlow: boolean,\n\tnodeBoxes: Map<string, Box>,\n\tlaneBounds: ReadonlyArray<Box | undefined>,\n\theaderHeight: number,\n\tpadding: number,\n\tlocks: ReadonlyMap<string, LayoutLockLike>,\n\tdiagnostics: Diagnostic[],\n\tmovedChildIds: Set<string>,\n): SwimlaneContractLayout {\n\tconst populatedBounds = laneBounds.filter(\n\t\t(box): box is Box => box !== undefined,\n\t);\n\tconst top = Math.min(...populatedBounds.map((box) => box.y));\n\tconst left = Math.min(...populatedBounds.map((box) => box.x));\n\tconst maxChildHeight = Math.max(...populatedBounds.map((box) => box.height));\n\tconst flowRanks = topToBottomFlow\n\t\t? rankVerticalSwimlaneChildren(swimlane, edges)\n\t\t: new Map<string, number>();\n\tconst maxRank =\n\t\tflowRanks.size === 0 ? 0 : Math.max(...Array.from(flowRanks.values()));\n\tconst rankStackGap = Math.max(8, padding / 2);\n\tconst maxRankStackHeight = maxVerticalRankStackHeight(\n\t\tswimlane,\n\t\tnodeBoxes,\n\t\tflowRanks,\n\t\trankStackGap,\n\t);\n\tconst rankSpacing = Math.max(96, maxRankStackHeight + padding);\n\tconst contentHeight =\n\t\tmaxRank === 0 ? maxChildHeight : maxRankStackHeight + maxRank * rankSpacing;\n\tconst slotWidth =\n\t\tMath.max(...populatedBounds.map((box) => box.width)) + padding * 2;\n\tconst laneContentTop = top + headerHeight + padding;\n\n\tfor (let index = 0; index < swimlane.lanes.length; index += 1) {\n\t\tconst lane = swimlane.lanes[index];\n\t\tconst bounds = laneBounds[index];\n\t\tif (lane === undefined || bounds === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst target = {\n\t\t\tx: left + slotWidth * index + padding,\n\t\t\ty: laneContentTop,\n\t\t};\n\t\tif (maxRank === 0) {\n\t\t\tmoveLaneChildren(\n\t\t\t\tlane.children,\n\t\t\t\tnodeBoxes,\n\t\t\t\tlocks,\n\t\t\t\tdiagnostics,\n\t\t\t\tmovedChildIds,\n\t\t\t\t{\n\t\t\t\t\tx: target.x - bounds.x,\n\t\t\t\t\ty: target.y - bounds.y,\n\t\t\t\t},\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tmoveRankedVerticalLaneChildren(\n\t\t\tlane.children,\n\t\t\tnodeBoxes,\n\t\t\tlocks,\n\t\t\tdiagnostics,\n\t\t\tmovedChildIds,\n\t\t\tflowRanks,\n\t\t\trankSpacing,\n\t\t\trankStackGap,\n\t\t\t{\n\t\t\t\tx: target.x - bounds.x,\n\t\t\t\ty: laneContentTop,\n\t\t\t},\n\t\t);\n\t}\n\n\treturn {\n\t\tbox: {\n\t\t\tx: left,\n\t\t\ty: top,\n\t\t\twidth: slotWidth * swimlane.lanes.length,\n\t\t\theight: contentHeight + padding * 2 + headerHeight,\n\t\t},\n\t\tslotWidth,\n\t\tslotHeight: contentHeight + padding * 2 + headerHeight,\n\t};\n}\n\nfunction isTopToBottomReadingDirection(value: unknown): boolean {\n\treturn value === \"top_to_bottom\" || value === \"top-to-bottom\";\n}\n\nfunction rankVerticalSwimlaneChildren(\n\tswimlane: Swimlane,\n\tedges: readonly NormalizedEdge[],\n): Map<string, number> {\n\tconst childOrder = new Map<string, number>();\n\tfor (const lane of swimlane.lanes) {\n\t\tfor (const childId of lane.children) {\n\t\t\tif (!childOrder.has(childId)) {\n\t\t\t\tchildOrder.set(childId, childOrder.size);\n\t\t\t}\n\t\t}\n\t}\n\tif (childOrder.size === 0) {\n\t\treturn new Map();\n\t}\n\n\tconst childIds = new Set(childOrder.keys());\n\tconst relevantEdges = edges.filter(\n\t\t(edge) =>\n\t\t\tchildIds.has(edge.source.nodeId) &&\n\t\t\tchildIds.has(edge.target.nodeId) &&\n\t\t\tedge.source.nodeId !== edge.target.nodeId,\n\t);\n\tif (relevantEdges.length === 0) {\n\t\treturn new Map();\n\t}\n\n\tconst ranks = new Map([...childIds].map((id) => [id, 0]));\n\tconst outgoing = new Map<string, string[]>();\n\tconst inDegree = new Map([...childIds].map((id) => [id, 0]));\n\tfor (const edge of relevantEdges) {\n\t\tconst targets = outgoing.get(edge.source.nodeId) ?? [];\n\t\ttargets.push(edge.target.nodeId);\n\t\toutgoing.set(edge.source.nodeId, targets);\n\t\tinDegree.set(\n\t\t\tedge.target.nodeId,\n\t\t\t(inDegree.get(edge.target.nodeId) ?? 0) + 1,\n\t\t);\n\t}\n\n\tconst queue = [...childIds]\n\t\t.filter((id) => (inDegree.get(id) ?? 0) === 0)\n\t\t.sort((a, b) => (childOrder.get(a) ?? 0) - (childOrder.get(b) ?? 0));\n\tlet visited = 0;\n\tfor (let cursor = 0; cursor < queue.length; cursor += 1) {\n\t\tconst sourceId = queue[cursor];\n\t\tif (sourceId === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tvisited += 1;\n\t\tfor (const targetId of outgoing.get(sourceId) ?? []) {\n\t\t\tranks.set(\n\t\t\t\ttargetId,\n\t\t\t\tMath.max(ranks.get(targetId) ?? 0, (ranks.get(sourceId) ?? 0) + 1),\n\t\t\t);\n\t\t\tconst nextInDegree = (inDegree.get(targetId) ?? 0) - 1;\n\t\t\tinDegree.set(targetId, nextInDegree);\n\t\t\tif (nextInDegree === 0) {\n\t\t\t\tqueue.push(targetId);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn visited === childIds.size\n\t\t? ranks\n\t\t: rankCyclicSwimlaneChildren(childIds, relevantEdges);\n}\n\nfunction rankCyclicSwimlaneChildren(\n\tchildIds: ReadonlySet<string>,\n\tedges: readonly NormalizedEdge[],\n): Map<string, number> {\n\tconst maxRank = Math.max(0, childIds.size - 1);\n\tconst ranks = new Map([...childIds].map((id) => [id, 0]));\n\tfor (let iteration = 0; iteration < childIds.size; iteration += 1) {\n\t\tlet changed = false;\n\t\tfor (const edge of edges) {\n\t\t\tconst nextRank = Math.min(\n\t\t\t\tmaxRank,\n\t\t\t\t(ranks.get(edge.source.nodeId) ?? 0) + 1,\n\t\t\t);\n\t\t\tif (nextRank > (ranks.get(edge.target.nodeId) ?? 0)) {\n\t\t\t\tranks.set(edge.target.nodeId, nextRank);\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t}\n\t\tif (!changed) {\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn ranks;\n}\n\nfunction maxVerticalRankStackHeight(\n\tswimlane: Swimlane,\n\tnodeBoxes: ReadonlyMap<string, Box>,\n\tflowRanks: ReadonlyMap<string, number>,\n\tgap: number,\n): number {\n\tlet maxHeight = 0;\n\tfor (const lane of swimlane.lanes) {\n\t\tfor (const stack of rankStacks(\n\t\t\tlane.children,\n\t\t\tnodeBoxes,\n\t\t\tflowRanks,\n\t\t).values()) {\n\t\t\tconst height = stack.reduce(\n\t\t\t\t(total, item, index) =>\n\t\t\t\t\ttotal + item.box.height + (index === 0 ? 0 : gap),\n\t\t\t\t0,\n\t\t\t);\n\t\t\tmaxHeight = Math.max(maxHeight, height);\n\t\t}\n\t}\n\treturn maxHeight;\n}\n\nfunction moveRankedVerticalLaneChildren(\n\tchildIds: readonly string[],\n\tnodeBoxes: Map<string, Box>,\n\tlocks: ReadonlyMap<string, LayoutLockLike>,\n\tdiagnostics: Diagnostic[],\n\tmovedChildIds: Set<string>,\n\tflowRanks: ReadonlyMap<string, number>,\n\trankSpacing: number,\n\trankStackGap: number,\n\ttarget: Point,\n): void {\n\tfor (const [rank, stack] of rankStacks(childIds, nodeBoxes, flowRanks)) {\n\t\tlet yOffset = 0;\n\t\tfor (const item of stack) {\n\t\t\tconst { childId, box } = item;\n\t\t\tif (locks.has(childId)) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t\tcode: \"constraints.locked-target-not-moved\",\n\t\t\t\t\tmessage: `Locked child ${childId} was not moved into contract swimlane slot.`,\n\t\t\t\t\tpath: [\"swimlanes\"],\n\t\t\t\t\tdetail: { nodeId: childId },\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst next = {\n\t\t\t\t...box,\n\t\t\t\tx: box.x + target.x,\n\t\t\t\ty: target.y + rank * rankSpacing + yOffset,\n\t\t\t};\n\t\t\tif (next.x !== box.x || next.y !== box.y) {\n\t\t\t\tmovedChildIds.add(childId);\n\t\t\t}\n\t\t\tnodeBoxes.set(childId, next);\n\t\t\tyOffset += box.height + rankStackGap;\n\t\t}\n\t}\n}\n\nfunction rankStacks(\n\tchildIds: readonly string[],\n\tnodeBoxes: ReadonlyMap<string, Box>,\n\tflowRanks: ReadonlyMap<string, number>,\n): Map<number, Array<{ childId: string; box: Box }>> {\n\tconst stacks = new Map<number, Array<{ childId: string; box: Box }>>();\n\tfor (const childId of childIds) {\n\t\tconst box = nodeBoxes.get(childId);\n\t\tif (box === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst rank = flowRanks.get(childId) ?? 0;\n\t\tconst stack = stacks.get(rank) ?? [];\n\t\tstack.push({ childId, box });\n\t\tstacks.set(rank, stack);\n\t}\n\tfor (const stack of stacks.values()) {\n\t\tstack.sort((a, b) => {\n\t\t\tconst deltaY = a.box.y - b.box.y;\n\t\t\treturn deltaY === 0 ? a.childId.localeCompare(b.childId) : deltaY;\n\t\t});\n\t}\n\treturn stacks;\n}\n\nfunction applyHorizontalSwimlaneContract(\n\tswimlane: Swimlane,\n\tnodeBoxes: Map<string, Box>,\n\tlaneBounds: ReadonlyArray<Box | undefined>,\n\theaderHeight: number,\n\tpadding: number,\n\tlocks: ReadonlyMap<string, LayoutLockLike>,\n\tdiagnostics: Diagnostic[],\n\tmovedChildIds: Set<string>,\n): SwimlaneContractLayout {\n\tconst populatedBounds = laneBounds.filter(\n\t\t(box): box is Box => box !== undefined,\n\t);\n\tconst top = Math.min(...populatedBounds.map((box) => box.y));\n\tconst left = Math.min(...populatedBounds.map((box) => box.x));\n\tconst slotWidth =\n\t\tMath.max(...populatedBounds.map((box) => box.width)) +\n\t\theaderHeight +\n\t\tpadding * 2;\n\tconst slotHeight =\n\t\tMath.max(...populatedBounds.map((box) => box.height)) + padding * 2;\n\n\tfor (let index = 0; index < swimlane.lanes.length; index += 1) {\n\t\tconst lane = swimlane.lanes[index];\n\t\tconst bounds = laneBounds[index];\n\t\tif (lane === undefined || bounds === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst target = {\n\t\t\tx: left + headerHeight + padding,\n\t\t\ty: top + slotHeight * index + padding,\n\t\t};\n\t\tmoveLaneChildren(\n\t\t\tlane.children,\n\t\t\tnodeBoxes,\n\t\t\tlocks,\n\t\t\tdiagnostics,\n\t\t\tmovedChildIds,\n\t\t\t{\n\t\t\t\tx: target.x - bounds.x,\n\t\t\t\ty: target.y - bounds.y,\n\t\t\t},\n\t\t);\n\t}\n\n\treturn {\n\t\tbox: {\n\t\t\tx: left,\n\t\t\ty: top,\n\t\t\twidth: slotWidth,\n\t\t\theight: slotHeight * swimlane.lanes.length,\n\t\t},\n\t\tslotWidth,\n\t\tslotHeight,\n\t};\n}\n\nfunction moveLaneChildren(\n\tchildIds: readonly string[],\n\tnodeBoxes: Map<string, Box>,\n\tlocks: ReadonlyMap<string, LayoutLockLike>,\n\tdiagnostics: Diagnostic[],\n\tmovedChildIds: Set<string>,\n\toffset: Point,\n): void {\n\tfor (const childId of childIds) {\n\t\tconst box = nodeBoxes.get(childId);\n\t\tif (box === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (locks.has(childId)) {\n\t\t\tdiagnostics.push({\n\t\t\t\tseverity: \"warning\",\n\t\t\t\tcode: \"constraints.locked-target-not-moved\",\n\t\t\t\tmessage: `Locked child ${childId} was not moved into contract swimlane slot.`,\n\t\t\t\tpath: [\"swimlanes\"],\n\t\t\t\tdetail: { nodeId: childId },\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (offset.x !== 0 || offset.y !== 0) {\n\t\t\tmovedChildIds.add(childId);\n\t\t}\n\t\tnodeBoxes.set(childId, {\n\t\t\t...box,\n\t\t\tx: box.x + offset.x,\n\t\t\ty: box.y + offset.y,\n\t\t});\n\t}\n}\n\nfunction removeResolvedOverlapDiagnostics(\n\tdiagnostics: Diagnostic[],\n\tnodeBoxes: ReadonlyMap<string, Box>,\n): void {\n\tfor (let index = diagnostics.length - 1; index >= 0; index -= 1) {\n\t\tconst diagnostic = diagnostics[index];\n\t\tif (diagnostic?.code !== \"constraints.overlap.unresolved\") {\n\t\t\tcontinue;\n\t\t}\n\t\tconst firstId = detailString(diagnostic, \"firstId\");\n\t\tconst secondId = detailString(diagnostic, \"secondId\");\n\t\tconst first = firstId === undefined ? undefined : nodeBoxes.get(firstId);\n\t\tconst second = secondId === undefined ? undefined : nodeBoxes.get(secondId);\n\t\tif (\n\t\t\tfirst !== undefined &&\n\t\t\tsecond !== undefined &&\n\t\t\t!intersectsAabb(first, second)\n\t\t) {\n\t\t\tdiagnostics.splice(index, 1);\n\t\t}\n\t}\n}\n\nfunction reportSwimlaneConstraintInvalidations(\n\tconstraints: readonly Constraint[],\n\tnodeBoxes: ReadonlyMap<string, Box>,\n\tmovedChildIds: ReadonlySet<string>,\n): Diagnostic[] {\n\tconst diagnostics: Diagnostic[] = [];\n\tfor (const constraint of constraints) {\n\t\tconst invalidatedNodeIds = movedConstraintNodeIds(\n\t\t\tconstraint,\n\t\t\tnodeBoxes,\n\t\t\tmovedChildIds,\n\t\t);\n\t\tif (invalidatedNodeIds.length === 0) {\n\t\t\tcontinue;\n\t\t}\n\t\tdiagnostics.push({\n\t\t\tseverity: \"warning\",\n\t\t\tcode: \"constraints.swimlane-contract.invalidated\",\n\t\t\tmessage: `Contract swimlane placement moved node(s) after ${constraint.kind} constraint solving; final geometry no longer satisfies that constraint.`,\n\t\t\tpath: [\"swimlanes\"],\n\t\t\tdetail: {\n\t\t\t\tconstraintKind: constraint.kind,\n\t\t\t\t...(constraint.id === undefined ? {} : { constraintId: constraint.id }),\n\t\t\t\tnodeIds: invalidatedNodeIds,\n\t\t\t},\n\t\t});\n\t}\n\treturn diagnostics;\n}\n\nfunction movedConstraintNodeIds(\n\tconstraint: Constraint,\n\tnodeBoxes: ReadonlyMap<string, Box>,\n\tmovedChildIds: ReadonlySet<string>,\n): string[] {\n\tswitch (constraint.kind) {\n\t\tcase \"exact-position\":\n\t\t\treturn [];\n\t\tcase \"containment\":\n\t\t\treturn movedContainmentViolations(constraint, nodeBoxes, movedChildIds);\n\t\tcase \"relative-position\":\n\t\t\treturn movedRelativeViolations(constraint, nodeBoxes, movedChildIds);\n\t\tcase \"align\":\n\t\t\treturn movedAlignViolations(constraint, nodeBoxes, movedChildIds);\n\t\tcase \"distribute\":\n\t\t\treturn movedDistributeViolations(constraint, nodeBoxes, movedChildIds);\n\t}\n}\n\nfunction movedContainmentViolations(\n\tconstraint: Extract<Constraint, { kind: \"containment\" }>,\n\tnodeBoxes: ReadonlyMap<string, Box>,\n\tmovedChildIds: ReadonlySet<string>,\n): string[] {\n\tconst container = nodeBoxes.get(constraint.containerId);\n\tif (container === undefined) {\n\t\treturn [];\n\t}\n\tconst content = paddedContentBox(container, constraint.padding);\n\treturn constraint.childIds.filter((childId) => {\n\t\tif (!movedChildIds.has(childId)) {\n\t\t\treturn false;\n\t\t}\n\t\tconst child = nodeBoxes.get(childId);\n\t\treturn child !== undefined && !boxInside(child, content);\n\t});\n}\n\nfunction movedRelativeViolations(\n\tconstraint: Extract<Constraint, { kind: \"relative-position\" }>,\n\tnodeBoxes: ReadonlyMap<string, Box>,\n\tmovedChildIds: ReadonlySet<string>,\n): string[] {\n\tif (\n\t\t!movedChildIds.has(constraint.sourceId) &&\n\t\t!movedChildIds.has(constraint.referenceId)\n\t) {\n\t\treturn [];\n\t}\n\tconst source = nodeBoxes.get(constraint.sourceId);\n\tconst reference = nodeBoxes.get(constraint.referenceId);\n\tif (source === undefined || reference === undefined) {\n\t\treturn [];\n\t}\n\treturn sameBoxPosition(\n\t\tsource,\n\t\texpectedRelativeBox(source, reference, constraint),\n\t)\n\t\t? []\n\t\t: [constraint.sourceId];\n}\n\nfunction movedAlignViolations(\n\tconstraint: Extract<Constraint, { kind: \"align\" }>,\n\tnodeBoxes: ReadonlyMap<string, Box>,\n\tmovedChildIds: ReadonlySet<string>,\n): string[] {\n\tif (!constraint.targetIds.some((id) => movedChildIds.has(id))) {\n\t\treturn [];\n\t}\n\tconst targets = constraint.targetIds\n\t\t.map((id) => ({ id, box: nodeBoxes.get(id) }))\n\t\t.filter(\n\t\t\t(target): target is { id: string; box: Box } => target.box !== undefined,\n\t\t);\n\tconst anchor = targets[0];\n\tif (anchor === undefined) {\n\t\treturn [];\n\t}\n\tconst expected = alignmentValue(anchor.box, constraint.axis);\n\treturn targets\n\t\t.filter(\n\t\t\t(target) =>\n\t\t\t\tmovedChildIds.has(target.id) &&\n\t\t\t\t!sameNumber(alignmentValue(target.box, constraint.axis), expected),\n\t\t)\n\t\t.map((target) => target.id);\n}\n\nfunction movedDistributeViolations(\n\tconstraint: Extract<Constraint, { kind: \"distribute\" }>,\n\tnodeBoxes: ReadonlyMap<string, Box>,\n\tmovedChildIds: ReadonlySet<string>,\n): string[] {\n\tif (!constraint.targetIds.some((id) => movedChildIds.has(id))) {\n\t\treturn [];\n\t}\n\tconst targets = constraint.targetIds\n\t\t.map((id) => ({ id, box: nodeBoxes.get(id) }))\n\t\t.filter(\n\t\t\t(target): target is { id: string; box: Box } => target.box !== undefined,\n\t\t)\n\t\t.sort((a, b) => {\n\t\t\tconst delta =\n\t\t\t\tconstraint.axis === \"horizontal\"\n\t\t\t\t\t? a.box.x - b.box.x\n\t\t\t\t\t: a.box.y - b.box.y;\n\t\t\treturn delta === 0 ? a.id.localeCompare(b.id) : delta;\n\t\t});\n\tif (targets.length < 3) {\n\t\treturn [];\n\t}\n\tconst first = targets[0];\n\tconst last = targets.at(-1);\n\tif (first === undefined || last === undefined) {\n\t\treturn [];\n\t}\n\tconst expectedSpacing =\n\t\tconstraint.spacing ??\n\t\t(distributionStart(last.box, constraint.axis) -\n\t\t\tdistributionStart(first.box, constraint.axis)) /\n\t\t\t(targets.length - 1);\n\treturn targets\n\t\t.slice(1)\n\t\t.filter((target, index) => {\n\t\t\tconst previous = targets[index];\n\t\t\tif (previous === undefined || !movedChildIds.has(target.id)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn !sameNumber(\n\t\t\t\tdistributionStart(target.box, constraint.axis) -\n\t\t\t\t\tdistributionStart(previous.box, constraint.axis),\n\t\t\t\texpectedSpacing,\n\t\t\t);\n\t\t})\n\t\t.map((target) => target.id);\n}\n\nfunction expectedRelativeBox(\n\tsource: Box,\n\treference: Box,\n\tconstraint: Extract<Constraint, { kind: \"relative-position\" }>,\n): Box {\n\tconst offset = constraint.offset ?? { x: 0, y: 0 };\n\tswitch (constraint.relation) {\n\t\tcase \"above\":\n\t\t\treturn {\n\t\t\t\t...source,\n\t\t\t\tx: reference.x + offset.x,\n\t\t\t\ty: reference.y - source.height + offset.y,\n\t\t\t};\n\t\tcase \"right-of\":\n\t\t\treturn {\n\t\t\t\t...source,\n\t\t\t\tx: reference.x + reference.width + offset.x,\n\t\t\t\ty: reference.y + offset.y,\n\t\t\t};\n\t\tcase \"below\":\n\t\t\treturn {\n\t\t\t\t...source,\n\t\t\t\tx: reference.x + offset.x,\n\t\t\t\ty: reference.y + reference.height + offset.y,\n\t\t\t};\n\t\tcase \"left-of\":\n\t\t\treturn {\n\t\t\t\t...source,\n\t\t\t\tx: reference.x - source.width + offset.x,\n\t\t\t\ty: reference.y + offset.y,\n\t\t\t};\n\t}\n}\n\nfunction paddedContentBox(container: Box, padding: Insets | undefined): Box {\n\tconst margin = padding ?? { top: 0, right: 0, bottom: 0, left: 0 };\n\treturn {\n\t\tx: container.x + margin.left,\n\t\ty: container.y + margin.top,\n\t\twidth: container.width - margin.left - margin.right,\n\t\theight: container.height - margin.top - margin.bottom,\n\t};\n}\n\nfunction boxInside(child: Box, container: Box): boolean {\n\treturn (\n\t\tchild.x >= container.x &&\n\t\tchild.y >= container.y &&\n\t\tchild.x + child.width <= container.x + container.width &&\n\t\tchild.y + child.height <= container.y + container.height\n\t);\n}\n\nfunction sameBoxPosition(first: Box, second: Box): boolean {\n\treturn sameNumber(first.x, second.x) && sameNumber(first.y, second.y);\n}\n\nfunction sameNumber(first: number, second: number): boolean {\n\treturn Math.abs(first - second) < 0.001;\n}\n\nfunction alignmentValue(\n\tbox: Box,\n\taxis: Extract<Constraint, { kind: \"align\" }>[\"axis\"],\n): number {\n\tswitch (axis) {\n\t\tcase \"x\":\n\t\tcase \"left\":\n\t\t\treturn box.x;\n\t\tcase \"y\":\n\t\tcase \"top\":\n\t\t\treturn box.y;\n\t\tcase \"center-x\":\n\t\t\treturn box.x + box.width / 2;\n\t\tcase \"center-y\":\n\t\t\treturn box.y + box.height / 2;\n\t\tcase \"right\":\n\t\t\treturn box.x + box.width;\n\t\tcase \"bottom\":\n\t\t\treturn box.y + box.height;\n\t}\n}\n\nfunction distributionStart(\n\tbox: Box,\n\taxis: Extract<Constraint, { kind: \"distribute\" }>[\"axis\"],\n): number {\n\treturn axis === \"horizontal\" ? box.x : box.y;\n}\n\nfunction detailString(\n\tdiagnostic: Diagnostic,\n\tkey: \"firstId\" | \"secondId\",\n): string | undefined {\n\tconst value = diagnostic.detail?.[key];\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\nfunction reportSwimlaneOverlaps(\n\tnodeBoxes: ReadonlyMap<string, Box>,\n\tlocks: ReadonlyMap<string, LayoutLockLike>,\n\toverlapSpacing: number,\n): Diagnostic[] {\n\tconst diagnostics: Diagnostic[] = [];\n\tconst ids = [...nodeBoxes.keys()].sort();\n\tfor (const firstId of ids) {\n\t\tfor (const secondId of ids) {\n\t\t\tif (firstId >= secondId) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst first = nodeBoxes.get(firstId);\n\t\t\tconst second = nodeBoxes.get(secondId);\n\t\t\tif (first === undefined || second === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!intersectsAabb(first, second)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tdiagnostics.push({\n\t\t\t\tseverity: \"warning\",\n\t\t\t\tcode: \"constraints.overlap.unresolved\",\n\t\t\t\tmessage: `Boxes ${firstId} and ${secondId} still overlap after contract swimlane placement with configured spacing ${overlapSpacing}.`,\n\t\t\t\tpath: [\"swimlanes\"],\n\t\t\t\tdetail: {\n\t\t\t\t\tfirstId,\n\t\t\t\t\tsecondId,\n\t\t\t\t\tfirstLocked: locks.has(firstId),\n\t\t\t\t\tsecondLocked: locks.has(secondId),\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\treturn diagnostics;\n}\n\nfunction coordinateNodes(\n\tnodes: readonly NormalizedNode[],\n\tboxes: ReadonlyMap<string, Box>,\n\toptions: SolveDiagramOptions,\n\tdiagnostics: Diagnostic[],\n): CoordinatedNode[] {\n\tconst coordinated: CoordinatedNode[] = [];\n\n\tfor (const node of nodes) {\n\t\tconst box = boxes.get(node.id);\n\t\tif (box === undefined) {\n\t\t\tdiagnostics.push({\n\t\t\t\tseverity: \"error\",\n\t\t\t\tcode: \"solver.node-box.missing\",\n\t\t\t\tmessage: `Node ${node.id} has no solved box.`,\n\t\t\t\tpath: [\"nodes\", node.id],\n\t\t\t\tdetail: { nodeId: node.id },\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst geometry = computeShapeGeometry({\n\t\t\tshape: node.shape,\n\t\t\tbox,\n\t\t\tobstacleMargin: options.obstacleMargin ?? 0,\n\t\t});\n\n\t\tcoordinated.push({\n\t\t\tid: node.id,\n\t\t\t...(node.label === undefined ? {} : { label: node.label }),\n\t\t\t...(node.style === undefined ? {} : { style: node.style }),\n\t\t\t...(node.ports === undefined\n\t\t\t\t? {}\n\t\t\t\t: { ports: coordinatePorts(node, box, options.portShifting) }),\n\t\t\t...(node.compartments === undefined\n\t\t\t\t? {}\n\t\t\t\t: { compartments: node.compartments }),\n\t\t\t...(node.labelLayout === undefined\n\t\t\t\t? {}\n\t\t\t\t: { labelLayout: node.labelLayout }),\n\t\t\tshape: node.shape,\n\t\t\t...(node.metadata === undefined ? {} : { metadata: node.metadata }),\n\t\t\tbox: geometry.box,\n\t\t\tanchors: geometry.anchors,\n\t\t\t...(node.parentId === undefined ? {} : { parentId: node.parentId }),\n\t\t});\n\t}\n\n\treturn coordinated;\n}\n\nfunction coordinatePorts(\n\tnode: NormalizedNode,\n\tnodeBox: Box,\n\tportShifting: PortShiftingOptions | undefined,\n): CoordinatedPort[] {\n\tconst portsBySide = new Map<string, NormalizedNode[\"ports\"]>();\n\tfor (const port of node.ports ?? []) {\n\t\tconst ports = portsBySide.get(port.side) ?? [];\n\t\tports.push(port);\n\t\tportsBySide.set(port.side, ports);\n\t}\n\n\tconst coordinated: CoordinatedPort[] = [];\n\tfor (const [side, ports] of portsBySide) {\n\t\tconst sorted = [...(ports ?? [])].sort((a, b) => {\n\t\t\tconst order = (a.order ?? 0) - (b.order ?? 0);\n\t\t\treturn order === 0 ? a.id.localeCompare(b.id) : order;\n\t\t});\n\t\tfor (let index = 0; index < sorted.length; index += 1) {\n\t\t\tconst port = sorted[index];\n\t\t\tif (port === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst anchor = portAnchor(\n\t\t\t\tnodeBox,\n\t\t\t\tside as CoordinatedPort[\"side\"],\n\t\t\t\tindex,\n\t\t\t\tsorted.length,\n\t\t\t\tportShifting,\n\t\t\t);\n\t\t\tconst box = portBox(anchor);\n\t\t\tcoordinated.push({ ...port, box, anchor });\n\t\t}\n\t}\n\n\treturn coordinated.sort((a, b) => a.id.localeCompare(b.id));\n}\n\nfunction portAnchor(\n\tnodeBox: Box,\n\tside: CoordinatedPort[\"side\"],\n\tindex: number,\n\tcount: number,\n\tportShifting: PortShiftingOptions | undefined,\n): Point {\n\tconst shiftingEnabled = portShifting?.enabled ?? true;\n\tconst spacing = portShifting?.spacing ?? 24;\n\tconst centeredOffset = shiftingEnabled\n\t\t? (index - (count - 1) / 2) * spacing\n\t\t: 0;\n\tswitch (side) {\n\t\tcase \"left\":\n\t\t\treturn {\n\t\t\t\tx: nodeBox.x,\n\t\t\t\ty: nodeBox.y + nodeBox.height / 2 + centeredOffset,\n\t\t\t};\n\t\tcase \"right\":\n\t\t\treturn {\n\t\t\t\tx: nodeBox.x + nodeBox.width,\n\t\t\t\ty: nodeBox.y + nodeBox.height / 2 + centeredOffset,\n\t\t\t};\n\t\tcase \"top\":\n\t\t\treturn {\n\t\t\t\tx: nodeBox.x + nodeBox.width / 2 + centeredOffset,\n\t\t\t\ty: nodeBox.y,\n\t\t\t};\n\t\tcase \"bottom\":\n\t\t\treturn {\n\t\t\t\tx: nodeBox.x + nodeBox.width / 2 + centeredOffset,\n\t\t\t\ty: nodeBox.y + nodeBox.height,\n\t\t\t};\n\t}\n}\n\nfunction portBox(anchor: Point): Box {\n\tconst size = 10;\n\treturn {\n\t\tx: anchor.x - size / 2,\n\t\ty: anchor.y - size / 2,\n\t\twidth: size,\n\t\theight: size,\n\t};\n}\n\nfunction portLabelBox(port: CoordinatedPort): Box {\n\tconst textWidth = Math.max(0, (port.label?.text.length ?? 0) * 6);\n\tconst height = 12;\n\tconst gap = 8;\n\tconst x =\n\t\tport.side === \"left\"\n\t\t\t? port.anchor.x - gap - textWidth\n\t\t\t: port.anchor.x + gap;\n\treturn {\n\t\tx,\n\t\ty: port.anchor.y - 8 - height,\n\t\twidth: textWidth,\n\t\theight,\n\t};\n}\n\nfunction coordinateSwimlanes(\n\tswimlanes: readonly Swimlane[],\n\tnodeBoxes: ReadonlyMap<string, Box>,\n\tlayouts: ReadonlyMap<string, SwimlaneContractLayout>,\n): Swimlane[] {\n\treturn swimlanes.map((swimlane) => {\n\t\tconst layout = swimlane.layout ?? \"overlay\";\n\t\tconst headerHeight = swimlane.headerHeight ?? 28;\n\t\tconst padding = swimlane.padding ?? 16;\n\t\tconst contractLayout = layouts.get(swimlane.id);\n\t\tif (layout === \"contract\" && contractLayout !== undefined) {\n\t\t\tconst lanes = swimlane.lanes.map((lane, index) => {\n\t\t\t\tconst box =\n\t\t\t\t\tswimlane.orientation === \"vertical\"\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tx: contractLayout.box.x + contractLayout.slotWidth * index,\n\t\t\t\t\t\t\t\ty: contractLayout.box.y,\n\t\t\t\t\t\t\t\twidth: contractLayout.slotWidth,\n\t\t\t\t\t\t\t\theight: contractLayout.box.height,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tx: contractLayout.box.x,\n\t\t\t\t\t\t\t\ty: contractLayout.box.y + contractLayout.slotHeight * index,\n\t\t\t\t\t\t\t\twidth: contractLayout.box.width,\n\t\t\t\t\t\t\t\theight: contractLayout.slotHeight,\n\t\t\t\t\t\t\t};\n\t\t\t\tconst headerBox =\n\t\t\t\t\tswimlane.orientation === \"vertical\"\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tx: box.x,\n\t\t\t\t\t\t\t\ty: box.y,\n\t\t\t\t\t\t\t\twidth: box.width,\n\t\t\t\t\t\t\t\theight: headerHeight,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tx: box.x,\n\t\t\t\t\t\t\t\ty: box.y,\n\t\t\t\t\t\t\t\twidth: headerHeight,\n\t\t\t\t\t\t\t\theight: box.height,\n\t\t\t\t\t\t\t};\n\t\t\t\tconst contentBox =\n\t\t\t\t\tswimlane.orientation === \"vertical\"\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tx: box.x,\n\t\t\t\t\t\t\t\ty: box.y + headerHeight,\n\t\t\t\t\t\t\t\twidth: box.width,\n\t\t\t\t\t\t\t\theight: Math.max(0, box.height - headerHeight),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tx: box.x + headerHeight,\n\t\t\t\t\t\t\t\ty: box.y,\n\t\t\t\t\t\t\t\twidth: Math.max(0, box.width - headerHeight),\n\t\t\t\t\t\t\t\theight: box.height,\n\t\t\t\t\t\t\t};\n\t\t\t\treturn {\n\t\t\t\t\t...lane,\n\t\t\t\t\tbox,\n\t\t\t\t\theaderBox,\n\t\t\t\t\tcontentBox,\n\t\t\t\t};\n\t\t\t});\n\t\t\treturn {\n\t\t\t\t...swimlane,\n\t\t\t\tlanes,\n\t\t\t\tbox: contractLayout.box,\n\t\t\t\t...(headerHeight === undefined ? {} : { headerHeight }),\n\t\t\t\t...(padding === undefined ? {} : { padding }),\n\t\t\t};\n\t\t}\n\t\tconst laneContentBoxes = swimlane.lanes.map((lane) => {\n\t\t\tconst childBoxes = lane.children\n\t\t\t\t.map((child) => nodeBoxes.get(child))\n\t\t\t\t.filter((box): box is Box => box !== undefined);\n\t\t\treturn childBoxes.length === 0 ? undefined : unionBoxes(childBoxes);\n\t\t});\n\t\tconst laneUnion =\n\t\t\tlaneContentBoxes.filter((box): box is Box => box !== undefined).length ===\n\t\t\t0\n\t\t\t\t? { x: 0, y: 0, width: 120, height: 80 }\n\t\t\t\t: unionBoxes(\n\t\t\t\t\t\tlaneContentBoxes.filter((box): box is Box => box !== undefined),\n\t\t\t\t\t);\n\t\tconst outer = expand(laneUnion, padding, headerHeight);\n\t\tconst laneCount = Math.max(1, swimlane.lanes.length);\n\t\tconst lanes = swimlane.lanes.map((lane, index) => {\n\t\t\tconst box =\n\t\t\t\tswimlane.orientation === \"vertical\"\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tx: outer.x + (outer.width / laneCount) * index,\n\t\t\t\t\t\t\ty: outer.y,\n\t\t\t\t\t\t\twidth: outer.width / laneCount,\n\t\t\t\t\t\t\theight: outer.height,\n\t\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tx: outer.x,\n\t\t\t\t\t\t\ty: outer.y + (outer.height / laneCount) * index,\n\t\t\t\t\t\t\twidth: outer.width,\n\t\t\t\t\t\t\theight: outer.height / laneCount,\n\t\t\t\t\t\t};\n\t\t\tconst headerBox =\n\t\t\t\tlayout === \"contract\"\n\t\t\t\t\t? swimlane.orientation === \"vertical\"\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tx: box.x,\n\t\t\t\t\t\t\t\ty: box.y,\n\t\t\t\t\t\t\t\twidth: box.width,\n\t\t\t\t\t\t\t\theight: headerHeight,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tx: box.x,\n\t\t\t\t\t\t\t\ty: box.y,\n\t\t\t\t\t\t\t\twidth: headerHeight,\n\t\t\t\t\t\t\t\theight: box.height,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t: undefined;\n\t\t\tconst contentBox =\n\t\t\t\tlayout === \"contract\"\n\t\t\t\t\t? swimlane.orientation === \"vertical\"\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tx: box.x,\n\t\t\t\t\t\t\t\ty: box.y + headerHeight,\n\t\t\t\t\t\t\t\twidth: box.width,\n\t\t\t\t\t\t\t\theight: Math.max(0, box.height - headerHeight),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tx: box.x + headerHeight,\n\t\t\t\t\t\t\t\ty: box.y,\n\t\t\t\t\t\t\t\twidth: Math.max(0, box.width - headerHeight),\n\t\t\t\t\t\t\t\theight: box.height,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t: undefined;\n\t\t\treturn {\n\t\t\t\t...lane,\n\t\t\t\tbox,\n\t\t\t\t...(headerBox === undefined ? {} : { headerBox }),\n\t\t\t\t...(contentBox === undefined ? {} : { contentBox }),\n\t\t\t};\n\t\t});\n\t\treturn {\n\t\t\t...swimlane,\n\t\t\tlanes,\n\t\t\tbox: outer,\n\t\t\t...(headerHeight === undefined ? {} : { headerHeight }),\n\t\t\t...(padding === undefined ? {} : { padding }),\n\t\t};\n\t});\n}\n\nfunction coordinateFrame(\n\tframe: NonNullable<NormalizedDiagram[\"frame\"]>,\n\tcontentBounds: Box,\n): CoordinatedFrame {\n\tconst padding = 32;\n\tconst titleHeight = 28;\n\tconst titleWidth = Math.max(180, frame.titleTab.length * 7);\n\tconst box = {\n\t\tx: contentBounds.x - padding,\n\t\ty: contentBounds.y - padding - titleHeight,\n\t\twidth: contentBounds.width + padding * 2,\n\t\theight: contentBounds.height + padding * 2 + titleHeight,\n\t};\n\treturn {\n\t\t...frame,\n\t\tbox,\n\t\ttitleBox: {\n\t\t\tx: box.x,\n\t\t\ty: box.y,\n\t\t\twidth: Math.min(titleWidth, box.width * 0.8),\n\t\t\theight: titleHeight,\n\t\t},\n\t};\n}\n\nfunction expand(box: Box, padding: number, titleSize: number): Box {\n\treturn {\n\t\tx: box.x - padding,\n\t\ty: box.y - padding - titleSize,\n\t\twidth: box.width + padding * 2,\n\t\theight: box.height + padding * 2 + titleSize,\n\t};\n}\n\nfunction coordinateGroups(\n\tgroups: readonly NormalizedGroup[],\n\tnodeBoxes: ReadonlyMap<string, Box>,\n\toptions: SolveDiagramOptions,\n\tdiagnostics: Diagnostic[],\n): CoordinatedGroup[] {\n\tconst coordinated: CoordinatedGroup[] = [];\n\tconst groupBoxes = new Map<string, Box>();\n\n\tfor (const group of groups) {\n\t\tconst childBoxes: Box[] = [];\n\t\tlet missing = false;\n\n\t\tfor (const nodeId of group.nodeIds) {\n\t\t\tconst box = nodeBoxes.get(nodeId);\n\t\t\tif (box === undefined) {\n\t\t\t\tmissing = true;\n\t\t\t\tdiagnostics.push(groupReferenceMissing(group.id, \"node\", nodeId));\n\t\t\t} else {\n\t\t\t\tchildBoxes.push(box);\n\t\t\t}\n\t\t}\n\n\t\tfor (const childGroupId of group.groupIds) {\n\t\t\tconst box = groupBoxes.get(childGroupId);\n\t\t\tif (box === undefined) {\n\t\t\t\tmissing = true;\n\t\t\t\tdiagnostics.push(\n\t\t\t\t\tgroupReferenceMissing(group.id, \"group\", childGroupId),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tchildBoxes.push(box);\n\t\t\t}\n\t\t}\n\n\t\tif (missing || childBoxes.length === 0) {\n\t\t\tif (childBoxes.length === 0) {\n\t\t\t\tdiagnostics.push(groupReferenceMissing(group.id, \"child\", undefined));\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst geometry = computeContainerGeometry({\n\t\t\tid: group.id,\n\t\t\tchildBoxes,\n\t\t\tpadding: group.padding,\n\t\t\t...(group.labelLayout === undefined\n\t\t\t\t? {}\n\t\t\t\t: { labelLayout: group.labelLayout }),\n\t\t\tobstacleMargin: options.obstacleMargin ?? 0,\n\t\t});\n\t\tgroupBoxes.set(group.id, geometry.box);\n\t\tdiagnostics.push(...geometry.diagnostics);\n\t\tcoordinated.push({\n\t\t\t...group,\n\t\t\tbox: geometry.box,\n\t\t});\n\t}\n\n\treturn coordinated;\n}\n\nfunction coordinateEdges(\n\tedges: readonly NormalizedEdge[],\n\tnodes: ReadonlyMap<string, ReturnType<typeof computeShapeGeometry>>,\n\tcoordinatedNodes: readonly CoordinatedNode[],\n\tobstacles: readonly Box[],\n\tdirection: NormalizedDiagram[\"direction\"],\n\toptions: SolveDiagramOptions,\n\tdiagnostics: Diagnostic[],\n): CoordinatedEdge[] {\n\tconst coordinated: CoordinatedEdge[] = [];\n\tconst coordinatedNodeById = new Map(\n\t\tcoordinatedNodes.map((node) => [node.id, node]),\n\t);\n\n\tfor (const edge of edges) {\n\t\tconst source = nodes.get(edge.source.nodeId);\n\t\tconst target = nodes.get(edge.target.nodeId);\n\t\tif (source === undefined || target === undefined) {\n\t\t\tdiagnostics.push({\n\t\t\t\tseverity: \"error\",\n\t\t\t\tcode: \"solver.edge-reference.missing\",\n\t\t\t\tmessage: `Edge ${edge.id} references a missing coordinated node.`,\n\t\t\t\tpath: [\"edges\", edge.id],\n\t\t\t\tdetail: {\n\t\t\t\t\tedgeId: edge.id,\n\t\t\t\t\tsourceId: edge.source.nodeId,\n\t\t\t\t\ttargetId: edge.target.nodeId,\n\t\t\t\t},\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst sourcePort = coordinatedNodeById\n\t\t\t.get(edge.source.nodeId)\n\t\t\t?.ports?.find((port) => port.id === edge.source.portId);\n\t\tconst targetPort = coordinatedNodeById\n\t\t\t.get(edge.target.nodeId)\n\t\t\t?.ports?.find((port) => port.id === edge.target.portId);\n\n\t\tconst route = routeEdge({\n\t\t\tkind: options.routeKind ?? \"orthogonal\",\n\t\t\tdirection,\n\t\t\tsource: portGeometry(source, sourcePort),\n\t\t\ttarget: portGeometry(target, targetPort),\n\t\t\t...(edge.source.anchor === undefined\n\t\t\t\t? {}\n\t\t\t\t: { sourceAnchor: edge.source.anchor }),\n\t\t\t...(edge.target.anchor === undefined\n\t\t\t\t? {}\n\t\t\t\t: { targetAnchor: edge.target.anchor }),\n\t\t\tobstacles: obstacles.filter(\n\t\t\t\t(obstacle) =>\n\t\t\t\t\tobstacle !== source.obstacleBox && obstacle !== target.obstacleBox,\n\t\t\t),\n\t\t});\n\t\tdiagnostics.push(\n\t\t\t...route.diagnostics.map((diagnostic) => ({\n\t\t\t\t...diagnostic,\n\t\t\t\tdetail: { ...diagnostic.detail, edgeId: edge.id },\n\t\t\t})),\n\t\t);\n\t\tcoordinated.push({\n\t\t\t...edge,\n\t\t\tpoints: route.points,\n\t\t});\n\t}\n\n\treturn coordinated;\n}\n\nfunction portGeometry(\n\tnodeGeometry: ReturnType<typeof computeShapeGeometry>,\n\tport: CoordinatedPort | undefined,\n): ReturnType<typeof computeShapeGeometry> {\n\tif (port === undefined) {\n\t\treturn nodeGeometry;\n\t}\n\treturn {\n\t\t...nodeGeometry,\n\t\tbox: port.box,\n\t\tcenter: port.anchor,\n\t\tanchors: nodeGeometry.anchors.map((anchor) => ({\n\t\t\tname: anchor.name,\n\t\t\tpoint: port.anchor,\n\t\t})),\n\t\tobstacleBox: port.box,\n\t};\n}\n\nfunction stableById<T extends { id: string }>(items: readonly T[]): T[] {\n\treturn [...items].sort((a, b) => a.id.localeCompare(b.id));\n}\n\nfunction stableByConstraintId<T extends { id?: string; kind: string }>(\n\titems: readonly T[],\n): T[] {\n\treturn [...items].sort((a, b) =>\n\t\t`${a.id ?? a.kind}`.localeCompare(`${b.id ?? b.kind}`),\n\t);\n}\n\nfunction groupReferenceMissing(\n\tgroupId: string,\n\treferenceKind: string,\n\tid: string | undefined,\n): Diagnostic {\n\treturn {\n\t\tseverity: \"error\",\n\t\tcode: \"solver.group-reference.missing\",\n\t\tmessage: `Group ${groupId} references a missing ${referenceKind}.`,\n\t\tpath: [\"groups\", groupId],\n\t\tdetail: id === undefined ? { groupId } : { groupId, id },\n\t};\n}\n","import { exportExcalidraw, exportSvg } from \"../exporters/index.js\";\nimport type { ExportResult } from \"../exporters/types.js\";\nimport type { CoordinatedDiagram } from \"../ir/diagram.js\";\nimport type { JsonObject } from \"../ir/geometry.js\";\nimport type { PortShiftingOptions } from \"../solver/index.js\";\nimport { solveDiagram } from \"../solver/index.js\";\nimport { sortDslDiagnostics } from \"./diagnostics.js\";\nimport { normalizeDiagramDsl } from \"./normalize.js\";\nimport { parseDiagramDsl } from \"./parse.js\";\nimport type {\n\tDslDiagnostic,\n\tDslOutputFormat,\n\tRenderDiagramDslOptions,\n\tRenderDiagramDslResult,\n} from \"./types.js\";\n\nexport function resolveOutputFormat(\n\tcliFormat?: string,\n\tdslFormat?: DslOutputFormat,\n): { format?: DslOutputFormat; diagnostics: DslDiagnostic[] } {\n\tconst selected = cliFormat ?? dslFormat ?? \"svg\";\n\n\tif (selected === \"svg\" || selected === \"excalidraw\") {\n\t\treturn { format: selected, diagnostics: [] };\n\t}\n\n\treturn {\n\t\tdiagnostics: [\n\t\t\t{\n\t\t\t\tseverity: \"error\",\n\t\t\t\tlayer: \"validate\",\n\t\t\t\tcode: \"validate.output-format.unsupported\",\n\t\t\t\tmessage: `Unsupported output format \"${selected}\".`,\n\t\t\t\tpath: [\"output\", \"format\"],\n\t\t\t\thint: \"Use svg or excalidraw.\",\n\t\t\t},\n\t\t],\n\t};\n}\n\nexport function exportDiagram(\n\tformat: DslOutputFormat,\n\tdiagram: CoordinatedDiagram,\n): ExportResult {\n\tconst content =\n\t\tformat === \"svg\" ? exportSvg(diagram) : exportExcalidraw(diagram);\n\n\treturn { format, content, diagnostics: [] };\n}\n\nexport function renderDiagramDsl(\n\tsource: string,\n\toptions: RenderDiagramDslOptions = {},\n): RenderDiagramDslResult {\n\tconst parsed = parseDiagramDsl(source, options);\n\tif (hasErrorDiagnostics(parsed.diagnostics) || parsed.value === undefined) {\n\t\treturn { diagnostics: parsed.diagnostics };\n\t}\n\n\tconst normalized = normalizeDiagramDsl(\n\t\tparsed.value,\n\t\toptions.textMeasurer === undefined\n\t\t\t? {}\n\t\t\t: { textMeasurer: options.textMeasurer },\n\t);\n\tconst format = resolveOutputFormat(options.format, normalized.output?.format);\n\tconst diagnostics = sortDslDiagnostics([\n\t\t...parsed.diagnostics,\n\t\t...normalized.diagnostics,\n\t\t...format.diagnostics,\n\t]);\n\n\tif (\n\t\tnormalized.diagram === undefined ||\n\t\tformat.format === undefined ||\n\t\thasErrorDiagnostics(diagnostics)\n\t) {\n\t\treturn { diagnostics };\n\t}\n\n\tconst solved = solveDiagram(normalized.diagram, {\n\t\trouteKind:\n\t\t\tnormalized.diagram.metadata?.routeKind === \"straight\"\n\t\t\t\t? \"straight\"\n\t\t\t\t: \"orthogonal\",\n\t\t...solvePortShiftingOption(normalized.diagram.metadata?.portShifting),\n\t});\n\tconst solveDiagnostics = solved.diagnostics.map(toSolveDiagnostic);\n\tif (hasErrorDiagnostics(solveDiagnostics)) {\n\t\treturn {\n\t\t\tdiagram: solved,\n\t\t\tdiagnostics: sortDslDiagnostics(solveDiagnostics),\n\t\t};\n\t}\n\n\ttry {\n\t\tconst exported = exportDiagram(format.format, solved);\n\t\treturn {\n\t\t\tformat: exported.format,\n\t\t\tcontent: exported.content,\n\t\t\tdiagram: solved,\n\t\t\tdiagnostics: sortDslDiagnostics([\n\t\t\t\t...diagnostics,\n\t\t\t\t...solveDiagnostics,\n\t\t\t\t...exported.diagnostics.map(toExportDiagnostic),\n\t\t\t]),\n\t\t};\n\t} catch (error) {\n\t\treturn {\n\t\t\tdiagram: solved,\n\t\t\tdiagnostics: [\n\t\t\t\t{\n\t\t\t\t\tseverity: \"error\",\n\t\t\t\t\tlayer: \"export\",\n\t\t\t\t\tcode: \"export.failed\",\n\t\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t\thint: \"Check the coordinated diagram and selected output format.\",\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t}\n}\n\nfunction toSolveDiagnostic(\n\tdiagnostic: CoordinatedDiagram[\"diagnostics\"][number],\n): DslDiagnostic {\n\treturn { ...diagnostic, layer: \"solve\" };\n}\n\nfunction solvePortShiftingOption(value: unknown):\n\t| {\n\t\t\tportShifting: PortShiftingOptions;\n\t }\n\t| Record<string, never> {\n\tif (!isJsonObject(value)) {\n\t\treturn {};\n\t}\n\tconst portShifting: PortShiftingOptions = {};\n\tif (value.enabled === false) {\n\t\tportShifting.enabled = false;\n\t}\n\tif (typeof value.spacing === \"number\") {\n\t\tportShifting.spacing = value.spacing;\n\t}\n\treturn { portShifting };\n}\n\nfunction isJsonObject(value: unknown): value is JsonObject {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction toExportDiagnostic(\n\tdiagnostic: ExportResult[\"diagnostics\"][number],\n): DslDiagnostic {\n\treturn { ...diagnostic, layer: \"export\" };\n}\n\nfunction hasErrorDiagnostics(diagnostics: DslDiagnostic[]): boolean {\n\treturn diagnostics.some((diagnostic) => diagnostic.severity === \"error\");\n}\n","export const DEFAULT_CANONICAL_PRECISION = 3;\n\nexport interface CanonicalizeOptions {\n\tprecision?: number;\n}\n\nexport type CanonicalJson =\n\t| null\n\t| boolean\n\t| number\n\t| string\n\t| CanonicalJson[]\n\t| { [key: string]: CanonicalJson };\n\nconst UNORDERED_COLLECTION_KEYS = new Set([\n\t\"nodes\",\n\t\"edges\",\n\t\"groups\",\n\t\"constraints\",\n\t\"diagnostics\",\n\t\"anchors\",\n]);\n\nconst IDENTITY_KEYS = [\n\t\"id\",\n\t\"name\",\n\t\"sourceId\",\n\t\"targetId\",\n\t\"nodeId\",\n\t\"groupId\",\n\t\"kind\",\n] as const;\n\ntype IdentityKey = (typeof IDENTITY_KEYS)[number];\n\nexport function canonicalize(\n\tvalue: unknown,\n\toptions: CanonicalizeOptions = {},\n): CanonicalJson {\n\tconst precision = resolvePrecision(\n\t\toptions.precision ?? DEFAULT_CANONICAL_PRECISION,\n\t);\n\n\treturn canonicalizeValue(value, precision);\n}\n\nexport function stringifyCanonical(\n\tvalue: unknown,\n\tprecision = DEFAULT_CANONICAL_PRECISION,\n): string {\n\treturn `${JSON.stringify(\n\t\tcanonicalize(value, { precision: resolvePrecision(precision) }),\n\t\tnull,\n\t\t2,\n\t)}\\n`;\n}\n\nfunction resolvePrecision(precision: number): number {\n\tif (!Number.isInteger(precision) || precision < 0) {\n\t\tthrow new TypeError(\"Canonical precision must be a non-negative integer\");\n\t}\n\n\treturn precision;\n}\n\nfunction canonicalizeValue(\n\tvalue: unknown,\n\tprecision: number,\n\tparentKey?: string,\n): CanonicalJson {\n\tif (\n\t\tvalue === null ||\n\t\ttypeof value === \"boolean\" ||\n\t\ttypeof value === \"string\"\n\t) {\n\t\treturn value;\n\t}\n\n\tif (typeof value === \"number\") {\n\t\tif (!Number.isFinite(value)) {\n\t\t\tthrow new TypeError(\"Non-finite number cannot be canonicalized\");\n\t\t}\n\n\t\tif (Object.is(value, -0)) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst factor = 10 ** precision;\n\t\tconst rounded = Math.round(value * factor) / factor;\n\n\t\treturn Object.is(rounded, -0) ? 0 : rounded;\n\t}\n\n\tif (Array.isArray(value)) {\n\t\treturn canonicalizeArray(value, precision, parentKey);\n\t}\n\n\tif (typeof value === \"object\") {\n\t\treturn canonicalizeObject(value, precision);\n\t}\n\n\tthrow new TypeError(\"Unsupported value cannot be canonicalized\");\n}\n\nfunction canonicalizeArray(\n\tvalue: unknown[],\n\tprecision: number,\n\tparentKey?: string,\n): CanonicalJson[] {\n\tconst canonicalItems = value.map((item) =>\n\t\tcanonicalizeValue(item, precision, parentKey),\n\t);\n\n\tif (!shouldSortArray(value, parentKey)) {\n\t\treturn canonicalItems;\n\t}\n\n\treturn [...canonicalItems].sort(compareCanonicalItems);\n}\n\nfunction canonicalizeObject(\n\tvalue: object,\n\tprecision: number,\n): { [key: string]: CanonicalJson } {\n\tconst result: { [key: string]: CanonicalJson } = {};\n\n\tfor (const key of Object.keys(value).sort()) {\n\t\tconst rawValue = (value as Record<string, unknown>)[key];\n\n\t\tif (rawValue === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tresult[key] = canonicalizeValue(rawValue, precision, key);\n\t}\n\n\treturn result;\n}\n\nfunction shouldSortArray(value: unknown[], parentKey?: string): boolean {\n\tif (parentKey === \"points\" || value.every(isPointLikeRecord)) {\n\t\treturn false;\n\t}\n\n\tif (parentKey !== undefined && UNORDERED_COLLECTION_KEYS.has(parentKey)) {\n\t\treturn value.every(isPlainObject);\n\t}\n\n\treturn (\n\t\tvalue.length > 0 &&\n\t\tvalue.every((item) => isPlainObject(item) && hasIdentityKey(item))\n\t);\n}\n\nfunction compareCanonicalItems(a: CanonicalJson, b: CanonicalJson): number {\n\tconst aKey = itemSortKey(a);\n\tconst bKey = itemSortKey(b);\n\n\treturn aKey.localeCompare(bKey);\n}\n\nfunction itemSortKey(value: CanonicalJson): string {\n\tif (!isCanonicalObject(value)) {\n\t\treturn \"\";\n\t}\n\n\treturn IDENTITY_KEYS.map((key) => identityPart(key, value)).join(\"\\u0000\");\n}\n\nfunction identityPart(\n\tkey: IdentityKey,\n\tvalue: { [key: string]: CanonicalJson },\n): string {\n\tconst part = value[key];\n\n\tif (typeof part === \"string\" || typeof part === \"number\") {\n\t\treturn String(part);\n\t}\n\n\treturn \"\";\n}\n\nfunction hasIdentityKey(value: object): boolean {\n\treturn IDENTITY_KEYS.some((key) => key in value);\n}\n\nfunction isPlainObject(value: unknown): value is object {\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\n\treturn prototype === Object.prototype || prototype === null;\n}\n\nfunction isCanonicalObject(\n\tvalue: CanonicalJson,\n): value is { [key: string]: CanonicalJson } {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isPointLikeRecord(value: unknown): boolean {\n\treturn (\n\t\tisPlainObject(value) &&\n\t\ttypeof (value as Record<string, unknown>).x === \"number\" &&\n\t\ttypeof (value as Record<string, unknown>).y === \"number\"\n\t);\n}\n"]}