import * as react from 'react';
import { UIEventHandlers } from '../types/event.mjs';
import { UncontrolledKey } from '../utils/uncontrolled.mjs';

declare const locationalKeys: readonly ["position"];
declare const uiEvents: readonly ["mousedown", "mouseup", "click", "dblclick", "rightclick", "mouseover", "mouseout", "dragstart", "drag", "dragend"];
type MarkerKVO = {
    /** Animation??? */
    animation: naver.maps.Animation;
    position: naver.maps.Coord | naver.maps.CoordLiteral;
    icon: string | naver.maps.ImageIcon | naver.maps.SymbolIcon | naver.maps.HtmlIcon;
    shape: naver.maps.MarkerShape;
    title: string;
    cursor: string;
    clickable: boolean;
    draggable: boolean;
    visible: boolean;
    zIndex: number;
};
type UncontrolledProps = {
    [key in typeof locationalKeys[number] as UncontrolledKey<key>]: MarkerKVO[key];
};
type MarkerOptions = Partial<MarkerKVO>;
type Props = MarkerOptions & Partial<UncontrolledProps> & UIEventHandlers<typeof uiEvents> & {
    onAnimationChanged?: (value: naver.maps.Animation) => void;
    onPositionChanged?: (value: naver.maps.Coord) => void;
    onIconChanged?: (value: string | naver.maps.ImageIcon | naver.maps.HtmlIcon | naver.maps.SymbolIcon) => void;
    onShapeChanged?: (event: naver.maps.MarkerShape) => void;
    onTitleChanged?: (event: string) => void;
    onCursorChanged?: (event: string) => void;
    onClickableChanged?: (event: boolean) => void;
    onDraggableChanged?: (event: boolean) => void;
    onVisibleChanged?: (event: boolean) => void;
    /**
     * hello yeah
     * @param event helo?
     * @returns
     */
    onZIndexChanged?: (event: number) => void;
};
declare const Marker: react.ForwardRefExoticComponent<Partial<MarkerKVO> & Partial<UncontrolledProps> & Partial<Record<"onClick" | "onDrag" | "onMousedown" | "onMouseup" | "onDblclick" | "onRightclick" | "onMouseover" | "onMouseout" | "onDragstart" | "onDragend", (e: naver.maps.PointerEvent) => void>> & {
    onAnimationChanged?: (value: naver.maps.Animation) => void;
    onPositionChanged?: (value: naver.maps.Coord) => void;
    onIconChanged?: (value: string | naver.maps.ImageIcon | naver.maps.HtmlIcon | naver.maps.SymbolIcon) => void;
    onShapeChanged?: (event: naver.maps.MarkerShape) => void;
    onTitleChanged?: (event: string) => void;
    onCursorChanged?: (event: string) => void;
    onClickableChanged?: (event: boolean) => void;
    onDraggableChanged?: (event: boolean) => void;
    onVisibleChanged?: (event: boolean) => void;
    /**
     * hello yeah
     * @param event helo?
     * @returns
     */
    onZIndexChanged?: (event: number) => void;
} & react.RefAttributes<naver.maps.Marker>>;

export { Marker, type Props };
