import { Point } from "../util/misc";
import { InputFlowControl } from "../input-flow-control";
import BoardCamera from "../board-camera";
/**
 * @description The unsubscribe to user raw input.
 *
 * @category Event Parser
 */
export type UnsubscribeToUserRawInput = () => void;
/**
 * @description The raw user pan input event payload.
 *
 * @category Event Parser
 */
export type RawUserPanInputEventPayload = {
    diff: Point;
};
/**
 * @description The raw user pan input event.
 * Use type to discriminate between pan, zoom, and rotate events.
 *
 * @category Event Parser
 */
export type RawUserPanInputEvent = {
    type: "pan";
} & RawUserPanInputEventPayload;
/**
 * @description The raw user zoom input event payload.
 *
 * @category Event Parser
 */
export type RawUserZoomInputEventPayload = {
    deltaZoomAmount: number;
    anchorPoint: Point;
};
/**
 * @description The raw user zoom input event.
 * Use type to discriminate between pan, zoom, and rotate events.
 *
 * @category Event Parser
 */
export type RawUserZoomInputEvent = {
    type: "zoom";
} & RawUserZoomInputEventPayload;
/**
 * @description The raw user rotate input event payload.
 *
 * @category Event Parser
 */
export type RawUserRotateInputEventPayload = {
    deltaRotation: number;
};
/**
 * @description The raw user rotate input event.
 * Use type to discriminate between pan, zoom, and rotate events.
 *
 * @category Event Parser
 */
export type RawUserRotateInputEvent = {
    type: "rotate";
} & RawUserRotateInputEventPayload;
/**
 * @description The raw user input event map.
 *
 * @category Event Parser
 */
export type RawUserInputEventMap = {
    "pan": RawUserPanInputEventPayload;
    "zoom": RawUserZoomInputEventPayload;
    "rotate": RawUserRotateInputEventPayload;
    "all": RawUserInputEvent;
};
/**
 * @description The raw user input event.
 * Use type to discriminate between pan, zoom, and rotate events.
 *
 * @category Event Parser
 */
export type RawUserInputEvent = RawUserPanInputEvent | RawUserZoomInputEvent | RawUserRotateInputEvent;
/**
 * @description The raw user input callback.
 * This is the function type of callbacks for raw user input events.
 *
 * @category Event Parser
 */
export type RawUserInputCallback<K extends keyof RawUserInputEventMap> = (event: RawUserInputEventMap[K]) => void;
/**
 * @description The raw user input publisher.
 * Publishs raw user input events to the input flow control, and subscribers.
 *
 * @category Event Parser
 */
export declare class RawUserInputPublisher {
    private pan;
    private zoom;
    private rotate;
    private all;
    private _flowControl;
    constructor(flowControl: InputFlowControl);
    notifyPan(diff: Point): void;
    notifyZoom(deltaZoomAmount: number, anchorPoint: Point): void;
    notifyRotate(deltaRotation: number): void;
    on<K extends keyof RawUserInputEventMap>(eventName: K, callback: (event: RawUserInputEventMap[K]) => void): UnsubscribeToUserRawInput;
    get flowControl(): InputFlowControl;
    set flowControl(flowControl: InputFlowControl);
}
/**
 * @description Creates a default raw user input publisher.
 *
 * @category Event Parser
 */
export declare function createDefaultRawUserInputPublisher(camera: BoardCamera): RawUserInputPublisher;
