import { TThemes } from '../themes';
import { App, DeepReadonly, InjectionKey, PropType, Ref, ComputedRef } from 'vue';
type DeepPartial<T> = T extends object ? {
    [P in keyof T]?: DeepPartial<T[P]>;
} : T;
export type IThemeOptions = false | {
    cspNonce?: string;
    defaultTheme?: TThemes | string;
    variations?: false | VariationOptions;
    themes?: Record<string, ThemeDefinition>;
    /**
     * @deprecated НЕ ИСПОЛЬЗУЙТЕ НИ В КОЕМ СЛУЧАЕ, если у вас нет web компонентов с shadow DOM
     * * ЭТО КОСТЫЛЬ!!!!
     * * Указывает, что все стили cds-style-sheets будут прикреплены к первому элементу в shadowRoot DOM.
     * * Если у вас нет web компонентов с shadow DOM, не используйте эту опцию НИ В КОЕМ СЛУЧАЕ!!!
     */
    isShadowDom?: boolean;
};
export type ThemeDefinition = DeepPartial<InternalThemeDefinition>;
export type TTheme = typeof availableTheme[number];
export interface Colors extends BaseColors {
    [key: string]: string;
}
interface VariationOptions {
    colors: string[];
    lighten: number;
    darken: number;
}
interface InternalThemeDefinition {
    dark: boolean;
    colors: Colors;
    variables: Record<string, string | number>;
}
interface BaseColors {
    'brand-primary': string;
    'brand-primary-active': string;
    'brand-primary-border': string;
    'brand-primary-content': string;
    'brand-primary-hover': string;
    'brand-secondary': string;
    'brand-secondary-active': string;
    'brand-secondary-border': string;
    'brand-secondary-hover': string;
}
export interface ThemeInstance {
    readonly isDisabled: boolean;
    readonly themes: Ref<Record<string, InternalThemeDefinition>>;
    readonly name: Readonly<Ref<string>>;
    readonly current: DeepReadonly<Ref<InternalThemeDefinition>>;
    readonly computedThemes: DeepReadonly<Ref<Record<string, InternalThemeDefinition>>>;
    readonly themeClasses: Readonly<ComputedRef<string | undefined>>;
    readonly styles: Readonly<ComputedRef<string>>;
    readonly global: {
        readonly name: Ref<string>;
        readonly current: DeepReadonly<Ref<InternalThemeDefinition>>;
    };
}
export declare const ThemeSymbol: InjectionKey<ThemeInstance>;
export declare const availableTheme: readonly ["cdsLight", "cdsDark", "b2bLight", "b2bDark", "promoLight", "promoDark"];
export declare const makeThemeProps: <Defaults extends {
    theme?: unknown;
} = {}>(defaults?: Defaults | undefined) => import('../utils').AppendDefault<{
    /**
     * Тема
     */
    theme: {
        type: PropType<TTheme | string>;
        available: readonly ["cdsLight", "cdsDark", "b2bLight", "b2bDark", "promoLight", "promoDark"];
        default: undefined;
    };
}, Defaults>;
export declare function createTheme(options?: IThemeOptions): ThemeInstance & {
    install: (app: App) => void;
};
export declare function provideTheme(props: {
    theme?: string;
}): ThemeInstance;
export declare function useTheme(): ThemeInstance;
export {};
