import type { BaseSelectProps, SelectOption } from '@pisell/utils';
/**
 * PisellMultipleSelect 组件 Props 类型定义
 *
 * 继承 BaseSelectProps，添加多选特有的配置
 * @template T 选项值的类型，默认为 string | number
 */
export interface PisellMultipleSelectProps<T = string | number> extends BaseSelectProps<T> {
    /**
     * 受控模式：当前选中值数组
     */
    value?: T[];
    /**
     * 非受控模式：默认选中值数组
     */
    defaultValue?: T[];
    /**
     * 值变化回调
     * @param value 新的选中值数组
     * @param options 选中的选项对象数组
     */
    onChange?: (value: T[], options: SelectOption<T>[]) => void;
    /**
     * 最多显示的标签数量
     * 超出部分会显示 "+N" 聚合标签
     * @default 3
     */
    maxTagCount?: number;
    /**
     * 超出标签 hover 时是否显示 Tooltip
     * @default true
     */
    showTooltipOnOverflow?: boolean;
    /**
     * 最大可选数量
     * 达到上限时阻止继续选择
     * @default undefined（无限制）
     */
    maxCount?: number;
    /**
     * 取消选中某项时触发
     * @param value 被取消选中的值
     * @param option 被取消选中的选项对象
     */
    onDeselect?: (value: T, option: SelectOption<T>) => void;
    /**
     * ARIA 标签
     */
    'aria-label'?: string;
    /**
     * ARIA 是否必填
     */
    'aria-required'?: boolean;
    /**
     * ARIA 是否无效
     */
    'aria-invalid'?: boolean;
    /**
     * ARIA 描述关联 ID
     */
    'aria-describedby'?: string;
    /**
     * ARIA 多选标识
     * @default true
     */
    'aria-multiselectable'?: boolean;
}
/**
 * PisellMultipleSelect 组件 Ref 方法
 * @template T 选项值的类型
 */
export interface MultipleSelectRef<T = string | number> {
    /**
     * 聚焦到组件
     */
    focus: () => void;
    /**
     * 失焦
     */
    blur: () => void;
    /**
     * 获取当前选中值数组
     */
    getValue: () => T[];
    /**
     * 设置选中值数组
     */
    setValue: (value: T[]) => void;
    /**
     * 清空所有选中值
     */
    clearValue: () => void;
    /**
     * 添加一个选中值
     */
    addValue: (value: T) => void;
    /**
     * 移除一个选中值
     */
    removeValue: (value: T) => void;
}
/**
 * EditView 组件 Props
 * @template T 选项值的类型
 */
export interface EditViewProps<T = string | number> extends PisellMultipleSelectProps<T> {
    /**
     * 内部状态管理对象（从 useSelectState Hook 传入）
     */
    state?: {
        value: T[];
        setValue: (value: T[]) => void;
        addValue: (value: T) => void;
        removeValue: (value: T) => void;
        clearValue: () => void;
    };
    /**
     * 内部 onChange 处理（包含 maxCount 限制等逻辑）
     */
    onChangeInternal?: (value: T[]) => void;
}
/**
 * DisabledView 组件 Props
 * @template T 选项值的类型
 */
export interface DisabledViewProps<T = string | number> extends PisellMultipleSelectProps<T> {
}
/**
 * ReadOnlyView 组件 Props
 * @template T 选项值的类型
 */
export interface ReadOnlyViewProps<T = string | number> extends PisellMultipleSelectProps<T> {
}
/**
 * TagRenderer 组件 Props（可选，用于自定义标签渲染）
 * @template T 选项值的类型
 */
export interface TagRendererProps<T = string | number> {
    /**
     * 当前选中值数组
     */
    value: T[];
    /**
     * 所有选项列表
     */
    options: SelectOption<T>[];
    /**
     * 最多显示的标签数量
     */
    maxTagCount: number;
    /**
     * 是否显示 Tooltip
     */
    showTooltip: boolean;
    /**
     * 移除标签回调
     */
    onRemove?: (value: T) => void;
}
export type { SelectOption, FilterOptionFunc, SortDirection, MultipleSelectState, TagDisplayInfo, } from '@pisell/utils';
