import React from 'react';
/**
 * 条件面板 Props
 */
export interface ConditionPanelProps<T = any> {
    /** 触发按钮的内容（需为 ReactElement，以便 CnPopup 绑定 ref） */
    trigger: React.ReactElement;
    /** 面板标题 */
    title: string;
    /** 条件列表 */
    conditions: T[];
    /** 条件数量（用于显示在按钮上） */
    conditionCount: number;
    /** 添加按钮文本 */
    addButtonText: string;
    /** 添加条件回调 */
    onAdd: () => void;
    /** 删除条件回调 */
    onRemove: (index: number) => void;
    /** 拖拽重排回调，从 fromIndex 移动到 toIndex */
    onReorder?: (fromIndex: number, toIndex: number) => void;
    /**
     * 提供条件项的稳定 ID（用于 dnd-kit / React key）。
     * 启用拖拽（传入 onReorder）时强烈建议提供，否则 fallback 到 index，
     * 中间项删除/重排会导致子组件重新挂载。
     */
    getItemId?: (condition: T, index: number) => string;
    /** 渲染单个条件项 */
    renderConditionItem: (condition: T, index: number) => React.ReactNode;
    /** 是否保持可见（用于通知栏场景） */
    keepVisible?: boolean;
    /** 最大条件数量 */
    maxConditions?: number;
    /** Popup 的位置 */
    placement?: 'bl' | 'br' | 'tl' | 'tr';
    /** Popup 的偏移量 */
    offset?: [number, number];
    /** 按钮是否激活状态 */
    active?: boolean;
    /** 视图 ID（用于监听视图变化时关闭面板） */
    viewId?: string;
    /** 是否显示仅当前页提示，传动作词如「筛选」「分组」「排序」，展示为「仅对当前页${currentPageHintText}」 */
    currentPageHintText?: string;
    /** 多条件时从第二项起每项前是否显示「且」 */
    showAndBeforeCondition?: boolean;
    /** 是否显示分隔线 */
    showDivider?: boolean;
    /** 受控：面板是否可见（与 onVisibleChange 一起使用时生效，用于响应式下由按钮 onClick 控制开关） */
    visible?: boolean;
    /** 受控：面板可见变化回调 */
    onVisibleChange?: (visible: boolean) => void;
    /** 打开前校验，返回 false 时阻止打开并提示（如专业版 fieldMap 为空时） */
    shouldOpen?: () => boolean;
    /** 面板自定义 className */
    popupClassName?: string;
}
