import { AdaptableIcon } from '../AdaptableState/Common/AdaptableIcon';
import { DateInputOptions } from './DateInputOptions';
import { AdaptableObjectTag } from '../AdaptableState/Common/AdaptableObject';
import { AdaptableStyle } from '../AdaptableState/Common/AdaptableStyle';
import { AlternativeModuleName, BaseContext } from '../../types';
/**
 * Options for managing the User Interface of AdapTable
 */
export interface UserInterfaceOptions<TData = any> {
    /**
     * Show Mac-like scrollbars; size is configurable via CSS variable `--ab-custom-scrollbar-size` (default: `10px`)
     *
     * @defaultValue false
     * @gridInfoItem
     */
    useCustomMacLikeScrollbars?: boolean;
    /**
     * The application icon to appear in Dashboard and elsewhere (e.g. in Notifications)
     *
     * @defaultValue null
     */
    applicationIcon?: AdaptableIcon;
    /**
     * Bespoke icons that can be used in AdapTable (e.g. Badge Styles and Buttons)
     */
    customIcons?: CustomIcon[] | (() => CustomIcon[]);
    /**
     * Options for managing and customizing date inputs in AdapTable
     */
    dateInputOptions?: DateInputOptions;
    /**
     * Colours to display in Colour Picker (in place of AdapTable's default set); can be hardcoded list or function
     */
    colorPalette?: string[] | ((currentTheme: string) => string[]);
    /**
     * Style to set for editable Cells
     */
    editableCellStyle?: AdaptableStyle;
    /**
     * Style to set for non-editable Cells
     */
    readOnlyCellStyle?: AdaptableStyle;
    /**
     * Style to set for Cells which have been edited
     */
    editedCellStyle?: AdaptableStyle;
    /**
     * Optional list of CSS styles that can be used when creating Adaptable Styles in Adaptable (e.g. in Format Column and other Modules)
     *
     * @gridInfoItem
     */
    styleClassNames?: string[];
    /**
     * Optional list of AdaptableObjectTags that can be associated with AdaptableObjects
     */
    objectTags?: AdaptableObjectTag[] | ((context: ObjectTagsContext) => AdaptableObjectTag[]);
    /**
     * Provide links to AdapTable documentation (in Module popups and Expression Editor)
     *
     * @defaultValue true
     * @gridInfoItem
     */
    showDocumentationLinks?: boolean;
    /**
     * Displays the AdapTable version in Grid Info section of Settings Panel
     *
     * @defaultValue true
     * @gridInfoItem
     */
    showAdapTableVersion?: boolean;
    /**
     * Displays the AG Grid version in Grid Info section of Settings Panel
     *
     * @defaultValue true
     * @gridInfoItem
     */
    showAgGridVersion?: boolean;
    /**
     * English variant to use in AdapTable UI
     *
     * @defaultValue 'GB'
     * @gridInfoItem
     */
    englishVariant?: 'GB' | 'US';
    /**
     * Hides confirmation dialog which displays whenever an AdaptableObject is deleted
     * @defaultValue false
     * @noCodeItem
     */
    disableDeleteConfirmation?: boolean;
    /**
     * Alternative names to use for Adaptable Modules in the UI
     *
     * @defaultValue null
     */
    alternativeModuleNames?: AlternativeModuleName[];
    /**
     * Options for showing Loading Screen (during initialisation)
     */
    loadingScreenOptions?: LoadingScreenOptions;
}
/**
 * Options for the Loading Screen shown when AdapTable is initialising
 */
export interface LoadingScreenOptions<TData = any> {
    /**
     * Display Loading message when AdapTable initialises
     * @defaultValue true
     * @noCodeItem
     */
    showLoadingScreen?: boolean;
    /**
     * Delay in ms before Loading Screen appears (`showLoadingScreen` must be true)
     *
     * @defaultValue 200
     */
    loadingScreenDelay?: number;
    /**
     * Title to display in Loading Screen.
     * @defaultValue 'Initialising Grid'
     */
    loadingScreenTitle?: string;
    /**
     * Text to display in Loading Screen.
     *
     * @defaultValue 'Retrieving your settings and setting up Grid...'
     */
    loadingScreenText?: string;
}
/**
 * Context used when evaluating Object Tags
 */
export interface ObjectTagsContext extends BaseContext {
}
/**
 * Defines a bespoke Icon provided by a developer
 */
export interface CustomIcon {
    /**
     * Name of Icon
     */
    name: string;
    /**
     * AdapTable Icon definition
     */
    icon: AdaptableIcon;
}
