import { CookieOptions, LightOrDark, ThemeState, ThemeOptions, WithSystem } from './types';
export type ThemeBroadcastMessage = {
    key: string;
    value?: string | undefined;
};
type SystemThemeListener = (event: MediaQueryList | MediaQueryListEvent) => void;
type ThemeBroadcastListener = (value: string | undefined) => void;
export type ThemeBroadcastSubscription = {
    channel: BroadcastChannel | null;
    cleanup: () => void;
};
export declare const themeMedia = "(prefers-color-scheme: dark)";
export declare const defaultThemes: readonly ["dark", "light"];
export declare const defaultCookieOptions: CookieOptions;
export declare const getCookieName: (cookie?: CookieOptions) => string;
export declare const getCookieValue: (key: string) => string | undefined;
export declare const formatSameSite: (sameSite?: CookieOptions["sameSite"]) => string | undefined;
export declare const saveToCookie: (cookieName: string, themeState: ThemeState<string, boolean>, options?: CookieOptions) => void;
export declare const resolveDefaultTheme: <TTheme extends string = LightOrDark, TEnableSystem extends boolean = true>(defaultTheme: ThemeOptions<TTheme, TEnableSystem>["defaultTheme"], enableSystem?: ThemeOptions<TTheme, TEnableSystem>["enableSystem"]) => WithSystem<TTheme, TEnableSystem>;
export declare const getSystemTheme: (media?: MediaQueryList | MediaQueryListEvent) => LightOrDark;
export declare const getTheme: <TTheme extends string, TEnableSystem extends boolean = true>(cookieName: string, fallback: WithSystem<TTheme, TEnableSystem> | undefined, selected: WithSystem<TTheme, TEnableSystem> | undefined, themes?: ThemeOptions<TTheme, TEnableSystem>["themes"], enableSystem?: ThemeOptions<TTheme, TEnableSystem>["enableSystem"]) => WithSystem<TTheme, TEnableSystem> | undefined;
export declare const createThemeBroadcastChannelName: (cookieName: string) => string;
export declare const isThemeBroadcastMessage: (data: unknown, cookieName: string) => data is ThemeBroadcastMessage;
export declare const postThemeBroadcast: (channel: BroadcastChannel | null | undefined, cookieName: string, value: string) => void;
export declare const subscribeToSystemTheme: (listener: SystemThemeListener, emitInitial?: boolean) => () => void;
export declare const createThemeBroadcastSubscription: (cookieName: string, onValue: ThemeBroadcastListener) => ThemeBroadcastSubscription;
export {};
//# sourceMappingURL=theme-runtime.d.ts.map