@coral-viz/viz 0.2.5 → 0.2.7

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.
Files changed (92) hide show
  1. package/README.md +8 -2
  2. package/dist/compatibility/CompatibilityEdge.d.ts +52 -1
  3. package/dist/compatibility/CompatibilityEdge.d.ts.map +1 -1
  4. package/dist/compatibility/CompatibilityEdge.js +107 -7
  5. package/dist/compatibility/CompatibilityEdge.js.map +1 -1
  6. package/dist/compatibility/EndpointMarkerDefinitions.d.ts +10 -0
  7. package/dist/compatibility/EndpointMarkerDefinitions.d.ts.map +1 -0
  8. package/dist/compatibility/EndpointMarkerDefinitions.js +25 -0
  9. package/dist/compatibility/EndpointMarkerDefinitions.js.map +1 -0
  10. package/dist/compatibility/effectivePorts.d.ts +17 -0
  11. package/dist/compatibility/effectivePorts.d.ts.map +1 -0
  12. package/dist/compatibility/effectivePorts.js +31 -0
  13. package/dist/compatibility/effectivePorts.js.map +1 -0
  14. package/dist/compatibility/index.d.ts +2 -1
  15. package/dist/compatibility/index.d.ts.map +1 -1
  16. package/dist/compatibility/index.js +2 -1
  17. package/dist/compatibility/index.js.map +1 -1
  18. package/dist/compatibility/useEdgeCompatibility.d.ts.map +1 -1
  19. package/dist/compatibility/useEdgeCompatibility.js +10 -2
  20. package/dist/compatibility/useEdgeCompatibility.js.map +1 -1
  21. package/dist/compatibility/validateConnection.d.ts.map +1 -1
  22. package/dist/compatibility/validateConnection.js +25 -37
  23. package/dist/compatibility/validateConnection.js.map +1 -1
  24. package/dist/components/SequenceDiagram.d.ts +26 -0
  25. package/dist/components/SequenceDiagram.d.ts.map +1 -0
  26. package/dist/components/SequenceDiagram.js +68 -0
  27. package/dist/components/SequenceDiagram.js.map +1 -0
  28. package/dist/components/ShapeRenderer.d.ts +3 -1
  29. package/dist/components/ShapeRenderer.d.ts.map +1 -1
  30. package/dist/components/ShapeRenderer.js +12 -32
  31. package/dist/components/ShapeRenderer.js.map +1 -1
  32. package/dist/components/SymbolNode.d.ts +3 -0
  33. package/dist/components/SymbolNode.d.ts.map +1 -1
  34. package/dist/components/SymbolNode.js +52 -87
  35. package/dist/components/SymbolNode.js.map +1 -1
  36. package/dist/components/index.d.ts +1 -0
  37. package/dist/components/index.d.ts.map +1 -1
  38. package/dist/components/index.js +1 -0
  39. package/dist/components/index.js.map +1 -1
  40. package/dist/editor/CoralEditor.d.ts +1 -1
  41. package/dist/editor/CoralEditor.d.ts.map +1 -1
  42. package/dist/editor/CoralEditor.js +13 -4
  43. package/dist/editor/CoralEditor.js.map +1 -1
  44. package/dist/editor/FileControls.d.ts +16 -1
  45. package/dist/editor/FileControls.d.ts.map +1 -1
  46. package/dist/editor/FileControls.js +21 -6
  47. package/dist/editor/FileControls.js.map +1 -1
  48. package/dist/editor/converter.d.ts +7 -2
  49. package/dist/editor/converter.d.ts.map +1 -1
  50. package/dist/editor/converter.js +16 -17
  51. package/dist/editor/converter.js.map +1 -1
  52. package/dist/file/deserialize.d.ts +2 -1
  53. package/dist/file/deserialize.d.ts.map +1 -1
  54. package/dist/file/deserialize.js +2 -2
  55. package/dist/file/deserialize.js.map +1 -1
  56. package/dist/file/index.d.ts +2 -1
  57. package/dist/file/index.d.ts.map +1 -1
  58. package/dist/file/index.js +2 -1
  59. package/dist/file/index.js.map +1 -1
  60. package/dist/file/migrate.d.ts +18 -1
  61. package/dist/file/migrate.d.ts.map +1 -1
  62. package/dist/file/migrate.js +105 -16
  63. package/dist/file/migrate.js.map +1 -1
  64. package/dist/file/portMaterialization.d.ts +19 -0
  65. package/dist/file/portMaterialization.d.ts.map +1 -0
  66. package/dist/file/portMaterialization.js +105 -0
  67. package/dist/file/portMaterialization.js.map +1 -0
  68. package/dist/file/serialize.d.ts.map +1 -1
  69. package/dist/file/serialize.js +6 -2
  70. package/dist/file/serialize.js.map +1 -1
  71. package/dist/index.d.ts +5 -5
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +5 -5
  74. package/dist/index.js.map +1 -1
  75. package/dist/layout/elk.d.ts +8 -0
  76. package/dist/layout/elk.d.ts.map +1 -1
  77. package/dist/layout/elk.js +8 -1
  78. package/dist/layout/elk.js.map +1 -1
  79. package/dist/properties/NodePropertiesPanel.d.ts +1 -1
  80. package/dist/properties/NodePropertiesPanel.d.ts.map +1 -1
  81. package/dist/properties/NodePropertiesPanel.js +154 -3
  82. package/dist/properties/NodePropertiesPanel.js.map +1 -1
  83. package/dist/text-editor/TextEditor.d.ts +11 -0
  84. package/dist/text-editor/TextEditor.d.ts.map +1 -1
  85. package/dist/text-editor/TextEditor.js +45 -21
  86. package/dist/text-editor/TextEditor.js.map +1 -1
  87. package/dist/text-editor/hooks/useBidirectionalSync.d.ts +3 -2
  88. package/dist/text-editor/hooks/useBidirectionalSync.d.ts.map +1 -1
  89. package/dist/text-editor/hooks/useBidirectionalSync.js.map +1 -1
  90. package/dist/types.d.ts +30 -0
  91. package/dist/types.d.ts.map +1 -1
  92. package/package.json +8 -7
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import { getNotation } from '@coral-viz/render';
8
8
  import { symbolRegistry } from '@coral-viz/render';
