import type React from "react"; import type { MotionContext, MotionPreviewContext, MotionPreviewDescriptor, RenderContext } from "./integration-types.ts"; export declare const SDK_ARTIFACT_SYMBOL_KEY = "@fourier-video/sdk/artifact"; export declare const SDK_ARTIFACT: unique symbol; export declare const SDK_ARTIFACT_SYMBOL: symbol; export declare const SDK_ABI_VERSION: 1.2; export declare const SUPPORTED_SDK_ABI_VERSIONS: readonly [1, 1.1, 1.2]; export declare const SUPPORTED_SDK_ABI_VERSION: 1.2; export declare const SDK_SCHEMA_FIELD_PACKAGE: "@fourier-video/sdk/schema-field"; export declare const SDK_SCHEMA_VERSION: 1; export type SupportedSdkAbiVersion = (typeof SUPPORTED_SDK_ABI_VERSIONS)[number]; export declare function isSupportedSdkAbiVersion(value: unknown): value is SupportedSdkAbiVersion; export type ArtifactKind = "react" | "motion" | "shader"; export type ArtifactPropDeclaration = "string" | "number" | "boolean" | "color" | "time" | null; export interface SdkSchemaField { package: "@fourier-video/sdk/schema-field"; schemaVersion: 1; kind: "string" | "number" | "boolean" | "color" | "time" | "enum" | "asset" | "node"; hasDefault: boolean; defaultValue?: unknown; min?: number; max?: number; integer?: boolean; minLength?: number; maxLength?: number; values?: readonly string[]; accept?: readonly string[]; } export type SdkArtifactSchema = Readonly>; interface SdkArtifactMetadataBase { package: "@fourier-video/sdk"; sdkAbiVersion: SupportedSdkAbiVersion; kind: ArtifactKind; name: string; schema: SdkArtifactSchema; designPreview(): unknown; } interface SdkMotionPreviewMetadata { preview?(input: { props: Readonly>; context: Readonly; }): MotionPreviewDescriptor; overlay?(input: { subject: React.ReactNode; props: Readonly>; context: Readonly; descriptor: Readonly; }): React.ReactNode; } export interface SdkDomReactArtifactMetadata extends SdkArtifactMetadataBase { sdkAbiVersion: SupportedSdkAbiVersion; renderer: "dom-timeline"; kind: "react"; static?: boolean; component(input: { props: Readonly>; }): React.ReactNode; } interface SdkDomMotionArtifactMetadataBase extends SdkArtifactMetadataBase { sdkAbiVersion: SupportedSdkAbiVersion; renderer: "dom-timeline"; kind: "motion"; component(input: { subject: React.ReactNode; props: Readonly>; }): React.ReactNode; preview?: SdkMotionPreviewMetadata["preview"]; overlay?: SdkMotionPreviewMetadata["overlay"]; } export type SdkDomMotionArtifactMetadata = SdkDomMotionArtifactMetadataBase & ({ supportsTextMotion: false; textComponent?: never; } | { supportsTextMotion: true; textComponent(input: { text: string; props: Readonly>; }): React.ReactNode; }); export interface SdkDomFfmpegVideoMotionArtifactMetadata extends SdkArtifactMetadataBase { sdkAbiVersion: SupportedSdkAbiVersion; renderer: "dom-timeline-ffmpeg-video"; kind: "motion"; videoComposition: "ffmpeg"; component(input: { video: Readonly<{ id: string; }>; props: Readonly>; }): React.ReactNode; preview?: SdkMotionPreviewMetadata["preview"]; supportsTextMotion?: never; textComponent?: never; overlay?: never; } export interface SdkDomShaderArtifactMetadata extends SdkArtifactMetadataBase { sdkAbiVersion: typeof SDK_ABI_VERSION; renderer: "dom-timeline"; kind: "shader"; component(input: { source: string; props: Readonly>; }): React.ReactNode; } export type SdkArtifactMetadata = SdkDomReactArtifactMetadata | SdkDomMotionArtifactMetadata | SdkDomFfmpegVideoMotionArtifactMetadata | SdkDomShaderArtifactMetadata; export declare function assertSynchronousArtifactResult(value: T, operation: string): T; export declare function readSdkArtifact(artifact: unknown, expectedKind: "react"): SdkDomReactArtifactMetadata | undefined; export declare function readSdkArtifact(artifact: unknown, expectedKind: "motion"): SdkDomMotionArtifactMetadata | SdkDomFfmpegVideoMotionArtifactMetadata | undefined; export declare function readSdkArtifact(artifact: unknown, expectedKind: "shader"): SdkDomShaderArtifactMetadata | undefined; export declare function readSdkArtifact(artifact: unknown, expectedKind?: ArtifactKind): SdkArtifactMetadata | undefined; export declare function bindSdkArtifactProps(artifact: unknown, input: Readonly>, options: { fps: number; declarations?: Readonly>; }): Readonly>; export declare function assertArtifactComponent(artifact: unknown, expectedKind: ArtifactKind, label: string): unknown; export declare function createRenderContext(input: { frame: number; localFrame: number; fps: number; width: number; height: number; seed: number; }): Readonly; export declare function createMotionContext(input: { absoluteFrame: number; hostFrame: number; motionFrame: number; durationFrames: number; progress: number; phase: MotionContext["phase"]; fps: number; width: number; height: number; seed: number; }): Readonly; export interface MotionPreviewExports { preview?: (input: { props: Record; previewContext: MotionPreviewContext; }) => MotionPreviewDescriptor; Preview?: React.ComponentType<{ subject: React.ReactNode; props: Record; previewContext: MotionPreviewContext; descriptor: MotionPreviewDescriptor; }>; } export declare function resolveMotionPreviewExports(module: Record, exportName: string, options?: { declarations?: Readonly>; }): MotionPreviewExports; export {}; //# sourceMappingURL=artifact-protocol.d.ts.map