import { type GeoJsonBbox } from "@trackunit/geo-json-utils"; import type { CategoryKey, ControlConfig } from "../../controls/types"; import type { FitParticipation, ImageOverlayHandle } from "../types"; export type UseImageOverlayOptions = Readonly<{ /** Unique ID for this layer */ id: string; /** Human-readable name */ name: string; /** URL of the image to display on the map */ url: string; /** Geographic bounds the image covers as [minLon, minLat, maxLon, maxLat] */ imageBounds: GeoJsonBbox; /** Opacity from 0 to 1. Default: 1 */ opacity?: number; /** * Controls to contribute to the map UI, keyed by semantic area. * Omit entirely (or omit a key) to contribute nothing to that area. */ controls?: Partial>>; /** Whether the layer is currently loading its initial data. Omit for static (non-loading) layers. */ loading?: boolean; /** Controls whether this layer's bounds are included in fit-to-content operations. Default: `"all"` */ fitParticipation?: FitParticipation; }>; export type UseImageOverlayReturn = ImageOverlayHandle; /** * `useImageOverlay` -- creates an image overlay layer handle. * * Renders a georeferenced image on the map within the given bounds. * * @example * ```tsx * const overlay = useImageOverlay({ * id: "site-plan", * name: "Site Plan", * url: "https://example.com/site-plan.png", * imageBounds: [-73.99, 40.74, -73.97, 40.76], * opacity: 0.7, * }); * ``` */ export declare const useImageOverlay: (options: UseImageOverlayOptions) => UseImageOverlayReturn;