/**
 * FloorMapToolbar - 编辑态左侧侧边栏：按分类添加图元、绑定数据源与行；保存可选（默认用顶栏）
 */
import React from 'react';
import type { FloorMapViewConfig, FloorMapDataSources, FloorMapMergedItem, FloorMapSceneElement, FloorMapPlaceMode } from '../types';
import { type FloorMapPaletteDragPayload } from '../utils/floorMapDropUtils';
import { type FloorMapPaletteBulkPlaceItem, type FloorMapToolbarPaletteEntry } from '../utils/floorMapToolbarPalette';
import type { FloorMapResourcePickerSlotProps } from '../utils/floorMapResourcePickerTypes';
import './FloorMapToolbar.less';
export type { FloorMapPlaceMode as PlaceMode };
export interface FloorMapToolbarProps {
    config: FloorMapViewConfig;
    dataSources: FloorMapDataSources;
    dataSourceLabels?: Record<string, string>;
    canCreate: boolean;
    placeMode: FloorMapPlaceMode;
    onPlaceModeChange: (mode: FloorMapPlaceMode) => void;
    renderPreviewItem?: (item: FloorMapMergedItem) => React.ReactNode;
    placementPreviewSize?: {
        width: number;
        height: number;
    };
    decorationPreviewSize?: number;
    sceneElements?: FloorMapSceneElement[];
    onSave?: () => void;
    saving?: boolean;
    saveError?: Error | string;
    /** 布局草稿已相对持久化配置变更，提示用户点击本栏「保存」 */
    layoutDirty?: boolean;
    className?: string;
    /** 触摸/笔：Pointer 拖拽落点（mouse 仍用 HTML5 DnD） */
    onPaletteCardPointerDown?: (payload: FloorMapPaletteDragPayload, e: React.PointerEvent<HTMLButtonElement>) => void;
    /** 触摸拖放结束后吞掉按钮 click，避免误触切换落点模式 */
    consumeToolbarClickIfTouchDrag?: () => boolean;
    /** 手机布局：侧栏悬浮覆盖画布（由 PisellFloorMapLayout + Less 控制定位） */
    phoneLayout?: boolean;
    /** 为 true 时初始为收起（预约手机编辑态默认收起图元栏） */
    defaultCollapsed?: boolean;
    /**
     * 手机布局：选中图元种类后，一键在当前视口中心落点（与画布点击落点规则一致）。
     */
    onRequestPlaceAtCanvasCenter?: () => void;
    /**
     * 每个调色板分类在侧栏直接展示的图元数量；超出则显示「查看全部」（默认见
     * floorMapLayoutConstants.FLOOR_MAP_TOOLBAR_PALETTE_SIDEBAR_LIMIT，默认 5）。
     */
    paletteSidebarVisibleLimit?: number;
    /** 「查看全部」弹窗确认：批量落在画布右侧空白区（所有分类通用）。 */
    onBulkAddPaletteToCanvas?: (items: FloorMapPaletteBulkPlaceItem[]) => void;
    /**
     * 「查看全部」弹窗渲染槽位：用于业务侧复用统一的选择弹窗（如 Selector + 数量选择）。
     * 未传时使用内置 `FloorMapToolbarViewAllModal`（加减步进器）。
     */
    renderPaletteViewAllModal?: (props: {
        open: boolean;
        categoryLabel: string;
        entries: FloorMapToolbarPaletteEntry[];
        onClose: () => void;
        onConfirm: (items: FloorMapPaletteBulkPlaceItem[]) => void;
        renderEntryPreview: (entry: FloorMapToolbarPaletteEntry) => React.ReactNode;
        /** 容器平台：手机布局透传 `'h5'`，默认 `'pc'` */
        platform?: 'pc' | 'h5' | 'ipad';
    }) => React.ReactNode;
    /**
     * 资源选择弹窗点「确定」：按已选 recordIds 落画布（多选走批量网格，单选落视口中心附近）。
     * @returns 是否已成功写入草稿
     */
    onResourcePickerConfirmPlace?: (scene: Extract<FloorMapPlaceMode, {
        type: 'scene';
    }>) => boolean;
    /**
     * 资源选择 Modal 渲染（必传）。
     * 通用基础 modal 已下线，业务侧需注入实现（如 `PisellProResourcePickerModal`）；
     * 未注入时仅打 warn，不渲染选择弹窗，资源选择交互不可用。
     */
    renderResourcePickerModal?: (props: FloorMapResourcePickerSlotProps) => React.ReactNode;
    /**
     * 无二次选择的调色板项（装饰内置图形、底图图片、`dataBindingPolicy: none` 等）：
     * 侧栏点击即落在画布右侧空白区，不进入「再点画布」落点模式。
     */
    onDirectPlacePaletteItem?: (item: FloorMapPaletteBulkPlaceItem) => void;
}
export declare function FloorMapToolbar(props: FloorMapToolbarProps): React.JSX.Element;
export default FloorMapToolbar;
