/**
 * Coachmark Molecule
 *
 * A controlled, externally-anchored popover for onboarding hints. Unlike
 * Popover (uncontrolled, wraps its own trigger), a Coachmark is driven by
 * `open` and points at an element it does not own — a tab button, the persona
 * menu, a canvas node — resolved from a ref, a CSS selector, or a DOMRect.
 * Portals to document.body so it escapes the canvas/preview transform contexts.
 */
import React from "react";
export type CoachmarkPlacement = "top" | "bottom" | "left" | "right";
export type CoachmarkAnchor = React.RefObject<HTMLElement | null> | string | DOMRect;
export interface CoachmarkProps {
    /** Controlled visibility. */
    open: boolean;
    /** The element to point at: a ref, a CSS selector, or a DOMRect. */
    anchor: CoachmarkAnchor;
    /** Side of the anchor to render on. @default 'bottom' */
    placement?: CoachmarkPlacement;
    title?: string;
    children: React.ReactNode;
    /** Close (X) handler — always rendered. */
    onDismiss: () => void;
    /** Optional filled primary action (e.g. Next / Got it). */
    onPrimary?: () => void;
    primaryLabel?: string;
    /** Optional ghost secondary action (e.g. Skip). */
    onSecondary?: () => void;
    secondaryLabel?: string;
    /** Render a pulsing beacon dot over the anchor (keystone hints). */
    showBeacon?: boolean;
    className?: string;
}
/**
 * Tracks the live bounding rect of an anchor while `active`. Re-reads on
 * scroll/resize, and polls a few frames so a selector that mounts just after
 * activation (a freshly-revealed tab) still resolves.
 */
export declare function useAnchorRect(anchor: CoachmarkAnchor, active: boolean): DOMRect | null;
export declare const Coachmark: React.FC<CoachmarkProps>;
