import { ReactNode } from 'react'; import { OverlayTargetStore } from '../context/OverlayTargetContext'; import { BMapDriver } from '../drivers/types'; import { ControlHandle, LayerHandle, OverlayHandle } from '../types'; export interface OverlayComponentConfig

{ /** 工厂方法:用 driver 创建 overlay */ factory: (driver: BMapDriver, props: P) => OverlayHandle | null; /** position 属性名(变化时调 setOverlayPosition) */ positionProp?: keyof P & string; /** path 属性名(变化时调 setOverlayPath) */ pathProp?: keyof P & string; /** options 属性名列表(变化时调 setOverlayOptions) */ optionProps?: Array; /** * 只能在 constructor 设置的 props(SDK 无对应 setter 方法)。 * 这些 props 变化时框架自动重建 overlay 实例(cleanup → create),用户无需手写 key。 */ ctorOnlyProps?: Array; /** 是否支持 children 嵌套(如 Marker 嵌 InfoWindow) */ supportsChildren?: boolean; /** * children 嵌套时提供给子组件的 target 类型(默认 'overlay')。 * Marker 设为 'marker',好让 Label 子元素(attachToMarkerAsLabel)识别父级并走 setLabel。 */ childTargetType?: OverlayTargetStore['type']; /** * 作为 Marker 子元素时,通过 marker.setLabel 挂载(随 marker 定位/拖拽跟随), * 而非 map.addOverlay。仅 Label 使用;不在 Marker 内时按普通 overlay 挂到地图。 */ attachToMarkerAsLabel?: boolean; /** overlay 级事件订阅(SDK 事件 → prop 回调) */ events?: Array<{ sdk: string; prop: keyof P & string; }>; /** 组件显示名(用于 React DevTools) */ displayName?: string; /** * 值对象模式:跳过 addOverlay/removeOverlay。 * 用于 Symbol/Icon/IconSequence 等不是 Overlay 的值对象。 * 组件仍然创建 SDK 实例并管理 setter,但不自动加到地图。 * 用户通过 ref 或 hooks 拿到 handle 传给父组件(如 Marker icon)。 */ skipMount?: boolean; } export declare function createOverlayComponent

(config: OverlayComponentConfig

): import('react').NamedExoticComponent

; export interface ControlComponentConfig

{ factory: (driver: BMapDriver, props: P) => ControlHandle | null; /** * 可通过 Control 基类或具体控件 setter 响应式更新的 props。 * 注意:这类 prop 在 null/undefined 与有值之间切换时控件会整体重建 * (见下方 optionDefaultKey),控件内部的交互状态会丢失 —— 需要稳定状态时 * 不要让 option prop 在「不传」和「传」之间来回切换,给一个固定值即可。 */ optionProps?: Array; /** 只能在 constructor options 中读取的 props,变化时自动重建控件 */ ctorOnlyProps?: Array; /** Control 级事件订阅(SDK 事件 → prop 回调) */ events?: Array<{ sdk: string; prop: keyof P & string; }>; displayName?: string; } export declare function createControlComponent

(config: ControlComponentConfig

): import('react').MemoExoticComponent<(props: P) => any>; export interface LayerComponentConfig

{ factory: (driver: BMapDriver, props: P) => LayerHandle | null; /** 添加方法名,默认 'addLayer' */ addMethod?: keyof BMapDriver; /** 移除方法名,默认 'removeLayer' */ removeMethod?: keyof BMapDriver; /** React StrictMode 下复用同一个 SDK layer 实例,避免 add/remove 不成对 */ reuseHandle?: boolean; /** 延后一拍添加 layer,让 StrictMode 的模拟卸载可以取消首次 add */ deferMount?: boolean; /** 事件列表(SDK 事件名 → React 回调 prop 名) */ events?: ReadonlyArray<{ sdk: string; prop: keyof P & string; }>; displayName?: string; } export declare function createLayerComponent

(config: LayerComponentConfig

): import('react').MemoExoticComponent<(props: P) => any>;