import type { Vec2, Rect, EntityId } from '../core/types';
import { World, type Entity } from '../ecs/World';
import { Camera2D } from '../rendering/Camera2D';
export type GizmoMode = 'translate' | 'rotate' | 'scale';
export type GizmoAxis = 'x' | 'y' | 'xy' | 'none';
export interface GizmoState {
    mode: GizmoMode;
    activeAxis: GizmoAxis;
    dragging: boolean;
    startWorld: Vec2;
    startLocal: Vec2;
    delta: Vec2;
}
export declare function createGizmoState(mode?: GizmoMode): GizmoState;
export interface SelectionBox {
    active: boolean;
    start: Vec2;
    end: Vec2;
}
export declare function getSelectionRect(box: SelectionBox): Rect;
export declare function entitiesInRect(world: World, rect: Rect): EntityId[];
export declare function snapToGrid(value: number, gridSize: number): number;
export declare function snapVec2ToGrid(v: Vec2, gridSize: number): Vec2;
export declare function renderGrid(ctx: CanvasRenderingContext2D, camera: Camera2D, canvasW: number, canvasH: number, gridSize: number, color?: string, majorColor?: string, majorEvery?: number): void;
export declare function renderTranslateGizmo(ctx: CanvasRenderingContext2D, screenPos: Vec2, activeAxis: GizmoAxis, size?: number): void;
export declare function renderRotateGizmo(ctx: CanvasRenderingContext2D, screenPos: Vec2, active: boolean, radius?: number): void;
export declare function renderScaleGizmo(ctx: CanvasRenderingContext2D, screenPos: Vec2, activeAxis: GizmoAxis, size?: number): void;
export declare function hitTestGizmoAxis(screenPos: Vec2, cursorScreen: Vec2, size?: number, threshold?: number): GizmoAxis;
export declare function pickEntityAt(world: World, worldPos: Vec2, margin?: number): Entity | null;
export interface ClipboardEntry {
    entityId: EntityId;
    /** Deep-cloned component data snapshot. */
    components: Record<string, unknown>;
    position: Vec2;
}
export declare function copyEntities(world: World, ids: EntityId[]): ClipboardEntry[];
export declare function pasteEntities(world: World, entries: ClipboardEntry[], offset?: Vec2): EntityId[];
