import { ButtonStyle } from './ButtonStyle';
import { Identifiable } from './AdaptableObject';
import { AdaptableIcon } from './AdaptableIcon';
import { BaseContext } from '../../types';
/**
 * Defines a Button that appears in numerous places including Adaptable Form
 */
export interface AdaptableButton<CONTEXT_TYPE extends BaseContext> extends Identifiable {
    /**
     * Label for Button - can be string or function that provides string
     */
    label?: string | ((button: AdaptableButton<CONTEXT_TYPE>, context: CONTEXT_TYPE) => string);
    /**
     * Style for Button - can be object or function that provides a `ButtonStyle` object
     */
    buttonStyle?: ButtonStyle | ((button: AdaptableButton<CONTEXT_TYPE>, context: CONTEXT_TYPE) => ButtonStyle);
    /**
     * Icon for Button - can be object or function that provides a `AdaptableIcon` object
     */
    icon?: AdaptableIcon | ((button: AdaptableButton<CONTEXT_TYPE>, context: CONTEXT_TYPE) => AdaptableIcon);
    /**
     * Tooltip for Button - can be string or function that provides string
     */
    tooltip?: string | ((button: AdaptableButton<CONTEXT_TYPE>, context: CONTEXT_TYPE) => string);
    /**
     * Function that disables / enables the button based on its evaluation result
     */
    disabled?: (button: AdaptableButton<CONTEXT_TYPE>, context: CONTEXT_TYPE) => boolean;
    /**
     * Function to invoke when button is clicked
     */
    onClick?: (button: AdaptableButton<CONTEXT_TYPE>, context: CONTEXT_TYPE) => void;
    /**
     * Function which sets whether Button is hidden
     */
    hidden?: (button: AdaptableButton<CONTEXT_TYPE>, context: CONTEXT_TYPE) => boolean;
}
