/** @packageDocumentation
 * @module Tools
 */
import { BentleyStatus } from "@itwin/core-bentley";
import { Point3d } from "@itwin/core-geometry";
import { AccuDrawFlags, ItemField, RotationMode } from "../AccuDraw";
import { AuxCoordSystemState } from "../AuxCoordSys";
import { SnapDetail } from "../HitDetail";
import { DecorateContext } from "../ViewContext";
import { ScreenViewport, Viewport } from "../Viewport";
import { BeButtonEvent, EventHandled, InputCollector, Tool } from "./Tool";
/**
 * A shortcut may require no user input (immediate) or it may install a tool to collect the needed input. AccuDrawShortcuts are how users control AccuDraw.
 * A tool implementor should not use this class to setup AccuDraw, instead use AccuDrawHintBuilder to provide hints.
 * @alpha
 */
export declare class AccuDrawShortcuts {
    /** Disable/Enable AccuDraw for the session */
    static sessionToggle(): void;
    /** Suspend/Unsuspend AccuDraw for the active tool */
    static suspendToggle(): void;
    static rotateAxesByPoint(isSnapped: boolean, aboutCurrentZ: boolean): boolean;
    static updateACSByPoints(acs: AuxCoordSystemState, vp: Viewport, points: Point3d[], isDynamics: boolean): boolean;
    static processPendingHints(): void;
    static requestInputFocus(): void;
    static itemFieldNavigate(index: ItemField, str: string, forward: boolean): Promise<void>;
    static itemFieldNewInput(index: ItemField): void;
    static itemFieldAcceptInput(index: ItemField, str: string): Promise<void>;
    static itemFieldLockToggle(index: ItemField): void;
    static itemRotationModeChange(rotation: RotationMode): void;
    static setOrigin(explicitOrigin?: Point3d): void;
    static changeCompassMode(): void;
    static lockSmart(): void;
    /** Disable indexing when not currently indexed; if indexed, enable respective lock. */
    static lockIndex(): void;
    static lockX(): void;
    static lockY(): void;
    static lockZ(): void;
    static lockDistance(): void;
    static lockAngle(): void;
    lockIndex(): void;
    static setStandardRotation(rotation: RotationMode): void;
    static alignView(): void;
    static rotateToBase(): void;
    static rotateToACS(): void;
    static rotateCycle(): void;
    static rotate90(axis: number): void;
    static rotateAxes(aboutCurrentZ: boolean): Promise<boolean>;
    static rotateToElement(): Promise<boolean>;
    static rotatePerpendicular(): Promise<boolean>;
    static defineACSByElement(): Promise<boolean>;
    static defineACSByPoints(): Promise<boolean>;
    static getACS(acsName: string | undefined, useOrigin: boolean, useRotation: boolean): BentleyStatus;
    static writeACS(_acsName: string): BentleyStatus;
    static itemFieldUnlockAll(): void;
    /** @internal Temporary keyboard shortcuts. */
    static processShortcutKey(keyEvent: KeyboardEvent): Promise<boolean>;
}
/** @internal */
export declare class AccuDrawSessionToggleTool extends Tool {
    static toolId: string;
    run(): Promise<boolean>;
}
/** @internal */
export declare class AccuDrawSuspendToggleTool extends Tool {
    static toolId: string;
    run(): Promise<boolean>;
}
/** @internal */
export declare class AccuDrawSetOriginTool extends Tool {
    static toolId: string;
    run(): Promise<boolean>;
}
/** @internal */
export declare class AccuDrawSetLockSmartTool extends Tool {
    static toolId: string;
    run(): Promise<boolean>;
}
/** @internal */
export declare class AccuDrawSetLockIndexTool extends Tool {
    static toolId: string;
    run(): Promise<boolean>;
}
/** @internal */
export declare class AccuDrawSetLockXTool extends Tool {
    static toolId: string;
    run(): Promise<boolean>;
}
/** @internal */
export declare class AccuDrawSetLockYTool extends Tool {
    static toolId: string;
    run(): Promise<boolean>;
}
/** @internal */
export declare class AccuDrawSetLockZTool extends Tool {
    static toolId: string;
    run(): Promise<boolean>;
}
/** @internal */
export declare class AccuDrawSetLockDistanceTool extends Tool {
    static toolId: string;
    run(): Promise<boolean>;
}
/** @internal */
export declare class AccuDrawSetLockAngleTool extends Tool {
    static toolId: string;
    run(): Promise<boolean>;
}
/** @internal */
export declare class AccuDrawChangeModeTool extends Tool {
    static toolId: string;
    run(): Promise<boolean>;
}
/** @internal */
export declare class AccuDrawRotateCycleTool extends Tool {
    static toolId: string;
    run(): Promise<boolean>;
}
/** @internal */
export declare class AccuDrawRotateTopTool extends Tool {
    static toolId: string;
    run(): Promise<boolean>;
}
/** @internal */
export declare class AccuDrawRotateFrontTool extends Tool {
    static toolId: string;
    run(): Promise<boolean>;
}
/** @internal */
export declare class AccuDrawRotateSideTool extends Tool {
    static toolId: string;
    run(): Promise<boolean>;
}
/** @internal */
export declare class AccuDrawRotateViewTool extends Tool {
    static toolId: string;
    run(): Promise<boolean>;
}
/** @internal */
declare abstract class AccuDrawShortcutsTool extends InputCollector {
    private _complete;
    protected get allowShortcut(): boolean;
    protected get wantActivateOnStart(): boolean;
    protected get wantClearSnapOnStart(): boolean;
    protected get wantManipulationImmediate(): boolean;
    protected get wantExitOnDataButtonUp(): boolean;
    onInstall(): Promise<boolean>;
    onPostInstall(): Promise<void>;
    onCleanup(): Promise<void>;
    exitTool(): Promise<void>;
    onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled>;
    onDataButtonUp(_ev: BeButtonEvent): Promise<EventHandled>;
    onMouseMotion(ev: BeButtonEvent): Promise<void>;
    onManipulationStart(): void;
    onManipulationComplete(): AccuDrawFlags;
    abstract doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean;
}
/** @internal */
export declare class AccuDrawRotateAxesTool extends AccuDrawShortcutsTool {
    aboutCurrentZ: boolean;
    static toolId: string;
    static get maxArgs(): number;
    constructor(aboutCurrentZ?: boolean);
    protected get allowShortcut(): boolean;
    protected get wantActivateOnStart(): boolean;
    protected get wantManipulationImmediate(): boolean;
    onManipulationStart(): void;
    doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean;
    parseAndRun(...args: any[]): Promise<boolean>;
}
/** @internal */
export declare class AccuDrawRotateElementTool extends AccuDrawShortcutsTool {
    static toolId: string;
    private _moveOrigin;
    protected get wantActivateOnStart(): boolean;
    protected get wantManipulationImmediate(): boolean;
    onManipulationStart(): void;
    onManipulationComplete(): AccuDrawFlags;
    updateOrientation(snap: SnapDetail, viewport: ScreenViewport, _isMotion: boolean): boolean;
    doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean;
}
/** @internal */
export declare class AccuDrawRotatePerpendicularTool extends AccuDrawRotateElementTool {
    static toolId: string;
    protected _location?: {
        point: Point3d;
        viewport: ScreenViewport;
    };
    protected get wantExitOnDataButtonUp(): boolean;
    onManipulationComplete(): AccuDrawFlags;
    updateOrientation(snap: SnapDetail, viewport: ScreenViewport, isMotion: boolean): boolean;
}
/** @internal */
export declare class DefineACSByElementTool extends AccuDrawShortcutsTool {
    static toolId: string;
    private _origin;
    private _rMatrix;
    private _acs?;
    onManipulationStart(): void;
    updateOrientation(snap: SnapDetail, vp: Viewport): boolean;
    doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean;
    decorate(context: DecorateContext): void;
}
/** @internal */
export declare class DefineACSByPointsTool extends AccuDrawShortcutsTool {
    static toolId: string;
    private readonly _points;
    private _acs?;
    onManipulationStart(): void;
    doManipulation(ev: BeButtonEvent | undefined, isMotion: boolean): boolean;
    decorate(context: DecorateContext): void;
}
export {};
//# sourceMappingURL=AccuDrawTool.d.ts.map