kymostudio 0.2.3 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/dsl.js ADDED
@@ -0,0 +1,538 @@
1
+ /**
2
+ * D2-style DSL parser — JS port of `packages/python/src/kymo/dsl.py`.
3
+ *
4
+ * Line-based, brace-delimited surface for {@link Diagram}. There is no
5
+ * `component` / `region` keyword — lines are disambiguated by shape:
6
+ *
7
+ * • line ending in `{`, second token ∈ outer|inner|cluster → region
8
+ * • line ending in `{`, second token ∈ horizontal|vertical → layout frame
9
+ * • `id arrow id …` → edge
10
+ * • `id shape/icon/accent "Name" "Sub" [@ …]` → leaf component
11
+ * • bare ids (inside a container body) → membership refs
12
+ * • `row id1 id2 …` (inside a region body) → grid row
13
+ *
14
+ * `parse()` returns the unresolved diagram plus the grid-layout / external
15
+ * specs (mirroring the Python tuple). `parseDiagram()` runs the full CLI
16
+ * pipeline (parse → layout → resolveAlignments) and returns a positioned
17
+ * {@link Diagram} ready for {@link renderSVG}.
18
+ *
19
+ * Independent implementation kept at parity with the Python parser, which
20
+ * remains the normative reference alongside `docs/DSL.md`.
21
+ */
22
+ import { makeComponent, makeEdge, makeRegion, makeDiagram, } from "./model.js";
23
+ import { layout, applyLayoutTree, minimizeCrossings, idNode, groupNode, } from "./layout.js";
24
+ import { resolveAlignments } from "./alignment.js";
25
+ // ── Top-level directives ───────────────────────────────────────────────
26
+ const CANVAS_RE = /^canvas\s*:?\s+(\d+)\s*x\s*(\d+)\s*$/;
27
+ const TITLE_RE = /^title\s*:\s*"([^"]*)"\s*$/;
28
+ const SUBTITLE_RE = /^subtitle\s*:\s*"([^"]*)"\s*$/;
29
+ const EXTERNAL_RE = /^external\s+(\w+)\s+above\s+(\w+)(?:\s+gap\s+(\d+))?\s*$/;
30
+ // ── Containers ──────────────────────────────────────────────────────────
31
+ const REGION_RE = /^(\w+)\s+(outer|inner|cluster)\s+"([^"]*)"(?:\s+(.+?))?\s*\{\s*$/;
32
+ const LAYOUT_RE = /^(\w+)\s+(horizontal|vertical)\s+pos\s+\(\s*(-?\d+)\s*,\s*(-?\d+)\s*\)\s+gap\s+(\d+)(?:\s+align\s+(start|center|end))?\s*\{\s*$/;
33
+ const CLOSE_RE = /^\s*\}\s*$/;
34
+ const LAYOUT_TREE_RE = /^layout\s*\{(.+)\}\s*$/;
35
+ // ── Region option tokens ────────────────────────────────────────────────
36
+ const PADDING_OPT_RE = /\bpadding\s+\(\s*(\d+)\s*,\s*(\d+)\s*\)/;
37
+ const PADDING_BOT_OPT_RE = /\bpadding-bottom\s+(\d+)/;
38
+ const DASH_OPT_RE = /\bdash\s+\(\s*(\d+)\s*,\s*(\d+)\s*\)/;
39
+ const STROKE_OPT_RE = /\bstroke\s+(#[0-9a-fA-F]{3,8})/;
40
+ const LABEL_ANCHOR_RE = /\blabel-anchor\s+(start|middle|end)/;
41
+ const LABEL_POS_RE = /\blabel-position\s+(above|inside)/;
42
+ const ICON_OPT_RE = /\bicon\s+([\w-]+)/;
43
+ const DIRECTION_OPT_RE = /\b(horizontal|vertical)\b/;
44
+ // ── Leaf component ──────────────────────────────────────────────────────
45
+ const LEAF_RE = /^(\w+)\s+([\w-]+)\/([\w-]+)\/(\w+)(?:\s+"([^"]*)")?(?:\s+"([^"]*)")?(?:\s+@\s+(.+?))?\s*$/;
46
+ const POS_LITERAL_RE = /^\(\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/;
47
+ const PARENT_REF_RE = /^(\w+)\s+(top|right|bottom|left)(?:\s+(-?\d+))?$/;
48
+ // ── Edge ────────────────────────────────────────────────────────────────
49
+ const EDGE_RE = /^(\w+)\s+(-->|==>|---)\s+(\w+)(?:\s+:\s+"([^"]*)")?(?:\s+\{(.*)\})?\s*$/;
50
+ const ANCHOR_SPEC_RE = /^(top|right|bottom|left|center)(?:\(\s*(-?\d+)\s*,\s*(-?\d+)\s*\))?$/;
51
+ const TUPLE_RE = /^\(\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/;
52
+ const VIA_PT_RE = /\(\s*(-?\d+)\s*,\s*(-?\d+)\s*\)/g;
53
+ // ── Grid rows / bare-id lists ───────────────────────────────────────────
54
+ const ROW_RE = /^row(?:\s+(.+))?$/;
55
+ const BARE_IDS_RE = /^[A-Za-z_]\w*(?:\s+[A-Za-z_]\w*)*\s*$/;
56
+ // ── Public API ──────────────────────────────────────────────────────────
57
+ export function parse(dsl) {
58
+ const state = new State();
59
+ const lines = dsl.split(/\r\n|\r|\n/);
60
+ const consumed = parseBlock(state, lines, 0, null);
61
+ if (consumed !== lines.length) {
62
+ throw new SyntaxError(`line ${consumed + 1}: unexpected \`}\` at file scope`);
63
+ }
64
+ return state.finalize();
65
+ }
66
+ /** Full front-end pipeline: parse → grid layout → alignment resolution.
67
+ * Returns a positioned {@link Diagram} ready for `renderSVG`. */
68
+ export function parseDiagram(dsl) {
69
+ const { diagram, layout: layoutSpec, external } = parse(dsl);
70
+ if (layoutSpec)
71
+ layout(diagram, layoutSpec, external);
72
+ resolveAlignments(diagram);
73
+ return diagram;
74
+ }
75
+ // ── Internal state ──────────────────────────────────────────────────────
76
+ class State {
77
+ components = [];
78
+ regions = [];
79
+ edges = [];
80
+ layoutDict = {};
81
+ externalDict = {};
82
+ layoutTrees = [];
83
+ canvas = [0, 0]; // (0, 0) → render-time auto-sizing
84
+ title = "";
85
+ subtitle = "";
86
+ finalize() {
87
+ const diagram = makeDiagram({
88
+ width: this.canvas[0], height: this.canvas[1],
89
+ title: this.title, subtitle: this.subtitle,
90
+ components: this.components, regions: this.regions, edges: this.edges,
91
+ layoutTrees: this.layoutTrees,
92
+ });
93
+ if (this.layoutTrees.length) {
94
+ const byId = new Map(this.components.map((c) => [c.id, c]));
95
+ const regionsById = new Map(this.regions.map((r) => [r.id, r]));
96
+ const edgePairs = this.edges.map((e) => [e.src, e.dst]);
97
+ let cursorY = 0;
98
+ for (const tree of this.layoutTrees) {
99
+ const inlined = inlineRegionLeaves(tree, regionsById);
100
+ if (inlined.t === "group")
101
+ minimizeCrossings(inlined, edgePairs);
102
+ const [, h] = applyLayoutTree(byId, inlined, { origin: [0, cursorY] });
103
+ cursorY += h + 40;
104
+ }
105
+ }
106
+ return {
107
+ diagram,
108
+ layout: Object.keys(this.layoutDict).length ? this.layoutDict : null,
109
+ external: Object.keys(this.externalDict).length ? this.externalDict : null,
110
+ };
111
+ }
112
+ }
113
+ // ── Block parser (recursive: file scope + each container body) ──────────
114
+ function parseBlock(state, lines, start, parent) {
115
+ let gridRows = null;
116
+ let i = start;
117
+ while (i < lines.length) {
118
+ const line = stripComment(lines[i]).trim();
119
+ if (!line) {
120
+ i++;
121
+ continue;
122
+ }
123
+ if (CLOSE_RE.test(line)) {
124
+ if (parent === null)
125
+ return i; // caller reports the stray `}`
126
+ if (gridRows !== null) {
127
+ state.layoutDict[parent.id] = gridRows;
128
+ parent.contains = []; // grid mode → layout() owns bounds
129
+ }
130
+ return i + 1;
131
+ }
132
+ let m;
133
+ if (parent === null) {
134
+ if ((m = CANVAS_RE.exec(line))) {
135
+ state.canvas = [parseInt(m[1]), parseInt(m[2])];
136
+ i++;
137
+ continue;
138
+ }
139
+ if ((m = TITLE_RE.exec(line))) {
140
+ state.title = m[1];
141
+ i++;
142
+ continue;
143
+ }
144
+ if ((m = SUBTITLE_RE.exec(line))) {
145
+ state.subtitle = m[1];
146
+ i++;
147
+ continue;
148
+ }
149
+ if ((m = EXTERNAL_RE.exec(line))) {
150
+ state.externalDict[m[1]] = { above: m[2], gap: m[3] ? parseInt(m[3]) : 60 };
151
+ i++;
152
+ continue;
153
+ }
154
+ if ((m = LAYOUT_TREE_RE.exec(line))) {
155
+ state.layoutTrees.push(parseLayoutTree(m[1], i + 1));
156
+ i++;
157
+ continue;
158
+ }
159
+ }
160
+ if ((m = EDGE_RE.exec(line))) {
161
+ if (parent !== null) {
162
+ throw new SyntaxError(`line ${i + 1}: edges must live at file scope, not inside container ${JSON.stringify(parent.id)}`);
163
+ }
164
+ state.edges.push(makeEdgeFrom(m, i + 1));
165
+ i++;
166
+ continue;
167
+ }
168
+ if ((m = ROW_RE.exec(line))) {
169
+ if (parent === null)
170
+ throw new SyntaxError(`line ${i + 1}: \`row\` only valid inside a region body`);
171
+ if (parent.layout != null) {
172
+ throw new SyntaxError(`line ${i + 1}: \`row\` not allowed in layout body (${JSON.stringify(parent.id)} is a ${parent.layout} layout)`);
173
+ }
174
+ if (gridRows === null)
175
+ gridRows = [];
176
+ gridRows.push(splitWs(m[1] ?? ""));
177
+ i++;
178
+ continue;
179
+ }
180
+ if (line.endsWith("{")) {
181
+ i = consumeContainer(state, lines, i, parent, gridRows);
182
+ continue;
183
+ }
184
+ if ((m = LEAF_RE.exec(line))) {
185
+ const comp = makeComponentFrom(m, i + 1);
186
+ state.components.push(comp);
187
+ if (parent !== null) {
188
+ if (parent.layout != null) {
189
+ throw new SyntaxError(`line ${i + 1}: inline leaf definitions not allowed in layout body — define ${JSON.stringify(comp.id)} at file scope or in a region body, then reference by bare id`);
190
+ }
191
+ parent.contains.push(comp.id);
192
+ }
193
+ i++;
194
+ continue;
195
+ }
196
+ if (parent !== null && BARE_IDS_RE.test(line)) {
197
+ if (gridRows !== null) {
198
+ throw new SyntaxError(`line ${i + 1}: region ${JSON.stringify(parent.id)} mixes \`row\` and bare ids — pick one`);
199
+ }
200
+ parent.contains.push(...splitWs(line));
201
+ i++;
202
+ continue;
203
+ }
204
+ throw new SyntaxError(`line ${i + 1}: unrecognised — ${JSON.stringify(line)}`);
205
+ }
206
+ if (parent !== null)
207
+ throw new SyntaxError(`line ${start}: unclosed block (no matching \`}\`)`);
208
+ return i;
209
+ }
210
+ function consumeContainer(state, lines, i, parent, parentGrid) {
211
+ const line = stripComment(lines[i]).trim();
212
+ let region;
213
+ let m;
214
+ if ((m = REGION_RE.exec(line)))
215
+ region = makeRegionFrom(m);
216
+ else if ((m = LAYOUT_RE.exec(line)))
217
+ region = makeLayoutFrom(m);
218
+ else
219
+ throw new SyntaxError(`line ${i + 1}: bad container header — ${JSON.stringify(line)}`);
220
+ state.regions.push(region);
221
+ const nextI = parseBlock(state, lines, i + 1, region);
222
+ // Propagate this container's leaves up so the outer region's bounds
223
+ // envelop nested leaves. Layout frames don't propagate.
224
+ if (parent !== null && region.layout == null) {
225
+ if (parentGrid !== null) {
226
+ throw new SyntaxError(`line ${i + 1}: region ${JSON.stringify(parent.id)} mixes \`row\` and nested containers — pick one`);
227
+ }
228
+ parent.contains.push(...region.contains);
229
+ }
230
+ return nextI;
231
+ }
232
+ // ── Per-kind builders ───────────────────────────────────────────────────
233
+ function makeRegionFrom(m) {
234
+ const [, rid, style, label, opts] = m;
235
+ let padding = [24, 24];
236
+ let paddingBottom = null;
237
+ let borderDash = null;
238
+ let borderStroke = null;
239
+ let labelAnchor = "middle";
240
+ let labelPosition = null;
241
+ let icon = null;
242
+ let direction = null;
243
+ if (opts) {
244
+ let o;
245
+ if ((o = PADDING_OPT_RE.exec(opts)))
246
+ padding = [parseInt(o[1]), parseInt(o[2])];
247
+ if ((o = PADDING_BOT_OPT_RE.exec(opts)))
248
+ paddingBottom = parseInt(o[1]);
249
+ if ((o = DASH_OPT_RE.exec(opts)))
250
+ borderDash = `${parseInt(o[1])} ${parseInt(o[2])}`;
251
+ if ((o = STROKE_OPT_RE.exec(opts)))
252
+ borderStroke = o[1];
253
+ if ((o = LABEL_ANCHOR_RE.exec(opts)))
254
+ labelAnchor = o[1];
255
+ if ((o = LABEL_POS_RE.exec(opts)))
256
+ labelPosition = o[1];
257
+ if ((o = ICON_OPT_RE.exec(opts)))
258
+ icon = o[1];
259
+ if ((o = DIRECTION_OPT_RE.exec(opts)))
260
+ direction = o[1];
261
+ }
262
+ return makeRegion({
263
+ id: rid, label, style,
264
+ padding, paddingBottom, borderDash, borderStroke,
265
+ labelAnchor, labelPosition, icon, contains: [], layout: direction,
266
+ });
267
+ }
268
+ function makeLayoutFrom(m) {
269
+ const [, lid, direction, x, y, gap, align] = m;
270
+ return makeRegion({
271
+ id: lid, label: "",
272
+ pos: [parseInt(x), parseInt(y)], layout: direction, gap: parseInt(gap),
273
+ align: align || "center", padding: [0, 0], visible: false, contains: [],
274
+ });
275
+ }
276
+ function makeComponentFrom(m, lineNo) {
277
+ const [, cid, shape, icon, accent, name, subtitle, ref] = m;
278
+ let pos = [0, 0];
279
+ let parent = null;
280
+ let align = null;
281
+ let alignGap = 24;
282
+ if (ref) {
283
+ const r = ref.trim();
284
+ let pm;
285
+ if ((pm = POS_LITERAL_RE.exec(r))) {
286
+ pos = [parseInt(pm[1]), parseInt(pm[2])];
287
+ }
288
+ else if ((pm = PARENT_REF_RE.exec(r))) {
289
+ parent = pm[1];
290
+ align = pm[2];
291
+ if (pm[3] !== undefined)
292
+ alignGap = parseInt(pm[3]);
293
+ }
294
+ else {
295
+ throw new SyntaxError(`line ${lineNo}: bad @-ref ${JSON.stringify(r)}`);
296
+ }
297
+ }
298
+ return makeComponent({
299
+ id: cid, name: name ?? "", subtitle: subtitle ?? "",
300
+ icon, shape: shape, accent,
301
+ pos, parent, align, alignGap,
302
+ });
303
+ }
304
+ function makeEdgeFrom(m, lineNo) {
305
+ const [, src, arrow, dst, label, opts] = m;
306
+ const kw = {
307
+ srcAnchor: null, dstAnchor: null,
308
+ srcOffset: [0, 0], dstOffset: [0, 0],
309
+ labelOffset: [0, 0], labelSmall: false, labelPos: null, labelAnchor: "mid",
310
+ via: [], route: "auto", dashed: false,
311
+ noArrow: arrow === "---", sharedPort: false,
312
+ };
313
+ if (opts)
314
+ parseEdgeOptions(opts.trim(), kw, lineNo);
315
+ return makeEdge({
316
+ src, dst, label: label ?? "",
317
+ style: arrow === "==>" ? "orange" : "gray",
318
+ ...kw,
319
+ });
320
+ }
321
+ // ── Helpers ───────────────────────────────────────────────────────────
322
+ function splitWs(s) {
323
+ const t = s.trim();
324
+ return t === "" ? [] : t.split(/\s+/);
325
+ }
326
+ /** Strip `#` comments outside double-quoted strings. A `#` followed by a hex
327
+ * digit is a colour literal (`stroke #94a3b8`), not a comment. */
328
+ function stripComment(line) {
329
+ let out = "";
330
+ let inQuote = false;
331
+ for (let i = 0; i < line.length; i++) {
332
+ const ch = line[i];
333
+ if (ch === '"') {
334
+ inQuote = !inQuote;
335
+ out += ch;
336
+ }
337
+ else if (ch === "#" && !inQuote) {
338
+ const nxt = i + 1 < line.length ? line[i + 1] : "";
339
+ if (nxt && "0123456789abcdefABCDEF".includes(nxt))
340
+ out += ch; // hex colour
341
+ else
342
+ break; // real comment
343
+ }
344
+ else
345
+ out += ch;
346
+ }
347
+ return out;
348
+ }
349
+ function parseEdgeOptions(s, kw, lineNo) {
350
+ for (let tok of splitOutsideParens(s, ",")) {
351
+ tok = tok.trim();
352
+ if (!tok)
353
+ continue;
354
+ const eq = tok.indexOf("=");
355
+ if (eq >= 0)
356
+ setKvOption(kw, tok.slice(0, eq).trim(), tok.slice(eq + 1).trim(), lineNo);
357
+ else
358
+ setFlag(kw, tok, lineNo);
359
+ }
360
+ }
361
+ function splitOutsideParens(s, sep) {
362
+ const out = [];
363
+ let cur = "";
364
+ let depth = 0;
365
+ for (const ch of s) {
366
+ if (ch === "(") {
367
+ depth++;
368
+ cur += ch;
369
+ }
370
+ else if (ch === ")") {
371
+ depth--;
372
+ cur += ch;
373
+ }
374
+ else if (ch === sep && depth === 0) {
375
+ out.push(cur);
376
+ cur = "";
377
+ }
378
+ else
379
+ cur += ch;
380
+ }
381
+ if (cur)
382
+ out.push(cur);
383
+ return out;
384
+ }
385
+ function setKvOption(kw, key, value, lineNo) {
386
+ if (key === "src" || key === "dst") {
387
+ const am = ANCHOR_SPEC_RE.exec(value);
388
+ if (!am)
389
+ throw new SyntaxError(`line ${lineNo}: bad ${key} anchor ${JSON.stringify(value)}`);
390
+ const side = am[1];
391
+ const offset = am[2] !== undefined ? [parseInt(am[2]), parseInt(am[3])] : null;
392
+ if (key === "src") {
393
+ kw.srcAnchor = side;
394
+ if (offset)
395
+ kw.srcOffset = offset;
396
+ }
397
+ else {
398
+ kw.dstAnchor = side;
399
+ if (offset)
400
+ kw.dstOffset = offset;
401
+ }
402
+ return;
403
+ }
404
+ if (key === "via") {
405
+ const pts = [...value.matchAll(VIA_PT_RE)].map((p) => [parseInt(p[1]), parseInt(p[2])]);
406
+ if (!pts.length)
407
+ throw new SyntaxError(`line ${lineNo}: via needs ≥1 point — got ${JSON.stringify(value)}`);
408
+ kw.via = pts;
409
+ return;
410
+ }
411
+ if (key === "label_offset" || key === "label_pos") {
412
+ const tm = TUPLE_RE.exec(value);
413
+ if (!tm)
414
+ throw new SyntaxError(`line ${lineNo}: ${key} expects (x, y) — got ${JSON.stringify(value)}`);
415
+ const tuple = [parseInt(tm[1]), parseInt(tm[2])];
416
+ if (key === "label_offset")
417
+ kw.labelOffset = tuple;
418
+ else
419
+ kw.labelPos = tuple;
420
+ return;
421
+ }
422
+ if (key === "route") {
423
+ if (!["auto", "over", "under", "curve"].includes(value)) {
424
+ throw new SyntaxError(`line ${lineNo}: bad route ${JSON.stringify(value)}`);
425
+ }
426
+ kw.route = value;
427
+ return;
428
+ }
429
+ if (key === "label_at") {
430
+ if (!["src", "dst", "mid"].includes(value)) {
431
+ throw new SyntaxError(`line ${lineNo}: label_at expects src|dst|mid — got ${JSON.stringify(value)}`);
432
+ }
433
+ kw.labelAnchor = value;
434
+ return;
435
+ }
436
+ throw new SyntaxError(`line ${lineNo}: unknown edge option ${JSON.stringify(key)}`);
437
+ }
438
+ function setFlag(kw, flag, lineNo) {
439
+ if (flag === "small")
440
+ kw.labelSmall = true;
441
+ else if (flag === "dashed")
442
+ kw.dashed = true;
443
+ else if (flag === "shared")
444
+ kw.sharedPort = true;
445
+ else if (["curve", "over", "under", "straight", "elbow"].includes(flag)) {
446
+ kw.route = flag === "elbow" ? "auto" : flag;
447
+ }
448
+ else {
449
+ throw new SyntaxError(`line ${lineNo}: unknown edge flag ${JSON.stringify(flag)}`);
450
+ }
451
+ }
452
+ // ── Layout tree (Figma-style auto-layout) ───────────────────────────────
453
+ export function parseLayoutTree(expr, lineNo) {
454
+ const tokens = tokenizeLayout(expr, lineNo);
455
+ const pos = { i: 0 };
456
+ const node = parseLayoutNode(tokens, pos, lineNo);
457
+ if (pos.i < tokens.length) {
458
+ throw new SyntaxError(`line ${lineNo}: trailing token ${JSON.stringify(tokens[pos.i])} in layout`);
459
+ }
460
+ return node;
461
+ }
462
+ function tokenizeLayout(s, lineNo) {
463
+ const out = [];
464
+ let i = 0;
465
+ while (i < s.length) {
466
+ const ch = s[i];
467
+ if ("{}|,".includes(ch)) {
468
+ out.push(ch);
469
+ i++;
470
+ }
471
+ else if (/\s/.test(ch)) {
472
+ i++;
473
+ }
474
+ else if (/[A-Za-z0-9_]/.test(ch)) {
475
+ let j = i;
476
+ while (j < s.length && /[A-Za-z0-9_]/.test(s[j]))
477
+ j++;
478
+ out.push(s.slice(i, j));
479
+ i = j;
480
+ }
481
+ else {
482
+ throw new SyntaxError(`line ${lineNo}: bad char ${JSON.stringify(ch)} in layout expr`);
483
+ }
484
+ }
485
+ return out;
486
+ }
487
+ function parseLayoutNode(tokens, pos, lineNo) {
488
+ const items = [parseLayoutAtom(tokens, pos, lineNo)];
489
+ let sep = null;
490
+ while (pos.i < tokens.length && (tokens[pos.i] === "|" || tokens[pos.i] === ",")) {
491
+ const cur = tokens[pos.i];
492
+ if (sep === null)
493
+ sep = cur;
494
+ else if (sep !== cur) {
495
+ throw new SyntaxError(`line ${lineNo}: cannot mix \`|\` and \`,\` at same level — use {} to group`);
496
+ }
497
+ pos.i++;
498
+ items.push(parseLayoutAtom(tokens, pos, lineNo));
499
+ }
500
+ if (sep === null)
501
+ return items[0];
502
+ return groupNode(sep === "|" ? "horizontal" : "vertical", items);
503
+ }
504
+ function parseLayoutAtom(tokens, pos, lineNo) {
505
+ if (pos.i >= tokens.length)
506
+ throw new SyntaxError(`line ${lineNo}: expected id or \`{\` in layout expr`);
507
+ const tok = tokens[pos.i];
508
+ if (tok === "{") {
509
+ pos.i++;
510
+ const node = parseLayoutNode(tokens, pos, lineNo);
511
+ if (pos.i >= tokens.length || tokens[pos.i] !== "}") {
512
+ throw new SyntaxError(`line ${lineNo}: missing \`}\` in layout expr`);
513
+ }
514
+ pos.i++;
515
+ return node;
516
+ }
517
+ if (tok === "|" || tok === "," || tok === "}") {
518
+ throw new SyntaxError(`line ${lineNo}: unexpected ${JSON.stringify(tok)} in layout expr`);
519
+ }
520
+ pos.i++;
521
+ return idNode(tok);
522
+ }
523
+ /** Replace a leaf whose id matches a directional region with a sub-tree built
524
+ * from that region's `contains` + `layout` direction, so the layout DSL stays
525
+ * flat. Regions without a direction stay opaque (a single leaf). */
526
+ export function inlineRegionLeaves(tree, regionsById) {
527
+ if (tree.t === "id") {
528
+ const r = regionsById.get(tree.id);
529
+ if (r && r.layout && r.contains.length) {
530
+ const children = r.contains.map((ch) => inlineRegionLeaves(idNode(ch), regionsById));
531
+ return groupNode(r.layout, children, r.padding);
532
+ }
533
+ return tree;
534
+ }
535
+ const newChildren = tree.children.map((c) => inlineRegionLeaves(c, regionsById));
536
+ return tree.padding ? groupNode(tree.dir, newChildren, tree.padding) : groupNode(tree.dir, newChildren);
537
+ }
538
+ //# sourceMappingURL=dsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dsl.js","sourceRoot":"","sources":["../src/dsl.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -9,10 +9,16 @@
9
9
  * `anchor`, `resolveAnchors`, …
10
10
  * - icons: `ICONS`, `getIcon`, `setIconBaseURL`, `setManifest`, `registerIcon`
11
11
  * - renderer: `renderSVG`
12
+ * - DSL: `parse` (.diagram → Diagram + layout/external specs),
13
+ * `parseDiagram` (full pipeline → positioned Diagram), `layout`,
14
+ * `resolveAlignments`
12
15
  * - BPMN import: `parseBpmn` (BPMN 2.0 `.bpmn` XML → Diagram)
13
16
  */
14
17
  export * from "./model.js";
15
18
  export * from "./icons-loader.js";
16
19
  export * from "./render.js";
20
+ export { parse, parseDiagram, type ParseResult } from "./dsl.js";
21
+ export { layout, applyLayoutTree, minimizeCrossings, cellSize, type LayoutNode, type RegionLayout, type ExternalSpec, type LayoutOptions, type Cell, } from "./layout.js";
22
+ export { resolveAlignments } from "./alignment.js";
17
23
  export { parseBpmn } from "./from-bpmn.js";
18
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EACL,MAAM,EAAE,eAAe,EAAE,iBAAiB,EAAE,QAAQ,EACpD,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,KAAK,IAAI,GACrF,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -9,10 +9,16 @@
9
9
  * `anchor`, `resolveAnchors`, …
10
10
  * - icons: `ICONS`, `getIcon`, `setIconBaseURL`, `setManifest`, `registerIcon`
11
11
  * - renderer: `renderSVG`
12
+ * - DSL: `parse` (.diagram → Diagram + layout/external specs),
13
+ * `parseDiagram` (full pipeline → positioned Diagram), `layout`,
14
+ * `resolveAlignments`
12
15
  * - BPMN import: `parseBpmn` (BPMN 2.0 `.bpmn` XML → Diagram)
13
16
  */
14
17
  export * from "./model.js";
15
18
  export * from "./icons-loader.js"; // ICONS, getIcon, setIconBaseURL, setManifest, registerIcon
16
19
  export * from "./render.js"; // renderSVG
20
+ export { parse, parseDiagram } from "./dsl.js";
21
+ export { layout, applyLayoutTree, minimizeCrossings, cellSize, } from "./layout.js";
22
+ export { resolveAlignments } from "./alignment.js";
17
23
  export { parseBpmn } from "./from-bpmn.js";
18
24
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC,CAAC,4DAA4D;AAC/F,cAAc,aAAa,CAAC,CAAO,YAAY;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC,CAAC,4DAA4D;AAC/F,cAAc,aAAa,CAAC,CAAO,YAAY;AAC/C,OAAO,EAAE,KAAK,EAAE,YAAY,EAAoB,MAAM,UAAU,CAAC;AACjE,OAAO,EACL,MAAM,EAAE,eAAe,EAAE,iBAAiB,EAAE,QAAQ,GAErD,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}