import * as React from 'react';
import type { CnTabProps, CnTabItemProps } from '@cainiaofe/cn-ui';
import type { DragStartEvent, DragOverEvent } from '@dnd-kit/core';
/** 单个 Tab 项配置 */
export interface CnDragTabItemConfig {
    /** Tab 的唯一标识 */
    key: string;
    /** Tab 标题 */
    title: React.ReactNode;
    /** Tab 内容 */
    children?: React.ReactNode;
    /** 是否禁用 */
    disabled?: boolean;
    /** 是否可关闭 */
    closeable?: boolean;
    /** Tab 图标 */
    icon?: React.ReactNode;
    /**
     * 是否禁用此 Tab 的拖拽功能
     * 设置为 true 时，该 Tab 不能被拖拽，也不能作为拖拽目标
     * 适用于功能性 Tab（如末尾的加号按钮）
     * @default false
     */
    disableDrag?: boolean;
    /** 额外的 CnTabItem 属性 */
    tabItemProps?: Omit<CnTabItemProps, 'title' | 'disabled' | 'closeable' | 'icon' | 'children'>;
}
/** 拖拽结束事件的参数 */
export interface DragEndInfo {
    /** 拖拽的 Tab key */
    activeKey: string;
    /** 拖拽到的位置的 Tab key */
    overKey: string;
    /** 旧索引位置 */
    oldIndex: number;
    /** 新索引位置 */
    newIndex: number;
    /** 重排后的 items 数组 */
    newItems: CnDragTabItemConfig[];
}
export interface CnDragTabProps extends Omit<CnTabProps, 'children' | 'tabRender'>, Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange' | 'onClick' | 'onDragStart' | 'onDragOver' | 'onDragEnd'> {
    /**
     * Tab 项配置数组
     */
    items: CnDragTabItemConfig[];
    /**
     * 拖拽开始时的回调
     */
    onDragStart?: (event: DragStartEvent) => void;
    /**
     * 拖拽悬停目标变化时的回调
     */
    onDragOver?: (event: DragOverEvent) => void;
    /**
     * 拖拽取消（如按 Esc）时的回调
     */
    onDragCancel?: () => void;
    /**
     * 拖拽结束后的回调
     * @param info 拖拽信息，包含新旧索引和重排后的数组
     */
    onDragEnd?: (info: DragEndInfo) => void;
    /**
     * 是否禁用拖拽功能
     * @default false
     */
    disableDrag?: boolean;
}
