/**
 * 平面图内容区尺寸：由 items + padding 推导 contentWidth/Height 与 offset。
 * 供 useFloorMapTransformMetrics（单画布视口）与 FloorMapOverview（多画布平铺）共用，
 * 避免两处各自维护包围盒算法。
 */
import type { FloorMapItemBase, FloorMapItemUnit } from '../types';
/** 内容区宽高与图元层偏移（与 Transform content 坐标系一致） */
export interface FloorMapContentStage {
    contentWidth: number;
    contentHeight: number;
    contentOffsetX: number;
    contentOffsetY: number;
    /**
     * 使用 pixel 包围盒时的单侧 padding，用于 initialPosition 对齐；
     * 非包围盒路径为 null。
     */
    alignPadSingle: number | null;
}
export interface ComputeFloorMapContentStageParams<T extends FloorMapItemBase = FloorMapItemBase> {
    items: T[];
    cellSize: number;
    itemGap: number;
    itemUnit: FloorMapItemUnit;
    /** 单侧 bounding padding（与 mapLayer.boundingPadding 一致） */
    boundingPadding: number;
    /**
     * 为 true 且 itemUnit 为 pixel、items 非空时，按图元包围盒扩边；
     * 平面图主视图传 isFloorMapView，全览缩略图传 true。
     */
    preferPixelBoundingBox?: boolean;
}
/**
 * 根据 items 计算内容区尺寸与偏移。
 * 算法与 {@link useFloorMapTransformMetrics} 内原 useMemo 一致（不含「撑满视口」扩展）。
 */
export declare function computeFloorMapContentStage<T extends FloorMapItemBase>(params: ComputeFloorMapContentStageParams<T>): FloorMapContentStage;
/**
 * 全览网格行列：n≤3 单行；n≥4 用 ceil(√n) 列、ceil(n/cols) 行，行列接近且末行空格最少。
 * 例：2→2×1，3→3×1，4→2×2，5/6→3×2，7-9→3×3，10-12→4×3。
 *
 * 仅供旧版「等大缩略图卡片」全览使用；新版 All 视图按原始尺寸装箱，请用
 * {@link packCanvasesIntoShelves}。
 */
export declare function getOverviewGridDims(count: number): {
    cols: number;
    rows: number;
};
/** 装箱输入：每个画布在统一比例尺下的原始尺寸（像素） */
export interface PackCanvasItem {
    width: number;
    height: number;
}
/** 装箱产物：每个画布的左上角坐标 + 总布局尺寸（不含外侧 padding） */
export interface PackCanvasResult {
    positions: Array<{
        x: number;
        y: number;
    }>;
    totalWidth: number;
    totalHeight: number;
}
/**
 * 多画布 All 视图的紧凑装箱（Bottom-Left Fill, BLF）：
 *
 * - 保留输入顺序（与 Tab 顺序一致），不旋转、不缩放，原始尺寸即渲染尺寸；
 * - 对每张画布枚举候选落点 = `{(0,0)} ∪ 已放画布的{右侧, 下方}角`；过滤掉与已放冲突
 *   的位置，再挑 **y 最小、再 x 最小** 的位置落下——优先填低洼，自然会把矮 / 窄画布
 *   塞进高画布旁的空白；不会出现「等最高画布把整行撑满才换行」导致的大量空白；
 * - 目标外框宽度 `targetWidth = max(最宽画布, √(总面积 × {@link aspectBias}))`，
 *   令整体形状趋于 `aspectBias:1`（默认 2.5 → 宽:高 ≈ 2.5:1，轻微偏横）；
 *   单张画布若本身比 targetWidth 还宽，仍允许独自首行铺开，避免被截。
 *
 * 复杂度 O(n²)（每个画布对所有已放做候选 + 冲突校验），n 通常 < 20，性能足够。
 * 比旧的行装填（shelf packing）能显著减少长高画布旁的留白。
 *
 * @param boxes - 待装箱画布尺寸（保持顺序）
 * @param gap - 画布之间的像素间距（同时作为冲突检测的最小净距）
 * @param aspectBias - 目标宽高比偏置（width:height）；越大越横向，默认 2.5
 *   - `1.5` ~ `2`：接近正方形，仅略偏横
 *   - `2.5` ~ `3`：明显但温和的横向布局（推荐）
 *   - `>= 4`：强横向，画布数较多时易接近单行
 */
export declare function packCanvasesIntoShelves(boxes: PackCanvasItem[], gap: number, aspectBias?: number): PackCanvasResult;
