export type ConversationMenuAnchor = Pick; export interface ConversationMenuPoint { x: number; y: number; } /** Only the narrow shared edge is traversable, not the space below the card. */ export declare function conversationMenuHoverBridge(anchor: ConversationMenuAnchor, menu: ConversationMenuAnchor): ConversationMenuAnchor | undefined; /** One document-level host, outside workspace clipping and without its own stacking context. */ export declare function conversationMenuLayer(doc: Document): HTMLElement; export declare function conversationMenuPosition(anchor: ConversationMenuAnchor, width: number, height: number, viewport: { width: number; height: number; }): { left: number; top: number; }; export interface ConversationMenuHoverRequest { focusMenu: boolean; anchor(): ConversationMenuAnchor; checkPointer(target: EventTarget | null, point?: ConversationMenuPoint): void; onClose(focus?: boolean): void; } interface ConversationMenuHoverAdapter { open(request: ConversationMenuHoverRequest): boolean; close(): void; position(): void; contains(target: EventTarget | null): boolean; /** Visible menu layers in the anchor document's viewport coordinates; main menu first. */ bounds(): ConversationMenuAnchor[]; } /** Timing, dismissal, keyboard entry and mutual exclusion are identical for both lists. */ export declare function watchConversationMenuHover(anchor: HTMLElement, adapter: ConversationMenuHoverAdapter): () => void; export {}; //# sourceMappingURL=conversation-menu-layer.d.ts.map