import { type AnyNode } from '@pascal-app/core'; import * as THREE from 'three'; import { type GlbInteractiveItem } from './glb-interactive'; /** * A pointer on the baked building, handed to the host's selection rules: the * baked node under it (its `pascalId`) and the hit in its level's local XZ, * or null for empty space. */ export type GlbPickEvent = { type: 'click' | 'hover'; pick: { nodeId: string; point: [number, number] | null; } | null; modifiers: { alt: boolean; ctrl: boolean; meta: boolean; shift: boolean; }; }; /** Walkthrough HUD state, reported each frame: the floor/room the camera is in * and the interactive part directly in view (for the reticle prompt). */ export type GlbWalkthrough = { zoneLabel: string | null; floorLabel: string | null; door: { label: string; isOpen: boolean; verb?: string; } | null; } | null; type HitCandidate = { object: THREE.Object3D; point: THREE.Vector3; }; /** * The baked node under a pointer that a click can land on: the nearest hit * whose identity is not a kind that only frames (site, building, level, zone, * ceiling) and is not on a hidden floor, with the hit in its level's local XZ. */ export declare function resolveGlbPick(hits: readonly HitCandidate[], identity: ReadonlyMap): (NonNullable & { hitObject: THREE.Object3D; }) | null; /** * GLB-consuming viewer scene. Loads a baked artifact and drives the viewer's * presentation and interaction with no parametric scene graph. A pointer * becomes a `GlbPickEvent` the host runs through its selection rules (the * same rules as the parametric viewer); the shared `useViewer.selection` and * `hoveredId` then drive the outline, and openables play their baked clips * when clicked. The host disables the parametric `SelectionManager` * (`selectionManager="custom"`). */ export declare function GlbScene({ url, interactiveItems, referenceNodes, replaceNodes, onObjectsChange, onPick, onWalkthroughChange, }: { url: string; /** Light / animation effects + controls recovered from the DB scene graph, * joined to the baked nodes by `pascalId` to re-light + re-animate the GLB. */ interactiveItems?: GlbInteractiveItem[]; /** Scan / guide nodes from the scene graph, re-added at runtime (they're * stripped from the bake). Already filtered by the privacy flags upstream. */ referenceNodes?: AnyNode[]; /** `bake: 'replace'` nodes (e.g. plugin trees): baked static but re-rendered * live here via their `bakeReplaceRenderer`; the baked meshes are hidden. */ replaceNodes?: AnyNode[]; /** pascalId → baked object, so the host can place room pills and frame nodes. */ onObjectsChange?: (objects: ReadonlyMap) => void; /** Clicks and hovers on the building; without it the scene is look-only. */ onPick?: (event: GlbPickEvent) => void; onWalkthroughChange?: (state: GlbWalkthrough) => void; }): import("react").JSX.Element; export {}; //# sourceMappingURL=glb-scene.d.ts.map