import type { ArtifactBundle, ArtifactLibraryKey } from './artifact-bundle.js';
import { type AssetResolution } from './artifact-asset-resolution.js';
/** The neutral gray the hosted app presents artifacts on. The web stage rule
 *  (.artifact-stage[data-view-mode='fullscreen'] in ArtifactEntityView.svelte)
 *  must use the same value — a source-sync test pins it. */
export declare const ARTIFACT_PRESENT_BACKDROP = "#4a4a4a";
export type ArtifactExportExtension = 'html' | 'png' | 'pdf';
export type ArtifactLibrarySourceKey = ArtifactLibraryKey | 'threeCore';
export type ArtifactLibrarySources = Partial<Record<ArtifactLibrarySourceKey, string>>;
export declare function artifactExportFilename(bundle: Pick<ArtifactBundle, 'artifactId' | 'title'>, extension?: ArtifactExportExtension): string;
export interface ArtifactHtmlExportOptions {
    context?: 'editor' | 'fullscreen' | 'export';
    /** Base URL for the headless (Playwright) render path so root-relative
     *  `/api/assets/...` URLs resolve in a `setContent` document. The CSP's
     *  `base-uri` is widened to exactly this origin. Never set on the
     *  standalone HTML export — a downloaded file must not phone home. */
    baseHref?: string;
    includeRenderHostStyles?: boolean;
    librarySources?: ArtifactLibrarySources;
    /** How workspace-asset refs resolve in THIS render — drives both the URL
     *  rewrite and the document CSP from one value (see
     *  artifact-asset-resolution.ts). Headless PNG/PDF passes token mode; the
     *  self-contained HTML export passes relative mode. Defaults to none
     *  (no asset access). */
    assets?: AssetResolution;
}
export declare function buildArtifactHtmlExport(bundle: ArtifactBundle, options?: ArtifactHtmlExportOptions): string;
