/** @packageDocumentation
 * @module Cursor
 */
import * as React from "react";
import { BeUiEvent } from "@itwin/core-bentley";
import type { XAndY } from "@itwin/core-geometry";
import { RelativePosition } from "@itwin/appui-abstract";
import { Point } from "@itwin/core-react/internal";
import { CursorPopupShow } from "./CursorPopup.js";
import type { SizeProps } from "../../utils/SizeProps.js";
/** Options for the [[CursorPopupManager]] open method
 * @public
 */
export interface CursorPopupOptions {
    /** Title of the popup */
    title?: string;
    /** Called on popup close */
    onClose?: () => void;
    /** Callback to apply changes */
    onApply?: () => void;
    /** Draw shadow */
    shadow?: boolean;
}
/** Information maintained by CursorPopupManager about a CursorPopup.
 * @public
 */
interface CursorPopupInfo {
    id: string;
    content: React.ReactNode;
    relativePosition: RelativePosition;
    offset: Point;
    priority: number;
    options?: CursorPopupOptions;
    targetDocument?: Document;
    renderRelativePosition: RelativePosition;
    popupSize?: SizeProps;
    cancelFadeOut?: () => void;
}
/** CursorPopup component
 * @public
 */
export declare class CursorPopupManager {
    private static _popups;
    /** @internal */
    static readonly onCursorPopupUpdatePositionEvent: BeUiEvent<{
        pt: XAndY;
    }>;
    /** @internal */
    static readonly onCursorPopupFadeOutEvent: BeUiEvent<{
        id: string;
        show?: CursorPopupShow;
    }>;
    /** @internal */
    static readonly onCursorPopupsChangedEvent: BeUiEvent<object>;
    /** @internal */
    static clearPopups(): void;
    static get popups(): CursorPopupInfo[];
    static get popupCount(): number;
    private static pushPopup;
    /** Called to open popup with a new set of properties
     */
    static open(id: string, content: React.ReactNode, pt: XAndY, offset: XAndY, relativePosition: RelativePosition, priority?: number, options?: CursorPopupOptions, targetDocument?: Document): void;
    /** Called to update popup with a new set of properties
     */
    static update(id: string, content: React.ReactNode, pt: XAndY, offset: XAndY, relativePosition: RelativePosition, priority?: number, targetDocument?: Document): void;
    /** Called to move the open popup to new location
     */
    static updatePosition(pt: XAndY, targetDocument?: Document): void;
    /** Called when tool wants to close the popup
     */
    static close(id: string, apply: boolean, fadeOut?: boolean): void;
    private static removePopup;
    private static resetPopupsRenderRelativePosition;
    private static validateRenderRelativePosition;
    private static autoFlip;
}
/** CursorPopupRenderer React component.
 * @public
 */
export declare function CursorPopupRenderer(): React.JSX.Element | undefined;
export {};
//# sourceMappingURL=CursorPopupManager.d.ts.map