import type { AbstractMesh } from "@babylonjs/core/Meshes/abstractMesh.js"; import { TransformNode } from "@babylonjs/core/Meshes/transformNode.js"; import type { AssetContainer } from "@babylonjs/core/assetContainer.js"; import type { Node } from "@babylonjs/core/node.js"; import type { Scene } from "@babylonjs/core/scene.js"; import type { AssetReference, EntityRecord, TransformValue, ModelLoadStageObservation } from "@skenora/contracts"; import { type NodeBounds } from "../systems/camera-controller.js"; import type { ResolvedResource, ResourceResolver } from "@skenora/resources"; export interface ImportedEntity { readonly assetLocalBounds?: NodeBounds; readonly loadedAt?: number; entityId: string; container: AssetContainer; /** Stable entity-owned root used by transforms, parenting, selection, and framing. */ root: TransformNode; /** Asset-local alignment root used for pivot, orientation, and placement. */ alignmentRoot: TransformNode; /** Original model roots supplied by the loader. */ roots: readonly TransformNode[]; /** Original model nodes, excluding Skenora-owned wrapper roots. */ nodes: readonly Node[]; } export declare function importModelEntity(scene: Scene, resources: ResourceResolver, asset: AssetReference, entity: EntityRecord, signal?: AbortSignal, observeStage?: (stage: Omit) => void): Promise; type GltfDependencyKind = "buffer" | "image"; interface GltfDependencyContext { readonly kind: GltfDependencyKind; readonly sourceUri: string; readonly declaredMediaType?: string; } export declare function shouldInlineOpaqueOriginObjectUrl(objectUrl: string, originSerialization?: string | undefined): boolean; export declare function resolveGltfDependencyMediaType(resource: Pick, context: Readonly): string; export declare function isAbstractMesh(value: unknown): value is AbstractMesh; export declare function isTransformNode(value: unknown): value is TransformNode; export declare function applyTransform(mesh: TransformNode, transform: TransformValue): void; export declare function setNodeVisible(node: Node, visible: boolean): void; /** Authored groups gate descendants without rewriting child visibility flags. */ export declare function readAuthoredGroupState(node: Node): { enabled: boolean; visible: boolean; } | null; export declare function setNodeEnabled(node: Node, enabled: boolean): void; export {}; //# sourceMappingURL=model-importer.d.ts.map