import type { Option, Options, PickClassStyleType, ReactPropsBase, SchemaClassName } from 'jamis-core';
import type { BaseSelectionProps, ItemRenderStates, ResultItemRenderStates, TooltipObject, TreeCompProps } from '../../types';
type SelectMode = 'table' | 'group' | 'list' | 'tree' | 'chained' | 'associated';
export interface TransferProps extends ReactPropsBase, Omit<BaseSelectionProps, 'itemRender'>, PickClassStyleType {
    inline?: boolean;
    statistics?: boolean;
    showArrow?: boolean;
    multiple?: boolean;
    selectTitle?: string;
    selectMode?: SelectMode;
    groupConfig?: Partial<BaseSelectionProps>;
    listConfig?: Partial<BaseSelectionProps>;
    treeConfig?: Partial<TreeCompProps>;
    tableConfig?: Partial<TableSelectionProps>;
    associatedConfig?: Partial<AssociatedSelectionProps>;
    chainedConfig?: Partial<ChainedSelectionProps>;
    columns?: Array<{
        name: string;
        label: string;
        [propName: string]: any;
    }>;
    hasError?: boolean;
    leftOptions?: Array<Option>;
    leftMode?: 'tree' | 'list' | 'group';
    /**
     * selectMode为associated时才有用
     * @deprecated
     */
    leftDefaultValue?: any;
    rightMode?: 'table' | 'list' | 'group' | 'tree' | 'chained';
    searchResultMode?: 'table' | 'list' | 'group' | 'tree' | 'chained';
    searchResultColumns?: Array<{
        name: string;
        label: string;
        [propName: string]: any;
    }>;
    searchPlaceholder?: string;
    noResultsText?: string;
    cellRender?: (column: {
        name: string;
        label: string;
        [propName: string]: any;
    }, option: Option, colIndex: number, rowIndex: number) => JSX.Element;
    resultTitle?: string;
    resultListModeFollowSelect?: boolean;
    resultSearchPlaceholder?: string;
    resultSearchable?: boolean;
    sortable?: boolean;
    titleClassName?: SchemaClassName;
    leftWrapClassName?: SchemaClassName;
    optionItemRender?: (option: Option, states: ItemRenderStates) => JSX.Element;
    resultItemRender?: (option: Option, states: ResultItemRenderStates) => JSX.Element;
    selectRender?: (props: Omit<TransferProps, 'onSearch'> & {
        onSearch: (text: string) => void;
        onSearchCancel: () => void;
        searchResult: Options | null;
    }) => JSX.Element;
    onChange?: (value: Array<Option>, optionModified?: boolean) => void | boolean | Promise<boolean>;
    onSearch?: (term: string, setCancel?: (cancel: () => void) => void) => Promise<Options | void>;
    onResultSearch?: (text: string, item: Option) => boolean;
    onRef?: (ref: any) => void;
    onSelectAll?: (options: Options) => void;
}
export interface TabsTransferProps extends Omit<TransferProps, 'selectMode' | 'columns' | 'selectRender' | 'statistics' | 'onSearch' | 'optionItemRender'> {
    onSearch: (term: string, option: Option, setCancel: (cancel: () => void) => void) => Promise<Options | void>;
    optionItemRender?: (option: Option, states: ItemRenderStates, tab: Option) => JSX.Element;
    cellRender?: (column: {
        name: string;
        label: string;
        [propName: string]: any;
    }, option: Option, colIndex: number, rowIndex: number) => JSX.Element;
    onTabChange: (key: number) => void;
    activeKey: number;
}
export interface TransferDropDownProps extends TransferProps, PickClassStyleType {
    multiple?: boolean;
    borderMode?: 'full' | 'half' | 'none';
    popOverContainer?: any;
    popoverClassName?: SchemaClassName;
    maxTagCount?: number;
    overflowTagPopover?: TooltipObject;
    /** 是否平铺 */
    tiled?: boolean;
    /** 多选时, 是否自动清除搜索条件 */
    autoClearSearchValue?: boolean;
    itemRender: (option: Option) => JSX.Element | string;
}
export interface AssociatedSelectionProps extends BaseSelectionProps {
    leftOptions: Options;
    leftDefaultValue?: any;
    leftClassName?: SchemaClassName;
    rightClassName?: SchemaClassName;
    leftMode?: 'tree' | 'list' | 'group';
    rightMode?: 'table' | 'list' | 'group' | 'tree' | 'chained';
    columns?: Array<any>;
    cellRender?: (column: {
        name: string;
        label: string;
        [propName: string]: any;
    }, option: Option, colIndex: number, rowIndex: number) => JSX.Element;
}
export interface ChainedSelectionProps extends BaseSelectionProps {
    defaultSelectedIndex?: string;
    colClassName?: SchemaClassName;
    subTitleClassName?: SchemaClassName;
}
export interface TableSelectionProps extends BaseSelectionProps {
    /** 是否为结果渲染列表 */
    resultMode?: boolean;
    columns: Array<{
        name: string;
        label: string;
        [propName: string]: any;
    }>;
    cellRender: (column: {
        name: string;
        label: string;
        [propName: string]: any;
    }, option: Option, colIndex: number, rowIndex: number) => JSX.Element;
}
export {};
