import type { FixCluster } from "../fix/cluster.js";
import type { ResolvedConfig } from "../types.js";
/** Which side of the fix a frame is a picture of. */
export type FrameSide = "before" | "after";
export interface Frame {
/** Relative to the issue's folder, e.g. `img/pre/web-app-root--dark.png`. */
path: string;
route: string;
/** "web", or the device platform. Absent on frames frozen before devices were recorded. */
platform?: string;
formFactor: string;
scheme: string;
state?: string;
/** When this frame was frozen. */
at: string;
/**
* The shot this is a copy of, and the hash of its pixels at freeze time.
* What lets a never-ruled issue be verified against the defect as filed
* rather than against whatever the workspace holds now. Absent on frames
* frozen before these were recorded; both are recovered from the file.
*/
shotId?: string;
hash?: string;
}
export interface FrameSet {
schema: 2;
before: Frame[];
after: Frame[];
}
/** Where this frame is on disk, wherever the issue's folder is right now. */
export declare function frameAbsPath(resolved: ResolvedConfig, id: string, f: Frame): string;
/**
* The frame in the two path forms the page needs: `path` relative to the
* project's `.lookout/` (which is how the ui's routes serve it, `issues/...`
* distinguishing it from a workspace shot), and `absPath` for whoever wants
* the file itself.
*/
export declare function frameServedPath(resolved: ResolvedConfig, id: string, f: Frame): {
path: string;
absPath: string;
};
/** The frames kept for this issue, or an empty set. */
export declare function loadFrames(resolved: ResolvedConfig, id: string): Promise