import { IModule, ModuleInfo, TeamSharingReferences } from './Interface/IModule';
import { Action } from 'redux';
import { AdaptableColumn } from '../AdaptableState/Common/AdaptableColumn';
import { ModuleParams } from '../View/Components/SharedProps/ModuleViewPopupProps';
import { MenuItemShowPopup, MenuItemDoReduxAction, MenuItemDoClickFunction } from '../Utilities/MenuItem';
import { AdaptableMenuItem, AdaptableContextMenuItemName, ContextMenuContext, AdaptableColumnMenuItemName } from '../AdaptableState/Common/Menu';
import { AdaptableModule } from '../AdaptableState/Common/Types';
import { TeamSharingImportInfo } from '../AdaptableState/TeamSharingState';
import { AdaptableObject } from '../AdaptableState/Common/AdaptableObject';
import { AdaptableApi } from '../Api/AdaptableApi';
import { AccessLevel } from '../AdaptableState/Common/Entitlement';
import { CalculatedColumn } from '../AdaptableState/CalculatedColumnState';
import { FreeTextColumn } from '../AdaptableState/FreeTextColumnState';
import { AdaptableSystemIconName } from '../AdaptableState/Common/AdaptableIcon';
import { AdaptableStateReloadedInfo } from '../Api/Events/AdaptableStateReloaded';
/**
 * Base class for all strategies and does most of the work of creating menus
 */
export declare abstract class AdaptableModuleBase implements IModule {
    protected api: AdaptableApi;
    moduleInfo: ModuleInfo;
    AccessLevel: AccessLevel;
    constructor(module: AdaptableModule, friendlyName: string, glyph: AdaptableSystemIconName, popup: string, description: string, api: AdaptableApi);
    protected getViewAccessLevel(): AccessLevel;
    protected getEditAccessLevel(): AccessLevel;
    isModuleAvailable(): boolean;
    /**
     * Used inside the unified UI to show the share button
     */
    isModuleObjectsShareable(): boolean;
    isModuleEditable(): boolean;
    getModuleAdaptableObjects(): AdaptableObject[];
    getExplicitlyReferencedColumnIds(adaptableObject: AdaptableObject): string[];
    getReferencedNamedQueryNames(adaptableObject: AdaptableObject): string[];
    hasNamedQueryReferences(): boolean;
    onAdaptableReady(): void;
    onAdaptableStateReloaded(adaptableStateReloadedInfo: AdaptableStateReloadedInfo): void;
    setModuleEntitlement(): void;
    createModuleMenuItem(source: 'ModuleMenu' | 'ModuleButton'): AdaptableMenuItem | undefined;
    createColumnMenuItems(column: AdaptableColumn): AdaptableMenuItem<AdaptableColumnMenuItemName>[] | undefined;
    createContextMenuItems(menuContext: ContextMenuContext): AdaptableMenuItem<AdaptableContextMenuItemName>[] | undefined;
    createMainMenuItemShowPopup<MENU_TYPE_NAME extends AdaptableColumnMenuItemName | AdaptableContextMenuItemName = AdaptableColumnMenuItemName | AdaptableContextMenuItemName>({ Name, Label, ComponentName, Icon, PopupParams, }: {
        Name: MENU_TYPE_NAME;
        Label: string;
        ComponentName: string;
        Icon: AdaptableSystemIconName;
        PopupParams?: ModuleParams;
    }): MenuItemShowPopup<MENU_TYPE_NAME>;
    createMenuItemClickFunction<MENU_TYPE_NAME extends AdaptableColumnMenuItemName | AdaptableContextMenuItemName = AdaptableColumnMenuItemName | AdaptableContextMenuItemName>(Name: MENU_TYPE_NAME, Label: string, Icon: AdaptableSystemIconName, ClickFunction: () => void): MenuItemDoClickFunction<MENU_TYPE_NAME>;
    createMenuItemReduxAction<MENU_TYPE_NAME extends AdaptableColumnMenuItemName | AdaptableContextMenuItemName = AdaptableColumnMenuItemName | AdaptableContextMenuItemName>(Name: MENU_TYPE_NAME, Label: string, Icon: AdaptableSystemIconName, Action: Action): MenuItemDoReduxAction<MENU_TYPE_NAME>;
    createMenuItemShowPopup<MENU_TYPE_NAME extends AdaptableColumnMenuItemName | AdaptableContextMenuItemName = AdaptableColumnMenuItemName | AdaptableContextMenuItemName>(Name: MENU_TYPE_NAME, Label: string, ComponentName: string, Icon: AdaptableSystemIconName, PopupParams?: ModuleParams): MenuItemShowPopup<MENU_TYPE_NAME>;
    getTeamSharingAction(): TeamSharingImportInfo<AdaptableObject> | undefined;
    getModuleNamedQueryReferences(): string[];
    getModuleCalculatedColumnReferences(): CalculatedColumn[];
    getModuleFreeTextColumnReferences(): FreeTextColumn[];
    getTeamSharingReferences(adaptableObject: AdaptableObject): TeamSharingReferences;
    getPopupMaxWidth(): number | undefined;
    /**
     * TRUE for objects of type {@link LayoutAssociatedObject}
     */
    canBeAssociatedWithLayouts(): boolean;
    showLayoutNotAssociatedObjects(): boolean;
    private getFriendlyName;
    private hasRequiredAccessLevel;
}
