import type { ColorToken, LatLng } from './map.types'; export interface MapHeatmapPoint extends LatLng { /** Relative intensity. @default 1 */ weight?: number; } export interface MapHeatmapConfig { points: MapHeatmapPoint[]; /** Influence radius of each point, in pixels. @default 28 */ radiusPx?: number; /** @default 0.7 */ opacity?: number; /** When true the radius is fixed in pixels, so density changes with zoom. @default true */ dissipating?: boolean; /** * Ramp for the density gradient, cold to hot. Tokens, not literals, so the * heat map follows the theme instead of freezing on Google's default orange. */ gradientTokens?: ColorToken[]; /** Stacking order relative to other overlays. */ zIndex?: number; } export interface UseMapHeatmapOptions { map: google.maps.Map | null; isLoaded: boolean; heatmap?: MapHeatmapConfig; /** Resolved literal colors keyed by token name. */ colors: Record; visible?: boolean; } /** * Renders a density surface with `google.maps.visualization.HeatmapLayer`. * * @description * Requires the `visualization` library, which is why it was added to * `GOOGLE_MAPS_LIBRARIES` — it is the one loading change the cartographic layer * makes. * * The gradient is built from semantic tokens rather than Google's stock orange * ramp, so the surface survives a theme change like everything else on the map. * Google expects the first gradient entry to be fully transparent (it is the * color of "no density"), so a transparent stop is prepended automatically — * passing an opaque first token would otherwise flood the whole viewport. */ export declare function useMapHeatmap({ map, isLoaded, heatmap, colors, visible, }: UseMapHeatmapOptions): void;