import type { PickClassStyleType, RendererProps, Schema, SchemaBoolean } from 'jamis-core';
import type { ActionSchema, BaseSchemaScoped, CardSchema, IListItem, IListStore, SchemaClassName, SchemaCollection, SchemaExpression, SchemaSlots, SchemaTokenizeableString, SchemaTpl, WithPrefixAffixHook, WithWrapperHook } from '../types';
/**
 * Cards 卡片集合组件。
 */
export interface CardsSchema extends BaseSchemaScoped, WithWrapperHook, WithPrefixAffixHook {
    /**
     * 指定为 cards 类型
     */
    type: 'cards';
    card?: Partial<CardSchema>;
    /**
     * 头部 CSS 类名
     * @deprecated 请使用`slots.Cards-header.className`
     */
    headerClassName?: SchemaClassName;
    /**
     * 底部 CSS 类名
     * @deprecated 请使用`slots.Cards-footer.className`
     */
    footerClassName?: SchemaClassName;
    /**
     * 卡片 CSS 类名
     * @deprecated 请使用`slots.className`
     */
    itemClassName?: SchemaClassName;
    /** @deprecated 请使用`slots.className` */
    cardClassName?: SchemaClassName;
    checkAll?: boolean;
    /**
     * 无数据提示
     * @deprecated 请使用`slots`
     */
    placeholder?: SchemaTpl;
    /**
     * @deprecated 请使用`slots`
     */
    placeholderExpr?: SchemaTpl;
    /**
     * 是否显示底部
     */
    showFooter?: boolean;
    /**
     * 是否显示头部
     */
    showHeader?: boolean;
    /**
     * 数据源: 绑定当前环境变量
     *
     * @default ${items}
     */
    source?: SchemaTokenizeableString;
    /**
     * 是否隐藏勾选框
     */
    hideCheckToggler?: boolean;
    /**
     * 是否固顶
     */
    affixHeader?: boolean;
    /**
     * 顶部区域
     * @deprecated 请使用`slots`
     */
    header?: SchemaCollection;
    /** @deprecated 请使用`slots.className` */
    headerToolbarClassName?: SchemaClassName;
    /** @deprecated 请使用`slots.className` */
    toolbarClassName?: SchemaClassName;
    /**
     * 底部区域
     * @deprecated 请使用`slots`
     */
    footer?: SchemaCollection;
    /** @deprecated 请使用`slots.className` */
    footerToolbarClassName?: SchemaClassName;
    /**
     * 配置某项是否可以点选
     */
    itemCheckableOn?: SchemaExpression;
    /**
     * 配置某项是否可拖拽排序，前提是要开启拖拽功能
     */
    itemDraggableOn?: SchemaExpression;
    /**
     * 点击卡片的时候是否勾选卡片。
     */
    checkOnItemClick?: boolean;
    /**
     * 是否为瀑布流布局？
     */
    masonryLayout?: boolean;
    /**
     * 可以用来作为值的字段
     */
    valueField?: string;
    /**
     * 卡片一行显示几列, 默认会自适应
     */
    columnsCount?: number;
    itemAction?: ActionSchema;
    /** 是否显示加载中 */
    showLoading?: boolean;
    showLoadingOn?: SchemaBoolean;
    lazyRenderAfter?: number;
    /** @deprecated 请使用`slots.className` */
    lazyItemClassName?: SchemaClassName;
    /**
     * 是否多选
     */
    multiple?: SchemaBoolean;
    slots?: SchemaSlots<'Cards-header' | 'Cards-toolbar' | 'Cards-headerToolbar' | 'Cards-footer' | 'Cards-footerToolbar' | 'Cards-beforeRegion' | 'Cards-afterRegion' | (string & {})>;
}
export interface CardsProps extends RendererProps, Omit<CardsSchema, 'className' | 'itemClassName' | 'data'> {
    store: IListStore;
    selectable?: boolean;
    selected?: Array<any>;
    checkAll?: boolean;
    valueField?: string;
    draggable?: boolean;
    dragIcon?: SVGAElement;
    onSelect: (selectedItems: Array<object>, unSelectedItems: Array<object>) => void;
    onSave?: (items: Array<object> | object, diff: Array<object> | object, rowIndexes: Array<number> | number, unModifiedItems?: Array<object>, rowOrigins?: Array<object> | object, options?: {
        resetOnFailed?: boolean;
        reload?: string;
    }) => void;
    onSaveOrder?: (moved: Array<object>, items: Array<object>) => void;
    onQuery: (values: object) => void;
}
export type CardsRendererEvent = 'change' | 'selected' | 'selectedChange' | 'cardClick' | 'cardDbClick';
export type CardsRendererAction = 'check-all' | 'toggleSelectAll' | 'selectAll' | 'clearAll';
export interface CardsItemWrapperProps extends PickClassStyleType {
    index: number;
    card: Schema | undefined;
    item: IListItem;
    itemClassName: string;
    lazyItemClassName?: SchemaClassName;
    syncSelected: () => void;
    handleAction: CardsProps['onAction'];
    cardsProps: Pick<CardsProps, 'checkOnItemClick' | 'hideCheckToggler' | 'cardClassName' | 'itemAction' | 'data' | 'dispatchEvent' | 'onEvent' | 'onAction' | 'onSave' | 'primaryField' | 'render'> & {
        multiple?: boolean;
    };
    storeProps: Pick<IListStore, 'dragging' | 'selectable' | 'selectedItems' | 'unSelectedItems'>;
}
