import type { CellEvidence } from "../../../playwright/src/cell-runner.js";
import type { MatrixCell } from "../../../schema/src/records/context.js";
export declare const MEASURED_LAYOUT_DETECTOR_VERSION = "1.0.0";
export declare const MEASURED_LAYOUT_RULE_IDS: readonly ["UI-091", "UI-092", "UI-093", "UI-094", "UI-095", "UI-096", "UI-097", "UI-098"];
export type MeasuredLayoutRuleId = (typeof MEASURED_LAYOUT_RULE_IDS)[number];
export type MeasuredLayoutRect = {
    x: number;
    y: number;
    width: number;
    height: number;
};
export type MeasuredLayoutViewport = {
    width: number;
    height: number;
    clientWidth: number;
    clientHeight: number;
    deviceScaleFactor: number;
    scrollX: number;
    scrollY: number;
};
export type MeasuredLayoutVisibility = {
    display: string;
    visibility: string;
    opacity: number;
    visible: boolean;
    zeroArea: boolean;
};
export type MeasuredLayoutCornerRadius = {
    horizontal: number;
    vertical: number;
};
export type MeasuredLayoutBorderWidths = {
    top: number;
    right: number;
    bottom: number;
    left: number;
};
export type MeasuredLayoutBorderRadii = {
    topLeft: MeasuredLayoutCornerRadius;
    topRight: MeasuredLayoutCornerRadius;
    bottomRight: MeasuredLayoutCornerRadius;
    bottomLeft: MeasuredLayoutCornerRadius;
};
export type MeasuredLayoutTransform = {
    css: string;
    matrix: number[] | null;
    axisAligned: boolean;
    normalized: boolean;
};
export type MeasuredLayoutFlexGridTopology = {
    kind: "none" | "flex" | "grid";
    flexDirection: string | null;
    flexWrap: string | null;
    flexLine: number | null;
    flexOrder: number | null;
    gridRow: number | null;
    gridColumn: number | null;
    gridRowSpan: number | null;
    gridColumnSpan: number | null;
    gridTrackCount: number | null;
    gridTrackWidths: number[];
    gridTrackGaps: number[];
};
export type MeasuredLayoutScrollContainerState = {
    isScrollContainer: boolean;
    overflowX: string;
    overflowY: string;
    scrollX: number;
    scrollY: number;
    scrollWidth: number;
    scrollHeight: number;
    clientWidth: number;
    clientHeight: number;
};
export type MeasuredLayoutTextLineRect = {
    lineIndex: number;
    rect: MeasuredLayoutRect;
    baseline: number | null;
};
export type MeasuredLayoutNode = {
    identity: string;
    structuralSignature: string;
    componentIdentity: string | null;
    stateSignature: string;
    parent: string | null;
    containingBlock: string | null;
    compositeAncestor: string | null;
    svgRoot: string | null;
    borderBox: MeasuredLayoutRect;
    contentBox: MeasuredLayoutRect;
    childUnionBox: MeasuredLayoutRect | null;
    visibility: MeasuredLayoutVisibility;
    position: string;
    viewportPinned: boolean;
    direction: "ltr" | "rtl";
    writingMode: string;
    transform: MeasuredLayoutTransform;
    borderWidths: MeasuredLayoutBorderWidths;
    borderRadii: MeasuredLayoutBorderRadii;
    flexGridTopology: MeasuredLayoutFlexGridTopology;
    scrollContainerState: MeasuredLayoutScrollContainerState;
    textLineRects: MeasuredLayoutTextLineRect[];
    intrinsicAspectRatio: number | null;
};
export type MeasuredLayoutAxis = "x" | "y" | "inline" | "block" | "horizontal" | "vertical";
export type MeasuredLayoutRelation = "sibling" | "region-adjacent" | "contains" | "aligned" | "same-track";
export type MeasuredLayoutLogicalEdgeOffsets = {
    logicalStart: number;
    logicalEnd: number;
    blockStart: number;
    blockEnd: number;
};
export type MeasuredLayoutEdge = {
    source: string;
    target: string;
    relation: MeasuredLayoutRelation;
    axis: MeasuredLayoutAxis;
    layoutOrder: number;
    signedClearance: number;
    perpendicularOverlap: number;
    logicalEdgeOffsets: MeasuredLayoutLogicalEdgeOffsets;
    interveningPaintedNodeIdentities: string[];
};
export type JitterEnvelope = {
    sampleCount: number;
    maxDeltaByField: Record<string, number>;
};
export type MeasuredLayoutSettledState = {
    atRest: boolean;
    scrollX: number;
    scrollY: number;
    signal: "app" | "quiet-windows";
    timedOut: boolean;
    phases: Record<string, number>;
};
export type MeasuredLayoutGraph = {
    version: string;
    cellId: string;
    coordinateSpace: "css-pixels";
    normalizedAtRest: true;
    viewport: MeasuredLayoutViewport;
    nodes: MeasuredLayoutNode[];
    edges: MeasuredLayoutEdge[];
};
export type MeasuredLayoutProbe = {
    measuredLayoutGraph: MeasuredLayoutGraph;
    jitterEnvelope: JitterEnvelope;
    settledState: MeasuredLayoutSettledState;
};
export type MeasuredLayoutArtifactRef = {
    relativePath: string;
    contentHash: string;
    mediaType: string;
    sourceRunId?: string;
    dimensions?: {
        width: number;
        height: number;
    };
};
export type MeasuredLayoutCellEvidence = CellEvidence & {
    measuredLayoutProbe: MeasuredLayoutProbe;
    measuredLayoutArtifacts: {
        fullScreenshot: MeasuredLayoutArtifactRef;
    };
};
export type MeasuredLayoutMatrixEvidence = {
    matrixId: string;
    cells: MeasuredLayoutCellEvidence[];
};
export type MeasuredLayoutMeasurement = {
    rawMeasurement: unknown;
    modalValue: unknown;
    peerIdentities: string[];
    [key: string]: unknown;
};
export type MeasuredLayoutViolationFact = {
    ruleId: MeasuredLayoutRuleId;
    kind: string;
    locator: string;
    summary: string;
    measurement: MeasuredLayoutMeasurement;
};
export type Ui001EvidenceRecord = {
    ruleId: MeasuredLayoutRuleId;
    route: string;
    url: string;
    role: string;
    locale: string;
    viewport: MatrixCell["viewport"];
    state: MatrixCell["state"];
    actions: MatrixCell["actions"];
    timestampPhase: string;
    targetLocator: string;
    measuredEvidence: Record<string, unknown>;
    screenshotRefs: string[];
    detectorVersion: string;
    classificationBasis: string;
    violation: MeasuredLayoutViolationFact;
};
//# sourceMappingURL=types.d.ts.map