import type { NoInfer } from '../utils';
import type { Theme, ThemeIn } from './Theme';
export declare class ThemeFactory {
    /**
     * The default theme created with Object.create() is needed for the "overrideBaseTheme" to work.
     *
     * Themes should be frozen objects. But it is not possible to define properties on frozen objects.
     * So, an object created by Object.create({ *frozen_object* }) acts as frozen too,
     * but allows to apply Object.defineProperty to his own properties.
     */
    private static readonly overridableDefaultTheme;
    static get defaultTheme(): Theme;
    static create<T>(theme: ThemeIn & NoInfer<T>, baseTheme?: Theme): Readonly<Theme & NoInfer<T>>;
    static overrideBaseTheme(theme: Theme): void;
    static getKeys<T extends Theme>(theme: T): (keyof T)[];
    private static constructTheme;
}
