/**
 * EditableItemLayer - 编辑态图元层：拖拽、缩放、选中、吸附
 */
import React, { type CSSProperties } from 'react';
import type { FloorMapItemBase, FloorMapMergedItem, FloorMapRenderOptions } from '../types';
import { type AlignGuide } from '../utils/alignSnap';
import { type FloorMapEditQuickActionLabels } from './FloorMapEditQuickActions';
import './EditableItemLayer.less';
export interface EditableItemLayerProps<T extends FloorMapItemBase = FloorMapMergedItem> {
    items: T[];
    renderItem: (item: T, index: number, options?: FloorMapRenderOptions) => React.ReactNode;
    rowKey?: string | ((item: T, index: number) => string);
    cellSize: number;
    itemUnit?: 'cell' | 'pixel';
    itemGap?: number;
    contentWidth: number;
    contentHeight: number;
    /** 内容区 X/Y 偏移（画布包围盒向左/上扩展时，图元层整体平移） */
    contentOffsetX?: number;
    contentOffsetY?: number;
    selectedId: string | null;
    onSelect: (id: string | null) => void;
    onUpdateItem: (itemId: string, patch: Partial<{
        x: number;
        y: number;
        width: number;
        height: number;
    }>) => void;
    /**
     * 一次提交多个图元的坐标变更（选区分组拖拽时整组落库），用于一步撤销。
     * 未传时分组拖拽降级为不落库（仅预览）。
     */
    onUpdateItemsBatch?: (patches: Array<{
        id: string;
        patch: Partial<{
            x: number;
            y: number;
            width: number;
            height: number;
        }>;
    }>) => void;
    snapStep?: number;
    /** 画布当前缩放，用于将屏幕位移转为内容位移 */
    scale?: number;
    /** 拖拽/缩放图元时通知父组件，用于禁用画布平移，避免松手时画布跟着动 */
    onInteractionChange?: (active: boolean) => void;
    /**
     * 拖拽/缩放过程中的像素矩形（内容坐标），用于 EdgeLayer 实时重算连线。
     * itemId 为 null 表示结束交互。
     */
    onLiveRectChange?: (itemId: string | null, rect: {
        left: number;
        top: number;
        width: number;
        height: number;
    } | null) => void;
    /**
     * 选区分组拖拽过程中，选区与全部成员的实时像素矩形（内容坐标），用于 EdgeLayer 重算连线。
     * 传 null 表示结束分组交互。
     */
    onLiveRectsChange?: (rects: Record<string, {
        left: number;
        top: number;
        width: number;
        height: number;
    }> | null) => void;
    /**
     * 对齐阈值（屏幕像素，组件内会按 scale 折算到内容坐标）。
     * 0 或负数关闭对齐。
     */
    alignSnapThresholdPx?: number;
    /** 命中的对齐辅助线变化；交互结束时回调一次空数组 */
    onAlignGuidesChange?: (guides: AlignGuide[]) => void;
    /** 对齐辅助线颜色（推荐用主题 token `alignGuideStroke`） */
    alignGuideStroke?: string;
    /** 每项外层容器额外样式（与定位样式合并） */
    getMergedItemWrapperStyle?: (item: T, index: number) => CSSProperties | undefined;
    className?: string;
    /** 编辑态选中时图元旁快捷栏（上锁 / 复制 / 删除） */
    editQuickBar?: {
        labels: FloorMapEditQuickActionLabels;
        isLocked: boolean;
        onToggleLock: () => void;
        onDuplicate: () => void;
        onDelete: () => void;
    } | null;
}
export declare function EditableItemLayer<T extends FloorMapItemBase>(props: EditableItemLayerProps<T>): JSX.Element;
export default EditableItemLayer;
