import { BaseTheme } from './BaseTheme.js';
import type { ThemeProperties } from './ThemeProperties.js';
/**
 * Provides styling for {@link Widget | Widgets}.
 *
 * @category Theme
 */
export declare class Theme extends BaseTheme {
    /** Listeners that are listening for changes in this theme (or fallback) */
    protected subscribers: Set<(property: string | null) => void>;
    constructor(properties?: ThemeProperties, fallbackTheme?: Theme);
    get fallbackTheme(): Theme | undefined;
    set fallbackTheme(newTheme: Theme | undefined);
    protected onThemeUpdated(property?: string | null): void;
    /**
     * Subscribe to this theme. When a change occurs in the theme, the passed
     * listener callback will be called. The argument used for the callback will
     * be null if the theme's fallback has changed and therefore all properties
     * are to be assumed as changed, else, the argument will be a string
     * containing the name of the theme property that changed.
     */
    subscribe(listener: (property: string | null) => void): void;
    /**
     * Unsubscribe from this theme; removes the listener callback from the list
     * of subscribers.
     */
    unsubscribe(listener: (property: string | null) => void): void;
}
