@zukhruf/diagram 0.3.28 → 0.3.30
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/README.md +2 -3
- package/dist/lib/compiler/diagram-compile.d.ts.map +1 -1
- package/dist/lib/compiler/diagram-compile.js +9 -9
- package/dist/lib/compiler/diagram-compile.js.map +1 -1
- package/dist/lib/layouts/graph/graph-layout.d.ts.map +1 -1
- package/dist/lib/layouts/graph/graph-layout.js +10 -17
- package/dist/lib/layouts/graph/graph-layout.js.map +1 -1
- package/dist/lib/model/endpoint-ref.d.ts +10 -0
- package/dist/lib/model/endpoint-ref.d.ts.map +1 -0
- package/dist/lib/model/endpoint-ref.js +17 -0
- package/dist/lib/model/endpoint-ref.js.map +1 -0
- package/dist/lib/renderers/webgpu/graph-flow-effects.js +7 -5
- package/dist/lib/renderers/webgpu/graph-flow-effects.js.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -136,7 +136,7 @@ The SVG text uses the font `ui-monospace, 'Geist Mono', monospace`. The layout c
|
|
|
136
136
|
|
|
137
137
|
An edge with no arrowhead (`Wire`, `headless`, or `direction="none"`) gets no pulse.
|
|
138
138
|
|
|
139
|
-
The effects draw with WebGPU, on a canvas above the SVG. The package loads `vgpu` with a dynamic `import()` only when a diagram has `effects`. Thus a diagram with no `effects` adds no WebGPU code to the bundle.
|
|
139
|
+
The effects draw with WebGPU, on a canvas above the SVG. The package loads `vgpu` and `@vgpu/wgsl` with a dynamic `import()` only when a diagram has `effects`. Thus a diagram with no `effects` adds no WebGPU code to the bundle.
|
|
140
140
|
|
|
141
141
|
The SVG drawing is always there. The effects only add to it:
|
|
142
142
|
|
|
@@ -298,7 +298,6 @@ The package does not set the width of a diagram on a page. Give the classes of y
|
|
|
298
298
|
## Documentation
|
|
299
299
|
|
|
300
300
|
- **Internals**: [docs/internals.md](./docs/internals.md) tells how the compiler, the layouts and the renderers divide the work, and which mistakes the code had before.
|
|
301
|
-
- **Copied code**: [docs/copied-code.md](./docs/copied-code.md) lists the code that is in two places, and where each fix must go.
|
|
302
301
|
- **Decisions**: the [architecture decision records](./docs/adr) tell why the design is as it is.
|
|
303
302
|
1. [The diagram is a zukhruf package](./docs/adr/0001-the-diagram-is-a-zukhruf-package.md)
|
|
304
303
|
|
|
@@ -316,7 +315,7 @@ npx nx run diagram:lint # lints the code
|
|
|
316
315
|
|
|
317
316
|
```
|
|
318
317
|
src/
|
|
319
|
-
lib/model/ the IR types
|
|
318
|
+
lib/model/ the IR types, and parseEndpointRef, which reads the from and to of an edge
|
|
320
319
|
lib/compiler/ reads the primitives, and makes the IR
|
|
321
320
|
lib/layouts/ the pure geometry of the graph and the timeline
|
|
322
321
|
lib/renderers/ svg/, canvas/, html/ and webgpu/ draw the layouts; shared/ holds the parts that they share
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagram-compile.d.ts","sourceRoot":"","sources":["../../../src/lib/compiler/diagram-compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAIV,cAAc,EACd,kBAAkB,EAOlB,mBAAmB,EAEpB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"diagram-compile.d.ts","sourceRoot":"","sources":["../../../src/lib/compiler/diagram-compile.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAIV,cAAc,EACd,kBAAkB,EAOlB,mBAAmB,EAEpB,MAAM,wBAAwB,CAAC;AAuBhC,eAAO,MAAM,iBAAiB,eAA2C,CAAC;AAE1E,QAAA,MAAM,eAAe,qPA0BX,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG;IACzD,CAAC,iBAAiB,CAAC,EAAE,aAAa,CAAC;CACpC,CAAC;AAEF,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAEvE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,aAAa,GAAG,IAAI,CAMnE;AA6CD,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,SAAS,EACnB,MAAM,EAAE,kBAAkB,GAAG,SAAS,GACrC,cAAc,CAmBhB;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,SAAS,GAAG,mBAAmB,CAkBxE;AA0mBD,wBAAgB,aAAa,CAAC,EAAE,EAAE,cAAc,QA0I/C;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,mBAAmB,QAoBvD"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Children, Fragment, isValidElement } from 'react';
|
|
2
|
+
import { parseEndpointRef } from "../model/endpoint-ref.js";
|
|
2
3
|
export const DIAGRAM_PRIMITIVE = Symbol.for('@zukhruf/diagram/primitive');
|
|
3
4
|
const PRIMITIVE_KINDS = ['node', 'box', 'card', 'port', 'label', 'float', 'phantom', 'appliance', 'connector', 'junction', 'edge', 'arrow', 'wire', 'group', 'text', 'line', 'lane', 'signal', 'frame', 'marker', 'guide', 'waypoint', 'entry', 'exit', 'content'];
|
|
4
5
|
export function primitive(kind) {
|
|
@@ -664,16 +665,20 @@ export function validateGraph(ir) {
|
|
|
664
665
|
if (edge.stubDistance !== undefined && (!Number.isFinite(edge.stubDistance) || edge.stubDistance < 0)) {
|
|
665
666
|
throw new Error(`Diagram edge stubDistance must be a non-negative finite number, got ${edge.stubDistance}.`);
|
|
666
667
|
}
|
|
667
|
-
const
|
|
668
|
-
|
|
668
|
+
const {
|
|
669
|
+
nodeId: sourceNodeId,
|
|
670
|
+
portId: sourcePortId
|
|
671
|
+
} = parseEndpointRef(edge.from);
|
|
672
|
+
const {
|
|
673
|
+
nodeId: targetNodeId,
|
|
674
|
+
portId: targetPortId
|
|
675
|
+
} = parseEndpointRef(edge.to);
|
|
669
676
|
if (!nodeIds.has(sourceNodeId) && !groupsById.has(sourceNodeId)) {
|
|
670
677
|
throw new Error(`Diagram edge ${edge.from}->${edge.to} references missing source "${sourceNodeId}".`);
|
|
671
678
|
}
|
|
672
679
|
if (!nodeIds.has(targetNodeId) && !groupsById.has(targetNodeId)) {
|
|
673
680
|
throw new Error(`Diagram edge ${edge.from}->${edge.to} references missing target "${targetNodeId}".`);
|
|
674
681
|
}
|
|
675
|
-
const sourcePortId = edge.from.includes(':') ? edge.from.slice(edge.from.indexOf(':') + 1) : undefined;
|
|
676
|
-
const targetPortId = edge.to.includes(':') ? edge.to.slice(edge.to.indexOf(':') + 1) : undefined;
|
|
677
682
|
if (sourcePortId && !(nodesById.get(sourceNodeId)?.ports?.some(port => port.id === sourcePortId) || groupsById.get(sourceNodeId)?.ports?.some(port => port.id === sourcePortId))) {
|
|
678
683
|
throw new Error(`Diagram edge ${edge.from}->${edge.to} references missing source port "${sourcePortId}" on "${sourceNodeId}".`);
|
|
679
684
|
}
|
|
@@ -703,9 +708,4 @@ export function validateTimeline(ir) {
|
|
|
703
708
|
}
|
|
704
709
|
}
|
|
705
710
|
}
|
|
706
|
-
function endpointNodeId(ref) {
|
|
707
|
-
const separator = ref.indexOf(':');
|
|
708
|
-
if (separator === -1) return ref;
|
|
709
|
-
return ref.slice(0, separator);
|
|
710
|
-
}
|
|
711
711
|
//# sourceMappingURL=diagram-compile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagram-compile.js","names":["Children","Fragment","isValidElement","DIAGRAM_PRIMITIVE","Symbol","for","PRIMITIVE_KINDS","primitive","kind","Object","assign","primitiveKind","node","type","isPrimitiveKind","value","some","emptyCompileResult","nodes","edges","groups","annotations","lanes","signals","frames","guides","mergeCompileResults","target","source","push","compileGraph","children","layout","result","compileChildren","length","Error","compileTimeline","frame","context","forEach","child","undefined","isTextNode","String","trim","name","isNodeKind","compileNode","isEdgeKind","compileEdge","group","compileGroup","compileText","compileLane","compileSignal","compileFrame","requirePrimitiveProps","props","label","compileLabelChildren","hasLabel","id","row","col","width","height","groupId","hidden","fontSize","fontWeight","textColor","accent","textAlign","connectable","tone","caption","captionSide","captionOffset","captionColor","captionFontSize","captionFontWeight","colSpan","rx","texture","icon","iconSize","ports","appliancePorts","antenna","slant","_children","nodeProps","labelChildren","content","splitNodeContent","nodeFrame","CONTENT_HOSTS","Set","has","explicit","badgeLabel","edgeProps","lines","waypoints","entrySide","exitSide","entryGap","edgeChild","text","edgeChildKind","lineText","entry","side","gap","normalizeStringLines","headless","Array","isArray","map","line","filter","Boolean","bounds","rowStart","rowEnd","colStart","colEnd","inferGroupBounds","normalizeGroupLabel","labelAlign","labelSide","fill","parent","tight","tightX","tightY","titleBand","titleGap","padding","dividers","grouped","childGroups","emptyGroupBounds","includeGroupBounds","Number","POSITIVE_INFINITY","NEGATIVE_INFINITY","Math","min","max","textProps","compileStringLines","normalizeBoxed","boxed","signalProps","normalizedBoxed","frameChild","owner","toArray","part","join","validateGraph","ir","nodeIds","add","groupIds","guideIds","guide","nodesById","Map","groupsById","bodyFontSize","isFinite","bodyLineGap","edge","route","labelLineGap","exitOffset","entryOffset","stubDistance","sourceNodeId","endpointNodeId","from","targetNodeId","to","sourcePortId","includes","slice","indexOf","targetPortId","get","port","annotation","lineGap","validateTimeline","laneIds","lane","signal","ref","separator"],"sources":["../../../src/lib/compiler/diagram-compile.ts"],"sourcesContent":["import {\n Children,\n Fragment,\n type ReactElement,\n type ReactNode,\n isValidElement,\n} from 'react';\n\nimport type {\n DiagramAnnotation,\n DiagramEdge,\n DiagramFrameElement,\n DiagramGraphIR,\n DiagramGraphLayout,\n DiagramGuide,\n DiagramLabelLine,\n DiagramLane,\n DiagramNode,\n DiagramSignal,\n DiagramSignalBox,\n DiagramTimelineSpec,\n DiagramWaypoint,\n} from '../model/diagram-ir.ts';\nimport type {\n DiagramApplianceProps,\n DiagramConnectorProps,\n DiagramContentProps,\n DiagramEdgeProps,\n DiagramEntryProps,\n DiagramExitProps,\n DiagramFrameProps,\n DiagramGroupProps,\n DiagramGuideProps,\n DiagramJunctionProps,\n DiagramLaneProps,\n DiagramLineProps,\n DiagramMarkerProps,\n DiagramNodeProps,\n DiagramPhantomProps,\n DiagramSignalProps,\n DiagramTextProps,\n DiagramWaypointProps,\n} from '../react/diagram-types.ts';\n\nexport const DIAGRAM_PRIMITIVE = Symbol.for('@zukhruf/diagram/primitive');\n\nconst PRIMITIVE_KINDS = [\n 'node',\n 'box',\n 'card',\n 'port',\n 'label',\n 'float',\n 'phantom',\n 'appliance',\n 'connector',\n 'junction',\n 'edge',\n 'arrow',\n 'wire',\n 'group',\n 'text',\n 'line',\n 'lane',\n 'signal',\n 'frame',\n 'marker',\n 'guide',\n 'waypoint',\n 'entry',\n 'exit',\n 'content',\n] as const;\n\nexport type PrimitiveKind = (typeof PRIMITIVE_KINDS)[number];\n\nexport type PrimitiveComponent<P> = ((props: P) => null) & {\n [DIAGRAM_PRIMITIVE]: PrimitiveKind;\n};\n\nexport function primitive<P>(kind: PrimitiveKind): PrimitiveComponent<P> {\n return Object.assign(() => null, { [DIAGRAM_PRIMITIVE]: kind });\n}\n\nexport function primitiveKind(node: ReactNode): PrimitiveKind | null {\n if (!isValidElement(node)) return null;\n const { type } = node;\n if (typeof type !== 'function' || !(DIAGRAM_PRIMITIVE in type)) return null;\n const kind = type[DIAGRAM_PRIMITIVE];\n return isPrimitiveKind(kind) ? kind : null;\n}\n\nfunction isPrimitiveKind(value: unknown): value is PrimitiveKind {\n return PRIMITIVE_KINDS.some((kind) => kind === value);\n}\n\ntype CompileContext = {\n groupId?: string;\n};\n\ntype CompileResult = {\n nodes: DiagramNode[];\n edges: DiagramEdge[];\n groups: DiagramGraphIR['groups'];\n annotations: DiagramAnnotation[];\n lanes: DiagramLane[];\n signals: DiagramSignal[];\n frames: DiagramFrameElement[];\n guides: DiagramGuide[];\n};\n\nfunction emptyCompileResult(): CompileResult {\n return {\n nodes: [],\n edges: [],\n groups: [],\n annotations: [],\n lanes: [],\n signals: [],\n frames: [],\n guides: [],\n };\n}\n\nfunction mergeCompileResults(target: CompileResult, source: CompileResult) {\n target.nodes.push(...source.nodes);\n target.edges.push(...source.edges);\n target.groups.push(...source.groups);\n target.annotations.push(...source.annotations);\n target.lanes.push(...source.lanes);\n target.signals.push(...source.signals);\n target.frames.push(...source.frames);\n target.guides.push(...source.guides);\n}\n\nexport function compileGraph(\n children: ReactNode,\n layout: DiagramGraphLayout | undefined,\n): DiagramGraphIR {\n const result = compileChildren(children, {});\n if (\n result.lanes.length > 0 ||\n result.signals.length > 0 ||\n result.frames.length > 0\n ) {\n throw new Error(\n 'A graph diagram cannot contain Diagram.Lane, Diagram.Signal or Diagram.Frame; draw those with SvgTimelineDiagram.',\n );\n }\n return {\n nodes: result.nodes,\n edges: result.edges,\n groups: result.groups,\n annotations: result.annotations,\n guides: result.guides,\n layout,\n };\n}\n\nexport function compileTimeline(children: ReactNode): DiagramTimelineSpec {\n const result = compileChildren(children, {});\n if (\n result.nodes.length > 0 ||\n result.edges.length > 0 ||\n result.groups.length > 0 ||\n result.annotations.length > 0 ||\n result.guides.length > 0\n ) {\n throw new Error(\n 'A timeline diagram only accepts Diagram.Lane, Diagram.Signal and Diagram.Frame; draw other primitives with SvgGraphDiagram or CanvasGraphDiagram.',\n );\n }\n return {\n lanes: result.lanes,\n signals: result.signals,\n frame: result.frames[0],\n };\n}\n\nfunction compileChildren(\n children: ReactNode,\n context: CompileContext,\n): CompileResult {\n const result = emptyCompileResult();\n Children.forEach(children, (child) => {\n if (child === null || child === undefined || typeof child === 'boolean')\n return;\n if (isTextNode(child)) {\n if (String(child).trim().length === 0) return;\n throw new Error(\n `Unexpected text \"${String(child).trim()}\" directly inside Diagram.`,\n );\n }\n if (!isValidElement(child)) {\n throw new Error('Diagram only accepts Diagram primitives as children.');\n }\n if (child.type === Fragment) {\n throw new Error(\n 'Diagram does not accept React fragments. Place Diagram primitives directly or return an array of primitives.',\n );\n }\n\n const kind = primitiveKind(child);\n if (!kind) {\n const name =\n typeof child.type === 'function' ? child.type.name : String(child.type);\n throw new Error(\n `Diagram cannot compile <${name || 'Component'} />. Use direct Diagram primitives as children.`,\n );\n }\n\n if (isNodeKind(kind)) {\n result.nodes.push(compileNode(kind, child, context));\n return;\n }\n if (isEdgeKind(kind)) {\n result.edges.push(compileEdge(kind, child));\n return;\n }\n if (kind === 'group') {\n const group = compileGroup(child, context);\n result.groups.push(group.group);\n mergeCompileResults(result, group.children);\n return;\n }\n if (kind === 'text') {\n result.annotations.push(compileText(child));\n return;\n }\n if (kind === 'lane') {\n result.lanes.push(compileLane(child));\n return;\n }\n if (kind === 'signal') {\n result.signals.push(compileSignal(child));\n return;\n }\n if (kind === 'frame') {\n if (result.frames.length > 0) {\n throw new Error(\n 'Diagram supports one Frame in lane/signal layout for now.',\n );\n }\n result.frames.push(compileFrame(child));\n return;\n }\n if (kind === 'guide') {\n result.guides.push(requirePrimitiveProps<DiagramGuideProps>(child));\n return;\n }\n\n throw new Error(`<Diagram.${kind}> cannot be a direct child of Diagram.`);\n });\n return result;\n}\n\nfunction isTextNode(child: ReactNode): child is string | number {\n return typeof child === 'string' || typeof child === 'number';\n}\n\nfunction isNodeKind(kind: PrimitiveKind): boolean {\n return (\n kind === 'node' ||\n kind === 'box' ||\n kind === 'card' ||\n kind === 'port' ||\n kind === 'label' ||\n kind === 'float' ||\n kind === 'phantom' ||\n kind === 'appliance' ||\n kind === 'connector' ||\n kind === 'junction' ||\n kind === 'marker'\n );\n}\n\nfunction isEdgeKind(kind: PrimitiveKind): boolean {\n return kind === 'edge' || kind === 'arrow' || kind === 'wire';\n}\n\nfunction requirePrimitiveProps<P>(child: ReactElement): P {\n // React's own guard types the element's props; only the calling primitive\n // knows their shape P.\n if (!isValidElement<P>(child)) {\n throw new Error('Diagram only accepts Diagram primitives as children.');\n }\n return child.props;\n}\n\nfunction compileNode(\n kind: PrimitiveKind,\n child: ReactElement,\n context: CompileContext,\n): DiagramNode {\n if (kind === 'phantom') {\n const props = requirePrimitiveProps<DiagramPhantomProps>(child);\n const label = compileLabelChildren(props.children, 'Diagram.Phantom');\n const hasLabel = label.length > 0;\n return {\n id: props.id,\n label: hasLabel ? label : '',\n row: props.row,\n col: props.col,\n width: props.width ?? 1,\n height: props.height ?? 1,\n ...((props.group ?? context.groupId)\n ? { group: props.group ?? context.groupId }\n : {}),\n frame: 'none',\n hidden: props.hidden ?? !hasLabel,\n ...(props.fontSize ? { fontSize: props.fontSize } : {}),\n ...(props.fontWeight ? { fontWeight: props.fontWeight } : {}),\n ...(props.textColor ? { textColor: props.textColor } : {}),\n ...(props.accent !== undefined ? { accent: props.accent } : {}),\n ...(props.textAlign ? { textAlign: props.textAlign } : {}),\n ...(props.connectable !== undefined\n ? { connectable: props.connectable }\n : {}),\n };\n }\n\n if (kind === 'junction') {\n const props = requirePrimitiveProps<DiagramJunctionProps>(child);\n const label = compileLabelChildren(props.children, 'Diagram.Junction');\n const group = props.group ?? context.groupId;\n return {\n id: props.id,\n kind: 'junction',\n label: label.length > 0 ? label : '',\n row: props.row,\n col: props.col,\n width: props.width ?? 16,\n height: props.height ?? 16,\n ...(group ? { group } : {}),\n frame: 'none',\n connectable: true,\n hidden: props.hidden,\n accent: props.accent,\n tone: props.tone,\n fontSize: props.fontSize,\n fontWeight: props.fontWeight,\n textColor: props.textColor,\n caption: props.caption,\n captionSide: props.captionSide,\n captionOffset: props.captionOffset,\n captionColor: props.captionColor,\n captionFontSize: props.captionFontSize,\n captionFontWeight: props.captionFontWeight,\n };\n }\n\n if (kind === 'connector') {\n const props = requirePrimitiveProps<DiagramConnectorProps>(child);\n const label = compileLabelChildren(props.children, 'Diagram.Connector');\n const group = props.group ?? context.groupId;\n return {\n id: props.id,\n kind: 'connector',\n label: label.length > 0 ? label : '',\n row: props.row,\n col: props.col,\n colSpan: props.colSpan,\n width: props.width ?? 148,\n height: props.height ?? 40,\n ...(group ? { group } : {}),\n frame: 'solid',\n connectable: true,\n rx: props.rx ?? 10,\n accent: props.accent,\n tone: props.tone,\n texture: props.texture,\n icon: props.icon,\n iconSize: props.iconSize,\n ports: props.ports,\n fontSize: props.fontSize,\n fontWeight: props.fontWeight,\n textColor: props.textColor,\n caption: props.caption,\n captionSide: props.captionSide,\n captionOffset: props.captionOffset,\n captionColor: props.captionColor,\n captionFontSize: props.captionFontSize,\n captionFontWeight: props.captionFontWeight,\n };\n }\n\n if (kind === 'appliance') {\n const props = requirePrimitiveProps<DiagramApplianceProps>(child);\n const label = compileLabelChildren(props.children, 'Diagram.Appliance');\n const group = props.group ?? context.groupId;\n return {\n id: props.id,\n kind: 'appliance',\n label: label.length > 0 ? label : '',\n row: props.row,\n col: props.col,\n width: props.width ?? 112,\n height: props.height ?? 72,\n ...(group ? { group } : {}),\n frame: 'none',\n connectable: true,\n accent: props.accent,\n tone: props.tone,\n texture: props.texture,\n ports: props.ports,\n fontSize: props.fontSize,\n fontWeight: props.fontWeight,\n textColor: props.textColor,\n caption: props.caption,\n captionSide: props.captionSide,\n captionOffset: props.captionOffset,\n captionColor: props.captionColor,\n captionFontSize: props.captionFontSize,\n captionFontWeight: props.captionFontWeight,\n appliancePorts: props.appliancePorts,\n antenna: props.antenna,\n slant: props.slant,\n };\n }\n\n const props = requirePrimitiveProps<DiagramNodeProps | DiagramMarkerProps>(\n child,\n );\n const { children: _children, ...nodeProps } = props;\n const { labelChildren, content } = splitNodeContent(props.children, kind);\n const label = compileLabelChildren(labelChildren, `Diagram.${kind}`);\n const group = nodeProps.group ?? context.groupId;\n return {\n ...nodeProps,\n label: label.length > 0 ? label : '',\n ...(content.length > 0 ? { content: content[0] } : {}),\n ...(kind === 'marker'\n ? {\n kind: 'marker' as const,\n width: nodeProps.width ?? 72,\n height: nodeProps.height ?? 76,\n }\n : {}),\n ...(group ? { group } : {}),\n frame: nodeFrame(kind, nodeProps.frame),\n textAlign:\n kind === 'card' ? (nodeProps.textAlign ?? 'start') : nodeProps.textAlign,\n hidden: kind === 'marker' ? false : nodeProps.hidden,\n connectable: kind === 'float' ? false : nodeProps.connectable,\n ...(kind === 'marker' ? { frame: nodeProps.frame ?? 'none' } : {}),\n };\n}\n\nconst CONTENT_HOSTS = new Set<PrimitiveKind>(['node', 'box', 'card']);\n\nfunction splitNodeContent(children: ReactNode, kind: PrimitiveKind) {\n const labelChildren: ReactNode[] = [];\n const content: ReactNode[] = [];\n Children.forEach(children, (child) => {\n if (!isValidElement(child) || primitiveKind(child) !== 'content') {\n labelChildren.push(child);\n return;\n }\n if (!CONTENT_HOSTS.has(kind)) {\n throw new Error(\n `Diagram.Content goes inside Diagram.Box, Diagram.Card or Diagram.Node, not Diagram.${kind}.`,\n );\n }\n if (content.length > 0) {\n throw new Error(`Diagram.${kind} accepts one Diagram.Content.`);\n }\n content.push(requirePrimitiveProps<DiagramContentProps>(child).children);\n });\n return { labelChildren, content };\n}\n\nfunction nodeFrame(kind: PrimitiveKind, explicit: DiagramNode['frame']) {\n if (explicit) return explicit;\n if (kind === 'port') return 'transparent';\n if (kind === 'label') return 'none';\n if (kind === 'float') return 'flat';\n if (kind === 'appliance') return 'none';\n if (kind === 'marker') return 'none';\n return 'solid';\n}\n\nfunction compileEdge(kind: PrimitiveKind, child: ReactElement): DiagramEdge {\n const props = requirePrimitiveProps<DiagramEdgeProps>(child);\n const { children: _children, badgeLabel, ...edgeProps } = props;\n const lines: string[] = [];\n const waypoints: DiagramWaypoint[] = [...(props.waypoints ?? [])];\n let entrySide = props.entrySide;\n let exitSide = props.exitSide;\n let entryGap = props.entryGap;\n\n Children.forEach(props.children, (edgeChild) => {\n if (\n edgeChild === null ||\n edgeChild === undefined ||\n typeof edgeChild === 'boolean'\n )\n return;\n if (isTextNode(edgeChild)) {\n const text = String(edgeChild).trim();\n if (text.length > 0) lines.push(text);\n return;\n }\n if (!isValidElement(edgeChild)) {\n throw new Error(\n 'Diagram edges only accept text, Line, Entry, Exit, and Waypoint children.',\n );\n }\n if (edgeChild.type === Fragment) {\n throw new Error(\n 'Diagram edges do not accept fragments. Use direct Line/Entry/Exit/Waypoint children.',\n );\n }\n const edgeChildKind = primitiveKind(edgeChild);\n if (edgeChildKind === 'line') {\n lines.push(lineText(edgeChild));\n return;\n }\n if (edgeChildKind === 'entry') {\n const entry = requirePrimitiveProps<DiagramEntryProps>(edgeChild);\n entrySide = entry.side;\n entryGap = entry.gap ?? entryGap;\n return;\n }\n if (edgeChildKind === 'exit') {\n exitSide = requirePrimitiveProps<DiagramExitProps>(edgeChild).side;\n return;\n }\n if (edgeChildKind === 'waypoint') {\n waypoints.push(requirePrimitiveProps<DiagramWaypointProps>(edgeChild));\n return;\n }\n throw new Error(\n `Diagram edge cannot contain <Diagram.${edgeChildKind ?? 'Unknown'}>.`,\n );\n });\n\n return {\n ...edgeProps,\n ...(lines.length > 0 ? { label: lines } : {}),\n ...(badgeLabel !== undefined\n ? { badgeLabel: normalizeStringLines(badgeLabel) }\n : {}),\n ...(waypoints.length > 0 ? { waypoints } : {}),\n ...(entrySide ? { entrySide } : {}),\n ...(exitSide ? { exitSide } : {}),\n ...(entryGap !== undefined ? { entryGap } : {}),\n headless: kind === 'wire' ? true : edgeProps.headless,\n };\n}\n\nfunction normalizeStringLines(value: string | string[]) {\n return (Array.isArray(value) ? value : [value])\n .map((line) => line.trim())\n .filter(Boolean);\n}\n\nfunction compileGroup(\n child: ReactElement,\n context: CompileContext,\n): { group: DiagramGraphIR['groups'][number]; children: CompileResult } {\n const props = requirePrimitiveProps<DiagramGroupProps>(child);\n const children = compileChildren(props.children, {\n ...context,\n groupId: props.id,\n });\n const bounds =\n props.rowStart !== undefined &&\n props.rowEnd !== undefined &&\n props.colStart !== undefined &&\n props.colEnd !== undefined\n ? {\n rowStart: props.rowStart,\n rowEnd: props.rowEnd,\n colStart: props.colStart,\n colEnd: props.colEnd,\n }\n : inferGroupBounds(props.id, children.nodes, children.groups);\n\n return {\n group: {\n id: props.id,\n label: normalizeGroupLabel(props.label),\n labelAlign: props.labelAlign,\n labelSide: props.labelSide,\n accent: props.accent,\n tone: props.tone,\n texture: props.texture,\n rx: props.rx,\n frame: props.frame,\n fill: props.fill,\n ports: props.ports,\n parent: context.groupId,\n tight: props.tight,\n tightX: props.tightX,\n tightY: props.tightY,\n titleBand: props.titleBand,\n titleGap: props.titleGap,\n padding: props.padding,\n dividers: props.dividers,\n bounds,\n },\n children,\n };\n}\n\nfunction normalizeGroupLabel(label: string | string[] | undefined) {\n if (Array.isArray(label)) {\n return label.map((line) => line.trim()).filter(Boolean);\n }\n return label?.trim() ?? '';\n}\n\nfunction inferGroupBounds(\n groupId: string,\n nodes: DiagramNode[],\n groups: DiagramGraphIR['groups'] = [],\n) {\n const grouped = nodes.filter((node) => node.group === groupId);\n const childGroups = groups.filter((group) => group.parent === groupId);\n if (grouped.length === 0 && childGroups.length === 0) {\n throw new Error(\n `Diagram.Group \"${groupId}\" needs bounds or direct node/group children so bounds can be inferred.`,\n );\n }\n const bounds = emptyGroupBounds();\n for (const node of grouped) {\n if (node.row === undefined || node.col === undefined) return undefined;\n includeGroupBounds(bounds, {\n rowStart: node.row,\n rowEnd: node.row,\n colStart: node.col,\n colEnd: node.col + (node.colSpan ?? 1) - 1,\n });\n }\n for (const group of childGroups) {\n if (!group.bounds) return undefined;\n includeGroupBounds(bounds, group.bounds);\n }\n return bounds;\n}\n\nfunction emptyGroupBounds(): NonNullable<\n DiagramGraphIR['groups'][number]['bounds']\n> {\n return {\n rowStart: Number.POSITIVE_INFINITY,\n rowEnd: Number.NEGATIVE_INFINITY,\n colStart: Number.POSITIVE_INFINITY,\n colEnd: Number.NEGATIVE_INFINITY,\n };\n}\n\nfunction includeGroupBounds(\n target: NonNullable<DiagramGraphIR['groups'][number]['bounds']>,\n source: NonNullable<DiagramGraphIR['groups'][number]['bounds']>,\n) {\n target.rowStart = Math.min(target.rowStart, source.rowStart);\n target.rowEnd = Math.max(target.rowEnd, source.rowEnd);\n target.colStart = Math.min(target.colStart, source.colStart);\n target.colEnd = Math.max(target.colEnd, source.colEnd);\n}\n\nfunction compileText(child: ReactElement): DiagramAnnotation {\n const props = requirePrimitiveProps<DiagramTextProps>(child);\n const { children: _children, ...textProps } = props;\n const lines = compileStringLines(props.children, 'Diagram.Text');\n return {\n ...textProps,\n text: lines.length > 0 ? lines : [''],\n };\n}\n\nfunction compileLane(child: ReactElement): DiagramLane {\n const props = requirePrimitiveProps<DiagramLaneProps>(child);\n return {\n id: props.id,\n label: compileStringLines(props.children, 'Diagram.Lane'),\n accent: props.accent,\n };\n}\n\nfunction normalizeBoxed(\n boxed: boolean | DiagramSignalBox | undefined,\n): DiagramSignalBox | undefined {\n if (boxed === true) return 'source';\n if (!boxed) return undefined;\n return boxed;\n}\n\nfunction compileSignal(child: ReactElement): DiagramSignal {\n const props = requirePrimitiveProps<DiagramSignalProps>(child);\n const { children: _children, boxed, ...signalProps } = props;\n const normalizedBoxed = normalizeBoxed(boxed);\n return {\n ...signalProps,\n label: compileStringLines(props.children, 'Diagram.Signal'),\n ...(normalizedBoxed ? { boxed: normalizedBoxed } : {}),\n };\n}\n\nfunction compileFrame(child: ReactElement): DiagramFrameElement {\n const props = requirePrimitiveProps<DiagramFrameProps>(child);\n const signals: DiagramSignal[] = [];\n Children.forEach(props.children, (frameChild) => {\n if (\n frameChild === null ||\n frameChild === undefined ||\n typeof frameChild === 'boolean'\n )\n return;\n if (!isValidElement(frameChild) || primitiveKind(frameChild) !== 'signal') {\n throw new Error(\n 'Diagram.Frame only accepts direct Diagram.Signal children.',\n );\n }\n signals.push(compileSignal(frameChild));\n });\n return { label: props.label, signals };\n}\n\nfunction compileStringLines(children: ReactNode, owner: string): string[] {\n const lines: string[] = [];\n Children.forEach(children, (child) => {\n if (child === null || child === undefined || typeof child === 'boolean')\n return;\n if (isTextNode(child)) {\n const text = String(child).trim();\n if (text.length > 0) lines.push(text);\n return;\n }\n if (!isValidElement(child)) {\n throw new Error(`${owner} only accepts text or Diagram.Line children.`);\n }\n if (child.type === Fragment) {\n throw new Error(\n `${owner} does not accept React fragments. Use direct text or Diagram.Line children.`,\n );\n }\n if (primitiveKind(child) === 'line') {\n lines.push(lineText(child));\n return;\n }\n throw new Error(`${owner} only accepts text or Diagram.Line children.`);\n });\n return lines;\n}\n\nfunction compileLabelChildren(\n children: ReactNode,\n owner: string,\n): DiagramLabelLine[] {\n const lines: DiagramLabelLine[] = [];\n Children.forEach(children, (child) => {\n if (child === null || child === undefined || typeof child === 'boolean')\n return;\n if (isTextNode(child)) {\n const text = String(child).trim();\n if (text.length > 0) lines.push(text);\n return;\n }\n if (!isValidElement(child)) {\n throw new Error(`${owner} only accepts text or Diagram.Line children.`);\n }\n if (child.type === Fragment) {\n throw new Error(\n `${owner} does not accept React fragments. Use direct text or Diagram.Line children.`,\n );\n }\n if (primitiveKind(child) === 'line') {\n const props = requirePrimitiveProps<DiagramLineProps>(child);\n lines.push({\n text: lineText(child),\n ...(props.textColor ? { textColor: props.textColor } : {}),\n ...(props.fontWeight ? { fontWeight: props.fontWeight } : {}),\n });\n return;\n }\n throw new Error(`${owner} only accepts text or Diagram.Line children.`);\n });\n return lines;\n}\n\nfunction lineText(child: ReactElement): string {\n const props = requirePrimitiveProps<DiagramLineProps>(child);\n return Children.toArray(props.children)\n .map((part) => {\n if (!isTextNode(part)) {\n throw new Error('Diagram.Line only accepts text children.');\n }\n return String(part).trim();\n })\n .filter(Boolean)\n .join('');\n}\n\nexport function validateGraph(ir: DiagramGraphIR) {\n const nodeIds = new Set<string>();\n for (const node of ir.nodes) {\n if (nodeIds.has(node.id))\n throw new Error(`Duplicate Diagram node id \"${node.id}\".`);\n nodeIds.add(node.id);\n }\n const groupIds = new Set<string>();\n for (const group of ir.groups) {\n if (groupIds.has(group.id))\n throw new Error(`Duplicate Diagram group id \"${group.id}\".`);\n groupIds.add(group.id);\n }\n const guideIds = new Set<string>();\n for (const guide of ir.guides) {\n if (!guide.id) continue;\n if (guideIds.has(guide.id))\n throw new Error(`Duplicate Diagram guide id \"${guide.id}\".`);\n guideIds.add(guide.id);\n }\n const nodesById = new Map(ir.nodes.map((node) => [node.id, node]));\n const groupsById = new Map(ir.groups.map((group) => [group.id, group]));\n for (const node of ir.nodes) {\n if (groupsById.has(node.id)) {\n throw new Error(\n `Diagram node id \"${node.id}\" conflicts with a Diagram group id. Node and group endpoint ids must be unique.`,\n );\n }\n if (\n node.bodyFontSize !== undefined &&\n (!Number.isFinite(node.bodyFontSize) || node.bodyFontSize <= 0)\n ) {\n throw new Error(\n `Diagram node \"${node.id}\" bodyFontSize must be a positive finite number, got ${node.bodyFontSize}.`,\n );\n }\n if (\n node.bodyLineGap !== undefined &&\n (!Number.isFinite(node.bodyLineGap) || node.bodyLineGap < 0)\n ) {\n throw new Error(\n `Diagram node \"${node.id}\" bodyLineGap must be a non-negative finite number, got ${node.bodyLineGap}.`,\n );\n }\n }\n for (const edge of ir.edges) {\n if (\n edge.route !== undefined &&\n edge.route !== 'orthogonal' &&\n edge.route !== 'straight'\n ) {\n throw new Error(\n `Diagram edge route must be \"orthogonal\" or \"straight\", got \"${edge.route}\".`,\n );\n }\n if (\n edge.labelLineGap !== undefined &&\n (!Number.isFinite(edge.labelLineGap) || edge.labelLineGap < 0)\n ) {\n throw new Error(\n `Diagram edge labelLineGap must be a non-negative finite number, got ${edge.labelLineGap}.`,\n );\n }\n if (edge.exitOffset !== undefined && !Number.isFinite(edge.exitOffset)) {\n throw new Error(\n `Diagram edge exitOffset must be a finite number, got ${edge.exitOffset}.`,\n );\n }\n if (edge.entryOffset !== undefined && !Number.isFinite(edge.entryOffset)) {\n throw new Error(\n `Diagram edge entryOffset must be a finite number, got ${edge.entryOffset}.`,\n );\n }\n if (\n edge.stubDistance !== undefined &&\n (!Number.isFinite(edge.stubDistance) || edge.stubDistance < 0)\n ) {\n throw new Error(\n `Diagram edge stubDistance must be a non-negative finite number, got ${edge.stubDistance}.`,\n );\n }\n const sourceNodeId = endpointNodeId(edge.from);\n const targetNodeId = endpointNodeId(edge.to);\n if (!nodeIds.has(sourceNodeId) && !groupsById.has(sourceNodeId)) {\n throw new Error(\n `Diagram edge ${edge.from}->${edge.to} references missing source \"${sourceNodeId}\".`,\n );\n }\n if (!nodeIds.has(targetNodeId) && !groupsById.has(targetNodeId)) {\n throw new Error(\n `Diagram edge ${edge.from}->${edge.to} references missing target \"${targetNodeId}\".`,\n );\n }\n const sourcePortId = edge.from.includes(':')\n ? edge.from.slice(edge.from.indexOf(':') + 1)\n : undefined;\n const targetPortId = edge.to.includes(':')\n ? edge.to.slice(edge.to.indexOf(':') + 1)\n : undefined;\n if (\n sourcePortId &&\n !(\n nodesById\n .get(sourceNodeId)\n ?.ports?.some((port) => port.id === sourcePortId) ||\n groupsById\n .get(sourceNodeId)\n ?.ports?.some((port) => port.id === sourcePortId)\n )\n ) {\n throw new Error(\n `Diagram edge ${edge.from}->${edge.to} references missing source port \"${sourcePortId}\" on \"${sourceNodeId}\".`,\n );\n }\n if (\n targetPortId &&\n !(\n nodesById\n .get(targetNodeId)\n ?.ports?.some((port) => port.id === targetPortId) ||\n groupsById\n .get(targetNodeId)\n ?.ports?.some((port) => port.id === targetPortId)\n )\n ) {\n throw new Error(\n `Diagram edge ${edge.from}->${edge.to} references missing target port \"${targetPortId}\" on \"${targetNodeId}\".`,\n );\n }\n }\n for (const annotation of ir.annotations) {\n if (\n annotation.lineGap !== undefined &&\n (!Number.isFinite(annotation.lineGap) || annotation.lineGap < 0)\n ) {\n throw new Error(\n `Diagram.Text lineGap must be a non-negative finite number, got ${annotation.lineGap}.`,\n );\n }\n }\n}\n\nexport function validateTimeline(ir: DiagramTimelineSpec) {\n const laneIds = new Set<string>();\n for (const lane of ir.lanes) {\n if (laneIds.has(lane.id))\n throw new Error(`Duplicate Diagram lane id \"${lane.id}\".`);\n laneIds.add(lane.id);\n }\n const signals = [...ir.signals, ...(ir.frame?.signals ?? [])];\n for (const signal of signals) {\n if (!laneIds.has(signal.from)) {\n throw new Error(\n `Diagram signal ${signal.from}->${signal.to} references missing lane \"${signal.from}\".`,\n );\n }\n if (!laneIds.has(signal.to)) {\n throw new Error(\n `Diagram signal ${signal.from}->${signal.to} references missing lane \"${signal.to}\".`,\n );\n }\n }\n}\n\nfunction endpointNodeId(ref: string) {\n const separator = ref.indexOf(':');\n if (separator === -1) return ref;\n return ref.slice(0, separator);\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"diagram-compile.js","names":["Children","Fragment","isValidElement","parseEndpointRef","DIAGRAM_PRIMITIVE","Symbol","for","PRIMITIVE_KINDS","primitive","kind","Object","assign","primitiveKind","node","type","isPrimitiveKind","value","some","emptyCompileResult","nodes","edges","groups","annotations","lanes","signals","frames","guides","mergeCompileResults","target","source","push","compileGraph","children","layout","result","compileChildren","length","Error","compileTimeline","frame","context","forEach","child","undefined","isTextNode","String","trim","name","isNodeKind","compileNode","isEdgeKind","compileEdge","group","compileGroup","compileText","compileLane","compileSignal","compileFrame","requirePrimitiveProps","props","label","compileLabelChildren","hasLabel","id","row","col","width","height","groupId","hidden","fontSize","fontWeight","textColor","accent","textAlign","connectable","tone","caption","captionSide","captionOffset","captionColor","captionFontSize","captionFontWeight","colSpan","rx","texture","icon","iconSize","ports","appliancePorts","antenna","slant","_children","nodeProps","labelChildren","content","splitNodeContent","nodeFrame","CONTENT_HOSTS","Set","has","explicit","badgeLabel","edgeProps","lines","waypoints","entrySide","exitSide","entryGap","edgeChild","text","edgeChildKind","lineText","entry","side","gap","normalizeStringLines","headless","Array","isArray","map","line","filter","Boolean","bounds","rowStart","rowEnd","colStart","colEnd","inferGroupBounds","normalizeGroupLabel","labelAlign","labelSide","fill","parent","tight","tightX","tightY","titleBand","titleGap","padding","dividers","grouped","childGroups","emptyGroupBounds","includeGroupBounds","Number","POSITIVE_INFINITY","NEGATIVE_INFINITY","Math","min","max","textProps","compileStringLines","normalizeBoxed","boxed","signalProps","normalizedBoxed","frameChild","owner","toArray","part","join","validateGraph","ir","nodeIds","add","groupIds","guideIds","guide","nodesById","Map","groupsById","bodyFontSize","isFinite","bodyLineGap","edge","route","labelLineGap","exitOffset","entryOffset","stubDistance","nodeId","sourceNodeId","portId","sourcePortId","from","targetNodeId","targetPortId","to","get","port","annotation","lineGap","validateTimeline","laneIds","lane","signal"],"sources":["../../../src/lib/compiler/diagram-compile.ts"],"sourcesContent":["import {\n Children,\n Fragment,\n type ReactElement,\n type ReactNode,\n isValidElement,\n} from 'react';\n\nimport type {\n DiagramAnnotation,\n DiagramEdge,\n DiagramFrameElement,\n DiagramGraphIR,\n DiagramGraphLayout,\n DiagramGuide,\n DiagramLabelLine,\n DiagramLane,\n DiagramNode,\n DiagramSignal,\n DiagramSignalBox,\n DiagramTimelineSpec,\n DiagramWaypoint,\n} from '../model/diagram-ir.ts';\nimport { parseEndpointRef } from '../model/endpoint-ref.ts';\nimport type {\n DiagramApplianceProps,\n DiagramConnectorProps,\n DiagramContentProps,\n DiagramEdgeProps,\n DiagramEntryProps,\n DiagramExitProps,\n DiagramFrameProps,\n DiagramGroupProps,\n DiagramGuideProps,\n DiagramJunctionProps,\n DiagramLaneProps,\n DiagramLineProps,\n DiagramMarkerProps,\n DiagramNodeProps,\n DiagramPhantomProps,\n DiagramSignalProps,\n DiagramTextProps,\n DiagramWaypointProps,\n} from '../react/diagram-types.ts';\n\nexport const DIAGRAM_PRIMITIVE = Symbol.for('@zukhruf/diagram/primitive');\n\nconst PRIMITIVE_KINDS = [\n 'node',\n 'box',\n 'card',\n 'port',\n 'label',\n 'float',\n 'phantom',\n 'appliance',\n 'connector',\n 'junction',\n 'edge',\n 'arrow',\n 'wire',\n 'group',\n 'text',\n 'line',\n 'lane',\n 'signal',\n 'frame',\n 'marker',\n 'guide',\n 'waypoint',\n 'entry',\n 'exit',\n 'content',\n] as const;\n\nexport type PrimitiveKind = (typeof PRIMITIVE_KINDS)[number];\n\nexport type PrimitiveComponent<P> = ((props: P) => null) & {\n [DIAGRAM_PRIMITIVE]: PrimitiveKind;\n};\n\nexport function primitive<P>(kind: PrimitiveKind): PrimitiveComponent<P> {\n return Object.assign(() => null, { [DIAGRAM_PRIMITIVE]: kind });\n}\n\nexport function primitiveKind(node: ReactNode): PrimitiveKind | null {\n if (!isValidElement(node)) return null;\n const { type } = node;\n if (typeof type !== 'function' || !(DIAGRAM_PRIMITIVE in type)) return null;\n const kind = type[DIAGRAM_PRIMITIVE];\n return isPrimitiveKind(kind) ? kind : null;\n}\n\nfunction isPrimitiveKind(value: unknown): value is PrimitiveKind {\n return PRIMITIVE_KINDS.some((kind) => kind === value);\n}\n\ntype CompileContext = {\n groupId?: string;\n};\n\ntype CompileResult = {\n nodes: DiagramNode[];\n edges: DiagramEdge[];\n groups: DiagramGraphIR['groups'];\n annotations: DiagramAnnotation[];\n lanes: DiagramLane[];\n signals: DiagramSignal[];\n frames: DiagramFrameElement[];\n guides: DiagramGuide[];\n};\n\nfunction emptyCompileResult(): CompileResult {\n return {\n nodes: [],\n edges: [],\n groups: [],\n annotations: [],\n lanes: [],\n signals: [],\n frames: [],\n guides: [],\n };\n}\n\nfunction mergeCompileResults(target: CompileResult, source: CompileResult) {\n target.nodes.push(...source.nodes);\n target.edges.push(...source.edges);\n target.groups.push(...source.groups);\n target.annotations.push(...source.annotations);\n target.lanes.push(...source.lanes);\n target.signals.push(...source.signals);\n target.frames.push(...source.frames);\n target.guides.push(...source.guides);\n}\n\nexport function compileGraph(\n children: ReactNode,\n layout: DiagramGraphLayout | undefined,\n): DiagramGraphIR {\n const result = compileChildren(children, {});\n if (\n result.lanes.length > 0 ||\n result.signals.length > 0 ||\n result.frames.length > 0\n ) {\n throw new Error(\n 'A graph diagram cannot contain Diagram.Lane, Diagram.Signal or Diagram.Frame; draw those with SvgTimelineDiagram.',\n );\n }\n return {\n nodes: result.nodes,\n edges: result.edges,\n groups: result.groups,\n annotations: result.annotations,\n guides: result.guides,\n layout,\n };\n}\n\nexport function compileTimeline(children: ReactNode): DiagramTimelineSpec {\n const result = compileChildren(children, {});\n if (\n result.nodes.length > 0 ||\n result.edges.length > 0 ||\n result.groups.length > 0 ||\n result.annotations.length > 0 ||\n result.guides.length > 0\n ) {\n throw new Error(\n 'A timeline diagram only accepts Diagram.Lane, Diagram.Signal and Diagram.Frame; draw other primitives with SvgGraphDiagram or CanvasGraphDiagram.',\n );\n }\n return {\n lanes: result.lanes,\n signals: result.signals,\n frame: result.frames[0],\n };\n}\n\nfunction compileChildren(\n children: ReactNode,\n context: CompileContext,\n): CompileResult {\n const result = emptyCompileResult();\n Children.forEach(children, (child) => {\n if (child === null || child === undefined || typeof child === 'boolean')\n return;\n if (isTextNode(child)) {\n if (String(child).trim().length === 0) return;\n throw new Error(\n `Unexpected text \"${String(child).trim()}\" directly inside Diagram.`,\n );\n }\n if (!isValidElement(child)) {\n throw new Error('Diagram only accepts Diagram primitives as children.');\n }\n if (child.type === Fragment) {\n throw new Error(\n 'Diagram does not accept React fragments. Place Diagram primitives directly or return an array of primitives.',\n );\n }\n\n const kind = primitiveKind(child);\n if (!kind) {\n const name =\n typeof child.type === 'function' ? child.type.name : String(child.type);\n throw new Error(\n `Diagram cannot compile <${name || 'Component'} />. Use direct Diagram primitives as children.`,\n );\n }\n\n if (isNodeKind(kind)) {\n result.nodes.push(compileNode(kind, child, context));\n return;\n }\n if (isEdgeKind(kind)) {\n result.edges.push(compileEdge(kind, child));\n return;\n }\n if (kind === 'group') {\n const group = compileGroup(child, context);\n result.groups.push(group.group);\n mergeCompileResults(result, group.children);\n return;\n }\n if (kind === 'text') {\n result.annotations.push(compileText(child));\n return;\n }\n if (kind === 'lane') {\n result.lanes.push(compileLane(child));\n return;\n }\n if (kind === 'signal') {\n result.signals.push(compileSignal(child));\n return;\n }\n if (kind === 'frame') {\n if (result.frames.length > 0) {\n throw new Error(\n 'Diagram supports one Frame in lane/signal layout for now.',\n );\n }\n result.frames.push(compileFrame(child));\n return;\n }\n if (kind === 'guide') {\n result.guides.push(requirePrimitiveProps<DiagramGuideProps>(child));\n return;\n }\n\n throw new Error(`<Diagram.${kind}> cannot be a direct child of Diagram.`);\n });\n return result;\n}\n\nfunction isTextNode(child: ReactNode): child is string | number {\n return typeof child === 'string' || typeof child === 'number';\n}\n\nfunction isNodeKind(kind: PrimitiveKind): boolean {\n return (\n kind === 'node' ||\n kind === 'box' ||\n kind === 'card' ||\n kind === 'port' ||\n kind === 'label' ||\n kind === 'float' ||\n kind === 'phantom' ||\n kind === 'appliance' ||\n kind === 'connector' ||\n kind === 'junction' ||\n kind === 'marker'\n );\n}\n\nfunction isEdgeKind(kind: PrimitiveKind): boolean {\n return kind === 'edge' || kind === 'arrow' || kind === 'wire';\n}\n\nfunction requirePrimitiveProps<P>(child: ReactElement): P {\n // React's own guard types the element's props; only the calling primitive\n // knows their shape P.\n if (!isValidElement<P>(child)) {\n throw new Error('Diagram only accepts Diagram primitives as children.');\n }\n return child.props;\n}\n\nfunction compileNode(\n kind: PrimitiveKind,\n child: ReactElement,\n context: CompileContext,\n): DiagramNode {\n if (kind === 'phantom') {\n const props = requirePrimitiveProps<DiagramPhantomProps>(child);\n const label = compileLabelChildren(props.children, 'Diagram.Phantom');\n const hasLabel = label.length > 0;\n return {\n id: props.id,\n label: hasLabel ? label : '',\n row: props.row,\n col: props.col,\n width: props.width ?? 1,\n height: props.height ?? 1,\n ...((props.group ?? context.groupId)\n ? { group: props.group ?? context.groupId }\n : {}),\n frame: 'none',\n hidden: props.hidden ?? !hasLabel,\n ...(props.fontSize ? { fontSize: props.fontSize } : {}),\n ...(props.fontWeight ? { fontWeight: props.fontWeight } : {}),\n ...(props.textColor ? { textColor: props.textColor } : {}),\n ...(props.accent !== undefined ? { accent: props.accent } : {}),\n ...(props.textAlign ? { textAlign: props.textAlign } : {}),\n ...(props.connectable !== undefined\n ? { connectable: props.connectable }\n : {}),\n };\n }\n\n if (kind === 'junction') {\n const props = requirePrimitiveProps<DiagramJunctionProps>(child);\n const label = compileLabelChildren(props.children, 'Diagram.Junction');\n const group = props.group ?? context.groupId;\n return {\n id: props.id,\n kind: 'junction',\n label: label.length > 0 ? label : '',\n row: props.row,\n col: props.col,\n width: props.width ?? 16,\n height: props.height ?? 16,\n ...(group ? { group } : {}),\n frame: 'none',\n connectable: true,\n hidden: props.hidden,\n accent: props.accent,\n tone: props.tone,\n fontSize: props.fontSize,\n fontWeight: props.fontWeight,\n textColor: props.textColor,\n caption: props.caption,\n captionSide: props.captionSide,\n captionOffset: props.captionOffset,\n captionColor: props.captionColor,\n captionFontSize: props.captionFontSize,\n captionFontWeight: props.captionFontWeight,\n };\n }\n\n if (kind === 'connector') {\n const props = requirePrimitiveProps<DiagramConnectorProps>(child);\n const label = compileLabelChildren(props.children, 'Diagram.Connector');\n const group = props.group ?? context.groupId;\n return {\n id: props.id,\n kind: 'connector',\n label: label.length > 0 ? label : '',\n row: props.row,\n col: props.col,\n colSpan: props.colSpan,\n width: props.width ?? 148,\n height: props.height ?? 40,\n ...(group ? { group } : {}),\n frame: 'solid',\n connectable: true,\n rx: props.rx ?? 10,\n accent: props.accent,\n tone: props.tone,\n texture: props.texture,\n icon: props.icon,\n iconSize: props.iconSize,\n ports: props.ports,\n fontSize: props.fontSize,\n fontWeight: props.fontWeight,\n textColor: props.textColor,\n caption: props.caption,\n captionSide: props.captionSide,\n captionOffset: props.captionOffset,\n captionColor: props.captionColor,\n captionFontSize: props.captionFontSize,\n captionFontWeight: props.captionFontWeight,\n };\n }\n\n if (kind === 'appliance') {\n const props = requirePrimitiveProps<DiagramApplianceProps>(child);\n const label = compileLabelChildren(props.children, 'Diagram.Appliance');\n const group = props.group ?? context.groupId;\n return {\n id: props.id,\n kind: 'appliance',\n label: label.length > 0 ? label : '',\n row: props.row,\n col: props.col,\n width: props.width ?? 112,\n height: props.height ?? 72,\n ...(group ? { group } : {}),\n frame: 'none',\n connectable: true,\n accent: props.accent,\n tone: props.tone,\n texture: props.texture,\n ports: props.ports,\n fontSize: props.fontSize,\n fontWeight: props.fontWeight,\n textColor: props.textColor,\n caption: props.caption,\n captionSide: props.captionSide,\n captionOffset: props.captionOffset,\n captionColor: props.captionColor,\n captionFontSize: props.captionFontSize,\n captionFontWeight: props.captionFontWeight,\n appliancePorts: props.appliancePorts,\n antenna: props.antenna,\n slant: props.slant,\n };\n }\n\n const props = requirePrimitiveProps<DiagramNodeProps | DiagramMarkerProps>(\n child,\n );\n const { children: _children, ...nodeProps } = props;\n const { labelChildren, content } = splitNodeContent(props.children, kind);\n const label = compileLabelChildren(labelChildren, `Diagram.${kind}`);\n const group = nodeProps.group ?? context.groupId;\n return {\n ...nodeProps,\n label: label.length > 0 ? label : '',\n ...(content.length > 0 ? { content: content[0] } : {}),\n ...(kind === 'marker'\n ? {\n kind: 'marker' as const,\n width: nodeProps.width ?? 72,\n height: nodeProps.height ?? 76,\n }\n : {}),\n ...(group ? { group } : {}),\n frame: nodeFrame(kind, nodeProps.frame),\n textAlign:\n kind === 'card' ? (nodeProps.textAlign ?? 'start') : nodeProps.textAlign,\n hidden: kind === 'marker' ? false : nodeProps.hidden,\n connectable: kind === 'float' ? false : nodeProps.connectable,\n ...(kind === 'marker' ? { frame: nodeProps.frame ?? 'none' } : {}),\n };\n}\n\nconst CONTENT_HOSTS = new Set<PrimitiveKind>(['node', 'box', 'card']);\n\nfunction splitNodeContent(children: ReactNode, kind: PrimitiveKind) {\n const labelChildren: ReactNode[] = [];\n const content: ReactNode[] = [];\n Children.forEach(children, (child) => {\n if (!isValidElement(child) || primitiveKind(child) !== 'content') {\n labelChildren.push(child);\n return;\n }\n if (!CONTENT_HOSTS.has(kind)) {\n throw new Error(\n `Diagram.Content goes inside Diagram.Box, Diagram.Card or Diagram.Node, not Diagram.${kind}.`,\n );\n }\n if (content.length > 0) {\n throw new Error(`Diagram.${kind} accepts one Diagram.Content.`);\n }\n content.push(requirePrimitiveProps<DiagramContentProps>(child).children);\n });\n return { labelChildren, content };\n}\n\nfunction nodeFrame(kind: PrimitiveKind, explicit: DiagramNode['frame']) {\n if (explicit) return explicit;\n if (kind === 'port') return 'transparent';\n if (kind === 'label') return 'none';\n if (kind === 'float') return 'flat';\n if (kind === 'appliance') return 'none';\n if (kind === 'marker') return 'none';\n return 'solid';\n}\n\nfunction compileEdge(kind: PrimitiveKind, child: ReactElement): DiagramEdge {\n const props = requirePrimitiveProps<DiagramEdgeProps>(child);\n const { children: _children, badgeLabel, ...edgeProps } = props;\n const lines: string[] = [];\n const waypoints: DiagramWaypoint[] = [...(props.waypoints ?? [])];\n let entrySide = props.entrySide;\n let exitSide = props.exitSide;\n let entryGap = props.entryGap;\n\n Children.forEach(props.children, (edgeChild) => {\n if (\n edgeChild === null ||\n edgeChild === undefined ||\n typeof edgeChild === 'boolean'\n )\n return;\n if (isTextNode(edgeChild)) {\n const text = String(edgeChild).trim();\n if (text.length > 0) lines.push(text);\n return;\n }\n if (!isValidElement(edgeChild)) {\n throw new Error(\n 'Diagram edges only accept text, Line, Entry, Exit, and Waypoint children.',\n );\n }\n if (edgeChild.type === Fragment) {\n throw new Error(\n 'Diagram edges do not accept fragments. Use direct Line/Entry/Exit/Waypoint children.',\n );\n }\n const edgeChildKind = primitiveKind(edgeChild);\n if (edgeChildKind === 'line') {\n lines.push(lineText(edgeChild));\n return;\n }\n if (edgeChildKind === 'entry') {\n const entry = requirePrimitiveProps<DiagramEntryProps>(edgeChild);\n entrySide = entry.side;\n entryGap = entry.gap ?? entryGap;\n return;\n }\n if (edgeChildKind === 'exit') {\n exitSide = requirePrimitiveProps<DiagramExitProps>(edgeChild).side;\n return;\n }\n if (edgeChildKind === 'waypoint') {\n waypoints.push(requirePrimitiveProps<DiagramWaypointProps>(edgeChild));\n return;\n }\n throw new Error(\n `Diagram edge cannot contain <Diagram.${edgeChildKind ?? 'Unknown'}>.`,\n );\n });\n\n return {\n ...edgeProps,\n ...(lines.length > 0 ? { label: lines } : {}),\n ...(badgeLabel !== undefined\n ? { badgeLabel: normalizeStringLines(badgeLabel) }\n : {}),\n ...(waypoints.length > 0 ? { waypoints } : {}),\n ...(entrySide ? { entrySide } : {}),\n ...(exitSide ? { exitSide } : {}),\n ...(entryGap !== undefined ? { entryGap } : {}),\n headless: kind === 'wire' ? true : edgeProps.headless,\n };\n}\n\nfunction normalizeStringLines(value: string | string[]) {\n return (Array.isArray(value) ? value : [value])\n .map((line) => line.trim())\n .filter(Boolean);\n}\n\nfunction compileGroup(\n child: ReactElement,\n context: CompileContext,\n): { group: DiagramGraphIR['groups'][number]; children: CompileResult } {\n const props = requirePrimitiveProps<DiagramGroupProps>(child);\n const children = compileChildren(props.children, {\n ...context,\n groupId: props.id,\n });\n const bounds =\n props.rowStart !== undefined &&\n props.rowEnd !== undefined &&\n props.colStart !== undefined &&\n props.colEnd !== undefined\n ? {\n rowStart: props.rowStart,\n rowEnd: props.rowEnd,\n colStart: props.colStart,\n colEnd: props.colEnd,\n }\n : inferGroupBounds(props.id, children.nodes, children.groups);\n\n return {\n group: {\n id: props.id,\n label: normalizeGroupLabel(props.label),\n labelAlign: props.labelAlign,\n labelSide: props.labelSide,\n accent: props.accent,\n tone: props.tone,\n texture: props.texture,\n rx: props.rx,\n frame: props.frame,\n fill: props.fill,\n ports: props.ports,\n parent: context.groupId,\n tight: props.tight,\n tightX: props.tightX,\n tightY: props.tightY,\n titleBand: props.titleBand,\n titleGap: props.titleGap,\n padding: props.padding,\n dividers: props.dividers,\n bounds,\n },\n children,\n };\n}\n\nfunction normalizeGroupLabel(label: string | string[] | undefined) {\n if (Array.isArray(label)) {\n return label.map((line) => line.trim()).filter(Boolean);\n }\n return label?.trim() ?? '';\n}\n\nfunction inferGroupBounds(\n groupId: string,\n nodes: DiagramNode[],\n groups: DiagramGraphIR['groups'] = [],\n) {\n const grouped = nodes.filter((node) => node.group === groupId);\n const childGroups = groups.filter((group) => group.parent === groupId);\n if (grouped.length === 0 && childGroups.length === 0) {\n throw new Error(\n `Diagram.Group \"${groupId}\" needs bounds or direct node/group children so bounds can be inferred.`,\n );\n }\n const bounds = emptyGroupBounds();\n for (const node of grouped) {\n if (node.row === undefined || node.col === undefined) return undefined;\n includeGroupBounds(bounds, {\n rowStart: node.row,\n rowEnd: node.row,\n colStart: node.col,\n colEnd: node.col + (node.colSpan ?? 1) - 1,\n });\n }\n for (const group of childGroups) {\n if (!group.bounds) return undefined;\n includeGroupBounds(bounds, group.bounds);\n }\n return bounds;\n}\n\nfunction emptyGroupBounds(): NonNullable<\n DiagramGraphIR['groups'][number]['bounds']\n> {\n return {\n rowStart: Number.POSITIVE_INFINITY,\n rowEnd: Number.NEGATIVE_INFINITY,\n colStart: Number.POSITIVE_INFINITY,\n colEnd: Number.NEGATIVE_INFINITY,\n };\n}\n\nfunction includeGroupBounds(\n target: NonNullable<DiagramGraphIR['groups'][number]['bounds']>,\n source: NonNullable<DiagramGraphIR['groups'][number]['bounds']>,\n) {\n target.rowStart = Math.min(target.rowStart, source.rowStart);\n target.rowEnd = Math.max(target.rowEnd, source.rowEnd);\n target.colStart = Math.min(target.colStart, source.colStart);\n target.colEnd = Math.max(target.colEnd, source.colEnd);\n}\n\nfunction compileText(child: ReactElement): DiagramAnnotation {\n const props = requirePrimitiveProps<DiagramTextProps>(child);\n const { children: _children, ...textProps } = props;\n const lines = compileStringLines(props.children, 'Diagram.Text');\n return {\n ...textProps,\n text: lines.length > 0 ? lines : [''],\n };\n}\n\nfunction compileLane(child: ReactElement): DiagramLane {\n const props = requirePrimitiveProps<DiagramLaneProps>(child);\n return {\n id: props.id,\n label: compileStringLines(props.children, 'Diagram.Lane'),\n accent: props.accent,\n };\n}\n\nfunction normalizeBoxed(\n boxed: boolean | DiagramSignalBox | undefined,\n): DiagramSignalBox | undefined {\n if (boxed === true) return 'source';\n if (!boxed) return undefined;\n return boxed;\n}\n\nfunction compileSignal(child: ReactElement): DiagramSignal {\n const props = requirePrimitiveProps<DiagramSignalProps>(child);\n const { children: _children, boxed, ...signalProps } = props;\n const normalizedBoxed = normalizeBoxed(boxed);\n return {\n ...signalProps,\n label: compileStringLines(props.children, 'Diagram.Signal'),\n ...(normalizedBoxed ? { boxed: normalizedBoxed } : {}),\n };\n}\n\nfunction compileFrame(child: ReactElement): DiagramFrameElement {\n const props = requirePrimitiveProps<DiagramFrameProps>(child);\n const signals: DiagramSignal[] = [];\n Children.forEach(props.children, (frameChild) => {\n if (\n frameChild === null ||\n frameChild === undefined ||\n typeof frameChild === 'boolean'\n )\n return;\n if (!isValidElement(frameChild) || primitiveKind(frameChild) !== 'signal') {\n throw new Error(\n 'Diagram.Frame only accepts direct Diagram.Signal children.',\n );\n }\n signals.push(compileSignal(frameChild));\n });\n return { label: props.label, signals };\n}\n\nfunction compileStringLines(children: ReactNode, owner: string): string[] {\n const lines: string[] = [];\n Children.forEach(children, (child) => {\n if (child === null || child === undefined || typeof child === 'boolean')\n return;\n if (isTextNode(child)) {\n const text = String(child).trim();\n if (text.length > 0) lines.push(text);\n return;\n }\n if (!isValidElement(child)) {\n throw new Error(`${owner} only accepts text or Diagram.Line children.`);\n }\n if (child.type === Fragment) {\n throw new Error(\n `${owner} does not accept React fragments. Use direct text or Diagram.Line children.`,\n );\n }\n if (primitiveKind(child) === 'line') {\n lines.push(lineText(child));\n return;\n }\n throw new Error(`${owner} only accepts text or Diagram.Line children.`);\n });\n return lines;\n}\n\nfunction compileLabelChildren(\n children: ReactNode,\n owner: string,\n): DiagramLabelLine[] {\n const lines: DiagramLabelLine[] = [];\n Children.forEach(children, (child) => {\n if (child === null || child === undefined || typeof child === 'boolean')\n return;\n if (isTextNode(child)) {\n const text = String(child).trim();\n if (text.length > 0) lines.push(text);\n return;\n }\n if (!isValidElement(child)) {\n throw new Error(`${owner} only accepts text or Diagram.Line children.`);\n }\n if (child.type === Fragment) {\n throw new Error(\n `${owner} does not accept React fragments. Use direct text or Diagram.Line children.`,\n );\n }\n if (primitiveKind(child) === 'line') {\n const props = requirePrimitiveProps<DiagramLineProps>(child);\n lines.push({\n text: lineText(child),\n ...(props.textColor ? { textColor: props.textColor } : {}),\n ...(props.fontWeight ? { fontWeight: props.fontWeight } : {}),\n });\n return;\n }\n throw new Error(`${owner} only accepts text or Diagram.Line children.`);\n });\n return lines;\n}\n\nfunction lineText(child: ReactElement): string {\n const props = requirePrimitiveProps<DiagramLineProps>(child);\n return Children.toArray(props.children)\n .map((part) => {\n if (!isTextNode(part)) {\n throw new Error('Diagram.Line only accepts text children.');\n }\n return String(part).trim();\n })\n .filter(Boolean)\n .join('');\n}\n\nexport function validateGraph(ir: DiagramGraphIR) {\n const nodeIds = new Set<string>();\n for (const node of ir.nodes) {\n if (nodeIds.has(node.id))\n throw new Error(`Duplicate Diagram node id \"${node.id}\".`);\n nodeIds.add(node.id);\n }\n const groupIds = new Set<string>();\n for (const group of ir.groups) {\n if (groupIds.has(group.id))\n throw new Error(`Duplicate Diagram group id \"${group.id}\".`);\n groupIds.add(group.id);\n }\n const guideIds = new Set<string>();\n for (const guide of ir.guides) {\n if (!guide.id) continue;\n if (guideIds.has(guide.id))\n throw new Error(`Duplicate Diagram guide id \"${guide.id}\".`);\n guideIds.add(guide.id);\n }\n const nodesById = new Map(ir.nodes.map((node) => [node.id, node]));\n const groupsById = new Map(ir.groups.map((group) => [group.id, group]));\n for (const node of ir.nodes) {\n if (groupsById.has(node.id)) {\n throw new Error(\n `Diagram node id \"${node.id}\" conflicts with a Diagram group id. Node and group endpoint ids must be unique.`,\n );\n }\n if (\n node.bodyFontSize !== undefined &&\n (!Number.isFinite(node.bodyFontSize) || node.bodyFontSize <= 0)\n ) {\n throw new Error(\n `Diagram node \"${node.id}\" bodyFontSize must be a positive finite number, got ${node.bodyFontSize}.`,\n );\n }\n if (\n node.bodyLineGap !== undefined &&\n (!Number.isFinite(node.bodyLineGap) || node.bodyLineGap < 0)\n ) {\n throw new Error(\n `Diagram node \"${node.id}\" bodyLineGap must be a non-negative finite number, got ${node.bodyLineGap}.`,\n );\n }\n }\n for (const edge of ir.edges) {\n if (\n edge.route !== undefined &&\n edge.route !== 'orthogonal' &&\n edge.route !== 'straight'\n ) {\n throw new Error(\n `Diagram edge route must be \"orthogonal\" or \"straight\", got \"${edge.route}\".`,\n );\n }\n if (\n edge.labelLineGap !== undefined &&\n (!Number.isFinite(edge.labelLineGap) || edge.labelLineGap < 0)\n ) {\n throw new Error(\n `Diagram edge labelLineGap must be a non-negative finite number, got ${edge.labelLineGap}.`,\n );\n }\n if (edge.exitOffset !== undefined && !Number.isFinite(edge.exitOffset)) {\n throw new Error(\n `Diagram edge exitOffset must be a finite number, got ${edge.exitOffset}.`,\n );\n }\n if (edge.entryOffset !== undefined && !Number.isFinite(edge.entryOffset)) {\n throw new Error(\n `Diagram edge entryOffset must be a finite number, got ${edge.entryOffset}.`,\n );\n }\n if (\n edge.stubDistance !== undefined &&\n (!Number.isFinite(edge.stubDistance) || edge.stubDistance < 0)\n ) {\n throw new Error(\n `Diagram edge stubDistance must be a non-negative finite number, got ${edge.stubDistance}.`,\n );\n }\n const { nodeId: sourceNodeId, portId: sourcePortId } = parseEndpointRef(\n edge.from,\n );\n const { nodeId: targetNodeId, portId: targetPortId } = parseEndpointRef(\n edge.to,\n );\n if (!nodeIds.has(sourceNodeId) && !groupsById.has(sourceNodeId)) {\n throw new Error(\n `Diagram edge ${edge.from}->${edge.to} references missing source \"${sourceNodeId}\".`,\n );\n }\n if (!nodeIds.has(targetNodeId) && !groupsById.has(targetNodeId)) {\n throw new Error(\n `Diagram edge ${edge.from}->${edge.to} references missing target \"${targetNodeId}\".`,\n );\n }\n if (\n sourcePortId &&\n !(\n nodesById\n .get(sourceNodeId)\n ?.ports?.some((port) => port.id === sourcePortId) ||\n groupsById\n .get(sourceNodeId)\n ?.ports?.some((port) => port.id === sourcePortId)\n )\n ) {\n throw new Error(\n `Diagram edge ${edge.from}->${edge.to} references missing source port \"${sourcePortId}\" on \"${sourceNodeId}\".`,\n );\n }\n if (\n targetPortId &&\n !(\n nodesById\n .get(targetNodeId)\n ?.ports?.some((port) => port.id === targetPortId) ||\n groupsById\n .get(targetNodeId)\n ?.ports?.some((port) => port.id === targetPortId)\n )\n ) {\n throw new Error(\n `Diagram edge ${edge.from}->${edge.to} references missing target port \"${targetPortId}\" on \"${targetNodeId}\".`,\n );\n }\n }\n for (const annotation of ir.annotations) {\n if (\n annotation.lineGap !== undefined &&\n (!Number.isFinite(annotation.lineGap) || annotation.lineGap < 0)\n ) {\n throw new Error(\n `Diagram.Text lineGap must be a non-negative finite number, got ${annotation.lineGap}.`,\n );\n }\n }\n}\n\nexport function validateTimeline(ir: DiagramTimelineSpec) {\n const laneIds = new Set<string>();\n for (const lane of ir.lanes) {\n if (laneIds.has(lane.id))\n throw new Error(`Duplicate Diagram lane id \"${lane.id}\".`);\n laneIds.add(lane.id);\n }\n const signals = [...ir.signals, ...(ir.frame?.signals ?? [])];\n for (const signal of signals) {\n if (!laneIds.has(signal.from)) {\n throw new Error(\n `Diagram signal ${signal.from}->${signal.to} references missing lane \"${signal.from}\".`,\n );\n }\n if (!laneIds.has(signal.to)) {\n throw new Error(\n `Diagram signal ${signal.from}->${signal.to} references missing lane \"${signal.to}\".`,\n );\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-layout.d.ts","sourceRoot":"","sources":["../../../../src/lib/layouts/graph/graph-layout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,GAAG,EAEH,iBAAiB,EACjB,uBAAuB,EACvB,WAAW,EACX,kBAAkB,EAClB,YAAY,EAGZ,WAAW,EACX,eAAe,EACf,WAAW,EAEX,eAAe,EACf,KAAK,EACN,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"graph-layout.d.ts","sourceRoot":"","sources":["../../../../src/lib/layouts/graph/graph-layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { parseEndpointRef } from "../../model/endpoint-ref.js";
|
|
1
2
|
import { centeredBaselineOffset, textAscent, textLineBox, textWidth, widestLine } from "../text-metrics.js";
|
|
2
3
|
export const COL_W = 240;
|
|
3
4
|
export const ROW_H = 128;
|
|
@@ -293,8 +294,8 @@ export function resolveGraphLayout(spec) {
|
|
|
293
294
|
indegree.set(id, 0);
|
|
294
295
|
}
|
|
295
296
|
for (const edge of spec.edges) {
|
|
296
|
-
const from =
|
|
297
|
-
const to =
|
|
297
|
+
const from = parseEndpointRef(edge.from).nodeId;
|
|
298
|
+
const to = parseEndpointRef(edge.to).nodeId;
|
|
298
299
|
if (!nodeIds.has(from) || !nodeIds.has(to) || from === to) continue;
|
|
299
300
|
adjacency.get(from)?.push(to);
|
|
300
301
|
indegree.set(to, (indegree.get(to) ?? 0) + 1);
|
|
@@ -2055,7 +2056,7 @@ function resolveDiagramSides(edge, source, target, hasReciprocal = false) {
|
|
|
2055
2056
|
function hasReciprocalEdge(spec, edge) {
|
|
2056
2057
|
if (edge.from === edge.to) return false;
|
|
2057
2058
|
return spec.edges.some(candidate => {
|
|
2058
|
-
return
|
|
2059
|
+
return parseEndpointRef(candidate.from).nodeId === parseEndpointRef(edge.to).nodeId && parseEndpointRef(candidate.to).nodeId === parseEndpointRef(edge.from).nodeId;
|
|
2059
2060
|
});
|
|
2060
2061
|
}
|
|
2061
2062
|
function computeParallelOffsets(spec, resolvedSides) {
|
|
@@ -2196,8 +2197,8 @@ function nodeCornerInset(node) {
|
|
|
2196
2197
|
return nodeFrameRadius(node);
|
|
2197
2198
|
}
|
|
2198
2199
|
function edgeGridSpan(edge, nodesById) {
|
|
2199
|
-
const source = nodesById.get(
|
|
2200
|
-
const target = nodesById.get(
|
|
2200
|
+
const source = nodesById.get(parseEndpointRef(edge.from).nodeId);
|
|
2201
|
+
const target = nodesById.get(parseEndpointRef(edge.to).nodeId);
|
|
2201
2202
|
if (!source || !target) {
|
|
2202
2203
|
return 0;
|
|
2203
2204
|
}
|
|
@@ -2300,18 +2301,11 @@ export function computePaths(spec) {
|
|
|
2300
2301
|
});
|
|
2301
2302
|
return deconflictLabelPlacements(routedEdges);
|
|
2302
2303
|
}
|
|
2303
|
-
function endpointNodeId(ref) {
|
|
2304
|
-
const separator = ref.indexOf(':');
|
|
2305
|
-
if (separator === -1) return ref;
|
|
2306
|
-
return ref.slice(0, separator);
|
|
2307
|
-
}
|
|
2308
|
-
function endpointPortId(ref) {
|
|
2309
|
-
const separator = ref.indexOf(':');
|
|
2310
|
-
if (separator === -1) return undefined;
|
|
2311
|
-
return ref.slice(separator + 1);
|
|
2312
|
-
}
|
|
2313
2304
|
function resolveEndpoint(ref, lookup) {
|
|
2314
|
-
const
|
|
2305
|
+
const {
|
|
2306
|
+
nodeId: id,
|
|
2307
|
+
portId
|
|
2308
|
+
} = parseEndpointRef(ref);
|
|
2315
2309
|
const node = lookup.nodesById.get(id);
|
|
2316
2310
|
const group = lookup.groupsById.get(id);
|
|
2317
2311
|
const box = node ? lookup.nodeBoxes.get(id) : lookup.groupBoxes.get(id);
|
|
@@ -2319,7 +2313,6 @@ function resolveEndpoint(ref, lookup) {
|
|
|
2319
2313
|
if (cornerInset === undefined || !box) {
|
|
2320
2314
|
return null;
|
|
2321
2315
|
}
|
|
2322
|
-
const portId = endpointPortId(ref);
|
|
2323
2316
|
const ports = node?.ports ?? group?.ports;
|
|
2324
2317
|
const port = portId ? ports?.find(candidate => candidate.id === portId) : undefined;
|
|
2325
2318
|
if (portId && !port) {
|