kymostudio 0.1.0 → 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.
- package/README.md +52 -29
- package/dist/bpmn-shapes.d.ts +15 -0
- package/dist/bpmn-shapes.d.ts.map +1 -0
- package/dist/bpmn-shapes.js +344 -0
- package/dist/bpmn-shapes.js.map +1 -0
- package/dist/from-bpmn.d.ts +15 -0
- package/dist/from-bpmn.d.ts.map +1 -0
- package/dist/from-bpmn.js +228 -0
- package/dist/from-bpmn.js.map +1 -0
- package/dist/icons-builtin.d.ts +14 -0
- package/dist/icons-builtin.d.ts.map +1 -0
- package/{src/js → dist}/icons-builtin.js +70 -115
- package/dist/icons-builtin.js.map +1 -0
- package/dist/icons-loader.d.ts +29 -0
- package/dist/icons-loader.d.ts.map +1 -0
- package/dist/icons-loader.js +88 -0
- package/dist/icons-loader.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/model.d.ts +166 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +165 -0
- package/dist/model.js.map +1 -0
- package/dist/render.d.ts +27 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +161 -0
- package/dist/render.js.map +1 -0
- package/dist/xml.d.ts +22 -0
- package/dist/xml.d.ts.map +1 -0
- package/dist/xml.js +116 -0
- package/dist/xml.js.map +1 -0
- package/package.json +29 -11
- package/src/js/icons-loader.js +0 -91
- package/src/js/index.js +0 -13
- package/src/js/model.js +0 -176
package/README.md
CHANGED
|
@@ -1,53 +1,76 @@
|
|
|
1
|
-
#
|
|
1
|
+
# kymostudio (JavaScript / TypeScript)
|
|
2
2
|
|
|
3
|
-
Diagram-as-code
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
Diagram-as-code for browser/Node: a **data model**, **icon library**, **SVG
|
|
4
|
+
renderer** (`renderSVG`), and a **BPMN 2.0 importer** (`parseBpmn`).
|
|
5
|
+
Dependency-free TypeScript, published with type declarations.
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
|
|
11
|
-
# or
|
|
12
|
-
uv tool install kymo
|
|
10
|
+
npm install kymostudio
|
|
13
11
|
```
|
|
14
12
|
|
|
15
|
-
##
|
|
13
|
+
## Convert a BPMN file
|
|
16
14
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
`parseBpmn(xml)` reads a standard `.bpmn` file (from bpmn.io / Camunda /
|
|
16
|
+
Signavio …) into a Diagram using the file's Diagram-Interchange geometry;
|
|
17
|
+
`renderSVG` turns it into an SVG document.
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
import { parseBpmn, renderSVG } from "kymostudio";
|
|
21
|
+
import { readFileSync } from "node:fs";
|
|
22
|
+
|
|
23
|
+
const svg = await renderSVG(parseBpmn(readFileSync("process.bpmn", "utf8")));
|
|
22
24
|
```
|
|
23
25
|
|
|
24
|
-
|
|
26
|
+
## Render an SVG from a model
|
|
27
|
+
|
|
28
|
+
`renderSVG(diagram)` turns a model (whose components carry positions) into a
|
|
29
|
+
complete SVG document — background, edges with arrowheads, icon glyphs and
|
|
30
|
+
labels (and BPMN glyphs / pools / flows for an imported `.bpmn`).
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
import { makeComponent, makeEdge, makeDiagram, renderSVG } from "kymostudio";
|
|
25
34
|
|
|
26
|
-
|
|
35
|
+
const orch = makeComponent({ id: "orch", name: "Orchestrator", icon: "hex-agent", shape: "hex", pos: [120, 210] });
|
|
36
|
+
const s3 = makeComponent({ id: "s3", name: "S3", icon: "aws-s3", shape: "aws-tile", pos: [400, 210] });
|
|
27
37
|
|
|
28
|
-
|
|
29
|
-
|
|
38
|
+
const diagram = makeDiagram({
|
|
39
|
+
title: "demo",
|
|
40
|
+
components: [orch, s3],
|
|
41
|
+
edges: [makeEdge({ src: "orch", dst: "s3", label: "read" })],
|
|
42
|
+
});
|
|
30
43
|
|
|
31
|
-
|
|
32
|
-
if layout_spec:
|
|
33
|
-
layout(diagram, layout_spec, external)
|
|
34
|
-
resolve_alignments(diagram)
|
|
35
|
-
svg = render(diagram, animate=True)
|
|
44
|
+
const svg = await renderSVG(diagram); // → "<?xml …><svg …>…</svg>"
|
|
36
45
|
```
|
|
37
46
|
|
|
38
|
-
|
|
47
|
+
`renderSVG` is `async` because icon glyphs come from `getIcon`. Built-in
|
|
48
|
+
glyphs resolve offline; file-backed icons are fetched from the manifest —
|
|
49
|
+
call `setIconBaseURL(url)` first to point at a host serving them.
|
|
39
50
|
|
|
40
|
-
|
|
41
|
-
parser, layout engine and SVG renderer remain Python-only):
|
|
51
|
+
## Model + icons
|
|
42
52
|
|
|
43
|
-
```
|
|
44
|
-
|
|
53
|
+
```ts
|
|
54
|
+
import { makeComponent, makeEdge, anchor, resolveAnchors, ICONS, getIcon } from "kymostudio";
|
|
45
55
|
```
|
|
46
56
|
|
|
47
|
-
|
|
48
|
-
|
|
57
|
+
`getIcon(key)` resolves built-in glyphs synchronously; file-backed icons are
|
|
58
|
+
fetched lazily from the manifest.
|
|
59
|
+
|
|
60
|
+
## Develop
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
npm install
|
|
64
|
+
npm run build # tsc → dist/ (JS + .d.ts), the published output
|
|
65
|
+
npm run typecheck # tsc --noEmit
|
|
66
|
+
npm test # build, then node --test
|
|
67
|
+
npm run build-manifest # scan ../../icons and (re)write icons-manifest.json
|
|
49
68
|
```
|
|
50
69
|
|
|
70
|
+
The icon set lives at the repo root in [`../../icons/`](../../icons/);
|
|
71
|
+
`icons-manifest.json` is generated from it and bundled into the published
|
|
72
|
+
package alongside the compiled `dist/`.
|
|
73
|
+
|
|
51
74
|
## License
|
|
52
75
|
|
|
53
76
|
Apache License 2.0 — see [`LICENSE`](./LICENSE).
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BPMN 2.0 glyph renderer — {@link renderSVG} delegates here for components
|
|
3
|
+
* whose `shape` starts with `bpmn-`, and for pool/lane regions + flows.
|
|
4
|
+
* Monochrome, matching the bpmn.io default look. Equivalent to the Python
|
|
5
|
+
* `bpmn_shapes.py`. `Component.pos` is the glyph centre; `Component.size`
|
|
6
|
+
* is its (width, height) box (from the file's Diagram-Interchange bounds).
|
|
7
|
+
*/
|
|
8
|
+
import { type Component, type Edge, type Region } from "./model.js";
|
|
9
|
+
export declare const BPMN_DEFS = "\n <marker id=\"bpmn-seq-end\" viewBox=\"0 0 12 12\" refX=\"10.5\" refY=\"6\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto\" markerUnits=\"userSpaceOnUse\">\n <path d=\"M1,1.5 L11,6 L1,10.5 Z\" fill=\"#374151\"/>\n </marker>\n <marker id=\"bpmn-msg-end\" viewBox=\"0 0 14 14\" refX=\"12\" refY=\"7\" markerWidth=\"13\" markerHeight=\"13\" orient=\"auto\" markerUnits=\"userSpaceOnUse\">\n <path d=\"M1.5,2 L12,7 L1.5,12 Z\" fill=\"#ffffff\" stroke=\"#374151\" stroke-width=\"1.2\"/>\n </marker>\n <marker id=\"bpmn-msg-start\" viewBox=\"0 0 12 12\" refX=\"6\" refY=\"6\" markerWidth=\"11\" markerHeight=\"11\" orient=\"auto\" markerUnits=\"userSpaceOnUse\">\n <circle cx=\"6\" cy=\"6\" r=\"3.6\" fill=\"#ffffff\" stroke=\"#374151\" stroke-width=\"1.2\"/>\n </marker>";
|
|
10
|
+
export declare const BPMN_STYLE = "\n .bpmn-event { fill: #ffffff; stroke: #4b5563; }\n .bpmn-event--start{ stroke-width: 1.6; }\n .bpmn-event--end { stroke-width: 3.4; }\n .bpmn-event--ring { stroke-width: 1.5; }\n .bpmn-task { fill: #ffffff; stroke: #4b5563; stroke-width: 1.6; }\n .bpmn-gateway { fill: #ffffff; stroke: #4b5563; stroke-width: 1.6; }\n .bpmn-data { fill: #ffffff; stroke: #6b7280; stroke-width: 1.4; }\n .bpmn-marker { fill: none; stroke: #374151; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }\n .bpmn-marker--fill{ fill: #374151; stroke: none; }\n .bpmn-label { font-size: 12.5px; fill: #1f2937; text-anchor: middle; }\n .bpmn-label--out { font-size: 11.5px; fill: #374151; text-anchor: middle; paint-order: stroke; stroke: #f8fafc; stroke-width: 3; stroke-linejoin: round; }\n .bpmn-anno-text { font-size: 12px; fill: #374151; }\n .bpmn-flow { fill: none; stroke: #374151; stroke-width: 1.6; stroke-linejoin: round; stroke-linecap: round; }\n .bpmn-flow--message { stroke-dasharray: 7 5; }\n .bpmn-flow--assoc { stroke: #6b7280; stroke-width: 1.3; stroke-dasharray: 1.5 4; }\n .bpmn-flow-label { font-size: 11px; fill: #334155; text-anchor: middle; paint-order: stroke; stroke: #f8fafc; stroke-width: 3.5; stroke-linejoin: round; }\n .region-rect { fill: rgba(15,23,42,0.02); stroke: #cbd5e1; stroke-width: 1.4; }\n .region-rect--inner { fill: rgba(124,58,237,0.03); stroke: #7c3aed; stroke-width: 1.3; stroke-dasharray: 4 4; }\n .region-rect--pool { fill: rgba(248,250,252,0.5); stroke: #94a3b8; stroke-width: 1.4; }\n .region-rect--lane { fill: none; stroke: #cbd5e1; stroke-width: 1.1; }\n .bpmn-pool-band { stroke: #94a3b8; stroke-width: 1.4; }\n .bpmn-lane-band { stroke: #cbd5e1; stroke-width: 1.1; }\n .bpmn-pool-label { font-size: 12.5px; font-weight: 600; fill: #475569; }\n .region-label--inner { font-size: 12px; font-weight: 600; fill: #6d28d9; }";
|
|
11
|
+
export declare function renderBpmnComponent(c: Component): string;
|
|
12
|
+
export declare function bpmnRegionRect(r: Region): string;
|
|
13
|
+
export declare function bpmnRegionLabel(r: Region): string;
|
|
14
|
+
export declare function renderBpmnEdge(e: Edge): string;
|
|
15
|
+
//# sourceMappingURL=bpmn-shapes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bpmn-shapes.d.ts","sourceRoot":"","sources":["../src/bpmn-shapes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAiB,KAAK,SAAS,EAAE,KAAK,IAAI,EAAc,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAa/F,eAAO,MAAM,SAAS,4yBASR,CAAC;AAGf,eAAO,MAAM,UAAU,o9DAwBwD,CAAC;AA4HhF,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAexD;AAuED,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAWhD;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAQjD;AASD,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAwB9C"}
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BPMN 2.0 glyph renderer — {@link renderSVG} delegates here for components
|
|
3
|
+
* whose `shape` starts with `bpmn-`, and for pool/lane regions + flows.
|
|
4
|
+
* Monochrome, matching the bpmn.io default look. Equivalent to the Python
|
|
5
|
+
* `bpmn_shapes.py`. `Component.pos` is the glyph centre; `Component.size`
|
|
6
|
+
* is its (width, height) box (from the file's Diagram-Interchange bounds).
|
|
7
|
+
*/
|
|
8
|
+
import { componentHalf } from "./model.js";
|
|
9
|
+
const INK = "#4b5563"; // single dark ink for every glyph outline
|
|
10
|
+
const esc = (s) => s.replace(/[&<>]/g, (c) => ({ "&": "&", "<": "<", ">": ">" }[c]));
|
|
11
|
+
/** Compact number (drops trailing zeros): 1.50 → "1.5", 2.00 → "2". */
|
|
12
|
+
const f = (v) => (Math.round(v * 100) / 100).toString();
|
|
13
|
+
const cos = (deg) => Math.cos((deg * Math.PI) / 180);
|
|
14
|
+
const sin = (deg) => Math.sin((deg * Math.PI) / 180);
|
|
15
|
+
// ── DEFS (flow markers) ─────────────────────────────────────────────────
|
|
16
|
+
export const BPMN_DEFS = `
|
|
17
|
+
<marker id="bpmn-seq-end" viewBox="0 0 12 12" refX="10.5" refY="6" markerWidth="12" markerHeight="12" orient="auto" markerUnits="userSpaceOnUse">
|
|
18
|
+
<path d="M1,1.5 L11,6 L1,10.5 Z" fill="#374151"/>
|
|
19
|
+
</marker>
|
|
20
|
+
<marker id="bpmn-msg-end" viewBox="0 0 14 14" refX="12" refY="7" markerWidth="13" markerHeight="13" orient="auto" markerUnits="userSpaceOnUse">
|
|
21
|
+
<path d="M1.5,2 L12,7 L1.5,12 Z" fill="#ffffff" stroke="#374151" stroke-width="1.2"/>
|
|
22
|
+
</marker>
|
|
23
|
+
<marker id="bpmn-msg-start" viewBox="0 0 12 12" refX="6" refY="6" markerWidth="11" markerHeight="11" orient="auto" markerUnits="userSpaceOnUse">
|
|
24
|
+
<circle cx="6" cy="6" r="3.6" fill="#ffffff" stroke="#374151" stroke-width="1.2"/>
|
|
25
|
+
</marker>`;
|
|
26
|
+
// ── CSS ───────────────────────────────────────────────────────────────────
|
|
27
|
+
export const BPMN_STYLE = `
|
|
28
|
+
.bpmn-event { fill: #ffffff; stroke: #4b5563; }
|
|
29
|
+
.bpmn-event--start{ stroke-width: 1.6; }
|
|
30
|
+
.bpmn-event--end { stroke-width: 3.4; }
|
|
31
|
+
.bpmn-event--ring { stroke-width: 1.5; }
|
|
32
|
+
.bpmn-task { fill: #ffffff; stroke: #4b5563; stroke-width: 1.6; }
|
|
33
|
+
.bpmn-gateway { fill: #ffffff; stroke: #4b5563; stroke-width: 1.6; }
|
|
34
|
+
.bpmn-data { fill: #ffffff; stroke: #6b7280; stroke-width: 1.4; }
|
|
35
|
+
.bpmn-marker { fill: none; stroke: #374151; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
|
|
36
|
+
.bpmn-marker--fill{ fill: #374151; stroke: none; }
|
|
37
|
+
.bpmn-label { font-size: 12.5px; fill: #1f2937; text-anchor: middle; }
|
|
38
|
+
.bpmn-label--out { font-size: 11.5px; fill: #374151; text-anchor: middle; paint-order: stroke; stroke: #f8fafc; stroke-width: 3; stroke-linejoin: round; }
|
|
39
|
+
.bpmn-anno-text { font-size: 12px; fill: #374151; }
|
|
40
|
+
.bpmn-flow { fill: none; stroke: #374151; stroke-width: 1.6; stroke-linejoin: round; stroke-linecap: round; }
|
|
41
|
+
.bpmn-flow--message { stroke-dasharray: 7 5; }
|
|
42
|
+
.bpmn-flow--assoc { stroke: #6b7280; stroke-width: 1.3; stroke-dasharray: 1.5 4; }
|
|
43
|
+
.bpmn-flow-label { font-size: 11px; fill: #334155; text-anchor: middle; paint-order: stroke; stroke: #f8fafc; stroke-width: 3.5; stroke-linejoin: round; }
|
|
44
|
+
.region-rect { fill: rgba(15,23,42,0.02); stroke: #cbd5e1; stroke-width: 1.4; }
|
|
45
|
+
.region-rect--inner { fill: rgba(124,58,237,0.03); stroke: #7c3aed; stroke-width: 1.3; stroke-dasharray: 4 4; }
|
|
46
|
+
.region-rect--pool { fill: rgba(248,250,252,0.5); stroke: #94a3b8; stroke-width: 1.4; }
|
|
47
|
+
.region-rect--lane { fill: none; stroke: #cbd5e1; stroke-width: 1.1; }
|
|
48
|
+
.bpmn-pool-band { stroke: #94a3b8; stroke-width: 1.4; }
|
|
49
|
+
.bpmn-lane-band { stroke: #cbd5e1; stroke-width: 1.1; }
|
|
50
|
+
.bpmn-pool-label { font-size: 12.5px; font-weight: 600; fill: #475569; }
|
|
51
|
+
.region-label--inner { font-size: 12px; font-weight: 600; fill: #6d28d9; }`;
|
|
52
|
+
// ── text wrapping ─────────────────────────────────────────────────────────
|
|
53
|
+
function wrap(text, widthPx, fontPx, maxLines) {
|
|
54
|
+
if (!text)
|
|
55
|
+
return [];
|
|
56
|
+
const maxChars = Math.max(3, Math.floor((widthPx - 8) / (fontPx * 0.55)));
|
|
57
|
+
const words = text.split(/\s+/).filter(Boolean);
|
|
58
|
+
const lines = [];
|
|
59
|
+
let cur = "";
|
|
60
|
+
let truncated = false;
|
|
61
|
+
for (let wi = 0; wi < words.length; wi++) {
|
|
62
|
+
const cand = cur ? `${cur} ${words[wi]}` : words[wi];
|
|
63
|
+
if (cand.length <= maxChars || !cur)
|
|
64
|
+
cur = cand;
|
|
65
|
+
else {
|
|
66
|
+
lines.push(cur);
|
|
67
|
+
cur = words[wi];
|
|
68
|
+
}
|
|
69
|
+
if (lines.length === maxLines) {
|
|
70
|
+
truncated = wi < words.length - 1 || cur.length > maxChars;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (cur && lines.length < maxLines)
|
|
75
|
+
lines.push(cur);
|
|
76
|
+
if (truncated && lines.length) {
|
|
77
|
+
let last = lines[lines.length - 1];
|
|
78
|
+
if (last.length > maxChars - 1)
|
|
79
|
+
last = last.slice(0, maxChars - 1).trimEnd();
|
|
80
|
+
lines[lines.length - 1] = `${last}…`;
|
|
81
|
+
}
|
|
82
|
+
return lines;
|
|
83
|
+
}
|
|
84
|
+
function centeredLines(lines, cx, cy, fontPx, cls = "bpmn-label") {
|
|
85
|
+
if (!lines.length)
|
|
86
|
+
return "";
|
|
87
|
+
const lh = fontPx + 2.5;
|
|
88
|
+
const top = cy - ((lines.length - 1) * lh) / 2 + fontPx * 0.35;
|
|
89
|
+
return lines.map((ln, i) => `<text class="${cls}" x="${f(cx)}" y="${f(top + i * lh)}">${esc(ln)}</text>`).join("");
|
|
90
|
+
}
|
|
91
|
+
// ── event-definition marker glyphs (centred on 0,0) ─────────────────────────
|
|
92
|
+
function eventMarker(kind, s, color) {
|
|
93
|
+
const cls = `class="bpmn-marker" stroke="${color}"`;
|
|
94
|
+
const fillcls = `class="bpmn-marker--fill" fill="${color}"`;
|
|
95
|
+
if (kind === "" || kind === "none")
|
|
96
|
+
return "";
|
|
97
|
+
if (kind === "message") {
|
|
98
|
+
const w = s * 1.5, h = s * 1.05;
|
|
99
|
+
return `<g ${cls}><rect x="${f(-w)}" y="${f(-h)}" width="${f(2 * w)}" height="${f(2 * h)}" rx="1"/>`
|
|
100
|
+
+ `<path d="M${f(-w)},${f(-h)} L0,${f(h * 0.15)} L${f(w)},${f(-h)}"/></g>`;
|
|
101
|
+
}
|
|
102
|
+
if (kind === "timer") {
|
|
103
|
+
const r = s * 1.25;
|
|
104
|
+
let ticks = "";
|
|
105
|
+
for (let a = 0; a < 360; a += 30) {
|
|
106
|
+
ticks += `<line x1="${f(r * 0.78 * cos(a))}" y1="${f(r * 0.78 * sin(a))}" x2="${f(r * 0.98 * cos(a))}" y2="${f(r * 0.98 * sin(a))}"/>`;
|
|
107
|
+
}
|
|
108
|
+
return `<g ${cls}><circle cx="0" cy="0" r="${f(r)}"/>${ticks}<path d="M0,${f(-r * 0.55)} L0,0 L${f(r * 0.45)},${f(r * 0.2)}"/></g>`;
|
|
109
|
+
}
|
|
110
|
+
if (kind === "error") {
|
|
111
|
+
return `<g ${cls}><path d="M${f(-s)},${f(s)} L${f(-s * 0.25)},${f(-s * 0.4)} L${f(s * 0.3)},${f(s * 0.35)} L${f(s)},${f(-s)}"/></g>`;
|
|
112
|
+
}
|
|
113
|
+
if (kind === "escalation") {
|
|
114
|
+
return `<g ${fillcls}><path d="M0,${f(-s)} L${f(s * 0.7)},${f(s * 0.6)} L0,${f(s * 0.05)} L${f(-s * 0.7)},${f(s * 0.6)} Z"/></g>`;
|
|
115
|
+
}
|
|
116
|
+
if (kind === "signal") {
|
|
117
|
+
return `<g ${cls}><path d="M0,${f(-s)} L${f(s)},${f(s * 0.7)} L${f(-s)},${f(s * 0.7)} Z"/></g>`;
|
|
118
|
+
}
|
|
119
|
+
if (kind === "terminate")
|
|
120
|
+
return `<g ${fillcls}><circle cx="0" cy="0" r="${f(s * 1.15)}"/></g>`;
|
|
121
|
+
if (kind === "conditional") {
|
|
122
|
+
const w = s * 1.1, h = s * 1.1;
|
|
123
|
+
let rows = "";
|
|
124
|
+
for (const y of [-h * 0.55, -h * 0.18, h * 0.18, h * 0.55])
|
|
125
|
+
rows += `<line x1="${f(-w * 0.7)}" y1="${f(y)}" x2="${f(w * 0.7)}" y2="${f(y)}"/>`;
|
|
126
|
+
return `<g ${cls}><rect x="${f(-w)}" y="${f(-h)}" width="${f(2 * w)}" height="${f(2 * h)}" rx="1"/>${rows}</g>`;
|
|
127
|
+
}
|
|
128
|
+
if (kind === "link") {
|
|
129
|
+
return `<g ${cls}><path d="M${f(-s)},${f(-s * 0.45)} L${f(s * 0.3)},${f(-s * 0.45)} L${f(s * 0.3)},${f(-s)} L${f(s)},0 L${f(s * 0.3)},${f(s)} L${f(s * 0.3)},${f(s * 0.45)} L${f(-s)},${f(s * 0.45)} Z"/></g>`;
|
|
130
|
+
}
|
|
131
|
+
if (kind === "compensation") {
|
|
132
|
+
return `<g ${fillcls}><path d="M0,${f(-s)} L${f(-s)},0 L0,${f(s)} Z"/><path d="M${f(s)},${f(-s)} L0,0 L${f(s)},${f(s)} Z"/></g>`;
|
|
133
|
+
}
|
|
134
|
+
return "";
|
|
135
|
+
}
|
|
136
|
+
// ── task-type marker (top-left ~16px) ───────────────────────────────────────
|
|
137
|
+
function taskMarker(kind, x, y) {
|
|
138
|
+
if (kind === "" || kind === "none" || kind === "task")
|
|
139
|
+
return "";
|
|
140
|
+
const g = `<g class="bpmn-marker" transform="translate(${f(x + 4)}, ${f(y + 4)})">`;
|
|
141
|
+
const e = "</g>";
|
|
142
|
+
if (kind === "user")
|
|
143
|
+
return g + '<circle cx="7" cy="4.5" r="3"/><path d="M1.5,14 C1.5,9.5 12.5,9.5 12.5,14"/>' + e;
|
|
144
|
+
if (kind === "service")
|
|
145
|
+
return g
|
|
146
|
+
+ '<path d="M7,1 L9,2 L11,1.5 L12,3.5 L13.5,5 L13,7 L13.5,9 L12,10.5 L11,12.5 L9,12 L7,13 L5,12 L3,12.5 L2,10.5 L0.5,9 L1,7 L0.5,5 L2,3.5 L3,1.5 L5,2 Z"/><circle cx="7" cy="7" r="2.6"/>' + e;
|
|
147
|
+
if (kind === "script")
|
|
148
|
+
return g
|
|
149
|
+
+ '<path d="M3,1 C1,1 1,4 3,4 L11,4 C13,4 13,1 11,1 Z"/><line x1="3.5" y1="7" x2="10" y2="7"/><line x1="3.5" y1="10" x2="10" y2="10"/><line x1="3.5" y1="13" x2="8" y2="13"/>' + e;
|
|
150
|
+
if (kind === "send")
|
|
151
|
+
return g.replace('class="bpmn-marker"', 'class="bpmn-marker--fill"')
|
|
152
|
+
+ '<path d="M0,1 L14,1 L14,11 L0,11 Z"/><path d="M0,1 L7,7 L14,1" fill="none" stroke="#ffffff" stroke-width="1"/>' + e;
|
|
153
|
+
if (kind === "receive")
|
|
154
|
+
return g + '<rect x="0.5" y="1.5" width="13" height="10" rx="0.5"/><path d="M0.5,1.5 L7,7 L13.5,1.5"/>' + e;
|
|
155
|
+
if (kind === "manual")
|
|
156
|
+
return g
|
|
157
|
+
+ '<path d="M3,7 L3,4.2 M5.5,7 L5.5,3 M8,7 L8,3 M10.5,7 L10.5,4.2"/><path d="M3,7 L3,10 C3,13.5 11,13.5 11,10 L11,6"/><path d="M3,8 L1.3,9.6"/>' + e;
|
|
158
|
+
if (kind === "rule" || kind === "businessrule")
|
|
159
|
+
return g
|
|
160
|
+
+ '<rect x="0.5" y="1.5" width="13" height="11" rx="0.5"/><line x1="0.5" y1="4.5" x2="13.5" y2="4.5"/><line x1="4" y1="1.5" x2="4" y2="12.5"/>' + e;
|
|
161
|
+
return "";
|
|
162
|
+
}
|
|
163
|
+
// ── gateway-type marker (centred on cx,cy) ──────────────────────────────────
|
|
164
|
+
function gatewayMarker(kind, cx, cy, s) {
|
|
165
|
+
const cls = 'class="bpmn-marker" stroke-width="2.4"';
|
|
166
|
+
if (kind === "" || kind === "none")
|
|
167
|
+
return ""; // plain diamond
|
|
168
|
+
if (kind === "exclusive") {
|
|
169
|
+
return `<g ${cls}><line x1="${f(cx - s)}" y1="${f(cy - s)}" x2="${f(cx + s)}" y2="${f(cy + s)}"/>`
|
|
170
|
+
+ `<line x1="${f(cx + s)}" y1="${f(cy - s)}" x2="${f(cx - s)}" y2="${f(cy + s)}"/></g>`;
|
|
171
|
+
}
|
|
172
|
+
if (kind === "parallel") {
|
|
173
|
+
return `<g ${cls}><line x1="${f(cx)}" y1="${f(cy - s)}" x2="${f(cx)}" y2="${f(cy + s)}"/>`
|
|
174
|
+
+ `<line x1="${f(cx - s)}" y1="${f(cy)}" x2="${f(cx + s)}" y2="${f(cy)}"/></g>`;
|
|
175
|
+
}
|
|
176
|
+
if (kind === "inclusive")
|
|
177
|
+
return `<circle class="bpmn-marker" stroke-width="2.4" cx="${f(cx)}" cy="${f(cy)}" r="${f(s * 0.85)}"/>`;
|
|
178
|
+
if (kind === "complex") {
|
|
179
|
+
const d = s * 0.72;
|
|
180
|
+
return `<g ${cls}><line x1="${f(cx)}" y1="${f(cy - s)}" x2="${f(cx)}" y2="${f(cy + s)}"/>`
|
|
181
|
+
+ `<line x1="${f(cx - s)}" y1="${f(cy)}" x2="${f(cx + s)}" y2="${f(cy)}"/>`
|
|
182
|
+
+ `<line x1="${f(cx - d)}" y1="${f(cy - d)}" x2="${f(cx + d)}" y2="${f(cy + d)}"/>`
|
|
183
|
+
+ `<line x1="${f(cx + d)}" y1="${f(cy - d)}" x2="${f(cx - d)}" y2="${f(cy + d)}"/></g>`;
|
|
184
|
+
}
|
|
185
|
+
if (kind === "event" || kind === "eventbased") {
|
|
186
|
+
let pent = "";
|
|
187
|
+
for (let i = 0; i < 5; i++)
|
|
188
|
+
pent += `${f(cx + s * 0.6 * sin(72 * i))},${f(cy - s * 0.6 * cos(72 * i))} `;
|
|
189
|
+
return `<g class="bpmn-marker"><circle cx="${f(cx)}" cy="${f(cy)}" r="${f(s)}"/><circle cx="${f(cx)}" cy="${f(cy)}" r="${f(s * 0.78)}"/><polygon points="${pent.trim()}"/></g>`;
|
|
190
|
+
}
|
|
191
|
+
return "";
|
|
192
|
+
}
|
|
193
|
+
// ── component dispatch ──────────────────────────────────────────────────────
|
|
194
|
+
export function renderBpmnComponent(c) {
|
|
195
|
+
const [cx, cy] = c.pos;
|
|
196
|
+
const [hw, hh] = componentHalf(c);
|
|
197
|
+
const marker = c.icon || "";
|
|
198
|
+
switch (c.shape) {
|
|
199
|
+
case "bpmn-start":
|
|
200
|
+
case "bpmn-end":
|
|
201
|
+
case "bpmn-intermediate":
|
|
202
|
+
case "bpmn-boundary":
|
|
203
|
+
return renderEvent(c, cx, cy, Math.min(hw, hh), c.shape, marker);
|
|
204
|
+
case "bpmn-task": return renderTask(c, cx, cy, hw, hh, marker, false);
|
|
205
|
+
case "bpmn-subprocess": return renderTask(c, cx, cy, hw, hh, marker, true);
|
|
206
|
+
case "bpmn-gateway": return renderGateway(c, cx, cy, hw, hh, marker);
|
|
207
|
+
case "bpmn-data-object": return renderDataObject(c, cx, cy, hw, hh);
|
|
208
|
+
case "bpmn-data-store": return renderDataStore(c, cx, cy, hw, hh);
|
|
209
|
+
case "bpmn-annotation": return renderAnnotation(c, cx, cy, hw, hh);
|
|
210
|
+
default: return "";
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
function renderEvent(c, cx, cy, r, shape, marker) {
|
|
214
|
+
let rings;
|
|
215
|
+
if (shape === "bpmn-start")
|
|
216
|
+
rings = `<circle class="bpmn-event bpmn-event--start" cx="${f(cx)}" cy="${f(cy)}" r="${f(r)}"/>`;
|
|
217
|
+
else if (shape === "bpmn-end")
|
|
218
|
+
rings = `<circle class="bpmn-event bpmn-event--end" cx="${f(cx)}" cy="${f(cy)}" r="${f(r)}"/>`;
|
|
219
|
+
else
|
|
220
|
+
rings = `<circle class="bpmn-event bpmn-event--ring" cx="${f(cx)}" cy="${f(cy)}" r="${f(r)}"/>`
|
|
221
|
+
+ `<circle class="bpmn-event bpmn-event--ring" cx="${f(cx)}" cy="${f(cy)}" r="${f(r - 3.2)}"/>`;
|
|
222
|
+
const glyph = eventMarker(marker, r * 0.42, INK);
|
|
223
|
+
const glyphG = glyph ? `<g transform="translate(${f(cx)}, ${f(cy)})">${glyph}</g>` : "";
|
|
224
|
+
let label = "";
|
|
225
|
+
if (c.name)
|
|
226
|
+
label = centeredLines(wrap(c.name, Math.max(70, 2 * r + 40), 11.5, 2), cx, cy + r + 13, 11.5, "bpmn-label--out");
|
|
227
|
+
return `${rings}${glyphG}${label}`;
|
|
228
|
+
}
|
|
229
|
+
function renderTask(c, cx, cy, hw, hh, marker, collapsed) {
|
|
230
|
+
const x = cx - hw, y = cy - hh, w = 2 * hw, h = 2 * hh;
|
|
231
|
+
const box = `<rect class="bpmn-task" x="${f(x)}" y="${f(y)}" width="${f(w)}" height="${f(h)}" rx="9"/>`;
|
|
232
|
+
const mk = taskMarker(marker, x, y);
|
|
233
|
+
const label = centeredLines(wrap(c.name, w - 12, 12.5, 4), cx, cy + (mk ? 4 : 0), 12.5, "bpmn-label");
|
|
234
|
+
let plus = "";
|
|
235
|
+
if (collapsed) {
|
|
236
|
+
const bx = cx - 6, by = y + h - 14;
|
|
237
|
+
plus = `<g class="bpmn-marker"><rect x="${f(bx)}" y="${f(by)}" width="12" height="12" rx="1"/>`
|
|
238
|
+
+ `<line x1="${f(bx + 6)}" y1="${f(by + 2.5)}" x2="${f(bx + 6)}" y2="${f(by + 9.5)}"/>`
|
|
239
|
+
+ `<line x1="${f(bx + 2.5)}" y1="${f(by + 6)}" x2="${f(bx + 9.5)}" y2="${f(by + 6)}"/></g>`;
|
|
240
|
+
}
|
|
241
|
+
return `${box}${mk}${label}${plus}`;
|
|
242
|
+
}
|
|
243
|
+
function renderGateway(c, cx, cy, hw, hh, marker) {
|
|
244
|
+
const pts = `${f(cx)},${f(cy - hh)} ${f(cx + hw)},${f(cy)} ${f(cx)},${f(cy + hh)} ${f(cx - hw)},${f(cy)}`;
|
|
245
|
+
const diamond = `<polygon class="bpmn-gateway" points="${pts}"/>`;
|
|
246
|
+
const mk = gatewayMarker(marker, cx, cy, Math.min(hw, hh) * 0.42);
|
|
247
|
+
let label = "";
|
|
248
|
+
if (c.name)
|
|
249
|
+
label = centeredLines(wrap(c.name, Math.max(90, 2 * hw + 60), 11.5, 2), cx, cy + hh + 13, 11.5, "bpmn-label--out");
|
|
250
|
+
return `${diamond}${mk}${label}`;
|
|
251
|
+
}
|
|
252
|
+
function renderDataObject(c, cx, cy, hw, hh) {
|
|
253
|
+
const x = cx - hw, y = cy - hh, w = 2 * hw, h = 2 * hh;
|
|
254
|
+
const fold = Math.min(w, h) * 0.32;
|
|
255
|
+
const page = `<path class="bpmn-data" d="M${f(x)},${f(y)} L${f(x + w - fold)},${f(y)} L${f(x + w)},${f(y + fold)} L${f(x + w)},${f(y + h)} L${f(x)},${f(y + h)} Z"/>`
|
|
256
|
+
+ `<path class="bpmn-data" d="M${f(x + w - fold)},${f(y)} L${f(x + w - fold)},${f(y + fold)} L${f(x + w)},${f(y + fold)}"/>`;
|
|
257
|
+
let label = "";
|
|
258
|
+
if (c.name)
|
|
259
|
+
label = centeredLines(wrap(c.name, Math.max(90, w + 50), 11.5, 2), cx, cy + hh + 13, 11.5, "bpmn-label--out");
|
|
260
|
+
return `${page}${label}`;
|
|
261
|
+
}
|
|
262
|
+
function renderDataStore(c, cx, cy, hw, hh) {
|
|
263
|
+
const x = cx - hw, w = 2 * hw;
|
|
264
|
+
const top = cy - hh, bot = cy + hh;
|
|
265
|
+
const ry = Math.min(hh * 0.45, hw * 0.4);
|
|
266
|
+
const body = `<path class="bpmn-data" d="M${f(x)},${f(top + ry)} A${f(hw)},${f(ry)} 0 0 0 ${f(x + w)},${f(top + ry)} L${f(x + w)},${f(bot - ry)} A${f(hw)},${f(ry)} 0 0 1 ${f(x)},${f(bot - ry)} Z"/>`
|
|
267
|
+
+ `<path class="bpmn-data" fill="none" d="M${f(x)},${f(top + ry)} A${f(hw)},${f(ry)} 0 0 0 ${f(x + w)},${f(top + ry)}"/>`;
|
|
268
|
+
let label = "";
|
|
269
|
+
if (c.name)
|
|
270
|
+
label = centeredLines(wrap(c.name, Math.max(90, w + 50), 11.5, 2), cx, cy + hh + 13, 11.5, "bpmn-label--out");
|
|
271
|
+
return `${body}${label}`;
|
|
272
|
+
}
|
|
273
|
+
function renderAnnotation(c, cx, cy, hw, hh) {
|
|
274
|
+
const x = cx - hw, y = cy - hh, h = 2 * hh;
|
|
275
|
+
const tick = Math.min(8, hw * 0.5);
|
|
276
|
+
const bracket = `<path class="bpmn-marker" stroke="#6b7280" d="M${f(x + tick)},${f(y)} L${f(x)},${f(y)} L${f(x)},${f(y + h)} L${f(x + tick)},${f(y + h)}"/>`;
|
|
277
|
+
const lines = wrap(c.name, 2 * hw - tick - 6, 12, 4);
|
|
278
|
+
const lh = 14.5;
|
|
279
|
+
const text = lines.map((ln, i) => `<text class="bpmn-anno-text" x="${f(x + tick + 5)}" y="${f(y + 12 + i * lh)}">${esc(ln)}</text>`).join("");
|
|
280
|
+
return bracket + text;
|
|
281
|
+
}
|
|
282
|
+
// ── pool / lane regions ─────────────────────────────────────────────────────
|
|
283
|
+
export function bpmnRegionRect(r) {
|
|
284
|
+
const [x, y, w, h] = r.bounds;
|
|
285
|
+
if (r.style === "pool" || r.style === "lane") {
|
|
286
|
+
const band = 30;
|
|
287
|
+
const rectCls = r.style === "pool" ? "region-rect region-rect--pool" : "region-rect region-rect--lane";
|
|
288
|
+
const bandCls = r.style === "pool" ? "bpmn-pool-band" : "bpmn-lane-band";
|
|
289
|
+
const sep = r.label ? `<line class="${bandCls}" x1="${x + band}" y1="${y}" x2="${x + band}" y2="${y + h}"/>` : "";
|
|
290
|
+
return `<rect class="${rectCls}" x="${x}" y="${y}" width="${w}" height="${h}"/>${sep}`;
|
|
291
|
+
}
|
|
292
|
+
const cls = r.style === "inner" ? "region-rect region-rect--inner" : "region-rect";
|
|
293
|
+
return `<rect class="${cls}" x="${x}" y="${y}" width="${w}" height="${h}" rx="8"/>`;
|
|
294
|
+
}
|
|
295
|
+
export function bpmnRegionLabel(r) {
|
|
296
|
+
if (!r.label)
|
|
297
|
+
return "";
|
|
298
|
+
const [x, y, w, h] = r.bounds;
|
|
299
|
+
if (r.style === "pool" || r.style === "lane") {
|
|
300
|
+
const tx = x + 15, ty = y + (h / 2) | 0;
|
|
301
|
+
return `<text class="bpmn-pool-label" x="${tx}" y="${ty}" text-anchor="middle" transform="rotate(-90 ${tx} ${ty})">${esc(r.label)}</text>`;
|
|
302
|
+
}
|
|
303
|
+
return `<text class="region-label--inner" x="${x + 12}" y="${y + 16}">${esc(r.label)}</text>`;
|
|
304
|
+
}
|
|
305
|
+
// ── flows (explicit waypoints) ──────────────────────────────────────────────
|
|
306
|
+
const unit = (a, b) => {
|
|
307
|
+
const dx = b[0] - a[0], dy = b[1] - a[1];
|
|
308
|
+
const n = Math.hypot(dx, dy) || 1;
|
|
309
|
+
return [dx / n, dy / n];
|
|
310
|
+
};
|
|
311
|
+
export function renderBpmnEdge(e) {
|
|
312
|
+
const pts = e.points ?? [];
|
|
313
|
+
if (pts.length < 2)
|
|
314
|
+
return "";
|
|
315
|
+
const path = "M " + pts.map(([x, y]) => `${x},${y}`).join(" L ");
|
|
316
|
+
const flow = e.bpmnFlow || "sequence";
|
|
317
|
+
let cls = "bpmn-flow", markers = ' marker-end="url(#bpmn-seq-end)"';
|
|
318
|
+
if (flow === "message") {
|
|
319
|
+
cls = "bpmn-flow bpmn-flow--message";
|
|
320
|
+
markers = ' marker-start="url(#bpmn-msg-start)" marker-end="url(#bpmn-msg-end)"';
|
|
321
|
+
}
|
|
322
|
+
else if (flow === "association") {
|
|
323
|
+
cls = "bpmn-flow bpmn-flow--assoc";
|
|
324
|
+
markers = "";
|
|
325
|
+
}
|
|
326
|
+
let deco = "";
|
|
327
|
+
const [p0, p1] = [pts[0], pts[1]];
|
|
328
|
+
const [ux, uy] = unit(p0, p1);
|
|
329
|
+
const px = -uy, py = ux;
|
|
330
|
+
if (flow === "default") {
|
|
331
|
+
const mx = p0[0] + ux * 14, my = p0[1] + uy * 14;
|
|
332
|
+
deco = `<line class="bpmn-flow" x1="${f(mx - ux * 5 - px * 5)}" y1="${f(my - uy * 5 - py * 5)}" x2="${f(mx + ux * 5 + px * 5)}" y2="${f(my + uy * 5 + py * 5)}"/>`;
|
|
333
|
+
}
|
|
334
|
+
else if (flow === "conditional") {
|
|
335
|
+
const cxp = p0[0] + ux * 11, cyp = p0[1] + uy * 11;
|
|
336
|
+
const dpts = `${f(cxp + ux * 8)},${f(cyp + uy * 8)} ${f(cxp + px * 5)},${f(cyp + py * 5)} ${f(cxp - ux * 8)},${f(cyp - uy * 8)} ${f(cxp - px * 5)},${f(cyp - py * 5)}`;
|
|
337
|
+
deco = `<polygon points="${dpts}" fill="#ffffff" stroke="#374151" stroke-width="1.4"/>`;
|
|
338
|
+
}
|
|
339
|
+
let label = "";
|
|
340
|
+
if (e.label && e.labelPos)
|
|
341
|
+
label = `<text class="bpmn-flow-label" x="${e.labelPos[0]}" y="${e.labelPos[1]}">${esc(e.label)}</text>`;
|
|
342
|
+
return `<path class="${cls}" d="${path}"${markers}/>${deco}${label}`;
|
|
343
|
+
}
|
|
344
|
+
//# sourceMappingURL=bpmn-shapes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bpmn-shapes.js","sourceRoot":"","sources":["../src/bpmn-shapes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,aAAa,EAAsD,MAAM,YAAY,CAAC;AAE/F,MAAM,GAAG,GAAG,SAAS,CAAC,CAAG,0CAA0C;AAEnE,MAAM,GAAG,GAAG,CAAC,CAAS,EAAU,EAAE,CAChC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,CAAY,CAAA,CAAC,CAAC;AAExF,uEAAuE;AACvE,MAAM,CAAC,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;AACxE,MAAM,GAAG,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AACrE,MAAM,GAAG,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AAErE,2EAA2E;AAC3E,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;cASX,CAAC;AAEf,6EAA6E;AAC7E,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;+EAwBqD,CAAC;AAEhF,6EAA6E;AAC7E,SAAS,IAAI,CAAC,IAAY,EAAE,OAAe,EAAE,MAAc,EAAE,QAAgB;IAC3E,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrD,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ,IAAI,CAAC,GAAG;YAAE,GAAG,GAAG,IAAI,CAAC;aAC3C,CAAC;YAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAAC,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;QAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAAC,SAAS,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC;YAAC,MAAM;QAAC,CAAC;IACvG,CAAC;IACD,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpD,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC9B,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,GAAG,CAAC;YAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAC7E,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,KAAe,EAAE,EAAU,EAAE,EAAU,EAAE,MAAc,EAAE,GAAG,GAAG,YAAY;IAChG,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAC7B,MAAM,EAAE,GAAG,MAAM,GAAG,GAAG,CAAC;IACxB,MAAM,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;IAC/D,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,gBAAgB,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrH,CAAC;AAED,+EAA+E;AAC/E,SAAS,WAAW,CAAC,IAAY,EAAE,CAAS,EAAE,KAAa;IACzD,MAAM,GAAG,GAAG,+BAA+B,KAAK,GAAG,CAAC;IACpD,MAAM,OAAO,GAAG,mCAAmC,KAAK,GAAG,CAAC;IAC5D,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IAC9C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QAChC,OAAO,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,YAAY;cAChG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACnB,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YACjC,KAAK,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACzI,CAAC;QACD,OAAO,MAAM,GAAG,6BAA6B,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC;IACtI,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvI,CAAC;IACD,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,OAAO,MAAM,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC;IACpI,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC;IAClG,CAAC;IACD,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,MAAM,OAAO,6BAA6B,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;IAChG,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAC/B,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;YAAE,IAAI,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/I,OAAO,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,IAAI,MAAM,CAAC;IAClH,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;IACjN,CAAC;IACD,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QAC5B,OAAO,MAAM,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IACnI,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,+EAA+E;AAC/E,SAAS,UAAU,CAAC,IAAY,EAAE,CAAS,EAAE,CAAS;IACpD,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IACjE,MAAM,CAAC,GAAG,+CAA+C,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IACpF,MAAM,CAAC,GAAG,MAAM,CAAC;IACjB,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,CAAC,GAAG,8EAA8E,GAAG,CAAC,CAAC;IACnH,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC;cAC5B,wLAAwL,GAAG,CAAC,CAAC;IACjM,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC;cAC3B,4KAA4K,GAAG,CAAC,CAAC;IACrL,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;cACrF,gHAAgH,GAAG,CAAC,CAAC;IACzH,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,GAAG,4FAA4F,GAAG,CAAC,CAAC;IACpI,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC;cAC3B,8IAA8I,GAAG,CAAC,CAAC;IACvJ,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,cAAc;QAAE,OAAO,CAAC;cACpD,6IAA6I,GAAG,CAAC,CAAC;IACtJ,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,+EAA+E;AAC/E,SAAS,aAAa,CAAC,IAAY,EAAE,EAAU,EAAE,EAAU,EAAE,CAAS;IACpE,MAAM,GAAG,GAAG,wCAAwC,CAAC;IACrD,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC,CAAQ,gBAAgB;IACtE,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACzB,OAAO,MAAM,GAAG,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK;cAC9F,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC;IAC5F,CAAC;IACD,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,OAAO,MAAM,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK;cACtF,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;IACpF,CAAC;IACD,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,sDAAsD,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;IACnI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACnB,OAAO,MAAM,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK;cACtF,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK;cACzE,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK;cACjF,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC;IAC5F,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC9C,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACzG,OAAO,sCAAsC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,uBAAuB,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;IAClL,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,mBAAmB,CAAC,CAAY;IAC9C,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;IACvB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IAC5B,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;QAChB,KAAK,YAAY,CAAC;QAAC,KAAK,UAAU,CAAC;QAAC,KAAK,mBAAmB,CAAC;QAAC,KAAK,eAAe;YAChF,OAAO,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACnE,KAAK,WAAW,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACtE,KAAK,iBAAiB,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3E,KAAK,cAAc,CAAC,CAAC,OAAO,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QACrE,KAAK,kBAAkB,CAAC,CAAC,OAAO,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACpE,KAAK,iBAAiB,CAAC,CAAC,OAAO,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAClE,KAAK,iBAAiB,CAAC,CAAC,OAAO,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,CAAY,EAAE,EAAU,EAAE,EAAU,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc;IACjG,IAAI,KAAa,CAAC;IAClB,IAAI,KAAK,KAAK,YAAY;QAAE,KAAK,GAAG,oDAAoD,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;SACxH,IAAI,KAAK,KAAK,UAAU;QAAE,KAAK,GAAG,kDAAkD,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;;QACzH,KAAK,GAAG,mDAAmD,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK;cAChG,mDAAmD,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;IAClG,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACxF,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,CAAC,CAAC,IAAI;QAAE,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;IAC7H,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,EAAE,CAAC;AACrC,CAAC;AAED,SAAS,UAAU,CAAC,CAAY,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,MAAc,EAAE,SAAkB;IAClH,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IACvD,MAAM,GAAG,GAAG,8BAA8B,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IACxG,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IACtG,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACnC,IAAI,GAAG,mCAAmC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,mCAAmC;cAC3F,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK;cACrF,aAAa,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC;IAChG,CAAC;IACD,OAAO,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,GAAG,IAAI,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,aAAa,CAAC,CAAY,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,MAAc;IACjG,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC1G,MAAM,OAAO,GAAG,yCAAyC,GAAG,KAAK,CAAC;IAClE,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IAClE,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,CAAC,CAAC,IAAI;QAAE,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;IAC/H,OAAO,GAAG,OAAO,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAY,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;IACpF,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IACvD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IACnC,MAAM,IAAI,GAAG,+BAA+B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO;UACjK,+BAA+B,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;IAC/H,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,CAAC,CAAC,IAAI;QAAE,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;IAC1H,OAAO,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,eAAe,CAAC,CAAY,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;IACnF,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;IACnC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,+BAA+B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,OAAO;UAClM,2CAA2C,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC;IAC5H,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,CAAC,CAAC,IAAI;QAAE,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;IAC1H,OAAO,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAY,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;IACpF,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,kDAAkD,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IAC7J,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,IAAI,CAAC;IAChB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,mCAAmC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9I,OAAO,OAAO,GAAG,IAAI,CAAC;AACxB,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,cAAc,CAAC,CAAS;IACtC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,+BAA+B,CAAC;QACvG,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC;QACzE,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,OAAO,SAAS,CAAC,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAClH,OAAO,gBAAgB,OAAO,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,GAAG,EAAE,CAAC;IACzF,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,aAAa,CAAC;IACnF,OAAO,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,CAAC,YAAY,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,CAAS;IACvC,IAAI,CAAC,CAAC,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;QAC7C,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,oCAAoC,EAAE,QAAQ,EAAE,gDAAgD,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;IAC7I,CAAC;IACD,OAAO,wCAAwC,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;AAChG,CAAC;AAED,+EAA+E;AAC/E,MAAM,IAAI,GAAG,CAAC,CAAQ,EAAE,CAAQ,EAAS,EAAE;IACzC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,CAAO;IACpC,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;IAC3B,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,IAAI,UAAU,CAAC;IACtC,IAAI,GAAG,GAAG,WAAW,EAAE,OAAO,GAAG,kCAAkC,CAAC;IACpE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAAC,GAAG,GAAG,8BAA8B,CAAC;QAAC,OAAO,GAAG,sEAAsE,CAAC;IAAC,CAAC;SAC9I,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QAAC,GAAG,GAAG,4BAA4B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;IAAC,CAAC;IAEtF,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9B,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;IACxB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;QACjD,IAAI,GAAG,+BAA+B,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC;IACrK,CAAC;SAAM,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;QACvK,IAAI,GAAG,oBAAoB,IAAI,wDAAwD,CAAC;IAC1F,CAAC;IACD,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ;QAAE,KAAK,GAAG,oCAAoC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;IACpI,OAAO,gBAAgB,GAAG,QAAQ,IAAI,IAAI,OAAO,KAAK,IAAI,GAAG,KAAK,EAAE,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BPMN 2.0 XML importer — turns a standard `.bpmn` file (Camunda Modeler,
|
|
3
|
+
* bpmn.io, Signavio, …) into a fully-resolved {@link Diagram} that
|
|
4
|
+
* {@link renderSVG} can draw. Geometry comes from the file's Diagram-
|
|
5
|
+
* Interchange section (`BPMNShape`/`dc:Bounds`, `BPMNEdge`/`di:waypoint`),
|
|
6
|
+
* so no layout pass is needed.
|
|
7
|
+
*
|
|
8
|
+
* Equivalent to the Python `from_bpmn.py`; element types map to `bpmn-*`
|
|
9
|
+
* shapes (drawn by `bpmn-shapes.ts`) or, for pools / lanes / expanded
|
|
10
|
+
* sub-processes, to regions.
|
|
11
|
+
*/
|
|
12
|
+
import { type Diagram } from "./model.js";
|
|
13
|
+
/** Parse BPMN 2.0 XML into a resolved Diagram. */
|
|
14
|
+
export declare function parseBpmn(xmlText: string): Diagram;
|
|
15
|
+
//# sourceMappingURL=from-bpmn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"from-bpmn.d.ts","sourceRoot":"","sources":["../src/from-bpmn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAEW,KAAK,OAAO,EAC7B,MAAM,YAAY,CAAC;AA6GpB,kDAAkD;AAClD,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAyFlD"}
|