interface NaturalSize {
    width: number;
    height: number;
}
export interface CropRect {
    /** Origin in natural-px from the image top-left. */
    x: number;
    y: number;
    /** Crop area dimensions in natural px. */
    width: number;
    height: number;
}
/**
 * Resolve a corner-resize drag into a crop rect, keeping the opposite corner
 * (`anchor`) fixed. When `aspectRatio` is set, one dimension is snapped to the
 * ratio first (driven by whichever axis the pointer pushed furthest), then the
 * position is derived from the anchor — so a locked resize never drifts the
 * anchored corner. Pure (no clamping to image bounds; the caller clamps).
 */
export declare const resolveCornerResize: ({ anchorX, anchorY, point, aspectRatio, }: {
    anchorX: number;
    anchorY: number;
    point: {
        x: number;
        y: number;
    };
    aspectRatio: number | null;
}) => CropRect;
/**
 * Custom crop state + file producer. Replaces a cropperjs-based version: the
 * crop rectangle is stored in natural-image pixels (so it stays locked across
 * window resizes), and `AssetCropEditor` overlays a div sized by
 * (cropNatural × displayRatio). produceFile draws the natural-px crop region
 * straight to a canvas.
 */
export declare const useCropImg: () => {
    init: (image: HTMLImageElement) => void;
    crop: CropRect;
    naturalSize: NaturalSize;
    aspectRatio: number | null;
    setCropSize: (next: Partial<Pick<CropRect, "width" | "height">>) => void;
    setCropPosition: (next: Partial<Pick<CropRect, "x" | "y">>) => void;
    setAspectRatio: (ratio: number | null) => void;
    produceFile: (name: string, mimeType: string, lastModifiedDate?: string) => Promise<globalThis.File>;
    width: number;
    height: number;
};
export {};
