import type { MudletMap } from '../mapIO'; import { type RoomClipboard } from './store'; import type { SceneHandle } from './scene'; /** Snapshot rooms + centroid origin without touching store state. The result is * plain-object only, so it survives structured clone (cross-tab transfer). */ export declare function buildRoomClipboard(map: MudletMap, ids: number[]): RoomClipboard | null; export declare function copyRoomsToClipboard(map: MudletMap, ids: number[]): number; export type PasteResult = { count: number; newIds: number[]; externalExitsStubbed: number; externalSpecialExitsDropped: number; /** Rooms whose hash the destination map already had, so the copy went in without one. */ hashesDropped: number; }; export declare function buildPasteStatus(verbKey: string, result: { count: number; externalExitsStubbed: number; externalSpecialExitsDropped: number; hashesDropped: number; }): string; export declare function pasteClipboard(clipboard: RoomClipboard, target: { x: number; y: number; z: number; areaId: number; }, scene: SceneHandle | null): PasteResult | null; /** Copy → paste-at-offset in one step, without touching the user's clipboard. * Z-neutral: each duplicate keeps its source room's z, so cross-level selections * preserve their vertical relations. */ export declare function duplicateRooms(map: MudletMap, ids: number[], offset: { dx: number; dy: number; }, target: { areaId: number; }, scene: SceneHandle | null): PasteResult | null;