import { LatLng, type LatLngLike, type Point } from "../geo.js"; import { InteractiveLayer } from "../interactive-layer.js"; import { type LayerOptions, type QueryHit, type ResolvedQueryOptions } from "../layer.js"; import type { Orihon } from "../map.js"; import type { OverlayContent, PopupOptions, TooltipOptions } from "../overlays/div-overlay.js"; import type { MarkerIcon } from "./icon.js"; /** Built-in marker glyph when no custom `icon` / `content` is set. */ export type MarkerShape = "pin" | "circle" | "square" | "dot" | "diamond" | "triangle"; export interface MarkerAppearance { shape?: MarkerShape; /** Fill color of the built-in glyph. */ color?: string; /** Stroke / border color of the built-in glyph. */ strokeColor?: string; /** Glyph size in CSS pixels (pin head / circle / square / dot). */ size?: number; /** Border width in CSS pixels. */ strokeWidth?: number; } interface MarkerBaseOptions extends LayerOptions { html?: never; title?: string; className?: string; draggable?: boolean; ariaLabel?: string; opacity?: number; zIndexOffset?: number; keyboard?: boolean; /** Attach pointer/keyboard interaction listeners. Default true. */ interactive?: boolean; rotation?: number; rotationOrigin?: string; } type NoMarkerAppearance = { [K in keyof MarkerAppearance]?: never; }; /** Choose a built-in glyph, safe content, or an icon; these modes cannot be mixed. */ export type MarkerOptions = MarkerBaseOptions & ((MarkerAppearance & { anchor?: [number, number]; content?: never; icon?: never; }) | (NoMarkerAppearance & { anchor?: [number, number]; content: Node | string | number; icon?: never; }) | (NoMarkerAppearance & { anchor?: never; icon: MarkerIcon; content?: never; })); type ResolvedMarkerOptions = Required> & Pick & Required & { anchor: [number, number]; content: Node | string | number | null; icon: MarkerIcon | null; }; /** @internal Validate before collections or wrappers allocate resources. */ export declare function validateMarkerOptions(options: MarkerOptions): void; /** Layout box + tip/center anchor for a built-in glyph. */ export declare function markerShapeMetrics(appearance?: MarkerAppearance): { shape: MarkerShape; size: number; strokeWidth: number; width: number; height: number; anchor: [number, number]; rotationOrigin: string; }; export interface MarkerEventMap { click: { originalEvent: MouseEvent | PointerEvent; latlng: LatLng; }; mouseover: { originalEvent: PointerEvent; latlng: LatLng; }; mouseout: { originalEvent: PointerEvent; latlng: LatLng; }; dragstart: { latlng: LatLng; }; drag: { latlng: LatLng; }; dragend: { latlng: LatLng; }; } export declare class Marker extends InteractiveLayer { #private; position: LatLng; el: HTMLButtonElement | null; iconElement: HTMLElement | null; shadowElement: HTMLElement | null; readonly _unsub: Array<() => void>; readonly _dragUnsub: Array<() => void>; constructor(position: LatLngLike, options?: MarkerOptions); onAdd(map: Orihon, parent?: HTMLElement | DocumentFragment): void; onRemove(): void; setLatLng(position: LatLngLike): this; getLatLng(): LatLng; /** Enables or disables pointer dragging without recreating the marker. */ setDraggable(draggable: boolean): this; isDraggable(): boolean; setInteractive(interactive: boolean): this; bindPopup(content: OverlayContent, options?: PopupOptions): this; bindTooltip(content: OverlayContent, options?: TooltipOptions): this; queryHit(target: Point, options: ResolvedQueryOptions): QueryHit | null; setIcon(value: MarkerIcon | null): this; getIcon(): MarkerIcon | null; /** Switches to safe text/Node content. Empty string is intentionally empty. */ setContent(content: Node | string | number): this; getContent(): Node | string | number | null; /** Selects the built-in glyph and updates its appearance. */ setAppearance(appearance: MarkerAppearance & { icon?: never; content?: never; html?: never; }): this; setOpacity(opacity: number): this; setZIndexOffset(offset: number): this; render(): void; } export declare function marker(position: LatLngLike, options?: MarkerOptions): Marker; export {}; //# sourceMappingURL=marker.d.ts.map