import type { ITheme, ThemeMode, ThemeScheme, ThemeSemantic } from '@breadstone/mosaik-themes';
import type { Theme2Element } from './Theme2Element';
import { type IEventEmitter, type IEventDetail } from '@breadstone/mosaik-elements';
/**
 * The `Theme2` class.
 *
 * @public
 */
export declare class Theme2 {
    private static readonly _themeElements;
    private readonly _themeChanged;
    private readonly _schemeChanged;
    private readonly _paletteChanged;
    /**
     * Constructs a new instance of the `Theme` class.
     *
     * @public
     */
    constructor();
    /**
     * @public
     * @readonly
     * @eventProperty
     */
    get themeChanged(): IEventEmitter<IEventDetail>;
    /**
     * @public
     * @readonly
     * @eventProperty
     */
    get schemeChanged(): IEventEmitter<IEventDetail>;
    /**
     * @public
     * @readonly
     * @eventProperty
     */
    get paletteChanged(): IEventEmitter<IEventDetail>;
    /**
     * @public
     * @static
     */
    static register(element: Theme2Element): void;
    /**
     * @public
     * @static
     */
    static unregister(element: Theme2Element): void;
    /**
     * @public
     */
    getTheme(): ITheme;
    /**
     * Gets the current theme name from the document element.
     *
     * @public
     * @returns The current theme name or `null` if not set.
     */
    getDocumentTheme(): string | null;
    /**
     * Gets the current theme mode from the document element.
     *
     * @public
     * @returns The current theme mode or `null` if not set.
     */
    getDocumentThemeMode(): ThemeMode | null;
    /**
     * Applies the specified theme.
     *
     * @public
     * @param theme The theme to apply.
     */
    applyTheme(theme: ITheme): void;
    /**
     * Applies the specified scheme.
     *
     * @public
     * @param scheme The scheme to apply.
     */
    applyScheme(scheme: ITheme['scheme']): void;
    /**
     * Applies the specified palette.
     *
     * @public
     * @param palette The palette to apply.
     */
    applyPalette(palette: ITheme['palette']): void;
    /**
     * Applies the specified font family.
     *
     * @public
     * @param fontFamily The font family to apply.
     */
    applyFontFamily(fontFamily: ITheme['fontFamily']): void;
    /**
     * Applies the specified typography.
     *
     * @public
     * @param typography The typography to apply.
     */
    applyTypography(typography: ITheme['typography']): void;
    /**
     * Applies the specified layout.
     *
     * @public
     * @param layout The layout to apply.
     */
    applyLayout(layout: ITheme['layout']): void;
    /**
     * Applies the specified elevation.
     *
     * @public
     * @param elevation The elevation to apply.
     */
    applyElevation(elevation: ITheme['elevation']): void;
    /**
     * Replaces the scheme with the specified key.
     * This is useful when you want to replace a specific scheme in the theme.
     *
     * @public
     * @param mode The theme mode to replace.
     * @param scheme The scheme color roles to replace.
     */
    replaceScheme(mode: ThemeMode, scheme: Partial<ThemeScheme>): void;
    /**
     * Replaces the palette with the specified key.
     * This is useful when you want to replace a specific palette in the theme.
     *
     * @public
     * @param mode The theme mode to replace.
     * @param semantic The semantic color roles to replace.
     */
    replacePalette(mode: ThemeMode, semantic: Partial<ThemeSemantic>): void;
}
/**
 * @public
 */
export declare class Theme2ServiceLocator {
    private static _current;
    static get current(): Theme2;
    static isSet(): boolean;
    static set(current: Theme2): void;
}
//# sourceMappingURL=Theme2.d.ts.map