@xpressai/xircuits-viewer 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/interaction/panZoom.d.ts +16 -0
- package/dist/interaction/panZoom.d.ts.map +1 -0
- package/dist/interaction/panZoom.js +84 -0
- package/dist/interaction/panZoom.js.map +1 -0
- package/dist/layout/metrics.d.ts +18 -0
- package/dist/layout/metrics.d.ts.map +1 -0
- package/dist/layout/metrics.js +78 -0
- package/dist/layout/metrics.js.map +1 -0
- package/dist/layout/viewBox.d.ts +9 -0
- package/dist/layout/viewBox.d.ts.map +1 -0
- package/dist/layout/viewBox.js +25 -0
- package/dist/layout/viewBox.js.map +1 -0
- package/dist/parser/classify.d.ts +10 -0
- package/dist/parser/classify.d.ts.map +1 -0
- package/dist/parser/classify.js +52 -0
- package/dist/parser/classify.js.map +1 -0
- package/dist/parser/parse.d.ts +3 -0
- package/dist/parser/parse.d.ts.map +1 -0
- package/dist/parser/parse.js +92 -0
- package/dist/parser/parse.js.map +1 -0
- package/dist/parser/validate.d.ts +5 -0
- package/dist/parser/validate.d.ts.map +1 -0
- package/dist/parser/validate.js +31 -0
- package/dist/parser/validate.js.map +1 -0
- package/dist/render/colors.d.ts +14 -0
- package/dist/render/colors.d.ts.map +1 -0
- package/dist/render/colors.js +78 -0
- package/dist/render/colors.js.map +1 -0
- package/dist/render/renderDefs.d.ts +4 -0
- package/dist/render/renderDefs.d.ts.map +1 -0
- package/dist/render/renderDefs.js +128 -0
- package/dist/render/renderDefs.js.map +1 -0
- package/dist/render/renderEdge.d.ts +3 -0
- package/dist/render/renderEdge.d.ts.map +1 -0
- package/dist/render/renderEdge.js +13 -0
- package/dist/render/renderEdge.js.map +1 -0
- package/dist/render/renderGraph.d.ts +5 -0
- package/dist/render/renderGraph.d.ts.map +1 -0
- package/dist/render/renderGraph.js +40 -0
- package/dist/render/renderGraph.js.map +1 -0
- package/dist/render/renderNode.d.ts +3 -0
- package/dist/render/renderNode.d.ts.map +1 -0
- package/dist/render/renderNode.js +81 -0
- package/dist/render/renderNode.js.map +1 -0
- package/dist/render/renderPort.d.ts +3 -0
- package/dist/render/renderPort.d.ts.map +1 -0
- package/dist/render/renderPort.js +57 -0
- package/dist/render/renderPort.js.map +1 -0
- package/dist/render/symbols.d.ts +6 -0
- package/dist/render/symbols.d.ts.map +1 -0
- package/dist/render/symbols.js +45 -0
- package/dist/render/symbols.js.map +1 -0
- package/dist/svg/bezier.d.ts +7 -0
- package/dist/svg/bezier.d.ts.map +1 -0
- package/dist/svg/bezier.js +9 -0
- package/dist/svg/bezier.js.map +1 -0
- package/dist/svg/builder.d.ts +11 -0
- package/dist/svg/builder.d.ts.map +1 -0
- package/dist/svg/builder.js +48 -0
- package/dist/svg/builder.js.map +1 -0
- package/dist/types.d.ts +69 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +25 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// Color utilities for title bar gradients.
|
|
2
|
+
// Replicates the Xircuits oklch gradient logic from CustomNodeWidget.tsx.
|
|
3
|
+
// Outputs oklch() CSS — requires a modern browser or renderer for full fidelity.
|
|
4
|
+
function parseColor(color) {
|
|
5
|
+
const named = {
|
|
6
|
+
red: '#ff0000', blue: '#0000ff', green: '#008000', yellow: '#ffff00',
|
|
7
|
+
orange: '#ffa500', purple: '#800080', pink: '#ffc0cb', lightpink: '#ffb6c1',
|
|
8
|
+
cyan: '#00ffff', white: '#ffffff', black: '#000000', gray: '#808080',
|
|
9
|
+
grey: '#808080', salmon: '#fa8072', coral: '#ff7f50', teal: '#008080',
|
|
10
|
+
navy: '#000080', maroon: '#800000', lime: '#00ff00', magenta: '#ff00ff',
|
|
11
|
+
darkred: '#8b0000', darkblue: '#00008b', darkgreen: '#006400',
|
|
12
|
+
goldenrod: '#daa520', tomato: '#ff6347', orchid: '#da70d6',
|
|
13
|
+
};
|
|
14
|
+
const lower = color.toLowerCase().trim();
|
|
15
|
+
if (named[lower])
|
|
16
|
+
color = named[lower];
|
|
17
|
+
const hexMatch = color.match(/^#([0-9a-f]{3,8})$/i);
|
|
18
|
+
if (hexMatch) {
|
|
19
|
+
let hex = hexMatch[1];
|
|
20
|
+
if (hex.length === 3)
|
|
21
|
+
hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
|
|
22
|
+
return {
|
|
23
|
+
r: parseInt(hex.slice(0, 2), 16) / 255,
|
|
24
|
+
g: parseInt(hex.slice(2, 4), 16) / 255,
|
|
25
|
+
b: parseInt(hex.slice(4, 6), 16) / 255,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
const rgbMatch = color.match(/rgb\(\s*(\d+)[,\s]+(\d+)[,\s]+(\d+)/);
|
|
29
|
+
if (rgbMatch) {
|
|
30
|
+
return {
|
|
31
|
+
r: parseInt(rgbMatch[1]) / 255,
|
|
32
|
+
g: parseInt(rgbMatch[2]) / 255,
|
|
33
|
+
b: parseInt(rgbMatch[3]) / 255,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
return { r: 0.5, g: 0.5, b: 0.5 };
|
|
37
|
+
}
|
|
38
|
+
function srgbToLinear(c) {
|
|
39
|
+
return c <= 0.04045 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
|
|
40
|
+
}
|
|
41
|
+
function toOklab(r, g, b) {
|
|
42
|
+
const l_ = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;
|
|
43
|
+
const m_ = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;
|
|
44
|
+
const s_ = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;
|
|
45
|
+
const l = Math.cbrt(l_), m = Math.cbrt(m_), s = Math.cbrt(s_);
|
|
46
|
+
return {
|
|
47
|
+
L: 0.2104542553 * l + 0.7936177850 * m - 0.0040720468 * s,
|
|
48
|
+
a: 1.9779984951 * l - 2.4285922050 * m + 0.4505937099 * s,
|
|
49
|
+
b: 0.0259040371 * l + 0.7827717662 * m - 0.8086757660 * s,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function rgbToOklch(color) {
|
|
53
|
+
const { r, g, b } = parseColor(color);
|
|
54
|
+
const lab = toOklab(srgbToLinear(r), srgbToLinear(g), srgbToLinear(b));
|
|
55
|
+
const c = Math.sqrt(lab.a * lab.a + lab.b * lab.b);
|
|
56
|
+
let h = Math.atan2(lab.b, lab.a) * (180 / Math.PI);
|
|
57
|
+
if (h < 0)
|
|
58
|
+
h += 360;
|
|
59
|
+
return { l: lab.L, c, h };
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Replicate the Xircuits title gradient from CustomNodeWidget.tsx:
|
|
63
|
+
* const color = new Color(p.background);
|
|
64
|
+
* color.alpha = 0.75; color.oklch.c *= 1.2;
|
|
65
|
+
* const color1 = color.to('oklch').toString()
|
|
66
|
+
* color.oklch.c *= 1.2; color.oklch.l /= 2;
|
|
67
|
+
* const color2 = color.to('oklch').toString()
|
|
68
|
+
*/
|
|
69
|
+
export function titleGradient(baseColor) {
|
|
70
|
+
const oklch = rgbToOklch(baseColor);
|
|
71
|
+
const c1_c = oklch.c * 1.2;
|
|
72
|
+
const c1 = `oklch(${(oklch.l * 100).toFixed(1)}% ${c1_c.toFixed(4)} ${oklch.h.toFixed(1)} / 0.75)`;
|
|
73
|
+
const c2_c = c1_c * 1.2;
|
|
74
|
+
const c2_l = oklch.l / 2;
|
|
75
|
+
const c2 = `oklch(${(c2_l * 100).toFixed(1)}% ${c2_c.toFixed(4)} ${oklch.h.toFixed(1)} / 0.75)`;
|
|
76
|
+
return { color1: c1, color2: c2 };
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=colors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colors.js","sourceRoot":"","sources":["../../src/render/colors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderDefs.d.ts","sourceRoot":"","sources":["../../src/render/renderDefs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGzC,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CA8C1E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvD"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { el } from '../svg/builder.js';
|
|
2
|
+
import { titleGradient } from './colors.js';
|
|
3
|
+
export function renderDefs(nodes, theme) {
|
|
4
|
+
const gradients = [];
|
|
5
|
+
const seenColors = new Set();
|
|
6
|
+
for (const node of nodes) {
|
|
7
|
+
if (node.kind === 'comment')
|
|
8
|
+
continue;
|
|
9
|
+
const color = node.color;
|
|
10
|
+
if (seenColors.has(color))
|
|
11
|
+
continue;
|
|
12
|
+
seenColors.add(color);
|
|
13
|
+
const { color1, color2 } = titleGradient(color);
|
|
14
|
+
const gradId = colorToGradientId(color);
|
|
15
|
+
gradients.push(el('linearGradient', { id: gradId, x1: '0', y1: '0', x2: '0', y2: '1' }, el('stop', { offset: '0%', 'stop-color': color1 }), el('stop', { offset: '100%', 'stop-color': color2 })));
|
|
16
|
+
}
|
|
17
|
+
const style = renderStyleBlock(theme);
|
|
18
|
+
const flowInSymbol = el('symbol', { id: 'xg-flow-in', viewBox: '0 0 24 24' }, el('path', { stroke: 'none', d: 'M0 0h24v24H0z', fill: 'none' }), el('path', { d: 'M3 12h12' }), el('path', { d: 'M11 8l4 4l-4 4' }), el('path', { d: 'M12 21a9 9 0 0 0 0 -18' }));
|
|
19
|
+
const flowOutSymbol = el('symbol', { id: 'xg-flow-out', viewBox: '0 0 24 24' }, el('path', { stroke: 'none', d: 'M0 0h24v24H0z', fill: 'none' }), el('path', { d: 'M9 12h12' }), el('path', { d: 'M17 16l4 -4l-4 -4' }), el('path', { d: 'M12 3a9 9 0 1 0 0 18' }));
|
|
20
|
+
// Node icon symbols (from style/icons/*.svg in the Xircuits repo)
|
|
21
|
+
const nodeIcons = renderNodeIconSymbols();
|
|
22
|
+
return el('defs', {}, style, ...gradients, flowInSymbol, flowOutSymbol, nodeIcons);
|
|
23
|
+
}
|
|
24
|
+
export function colorToGradientId(color) {
|
|
25
|
+
return 'xg-grad-' + color.replace(/[^a-zA-Z0-9]/g, '_');
|
|
26
|
+
}
|
|
27
|
+
function renderNodeIconSymbols() {
|
|
28
|
+
const s = el;
|
|
29
|
+
// Each symbol extracted from style/icons/*.svg in the Xircuits repo
|
|
30
|
+
// All use viewBox="0 0 24 24", stroke="currentColor" (inherited)
|
|
31
|
+
const icons = [];
|
|
32
|
+
// start-finish-component.svg (filled direction sign diamond)
|
|
33
|
+
icons.push(s('symbol', { id: 'xg-icon-start-finish', viewBox: '0 0 24 24', fill: 'currentColor' }, s('path', { stroke: 'none', d: 'M0 0h24v24H0z', fill: 'none' }), s('path', { d: 'M10.52 2.614a2.095 2.095 0 0 1 2.835 -.117l.126 .117l7.905 7.905c.777 .777 .816 2.013 .117 2.836l-.117 .126l-7.905 7.905a2.094 2.094 0 0 1 -2.836 .117l-.126 -.117l-7.907 -7.906a2.096 2.096 0 0 1 -.115 -2.835l.117 -.126l7.905 -7.905zm5.969 9.535l.01 -.116l-.003 -.12l-.016 -.114l-.03 -.11l-.044 -.112l-.052 -.098l-.076 -.105l-.07 -.081l-3.5 -3.5l-.095 -.083a1 1 0 0 0 -1.226 0l-.094 .083l-.083 .094a1 1 0 0 0 0 1.226l.083 .094l1.792 1.793h-5.085l-.117 .007a1 1 0 0 0 0 1.986l.117 .007h5.085l-1.792 1.793l-.083 .094a1 1 0 0 0 1.403 1.403l.094 -.083l3.5 -3.5l.097 -.112l.05 -.074l.037 -.067l.05 -.112l.023 -.076l.025 -.117z' })));
|
|
34
|
+
// component-library.svg (3D cube outline)
|
|
35
|
+
icons.push(s('symbol', { id: 'xg-icon-component', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', 'stroke-width': 2, 'stroke-linecap': 'round', 'stroke-linejoin': 'round' }, s('path', { stroke: 'none', d: 'M0 0h24v24H0z', fill: 'none' }), s('path', { d: 'M21 16.008v-8.018a1.98 1.98 0 0 0 -1 -1.717l-7 -4.008a2.016 2.016 0 0 0 -2 0l-7 4.008c-.619 .355 -1 1.01 -1 1.718v8.018c0 .709 .381 1.363 1 1.717l7 4.008a2.016 2.016 0 0 0 2 0l7 -4.008c.619 -.355 1 -1.01 1 -1.718z' }), s('path', { d: 'M12 22v-10' }), s('path', { d: 'M12 12l8.73 -5.04' }), s('path', { d: 'M3.27 6.96l8.73 5.04' })));
|
|
36
|
+
// workflow-component.svg (chart dots)
|
|
37
|
+
icons.push(s('symbol', { id: 'xg-icon-workflow', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', 'stroke-width': 2, 'stroke-linecap': 'round', 'stroke-linejoin': 'round' }, s('path', { stroke: 'none', d: 'M0 0h24v24H0z', fill: 'none' }), s('path', { d: 'M5 7m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0' }), s('path', { d: 'M16 15m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0' }), s('path', { d: 'M18 6m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0' }), s('path', { d: 'M6 18m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0' }), s('path', { d: 'M9 17l5 -1.5' }), s('path', { d: 'M6.5 8.5l7.81 5.37' }), s('path', { d: 'M7 7l8 -1' })));
|
|
38
|
+
// branch-component.svg (arrows split)
|
|
39
|
+
icons.push(s('symbol', { id: 'xg-icon-branch', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', 'stroke-width': 2, 'stroke-linecap': 'round', 'stroke-linejoin': 'round' }, s('path', { stroke: 'none', d: 'M0 0h24v24H0z', fill: 'none' }), s('path', { d: 'M21 17h-8l-3.5 -5h-6.5' }), s('path', { d: 'M21 7h-8l-3.495 5' }), s('path', { d: 'M18 10l3 -3l-3 -3' }), s('path', { d: 'M18 20l3 -3l-3 -3' })));
|
|
40
|
+
// function-component.svg (math function)
|
|
41
|
+
icons.push(s('symbol', { id: 'xg-icon-function', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', 'stroke-width': 2.5, 'stroke-linecap': 'round', 'stroke-linejoin': 'round' }, s('path', { stroke: 'none', d: 'M0 0h24v24H0z', fill: 'none' }), s('path', { d: 'M3 19a2 2 0 0 0 2 2c2 0 2 -4 3 -9s1 -9 3 -9a2 2 0 0 1 2 2' }), s('path', { d: 'M5 12h6' }), s('path', { d: 'M15 12l6 6' }), s('path', { d: 'M15 18l6 -6' })));
|
|
42
|
+
// set-variable-component.svg (world upload)
|
|
43
|
+
icons.push(s('symbol', { id: 'xg-icon-context_set', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', 'stroke-width': 2, 'stroke-linecap': 'round', 'stroke-linejoin': 'round' }, s('path', { stroke: 'none', d: 'M0 0h24v24H0z', fill: 'none' }), s('path', { d: 'M21 12a9 9 0 1 0 -9 9' }), s('path', { d: 'M3.6 9h16.8' }), s('path', { d: 'M3.6 15h8.4' }), s('path', { d: 'M11.578 3a17 17 0 0 0 0 18' }), s('path', { d: 'M12.5 3c1.719 2.755 2.5 5.876 2.5 9' }), s('path', { d: 'M18 21v-7m3 3l-3 -3l-3 3' })));
|
|
44
|
+
// get-variable-component.svg (world download)
|
|
45
|
+
icons.push(s('symbol', { id: 'xg-icon-context_get', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', 'stroke-width': 2, 'stroke-linecap': 'round', 'stroke-linejoin': 'round' }, s('path', { stroke: 'none', d: 'M0 0h24v24H0z', fill: 'none' }), s('path', { d: 'M21 12a9 9 0 1 0 -9 9' }), s('path', { d: 'M3.6 9h16.8' }), s('path', { d: 'M3.6 15h8.4' }), s('path', { d: 'M11.578 3a17 17 0 0 0 0 18' }), s('path', { d: 'M12.5 3c1.719 2.755 2.5 5.876 2.5 9' }), s('path', { d: 'M18 14v7m-3 -3l3 3l3 -3' })));
|
|
46
|
+
// variable-component.svg (variable x)
|
|
47
|
+
icons.push(s('symbol', { id: 'xg-icon-variable', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', 'stroke-width': 2, 'stroke-linecap': 'round', 'stroke-linejoin': 'round' }, s('path', { stroke: 'none', d: 'M0 0h24v24H0z', fill: 'none' }), s('path', { d: 'M5 4c-2.5 5 -2.5 10 0 16m14 -16c2.5 5 2.5 10 0 16m-10 -11h1c1 0 1 1 2.016 3.527c.984 2.473 .984 3.473 1.984 3.473h1' }), s('path', { d: 'M8 16c1.5 0 3 -2 4 -3.5s2.5 -3.5 4 -3.5' })));
|
|
48
|
+
return icons.join('');
|
|
49
|
+
}
|
|
50
|
+
function renderStyleBlock(theme) {
|
|
51
|
+
const isDark = theme === 'dark';
|
|
52
|
+
const css = `
|
|
53
|
+
.xg-root {
|
|
54
|
+
font-family: sans-serif;
|
|
55
|
+
font-size: 11px;
|
|
56
|
+
}
|
|
57
|
+
.xg-node__border {
|
|
58
|
+
fill: none;
|
|
59
|
+
stroke: ${isDark ? 'black' : 'oklch(0.8 0 0)'};
|
|
60
|
+
stroke-width: 1;
|
|
61
|
+
}
|
|
62
|
+
.xg-node__title-text {
|
|
63
|
+
fill: white;
|
|
64
|
+
font-weight: 500;
|
|
65
|
+
letter-spacing: 0.025rem;
|
|
66
|
+
}
|
|
67
|
+
.xg-node__body {
|
|
68
|
+
fill: ${isDark
|
|
69
|
+
? 'oklch(10% 0 0 / 0.85)'
|
|
70
|
+
: 'oklch(99% 0 0 / 0.85)'};
|
|
71
|
+
stroke: none;
|
|
72
|
+
}
|
|
73
|
+
.xg-port__dot {
|
|
74
|
+
fill: oklch(50% 0 0 / 0.2);
|
|
75
|
+
stroke: oklch(0 0 0 / 0.2);
|
|
76
|
+
stroke-width: 1;
|
|
77
|
+
}
|
|
78
|
+
.xg-port__dot--connected {
|
|
79
|
+
fill: oklch(100% 0 0 / 0.5);
|
|
80
|
+
}
|
|
81
|
+
.xg-port__label {
|
|
82
|
+
fill: ${isDark ? 'white' : 'black'};
|
|
83
|
+
}
|
|
84
|
+
.xg-port__symbol {
|
|
85
|
+
font-weight: bold;
|
|
86
|
+
font-family: Helvetica, Arial, sans-serif;
|
|
87
|
+
}
|
|
88
|
+
.xg-port__symbol--connected { fill: black; }
|
|
89
|
+
.xg-port__symbol--disconnected { fill: grey; }
|
|
90
|
+
.xg-port--flow use {
|
|
91
|
+
stroke-width: 3;
|
|
92
|
+
stroke-linecap: round;
|
|
93
|
+
stroke-linejoin: round;
|
|
94
|
+
fill: none;
|
|
95
|
+
}
|
|
96
|
+
.xg-port--flow--connected use { stroke: oklch(0% 0 0 / 0.8); }
|
|
97
|
+
.xg-port--flow--disconnected use { stroke: oklch(100% 0 0 / 0.8); }
|
|
98
|
+
.xg-edge--flow {
|
|
99
|
+
stroke: rgb(0, 192, 255);
|
|
100
|
+
stroke-width: 3;
|
|
101
|
+
fill: none;
|
|
102
|
+
stroke-dasharray: 10 2;
|
|
103
|
+
animation: xg-flow 1s steps(24) infinite;
|
|
104
|
+
filter: drop-shadow(2px 2px 4px rgb(0 0 0 / 40%)) opacity(60%);
|
|
105
|
+
}
|
|
106
|
+
.xg-edge--data {
|
|
107
|
+
stroke: gray;
|
|
108
|
+
stroke-width: 3;
|
|
109
|
+
fill: none;
|
|
110
|
+
filter: drop-shadow(2px 2px 4px rgb(0 0 0 / 40%)) opacity(60%);
|
|
111
|
+
}
|
|
112
|
+
.xg-comment__bg {
|
|
113
|
+
fill: ${isDark ? 'rgba(0, 0, 0, 0.3)' : 'oklch(0.98 0.13 108.65)'};
|
|
114
|
+
stroke: ${isDark ? 'black' : '#ccc'};
|
|
115
|
+
stroke-width: 2;
|
|
116
|
+
rx: 5;
|
|
117
|
+
}
|
|
118
|
+
.xg-comment__text {
|
|
119
|
+
fill: ${isDark ? 'white' : 'black'};
|
|
120
|
+
}
|
|
121
|
+
@keyframes xg-flow {
|
|
122
|
+
from { stroke-dashoffset: 24; }
|
|
123
|
+
to { stroke-dashoffset: 0; }
|
|
124
|
+
}
|
|
125
|
+
`;
|
|
126
|
+
return el('style', {}, css);
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=renderDefs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderDefs.js","sourceRoot":"","sources":["../../src/render/renderDefs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderEdge.d.ts","sourceRoot":"","sources":["../../src/render/renderEdge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5E,wBAAgB,UAAU,CACxB,IAAI,EAAE,KAAK,EACX,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,EAC7B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EACpC,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CAaR"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { g, el } from '../svg/builder.js';
|
|
2
|
+
import { bezierPath } from '../svg/bezier.js';
|
|
3
|
+
export function renderEdge(edge, nodesById, metricsMap, options) {
|
|
4
|
+
if (!edge.points || edge.points.length < 2)
|
|
5
|
+
return '';
|
|
6
|
+
const p0 = edge.points[0];
|
|
7
|
+
const p1 = edge.points[edge.points.length - 1];
|
|
8
|
+
const d = bezierPath(p0.x, p0.y, p1.x, p1.y, 50);
|
|
9
|
+
const extraClass = options?.edgeClassFn?.(edge) || '';
|
|
10
|
+
const cls = edge.kind === 'flow' ? 'xg-edge xg-edge--flow' : 'xg-edge xg-edge--data';
|
|
11
|
+
return g({ class: `xg-edge-group ${extraClass}`.trim(), 'data-edge-id': edge.id }, el('path', { class: cls, d }));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=renderEdge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderEdge.js","sourceRoot":"","sources":["../../src/render/renderEdge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,UAAU,UAAU,CACxB,IAAW,EACX,SAA6B,EAC7B,UAAoC,EACpC,OAAuB;IAEvB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAEtD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,OAAO,EAAE,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,uBAAuB,CAAC;IAErF,OAAO,CAAC,CACN,EAAE,KAAK,EAAE,iBAAiB,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE,EACxE,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAC9B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { XGraph, RenderOptions } from '../types.js';
|
|
2
|
+
export declare function renderToString(graph: XGraph, options?: RenderOptions): string;
|
|
3
|
+
export declare function renderToElement(graph: XGraph, options?: RenderOptions): SVGSVGElement;
|
|
4
|
+
export declare function renderXircuits(json: unknown, options?: RenderOptions): string;
|
|
5
|
+
//# sourceMappingURL=renderGraph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderGraph.d.ts","sourceRoot":"","sources":["../../src/render/renderGraph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAe,MAAM,aAAa,CAAC;AAStE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAuCjF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,aAAa,CAKzF;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAGjF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { svgRoot, g } from '../svg/builder.js';
|
|
2
|
+
import { computeNodeMetrics } from '../layout/metrics.js';
|
|
3
|
+
import { computeViewBox } from '../layout/viewBox.js';
|
|
4
|
+
import { renderDefs } from './renderDefs.js';
|
|
5
|
+
import { renderNode } from './renderNode.js';
|
|
6
|
+
import { renderEdge } from './renderEdge.js';
|
|
7
|
+
import { parse } from '../parser/parse.js';
|
|
8
|
+
export function renderToString(graph, options = {}) {
|
|
9
|
+
const { theme = 'dark', padding = 40, fitView = true, className, width, height, } = options;
|
|
10
|
+
const metricsMap = new Map();
|
|
11
|
+
for (const node of graph.nodes) {
|
|
12
|
+
metricsMap.set(node.id, computeNodeMetrics(node));
|
|
13
|
+
}
|
|
14
|
+
const viewBox = fitView
|
|
15
|
+
? computeViewBox(graph.nodes, metricsMap, padding)
|
|
16
|
+
: { x: -graph.viewport.x, y: -graph.viewport.y, width: width || 800, height: height || 600 };
|
|
17
|
+
const nodesById = new Map(graph.nodes.map(n => [n.id, n]));
|
|
18
|
+
const defs = renderDefs(graph.nodes, theme);
|
|
19
|
+
const edgeElements = graph.edges.map(edge => renderEdge(edge, nodesById, metricsMap, options));
|
|
20
|
+
const nodeElements = graph.nodes.map(node => renderNode(node, metricsMap.get(node.id), options));
|
|
21
|
+
const rootClass = ['xg-root', className].filter(Boolean).join(' ');
|
|
22
|
+
return svgRoot({
|
|
23
|
+
viewBox: `${viewBox.x} ${viewBox.y} ${viewBox.width} ${viewBox.height}`,
|
|
24
|
+
class: rootClass,
|
|
25
|
+
'data-theme': theme,
|
|
26
|
+
...(width ? { width } : {}),
|
|
27
|
+
...(height ? { height } : {}),
|
|
28
|
+
}, defs, g({ class: 'xg-edges' }, ...edgeElements), g({ class: 'xg-nodes' }, ...nodeElements));
|
|
29
|
+
}
|
|
30
|
+
export function renderToElement(graph, options = {}) {
|
|
31
|
+
const svgString = renderToString(graph, options);
|
|
32
|
+
const parser = new DOMParser();
|
|
33
|
+
const doc = parser.parseFromString(svgString, 'image/svg+xml');
|
|
34
|
+
return doc.documentElement;
|
|
35
|
+
}
|
|
36
|
+
export function renderXircuits(json, options = {}) {
|
|
37
|
+
const graph = parse(json);
|
|
38
|
+
return renderToString(graph, options);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=renderGraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderGraph.js","sourceRoot":"","sources":["../../src/render/renderGraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderNode.d.ts","sourceRoot":"","sources":["../../src/render/renderNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAMrE,wBAAgB,UAAU,CACxB,IAAI,EAAE,KAAK,EACX,OAAO,EAAE,WAAW,EACpB,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CAQR"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { g, rect, text, el, escapeXml } from '../svg/builder.js';
|
|
2
|
+
import { colorToGradientId } from './renderDefs.js';
|
|
3
|
+
import { renderPort } from './renderPort.js';
|
|
4
|
+
import { FONT_SIZE, TITLE_HEIGHT, TITLE_PADDING_X, TITLE_ICON_SIZE, COMMENT_PADDING } from '../layout/metrics.js';
|
|
5
|
+
export function renderNode(node, metrics, options) {
|
|
6
|
+
const extraClass = options?.nodeClassFn?.(node) || '';
|
|
7
|
+
if (node.kind === 'comment') {
|
|
8
|
+
return renderCommentNode(node, metrics, extraClass);
|
|
9
|
+
}
|
|
10
|
+
return renderStandardNode(node, metrics, extraClass);
|
|
11
|
+
}
|
|
12
|
+
function renderStandardNode(node, metrics, extraClass) {
|
|
13
|
+
const gradientId = colorToGradientId(node.color);
|
|
14
|
+
const { width, height } = metrics;
|
|
15
|
+
const bodyHeight = height - TITLE_HEIGHT;
|
|
16
|
+
const elements = [];
|
|
17
|
+
// Border
|
|
18
|
+
elements.push(rect({ x: 0, y: 0, width, height, rx: 5, ry: 5, class: 'xg-node__border' }));
|
|
19
|
+
// Title gradient
|
|
20
|
+
elements.push(rect({ x: 0, y: 0, width, height: TITLE_HEIGHT, rx: 5, ry: 5, fill: `url(#${gradientId})` }));
|
|
21
|
+
if (bodyHeight > 0) {
|
|
22
|
+
elements.push(rect({ x: 0, y: TITLE_HEIGHT - 5, width, height: 5, fill: `url(#${gradientId})` }));
|
|
23
|
+
}
|
|
24
|
+
// Icon
|
|
25
|
+
elements.push(renderNodeIcon(node.kind, TITLE_PADDING_X, (TITLE_HEIGHT - TITLE_ICON_SIZE) / 2));
|
|
26
|
+
// Name
|
|
27
|
+
elements.push(text({ x: TITLE_PADDING_X + TITLE_ICON_SIZE + TITLE_PADDING_X, y: TITLE_HEIGHT - 8, 'font-size': FONT_SIZE, class: 'xg-node__title-text' }, node.name.length > 40 ? node.name.slice(0, 39) + '…' : node.name));
|
|
28
|
+
// Body
|
|
29
|
+
if (bodyHeight > 0) {
|
|
30
|
+
elements.push(rect({ x: 0, y: TITLE_HEIGHT, width, height: bodyHeight, rx: 5, ry: 5, class: 'xg-node__body' }));
|
|
31
|
+
elements.push(rect({ x: 0, y: TITLE_HEIGHT, width, height: Math.min(5, bodyHeight), class: 'xg-node__body' }));
|
|
32
|
+
}
|
|
33
|
+
// Ports
|
|
34
|
+
node.portsIn.forEach((port, i) => elements.push(renderPort(port, width, i, TITLE_HEIGHT)));
|
|
35
|
+
node.portsOut.forEach((port, i) => elements.push(renderPort(port, width, i, TITLE_HEIGHT)));
|
|
36
|
+
return g({ class: `xg-node xg-node--${node.kind} ${extraClass}`.trim(), transform: `translate(${node.x}, ${node.y})`, 'data-node-id': node.id }, ...elements);
|
|
37
|
+
}
|
|
38
|
+
function renderCommentNode(node, metrics, extraClass) {
|
|
39
|
+
const { width, height } = metrics;
|
|
40
|
+
const commentText = node.extras.commentInput || '';
|
|
41
|
+
const elements = [];
|
|
42
|
+
elements.push(rect({ x: 0, y: 0, width, height, rx: 5, ry: 5, class: 'xg-comment__bg' }));
|
|
43
|
+
elements.push(text({ x: COMMENT_PADDING, y: COMMENT_PADDING + 12, 'font-size': 12, 'font-weight': 'bold', class: 'xg-comment__text' }, 'Comment:'));
|
|
44
|
+
const lines = commentText.split('\n');
|
|
45
|
+
const tspans = lines.map((line, i) => el('tspan', { x: COMMENT_PADDING, dy: i === 0 ? 18 : 18 }, escapeXml(line))).join('');
|
|
46
|
+
elements.push(el('text', { x: COMMENT_PADDING, y: COMMENT_PADDING + 14, 'font-size': 12, class: 'xg-comment__text' }, tspans));
|
|
47
|
+
return g({ class: `xg-node xg-node--comment ${extraClass}`.trim(), transform: `translate(${node.x}, ${node.y})`, 'data-node-id': node.id }, ...elements);
|
|
48
|
+
}
|
|
49
|
+
// Map node kind → symbol ID (matching getNodeIcon in CustomNodeWidget.tsx)
|
|
50
|
+
function getIconSymbolId(kind, extrasType) {
|
|
51
|
+
switch (kind) {
|
|
52
|
+
case 'start':
|
|
53
|
+
case 'finish':
|
|
54
|
+
return 'xg-icon-start-finish';
|
|
55
|
+
case 'workflow':
|
|
56
|
+
return 'xg-icon-workflow';
|
|
57
|
+
case 'branch':
|
|
58
|
+
return 'xg-icon-branch';
|
|
59
|
+
case 'function':
|
|
60
|
+
return 'xg-icon-function';
|
|
61
|
+
case 'context_set':
|
|
62
|
+
return 'xg-icon-context_set';
|
|
63
|
+
case 'context_get':
|
|
64
|
+
return 'xg-icon-context_get';
|
|
65
|
+
case 'variable':
|
|
66
|
+
return 'xg-icon-variable';
|
|
67
|
+
default:
|
|
68
|
+
return 'xg-icon-component';
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function renderNodeIcon(kind, x, y) {
|
|
72
|
+
const symbolId = getIconSymbolId(kind);
|
|
73
|
+
return el('use', {
|
|
74
|
+
href: `#${symbolId}`,
|
|
75
|
+
x, y,
|
|
76
|
+
width: TITLE_ICON_SIZE,
|
|
77
|
+
height: TITLE_ICON_SIZE,
|
|
78
|
+
color: 'white',
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=renderNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderNode.js","sourceRoot":"","sources":["../../src/render/renderNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderPort.d.ts","sourceRoot":"","sources":["../../src/render/renderPort.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAOzC,wBAAgB,UAAU,CACxB,IAAI,EAAE,KAAK,EACX,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,MAAM,CAkBR"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { g, text, el } from '../svg/builder.js';
|
|
2
|
+
import { getPortSymbol } from './symbols.js';
|
|
3
|
+
import { PORT_ROW_HEIGHT, PORT_DOT_SIZE, FONT_SIZE, PORT_LABEL_PADDING } from '../layout/metrics.js';
|
|
4
|
+
const SYMBOL_FONT_SIZE = 9;
|
|
5
|
+
export function renderPort(port, nodeWidth, rowIndex, titleHeight) {
|
|
6
|
+
const isOut = port.direction === 'out';
|
|
7
|
+
const y = titleHeight + rowIndex * PORT_ROW_HEIGHT;
|
|
8
|
+
const isConnected = port.linkIds.length > 0;
|
|
9
|
+
const isFlow = port.kind === 'flow';
|
|
10
|
+
const dotY = y + (PORT_ROW_HEIGHT - PORT_DOT_SIZE) / 2;
|
|
11
|
+
if (isOut) {
|
|
12
|
+
const dotX = nodeWidth - PORT_DOT_SIZE;
|
|
13
|
+
const dot = renderDot(port, dotX, dotY, isOut, isConnected, isFlow);
|
|
14
|
+
const label = isFlow ? '' : renderLabel(port.label, dotX - PORT_LABEL_PADDING, y, 'end');
|
|
15
|
+
return g({ class: `xg-port xg-port--out xg-port--${isFlow ? 'flow' : 'param'}`, 'data-port-id': port.id }, dot, label);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
const dotX = 0;
|
|
19
|
+
const dot = renderDot(port, dotX, dotY, isOut, isConnected, isFlow);
|
|
20
|
+
const label = isFlow ? '' : renderLabel(port.label, PORT_DOT_SIZE + PORT_LABEL_PADDING, y, 'start');
|
|
21
|
+
return g({ class: `xg-port xg-port--in xg-port--${isFlow ? 'flow' : 'param'}`, 'data-port-id': port.id }, dot, label);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function renderDot(port, x, y, isOut, isConnected, isFlow) {
|
|
25
|
+
const elements = [];
|
|
26
|
+
const w = PORT_DOT_SIZE;
|
|
27
|
+
const h = PORT_DOT_SIZE;
|
|
28
|
+
const r = 8;
|
|
29
|
+
// Half-rounded rect: out-ports rounded on left, in-ports rounded on right
|
|
30
|
+
let d;
|
|
31
|
+
if (isOut) {
|
|
32
|
+
d = `M${x + r},${y} L${x + w},${y} L${x + w},${y + h} L${x + r},${y + h} A${r},${r} 0 0,1 ${x},${y + h - r} L${x},${y + r} A${r},${r} 0 0,1 ${x + r},${y}Z`;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
d = `M${x},${y} L${x + w - r},${y} A${r},${r} 0 0,1 ${x + w},${y + r} L${x + w},${y + h - r} A${r},${r} 0 0,1 ${x + w - r},${y + h} L${x},${y + h}Z`;
|
|
36
|
+
}
|
|
37
|
+
const connClass = isConnected ? ' xg-port__dot--connected' : '';
|
|
38
|
+
elements.push(el('path', { d, class: `xg-port__dot${connClass}` }));
|
|
39
|
+
if (isFlow) {
|
|
40
|
+
const iconRef = isOut ? '#xg-flow-out' : '#xg-flow-in';
|
|
41
|
+
const flowClass = isConnected ? 'xg-port--flow--connected' : 'xg-port--flow--disconnected';
|
|
42
|
+
elements.push(el('g', { class: flowClass }, el('use', { href: iconRef, x: x + 1.5, y: y + 1.5, width: 12, height: 12 })));
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
const symbol = getPortSymbol(port.dataType);
|
|
46
|
+
if (symbol) {
|
|
47
|
+
const symClass = isConnected ? 'xg-port__symbol xg-port__symbol--connected' : 'xg-port__symbol xg-port__symbol--disconnected';
|
|
48
|
+
elements.push(text({ x: x + w / 2, y: y + h - 3, 'text-anchor': 'middle', 'font-size': SYMBOL_FONT_SIZE, class: symClass }, symbol));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return elements.join('');
|
|
52
|
+
}
|
|
53
|
+
function renderLabel(label, x, y, anchor) {
|
|
54
|
+
const displayLabel = label.length > 40 ? label.slice(0, 37) + '...' : label;
|
|
55
|
+
return text({ x, y: y + PORT_ROW_HEIGHT / 2 + FONT_SIZE / 2 - 1, 'text-anchor': anchor, 'font-size': FONT_SIZE, class: 'xg-port__label' }, displayLabel);
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=renderPort.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderPort.js","sourceRoot":"","sources":["../../src/render/renderPort.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const SYMBOL_MAP: Record<string, string | null>;
|
|
2
|
+
export declare const UNKNOWN_SYMBOL = "\u25CE";
|
|
3
|
+
export declare function getPortSymbol(dataType: string | null): string | null;
|
|
4
|
+
export declare const FLOW_IN_ICON: string;
|
|
5
|
+
export declare const FLOW_OUT_ICON: string;
|
|
6
|
+
//# sourceMappingURL=symbols.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../src/render/symbols.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAiBpD,CAAC;AAEF,eAAO,MAAM,cAAc,WAAM,CAAC;AAElC,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAKpE;AAGD,eAAO,MAAM,YAAY,QAOf,CAAC;AAEX,eAAO,MAAM,aAAa,QAOhB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export const SYMBOL_MAP = {
|
|
2
|
+
'string': '" "',
|
|
3
|
+
'int': ' 1',
|
|
4
|
+
'float': '1.0',
|
|
5
|
+
'boolean': '⊤⊥',
|
|
6
|
+
'time.time': '𝘵',
|
|
7
|
+
'list': '[ ]',
|
|
8
|
+
'tuple': '( )',
|
|
9
|
+
'dict': '{ }',
|
|
10
|
+
'dynalist': '«[]»',
|
|
11
|
+
'dynatuple': '«()»',
|
|
12
|
+
'union': ' U',
|
|
13
|
+
'secret': '🗝️',
|
|
14
|
+
'chat': '🗨',
|
|
15
|
+
'any': '[_]',
|
|
16
|
+
'0': null,
|
|
17
|
+
'flow': null,
|
|
18
|
+
};
|
|
19
|
+
export const UNKNOWN_SYMBOL = '◎';
|
|
20
|
+
export function getPortSymbol(dataType) {
|
|
21
|
+
if (!dataType)
|
|
22
|
+
return null;
|
|
23
|
+
const lower = dataType.toLowerCase();
|
|
24
|
+
if (lower in SYMBOL_MAP)
|
|
25
|
+
return SYMBOL_MAP[lower];
|
|
26
|
+
return UNKNOWN_SYMBOL;
|
|
27
|
+
}
|
|
28
|
+
// Flow port SVG icons (from CustomPortLabel.tsx)
|
|
29
|
+
export const FLOW_IN_ICON = [
|
|
30
|
+
'<svg viewBox="0 0 24 24" width="12" height="12">',
|
|
31
|
+
'<path stroke="none" d="M0 0h24v24H0z" fill="none"/>',
|
|
32
|
+
'<path d="M3 12h12"/>',
|
|
33
|
+
'<path d="M11 8l4 4l-4 4"/>',
|
|
34
|
+
'<path d="M12 21a9 9 0 0 0 0 -18"/>',
|
|
35
|
+
'</svg>',
|
|
36
|
+
].join('');
|
|
37
|
+
export const FLOW_OUT_ICON = [
|
|
38
|
+
'<svg viewBox="0 0 24 24" width="12" height="12">',
|
|
39
|
+
'<path stroke="none" d="M0 0h24v24H0z" fill="none"/>',
|
|
40
|
+
'<path d="M9 12h12"/>',
|
|
41
|
+
'<path d="M17 16l4 -4l-4 -4"/>',
|
|
42
|
+
'<path d="M12 3a9 9 0 1 0 0 18"/>',
|
|
43
|
+
'</svg>',
|
|
44
|
+
].join('');
|
|
45
|
+
//# sourceMappingURL=symbols.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../src/render/symbols.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAkC;IACvD,QAAQ,EAAE,KAAK;IACf,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,KAAK;IACb,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,MAAM;IACnB,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,KAAK;IACf,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,KAAK;IACZ,GAAG,EAAE,IAAI;IACT,MAAM,EAAE,IAAI;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAC;AAElC,MAAM,UAAU,aAAa,CAAC,QAAuB;IACnD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,IAAI,KAAK,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAClD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,iDAAiD;AACjD,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,kDAAkD;IAClD,qDAAqD;IACrD,sBAAsB;IACtB,4BAA4B;IAC5B,oCAAoC;IACpC,QAAQ;CACT,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,kDAAkD;IAClD,qDAAqD;IACrD,sBAAsB;IACtB,+BAA+B;IAC/B,kCAAkC;IAClC,QAAQ;CACT,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate a cubic bezier path between two points.
|
|
3
|
+
* Matches react-diagrams' DefaultLinkModel.getSVGPath() behavior:
|
|
4
|
+
* control points offset horizontally by `curvyness` (default 50).
|
|
5
|
+
*/
|
|
6
|
+
export declare function bezierPath(x1: number, y1: number, x2: number, y2: number, curvyness?: number): string;
|
|
7
|
+
//# sourceMappingURL=bezier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bezier.d.ts","sourceRoot":"","sources":["../../src/svg/bezier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,SAAS,GAAE,MAAW,GACrB,MAAM,CAER"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate a cubic bezier path between two points.
|
|
3
|
+
* Matches react-diagrams' DefaultLinkModel.getSVGPath() behavior:
|
|
4
|
+
* control points offset horizontally by `curvyness` (default 50).
|
|
5
|
+
*/
|
|
6
|
+
export function bezierPath(x1, y1, x2, y2, curvyness = 50) {
|
|
7
|
+
return `M${x1},${y1} C${x1 + curvyness},${y1} ${x2 - curvyness},${y2} ${x2},${y2}`;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=bezier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bezier.js","sourceRoot":"","sources":["../../src/svg/bezier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,UAAU,CACxB,EAAU,EACV,EAAU,EACV,EAAU,EACV,EAAU,EACV,YAAoB,EAAE;IAEtB,OAAO,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE,GAAG,SAAS,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;AACrF,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type Attrs = Record<string, string | number | boolean | undefined>;
|
|
2
|
+
export declare function escapeXml(s: string): string;
|
|
3
|
+
export declare function el(tag: string, attrs: Attrs, ...children: string[]): string;
|
|
4
|
+
export declare function g(attrs: Attrs, ...children: string[]): string;
|
|
5
|
+
export declare function rect(attrs: Attrs): string;
|
|
6
|
+
export declare function text(attrs: Attrs, content: string): string;
|
|
7
|
+
export declare function path(attrs: Attrs): string;
|
|
8
|
+
export declare function line(attrs: Attrs): string;
|
|
9
|
+
export declare function svgRoot(attrs: Attrs, ...children: string[]): string;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=builder.d.ts.map
|