import type { CoordinateSystem, MotionGroupDescription, RobotTcp } from "@wandelbots/nova-js/v2";
import { type IReactionDisposer } from "mobx";
import type { JoggerConnection } from "../../lib/JoggerConnection";
declare const discreteIncrementOptions: {
    id: string;
    mm: number;
    degrees: number;
}[];
declare const incrementOptions: readonly [{
    readonly id: "continuous";
}, ...{
    id: string;
    mm: number;
    degrees: number;
}[]];
export type JoggingAxis = "x" | "y" | "z";
export type JoggingDirection = "+" | "-";
export type DiscreteIncrementOption = (typeof discreteIncrementOptions)[number];
export type IncrementOption = (typeof incrementOptions)[number];
export type IncrementOptionId = IncrementOption["id"];
export declare const ORIENTATION_IDS: string[];
export type OrientationId = (typeof ORIENTATION_IDS)[number];
export type IncrementJogInProgress = {
    direction: JoggingDirection;
    axis: JoggingAxis;
};
export declare class JoggingStore {
    readonly jogger: JoggerConnection;
    readonly coordSystems: CoordinateSystem[];
    readonly motionGroupDescription: MotionGroupDescription;
    readonly tcps: RobotTcp[];
    selectedTabId: "cartesian" | "joint" | "debug";
    /**
     * State of the jogging panel. Starts as "inactive"
     */
    activationState: "inactive" | "loading" | "active";
    /**
     * If an error occurred connecting to the jogging websocket
     */
    activationError: unknown | null;
    /** To avoid activation race conditions */
    activationCounter: number;
    /** Locks to prevent UI interactions during certain operations */
    locks: Set<string>;
    /** Block jogging UI interactions when connection is taken by another jogger */
    blocked: boolean;
    /**
     * Id of selected coordinate system from among those defined on the API side
     */
    selectedCoordSystemId: string;
    /** Id of selected tool center point from among the options available on the robot */
    selectedTcpId: string;
    /**
     * Whether the user is jogging in the coordinate system or tool orientation.
     * When in tool orientation, the robot moves in a direction relative to the
     * attached tool rotation.
     */
    selectedOrientation: OrientationId;
    /**
     * Id of selected increment amount for jogging. Options are defined by robot pad.
     * When non-continuous, jogging moves the robot by a fixed number of mm or degrees
     * each time the button is pressed, for extra precision
     */
    selectedIncrementId: IncrementOptionId;
    /**
     * When on the cartesian tab, jogging can be either translating or rotating
     * around the TCP.
     */
    selectedCartesianMotionType: "translate" | "rotate";
    /**
     * If the jogger is busy running an incremental jog, this will be set
     * with the information about the motion
     */
    incrementJogInProgress: IncrementJogInProgress | null;
    /** How fast the robot goes when doing cartesian translate jogging in mm/s */
    translationVelocityMmPerSec: number;
    /** How fast the robot goes when doing cartesian or joint rotation jogging in °/s */
    rotationVelocityDegPerSec: number;
    /** Minimum translation velocity user can choose on the velocity slider in °/s */
    minTranslationVelocityMmPerSec: number;
    /** Maximum translation velocity user can choose on the velocity slider in °/s */
    maxTranslationVelocityMmPerSec: number;
    /** Minimum rotation velocity user can choose on the velocity slider in °/s */
    minRotationVelocityDegPerSec: number;
    /** Maximum rotation velocity user can choose on the velocity slider in °/s */
    maxRotationVelocityDegPerSec: number;
    /** Whether to show the coordinate system select dropdown in the UI */
    showCoordSystemSelect: boolean;
    /** Whether to show the TCP select dropdown in the UI */
    showTcpSelect: boolean;
    /** Whether to show the orientation select dropdown in the UI */
    showOrientationSelect: boolean;
    /** Whether to show the increment select dropdown in the UI */
    showIncrementSelect: boolean;
    /** Whether to show icons in the jogging tabs */
    showTabIcons: boolean;
    /** Whether to show the label to the right of the velocity slider */
    showVelocitySliderLabel: boolean;
    /** Whether to show the legend before the slider */
    showVelocityLegend: boolean;
    /** Whether to show the legend before the joints */
    showJointsLegend: boolean;
    disposers: IReactionDisposer[];
    /**
     * Load a jogging store with the relevant data it needs
     * from the backend
     */
    static loadFor(jogger: JoggerConnection): Promise<JoggingStore>;
    constructor(jogger: JoggerConnection, coordSystems: CoordinateSystem[], motionGroupDescription: MotionGroupDescription, tcps: RobotTcp[]);
    dispose(): void;
    get coordSystemCountByName(): import("lodash").Dictionary<number>;
    deactivate(): Promise<void>;
    /** Activate the jogger with current settings */
    activate(): Promise<JoggerConnection>;
    loadFromLocalStorage(): void;
    saveToLocalStorage(): void;
    get isLocked(): boolean;
    get localStorageSave(): {
        selectedTabId: "joint" | "debug" | "cartesian";
        selectedCoordSystemId: string;
        selectedTcpId: string;
        selectedOrientation: string;
        selectedIncrementId: string;
        selectedCartesianMotionType: "translate" | "rotate";
    };
    get tabs(): readonly [{
        readonly id: "cartesian";
        readonly label: "cartesian";
    }, {
        readonly id: "joint";
        readonly label: "joint";
    }];
    get incrementOptions(): readonly [{
        readonly id: "continuous";
    }, ...{
        id: string;
        mm: number;
        degrees: number;
    }[]];
    get discreteIncrementOptions(): {
        id: string;
        mm: number;
        degrees: number;
    }[];
    get incrementOptionsById(): import("lodash").Dictionary<{
        id: string;
        mm: number;
        degrees: number;
    } | {
        readonly id: "continuous";
    }>;
    get tabsById(): import("lodash").Dictionary<{
        readonly id: "cartesian";
        readonly label: "cartesian";
    } | {
        readonly id: "joint";
        readonly label: "joint";
    }>;
    get currentTab(): {
        readonly id: "cartesian";
        readonly label: "cartesian";
    } | {
        readonly id: "joint";
        readonly label: "joint";
    };
    get tabIndex(): number;
    get coordSystemsById(): import("lodash").Dictionary<CoordinateSystem>;
    get selectedCoordSystem(): CoordinateSystem;
    /**
     * The id of the coordinate system to use for jogging.
     * If in tool orientation, this is set to "tool", not the
     * selected coordinate system.
     */
    get activeCoordSystemId(): string;
    get tcpsById(): import("lodash").Dictionary<RobotTcp>;
    get activeDiscreteIncrement(): {
        id: string;
        mm: number;
        degrees: number;
    } | undefined;
    /** The selected rotation velocity converted to radians per second */
    get rotationVelocityRadsPerSec(): number;
    /** Selected velocity in mm/sec or deg/sec */
    get velocityInDisplayUnits(): number;
    /** Minimum selectable velocity in mm/sec or deg/sec */
    get minVelocityInDisplayUnits(): number;
    /** Maximum selectable velocity in mm/sec or deg/sec */
    get maxVelocityInDisplayUnits(): number;
    /**
     * For velocity unit purposes, joint and cartesian rotation
     * are treated as the same type of motion
     */
    get currentMotionType(): "rotate" | "translate";
    onTabChange(_event: React.SyntheticEvent, newValue: number): void;
    setSelectedCoordSystemId(id: string): void;
    setSelectedTcpId(id: string): void;
    setSelectedOrientation(orientation: OrientationId): void;
    setSelectedIncrementId(id: IncrementOptionId): void;
    setCurrentIncrementJog(incrementJog: IncrementJogInProgress | null): void;
    setVelocityFromSlider(velocity: number): void;
    setSelectedCartesianMotionType(type: "translate" | "rotate"): void;
    lock(id: string): void;
    unlock(id: string): void;
    block(): void;
    unblock(): void;
    /** Lock the UI until the given async callback resolves */
    withMotionLock(fn: () => Promise<void>): Promise<void>;
}
export {};
//# sourceMappingURL=JoggingStore.d.ts.map