import type { App, ExtractPropTypes, InjectionKey, Ref } from 'vue';
import type { MaybeRef } from '@veno-ui/utils';
import type { BaseColors, BaseOnColors, Colors } from './colors';
interface InternalThemeDefinition {
    dark: boolean;
    colors: Colors;
    variables: Record<string, string | number>;
}
interface ThemeDefinitionColors extends BaseColors, Partial<BaseOnColors> {
    [key: string]: string | undefined;
}
export interface ThemeDefinition {
    dark: boolean;
    colors: ThemeDefinitionColors;
    variables: Record<string, string | number>;
}
export type ThemeOptions = false | {
    defaultTheme?: string;
    themes?: Record<string, ThemeDefinition>;
};
export interface ThemeInstance {
    isDisabled: boolean;
    themes: Ref<Record<string, InternalThemeDefinition>>;
    current: Ref<string>;
    themeClasses: Ref<string | undefined>;
    setTheme: (key: string, theme: ThemeDefinition) => void;
    getTheme: (key: string) => InternalThemeDefinition;
}
export type ThemeProps = ExtractPropTypes<ReturnType<typeof makeThemeProps>>;
export declare const ThemeKey: InjectionKey<ThemeInstance>;
export declare const makeThemeProps: <Defaults extends {
    theme?: unknown;
} = {}>(defaults?: Defaults | undefined) => {
    theme: unknown extends Defaults["theme"] ? StringConstructor : {
        type: import("vue").PropType<unknown extends Defaults["theme"] ? string : string | Defaults["theme"]>;
        default: unknown extends Defaults["theme"] ? string : string | Defaults["theme"];
    };
};
export declare function createTheme(app: App, options?: ThemeOptions): ThemeInstance;
export declare function provideTheme(props: MaybeRef<ThemeProps>): ThemeInstance;
export declare function useTheme(): ThemeInstance;
export {};
