import { type ClientDirective, type NormalizedReviveOptions } from "./contract.js";
export type GateResult = {
    kind: "visible";
    attribute: string;
    rawValue: string;
    rootMargin: string;
    threshold: number;
} | {
    kind: "media";
    attribute: string;
    rawValue: string;
    query: string | null;
} | {
    kind: "custom";
    attribute: string;
    value: string;
    directive: ClientDirective;
} | {
    kind: "idle";
    attribute: string;
    timeout: number;
    invalid: boolean;
    rawValue: string;
} | {
    kind: "defer";
    attribute: string;
    delay: number;
    invalid: boolean;
    rawValue: string;
} | {
    kind: "interaction";
    attribute: string;
    rawValue: string;
    events: string[];
    invalidTokens: string[];
    emptyTokens: boolean;
    usedDefaultEvents: boolean;
};
export type GateWarning = {
    kind: "emptyMediaQuery";
    attribute: string;
} | {
    kind: "invalidIdleValue";
    attribute: string;
    rawValue: string;
    defaultMs: number;
} | {
    kind: "invalidDeferValue";
    attribute: string;
    rawValue: string;
    defaultMs: number;
} | {
    kind: "emptyInteractionTokens";
    attribute: string;
} | {
    kind: "invalidInteractionTokens";
    attribute: string;
    invalidTokens: string[];
    usedDefaultEvents: boolean;
};
export type BuiltInGateResult = Exclude<GateResult, {
    kind: "custom";
}>;
export type CustomGateResult = Extract<GateResult, {
    kind: "custom";
}>;
export interface GatePlan {
    /** All gates in built-in order followed by custom directives. */
    gates: GateResult[];
    /** Custom directive gates only, for custom directive execution. */
    customGates: CustomGateResult[];
    /** Canonical description used for same-Tag conflict detection. */
    conflictSignature: string;
    /** Raw-value description parts for pre-Activation debug logging. */
    initialDiagnosticParts: string[];
    /** Structured warning facts from invalid built-in Gate states. */
    warnings: GateWarning[];
}
export interface DirectiveSpine {
    readGates(el: HTMLElement): GateResult[];
    planGates(el: HTMLElement): GatePlan;
    describe(el: HTMLElement): string;
    attributeNames: ReadonlySet<string>;
}
export declare function createDirectiveSpine(directives?: NormalizedReviveOptions["directives"]): DirectiveSpine;
export declare function extendDirectiveSpine(base: DirectiveSpine, customDirectives?: Map<string, ClientDirective>): DirectiveSpine;
export declare const DEFAULT_DIRECTIVE_SPINE: DirectiveSpine;
