@wandelbots/wandelbots-js-react-components 5.6.1 → 5.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/3d.cjs +1 -1
- package/dist/3d.js +1 -1
- package/dist/chunks/{MotionGroupVisualizer-Q7ifc7Kd.js → MotionGroupVisualizer-CrJO299j.js} +53 -50
- package/dist/chunks/MotionGroupVisualizer-OZwEAMLA.cjs +1 -0
- package/dist/chunks/theming-BsesHcbU.cjs +4 -0
- package/dist/chunks/{theming-BU4-W3Wy.js → theming-BxyIEPXR.js} +1434 -1380
- package/dist/components/jogging/JoggingPanel.d.ts +5 -3
- package/dist/core.cjs +1 -1
- package/dist/core.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +2 -2
- package/dist/lib/ConnectedMotionGroup.d.ts +12 -5
- package/dist/lib/JoggerConnection.d.ts +7 -3
- package/dist/lib/MotionStreamConnection.d.ts +11 -4
- package/dist/lib/novaCompat.d.ts +16 -0
- package/package.json +2 -2
- package/dist/chunks/MotionGroupVisualizer-MKZ2-1oY.cjs +0 -1
- package/dist/chunks/theming-DTS9g0aC.cjs +0 -4
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import type { SxProps } from "@mui/material/styles";
|
|
2
|
-
import {
|
|
2
|
+
import type { AnyNovaClient } from "../../lib/novaCompat";
|
|
3
3
|
import { JoggingStore } from "./JoggingStore";
|
|
4
4
|
export type JoggingPanelTabId = "cartesian" | "joint";
|
|
5
5
|
export type JoggingPanelProps = {
|
|
6
|
-
/** Either an existing
|
|
7
|
-
nova:
|
|
6
|
+
/** Either an existing Nova client or the base url of a deployed Nova instance */
|
|
7
|
+
nova: AnyNovaClient | string;
|
|
8
8
|
/** Id of the motion group to move e.g. 0@ur5e */
|
|
9
9
|
motionGroupId: string;
|
|
10
|
+
/** Cell id on the Nova instance. Defaults to "cell". */
|
|
11
|
+
cellId?: string;
|
|
10
12
|
/** Callback with the jogging panel's state store for further customization/config */
|
|
11
13
|
onSetup?: (store: JoggingStore) => void;
|
|
12
14
|
/** Any children will go at the bottom of the panel under the default contents */
|
package/dist/core.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./chunks/theming-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./chunks/theming-BsesHcbU.cjs"),o=require("./chunks/interpolation-C9sLsved.cjs"),t=require("./chunks/externalizeComponent-OO4jcrz5.cjs"),a=require("./chunks/SafetyBar-VvOZ9aRM.cjs");exports.AppHeader=e.AppHeader;exports.ConnectedMotionGroup=e.ConnectedMotionGroup;exports.CycleTimer=e.CycleTimer;exports.JoggerConnection=e.JoggerConnection;exports.JoggingCartesianAxisControl=e.JoggingCartesianAxisControl;exports.JoggingJointValueControl=e.JoggingJointValueControl;exports.JoggingPanel=e.JoggingPanel;exports.JoggingStore=e.JoggingStore;exports.LoadingCover=e.LoadingCover;exports.LoadingErrorMessage=e.LoadingErrorMessage;exports.LogPanel=e.LogPanel;exports.LogStore=e.LogStore;exports.LogViewer=e.LogViewer;exports.MotionStreamConnection=e.MotionStreamConnection;exports.NoMotionGroupModal=e.NoMotionGroupModal;exports.PoseCartesianValues=e.PoseCartesianValues;exports.PoseJointValues=e.PoseJointValues;exports.RobotListItem=e.RobotListItem;exports.RobotSetupReadinessIndicator=e.RobotSetupReadinessIndicator;exports.RobotSetupReadinessState=e.RobotSetupReadinessState;exports.SelectableFab=e.SelectableFab;exports.TabBar=e.TabBar;exports.Timer=e.Timer;exports.VelocitySlider=e.VelocitySlider;exports.VelocitySliderLabel=e.VelocitySliderLabel;exports.WandelbotsDataGrid=e.WandelbotsDataGrid;exports.createDebugMessage=e.createDebugMessage;exports.createErrorMessage=e.createErrorMessage;exports.createInfoMessage=e.createInfoMessage;exports.createLogMessage=e.createLogMessage;exports.createNovaMuiTheme=e.createNovaMuiTheme;exports.createWarningMessage=e.createWarningMessage;exports.jointValuesEqual=e.jointValuesEqual;exports.poseEqual=e.poseEqual;exports.tcpMotionEqual=e.tcpMotionEqual;exports.unwrapRotationVector=e.unwrapRotationVector;exports.ProgramControl=o.ProgramControl;exports.ProgramState=o.ProgramState;exports.ProgramStateIndicator=o.ProgramStateIndicator;exports.ValueInterpolator=o.ValueInterpolator;exports.useAnimationFrame=o.useAnimationFrame;exports.useAutorun=o.useAutorun;exports.useInterpolation=o.useInterpolation;exports.useMounted=o.useMounted;exports.useReaction=o.useReaction;exports.i18n=t.i18n;exports.SafetyBar=a.SafetyBar;
|
package/dist/core.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as o, s, C as t, t as r, a as n, b as i, d as g, J as l, f as u, g as c, h as d, L as p, n as m, M, N as S, P as b, e as C, R as V, p as L, o as P, S as f, T as J, q as R, V as x, r as I, W as A, j as E, m as T, k as q, i as y, c as v, l as w, u as G, v as N, w as W, x as h } from "./chunks/theming-
|
|
1
|
+
import { A as o, s, C as t, t as r, a as n, b as i, d as g, J as l, f as u, g as c, h as d, L as p, n as m, M, N as S, P as b, e as C, R as V, p as L, o as P, S as f, T as J, q as R, V as x, r as I, W as A, j as E, m as T, k as q, i as y, c as v, l as w, u as G, v as N, w as W, x as h } from "./chunks/theming-BxyIEPXR.js";
|
|
2
2
|
import { a as B, P as D, b as F, V as k, e as H, c as z, f as K, u as O, d as Q } from "./chunks/interpolation-DG8VTxzS.js";
|
|
3
3
|
import { i as X } from "./chunks/externalizeComponent-EDymnaGR.js";
|
|
4
4
|
import { S as Z } from "./chunks/SafetyBar-CxxIVVeR.js";
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./chunks/MotionGroupVisualizer-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./chunks/MotionGroupVisualizer-OZwEAMLA.cjs"),e=require("./chunks/theming-BsesHcbU.cjs"),t=require("./chunks/interpolation-C9sLsved.cjs"),i=require("./chunks/externalizeComponent-OO4jcrz5.cjs"),s=require("./chunks/SafetyBar-VvOZ9aRM.cjs"),a=require("./chunks/robot-SEtfVAmf.cjs"),n=require("./chunks/wbLogo-G_IfZ03l.cjs"),r=require("./chunks/safety-state-stop-CgPfwC18.cjs");exports.CollisionSceneRenderer=o.CollisionSceneRenderer;exports.LinearAxis=o.LinearAxis;exports.MANUFACTURER_HOME_CONFIGS=o.MANUFACTURER_HOME_CONFIGS;exports.MotionGroupVisualizer=o.MotionGroupVisualizer;exports.PresetEnvironment=o.PresetEnvironment;exports.Robot=o.Robot;exports.RobotCard=o.RobotCard;exports.SafetyZonesRenderer=o.SafetyZonesRenderer;exports.SupportedLinearAxis=o.SupportedLinearAxis;exports.SupportedRobot=o.SupportedRobot;exports.TrajectoryRenderer=o.TrajectoryRenderer;exports.defaultAxisConfig=o.defaultAxisConfig;exports.defaultGetModel=o.defaultGetModel;exports.extractManufacturer=o.extractManufacturer;exports.getDefaultHomeConfig=o.getDefaultHomeConfig;exports.AppHeader=e.AppHeader;exports.ConnectedMotionGroup=e.ConnectedMotionGroup;exports.CycleTimer=e.CycleTimer;exports.JoggerConnection=e.JoggerConnection;exports.JoggingCartesianAxisControl=e.JoggingCartesianAxisControl;exports.JoggingJointValueControl=e.JoggingJointValueControl;exports.JoggingPanel=e.JoggingPanel;exports.JoggingStore=e.JoggingStore;exports.LoadingCover=e.LoadingCover;exports.LoadingErrorMessage=e.LoadingErrorMessage;exports.LogPanel=e.LogPanel;exports.LogStore=e.LogStore;exports.LogViewer=e.LogViewer;exports.MotionStreamConnection=e.MotionStreamConnection;exports.NoMotionGroupModal=e.NoMotionGroupModal;exports.PoseCartesianValues=e.PoseCartesianValues;exports.PoseJointValues=e.PoseJointValues;exports.RobotListItem=e.RobotListItem;exports.RobotSetupReadinessIndicator=e.RobotSetupReadinessIndicator;exports.RobotSetupReadinessState=e.RobotSetupReadinessState;exports.SelectableFab=e.SelectableFab;exports.TabBar=e.TabBar;exports.Timer=e.Timer;exports.VelocitySlider=e.VelocitySlider;exports.VelocitySliderLabel=e.VelocitySliderLabel;exports.WandelbotsDataGrid=e.WandelbotsDataGrid;exports.createDebugMessage=e.createDebugMessage;exports.createErrorMessage=e.createErrorMessage;exports.createInfoMessage=e.createInfoMessage;exports.createLogMessage=e.createLogMessage;exports.createNovaMuiTheme=e.createNovaMuiTheme;exports.createWarningMessage=e.createWarningMessage;exports.jointValuesEqual=e.jointValuesEqual;exports.poseEqual=e.poseEqual;exports.tcpMotionEqual=e.tcpMotionEqual;exports.unwrapRotationVector=e.unwrapRotationVector;exports.ProgramControl=t.ProgramControl;exports.ProgramState=t.ProgramState;exports.ProgramStateIndicator=t.ProgramStateIndicator;exports.ValueInterpolator=t.ValueInterpolator;exports.useAnimationFrame=t.useAnimationFrame;exports.useAutorun=t.useAutorun;exports.useInterpolation=t.useInterpolation;exports.useMounted=t.useMounted;exports.useReaction=t.useReaction;exports.i18n=i.i18n;exports.SafetyBar=s.SafetyBar;exports.AxisXIcon=a.ForwardRef;exports.AxisYIcon=a.ForwardRef$1;exports.AxisZIcon=a.ForwardRef$2;exports.JogMinusIcon=a.ForwardRef$3;exports.JogPlusIcon=a.ForwardRef$4;exports.RobotIcon=a.ForwardRef$5;exports.RotationIcon=a.ForwardRef$6;exports.HomeIcon=n.ForwardRef;exports.JoggingIcon=n.ForwardRef$1;exports.OrientationCoordSystemIcon=n.ForwardRef$2;exports.OrientationToolIcon=n.ForwardRef$3;exports.WBLogoIcon=n.ForwardRef$4;exports.ControllerTypePhysicalIcon=r.ForwardRef;exports.ControllerTypeVirtualIcon=r.ForwardRef$1;exports.OperationModeAutomaticIcon=r.ForwardRef$2;exports.OperationModeErrorIcon=r.ForwardRef$3;exports.OperationModeManualIcon=r.ForwardRef$4;exports.SafetyStateErrorIcon=r.ForwardRef$5;exports.SafetyStateEstopIcon=r.ForwardRef$6;exports.SafetyStateManualActionRequiredIcon=r.ForwardRef$7;exports.SafetyStateNormalIcon=r.ForwardRef$8;exports.SafetyStateStopIcon=r.ForwardRef$9;
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { C as e, L as s, M as t, h as r, P as n, b as i, R as c, S as l, c as g, f as u, T as d, a as p, d as S, e as I, g as f } from "./chunks/MotionGroupVisualizer-
|
|
2
|
-
import { A as m, s as C, C as R, t as b, a as x, b as y, d as A, J as L, f as P, g as V, h as E, L as J, n as T, M as F, N as O, P as G, e as N, R as h, p as q, o as v, S as H, T as W, q as j, V as w, r as B, W as D, j as U, m as Z, k as _, i as k, c as z, l as X, u as Y, v as K, w as Q, x as $ } from "./chunks/theming-
|
|
1
|
+
import { C as e, L as s, M as t, h as r, P as n, b as i, R as c, S as l, c as g, f as u, T as d, a as p, d as S, e as I, g as f } from "./chunks/MotionGroupVisualizer-CrJO299j.js";
|
|
2
|
+
import { A as m, s as C, C as R, t as b, a as x, b as y, d as A, J as L, f as P, g as V, h as E, L as J, n as T, M as F, N as O, P as G, e as N, R as h, p as q, o as v, S as H, T as W, q as j, V as w, r as B, W as D, j as U, m as Z, k as _, i as k, c as z, l as X, u as Y, v as K, w as Q, x as $ } from "./chunks/theming-BxyIEPXR.js";
|
|
3
3
|
import { a as oa, P as ea, b as sa, V as ta, e as ra, c as na, f as ia, u as ca, d as la } from "./chunks/interpolation-DG8VTxzS.js";
|
|
4
4
|
import { i as ua } from "./chunks/externalizeComponent-EDymnaGR.js";
|
|
5
5
|
import { S as pa } from "./chunks/SafetyBar-CxxIVVeR.js";
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { type AutoReconnectingWebsocket } from "@wandelbots/nova-js";
|
|
2
|
-
import type { MotionGroupDescription, MotionGroupState,
|
|
2
|
+
import type { MotionGroupDescription, MotionGroupState, Nova, RobotControllerState } from "@wandelbots/nova-js/v2";
|
|
3
3
|
import * as THREE from "three";
|
|
4
4
|
import type { Vector3Simple } from "./JoggerConnection";
|
|
5
|
+
import { type AnyNovaClient } from "./novaCompat";
|
|
5
6
|
export type RobotTcpLike = {
|
|
6
7
|
id: string;
|
|
7
8
|
readable_name: string;
|
|
@@ -11,12 +12,15 @@ export type RobotTcpLike = {
|
|
|
11
12
|
export type MotionGroupOption = {
|
|
12
13
|
selectionId: string;
|
|
13
14
|
};
|
|
15
|
+
export type ConnectedMotionGroupOptions = {
|
|
16
|
+
/** Cell id on the Nova instance. Defaults to "cell". */
|
|
17
|
+
cellId?: string;
|
|
18
|
+
};
|
|
14
19
|
/**
|
|
15
20
|
* Store representing the current state of a connected motion group.
|
|
16
21
|
* API v2 version, not used yet in the components.
|
|
17
22
|
*/
|
|
18
23
|
export declare class ConnectedMotionGroup {
|
|
19
|
-
readonly nova: NovaClient;
|
|
20
24
|
readonly controller: RobotControllerState;
|
|
21
25
|
readonly motionGroup: MotionGroupState;
|
|
22
26
|
readonly initialMotionState: MotionGroupState;
|
|
@@ -26,8 +30,9 @@ export declare class ConnectedMotionGroup {
|
|
|
26
30
|
readonly description: MotionGroupDescription;
|
|
27
31
|
readonly initialControllerState: RobotControllerState;
|
|
28
32
|
readonly controllerStateSocket: AutoReconnectingWebsocket;
|
|
29
|
-
|
|
30
|
-
static
|
|
33
|
+
readonly cellId: string;
|
|
34
|
+
static connectMultiple(nova: AnyNovaClient, motionGroupIds: string[], options?: ConnectedMotionGroupOptions): Promise<ConnectedMotionGroup[]>;
|
|
35
|
+
static connect(novaClient: AnyNovaClient, motionGroupId: string, options?: ConnectedMotionGroupOptions): Promise<ConnectedMotionGroup>;
|
|
31
36
|
connectedJoggingSocket: WebSocket | null;
|
|
32
37
|
planData: any | null;
|
|
33
38
|
joggingVelocity: number;
|
|
@@ -38,7 +43,9 @@ export declare class ConnectedMotionGroup {
|
|
|
38
43
|
* movement controls in the UI should only be enabled in the "active" state
|
|
39
44
|
*/
|
|
40
45
|
activationState: "inactive" | "activating" | "deactivating" | "active";
|
|
41
|
-
|
|
46
|
+
/** Normalized instance-level Nova client (see `asNovaInstance`) */
|
|
47
|
+
readonly nova: Nova;
|
|
48
|
+
constructor(nova: AnyNovaClient, controller: RobotControllerState, motionGroup: MotionGroupState, initialMotionState: MotionGroupState, motionStateSocket: AutoReconnectingWebsocket, isVirtual: boolean, tcps: RobotTcpLike[], description: MotionGroupDescription, initialControllerState: RobotControllerState, controllerStateSocket: AutoReconnectingWebsocket, cellId?: string);
|
|
42
49
|
get motionGroupId(): string;
|
|
43
50
|
get controllerId(): string;
|
|
44
51
|
get modelFromController(): string;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type AutoReconnectingWebsocket } from "@wandelbots/nova-js";
|
|
2
|
-
import { type
|
|
2
|
+
import { type Pose } from "@wandelbots/nova-js/v2";
|
|
3
3
|
import { MotionStreamConnection } from "./MotionStreamConnection";
|
|
4
|
+
import type { AnyNovaClient } from "./novaCompat";
|
|
4
5
|
export type Vector3Simple = [number, number, number];
|
|
5
6
|
export type JoggerConnectionOptions = {
|
|
6
7
|
mode?: JoggerMode;
|
|
@@ -13,6 +14,8 @@ export type JoggerConnectionOptions = {
|
|
|
13
14
|
onError?: (err: unknown) => void;
|
|
14
15
|
tcp?: string;
|
|
15
16
|
orientation?: JoggerOrientation;
|
|
17
|
+
/** Cell id on the Nova instance. Defaults to "cell". */
|
|
18
|
+
cellId?: string;
|
|
16
19
|
};
|
|
17
20
|
export type JoggerMode = "jogging" | "trajectory" | "off";
|
|
18
21
|
export type JoggerOrientation = "coordsys" | "tool";
|
|
@@ -49,12 +52,13 @@ export declare class JoggerConnection {
|
|
|
49
52
|
* @param options.onError - Error handler for websocket errors
|
|
50
53
|
* @returns Promise resolving to initialized JoggerConnection instance
|
|
51
54
|
*/
|
|
52
|
-
static open(nova:
|
|
55
|
+
static open(nova: AnyNovaClient, motionGroupId: string, options?: JoggerConnectionOptions): Promise<JoggerConnection>;
|
|
53
56
|
constructor(motionStream: MotionStreamConnection, options?: JoggerConnectionOptions | undefined);
|
|
54
57
|
getDefaultTcp(motionStream: MotionStreamConnection): string | undefined;
|
|
55
58
|
setOptions(options: Partial<JoggerConnectionOptions>): Promise<void>;
|
|
56
59
|
get motionGroupId(): string;
|
|
57
|
-
get nova():
|
|
60
|
+
get nova(): import("@wandelbots/nova-js/v2").Nova;
|
|
61
|
+
get cellId(): string;
|
|
58
62
|
get numJoints(): number;
|
|
59
63
|
stop(): Promise<void>;
|
|
60
64
|
dispose(): Promise<void[]>;
|
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
import { type AutoReconnectingWebsocket } from "@wandelbots/nova-js";
|
|
2
|
-
import type { MotionGroupDescription, MotionGroupState,
|
|
2
|
+
import type { MotionGroupDescription, MotionGroupState, Nova, RobotControllerState } from "@wandelbots/nova-js/v2";
|
|
3
|
+
import { type AnyNovaClient } from "./novaCompat";
|
|
3
4
|
/**
|
|
4
5
|
* Store representing the current state of a connected motion group.
|
|
5
6
|
*/
|
|
7
|
+
export type MotionStreamConnectionOptions = {
|
|
8
|
+
/** Cell id on the Nova instance. Defaults to "cell". */
|
|
9
|
+
cellId?: string;
|
|
10
|
+
};
|
|
6
11
|
export declare class MotionStreamConnection {
|
|
7
|
-
readonly nova: NovaClient;
|
|
8
12
|
readonly controller: RobotControllerState;
|
|
9
13
|
readonly motionGroup: MotionGroupState;
|
|
10
14
|
readonly description: MotionGroupDescription;
|
|
11
15
|
readonly initialMotionState: MotionGroupState;
|
|
12
16
|
readonly motionStateSocket: AutoReconnectingWebsocket;
|
|
13
|
-
|
|
17
|
+
readonly cellId: string;
|
|
18
|
+
static open(novaClient: AnyNovaClient, motionGroupId: string, options?: MotionStreamConnectionOptions): Promise<MotionStreamConnection>;
|
|
14
19
|
rapidlyChangingMotionState: MotionGroupState;
|
|
15
|
-
|
|
20
|
+
/** Normalized instance-level Nova client (see `asNovaInstance`) */
|
|
21
|
+
readonly nova: Nova;
|
|
22
|
+
constructor(nova: AnyNovaClient, controller: RobotControllerState, motionGroup: MotionGroupState, description: MotionGroupDescription, initialMotionState: MotionGroupState, motionStateSocket: AutoReconnectingWebsocket, cellId?: string);
|
|
16
23
|
get motionGroupId(): string;
|
|
17
24
|
get controllerId(): string;
|
|
18
25
|
get joints(): {
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Nova, NovaClient } from "@wandelbots/nova-js/v2";
|
|
2
|
+
/**
|
|
3
|
+
* A Nova-like client. We accept either the current instance-level `Nova`
|
|
4
|
+
* client or, for backwards compatibility, the deprecated cell-scoped
|
|
5
|
+
* `NovaClient`.
|
|
6
|
+
*/
|
|
7
|
+
export type AnyNovaClient = Nova | NovaClient;
|
|
8
|
+
/**
|
|
9
|
+
* For backwards compatibility we still accept the deprecated cell-scoped
|
|
10
|
+
* `NovaClient`. This normalizes it to present the same interface as the
|
|
11
|
+
* current instance-level `Nova` client, so the rest of the code can be
|
|
12
|
+
* written against the newer API.
|
|
13
|
+
*
|
|
14
|
+
* Instance-level `Nova` clients are returned unchanged.
|
|
15
|
+
*/
|
|
16
|
+
export declare function asNovaInstance(nova: AnyNovaClient): Nova;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wandelbots/wandelbots-js-react-components",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.7.0",
|
|
4
4
|
"description": "React UI toolkit for building applications on top of the Wandelbots platform",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -173,7 +173,7 @@
|
|
|
173
173
|
"dependencies": {
|
|
174
174
|
"@mui/x-charts": "^8.27.0",
|
|
175
175
|
"@mui/x-data-grid": "^8.27.0",
|
|
176
|
-
"@wandelbots/nova-js": "
|
|
176
|
+
"@wandelbots/nova-js": "3.10.0-pr.295.cb733a7",
|
|
177
177
|
"axios": "^1.15.0",
|
|
178
178
|
"dotenv": "^17.2.3",
|
|
179
179
|
"i18next-browser-languagedetector": "^8.2.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const t=require("react/jsx-runtime"),g=require("three"),V=require("three-stdlib"),d=require("react"),S=require("./externalizeComponent-OO4jcrz5.cjs"),M=require("@react-three/drei"),pe=require("@mui/material/styles"),v=require("@mui/material/Box"),Y=require("@mui/material/Button"),he=require("@mui/material/Card"),Q=require("@mui/material/Divider"),X=require("@mui/material/Typography"),T=require("@react-three/fiber"),me=require("mobx-react-lite"),xe=require("react-i18next"),L=require("./interpolation-C9sLsved.cjs"),R=require("@wandelbots/nova-js/v2"),K=require("react-error-boundary");function ye(e){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(n,r,o.get?o:{enumerable:!0,get:()=>e[r]})}}return n.default=e,Object.freeze(n)}const j=ye(g);function ge(e){switch(e.shape_type){case"convex_hull":return new V.ConvexGeometry(e.vertices.map(r=>new j.Vector3(r[0]/1e3,r[1]/1e3,r[2]/1e3)));case"box":return new j.BoxGeometry(e.size_x/1e3,e.size_y/1e3,e.size_z/1e3);case"sphere":return new j.SphereGeometry(e.radius/1e3);case"capsule":return new j.CapsuleGeometry(e.radius/1e3,e.cylinder_height/1e3);case"cylinder":return new j.CylinderGeometry(e.radius/1e3,e.radius/1e3,e.height/1e3);case"rectangle":return new j.BoxGeometry(e.size_x/1e3,e.size_y/1e3,0);default:return console.warn(`${e.shape_type} is not supported`),new j.BufferGeometry}}function je({name:e,collider:n,children:r}){var f,u;const o=((f=n.pose)==null?void 0:f.position)??[0,0,0],i=((u=n.pose)==null?void 0:u.orientation)??[0,0,0];return n.margin&&console.warn(`${e} margin is not supported`),t.jsx("mesh",{name:e,position:new j.Vector3(o[0],o[1],o[2]).divideScalar(1e3),rotation:new j.Euler(i[0],i[1],i[2],"XYZ"),geometry:ge(n.shape),children:r})}function be({name:e,colliders:n,meshChildrenProvider:r,...o}){return t.jsx("group",{name:e,...o,children:Object.entries(n).map(([i,f])=>t.jsx(je,{name:i,collider:f,children:r(i,f)},i))})}function we({scene:e,meshChildrenProvider:n}){const r=e.colliders;return t.jsx("group",{children:r&&t.jsx(be,{meshChildrenProvider:n,colliders:r})})}function O(){return t.jsx(M.Environment,{frames:1,children:t.jsx(Me,{})})}const Re=[2,0,2,0,2,0,2,0];function Me({positions:e=Re}){return t.jsxs(t.Fragment,{children:[t.jsx(M.Lightformer,{intensity:5,"rotation-x":Math.PI/2,position:[0,5,-9],scale:[10,10,1]}),t.jsx("group",{rotation:[0,.5,0],children:t.jsx("group",{children:e.map((n,r)=>t.jsx(M.Lightformer,{form:"circle",intensity:5,rotation:[Math.PI/2,0,0],position:[n,4,r*4],scale:[3,1,1]},r))})}),t.jsx(M.Lightformer,{intensity:40,"rotation-y":Math.PI/2,position:[-5,1,-1],scale:[20,.1,1]}),t.jsx(M.Lightformer,{intensity:20,"rotation-y":-Math.PI,position:[-5,-2,-1],scale:[20,.1,1]}),t.jsx(M.Lightformer,{"rotation-y":Math.PI/2,position:[-5,-1,-1],scale:[20,.5,1],intensity:5}),t.jsx(M.Lightformer,{"rotation-y":-Math.PI/2,position:[10,1,0],scale:[20,1,1],intensity:10}),t.jsx(M.Lightformer,{form:"ring",color:"white",intensity:5,scale:10,position:[-15,4,-18],target:[0,0,0]})]})}const Z={attach:"material",color:"#009f4d",opacity:.2,depthTest:!1,depthWrite:!1,transparent:!0,polygonOffset:!0};function ve({safetyZones:e,dhParameters:n,...r}){const o=d.useMemo(()=>S.dhParametersToPlaneSize(n??[]),[n]),i=(u,s)=>{var l,h;if(!((l=s==null?void 0:s.pose)!=null&&l.position)||!((h=s==null?void 0:s.pose)!=null&&h.orientation))return null;const y=new j.Vector3(s.pose.position[0]/1e3,s.pose.position[1]/1e3,s.pose.position[2]/1e3),a=new j.Vector3(s.pose.orientation[0],s.pose.orientation[1],s.pose.orientation[2]);let m;const c=s.shape.shape_type==="plane"?{...Z,side:j.DoubleSide}:{...Z,side:j.FrontSide};switch(s.shape.shape_type){case"plane":m=t.jsx("planeGeometry",{args:[o,o]});break;case"sphere":{const p=(s==null?void 0:s.shape).radius/1e3;m=t.jsx("sphereGeometry",{args:[p]});break}case"capsule":{const p=(s==null?void 0:s.shape).radius/1e3,x=(s==null?void 0:s.shape).cylinder_height/1e3;m=t.jsx("capsuleGeometry",{args:[p,x]});break}case"convex_hull":{const p=(s==null?void 0:s.shape).vertices.map(b=>new j.Vector3(b[0]/1e3,b[1]/1e3,b[2]/1e3)),x=S.verticesToCoplanarity(p);if(x.isCoplanar&&x.normal){const w=new j.Vector3().addVectors(p[0],x.normal.multiplyScalar(1e-4));p.push(w)}try{m=t.jsx("primitive",{object:new V.ConvexGeometry(p),attach:"geometry"})}catch(b){return console.log("Error creating ConvexGeometry:",b),null}break}case"rectangular_capsule":{const p=s.shape,x=p.radius/1e3,b=p.sphere_center_distance_x/1e3,w=p.sphere_center_distance_y/1e3,k=x*2;m=t.jsx("primitive",{object:new V.RoundedBoxGeometry(b,w,k,2,x),attach:"geometry"});break}default:console.warn("Unsupported safety zone shape type:",s.shape.shape_type),m=null}return t.jsxs("mesh",{renderOrder:u,position:y,quaternion:S.orientationToQuaternion(a),children:[m,t.jsx("meshStandardMaterial",{...c,polygonOffsetFactor:-u})]},`safety-zone-${s.shape.shape_type}-${u}`)},f=d.useMemo(()=>Object.values(e??{}).map((u,s)=>i(s,u)),[e,o]);return t.jsx("group",{...r,children:f})}function _e({trajectory:e,...n}){const r=(e==null?void 0:e.map(o=>{if(o.position&&o.position.length>=3){const[i,f,u]=o.position;if(Number.isFinite(i)&&Number.isFinite(f)&&Number.isFinite(u))return new j.Vector3(i/1e3,u/1e3,-f/1e3)}return null}).filter(o=>o!==null))||[];return t.jsx("group",{...n,children:r.length>0&&t.jsx(M.Line,{points:r,lineWidth:3,polygonOffset:!0,polygonOffsetFactor:10,polygonOffsetUnits:10})})}const P=new Map;async function E(e,n){if(P.has(e))return P.get(e);const r=(async()=>{var u;const o=n||"",i=new R.NovaClient({instanceUrl:o}),f=i.api.motionGroupModels;(u=f.axios)!=null&&u.interceptors&&f.axios.interceptors.request.use(s=>{var y;return(y=s.url)!=null&&y.includes("/glb")&&(s.responseType="blob"),s});try{const s=await i.api.motionGroupModels.getMotionGroupGlbModel(e);return URL.createObjectURL(s)}catch(s){throw console.error("Failed to fetch model:",s),s}})();return P.set(e,r),r}function z(e){function n(r){return r.children.length===0?[r]:[r,...r.children.flatMap(o=>n(o))]}return n(e).filter(r=>te(r))}function ee(e){return e.name.endsWith("_FLG")}function te(e){return/_J[0-9]+$/.test(e.name)}function Se(e,n){let r;function o(i){if(ee(i)){if(r)throw Error(`Found multiple flange groups in robot model ${n}; first ${r.name} then ${i.name}. Only one _FLG group is allowed.`);r=i}te(i),i.children.map(o)}if(o(e.scene),!r)throw Error(`No flange group found in robot model ${n}. Flange must be identified with a name ending in _FLG.`);return{gltf:e}}function re({rapidlyChangingMotionState:e,dhParameters:n,onRotationChanged:r,children:o}){const i=d.useRef([]),f=d.useRef(null),{invalidate:u}=T.useThree(),s=d.useRef(e);s.current=e,d.useEffect(()=>{const c=e.joint_position.filter(l=>l!==void 0);return f.current=new L.ValueInterpolator(c,{tension:120,friction:20,threshold:.001}),()=>{var l;(l=f.current)==null||l.destroy()}},[]),T.useFrame((c,l)=>{if(f.current){const h=f.current.update(l);a(),h||u()}});function y(c){c&&(i.current=z(c),a(),u())}function a(){var l;const c=((l=f.current)==null?void 0:l.getCurrentValues())||[];if(r)r(i.current,c);else for(const[h,p]of i.current.entries()){const x=n[h],b=x.theta||0,w=x.reverse_rotation_direction?-1:1;p.rotation.y=w*(c[h]||0)+b}}function m(c){var h;const l=c.joint_position.filter(p=>p!==void 0);(h=f.current)==null||h.setTarget(l),u()}return L.useAutorun(()=>{m(s.current)}),d.useEffect(()=>{m(e)},[e]),t.jsx("group",{ref:y,children:o})}const Te="line",Le="mesh";function ke({rapidlyChangingMotionState:e,dhParameters:n,...r}){const o=new g.Matrix4,i=d.useRef([]),f=d.useRef([]);d.useEffect(()=>{i.current=new Array(n.length).fill(null),f.current=new Array(n.length).fill(null)},[n.length]);function u(a,m){const c=new g.Vector3,l=new g.Quaternion,h=new g.Vector3;o.decompose(c,l,h);const p=c.clone(),x=new g.Matrix4().makeRotationY(a.theta+m*(a.reverse_rotation_direction?-1:1)).multiply(new g.Matrix4().makeTranslation(0,a.d/1e3,0)).multiply(new g.Matrix4().makeTranslation(a.a/1e3,0,0)).multiply(new g.Matrix4().makeRotationX(a.alpha));return o.multiply(x),o.decompose(c,l,h),{a:p,b:c}}function s(a,m,c,l){if(!n)return;const h=n[a];if(!h)return;const{a:p,b:x}=u(h,l);m.geometry.setPositions([p.toArray(),x.toArray()].flat()),c.position.set(x.x,x.y,x.z)}function y(a,m){o.identity();for(let c=0;c<Math.min(a.length,m.length);c++){const l=i.current[c],h=f.current[c];l&&h&&s(c,l,h,m[c])}}return t.jsx(re,{rapidlyChangingMotionState:e,dhParameters:n,onRotationChanged:y,children:t.jsxs("group",{...r,name:"Scene",children:[t.jsxs("mesh",{children:[t.jsx("sphereGeometry",{args:[.01,32,32]}),t.jsx("meshStandardMaterial",{color:"black",depthTest:!0})]}),n==null?void 0:n.map((a,m)=>{const{a:c,b:l}=u(a,e.joint_position[m]??0),h=`dhrobot_J0${m}`;return t.jsxs("group",{name:h,children:[t.jsx(M.Line,{ref:p=>{i.current[m]=p},name:Te,points:[c,l],color:"white",lineWidth:5}),t.jsxs("mesh",{ref:p=>{f.current[m]=p},name:Le,position:l,children:[t.jsx("sphereGeometry",{args:[.01,32,32]}),t.jsx("meshStandardMaterial",{color:"black",depthTest:!0})]},`mesh_${m}`)]},h)})]})})}const Ee=console.warn;function ne(){return d.useEffect(()=>{console.warn=e=>{e!=="Cannot call the manual advancement of rafz whilst frameLoop is not set as demand"&&Ee(e)}},[]),null}function Ge(e){return e.type==="Mesh"}function Ce({url:e,flangeRef:n,postModelRender:r,...o}){const i=M.useGLTF(e),u=Se(i,"robot.glb").gltf,s=d.useCallback(a=>{a&&r&&r()},[r]);function y(a){try{return Ge(a)?a.geometry?t.jsx("mesh",{name:a.name,geometry:a.geometry,material:a.material,position:a.position,rotation:a.rotation},a.uuid):t.jsx("group",{name:a.name,position:a.position,rotation:a.rotation},a.uuid):t.jsx("group",{name:a.name,position:a.position,rotation:a.rotation,ref:ee(a)?n:void 0,children:a.children.map(y)},a.uuid)}catch(m){return console.warn("Error rendering node",a.name,m),null}}return t.jsx("group",{...o,dispose:null,ref:s,children:y(u.scene)})}function se({modelURL:e,flangeRef:n,postModelRender:r,...o}){const[i,f]=d.useState(null);return d.useEffect(()=>{let u=!1;return(async()=>{try{const y=typeof e=="string"?e:await e;u||f(a=>a===y?a:y)}catch(y){console.error("Failed to resolve model URL:",y)}})(),()=>{u=!0}},[e]),i?t.jsx(Ce,{url:i,flangeRef:n,postModelRender:r,...o}):null}const oe=(e,n)=>{e.userData.isGhost||(e.traverse(r=>{if(r instanceof j.Mesh){r.material instanceof j.Material&&(r.material.colorWrite=!1);const o=r.clone(),i=r.clone();o.material=new j.MeshStandardMaterial({depthTest:!0,depthWrite:!0,colorWrite:!1,polygonOffset:!0,polygonOffsetFactor:-1,side:j.DoubleSide}),o.userData.isGhost=!0,i.material=new j.MeshStandardMaterial({color:n,opacity:.3,depthTest:!0,depthWrite:!1,transparent:!0,polygonOffset:!0,polygonOffsetFactor:-2,side:j.DoubleSide}),i.userData.isGhost=!0,r.parent&&(r.parent.add(o),r.parent.add(i))}}),e.userData.isGhost=!0)},ie=e=>{if(!e.userData.isGhost)return;const n=[];e.traverse(r=>{var o;r instanceof j.Mesh&&((o=r.userData)!=null&&o.isGhost?n.push(r):r.material instanceof j.Material&&(r.material.colorWrite=!0))}),n.forEach(r=>{r.parent&&r.parent.remove(r)}),e.userData.isGhost=!1},q=S.externalizeComponent(({rapidlyChangingMotionState:e,modelFromController:n,dhParameters:r,getModel:o=E,flangeRef:i,postModelRender:f,transparentColor:u,instanceUrl:s,...y})=>{const[a,m]=d.useState(null),c=d.useCallback(p=>{m(p)},[]);d.useEffect(()=>{a&&(u?oe(a,u):ie(a))},[a,u]);const l=d.useMemo(()=>{const p=o(n,s);if(!p)throw new Error(`No model found for robot "${n}". Ensure the model is available or provide a custom getModel function.`);return p},[n,s,o]),h=t.jsx(ke,{rapidlyChangingMotionState:e,dhParameters:r,...y});return t.jsxs(K.ErrorBoundary,{fallback:h,onError:p=>{console.warn(p)},children:[t.jsx(d.Suspense,{fallback:h,children:t.jsx("group",{ref:c,children:t.jsx(re,{rapidlyChangingMotionState:e,dhParameters:r,children:t.jsx(se,{modelURL:l,postModelRender:f,flangeRef:i,...y})})})}),t.jsx(ne,{})]})});function ae({connectedMotionGroup:e,getModel:n=E,flangeRef:r,transparentColor:o,postModelRender:i,...f}){return e.dhParameters?t.jsx(q,{rapidlyChangingMotionState:e.rapidlyChangingMotionState,modelFromController:e.modelFromController||"",dhParameters:e.dhParameters,getModel:n,flangeRef:r,transparentColor:o,postModelRender:i,...f}):null}const Ae=S.externalizeComponent(me.observer(({robotName:e,programState:n,safetyState:r,operationMode:o,driveToHomeEnabled:i=!1,onDriveToHomePress:f,onDriveToHomeRelease:u,connectedMotionGroup:s,robotComponent:y=ae,customContentComponent:a,className:m})=>{var N;const c=pe.useTheme(),{t:l}=xe.useTranslation(),[h,p]=d.useState(!1),x=d.useRef(null),b=d.useRef(null),[w,k]=d.useState(!1),[G,fe]=d.useState({width:400,height:600}),[Oe,de]=d.useState(0);d.useEffect(()=>{const F=()=>{if(b.current){const{offsetWidth:$,offsetHeight:H}=b.current;k($>H),fe({width:$,height:H})}};F();const W=new ResizeObserver(F);return b.current&&W.observe(b.current),()=>{W.disconnect()}},[]);const J=d.useCallback(()=>{de(F=>F+1)},[]),C=d.useCallback(()=>{!i||!f||(p(!0),f())},[i,f]),A=d.useCallback(()=>{!i||!u||(p(!1),u())},[i,u]),B=d.useCallback(()=>{h&&u&&(p(!1),u())},[h,u]),_=w?G.width<350:G.height<200,I=w?G.height<310:G.height<450;return t.jsx(he,{ref:b,className:m,sx:{width:"100%",height:"100%",display:"flex",flexDirection:w?"row":"column",position:"relative",overflow:"hidden",minWidth:{xs:180,sm:220,md:250},minHeight:w?{xs:200,sm:240,md:260}:{xs:150,sm:180,md:220},border:`1px solid ${c.palette.divider}`,borderRadius:"18px",boxShadow:"none",backgroundColor:((N=c.palette.backgroundPaperElevation)==null?void 0:N[8])||"#2A2A3F",backgroundImage:"none"},children:w?t.jsxs(t.Fragment,{children:[t.jsx(v,{sx:{flex:"0 0 50%",position:"relative",height:"100%",minHeight:"100%",maxHeight:"100%",borderRadius:1,m:{xs:1.5,sm:2,md:3},mr:{xs:.75,sm:1,md:1.5},overflow:"hidden",display:_?"none":"block"},children:!_&&t.jsxs(T.Canvas,{orthographic:!0,camera:{position:[3,2,3],zoom:1},shadows:!0,frameloop:"demand",style:{borderRadius:c.shape.borderRadius,width:"100%",height:"100%",background:"transparent",position:"absolute",top:0,left:0},dpr:[1,2],gl:{alpha:!0,antialias:!0},children:[t.jsx(O,{}),t.jsx(M.Bounds,{fit:!0,observe:!0,margin:1,maxDuration:1,children:t.jsx(y,{connectedMotionGroup:s,postModelRender:J})})]})}),t.jsxs(v,{sx:{flex:"1",display:"flex",flexDirection:"column",justifyContent:"flex-start",width:_?"100%":"50%"},children:[t.jsxs(v,{sx:{p:{xs:1.5,sm:2,md:3},pb:{xs:1,sm:1.5,md:2},textAlign:"left"},children:[t.jsx(X,{variant:"h6",component:"h2",sx:{mb:1},children:e}),t.jsx(L.ProgramStateIndicator,{programState:n,safetyState:r,operationMode:o})]}),t.jsxs(v,{sx:{p:{xs:1.5,sm:2,md:3},pt:0,flex:"1",display:"flex",flexDirection:"column",justifyContent:"space-between"},children:[!I&&a&&t.jsxs(v,{children:[t.jsx(a,{}),t.jsx(Q,{sx:{mt:1,mb:0,borderColor:c.palette.divider,opacity:.5}})]}),t.jsx(v,{sx:{mt:!I&&a?"auto":0},children:t.jsx(v,{sx:{display:"flex",justifyContent:"flex-start",mt:{xs:1,sm:1.5,md:2},mb:{xs:.5,sm:.75,md:1}},children:t.jsx(Y,{ref:x,variant:"contained",color:"secondary",size:"small",disabled:!i,onMouseDown:C,onMouseUp:A,onMouseLeave:B,onTouchStart:C,onTouchEnd:A,sx:{textTransform:"none",px:1.5,py:.5},children:l("RobotCard.DriveToHome.bt")})})})]})]})]}):t.jsx(t.Fragment,{children:t.jsxs(v,{sx:{p:3,height:"100%",display:"flex",flexDirection:"column"},children:[t.jsxs(v,{children:[t.jsx(X,{variant:"h6",component:"h2",sx:{mb:1},children:e}),t.jsx(L.ProgramStateIndicator,{programState:n,safetyState:r,operationMode:o})]}),t.jsx(v,{sx:{flex:_?0:1,position:"relative",minHeight:_?0:{xs:120,sm:150,md:200},height:_?0:"auto",borderRadius:1,overflow:"hidden",display:_?"none":"block"},children:!_&&t.jsxs(T.Canvas,{orthographic:!0,camera:{position:[3,2,3],zoom:1},shadows:!0,frameloop:"demand",style:{borderRadius:c.shape.borderRadius,width:"100%",height:"100%",background:"transparent",position:"absolute"},dpr:[1,2],gl:{alpha:!0,antialias:!0},children:[t.jsx(O,{}),t.jsx(M.Bounds,{fit:!0,clip:!0,observe:!0,margin:1,maxDuration:1,children:t.jsx(y,{connectedMotionGroup:s,postModelRender:J})})]})}),t.jsxs(v,{children:[!I&&a&&t.jsxs(t.Fragment,{children:[t.jsx(a,{}),t.jsx(Q,{sx:{mt:1,mb:0,borderColor:c.palette.divider,opacity:.5}})]}),t.jsx(v,{sx:{display:"flex",justifyContent:"flex-start",mt:!I&&a?{xs:1,sm:2,md:5}:{xs:.5,sm:1,md:2},mb:{xs:.5,sm:.75,md:1}},children:t.jsx(Y,{ref:x,variant:"contained",color:"secondary",size:"small",disabled:!i,onMouseDown:C,onMouseUp:A,onMouseLeave:B,onTouchStart:C,onTouchEnd:A,sx:{textTransform:"none",px:1.5,py:.5},children:l("RobotCard.DriveToHome.bt")})})]})]})})})})),Ie=Array(6).fill(2*Math.PI);function ce({rapidlyChangingMotionState:e,dhParameters:n,onTranslationChanged:r,children:o}){const i=d.useRef([]),f=d.useRef([]),u=d.useRef(null),{invalidate:s}=T.useThree();d.useEffect(()=>{const c=e.joint_position.filter(l=>l!==void 0);return u.current=new L.ValueInterpolator(c,{tension:120,friction:20,threshold:.001}),()=>{var l;(l=u.current)==null||l.destroy()}},[]),T.useFrame((c,l)=>{if(u.current){const h=u.current.update(l);a(),h||s()}});function y(c){c&&(f.current=z(c),a(),s())}function a(){var l;const c=((l=u.current)==null?void 0:l.getCurrentValues())||[];if(r)r(f.current,c);else for(const[h,p]of f.current.entries()){const b=n[h].reverse_rotation_direction?-1:1;p.position.y=b*(c[h]||0)/1e3}}const m=d.useCallback(()=>{const c=e.joint_position.filter(l=>l!==void 0);requestAnimationFrame(()=>{var l;i.current=c,(l=u.current)==null||l.setTarget(c)})},[e]);return d.useEffect(()=>{m()},[e,m]),L.useAutorun(()=>{m()}),t.jsx("group",{ref:y,children:o})}function ue({rapidlyChangingMotionState:e,dhParameters:n,...r}){const o=new g.Matrix4,i=d.useRef(null),f=d.useRef(null);function u(a){const m=new g.Matrix4;for(let p=0;p<n.length;p++){const x=n[p],b=a[p]??0,w=new g.Matrix4().makeRotationY(x.theta).multiply(new g.Matrix4().makeTranslation(x.a/1e3,(x.d+b*(x.reverse_rotation_direction?-1:1))/1e3,0)).multiply(new g.Matrix4().makeRotationX(x.alpha));m.multiply(w)}const c=new g.Vector3,l=new g.Quaternion,h=new g.Vector3;return m.decompose(c,l,h),c}const s=u(e.joint_position);function y(a,m){o.identity();let c=new g.Vector3;for(let x=0;x<n.length;x++){const b=m[x]??0,w=n[x],k=new g.Matrix4().makeRotationY(w.theta).multiply(new g.Matrix4().makeTranslation(w.a/1e3,(w.d+b*(w.reverse_rotation_direction?-1:1))/1e3,0)).multiply(new g.Matrix4().makeRotationX(w.alpha));o.multiply(k)}const l=new g.Vector3,h=new g.Quaternion,p=new g.Vector3;if(o.decompose(l,h,p),c=l,i.current&&i.current.position.set(c.x,c.y,c.z),f.current){const x=f.current.geometry;x!=null&&x.setPositions&&x.setPositions([0,0,0,c.x,c.y,c.z])}}return t.jsx(ce,{rapidlyChangingMotionState:e,dhParameters:n,onTranslationChanged:y,children:t.jsxs("group",{...r,name:"Scene",children:[t.jsxs("mesh",{name:"Base",position:[0,0,0],children:[t.jsx("sphereGeometry",{args:[.02,32,32]}),t.jsx("meshStandardMaterial",{color:"green",depthTest:!0})]}),t.jsx(M.Line,{ref:f,points:[new g.Vector3(0,0,0),s],color:"White",lineWidth:5}),t.jsxs("mesh",{ref:i,name:"TCP",position:s,children:[t.jsx("sphereGeometry",{args:[.025,32,32]}),t.jsx("meshStandardMaterial",{color:"red",depthTest:!0})]})]})})}const U=S.externalizeComponent(({rapidlyChangingMotionState:e,modelFromController:n,dhParameters:r,getModel:o=E,flangeRef:i,postModelRender:f,transparentColor:u,instanceUrl:s,...y})=>{const[a,m]=d.useState(null),c=d.useCallback(h=>{m(h)},[]);d.useEffect(()=>{a&&(u?oe(a,u):ie(a))},[a,u]);const l=t.jsx(ue,{rapidlyChangingMotionState:e,dhParameters:r,...y});return t.jsxs(K.ErrorBoundary,{fallback:l,onError:h=>{console.warn(h)},children:[t.jsx(d.Suspense,{fallback:l,children:t.jsx("group",{ref:c,children:t.jsx(ce,{rapidlyChangingMotionState:e,dhParameters:r,children:t.jsx(se,{modelURL:(()=>{const h=o(n,s);if(!h){const p=new Blob([],{type:"model/gltf-binary"}),x=new File([p],`${n}.glb`,{type:"model/gltf-binary"});return Promise.resolve(URL.createObjectURL(x))}return h})(),postModelRender:f,flangeRef:i,...y})})})}),t.jsx(ne,{})]})});function Fe({connectedMotionGroup:e,getModel:n=E,flangeRef:r,transparentColor:o,postModelRender:i,...f}){if(!e.dhParameters)return null;const u=e.modelFromController||"";return u&&n(u)?t.jsx(U,{rapidlyChangingMotionState:e.rapidlyChangingMotionState,modelFromController:u,dhParameters:e.dhParameters,getModel:n,flangeRef:r,transparentColor:o,postModelRender:i,...f}):t.jsx(ue,{rapidlyChangingMotionState:e.rapidlyChangingMotionState,dhParameters:e.dhParameters,...f})}const D={[R.Manufacturer.Abb]:[0,0,0,0,Math.PI/2,0,0],[R.Manufacturer.Fanuc]:[0,0,0,0,-Math.PI/2,0,0],[R.Manufacturer.Yaskawa]:[0,0,0,0,-Math.PI/2,0,0],[R.Manufacturer.Kuka]:[0,-Math.PI/2,Math.PI/2,0,Math.PI/2,0,0],[R.Manufacturer.Universalrobots]:[0,-Math.PI/2,-Math.PI/2,-Math.PI/2,Math.PI/2,-Math.PI/2,0]};function le(e){const[n]=e.split("_");switch(n){case"ABB":return R.Manufacturer.Abb;case"FANUC":return R.Manufacturer.Fanuc;case"YASKAWA":return R.Manufacturer.Yaskawa;case"KUKA":return R.Manufacturer.Kuka;case"UniversalRobots":return R.Manufacturer.Universalrobots;default:return null}}function Pe(e,n){const r=le(e);return r&&r in D?D[r]:n||null}const Ve=S.externalizeComponent(e=>{const{inverseSolver:n,dhParameters:r,...o}=e,[i,f]=d.useState(R.JointTypeEnum.RevoluteJoint);d.useEffect(()=>{r.length&&f(r[0].type??R.JointTypeEnum.RevoluteJoint)},[r]);const u=d.useMemo(()=>n===null&&i===R.JointTypeEnum.RevoluteJoint,[n,i]),s=d.useMemo(()=>n===null&&i===R.JointTypeEnum.PrismaticJoint,[n,i]);return d.useMemo(()=>!!n,[n])||u?t.jsx(q,{dhParameters:r,...o}):s?t.jsx(U,{dhParameters:r,...o}):null});exports.CollisionSceneRenderer=we;exports.LinearAxis=Fe;exports.MANUFACTURER_HOME_CONFIGS=D;exports.MotionGroupVisualizer=Ve;exports.PresetEnvironment=O;exports.Robot=ae;exports.RobotCard=Ae;exports.SafetyZonesRenderer=ve;exports.SupportedLinearAxis=U;exports.SupportedRobot=q;exports.TrajectoryRenderer=_e;exports.defaultAxisConfig=Ie;exports.defaultGetModel=E;exports.extractManufacturer=le;exports.getDefaultHomeConfig=Pe;
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
"use strict";const o=require("react/jsx-runtime"),A=require("@mui/material/styles"),Ze=require("@mui/material/AppBar"),Ee=require("@mui/material/Backdrop"),v=require("@mui/material/Box"),G=require("@mui/material/IconButton"),Xe=require("@mui/material/Menu"),U=require("@mui/material/MenuItem"),Qe=require("@mui/material/Toolbar"),R=require("@mui/material/Typography"),D=require("mobx-react-lite"),h=require("react"),F=require("./externalizeComponent-OO4jcrz5.cjs"),Ke=require("@mui/material/SvgIcon"),N=require("@mui/material/Fade"),et=require("@mui/x-charts/Gauge"),B=require("react-i18next"),Q=require("./interpolation-C9sLsved.cjs"),tt=require("@mui/icons-material/Clear"),nt=require("@mui/icons-material/FilterList"),ve=require("@mui/icons-material/Search"),q=require("@mui/material/Divider"),z=require("@mui/x-data-grid"),ot=require("@mui/icons-material/OpenWith"),it=require("@mui/icons-material/Share"),_=require("@mui/material/Stack"),Pe=require("@mui/material/Tab"),_e=require("@mui/material/Tabs"),V=require("@wandelbots/nova-js/v2"),ue=require("lodash-es"),I=require("mobx"),J=require("@wandelbots/nova-js"),se=require("three/src/math/Vector3.js"),Oe=require("@mui/material/CircularProgress"),rt=require("@mui/material/utils"),at=require("./SafetyBar-VvOZ9aRM.cjs"),st=require("@mui/material/Alert"),lt=require("@mui/material/AlertTitle"),H=require("@mui/material/Button"),Te=require("@mui/material/ToggleButton"),W=require("./robot-SEtfVAmf.cjs"),ct=require("lodash-es/isEqual.js"),dt=require("@mui/material/InputAdornment"),ut=require("@mui/material/FormControl"),gt=require("@mui/material/InputLabel"),pt=require("@mui/material/Select"),te=require("lodash-es/keyBy.js"),ht=require("lodash-es/uniqueId.js"),mt=require("@mui/material/ToggleButtonGroup"),Ae=require("@mui/material/Slider"),ft=require("lodash-es/isNumber.js"),xt=require("@mui/icons-material/ChevronLeft"),bt=require("@mui/icons-material/ChevronRight"),yt=require("lodash-es/throttle.js"),St=require("@mui/material/Tooltip"),jt=require("@mui/icons-material/ContentCopy"),Ct=require("@mui/icons-material/DescriptionOutlined"),vt=require("@mui/icons-material/ExpandLess"),Tt=require("@mui/icons-material/ExpandMore"),wt=require("@mui/material/Paper"),Mt=require("@mui/material/Dialog"),It=require("@mui/material/DialogActions"),kt=require("@mui/material/DialogContent"),Rt=require("@mui/material/DialogTitle"),Et=require("@mui/icons-material/Error"),Pt=require("@mui/material/Chip"),_t=require("@mui/material/Fab"),Ot=require("@mui/material/Badge"),At=require("@mui/x-charts"),le=require("three");function Dt(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const n in t)if(n!=="default"){const a=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,a.get?a:{enumerable:!0,get:()=>t[n]})}}return e.default=t,Object.freeze(e)}const we=Dt(le),Jt=t=>o.jsx(Ke,{...t,viewBox:"0 0 10 8",children:o.jsx("path",{d:"M8.825 0.9125L5 4.72917L1.175 0.9125L0 2.0875L5 7.0875L10 2.0875L8.825 0.9125Z",fill:"currentColor",fillOpacity:"0.56"})}),Ft=F.externalizeComponent(D.observer(t=>{const{appIcon:e,appName:n,apps:a=[],onAppSelect:r,disabled:i=!1,sx:c}=t,[s,l]=h.useState(null),g=!!s,x=p=>{l(p.currentTarget)},u=()=>{l(null)},d=p=>{u(),p.onClick?p.onClick():p.href&&(window.location.href=p.href),r==null||r(p)};return o.jsxs(o.Fragment,{children:[o.jsx(Ze,{position:"static",sx:{boxShadow:"none",backgroundImage:"none","& .MuiAppBar-root":{backgroundImage:"none",backgroundColor:"transparent"},...c},children:o.jsxs(Qe,{sx:{minHeight:"62px !important"},children:[o.jsx(v,{sx:{mr:1,display:"flex",alignItems:"center"},children:e}),o.jsxs(v,{sx:{display:"flex",alignItems:"center",flexGrow:1},children:[o.jsx(R,{component:"h1",sx:{fontWeight:"bold",fontSize:"1rem"},children:n}),a.length>0&&o.jsx(G,{color:"inherit","aria-label":"switch app","aria-controls":"app-menu","aria-haspopup":"true",onClick:x,disabled:i,sx:{ml:1,width:28,height:28,borderRadius:"6px",padding:0,backgroundColor:p=>A.alpha(p.palette.common.white,.1),opacity:1,"&:hover":{backgroundColor:p=>A.alpha(p.palette.common.white,.16)},"& .MuiSvgIcon-root":{fontSize:"8px",width:"8px",height:"6px"}},children:o.jsx(Jt,{})})]})]})}),o.jsx(Ee,{open:g,onClick:u,sx:{backdropFilter:"blur(4px)",backgroundColor:"rgba(0, 0, 0, 0.3)",zIndex:p=>p.zIndex.modal-1}}),o.jsx(Xe,{id:"app-menu",anchorEl:s,open:g,onClose:u,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},sx:{zIndex:p=>p.zIndex.modal,"& .MuiPaper-root":{minWidth:200,mt:1}},children:a.map(p=>o.jsxs(U,{onClick:()=>d(p),children:[o.jsx(v,{sx:{display:"flex",alignItems:"center"},children:p.icon}),o.jsx(R,{variant:"body1",sx:{ml:2},children:p.name})]},p.id))})]})})),Bt=t=>{const e=Math.floor(t/86400),n=Math.floor(t%86400/3600),a=Math.floor(t%3600/60),r=t%60,i=[];return e>0?(i.push(e.toString()),i.push(n.toString().padStart(2,"0")),i.push(a.toString().padStart(2,"0")),i.push(r.toString().padStart(2,"0"))):n>0?(i.push(n.toString()),i.push(a.toString().padStart(2,"0")),i.push(r.toString().padStart(2,"0"))):(i.push(a.toString()),i.push(r.toString().padStart(2,"0"))),i.join(":")},$=(t,e)=>{const n=Math.floor(t/86400),a=Math.floor(t%86400/3600),r=Math.floor(t%3600/60),i=t%60;if(typeof Intl<"u"&&"DurationFormat"in Intl)try{const s={};return n>0&&(s.days=n),a>0&&(s.hours=a),r>0&&(s.minutes=r),(i>0||Object.keys(s).length===0)&&(s.seconds=i),new Intl.DurationFormat(e,{style:"narrow"}).format(s)}catch{}const c=[];return n>0&&c.push(`${n}d`),a>0&&c.push(`${a}h`),r>0&&c.push(`${r}m`),(i>0||c.length===0)&&c.push(`${i}s`),c.join(" ")},Lt=(t,e,n)=>t==="countdown"&&n!==null?Math.min(100,e/n*100):t==="measuring"?e/60%1*100:0,zt=({timerState:t,animationState:e,hasError:n,className:a})=>{const{t:r,i18n:i}=B.useTranslation(),c=A.useTheme(),{currentState:s,remainingTime:l,maxTime:g,currentProgress:x}=t,{showErrorAnimation:u,showPauseAnimation:d,showPulsatingText:p,pulsatingFinished:y,showLabels:S,showMainText:f,showIdlePulsating:m,idleDotsCount:j}=e;return o.jsxs(v,{className:a,sx:{position:"relative",width:264,height:264,display:"flex",alignItems:"center",justifyContent:"center"},children:[o.jsx(et.Gauge,{width:264,height:264,value:s==="idle"?0:x,valueMin:0,valueMax:100,innerRadius:"85%",outerRadius:"100%",margin:0,skipAnimation:!0,text:()=>"",sx:{opacity:d||u?.6:1,transition:"opacity 0.5s ease-out","& .MuiGauge-valueArc":{fill:n?c.palette.error.light:c.palette.success.main,transition:"fill 0.5s ease-out"},"& .MuiGauge-referenceArc":{fill:"#171927",stroke:"transparent",strokeWidth:0,transition:"fill 0.5s ease-out, stroke 0.5s ease-out, stroke-width 0.5s ease-out"},"& .MuiGauge-valueText":{display:"none"},"& .MuiGauge-text":{display:"none"}}}),o.jsxs(v,{sx:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:225,height:225,borderRadius:"50%",backgroundColor:"#292B3F",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",textAlign:"center",gap:1,transition:"background-color 0.5s ease-out"},children:[o.jsx(v,{sx:{height:"16px",display:"flex",alignItems:"center",justifyContent:"center",marginBottom:1},children:o.jsx(N,{in:S&&!n&&s!=="idle"&&s!=="success",timeout:300,children:o.jsx(R,{variant:"body2",sx:{fontSize:"12px",color:s==="measured"&&(p||y)?c.palette.success.main:c.palette.text.secondary,transition:"color 0.8s ease-in-out"},children:o.jsx("span",{style:{opacity:s==="measured"&&y?p?1:.6:1,transition:"opacity 2s ease-in-out"},children:s==="measuring"||s==="measured"?r("CycleTimer.CycleTime.lb","Cycle Time"):s==="countdown"?r("CycleTimer.RemainingTime.lb","Remaining Time"):""})})})}),o.jsxs(v,{sx:{position:"relative",height:"48px",display:"flex",alignItems:"center",justifyContent:"center",marginBottom:.5},children:[o.jsx(N,{in:f&&s==="idle"&&!n,timeout:200,children:o.jsxs(R,{variant:"body2",sx:{position:"absolute",fontSize:"12px",fontWeight:400,color:"rgba(255, 255, 255, 0.7)",lineHeight:"166%",letterSpacing:"0.17px",textAlign:"center",width:"200px",height:"20px",display:"flex",alignItems:"center",justifyContent:"center"},children:[o.jsx("span",{style:{opacity:m?1:.6,transition:"opacity 2s ease-in-out"},children:r("CycleTimer.WaitingForCycle.lb","Waiting for program cycle")}),o.jsx("span",{style:{display:"inline-block",width:"18px",textAlign:"left",opacity:m?1:.6,transition:"opacity 2s ease-in-out"},children:".".repeat(j)})]})}),o.jsx(N,{in:f&&n,timeout:200,children:o.jsx(R,{variant:"h3",sx:{position:"absolute",fontSize:"40px",fontWeight:400,color:"#FFFFFF",lineHeight:"116.7%"},children:r("CycleTimer.Error.lb","Error")})}),o.jsx(N,{in:f&&!n&&s!=="idle"&&s!=="success",timeout:300,children:o.jsx(R,{variant:"h1",sx:{position:"absolute",fontSize:"48px",fontWeight:500,color:c.palette.text.primary,lineHeight:1,transition:"color 0.8s ease-in-out"},children:o.jsx("span",{style:{opacity:1,transition:"opacity 2s ease-in-out"},children:Bt(l)})})})]}),o.jsx(v,{sx:{height:"16px",display:"flex",marginTop:.5,alignItems:"center",justifyContent:"center"},children:o.jsx(N,{in:S&&!n&&s!=="idle"&&s!=="success",timeout:300,children:o.jsx(R,{variant:"body2",sx:{fontSize:"12px",color:s==="measured"&&(p||y)?c.palette.success.main:c.palette.text.secondary,transition:"color 0.8s ease-in-out"},children:o.jsx("span",{style:{opacity:s==="measured"&&y?p?1:.6:1,transition:"opacity 2s ease-in-out"},children:s==="measuring"?r("CycleTimer.Measuring.lb","measuring..."):s==="measured"?r("CycleTimer.Determined.lb","determined"):s==="countdown"&&g!==null?r("CycleTimer.OfTime.lb",{time:$(g,i.language)}):""})})})})]})]})},$t=({timerState:t,animationState:e,hasError:n,compact:a,className:r})=>{const{t:i,i18n:c}=B.useTranslation(),s=A.useTheme(),{currentState:l,remainingTime:g,maxTime:x}=t,{showErrorAnimation:u,showPauseAnimation:d,showPulsatingText:p,pulsatingFinished:y,showIdlePulsating:S,idleDotsCount:f}=e;return a&&l==="idle"?o.jsx(v,{className:r,sx:{display:"flex",alignItems:"center",m:0},children:o.jsx(R,{variant:"body2",sx:{color:n?s.palette.error.light:s.palette.text.primary,fontSize:"14px",transition:"color 0.5s ease-out"},children:n?i("CycleTimer.Error.lb","Error"):l==="idle"?"0s":$(g,c.language)})}):o.jsxs(v,{className:r,sx:{display:"flex",alignItems:"center",m:0,gap:1},children:[!(l==="idle"&&a)&&o.jsx(v,{sx:{width:20,height:20,display:"flex",alignItems:"center",justifyContent:"center",opacity:d||u?.6:1,transition:"opacity 0.5s ease-out"},children:o.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 20 20",style:{transform:"rotate(-90deg)"},role:"img","aria-label":"Timer progress",children:[o.jsx("circle",{cx:"10",cy:"10",r:"8",fill:"none",stroke:n?s.palette.error.light:l==="measured"?p||y?s.palette.success.main:s.palette.text.secondary:s.palette.success.main,strokeWidth:"2",opacity:l==="measured"&&y?p?1:.6:.3,style:{transition:"stroke 0.8s ease-in-out, opacity 2s ease-in-out"}}),o.jsx("circle",{cx:"10",cy:"10",r:"8",fill:"none",stroke:n?s.palette.error.light:l==="measured"?p||y?s.palette.success.main:s.palette.text.secondary:s.palette.success.main,strokeWidth:"2",strokeLinecap:"round",strokeDasharray:`${2*Math.PI*8}`,strokeDashoffset:`${2*Math.PI*8*(1-(l==="idle"?0:t.currentProgress)/100)}`,style:{opacity:l==="measured"&&y?p?1:.6:1,transition:"stroke-dashoffset 0.1s ease-out, stroke 0.8s ease-in-out, opacity 2s ease-in-out"}})]})}),o.jsx(R,{variant:"body2",sx:{color:n?s.palette.error.light:l==="idle"?"rgba(255, 255, 255, 0.7)":l==="measured"?p||y?s.palette.success.main:s.palette.text.secondary:s.palette.text.primary,fontSize:"14px",lineHeight:"normal",letterSpacing:"normal",opacity:l==="idle"?S?1:.6:l==="measured"&&y?p?1:.6:1,transition:"color 0.8s ease-in-out, font-size 0.3s ease-out, opacity 2s ease-in-out"},children:n?i("CycleTimer.Error.lb","Error"):l==="idle"?o.jsxs(o.Fragment,{children:[o.jsx("span",{children:i("CycleTimer.WaitingForCycle.lb","Waiting for program cycle")}),o.jsx("span",{style:{display:"inline-block",width:"18px",textAlign:"left"},children:".".repeat(f)})]}):l==="measuring"?a?$(g,c.language):`${$(g,c.language)} / ${i("CycleTimer.Measuring.lb","measuring...")}`:l==="measured"?a?$(g,c.language):`${$(g,c.language)} / ${i("CycleTimer.Determined.lb","determined")}`:l==="countdown"&&x!==null?a?$(g,c.language):`${$(g,c.language)} / ${i("CycleTimer.Time.lb",{time:$(x,c.language)})}`:$(g,c.language)})]})},Vt=()=>{const[t,e]=h.useState({showPauseAnimation:!1,showErrorAnimation:!1,showPulsatingText:!1,pulsatingFinished:!1,showLabels:!0,showMainText:!0,showIdlePulsating:!1,idleDotsCount:0}),n=h.useRef(null),a=h.useRef(null),r=h.useRef(null),i=h.useRef(null),c=h.useRef(0),s=h.useRef(null),l=h.useRef(null),g=h.useCallback(()=>{e(b=>({...b,showPauseAnimation:!0})),n.current&&clearTimeout(n.current),n.current=setTimeout(()=>{e(b=>({...b,showPauseAnimation:!1}))},800)},[]),x=h.useCallback(()=>{e(b=>({...b,showErrorAnimation:!0})),a.current&&clearTimeout(a.current),a.current=setTimeout(()=>{e(b=>({...b,showErrorAnimation:!1}))},600)},[]),u=h.useCallback(()=>{e(b=>({...b,showErrorAnimation:!1})),a.current&&clearTimeout(a.current)},[]),d=h.useCallback(b=>{c.current=0,e(T=>({...T,showPulsatingText:!0,pulsatingFinished:!1})),setTimeout(()=>{e(T=>({...T,pulsatingFinished:!0})),r.current=setInterval(()=>{e(T=>({...T,showPulsatingText:!T.showPulsatingText}))},2e3),b&&b()},800)},[]),p=h.useCallback(()=>{r.current&&(clearInterval(r.current),r.current=null),e(b=>({...b,showPulsatingText:!1,pulsatingFinished:!1})),c.current=0},[]),y=h.useCallback(()=>{e(b=>({...b,showIdlePulsating:!0})),s.current=setInterval(()=>{e(b=>({...b,showIdlePulsating:!b.showIdlePulsating}))},2e3),l.current=setInterval(()=>{e(b=>({...b,idleDotsCount:(b.idleDotsCount+1)%4}))},800)},[]),S=h.useCallback(()=>{s.current&&(clearInterval(s.current),s.current=null),l.current&&(clearInterval(l.current),l.current=null),e(b=>({...b,showIdlePulsating:!1,idleDotsCount:0}))},[]),f=h.useCallback(()=>{e(b=>({...b,showLabels:!1,showMainText:!1})),i.current&&clearTimeout(i.current),i.current=setTimeout(()=>{e(b=>({...b,showLabels:!0,showMainText:!0}))},200)},[]),m=h.useCallback(()=>{e(b=>({...b,showLabels:!0,showMainText:!0}))},[]),j=h.useCallback(()=>{n.current&&clearTimeout(n.current),a.current&&clearTimeout(a.current),i.current&&clearTimeout(i.current),r.current&&clearInterval(r.current),s.current&&clearInterval(s.current),l.current&&clearInterval(l.current)},[]);return{animationState:t,triggerPauseAnimation:g,triggerErrorAnimation:x,clearErrorAnimation:u,startPulsatingAnimation:d,stopPulsatingAnimation:p,startIdleAnimations:y,stopIdleAnimations:S,triggerFadeTransition:f,setInitialAnimationState:m,cleanup:j}},qt=({autoStart:t,onCycleEnd:e,onMeasuringComplete:n,hasError:a,onPauseAnimation:r,onErrorAnimation:i,onClearErrorAnimation:c,onStartPulsating:s})=>{const[l,g]=h.useState({currentState:"idle",remainingTime:0,maxTime:null,isRunning:!1,isPausedState:!1,currentProgress:0,wasRunningBeforeError:!1}),x=h.useRef(null),u=h.useRef(null),d=h.useRef(0),[p]=Q.useInterpolation([0],{tension:80,friction:18,onChange:([C])=>{g(w=>({...w,currentProgress:C}))}}),y=h.useCallback(()=>{g(C=>({...C,currentState:"idle",maxTime:null,isRunning:!1,isPausedState:!1,currentProgress:0})),d.current=0,u.current=null,p.setImmediate([0])},[p]),S=h.useCallback((C=0)=>{const w=C/60%1*100;g(k=>({...k,currentState:"measuring",maxTime:null,remainingTime:C,isPausedState:!1,currentProgress:w})),d.current=0,p.setImmediate([w]),t?(u.current=Date.now()-C*1e3,g(k=>({...k,isRunning:!0}))):u.current=null},[t,p]),f=h.useCallback((C,w=0)=>{g(M=>({...M,isRunning:!1})),u.current=null,g(M=>({...M,currentState:"countdown",maxTime:C,isPausedState:!1})),d.current=0;const k=Math.max(0,C-w),E=w>0?w/C*100:0;g(M=>({...M,remainingTime:k,currentProgress:E})),p.setImmediate([E]),k===0?(g(M=>({...M,isRunning:!1})),u.current=null,e&&queueMicrotask(()=>e())):t?setTimeout(()=>{u.current=Date.now()-w*1e3,g(M=>({...M,isRunning:!0}))},0):u.current=null},[t,e,p]),m=h.useCallback(()=>{g(C=>({...C,isRunning:!1,currentState:"measured"})),u.current=null,s(()=>{n&&n()})},[s,n]),j=h.useCallback(()=>{if(u.current&&l.isRunning){const w=Date.now()-u.current;d.current+=w;const k=d.current/1e3,E=Lt(l.currentState,k,l.maxTime);p.setTarget([E])}g(C=>({...C,isRunning:!1,isPausedState:!0})),r()},[l.isRunning,l.currentState,l.maxTime,p,r]),b=h.useCallback(()=>{l.isPausedState&&(l.remainingTime>0||l.currentState!=="countdown")&&(u.current=Date.now(),g(C=>({...C,isRunning:!0,isPausedState:!1})))},[l.isPausedState,l.remainingTime,l.currentState]),T=h.useCallback(()=>l.isPausedState,[l.isPausedState]);return h.useEffect(()=>{a?(l.isRunning&&!l.isPausedState&&(g(C=>({...C,wasRunningBeforeError:!0})),j()),i()):(l.wasRunningBeforeError&&l.isPausedState&&(g(C=>({...C,wasRunningBeforeError:!1})),b()),c())},[a,l.isRunning,l.isPausedState,l.wasRunningBeforeError,j,b,i,c]),h.useEffect(()=>{if(l.isRunning){const C=()=>{if(u.current){const k=(Date.now()-u.current+d.current)/1e3;if(l.currentState==="countdown"&&l.maxTime!==null){const E=Math.max(0,l.maxTime-k);g(P=>({...P,remainingTime:Math.ceil(E)}));const M=Math.min(100,k/l.maxTime*100);if(p.setTarget([M]),E<=0){g(P=>({...P,isRunning:!1,remainingTime:0})),u.current=null,p.setTarget([100]),e&&queueMicrotask(()=>e());return}}else if(l.currentState==="measuring"){g(M=>({...M,remainingTime:Math.floor(k)}));const E=k/60%1*100;p.setTarget([E])}l.isRunning&&(x.current=requestAnimationFrame(C))}};x.current=requestAnimationFrame(C)}else x.current&&(cancelAnimationFrame(x.current),x.current=null);return()=>{x.current&&cancelAnimationFrame(x.current)}},[l.isRunning,e,l.currentState,l.maxTime,p]),h.useEffect(()=>{let C=null;const w=()=>{p.update(1/60),C=requestAnimationFrame(w)};return C=requestAnimationFrame(w),()=>{C&&cancelAnimationFrame(C)}},[p]),{timerState:l,controls:{startNewCycle:f,startMeasuring:S,setIdle:y,completeMeasuring:m,pause:j,resume:b,isPaused:T}}},Nt=F.externalizeComponent(D.observer(({onCycleComplete:t,onCycleEnd:e,onMeasuringComplete:n,autoStart:a=!0,variant:r="default",compact:i=!1,className:c,hasError:s=!1})=>{const l=h.useRef(void 0),{animationState:g,triggerPauseAnimation:x,triggerErrorAnimation:u,clearErrorAnimation:d,startPulsatingAnimation:p,stopPulsatingAnimation:y,startIdleAnimations:S,stopIdleAnimations:f,triggerFadeTransition:m,setInitialAnimationState:j,cleanup:b}=Vt(),{timerState:T,controls:C}=qt({autoStart:a,onCycleEnd:e,onMeasuringComplete:n,hasError:s,onPauseAnimation:x,onErrorAnimation:u,onClearErrorAnimation:d,onStartPulsating:p});return h.useEffect(()=>{const w=l.current;l.current!==void 0&&w!==T.currentState?(w==="measured"&&y(),w==="idle"&&f(),m()):j(),T.currentState==="idle"&&S(),l.current=T.currentState},[T.currentState,y,f,S,m,j]),h.useEffect(()=>{let w=!0;const k=setTimeout(()=>{w&&t(C)},0);return()=>{w=!1,clearTimeout(k)}},[t,C]),h.useEffect(()=>b,[b]),r==="small"?o.jsx($t,{timerState:T,animationState:g,hasError:s,compact:i,className:c}):o.jsx(zt,{timerState:T,animationState:g,hasError:s,className:c})})),De=F.externalizeComponent(D.observer(({data:t,columns:e,getRowData:n,onRowClick:a,selectedItem:r,getItemId:i,title:c,showCount:s=!0,searchPlaceholder:l="Search programs",dataGridProps:g,CustomToolbar:x,selectFirstByDefault:u=!1,sx:d})=>{var E;const p=A.useTheme(),y=z.useGridApiRef(),S=h.useRef(null),[f,m]=h.useState(null),j=h.useMemo(()=>t.map(n),[t,n]);h.useEffect(()=>{y.current&&j.length>0&&y.current.autosizeColumns({includeOutliers:!0,includeHeaders:!0,expand:!0,columns:e.map(M=>M.field)})},[j,e,y]),h.useEffect(()=>{if(!S.current||!y.current)return;const M=new ResizeObserver(()=>{setTimeout(()=>{y.current&&j.length>0&&y.current.autosizeColumns({includeOutliers:!0,includeHeaders:!0,expand:!0,columns:e.map(P=>P.field)})},100)});return M.observe(S.current),()=>{M.disconnect()}},[y,j.length,e]);const b=h.useMemo(()=>{if(r!==void 0)return r;if(f!==null)return f;if(u&&t.length>0){const M=t[0];return m(M),M}return null},[u,t,r,f]),T=M=>{const P=t.find(L=>n(L).id===M.id);P&&(r===void 0&&m(P),a&&a(P,M))},C=h.useMemo(()=>!b||!i?null:i(b),[b,i]);function w(){return o.jsx(z.Toolbar,{children:o.jsxs(v,{sx:{display:"flex",width:"100%",gap:1,p:.5,alignItems:"center"},children:[c&&o.jsxs(R,{variant:"h6",sx:{fontWeight:500,color:"white"},children:[c,s&&` (${t.length})`]}),o.jsxs(v,{sx:{ml:"auto",display:"flex",gap:.5,alignItems:"center",pr:1},children:[o.jsx(z.FilterPanelTrigger,{render:o.jsx(z.ToolbarButton,{"aria-label":"Show filters",children:o.jsx(nt,{fontSize:"small"})})}),o.jsx(q,{orientation:"vertical",flexItem:!0,sx:{height:"24px",alignSelf:"center"}}),o.jsx(z.QuickFilter,{render:(M,P)=>o.jsxs(v,{...M,sx:{display:"flex",overflow:"hidden"},children:[!P.expanded&&o.jsx(z.QuickFilterTrigger,{render:o.jsx(z.ToolbarButton,{"aria-label":"Search",children:o.jsx(ve,{fontSize:"small"})})}),o.jsxs(v,{sx:{display:"flex",overflow:"hidden",transition:"all 0.3s ease-in-out",width:P.expanded?"200px":"0px",position:"relative"},children:[o.jsxs(v,{sx:{flex:1,position:"relative","& .MuiInputBase-root":{height:"32px",borderRadius:"16px",backgroundColor:"#171927",paddingLeft:"40px",paddingRight:P.expanded&&P.value!==""?"40px":"12px",color:"white",fontSize:"14px",border:"none !important",outline:"none !important",boxShadow:"none !important","&::before":{display:"none !important",border:"none !important"},"&::after":{display:"none !important",border:"none !important"},"&:hover":{"&::before":{display:"none !important",border:"none !important"},"&::after":{display:"none !important",border:"none !important"}},"&:focus-within":{outline:"none !important",boxShadow:"none !important","&::before":{display:"none !important",border:"none !important"},"&::after":{display:"none !important",border:"none !important"}},"&.Mui-focused":{outline:"none !important",boxShadow:"none !important","&::before":{display:"none !important",border:"none !important"},"&::after":{display:"none !important",border:"none !important"}},"& .MuiInputBase-input":{padding:"8px 0",border:"none !important",outline:"none !important",boxShadow:"none !important","&:focus":{outline:"none !important",boxShadow:"none !important",border:"none !important"},"&::placeholder":{color:"rgba(255, 255, 255, 0.3)",opacity:1}},"& fieldset":{border:"none !important",display:"none !important"},"& .MuiOutlinedInput-notchedOutline":{border:"none !important",display:"none !important"}}},children:[P.expanded&&o.jsx(ve,{fontSize:"small",sx:{position:"absolute",left:"12px",top:"50%",transform:"translateY(-50%)",color:"rgba(255, 255, 255, 0.6)",zIndex:1,pointerEvents:"none"}}),o.jsx(z.QuickFilterControl,{placeholder:l})]}),P.expanded&&P.value!==""&&o.jsx(z.QuickFilterClear,{render:o.jsx(v,{sx:{position:"absolute",right:"8px",top:"50%",transform:"translateY(-50%)",zIndex:1},children:o.jsx(v,{sx:{minWidth:"24px",width:"24px",height:"24px",padding:0,color:"rgba(255, 255, 255, 0.6)","&:hover":{backgroundColor:"rgba(255, 255, 255, 0.1)"}},children:o.jsx(z.ToolbarButton,{"aria-label":"Clear",children:o.jsx(tt,{fontSize:"small"})})})})})]})]})})]})]})})}const k=x||w;return o.jsx(v,{ref:S,sx:{height:"100%",display:"flex",flexDirection:"column","& *":{scrollbarWidth:"none",msOverflowStyle:"none","&::-webkit-scrollbar":{display:"none"}},"&:hover *":{scrollbarWidth:"thin",scrollbarColor:`${p.palette.divider} transparent`,"&::-webkit-scrollbar":{display:"block",width:"8px",height:"8px"},"&::-webkit-scrollbar-track":{background:"transparent"},"&::-webkit-scrollbar-thumb":{background:p.palette.divider,borderRadius:"4px"},"&::-webkit-scrollbar-thumb:hover":{background:p.palette.action.hover}},...d},children:o.jsx(z.DataGrid,{apiRef:y,rows:j,columns:e,onRowClick:T,disableColumnMenu:!1,disableRowSelectionOnClick:!0,disableMultipleRowSelection:!0,hideFooterSelectedRowCount:!0,filterMode:"client",sortingOrder:["desc","asc"],hideFooter:!1,showToolbar:!0,slots:{toolbar:k},initialState:{sorting:{sortModel:[]},filter:{filterModel:{items:[]}},...g==null?void 0:g.initialState},...g,autosizeOnMount:!0,autosizeOptions:{...(g==null?void 0:g.autosizeOptions)||{},includeOutliers:!0,includeHeaders:!0,expand:!0,columns:((E=g==null?void 0:g.autosizeOptions)==null?void 0:E.columns)||e.map(M=>M.field)},sx:{border:"none",width:"100%","& .MuiPaper-root":{boxShadow:"none !important"},"& .MuiDataGrid-overlay":{},"& .MuiDataGrid-main":{border:"none","& .MuiPaper-root":{}},"& .MuiDataGrid-container--top [role=row]":{},"& .MuiDataGrid-topContainer":{borderBottom:"none !important"},"& .MuiDataGrid-columnHeaders":{border:"none",borderBottom:"none !important"},"& .MuiDataGrid-row":{cursor:a?"pointer":"default",border:"none",margin:"1px 0",position:"relative",backgroundColor:"transparent !important","&:hover":{backgroundColor:"transparent !important","&::before":{content:'""',position:"absolute",top:0,left:"16px",right:"16px",bottom:0,backgroundColor:"action.hover",borderRadius:"16px",zIndex:0}},"&.Mui-selected":{backgroundColor:"transparent !important","&:hover":{backgroundColor:"transparent !important"}},...C!==null&&{[`&[data-id="${C}"]`]:{backgroundColor:"transparent !important","&::before":{content:'""',position:"absolute",top:0,left:"16px",right:"16px",bottom:0,backgroundColor:"rgba(255, 255, 255, 0.08) !important",borderRadius:"16px",zIndex:0},"&:hover":{backgroundColor:"transparent !important"},"&:hover::before":{backgroundColor:"rgba(255, 255, 255, 0.12) !important"}}}},"& .MuiDataGrid-cell--textLeft":{paddingLeft:"40px"},"& .MuiDataGrid-cell":{border:"none",position:"relative",zIndex:1,"&:focus":{outline:"none"},"&:focus-within":{outline:"none"},"&:hover":{backgroundColor:"transparent !important"}},"& .MuiDataGrid-columnHeader":{border:"none",paddingLeft:"40px",paddingRight:"40px","& .MuiDataGrid-columnHeaderTitle":{color:"rgba(255, 255, 255, 0.6)"}},"& .MuiDataGrid-toolbarContainer":{padding:"8px",border:"none !important",borderBottom:"none !important","& .MuiBox-root":{},"& .MuiFormControl-root":{},"& .MuiInputBase-root":{},"& .MuiPaper-root":{boxShadow:"none !important"},"& *":{borderBottom:"none !important"}},"& .MuiDataGrid-toolbar":{borderBottom:"none !important"},"& .MuiDataGrid-toolbarFilterList":{border:"none"},"& .MuiDataGrid-withBorderColor":{borderColor:"transparent !important"},"& .MuiDataGrid-columnSeparator":{display:"none"},"& .MuiDataGrid-footerContainer":{display:"none"},"& .MuiDataGrid-filler":{border:"none !important",borderTop:"none !important",borderBottom:"none !important",borderLeft:"none !important",borderRight:"none !important","--rowBorderColor":"none !important"},"& .MuiBackdrop-root":{},"& .MuiModal-backdrop":{},...g==null?void 0:g.sx}})})}));De.displayName="WandelbotsDataGrid";const ce=F.externalizeComponent(D.observer(({colors:t,label:e,getDisplayedValue:n,startJogging:a,stopJogging:r,disabled:i,activeJoggingDirection:c,...s})=>{var b,T,C,w,k,E,M;Q.useAnimationFrame(()=>{const P=n(),L=d.current;L&&(L.textContent=P)});const l=A.useTheme(),[g,x]=h.useState(null);h.useEffect(()=>{i&&j()},[i]);const u=c||g,d=h.useRef(null);t||(t={color:"#fff",backgroundColor:"#000",borderColor:"#000",buttonBackgroundColor:{disabled:"#000",default:"#000",hovered:"#000",pressed:"#000"},labelColor:"#000"});const p=u?(b=t.buttonBackgroundColor)==null?void 0:b.pressed:t.borderColor,y={width:"55px",color:t.color,path:{fill:t.color},alignContent:"center",fontSize:"37px",svg:{pointerEvents:"none"}},S={...y,backgroundColor:(T=t.buttonBackgroundColor)==null?void 0:T.default,":hover":{backgroundColor:(C=t.buttonBackgroundColor)==null?void 0:C.hovered},":active":{backgroundColor:(w=t.buttonBackgroundColor)==null?void 0:w.pressed,color:t.backgroundColor,path:{fill:t.backgroundColor}},":disabled":{backgroundColor:(k=t.buttonBackgroundColor)==null?void 0:k.disabled,"svg path":{fill:l.palette.action.disabled}}},f={...y,backgroundColor:(E=t.buttonBackgroundColor)==null?void 0:E.pressed,color:t.backgroundColor,path:{fill:t.backgroundColor},":disabled":{backgroundColor:(M=t.buttonBackgroundColor)==null?void 0:M.pressed,"svg path":{fill:l.palette.action.disabled}}};function m(P,L){i||P.button===0&&(x(L),a(L))}function j(){x(null),r()}return o.jsxs(_,{height:"64px",direction:"row",justifyContent:"center",...s,children:[o.jsx(G,{disabled:i,disableRipple:!0,onPointerDown:P=>m(P,"-"),onPointerUp:j,onPointerOut:j,size:"large",sx:{...u==="-"?f:S,borderRadius:"16px 0px 0px 16px",borderLeft:`2px solid ${p??"#fff"}`,borderBottom:`2px solid ${p??"#fff"}`,borderTop:`2px solid ${p??"#fff"}`},children:o.jsx(W.ForwardRef$3,{})}),o.jsxs(_,{spacing:"6px",sx:{width:"150px",backgroundColor:t.backgroundColor,alignItems:"center",justifyContent:"center",opacity:"0.9",borderBottom:`2px solid ${p??"#fff"}`,borderTop:`2px solid ${p??"#fff"}`},children:[o.jsx(_,{height:"22px",direction:"row",alignItems:"center",justifyItems:"center",spacing:1,sx:{userSelect:"none",color:t.color,".MuiTypography-root":{fontWeight:700,...i?{color:l.palette.action.disabled}:{}},...i?{"svg path":{fill:l.palette.action.disabled}}:{}},children:e}),o.jsx(R,{height:"22px",sx:{fontSize:"15px",color:i?l.palette.action.disabled:t.color,fontWeight:700,fontVariantNumeric:"tabular-nums",minWidth:"80px",textAlign:"center"},ref:d,children:n()})]}),o.jsx(G,{disableRipple:!0,disabled:i,onPointerDown:P=>m(P,"+"),onPointerUp:j,onPointerOut:j,size:"large",sx:{...u==="+"?f:S,borderRadius:"0px 16px 16px 0px",borderRight:`2px solid ${p??"#fff"}`,borderBottom:`2px solid ${p??"#fff"}`,borderTop:`2px solid ${p??"#fff"}`},children:o.jsx(W.ForwardRef$4,{})})]})})),Je=F.externalizeComponent(D.observer(({startJogging:t,stopJogging:e,lowerLimit:n,upperLimit:a,useDegree:r,getValue:i,disabled:c,...s})=>{var w,k,E,M,P,L,Y,ee,fe,xe,be,ye,Se,je,Ce;const{t:l}=B.useTranslation(),[g,x]=h.useState(),u=A.useTheme(),d={background:(w=u.palette.backgroundPaperElevation)==null?void 0:w[4],color:(k=u.palette.backgroundPaperElevation)==null?void 0:k[11]},p=D.useLocalObservable(()=>({activeJoggingDir:null,startJogging(O){this.activeJoggingDir=O,t(O)},stopJogging(){this.activeJoggingDir=null,e()}})),y=yt(()=>{const O=r?S(i()):i();(O===void 0||g===void 0||Math.abs(g-O)>1e-9)&&x(O)},50);Q.useAnimationFrame(y);function S(O){if(O!==void 0)return J.radiansToDegrees(O)}function f(O){O.button===0&&p.startJogging("-")}function m(O){O.button===0&&p.startJogging("+")}function j(O){p.stopJogging()}function b(O){p.stopJogging()}function T(O,Z=1){if(O===void 0||Number.isNaN(O))return"";const X=l("General.degree.variable",{amount:O.toFixed(Z)});return O>0&&Z===0?`+${X}`:X}function C(O,Z=1){if(O===void 0||Number.isNaN(O))return"";const X=l("General.mm.variable",{amount:O.toFixed(Z)});return O>0&&Z===0?`+${X}`:X}return o.jsxs(_,{height:"64px",width:"100%",maxWidth:"260px",direction:"row",...s,sx:{"& .MuiIconButton-root":{width:"52px",color:u.palette.text.primary,alignContent:"center",backgroundColor:(E=u.palette.backgroundPaperElevation)==null?void 0:E[11],"& svg":{width:"42px",height:"42px"},"&.Mui-disabled":{backgroundColor:(M=u.palette.backgroundPaperElevation)==null?void 0:M[11],color:u.palette.action.disabled,opacity:1},"&:hover":{backgroundColor:(P=u.palette.backgroundPaperElevation)==null?void 0:P[9]},"&:active":{...d}}},children:[o.jsx(G,{onPointerDown:f,onPointerUp:j,onPointerOut:b,disabled:c,disableRipple:!0,sx:{borderRadius:"16px 0px 0px 16px",...p.activeJoggingDir==="-"?d:{}},children:o.jsx(xt,{sx:{pointerEvents:"none",color:(fe=(ee=(Y=(L=u.componentsExt)==null?void 0:L.JoggingPanel)==null?void 0:Y.JoggingJoint)==null?void 0:ee.Joint)==null?void 0:fe.arrowColor}})}),o.jsxs(_,{flexGrow:1,alignItems:"center",justifyContent:"center",sx:{borderStyle:"solid",borderLeftWidth:0,borderRightWidth:0,border:"none",backgroundColor:(xe=u.palette.backgroundPaperElevation)==null?void 0:xe[11],paddingLeft:"20px",paddingRight:"20px",zIndex:1},children:[o.jsx(R,{sx:{fontSize:"15px",fontWeight:700,position:"relative",top:"5px",fontVariantNumeric:"tabular-nums",minWidth:"80px",textAlign:"center",color:c?u.palette.action.disabled:u.palette.text.primary},children:r?T(g):C(g)}),o.jsx(Ae,{disabled:!0,"aria-label":"Joint position",min:r?S(n):n,max:r?S(a):a,value:g||0,track:!1,sx:{"& .MuiSlider-mark":{display:"none"},"& .MuiSlider-thumb":{width:"5px",height:"12px",borderRadius:"2px",color:c?u.palette.action.disabled:u.palette.text.primary},"& .MuiSlider-markLabel":{top:"20px",fontSize:"12px",color:c?u.palette.action.disabled:u.palette.text.secondary},"& .MuiSlider-rail":{backgroundColor:(be=u.palette.backgroundPaperElevation)==null?void 0:be[5],opacity:1}},marks:n!==void 0&&a!==void 0&&[{value:r?S(n):n,label:r?T(S(n),0):C(n)},{value:r?S(a):a,label:r?T(S(a),0):C(a)}]})]}),o.jsx(G,{onPointerDown:m,onPointerUp:j,onPointerOut:b,disabled:c,disableRipple:!0,sx:{borderRadius:"0px 16px 16px 0px",...p.activeJoggingDir==="+"?d:{}},children:o.jsx(bt,{sx:{pointerEvents:"none",color:(Ce=(je=(Se=(ye=u.componentsExt)==null?void 0:ye.JoggingPanel)==null?void 0:Se.JoggingJoint)==null?void 0:je.Joint)==null?void 0:Ce.arrowColor}})})]})}));function ge(t,e,n){if(e.length!==t.length)return!0;for(let a=0;a<e.length;a++)if(Math.abs(e[a]-t[a])>n)return!1;return!0}function Fe(t,e,n){if(t===void 0&&e||t&&e===void 0||(t==null?void 0:t.orientation)===void 0||(e==null?void 0:e.orientation)===void 0||(t==null?void 0:t.position)===void 0||(e==null?void 0:e.position)===void 0)return!1;if(t===void 0||e===void 0)return!0;let a=0;return a+=Math.abs(t.orientation[0]-e.orientation[0]),a+=Math.abs(t.orientation[1]-e.orientation[1]),a+=Math.abs(t.orientation[2]-e.orientation[2]),a+=Math.abs(t.position[0]-e.position[0]),a+=Math.abs(t.position[1]-e.position[1]),a+=Math.abs(t.position[2]-e.position[2]),a<=n}function pe(t,e,n){return t.coordinate_system===e.coordinate_system&&t.tcp===e.tcp&&Fe(t.tcp_pose,e.tcp_pose,n)}function Be(t,e){const n=new le.Vector3(e[0],e[1],e[2]),a=new le.Vector3(t[0],t[1],t[2]),r=n.length(),i=n.normalize();let c=a.length(),s=a.normalize();s.dot(i)<0&&(c=-c,s=s.multiplyScalar(-1));let l=c-r;return l-=2*Math.PI*Math.floor((l+Math.PI)/(2*Math.PI)),c=r+l,[...s.multiplyScalar(c)]}const Me=1e-4;class ie{constructor(e,n,a,r,i,c){this.nova=e,this.controller=n,this.motionGroup=a,this.description=r,this.initialMotionState=i,this.motionStateSocket=c,this.rapidlyChangingMotionState=i,c.addEventListener("message",s=>{var u;const l=(u=J.tryParseJson(s.data))==null?void 0:u.result;if(!l)throw new Error(`Failed to get motion state for ${this.motionGroupId}: ${s.data}`);ge(this.rapidlyChangingMotionState.joint_position,l.joint_position,Me)||I.runInAction(()=>{this.rapidlyChangingMotionState.joint_position=l.joint_position}),pe(this.rapidlyChangingMotionState,l,Me)||I.runInAction(()=>{var d,p,y;this.rapidlyChangingMotionState.tcp_pose==null?this.rapidlyChangingMotionState.tcp_pose=l.tcp_pose:(d=l.tcp_pose)!=null&&d.orientation&&((p=l.tcp_pose)!=null&&p.position)&&((y=this.rapidlyChangingMotionState.tcp_pose)!=null&&y.orientation)?this.rapidlyChangingMotionState.tcp_pose={position:l.tcp_pose.position,orientation:Be(l.tcp_pose.orientation,this.rapidlyChangingMotionState.tcp_pose.orientation)}:console.warn("Received incomplete tcp_pose, ignoring",l.tcp_pose)}),l.tcp!==void 0&&this.rapidlyChangingMotionState.tcp!==l.tcp&&I.runInAction(()=>{this.rapidlyChangingMotionState.tcp=l.tcp}),this.rapidlyChangingMotionState.standstill!==l.standstill&&I.runInAction(()=>{this.rapidlyChangingMotionState.standstill=l.standstill});const g=this.rapidlyChangingMotionState.joint_limit_reached.limit_reached,x=l.joint_limit_reached.limit_reached;g.some((d,p)=>d!==x[p])&&I.runInAction(()=>{this.rapidlyChangingMotionState.joint_limit_reached=l.joint_limit_reached}),this.rapidlyChangingMotionState.execute!==l.execute&&I.runInAction(()=>{this.rapidlyChangingMotionState.execute=l.execute})}),I.makeAutoObservable(this)}static async open(e,n){var u;const[a,r]=n.split("@"),i=await e.api.controller.getCurrentRobotControllerState(r),c=i==null?void 0:i.motion_groups.find(d=>d.motion_group===n);if(!i||!c)throw new Error(`Controller ${r} or motion group ${n} not found`);const s=e.openReconnectingWebsocket(`/controllers/${r}/motion-groups/${n}/state-stream`),l=await s.firstMessage(),g=(u=J.tryParseJson(l.data))==null?void 0:u.result;if(!g)throw new Error(`Unable to parse initial motion state message ${l.data}`);console.log(`Connected motion state websocket to motion group ${c.motion_group}. Initial state:
|
|
2
|
-
`,g);const x=await e.api.motionGroup.getMotionGroupDescription(r,c.motion_group);return new ie(e,i,c,x,g,s)}get motionGroupId(){return this.motionGroup.motion_group}get controllerId(){return this.controller.controller}get joints(){return this.initialMotionState.joint_position.map((e,n)=>({index:n}))}dispose(){this.motionStateSocket.close()}}const Ie="Movement request rejected. Another client is currently executing a 'Jogging' motion!";class re{constructor(e,n={}){this.motionStream=e,this.options=n,this.DEFAULT_MODE="off",this.DEFAULT_TCP="Flange",this.NO_TCP=void 0,this.DEFAULT_INIT_TIMEOUT=5e3,this.DEFAULT_ORIENTATION="coordsys",this.mode="off",this.joggingSocket=null,this.trajectorySocket=null,this.timeout=this.DEFAULT_INIT_TIMEOUT,this.tcp=(n==null?void 0:n.tcp)||e.motionGroup.tcp||this.getDefaultTcp(e),this.orientation=(n==null?void 0:n.orientation)||this.DEFAULT_ORIENTATION,this.timeout=(n==null?void 0:n.timeout)||this.DEFAULT_INIT_TIMEOUT,this.mode=(n==null?void 0:n.mode)||this.DEFAULT_MODE,this.onError=n==null?void 0:n.onError}static async open(e,n,a={}){const r=await ie.open(e,n),i=new re(r,a);return await i.setJoggingMode(i.mode),i}getDefaultTcp(e){var a,r;const n=(r=(a=e.description.dh_parameters)==null?void 0:a[0])==null?void 0:r.type;return e.joints.length<6&&(n===V.JointTypeEnum.RevoluteJoint||n===V.JointTypeEnum.PrismaticJoint)?this.NO_TCP:this.DEFAULT_TCP}async setOptions(e){e.tcp&&(this.tcp=e.tcp),e.orientation&&(this.orientation=e.orientation),e.timeout&&(this.timeout=e.timeout),e.mode&&(this.mode=e.mode),e.onError&&(this.onError=e.onError),this.setJoggingMode(this.mode,!1)}get motionGroupId(){return this.motionStream.motionGroupId}get nova(){return this.motionStream.nova}get numJoints(){return this.motionStream.joints.length}async stop(){if(this.joggingSocket){const e=new Array(this.numJoints).fill(0);this.joggingSocket.sendJson({message_type:"JointVelocityRequest",velocity:e})}this.trajectorySocket&&this.trajectorySocket.sendJson({message_type:"PauseMovementRequest"})}async dispose(){const e=[this.joggingSocket,this.trajectorySocket].filter(n=>n!==null);return e.forEach(n=>{n.dispose()}),this.joggingSocket=null,this.trajectorySocket=null,Promise.all(e.map(n=>n.closed()))}async setJoggingMode(e,n=!0){if(!(this.mode===e&&n)&&(this.dispose(),this.mode=e,this.mode==="jogging"))return this.initializeJoggingWebsocket()}async initializeJoggingWebsocket(){return new Promise((e,n)=>{const a=setTimeout(()=>{n(new Error(`Jogging initialization timeout after ${this.timeout} seconds`))},this.timeout);this.joggingSocket=this.nova.openReconnectingWebsocket(`/controllers/${this.motionStream.controllerId}/execution/jogging`),this.joggingSocket.addEventListener("message",r=>{var c,s,l,g;const i=J.tryParseJson(r.data);if(((c=i==null?void 0:i.result)==null?void 0:c.kind)==="INITIALIZE_RECEIVED"){clearTimeout(a),e();return}if(((s=i==null?void 0:i.result)==null?void 0:s.kind)==="MOTION_ERROR")if(clearTimeout(a),this.onBlocked&&((l=i==null?void 0:i.result)!=null&&l.message.includes(Ie))){(g=this.joggingSocket)==null||g.dispose(),this.onBlocked();return}else this.onError?this.onError(r.data):n(new Error(r.data))}),this.joggingSocket.sendJson({message_type:"InitializeJoggingRequest",motion_group:this.motionGroupId,...this.tcp?{tcp:this.tcp}:{}})})}async rotateJoints({joint:e,direction:n,velocityValue:a,velocityUnit:r}){if(!this.joggingSocket||this.mode!=="jogging")throw new Error("Joint jogging websocket not connected; create one by setting jogging mode to 'jogging'");const i=new Array(this.numJoints).fill(0);i[e]=n==="-"?-a:a,this.joggingSocket.sendJson({message_type:"JointVelocityRequest",velocity:i})}async translateTCP({axis:e,direction:n,velocityMmPerSec:a}){if(!this.joggingSocket||this.mode!=="jogging")throw new Error("Continuous jogging websocket not connected; create one by setting jogging mode to 'jogging'");const r=[0,0,0],i=[0,0,0];i[J.XYZ_TO_VECTOR[e]]=n==="-"?-a:a,this.joggingSocket.sendJson({message_type:"TcpVelocityRequest",translation:i,rotation:r,use_tool_coordinate_system:this.orientation==="tool"})}async rotateTCP({axis:e,direction:n,velocityRadsPerSec:a}){if(!this.joggingSocket||this.mode!=="jogging")throw new Error("Continuous jogging websocket not connected; create one by setting jogging mode to 'jogging'");const r=[0,0,0],i=[0,0,0];r[J.XYZ_TO_VECTOR[e]]=n==="-"?-a:a,this.joggingSocket.sendJson({message_type:"TcpVelocityRequest",translation:i,rotation:r,use_tool_coordinate_system:this.orientation==="tool"})}async runIncrementalCartesianMotion({currentTcpPose:e,currentJoints:n,velocityInRelevantUnits:a,axis:r,direction:i,motion:c}){const s=[];if(this.mode!=="trajectory")throw new Error("Set jogging mode to 'trajectory' to run incremental cartesian motions");if(c.type==="translate"){if(!e.position)throw new Error("Current pose has no position, cannot perform translation");const f=[...e.position];f[J.XYZ_TO_VECTOR[r]]+=c.distanceMm*(i==="-"?-1:1),s.push({limits_override:{tcp_velocity_limit:a},path:{path_definition_name:"PathLine",target_pose:{position:f,orientation:e.orientation}}})}else if(c.type==="rotate"){if(!e.orientation)throw new Error("Current pose has no orientation, cannot perform rotation");const f=new se.Vector3(e.orientation[0],e.orientation[1],e.orientation[2]),m=f.length(),j=f.clone().normalize(),b=c.distanceRads*(i==="-"?-1:1),T=new se.Vector3(0,0,0);T[r]=1;const C=Math.cos(.5*b)*Math.cos(.5*m),w=Math.sin(.5*b)*Math.sin(.5*m),k=Math.sin(.5*b)*Math.cos(.5*m),E=Math.cos(.5*b)*Math.sin(.5*m),M=T.dot(j),P=T.clone().cross(j),L=2*Math.acos(C-w*M),Y=L/Math.sin(.5*L),ee=new se.Vector3().addScaledVector(P,w).addScaledVector(T,k).addScaledVector(j,E).multiplyScalar(Y);s.push({limits_override:{tcp_orientation_velocity_limit:a},path:{path_definition_name:"PathLine",target_pose:{position:e.position,orientation:[...ee]}}})}const l=this.motionStream.description;if(l.cycle_time===void 0){console.warn("Current motion group has no cycle time, cannot plan jogging motion");return}const g={motion_group_model:l.motion_group_model,cycle_time:l.cycle_time,mounting:l.mounting,global:l.operation_limits.auto_limits},x=await this.nova.api.trajectoryPlanning.planTrajectory({motion_group_setup:g,start_joint_position:n,motion_commands:s}),u=x.response;if(!u)throw new Error(`Failed to plan jogging increment motion ${JSON.stringify(x)}`);this.trajectorySocket&&(console.warn("Trajectory jogging websocket already open; will close"),this.trajectorySocket.dispose()),this.trajectorySocket=this.nova.openReconnectingWebsocket(`/controllers/${this.motionStream.controllerId}/execution/trajectory`);const d=f=>{var m;if(!f||f.add_trajectory_error||f.message)if(this.onError)this.onError(f);else throw new Error(((m=f==null?void 0:f.add_trajectory_error)==null?void 0:m.message)||(f==null?void 0:f.message)||"Failed to execute trajectory, unknown error");if(!this.trajectorySocket)throw new Error("Failed to execute trajectory, websocket not available anymore");this.trajectorySocket.sendJson({message_type:"StartMovementRequest",direction:"DIRECTION_FORWARD"})},p=async()=>{var f;await I.when(()=>!this.motionStream.rapidlyChangingMotionState.standstill),await I.when(()=>this.motionStream.rapidlyChangingMotionState.standstill),(f=this.trajectorySocket)==null||f.dispose(),this.trajectorySocket=null},y=async()=>{var f;await I.when(()=>this.motionStream.rapidlyChangingMotionState.standstill),(f=this.trajectorySocket)==null||f.dispose(),this.trajectorySocket=null},S=async f=>{if(f!=null&&f.message)if(this.onError){this.onError(f);return}else throw new Error(f.message||"Failed to execute trajectory, unknown error");this.motionStream.rapidlyChangingMotionState.standstill?await p():await y()};this.trajectorySocket.addEventListener("message",f=>{var j,b;const m=J.tryParseJson(f.data);if(!((j=m==null?void 0:m.result)!=null&&j.kind))throw new Error(`Failed to execute trajectory: Received invalid message ${f.data}`);if(this.onBlocked&&((b=m.result.message)!=null&&b.includes(Ie))){this.onBlocked();return}if(m.result.kind==="INITIALIZE_RECEIVED")d(m.result);else if(m.result.kind==="START_RECEIVED")S(m);else if(m.result.kind!=="PAUSE_RECEIVED")if(m.result.kind==="MOTION_ERROR"&&m.result.message)if(this.onError){this.onError(m);return}else throw new Error(m.result.message);else throw new Error(`Failed to execute trajectory, cannot handle message type "${m.result.kind}"`)}),this.trajectorySocket.sendJson({message_type:"InitializeMovementRequest",trajectory:{message_type:"TrajectoryData",motion_group:this.motionGroupId,data:u,tcp:this.tcp}})}}const Le=t=>{const e=t.softTimeout||3e3,[n,a]=h.useState(!1),r=A.useTheme();return h.useEffect(()=>{const i=setTimeout(()=>{a(!0)},e);return()=>clearTimeout(i)}),o.jsx(_,{width:"100%",height:"100%",alignItems:"center",justifyContent:"center",sx:{color:r.palette.text.primary},children:t.error?o.jsx(ze,{loadingMessage:t.message,error:t.error}):o.jsxs(o.Fragment,{children:[o.jsx(Oe,{sx:{marginBottom:"24px"}}),!!t.message&&o.jsx("div",{children:t.message}),o.jsx(_,{sx:{visibility:n?"visible":"hidden",marginTop:"1rem",color:r.palette.text.secondary},children:"This is taking longer than expected..."})]})})},ze=t=>{const e=at.makeErrorMessage(t.error),n=t.error instanceof Error?t.error.stack:null,a=A.useTheme();return o.jsxs(_,{sx:{maxHeight:"100%",maxWidth:"min(100%, 800px)",padding:2,overflow:"auto",color:a.palette.error.main,"& pre":{whiteSpace:"pre-wrap",wordBreak:"break-word",paddingBottom:"3rem"}},children:[(t.loadingMessage?`Error while ${ue.lowerFirst(rt.capitalize(t.loadingMessage))} - `:"")+e,o.jsx("br",{}),n&&o.jsx("pre",{children:n})]})},Wt=D.observer(({store:t})=>{const{t:e}=B.useTranslation();return o.jsx(Ee,{"data-testid":"jogging-blocked","aria-label":"jogging-blocked",open:!0,sx:{position:"absolute",zIndex:n=>n.zIndex.drawer+1,color:"#fff",background:"rgba(15, 15, 15, 0.88)",justifyContent:"flex-start",alignItems:"flex-start"},children:o.jsxs(_,{sx:{m:2,width:"100%"},children:[o.jsxs(st,{severity:"error",sx:{mb:2},children:[o.jsx(lt,{children:e("Jogging.Blocked.ti")}),e("Jogging.Blocked.lb")]}),o.jsx(H,{variant:"contained",color:"secondary",onClick:()=>t.unblock(),children:e("Jogging.Blocked.Reenable.bt")})]})})}),$e=D.observer(({store:t})=>{const{t:e}=B.useTranslation(),[n,a]=h.useState(t.jogger.motionStream.rapidlyChangingMotionState.joint_limit_reached.limit_reached),r=h.useRef(n);Q.useAnimationFrame(()=>{const c=t.jogger.motionStream.rapidlyChangingMotionState.joint_limit_reached.limit_reached;ct(r.current,c)||(r.current=c,a(c))});const i=[];for(const[c,s]of n.entries())s&&i.push(c);return o.jsx(v,{sx:{display:"flex",flexDirection:"row",justifyContent:"center"},children:o.jsx(R,{"data-testid":"jogging-joint-limit-detector","aria-label":"jogging-joint-limit-detector",color:"error",variant:"body2",sx:{fontSize:"0.75rem",lineHeight:1.2,visibility:i.length?"visible":"hidden"},children:e("Jogging.JointLimitsReached.lb",{jointNumbers:i.map(c=>c+1).join(", ")})})})}),Gt=A.styled(ut)(({theme:t})=>({"&.MuiFormControl-root":{".MuiSelect-select":{paddingTop:"20px",paddingLeft:"12px"},label:{pointerEvents:"none",fontSize:"16px"},".MuiInputLabel-root":{"&.Mui-focused":{color:t.palette.text.primary}}}}));function ne({labelValue:t,...e}){return o.jsxs(Gt,{fullWidth:!0,variant:"filled",children:[o.jsx(gt,{id:e.labelId,children:t}),o.jsx(pt,{...e})]})}const de=[{id:"0.1",mm:.1,degrees:.05},{id:"1",mm:1,degrees:.5},{id:"5",mm:5,degrees:2.5},{id:"10",mm:10,degrees:5}],Ut=[{id:"continuous"},...de],Ht=["coordsys","tool"];class ae{constructor(e,n,a,r,i){var c,s,l;this.jogger=e,this.coordSystems=n,this.motionGroupDescription=a,this.tcps=r,this.inverseSolverValue=i,this.selectedTabId="cartesian",this.locks=new Set,this.blocked=!1,this.selectedCoordSystemId="world",this.selectedTcpId="",this.tcpChangeInProgress=!1,this.selectedOrientation="coordsys",this.selectedIncrementId="continuous",this.selectedCartesianMotionType="translate",this.incrementJogInProgress=null,this.translationVelocityMmPerSec=10,this.rotationVelocityDegPerSec=1,this.minTranslationVelocityMmPerSec=5,this.maxTranslationVelocityMmPerSec=250,this.minRotationVelocityDegPerSec=1,this.maxRotationVelocityDegPerSec=60,this.showCoordSystemSelect=!1,this.showTcpSelect=!0,this.showOrientationSelect=!0,this.showIncrementSelect=!0,this.showTabIcons=!1,this.showVelocitySliderLabel=!0,this.showVelocityLegend=!1,this.showJointsLegend=!1,this.disposers=[],this.inverseSolver=void 0,this.jointType=V.JointTypeEnum.RevoluteJoint;for(const g of n)if(g.coordinate_system===""){g.coordinate_system="world";break}this.selectedCoordSystemId=((c=n[0])==null?void 0:c.coordinate_system)||"world",this.selectedTcpId=e.motionStream.rapidlyChangingMotionState.tcp??"",this.tcpChangeInProgress=this.tcps.length>0&&!this.selectedTcpId,this.inverseSolver=i,this.jointType=((l=(s=a==null?void 0:a.dh_parameters)==null?void 0:s[0])==null?void 0:l.type)??V.JointTypeEnum.RevoluteJoint,I.makeAutoObservable(this,{},{autoBind:!0}),this.jogger.onBlocked=()=>{this.block()},this.loadFromLocalStorage(),this.disposers.push(I.autorun(()=>this.saveToLocalStorage())),this.disposers.push(I.autorun(()=>{const g=this.jogger.motionStream.rapidlyChangingMotionState.tcp;g&&g!==this.selectedTcpId&&I.runInAction(()=>{this.selectedTcpId=g,this.tcpChangeInProgress=!1})})),window.joggingStore=this}static async loadFor(e){const{nova:n}=e,[a,r]=await Promise.all([n.api.controller.listCoordinateSystems(e.motionStream.controllerId,"ROTATION_VECTOR"),n.api.motionGroup.getMotionGroupDescription(e.motionStream.controllerId,e.motionGroupId)]),i=await n.api.motionGroupModels.getMotionGroupKinematicModel(r.motion_group_model),c=Object.entries(r.tcps||{}).map(([s,l])=>({id:s,readable_name:l.name,position:l.pose.position,orientation:l.pose.orientation}));return new ae(e,a||[],r,c,i.inverse_solver)}dispose(){for(const e of this.disposers)e();this.jogger.dispose()}get coordSystemCountByName(){return ue.countBy(this.coordSystems,e=>e.name)}async deactivate(){this.jogger.mode==="jogging"&&await this.jogger.setJoggingMode("off")}async activate(){return this.currentTab.id==="cartesian"?((this.jogger.tcp!==this.selectedTcpId||this.jogger.orientation!==this.selectedOrientation)&&await this.jogger.setOptions({tcp:this.selectedTcpId||void 0,orientation:this.selectedOrientation}),this.activeDiscreteIncrement?this.jogger.setJoggingMode("trajectory"):this.jogger.setJoggingMode("jogging")):this.jogger.setJoggingMode("jogging"),this.jogger}loadFromLocalStorage(){const e=J.tryParseJson(localStorage.getItem("joggingToolStore"));e&&(this.tabsById[e.selectedTabId]&&(this.selectedTabId=e.selectedTabId),this.coordSystemsById[e.selectedCoordSystemId]&&(this.selectedCoordSystemId=e.selectedCoordSystemId),this.incrementOptionsById[e.selectedIncrementId]&&(this.selectedIncrementId=e.selectedIncrementId),["translate","rotate"].includes(e.selectedCartesianMotionType)&&(this.selectedCartesianMotionType=e.selectedCartesianMotionType),["coordsys","tool"].includes(e.selectedOrientation)&&(this.selectedOrientation=e.selectedOrientation))}saveToLocalStorage(){localStorage.setItem("joggingToolStore",JSON.stringify(this.localStorageSave))}get isLocked(){return this.locks.size>0}get localStorageSave(){return{selectedTabId:this.selectedTabId,selectedCoordSystemId:this.selectedCoordSystemId,selectedOrientation:this.selectedOrientation,selectedIncrementId:this.selectedIncrementId,selectedCartesianMotionType:this.selectedCartesianMotionType}}get tabs(){const e=[{id:"joint",label:"Joints"}];return this.inverseSolver!==null&&e.unshift({id:"cartesian",label:"Cartesian"}),e}get incrementOptions(){return Ut}get discreteIncrementOptions(){return de}get incrementOptionsById(){return te(this.incrementOptions,e=>e.id)}get tabsById(){return te(this.tabs,e=>e.id)}get currentTab(){return this.tabsById[this.selectedTabId]||this.tabs[0]}get tabIndex(){return this.tabs.indexOf(this.currentTab)}get coordSystemsById(){return te(this.coordSystems,e=>e.coordinate_system)}get activeCoordSystemId(){return this.selectedOrientation==="tool"?"tool":this.selectedCoordSystemId}get tcpsById(){return te(this.tcps,e=>e.id)}get activeDiscreteIncrement(){return this.selectedOrientation==="tool"?void 0:de.find(e=>e.id===this.selectedIncrementId)}get rotationVelocityRadsPerSec(){return this.rotationVelocityDegPerSec*Math.PI/180}velocityInDisplayUnits(e){return e?this.rotationVelocityDegPerSec:this.translationVelocityMmPerSec}minVelocityInDisplayUnits(e){return e?this.minRotationVelocityDegPerSec:this.minTranslationVelocityMmPerSec}maxVelocityInDisplayUnits(e){return e?this.maxRotationVelocityDegPerSec:this.maxTranslationVelocityMmPerSec}onTabChange(e,n){const a=this.tabs[n]||this.tabs[0];this.selectedTabId=a.id}setSelectedCoordSystemId(e){this.selectedCoordSystemId=e}setSelectedTcpId(e){this.requestTcpChange(e).catch(n=>{console.error("Failed to change TCP:",n)})}async requestTcpChange(e){if(e===this.selectedTcpId)return;this.tcpChangeInProgress=!0;const n=this.jogger.tcp,a=this.jogger.mode!=="jogging";try{this.jogger.tcp=e,a?await this.jogger.setJoggingMode("jogging"):await this.jogger.setJoggingMode("jogging",!1);let r=await this.waitForTcpConfirmation(e,1e3);a&&await this.jogger.setJoggingMode("off"),r||(r=await this.waitForTcpConfirmation(e,2e3)),I.runInAction(()=>{r?this.selectedTcpId=e:(this.jogger.tcp=n,this.selectedTcpId=this.jogger.motionStream.rapidlyChangingMotionState.tcp??"")})}catch(r){throw a&&await this.jogger.setJoggingMode("off").catch(()=>{}),I.runInAction(()=>{this.jogger.tcp=n,this.selectedTcpId=this.jogger.motionStream.rapidlyChangingMotionState.tcp??""}),r}finally{I.runInAction(()=>{this.tcpChangeInProgress=!1})}}waitForTcpConfirmation(e,n){return new Promise(a=>{const r=setTimeout(()=>{i(),a(!1)},n),i=I.when(()=>this.jogger.motionStream.rapidlyChangingMotionState.tcp===e,()=>{clearTimeout(r),a(!0)})})}setSelectedOrientation(e){this.selectedOrientation=e}setSelectedIncrementId(e){this.selectedIncrementId=e}setCurrentIncrementJog(e){this.incrementJogInProgress=e}setVelocityFromSlider(e,n){n?this.rotationVelocityDegPerSec=e:this.translationVelocityMmPerSec=e}setSelectedCartesianMotionType(e){this.selectedCartesianMotionType=e}lock(e){this.locks.add(e)}unlock(e){this.locks.delete(e)}block(){this.blocked=!0}unblock(){this.blocked=!1,this.jogger.mode==="jogging"&&this.jogger.initializeJoggingWebsocket()}async withMotionLock(e){const n=ht();this.lock(n);try{return await e()}finally{this.unlock(n)}}}const Yt=D.observer(({store:t,useDegree:e})=>{var c;const{t:n}=B.useTranslation(),a=h.useId(),r=[];function i(s){switch(s){case"coordsys":return n("Jogging.Orientation.coordsys");case"tool":return n("Jogging.Orientation.tool");default:return s}}return t.showCoordSystemSelect&&r.push(o.jsx(ne,{labelId:`jogging-coord-select-${a}`,labelValue:n("Jogging.CoordinateSystem.hlb"),value:t.selectedCoordSystemId,size:"small",variant:"filled",displayEmpty:!0,onChange:s=>t.setSelectedCoordSystemId(s.target.value),disabled:t.isLocked,children:t.coordSystems.map(s=>o.jsx(U,{value:s.coordinate_system,children:s.name&&t.coordSystemCountByName[s.name]>1?`${s.name} / ${s.coordinate_system}`:s.name||s.coordinate_system},s.coordinate_system))},"coord")),t.showTcpSelect&&r.push(o.jsx(ne,{labelId:`jogging-tcp-select-${a}`,labelValue:"TCP",value:t.selectedTcpId,size:"small",variant:"filled",displayEmpty:t.tcpChangeInProgress,onChange:s=>{t.requestTcpChange(s.target.value).catch(l=>{console.error("Failed to change TCP:",l)})},disabled:t.isLocked||t.tcpChangeInProgress,endAdornment:t.tcpChangeInProgress?o.jsx(dt,{position:"end",children:o.jsx(Oe,{size:16})}):void 0,children:t.tcps.map(s=>o.jsx(U,{value:s.id,children:s.id},s.id))},"tcp")),t.showOrientationSelect&&r.push(o.jsx(ne,{labelValue:n("Jogging.Cartesian.Orientation.lb"),labelId:`orientation-select-${a}`,value:t.selectedOrientation,onChange:s=>t.setSelectedOrientation(s.target.value),disabled:t.isLocked,children:Ht.map(s=>o.jsx(U,{value:s,children:i(s)},s))},"orientation")),t.showIncrementSelect&&r.push(o.jsxs(ne,{labelValue:n("Jogging.Increment.hlb"),labelId:`jogging-increment-select-${a}`,size:"small",variant:"filled",value:((c=t.activeDiscreteIncrement)==null?void 0:c.id)||"continuous",onChange:s=>t.setSelectedIncrementId(s.target.value),disabled:t.isLocked,children:[o.jsx(U,{value:"continuous",children:n("Jogging.Increment.Continuous.dd")},"continuous"),t.selectedOrientation==="tool"?null:t.discreteIncrementOptions.map(s=>o.jsx(U,{value:s.id,children:e?`${s.degrees}°`:`${s.mm}mm`},s.id))]},"increment")),o.jsx(v,{component:"div","data-testid":"jogging-options","aria-label":"jogging-options",sx:{display:"grid",gap:"16px",gridTemplateColumns:"1fr 1fr",gridAutoRows:"min-content","& label":{opacity:.7,fontSize:"12px",marginBottom:"4px"}},children:r.map((s,l)=>o.jsx(v,{sx:{gridColumn:r.length%2===1&&l===r.length-1?"span 2":"auto"},children:s},l))})}),Zt=A.styled(mt)(({theme:t})=>{var e;return{"&.MuiToggleButtonGroup-root":{background:(e=t.palette.backgroundPaperElevation)==null?void 0:e[8],borderRadius:"8px",padding:"4px",gap:"4px",button:{border:"none",borderRadius:"4px",flex:"1 1 0px",minWidth:0,"&.MuiToggleButtonGroup-firstButton":{borderRadius:"8px 4px 4px 8px"},"&.MuiToggleButtonGroup-lastButton":{borderRadius:"4px 8px 8px 4px"}}}}}),Ve=D.observer(t=>{var i,c,s;const e=A.useTheme(),{store:n}=t,{t:a}=B.useTranslation();function r(l,g){g===t.velocity||!ft(g)||t.onVelocityChange(g,t.useDegree)}return o.jsxs(_,{direction:"row",gap:2,alignItems:"center","data-testid":"velocity-slider","aria-label":"velocity-slider",children:[n.showVelocityLegend&&o.jsx(R,{sx:{color:(s=(c=(i=e.componentsExt)==null?void 0:i.JoggingPanel)==null?void 0:c.VelocitySlider)==null?void 0:s.sliderLegendColor,fontSize:"14px"},children:a("Jogging.Velocity.bt")}),o.jsx(Ae,{value:t.velocity,color:"secondary",onChange:r,min:t.min,max:t.max,"aria-labelledby":"input-slider",disabled:t.disabled,sx:{"& .MuiSlider-valueLabelOpen":{zIndex:100,backgroundColor:"transparent",top:"0px"}}}),n.showVelocitySliderLabel&&(t.renderValue?t.renderValue(t.velocity):o.jsx(he,{value:t.velocity.toString()}))]})});function he({value:t,sx:e}){var a;const n=A.useTheme();return o.jsx(_,{direction:"row",justifyContent:"center",alignItems:"center",gap:"5px",sx:{padding:"6px 12px",background:(a=n.palette.backgroundPaperElevation)==null?void 0:a[8],borderRadius:"10px",minWidth:"111px",...e},children:o.jsx(R,{component:"span",sx:{textAlign:"right",fontSize:"14px",opacity:.8,color:n.palette.text.primary,whiteSpace:"nowrap"},children:t})})}const qe=D.observer(({store:t,useDegree:e})=>{const{t:n}=B.useTranslation();function a(r,i){return i?`ω = ${n("Jogging.Cartesian.Rotation.velocityDegPerSec.lb",{amount:r})}`:`v = ${n("Jogging.Cartesian.Translation.velocityMmPerSec.lb",{amount:r})}`}return o.jsx(Ve,{store:t,velocity:t.velocityInDisplayUnits(e),min:t.minVelocityInDisplayUnits(e),max:t.maxVelocityInDisplayUnits(e),onVelocityChange:t.setVelocityFromSlider,useDegree:e,disabled:t.isLocked,renderValue:r=>o.jsx(he,{value:a(r,e),sx:{minWidth:"111px",span:{transform:"translateY(-1.5px)"}}})})}),Ne=D.observer(({store:t})=>{var r,i,c;const{t:e}=B.useTranslation(),n=A.useTheme(),a=((c=(i=(r=t.jogger.motionStream.rapidlyChangingMotionState.execute)==null?void 0:r.details)==null?void 0:i.state)==null?void 0:c.kind)??"KIND_UNKNOWN";return o.jsxs(v,{sx:{display:"flex",flexDirection:"row",justifyContent:"space-between",color:n.palette.text.primary},children:[o.jsx(R,{variant:"body2",sx:{fontSize:"0.75rem",lineHeight:1.2},children:e("Jogging.StreamStateSection.lb")}),o.jsx(R,{variant:"body2",sx:{fontSize:"0.75rem",lineHeight:1.2},"data-testid":a,children:e(`Jogging.StreamStateSection.${a}.lb`)})]})}),Xt=D.observer(({store:t,children:e})=>{const{t:n}=B.useTranslation(),a=A.useTheme();function r(d,p){(p==="translate"||p==="rotate")&&t.setSelectedCartesianMotionType(p)}async function i(d,p){const y=await t.activate(),S=y.motionStream.rapidlyChangingMotionState.tcp_pose,f=y.motionStream.rapidlyChangingMotionState.joint_position;S&&await t.withMotionLock(async()=>{try{t.setCurrentIncrementJog({axis:d.axis,direction:d.direction}),await t.jogger.runIncrementalCartesianMotion({currentTcpPose:S,currentJoints:f,coordSystemId:t.activeCoordSystemId,velocityInRelevantUnits:t.selectedCartesianMotionType==="translate"?t.translationVelocityMmPerSec:t.rotationVelocityRadsPerSec,axis:d.axis,direction:d.direction,motion:t.selectedCartesianMotionType==="translate"?{type:"translate",distanceMm:p.mm}:{type:"rotate",distanceRads:J.degreesToRadians(p.degrees)}})}finally{t.setCurrentIncrementJog(null),await t.deactivate()}})}async function c(d){if(!t.isLocked){if(await t.activate(),t.activeDiscreteIncrement)return i(d,t.activeDiscreteIncrement);d.motionType==="translate"?await t.jogger.translateTCP({axis:d.axis,direction:d.direction,velocityMmPerSec:t.translationVelocityMmPerSec}):await t.jogger.rotateTCP({axis:d.axis,direction:d.direction,velocityRadsPerSec:t.rotationVelocityRadsPerSec})}}async function s(){t.isLocked||t.activeDiscreteIncrement||await t.deactivate()}function l(d,p,y){var f,m,j;const S=(j=(m=(f=y.componentsExt)==null?void 0:f.JoggingPanel)==null?void 0:m.JoggingCartesian)==null?void 0:j.Axis;if(S)return p==="translate"?S[d]:S.CustomRotation??S[d]}const g=[{id:"x",icon:o.jsx(W.ForwardRef,{}),colors:l("X",t.selectedCartesianMotionType,a)},{id:"y",icon:o.jsx(W.ForwardRef$1,{}),colors:l("Y",t.selectedCartesianMotionType,a)},{id:"z",icon:o.jsx(W.ForwardRef$2,{}),colors:l("Z",t.selectedCartesianMotionType,a)}];function x(d){return n("General.mm.variable",{amount:d.toFixed(1)})}function u(d){return n("General.degree.variable",{amount:J.radiansToDegrees(d).toFixed(1)})}return o.jsxs(_,{"data-testid":"jogging-cartesian-tab","aria-label":"jogging-cartesian-tab",flexGrow:1,gap:2,sx:{padding:"18px 24px"},children:[o.jsxs(_,{gap:2,children:[o.jsx(Yt,{store:t,useDegree:t.selectedCartesianMotionType==="rotate"}),o.jsx(qe,{store:t,useDegree:t.selectedCartesianMotionType==="rotate"}),o.jsx(q,{})]}),o.jsx(_,{marginLeft:"auto",marginRight:"auto",gap:"24px",justifyContent:"center",sx:{flexGrow:"1"},children:o.jsxs(_,{alignItems:"center",justifyContent:"center",gap:"24px",sx:{flexGrow:1},children:[o.jsxs(Zt,{value:t.selectedCartesianMotionType,onChange:r,exclusive:!0,"aria-label":n("Jogging.Cartesian.MotionType.lb"),sx:{justifyContent:"center"},children:[o.jsx(Te,{value:"translate",children:n("Jogging.Cartesian.Translation.bt")}),o.jsx(Te,{value:"rotate",children:n("Jogging.Cartesian.Rotation.bt")})]}),t.selectedCartesianMotionType==="translate"&&g.map(d=>{var p,y;return o.jsx(ce,{"data-testid":`jogging-cartesian-axis-control-${d.id}`,"aria-label":`jogging-cartesian-axis-control-${d.id}`,colors:d.colors,disabled:t.isLocked,activeJoggingDirection:((p=t.incrementJogInProgress)==null?void 0:p.axis)===d.id?t.incrementJogInProgress.direction:void 0,label:o.jsxs(o.Fragment,{children:[d.icon,o.jsx(R,{sx:{fontSize:"24px",color:((y=d.colors)==null?void 0:y.labelColor)??a.palette.text.primary},children:d.id.toUpperCase()})]}),getDisplayedValue:()=>{var S,f;return x(((f=(S=t.jogger.motionStream.rapidlyChangingMotionState.tcp_pose)==null?void 0:S.position)==null?void 0:f[J.XYZ_TO_VECTOR[d.id]])||0)},startJogging:S=>c({axis:d.id,motionType:"translate",direction:S}),stopJogging:s},d.id)}),t.selectedCartesianMotionType==="rotate"&&g.map(d=>{var p,y;return o.jsx(ce,{"data-testid":`jogging-cartesian-axis-control-${d.id}`,"aria-label":`jogging-cartesian-axis-control-${d.id}`,colors:d.colors,disabled:t.isLocked,activeJoggingDirection:((p=t.incrementJogInProgress)==null?void 0:p.axis)===d.id?t.incrementJogInProgress.direction:void 0,label:o.jsxs(o.Fragment,{children:[o.jsx(W.ForwardRef$6,{}),o.jsx(R,{sx:{fontSize:"24px",color:((y=d.colors)==null?void 0:y.labelColor)??a.palette.text.primary},children:d.id.toUpperCase()})]}),getDisplayedValue:()=>{var S,f;return u(((f=(S=t.jogger.motionStream.rapidlyChangingMotionState.tcp_pose)==null?void 0:S.orientation)==null?void 0:f[J.XYZ_TO_VECTOR[d.id]])||0)},startJogging:S=>c({axis:d.id,motionType:"rotate",direction:S}),stopJogging:s},d.id)})]})}),o.jsx($e,{store:t}),o.jsx(q,{}),o.jsx(Ne,{store:t}),e&&o.jsx(q,{}),e]})}),Qt=D.observer(({store:t,children:e})=>{const n=A.useTheme();async function a(i){await t.activate(),await t.jogger.rotateJoints({joint:i.joint,direction:i.direction,velocityUnit:t.jointType===V.JointTypeEnum.PrismaticJoint?"mm/s":"rad/s",velocityValue:t.jointType===V.JointTypeEnum.PrismaticJoint?t.translationVelocityMmPerSec:t.rotationVelocityRadsPerSec})}async function r(){await t.jogger.stop(),await t.deactivate()}return o.jsxs(_,{"data-testid":"jogging-joint-tab","aria-label":"jogging-joint-tab",flexGrow:1,gap:2,sx:{padding:"18px 24px"},children:[o.jsx(qe,{store:t,useDegree:t.jointType===V.JointTypeEnum.RevoluteJoint}),o.jsx(q,{}),o.jsx(_,{justifyContent:"center",alignItems:"stretch",sx:{flexGrow:"1"},children:o.jsx(_,{"data-testid":"jogging-joint-value-controls-wrapper","aria-label":"jogging-joint-value-controls-wrapper",alignItems:"center",gap:"24px",children:t.jogger.motionStream.joints.map(i=>{var s,l,g;const c=(g=(l=(s=t.motionGroupDescription.operation_limits.auto_limits)==null?void 0:s.joints)==null?void 0:l[i.index])==null?void 0:g.position;return o.jsxs(_,{"data-testid":`jogging-joint-value-control-${i.index}`,"aria-label":`jogging-joint-value-control-${i.index}`,direction:"row",alignItems:"center",justifyContent:"center",spacing:1.5,width:"100%",children:[t.showJointsLegend&&o.jsx(R,{color:t.isLocked?n.palette.text.disabled:n.palette.text.secondary,children:`G${i.index+1}`}),o.jsx(Je,{disabled:t.isLocked,lowerLimit:c==null?void 0:c.lower_limit,upperLimit:c==null?void 0:c.upper_limit,useDegree:t.jointType===V.JointTypeEnum.RevoluteJoint,getValue:()=>{const x=t.jogger.motionStream.rapidlyChangingMotionState.joint_position[i.index];return x!==void 0?x:void 0},startJogging:x=>a({joint:i.index,direction:x}),stopJogging:r})]},`joint-${i.index}`)})})}),o.jsx($e,{store:t}),o.jsx(q,{}),o.jsx(Ne,{store:t}),e&&o.jsx(q,{}),e]})}),Kt=F.externalizeComponent(D.observer(t=>{const e=ue.isString(t.nova)?new V.NovaClient({instanceUrl:t.nova}):t.nova,n=D.useLocalObservable(()=>({joggingStore:null,loadingError:null}));async function a(){I.runInAction(()=>{n.loadingError=null,n.joggingStore=null});try{let r=t.store;if(!r){const i=await re.open(e,t.motionGroupId);r=await ae.loadFor(i)}I.runInAction(()=>{n.joggingStore=r}),t.onSetup&&t.onSetup(r)}catch(r){n.loadingError=r}}return h.useEffect(()=>(a(),t.store?()=>null:()=>{var r;(r=n.joggingStore)==null||r.dispose()}),[t.store,t.nova,t.motionGroupId]),h.useEffect(()=>{const r=n.joggingStore;r&&(t.locked?r.lock("external"):r.unlock("external"))},[n.joggingStore,t.locked]),o.jsx(_,{"data-testid":"jogging-panel","aria-label":"jogging-panel",sx:{maxWidth:"460px",minWidth:"320px",position:"relative",...t.sx},children:n.joggingStore?o.jsx(en,{store:n.joggingStore,children:t.children}):o.jsx(Le,{message:"Loading jogging",error:n.loadingError})})})),en=D.observer(({store:t,children:e})=>{const{t:n}=B.useTranslation();function a(){if(t.currentTab.id==="cartesian")return o.jsx(Xt,{store:t,children:e});if(t.currentTab.id==="joint")return o.jsx(Qt,{store:t,children:e})}return o.jsxs(_,{flexGrow:1,sx:{overflow:"hidden"},children:[o.jsx(_e,{"data-testid":"jogging-tabs","aria-label":"jogging-tabs",value:t.tabIndex,onChange:t.onTabChange,variant:"fullWidth",children:t.tabs.map(r=>{const i=r.label==="Cartesian"?n("Jogging.Cartesian.bt"):n("Jogging.Joints.bt"),c=r.label==="cartesian"?o.jsx(ot,{fontSize:"small",sx:{mr:1}}):o.jsx(it,{fontSize:"small",sx:{mr:1}});return o.jsx(Pe,{"data-testid":`jogging-tab-${r.id}`,"aria-label":`jogging-tab-${r.id}`,label:t.showTabIcons?o.jsxs(_,{direction:"row",alignItems:"center",children:[c,i]}):i,id:`jogging-tab-${r.id}`,"aria-controls":`jogging-tab-${r.id}`},r.id)})}),o.jsx(_,{flexGrow:1,position:"relative",sx:{overflowY:"auto",overflowX:"hidden"},children:a()}),t.blocked&&o.jsx(Wt,{store:t})]})}),We=t=>{var s;const{value:e,ref:n}=t,a=A.useTheme(),[r,i]=h.useState(!1);async function c(){if(!n||!("current"in n))return console.warn("No copy target found"),!1;try{return await navigator.clipboard.writeText(e),console.log("Copied!"),i(!0),!0}catch(l){console.error(l);const g=window.getSelection();if(g&&n&&"current"in n&&n.current){const x=document.createRange();x.selectNodeContents(n.current),g.removeAllRanges(),g.addRange(x)}}return!1}return h.useEffect(()=>{if(!r)return;const l=setTimeout(()=>i(!1),3e3);return()=>{l&&clearTimeout(l)}},[r]),o.jsx(St,{open:r,title:"Copied!",children:o.jsx(_,{justifyContent:"center",sx:{height:"100%",boxSizing:"border-box",padding:"6px 12px",background:(s=a.palette.backgroundPaperElevation)==null?void 0:s[8],borderRadius:"10px",minWidth:"0",cursor:"pointer"},onClick:()=>c(),children:o.jsx(R,{ref:n,align:"center",sx:{pointerEvents:"none",fontSize:"12px",color:a.palette.text.primary,whiteSpace:"nowrap",minWidth:0,textOverflow:"ellipsis",width:"100%",overflow:"hidden"},children:e})})})},tn=F.externalizeComponent(D.observer(({tcpPose:t,showCopyButton:e=!1})=>{const[n,a]=h.useState(null),r=V.poseToWandelscriptString(t),i=async()=>{try{await navigator.clipboard.writeText(r),a("Copied!"),setTimeout(()=>a(null),2e3)}catch{a("Copy failed"),setTimeout(()=>a(null),2e3)}};return o.jsxs(_,{direction:"row",alignItems:"center",spacing:1,sx:{flexGrow:1,minWidth:0,overflow:"hidden"},"data-testid":"pose-cartesian-values",children:[o.jsx(We,{value:r}),e&&o.jsx(H,{variant:"contained",color:"secondary",size:"small",onClick:i,sx:{flexShrink:0},children:n||"Copy"})]})})),nn=F.externalizeComponent(D.observer(({joints:t,showCopyButton:e=!1})=>{const[n,a]=h.useState(null),r=`[${t.map(c=>parseFloat(c.toFixed(4))).join(", ")}]`,i=async()=>{try{await navigator.clipboard.writeText(r),a("Copied!"),setTimeout(()=>a(null),2e3)}catch{a("Copy failed"),setTimeout(()=>a(null),2e3)}};return o.jsxs(_,{direction:"row",alignItems:"center",spacing:1,sx:{flexGrow:1,minWidth:0,overflow:"hidden"},"data-testid":"pose-joint-values",children:[o.jsx(We,{value:r}),e&&o.jsx(H,{variant:"contained",color:"secondary",size:"small",onClick:i,sx:{flexShrink:0},children:n||"Copy"})]})}));class Ge{constructor(){this.messages=[],this.addMessage=(e,n="info")=>{const a={id:Math.random().toString(36).substring(2,11),timestamp:new Date,message:e,level:n};this.messages.push(a)},this.clearMessages=()=>{this.messages=[]},this.addInfo=e=>{this.addMessage(e,"info")},this.addWarning=e=>{this.addMessage(e,"warning")},this.addError=e=>{this.addMessage(e,"error")},this.addDebug=e=>{this.addMessage(e,"debug")},I.makeObservable(this,{messages:I.observable,addMessage:I.action,clearMessages:I.action})}}const K=(t,e,n)=>({id:n||`${Date.now()}-${Math.random().toString(36).substring(2,11)}`,timestamp:new Date,message:t,level:e}),on=(t,e)=>K(t,"debug",e),rn=(t,e)=>K(t,"info",e),an=(t,e)=>K(t,"warning",e),sn=(t,e)=>K(t,"error",e),Ue=F.externalizeComponent(D.observer(t=>{var x;const{messages:e=[],onClear:n,height:a=400,sx:r}=t,i=A.useTheme(),c=h.useRef(null);h.useEffect(()=>{if(e.length===0)return;const u=c.current;if(!u)return;const d=setTimeout(()=>{u.scrollTop=u.scrollHeight},10);return()=>clearTimeout(d)},[e.length]);const s=u=>u.toLocaleTimeString("en-US",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"}),l=u=>{switch(u){case"error":return i.palette.error.main;case"warning":return i.palette.warning.main;case"info":return i.palette.info.main;case"debug":return i.palette.text.disabled;default:return i.palette.text.secondary}},g=({message:u})=>{const[d,p]=h.useState(!1),[y,S]=h.useState(!1),[f,m]=h.useState(!1),j=u.message.length>150,b=async()=>{try{await navigator.clipboard.writeText(u.message),S(!0),setTimeout(()=>S(!1),2e3)}catch(C){console.error("Failed to copy message:",C)}},T=j&&!d?`${u.message.substring(0,150)}...`:u.message;return o.jsx(v,{onMouseEnter:()=>m(!0),onMouseLeave:()=>m(!1),sx:{display:"flex",gap:1,fontFamily:"monospace",flexDirection:"column","&:hover":{backgroundColor:i.palette.action.hover},borderRadius:"4px",padding:"2px 4px",margin:"-2px -4px"},children:o.jsxs(v,{sx:{display:"flex",gap:1},children:[o.jsxs(R,{component:"span",sx:{fontWeight:400,fontSize:"12px",lineHeight:"18px",letterSpacing:"0.4px",color:i.palette.text.disabled,whiteSpace:"nowrap",flexShrink:0},children:["[",s(u.timestamp),"]"]}),o.jsx(R,{component:"span",sx:{fontWeight:400,fontSize:"12px",lineHeight:"18px",letterSpacing:"0.4px",color:l(u.level),wordBreak:"break-word",overflowWrap:"anywhere",hyphens:"auto",flex:1,whiteSpace:"pre-wrap"},children:T}),o.jsxs(v,{sx:{display:"flex",alignItems:"flex-start",gap:.5,opacity:f?1:0,transition:"opacity 0.2s ease-in-out",visibility:f?"visible":"hidden"},children:[o.jsx(G,{size:"small",onClick:b,sx:{padding:"2px",color:i.palette.text.secondary,"&:hover":{backgroundColor:i.palette.action.hover}},title:y?"Copied!":"Copy message",children:o.jsx(jt,{sx:{fontSize:12}})}),j&&o.jsx(G,{size:"small",onClick:()=>p(!d),sx:{padding:"2px",color:i.palette.text.secondary,"&:hover":{backgroundColor:i.palette.action.hover}},title:d?"Collapse":"Expand",children:d?o.jsx(vt,{sx:{fontSize:12}}):o.jsx(Tt,{sx:{fontSize:12}})})]})]})},u.id)};return o.jsxs(wt,{sx:{backgroundColor:((x=i.palette.backgroundPaperElevation)==null?void 0:x[2])||"#171927",backgroundImage:"none",height:a,display:"flex",flexDirection:"column",overflow:"hidden",...r},children:[o.jsxs(v,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"12px 16px"},children:[o.jsxs(v,{sx:{display:"flex",alignItems:"center",gap:1},children:[o.jsx(Ct,{sx:{fontSize:16,color:i.palette.action.active,opacity:.56}}),o.jsx(R,{sx:{fontWeight:500,fontSize:"14px",lineHeight:"143%",letterSpacing:"0.17px",color:i.palette.text.primary},children:"Log"})]}),o.jsx(H,{onClick:n,variant:"text",sx:{fontWeight:500,fontSize:"13px",lineHeight:"22px",letterSpacing:"0.46px",color:i.palette.primary.main,textTransform:"none",minWidth:"auto",padding:"4px 8px","&:hover":{backgroundColor:`${i.palette.primary.main}14`}},children:"Clear"})]}),o.jsx(v,{ref:c,sx:{flex:1,overflow:"auto",padding:"8px 16px",display:"flex",flexDirection:"column",gap:"2px",scrollbarWidth:"thin",scrollbarColor:`${i.palette.divider} transparent`,"&::-webkit-scrollbar":{width:"6px"},"&::-webkit-scrollbar-track":{background:"transparent"},"&::-webkit-scrollbar-thumb":{backgroundColor:i.palette.divider,borderRadius:"3px","&:hover":{backgroundColor:i.palette.divider}}},children:e.length===0?o.jsx(R,{sx:{color:i.palette.text.disabled,fontSize:"12px",fontStyle:"italic",textAlign:"center",marginTop:2},children:"No log messages"}):e.map(u=>o.jsx(g,{message:u},u.id))})]})})),ln=F.externalizeComponent(D.observer(t=>{const{store:e,onStoreReady:n,...a}=t,r=h.useRef(n);h.useEffect(()=>{r.current=n},[n]);const i=h.useMemo(()=>{var l;const s=e||new Ge;return(l=r.current)==null||l.call(r,s),s},[e]),c=()=>{i.clearMessages()};return o.jsx(Ue,{...a,messages:i.messages,onClear:c})}));function cn(){const t=window.location.href;return t.substring(0,t.indexOf("/",t.indexOf("//")+2))}function dn({baseUrl:t=cn(),...e}){return o.jsxs(Mt,{"aria-labelledby":"no-motion-group-modal-title",open:!0,fullWidth:!0,sx:{"& .MuiModal-backdrop":{backdropFilter:"blur(10px)"},"& .MuiDialog-paper":{"::before":{content:'""',height:"8px",width:"100%",background:"linear-gradient(90deg, #FF0E65 0%, #47D3FF 100%)"},background:"#101629"}},children:[o.jsx(Rt,{id:"no-motion-group-modal-title",children:"No motion group found"}),o.jsxs(kt,{sx:{marginTop:"3rem",marginBottom:"1.5rem",textAlign:"center"},children:[o.jsx(R,{color:"#fff",children:"Found no devices to connect to."}),o.jsx(R,{color:"#fff",children:"Please ensure a motion group has been created."})]}),o.jsx(It,{children:o.jsxs(_,{width:"100%",maxWidth:"300px",margin:"auto",marginBottom:"2rem",children:[o.jsx(H,{href:`${t}/settings`,variant:"contained",sx:{borderRadius:"8px",width:"100%"},children:"Go to settings app"}),o.jsx(H,{href:`${t}`,variant:"text",sx:{marginTop:"1rem",color:"#fff",textDecoration:"underline",fontSize:"0.75rem"},children:"Back to Homescreen"})]})})]})}var me=(t=>(t.PRECONDITION_NOT_FULFILLED="PRECONDITION_NOT_FULFILLED",t.ROBOT_DISCONNECTED="ROBOT_DISCONNECTED",t.CELL_OPEN="CELL_OPEN",t.E_STOP="E_STOP",t.MANUAL_MODE="MANUAL_MODE",t.READY="READY",t))(me||{});const He=F.externalizeComponent(D.observer(({setupState:t,className:e})=>{const n=A.useTheme(),{t:a}=B.useTranslation(),r=()=>{var g,x,u,d,p,y,S;switch(t){case"READY":return{label:a("RobotSetupReadinessIndicator.Ready.lb"),indicatorColor:((g=n.palette.tertiary)==null?void 0:g.main)||n.palette.primary.main,backgroundColor:((x=n.palette.backgroundPaperElevation)==null?void 0:x[11])||n.palette.background.paper,textColor:n.palette.secondary.contrastText};case"ROBOT_DISCONNECTED":return{label:a("RobotSetupReadinessIndicator.RobotDisconnected.lb"),indicatorColor:n.palette.error.main,backgroundColor:((u=n.palette.backgroundPaperElevation)==null?void 0:u[11])||n.palette.background.paper,textColor:n.palette.secondary.contrastText};case"CELL_OPEN":return{label:a("RobotSetupReadinessIndicator.CellOpen.lb"),indicatorColor:n.palette.error.main,backgroundColor:((d=n.palette.backgroundPaperElevation)==null?void 0:d[11])||n.palette.background.paper,textColor:n.palette.secondary.contrastText};case"E_STOP":return{label:a("RobotSetupReadinessIndicator.EStop.lb"),indicatorColor:n.palette.error.main,backgroundColor:((p=n.palette.backgroundPaperElevation)==null?void 0:p[11])||n.palette.background.paper,textColor:n.palette.secondary.contrastText};case"MANUAL_MODE":return{label:a("RobotSetupReadinessIndicator.ManualMode.lb"),indicatorColor:n.palette.error.main,backgroundColor:((y=n.palette.backgroundPaperElevation)==null?void 0:y[11])||n.palette.background.paper,textColor:n.palette.secondary.contrastText};default:return{label:a("RobotSetupReadinessIndicator.PreconditionNotFulfilled.lb"),indicatorColor:n.palette.error.main,backgroundColor:((S=n.palette.backgroundPaperElevation)==null?void 0:S[11])||n.palette.background.paper,textColor:n.palette.secondary.contrastText}}},{label:i,indicatorColor:c,backgroundColor:s,textColor:l}=r();return o.jsx(Pt,{className:e,label:o.jsxs(v,{sx:{display:"flex",alignItems:"center",gap:1},children:[o.jsx(v,{sx:{width:8,height:8,borderRadius:"50%",backgroundColor:c,flexShrink:0}}),o.jsx(R,{variant:"body2",sx:{color:l,fontSize:"0.75rem",lineHeight:1.2},children:i})]}),variant:"filled",sx:{backgroundColor:s,color:n.palette.getContrastText(s),fontWeight:500,height:"auto","& .MuiChip-label":{paddingX:1.5,paddingY:.5}}})})),un=F.externalizeComponent(D.observer(({robotName:t,robotType:e,setupState:n,PreconditionComponent:a=He,className:r})=>{var l;const i=A.useTheme(),c=e||"Robot",s=n===me.READY;return o.jsxs(v,{className:r,sx:{border:`1px solid ${i.palette.divider}`,background:((l=i.palette.backgroundPaperElevation)==null?void 0:l[8])||"#292B3F",borderRadius:"8px",padding:"20px",display:"flex",alignItems:"center",justifyContent:"space-between",opacity:1},children:[o.jsxs(v,{sx:{display:"flex",alignItems:"center",gap:2,flex:1},children:[s?o.jsx(v,{sx:{fontSize:24,display:"flex",alignItems:"center",justifyContent:"center",width:24,height:24,"& svg":{fill:`${i.palette.primary.main} !important`},"& svg path":{fill:`${i.palette.primary.main} !important`}},children:o.jsx(W.ForwardRef$5,{})}):o.jsx(Et,{sx:{color:i.palette.error.main,fontSize:24}}),o.jsx(R,{variant:"body1",sx:{fontWeight:500,color:i.palette.text.primary},children:t}),o.jsx(q,{orientation:"vertical",flexItem:!0,sx:{backgroundColor:i.palette.text.secondary,opacity:.3,width:"1px"}}),o.jsx(R,{variant:"body2",sx:{color:i.palette.text.secondary},children:c})]}),a&&o.jsx(a,{setupState:n})]})})),gn=A.styled(_t,{shouldForwardProp:t=>t!=="selected"})(({theme:t})=>{var e,n,a;return{borderRadius:"20px","&:hover":{background:(e=t.palette.backgroundPaperElevation)==null?void 0:e[7]},variants:[{props:({selected:r})=>!r,style:{background:(n=t.palette.backgroundPaperElevation)==null?void 0:n[0],color:t.palette.action.disabled,"> img":{opacity:.4}}},{props:({selected:r})=>r,style:{background:(a=t.palette.backgroundPaperElevation)==null?void 0:a[11],border:`1px solid ${t.palette.divider}`,color:t.palette.primary.contrastText}}]}}),pn=t=>{const{ref:e,...n}=t;return o.jsx(gn,{ref:e,selected:t.selected,...n,color:"secondary",variant:"circular"})};function hn(t){const{children:e,value:n,index:a,...r}=t;return o.jsx("div",{role:"tabpanel",hidden:n!==a,id:`tabpanel-${a}`,"aria-labelledby":`tab-${a}`,...r,children:n===a&&o.jsx(v,{children:e})})}function mn({children:t,...e}){const{fullWidth:n,indicator:a,onChange:r,orientation:i,scrollButtons:c,selectionFollowsFocus:s,textColor:l,value:g,variant:x,...u}=e;return o.jsx(v,{...u,children:t})}const fn=F.externalizeComponent(D.observer(t=>{const{items:e,activeTab:n,defaultActiveTab:a=0,onTabChange:r,sx:i,ref:c}=t,s=n!==void 0,[l,g]=h.useState(a),x=s?n:l;h.useEffect(()=>{s||e.length!==0&&(l<0||l>e.length-1)&&g(0)},[e.length,s,l]);const u=(d,p)=>{s||g(p),r==null||r(p)};return o.jsxs(v,{ref:c,sx:{height:"100%",display:"flex",flexDirection:"column",...i},children:[o.jsx(v,{sx:{px:0,py:0,overflow:"visible",position:"relative",paddingTop:d=>d.spacing(2),paddingRight:d=>d.spacing(2.5)},children:o.jsx(_e,{value:x,onChange:u,sx:{minHeight:"32px",backgroundColor:"transparent",overflow:"visible","& .MuiTabs-indicator":{display:"none"},"& .MuiTabs-flexContainer":{gap:2,overflow:"visible",paddingTop:0,paddingBottom:0},"& .MuiTabs-scroller":{overflow:"visible !important"},"& .MuiTab-root":{overflow:"visible"}},children:e.map((d,p)=>{var T,C,w;const y=()=>{if(!d.badge)return;const k=d.badge.content,E=d.badge.max;return typeof k=="number"&&E&&k>E?`${E}+`:k},S=()=>{if(!d.badge)return!1;const k=d.badge.content,E=d.badge.showZero;return!(k===0&&!E)},f=y(),m=S(),j=()=>{s||g(p),r==null||r(p)},b=o.jsx(Pe,{label:d.label,icon:d.icon,iconPosition:"start",disableRipple:!0,onClick:j,sx:{minHeight:"32px",height:"32px",padding:"0px 10px",borderRadius:"12px",backgroundColor:k=>{var E;return((E=k.palette.backgroundPaperElevation)==null?void 0:E[11])||"#32344B"},color:"text.primary",opacity:x===p?1:.38,fontSize:"13px",transition:"all 0.2s ease-in-out",position:"relative",overflow:"visible","&:hover":{opacity:x===p?1:.6},"&.Mui-selected":{opacity:1,backgroundColor:k=>{var E;return((E=k.palette.backgroundPaperElevation)==null?void 0:E[11])||"#32344B"},color:"text.primary"},"&:focus":{outline:"none"},"&:active":{transform:"none"}}},d.id);return m?o.jsx(mn,{component:"span",sx:{display:"inline-flex"},children:o.jsx(Ot,{badgeContent:f,color:((T=d.badge)==null?void 0:T.color)||"error",max:(C=d.badge)==null?void 0:C.max,showZero:(w=d.badge)==null?void 0:w.showZero,anchorOrigin:{vertical:"top",horizontal:"right"},overlap:"rectangular",sx:{"& .MuiBadge-badge":{opacity:"1 !important"}},children:b})},d.id):b})})}),o.jsx(v,{sx:{mt:d=>d.spacing(2),borderBottom:1,borderColor:"divider"}}),o.jsx(v,{sx:{flex:1,overflow:"auto"},children:e.map((d,p)=>o.jsx(hn,{value:x,index:p,children:d.content},d.id))})]})})),xn=t=>{const e=Math.floor(t/86400),n=Math.floor(t%86400/3600),a=Math.floor(t%3600/60),r=t%60,i=[];return e>0?(i.push(e.toString()),i.push(n.toString().padStart(2,"0")),i.push(a.toString().padStart(2,"0")),i.push(r.toString().padStart(2,"0"))):n>0?(i.push(n.toString()),i.push(a.toString().padStart(2,"0")),i.push(r.toString().padStart(2,"0"))):(i.push(a.toString()),i.push(r.toString().padStart(2,"0"))),i.join(":")},ke=(t,e)=>{const n=Math.floor(t/86400),a=Math.floor(t%86400/3600),r=Math.floor(t%3600/60),i=t%60;if(typeof Intl<"u"&&"DurationFormat"in Intl)try{const s={};return n>0&&(s.days=n),a>0&&(s.hours=a),r>0&&(s.minutes=r),(i>0||Object.keys(s).length===0)&&(s.seconds=i),new Intl.DurationFormat(e,{style:"narrow"}).format(s)}catch{}const c=[];return n>0&&c.push(`${n}d`),a>0&&c.push(`${a}h`),r>0&&c.push(`${r}m`),(i>0||c.length===0)&&c.push(`${i}s`),c.join(" ")},bn=({timerState:t,animationState:e,hasError:n,className:a})=>{const{t:r}=B.useTranslation(),i=A.useTheme(),{elapsedTime:c,currentProgress:s}=t,{showErrorAnimation:l,showPauseAnimation:g,showMainText:x}=e;return o.jsxs(v,{className:a,sx:{position:"relative",width:264,height:264,display:"flex",alignItems:"center",justifyContent:"center"},children:[o.jsx(At.Gauge,{width:264,height:264,value:s,valueMin:0,valueMax:100,innerRadius:"85%",outerRadius:"100%",margin:0,skipAnimation:!0,text:()=>"",sx:{opacity:g||l?.6:1,transition:"opacity 0.5s ease-out","& .MuiGauge-valueArc":{fill:n?i.palette.error.light:i.palette.success.main,transition:"fill 0.5s ease-out"},"& .MuiGauge-referenceArc":{fill:"#171927",stroke:"transparent",strokeWidth:0,transition:"fill 0.5s ease-out, stroke 0.5s ease-out, stroke-width 0.5s ease-out"},"& .MuiGauge-valueText":{display:"none"},"& .MuiGauge-text":{display:"none"}}}),o.jsx(v,{sx:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",width:225,height:225,borderRadius:"50%",backgroundColor:"#292B3F",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",textAlign:"center",gap:1,transition:"background-color 0.5s ease-out"},children:o.jsxs(v,{sx:{position:"relative",height:"48px",display:"flex",alignItems:"center",justifyContent:"center",marginBottom:.5},children:[o.jsx(N,{in:x&&n,timeout:200,children:o.jsx(R,{variant:"h6",sx:{position:"absolute",fontSize:"16px",fontWeight:500,color:i.palette.error.light},children:r("timer.error")})}),o.jsx(N,{in:x&&!n,timeout:300,children:o.jsx(R,{variant:"h1",sx:{position:"absolute",fontSize:"48px",fontWeight:500,color:i.palette.text.primary,lineHeight:1,letterSpacing:"-0.5px"},children:xn(c)})})]})})]})},yn=({timerState:t,animationState:e,hasError:n,compact:a,className:r})=>{const{t:i,i18n:c}=B.useTranslation(),s=A.useTheme(),{elapsedTime:l,currentProgress:g}=t,{showErrorAnimation:x,showPauseAnimation:u}=e;return a?o.jsx(v,{className:r,sx:{display:"flex",alignItems:"center",m:0},children:o.jsx(R,{variant:"body2",sx:{color:n?s.palette.error.light:s.palette.text.primary,fontSize:"14px",transition:"color 0.5s ease-out"},children:n?i("timer.error"):ke(l,c.language)})}):o.jsxs(v,{className:r,sx:{display:"flex",alignItems:"center",m:0,gap:1},children:[o.jsx(v,{sx:{width:20,height:20,display:"flex",alignItems:"center",justifyContent:"center",opacity:u||x?.6:1,transition:"opacity 0.5s ease-out"},children:o.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 20 20",style:{transform:"rotate(-90deg)"},role:"img","aria-label":"Timer progress",children:[o.jsx("circle",{cx:"10",cy:"10",r:"8",fill:"none",stroke:n?s.palette.error.light:s.palette.success.main,strokeWidth:"2",opacity:.3,style:{transition:"stroke 0.8s ease-in-out, opacity 2s ease-in-out"}}),o.jsx("circle",{cx:"10",cy:"10",r:"8",fill:"none",stroke:n?s.palette.error.light:s.palette.success.main,strokeWidth:"2",strokeLinecap:"round",strokeDasharray:`${2*Math.PI*8}`,strokeDashoffset:`${2*Math.PI*8*(1-g/100)}`,style:{transition:"stroke-dashoffset 0.1s ease-out, stroke 0.8s ease-in-out, opacity 2s ease-in-out"}})]})}),o.jsx(R,{variant:"body2",sx:{color:n?s.palette.error.light:s.palette.text.primary,fontSize:"14px",lineHeight:"normal",letterSpacing:"normal",transition:"color 0.8s ease-in-out, font-size 0.3s ease-out, opacity 2s ease-in-out"},children:n?i("timer.error"):ke(l,c.language)})]})},Sn=()=>{const[t,e]=h.useState({showPauseAnimation:!1,showErrorAnimation:!1,showMainText:!0}),n=h.useRef(null),a=h.useRef(null),r=h.useRef(null),i=h.useCallback(()=>{e(u=>({...u,showPauseAnimation:!0})),n.current&&clearTimeout(n.current),n.current=setTimeout(()=>{e(u=>({...u,showPauseAnimation:!1}))},800)},[]),c=h.useCallback(()=>{e(u=>({...u,showErrorAnimation:!0})),a.current&&clearTimeout(a.current),a.current=setTimeout(()=>{e(u=>({...u,showErrorAnimation:!1}))},600)},[]),s=h.useCallback(()=>{e(u=>({...u,showErrorAnimation:!1})),a.current&&clearTimeout(a.current)},[]),l=h.useCallback(()=>{e(u=>({...u,showMainText:!1})),r.current&&clearTimeout(r.current),r.current=setTimeout(()=>{e(u=>({...u,showMainText:!0}))},200)},[]),g=h.useCallback(()=>{e(u=>({...u,showMainText:!0}))},[]),x=h.useCallback(()=>{n.current&&clearTimeout(n.current),a.current&&clearTimeout(a.current),r.current&&clearTimeout(r.current)},[]);return{animationState:t,triggerPauseAnimation:i,triggerErrorAnimation:c,clearErrorAnimation:s,triggerFadeTransition:l,setInitialAnimationState:g,cleanup:x}},jn=({autoStart:t,hasError:e,onPauseAnimation:n,onErrorAnimation:a,onClearErrorAnimation:r})=>{const[i,c]=h.useState({elapsedTime:0,isRunning:!1,isPausedState:!1,currentProgress:0,wasRunningBeforeError:!1}),s=h.useRef(null),l=h.useRef(null),g=h.useRef(0),x=h.useRef(0),[u]=Q.useInterpolation([0],{tension:80,friction:18,onChange:([m])=>{c(j=>({...j,currentProgress:m}))}}),d=h.useCallback((m=0)=>{const j=m/60%1*100;c(b=>({...b,elapsedTime:m,isPausedState:!1,currentProgress:j})),g.current=0,x.current=j,u.setImmediate([j]),t?(l.current=Date.now()-m*1e3,c(b=>({...b,isRunning:!0}))):l.current=null},[t,u]),p=h.useCallback(()=>{if(l.current&&i.isRunning){const j=(Date.now()-l.current)/1e3+g.current,b=j/60%1*100;u.setTarget([b]),c(T=>({...T,elapsedTime:Math.floor(j)}))}c(m=>({...m,isRunning:!1,isPausedState:!0})),n()},[i.isRunning,u,n]),y=h.useCallback(()=>{i.isPausedState&&(g.current=i.elapsedTime,l.current=Date.now(),c(m=>({...m,isRunning:!0,isPausedState:!1})))},[i.isPausedState,i.elapsedTime]),S=h.useCallback(()=>{c(m=>({...m,elapsedTime:0,isRunning:!1,isPausedState:!1,currentProgress:0})),g.current=0,l.current=null,x.current=0,u.setImmediate([0])},[u]),f=h.useCallback(()=>i.isPausedState,[i.isPausedState]);return h.useEffect(()=>{e?(i.isRunning&&(c(m=>({...m,wasRunningBeforeError:!0})),p()),a()):(i.wasRunningBeforeError&&!i.isRunning&&(c(m=>({...m,wasRunningBeforeError:!1})),y()),r())},[e,i.isRunning,i.wasRunningBeforeError,p,y,a,r]),h.useEffect(()=>{if(i.isRunning){const m=()=>{if(l.current){const b=(Date.now()-l.current)/1e3+g.current,T=b/60%1*100;c(w=>({...w,elapsedTime:Math.floor(b)})),Math.abs(T-x.current)>.1&&(u.setTarget([T]),x.current=T)}s.current=requestAnimationFrame(m)};s.current=requestAnimationFrame(m)}else s.current&&(cancelAnimationFrame(s.current),s.current=null);return()=>{s.current&&(cancelAnimationFrame(s.current),s.current=null)}},[i.isRunning,u]),h.useEffect(()=>{let m=null;const j=()=>{u.update(),m=requestAnimationFrame(j)};return m=requestAnimationFrame(j),()=>{m&&cancelAnimationFrame(m)}},[u]),{timerState:i,controls:{start:d,pause:p,resume:y,reset:S,isPaused:f}}},Cn=F.externalizeComponent(D.observer(({onTimerReady:t,autoStart:e=!0,variant:n="default",compact:a=!1,className:r,hasError:i=!1})=>{const{animationState:c,triggerPauseAnimation:s,triggerErrorAnimation:l,clearErrorAnimation:g,setInitialAnimationState:x,cleanup:u}=Sn(),{timerState:d,controls:p}=jn({autoStart:e,hasError:i,onPauseAnimation:s,onErrorAnimation:l,onClearErrorAnimation:g});return h.useEffect(()=>{x()},[x]),h.useEffect(()=>{let y=!0;const S=setTimeout(()=>{y&&t(p)},0);return()=>{y=!1,clearTimeout(S)}},[t,p]),h.useEffect(()=>u,[u]),n==="small"?o.jsx(yn,{timerState:d,animationState:c,hasError:i,compact:a,className:r}):o.jsx(bn,{timerState:d,animationState:c,hasError:i,className:r})})),Re=1e-4,vn={a:0,d:0,alpha:0,theta:0,reverse_rotation_direction:!1};class oe{constructor(e,n,a,r,i,c,s,l,g,x){this.nova=e,this.controller=n,this.motionGroup=a,this.initialMotionState=r,this.motionStateSocket=i,this.isVirtual=c,this.tcps=s,this.description=l,this.initialControllerState=g,this.controllerStateSocket=x,this.connectedJoggingSocket=null,this.joggingVelocity=10,this.activationState="inactive",this.rapidlyChangingMotionState=r,this.controllerState=g,x.addEventListener("message",u=>{var p;const d=(p=J.tryParseJson(u.data))==null?void 0:p.result;d&&I.runInAction(()=>{this.controllerState=d})}),i.addEventListener("message",u=>{var p;const d=(p=J.tryParseJson(u.data))==null?void 0:p.result;if(!d)throw new Error(`Failed to get motion state for ${this.motionGroupId}: ${u.data}`);ge(this.rapidlyChangingMotionState.joint_position,d.joint_position,Re)||I.runInAction(()=>{this.rapidlyChangingMotionState.joint_position=d.joint_position}),pe(this.rapidlyChangingMotionState,d,Re)||I.runInAction(()=>{this.rapidlyChangingMotionState.tcp_pose=d.tcp_pose}),d.tcp!==void 0&&this.rapidlyChangingMotionState.tcp!==d.tcp&&I.runInAction(()=>{this.rapidlyChangingMotionState.tcp=d.tcp}),this.rapidlyChangingMotionState.standstill!==d.standstill&&I.runInAction(()=>{this.rapidlyChangingMotionState.standstill=d.standstill})}),I.makeAutoObservable(this)}static async connectMultiple(e,n){return Promise.all(n.map(a=>oe.connect(e,a)))}static async connect(e,n){var m,j;const[a,r]=n.split("@"),i=await e.api.controller.getCurrentRobotControllerState(r),c=i==null?void 0:i.motion_groups.find(b=>b.motion_group===n);if(!i||!c)throw new Error(`Controller ${r} or motion group ${n} not found`);const s=e.openReconnectingWebsocket(`/controllers/${r}/motion-groups/${n}/state-stream`),l=await s.firstMessage(),g=(m=J.tryParseJson(l.data))==null?void 0:m.result;if(!g)throw new Error(`Unable to parse initial motion state message ${l.data}`);console.log(`Connected motion state websocket to motion group ${c.motion_group}. Initial state:
|
|
3
|
-
`,g);const u=(await e.api.controller.getRobotController(i.controller)).configuration.kind==="VirtualController",d=await e.api.motionGroup.getMotionGroupDescription(r,c.motion_group),p=Object.entries(d.tcps||{}).map(([b,T])=>({id:b,readable_name:T.name,position:T.pose.position,orientation:T.pose.orientation})),y=e.openReconnectingWebsocket(`/controllers/${i.controller}/state-stream?response_rate=1000`),S=await y.firstMessage(),f=(j=J.tryParseJson(S.data))==null?void 0:j.result;if(!f)throw new Error(`Unable to parse initial controller state message ${S.data}`);return console.log(`Connected controller state websocket to controller ${i.controller}. Initial state:
|
|
4
|
-
`,f),new oe(e,i,c,g,s,u,p,d,f,y)}get motionGroupId(){return this.motionGroup.motion_group}get controllerId(){return this.controller.controller}get modelFromController(){return this.description.motion_group_model}get joggingVelocityRads(){return this.joggingVelocity*Math.PI/180}get joints(){return this.initialMotionState.joint_position.map((e,n)=>({index:n}))}get dhParameters(){if(this.description.dh_parameters!==void 0)return this.description.dh_parameters.map(e=>({...vn,...e}))}get safetyZones(){return this.description.safety_zones}get mountingPosition(){var e,n,a;return this.description.mounting?[(((e=this.description.mounting.position)==null?void 0:e[0])||0)/1e3,(((n=this.description.mounting.position)==null?void 0:n[1])||0)/1e3,(((a=this.description.mounting.position)==null?void 0:a[2])||0)/1e3]:[0,0,0]}get mountingQuaternion(){var r,i,c,s,l,g;const e=new we.Vector3(((i=(r=this.description.mounting)==null?void 0:r.orientation)==null?void 0:i[0])||0,((s=(c=this.description.mounting)==null?void 0:c.orientation)==null?void 0:s[1])||0,((g=(l=this.description.mounting)==null?void 0:l.orientation)==null?void 0:g[2])||0),n=e.length(),a=e.normalize();return new we.Quaternion().setFromAxisAngle(a,n)}get isEstopActive(){return["SAFETY_STATE_ROBOT_EMERGENCY_STOP","SAFETY_STATE_DEVICE_EMERGENCY_STOP"].includes(this.controllerState.safety_state)}get isMoveableSafetyState(){return["SAFETY_STATE_NORMAL","SAFETY_STATE_REDUCED"].includes(this.controllerState.safety_state)}get isMoveableOperationMode(){return["OPERATION_MODE_AUTO","OPERATION_MODE_MANUAL","OPERATION_MODE_MANUAL_T1","OPERATION_MODE_MANUAL_T2"].includes(this.controllerState.operation_mode)}get canBeMoved(){return this.isMoveableSafetyState&&this.isMoveableOperationMode&&this.activationState==="active"}async deactivate(){if(this.activationState!=="active"){console.error("Tried to deactivate while already deactivating");return}I.runInAction(()=>{this.activationState="deactivating"});try{await this.nova.api.controller.setDefaultMode(this.controllerId,"ROBOT_SYSTEM_MODE_MONITOR"),I.runInAction(()=>{this.activationState="inactive"})}catch(e){throw I.runInAction(()=>{this.activationState="active"}),e}}async activate(){if(this.activationState!=="inactive"){console.error("Tried to activate while already activating");return}I.runInAction(()=>{this.activationState="activating"});try{await this.nova.api.controller.setDefaultMode(this.controllerId,"ROBOT_SYSTEM_MODE_CONTROL"),I.runInAction(()=>{this.activationState="active"})}catch(e){throw I.runInAction(()=>{this.activationState="inactive"}),e}}toggleActivation(){this.activationState==="inactive"?this.activate():this.activationState==="active"&&this.deactivate()}dispose(){this.motionStateSocket.close(),this.connectedJoggingSocket&&this.connectedJoggingSocket.close()}setJoggingVelocity(e){this.joggingVelocity=e}}function Ye(){var e,n,a,r,i,c;const t=A.createTheme({palette:{mode:"dark",text:{primary:"rgba(255, 255, 255, 1)",secondary:"rgba(255, 255, 255, 0.7)",disabled:"rgba(255, 255, 255, 0.38)"},primary:{main:"rgba(142, 86, 252, 1)",dark:"rgba(136, 58, 255, 1)",light:"rgba(157, 131, 246, 1)",contrastText:"rgba(255, 255, 255, 0.87)"},secondary:{main:"rgba(255, 255, 255, 1)",dark:"rgba(255, 255, 255, 0.06)",contrastText:"rgba(255, 255, 255, 0.87)"},tertiary:{main:"rgba(100, 255, 218, 1)",dark:"rgba(38, 166, 154, 1)",light:"rgba(167, 255, 235, 1)",contrastText:"rgba(0, 0, 0, 1)"},error:{main:"rgba(239, 83, 80, 1)",dark:"rgba(229, 57, 53, 1)",light:"rgba(239, 154, 154, 1)",contrastText:"rgba(255, 255, 255, 1)"},warning:{main:"rgba(255, 171, 64, 1)",dark:"rgba(255, 145, 0, 1)",light:"rgba(255, 209, 128, 1)",contrastText:"rgba(0, 0, 0, 0.87)"},success:{main:"rgba(38, 166, 154, 1)",dark:"rgba(0, 121, 107, 1)",light:"rgba(128, 203, 196, 1)",contrastText:"rgba(255, 255, 255, 0.87)"},background:{default:"rgba(2, 6, 23, 1)",paper:"rgba(17, 19, 31, 1)"},action:{active:"rgba(255, 255, 255, 0.56)",hover:"rgba(255, 255, 255, 0.08)",selected:"rgba(255, 255, 255, 0.16)",disabledBackground:"rgba(255, 255, 255, 0.12)",focus:"rgba(255, 255, 255, 0.12)",disabled:"rgba(255, 255, 255, 0.38)"},common:{white:"rgba(255, 255, 255, 1)",black:"rgba(0, 0, 0, 1)"},divider:"rgba(255, 255, 255, 0.12)",backgroundPaperElevation:{0:"rgba(17,19,31,1.0)",1:"rgba(20,22,35,1.0)",2:"rgba(23,25,39,1.0)",3:"rgba(26,28,43,1.0)",4:"rgba(29,31,47,1.0)",5:"rgba(32,34,51,1.0)",6:"rgba(35,37,55,1.0)",7:"rgba(38,40,59,1.0)",8:"rgba(41,43,63,1.0)",9:"rgba(44,46,67,1.0)",10:"rgba(47,49,71,1.0)",11:"rgba(50,52,75,1.0)",12:"rgba(53,55,79,1.0)",13:"rgba(56,58,83,1.0)",14:"rgba(59,61,87,1.0)",15:"rgba(62,64,91,1.0)",16:"rgba(57,63,87,1.0)"}},paletteExt:{primary:{hover:"rgba(142, 86, 252, 0.08)",selected:"rgba(142, 86, 252, 0.16)",focus:"rgba(142, 86, 252, 0.12)",focusVisible:"rgba(142, 86, 252, 0.3)",outlineBorder:"rgba(142, 86, 252, 0.5)"},secondary:{tonal:"rgba(255,255,255,0.1)"}}});return{...t,components:{MuiCssBaseline:{styleOverrides:{"html, body, *":{scrollbarWidth:"none",msOverflowStyle:"none"},"html:hover, body:hover, *:hover":{scrollbarWidth:"thin",scrollbarColor:`${t.palette.divider} transparent`},".MuiDataGrid-panelContent":{borderRadius:"16px !important","& .MuiPaper-root":{borderRadius:"16px !important"}},".MuiDataGrid-filterForm":{borderRadius:"16px !important","& .MuiInputBase-root":{borderRadius:"16px !important","& fieldset":{borderRadius:"16px !important"},"& .MuiOutlinedInput-notchedOutline":{borderRadius:"16px !important"}},"& .MuiTextField-root":{"& .MuiInputBase-root":{borderRadius:"16px !important","& fieldset":{borderRadius:"16px !important"},"& .MuiOutlinedInput-notchedOutline":{borderRadius:"16px !important"}}}},".MuiDataGrid-filterFormValueInput":{"& .MuiInputBase-root":{borderRadius:"16px !important","& fieldset":{borderRadius:"16px !important"},"& .MuiOutlinedInput-notchedOutline":{borderRadius:"16px !important"}}}}},MuiDataGrid:{styleOverrides:{root:{},panelContent:{borderRadius:"16px !important"},filterForm:{"& .MuiInputBase-root":{borderRadius:"10px !important","& fieldset":{borderRadius:"10px !important"},"& .MuiOutlinedInput-notchedOutline":{borderRadius:"10px !important"}}},filterFormValueInput:{"& .MuiInputBase-root":{borderRadius:"10px !important","& fieldset":{borderRadius:"10px !important"},"& .MuiOutlinedInput-notchedOutline":{borderRadius:"10px !important"}}}}},MuiButton:{styleOverrides:{root:{textTransform:"none",borderRadius:"10px"}},variants:[{props:{color:"secondary",variant:"contained"},style:{border:`1px solid ${t.palette.divider}`,background:(a=(n=(e=t.paletteExt)==null?void 0:e.secondary)==null?void 0:n.tonal)==null?void 0:a.toString()}},{props:{color:"secondary",variant:"outlined"},style:{border:`1px solid ${t.palette.divider}`}}]},MuiTab:{styleOverrides:{root:{textTransform:"none",color:t.palette.text.secondary,"&.Mui-selected":{color:t.palette.text.primary}}}},MuiTabs:{styleOverrides:{root:{background:(r=t.palette.backgroundPaperElevation)==null?void 0:r[1]}}},MuiToggleButtonGroup:{styleOverrides:{root:{".MuiToggleButtonGroup-firstButton":{borderRadius:"10px 0 0 10px"},".MuiToggleButtonGroup-lastButton":{borderRadius:"0 10px 10px 0"}}}},MuiToggleButton:{styleOverrides:{root:{textTransform:"none",padding:"6px 16px"}}},MuiSelect:{variants:[{props:{variant:"filled"},style:{borderRadius:"10px","::before, ::after":{visibility:"collapse"},".MuiInputBase-input":{padding:"6px 16px",borderRadius:"10px"}}}]},MuiDrawer:{styleOverrides:{paper:{border:"none",boxShadow:"4px 0 8px -4px rgba(0, 0, 0, 0.3)"}}},MuiFab:{styleOverrides:{root:{background:(c=(i=t.paletteExt)==null?void 0:i.secondary)==null?void 0:c.tonal}},variants:[{props:{color:"primary"},style:{background:t.palette.primary.main}}]}},componentsExt:{JoggingPanel:{JoggingCartesian:{Axis:{X:{backgroundColor:"rgba(215, 66, 56, 1)",borderColor:"rgba(215, 66, 56, 1)",buttonBackgroundColor:{default:"rgba(241, 77, 66, 1)",pressed:"rgba(138, 41, 35, 1)",hovered:"rgba(241, 77, 66, 1)",disabled:"rgba(241, 77, 66, 1)"},color:"rgba(255, 198, 198, 1)",labelColor:t.palette.text.primary},Y:{backgroundColor:"rgba(20, 151, 108, 1)",borderColor:"rgba(20, 151, 108, 1)",buttonBackgroundColor:{default:"rgba(28, 188, 135, 1)",pressed:"rgba(11, 89, 63, 1)",disabled:"rgba(28, 188, 135, 1)",hovered:"rgba(28, 188, 135, 1)"},color:"rgba(215, 255, 242, 1)",labelColor:t.palette.text.primary},Z:{backgroundColor:"rgba(1, 87, 155, 1)",borderColor:"rgba(1, 87, 155, 1)",buttonBackgroundColor:{default:"rgba(2, 136, 209, 1)",pressed:"rgba(2, 64, 114, 1)",disabled:"rgba(2, 136, 209, 1)",hovered:"rgba(2, 136, 209, 1)"},color:"rgba(210, 239, 255, 1)",labelColor:t.palette.text.primary}}},JoggingJoint:{Joint:{arrowColor:t.palette.text.primary}},VelocitySlider:{sliderLegendColor:t.palette.text.primary}}}}}function Tn(){const t=Ye();return t.palette.mode="light",t}function wn(t){var a,r,i,c;let e=!0;((a=t.palette)==null?void 0:a.mode)==="light"?e=!1:((r=t.palette)==null?void 0:r.mode)!=="dark"&&(e=!(typeof window<"u"&&((c=(i=window.matchMedia)==null?void 0:i.call(window,"(prefers-color-scheme: light)"))==null?void 0:c.matches)));const n=e?Ye():Tn();return A.createTheme(n,t)}exports.AppHeader=Ft;exports.ConnectedMotionGroup=oe;exports.CycleTimer=Nt;exports.JoggerConnection=re;exports.JoggingCartesianAxisControl=ce;exports.JoggingJointValueControl=Je;exports.JoggingPanel=Kt;exports.JoggingStore=ae;exports.LoadingCover=Le;exports.LoadingErrorMessage=ze;exports.LogPanel=ln;exports.LogStore=Ge;exports.LogViewer=Ue;exports.MotionStreamConnection=ie;exports.NoMotionGroupModal=dn;exports.PoseCartesianValues=tn;exports.PoseJointValues=nn;exports.RobotListItem=un;exports.RobotSetupReadinessIndicator=He;exports.RobotSetupReadinessState=me;exports.SelectableFab=pn;exports.TabBar=fn;exports.Timer=Cn;exports.VelocitySlider=Ve;exports.VelocitySliderLabel=he;exports.WandelbotsDataGrid=De;exports.createDebugMessage=on;exports.createErrorMessage=sn;exports.createInfoMessage=rn;exports.createLogMessage=K;exports.createNovaMuiTheme=wn;exports.createWarningMessage=an;exports.jointValuesEqual=ge;exports.poseEqual=Fe;exports.tcpMotionEqual=pe;exports.unwrapRotationVector=Be;
|