import React from 'react';
import { AttributeType, AttributeValue, ConnectionRelationType, Crosswalk, RelationCrosswalk, SearchFilter, SearchOperator } from '@reltio/mdm-sdk';
import { TextFieldProps } from '@mui/material/TextField';
import { Layout as LayoutItem } from 'react-grid-layout';
import { ClearIndicatorProps, ControlProps, DropdownIndicatorProps, GroupHeadingProps, MenuProps, PlaceholderProps, SingleValueProps, ValueContainerProps } from 'react-select';
export type ReactGridLayoutItem = LayoutItem;
export type ReltioGridLayoutOptions = {
    cols: number;
    rowHeight: number;
    margin: [number, number];
};
export type AttributeOption = {
    label: string;
    value: string;
    attrType: AttributeType;
    chipLabel: string;
    level: number;
};
export type QueryBuilderAttributeData = {
    title: string;
    pathToTitle: Array<string>;
    fieldName: string;
    entityTypeUri: string;
    attrType: AttributeType;
    uri: string;
    groupName: string;
    filterOptions: Array<string>;
};
export type QueryBuilderAttribute = {
    id: string | number;
    values: Array<unknown>;
    data: QueryBuilderAttributeData;
    filter: string;
    operator: SearchOperator;
};
export type FiltersRowData = {
    attribute: AttributeSelectorItem;
    filter: string;
    id: number;
    values: SearchFilter['values'];
    operator?: SearchOperator;
};
export type AttributeSelectorItem = {
    attrType?: AttributeType;
    entityTypeUri?: string;
    fieldName: string;
    groupName?: string;
    title: string;
    uri?: string;
    children?: AttributeSelectorItem[];
    pathToTitle?: string[];
};
export type AttributeSelectorItemsGroup = {
    id?: string;
    title: string;
    attributes: AttributeSelectorItem[];
};
export type AttributeSelectionInfo = {
    index: number;
    checked: boolean;
    attribute: AttributeSelectorItem;
    selectedAttributes: AttributeSelectorItem[];
};
export type BasicAttributeSelectorProps = {
    className?: string;
    itemsGroups: AttributeSelectorItemsGroup[];
    value: AttributeSelectorItem;
    onSelect: (selectInfo: AttributeSelectionInfo) => void;
    onRestoreFocus?: () => void;
    onOpenPopup?: () => void;
    getLabel?: (value: AttributeSelectorItem) => string;
    disableRestoreFocus?: boolean;
    disableEnforceFocus?: boolean;
    single?: boolean;
    ungroup?: boolean;
    disabled?: boolean;
    hideCheckBox?: boolean;
    additionalInfo?: string;
};
export declare enum RequestStates {
    INIT = "init",
    LOADING = "loading",
    LOADED = "loaded",
    ERROR = "error"
}
export type SelectableItem = {
    text?: string;
    disabled?: boolean;
    tooltip?: string;
    id?: string;
    onClick?: (e: any) => void;
    selected?: boolean;
};
export type DropDownMenuItem = {
    text?: string;
    disabled?: boolean;
    tooltip?: string;
    id?: string;
    onClick?: (e: any) => void;
    selectable?: boolean;
    selected?: boolean;
};
export type PerspectivesSettings = Record<string, PerspectiveSettingItem>;
export type PerspectiveSettingItem = {
    active?: number;
    width?: number;
};
export type RightPanelTab = {
    content?: React.ReactElement;
    title?: React.ReactElement;
    buttonProps?: {
        id: number;
        icon: React.FC;
        tooltipTitle: string;
        showForDisabled?: boolean;
    };
    headerProps?: {
        content: React.ReactElement;
    } | {
        mainTitle: string;
        secondTitle?: string;
        rightContent?: React.ReactElement;
    };
    hidden?: boolean;
};
export type AnyAction = {
    type: string;
    [key: string]: any;
};
export type AttributesFilterComponentsClasses = {
    attributeSelectorContainer?: string;
    valuesEditorContainer?: string;
    filterSelectorContainer?: string;
    actionsContainer?: string;
    filterPopup?: string;
    triggerButton?: string;
};
export declare enum ActionButtonMode {
    iconButton = "iconButton",
    button = "button",
    menuItem = "menuItem"
}
export type RelationCrosswalksMap = {
    [attrUri: string]: RelationCrosswalk[];
};
export type EntityCrosswalksMap = {
    [attrUri: string]: Crosswalk[];
};
export type CrosswalksMap = EntityCrosswalksMap | RelationCrosswalksMap;
export type ImageSize = {
    imageWidth: number | string;
    imageHeight: number | string;
};
export type ImageAttributeSize = ImageSize & {
    imageWidth: number;
    imageHeight: number;
    imageMargin: number;
};
export type RelationOption = {
    label: string;
    value: string;
} & Pick<ConnectionRelationType, 'startObject' | 'endObject'>;
export type DropDownEntryType<T = string> = {
    label?: string;
    value: T;
};
export type DropDownGroupEntryType<T = string> = {
    label?: string;
    values: DropDownEntryType<T>[];
    isGroup?: boolean;
};
export type AdditionalControlsRenderer<T extends AttributeValue> = {
    attributeType: AttributeType;
    attributeValue: T;
};
export declare enum ImportModes {
    Init = "Init",
    Progress = "Progress",
    Success = "Success",
    Done = "Done"
}
export declare enum MatchRuleVariant {
    all = "all",
    simple = "simple",
    excludeNotMatch = "excludeNotMatch"
}
export type ReadOnlyAttributeClasses = {
    title?: string;
    content?: string;
    wrapper?: string;
    wrapperWithLines?: string;
};
export type ReactSelectMuiSkinProps = {
    classes?: Record<string, string>;
    error?: boolean;
    TextFieldProps?: TextFieldProps;
    innerRef?: React.MutableRefObject<any>;
    inputRef?: React.MutableRefObject<any>;
    menuListFooter?: React.ReactElement;
};
export type DropdownIndicatorWithMuiSkinProps<T> = DropdownIndicatorProps & {
    selectProps: DropdownIndicatorProps['selectProps'] & ReactSelectMuiSkinProps;
    innerProps: T;
};
export type ClearIndicatorWithMuiSkinProps<T> = ClearIndicatorProps & {
    selectProps: ClearIndicatorProps['selectProps'] & ReactSelectMuiSkinProps;
    innerProps: T;
};
export type ControlWithMuiSkinProps<T> = ControlProps & {
    selectProps: ControlProps['selectProps'] & ReactSelectMuiSkinProps;
    innerProps: T;
};
export type GroupHeadingWithMuiSkinProps = GroupHeadingProps & {
    selectProps: GroupHeadingProps['selectProps'] & ReactSelectMuiSkinProps;
};
export type MenuWithMuiSkinProps<T> = MenuProps & {
    selectProps: MenuProps['selectProps'] & ReactSelectMuiSkinProps;
    innerProps: T;
};
export type PlaceholderWithMuiSkinProps<T> = PlaceholderProps & {
    selectProps: PlaceholderProps['selectProps'] & ReactSelectMuiSkinProps;
    innerProps: T;
};
export type ValueContainerWithMuiSkinProps = ValueContainerProps & {
    selectProps: ValueContainerProps['selectProps'] & ReactSelectMuiSkinProps;
};
export type SingleValueWithMuiSkinProps<T> = SingleValueProps & {
    selectProps: SingleValueProps['selectProps'] & ReactSelectMuiSkinProps;
    innerProps: T;
};
