import { type PageViewContext } from "../page-viewer/pageViewContext";
import { OverlayRect } from "./overlay/geometry";
import { type PlaceholderZone } from "./overlay/placeholderZones";
import { type InsertionVisualAnchor, type InsertionVisualMode } from "./overlay/InsertionLine";
import { type ComponentFrameInsertColor } from "../componentFrameColors";
type ActiveInsertion = {
    zone: PlaceholderZone;
    placeholderRect: OverlayRect;
    visualMode: InsertionVisualMode;
    visualAnchor: InsertionVisualAnchor;
    visualTargetRect: OverlayRect | null;
    visualOwnerComponentId?: string;
    zoneHovered: boolean;
    color: ComponentFrameInsertColor;
    adjustedIndex: number;
};
/**
 * Full-canvas drop affordance shown while a component/template is being dragged.
 * It drives the continuous {@link InsertionLine} from two sources:
 *
 * - native HTML5 drags (legacy sidebar/tree sources) via the surface's
 *   dragover/drop, with the surface `pointer-events-auto`; and
 * - host/parent-driven pointer gestures (whole-component grab, palette cards)
 *   via forwarded `dragGesture*` events, with the surface `pointer-events-none`
 *   so it never competes with the host's in-iframe pointer capture.
 *
 * Both paths resolve the nearest gap and commit through the same
 * `droppedInPlaceholder` the discrete "+" dots use.
 */
export declare function DragInsertionOverlay({ pageViewContext, onActiveTargetChange, }: {
    pageViewContext?: PageViewContext;
    onActiveTargetChange?: (gapKey: string | null) => void;
}): import("react").JSX.Element | null;
export declare function shrinkSizeProportionally(size: {
    width: number;
    height: number;
}, shrinkPx: number): {
    width: number;
    height: number;
};
export declare function formatActiveInsertionKey(target: ActiveInsertion | null): string;
export declare function formatActiveInsertionVisualKey(target: ActiveInsertion | null): string;
export {};
