@shumoku/core 0.1.1 → 0.2.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.
Files changed (157) hide show
  1. package/dist/constants.d.ts +23 -0
  2. package/dist/constants.d.ts.map +1 -0
  3. package/dist/constants.js +25 -0
  4. package/dist/constants.js.map +1 -0
  5. package/dist/index.d.ts +1 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +2 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/layout/hierarchical.d.ts +12 -39
  10. package/dist/layout/hierarchical.d.ts.map +1 -1
  11. package/dist/layout/hierarchical.js +697 -1015
  12. package/dist/layout/hierarchical.js.map +1 -1
  13. package/dist/models/types.d.ts +30 -0
  14. package/dist/models/types.d.ts.map +1 -1
  15. package/dist/models/types.js.map +1 -1
  16. package/dist/renderer/svg.d.ts +31 -5
  17. package/dist/renderer/svg.d.ts.map +1 -1
  18. package/dist/renderer/svg.js +312 -85
  19. package/dist/renderer/svg.js.map +1 -1
  20. package/package.json +1 -1
  21. package/src/constants.ts +35 -0
  22. package/src/index.ts +3 -0
  23. package/src/layout/hierarchical.ts +805 -1127
  24. package/src/models/types.ts +37 -0
  25. package/src/renderer/svg.ts +368 -88
  26. package/dist/renderer/components/index.d.ts +0 -8
  27. package/dist/renderer/components/index.d.ts.map +0 -1
  28. package/dist/renderer/components/index.js +0 -8
  29. package/dist/renderer/components/index.js.map +0 -1
  30. package/dist/renderer/components/link-renderer.d.ts +0 -11
  31. package/dist/renderer/components/link-renderer.d.ts.map +0 -1
  32. package/dist/renderer/components/link-renderer.js +0 -340
  33. package/dist/renderer/components/link-renderer.js.map +0 -1
  34. package/dist/renderer/components/node-renderer.d.ts +0 -14
  35. package/dist/renderer/components/node-renderer.d.ts.map +0 -1
  36. package/dist/renderer/components/node-renderer.js +0 -242
  37. package/dist/renderer/components/node-renderer.js.map +0 -1
  38. package/dist/renderer/components/port-renderer.d.ts +0 -8
  39. package/dist/renderer/components/port-renderer.d.ts.map +0 -1
  40. package/dist/renderer/components/port-renderer.js +0 -85
  41. package/dist/renderer/components/port-renderer.js.map +0 -1
  42. package/dist/renderer/components/subgraph-renderer.d.ts +0 -13
  43. package/dist/renderer/components/subgraph-renderer.d.ts.map +0 -1
  44. package/dist/renderer/components/subgraph-renderer.js +0 -85
  45. package/dist/renderer/components/subgraph-renderer.js.map +0 -1
  46. package/dist/renderer/icon-registry/index.d.ts +0 -6
  47. package/dist/renderer/icon-registry/index.d.ts.map +0 -1
  48. package/dist/renderer/icon-registry/index.js +0 -5
  49. package/dist/renderer/icon-registry/index.js.map +0 -1
  50. package/dist/renderer/icon-registry/registry.d.ts +0 -25
  51. package/dist/renderer/icon-registry/registry.d.ts.map +0 -1
  52. package/dist/renderer/icon-registry/registry.js +0 -85
  53. package/dist/renderer/icon-registry/registry.js.map +0 -1
  54. package/dist/renderer/icon-registry/types.d.ts +0 -44
  55. package/dist/renderer/icon-registry/types.d.ts.map +0 -1
  56. package/dist/renderer/icon-registry/types.js +0 -5
  57. package/dist/renderer/icon-registry/types.js.map +0 -1
  58. package/dist/renderer/render-model/builder.d.ts +0 -43
  59. package/dist/renderer/render-model/builder.d.ts.map +0 -1
  60. package/dist/renderer/render-model/builder.js +0 -646
  61. package/dist/renderer/render-model/builder.js.map +0 -1
  62. package/dist/renderer/render-model/index.d.ts +0 -6
  63. package/dist/renderer/render-model/index.d.ts.map +0 -1
  64. package/dist/renderer/render-model/index.js +0 -5
  65. package/dist/renderer/render-model/index.js.map +0 -1
  66. package/dist/renderer/render-model/types.d.ts +0 -216
  67. package/dist/renderer/render-model/types.d.ts.map +0 -1
  68. package/dist/renderer/render-model/types.js +0 -6
  69. package/dist/renderer/render-model/types.js.map +0 -1
  70. package/dist/renderer/renderer-types.d.ts +0 -55
  71. package/dist/renderer/renderer-types.d.ts.map +0 -1
  72. package/dist/renderer/renderer-types.js +0 -5
  73. package/dist/renderer/renderer-types.js.map +0 -1
  74. package/dist/renderer/svg-builder.d.ts +0 -152
  75. package/dist/renderer/svg-builder.d.ts.map +0 -1
  76. package/dist/renderer/svg-builder.js +0 -176
  77. package/dist/renderer/svg-builder.js.map +0 -1
  78. package/dist/renderer/svg-dom/builders/defs.d.ts +0 -10
  79. package/dist/renderer/svg-dom/builders/defs.d.ts.map +0 -1
  80. package/dist/renderer/svg-dom/builders/defs.js +0 -82
  81. package/dist/renderer/svg-dom/builders/defs.js.map +0 -1
  82. package/dist/renderer/svg-dom/builders/index.d.ts +0 -9
  83. package/dist/renderer/svg-dom/builders/index.d.ts.map +0 -1
  84. package/dist/renderer/svg-dom/builders/index.js +0 -9
  85. package/dist/renderer/svg-dom/builders/index.js.map +0 -1
  86. package/dist/renderer/svg-dom/builders/link.d.ts +0 -18
  87. package/dist/renderer/svg-dom/builders/link.d.ts.map +0 -1
  88. package/dist/renderer/svg-dom/builders/link.js +0 -188
  89. package/dist/renderer/svg-dom/builders/link.js.map +0 -1
  90. package/dist/renderer/svg-dom/builders/node.d.ts +0 -15
  91. package/dist/renderer/svg-dom/builders/node.d.ts.map +0 -1
  92. package/dist/renderer/svg-dom/builders/node.js +0 -262
  93. package/dist/renderer/svg-dom/builders/node.js.map +0 -1
  94. package/dist/renderer/svg-dom/builders/subgraph.d.ts +0 -14
  95. package/dist/renderer/svg-dom/builders/subgraph.d.ts.map +0 -1
  96. package/dist/renderer/svg-dom/builders/subgraph.js +0 -63
  97. package/dist/renderer/svg-dom/builders/subgraph.js.map +0 -1
  98. package/dist/renderer/svg-dom/builders/utils.d.ts +0 -40
  99. package/dist/renderer/svg-dom/builders/utils.d.ts.map +0 -1
  100. package/dist/renderer/svg-dom/builders/utils.js +0 -79
  101. package/dist/renderer/svg-dom/builders/utils.js.map +0 -1
  102. package/dist/renderer/svg-dom/index.d.ts +0 -9
  103. package/dist/renderer/svg-dom/index.d.ts.map +0 -1
  104. package/dist/renderer/svg-dom/index.js +0 -7
  105. package/dist/renderer/svg-dom/index.js.map +0 -1
  106. package/dist/renderer/svg-dom/interaction.d.ts +0 -69
  107. package/dist/renderer/svg-dom/interaction.d.ts.map +0 -1
  108. package/dist/renderer/svg-dom/interaction.js +0 -296
  109. package/dist/renderer/svg-dom/interaction.js.map +0 -1
  110. package/dist/renderer/svg-dom/renderer.d.ts +0 -47
  111. package/dist/renderer/svg-dom/renderer.d.ts.map +0 -1
  112. package/dist/renderer/svg-dom/renderer.js +0 -188
  113. package/dist/renderer/svg-dom/renderer.js.map +0 -1
  114. package/dist/renderer/svg-string/builders/defs.d.ts +0 -10
  115. package/dist/renderer/svg-string/builders/defs.d.ts.map +0 -1
  116. package/dist/renderer/svg-string/builders/defs.js +0 -43
  117. package/dist/renderer/svg-string/builders/defs.js.map +0 -1
  118. package/dist/renderer/svg-string/builders/link.d.ts +0 -10
  119. package/dist/renderer/svg-string/builders/link.d.ts.map +0 -1
  120. package/dist/renderer/svg-string/builders/link.js +0 -149
  121. package/dist/renderer/svg-string/builders/link.js.map +0 -1
  122. package/dist/renderer/svg-string/builders/node.d.ts +0 -10
  123. package/dist/renderer/svg-string/builders/node.d.ts.map +0 -1
  124. package/dist/renderer/svg-string/builders/node.js +0 -134
  125. package/dist/renderer/svg-string/builders/node.js.map +0 -1
  126. package/dist/renderer/svg-string/builders/subgraph.d.ts +0 -10
  127. package/dist/renderer/svg-string/builders/subgraph.d.ts.map +0 -1
  128. package/dist/renderer/svg-string/builders/subgraph.js +0 -59
  129. package/dist/renderer/svg-string/builders/subgraph.js.map +0 -1
  130. package/dist/renderer/svg-string/index.d.ts +0 -5
  131. package/dist/renderer/svg-string/index.d.ts.map +0 -1
  132. package/dist/renderer/svg-string/index.js +0 -5
  133. package/dist/renderer/svg-string/index.js.map +0 -1
  134. package/dist/renderer/svg-string/renderer.d.ts +0 -17
  135. package/dist/renderer/svg-string/renderer.d.ts.map +0 -1
  136. package/dist/renderer/svg-string/renderer.js +0 -53
  137. package/dist/renderer/svg-string/renderer.js.map +0 -1
  138. package/dist/renderer/text-measurer/browser-measurer.d.ts +0 -25
  139. package/dist/renderer/text-measurer/browser-measurer.d.ts.map +0 -1
  140. package/dist/renderer/text-measurer/browser-measurer.js +0 -85
  141. package/dist/renderer/text-measurer/browser-measurer.js.map +0 -1
  142. package/dist/renderer/text-measurer/fallback-measurer.d.ts +0 -22
  143. package/dist/renderer/text-measurer/fallback-measurer.d.ts.map +0 -1
  144. package/dist/renderer/text-measurer/fallback-measurer.js +0 -113
  145. package/dist/renderer/text-measurer/fallback-measurer.js.map +0 -1
  146. package/dist/renderer/text-measurer/index.d.ts +0 -13
  147. package/dist/renderer/text-measurer/index.d.ts.map +0 -1
  148. package/dist/renderer/text-measurer/index.js +0 -35
  149. package/dist/renderer/text-measurer/index.js.map +0 -1
  150. package/dist/renderer/text-measurer/types.d.ts +0 -30
  151. package/dist/renderer/text-measurer/types.d.ts.map +0 -1
  152. package/dist/renderer/text-measurer/types.js +0 -5
  153. package/dist/renderer/text-measurer/types.js.map +0 -1
  154. package/dist/renderer/theme.d.ts +0 -29
  155. package/dist/renderer/theme.d.ts.map +0 -1
  156. package/dist/renderer/theme.js +0 -80
  157. package/dist/renderer/theme.js.map +0 -1
