/** Resolve HTML asset URLs relative to their document, refusing paths outside the project. */
export declare function compositionAssetPath(composition: string, src: string): string;
export interface CompositionVideo {
elementId: string;
source: string;
unitId?: string;
artifactId?: string;
active: boolean;
startSeconds: number;
durationSeconds?: number;
mediaStartSeconds: number;
playbackRate: number;
}
/** Match a Croco project aspect ratio to its native Composition canvas. */
export declare function crocoCanvasSize(aspectRatio: string): {
width: number;
height: number;
};
/** Update only the recognizable HyperFrames blank template used by Croco projects. */
export declare function syncCrocoBlankCompositionAspect(html: string, aspectRatio: string): string;
/** Read actual media and nested composition sources, including split/cloned clips. */
export declare function inspectVideoComposition(html: string): {
videos: CompositionVideo[];
compositions: string[];
dependencies: string[];
remoteScripts: string[];
durationSeconds: number;
width: number;
height: number;
};
interface NativeVideoInput {
unitId: string;
source: string;
startSeconds: number;
durationSeconds: number;
compositionDuration: number;
mediaDurationSeconds: number;
hasAudio: boolean;
}
type ImportedClip = {
elementId: string;
source: string;
};
type GenerationOwnership = {
artifactId: string;
previousArtifactId?: string;
previousArtifactSource?: string;
previousImportedClip?: ImportedClip;
};
/** Freeze the exact imported clip that a new generation request may replace. */
export declare function captureImportedVideoClip(html: string, unitId: string): ImportedClip | undefined;
/** Bind a generated artifact; replacing an import requires its frozen identity. */
export declare function bindVideoUnitClip(html: string, input: NativeVideoInput & GenerationOwnership): {
html: string;
elementId: string;
duration: number;
};
/** Bind an existing file without assigning generation or refinement eligibility. */
export declare function bindImportedVideoClip(html: string, input: NativeVideoInput & {
previousSource?: string;
}): {
html: string;
elementId: string;
duration: number;
};
/** Replace exact parsed media sources in an export copy; unrelated bytes remain unchanged. */
export declare function replaceCompositionVideoSources(html: string, replacements: ReadonlyMap): string;
/** Localize static classic-script dependencies in the export snapshot only. */
export declare function replaceCompositionScriptSources(html: string, replacements: ReadonlyMap): string;
/** Refuse a historical source that cannot cover the existing clip's media range. */
export declare function assertVideoVersionFits(html: string, unitId: string, availableSeconds: number, fallbackDuration: number): void;
export {};