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.
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Auto-layout — JS port of `packages/python/src/kymo/layout.py`.
3
+ *
4
+ * Two layout strategies, both writing component `pos` (and region `bounds`)
5
+ * in place:
6
+ * - `layout()` — grid mode: pack components into a region/row grid so rows
7
+ * line up across regions (cross-region same-row edges run flat).
8
+ * - `applyLayoutTree()` — Figma-style auto-layout: each frame hugs its
9
+ * contents, children flow along the frame axis with a fixed gap, cross
10
+ * axis centre-aligned. `minimizeCrossings()` barycenter-reorders children
11
+ * first so siblings land in a crossing-minimised order.
12
+ *
13
+ * This is an independent TypeScript implementation kept at parity with the
14
+ * Python algorithm — not a transpile. Output need not be byte-identical to
15
+ * Python's (the two renderers differ); it must produce equivalent geometry.
16
+ */
17
+ import { type Component, type Diagram, type Point } from "./model.js";
18
+ export type LayoutNode = {
19
+ t: "id";
20
+ id: string;
21
+ } | {
22
+ t: "group";
23
+ dir: "horizontal" | "vertical";
24
+ children: LayoutNode[];
25
+ padding?: Point;
26
+ };
27
+ export declare function idNode(id: string): LayoutNode;
28
+ export declare function groupNode(dir: "horizontal" | "vertical", children: LayoutNode[], padding?: Point): LayoutNode;
29
+ export interface RegionLayout {
30
+ [regionId: string]: string[][];
31
+ }
32
+ export interface ExternalSpec {
33
+ [componentId: string]: {
34
+ above?: string;
35
+ gap?: number;
36
+ };
37
+ }
38
+ export interface Cell {
39
+ w: number;
40
+ h: number;
41
+ }
42
+ export declare function cellSize(c: Component, hPad?: number, vPad?: number): Cell;
43
+ export interface LayoutOptions {
44
+ regionGap?: number;
45
+ rowGap?: number;
46
+ cellGap?: number;
47
+ regionPaddingX?: number;
48
+ regionPaddingY?: number;
49
+ canvasMargin?: number;
50
+ }
51
+ export declare function layout(diagram: Diagram, regionLayout: RegionLayout, external?: ExternalSpec | null, opts?: LayoutOptions): void;
52
+ export declare function applyLayoutTree(byId: Map<string, Component>, tree: LayoutNode, opts?: {
53
+ gap?: number;
54
+ origin?: Point;
55
+ }): Point;
56
+ export declare function minimizeCrossings(tree: LayoutNode, edges: Array<[string, string]>, maxSweeps?: number): void;
57
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAES,KAAK,SAAS,EAAE,KAAK,OAAO,EAAa,KAAK,KAAK,EAClE,MAAM,YAAY,CAAC;AAMpB,MAAM,MAAM,UAAU,GAClB;IAAE,CAAC,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACvB;IAAE,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,YAAY,GAAG,UAAU,CAAC;IAAC,QAAQ,EAAE,UAAU,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAE5F,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,CAE7C;AACD,wBAAgB,SAAS,CACvB,GAAG,EAAE,YAAY,GAAG,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,KAAK,GACtE,UAAU,CAEZ;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;CAChC;AACD,MAAM,WAAW,YAAY;IAC3B,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACzD;AAyBD,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,SAAI,EAAE,IAAI,SAAK,GAAG,IAAI,CAOhE;AAGD,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,MAAM,CACpB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,QAAQ,GAAE,YAAY,GAAG,IAAW,EACpC,IAAI,GAAE,aAAkB,GACvB,IAAI,CA4HN;AAGD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,EAC5B,IAAI,EAAE,UAAU,EAChB,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,KAAK,CAAA;CAAO,GAC1C,KAAK,CA4EP;AAUD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,SAAK,GAC/D,IAAI,CAaN"}
package/dist/layout.js ADDED
@@ -0,0 +1,393 @@
1
+ /**
2
+ * Auto-layout — JS port of `packages/python/src/kymo/layout.py`.
3
+ *
4
+ * Two layout strategies, both writing component `pos` (and region `bounds`)
5
+ * in place:
6
+ * - `layout()` — grid mode: pack components into a region/row grid so rows
7
+ * line up across regions (cross-region same-row edges run flat).
8
+ * - `applyLayoutTree()` — Figma-style auto-layout: each frame hugs its
9
+ * contents, children flow along the frame axis with a fixed gap, cross
10
+ * axis centre-aligned. `minimizeCrossings()` barycenter-reorders children
11
+ * first so siblings land in a crossing-minimised order.
12
+ *
13
+ * This is an independent TypeScript implementation kept at parity with the
14
+ * Python algorithm — not a transpile. Output need not be byte-identical to
15
+ * Python's (the two renderers differ); it must produce equivalent geometry.
16
+ */
17
+ import { LABEL_HEIGHT, SHAPE_HALF, componentHalf, anchor, resolveAnchors, getComponent, } from "./model.js";
18
+ export function idNode(id) {
19
+ return { t: "id", id };
20
+ }
21
+ export function groupNode(dir, children, padding) {
22
+ return padding ? { t: "group", dir, children, padding } : { t: "group", dir, children };
23
+ }
24
+ // ── Sizing ─────────────────────────────────────────────────────────────
25
+ const CHAR_W_NAME = 7.6; // 14px component name
26
+ const CHAR_W_SUB = 6.4; // 11.5px subtitle
27
+ const LABEL_GAP = 6;
28
+ const LINE_HEIGHT = 18;
29
+ // Derive icon (w, h) from SHAPE_HALF so new shapes don't drift; annotation
30
+ // keeps a (40, 32) label budget though SHAPE_HALF treats it as (0, 0).
31
+ const ICON_DIMS = (() => {
32
+ const out = {};
33
+ for (const [shape, [hw, hh]] of Object.entries(SHAPE_HALF))
34
+ out[shape] = [2 * hw, 2 * hh];
35
+ out["annotation"] = [40, 32];
36
+ return out;
37
+ })();
38
+ function iconDims(shape) {
39
+ return ICON_DIMS[shape] ?? [0, 0];
40
+ }
41
+ function textW(s, charW) {
42
+ return Math.trunc(s.length * charW);
43
+ }
44
+ export function cellSize(c, hPad = 8, vPad = 10) {
45
+ const [iw, ih] = iconDims(c.shape);
46
+ const nameW = textW(c.name, CHAR_W_NAME);
47
+ const subW = textW(c.subtitle, CHAR_W_SUB);
48
+ const labelW = Math.max(nameW, subW);
49
+ const labelH = LABEL_GAP + LINE_HEIGHT * 2;
50
+ return { w: Math.max(iw, labelW) + hPad * 2, h: ih + labelH + vPad };
51
+ }
52
+ export function layout(diagram, regionLayout, external = null, opts = {}) {
53
+ const regionGap = opts.regionGap ?? 36;
54
+ const rowGap = opts.rowGap ?? 28;
55
+ const cellGap = opts.cellGap ?? 18;
56
+ const regionPaddingX = opts.regionPaddingX ?? 18;
57
+ const regionPaddingY = opts.regionPaddingY ?? 22;
58
+ const canvasMargin = opts.canvasMargin ?? 18;
59
+ const sizes = new Map(diagram.components.map((c) => [c.id, cellSize(c)]));
60
+ const regionIds = Object.keys(regionLayout);
61
+ // Per-row height across all regions → consistent Y for cross-region rows.
62
+ const maxRows = Math.max(...regionIds.map((rid) => regionLayout[rid].length));
63
+ const rowHeights = [];
64
+ for (let i = 0; i < maxRows; i++) {
65
+ let h = 0;
66
+ for (const rid of regionIds) {
67
+ const rows = regionLayout[rid];
68
+ if (i < rows.length) {
69
+ for (const cid of rows[i]) {
70
+ const s = sizes.get(cid);
71
+ if (s)
72
+ h = Math.max(h, s.h);
73
+ }
74
+ }
75
+ }
76
+ rowHeights.push(h || 100);
77
+ }
78
+ // Per-region width = max(row width).
79
+ const regionWidths = new Map();
80
+ for (const rid of regionIds) {
81
+ let w = 0;
82
+ for (const row of regionLayout[rid]) {
83
+ const rowW = row.reduce((acc, cid) => acc + (sizes.get(cid)?.w ?? 0), 0)
84
+ + (row.length - 1) * cellGap;
85
+ w = Math.max(w, rowW);
86
+ }
87
+ regionWidths.set(rid, w + regionPaddingX * 2);
88
+ }
89
+ // External components reserve vertical space above the first row.
90
+ const ext = external ?? {};
91
+ let extAboveHeight = 0;
92
+ for (const [eid, spec] of Object.entries(ext)) {
93
+ if (spec.above && sizes.has(eid)) {
94
+ extAboveHeight = Math.max(extAboveHeight, sizes.get(eid).h + (spec.gap ?? 60));
95
+ }
96
+ }
97
+ // Row centre-Y, cumulative.
98
+ const rowYs = [];
99
+ let y = canvasMargin + extAboveHeight;
100
+ for (const h of rowHeights) {
101
+ y += Math.floor(h / 2);
102
+ rowYs.push(y);
103
+ y += Math.floor(h / 2) + rowGap;
104
+ }
105
+ // Region centre-X, cumulative.
106
+ const regionXs = new Map();
107
+ let x = canvasMargin;
108
+ for (const rid of regionIds) {
109
+ const w = regionWidths.get(rid);
110
+ x += Math.floor(w / 2);
111
+ regionXs.set(rid, x);
112
+ x += Math.floor(w / 2) + regionGap;
113
+ }
114
+ const canvasRight = x - regionGap + canvasMargin;
115
+ // Place each component at its grid cell.
116
+ for (const rid of regionIds) {
117
+ const rx = regionXs.get(rid);
118
+ const rows = regionLayout[rid];
119
+ for (let i = 0; i < rows.length; i++) {
120
+ const row = rows[i];
121
+ const ry = rowYs[i];
122
+ const totalW = row.reduce((acc, cid) => acc + (sizes.get(cid)?.w ?? 0), 0)
123
+ + (row.length - 1) * cellGap;
124
+ let cursor = rx - Math.floor(totalW / 2);
125
+ for (const cid of row) {
126
+ const cw = sizes.get(cid)?.w ?? 0;
127
+ getComponent(diagram, cid).pos = [cursor + Math.floor(cw / 2), ry];
128
+ cursor += cw + cellGap;
129
+ }
130
+ }
131
+ }
132
+ // Place external (above a target).
133
+ for (const [eid, spec] of Object.entries(ext)) {
134
+ if (spec.above) {
135
+ const target = getComponent(diagram, spec.above);
136
+ const gap = spec.gap ?? 60;
137
+ const targetTop = target.pos[1] - Math.floor((sizes.get(spec.above)?.h ?? 0) / 2);
138
+ getComponent(diagram, eid).pos = [
139
+ target.pos[0],
140
+ targetTop - gap - Math.floor((sizes.get(eid)?.h ?? 0) / 2),
141
+ ];
142
+ }
143
+ }
144
+ // Region bounds — hug the cells with region padding.
145
+ for (const rid of regionIds) {
146
+ const rx = regionXs.get(rid);
147
+ const rw = regionWidths.get(rid);
148
+ const rows = regionLayout[rid];
149
+ const n = rows.length;
150
+ const top = rowYs[0] - Math.floor(rowHeights[0] / 2) - regionPaddingY;
151
+ const bot = rowYs[n - 1] + Math.floor(rowHeights[n - 1] / 2) + regionPaddingY;
152
+ for (const r of diagram.regions) {
153
+ if (r.id === rid) {
154
+ r.bounds = [rx - Math.floor(rw / 2), top, rw, bot - top];
155
+ break;
156
+ }
157
+ }
158
+ }
159
+ // Auto-route edges that asked for it.
160
+ routeEdges(diagram, rowYs);
161
+ // Final canvas — fit content + margin.
162
+ diagram.width = canvasRight;
163
+ diagram.height = Math.max(...diagram.components.map((c) => c.pos[1] + Math.floor((sizes.get(c.id)?.h ?? 0) / 2))) + canvasMargin;
164
+ }
165
+ // ── Anonymous layout-tree (Figma-style auto-layout) ────────────────────
166
+ export function applyLayoutTree(byId, tree, opts = {}) {
167
+ const gap = opts.gap ?? 40;
168
+ const origin = opts.origin ?? [0, 0];
169
+ const lookup = (cid) => {
170
+ const c = byId.get(cid);
171
+ if (!c)
172
+ throw new Error(`layout tree references unknown component ${JSON.stringify(cid)}`);
173
+ return c;
174
+ };
175
+ const cell = (c) => {
176
+ const [iw, ih] = iconDims(c.shape);
177
+ const lh = (c.name || c.subtitle) ? (LABEL_HEIGHT[c.shape] ?? 0) : 0;
178
+ return [iw, ih + lh];
179
+ };
180
+ const padOf = (node) => (node.t === "group" && node.padding) ? node.padding : [0, 0];
181
+ const effectiveGap = (dir, sizes) => {
182
+ const cross = dir === "horizontal"
183
+ ? Math.max(...sizes.map((s) => s[1]))
184
+ : Math.max(...sizes.map((s) => s[0]));
185
+ return Math.max(gap, Math.floor(cross / 4));
186
+ };
187
+ const measure = (node) => {
188
+ if (node.t === "id")
189
+ return cell(lookup(node.id));
190
+ const [px, py] = padOf(node);
191
+ const sizes = node.children.map(measure);
192
+ const eg = effectiveGap(node.dir, sizes);
193
+ if (node.dir === "horizontal") {
194
+ return [
195
+ sizes.reduce((a, s) => a + s[0], 0) + (sizes.length - 1) * eg + 2 * px,
196
+ Math.max(...sizes.map((s) => s[1])) + 2 * py,
197
+ ];
198
+ }
199
+ return [
200
+ Math.max(...sizes.map((s) => s[0])) + 2 * px,
201
+ sizes.reduce((a, s) => a + s[1], 0) + (sizes.length - 1) * eg + 2 * py,
202
+ ];
203
+ };
204
+ const place = (node, cx, cy) => {
205
+ if (node.t === "id") {
206
+ const c = lookup(node.id);
207
+ const lh = (c.name || c.subtitle) ? (LABEL_HEIGHT[c.shape] ?? 0) : 0;
208
+ c.pos = [cx, cy - Math.floor(lh / 2)]; // cell center → icon center
209
+ return;
210
+ }
211
+ const sizes = node.children.map(measure);
212
+ const eg = effectiveGap(node.dir, sizes);
213
+ const [w, h] = measure(node);
214
+ const [px, py] = padOf(node);
215
+ const innerW = w - 2 * px;
216
+ const innerH = h - 2 * py;
217
+ if (node.dir === "horizontal") {
218
+ let cursor = cx - Math.floor(innerW / 2);
219
+ node.children.forEach((ch, i) => {
220
+ const cw = sizes[i][0];
221
+ place(ch, cursor + Math.floor(cw / 2), cy);
222
+ cursor += cw + eg;
223
+ });
224
+ }
225
+ else {
226
+ let cursor = cy - Math.floor(innerH / 2);
227
+ node.children.forEach((ch, i) => {
228
+ const chH = sizes[i][1];
229
+ place(ch, cx, cursor + Math.floor(chH / 2));
230
+ cursor += chH + eg;
231
+ });
232
+ }
233
+ };
234
+ const [w, h] = measure(tree);
235
+ place(tree, origin[0] + Math.floor(w / 2), origin[1] + Math.floor(h / 2));
236
+ return [w, h];
237
+ }
238
+ // ── Crossing minimisation (barycenter heuristic) ────────────────────────
239
+ function collectLeavesOrdered(node) {
240
+ if (node.t === "id")
241
+ return [node.id];
242
+ const out = [];
243
+ for (const ch of node.children)
244
+ out.push(...collectLeavesOrdered(ch));
245
+ return out;
246
+ }
247
+ export function minimizeCrossings(tree, edges, maxSweeps = 24) {
248
+ if (tree.t !== "group")
249
+ return;
250
+ const leafAdj = new Map();
251
+ const add = (a, b) => {
252
+ if (!leafAdj.has(a))
253
+ leafAdj.set(a, new Set());
254
+ leafAdj.get(a).add(b);
255
+ };
256
+ for (const [s, d] of edges) {
257
+ add(s, d);
258
+ add(d, s);
259
+ }
260
+ for (let i = 0; i < maxSweeps; i++) {
261
+ if (!sweepNode(tree, leafAdj))
262
+ break;
263
+ }
264
+ }
265
+ function sweepNode(node, leafAdj) {
266
+ if (node.t !== "group")
267
+ return false;
268
+ let changed = false;
269
+ for (const ch of node.children) {
270
+ if (sweepNode(ch, leafAdj))
271
+ changed = true;
272
+ }
273
+ const sibs = node.children;
274
+ const n = sibs.length;
275
+ if (n < 2)
276
+ return changed;
277
+ for (let i = 0; i < n - 1; i++) {
278
+ if (barycenterReorder(sibs, i, i + 1, leafAdj))
279
+ changed = true;
280
+ }
281
+ for (let i = n - 1; i > 0; i--) {
282
+ if (barycenterReorder(sibs, i, i - 1, leafAdj))
283
+ changed = true;
284
+ }
285
+ return changed;
286
+ }
287
+ function barycenterReorder(sibs, fixedIdx, freeIdx, adj) {
288
+ const free = sibs[freeIdx];
289
+ if (free.t !== "group")
290
+ return false;
291
+ const fixedLeaves = collectLeavesOrdered(sibs[fixedIdx]);
292
+ const fixedPos = new Map(fixedLeaves.map((leaf, idx) => [leaf, idx]));
293
+ const keyed = free.children.map((ch, chIdx) => {
294
+ const positions = [];
295
+ for (const leaf of collectLeavesOrdered(ch)) {
296
+ for (const adjLeaf of adj.get(leaf) ?? []) {
297
+ if (fixedPos.has(adjLeaf))
298
+ positions.push(fixedPos.get(adjLeaf));
299
+ }
300
+ }
301
+ const bary = positions.length
302
+ ? positions.reduce((a, b) => a + b, 0) / positions.length
303
+ : chIdx;
304
+ return { bary, chIdx, ch };
305
+ });
306
+ keyed.sort((a, b) => (a.bary - b.bary) || (a.chIdx - b.chIdx)); // stable on ties
307
+ const newChildren = keyed.map((t) => t.ch);
308
+ if (newChildren.length === free.children.length
309
+ && newChildren.every((c, i) => c === free.children[i])) {
310
+ return false;
311
+ }
312
+ free.children = newChildren;
313
+ return true;
314
+ }
315
+ // ── Edge routing helpers ───────────────────────────────────────────────
316
+ function routeEdges(diagram, rowYs) {
317
+ for (const e of diagram.edges) {
318
+ if (e.via.length)
319
+ continue; // respect explicit waypoints
320
+ if (e.route === "over")
321
+ e.via = routeOver(diagram, e, rowYs);
322
+ else if (e.route === "under")
323
+ e.via = routeUnder(diagram, e, rowYs);
324
+ // "auto" → no via; the renderer's auto-elbow handles it.
325
+ }
326
+ }
327
+ function nearestRow(rowYs, y) {
328
+ let best = 0;
329
+ let bestD = Infinity;
330
+ for (let i = 0; i < rowYs.length; i++) {
331
+ const d = Math.abs(rowYs[i] - y);
332
+ if (d < bestD) {
333
+ bestD = d;
334
+ best = i;
335
+ }
336
+ }
337
+ return best;
338
+ }
339
+ function routeOver(diagram, e, rowYs) {
340
+ const src = getComponent(diagram, e.src);
341
+ const dst = getComponent(diagram, e.dst);
342
+ const [sa, da] = resolveAnchors(e, src, dst);
343
+ const sp = anchor(src, sa);
344
+ const dp = anchor(dst, da);
345
+ const srcRow = nearestRow(rowYs, src.pos[1]);
346
+ if (srcRow === 0) {
347
+ const tops = diagram.components
348
+ .filter((c) => c.shape !== "annotation")
349
+ .map((c) => c.pos[1] - componentHalf(c)[1]);
350
+ const topOfContent = tops.length ? Math.min(...tops) : 0;
351
+ const overY = Math.max(14, topOfContent - 30);
352
+ return [[sp[0], overY], [dp[0], overY]];
353
+ }
354
+ const TOL = 5;
355
+ const prevRowY = rowYs[srcRow - 1];
356
+ const currRowY = rowYs[srcRow];
357
+ const prevCells = diagram.components.filter((c) => Math.abs(c.pos[1] - prevRowY) < TOL);
358
+ const currCells = diagram.components.filter((c) => Math.abs(c.pos[1] - currRowY) < TOL);
359
+ const prevBottom = prevCells.length
360
+ ? Math.max(...prevCells.map((c) => c.pos[1] + componentHalf(c)[1] + (LABEL_HEIGHT[c.shape] ?? 0)))
361
+ : prevRowY;
362
+ const currTop = currCells.length
363
+ ? Math.min(...currCells.map((c) => c.pos[1] - componentHalf(c)[1]))
364
+ : currRowY;
365
+ const overY = Math.floor((prevBottom + currTop) / 2);
366
+ return [[sp[0], overY], [dp[0], overY]];
367
+ }
368
+ function routeUnder(diagram, e, rowYs) {
369
+ const src = getComponent(diagram, e.src);
370
+ const dst = getComponent(diagram, e.dst);
371
+ const [sa, da] = resolveAnchors(e, src, dst);
372
+ const sp = anchor(src, sa);
373
+ const dp = anchor(dst, da);
374
+ const srcRow = nearestRow(rowYs, src.pos[1]);
375
+ if (srcRow + 1 >= rowYs.length) {
376
+ const yy = Math.max(sp[1], dp[1]) + 36;
377
+ return [[sp[0], yy], [dp[0], yy]];
378
+ }
379
+ const TOL = 5;
380
+ const srcRowY = rowYs[srcRow];
381
+ const nextRowY = rowYs[srcRow + 1];
382
+ const srcCells = diagram.components.filter((c) => Math.abs(c.pos[1] - srcRowY) < TOL);
383
+ const nextCells = diagram.components.filter((c) => Math.abs(c.pos[1] - nextRowY) < TOL);
384
+ const rowBottom = srcCells.length
385
+ ? Math.max(...srcCells.map((c) => c.pos[1] + componentHalf(c)[1] + (LABEL_HEIGHT[c.shape] ?? 0)))
386
+ : srcRowY;
387
+ const nextTop = nextCells.length
388
+ ? Math.min(...nextCells.map((c) => c.pos[1] - componentHalf(c)[1]))
389
+ : nextRowY;
390
+ const underY = Math.floor((rowBottom + nextTop) / 2);
391
+ return [[sp[0], underY], [dp[0], underY]];
392
+ }
393
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kymostudio",
3
- "version": "0.2.3",
3
+ "version": "0.2.5",
4
4
  "description": "Diagram-as-code: turn a declarative .diagram DSL — or a standard BPMN 2.0 .bpmn file — into animated SVG / WebP.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",