import type { ActivationInteractionCoverageEvidence, ActivationInteractionCoverageKind, InteractionArtifactRef, InteractionCoverageObligation, InteractionCoverageSerialization, InteractionCoverageWitnessRef, JsonObservation, PreconditionCoverageObligation, PreconditionInteractionCoverageEvidence, PreconditionObligationEvidence } from "../../../schema/src/records/coverage.js";
import type { CellEvidence } from "../../../playwright/src/cell-runner.js";
import type { MatrixCell } from "../../../schema/src/records/context.js";
import type { ContinuityScenario } from "../../../universal/fixtures/continuity/types.js";
export declare const INTERACTION_DETECTOR_VERSION = "1.0.0";
export declare const INTERACTION_RULE_IDS: readonly ["UI-033", "UI-035", "UI-036", "UI-037", "UI-038"];
export type InteractionRuleId = (typeof INTERACTION_RULE_IDS)[number];
export type InteractionFixtureVariant = "positive" | "negative" | "intentional-exception" | "rtl" | "changed-fingerprint";
export type InteractionDimensionState = {
    promised: unknown;
    observed: unknown;
    matches: boolean;
};
export type InteractionPromiseCheck = {
    scenarioId: string;
    locator: string;
    promisedOutcome: string;
    visualStateChanged: boolean;
    dimensions: {
        accessible: InteractionDimensionState;
        dom: InteractionDimensionState;
        styles: InteractionDimensionState;
        url: InteractionDimensionState;
        storage: InteractionDimensionState;
        network: InteractionDimensionState;
        sideEffects: InteractionDimensionState;
    };
};
export type ItemIdentityObservation = {
    itemId: string;
    localState: unknown;
};
export type ItemIdentityScenario = {
    scenarioId: string;
    kind: "item-identity";
    operation: "reorder" | "pagination" | "virtualization" | "insertion" | "deletion" | "optimistic-reconciliation";
    items: ItemIdentityObservation[];
    observedAfterOperation: ItemIdentityObservation[];
};
export type HiddenInertScenario = {
    scenarioId: string;
    kind: "hidden-inert-action";
    locator: string;
    inertReason: "hidden" | "inert" | "aria-hidden" | "disabled";
    focusable: boolean;
    hitTestActivates: boolean;
    announcedActionable: boolean;
    keyboardActivates: boolean;
    sideEffectEmitted: boolean;
};
export type InteractionScenario = ContinuityScenario | ItemIdentityScenario | HiddenInertScenario;
export type InteractionProbe = {
    continuityVersion: string;
    scenarios: InteractionScenario[];
    promiseChecks: InteractionPromiseCheck[];
};
export type { ActivationInteractionCoverageEvidence, ActivationInteractionCoverageKind, InteractionArtifactRef, InteractionCoverageObligation, InteractionCoverageSerialization, InteractionCoverageWitnessRef, JsonObservation, PreconditionCoverageObligation, PreconditionInteractionCoverageEvidence, PreconditionObligationEvidence, };
export type InteractionCellEvidence = CellEvidence & {
    interactionProbe?: InteractionProbe;
    journeyEvidence?: {
        before: JourneyBrowserState;
        after: JourneyBrowserState;
        promiseChecks: DerivedPromiseCheck[];
    };
    interactionArtifacts: {
        fullScreenshot: InteractionArtifactRef;
    };
};
export type JourneyBrowserState = {
    accessible: JsonObservation;
    dom: JsonObservation;
    styles: JsonObservation;
    url: JsonObservation;
    storage: JsonObservation;
    network: JsonObservation;
    focus: JsonObservation;
    hitTest: JsonObservation;
};
export type JourneyPromiseDimension = keyof JourneyBrowserState;
export type DerivedPromiseCheck = {
    id: string;
    dimension: JourneyPromiseDimension;
    path: string;
    operator: "exists" | "absent" | "equals";
    passed: boolean;
    before: JsonObservation | undefined;
    after: JsonObservation | undefined;
};
export type DiscoverySource = "native" | "accessibility" | "shadow" | "frame" | "tab";
export type DiscoveredControl = {
    kind: string;
    role: string;
    stateSchema: string[];
    nameClass: string;
    accessibleName?: string;
    landmark: string;
    subtreeFingerprint: string;
    disabled: boolean;
    current: boolean;
    expanded: boolean;
    sameOriginLink: boolean;
    validates: boolean;
    ariaPressed?: string;
    path: string;
    sources: DiscoverySource[];
    boundaries: Array<"representative" | "first" | "last" | "current" | "expanded" | "disabled">;
};
export type InteractionDiscovery = {
    controls: DiscoveredControl[];
    digest: string;
};
export type InteractionCoverageKind = ActivationInteractionCoverageKind;
export type PreconditionInteractionCoverageKind = "unproven-precondition";
export type InteractionCoveragePhase = InteractionCoverageSerialization["phase"];
type PreconditionEvidenceOf<K extends PreconditionObligationEvidence["unproven"]> = Extract<PreconditionObligationEvidence, {
    unproven: K;
}>;
export type MissingExpectedPreconditionEvidence = PreconditionEvidenceOf<"missing-expected">;
export type MissingObservedPreconditionEvidence = PreconditionEvidenceOf<"missing-observed">;
export type MissingSetupPreconditionEvidence = PreconditionEvidenceOf<"missing-setup">;
export type MissingLocatorPreconditionEvidence = PreconditionEvidenceOf<"missing-locator">;
export type MissingWitnessPreconditionEvidence = PreconditionEvidenceOf<"missing-witness">;
export type MissingArtifactPreconditionEvidence = PreconditionEvidenceOf<"missing-artifact">;
export type MissingExpectedAndObservedPreconditionEvidence = PreconditionEvidenceOf<"missing-expected-and-observed">;
export type MissingSetupAndLocatorPreconditionEvidence = PreconditionEvidenceOf<"missing-setup-and-locator">;
export type MissingLocatorAndWitnessPreconditionEvidence = PreconditionEvidenceOf<"missing-locator-and-witness">;
export type MissingWitnessAndArtifactPreconditionEvidence = PreconditionEvidenceOf<"missing-witness-and-artifact">;
export type UnrecognizedPreconditionGapEvidence = PreconditionEvidenceOf<"unrecognized-precondition-gap">;
export type InteractionCoverageEvidence = ActivationInteractionCoverageEvidence | PreconditionInteractionCoverageEvidence;
export type DiscoveredControlCoverageOutcome = {
    status: "coverage-incomplete";
    reason: ActivationInteractionCoverageKind;
    phase: "activation";
    evidence: ActivationInteractionCoverageEvidence;
    witnessRefs: [InteractionCoverageWitnessRef, ...InteractionCoverageWitnessRef[]];
};
export type ActivationInteractionCoverageSerialization = Extract<InteractionCoverageSerialization, {
    phase: "activation";
}>;
export type PreconditionInteractionCoverageSerialization = Extract<InteractionCoverageSerialization, {
    phase: "precondition";
}>;
export type BareInteractionCoverageRow = {
    gapKind: string;
    control: {
        accessibleName: string;
        locator: string;
    };
};
export declare const preconditionEvidence: {
    readonly missingExpected: (input: Omit<MissingExpectedPreconditionEvidence, "unproven">) => MissingExpectedPreconditionEvidence;
    readonly missingObserved: (input: Omit<MissingObservedPreconditionEvidence, "unproven">) => MissingObservedPreconditionEvidence;
    readonly missingSetup: (input: Omit<MissingSetupPreconditionEvidence, "unproven">) => MissingSetupPreconditionEvidence;
    readonly missingLocator: (input: Omit<MissingLocatorPreconditionEvidence, "unproven">) => MissingLocatorPreconditionEvidence;
    readonly missingWitness: (input: Omit<MissingWitnessPreconditionEvidence, "unproven">) => MissingWitnessPreconditionEvidence;
    readonly missingArtifact: (input: Omit<MissingArtifactPreconditionEvidence, "unproven">) => MissingArtifactPreconditionEvidence;
    readonly missingExpectedAndObserved: (input: Omit<MissingExpectedAndObservedPreconditionEvidence, "unproven">) => MissingExpectedAndObservedPreconditionEvidence;
    readonly missingSetupAndLocator: (input: Omit<MissingSetupAndLocatorPreconditionEvidence, "unproven">) => MissingSetupAndLocatorPreconditionEvidence;
    readonly missingLocatorAndWitness: (input: Omit<MissingLocatorAndWitnessPreconditionEvidence, "unproven">) => MissingLocatorAndWitnessPreconditionEvidence;
    readonly missingWitnessAndArtifact: (input: Omit<MissingWitnessAndArtifactPreconditionEvidence, "unproven">) => MissingWitnessAndArtifactPreconditionEvidence;
    readonly unrecognizedGap: (input: Omit<UnrecognizedPreconditionGapEvidence, "unproven">) => UnrecognizedPreconditionGapEvidence;
};
export declare function buildPreconditionCoverageObligation(input: {
    id: string;
    witnessRefs: [InteractionCoverageWitnessRef, ...InteractionCoverageWitnessRef[]];
    unproven: PreconditionObligationEvidence;
}): PreconditionCoverageObligation;
export declare function buildPreconditionInteractionCoverage(input: {
    obligations: [PreconditionCoverageObligation, ...PreconditionCoverageObligation[]];
    control?: {
        accessibleName: string;
        locator: string;
    };
}): PreconditionInteractionCoverageSerialization;
export declare function assertInteractionCoverageSerialization(interaction: unknown): asserts interaction is InteractionCoverageSerialization;
export type CoupledNumericObservation = {
    controlIdentity: string;
    displayIdentity: string;
    before: number;
    baselineAfter: number;
    afterFirst: number;
    afterSecond: number;
};
export type CoupledNumericMissingPhase = "baselineAfter" | "afterFirst" | "afterSecond";
export type LostCoupledNumericMeasurement = {
    kind: "missing";
    controlIdentity: string;
    displayIdentity: string;
    missingPhase: CoupledNumericMissingPhase;
};
export type CoupledNumericMeasurement = {
    kind: "measured";
    observation: CoupledNumericObservation;
} | LostCoupledNumericMeasurement;
export type InteractionFixture = {
    fixtureId: string;
    ruleId: InteractionRuleId;
    variant: InteractionFixtureVariant;
    route: string;
    html: string;
    cell?: Partial<MatrixCell>;
    intentionalContractId?: string;
};
export type InteractionViolationFact = {
    ruleId: InteractionRuleId;
    uniRule?: "UNI-090" | "UNI-091" | "UNI-092" | "UNI-093";
    kind: string;
    locator: string;
    measurement: Record<string, unknown>;
    summary: string;
};
export type Ui001EvidenceRecord = {
    ruleId: InteractionRuleId;
    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: InteractionViolationFact;
};
//# sourceMappingURL=types.d.ts.map