export declare function scopeCssToComposition(css: string, compositionId: string, scopeSelectorOverride?: string, authoredRootId?: string | null, options?: {
    compoundAuthoredRoot?: boolean;
    scopeRootSelectors?: boolean;
}): string;
export declare function wrapScopedCompositionScript(source: string, compositionId: string, errorLabel?: string, scopeSelectorOverride?: string, timelineCompositionId?: string, authoredRootId?: string | null): string;
export declare function wrapInlineScriptWithErrorBoundary(source: string, errorLabel: string): string;
/**
 * Build the statement that populates `window.__hfVariablesByComp` — the table
 * the scoped `getVariables` above reads. Returns `null` when there are no
 * per-instance values.
 *
 * The WRITER lives next to the READER (the scoped `getVariables` in
 * `wrapScopedCompositionScript`) on purpose: every compile path that wraps the
 * reader MUST also emit this writer before the sub-comp scripts run. The
 * render compiler (`htmlCompiler`) inlined the reader scripts but never emitted
 * the writer while the preview bundler (`htmlBundler`) did, so
 * `getVariables()` returned `{}` only during render — parametrized sub-comps
 * silently shipped blank/default text in the final MP4 while snapshot QA passed
 * (issue #2064). Both callers now share this one builder so they can't drift.
 *
 * Values, keys and composition ids are all attacker-reachable, so the whole
 * table goes through `jsonScriptLiteral` — see there for why.
 */
export declare function buildVariablesByCompScript(variablesByComp: Record<string, Record<string, unknown>>): string | null;
//# sourceMappingURL=compositionScoping.d.ts.map