export type SceneMetadataSeed = string | number;
export type SceneMetadataPlanKind = "animation" | "camera" | "environment" | "interaction" | "lighting" | "physics" | "postprocess" | "rendering";
export type SceneMetadataCapabilityStatus = "supported" | "unsupported" | "approximation" | "route-local";
export interface SceneAssetProvenance {
    readonly id: string;
    readonly uri?: string;
    readonly source?: string;
    readonly loader?: string;
    readonly version?: string;
    readonly digest?: string;
    readonly license?: string;
    readonly nodeIds?: readonly string[];
    readonly materialIds?: readonly string[];
    readonly notes?: string;
}
export interface SceneMaterialAssignment {
    readonly nodeId: string;
    readonly materialId: string;
    readonly slot?: string | number;
    readonly sourceMaterialId?: string;
    readonly fallback?: boolean;
    readonly unsupportedFeatures?: readonly string[];
}
export interface ScenePlanMetadata {
    readonly id: string;
    readonly kind: SceneMetadataPlanKind;
    readonly description: string;
    readonly owner?: string;
    readonly nodeIds?: readonly string[];
    readonly deterministicSeed?: SceneMetadataSeed;
    readonly unsupportedFeatures?: readonly string[];
    readonly evidence?: readonly string[];
}
export interface SceneCapabilityDisclosure {
    readonly feature: string;
    readonly status: SceneMetadataCapabilityStatus;
    readonly reason?: string;
    readonly owner?: string;
    readonly evidence?: readonly string[];
}
export interface SceneRevisionMetadata {
    readonly id?: string;
    readonly parentRevisionId?: string;
    readonly summary: string;
    readonly author?: string;
    readonly timestamp?: string;
    readonly deterministicSeed?: SceneMetadataSeed;
}
export type SceneRevisionRecord = Required<Pick<SceneRevisionMetadata, "id" | "summary">> & SceneRevisionMetadata;
export interface SceneMetadataOptions {
    readonly deterministicSeed?: SceneMetadataSeed;
    readonly assets?: readonly SceneAssetProvenance[];
    readonly materialAssignments?: readonly SceneMaterialAssignment[];
    readonly plans?: readonly ScenePlanMetadata[];
    readonly capabilities?: readonly SceneCapabilityDisclosure[];
    readonly revisions?: readonly SceneRevisionMetadata[];
}
export type SerializedSceneMetadata = SceneMetadataOptions;
export declare class SceneMetadata {
    deterministicSeed?: SceneMetadataSeed;
    readonly assets: SceneAssetProvenance[];
    readonly materialAssignments: SceneMaterialAssignment[];
    readonly plans: ScenePlanMetadata[];
    readonly capabilities: SceneCapabilityDisclosure[];
    readonly revisions: SceneRevisionRecord[];
    constructor(options?: SceneMetadataOptions);
    replace(options: SceneMetadataOptions | SceneMetadata): this;
    clone(): SceneMetadata;
    get isEmpty(): boolean;
    registerAsset(asset: SceneAssetProvenance): this;
    assignMaterial(assignment: SceneMaterialAssignment): this;
    addPlan(plan: ScenePlanMetadata): this;
    discloseCapability(disclosure: SceneCapabilityDisclosure): this;
    discloseUnsupportedFeature(feature: string, reason: string, options?: Omit<SceneCapabilityDisclosure, "feature" | "reason" | "status">): this;
    recordRevision(revision: SceneRevisionMetadata): this;
    unsupportedFeatures(): readonly SceneCapabilityDisclosure[];
    toJSON(): SerializedSceneMetadata;
}
//# sourceMappingURL=SceneMetadata.d.ts.map