import type { SceneAnimationTrackV1, SceneAnimationClipV1 } from "@skenora/contracts"; import type { AssetReference, CameraPathRecord, Color3Value, EnvironmentConfig, FlowGraphRecord, FogConfig, GroundConfig, LightConfig, MaterialTextureSlot, MaterialSlotTarget, AuthoredPbrMaterial, CapabilityAvailability, ModelAlignmentConfig, PostProcessConfig, ProceduralGeometryProgram, ResourceIntegrity, ResourceLocator, ResourceProvenance, SceneDocumentData, TextureAnimationRecord, ViewportCameraConfig, WeatherConfig } from "@skenora/contracts"; import type { FlowNodeRegistryView } from "@skenora/flow"; import type { JsonObject, JsonValue } from "./json.js"; export declare const SCENE_BLUEPRINT_SCHEMA: "skenora.scene.blueprint"; export declare const SCENE_PATCH_SCHEMA: "skenora.scene.patch"; export declare const SCENE_PLAN_VERSION: 1; export declare const SCENE_PLAN_DEFAULTS_PROFILE: "scene-v1"; export type SceneBlueprintSchema = typeof SCENE_BLUEPRINT_SCHEMA; export type ScenePatchSchema = typeof SCENE_PATCH_SCHEMA; export type ScenePlanVersion = typeof SCENE_PLAN_VERSION; export type SceneResourceKind = AssetReference["kind"]; export type SceneBlueprintPrimitiveKind = "box" | "sphere" | "plane" | "cylinder" | "torus"; export type SceneBlueprintShapeKind = "rectangle" | "circle" | "polygon" | "polyline" | "tube" | "wall" | "box"; export interface SceneBlueprintResource { readonly id: string; readonly kind: SceneResourceKind; readonly mediaType?: string; readonly integrity?: ResourceIntegrity; readonly label?: string; } export interface SceneBlueprintTransform { readonly coordinateSpace?: "local"; readonly units?: "meters"; readonly position?: Readonly<{ x: number; y: number; z: number; }>; readonly scaling?: Readonly<{ x: number; y: number; z: number; }>; readonly rotationRadians?: Readonly<{ x: number; y: number; z: number; }>; readonly rotationQuaternion?: Readonly<{ x: number; y: number; z: number; w: number; }>; } export interface SceneBlueprintEntityBase { readonly id: string; readonly kind: string; readonly name?: string; readonly parentId?: string | null; readonly enabled?: boolean; readonly visible?: boolean; readonly transform?: SceneBlueprintTransform; readonly properties?: JsonObject; } export interface SceneBlueprintModelEntity extends SceneBlueprintEntityBase { readonly kind: "model"; readonly assetRef: string; readonly sourceNode?: string; readonly alignment?: ModelAlignmentConfig; } export interface SceneBlueprintPrimitiveEntity extends SceneBlueprintEntityBase { readonly kind: "primitive"; readonly primitive: SceneBlueprintPrimitiveKind; readonly size?: number; readonly width?: number; readonly height?: number; readonly depth?: number; readonly diameter?: number; readonly color?: Readonly; } export interface SceneBlueprintProceduralEntity extends SceneBlueprintEntityBase { readonly kind: "procedural"; readonly program: ProceduralGeometryProgram; readonly color?: Readonly; } export interface SceneBlueprintShapeEntity extends SceneBlueprintEntityBase { readonly kind: "shape"; readonly shape: SceneBlueprintShapeKind; readonly points?: readonly Readonly<{ x: number; y: number; z: number; }>[]; readonly width?: number; readonly height?: number; readonly radius?: number; readonly depth?: number; readonly tubeRadius?: number; readonly wallHeight?: number; readonly segments?: number; readonly closed?: boolean; readonly fillColor?: Readonly; readonly fillAlpha?: number; readonly strokeColor?: Readonly; } export interface SceneBlueprintParticleEntity extends SceneBlueprintEntityBase { readonly kind: "particle"; readonly textureAssetRef?: string; } export interface SceneBlueprintAnnotationEntity extends SceneBlueprintEntityBase { readonly kind: "annotation"; } export interface SceneBlueprintCameraEntity extends SceneBlueprintEntityBase { readonly kind: "camera"; } /** A transform-only parent; it does not own materials or generated geometry. */ export interface SceneBlueprintGroupEntity extends SceneBlueprintEntityBase { readonly kind: "group"; } export type SceneBlueprintEntity = SceneBlueprintModelEntity | SceneBlueprintPrimitiveEntity | SceneBlueprintProceduralEntity | SceneBlueprintShapeEntity | SceneBlueprintParticleEntity | SceneBlueprintAnnotationEntity | SceneBlueprintCameraEntity | SceneBlueprintGroupEntity; /** Legacy materials remain JSON-open; owned materials have an explicit contract. */ export type SceneBlueprintMaterial = (JsonObject & { readonly id: string; }) | AuthoredPbrMaterial; /** Explicit creation input; the legacy JSON-open material type remains accepted. */ export type SceneBlueprintAuthoredMaterial = AuthoredPbrMaterial; export interface SceneBlueprintMaterialBinding { readonly id: string; readonly materialId: string; readonly entityId: string; readonly targetName?: string; readonly target?: MaterialSlotTarget; } export type SceneBlueprintTextureAnimation = TextureAnimationRecord; export type SceneBlueprintCameraPath = CameraPathRecord; export interface SceneBlueprintFlowNode { readonly id: string; readonly type: string; readonly name?: string; readonly enabled?: boolean; readonly config: JsonObject; readonly position?: Readonly<{ x: number; y: number; }>; } export interface SceneBlueprintFlowEdge { readonly id: string; readonly kind: "control" | "value"; readonly sourceNodeId: string; readonly sourcePort: string; readonly targetNodeId: string; readonly targetPort: string; } export interface SceneBlueprintFlow { readonly schema: "skenora.flow"; readonly version: 1; readonly id: string; readonly name: string; readonly enabled: boolean; readonly concurrency?: "parallel" | "restart" | "drop"; readonly errorPolicy?: "stop" | "continue"; readonly nodes: readonly SceneBlueprintFlowNode[]; readonly edges: readonly SceneBlueprintFlowEdge[]; } export interface SceneCapabilityRequirement { readonly id: string; readonly version: string; readonly required: boolean; readonly config?: JsonValue; } export interface SceneBlueprintExtension { readonly namespace: string; readonly version: number; readonly capability: string; readonly required: boolean; readonly data: JsonValue; } export type SceneBlueprintEnvironment = Omit, "background"> & { readonly background?: Partial; }; export type SceneBlueprintWeather = Omit, "wind"> & { readonly wind?: Partial; }; export type SceneBlueprintPostProcess = Omit, "colorCurves" | "ssao"> & { readonly colorCurves?: Partial; readonly ssao?: Partial; }; export interface SceneBlueprint { readonly schema: SceneBlueprintSchema; readonly version: ScenePlanVersion; readonly defaultsProfile: typeof SCENE_PLAN_DEFAULTS_PROFILE; readonly scene: Readonly<{ id: string; name: string; }>; readonly requires: readonly SceneCapabilityRequirement[]; readonly resources: readonly SceneBlueprintResource[]; readonly entities: readonly SceneBlueprintEntity[]; readonly materials: readonly SceneBlueprintMaterial[]; readonly materialBindings: readonly SceneBlueprintMaterialBinding[]; readonly animationTracks: readonly SceneAnimationTrackV1[]; readonly animationClips: readonly SceneAnimationClipV1[]; readonly textureAnimations: readonly SceneBlueprintTextureAnimation[]; readonly cameraPaths: readonly SceneBlueprintCameraPath[]; readonly camera?: Partial; readonly environment?: SceneBlueprintEnvironment; readonly ground?: Partial; readonly fog?: Partial; readonly weather?: SceneBlueprintWeather; readonly lights?: readonly LightConfig[]; readonly postProcess?: SceneBlueprintPostProcess; readonly flows: readonly SceneBlueprintFlow[]; readonly initialVariables: JsonObject; readonly extensions: readonly SceneBlueprintExtension[]; } /** Before normalization, arrays and the defaults profile may be omitted. */ export type SceneBlueprintInput = Pick & Partial>; export interface ScenePlanResourceBinding { readonly kind: SceneResourceKind; readonly source: ResourceLocator; readonly mediaType?: string; readonly integrity?: ResourceIntegrity; readonly label?: string; readonly provenance?: ResourceProvenance; } export interface SceneCapabilityDescriptor { readonly id: string; readonly version: string; readonly config?: JsonValue; } export interface SceneExtensionCapability { readonly namespace: string; readonly version: number; readonly capability: string; } export interface ScenePlanFlowValidator { validate(graph: Readonly): readonly ScenePlanFlowValidationIssue[]; } export interface ScenePlanFlowValidationIssue { readonly code: string; readonly message: string; readonly nodeId?: string; readonly edgeId?: string; } export interface ScenePlanContext { readonly referenceExtensions?: readonly import("@skenora/contracts").SceneExtensionReferenceAdapter[]; readonly resourceBindings?: Readonly>; readonly capabilities?: readonly SceneCapabilityDescriptor[]; /** Optional observed facts; unknown/disabled features cannot satisfy a usage. */ readonly capabilityAvailability?: readonly CapabilityAvailability[]; readonly flowRegistry?: FlowNodeRegistryView; readonly flowValidator?: ScenePlanFlowValidator; readonly extensionCapabilities?: readonly SceneExtensionCapability[]; readonly nativeAttachmentContracts?: readonly import("@skenora/contracts").SceneNativeAttachmentContract[]; readonly runtimeServiceContracts?: readonly import("@skenora/contracts").SceneRuntimeServiceContract[]; readonly allowVariables?: boolean; } export type ScenePatchTargetKind = "extension" | "entity" | "resource" | "material" | "materialBinding" | "animationTrack" | "animationClip" | "textureAnimation" | "cameraPath" | "light" | "flow" | "setting"; export interface ScenePatchTarget { readonly kind: ScenePatchTargetKind; readonly id: string; } export interface ScenePatchFieldChange { readonly path: readonly string[]; readonly value: JsonValue; } export interface ScenePatchCreateOperation { readonly op: "create"; readonly target: ScenePatchTarget; readonly value: JsonObject; } export interface ScenePatchUpdateOperation { readonly op: "update"; readonly target: ScenePatchTarget; readonly changes: readonly ScenePatchFieldChange[]; } /** Replace an existing record, including removal of omitted optional fields. */ export interface ScenePatchReplaceOperation { readonly op: "replace"; readonly target: ScenePatchTarget; readonly value: JsonObject; } export interface ScenePatchRemoveOperation { readonly op: "remove"; readonly target: ScenePatchTarget; } export type ScenePatchOperation = ScenePatchCreateOperation | ScenePatchReplaceOperation | ScenePatchUpdateOperation | ScenePatchRemoveOperation; export interface ScenePatch { readonly schema: ScenePatchSchema; readonly version: ScenePlanVersion; readonly target: Readonly<{ sceneId: string; expectedRevision: number; expectedDocumentHash?: string; }>; readonly operations: readonly ScenePatchOperation[]; } export type ScenePatchCandidatePath = readonly string[]; export type ScenePatchTargetState = "present" | "absent" | "unknown"; export interface ScenePatchCandidateCreateOperation { readonly op: "create"; readonly sourceOperationIndex: number; readonly target: ScenePatchTarget; /** A logical SceneDocument path. Resource and entity values remain plan DTOs. */ readonly path: ScenePatchCandidatePath; readonly value: JsonObject; readonly targetState: ScenePatchTargetState; } export interface ScenePatchCandidateUpdateOperation { readonly op: "update"; readonly sourceOperationIndex: number; readonly target: ScenePatchTarget; /** A logical SceneDocument path, relative to the operation target. */ readonly path: ScenePatchCandidatePath; readonly changes: readonly ScenePatchFieldChange[]; readonly targetState: ScenePatchTargetState; readonly previousValues?: readonly { readonly path: ScenePatchCandidatePath; readonly value?: JsonValue; }[]; } export interface ScenePatchCandidateReplaceOperation { readonly op: "replace"; readonly sourceOperationIndex: number; readonly target: ScenePatchTarget; readonly path: ScenePatchCandidatePath; readonly value: JsonObject; readonly targetState: ScenePatchTargetState; readonly previousValue?: JsonValue; } export interface ScenePatchCandidateRemoveOperation { readonly op: "remove"; readonly sourceOperationIndex: number; readonly target: ScenePatchTarget; /** A logical SceneDocument path. */ readonly path: ScenePatchCandidatePath; readonly targetState: ScenePatchTargetState; readonly previousValue?: JsonValue; } export type ScenePatchCandidateOperation = ScenePatchCandidateCreateOperation | ScenePatchCandidateReplaceOperation | ScenePatchCandidateUpdateOperation | ScenePatchCandidateRemoveOperation; export interface ScenePatchCandidate { readonly schema: "skenora.scene.patch.candidate"; readonly version: 1; readonly target: ScenePatch["target"]; readonly operations: readonly ScenePatchCandidateOperation[]; /** True when the candidate needs a host/editor snapshot to resolve preconditions. */ readonly requiresBaseDocument: boolean; } export interface ScenePatchContext extends ScenePlanContext { /** Optional private snapshot used only for pure preflight and previous values. */ readonly document?: Readonly; readonly documentRevision?: number; readonly documentHash?: string; } export type SceneDocumentSettingKey = "camera" | "environment" | "ground" | "fog" | "weather" | "postProcess" | "variables"; export type SceneBlueprintNativeConfig = ViewportCameraConfig | EnvironmentConfig | GroundConfig | FogConfig | WeatherConfig | PostProcessConfig | LightConfig | FlowGraphRecord | TextureAnimationRecord | CameraPathRecord | MaterialTextureSlot; //# sourceMappingURL=types.d.ts.map