@shumoku/core 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/icons/build-icons.d.ts +6 -0
- package/dist/icons/build-icons.d.ts.map +1 -0
- package/dist/icons/build-icons.js +163 -0
- package/dist/icons/build-icons.js.map +1 -0
- package/dist/icons/generated-icons.d.ts +32 -0
- package/dist/icons/generated-icons.d.ts.map +1 -0
- package/dist/icons/generated-icons.js +88 -0
- package/dist/icons/generated-icons.js.map +1 -0
- package/dist/icons/index.d.ts +2 -0
- package/dist/icons/index.d.ts.map +1 -0
- package/dist/icons/index.js +2 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/layout/hierarchical.d.ts +73 -0
- package/dist/layout/hierarchical.d.ts.map +1 -0
- package/dist/layout/hierarchical.js +1320 -0
- package/dist/layout/hierarchical.js.map +1 -0
- package/dist/layout/index.d.ts +6 -0
- package/dist/layout/index.d.ts.map +1 -0
- package/dist/layout/index.js +5 -0
- package/dist/layout/index.js.map +1 -0
- package/dist/models/index.d.ts +5 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +5 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/types.d.ts +381 -0
- package/dist/models/types.d.ts.map +1 -0
- package/dist/models/types.js +61 -0
- package/dist/models/types.js.map +1 -0
- package/dist/renderer/components/index.d.ts +8 -0
- package/dist/renderer/components/index.d.ts.map +1 -0
- package/dist/renderer/components/index.js +8 -0
- package/dist/renderer/components/index.js.map +1 -0
- package/dist/renderer/components/link-renderer.d.ts +11 -0
- package/dist/renderer/components/link-renderer.d.ts.map +1 -0
- package/dist/renderer/components/link-renderer.js +340 -0
- package/dist/renderer/components/link-renderer.js.map +1 -0
- package/dist/renderer/components/node-renderer.d.ts +14 -0
- package/dist/renderer/components/node-renderer.d.ts.map +1 -0
- package/dist/renderer/components/node-renderer.js +242 -0
- package/dist/renderer/components/node-renderer.js.map +1 -0
- package/dist/renderer/components/port-renderer.d.ts +8 -0
- package/dist/renderer/components/port-renderer.d.ts.map +1 -0
- package/dist/renderer/components/port-renderer.js +85 -0
- package/dist/renderer/components/port-renderer.js.map +1 -0
- package/dist/renderer/components/subgraph-renderer.d.ts +13 -0
- package/dist/renderer/components/subgraph-renderer.d.ts.map +1 -0
- package/dist/renderer/components/subgraph-renderer.js +85 -0
- package/dist/renderer/components/subgraph-renderer.js.map +1 -0
- package/dist/renderer/icon-registry/index.d.ts +6 -0
- package/dist/renderer/icon-registry/index.d.ts.map +1 -0
- package/dist/renderer/icon-registry/index.js +5 -0
- package/dist/renderer/icon-registry/index.js.map +1 -0
- package/dist/renderer/icon-registry/registry.d.ts +25 -0
- package/dist/renderer/icon-registry/registry.d.ts.map +1 -0
- package/dist/renderer/icon-registry/registry.js +85 -0
- package/dist/renderer/icon-registry/registry.js.map +1 -0
- package/dist/renderer/icon-registry/types.d.ts +44 -0
- package/dist/renderer/icon-registry/types.d.ts.map +1 -0
- package/dist/renderer/icon-registry/types.js +5 -0
- package/dist/renderer/icon-registry/types.js.map +1 -0
- package/dist/renderer/index.d.ts +6 -0
- package/dist/renderer/index.d.ts.map +1 -0
- package/dist/renderer/index.js +5 -0
- package/dist/renderer/index.js.map +1 -0
- package/dist/renderer/render-model/builder.d.ts +43 -0
- package/dist/renderer/render-model/builder.d.ts.map +1 -0
- package/dist/renderer/render-model/builder.js +646 -0
- package/dist/renderer/render-model/builder.js.map +1 -0
- package/dist/renderer/render-model/index.d.ts +6 -0
- package/dist/renderer/render-model/index.d.ts.map +1 -0
- package/dist/renderer/render-model/index.js +5 -0
- package/dist/renderer/render-model/index.js.map +1 -0
- package/dist/renderer/render-model/types.d.ts +216 -0
- package/dist/renderer/render-model/types.d.ts.map +1 -0
- package/dist/renderer/render-model/types.js +6 -0
- package/dist/renderer/render-model/types.js.map +1 -0
- package/dist/renderer/renderer-types.d.ts +55 -0
- package/dist/renderer/renderer-types.d.ts.map +1 -0
- package/dist/renderer/renderer-types.js +5 -0
- package/dist/renderer/renderer-types.js.map +1 -0
- package/dist/renderer/svg-builder.d.ts +152 -0
- package/dist/renderer/svg-builder.d.ts.map +1 -0
- package/dist/renderer/svg-builder.js +176 -0
- package/dist/renderer/svg-builder.js.map +1 -0
- package/dist/renderer/svg-dom/builders/defs.d.ts +10 -0
- package/dist/renderer/svg-dom/builders/defs.d.ts.map +1 -0
- package/dist/renderer/svg-dom/builders/defs.js +82 -0
- package/dist/renderer/svg-dom/builders/defs.js.map +1 -0
- package/dist/renderer/svg-dom/builders/index.d.ts +9 -0
- package/dist/renderer/svg-dom/builders/index.d.ts.map +1 -0
- package/dist/renderer/svg-dom/builders/index.js +9 -0
- package/dist/renderer/svg-dom/builders/index.js.map +1 -0
- package/dist/renderer/svg-dom/builders/link.d.ts +18 -0
- package/dist/renderer/svg-dom/builders/link.d.ts.map +1 -0
- package/dist/renderer/svg-dom/builders/link.js +188 -0
- package/dist/renderer/svg-dom/builders/link.js.map +1 -0
- package/dist/renderer/svg-dom/builders/node.d.ts +15 -0
- package/dist/renderer/svg-dom/builders/node.d.ts.map +1 -0
- package/dist/renderer/svg-dom/builders/node.js +262 -0
- package/dist/renderer/svg-dom/builders/node.js.map +1 -0
- package/dist/renderer/svg-dom/builders/subgraph.d.ts +14 -0
- package/dist/renderer/svg-dom/builders/subgraph.d.ts.map +1 -0
- package/dist/renderer/svg-dom/builders/subgraph.js +63 -0
- package/dist/renderer/svg-dom/builders/subgraph.js.map +1 -0
- package/dist/renderer/svg-dom/builders/utils.d.ts +40 -0
- package/dist/renderer/svg-dom/builders/utils.d.ts.map +1 -0
- package/dist/renderer/svg-dom/builders/utils.js +79 -0
- package/dist/renderer/svg-dom/builders/utils.js.map +1 -0
- package/dist/renderer/svg-dom/index.d.ts +9 -0
- package/dist/renderer/svg-dom/index.d.ts.map +1 -0
- package/dist/renderer/svg-dom/index.js +7 -0
- package/dist/renderer/svg-dom/index.js.map +1 -0
- package/dist/renderer/svg-dom/interaction.d.ts +69 -0
- package/dist/renderer/svg-dom/interaction.d.ts.map +1 -0
- package/dist/renderer/svg-dom/interaction.js +296 -0
- package/dist/renderer/svg-dom/interaction.js.map +1 -0
- package/dist/renderer/svg-dom/renderer.d.ts +47 -0
- package/dist/renderer/svg-dom/renderer.d.ts.map +1 -0
- package/dist/renderer/svg-dom/renderer.js +188 -0
- package/dist/renderer/svg-dom/renderer.js.map +1 -0
- package/dist/renderer/svg-string/builders/defs.d.ts +10 -0
- package/dist/renderer/svg-string/builders/defs.d.ts.map +1 -0
- package/dist/renderer/svg-string/builders/defs.js +43 -0
- package/dist/renderer/svg-string/builders/defs.js.map +1 -0
- package/dist/renderer/svg-string/builders/link.d.ts +10 -0
- package/dist/renderer/svg-string/builders/link.d.ts.map +1 -0
- package/dist/renderer/svg-string/builders/link.js +149 -0
- package/dist/renderer/svg-string/builders/link.js.map +1 -0
- package/dist/renderer/svg-string/builders/node.d.ts +10 -0
- package/dist/renderer/svg-string/builders/node.d.ts.map +1 -0
- package/dist/renderer/svg-string/builders/node.js +134 -0
- package/dist/renderer/svg-string/builders/node.js.map +1 -0
- package/dist/renderer/svg-string/builders/subgraph.d.ts +10 -0
- package/dist/renderer/svg-string/builders/subgraph.d.ts.map +1 -0
- package/dist/renderer/svg-string/builders/subgraph.js +59 -0
- package/dist/renderer/svg-string/builders/subgraph.js.map +1 -0
- package/dist/renderer/svg-string/index.d.ts +5 -0
- package/dist/renderer/svg-string/index.d.ts.map +1 -0
- package/dist/renderer/svg-string/index.js +5 -0
- package/dist/renderer/svg-string/index.js.map +1 -0
- package/dist/renderer/svg-string/renderer.d.ts +17 -0
- package/dist/renderer/svg-string/renderer.d.ts.map +1 -0
- package/dist/renderer/svg-string/renderer.js +53 -0
- package/dist/renderer/svg-string/renderer.js.map +1 -0
- package/dist/renderer/svg.d.ts +105 -0
- package/dist/renderer/svg.d.ts.map +1 -0
- package/dist/renderer/svg.js +804 -0
- package/dist/renderer/svg.js.map +1 -0
- package/dist/renderer/text-measurer/browser-measurer.d.ts +25 -0
- package/dist/renderer/text-measurer/browser-measurer.d.ts.map +1 -0
- package/dist/renderer/text-measurer/browser-measurer.js +85 -0
- package/dist/renderer/text-measurer/browser-measurer.js.map +1 -0
- package/dist/renderer/text-measurer/fallback-measurer.d.ts +22 -0
- package/dist/renderer/text-measurer/fallback-measurer.d.ts.map +1 -0
- package/dist/renderer/text-measurer/fallback-measurer.js +113 -0
- package/dist/renderer/text-measurer/fallback-measurer.js.map +1 -0
- package/dist/renderer/text-measurer/index.d.ts +13 -0
- package/dist/renderer/text-measurer/index.d.ts.map +1 -0
- package/dist/renderer/text-measurer/index.js +35 -0
- package/dist/renderer/text-measurer/index.js.map +1 -0
- package/dist/renderer/text-measurer/types.d.ts +30 -0
- package/dist/renderer/text-measurer/types.d.ts.map +1 -0
- package/dist/renderer/text-measurer/types.js +5 -0
- package/dist/renderer/text-measurer/types.js.map +1 -0
- package/dist/renderer/theme.d.ts +29 -0
- package/dist/renderer/theme.d.ts.map +1 -0
- package/dist/renderer/theme.js +80 -0
- package/dist/renderer/theme.js.map +1 -0
- package/dist/themes/dark.d.ts +6 -0
- package/dist/themes/dark.d.ts.map +1 -0
- package/dist/themes/dark.js +96 -0
- package/dist/themes/dark.js.map +1 -0
- package/dist/themes/index.d.ts +13 -0
- package/dist/themes/index.d.ts.map +1 -0
- package/dist/themes/index.js +15 -0
- package/dist/themes/index.js.map +1 -0
- package/dist/themes/modern.d.ts +6 -0
- package/dist/themes/modern.d.ts.map +1 -0
- package/dist/themes/modern.js +164 -0
- package/dist/themes/modern.js.map +1 -0
- package/dist/themes/types.d.ts +234 -0
- package/dist/themes/types.d.ts.map +1 -0
- package/dist/themes/types.js +5 -0
- package/dist/themes/types.js.map +1 -0
- package/dist/themes/utils.d.ts +21 -0
- package/dist/themes/utils.d.ts.map +1 -0
- package/dist/themes/utils.js +124 -0
- package/dist/themes/utils.js.map +1 -0
- package/package.json +92 -0
- package/src/icons/build-icons.ts +189 -0
- package/src/icons/default/access-point.svg +3 -0
- package/src/icons/default/cloud.svg +3 -0
- package/src/icons/default/database.svg +3 -0
- package/src/icons/default/firewall.svg +4 -0
- package/src/icons/default/generic.svg +3 -0
- package/src/icons/default/internet.svg +3 -0
- package/src/icons/default/l2-switch.svg +3 -0
- package/src/icons/default/l3-switch.svg +3 -0
- package/src/icons/default/load-balancer.svg +3 -0
- package/src/icons/default/router.svg +3 -0
- package/src/icons/default/server.svg +3 -0
- package/src/icons/default/vpn.svg +3 -0
- package/src/icons/generated-icons.ts +111 -0
- package/src/icons/index.ts +1 -0
- package/src/index.ts +21 -0
- package/src/layout/hierarchical.ts +1543 -0
- package/src/layout/index.ts +6 -0
- package/src/models/index.ts +5 -0
- package/src/models/types.ts +528 -0
- package/src/renderer/index.ts +6 -0
- package/src/renderer/svg.ts +997 -0
- package/src/themes/dark.ts +110 -0
- package/src/themes/index.ts +24 -0
- package/src/themes/modern.ts +186 -0
- package/src/themes/types.ts +262 -0
- package/src/themes/utils.ts +143 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Port Renderer Component
|
|
3
|
+
*/
|
|
4
|
+
import { rect, text, escapeXml } from '../svg-builder.js';
|
|
5
|
+
// ============================================
|
|
6
|
+
// Port Renderer
|
|
7
|
+
// ============================================
|
|
8
|
+
export function renderPorts(nodeX, nodeY, ports, theme) {
|
|
9
|
+
if (!ports || ports.size === 0)
|
|
10
|
+
return [];
|
|
11
|
+
const elements = [];
|
|
12
|
+
ports.forEach((port) => {
|
|
13
|
+
const px = nodeX + port.position.x;
|
|
14
|
+
const py = nodeY + port.position.y;
|
|
15
|
+
const pw = port.size.width;
|
|
16
|
+
const ph = port.size.height;
|
|
17
|
+
// Port box
|
|
18
|
+
elements.push(rect({
|
|
19
|
+
class: 'port',
|
|
20
|
+
'data-port': port.id,
|
|
21
|
+
x: px - pw / 2,
|
|
22
|
+
y: py - ph / 2,
|
|
23
|
+
width: pw,
|
|
24
|
+
height: ph,
|
|
25
|
+
fill: theme.portFill,
|
|
26
|
+
stroke: theme.portStroke,
|
|
27
|
+
'stroke-width': 1,
|
|
28
|
+
rx: 2,
|
|
29
|
+
}));
|
|
30
|
+
// Port label positioning
|
|
31
|
+
const { labelX, labelY, textAnchor } = calculateLabelPosition(port, px, py);
|
|
32
|
+
// Label background
|
|
33
|
+
const labelText = escapeXml(port.label);
|
|
34
|
+
const charWidth = 5.5;
|
|
35
|
+
const labelWidth = labelText.length * charWidth + 4;
|
|
36
|
+
const labelHeight = 12;
|
|
37
|
+
const bgX = calculateBackgroundX(labelX, labelWidth, textAnchor);
|
|
38
|
+
const bgY = labelY - labelHeight + 3;
|
|
39
|
+
elements.push(rect({
|
|
40
|
+
class: 'port-label-bg',
|
|
41
|
+
x: bgX,
|
|
42
|
+
y: bgY,
|
|
43
|
+
width: labelWidth,
|
|
44
|
+
height: labelHeight,
|
|
45
|
+
rx: 2,
|
|
46
|
+
fill: theme.portLabelBg,
|
|
47
|
+
}));
|
|
48
|
+
// Port label text
|
|
49
|
+
elements.push(text({
|
|
50
|
+
class: 'port-label',
|
|
51
|
+
x: labelX,
|
|
52
|
+
y: labelY,
|
|
53
|
+
'text-anchor': textAnchor,
|
|
54
|
+
'font-size': 9,
|
|
55
|
+
fill: theme.portLabelColor,
|
|
56
|
+
}, labelText));
|
|
57
|
+
});
|
|
58
|
+
return elements;
|
|
59
|
+
}
|
|
60
|
+
function calculateLabelPosition(port, px, py) {
|
|
61
|
+
const labelOffset = 12;
|
|
62
|
+
switch (port.side) {
|
|
63
|
+
case 'top':
|
|
64
|
+
return { labelX: px, labelY: py - labelOffset, textAnchor: 'middle' };
|
|
65
|
+
case 'bottom':
|
|
66
|
+
return { labelX: px, labelY: py + labelOffset + 4, textAnchor: 'middle' };
|
|
67
|
+
case 'left':
|
|
68
|
+
return { labelX: px - labelOffset, labelY: py, textAnchor: 'end' };
|
|
69
|
+
case 'right':
|
|
70
|
+
return { labelX: px + labelOffset, labelY: py, textAnchor: 'start' };
|
|
71
|
+
default:
|
|
72
|
+
return { labelX: px, labelY: py + labelOffset + 4, textAnchor: 'middle' };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function calculateBackgroundX(labelX, labelWidth, textAnchor) {
|
|
76
|
+
switch (textAnchor) {
|
|
77
|
+
case 'middle':
|
|
78
|
+
return labelX - labelWidth / 2;
|
|
79
|
+
case 'end':
|
|
80
|
+
return labelX - labelWidth + 2;
|
|
81
|
+
default:
|
|
82
|
+
return labelX - 2;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=port-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port-renderer.js","sourceRoot":"","sources":["../../../src/renderer/components/port-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subgraph Renderer Component
|
|
3
|
+
*/
|
|
4
|
+
import type { LayoutSubgraph } from '../../models/index.js';
|
|
5
|
+
import type { ThemeColors } from '../theme.js';
|
|
6
|
+
import type { IconThemeVariant } from '../../icons/index.js';
|
|
7
|
+
import { type SVGElement } from '../svg-builder.js';
|
|
8
|
+
export interface SubgraphRendererContext {
|
|
9
|
+
theme: ThemeColors;
|
|
10
|
+
iconTheme: IconThemeVariant;
|
|
11
|
+
}
|
|
12
|
+
export declare function renderSubgraph(sg: LayoutSubgraph, ctx: SubgraphRendererContext): SVGElement;
|
|
13
|
+
//# sourceMappingURL=subgraph-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subgraph-renderer.d.ts","sourceRoot":"","sources":["../../../src/renderer/components/subgraph-renderer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAE5D,OAAO,EAA4B,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAM7E,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,WAAW,CAAA;IAClB,SAAS,EAAE,gBAAgB,CAAA;CAC5B;AAED,wBAAgB,cAAc,CAC5B,EAAE,EAAE,cAAc,EAClB,GAAG,EAAE,uBAAuB,GAC3B,UAAU,CA8DZ"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subgraph Renderer Component
|
|
3
|
+
*/
|
|
4
|
+
import { getVendorIconEntry } from '../../icons/index.js';
|
|
5
|
+
import { g, rect, text, escapeXml } from '../svg-builder.js';
|
|
6
|
+
export function renderSubgraph(sg, ctx) {
|
|
7
|
+
const { bounds, subgraph } = sg;
|
|
8
|
+
const style = subgraph.style || {};
|
|
9
|
+
const fill = style.fill || ctx.theme.subgraphFill;
|
|
10
|
+
const stroke = style.stroke || ctx.theme.subgraphStroke;
|
|
11
|
+
const strokeWidth = style.strokeWidth || 1;
|
|
12
|
+
const strokeDasharray = style.strokeDasharray || '';
|
|
13
|
+
const labelPos = style.labelPosition || 'top';
|
|
14
|
+
const rx = 8;
|
|
15
|
+
// Icon configuration
|
|
16
|
+
const iconKey = subgraph.service || subgraph.model;
|
|
17
|
+
const hasIcon = subgraph.vendor && iconKey;
|
|
18
|
+
const iconSize = 24;
|
|
19
|
+
const iconPadding = 8;
|
|
20
|
+
const group = g({ class: 'subgraph', 'data-id': sg.id });
|
|
21
|
+
// Background rect
|
|
22
|
+
group.child(rect({
|
|
23
|
+
x: bounds.x,
|
|
24
|
+
y: bounds.y,
|
|
25
|
+
width: bounds.width,
|
|
26
|
+
height: bounds.height,
|
|
27
|
+
rx,
|
|
28
|
+
ry: rx,
|
|
29
|
+
fill,
|
|
30
|
+
stroke,
|
|
31
|
+
'stroke-width': strokeWidth,
|
|
32
|
+
'stroke-dasharray': strokeDasharray || undefined,
|
|
33
|
+
}));
|
|
34
|
+
// Icon
|
|
35
|
+
if (hasIcon) {
|
|
36
|
+
const iconX = bounds.x + iconPadding;
|
|
37
|
+
const iconY = bounds.y + iconPadding;
|
|
38
|
+
const iconElement = renderSubgraphIcon(subgraph.vendor, iconKey, subgraph.resource, iconX, iconY, iconSize, ctx.iconTheme);
|
|
39
|
+
if (iconElement) {
|
|
40
|
+
group.child(iconElement);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Label
|
|
44
|
+
let labelX = hasIcon ? bounds.x + iconSize + iconPadding * 2 : bounds.x + 10;
|
|
45
|
+
let labelY = bounds.y + 20;
|
|
46
|
+
if (labelPos === 'top') {
|
|
47
|
+
labelX = hasIcon ? bounds.x + iconSize + iconPadding * 2 : bounds.x + 10;
|
|
48
|
+
labelY = bounds.y + 20;
|
|
49
|
+
}
|
|
50
|
+
group.child(text({
|
|
51
|
+
x: labelX,
|
|
52
|
+
y: labelY,
|
|
53
|
+
class: 'subgraph-label',
|
|
54
|
+
'text-anchor': 'start',
|
|
55
|
+
fill: ctx.theme.subgraphLabelColor,
|
|
56
|
+
}, escapeXml(subgraph.label)));
|
|
57
|
+
return group;
|
|
58
|
+
}
|
|
59
|
+
// ============================================
|
|
60
|
+
// Icon Rendering
|
|
61
|
+
// ============================================
|
|
62
|
+
function renderSubgraphIcon(vendor, iconKey, resource, iconX, iconY, iconSize, iconTheme) {
|
|
63
|
+
const iconEntry = getVendorIconEntry(vendor, iconKey, resource);
|
|
64
|
+
if (!iconEntry)
|
|
65
|
+
return null;
|
|
66
|
+
const iconContent = iconEntry[iconTheme] || iconEntry.default;
|
|
67
|
+
const viewBox = iconEntry.viewBox || '0 0 48 48';
|
|
68
|
+
// Check if icon is a nested SVG (PNG-based)
|
|
69
|
+
if (iconContent.startsWith('<svg')) {
|
|
70
|
+
const viewBoxMatch = iconContent.match(/viewBox="0 0 (\d+) (\d+)"/);
|
|
71
|
+
if (viewBoxMatch) {
|
|
72
|
+
const vbWidth = parseInt(viewBoxMatch[1]);
|
|
73
|
+
const vbHeight = parseInt(viewBoxMatch[2]);
|
|
74
|
+
const aspectRatio = vbWidth / vbHeight;
|
|
75
|
+
const iconWidth = Math.round(iconSize * aspectRatio);
|
|
76
|
+
const innerSvg = iconContent.replace(/<svg[^>]*>/, '').replace(/<\/svg>$/, '');
|
|
77
|
+
return g({ class: 'subgraph-icon', transform: `translate(${iconX}, ${iconY})` })
|
|
78
|
+
.child(`<svg width="${iconWidth}" height="${iconSize}" viewBox="0 0 ${vbWidth} ${vbHeight}">${innerSvg}</svg>`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Use viewBox from entry
|
|
82
|
+
return g({ class: 'subgraph-icon', transform: `translate(${iconX}, ${iconY})` })
|
|
83
|
+
.child(`<svg width="${iconSize}" height="${iconSize}" viewBox="${viewBox}">${iconContent}</svg>`);
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=subgraph-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subgraph-renderer.js","sourceRoot":"","sources":["../../../src/renderer/components/subgraph-renderer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAmB,MAAM,mBAAmB,CAAA;AAW7E,MAAM,UAAU,cAAc,CAC5B,EAAkB,EAClB,GAA4B;IAE5B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAA;IAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAA;IAElC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,CAAA;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,cAAc,CAAA;IACvD,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,CAAC,CAAA;IAC1C,MAAM,eAAe,GAAG,KAAK,CAAC,eAAe,IAAI,EAAE,CAAA;IACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAA;IAE7C,MAAM,EAAE,GAAG,CAAC,CAAA;IAEZ,qBAAqB;IACrB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAA;IAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAA;IAC1C,MAAM,QAAQ,GAAG,EAAE,CAAA;IACnB,MAAM,WAAW,GAAG,CAAC,CAAA;IAErB,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;IAExD,kBAAkB;IAClB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QACf,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,EAAE;QACF,EAAE,EAAE,EAAE;QACN,IAAI;QACJ,MAAM;QACN,cAAc,EAAE,WAAW;QAC3B,kBAAkB,EAAE,eAAe,IAAI,SAAS;KACjD,CAAC,CAAC,CAAA;IAEH,OAAO;IACP,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,WAAW,CAAA;QACpC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,WAAW,CAAA;QACpC,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,CAAC,MAAO,EAAE,OAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;QAC5H,IAAI,WAAW,EAAE,CAAC;YAChB,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;QAC1B,CAAC;IACH,CAAC;IAED,QAAQ;IACR,IAAI,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAA;IAC5E,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAA;IAE1B,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAA;QACxE,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAA;IACxB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QACf,CAAC,EAAE,MAAM;QACT,CAAC,EAAE,MAAM;QACT,KAAK,EAAE,gBAAgB;QACvB,aAAa,EAAE,OAAO;QACtB,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,kBAAkB;KACnC,EAAE,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAE9B,OAAO,KAAK,CAAA;AACd,CAAC;AAED,+CAA+C;AAC/C,iBAAiB;AACjB,+CAA+C;AAE/C,SAAS,kBAAkB,CACzB,MAAc,EACd,OAAe,EACf,QAA4B,EAC5B,KAAa,EACb,KAAa,EACb,QAAgB,EAChB,SAA2B;IAE3B,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IAC/D,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAA;IAE3B,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,OAAO,CAAA;IAC7D,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,IAAI,WAAW,CAAA;IAEhD,4CAA4C;IAC5C,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAA;QACnE,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;YACzC,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;YAC1C,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAA;YACtC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC,CAAA;YACpD,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;YAE9E,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,KAAK,KAAK,KAAK,GAAG,EAAE,CAAC;iBAC7E,KAAK,CAAC,eAAe,SAAS,aAAa,QAAQ,kBAAkB,OAAO,IAAI,QAAQ,KAAK,QAAQ,QAAQ,CAAC,CAAA;QACnH,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,aAAa,KAAK,KAAK,KAAK,GAAG,EAAE,CAAC;SAC7E,KAAK,CAAC,eAAe,QAAQ,aAAa,QAAQ,cAAc,OAAO,KAAK,WAAW,QAAQ,CAAC,CAAA;AACrG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/renderer/icon-registry/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/renderer/icon-registry/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Icon Registry Implementation
|
|
3
|
+
* Handles icon deduplication and symbol ID generation
|
|
4
|
+
*/
|
|
5
|
+
import type { RenderIcon } from '../render-model/types.js';
|
|
6
|
+
import type { IconRegistry, IconRegistryEntry } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Default icon registry implementation
|
|
9
|
+
*/
|
|
10
|
+
export declare class DefaultIconRegistry implements IconRegistry {
|
|
11
|
+
private icons;
|
|
12
|
+
private keyToId;
|
|
13
|
+
private counter;
|
|
14
|
+
register(key: string, entry: IconRegistryEntry): string;
|
|
15
|
+
has(key: string): boolean;
|
|
16
|
+
getId(key: string): string | undefined;
|
|
17
|
+
getIcons(): Map<string, RenderIcon>;
|
|
18
|
+
clear(): void;
|
|
19
|
+
get size(): number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Create a new icon registry
|
|
23
|
+
*/
|
|
24
|
+
export declare function createIconRegistry(): IconRegistry;
|
|
25
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/renderer/icon-registry/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AA8BjE;;GAEG;AACH,qBAAa,mBAAoB,YAAW,YAAY;IACtD,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,OAAO,CAAI;IAEnB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,MAAM;IA8BvD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAItC,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IAInC,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAEjD"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Icon Registry Implementation
|
|
3
|
+
* Handles icon deduplication and symbol ID generation
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Parse viewBox string to get dimensions
|
|
7
|
+
*/
|
|
8
|
+
function parseViewBox(viewBox) {
|
|
9
|
+
const parts = viewBox.split(/\s+/);
|
|
10
|
+
if (parts.length >= 4) {
|
|
11
|
+
return {
|
|
12
|
+
width: parseFloat(parts[2]) || 48,
|
|
13
|
+
height: parseFloat(parts[3]) || 48,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
return { width: 48, height: 48 };
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Generate a unique symbol ID from a key
|
|
20
|
+
*/
|
|
21
|
+
function generateSymbolId(key, index) {
|
|
22
|
+
// Sanitize key for use in SVG ID
|
|
23
|
+
const sanitized = key
|
|
24
|
+
.toLowerCase()
|
|
25
|
+
.replace(/[^a-z0-9-]/g, '-')
|
|
26
|
+
.replace(/-+/g, '-')
|
|
27
|
+
.replace(/^-|-$/g, '');
|
|
28
|
+
return `icon-${sanitized || index}`;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Default icon registry implementation
|
|
32
|
+
*/
|
|
33
|
+
export class DefaultIconRegistry {
|
|
34
|
+
icons = new Map();
|
|
35
|
+
keyToId = new Map();
|
|
36
|
+
counter = 0;
|
|
37
|
+
register(key, entry) {
|
|
38
|
+
// Check if already registered
|
|
39
|
+
const existingId = this.keyToId.get(key);
|
|
40
|
+
if (existingId) {
|
|
41
|
+
return existingId;
|
|
42
|
+
}
|
|
43
|
+
// Generate new symbol ID
|
|
44
|
+
const symbolId = generateSymbolId(key, this.counter++);
|
|
45
|
+
// Parse dimensions
|
|
46
|
+
const dimensions = entry.width && entry.height
|
|
47
|
+
? { width: entry.width, height: entry.height }
|
|
48
|
+
: parseViewBox(entry.viewBox);
|
|
49
|
+
// Create render icon
|
|
50
|
+
const renderIcon = {
|
|
51
|
+
id: symbolId,
|
|
52
|
+
content: entry.content,
|
|
53
|
+
viewBox: entry.viewBox,
|
|
54
|
+
size: dimensions,
|
|
55
|
+
};
|
|
56
|
+
// Store
|
|
57
|
+
this.icons.set(symbolId, renderIcon);
|
|
58
|
+
this.keyToId.set(key, symbolId);
|
|
59
|
+
return symbolId;
|
|
60
|
+
}
|
|
61
|
+
has(key) {
|
|
62
|
+
return this.keyToId.has(key);
|
|
63
|
+
}
|
|
64
|
+
getId(key) {
|
|
65
|
+
return this.keyToId.get(key);
|
|
66
|
+
}
|
|
67
|
+
getIcons() {
|
|
68
|
+
return new Map(this.icons);
|
|
69
|
+
}
|
|
70
|
+
clear() {
|
|
71
|
+
this.icons.clear();
|
|
72
|
+
this.keyToId.clear();
|
|
73
|
+
this.counter = 0;
|
|
74
|
+
}
|
|
75
|
+
get size() {
|
|
76
|
+
return this.icons.size;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Create a new icon registry
|
|
81
|
+
*/
|
|
82
|
+
export function createIconRegistry() {
|
|
83
|
+
return new DefaultIconRegistry();
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/renderer/icon-registry/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,SAAS,YAAY,CAAC,OAAe;IACnC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAClC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;YACjC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;SACnC,CAAA;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;AAClC,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,GAAW,EAAE,KAAa;IAClD,iCAAiC;IACjC,MAAM,SAAS,GAAG,GAAG;SAClB,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;IAExB,OAAO,QAAQ,SAAS,IAAI,KAAK,EAAE,CAAA;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,mBAAmB;IACtB,KAAK,GAA4B,IAAI,GAAG,EAAE,CAAA;IAC1C,OAAO,GAAwB,IAAI,GAAG,EAAE,CAAA;IACxC,OAAO,GAAG,CAAC,CAAA;IAEnB,QAAQ,CAAC,GAAW,EAAE,KAAwB;QAC5C,8BAA8B;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACxC,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,UAAU,CAAA;QACnB,CAAC;QAED,yBAAyB;QACzB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;QAEtD,mBAAmB;QACnB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM;YAC5C,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;YAC9C,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAE/B,qBAAqB;QACrB,MAAM,UAAU,GAAe;YAC7B,EAAE,EAAE,QAAQ;YACZ,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,UAAU;SACjB,CAAA;QAED,QAAQ;QACR,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;QACpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;QAE/B,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,GAAW;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;QAClB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAA;IAClB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;IACxB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,mBAAmB,EAAE,CAAA;AAClC,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Icon Registry Types
|
|
3
|
+
*/
|
|
4
|
+
import type { RenderIcon } from '../render-model/types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Icon entry for registration (different from icons/types.ts IconEntry)
|
|
7
|
+
*/
|
|
8
|
+
export interface IconRegistryEntry {
|
|
9
|
+
content: string;
|
|
10
|
+
viewBox: string;
|
|
11
|
+
width?: number;
|
|
12
|
+
height?: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Icon registry for deduplication and symbol management
|
|
16
|
+
*/
|
|
17
|
+
export interface IconRegistry {
|
|
18
|
+
/**
|
|
19
|
+
* Register an icon and get its symbol ID
|
|
20
|
+
* If the icon is already registered, returns existing ID
|
|
21
|
+
*/
|
|
22
|
+
register(key: string, entry: IconRegistryEntry): string;
|
|
23
|
+
/**
|
|
24
|
+
* Check if an icon is registered
|
|
25
|
+
*/
|
|
26
|
+
has(key: string): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Get symbol ID for a registered icon
|
|
29
|
+
*/
|
|
30
|
+
getId(key: string): string | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* Get all registered icons as RenderIcon map
|
|
33
|
+
*/
|
|
34
|
+
getIcons(): Map<string, RenderIcon>;
|
|
35
|
+
/**
|
|
36
|
+
* Clear all registered icons
|
|
37
|
+
*/
|
|
38
|
+
clear(): void;
|
|
39
|
+
/**
|
|
40
|
+
* Get the number of registered icons
|
|
41
|
+
*/
|
|
42
|
+
get size(): number;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/renderer/icon-registry/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAE1D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAAA;IAEvD;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;IAEzB;;OAEG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAEtC;;OAEG;IACH,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAEnC;;OAEG;IACH,KAAK,IAAI,IAAI,CAAA;IAEb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAAA;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/renderer/icon-registry/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACnD,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RenderModel Builder
|
|
3
|
+
* Converts LayoutResult to RenderModel
|
|
4
|
+
*/
|
|
5
|
+
import type { NetworkGraph, LayoutResult } from '../../models/index.js';
|
|
6
|
+
import type { TextMeasurer } from '../text-measurer/index.js';
|
|
7
|
+
import type { IconRegistry } from '../icon-registry/index.js';
|
|
8
|
+
import type { RenderModel } from './types.js';
|
|
9
|
+
import type { RenderModelBuilderOptions } from '../renderer-types.js';
|
|
10
|
+
export declare class RenderModelBuilder {
|
|
11
|
+
private textMeasurer;
|
|
12
|
+
private iconRegistry;
|
|
13
|
+
private options;
|
|
14
|
+
private theme;
|
|
15
|
+
private version;
|
|
16
|
+
constructor(textMeasurer: TextMeasurer, iconRegistry: IconRegistry, options?: RenderModelBuilderOptions);
|
|
17
|
+
/**
|
|
18
|
+
* Build RenderModel from NetworkGraph and LayoutResult
|
|
19
|
+
*/
|
|
20
|
+
build(_graph: NetworkGraph, layout: LayoutResult): RenderModel;
|
|
21
|
+
private buildNode;
|
|
22
|
+
private resolveNodeStyle;
|
|
23
|
+
private buildNodeLabels;
|
|
24
|
+
private registerNodeIcon;
|
|
25
|
+
private buildPorts;
|
|
26
|
+
private calculatePortLabelPosition;
|
|
27
|
+
private calculateLabelBackground;
|
|
28
|
+
private buildLink;
|
|
29
|
+
private resolveLinkStyle;
|
|
30
|
+
private getLinkStrokeWidth;
|
|
31
|
+
private getLinkDasharray;
|
|
32
|
+
private getBandwidthLineCount;
|
|
33
|
+
private generatePathData;
|
|
34
|
+
private getMidPoint;
|
|
35
|
+
private buildLinkLabels;
|
|
36
|
+
private buildEndpointLabels;
|
|
37
|
+
private buildSubgraph;
|
|
38
|
+
private resolveSubgraphStyle;
|
|
39
|
+
private buildDefs;
|
|
40
|
+
private buildStyles;
|
|
41
|
+
}
|
|
42
|
+
export declare function createRenderModelBuilder(textMeasurer: TextMeasurer, iconRegistry: IconRegistry, options?: RenderModelBuilderOptions): RenderModelBuilder;
|
|
43
|
+
//# sourceMappingURL=builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../src/renderer/render-model/builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EAQb,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EACV,WAAW,EAeZ,MAAM,YAAY,CAAA;AAGnB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;AAiBrE,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,OAAO,CAAI;gBAGjB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE,yBAA8B;IAazC;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,WAAW;IAwD9D,OAAO,CAAC,SAAS;IAkCjB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,eAAe;IAwCvB,OAAO,CAAC,gBAAgB;IAoDxB,OAAO,CAAC,UAAU;IAyDlB,OAAO,CAAC,0BAA0B;IAclC,OAAO,CAAC,wBAAwB;IA4BhC,OAAO,CAAC,SAAS;IA2CjB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,eAAe;IA4DvB,OAAO,CAAC,mBAAmB;IA8E3B,OAAO,CAAC,aAAa;IAsErB,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,SAAS;IA6CjB,OAAO,CAAC,WAAW;CAapB;AAMD,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAC1B,OAAO,CAAC,EAAE,yBAAyB,GAClC,kBAAkB,CAEpB"}
|