interface CoachMarkStep {
    /** Unique key — also used for localStorage persistence */
    id: string;
    /** CSS selector for the target element this step attaches to */
    target: string;
    /** Popover placement side for this step */
    side?: "top" | "bottom" | "left" | "right";
    /** Popover alignment for this step */
    align?: "start" | "center" | "end";
    /** Title shown in the coach mark */
    title: string;
    /** Body text / description */
    description: string;
    /** Optional image URL shown above the content */
    image?: string;
    /** Image alt text (required when image is provided) */
    imageAlt?: string;
}
/** Fired on `window` when any coach flow completes (skip or last step). `detail.flowId` is the completed flow. */
declare const COACH_MARK_FLOW_COMPLETED_EVENT: "exxat-coach-mark-flow-completed";
interface UseCoachMarkOptions {
    /** Unique ID for the entire flow (used as localStorage key) */
    flowId: string;
    /** Steps in order — single-item array for a standalone coach mark */
    steps: CoachMarkStep[];
    /** Delay in ms before the coach mark appears (default 500) */
    delay?: number;
    /** Called when the entire flow is completed or skipped */
    onComplete?: () => void;
    /** If true, always show even if previously dismissed (dev mode) */
    force?: boolean;
    /**
     * When false, the auto-open timer does not run (e.g. until the user switches to a view where the target exists).
     * Default true.
     */
    enabled?: boolean;
    /**
     * If set, auto-open only runs after this flow id is dismissed (localStorage) or completes (same-tab via
     * `COACH_MARK_FLOW_COMPLETED_EVENT`). Used to run a follow-up tour after another flow finishes.
     */
    dependsOnDismissedFlowId?: string;
}
interface CoachMarkState {
    /** Whether the coach mark is currently visible */
    isOpen: boolean;
    /** Current step index (0-based) */
    currentStep: number;
    /** Total number of steps */
    totalSteps: number;
    /** The current step data */
    step: CoachMarkStep | null;
    /** The resolved target element for the current step */
    targetEl: HTMLElement | null;
    /** Virtual anchor rect for Radix positioning */
    anchorRect: {
        x: number;
        y: number;
        width: number;
        height: number;
    } | null;
    /** Whether this is a multi-step flow */
    isFlow: boolean;
    /** Whether we're on the first step */
    isFirst: boolean;
    /** Whether we're on the last step */
    isLast: boolean;
    /** Advance to the next step (or complete if last) */
    next: () => void;
    /** Go back to the previous step */
    prev: () => void;
    /** Skip/dismiss the entire flow */
    skip: () => void;
    /** Programmatically open the coach mark */
    open: () => void;
    /** Reset the flow (clears persistence and starts over) */
    reset: () => void;
}
/** Exported for the Settings page — list all coach mark keys in localStorage */
declare function getAllCoachMarkKeys(): string[];
/** Exported for the Settings page — reset a specific flow */
declare function resetCoachMarkFlow(flowId: string): void;
/** Exported for the Settings page — reset ALL coach marks */
declare function resetAllCoachMarks(): void;
declare function useCoachMark({ flowId, steps, delay, onComplete, force, enabled, dependsOnDismissedFlowId, }: UseCoachMarkOptions): CoachMarkState;

export { COACH_MARK_FLOW_COMPLETED_EVENT, type CoachMarkState, type CoachMarkStep, type UseCoachMarkOptions, getAllCoachMarkKeys, resetAllCoachMarks, resetCoachMarkFlow, useCoachMark };
