import type { Theme } from '../contracts';
import type { RiverbankSiteConfig } from '../config/types';
import type { ThemeResolverContext, ThemeSwitchConfigV1 } from './types';
export type ResolveThemeResult = {
    kind: 'resolved';
    theme: Theme;
    /** Selected theme key when using `themes` */
    themeKey?: string;
    /** Optional warning message (caller decides whether to log) */
    warning?: string;
} | {
    kind: 'not-found';
    reason: 'invalid-theme-key';
    themeKey: string;
};
export type ThemeOptionsForResolver = {
    theme: Theme;
} | {
    themes: Record<string, Theme>;
    themeSwitch?: ThemeSwitchConfigV1;
} | {
    getTheme: (context: ThemeResolverContext) => Theme | Promise<Theme>;
} | {};
export interface ResolveThemeInput {
    config: Pick<RiverbankSiteConfig, 'themeSource' | 'activeTheme'>;
    contentTheme: Theme;
    searchParams: Record<string, string | string[] | undefined>;
    isDevelopment: boolean;
    themeOptions: ThemeOptionsForResolver;
    context: ThemeResolverContext;
}
export declare const MISSING_LOCAL_THEME_ERROR_MESSAGE = "[createCatchAllPage] config.themeSource is 'local' but no local theme was provided. Provide { theme }, { themes }, or { getTheme }, or set config.themeSource to 'cms'.";
export declare function resolveTheme(input: ResolveThemeInput): Promise<ResolveThemeResult>;
