kymostudio 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.
- 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 +27 -9
- package/src/js/icons-loader.js +0 -91
- package/src/js/index.js +0 -13
- package/src/js/model.js +0 -176
package/dist/model.d.ts
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data model for the container diagram — JS mirror of
|
|
3
|
+
* `packages/python/src/kymo/model.py`.
|
|
4
|
+
*
|
|
5
|
+
* Components, regions and edges are plain object literals (no classes).
|
|
6
|
+
* `anchor(node, side)` and `resolveAnchors(edge, src, dst)` mimic the
|
|
7
|
+
* Python implementations 1:1.
|
|
8
|
+
*/
|
|
9
|
+
export type Point = [number, number];
|
|
10
|
+
export type Shape = "circle" | "cube" | "cube-big" | "box" | "cylinder" | "hex" | "annotation" | "aws-tile" | "aws-tile-hero" | "badge" | "image" | "bpmn-start" | "bpmn-end" | "bpmn-intermediate" | "bpmn-boundary" | "bpmn-task" | "bpmn-subprocess" | "bpmn-gateway" | "bpmn-data-object" | "bpmn-data-store" | "bpmn-annotation";
|
|
11
|
+
export type Side = "top" | "right" | "bottom" | "left" | "center";
|
|
12
|
+
export declare const SHAPE_HALF: Record<Shape, Point>;
|
|
13
|
+
export declare const LABEL_HEIGHT: Record<Shape, number>;
|
|
14
|
+
export interface Component {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
subtitle: string;
|
|
18
|
+
icon: string;
|
|
19
|
+
shape: Shape;
|
|
20
|
+
accent: string;
|
|
21
|
+
pos: Point;
|
|
22
|
+
/** Explicit (width, height) box overriding SHAPE_HALF — set by the BPMN
|
|
23
|
+
* importer from each element's Diagram-Interchange bounds. */
|
|
24
|
+
size: Point | null;
|
|
25
|
+
parent: string | null;
|
|
26
|
+
align: string | null;
|
|
27
|
+
alignGap: number;
|
|
28
|
+
alignOffset: Point;
|
|
29
|
+
}
|
|
30
|
+
export type RegionStyle = "outer" | "inner" | "pool" | "lane" | string;
|
|
31
|
+
export interface Region {
|
|
32
|
+
id: string;
|
|
33
|
+
label: string;
|
|
34
|
+
bounds: [number, number, number, number];
|
|
35
|
+
contains: string[];
|
|
36
|
+
padding: [number, number];
|
|
37
|
+
paddingBottom: number | null;
|
|
38
|
+
style: RegionStyle;
|
|
39
|
+
icon: string | null;
|
|
40
|
+
layout: unknown;
|
|
41
|
+
pos: Point | null;
|
|
42
|
+
gap: number;
|
|
43
|
+
align: string;
|
|
44
|
+
visible: boolean;
|
|
45
|
+
borderDash: string | null;
|
|
46
|
+
borderStroke: string | null;
|
|
47
|
+
labelAnchor: string;
|
|
48
|
+
labelPosition: string | null;
|
|
49
|
+
}
|
|
50
|
+
export interface Edge {
|
|
51
|
+
src: string;
|
|
52
|
+
dst: string;
|
|
53
|
+
label: string;
|
|
54
|
+
style: string;
|
|
55
|
+
srcAnchor: Side | null;
|
|
56
|
+
dstAnchor: Side | null;
|
|
57
|
+
route: string;
|
|
58
|
+
via: Point[];
|
|
59
|
+
srcOffset: Point;
|
|
60
|
+
dstOffset: Point;
|
|
61
|
+
labelOffset: Point;
|
|
62
|
+
labelAnchor: string;
|
|
63
|
+
labelSmall: boolean;
|
|
64
|
+
labelPos: Point | null;
|
|
65
|
+
dashed: boolean;
|
|
66
|
+
noArrow: boolean;
|
|
67
|
+
trunkOffset: number;
|
|
68
|
+
sharedPort: boolean;
|
|
69
|
+
/** BPMN flow: explicit polyline (the file's DI waypoints) drawn as-is,
|
|
70
|
+
* bypassing anchor resolution. `bpmnFlow` selects the marker/dash
|
|
71
|
+
* convention: sequence | default | conditional | message | association. */
|
|
72
|
+
points: Point[] | null;
|
|
73
|
+
bpmnFlow: string | null;
|
|
74
|
+
}
|
|
75
|
+
export interface Diagram {
|
|
76
|
+
width: number;
|
|
77
|
+
height: number;
|
|
78
|
+
title: string;
|
|
79
|
+
subtitle: string;
|
|
80
|
+
components: Component[];
|
|
81
|
+
regions: Region[];
|
|
82
|
+
edges: Edge[];
|
|
83
|
+
layoutTrees: unknown[];
|
|
84
|
+
}
|
|
85
|
+
export declare function makeComponent({ id, name, subtitle, icon, shape, accent, pos, size, parent, align, alignGap, alignOffset, }: {
|
|
86
|
+
id: string;
|
|
87
|
+
name?: string;
|
|
88
|
+
subtitle?: string;
|
|
89
|
+
icon?: string;
|
|
90
|
+
shape?: Shape;
|
|
91
|
+
accent?: string;
|
|
92
|
+
pos?: Point;
|
|
93
|
+
size?: Point | null;
|
|
94
|
+
parent?: string | null;
|
|
95
|
+
align?: string | null;
|
|
96
|
+
alignGap?: number;
|
|
97
|
+
alignOffset?: Point;
|
|
98
|
+
}): Component;
|
|
99
|
+
export declare function makeRegion({ id, label, bounds, contains, padding, paddingBottom, style, icon, layout, pos, gap, align, visible, borderDash, borderStroke, labelAnchor, labelPosition, }: {
|
|
100
|
+
id: string;
|
|
101
|
+
label?: string;
|
|
102
|
+
bounds?: [number, number, number, number];
|
|
103
|
+
contains?: string[];
|
|
104
|
+
padding?: [number, number];
|
|
105
|
+
paddingBottom?: number | null;
|
|
106
|
+
style?: RegionStyle;
|
|
107
|
+
icon?: string | null;
|
|
108
|
+
layout?: unknown;
|
|
109
|
+
pos?: Point | null;
|
|
110
|
+
gap?: number;
|
|
111
|
+
align?: string;
|
|
112
|
+
visible?: boolean;
|
|
113
|
+
borderDash?: string | null;
|
|
114
|
+
borderStroke?: string | null;
|
|
115
|
+
labelAnchor?: string;
|
|
116
|
+
labelPosition?: string | null;
|
|
117
|
+
}): Region;
|
|
118
|
+
export declare function makeEdge({ src, dst, label, style, srcAnchor, dstAnchor, route, via, srcOffset, dstOffset, labelOffset, labelAnchor, labelSmall, labelPos, dashed, noArrow, trunkOffset, sharedPort, points, bpmnFlow, }: {
|
|
119
|
+
src: string;
|
|
120
|
+
dst: string;
|
|
121
|
+
label?: string;
|
|
122
|
+
style?: string;
|
|
123
|
+
srcAnchor?: Side | null;
|
|
124
|
+
dstAnchor?: Side | null;
|
|
125
|
+
route?: string;
|
|
126
|
+
via?: Point[];
|
|
127
|
+
srcOffset?: Point;
|
|
128
|
+
dstOffset?: Point;
|
|
129
|
+
labelOffset?: Point;
|
|
130
|
+
labelAnchor?: string;
|
|
131
|
+
labelSmall?: boolean;
|
|
132
|
+
labelPos?: Point | null;
|
|
133
|
+
dashed?: boolean;
|
|
134
|
+
noArrow?: boolean;
|
|
135
|
+
trunkOffset?: number;
|
|
136
|
+
sharedPort?: boolean;
|
|
137
|
+
points?: Point[] | null;
|
|
138
|
+
bpmnFlow?: string | null;
|
|
139
|
+
}): Edge;
|
|
140
|
+
export declare function makeDiagram({ width, height, title, subtitle, components, regions, edges, layoutTrees, }?: {
|
|
141
|
+
width?: number;
|
|
142
|
+
height?: number;
|
|
143
|
+
title?: string;
|
|
144
|
+
subtitle?: string;
|
|
145
|
+
components?: Component[];
|
|
146
|
+
regions?: Region[];
|
|
147
|
+
edges?: Edge[];
|
|
148
|
+
layoutTrees?: unknown[];
|
|
149
|
+
}): Diagram;
|
|
150
|
+
export declare function componentHalf(c: Component): Point;
|
|
151
|
+
export declare function regionHalf(r: Region): Point;
|
|
152
|
+
/**
|
|
153
|
+
* Edge attach point on `node` for a given side.
|
|
154
|
+
* For a Component, `bottom` pushes past `LABEL_HEIGHT` when the
|
|
155
|
+
* component actually has a name or subtitle.
|
|
156
|
+
*/
|
|
157
|
+
export declare function anchor(node: Component | Region, side: Side): Point;
|
|
158
|
+
/**
|
|
159
|
+
* Pick effective (srcAnchor, dstAnchor) for an edge. `null` slots are
|
|
160
|
+
* filled from geometry: horizontal-biased — vertical wins only when
|
|
161
|
+
* `|dy| > 2·|dx|`.
|
|
162
|
+
*/
|
|
163
|
+
export declare function resolveAnchors(e: Edge, src: Component | Region, dst: Component | Region): [Side, Side];
|
|
164
|
+
export declare function getComponent(d: Diagram, id: string): Component;
|
|
165
|
+
export declare function getNode(d: Diagram, id: string): Component | Region;
|
|
166
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|
package/dist/model.js
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data model for the container diagram — JS mirror of
|
|
3
|
+
* `packages/python/src/kymo/model.py`.
|
|
4
|
+
*
|
|
5
|
+
* Components, regions and edges are plain object literals (no classes).
|
|
6
|
+
* `anchor(node, side)` and `resolveAnchors(edge, src, dst)` mimic the
|
|
7
|
+
* Python implementations 1:1.
|
|
8
|
+
*/
|
|
9
|
+
export const SHAPE_HALF = {
|
|
10
|
+
"circle": [38, 38],
|
|
11
|
+
"cube": [40, 40],
|
|
12
|
+
"cube-big": [50, 50],
|
|
13
|
+
"box": [35, 35],
|
|
14
|
+
"cylinder": [35, 35],
|
|
15
|
+
"hex": [35, 32], // flat-top hexagon — wider than tall
|
|
16
|
+
"annotation": [0, 0],
|
|
17
|
+
"aws-tile": [32, 32],
|
|
18
|
+
"aws-tile-hero": [40, 40],
|
|
19
|
+
"badge": [14, 14],
|
|
20
|
+
"image": [32, 32],
|
|
21
|
+
// BPMN — fallbacks only; real sizes arrive via Component.size from DI.
|
|
22
|
+
"bpmn-start": [18, 18],
|
|
23
|
+
"bpmn-end": [18, 18],
|
|
24
|
+
"bpmn-intermediate": [18, 18],
|
|
25
|
+
"bpmn-boundary": [18, 18],
|
|
26
|
+
"bpmn-task": [50, 40],
|
|
27
|
+
"bpmn-subprocess": [50, 40],
|
|
28
|
+
"bpmn-gateway": [25, 25],
|
|
29
|
+
"bpmn-data-object": [18, 25],
|
|
30
|
+
"bpmn-data-store": [25, 25],
|
|
31
|
+
"bpmn-annotation": [0, 0],
|
|
32
|
+
};
|
|
33
|
+
export const LABEL_HEIGHT = {
|
|
34
|
+
"circle": 38,
|
|
35
|
+
"cube": 42,
|
|
36
|
+
"cube-big": 48,
|
|
37
|
+
"box": 38,
|
|
38
|
+
"cylinder": 38,
|
|
39
|
+
"hex": 40,
|
|
40
|
+
"annotation": 0,
|
|
41
|
+
"aws-tile": 48,
|
|
42
|
+
"aws-tile-hero": 48,
|
|
43
|
+
"badge": 0,
|
|
44
|
+
"image": 26,
|
|
45
|
+
// BPMN edges carry explicit waypoints, so no label clearance needed.
|
|
46
|
+
"bpmn-start": 0,
|
|
47
|
+
"bpmn-end": 0,
|
|
48
|
+
"bpmn-intermediate": 0,
|
|
49
|
+
"bpmn-boundary": 0,
|
|
50
|
+
"bpmn-task": 0,
|
|
51
|
+
"bpmn-subprocess": 0,
|
|
52
|
+
"bpmn-gateway": 0,
|
|
53
|
+
"bpmn-data-object": 0,
|
|
54
|
+
"bpmn-data-store": 0,
|
|
55
|
+
"bpmn-annotation": 0,
|
|
56
|
+
};
|
|
57
|
+
// ── Factories (mirror Python @dataclass with defaults) ────────────────
|
|
58
|
+
export function makeComponent({ id, name = "", subtitle = "", icon = "", shape = "box", accent = "green", pos = [0, 0], size = null, parent = null, align = null, alignGap = 24, alignOffset = [0, 0], }) {
|
|
59
|
+
return {
|
|
60
|
+
id, name, subtitle, icon, shape, accent, pos, size,
|
|
61
|
+
parent, align, alignGap, alignOffset,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export function makeRegion({ id, label = "", bounds = [0, 0, 0, 0], contains = [], padding = [24, 24], paddingBottom = null, style = "outer", icon = null, layout = null, pos = null, gap = 24, align = "center", visible = true, borderDash = null, borderStroke = null, labelAnchor = "middle", labelPosition = null, }) {
|
|
65
|
+
return {
|
|
66
|
+
id, label, bounds, contains, padding, paddingBottom, style, icon,
|
|
67
|
+
layout, pos, gap, align, visible, borderDash, borderStroke,
|
|
68
|
+
labelAnchor, labelPosition,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export function makeEdge({ src, dst, label = "", style = "gray", srcAnchor = null, dstAnchor = null, route = "auto", via = [], srcOffset = [0, 0], dstOffset = [0, 0], labelOffset = [0, 0], labelAnchor = "mid", labelSmall = false, labelPos = null, dashed = false, noArrow = false, trunkOffset = 0, sharedPort = false, points = null, bpmnFlow = null, }) {
|
|
72
|
+
return {
|
|
73
|
+
src, dst, label, style, srcAnchor, dstAnchor, route, via,
|
|
74
|
+
srcOffset, dstOffset, labelOffset, labelAnchor, labelSmall, labelPos,
|
|
75
|
+
dashed, noArrow, trunkOffset, sharedPort, points, bpmnFlow,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
export function makeDiagram({ width = 0, height = 0, title = "", subtitle = "", components = [], regions = [], edges = [], layoutTrees = [], } = {}) {
|
|
79
|
+
return { width, height, title, subtitle, components, regions, edges, layoutTrees };
|
|
80
|
+
}
|
|
81
|
+
// ── Lookups & geometry helpers ────────────────────────────────────────
|
|
82
|
+
export function componentHalf(c) {
|
|
83
|
+
if (c.size)
|
|
84
|
+
return [(c.size[0] / 2) | 0, (c.size[1] / 2) | 0];
|
|
85
|
+
return SHAPE_HALF[c.shape];
|
|
86
|
+
}
|
|
87
|
+
export function regionHalf(r) {
|
|
88
|
+
const [, , w, h] = r.bounds;
|
|
89
|
+
return [(w / 2) | 0, (h / 2) | 0];
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Edge attach point on `node` for a given side.
|
|
93
|
+
* For a Component, `bottom` pushes past `LABEL_HEIGHT` when the
|
|
94
|
+
* component actually has a name or subtitle.
|
|
95
|
+
*/
|
|
96
|
+
export function anchor(node, side) {
|
|
97
|
+
// Region path — has `bounds`, no `pos`-as-Point.
|
|
98
|
+
if ("bounds" in node) {
|
|
99
|
+
return regionAnchor(node, side);
|
|
100
|
+
}
|
|
101
|
+
return componentAnchor(node, side);
|
|
102
|
+
}
|
|
103
|
+
function componentAnchor(c, side) {
|
|
104
|
+
const [cx, cy] = c.pos;
|
|
105
|
+
const [hw, hh] = componentHalf(c);
|
|
106
|
+
const labelled = (c.name && c.name.length > 0) || (c.subtitle && c.subtitle.length > 0);
|
|
107
|
+
const lh = labelled ? (LABEL_HEIGHT[c.shape] || 0) : 0;
|
|
108
|
+
switch (side) {
|
|
109
|
+
case "top": return [cx, cy - hh];
|
|
110
|
+
case "right": return [cx + hw, cy];
|
|
111
|
+
case "bottom": return [cx, cy + hh + lh];
|
|
112
|
+
case "left": return [cx - hw, cy];
|
|
113
|
+
case "center": return [cx, cy];
|
|
114
|
+
}
|
|
115
|
+
throw new Error(`anchor: bad side ${side}`);
|
|
116
|
+
}
|
|
117
|
+
function regionAnchor(r, side) {
|
|
118
|
+
const [x, y, w, h] = r.bounds;
|
|
119
|
+
switch (side) {
|
|
120
|
+
case "top": return [x + ((w / 2) | 0), y];
|
|
121
|
+
case "right": return [x + w, y + ((h / 2) | 0)];
|
|
122
|
+
case "bottom": return [x + ((w / 2) | 0), y + h];
|
|
123
|
+
case "left": return [x, y + ((h / 2) | 0)];
|
|
124
|
+
case "center": return [x + ((w / 2) | 0), y + ((h / 2) | 0)];
|
|
125
|
+
}
|
|
126
|
+
throw new Error(`anchor: bad side ${side}`);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Pick effective (srcAnchor, dstAnchor) for an edge. `null` slots are
|
|
130
|
+
* filled from geometry: horizontal-biased — vertical wins only when
|
|
131
|
+
* `|dy| > 2·|dx|`.
|
|
132
|
+
*/
|
|
133
|
+
export function resolveAnchors(e, src, dst) {
|
|
134
|
+
const { srcAnchor: sa, dstAnchor: da } = e;
|
|
135
|
+
if (sa !== null && da !== null)
|
|
136
|
+
return [sa, da];
|
|
137
|
+
const [scx, scy] = anchor(src, "center");
|
|
138
|
+
const [dcx, dcy] = anchor(dst, "center");
|
|
139
|
+
const dx = dcx - scx, dy = dcy - scy;
|
|
140
|
+
let autoSa, autoDa;
|
|
141
|
+
if (Math.abs(dy) > 2 * Math.abs(dx)) {
|
|
142
|
+
[autoSa, autoDa] = dy >= 0 ? ["bottom", "top"] : ["top", "bottom"];
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
[autoSa, autoDa] = dx >= 0 ? ["right", "left"] : ["left", "right"];
|
|
146
|
+
}
|
|
147
|
+
return [sa ?? autoSa, da ?? autoDa];
|
|
148
|
+
}
|
|
149
|
+
// ── Diagram node lookups ──────────────────────────────────────────────
|
|
150
|
+
export function getComponent(d, id) {
|
|
151
|
+
const c = d.components.find((c) => c.id === id);
|
|
152
|
+
if (!c)
|
|
153
|
+
throw new Error(`component ${JSON.stringify(id)} not in diagram`);
|
|
154
|
+
return c;
|
|
155
|
+
}
|
|
156
|
+
export function getNode(d, id) {
|
|
157
|
+
const c = d.components.find((c) => c.id === id);
|
|
158
|
+
if (c)
|
|
159
|
+
return c;
|
|
160
|
+
const r = d.regions.find((r) => r.id === id);
|
|
161
|
+
if (r)
|
|
162
|
+
return r;
|
|
163
|
+
throw new Error(`node ${JSON.stringify(id)} not in diagram (checked components + regions)`);
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|
package/dist/render.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SVG image generator — an original TypeScript renderer.
|
|
3
|
+
*
|
|
4
|
+
* This is NOT a port of the Python `to_svg.py`; it is a small, independent
|
|
5
|
+
* renderer that turns a {@link Diagram} (whose components already carry
|
|
6
|
+
* positions) into a standalone SVG document. It draws:
|
|
7
|
+
* - a rounded background with a faint dot grid,
|
|
8
|
+
* - edges as horizontally-biased cubic Béziers with arrowheads,
|
|
9
|
+
* - each component's icon (via {@link getIcon}) plus its label,
|
|
10
|
+
* and auto-computes the canvas bounds from the component geometry.
|
|
11
|
+
*
|
|
12
|
+
* Only built-in (vector) icons render fully offline. File-backed icons
|
|
13
|
+
* require `setIconBaseURL(...)` to point at a host serving the manifest.
|
|
14
|
+
*/
|
|
15
|
+
import { type Diagram } from "./model.js";
|
|
16
|
+
export interface RenderOptions {
|
|
17
|
+
/** Outer margin around the content, in px. Default 52. */
|
|
18
|
+
padding?: number;
|
|
19
|
+
/** Background fill. Pass `null` for a transparent canvas. Default `#f8fafc`. */
|
|
20
|
+
background?: string | null;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Render `d` to a complete SVG document string. Async because icon glyphs
|
|
24
|
+
* are resolved through {@link getIcon}.
|
|
25
|
+
*/
|
|
26
|
+
export declare function renderSVG(d: Diagram, opts?: RenderOptions): Promise<string>;
|
|
27
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAEW,KAAK,OAAO,EAC7B,MAAM,YAAY,CAAC;AAOpB,MAAM,WAAW,aAAa;IAC5B,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAmDD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CA2FrF"}
|
package/dist/render.js
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SVG image generator — an original TypeScript renderer.
|
|
3
|
+
*
|
|
4
|
+
* This is NOT a port of the Python `to_svg.py`; it is a small, independent
|
|
5
|
+
* renderer that turns a {@link Diagram} (whose components already carry
|
|
6
|
+
* positions) into a standalone SVG document. It draws:
|
|
7
|
+
* - a rounded background with a faint dot grid,
|
|
8
|
+
* - edges as horizontally-biased cubic Béziers with arrowheads,
|
|
9
|
+
* - each component's icon (via {@link getIcon}) plus its label,
|
|
10
|
+
* and auto-computes the canvas bounds from the component geometry.
|
|
11
|
+
*
|
|
12
|
+
* Only built-in (vector) icons render fully offline. File-backed icons
|
|
13
|
+
* require `setIconBaseURL(...)` to point at a host serving the manifest.
|
|
14
|
+
*/
|
|
15
|
+
import { anchor, resolveAnchors, componentHalf, LABEL_HEIGHT, } from "./model.js";
|
|
16
|
+
import { getIcon } from "./icons-loader.js";
|
|
17
|
+
import { BPMN_DEFS, BPMN_STYLE, renderBpmnComponent, renderBpmnEdge, bpmnRegionRect, bpmnRegionLabel, } from "./bpmn-shapes.js";
|
|
18
|
+
function escapeXml(s) {
|
|
19
|
+
return s.replace(/[&<>"]/g, (c) => ({ "&": "&", "<": "<", ">": ">", '"': """ }[c]));
|
|
20
|
+
}
|
|
21
|
+
function half(c) {
|
|
22
|
+
return componentHalf(c) ?? [35, 35];
|
|
23
|
+
}
|
|
24
|
+
const r1 = (n) => Math.round(n * 10) / 10;
|
|
25
|
+
// Renderer-owned defs: a filled-triangle arrowhead, a soft drop shadow, and
|
|
26
|
+
// a faint dot grid. (Original to this renderer — not copied from Python.)
|
|
27
|
+
const DEFS = `
|
|
28
|
+
<marker id="arrow" viewBox="0 0 10 10" refX="8" refY="5"
|
|
29
|
+
markerWidth="7" markerHeight="7" orient="auto-start-reverse">
|
|
30
|
+
<path d="M0,0 L10,5 L0,10 z" fill="#94a3b8"/>
|
|
31
|
+
</marker>
|
|
32
|
+
<filter id="soft" x="-40%" y="-40%" width="180%" height="180%">
|
|
33
|
+
<feDropShadow dx="0" dy="2" stdDeviation="3" flood-color="#0f172a" flood-opacity="0.18"/>
|
|
34
|
+
</filter>
|
|
35
|
+
<pattern id="grid" width="28" height="28" patternUnits="userSpaceOnUse">
|
|
36
|
+
<circle cx="2" cy="2" r="1" fill="#0f172a" fill-opacity="0.05"/>
|
|
37
|
+
</pattern>`;
|
|
38
|
+
const CSS = `
|
|
39
|
+
text { font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; }
|
|
40
|
+
.title { fill: #0f172a; font-size: 17px; font-weight: 700; }
|
|
41
|
+
.label { fill: #1e293b; font-size: 13px; font-weight: 600; text-anchor: middle; }
|
|
42
|
+
.elabel { fill: #64748b; font-size: 10.5px; text-anchor: middle; }`;
|
|
43
|
+
/** Horizontally-biased cubic Bézier between two resolved anchor points. */
|
|
44
|
+
function edgePath(x1, y1, sa, x2, y2, da) {
|
|
45
|
+
const k = Math.max(40, Math.abs(x2 - x1) * 0.5);
|
|
46
|
+
const off = (s, x, y) => {
|
|
47
|
+
switch (s) {
|
|
48
|
+
case "left": return [x - k, y];
|
|
49
|
+
case "right": return [x + k, y];
|
|
50
|
+
case "top": return [x, y - k];
|
|
51
|
+
case "bottom": return [x, y + k];
|
|
52
|
+
default: return [x, y];
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
const [c1x, c1y] = off(sa, x1, y1);
|
|
56
|
+
const [c2x, c2y] = off(da, x2, y2);
|
|
57
|
+
return `M${r1(x1)},${r1(y1)} C${r1(c1x)},${r1(c1y)} ${r1(c2x)},${r1(c2y)} ${r1(x2)},${r1(y2)}`;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Render `d` to a complete SVG document string. Async because icon glyphs
|
|
61
|
+
* are resolved through {@link getIcon}.
|
|
62
|
+
*/
|
|
63
|
+
export async function renderSVG(d, opts = {}) {
|
|
64
|
+
const pad = opts.padding ?? 52;
|
|
65
|
+
const background = opts.background === undefined ? "#f8fafc" : opts.background;
|
|
66
|
+
// A BPMN diagram uses pool/lane regions, bpmn-* glyphs, and flows with
|
|
67
|
+
// explicit waypoints — inject the BPMN defs/CSS only when present so
|
|
68
|
+
// ordinary diagrams stay unchanged.
|
|
69
|
+
const hasBpmn = d.components.some((c) => c.shape.startsWith("bpmn-"))
|
|
70
|
+
|| d.edges.some((e) => e.points != null && e.points.length > 0)
|
|
71
|
+
|| d.regions.some((r) => r.style === "pool" || r.style === "lane");
|
|
72
|
+
let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
|
|
73
|
+
const grow = (x, y) => {
|
|
74
|
+
minX = Math.min(minX, x);
|
|
75
|
+
maxX = Math.max(maxX, x);
|
|
76
|
+
minY = Math.min(minY, y);
|
|
77
|
+
maxY = Math.max(maxY, y);
|
|
78
|
+
};
|
|
79
|
+
for (const c of d.components) {
|
|
80
|
+
const [hw, hh] = half(c);
|
|
81
|
+
const lh = c.size ? (c.name ? 30 : 0) : (LABEL_HEIGHT[c.shape] ?? 0);
|
|
82
|
+
grow(c.pos[0] - hw, c.pos[1] - hh);
|
|
83
|
+
grow(c.pos[0] + hw, c.pos[1] + hh + lh);
|
|
84
|
+
}
|
|
85
|
+
for (const r of d.regions) {
|
|
86
|
+
const [x, y, w, h] = r.bounds;
|
|
87
|
+
grow(x, y);
|
|
88
|
+
grow(x + w, y + h);
|
|
89
|
+
}
|
|
90
|
+
for (const e of d.edges)
|
|
91
|
+
for (const [x, y] of e.points ?? [])
|
|
92
|
+
grow(x, y);
|
|
93
|
+
if (!Number.isFinite(minX)) {
|
|
94
|
+
minX = 0;
|
|
95
|
+
minY = 0;
|
|
96
|
+
maxX = 0;
|
|
97
|
+
maxY = 0;
|
|
98
|
+
}
|
|
99
|
+
const x0 = minX - pad;
|
|
100
|
+
const y0 = minY - pad - 22; // headroom for the title
|
|
101
|
+
const w = maxX + pad - x0;
|
|
102
|
+
const h = maxY + pad - y0;
|
|
103
|
+
const byId = new Map(d.components.map((c) => [c.id, c]));
|
|
104
|
+
const edges = [];
|
|
105
|
+
for (const e of d.edges) {
|
|
106
|
+
if (e.points && e.points.length >= 2) { // BPMN flow — draw through DI waypoints
|
|
107
|
+
edges.push(renderBpmnEdge(e));
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
const s = byId.get(e.src);
|
|
111
|
+
const t = byId.get(e.dst);
|
|
112
|
+
if (!s || !t)
|
|
113
|
+
continue;
|
|
114
|
+
const [sa, da] = resolveAnchors(e, s, t);
|
|
115
|
+
const [x1, y1] = anchor(s, sa);
|
|
116
|
+
const [x2, y2] = anchor(t, da);
|
|
117
|
+
edges.push(`<path d="${edgePath(x1, y1, sa, x2, y2, da)}" fill="none" stroke="#94a3b8" stroke-width="2" marker-end="url(#arrow)"/>`);
|
|
118
|
+
if (e.label) {
|
|
119
|
+
edges.push(`<text class="elabel" x="${r1((x1 + x2) / 2)}" y="${r1((y1 + y2) / 2 - 6)}">${escapeXml(e.label)}</text>`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const nodes = [];
|
|
123
|
+
for (const c of d.components) {
|
|
124
|
+
if (c.shape.startsWith("bpmn-")) { // BPMN glyph draws its own geometry (no icon)
|
|
125
|
+
nodes.push(renderBpmnComponent(c));
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
const glyph = await getIcon(c.icon);
|
|
129
|
+
const [, hh] = half(c);
|
|
130
|
+
const parts = [`<g transform="translate(${c.pos[0]},${c.pos[1]})" filter="url(#soft)">${glyph}</g>`];
|
|
131
|
+
if (c.name)
|
|
132
|
+
parts.push(`<text class="label" x="${c.pos[0]}" y="${c.pos[1] + hh + 18}">${escapeXml(c.name)}</text>`);
|
|
133
|
+
nodes.push(parts.join(""));
|
|
134
|
+
}
|
|
135
|
+
const regionRects = d.regions.length
|
|
136
|
+
? `\n <g class="regions">\n ${d.regions.map(bpmnRegionRect).join("\n ")}\n </g>` : "";
|
|
137
|
+
const regionLabels = d.regions.length
|
|
138
|
+
? `\n <g class="region-labels">\n ${d.regions.map(bpmnRegionLabel).join("\n ")}\n </g>` : "";
|
|
139
|
+
const bg = background === null
|
|
140
|
+
? ""
|
|
141
|
+
: `<rect x="${x0}" y="${y0}" width="${w}" height="${h}" rx="14" fill="${background}"/>
|
|
142
|
+
<rect x="${x0}" y="${y0}" width="${w}" height="${h}" rx="14" fill="url(#grid)"/>`;
|
|
143
|
+
const title = d.title ? `<text class="title" x="${x0 + pad}" y="${y0 + 30}">${escapeXml(d.title)}</text>` : "";
|
|
144
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
145
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="${x0} ${y0} ${w} ${h}" width="${w}" height="${h}">
|
|
146
|
+
<defs>${DEFS}${hasBpmn ? BPMN_DEFS : ""}
|
|
147
|
+
</defs>
|
|
148
|
+
<style>${CSS}${hasBpmn ? BPMN_STYLE : ""}
|
|
149
|
+
</style>
|
|
150
|
+
${bg}
|
|
151
|
+
${title}${regionRects}
|
|
152
|
+
<g class="edges">
|
|
153
|
+
${edges.join("\n ")}
|
|
154
|
+
</g>
|
|
155
|
+
<g class="nodes">
|
|
156
|
+
${nodes.join("\n ")}
|
|
157
|
+
</g>${regionLabels}
|
|
158
|
+
</svg>
|
|
159
|
+
`;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
|
package/dist/xml.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal, dependency-free XML reader — just enough to walk a BPMN 2.0
|
|
3
|
+
* document. Produces a tree of {@link XmlEl} nodes with namespace prefixes
|
|
4
|
+
* stripped (so `bpmn:task` and `bpmn2:task` both read as `task`). Handles
|
|
5
|
+
* comments, CDATA, processing instructions / the XML declaration, doctype,
|
|
6
|
+
* self-closing tags, single/double-quoted attributes, and the standard +
|
|
7
|
+
* numeric entity references. It is a reader, not a validator.
|
|
8
|
+
*/
|
|
9
|
+
export interface XmlEl {
|
|
10
|
+
/** local tag name (namespace prefix stripped) */
|
|
11
|
+
tag: string;
|
|
12
|
+
/** attributes keyed by local name */
|
|
13
|
+
attrs: Record<string, string>;
|
|
14
|
+
children: XmlEl[];
|
|
15
|
+
/** concatenated direct text content (entity-decoded) */
|
|
16
|
+
text: string;
|
|
17
|
+
}
|
|
18
|
+
/** Parse `src` and return its root element. */
|
|
19
|
+
export declare function parseXml(src: string): XmlEl;
|
|
20
|
+
/** Depth-first (document order) iterator over `el` and all descendants. */
|
|
21
|
+
export declare function iterAll(el: XmlEl): Generator<XmlEl>;
|
|
22
|
+
//# sourceMappingURL=xml.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xml.d.ts","sourceRoot":"","sources":["../src/xml.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,KAAK;IACpB,iDAAiD;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClB,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;CACd;AA8CD,+CAA+C;AAC/C,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAsC3C;AAED,2EAA2E;AAC3E,wBAAiB,OAAO,CAAC,EAAE,EAAE,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAGpD"}
|