import type { Theme, ThemeIn } from './Theme.js';
import type { ThemeVersions } from './ThemeVersions.js';
export type Marker = (theme: Theme) => Theme;
export type Markers = Marker[];
/**
 * Makes all computable theme variables (getters) visible to the Object.keys(theme)
 * @param theme Theme object
 * @returns The given theme object with all getters made enumerable
 */
export declare const exposeGetters: (theme: Theme) => Theme;
export declare const REACT_UI_THEME_MARKERS: {
    darkTheme: {
        key: string;
        value: true;
    };
    themeVersion: {
        key: string;
        value: ThemeVersions | null;
    };
};
export declare const REACT_UI_DARK_THEME_KEY: string;
export declare const isDarkTheme: (theme: Theme | ThemeIn) => boolean;
/**
 * Marks the given theme as "dark"
 * @param theme Theme object
 * @returns The given theme object with a "dark theme" mark
 */
export declare const markAsDarkTheme: Marker;
/**
 * Creates a marker for the theme, that will mark it with a version
 * @param version Theme version
 * @returns A marker that marks the given theme with the given version once applied
 */
export declare const markThemeVersion: (version: ThemeVersions) => Marker;
/**
 * Checks if the given theme's version is "greater or equal" then the given version
 * @param theme Theme object
 * @param version A string version
 * @returns Boolean result
 */
export declare const isThemeGTE: (theme: Theme | ThemeIn, version: ThemeVersions) => boolean;
/**
 * Finds the given theme's object property descriptor by its name
 * @param theme Theme object
 * @param propName The property name
 * @returns The found descriptor or an empty object
 */
export declare function findPropertyDescriptor(theme: Theme, propName: string): PropertyDescriptor;
/**
 * Marks the given theme with the given markers
 * @param theme Theme object
 * @param markers Markers array
 * @returns The given theme marked with the given marks
 */
export declare function applyMarkers(theme: Theme, markers: Markers): Theme;
/**
 * Creates a theme object out of the given class with variables
 * @param options Options object
 * @param options.themeClass A class with variables
 * @param [options.prototypeTheme] An optional prototype theme, that will be the base for the new theme
 * @param [options.themeMarkers] An optional array of markers, that new them will be marked of
 * @returns The new theme object
 */
export declare function createTheme(options: {
    themeClass: Theme;
    prototypeTheme?: Theme;
    themeMarkers?: Markers;
}): Theme;
