export type HudAnchor = "top-left" | "top" | "top-right" | "left" | "center" | "right" | "bottom-left" | "bottom" | "bottom-right"; export interface HudPlacement { anchor: HudAnchor; dx: number; dy: number; } export interface HudRect { x: number; y: number; width: number; height: number; } export interface HudSize { width: number; height: number; } export interface HudPanelState { id: string; placement: HudPlacement; z: number; moved: boolean; width?: number; height?: number; visible: boolean; type?: string; } export interface HudLayoutState { panels: Record; locked: boolean; editing: boolean; } export interface HudLayoutOptions { snap?: number; locked?: boolean; /** * Called after a panel placement/size is authored (move, resize, hydrate from document). * Canvas mode + agent RPCs use this to write undoable scene-document patches. */ onDocumentPatch?: (id: string, panel: import("./hudDocument.js").EditorUiPanelLayout) => void; } /** @internal */ export declare function isPanelDraggable(state: HudLayoutState, id: string): boolean; export interface HudLayoutStore { getState(): HudLayoutState; subscribe(listener: (state: HudLayoutState) => void): () => void; register(id: string, placement: HudPlacement, options?: { width?: number; height?: number; visible?: boolean; type?: string; }): void; move(id: string, rect: HudRect, viewport: HudSize): void; resize(id: string, size: HudSize): void; setVisible(id: string, visible: boolean): void; bringToFront(id: string): void; setLocked(locked: boolean): void; setEditing(editing: boolean): void; reset(id?: string): void; serialize(): string; hydrate(raw: string | null | undefined): void; /** Apply scene-document `ui` section as the source of truth for registered/pending panels. */ applyDocumentUi(ui: import("./hudDocument.js").EditorUiDocument | undefined): void; /** Snapshot moved/resized panels as a document ui section. */ toDocumentUi(): import("./hudDocument.js").EditorUiDocument; } export declare const HUD_ANCHOR_FRACTIONS: Record; /** @internal */ export declare function isHudAnchor(value: unknown): value is HudAnchor; /** @internal */ export declare function anchoredPlacement(anchor: HudAnchor, inset: { x: number; y: number; }): HudPlacement; /** @internal */ export declare function nearestAnchor(rect: HudRect, viewport: HudSize): HudAnchor; /** @internal */ export declare function clampRect(rect: HudRect, viewport: HudSize): HudRect; /** @internal */ export declare function placementFromRect(rect: HudRect, viewport: HudSize, snap?: number): HudPlacement; /** @internal */ export declare function rectFromPlacement(placement: HudPlacement, size: HudSize, viewport: HudSize): HudRect; /** @internal Agent bridge seam — HudCanvas registers its store while mounted so headless drivers can reach canvas mode. */ export declare function registerActiveHudLayout(store: HudLayoutStore): () => void; /** @internal */ export declare function listActiveHudLayouts(): HudLayoutStore[]; /** * @internal Notified whenever a `HudCanvas` mounts or unmounts (the active-layout set changes). * Lets the editor's HUD-layout surface enable editing on layouts that mount after it opens. */ export declare function subscribeActiveHudLayouts(listener: () => void): () => void; /** @internal */ export declare function createHudLayout(options?: HudLayoutOptions): HudLayoutStore;