import { GeneratedPalettes } from '../../../../common/src/api/theming';
import { StorageProxy } from '../../../../client-api-platform/src/api/utils';
import { ColorSchemeOptionType, CustomPaletteSet } from '../../../../client-api-platform/src/shapes';
/**
 * Palette extensions can be used to add new variables to the palette set.
 *
 * This is particularly useful if a value uses a different palette constant depending on scheme.
 */
export declare const getPaletteExtensions: (palette: CustomPaletteSet, paletteScheme: "light" | "dark", isWindows: boolean) => {
    dockExpandedContainerBorderRadius: string;
    fillerBackgroundColor: string;
    'computed-scrollbar-thumb-alpha': number;
    'computed-scrollbar-track-alpha': number;
    'scrollbar-thumb-rgb': string;
    'scrollbar-track-rgb': string;
    selectedTab: string;
};
export type LegacyPalettes = {
    dark: CustomPaletteSet;
    light: CustomPaletteSet;
};
export type Palettes = {
    light: string;
    dark: string;
};
export declare class ThemeStorageController {
    private providerStorage;
    private darkPaletteVars?;
    private lightPaletteVars?;
    private themePaletteSheet?;
    private generatedPalettes?;
    private workspaceStorage?;
    constructor(providerStorage: Pick<Storage, 'getItem' | 'setItem'>);
    /**
     * Set the current Storage Proxy to enable Workspace Storage properties to be populated.
     */
    setWorkspaceStorageProxy: (proxy: StorageProxy) => void;
    /**
     * Check if there's an explicit user preference stored in localStorage.
     * A user preference is indicated by the presence of a SelectedColorScheme key. Which is something assigned if you click on the Appearance dropdown.
     * @returns true if user has manually selected a scheme, false if using defaults
     */
    private hasUserPreference;
    /**
     * Synchronize the current palette and scheme with workspace's storage instance if
     * storage based theming is enabled. Only syncs when user has explicitly selected a scheme.
     */
    trySynchronizeWorkspaceStorage: () => Promise<void>;
    /**
     * Set the current Palette to be used by workspace. This palette will be converted into
     * css vars and combined into a single stylesheet. This stylesheet is exposed in localstorage
     * to allow workspace UI elements to load the palette before their first paint.
     * @param palettes Light and Dark Palette constants
     */
    setLegacyPalettes: ({ light, dark }: LegacyPalettes, isWindows: boolean) => Promise<void>;
    setPalettes: ({ light, dark }: {
        light: string;
        dark: string;
    }) => Promise<void>;
    /**
     * Set the current scheme of workspace. Specifically setting light or dark
     * will ignore the OS scheme, whereas 'system' will always respect it.
     *
     * This will also update the CSS vars to either support media queries in System mode or force a palette.
     * @param scheme 'light', 'dark' or 'system'.
     */
    setScheme(scheme: ColorSchemeOptionType): void;
    /**
     * Set the theme's default scheme from palette configuration
     * @param scheme The default scheme specified in the palette
     */
    setThemeDefaultScheme(scheme: ColorSchemeOptionType): void;
    setGeneratedPalettes(generatedPalettes: GeneratedPalettes): void;
    /**
     * Returns the current scheme
     * @returns 'light' | 'system' | 'dark'
     */
    getScheme(): ColorSchemeOptionType;
    getThemePaletteSheet(): string | undefined;
    getThemePalette(): {
        light: string;
        dark: string;
    };
}
