foxygit / RPA-Remisser Log in
commits tags

/webui/frontend/src/lib/layout.ts · 896 B

raw
// 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;
}