@@ -1,149 +0,0 @@
1
- /**
2
- * SVG Link Builder
3
- * Renders RenderLink to SVG string
4
- */
5
- import { escapeXml } from '../../svg-builder.js';
6
- /**
7
- * Render link as SVG group
8
- */
9
- export function renderLink(link) {
10
- const parts = [];
11
- // Open group
12
- const classNames = link.classes.join(' ');
13
- const dataAttrs = Object.entries(link.dataAttributes)
14
- .map(([k, v]) => `${k}="${v}"`)
15
- .join(' ');
16
- parts.push(`<g class="${classNames}" ${dataAttrs}>`);
17
- // Render link lines (with bandwidth support)
18
- parts.push(renderLinkLines(link));
19
- // Center labels
20
- for (const label of link.labels) {
21
- parts.push(renderLabel(label));
22
- }
23
- // From endpoint labels
24
- for (const label of link.fromLabels) {
25
- parts.push(renderEndpointLabel(label));
26
- }
27
- // To endpoint labels
28
- for (const label of link.toLabels) {
29
- parts.push(renderEndpointLabel(label));
30
- }
31
- // Close group
32
- parts.push('</g>');
33
- return parts.join('\n');
34
- }
35
- /**
36
- * Render link lines with bandwidth support
37
- */
38
- function renderLinkLines(link) {
39
- const { pathData, style, markerStart, markerEnd, lineCount, points } = link;
40
- const parts = [];
41
- if (lineCount === 1) {
42
- // Single line
43
- parts.push(renderPath(pathData, style, markerStart, markerEnd));
44
- }
45
- else {
46
- // Multiple parallel lines for bandwidth visualization
47
- const lineSpacing = 3;
48
- const offsets = calculateLineOffsets(lineCount, lineSpacing);
49
- for (const offset of offsets) {
50
- const offsetPoints = offsetPointsPerp(points, offset);
51
- const offsetPathData = generatePathData(offsetPoints);
52
- parts.push(renderPath(offsetPathData, style, undefined, undefined));
53
- }
54
- }
55
- return parts.join('\n');
56
- }
57
- /**
58
- * Render a single path
59
- */
60
- function renderPath(d, style, markerStart, markerEnd) {
61
- const attrs = [
62
- 'class="link"',
63
- `d="${d}"`,
64
- 'fill="none"',
65
- ];
66
- if (style.stroke)
67
- attrs.push(`stroke="${style.stroke}"`);
68
- if (style.strokeWidth)
69
- attrs.push(`stroke-width="${style.strokeWidth}"`);
70
- if (style.strokeDasharray)
71
- attrs.push(`stroke-dasharray="${style.strokeDasharray}"`);
72
- if (markerStart)
73
- attrs.push(`marker-start="${markerStart}"`);
74
- if (markerEnd)
75
- attrs.push(`marker-end="${markerEnd}"`);
76
- return `<path ${attrs.join(' ')} />`;
77
- }
78
- /**
79
- * Render center label
80
- */
81
- function renderLabel(label) {
82
- const { position, text, textStyle } = label;
83
- return `<text class="link-label" x="${position.x}" y="${position.y}" text-anchor="${textStyle.textAnchor}" font-family="${textStyle.fontFamily}" font-size="${textStyle.fontSize}" fill="${textStyle.fill}">${escapeXml(text)}</text>`;
84
- }
85
- /**
86
- * Render endpoint label with background
87
- */
88
- function renderEndpointLabel(label) {
89
- const parts = [];
90
- // Background
91
- if (label.background) {
92
- const bg = label.background;
93
- const bgStyle = bg.style;
94
- const strokeAttr = bgStyle.stroke ? ` stroke="${bgStyle.stroke}" stroke-width="${bgStyle.strokeWidth || 0.5}"` : '';
95
- parts.push(`<rect x="${bg.bounds.x}" y="${bg.bounds.y}" width="${bg.bounds.width}" height="${bg.bounds.height}" rx="${bg.cornerRadius}" fill="${bgStyle.fill}"${strokeAttr} />`);
96
- }
97
- // Text
98
- const { position, text, textStyle } = label;
99
- parts.push(`<text class="endpoint-label" x="${position.x}" y="${position.y}" text-anchor="${textStyle.textAnchor}" font-family="${textStyle.fontFamily}" font-size="${textStyle.fontSize}" fill="${textStyle.fill}">${escapeXml(text)}</text>`);
100
- return parts.join('\n');
101
- }
102
- /**
103
- * Calculate line offsets for parallel lines
104
- */
105
- function calculateLineOffsets(lineCount, spacing) {
106
- const offsets = [];
107
- const totalWidth = (lineCount - 1) * spacing;
108
- const startOffset = -totalWidth / 2;
109
- for (let i = 0; i < lineCount; i++) {
110
- offsets.push(startOffset + i * spacing);
111
- }
112
- return offsets;
113
- }
114
- /**
115
- * Offset points perpendicular to the line direction
116
- */
117
- function offsetPointsPerp(points, offset) {
118
- if (points.length < 2)
119
- return points;
120
- const dx = points[points.length - 1].x - points[0].x;
121
- const dy = points[points.length - 1].y - points[0].y;
122
- const len = Math.sqrt(dx * dx + dy * dy);
123
- if (len === 0)
124
- return points;
125
- const perpX = -dy / len;
126
- const perpY = dx / len;
127
- return points.map(p => ({
128
- x: p.x + perpX * offset,
129
- y: p.y + perpY * offset,
130
- }));
131
- }
132
- /**
133
- * Generate path data from points
134
- */
135
- function generatePathData(points) {
136
- if (points.length === 4) {
137
- // Bezier curve
138
- return `M ${points[0].x} ${points[0].y} C ${points[1].x} ${points[1].y}, ${points[2].x} ${points[2].y}, ${points[3].x} ${points[3].y}`;
139
- }
140
- else if (points.length === 2) {
141
- // Straight line
142
- return `M ${points[0].x} ${points[0].y} L ${points[1].x} ${points[1].y}`;
143
- }
144
- else {
145
- // Polyline
146
- return points.map((p, i) => `${i === 0 ? 'M' : 'L'} ${p.x} ${p.y}`).join(' ');
147
- }
148
- }
149
- //# sourceMappingURL=link.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"link.js","sourceRoot":"","sources":["../../../../src/renderer/svg-string/builders/link.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- /**
2
- * SVG Node Builder
3
- * Renders RenderNode to SVG string
4
- */
5
- import type { RenderNode } from '../../render-model/types.js';
6
- /**
7
- * Render node as SVG group
8
- */
9
- export declare function renderNode(node: RenderNode): string;
10
- //# sourceMappingURL=node.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../../src/renderer/svg-string/builders/node.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAwC,MAAM,6BAA6B,CAAA;AAGnG;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAgCnD"}
@@ -1,134 +0,0 @@
1
- /**
2
- * SVG Node Builder
3
- * Renders RenderNode to SVG string
4
- */
5
- import { escapeXml } from '../../svg-builder.js';
6
- /**
7
- * Render node as SVG group
8
- */
9
- export function renderNode(node) {
10
- const parts = [];
11
- // Open group
12
- const classNames = node.classes.join(' ');
13
- const dataAttrs = Object.entries(node.dataAttributes)
14
- .map(([k, v]) => `${k}="${v}"`)
15
- .join(' ');
16
- parts.push(`<g class="${classNames}" ${dataAttrs}>`);
17
- // Shape
18
- parts.push(renderShape(node));
19
- // Icon
20
- if (node.iconRef && node.iconPosition && node.iconSize) {
21
- parts.push(renderIcon(node.iconRef, node.iconPosition, node.iconSize));
22
- }
23
- // Labels
24
- for (const label of node.labels) {
25
- parts.push(renderLabel(label));
26
- }
27
- // Ports
28
- for (const port of node.ports) {
29
- parts.push(renderPort(port));
30
- }
31
- // Close group
32
- parts.push('</g>');
33
- return parts.join('\n');
34
- }
35
- /**
36
- * Render node shape
37
- */
38
- function renderShape(node) {
39
- const { position, size, shape, style } = node;
40
- const x = position.x;
41
- const y = position.y;
42
- const w = size.width;
43
- const h = size.height;
44
- const halfW = w / 2;
45
- const halfH = h / 2;
46
- const styleAttrs = buildStyleAttrs(style);
47
- switch (shape) {
48
- case 'rect':
49
- return `<rect x="${x - halfW}" y="${y - halfH}" width="${w}" height="${h}" ${styleAttrs} />`;
50
- case 'rounded':
51
- return `<rect x="${x - halfW}" y="${y - halfH}" width="${w}" height="${h}" rx="8" ry="8" ${styleAttrs} />`;
52
- case 'circle': {
53
- const r = Math.min(halfW, halfH);
54
- return `<circle cx="${x}" cy="${y}" r="${r}" ${styleAttrs} />`;
55
- }
56
- case 'diamond':
57
- return `<polygon points="${x},${y - halfH} ${x + halfW},${y} ${x},${y + halfH} ${x - halfW},${y}" ${styleAttrs} />`;
58
- case 'hexagon': {
59
- const hx = halfW * 0.866;
60
- return `<polygon points="${x - halfW},${y} ${x - hx},${y - halfH} ${x + hx},${y - halfH} ${x + halfW},${y} ${x + hx},${y + halfH} ${x - hx},${y + halfH}" ${styleAttrs} />`;
61
- }
62
- case 'cylinder': {
63
- const ellipseH = h * 0.15;
64
- return [
65
- `<ellipse cx="${x}" cy="${y + halfH - ellipseH}" rx="${halfW}" ry="${ellipseH}" ${styleAttrs} />`,
66
- `<rect x="${x - halfW}" y="${y - halfH + ellipseH}" width="${w}" height="${h - ellipseH * 2}" fill="${style.fill}" />`,
67
- `<line x1="${x - halfW}" y1="${y - halfH + ellipseH}" x2="${x - halfW}" y2="${y + halfH - ellipseH}" stroke="${style.stroke}" stroke-width="${style.strokeWidth}" />`,
68
- `<line x1="${x + halfW}" y1="${y - halfH + ellipseH}" x2="${x + halfW}" y2="${y + halfH - ellipseH}" stroke="${style.stroke}" stroke-width="${style.strokeWidth}" />`,
69
- `<ellipse cx="${x}" cy="${y - halfH + ellipseH}" rx="${halfW}" ry="${ellipseH}" ${styleAttrs} />`,
70
- ].join('\n');
71
- }
72
- case 'stadium':
73
- return `<rect x="${x - halfW}" y="${y - halfH}" width="${w}" height="${h}" rx="${halfH}" ry="${halfH}" ${styleAttrs} />`;
74
- case 'trapezoid': {
75
- const indent = w * 0.15;
76
- return `<polygon points="${x - halfW + indent},${y - halfH} ${x + halfW - indent},${y - halfH} ${x + halfW},${y + halfH} ${x - halfW},${y + halfH}" ${styleAttrs} />`;
77
- }
78
- default:
79
- return `<rect x="${x - halfW}" y="${y - halfH}" width="${w}" height="${h}" rx="4" ry="4" ${styleAttrs} />`;
80
- }
81
- }
82
- /**
83
- * Render icon using symbol reference
84
- */
85
- function renderIcon(iconRef, position, size) {
86
- return `<use href="#${iconRef}" x="${position.x}" y="${position.y}" width="${size.width}" height="${size.height}" class="node-icon" />`;
87
- }
88
- /**
89
- * Render label
90
- */
91
- function renderLabel(label) {
92
- const { position, text, textStyle } = label;
93
- const fontWeight = textStyle.fontWeight === 'bold' ? ' font-weight="bold"' : '';
94
- return `<text x="${position.x}" y="${position.y}" text-anchor="${textStyle.textAnchor}" font-family="${textStyle.fontFamily}" font-size="${textStyle.fontSize}" fill="${textStyle.fill}"${fontWeight}>${escapeXml(text)}</text>`;
95
- }
96
- /**
97
- * Render port
98
- */
99
- function renderPort(port) {
100
- const { absolutePosition, size, style, label } = port;
101
- const x = absolutePosition.x - size.width / 2;
102
- const y = absolutePosition.y - size.height / 2;
103
- const parts = [];
104
- // Port box
105
- parts.push(`<rect class="port" data-port="${port.id}" x="${x}" y="${y}" width="${size.width}" height="${size.height}" rx="2" fill="${style.fill}" stroke="${style.stroke}" stroke-width="${style.strokeWidth}" />`);
106
- // Label background
107
- if (label.background) {
108
- const bg = label.background;
109
- parts.push(`<rect x="${bg.bounds.x}" y="${bg.bounds.y}" width="${bg.bounds.width}" height="${bg.bounds.height}" rx="${bg.cornerRadius}" fill="${bg.style.fill}" />`);
110
- }
111
- // Label text
112
- parts.push(`<text class="port-label" x="${label.position.x}" y="${label.position.y}" text-anchor="${label.textStyle.textAnchor}" font-size="${label.textStyle.fontSize}" fill="${label.textStyle.fill}">${escapeXml(label.text)}</text>`);
113
- return parts.join('\n');
114
- }
115
- /**
116
- * Build style attributes string
117
- */
118
- function buildStyleAttrs(style) {
119
- const attrs = [];
120
- if (style.fill)
121
- attrs.push(`fill="${style.fill}"`);
122
- if (style.stroke)
123
- attrs.push(`stroke="${style.stroke}"`);
124
- if (style.strokeWidth)
125
- attrs.push(`stroke-width="${style.strokeWidth}"`);
126
- if (style.strokeDasharray)
127
- attrs.push(`stroke-dasharray="${style.strokeDasharray}"`);
128
- if (style.opacity !== undefined)
129
- attrs.push(`opacity="${style.opacity}"`);
130
- if (style.filter)
131
- attrs.push(`filter="${style.filter}"`);
132
- return attrs.join(' ');
133
- }
134
- //# sourceMappingURL=node.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../../../../src/renderer/svg-string/builders/node.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- /**
2
- * SVG Subgraph Builder
3
- * Renders RenderSubgraph to SVG string
4
- */
5
- import type { RenderSubgraph } from '../../render-model/types.js';
6
- /**
7
- * Render subgraph as SVG group
8
- */
9
- export declare function renderSubgraph(subgraph: RenderSubgraph): string;
10
- //# sourceMappingURL=subgraph.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"subgraph.d.ts","sourceRoot":"","sources":["../../../../src/renderer/svg-string/builders/subgraph.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAe,MAAM,6BAA6B,CAAA;AAG9E;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CA2B/D"}
@@ -1,59 +0,0 @@
1
- /**
2
- * SVG Subgraph Builder
3
- * Renders RenderSubgraph to SVG string
4
- */
5
- import { escapeXml } from '../../svg-builder.js';
6
- /**
7
- * Render subgraph as SVG group
8
- */
9
- export function renderSubgraph(subgraph) {
10
- const parts = [];
11
- // Open group
12
- const classNames = subgraph.classes.join(' ');
13
- const dataAttrs = Object.entries(subgraph.dataAttributes)
14
- .map(([k, v]) => `${k}="${v}"`)
15
- .join(' ');
16
- parts.push(`<g class="${classNames}" ${dataAttrs}>`);
17
- // Background rect
18
- const { bounds, style, cornerRadius } = subgraph;
19
- parts.push(renderRect(bounds, style, cornerRadius));
20
- // Icon
21
- if (subgraph.iconRef && subgraph.iconPosition && subgraph.iconSize) {
22
- parts.push(renderIcon(subgraph.iconRef, subgraph.iconPosition, subgraph.iconSize));
23
- }
24
- // Label
25
- const { label } = subgraph;
26
- parts.push(`<text class="subgraph-label" x="${label.position.x}" y="${label.position.y}" text-anchor="${label.textStyle.textAnchor}" font-family="${label.textStyle.fontFamily}" font-size="${label.textStyle.fontSize}" font-weight="${label.textStyle.fontWeight}" fill="${label.textStyle.fill}">${escapeXml(label.text)}</text>`);
27
- // Close group
28
- parts.push('</g>');
29
- return parts.join('\n');
30
- }
31
- /**
32
- * Render background rectangle
33
- */
34
- function renderRect(bounds, style, cornerRadius) {
35
- const attrs = [
36
- `x="${bounds.x}"`,
37
- `y="${bounds.y}"`,
38
- `width="${bounds.width}"`,
39
- `height="${bounds.height}"`,
40
- `rx="${cornerRadius}"`,
41
- `ry="${cornerRadius}"`,
42
- ];
43
- if (style.fill)
44
- attrs.push(`fill="${style.fill}"`);
45
- if (style.stroke)
46
- attrs.push(`stroke="${style.stroke}"`);
47
- if (style.strokeWidth)
48
- attrs.push(`stroke-width="${style.strokeWidth}"`);
49
- if (style.strokeDasharray)
50
- attrs.push(`stroke-dasharray="${style.strokeDasharray}"`);
51
- return `<rect ${attrs.join(' ')} />`;
52
- }
53
- /**
54
- * Render icon using symbol reference
55
- */
56
- function renderIcon(iconRef, position, size) {
57
- return `<use href="#${iconRef}" x="${position.x}" y="${position.y}" width="${size.width}" height="${size.height}" class="subgraph-icon" />`;
58
- }
59
- //# sourceMappingURL=subgraph.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"subgraph.js","sourceRoot":"","sources":["../../../../src/renderer/svg-string/builders/subgraph.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * SVG String Renderer Module
3
- */
4
- export { SVGStringRenderer, createSVGStringRenderer } from './renderer.js';
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/renderer/svg-string/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA"}
@@ -1,5 +0,0 @@
1
- /**
2
- * SVG String Renderer Module
3
- */
4
- export { SVGStringRenderer, createSVGStringRenderer } from './renderer.js';
5
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/renderer/svg-string/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA"}
@@ -1,17 +0,0 @@
1
- /**
2
- * SVG String Renderer
3
- * Renders RenderModel to SVG string output
4
- */
5
- import type { RenderModel } from '../render-model/types.js';
6
- import type { Renderer, RendererOptions } from '../renderer-types.js';
7
- export declare class SVGStringRenderer implements Renderer<'string'> {
8
- constructor(_options?: RendererOptions);
9
- render(model: RenderModel): string;
10
- private renderOpen;
11
- private renderStyles;
12
- }
13
- /**
14
- * Create a new SVG string renderer
15
- */
16
- export declare function createSVGStringRenderer(options?: RendererOptions): SVGStringRenderer;
17
- //# sourceMappingURL=renderer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../src/renderer/svg-string/renderer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAUrE,qBAAa,iBAAkB,YAAW,QAAQ,CAAC,QAAQ,CAAC;gBAC9C,QAAQ,GAAE,eAAoB;IAI1C,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM;IAiClC,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,YAAY;CAGrB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,iBAAiB,CAEpF"}
@@ -1,53 +0,0 @@
1
- /**
2
- * SVG String Renderer
3
- * Renders RenderModel to SVG string output
4
- */
5
- import { renderDefs } from './builders/defs.js';
6
- import { renderNode } from './builders/node.js';
7
- import { renderLink } from './builders/link.js';
8
- import { renderSubgraph } from './builders/subgraph.js';
9
- // ============================================
10
- // SVG String Renderer
11
- // ============================================
12
- export class SVGStringRenderer {
13
- constructor(_options = {}) {
14
- // Options reserved for future use (e.g., customizing output)
15
- }
16
- render(model) {
17
- const parts = [];
18
- // Open SVG
19
- parts.push(this.renderOpen(model));
20
- // Defs (icons, markers, filters)
21
- parts.push(renderDefs(model.defs));
22
- // Styles
23
- parts.push(this.renderStyles(model.styles));
24
- // Subgraphs (background layer)
25
- for (const [, subgraph] of model.subgraphs) {
26
- parts.push(renderSubgraph(subgraph));
27
- }
28
- // Links
29
- for (const [, link] of model.links) {
30
- parts.push(renderLink(link));
31
- }
32
- // Nodes (foreground layer)
33
- for (const [, node] of model.nodes) {
34
- parts.push(renderNode(node));
35
- }
36
- // Close SVG
37
- parts.push('</svg>');
38
- return parts.join('\n');
39
- }
40
- renderOpen(model) {
41
- return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="${model.viewBox}" width="${model.bounds.width}" height="${model.bounds.height}" style="background: ${model.backgroundColor}">`;
42
- }
43
- renderStyles(styles) {
44
- return `<style>${styles}</style>`;
45
- }
46
- }
47
- /**
48
- * Create a new SVG string renderer
49
- */
50
- export function createSVGStringRenderer(options) {
51
- return new SVGStringRenderer(options);
52
- }
53
- //# sourceMappingURL=renderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../../src/renderer/svg-string/renderer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD,+CAA+C;AAC/C,sBAAsB;AACtB,+CAA+C;AAE/C,MAAM,OAAO,iBAAiB;IAC5B,YAAY,WAA4B,EAAE;QACxC,6DAA6D;IAC/D,CAAC;IAED,MAAM,CAAC,KAAkB;QACvB,MAAM,KAAK,GAAa,EAAE,CAAA;QAE1B,WAAW;QACX,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;QAElC,iCAAiC;QACjC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;QAElC,SAAS;QACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;QAE3C,+BAA+B;QAC/B,KAAK,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAA;QACtC,CAAC;QAED,QAAQ;QACR,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;QAC9B,CAAC;QAED,2BAA2B;QAC3B,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;QAC9B,CAAC;QAED,YAAY;QACZ,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAEpB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAEO,UAAU,CAAC,KAAkB;QACnC,OAAO,oDAAoD,KAAK,CAAC,OAAO,YAAY,KAAK,CAAC,MAAM,CAAC,KAAK,aAAa,KAAK,CAAC,MAAM,CAAC,MAAM,wBAAwB,KAAK,CAAC,eAAe,IAAI,CAAA;IACzL,CAAC;IAEO,YAAY,CAAC,MAAc;QACjC,OAAO,UAAU,MAAM,UAAU,CAAA;IACnC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAyB;IAC/D,OAAO,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAA;AACvC,CAAC"}
@@ -1,25 +0,0 @@
1
- /**
2
- * Browser-based Text Measurer
3
- * Uses Canvas 2D context for accurate text measurement
4
- */
5
- import type { TextMeasurer, TextMetrics, TextMeasureOptions } from './types.js';
6
- /**
7
- * Browser text measurer using Canvas 2D API
8
- */
9
- export declare class BrowserTextMeasurer implements TextMeasurer {
10
- private canvas;
11
- private ctx;
12
- private cache;
13
- private maxCacheSize;
14
- constructor(maxCacheSize?: number);
15
- private getContext;
16
- measure(text: string, options: TextMeasureOptions): TextMetrics;
17
- measureLines(lines: string[], options: TextMeasureOptions): TextMetrics[];
18
- clearCache(): void;
19
- private addToCache;
20
- }
21
- /**
22
- * Create a browser text measurer instance
23
- */
24
- export declare function createBrowserTextMeasurer(maxCacheSize?: number): TextMeasurer;
25
- //# sourceMappingURL=browser-measurer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser-measurer.d.ts","sourceRoot":"","sources":["../../../src/renderer/text-measurer/browser-measurer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAS/E;;GAEG;AACH,qBAAa,mBAAoB,YAAW,YAAY;IACtD,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,GAAG,CAAwC;IACnD,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,YAAY,CAAQ;gBAEhB,YAAY,SAAO;IAI/B,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,WAAW;IA+B/D,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,kBAAkB,GAAG,WAAW,EAAE;IAIzE,UAAU,IAAI,IAAI;IAIlB,OAAO,CAAC,UAAU;CAUnB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,YAAY,CAE7E"}
@@ -1,85 +0,0 @@
1
- /**
2
- * Browser-based Text Measurer
3
- * Uses Canvas 2D context for accurate text measurement
4
- */
5
- /**
6
- * Cache key generator
7
- */
8
- function getCacheKey(text, options) {
9
- return `${options.fontFamily}|${options.fontSize}|${options.fontWeight || 'normal'}|${text}`;
10
- }
11
- /**
12
- * Browser text measurer using Canvas 2D API
13
- */
14
- export class BrowserTextMeasurer {
15
- canvas = null;
16
- ctx = null;
17
- cache = new Map();
18
- maxCacheSize;
19
- constructor(maxCacheSize = 1000) {
20
- this.maxCacheSize = maxCacheSize;
21
- }
22
- getContext() {
23
- if (!this.ctx) {
24
- // Create offscreen canvas for measurement
25
- if (typeof OffscreenCanvas !== 'undefined') {
26
- const offscreen = new OffscreenCanvas(1, 1);
27
- this.ctx = offscreen.getContext('2d');
28
- }
29
- else if (typeof document !== 'undefined') {
30
- this.canvas = document.createElement('canvas');
31
- this.ctx = this.canvas.getContext('2d');
32
- }
33
- if (!this.ctx) {
34
- throw new Error('Canvas 2D context not available');
35
- }
36
- }
37
- return this.ctx;
38
- }
39
- measure(text, options) {
40
- const cacheKey = getCacheKey(text, options);
41
- // Check cache
42
- const cached = this.cache.get(cacheKey);
43
- if (cached) {
44
- return cached;
45
- }
46
- const ctx = this.getContext();
47
- // Set font
48
- const fontWeight = options.fontWeight || 'normal';
49
- ctx.font = `${fontWeight} ${options.fontSize}px ${options.fontFamily}`;
50
- // Measure text
51
- const metrics = ctx.measureText(text);
52
- const result = {
53
- width: metrics.width,
54
- // Use font metrics for height, fallback to fontSize * 1.2
55
- height: (metrics.actualBoundingBoxAscent ?? options.fontSize * 0.8) +
56
- (metrics.actualBoundingBoxDescent ?? options.fontSize * 0.2),
57
- };
58
- // Store in cache
59
- this.addToCache(cacheKey, result);
60
- return result;
61
- }
62
- measureLines(lines, options) {
63
- return lines.map(line => this.measure(line, options));
64
- }
65
- clearCache() {
66
- this.cache.clear();
67
- }
68
- addToCache(key, value) {
69
- // Evict oldest entries if cache is full
70
- if (this.cache.size >= this.maxCacheSize) {
71
- const firstKey = this.cache.keys().next().value;
72
- if (firstKey) {
73
- this.cache.delete(firstKey);
74
- }
75
- }
76
- this.cache.set(key, value);
77
- }
78
- }
79
- /**
80
- * Create a browser text measurer instance
81
- */
82
- export function createBrowserTextMeasurer(maxCacheSize) {
83
- return new BrowserTextMeasurer(maxCacheSize);
84
- }
85
- //# sourceMappingURL=browser-measurer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser-measurer.js","sourceRoot":"","sources":["../../../src/renderer/text-measurer/browser-measurer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,SAAS,WAAW,CAAC,IAAY,EAAE,OAA2B;IAC5D,OAAO,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,UAAU,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAA;AAC9F,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,mBAAmB;IACtB,MAAM,GAA6B,IAAI,CAAA;IACvC,GAAG,GAAoC,IAAI,CAAA;IAC3C,KAAK,GAA6B,IAAI,GAAG,EAAE,CAAA;IAC3C,YAAY,CAAQ;IAE5B,YAAY,YAAY,GAAG,IAAI;QAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAEO,UAAU;QAChB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACd,0CAA0C;YAC1C,IAAI,OAAO,eAAe,KAAK,WAAW,EAAE,CAAC;gBAC3C,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBAC3C,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAwC,CAAA;YAC9E,CAAC;iBAAM,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;gBAC3C,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;gBAC9C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YACzC,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;YACpD,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAED,OAAO,CAAC,IAAY,EAAE,OAA2B;QAC/C,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAE3C,cAAc;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACvC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAA;QACf,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;QAE7B,WAAW;QACX,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,QAAQ,CAAA;QACjD,GAAG,CAAC,IAAI,GAAG,GAAG,UAAU,IAAI,OAAO,CAAC,QAAQ,MAAM,OAAO,CAAC,UAAU,EAAE,CAAA;QAEtE,eAAe;QACf,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QAErC,MAAM,MAAM,GAAgB;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,0DAA0D;YAC1D,MAAM,EAAE,CAAC,OAAO,CAAC,uBAAuB,IAAI,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC;gBAC3D,CAAC,OAAO,CAAC,wBAAwB,IAAI,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC;SACrE,CAAA;QAED,iBAAiB;QACjB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAEjC,OAAO,MAAM,CAAA;IACf,CAAC;IAED,YAAY,CAAC,KAAe,EAAE,OAA2B;QACvD,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IACvD,CAAC;IAED,UAAU;QACR,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAEO,UAAU,CAAC,GAAW,EAAE,KAAkB;QAChD,wCAAwC;QACxC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAA;YAC/C,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC5B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,YAAqB;IAC7D,OAAO,IAAI,mBAAmB,CAAC,YAAY,CAAC,CAAA;AAC9C,CAAC"}