import { AdaptableObject } from './AdaptableObject';
/**
 * Type of data stored in an AdapTable Column
 */
export type AdaptableColumnDataType = 'String' | 'Number' | 'Boolean' | 'Date' | 'Object' | 'StringArray' | 'NumberArray' | 'TupleNumberArray' | 'ObjectNumberArray' | 'Unknown';
/**
 * Base class for AdapTable Column containing most important properties
 */
export interface AdaptableColumnBase extends AdaptableObject {
    /**
     * Name of Column in AG Grid (e.g. field or colId)
     */
    columnId: string;
    /**
     * How Column is referred to in Adaptable UI; `Caption` property in AG Grid
     */
    friendlyName: string;
    /**
     * DataType of the Column
     */
    dataType: AdaptableColumnDataType;
    /**
     * Column Types of the Column
     */
    columnTypes?: string[];
}
export declare const isValidOrderForColumnGroups: ({ oldColumns, newColumns, }: {
    oldColumns: AdaptableColumn[];
    newColumns: AdaptableColumn[];
}) => boolean;
/**
 * Defines a Column Group
 */
export interface AdaptableColumnGroup {
    /**
     * Whether the Group can be split
     */
    allowGroupSplit: boolean;
    /**
     * Id for the Column Group
     */
    columnGroupId: string;
    /**
     * Friendly name for the Group
     */
    friendlyName: string;
    /**
     * Number of Columns in the the Group
     */
    groupCount: number;
}
/**
 * Defines an AdapTable Column - created at run-time based on AG Grid ColDef
 */
export interface AdaptableColumn<TData = any> extends AdaptableColumnBase {
    /**
     * Field in the row to get cell data from
     */
    field?: Extract<keyof TData, string>;
    /**
     * Is this the Primary Key Column
     */
    isPrimaryKey: boolean;
    /**
     * Column width
     */
    width?: number;
    /**
     * Flex details of the Column
     */
    flex?: number;
    /**
     * Is Column editable; returns FALSE if Column has conditional/dynamic editability, assuming some rows are editable
     */
    readOnly: boolean;
    /**
     * Is Column currently visible
     */
    visible: boolean;
    /**
     * Is the Column ONLY available as a field and never visible
     */
    fieldOnly: boolean;
    /**
     * Is Column sortable
     */
    sortable: boolean;
    /**
     * Is Column able to be filtered
     */
    filterable: boolean;
    /**
     * Can Column be moved at run-time to a new position
     */
    moveable: boolean;
    /**
     * Can Column be removed from the grid
     */
    hideable: boolean;
    /**
     * Can Column form a Row Group
     */
    groupable: boolean;
    /**
     * Can Column be used in a Pivot Grid
     */
    pivotable: boolean;
    /**
     * Is Column able to display aggregations (e.g. 'sum') when grouped
     */
    aggregatable: boolean;
    /**
     * Can the Column be in included in Queries / Expressions
     */
    queryable: boolean;
    /**
     * Whether the Column can be included in Reports
     */
    exportable: boolean;
    /**
     * Available Aggregations for the Column
     */
    availableAggregationFunctions?: string[];
    /**
     * Custom Aggregation function for the Column
     */
    aggregationFunction?: string;
    /**
     * Is Column currently Row-Grouped
     */
    isGrouped: boolean;
    /**
     * Is Column pinned or locked into position
     */
    isFixed: boolean;
    /**
     * The pinned position of the Column
     */
    pinned: 'left' | 'right' | false;
    /**
     * Is it a Sparkline Column
     */
    isSparkline: boolean;
    /**
     * Has colummn been excluded from Quick Search results
     */
    isExcludedFromQuickSearch: boolean;
    /**
     * The parent Column group (if Column belongs to one)
     */
    columnGroup?: AdaptableColumnGroup;
}
export interface AdaptableColumnProperties {
    sortable: boolean;
    filterable: boolean;
    moveable: boolean;
    groupable: boolean;
    pivotable: boolean;
    aggregatable: boolean;
}
