import { type AnyNode, type BatchableConfig } from '@pascal-app/core'; import type { BatchCandidate } from './types.js'; /** * Kinds that declare `capabilities.batchable`, re-read when a plugin * registers. Walls keep their merged-geometry batch. */ export declare function batchableKinds(): ReadonlyMap; export declare function batchableConfig(node: AnyNode | undefined): BatchableConfig | undefined; /** A wall-scoped node (door, window) moves with its host wall. */ export declare function isWallHosted(node: AnyNode | undefined): boolean; export declare function collectBatchCandidate(nodeId: string): BatchCandidate | null; export declare function hideBatchedNode(candidate: BatchCandidate): void; /** * Belt-and-braces reveal: drops the 'batched' hold from EVERY mesh under * every level root. Per-node reveals track the meshes they hid, but a system * can rebuild a node's children while it is batched (swapping the tracked * refs), and a stale ref means a mesh stays off the scene layer — which the * GLB exporter prunes. `showInScene` is a no-op on unheld meshes, so the * sweep is safe; it runs only on the rare release-everything paths (capture, * appearance switches, isolation). */ export declare function revealAllBatchedHolds(): void; export declare function revealBatchedNode(nodeId: string): void; /** * Nodes the viewer is lighting up — plus hosted openings whose host wall is * lit or mid-gesture: a dragged wall carries its doors with it through live * overrides, and a batched copy would stay behind until commit. */ export declare function collectTintedNodes(nodeIds: ReadonlySet): Set; export declare function getBatchableNodeIds(): ReadonlySet; //# sourceMappingURL=candidates.d.ts.map