import { ComputedRef, PropType, Ref } from 'vue';
import { Attribute, CookieOptions, LightOrDark, ThemeOptions, ThemeProviderRuntimeProps, ThemeState, WithSystem } from './types';
export type ThemeSetter<TTheme extends string = LightOrDark, TEnableSystem extends boolean = true> = (value: WithSystem<TTheme, TEnableSystem> | ((prev: WithSystem<TTheme, TEnableSystem>) => WithSystem<TTheme, TEnableSystem>)) => void;
/**
 * Framework-specific theme state returned by
 * `useTheme()`.
 *
 * Exposes the current selected theme, the
 * resolved document theme, the current system
 * theme, and a setter for updates.
 */
export interface ThemeResult<TTheme extends string = LightOrDark, TEnableSystem extends boolean = true> {
    /** All selectable theme names for this config */
    themes: ComputedRef<ReadonlyArray<WithSystem<TTheme, TEnableSystem>>>;
    /** Theme forced for the current page, if any */
    forced: ComputedRef<TTheme | undefined>;
    /** Updates the selected theme */
    setSelected: ThemeSetter<TTheme, TEnableSystem>;
    /** Current selected theme preference */
    selected: Readonly<Ref<WithSystem<TTheme, TEnableSystem> | undefined>>;
    /** Current concrete theme applied to the document */
    resolved: ComputedRef<Exclude<TTheme, 'system'> | undefined>;
    /** Current browser system theme */
    system: ComputedRef<LightOrDark | undefined>;
}
export interface ThemeProviderProps<TTheme extends string = LightOrDark, TEnableSystem extends boolean = true> extends ThemeOptions<TTheme, TEnableSystem>, ThemeProviderRuntimeProps<TTheme, TEnableSystem> {
}
export declare const useTheme: <TTheme extends string = LightOrDark, TEnableSystem extends boolean = true>() => ThemeResult<TTheme, TEnableSystem>;
export declare const ThemeProvider: import('vue').DefineComponent<import('vue').ExtractPropTypes<{
    readonly themes: PropType<readonly string[]>;
    readonly forced: PropType<string | undefined>;
    readonly enableSystem: {
        readonly type: PropType<boolean | undefined>;
        readonly default: undefined;
    };
    readonly enableColorScheme: {
        readonly type: PropType<boolean | undefined>;
        readonly default: undefined;
    };
    readonly cookie: PropType<CookieOptions | undefined>;
    readonly defaultTheme: PropType<string | undefined>;
    readonly attribute: PropType<Attribute | readonly Attribute[] | undefined>;
    readonly valueMap: PropType<Partial<Record<string, string>> | undefined>;
    readonly disableTransition: {
        readonly type: PropType<boolean | undefined>;
        readonly default: undefined;
    };
    readonly initial: PropType<ThemeState<string, boolean> | undefined>;
    readonly nonce: PropType<string | undefined>;
}>, () => import('vue').VNode<import('vue').RendererNode, import('vue').RendererElement, {
    [key: string]: any;
}>[] | undefined, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
    readonly themes: PropType<readonly string[]>;
    readonly forced: PropType<string | undefined>;
    readonly enableSystem: {
        readonly type: PropType<boolean | undefined>;
        readonly default: undefined;
    };
    readonly enableColorScheme: {
        readonly type: PropType<boolean | undefined>;
        readonly default: undefined;
    };
    readonly cookie: PropType<CookieOptions | undefined>;
    readonly defaultTheme: PropType<string | undefined>;
    readonly attribute: PropType<Attribute | readonly Attribute[] | undefined>;
    readonly valueMap: PropType<Partial<Record<string, string>> | undefined>;
    readonly disableTransition: {
        readonly type: PropType<boolean | undefined>;
        readonly default: undefined;
    };
    readonly initial: PropType<ThemeState<string, boolean> | undefined>;
    readonly nonce: PropType<string | undefined>;
}>> & Readonly<{}>, {
    readonly disableTransition: boolean | undefined;
    readonly enableColorScheme: boolean | undefined;
    readonly enableSystem: boolean | undefined;
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
//# sourceMappingURL=vue-bindings.d.ts.map