/** * BCF 3D Overlay Renderer — pure DOM, no framework dependency. * * Renders BCFMarker3D items as positioned HTML elements overlaid on a 3D * canvas. Works with any renderer that implements BCFOverlayProjection. * * Features: * - Markers anchored to 3D objects — track correctly during orbit/pan/zoom * - Color-coded by priority / status * - Click, hover callbacks * - Continuous re-projection every frame via onCameraChange * - Connector lines from marker to projected anchor point * - Depth-based scaling (farther markers appear smaller) */ import type { BCFMarker3D, BCFOverlayProjection } from './overlay.js'; export interface BCFOverlayRendererOptions { /** Show connector lines from marker to 3D anchor (default true) */ showConnectors?: boolean; /** Show tooltip on hover (default true) */ showTooltips?: boolean; /** Minimum marker scale at far distance (default 0.65) */ minScale?: number; /** Maximum marker scale at near distance (default 1.0) */ maxScale?: number; /** Offset in pixels above the projected point (default 36) */ verticalOffset?: number; } export declare class BCFOverlayRenderer { private container; private svgLayer; private markerElements; private connectorElements; private markers; private activeMarkerId; private projection; private unsubCamera; private clickCallbacks; private hoverCallbacks; private opts; private _visible; private _disposed; constructor(parentElement: HTMLElement, projection: BCFOverlayProjection, options?: BCFOverlayRendererOptions); /** Update the set of markers to display */ setMarkers(markers: BCFMarker3D[]): void; /** Highlight a specific marker as active */ setActiveMarker(topicGuid: string | null): void; /** Show/hide the entire overlay layer */ setVisible(visible: boolean): void; /** Register click callback */ onMarkerClick(callback: (topicGuid: string) => void): () => void; /** Register hover callback */ onMarkerHover(callback: (topicGuid: string | null) => void): () => void; /** * Re-project all markers from world space to screen space. * Called directly from the camera-change polling RAF — no extra * scheduling, so markers track the camera with zero frame delay. */ updatePositions(): void; /** Clean up all DOM elements and listeners */ dispose(): void; private createMarkerElement; private updateMarkerContent; private updateMarkerInnerHTML; private getPriorityColor; private escapeHtml; private static stylesInjected; private injectStyles; } //# sourceMappingURL=overlay-renderer.d.ts.map