commits
tags
// Enkel vertikal staplning av toppnivånoderna. Använder uppmätta höjder när de
// finns, annars en gissning. Fästa positioner (användaren har dragit noden)
// respekteras om `pinned` innehåller id:t.
const GAP = 40;
const FALLBACK_H = 180;
const X = 0;
export interface Measured {
width: number;
height: number;
}
export function stackLayout(
order: string[],
measured: Map<string, Measured>,
pinned: Record<string, { x: number; y: number }> = {},
): Record<string, { x: number; y: number }> {
const pos: Record<string, { x: number; y: number }> = {};
let y = 0;
for (const id of order) {
if (pinned[id]) {
pos[id] = pinned[id];
const h = measured.get(id)?.height ?? FALLBACK_H;
y = Math.max(y, pinned[id].y + h + GAP);
continue;
}
pos[id] = { x: X, y };
y += (measured.get(id)?.height ?? FALLBACK_H) + GAP;
}
return pos;
}