import React from 'react';
import { RendererProps } from '../factory';
import { SchemaNode, Action } from '../types';
import { IListStore, IItem } from '../store/list';
import Sortable = require('sortablejs');
import { TableCell } from './Table';
export interface Column {
    type: string;
    [propName: string]: any;
}
export interface ListProps extends RendererProps {
    title?: string;
    header?: SchemaNode;
    body?: SchemaNode;
    footer?: SchemaNode;
    store: IListStore;
    className?: string;
    headerClassName?: string;
    footerClassName?: string;
    listItem?: any;
    source?: string;
    selectable?: boolean;
    selected?: Array<any>;
    valueField?: string;
    draggable?: boolean;
    onSelect: (selectedItems: Array<object>, unSelectedItems: Array<object>) => void;
    onSave?: (items: Array<object> | object, diff: Array<object> | object, rowIndexes: Array<number> | number, unModifiedItems?: Array<object>) => void;
    onSaveOrder?: (moved: Array<object>, items: Array<object>) => void;
    onQuery: (values: object) => void;
    hideCheckToggler?: boolean;
    itemCheckableOn?: string;
    itemDraggableOn?: string;
    size?: 'sm' | 'base';
}
export default class List extends React.Component<ListProps, object> {
    static propsList: Array<string>;
    static defaultProps: Partial<ListProps>;
    dragTip?: HTMLElement;
    sortable?: Sortable;
    parentNode?: any;
    body?: any;
    constructor(props: ListProps);
    static syncItems(store: IListStore, props: ListProps, prevProps?: ListProps): void;
    componentWillMount(): void;
    componentDidMount(): void;
    componentWillReceiveProps(nextProps: ListProps): void;
    componentWillUnmount(): void;
    bodyRef(ref: HTMLDivElement): void;
    affixDetect(): void;
    getPopOverContainer(): Element | Text | null;
    handleAction(e: React.UIEvent<any>, action: Action, ctx: object): void;
    handleCheck(item: IItem): void;
    handleCheckAll(): void;
    syncSelected(): void;
    handleQuickChange(item: IItem, values: object, saveImmediately?: boolean | any, saveSilent?: boolean): void;
    handleSave(): void;
    handleSaveOrder(): void;
    reset(): void;
    bulkUpdate(value: object, items: Array<object>): void;
    getSelected(): any[];
    dragTipRef(ref: any): void;
    initDragging(): void;
    destroyDragging(): void;
    renderActions(region: string): JSX.Element | null;
    renderHeading(): JSX.Element | null;
    renderHeader(): JSX.Element | JSX.Element[] | null;
    renderFooter(): JSX.Element | JSX.Element[] | null;
    render(): JSX.Element;
}
export declare class ListRenderer extends List {
    dragging: boolean;
    selectable: boolean;
    selected: boolean;
    title?: string;
    subTitle?: string;
    desc?: string;
    avatar?: string;
    avatarClassName?: string;
    body?: SchemaNode;
    actions?: Array<Action>;
    onCheck: (item: IItem) => void;
}
export interface ListItemProps extends RendererProps {
    hideCheckToggler?: boolean;
    item: IItem;
    checkable?: boolean;
    checkOnItemClick?: boolean;
}
export declare class ListItem extends React.Component<ListItemProps> {
    static defaultProps: Partial<ListItemProps>;
    static propsList: Array<string>;
    constructor(props: ListItemProps);
    handleClick(e: React.MouseEvent<HTMLDivElement>): void;
    handleCheck(): void;
    handleAction(e: React.UIEvent<any>, action: Action, ctx: object): void;
    handleQuickChange(values: object, saveImmediately?: boolean, saveSilent?: boolean): void;
    renderLeft(): JSX.Element | null;
    renderRight(): JSX.Element | null;
    renderChild(node: SchemaNode, region?: string, key?: any): JSX.Element;
    itemRender(field: any, index: number, props: any): JSX.Element | null;
    renderFeild(region: string, field: any, key: any, props: any): JSX.Element | null;
    renderBody(): JSX.Element | JSX.Element[] | null;
    render(): JSX.Element;
}
export declare class ListItemRenderer extends ListItem {
}
export declare class ListItemFieldRenderer extends TableCell {
    static defaultProps: {
        wrapperComponent: string;
        column?: object | undefined;
        render?: ((region: string, node: SchemaNode, props?: any) => JSX.Element) | undefined;
        env?: import("../factory").RendererEnv | undefined;
        classPrefix?: string | undefined;
        classnames?: import("../theme").ClassNamesFn | undefined;
        $path?: string | undefined;
        store?: import("mobx-state-tree").ModelInstanceType<import("mobx-state-tree").ModelPropertiesDeclarationToProperties<{
            id: import("mobx-state-tree").ISimpleType<string>;
            path: string;
            storeType: import("mobx-state-tree").ISimpleType<string>;
            hasRemoteData: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>>;
            data: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<any, any, any>>;
            updatedAt: number;
            pristine: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<any, any, any>>;
            parentId: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>>;
            action: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<any, any, any>>;
            dialogOpen: false;
            dialogData: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<any, any, any>>;
            drawerOpen: false;
            drawerData: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<any, any, any>>;
        }>, {
            readonly parentStore: import("mobx-state-tree").ModelInstanceType<import("mobx-state-tree").ModelPropertiesDeclarationToProperties<{
                id: import("mobx-state-tree").ISimpleType<string>;
                path: string;
                storeType: import("mobx-state-tree").ISimpleType<string>;
                hasRemoteData: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<boolean>>;
                data: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<any, any, any>>;
                updatedAt: number;
                pristine: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<any, any, any>>;
                parentId: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").ISimpleType<string>>;
                action: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<any, any, any>>;
                dialogOpen: false;
                dialogData: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<any, any, any>>;
                drawerOpen: false;
                drawerData: import("mobx-state-tree").IOptionalIType<import("mobx-state-tree").IType<any, any, any>>;
            }>, any & {
                initData(data?: object): void;
                reset(): void;
                updateData(data?: object, tag?: object | undefined): void;
                setCurrentAction(action: object): void;
                openDialog(ctx: any, additonal?: object | undefined, callback?: ((ret: any) => void) | undefined): void;
                closeDialog(result?: any): void;
                openDrawer(ctx: any, additonal?: object | undefined, callback?: ((ret: any) => void) | undefined): void;
                closeDrawer(result?: any): void;
            }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized> | null;
        } & {
            initData(data?: object): void;
            reset(): void;
            updateData(data?: object, tag?: object | undefined): void;
            setCurrentAction(action: object): void;
            openDialog(ctx: any, additonal?: object | undefined, callback?: ((ret: any) => void) | undefined): void;
            closeDialog(result?: any): void;
            openDrawer(ctx: any, additonal?: object | undefined, callback?: ((ret: any) => void) | undefined): void;
            closeDrawer(result?: any): void;
        }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized> | undefined;
        data?: {
            [propName: string]: any;
        } | undefined;
        defaultData?: object | undefined;
        className?: string | undefined;
    };
    static propsList: string[];
    render(): JSX.Element;
}
