import { BaseState } from './BaseState';
import { AdaptableObject } from './Common/AdaptableObject';
import { TypeHint } from './Common/Types';
/**
 * Shipped AdapTable theme names.
 */
export type SystemThemeName = TypeHint<string, 'light' | 'dark' | 'os'>;
/**
 * Theme section of Adaptable State
 */
export interface ThemeState extends BaseState {
    /**
     * Name of current Theme or theme set at startup; leave blank if using 'Light Theme', set to 'dark' for 'Dark Theme'
     */
    CurrentTheme?: SystemThemeName;
    /**
     * Which shipped themes are available; pass theme name string, or `{ Name, AgThemeMode? }` to pair a custom AG Grid theme mode; leave unset for all shipped themes
     */
    SystemThemes?: (SystemThemeEntry | AdaptableTheme)[];
    /**
     * Custom themes provided by developers (deprecated)
     *
     * @deprecated Will be removed in next major version. Customise shipped `light` / `dark` themes via CSS variable overrides instead.
     */
    UserThemes?: AdaptableTheme[];
}
/**
 * Pairing options between AG Grid and AdapTable themes
 */
export interface SystemThemeOptions {
    /**
     * Shipped theme this entry configures: `light`, `dark`, or `os`
     */
    Name: SystemThemeName;
    /**
     * AG Grid theme mode to apply when this theme is selected; valid values are `light`, `dark`, `dark-blue` or any custom theme mode defined in AG Grid
     */
    AgThemeMode?: TypeHint<string, 'light' | 'dark' | 'dark-blue'>;
    /**
     * Ag Grid theme to apply when loading theme; relevant only when using legacy AG Grid themes
     *
     * @deprecated no longer used with new AG Grid Theming API
     */
    AgGridClassName?: string;
}
/**
 * Configures a shipped system theme: a theme name, or an object with AG Grid pairing options
 */
export type SystemThemeEntry = SystemThemeName | SystemThemeOptions;
/**
 * Used for creating Custom Themes (deprecated)
 *
 * @deprecated User-defined themes are deprecated; customise shipped themes via CSS variables and use SystemThemeOptions for AG Grid pairing
 */
export interface AdaptableTheme extends AdaptableObject {
    Name: string;
    Description: string;
    AgGridClassName?: string;
    CSSVariables?: Record<string, string>;
    Variant?: 'light' | 'dark';
    AgThemeMode?: TypeHint<string, 'light' | 'dark' | 'dark-blue'>;
}