9
+ import { effectiveSymbolPorts } from './effectivePorts.js';
9
10
  // ============================================================================
10
11
  // Port Direction Validation
11
12
  // ============================================================================
@@ -193,43 +194,36 @@ function checkSymbolConnection(notation, sourceInfo, targetInfo, existingEdges)
193
194
  // ============================================================================
194
195
  // Port-Level Validation
195
196
  // ============================================================================
196
- /**
197
- * Get ports for a symbol
198
- */
199
- function getSymbolPorts(symbolId, variant) {
200
- const symbol = symbolRegistry.get(symbolId);
201
- if (!symbol) {
202
- return [
203
- { id: 'in', anchor: 'NORTH', direction: 'in' },
204
- { id: 'out', anchor: 'SOUTH', direction: 'out' },
205
- ];
206
- }
207
- // Check for variant-specific ports
208
- if (variant && symbol.variants?.[variant]?.ports) {
209
- return symbol.variants[variant].ports;
210
- }
211
- // Fall back to symbol ports
212
- if (symbol.ports && symbol.ports.length > 0) {
213
- return symbol.ports;
214
- }
215
- // Default ports
216
- return [
217
- { id: 'in', anchor: 'NORTH', direction: 'in' },
218
- { id: 'out', anchor: 'SOUTH', direction: 'out' },
219
- ];
197
+ /** Effective ports for a node: its authored list, else variant/symbol/default ports. */
198
+ function getNodePorts(info) {
199
+ return effectiveSymbolPorts(symbolRegistry.get(info.symbolId), info.variant, info.ports);
220
200
  }
221
201
  /**
222
202
  * Validate port-level compatibility
223
203
  */
224
204
  function validatePorts(sourceInfo, targetInfo, sourcePortId, targetPortId, existingEdges = []) {
225
- const sourcePorts = getSymbolPorts(sourceInfo.symbolId, sourceInfo.variant);
226
- const targetPorts = getSymbolPorts(targetInfo.symbolId, targetInfo.variant);
205
+ const sourcePorts = getNodePorts(sourceInfo);
206
+ const targetPorts = getNodePorts(targetInfo);
207
+ // A canvas handle id names an inout port with an -in/-out suffix.
208
+ const findPort = (ports, portId) => ports.find((port) => port.id === portId
209
+ || (port.direction === 'inout' && (portId === `${port.id}-in` || portId === `${port.id}-out`)));
210
+ // An explicit port id must resolve before any direction check.
211
+ for (const [portId, ports, end] of [[sourcePortId, sourcePorts, 'source'], [targetPortId, targetPorts, 'target']]) {
212
+ if (portId && !findPort(ports, portId)) {
213
+ return {
214
+ valid: false,
215
+ hasWarning: false,
216
+ reason: 'port-not-found',
217
+ message: `The ${end} node has no port "${portId}"`,
218
+ };
219
+ }
220
+ }
227
221
  // Find the specific ports if IDs provided
228
222
  const sourcePort = sourcePortId
229
- ? sourcePorts.find((p) => p.id === sourcePortId)
223
+ ? findPort(sourcePorts, sourcePortId)
230
224
  : sourcePorts.find((p) => p.direction === 'out' || p.direction === 'inout');
231
225
  const targetPort = targetPortId
232
- ? targetPorts.find((p) => p.id === targetPortId)
226
+ ? findPort(targetPorts, targetPortId)
233
227
  : targetPorts.find((p) => p.direction === 'in' || p.direction === 'inout');
234
228
  // Check port directions if we have both ports
235
229
  if (sourcePort && targetPort) {
@@ -274,15 +268,9 @@ function validatePorts(sourceInfo, targetInfo, sourcePortId, targetPortId, exist
274
268
  export function validateConnection(connection, context) {
275
269
  const { sourceNodeId, targetNodeId, sourcePortId, targetPortId } = connection;
276
270
  const { notationId, nodeInfo, existingEdges } = context;
277
- // Check for self-connection
278
- if (sourceNodeId === targetNodeId) {
279
- return {
280
- valid: false,
281
- hasWarning: false,
282
- reason: 'self-connection',
283
- message: 'A node cannot connect to itself',
284
- };
285
- }
271
+ // A self-connection is ordinary: a state's self-transition, a recursive
272
+ // association or relationship, a retry step (027-R10 AC-5). Notation rules
273
+ // below still apply to it.
286
274
  // Get node info
287
275
  const sourceInfo = nodeInfo.get(sourceNodeId);
288
276
  const targetInfo = nodeInfo.get(targetNodeId);
@@ -1 +1 @@
1
- {"version":3,"file":"validateConnection.js","sourceRoot":"","sources":["../../src/compatibility/validateConnection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validateConnection.js","sourceRoot":"","sources":["../../src/compatibility/validateConnection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * SequenceDiagram - canvas surface for UML sequence documents (Slice 70).
3
+ *
4
+ * Draws the shared `sequencePrimitives` of the render package's sequence
5
+ * scene, so canvas and SVG export show the same elements and geometry. It
6
+ * computes no geometry and never uses React Flow or ELK.
7
+ */
8
+ import { type SequenceGraph, type SequenceTheme } from '@coral-viz/render';
9
+ import { type DiagramFontSettings } from '../file/schema.js';
10
+ export type SequenceSelectionKind = 'participant' | 'message' | 'activation' | 'note' | 'fragment';
11
+ export interface SequenceSelection {
12
+ kind: SequenceSelectionKind;
13
+ id: string;
14
+ }
15
+ export interface SequenceDiagramProps {
16
+ graph: SequenceGraph;
17
+ theme?: SequenceTheme;
18
+ /** Document font settings; the same resolution as SVG export (R-033). */
19
+ fontSettings?: DiagramFontSettings;
20
+ fontSize?: number;
21
+ fontFamily?: string;
22
+ selected?: SequenceSelection | null;
23
+ onSelect?: (selection: SequenceSelection) => void;
24
+ }
25
+ export declare function SequenceDiagram({ graph, theme, fontSettings, fontSize, fontFamily, selected, onSelect }: SequenceDiagramProps): import("react").JSX.Element;
26
+ //# sourceMappingURL=SequenceDiagram.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SequenceDiagram.d.ts","sourceRoot":"","sources":["../../src/components/SequenceDiagram.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAGL,KAAK,aAAa,EAElB,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAgC,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE3F,MAAM,MAAM,qBAAqB,GAAG,aAAa,GAAG,SAAS,GAAG,YAAY,GAAG,MAAM,GAAG,UAAU,CAAC;AACnG,MAAM,WAAW,iBAAiB;IAAG,IAAI,EAAE,qBAAqB,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;CAAE;AAE/E,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,yEAAyE;IACzE,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACnD;AAWD,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,KAAa,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,oBAAoB,+BA+DrI"}
@@ -0,0 +1,68 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * SequenceDiagram - canvas surface for UML sequence documents (Slice 70).
4
+ *
5
+ * Draws the shared `sequencePrimitives` of the render package's sequence
6
+ * scene, so canvas and SVG export show the same elements and geometry. It
7
+ * computes no geometry and never uses React Flow or ELK.
8
+ */
9
+ import { createElement, useMemo } from 'react';
10
+ import { layoutSequence, sequencePrimitives, } from '@coral-viz/render';
11
+ import { normalizeDiagramFontSettings } from '../file/schema.js';
12
+ const LIGHT = {
13
+ background: '#ffffff', fill: '#f8fafc', stroke: '#334155', text: '#0f172a', edge: '#475569', noteFill: '#fef9c3',
14
+ };
15
+ const SELECTABLE = ['participant', 'message', 'activation', 'note', 'fragment'];
16
+ function reactName(name) {
17
+ return name.startsWith('data-') || name.startsWith('aria-') ? name : name.replace(/-([a-z])/g, (_match, letter) => letter.toUpperCase());
18
+ }
19
+ export function SequenceDiagram({ graph, theme = LIGHT, fontSettings, fontSize, fontFamily, selected, onSelect }) {
20
+ const layout = useMemo(() => {
21
+ try {
22
+ return { scene: layoutSequence(graph, {
23
+ fontSize, fontFamily,
24
+ ...(fontSettings ? { fontSettings: normalizeDiagramFontSettings(fontSettings) } : {}),
25
+ }) };
26
+ }
27
+ catch (error) {
28
+ return { error: error instanceof Error ? error.message : String(error) };
29
+ }
30
+ }, [graph, fontSettings, fontSize, fontFamily]);
31
+ if (!layout.scene) {
32
+ return _jsx("div", { role: "alert", className: "coral-sequence-error", children: layout.error });
33
+ }
34
+ const scene = layout.scene;
35
+ const draw = (primitive, key) => {
36
+ const props = { key };
37
+ for (const [name, value] of Object.entries(primitive.attrs))
38
+ props[reactName(name)] = value;
39
+ const kind = SELECTABLE.find((candidate) => `data-coral-sequence-${candidate}` in primitive.attrs);
40
+ if (primitive.tag === 'g' && kind) {
41
+ const selection = { kind, id: String(primitive.attrs[`data-coral-sequence-${kind}`]) };
42
+ const isSelected = selected?.kind === kind && selected.id === selection.id;
43
+ Object.assign(props, {
44
+ role: 'button',
45
+ tabIndex: 0,
46
+ style: { cursor: onSelect ? 'pointer' : undefined, outline: 'none' },
47
+ ...(isSelected ? { 'aria-current': 'true', filter: 'drop-shadow(0 0 2px #2563eb)' } : {}),
48
+ onClick: () => onSelect?.(selection),
49
+ onKeyDown: (event) => {
50
+ if (event.key === 'Enter' || event.key === ' ') {
51
+ event.preventDefault();
52
+ onSelect?.(selection);
53
+ }
54
+ },
55
+ });
56
+ }
57
+ const children = [
58
+ ...(primitive.text !== undefined ? [primitive.text] : []),
59
+ ...(primitive.children ?? []).map((child, index) => draw(child, `${key}.${index}`)),
60
+ ];
61
+ return createElement(primitive.tag, props, ...children);
62
+ };
63
+ return (_jsxs("svg", { className: "coral-sequence-diagram", xmlns: "http://www.w3.org/2000/svg", width: scene.width, height: scene.height, viewBox: `0 0 ${scene.width} ${scene.height}`,
64
+ // Not role="img": its descendants would become presentational and hide
65
+ // the selectable elements from assistive technology (CR70-6).
66
+ role: "group", "aria-label": scene.title, fontFamily: scene.font.cssFamily ?? fontFamily, children: [_jsx("title", { children: scene.title }), _jsx("desc", { children: scene.description }), sequencePrimitives(scene, theme).map((primitive, index) => draw(primitive, String(index)))] }));
67
+ }
68
+ //# sourceMappingURL=SequenceDiagram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SequenceDiagram.js","sourceRoot":"","sources":["../../src/components/SequenceDiagram.tsx"],"names":[],"mappings":"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"}
@@ -26,10 +26,12 @@ export interface ShapeRendererProps {
26
26
  parameters?: Record<string, number | string | boolean>;
27
27
  /** Enable hand-drawn sketch mode (SVG turbulence filter) */
28
28
  sketch?: boolean;
29
+ /** Draw a second inset outline for catalog variants that require it. */
30
+ doubleOutline?: boolean;
29
31
  }
30
32
  /**
31
33
  * Render an SVG shape from a ShapeDefinition
32
34
  */
33
- export declare function ShapeRenderer({ shape, width, height, fill, stroke, strokeWidth, strokeDasharray, className, parameters, sketch, }: ShapeRendererProps): import("react").JSX.Element;
35
+ export declare function ShapeRenderer({ shape, width, height, fill, stroke, strokeWidth, strokeDasharray, className, parameters, sketch, doubleOutline, }: ShapeRendererProps): import("react").JSX.Element;
34
36
  export default ShapeRenderer;
35
37
  //# sourceMappingURL=ShapeRenderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ShapeRenderer.d.ts","sourceRoot":"","sources":["../../src/components/ShapeRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,KAAK,EAAE,eAAe,CAAC;IACvB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACvD,4DAA4D;IAC5D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAsCD;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,KAAK,EACL,MAAM,EACN,IAAgB,EAChB,MAAkB,EAClB,WAAe,EACf,eAAe,EACf,SAAS,EACT,UAAU,EACV,MAAM,GACP,EAAE,kBAAkB,+BAyEpB;AAED,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"ShapeRenderer.d.ts","sourceRoot":"","sources":["../../src/components/ShapeRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,KAAK,EAAE,eAAe,CAAC;IACvB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACvD,4DAA4D;IAC5D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAeD;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,KAAK,EACL,MAAM,EACN,IAAgB,EAChB,MAAkB,EAClB,WAAe,EACf,eAAe,EACf,SAAS,EACT,UAAU,EACV,MAAM,EACN,aAAa,GACd,EAAE,kBAAkB,+BAyEpB;AAED,eAAe,aAAa,CAAC"}
@@ -1,4 +1,5 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { resolveShapePath } from '@coral-viz/render';
2
3
  /**
3
4
  * Parse a viewBox string into values
4
5
  */
@@ -11,28 +12,10 @@ function parseViewBox(viewBox) {
11
12
  height: parts[3] || 60,
12
13
  };
13
14
  }
14
- /**
15
- * Generate an SVG path with rounded corners for rectangle shapes
16
- */
17
- function getRoundedRectPath(width, height, cornerRadius) {
18
- const r = Math.min(cornerRadius, width / 2, height / 2);
19
- return `
20
- M ${r},0
21
- L ${width - r},0
22
- Q ${width},0 ${width},${r}
23
- L ${width},${height - r}
24
- Q ${width},${height} ${width - r},${height}
25
- L ${r},${height}
26
- Q 0,${height} 0,${height - r}
27
- L 0,${r}
28
- Q 0,0 ${r},0
29
- Z
30
- `.replace(/\s+/g, ' ').trim();
31
- }
32
15
  /**
33
16
  * Render an SVG shape from a ShapeDefinition
34
17
  */
35
- export function ShapeRenderer({ shape, width, height, fill = '#ffffff', stroke = '#000000', strokeWidth = 2, strokeDasharray, className, parameters, sketch, }) {
18
+ export function ShapeRenderer({ shape, width, height, fill = '#ffffff', stroke = '#000000', strokeWidth = 2, strokeDasharray, className, parameters, sketch, doubleOutline, }) {
36
19
  const finalWidth = width ?? shape.defaultSize.width;
37
20
  const finalHeight = height ?? shape.defaultSize.height;
38
21
  const viewBox = parseViewBox(shape.viewBox);
@@ -40,16 +23,11 @@ export function ShapeRenderer({ shape, width, height, fill = '#ffffff', stroke =
40
23
  const scaleX = finalWidth / viewBox.width;
41
24
  const scaleY = finalHeight / viewBox.height;
42
25
  // Determine the path to use
43
- let pathData = shape.path;
44
- // Handle parametric shapes (like rounded rectangles)
45
- if (shape.id === 'rectangle' && parameters?.cornerRadius) {
46
- const cornerRadius = Number(parameters.cornerRadius) || 0;
47
- if (cornerRadius > 0) {
48
- pathData = getRoundedRectPath(viewBox.width, viewBox.height, cornerRadius);
49
- }
50
- }
51
- // For strokeOnly shapes (like actor), don't fill
52
- const finalFill = shape.strokeOnly ? 'none' : fill;
26
+ const pathData = resolveShapePath(shape, parameters);
27
+ // For strokeOnly shapes (like actor), don't fill; a solid shape (a state
28
+ // pseudostate) is filled with its outline colour, through `currentColor` so
29
+ // the outline may be a themed CSS value, and has no separate stroke.
30
+ const finalFill = shape.solid ? 'currentColor' : shape.strokeOnly ? 'none' : fill;
53
31
  // Sketch mode: slightly thicker stroke for hand-drawn feel
54
32
  const finalStrokeWidth = sketch
55
33
  ? (strokeWidth + 0.5) / Math.min(scaleX, scaleY)
@@ -61,7 +39,8 @@ export function ShapeRenderer({ shape, width, height, fill = '#ffffff', stroke =
61
39
  const pathProps = {
62
40
  d: pathData,
63
41
  fill: finalFill,
64
- stroke,
42
+ ...(shape.fillRule ? { fillRule: shape.fillRule } : {}),
43
+ stroke: shape.solid ? 'none' : stroke,
65
44
  strokeWidth: finalStrokeWidth,
66
45
  strokeDasharray,
67
46
  strokeLinecap: 'round',
@@ -71,7 +50,8 @@ export function ShapeRenderer({ shape, width, height, fill = '#ffffff', stroke =
71
50
  return (_jsxs("svg", { width: finalWidth, height: finalHeight, viewBox: `0 0 ${viewBox.width} ${viewBox.height}`, className: className, style: {
72
51
  display: 'block',
73
52
  overflow: 'visible',
74
- }, children: [sketch && (_jsx("defs", { children: _jsxs("filter", { id: filterId, x: "-5%", y: "-5%", width: "110%", height: "110%", children: [_jsx("feTurbulence", { type: "turbulence", baseFrequency: "0.04", numOctaves: "3", seed: shape.id.length, result: "turbulence" }), _jsx("feDisplacementMap", { in: "SourceGraphic", in2: "turbulence", scale: 1.5, xChannelSelector: "R", yChannelSelector: "G" })] }) })), paths.length === 1 ? (_jsx("path", { ...pathProps })) : (_jsx("g", { children: _jsx("path", { ...pathProps }) }))] }));
53
+ ...(shape.solid ? { color: stroke } : {}),
54
+ }, children: [sketch && (_jsx("defs", { children: _jsxs("filter", { id: filterId, x: "-5%", y: "-5%", width: "110%", height: "110%", children: [_jsx("feTurbulence", { type: "turbulence", baseFrequency: "0.04", numOctaves: "3", seed: shape.id.length, result: "turbulence" }), _jsx("feDisplacementMap", { in: "SourceGraphic", in2: "turbulence", scale: 1.5, xChannelSelector: "R", yChannelSelector: "G" })] }) })), paths.length === 1 ? (_jsxs(_Fragment, { children: [_jsx("path", { ...pathProps }), doubleOutline && _jsx("path", { ...pathProps, fill: "none", transform: "translate(2 2) scale(0.96 0.9333)" })] })) : (_jsxs("g", { children: [_jsx("path", { ...pathProps }), doubleOutline && _jsx("path", { ...pathProps, fill: "none", transform: "translate(2 2) scale(0.96 0.9333)" })] }))] }));
75
55
  }
76
56
  export default ShapeRenderer;
77
57
  //# sourceMappingURL=ShapeRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ShapeRenderer.js","sourceRoot":"","sources":["../../src/components/ShapeRenderer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ShapeRenderer.js","sourceRoot":"","sources":["../../src/components/ShapeRenderer.tsx"],"names":[],"mappings":"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"}
@@ -40,6 +40,9 @@ interface SymbolNodeProps {
40
40
  data: SymbolNodeData;
41
41
  selected?: boolean;
42
42
  }
43
+ /**
44
+ * Get styling from symbol/variant defaults
45
+ */
43
46
  /**
44
47
  * SymbolNode component - renders any symbol from the registry
45
48
  *
@@ -1 +1 @@
1
- {"version":3,"file":"SymbolNode.d.ts","sourceRoot":"","sources":["../../src/components/SymbolNode.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,KAAK,EACV,eAAe,EAAgC,aAAa,EAAE,MAAM,aAAa,CAAC;AAmBpF,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC9C;AAED;;GAEG;AACH,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAuHD;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,+DAAoD,eAAe,iCAgXxF,CAAC;AAEH,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"SymbolNode.d.ts","sourceRoot":"","sources":["../../src/components/SymbolNode.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,KAAK,EACV,eAAe,EAAc,aAAa,EAAE,MAAM,aAAa,CAAC;AAmBlE,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC9C;AAED;;GAEG;AACH,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAgCD;;GAEG;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,+DAAoD,eAAe,iCA0dxF,CAAC;AAEH,eAAe,UAAU,CAAC"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  /**
3
3
  * SymbolNode - React Flow node component that renders symbols
4
4
  *
@@ -10,9 +10,9 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
10
  import { memo, useMemo, useState, useCallback, useRef, useEffect } from 'react';
11
11
  import { Handle, Position, useUpdateNodeInternals } from '@xyflow/react';
12
12
  import { ShapeRenderer } from './ShapeRenderer.js';
13
- import { symbolRegistry } from '@coral-viz/render';
14
- import { shapeRegistry } from '@coral-viz/render';
13
+ import { classifierPresentation, renderSymbolId, resolveNodeAppearance, shapeRegistry, symbolMarkerName, symbolMarkerPrimitives, symbolRegistry } from '@coral-viz/render';
15
14
  import { useEditContext } from './EditContext.js';
15
+ import { effectiveSymbolPorts } from '../compatibility/effectivePorts.js';
16
16
  import { readNodeViewMetadata } from '../viewMetadata.js';
17
17
  /**
18
18
  * Extended node data for symbol-aware rendering
@@ -60,77 +60,6 @@ function getPortOffset(port, portIndex, totalPortsOnSide) {
60
60
  /**
61
61
  * Get styling from symbol/variant defaults
62
62
  */
63
- function getSymbolStyle(symbol, variant) {
64
- const defaultStyle = {
65
- fill: '#ffffff',
66
- stroke: '#666666',
67
- strokeWidth: 2,
68
- };
69
- if (!symbol) {
70
- return defaultStyle;
71
- }
72
- // Start with symbol defaults
73
- const symbolDefaults = symbol.defaults || {};
74
- let style = {
75
- fill: symbolDefaults.fill || defaultStyle.fill,
76
- stroke: symbolDefaults.stroke || defaultStyle.stroke,
77
- strokeWidth: symbolDefaults.strokeWidth || defaultStyle.strokeWidth,
78
- strokeDasharray: symbolDefaults.strokeDasharray,
79
- };
80
- // Apply variant overrides
81
- if (variant && symbol.variants?.[variant]) {
82
- const variantDefaults = symbol.variants[variant].defaults || {};
83
- style = {
84
- ...style,
85
- fill: variantDefaults.fill || style.fill,
86
- stroke: variantDefaults.stroke || style.stroke,
87
- strokeWidth: variantDefaults.strokeWidth || style.strokeWidth,
88
- strokeDasharray: variantDefaults.strokeDasharray || style.strokeDasharray,
89
- };
90
- }
91
- return style;
92
- }
93
- /**
94
- * Get ports to render from symbol definition
95
- */
96
- function getSymbolPorts(symbol, variant) {
97
- if (!symbol) {
98
- // Default ports
99
- return [
100
- { id: 'in', anchor: 'NORTH', direction: 'in' },
101
- { id: 'out', anchor: 'SOUTH', direction: 'out' },
102
- ];
103
- }
104
- // Check for variant-specific ports first
105
- if (variant && symbol.variants?.[variant]?.ports) {
106
- return symbol.variants[variant].ports;
107
- }
108
- // Fall back to symbol ports
109
- if (symbol.ports && symbol.ports.length > 0) {
110
- return symbol.ports;
111
- }
112
- // Default ports
113
- return [
114
- { id: 'in', anchor: 'NORTH', direction: 'in' },
115
- { id: 'out', anchor: 'SOUTH', direction: 'out' },
116
- ];
117
- }
118
- /**
119
- * Fallback mapping from old node types to symbols
120
- */
121
- const legacyTypeMapping = {
122
- service: 'arch-service',
123
- database: 'arch-database',
124
- module: 'flowchart-process',
125
- external_api: 'arch-external-api',
126
- actor: 'arch-actor',
127
- group: 'arch-container',
128
- process: 'flowchart-process',
129
- decision: 'flowchart-decision',
130
- terminal: 'flowchart-terminal',
131
- io: 'flowchart-io',
132
- document: 'flowchart-document',
133
- };
134
63
  /**
135
64
  * SymbolNode component - renders any symbol from the registry
136
65
  *
@@ -151,17 +80,27 @@ export const SymbolNode = memo(function SymbolNode({ id, data, selected }) {
151
80
  // Local state for edit value
152
81
  const [editValue, setEditValue] = useState(data.label);
153
82
  const inputRef = useRef(null);
154
- // Resolve symbol ID (support legacy types)
155
- const symbolId = data.symbolId || legacyTypeMapping[data.nodeType] || 'flowchart-process';
83
+ // Preserve an explicitly authored blank/unresolved symbol from the canonical
84
+ // payload; absence alone permits semantic fallback, exactly as SVG output does.
85
+ const projectedSymbol = Object.prototype.hasOwnProperty.call(data.canonical ?? {}, 'symbol')
86
+ ? data.canonical?.symbol
87
+ : data.symbolId;
88
+ const symbolId = renderSymbolId({
89
+ id, type: data.nodeType, symbol: projectedSymbol, properties: data.properties,
90
+ }) ?? 'flowchart-process';
156
91
  // Look up symbol and shape
157
92
  const symbol = symbolRegistry.get(symbolId);
158
93
  const shape = symbol ? shapeRegistry.get(symbol.shape) : shapeRegistry.get('rectangle');
159
- // Get styling
160
- const baseStyle = getSymbolStyle(symbol, data.variant);
94
+ // Resolve the same catalog appearance used by standalone SVG output.
95
+ const appearance = resolveNodeAppearance({
96
+ id, type: data.nodeType, label: data.label, symbol: symbolId, variant: data.variant,
97
+ }, { fill: '#ffffff', stroke: '#666666', text: '#111827', edge: '#666666' });
98
+ const baseStyle = appearance.style;
99
+ const classifier = classifierPresentation(data.canonical?.classifier);
161
100
  const style = {
162
- fill: data.fill || baseStyle.fill,
163
- stroke: data.stroke || baseStyle.stroke,
164
- strokeWidth: data.strokeWidth || baseStyle.strokeWidth,
101
+ fill: data.fill ?? baseStyle.fill,
102
+ stroke: data.stroke ?? baseStyle.stroke,
103
+ strokeWidth: data.strokeWidth ?? baseStyle.strokeWidth,
165
104
  strokeDasharray: baseStyle.strokeDasharray,
166
105
  };
167
106
  // Get dimensions
@@ -174,7 +113,7 @@ export const SymbolNode = memo(function SymbolNode({ id, data, selected }) {
174
113
  updateNodeInternals(id);
175
114
  }, [hasResolvedFont, height, id, updateNodeInternals, width]);
176
115
  // Get ports
177
- const ports = getSymbolPorts(symbol, data.variant);
116
+ const ports = effectiveSymbolPorts(symbol, data.variant, data.canonical?.ports);
178
117
  // Group ports by side for positioning
179
118
  const portsBySide = useMemo(() => {
180
119
  const grouped = {};
@@ -231,7 +170,12 @@ export const SymbolNode = memo(function SymbolNode({ id, data, selected }) {
231
170
  // Accessible name and state (R-014). Nodes carried no ARIA at all, so a
232
171
  // screen reader announced an unlabelled group of divs.
233
172
  const kindName = symbol?.name ?? data.symbolId ?? data.nodeType ?? 'node';
234
- const accessibleName = `${data.label ?? id}, ${kindName}`;
173
+ const accessibleName = classifier?.accessibleName ?? `${data.label ?? id}, ${kindName}`;
174
+ const labelDrawn = symbol?.labelDisplay !== 'accessible';
175
+ // The label is edited in the Inspector; the gesture still stays on the node.
176
+ const stopDoubleClick = (event) => event.stopPropagation();
177
+ // A solid shape follows the canvas theme, as SVG follows its theme stroke.
178
+ const solidInk = `var(--coral-diagram-solid-ink, ${style.stroke})`;
235
179
  const dragDescription = data.dragState === 'compatible'
236
180
  ? 'can connect here'
237
181
  : data.dragState === 'warning'
@@ -244,13 +188,13 @@ export const SymbolNode = memo(function SymbolNode({ id, data, selected }) {
244
188
  width,
245
189
  height,
246
190
  cursor: isEditing ? 'text' : 'grab',
247
- }, onDoubleClick: handleDoubleClick, children: [dragDescription && (_jsx("span", { id: `${id}-drag-state`, style: SR_ONLY, children: dragDescription })), shape && (_jsx("div", { style: {
191
+ }, onDoubleClick: labelDrawn ? handleDoubleClick : stopDoubleClick, children: [dragDescription && (_jsx("span", { id: `${id}-drag-state`, style: SR_ONLY, children: dragDescription })), shape && (_jsx("div", { style: {
248
192
  position: 'absolute',
249
193
  top: 0,
250
194
  left: 0,
251
195
  width: '100%',
252
196
  height: '100%',
253
- }, children: _jsx(ShapeRenderer, { shape: shape, width: width, height: height, fill: style.fill, stroke: selected ? '#0066ff' : style.stroke, strokeWidth: selected ? style.strokeWidth + 1 : style.strokeWidth, strokeDasharray: style.strokeDasharray, parameters: symbol?.defaults, sketch: data.sketch }) })), _jsx("div", { style: {
197
+ }, children: _jsx(ShapeRenderer, { shape: shape, width: width, height: height, fill: style.fill, stroke: selected ? '#0066ff' : shape.solid ? solidInk : style.stroke, strokeWidth: selected ? style.strokeWidth + 1 : style.strokeWidth, strokeDasharray: style.strokeDasharray, doubleOutline: baseStyle.doubleOutline, parameters: appearance.shapeParameters, sketch: data.sketch }) })), appearance.glyph && (_jsxs("svg", { role: "img", "aria-label": appearance.glyph.name, viewBox: appearance.glyph.viewBox, width: 20, height: 20, style: { position: 'absolute', left: 8, top: 8, color: appearance.text.color }, children: [_jsx("title", { children: appearance.glyph.name }), appearance.glyph.paths.map((path, index) => (_jsx("path", { d: path.d, fill: path.filled ? 'currentColor' : 'none', stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }, index)))] })), appearance.symbolMarker && (_jsxs("svg", { role: "img", "aria-label": symbolMarkerName(appearance.symbolMarker), "data-coral-symbol-marker": appearance.symbolMarker, viewBox: "0 0 16 16", width: 16, height: 16, style: { position: 'absolute', right: 6, top: 6, color: appearance.text.color }, children: [_jsx("title", { children: symbolMarkerName(appearance.symbolMarker) }), symbolMarkerPrimitives(appearance.symbolMarker).map((primitive, index) => (_jsx("path", { d: primitive.d, fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }, index)))] })), labelDrawn && _jsx("div", { style: {
254
198
  position: 'absolute',
255
199
  top: 0,
256
200
  left: 0,
@@ -273,6 +217,9 @@ export const SymbolNode = memo(function SymbolNode({ id, data, selected }) {
273
217
  fontFeatureSettings: '"kern" 0, "liga" 0, "clig" 0, "calt" 0',
274
218
  } : {}),
275
219
  textAlign: 'center',
220
+ color: appearance.text.color,
221
+ fontStyle: appearance.text.fontStyle,
222
+ textDecoration: appearance.text.textDecoration,
276
223
  width: '100%',
277
224
  maxWidth: '100%',
278
225
  padding: '2px 4px',
@@ -294,6 +241,8 @@ export const SymbolNode = memo(function SymbolNode({ id, data, selected }) {
294
241
  whiteSpace: 'nowrap',
295
242
  } : {}),
296
243
  textAlign: 'center',
244
+ fontStyle: appearance.text.fontStyle,
245
+ textDecoration: appearance.text.textDecoration,
297
246
  wordWrap: resolvedFont ? 'normal' : 'break-word',
298
247
  width: '100%',
299
248
  maxWidth: '100%',
@@ -306,7 +255,7 @@ export const SymbolNode = memo(function SymbolNode({ id, data, selected }) {
306
255
  WebkitLineClamp: defaultLabelLineClamp,
307
256
  overflowWrap: 'anywhere',
308
257
  } : {}),
309
- }, children: resolvedFont && viewMetadata?.lines
258
+ }, children: classifier ? (_jsxs("div", { "data-coral-classifier": true, style: { display: 'grid', width: '100%', textAlign: 'left' }, children: [classifier.stereotype && _jsx("span", { "data-coral-classifier-stereotype": true, style: { textAlign: 'center' }, children: classifier.stereotype }), _jsx("span", { "data-coral-classifier-name": true, style: { textAlign: 'center', fontStyle: classifier.abstract ? 'italic' : undefined }, children: classifier.name }), classifier.compartments.map((part) => (_jsx("div", { "data-coral-classifier-compartment": part.kind, style: { borderTop: `1px solid ${style.stroke}`, padding: '2px 4px' }, children: part.rows.map((row, index) => _jsx("span", { style: { display: 'block' }, children: row }, `${index}:${row}`)) }, part.id)))] })) : resolvedFont && viewMetadata?.lines
310
259
  ? viewMetadata.lines.map((line, index) => (_jsx("span", { "data-coral-label-line": true, style: {
311
260
  display: 'block',
312
261
  whiteSpace: 'pre',
@@ -375,7 +324,23 @@ export const SymbolNode = memo(function SymbolNode({ id, data, selected }) {
375
324
  ...handleStyle,
376
325
  ...handleVisual,
377
326
  } }, port.id));
378
- })] }));
327
+ }), ports.length === 0 ? (
328
+ // A portless node (a group, pool, lane, namespace, or catalog) stays
329
+ // connectable on the canvas. Its handles carry no port id, so a new
330
+ // connection saves as a port-less edge that reopens cleanly.
331
+ ['target', 'source'].map((type) => {
332
+ const state = data.dragStates?.['*'] ?? data.dragState ?? 'idle';
333
+ return (_jsx(Handle, { type: type, position: type === 'target' ? Position.Top : Position.Bottom, className: "coral-portless-handle", "aria-label": `${type === 'target' ? 'Incoming' : 'Outgoing'} connection: ${state}`, style: {
334
+ position: 'absolute',
335
+ left: '50%',
336
+ transform: 'translateX(-50%)',
337
+ background: state === 'compatible' ? '#22c55e'
338
+ : state === 'warning' ? '#f59e0b'
339
+ : state === 'incompatible' ? '#ef4444' : '#555',
340
+ width: state === 'idle' ? 8 : 12,
341
+ height: state === 'idle' ? 8 : 12,
342
+ } }, type));
343
+ })) : (_jsxs(_Fragment, { children: [!ports.some((port) => port.direction !== 'out') && (_jsx(Handle, { type: "target", position: Position.Top, className: "coral-edge-anchor", isConnectable: false, style: { opacity: 0, pointerEvents: 'none' } })), !ports.some((port) => port.direction !== 'in') && (_jsx(Handle, { type: "source", position: Position.Bottom, className: "coral-edge-anchor", isConnectable: false, style: { opacity: 0, pointerEvents: 'none' } }))] }))] }));
379
344
  });
380
345
  export default SymbolNode;
381
346
  //# sourceMappingURL=SymbolNode.js.map