@wandelbots/wandelbots-js-react-components 6.0.0-pr.docs-remove-outdated-refs.623.2d4b028 → 6.0.0-pr.motion-smoothing-config.624.f0bfa13
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/dist/3d.cjs +1 -1
- package/dist/3d.d.ts +1 -0
- package/dist/3d.js +13 -10
- package/dist/chunks/MotionGroupVisualizer-Cdruoxq4.cjs +1 -0
- package/dist/chunks/{MotionGroupVisualizer-BRec-k-p.js → MotionGroupVisualizer-DqUGHRK7.js} +445 -444
- package/dist/chunks/{interpolation-DG8VTxzS.js → interpolation-jnKIUiIm.js} +5 -5
- package/dist/chunks/{theming-B2dYJ4Ca.js → theming-AUvtT-C3.js} +1 -1
- package/dist/components/robots/LinearAxisAnimator.d.ts +9 -1
- package/dist/components/robots/RobotAnimator.d.ts +8 -0
- package/dist/components/robots/SupportedLinearAxis.d.ts +9 -1
- package/dist/components/robots/SupportedRobot.d.ts +9 -1
- package/dist/components/utils/interpolation.d.ts +32 -1
- package/dist/core.js +2 -2
- package/dist/index.cjs +1 -1
- package/dist/index.js +50 -50
- package/package.json +1 -1
- package/dist/chunks/MotionGroupVisualizer-zDM0Lgd-.cjs +0 -1
|
@@ -17,7 +17,7 @@ import ce from "@mui/material/SvgIcon";
|
|
|
17
17
|
import q from "@mui/material/Fade";
|
|
18
18
|
import { Gauge as de } from "@mui/x-charts/Gauge";
|
|
19
19
|
import { useTranslation as N } from "react-i18next";
|
|
20
|
-
import {
|
|
20
|
+
import { u as Wt, f as xt } from "./interpolation-jnKIUiIm.js";
|
|
21
21
|
import ue from "@mui/icons-material/Clear";
|
|
22
22
|
import ge from "@mui/icons-material/FilterList";
|
|
23
23
|
import Pt from "@mui/icons-material/Search";
|
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
import type { DHParameter, MotionGroupState } from "@wandelbots/nova-js/v2";
|
|
2
2
|
import type React from "react";
|
|
3
3
|
import type { Object3D } from "three";
|
|
4
|
+
import { type MotionInterpolatorFactory } from "../utils/interpolation";
|
|
4
5
|
type LinearAxisAnimatorProps = {
|
|
5
6
|
rapidlyChangingMotionState: MotionGroupState;
|
|
6
7
|
dhParameters: DHParameter[];
|
|
7
8
|
onTranslationChanged?: (joints: Object3D[], jointValues: number[]) => void;
|
|
9
|
+
/**
|
|
10
|
+
* Strategy used to interpolate joint values towards each incoming motion
|
|
11
|
+
* state. Defaults to spring smoothing via {@link ValueInterpolator}. Provide a
|
|
12
|
+
* custom {@link MotionInterpolatorFactory} to tune the spring, follow the
|
|
13
|
+
* streamed pose exactly (no smoothing), or plug in any other behaviour.
|
|
14
|
+
*/
|
|
15
|
+
createInterpolator?: MotionInterpolatorFactory;
|
|
8
16
|
children: React.ReactNode;
|
|
9
17
|
};
|
|
10
|
-
export default function LinearAxisAnimator({ rapidlyChangingMotionState, dhParameters, onTranslationChanged, children, }: LinearAxisAnimatorProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export default function LinearAxisAnimator({ rapidlyChangingMotionState, dhParameters, onTranslationChanged, createInterpolator, children, }: LinearAxisAnimatorProps): import("react/jsx-runtime").JSX.Element;
|
|
11
19
|
export {};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { DHParameter, MotionGroupState } from "@wandelbots/nova-js/v2";
|
|
2
2
|
import type React from "react";
|
|
3
3
|
import type { Object3D } from "three";
|
|
4
|
+
import { type MotionInterpolatorFactory } from "../utils/interpolation";
|
|
4
5
|
export type RobotAnimatorHandle = {
|
|
5
6
|
/**
|
|
6
7
|
* Re-scan the robot group for joints and re-apply the current pose.
|
|
@@ -14,6 +15,13 @@ type RobotAnimatorProps = {
|
|
|
14
15
|
rapidlyChangingMotionState: MotionGroupState;
|
|
15
16
|
dhParameters: DHParameter[];
|
|
16
17
|
onRotationChanged?: (joints: Object3D[], jointValues: number[]) => void;
|
|
18
|
+
/**
|
|
19
|
+
* Strategy used to interpolate joint values towards each incoming motion
|
|
20
|
+
* state. Defaults to spring smoothing via {@link ValueInterpolator}. Provide a
|
|
21
|
+
* custom {@link MotionInterpolatorFactory} to tune the spring, follow the
|
|
22
|
+
* streamed pose exactly (no smoothing), or plug in any other behaviour.
|
|
23
|
+
*/
|
|
24
|
+
createInterpolator?: MotionInterpolatorFactory;
|
|
17
25
|
children: React.ReactNode;
|
|
18
26
|
};
|
|
19
27
|
declare const RobotAnimator: React.ForwardRefExoticComponent<RobotAnimatorProps & React.RefAttributes<RobotAnimatorHandle>>;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ThreeElements } from "@react-three/fiber";
|
|
2
2
|
import type { DHParameter, MotionGroupState } from "@wandelbots/nova-js/v2";
|
|
3
3
|
import type * as THREE from "three";
|
|
4
|
+
import type { MotionInterpolatorFactory } from "../utils/interpolation";
|
|
4
5
|
export type DHLinearAxisProps = {
|
|
5
6
|
rapidlyChangingMotionState: MotionGroupState;
|
|
6
7
|
dhParameters: Array<DHParameter>;
|
|
@@ -14,6 +15,13 @@ export type SupportedLinearAxisProps = {
|
|
|
14
15
|
getModel?: (modelFromController: string, instanceUrl?: string) => Promise<string> | undefined;
|
|
15
16
|
postModelRender?: () => void;
|
|
16
17
|
transparentColor?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Strategy used to interpolate joint values towards each incoming motion
|
|
20
|
+
* state. Defaults to spring smoothing; provide a custom
|
|
21
|
+
* {@link MotionInterpolatorFactory} to tune the spring, follow the streamed
|
|
22
|
+
* pose exactly (no smoothing), or plug in any other behaviour.
|
|
23
|
+
*/
|
|
24
|
+
createInterpolator?: MotionInterpolatorFactory;
|
|
17
25
|
} & ThreeElements["group"];
|
|
18
|
-
export declare const SupportedLinearAxis: ({ rapidlyChangingMotionState, modelFromController, dhParameters, getModel, flangeRef, postModelRender, transparentColor, instanceUrl, ...props }: SupportedLinearAxisProps) => import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
export declare const SupportedLinearAxis: ({ rapidlyChangingMotionState, modelFromController, dhParameters, getModel, flangeRef, postModelRender, transparentColor, instanceUrl, createInterpolator, ...props }: SupportedLinearAxisProps) => import("react/jsx-runtime").JSX.Element;
|
|
19
27
|
export default SupportedLinearAxis;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ThreeElements } from "@react-three/fiber";
|
|
2
2
|
import type { DHParameter, MotionGroupState } from "@wandelbots/nova-js/v2";
|
|
3
3
|
import type * as THREE from "three";
|
|
4
|
+
import type { MotionInterpolatorFactory } from "../utils/interpolation";
|
|
4
5
|
export type DHRobotProps = {
|
|
5
6
|
rapidlyChangingMotionState: MotionGroupState;
|
|
6
7
|
dhParameters: Array<DHParameter>;
|
|
@@ -14,6 +15,13 @@ export type SupportedRobotProps = {
|
|
|
14
15
|
getModel?: (modelFromController: string, instanceUrl?: string) => Promise<string> | undefined;
|
|
15
16
|
postModelRender?: () => void;
|
|
16
17
|
transparentColor?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Strategy used to interpolate joint values towards each incoming motion
|
|
20
|
+
* state. Defaults to spring smoothing; provide a custom
|
|
21
|
+
* {@link MotionInterpolatorFactory} to tune the spring, follow the streamed
|
|
22
|
+
* pose exactly (no smoothing), or plug in any other behaviour.
|
|
23
|
+
*/
|
|
24
|
+
createInterpolator?: MotionInterpolatorFactory;
|
|
17
25
|
} & ThreeElements["group"];
|
|
18
|
-
export declare const SupportedRobot: ({ rapidlyChangingMotionState, modelFromController, dhParameters, getModel, flangeRef, postModelRender, transparentColor, instanceUrl, ...props }: SupportedRobotProps) => import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
export declare const SupportedRobot: ({ rapidlyChangingMotionState, modelFromController, dhParameters, getModel, flangeRef, postModelRender, transparentColor, instanceUrl, createInterpolator, ...props }: SupportedRobotProps) => import("react/jsx-runtime").JSX.Element;
|
|
19
27
|
export default SupportedRobot;
|
|
@@ -52,7 +52,38 @@ export interface InterpolationOptions {
|
|
|
52
52
|
/** Callback when interpolation reaches target values */
|
|
53
53
|
onComplete?: (values: number[]) => void;
|
|
54
54
|
}
|
|
55
|
-
|
|
55
|
+
/**
|
|
56
|
+
* Minimal contract a per-frame value interpolator must fulfil to drive robot
|
|
57
|
+
* joint animation. This is the seam the visualizer components animate against —
|
|
58
|
+
* {@link ValueInterpolator} is the default implementation, but consumers can
|
|
59
|
+
* supply their own strategy (no smoothing, a different spring, easing, a Kalman
|
|
60
|
+
* filter, …) via {@link MotionInterpolatorFactory}.
|
|
61
|
+
*/
|
|
62
|
+
export interface MotionInterpolator {
|
|
63
|
+
/** Set the new target values the interpolator should move towards. */
|
|
64
|
+
setTarget(values: number[]): void;
|
|
65
|
+
/**
|
|
66
|
+
* Advance the interpolation by `delta` seconds and return `true` once the
|
|
67
|
+
* current values have settled at the target (so the caller can stop
|
|
68
|
+
* requesting frames until the next target arrives).
|
|
69
|
+
*/
|
|
70
|
+
update(delta: number): boolean;
|
|
71
|
+
/** Current interpolated values to apply to the scene this frame. */
|
|
72
|
+
getCurrentValues(): number[];
|
|
73
|
+
/** Optional cleanup hook invoked when the owning component unmounts. */
|
|
74
|
+
destroy?(): void;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Produces a {@link MotionInterpolator} seeded with the robot's initial joint
|
|
78
|
+
* values. The visualizer calls this once per mount; return a fresh instance so
|
|
79
|
+
* each robot owns its own interpolation state.
|
|
80
|
+
*
|
|
81
|
+
* The factory is read once when the animator mounts, so pass a stable reference
|
|
82
|
+
* (module-level function or memoized) rather than an inline closure that changes
|
|
83
|
+
* every render.
|
|
84
|
+
*/
|
|
85
|
+
export type MotionInterpolatorFactory = (initialValues: number[]) => MotionInterpolator;
|
|
86
|
+
export declare class ValueInterpolator implements MotionInterpolator {
|
|
56
87
|
private currentValues;
|
|
57
88
|
private targetValues;
|
|
58
89
|
private previousTargetValues;
|
package/dist/core.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { A as o, b as s, u as t, C as r, v as n, d as i, e as g, f as l, J as u, h as c, i as d, j as m, L as p, p as M, M as S, N as b, P as C, g as V, R as L, r as P, q as f, S as J, T as R, s as x, V as T, t as A, W as I, l as y, o as E, m as q, k as v, a as N, c as h, n as w, w as F, x as G, y as W, z as j } from "./chunks/theming-
|
|
2
|
-
import { a as D, P as k, b as z, V as H,
|
|
1
|
+
import { A as o, b as s, u as t, C as r, v as n, d as i, e as g, f as l, J as u, h as c, i as d, j as m, L as p, p as M, M as S, N as b, P as C, g as V, R as L, r as P, q as f, S as J, T as R, s as x, V as T, t as A, W as I, l as y, o as E, m as q, k as v, a as N, c as h, n as w, w as F, x as G, y as W, z as j } from "./chunks/theming-AUvtT-C3.js";
|
|
2
|
+
import { a as D, P as k, b as z, V as H, f as K, d as O, u as Q, c as U, e as X } from "./chunks/interpolation-jnKIUiIm.js";
|
|
3
3
|
import { i as Z } from "./chunks/externalizeComponent-EDymnaGR.js";
|
|
4
4
|
import { S as $ } from "./chunks/SafetyBar-Cy9DiXp9.js";
|
|
5
5
|
export {
|
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-Cdruoxq4.cjs"),t=require("./chunks/interpolation-C9sLsved.cjs"),e=require("./chunks/theming-BwZXb5-H.cjs"),r=require("./chunks/externalizeComponent-OO4jcrz5.cjs"),a=require("./chunks/SafetyBar-DPrv_OQA.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.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.AdornedTextField=e.AdornedTextField;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.createNovaTheme=e.createNovaTheme;exports.createWarningMessage=e.createWarningMessage;exports.jointValuesEqual=e.jointValuesEqual;exports.poseEqual=e.poseEqual;exports.tcpMotionEqual=e.tcpMotionEqual;exports.unwrapRotationVector=e.unwrapRotationVector;exports.i18n=r.i18n;exports.SafetyBar=a.SafetyBar;
|
package/dist/index.js
CHANGED
|
@@ -1,71 +1,71 @@
|
|
|
1
|
-
import { C as o, L as s, M as t, h as r, P as n, b as i, R as g, S as l, c as u, f as d, T as c, a as p, d as M, e as S, g as m } from "./chunks/MotionGroupVisualizer-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { C as o, L as s, M as t, h as r, P as n, b as i, R as g, S as l, c as u, f as d, T as c, a as p, d as M, e as S, g as m } from "./chunks/MotionGroupVisualizer-DqUGHRK7.js";
|
|
2
|
+
import { a as f, P as R, b, V as x, f as L, d as V, u as A, c as P, e as T } from "./chunks/interpolation-jnKIUiIm.js";
|
|
3
|
+
import { A as J, b as y, u as I, C as G, v as N, d as v, e as F, f as h, J as q, h as j, i as w, j as D, L as H, p as W, M as z, N as B, P as O, g as U, R as _, r as k, q as Z, S as K, T as Q, s as X, V as Y, t as $, W as aa, l as ea, o as oa, m as sa, k as ta, a as ra, c as na, n as ia, w as ga, x as la, y as ua, z as da } from "./chunks/theming-AUvtT-C3.js";
|
|
4
4
|
import { i as pa } from "./chunks/externalizeComponent-EDymnaGR.js";
|
|
5
5
|
import { S as Sa } from "./chunks/SafetyBar-Cy9DiXp9.js";
|
|
6
6
|
export {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
J as AdornedTextField,
|
|
8
|
+
y as AppHeader,
|
|
9
9
|
o as CollisionSceneRenderer,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
I as ConnectedMotionGroup,
|
|
11
|
+
G as CycleTimer,
|
|
12
|
+
N as JoggerConnection,
|
|
13
|
+
v as JoggingCartesianAxisControl,
|
|
14
|
+
F as JoggingJointValueControl,
|
|
15
|
+
h as JoggingPanel,
|
|
16
|
+
q as JoggingStore,
|
|
17
17
|
s as LinearAxis,
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
j as LoadingCover,
|
|
19
|
+
w as LoadingErrorMessage,
|
|
20
|
+
D as LogPanel,
|
|
21
|
+
H as LogStore,
|
|
22
|
+
W as LogViewer,
|
|
23
23
|
t as MANUFACTURER_HOME_CONFIGS,
|
|
24
24
|
r as MotionGroupVisualizer,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
z as MotionStreamConnection,
|
|
26
|
+
B as NoMotionGroupModal,
|
|
27
|
+
O as PoseCartesianValues,
|
|
28
|
+
U as PoseJointValues,
|
|
29
29
|
n as PresetEnvironment,
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
f as ProgramControl,
|
|
31
|
+
R as ProgramState,
|
|
32
|
+
b as ProgramStateIndicator,
|
|
33
33
|
i as Robot,
|
|
34
34
|
g as RobotCard,
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
_ as RobotListItem,
|
|
36
|
+
k as RobotSetupReadinessIndicator,
|
|
37
|
+
Z as RobotSetupReadinessState,
|
|
38
38
|
Sa as SafetyBar,
|
|
39
39
|
l as SafetyZonesRenderer,
|
|
40
|
-
|
|
40
|
+
K as SelectableFab,
|
|
41
41
|
u as SupportedLinearAxis,
|
|
42
42
|
d as SupportedRobot,
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
Q as TabBar,
|
|
44
|
+
X as Timer,
|
|
45
45
|
c as TrajectoryRenderer,
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
46
|
+
x as ValueInterpolator,
|
|
47
|
+
Y as VelocitySlider,
|
|
48
|
+
$ as VelocitySliderLabel,
|
|
49
|
+
aa as WandelbotsDataGrid,
|
|
50
|
+
ea as createDebugMessage,
|
|
51
|
+
oa as createErrorMessage,
|
|
52
|
+
sa as createInfoMessage,
|
|
53
|
+
ta as createLogMessage,
|
|
54
|
+
ra as createNovaMuiTheme,
|
|
55
|
+
na as createNovaTheme,
|
|
56
|
+
ia as createWarningMessage,
|
|
57
57
|
p as defaultAxisConfig,
|
|
58
58
|
M as defaultGetModel,
|
|
59
59
|
S as extractManufacturer,
|
|
60
60
|
m as getDefaultHomeConfig,
|
|
61
61
|
pa as i18n,
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
62
|
+
ga as jointValuesEqual,
|
|
63
|
+
la as poseEqual,
|
|
64
|
+
ua as tcpMotionEqual,
|
|
65
|
+
da as unwrapRotationVector,
|
|
66
|
+
L as useAnimationFrame,
|
|
67
|
+
V as useAutorun,
|
|
68
|
+
A as useInterpolation,
|
|
69
|
+
P as useMounted,
|
|
70
|
+
T as useReaction
|
|
71
71
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wandelbots/wandelbots-js-react-components",
|
|
3
|
-
"version": "6.0.0-pr.
|
|
3
|
+
"version": "6.0.0-pr.motion-smoothing-config.624.f0bfa13",
|
|
4
4
|
"description": "React UI toolkit for building applications on top of the Wandelbots platform",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const e=require("react/jsx-runtime"),b=require("three"),O=require("three-stdlib"),l=require("react"),L=require("./externalizeComponent-OO4jcrz5.cjs"),M=require("@react-three/drei"),he=require("@mui/material/styles"),v=require("@mui/material/Box"),X=require("@mui/material/Button"),me=require("@mui/material/Card"),Z=require("@mui/material/Divider"),K=require("@mui/material/Typography"),k=require("@react-three/fiber"),xe=require("mobx-react-lite"),ye=require("react-i18next"),E=require("./interpolation-C9sLsved.cjs"),R=require("@wandelbots/nova-js/v2"),ee=require("react-error-boundary");function ge(t){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const r in t)if(r!=="default"){const o=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(n,r,o.get?o:{enumerable:!0,get:()=>t[r]})}}return n.default=t,Object.freeze(n)}const w=ge(b);function je(t){switch(t.shape_type){case"convex_hull":return new O.ConvexGeometry(t.vertices.map(r=>new w.Vector3(r[0]/1e3,r[1]/1e3,r[2]/1e3)));case"box":return new w.BoxGeometry(t.size_x/1e3,t.size_y/1e3,t.size_z/1e3);case"sphere":return new w.SphereGeometry(t.radius/1e3);case"capsule":return new w.CapsuleGeometry(t.radius/1e3,t.cylinder_height/1e3);case"cylinder":return new w.CylinderGeometry(t.radius/1e3,t.radius/1e3,t.height/1e3);case"rectangle":return new w.BoxGeometry(t.size_x/1e3,t.size_y/1e3,0);default:return console.warn(`${t.shape_type} is not supported`),new w.BufferGeometry}}function be({name:t,collider:n,children:r}){var d,c;const o=((d=n.pose)==null?void 0:d.position)??[0,0,0],a=((c=n.pose)==null?void 0:c.orientation)??[0,0,0];return n.margin&&console.warn(`${t} margin is not supported`),e.jsx("mesh",{name:t,position:new w.Vector3(o[0],o[1],o[2]).divideScalar(1e3),rotation:new w.Euler(a[0],a[1],a[2],"XYZ"),geometry:je(n.shape),children:r})}function we({name:t,colliders:n,meshChildrenProvider:r,...o}){return e.jsx("group",{name:t,...o,children:Object.entries(n).map(([a,d])=>e.jsx(be,{name:a,collider:d,children:r(a,d)},a))})}function Re({scene:t,meshChildrenProvider:n}){const r=t.colliders;return e.jsx("group",{children:r&&e.jsx(we,{meshChildrenProvider:n,colliders:r})})}function D(){return e.jsx(M.Environment,{frames:1,children:e.jsx(ve,{})})}const Me=[2,0,2,0,2,0,2,0];function ve({positions:t=Me}){return e.jsxs(e.Fragment,{children:[e.jsx(M.Lightformer,{intensity:5,"rotation-x":Math.PI/2,position:[0,5,-9],scale:[10,10,1]}),e.jsx("group",{rotation:[0,.5,0],children:e.jsx("group",{children:t.map((n,r)=>e.jsx(M.Lightformer,{form:"circle",intensity:5,rotation:[Math.PI/2,0,0],position:[n,4,r*4],scale:[3,1,1]},r))})}),e.jsx(M.Lightformer,{intensity:40,"rotation-y":Math.PI/2,position:[-5,1,-1],scale:[20,.1,1]}),e.jsx(M.Lightformer,{intensity:20,"rotation-y":-Math.PI,position:[-5,-2,-1],scale:[20,.1,1]}),e.jsx(M.Lightformer,{"rotation-y":Math.PI/2,position:[-5,-1,-1],scale:[20,.5,1],intensity:5}),e.jsx(M.Lightformer,{"rotation-y":-Math.PI/2,position:[10,1,0],scale:[20,1,1],intensity:10}),e.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 Se({safetyZones:t,dhParameters:n,...r}){const o=l.useMemo(()=>L.dhParametersToPlaneSize(n??[]),[n]),a=(c,s)=>{var p,y;if(!((p=s==null?void 0:s.pose)!=null&&p.position)||!((y=s==null?void 0:s.pose)!=null&&y.orientation))return null;const g=new w.Vector3(s.pose.position[0]/1e3,s.pose.position[1]/1e3,s.pose.position[2]/1e3),i=new w.Vector3(s.pose.orientation[0],s.pose.orientation[1],s.pose.orientation[2]);let m;const u=s.shape.shape_type==="plane"?{...z,side:w.DoubleSide}:{...z,side:w.FrontSide};switch(s.shape.shape_type){case"plane":m=e.jsx("planeGeometry",{args:[o,o]});break;case"sphere":{const x=(s==null?void 0:s.shape).radius/1e3;m=e.jsx("sphereGeometry",{args:[x]});break}case"capsule":{const x=(s==null?void 0:s.shape).radius/1e3,f=(s==null?void 0:s.shape).cylinder_height/1e3;m=e.jsx("capsuleGeometry",{args:[x,f]});break}case"convex_hull":{const x=(s==null?void 0:s.shape).vertices.map(h=>new w.Vector3(h[0]/1e3,h[1]/1e3,h[2]/1e3)),f=L.verticesToCoplanarity(x);if(f.isCoplanar&&f.normal){const j=new w.Vector3().addVectors(x[0],f.normal.multiplyScalar(1e-4));x.push(j)}try{m=e.jsx("primitive",{object:new O.ConvexGeometry(x),attach:"geometry"})}catch(h){return console.log("Error creating ConvexGeometry:",h),null}break}case"rectangular_capsule":{const x=s.shape,f=x.radius/1e3,h=x.sphere_center_distance_x/1e3,j=x.sphere_center_distance_y/1e3,S=f*2;m=e.jsx("primitive",{object:new O.RoundedBoxGeometry(h,j,S,2,f),attach:"geometry"});break}default:console.warn("Unsupported safety zone shape type:",s.shape.shape_type),m=null}return e.jsxs("mesh",{renderOrder:c,position:g,quaternion:L.orientationToQuaternion(i),children:[m,e.jsx("meshStandardMaterial",{...u,polygonOffsetFactor:-c})]},`safety-zone-${s.shape.shape_type}-${c}`)},d=l.useMemo(()=>Object.values(t??{}).map((c,s)=>a(s,c)),[t,o]);return e.jsx("group",{...r,children:d})}function _e({trajectory:t,...n}){const r=(t==null?void 0:t.map(o=>{if(o.position&&o.position.length>=3){const[a,d,c]=o.position;if(Number.isFinite(a)&&Number.isFinite(d)&&Number.isFinite(c))return new w.Vector3(a/1e3,c/1e3,-d/1e3)}return null}).filter(o=>o!==null))||[];return e.jsx("group",{...n,children:r.length>0&&e.jsx(M.Line,{points:r,lineWidth:3,polygonOffset:!0,polygonOffsetFactor:10,polygonOffsetUnits:10})})}const V=new Map;async function G(t,n){if(V.has(t))return V.get(t);const r=(async()=>{var c;const o=n||"",a=new R.Nova({instanceUrl:o}),d=a.api.motionGroupModels;(c=d.axios)!=null&&c.interceptors&&d.axios.interceptors.request.use(s=>{var g;return(g=s.url)!=null&&g.includes("/glb")&&(s.responseType="blob"),s});try{const s=await a.api.motionGroupModels.getMotionGroupGlbModel(t);return URL.createObjectURL(s)}catch(s){throw console.error("Failed to fetch model:",s),s}})();return V.set(t,r),r}function te(t){function n(r){return r.children.length===0?[r]:[r,...r.children.flatMap(o=>n(o))]}return n(t).filter(r=>ne(r))}function re(t){return t.name.endsWith("_FLG")}function ne(t){return/_J[0-9]+$/.test(t.name)}function Te(t,n){let r;function o(a){if(re(a)){if(r)throw Error(`Found multiple flange groups in robot model ${n}; first ${r.name} then ${a.name}. Only one _FLG group is allowed.`);r=a}ne(a),a.children.map(o)}if(o(t.scene),!r)throw Error(`No flange group found in robot model ${n}. Flange must be identified with a name ending in _FLG.`);return{gltf:t}}const se=l.forwardRef(function({rapidlyChangingMotionState:n,dhParameters:r,onRotationChanged:o,children:a},d){const c=l.useRef(null),s=l.useRef([]),g=l.useRef(null),{invalidate:i}=k.useThree(),m=l.useRef(n);m.current=n,l.useEffect(()=>{const f=n.joint_position.filter(h=>h!==void 0);return g.current=new E.ValueInterpolator(f,{tension:120,friction:20,threshold:.001}),()=>{var h;(h=g.current)==null||h.destroy()}},[]),k.useFrame((f,h)=>{if(!g.current)return;s.current.length===0&&c.current&&p();const j=g.current.update(h);y(),j||i()});function u(f){c.current=f,f&&p()}function p(){c.current&&(s.current=te(c.current),y(),i())}l.useImperativeHandle(d,()=>({recollectJoints:p}));function y(){var h;const f=((h=g.current)==null?void 0:h.getCurrentValues())||[];if(o)o(s.current,f);else for(const[j,S]of s.current.entries()){const T=r[j],F=T.theta||0,B=T.reverse_rotation_direction?-1:1;S.rotation.y=B*(f[j]||0)+F}}function x(f){var j;const h=f.joint_position.filter(S=>S!==void 0);(j=g.current)==null||j.setTarget(h),i()}return E.useAutorun(()=>{x(m.current)}),l.useEffect(()=>{x(n)},[n]),e.jsx("group",{ref:u,children:a})}),Le="line",ke="mesh";function Ee({rapidlyChangingMotionState:t,dhParameters:n,...r}){const o=new b.Matrix4,a=l.useRef([]),d=l.useRef([]);l.useEffect(()=>{a.current=new Array(n.length).fill(null),d.current=new Array(n.length).fill(null)},[n.length]);function c(i,m){const u=new b.Vector3,p=new b.Quaternion,y=new b.Vector3;o.decompose(u,p,y);const x=u.clone(),f=new b.Matrix4().makeRotationY(i.theta+m*(i.reverse_rotation_direction?-1:1)).multiply(new b.Matrix4().makeTranslation(0,i.d/1e3,0)).multiply(new b.Matrix4().makeTranslation(i.a/1e3,0,0)).multiply(new b.Matrix4().makeRotationX(i.alpha));return o.multiply(f),o.decompose(u,p,y),{a:x,b:u}}function s(i,m,u,p){if(!n)return;const y=n[i];if(!y)return;const{a:x,b:f}=c(y,p);m.geometry.setPositions([x.toArray(),f.toArray()].flat()),u.position.set(f.x,f.y,f.z)}function g(i,m){o.identity();for(let u=0;u<Math.min(i.length,m.length);u++){const p=a.current[u],y=d.current[u];p&&y&&s(u,p,y,m[u])}}return e.jsx(se,{rapidlyChangingMotionState:t,dhParameters:n,onRotationChanged:g,children:e.jsxs("group",{...r,name:"Scene",children:[e.jsxs("mesh",{children:[e.jsx("sphereGeometry",{args:[.01,32,32]}),e.jsx("meshStandardMaterial",{color:"black",depthTest:!0})]}),n==null?void 0:n.map((i,m)=>{const{a:u,b:p}=c(i,t.joint_position[m]??0),y=`dhrobot_J0${m}`;return e.jsxs("group",{name:y,children:[e.jsx(M.Line,{ref:x=>{a.current[m]=x},name:Le,points:[u,p],color:"white",lineWidth:5}),e.jsxs("mesh",{ref:x=>{d.current[m]=x},name:ke,position:p,children:[e.jsx("sphereGeometry",{args:[.01,32,32]}),e.jsx("meshStandardMaterial",{color:"black",depthTest:!0})]},`mesh_${m}`)]},y)})]})})}const Ge=console.warn;function oe(){return l.useEffect(()=>{console.warn=t=>{t!=="Cannot call the manual advancement of rafz whilst frameLoop is not set as demand"&&Ge(t)}},[]),null}function Ce(t){return t.type==="Mesh"}function Ie({url:t,flangeRef:n,postModelRender:r,...o}){const a=M.useGLTF(t),c=Te(a,"robot.glb").gltf,s=l.useCallback(i=>{i&&r&&r()},[r]);function g(i){try{return Ce(i)?i.geometry?e.jsx("mesh",{name:i.name,geometry:i.geometry,material:i.material,position:i.position,rotation:i.rotation},i.uuid):e.jsx("group",{name:i.name,position:i.position,rotation:i.rotation},i.uuid):e.jsx("group",{name:i.name,position:i.position,rotation:i.rotation,ref:re(i)?n:void 0,children:i.children.map(g)},i.uuid)}catch(m){return console.warn("Error rendering node",i.name,m),null}}return e.jsx("group",{...o,dispose:null,ref:s,children:g(c.scene)})}function ie({modelURL:t,flangeRef:n,postModelRender:r,...o}){const[a,d]=l.useState(null);return l.useEffect(()=>{let c=!1;return(async()=>{try{const g=typeof t=="string"?t:await t;c||d(i=>i===g?i:g)}catch(g){console.error("Failed to resolve model URL:",g)}})(),()=>{c=!0}},[t]),a?e.jsx(Ie,{url:a,flangeRef:n,postModelRender:r,...o}):null}const ae=(t,n)=>{t.userData.isGhost||(t.traverse(r=>{if(r instanceof w.Mesh){r.material instanceof w.Material&&(r.material.colorWrite=!1);const o=r.clone(),a=r.clone();o.material=new w.MeshStandardMaterial({depthTest:!0,depthWrite:!0,colorWrite:!1,polygonOffset:!0,polygonOffsetFactor:-1,side:w.DoubleSide}),o.userData.isGhost=!0,a.material=new w.MeshStandardMaterial({color:n,opacity:.3,depthTest:!0,depthWrite:!1,transparent:!0,polygonOffset:!0,polygonOffsetFactor:-2,side:w.DoubleSide}),a.userData.isGhost=!0,r.parent&&(r.parent.add(o),r.parent.add(a))}}),t.userData.isGhost=!0)},ce=t=>{if(!t.userData.isGhost)return;const n=[];t.traverse(r=>{var o;r instanceof w.Mesh&&((o=r.userData)!=null&&o.isGhost?n.push(r):r.material instanceof w.Material&&(r.material.colorWrite=!0))}),n.forEach(r=>{r.parent&&r.parent.remove(r)}),t.userData.isGhost=!1},J=L.externalizeComponent(({rapidlyChangingMotionState:t,modelFromController:n,dhParameters:r,getModel:o=G,flangeRef:a,postModelRender:d,transparentColor:c,instanceUrl:s,...g})=>{const[i,m]=l.useState(null),u=l.useRef(null),p=l.useCallback(h=>{m(h)},[]),y=l.useCallback(()=>{var h;(h=u.current)==null||h.recollectJoints(),d==null||d()},[d]);l.useEffect(()=>{i&&(c?ae(i,c):ce(i))},[i,c]);const x=l.useMemo(()=>{const h=o(n,s);if(!h)throw new Error(`No model found for robot "${n}". Ensure the model is available or provide a custom getModel function.`);return h},[n,s,o]),f=e.jsx(Ee,{rapidlyChangingMotionState:t,dhParameters:r,...g});return e.jsxs(ee.ErrorBoundary,{fallback:f,onError:h=>{console.warn(h)},children:[e.jsx(l.Suspense,{fallback:f,children:e.jsx("group",{ref:p,children:e.jsx(se,{ref:u,rapidlyChangingMotionState:t,dhParameters:r,children:e.jsx(ie,{modelURL:x,postModelRender:y,flangeRef:a,...g})})})}),e.jsx(oe,{})]})});function ue({connectedMotionGroup:t,getModel:n=G,flangeRef:r,transparentColor:o,postModelRender:a,...d}){return t.dhParameters?e.jsx(J,{rapidlyChangingMotionState:t.rapidlyChangingMotionState,modelFromController:t.modelFromController||"",dhParameters:t.dhParameters,getModel:n,flangeRef:r,transparentColor:o,postModelRender:a,...d}):null}const Ae=L.externalizeComponent(xe.observer(({robotName:t,programState:n,safetyState:r,operationMode:o,driveToHomeEnabled:a=!1,onDriveToHomePress:d,onDriveToHomeRelease:c,connectedMotionGroup:s,robotComponent:g=ue,customContentComponent:i,className:m})=>{var H;const u=he.useTheme(),{t:p}=ye.useTranslation(),[y,x]=l.useState(!1),f=l.useRef(null),h=l.useRef(null),[j,S]=l.useState(!1),[T,F]=l.useState({width:400,height:600}),[B,pe]=l.useState(0);l.useEffect(()=>{const P=()=>{if(h.current){const{offsetWidth:Y,offsetHeight:Q}=h.current;S(Y>Q),F({width:Y,height:Q})}};P();const $=new ResizeObserver(P);return h.current&&$.observe(h.current),()=>{$.disconnect()}},[]);const N=l.useCallback(()=>{pe(P=>P+1)},[]),C=l.useCallback(()=>{!a||!d||(x(!0),d())},[a,d]),I=l.useCallback(()=>{!a||!c||(x(!1),c())},[a,c]),W=l.useCallback(()=>{y&&c&&(x(!1),c())},[y,c]),_=j?T.width<350:T.height<200,A=j?T.height<310:T.height<450;return e.jsx(me,{ref:h,className:m,sx:{width:"100%",height:"100%",display:"flex",flexDirection:j?"row":"column",position:"relative",overflow:"hidden",minWidth:{xs:180,sm:220,md:250},minHeight:j?{xs:200,sm:240,md:260}:{xs:150,sm:180,md:220},border:`1px solid ${u.palette.divider}`,borderRadius:"18px",boxShadow:"none",backgroundColor:((H=u.palette.backgroundPaperElevation)==null?void 0:H[8])||"#292B3F",backgroundImage:"none"},children:j?e.jsxs(e.Fragment,{children:[e.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:!_&&e.jsxs(k.Canvas,{orthographic:!0,camera:{position:[3,2,3],zoom:1},shadows:!0,frameloop:"demand",style:{borderRadius:u.shape.borderRadius,width:"100%",height:"100%",background:"transparent",position:"absolute",top:0,left:0},dpr:[1,2],gl:{alpha:!0,antialias:!0},children:[e.jsx(D,{}),e.jsx(M.Bounds,{fit:!0,observe:!0,margin:1,maxDuration:1,children:e.jsx(g,{connectedMotionGroup:s,postModelRender:N})})]})}),e.jsxs(v,{sx:{flex:"1",display:"flex",flexDirection:"column",justifyContent:"flex-start",width:_?"100%":"50%"},children:[e.jsxs(v,{sx:{p:{xs:1.5,sm:2,md:3},pb:{xs:1,sm:1.5,md:2},textAlign:"left"},children:[e.jsx(K,{variant:"h6",component:"h2",sx:{mb:1},children:t}),e.jsx(E.ProgramStateIndicator,{programState:n,safetyState:r,operationMode:o})]}),e.jsxs(v,{sx:{p:{xs:1.5,sm:2,md:3},pt:0,flex:"1",display:"flex",flexDirection:"column",justifyContent:"space-between"},children:[!A&&i&&e.jsxs(v,{children:[e.jsx(i,{}),e.jsx(Z,{sx:{mt:1,mb:0,borderColor:u.palette.divider,opacity:.5}})]}),e.jsx(v,{sx:{mt:!A&&i?"auto":0},children:e.jsx(v,{sx:{display:"flex",justifyContent:"flex-start",mt:{xs:1,sm:1.5,md:2},mb:{xs:.5,sm:.75,md:1}},children:e.jsx(X,{ref:f,variant:"contained",color:"secondary",size:"small",disabled:!a,onMouseDown:C,onMouseUp:I,onMouseLeave:W,onTouchStart:C,onTouchEnd:I,sx:{textTransform:"none",px:1.5,py:.5},children:p("RobotCard.DriveToHome.bt")})})})]})]})]}):e.jsx(e.Fragment,{children:e.jsxs(v,{sx:{p:3,height:"100%",display:"flex",flexDirection:"column"},children:[e.jsxs(v,{children:[e.jsx(K,{variant:"h6",component:"h2",sx:{mb:1},children:t}),e.jsx(E.ProgramStateIndicator,{programState:n,safetyState:r,operationMode:o})]}),e.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:!_&&e.jsxs(k.Canvas,{orthographic:!0,camera:{position:[3,2,3],zoom:1},shadows:!0,frameloop:"demand",style:{borderRadius:u.shape.borderRadius,width:"100%",height:"100%",background:"transparent",position:"absolute"},dpr:[1,2],gl:{alpha:!0,antialias:!0},children:[e.jsx(D,{}),e.jsx(M.Bounds,{fit:!0,clip:!0,observe:!0,margin:1,maxDuration:1,children:e.jsx(g,{connectedMotionGroup:s,postModelRender:N})})]})}),e.jsxs(v,{children:[!A&&i&&e.jsxs(e.Fragment,{children:[e.jsx(i,{}),e.jsx(Z,{sx:{mt:1,mb:0,borderColor:u.palette.divider,opacity:.5}})]}),e.jsx(v,{sx:{display:"flex",justifyContent:"flex-start",mt:!A&&i?{xs:1,sm:2,md:5}:{xs:.5,sm:1,md:2},mb:{xs:.5,sm:.75,md:1}},children:e.jsx(X,{ref:f,variant:"contained",color:"secondary",size:"small",disabled:!a,onMouseDown:C,onMouseUp:I,onMouseLeave:W,onTouchStart:C,onTouchEnd:I,sx:{textTransform:"none",px:1.5,py:.5},children:p("RobotCard.DriveToHome.bt")})})]})]})})})})),Pe=Array(6).fill(2*Math.PI);function le({rapidlyChangingMotionState:t,dhParameters:n,onTranslationChanged:r,children:o}){const a=l.useRef([]),d=l.useRef([]),c=l.useRef(null),{invalidate:s}=k.useThree();l.useEffect(()=>{const u=t.joint_position.filter(p=>p!==void 0);return c.current=new E.ValueInterpolator(u,{tension:120,friction:20,threshold:.001}),()=>{var p;(p=c.current)==null||p.destroy()}},[]),k.useFrame((u,p)=>{if(c.current){const y=c.current.update(p);i(),y||s()}});function g(u){u&&(d.current=te(u),i(),s())}function i(){var p;const u=((p=c.current)==null?void 0:p.getCurrentValues())||[];if(r)r(d.current,u);else for(const[y,x]of d.current.entries()){const h=n[y].reverse_rotation_direction?-1:1;x.position.y=h*(u[y]||0)/1e3}}const m=l.useCallback(()=>{const u=t.joint_position.filter(p=>p!==void 0);requestAnimationFrame(()=>{var p;a.current=u,(p=c.current)==null||p.setTarget(u)})},[t]);return l.useEffect(()=>{m()},[t,m]),E.useAutorun(()=>{m()}),e.jsx("group",{ref:g,children:o})}function fe({rapidlyChangingMotionState:t,dhParameters:n,...r}){const o=new b.Matrix4,a=l.useRef(null),d=l.useRef(null);function c(i){const m=new b.Matrix4;for(let x=0;x<n.length;x++){const f=n[x],h=i[x]??0,j=new b.Matrix4().makeRotationY(f.theta).multiply(new b.Matrix4().makeTranslation(f.a/1e3,(f.d+h*(f.reverse_rotation_direction?-1:1))/1e3,0)).multiply(new b.Matrix4().makeRotationX(f.alpha));m.multiply(j)}const u=new b.Vector3,p=new b.Quaternion,y=new b.Vector3;return m.decompose(u,p,y),u}const s=c(t.joint_position);function g(i,m){o.identity();let u=new b.Vector3;for(let f=0;f<n.length;f++){const h=m[f]??0,j=n[f],S=new b.Matrix4().makeRotationY(j.theta).multiply(new b.Matrix4().makeTranslation(j.a/1e3,(j.d+h*(j.reverse_rotation_direction?-1:1))/1e3,0)).multiply(new b.Matrix4().makeRotationX(j.alpha));o.multiply(S)}const p=new b.Vector3,y=new b.Quaternion,x=new b.Vector3;if(o.decompose(p,y,x),u=p,a.current&&a.current.position.set(u.x,u.y,u.z),d.current){const f=d.current.geometry;f!=null&&f.setPositions&&f.setPositions([0,0,0,u.x,u.y,u.z])}}return e.jsx(le,{rapidlyChangingMotionState:t,dhParameters:n,onTranslationChanged:g,children:e.jsxs("group",{...r,name:"Scene",children:[e.jsxs("mesh",{name:"Base",position:[0,0,0],children:[e.jsx("sphereGeometry",{args:[.02,32,32]}),e.jsx("meshStandardMaterial",{color:"green",depthTest:!0})]}),e.jsx(M.Line,{ref:d,points:[new b.Vector3(0,0,0),s],color:"White",lineWidth:5}),e.jsxs("mesh",{ref:a,name:"TCP",position:s,children:[e.jsx("sphereGeometry",{args:[.025,32,32]}),e.jsx("meshStandardMaterial",{color:"red",depthTest:!0})]})]})})}const U=L.externalizeComponent(({rapidlyChangingMotionState:t,modelFromController:n,dhParameters:r,getModel:o=G,flangeRef:a,postModelRender:d,transparentColor:c,instanceUrl:s,...g})=>{const[i,m]=l.useState(null),u=l.useCallback(y=>{m(y)},[]);l.useEffect(()=>{i&&(c?ae(i,c):ce(i))},[i,c]);const p=e.jsx(fe,{rapidlyChangingMotionState:t,dhParameters:r,...g});return e.jsxs(ee.ErrorBoundary,{fallback:p,onError:y=>{console.warn(y)},children:[e.jsx(l.Suspense,{fallback:p,children:e.jsx("group",{ref:u,children:e.jsx(le,{rapidlyChangingMotionState:t,dhParameters:r,children:e.jsx(ie,{modelURL:(()=>{const y=o(n,s);if(!y){const x=new Blob([],{type:"model/gltf-binary"}),f=new File([x],`${n}.glb`,{type:"model/gltf-binary"});return Promise.resolve(URL.createObjectURL(f))}return y})(),postModelRender:d,flangeRef:a,...g})})})}),e.jsx(oe,{})]})});function Fe({connectedMotionGroup:t,getModel:n=G,flangeRef:r,transparentColor:o,postModelRender:a,...d}){if(!t.dhParameters)return null;const c=t.modelFromController||"";return c&&n(c)?e.jsx(U,{rapidlyChangingMotionState:t.rapidlyChangingMotionState,modelFromController:c,dhParameters:t.dhParameters,getModel:n,flangeRef:r,transparentColor:o,postModelRender:a,...d}):e.jsx(fe,{rapidlyChangingMotionState:t.rapidlyChangingMotionState,dhParameters:t.dhParameters,...d})}const q={[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],[R.Manufacturer.Staubli]:[0,-Math.PI/2,Math.PI/2,0,0,0,0]};function de(t){const[n]=t.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;case"STAUBLI":return R.Manufacturer.Staubli;default:return null}}function Ve(t,n){const r=de(t);return r&&r in q?q[r]:n||null}const Oe=L.externalizeComponent(t=>{const{inverseSolver:n,dhParameters:r,...o}=t,[a,d]=l.useState(R.JointTypeEnum.RevoluteJoint);l.useEffect(()=>{r.length&&d(r[0].type??R.JointTypeEnum.RevoluteJoint)},[r]);const c=l.useMemo(()=>n===null&&a===R.JointTypeEnum.RevoluteJoint,[n,a]),s=l.useMemo(()=>n===null&&a===R.JointTypeEnum.PrismaticJoint,[n,a]);return l.useMemo(()=>!!n,[n])||c?e.jsx(J,{dhParameters:r,...o}):s?e.jsx(U,{dhParameters:r,...o}):null});exports.CollisionSceneRenderer=Re;exports.LinearAxis=Fe;exports.MANUFACTURER_HOME_CONFIGS=q;exports.MotionGroupVisualizer=Oe;exports.PresetEnvironment=D;exports.Robot=ue;exports.RobotCard=Ae;exports.SafetyZonesRenderer=Se;exports.SupportedLinearAxis=U;exports.SupportedRobot=J;exports.TrajectoryRenderer=_e;exports.defaultAxisConfig=Pe;exports.defaultGetModel=G;exports.extractManufacturer=de;exports.getDefaultHomeConfig=Ve;
|