import { CSSProperties, ReactNode } from 'react'; import { MapHandle, Point, Bounds, MapMouseEvent, MapMoveEvent, MapZoomEvent, MapEvent } from '../../types'; import { MapRefImpl } from './MapRef'; import { DisplayOptions } from '../../types/core'; /** 个性化生效区域配置(setCustomArea,4.0+,2.0.3 新增)。 */ export interface MapCustomArea { /** 生效区域边界点(普通经纬度 { lng, lat },组件内部转成原生 Point) */ area: Point[]; /** 区域内个性化样式,形如 { styleJson: [...] } */ style: unknown; /** 生效前的全局个性化调用参数,默认 { styleJson: [] }(setCustomArea 依赖全局个性化管线已初始化) */ globalStyle?: unknown; } export interface MapProps { center?: Point; zoom?: number; heading?: number; tilt?: number; defaultCenter?: Point; defaultZoom?: number; defaultHeading?: number; defaultTilt?: number; options?: Record; displayOptions?: DisplayOptions; mapStyle?: unknown; mapStyleV2?: unknown; /** * 个性化生效区域(setCustomArea,4.0+,3.0 不支持,2.0.3 新增)。传 false/undefined 不设置。 * 只在指定多边形区域内应用一套个性化样式,区域外维持全局样式。 * setCustomArea 依赖全局个性化管线,应用前组件会先调用一次 setMapStyle(默认空样式,可用 globalStyle 覆盖)。 * 首帧随地图创建同步下发(在 tilesloaded 暴露 map 之前),避免「先默认建筑样式再切区域个性化」的闪烁。 * 从对象切到 false:SDK 无官方清除 API,组件会对上一次区域重新下发空样式(styleJson: [])使其恢复默认渲染。 */ customArea?: MapCustomArea | false; enableDragging?: boolean; enableInertialDragging?: boolean; enableScrollWheelZoom?: boolean; enableContinuousZoom?: boolean; enableResizeOnCenter?: boolean; enableDoubleClickZoom?: boolean; enableKeyboard?: boolean; enablePinchToZoom?: boolean; enableRotate?: boolean; enableRotateGestures?: boolean; enableTilt?: boolean; enableTiltGestures?: boolean; enableAutoResize?: boolean; /** * 开启点击底图标注后自动展示信息窗口,同时会开启底图标注点击。 * 3.0 下等价转发到 enableMapClick/disableMapClick,其内部会自动弹出信息窗, * 效果与 4.0 基本一致。 */ enableIconInfoWindow?: boolean; /** * 启用首选语言(4.0+,3.0 不支持)。传 BMAP_LANGUAGE_* 常量; * false 或 undefined 均表示不主动启用/不控制,false 时会调用 disablePreferredLanguage。 */ enablePreferredLanguage?: string | false; minZoom?: number; maxZoom?: number; bounds?: Bounds; mapType?: string | number; defaultCursor?: string; draggingCursor?: string; theme?: string; onReady?: (map: MapHandle) => void; onCenterChange?: (point: Point) => void; onZoomChange?: (zoom: number) => void; onHeadingChange?: (heading: number) => void; onTiltChange?: (tilt: number) => void; onClick?: (e: MapMouseEvent) => void; onDblClick?: (e: MapMouseEvent) => void; onRightClick?: (e: MapMouseEvent) => void; onMouseMove?: (e: MapMouseEvent) => void; onMouseDown?: (e: MapMouseEvent) => void; onMouseUp?: (e: MapMouseEvent) => void; onMouseOver?: (e: MapMouseEvent) => void; onMouseOut?: (e: MapMouseEvent) => void; onDragStart?: (e: MapMoveEvent) => void; onDragging?: (e: MapMoveEvent) => void; onDragEnd?: (e: MapMoveEvent) => void; onMoveStart?: (e: MapMoveEvent) => void; onMoving?: (e: MapMoveEvent) => void; onMoveEnd?: (e: MapMoveEvent) => void; onZoomStart?: (e: MapZoomEvent) => void; onZooming?: (e: MapZoomEvent) => void; onZoomEnd?: (e: MapZoomEvent) => void; onResize?: (e: MapEvent) => void; onTilesLoaded?: (e: MapEvent) => void; onMapTypeChange?: (e: MapEvent) => void; onTouchStart?: (e: MapMouseEvent) => void; onTouchMove?: (e: MapMouseEvent) => void; onTouchEnd?: (e: MapMouseEvent) => void; onLongPress?: (e: MapMouseEvent) => void; className?: string; style?: CSSProperties; errorFallback?: ReactNode; children?: ReactNode; } /** * Map 容器组件(DESIGN.md §5)。 * * - useLayoutEffect 创建地图,避免首帧空白。 * - 完整 cleanup:clearOverlays、destroy 或清空 container。 * - StrictMode 安全。 * - 受控循环抑制:internalUpdateRef + pointEquals(1e-7)。 */ export declare const Map: import('react').ForwardRefExoticComponent>;