@zukhruf/diagram 0.3.28 → 0.3.29

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 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;AAsBhC,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,QA4I/C;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,mBAAmB,QAoBvD"}
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 sourceNodeId = endpointNodeId(edge.from);
668
- const targetNodeId = endpointNodeId(edge.to);
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;AASnC,YAAY,EACV,iBAAiB,EACjB,uBAAuB,EACvB,aAAa,EACb,WAAW,EACX,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,uBAAuB,EACvB,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,eAAe,EACf,eAAe,EACf,eAAe,EACf,GAAG,EACH,KAAK,EACL,WAAW,GACZ,MAAM,2BAA2B,CAAC;AAEnC,eAAO,MAAM,KAAK,MAAM,CAAC;AACzB,eAAO,MAAM,KAAK,MAAM,CAAC;AACzB,eAAO,MAAM,MAAM,MAAM,CAAC;AAC1B,eAAO,MAAM,MAAM,KAAK,CAAC;AACzB,eAAO,MAAM,OAAO,KAAK,CAAC;AAC1B,eAAO,MAAM,QAAQ,KAAK,CAAC;AAC3B,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,IAAI,QAAwB,CAAC;AAC1C,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAMnC,eAAO,MAAM,eAAe,KAAK,CAAC;AAalC,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,UAEhD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,WAErD;AAuED,MAAM,MAAM,OAAO,GAAG;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,iBAAiB,GAAG;IAC1D,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,UAAU,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAC/B,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,uBAAuB,EAAE,GAAG,SAAS,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAmBF,wBAAgB,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,GAAG,CAiB3E;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAExD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAQzD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,KAAK,CAcxD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAQ5D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAQ7D;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,MAAM,GACZ,GAAG,CAQL;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,MAAgB,GAAG,GAAG,CAmBzE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,EAAE,CAK5D;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,WAAW,EACjB,GAAG,MAAgB,GAClB,oBAAoB,GAAG,IAAI,CAqE7B;AAuBD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,WAAW,EACjB,GAAG,MAAgB,GAClB,GAAG,GAAG,IAAI,CA0BZ;AAYD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,CAoFzE;AAgGD,wBAAgB,QAAQ,CACtB,KAAK,EAAE,YAAY,EACnB,KAAK,CAAC,EAAE,WAAW,EAAE,EACrB,MAAM,CAAC,EAAE,kBAAkB,EAC3B,MAAM,CAAC,EAAE,YAAY,EAAE,GACtB,GAAG,CAoDL;AAmED,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,EAAE,CAG7D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAI5D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAUlE;AAaD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,YAAY,EACnB,KAAK,CAAC,EAAE,WAAW,EAAE,EACrB,MAAM,CAAC,EAAE,kBAAkB,EAC3B,MAAM,CAAC,EAAE,YAAY,EAAE,GACtB,gBAAgB,EAAE,CA0CpB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,eAAe;;;EA4ClD;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,eAAe,EACrB,WAAW,EAAE,UAAU,EAAE,EACzB,OAAO,SAAsB,GAC5B,OAAO,CAuFT;AAuDD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,WAAW,EACjB,GAAG,MAAgB,GAClB,aAAa,EAAE,CAEjB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,EACnB,GAAG,MAAkB,GACpB,aAAa,EAAE,CAEjB;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,eAAe,GACpB,yBAAyB,EAAE,CAI7B;AAED,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,iBAAiB,EAC7B,IAAI,EAAE,eAAe,GACpB,yBAAyB,CAgG3B;AA0MD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,WAAW,EAAE,EACpB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,kBAAkB,GAC1B,GAAG,CAAC,MAAM,CAAC,CAiBb;AAuCD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,WAAW,EACrB,SAAS,EAAE,WAAW,EACtB,UAAU,SAAI,EACd,WAAW,SAAI,EACf,QAAQ,SAAY,GACnB;IACD,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,WAAW,CAAC;IACtB,SAAS,EAAE,WAAW,CAAC;CACxB,CAuCA;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,WAAW,CAAC;IAAC,SAAS,CAAC,EAAE,WAAW,CAAA;CAAE,EAC1D,UAAU,SAAI,EACd,WAAW,SAAI,EACf,QAAQ,SAAY,GACnB;IACD,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,WAAW,CAAC;IACtB,SAAS,EAAE,WAAW,CAAC;CACxB,CAeA;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,WAAW,EACjB,QAAQ,SAAO,GACd,KAAK,CAKP;AAoJD,wBAAgB,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAkBnD;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,SAAI,GAAG,MAAM,CAkC7D;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,WAAW,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC;IAC9C,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;CAC5C,CAAC;AA2RF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,UAElD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,UAElD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW;;;EAU9C;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,UAEhD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,UAEpD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW;;;EAS9C;AAyBD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,cAAc,GACxB,GAAG,CAML;AAiOD,wBAAgB,SAAS,CACvB,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,EACX,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EACpB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,WAAW,CAAC;IAAC,SAAS,CAAC,EAAE,WAAW,CAAA;CAAE,EAC1D,UAAU,SAAI,EACd,WAAW,SAAI,EACf,SAAS,CAAC,EAAE,KAAK,EAAE,EACnB,QAAQ,SAAY,EACpB,WAAW,SAAI,GACd;IACD,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;CACvC,CAkGA;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,SAAI,GAAG,KAAK,CAQ7E;AA6DD,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,WAAW,CAAC;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;CACvC,CAAC;AA4PF,wBAAgB,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG,UAAU,EAAE,CAqHhE"}
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 = endpointNodeId(edge.from);
297
- const to = endpointNodeId(edge.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 endpointNodeId(candidate.from) === endpointNodeId(edge.to) && endpointNodeId(candidate.to) === endpointNodeId(edge.from);
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(endpointNodeId(edge.from));
2200
- const target = nodesById.get(endpointNodeId(edge.to));
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 id = endpointNodeId(ref);
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) {