import * as Redux from 'redux';
import { AdaptableOptions } from './AdaptableOptions';
import { AgGridConfig, IAdaptable } from '../AdaptableInterfaces/IAdaptable';
import { IAdaptableStore } from '../Redux/Store/Interface/IAdaptableStore';
import { AdaptableApi } from '../types';
import { AdaptableState } from '../AdaptableState/AdaptableState';
import { AdaptableModule } from '../AdaptableState/Common/Types';
import { IModule } from '../Strategy/Interface/IModule';
import { ColumnSetupInfo } from '../AdaptableState/Common/ColumnSetupInfo';
import { ColDef } from 'ag-grid-enterprise';
import { Layout } from '../AdaptableState/LayoutState';
type AdaptableReducerObject = {
    [key: string]: (...args: any[]) => any;
};
/**
 * Base class for all AdapTable Plugins
 */
export declare abstract class AdaptablePlugin {
    options?: any;
    private values;
    pluginId: string;
    constructor(options?: any);
    registerProperty(name: string, fn: (...args: any) => any): void;
    getProperty(name: string): any;
    rootReducer?: (rootReducer: AdaptableReducerObject) => AdaptableReducerObject;
    reduxMiddleware?: (adaptable: IAdaptable) => Redux.Middleware;
    hasProperty(name: string): boolean;
    beforeInit(adaptableOptions: AdaptableOptions, agGridOptions: AgGridConfig): void;
    afterInitOptions(adaptable: IAdaptable, adaptableOptions: AdaptableOptions): void;
    afterInitApi(adaptable: IAdaptable, api: AdaptableApi): void;
    afterInitServices(adaptable: IAdaptable): void;
    afterInitialStateLoaded(adaptable: IAdaptable): void;
    afterInitModules(adaptable: IAdaptable, strategies: Map<AdaptableModule, IModule>): void;
    afterInitStore(adaptable: IAdaptable): void;
    afterInit(ab: IAdaptable): void;
    afterSetLayout(adaptable: IAdaptable, layout: Layout): void;
    onStoreEvent(eventName: string, data: {
        action: Redux.Action;
        state: AdaptableState;
        newState: AdaptableState;
    }, adaptableStore: IAdaptableStore): void;
    onAdaptableReady(adaptable: IAdaptable, adaptableOptions: AdaptableOptions): void;
    interceptSetupColumnProperty?: <T extends keyof ColDef>(columnSetupInfo: ColumnSetupInfo, propertyName: T, currentValue: ColDef[T] | undefined, api: AdaptableApi) => ColDef[T] | undefined;
}
export {};
