import { ConfigState } from './ConfigState';
import { AdaptableStyle } from './Common/AdaptableStyle';
import { AdaptableColumnPredicate, ColumnScope } from '../types';
import { XOR } from '../Utilities/Extensions/TypeExtensions';
import { AdaptableBooleanQuery } from './Common/AdaptableQuery';
import { TypeHint } from './Common/Types';
import { SuspendableObject } from '../../types';
export interface FlashingCellDefinitionPredicate extends AdaptableColumnPredicate {
    PredicateId: TypeHint<string, SystemFlashingCellPredicateId>;
}
/**
 * The Flashing Cell Rule - either an AdaptablePredicate or an AdaptableQuery
 */
export type FlashingCellRule = XOR<{
    Predicates: FlashingCellDefinitionPredicate[];
}, AdaptableBooleanQuery>;
/**
 * Predefined Configuration for Flashing Cell module
 */
export interface FlashingCellState extends ConfigState {
    /**
     * Flashing Cell Definitions - will colour cells/rows when rule is met
     */
    FlashingCellDefinitions?: FlashingCellDefinition[];
}
/**
 * What should flash? row, cell or aggregated cell
 */
export type FlashTargetTypes = 'row' | 'cell' | 'aggFuncCell';
/**
 * The Flashing Cell Definition
 */
export interface FlashingCellDefinition extends SuspendableObject {
    /**
     * Where Flashing Cell can display: Column[s] or DataType[s]
     */
    Scope: ColumnScope;
    /**
     * When Flashing Cell should be triggered
     */
    Rule: FlashingCellRule;
    /**
     * Should a cell or whole row flash
     * @defaultValue  'cell'
     */
    FlashTarget?: FlashTargetTypes | FlashTargetTypes[];
    /**
     * Style for 'Down' value changes
     *  @defaultValue  Red BackColour
     */
    DownChangeStyle?: AdaptableStyle;
    /**
     * Style for 'Up' value changes
     * @defaultValue  Green BackColour
     */
    UpChangeStyle?: AdaptableStyle;
    /**
     * Style for 'Neutral' value changes
     * @defaultValue  Gray BackColour
     */
    NeutralChangeStyle?: AdaptableStyle;
    /**
     * Duration of Flash - can be number (in ms) or 'always'
     * @defaultValue 500ms
     */
    FlashDuration?: number | 'always';
}
/**
 * Array containing all System Flashing Cell Predicates
 */
export type SystemFlashingCellPredicateIds = SystemFlashingCellPredicateId[];
/**
 * List of System Predicates available for Flashing Cells
 */
export type SystemFlashingCellPredicateId = 'Blanks' | 'NonBlanks' | 'Equals' | 'NotEquals' | 'GreaterThan' | 'LessThan' | 'Positive' | 'Negative' | 'Zero' | 'Between' | 'NotBetween' | 'Is' | 'IsNot' | 'Contains' | 'NotContains' | 'StartsWith' | 'EndsWith' | 'Regex' | 'Today' | 'Yesterday' | 'Tomorrow' | 'ThisWeek' | 'ThisMonth' | 'ThisQuarter' | 'ThisYear' | 'InPast' | 'InFuture' | 'Before' | 'After' | 'On' | 'NotOn' | 'NextWorkDay' | 'LastWorkDay' | 'WorkDay' | 'Holiday' | 'True' | 'False' | 'PercentChange' | 'IsNumeric' | 'IsNotNumeric' | 'Values' | 'ExcludeValues' | 'AnyChange';
