import type { PlacementState } from './placementCore'; import type { PlacementCapabilities, PlacementMode, PlacementTarget } from './placementTarget'; import type { PointCloudPlacement } from '../pointcloud/pointCloudPlacement'; import type * as THREE from 'three'; type ChangedListener = (state: PlacementState | null) => void; /** The slice of a placement session React reads. Both the core and its adapters satisfy it. */ export interface PlacementStateSource { readonly activeTarget: PlacementTarget | null; readonly mode: PlacementMode; readonly pivot: THREE.Vector3 | null; readonly capabilities: PlacementCapabilities | null; placement(): PointCloudPlacement | null; onChanged: { add(listener: ChangedListener): void; remove(listener: ChangedListener): void; }; } /** Mirrors the live placement session into React. The component owns it; this reads. */ export declare function usePlacementState(source: PlacementStateSource | null): PlacementState | null; export {}; //# sourceMappingURL=usePlacementState.d.ts.map