import type { TransformNode } from "@babylonjs/core/Meshes/transformNode.js"; import type { Node } from "@babylonjs/core/node.js"; export type NodeDuplicationMode = "clone" | "instance"; export type MetadataCopyMode = "clone" | "share" | "omit"; export interface DuplicateNodeOptions { mode?: NodeDuplicationMode; name?: string; parent?: TransformNode | null; positionOffset?: Readonly<{ x: number; y: number; z: number; }>; cloneMaterials?: boolean; metadata?: MetadataCopyMode; /** Clone selected hierarchy nodes instead of creating geometry instances. */ doNotInstantiate?: (node: TransformNode) => boolean; idFactory?: (source: TransformNode, index: number) => string; nameFactory?: (source: TransformNode, index: number) => string; onNodeCreated?: (source: TransformNode, duplicate: TransformNode) => void; } export interface DuplicateNodeResult { readonly mode: NodeDuplicationMode; readonly source: TransformNode; readonly root: TransformNode; readonly nodes: readonly TransformNode[]; readonly sourceToDuplicate: ReadonlyMap; dispose(): void; } export interface StagedNodeRemoval { readonly node: Node; readonly hidden: boolean; readonly committed: boolean; hide(): void; restore(): void; commit(options?: { disposeMaterialsAndTextures?: boolean; }): void; } /** * Duplicates a Babylon hierarchy without touching editor state, DOM, or a data * source. Clone mode owns optional cloned materials; instance mode shares * geometry and materials with the source hierarchy. */ export declare function duplicateNodeHierarchy(source: TransformNode, options?: DuplicateNodeOptions): DuplicateNodeResult; /** * Creates a reversible removal handle. The node is disabled immediately and * can be restored until commit performs the irreversible Babylon disposal. */ export declare function stageNodeRemoval(node: Node): StagedNodeRemoval; //# sourceMappingURL=node-operations.d.ts.map