weasel API - v0.8.0
    Preparing search index...

    Type Alias GroupTransform

    GroupTransform:
        | { dx: number; dy: number; kind: "translate" }
        | {
            kind: "scale";
            pivot: { x: number; y: number };
            sx: number;
            sy: number;
        }
        | { angle: number; kind: "rotate"; pivot: { x: number; y: number } }

    Uniform group transform proposed by a gesture and shaped by behaviors. Applied identically to every dragged id so a multi-select gesture cannot drift apart (the historical bug: snap shifted only the primary, secondaries kept the raw cursor delta).

    v1 of the migration: only 'translate' is wired end-to-end. 'scale' and 'rotate' exist for forward compatibility — useResize already remaps each leaf via geom.remapBounds, and useRotate is single-id-pivot-bound, so neither suffers the multi-select drift 'translate' did. Migrate those gestures to emit GroupTransform in a follow-up.