import { Rect } from '@expofp/geometry';
import { type TextDef, type TextLineDef } from '@expofp/renderer';
import { type FontSizeFactor } from './defs';
export declare function updateLinesScale(lines: TextLineDef[], scale: number, fontSizes: [FontSizeFactor[], FontSizeFactor[]]): boolean;
/**
 * Turns a text def's bounds by whole quarter turns, in one write.
 *
 * Each quarter turn swaps width and height, and two swaps cancel out. So turning by `turns`
 * quarters one at a time lands on the same rect as adding `turns · π/2` once and swapping only
 * when `turns` is odd — no loop needed.
 *
 * The bounds are written in place, not replaced: the drawers keep references to them.
 * @param textDef - The def to turn.
 * @param turns - Signed number of quarter turns, as {@link getQuarterTurns} returns.
 * @returns The same def.
 */
export declare function rotateTextDefByQuarters(textDef: TextDef, turns: number): TextDef;
/**
 * Turns a plain rect by whole quarter turns: the transform {@link rotateTextDefByQuarters} applies,
 * where the swap-on-odd rule is explained. Returns a new rect, since nothing else holds this one.
 * @param rect - The rect to turn.
 * @param turns - Signed number of quarter turns, as {@link getQuarterTurns} returns.
 * @returns The turned rect.
 */
export declare function rotateRectByQuarters(rect: Rect, turns: number): Rect;
/**
 * How many 90° steps a def is behind the camera, signed: the whole distance, so a camera that
 * jumped is caught up with in one write.
 * @param newAngle - The angle turned to, in radians.
 * @param currentRotation - The angle turned from, in radians.
 * @returns The signed number of quarters; `0` within 45° and for a non-finite angle.
 */
export declare function getQuarterTurns(newAngle: number, currentRotation: number): number;
export declare function shouldFlip(newAngle: number, currentRotation: number): boolean;
export declare function flipAngle(angle: number): number;
/**
 * Bounds for an image pinned to a booth's top-right corner, clamped to fit inside the booth.
 * @param rect - The booth.
 * @param size - The image's size at a scale of 1, in CSS pixels. Not a canvas's backing store: that
 *   is in the device pixels it was rasterized at, which says how crisp the image is, not how big.
 * @param padding - The booth's inset, in plan units.
 * @param scale - Plan units per CSS pixel.
 * @returns The bounds.
 */
export declare function getClampedBoundsCanvas(rect: Rect, size: {
    readonly width: number;
    readonly height: number;
}, padding: number, scale: number): Rect;
/**
 * Reads the `roll` map setting — `1`/`0`, from the URL or the venue — as a boolean, refusing
 * anything else. The label configs consult it before declaring their `onRoll` rules: with roll
 * disabled the plan never turns, so a counter-rotation would only ever fight a stale angle.
 */
export declare function getRollValue(value: 1 | 0): boolean;
//# sourceMappingURL=update-def.d.ts.map