mujoco-react 8.7.0 → 8.9.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 CHANGED
@@ -39,13 +39,36 @@ export default defineConfig({
39
39
  });
40
40
  ```
41
41
 
42
- The plugin writes `src/mujoco-register.gen.d.ts` during dev and build. Commit that generated file:
42
+ The plugin writes `src/mujoco-register.gen.ts` during dev and build. Commit that generated file. Vite auto-loads it, so app code imports generated values from `mujoco-react`, not from the generated file:
43
43
 
44
44
  ```ts
45
- // src/mujoco-register.gen.d.ts
45
+ // src/mujoco-register.gen.ts
46
46
  // Auto-generated by mujoco-react. Do not edit.
47
47
 
48
- import "mujoco-react";
48
+ import { registerRobotResources } from "mujoco-react";
49
+
50
+ const generatedRobotResources = {
51
+ franka: {
52
+ actuators: { joint1: "joint1", joint2: "joint2", joint3: "joint3", gripper: "gripper" },
53
+ sensors: { force_sensor: "force_sensor", torque_sensor: "torque_sensor" },
54
+ bodies: { link0: "link0", link1: "link1", hand: "hand" },
55
+ joints: { joint1: "joint1", joint2: "joint2", joint3: "joint3" },
56
+ sites: { tcp: "tcp" },
57
+ geoms: { floor: "floor" },
58
+ keyframes: { home: "home" },
59
+ },
60
+ spot: {
61
+ actuators: { fl_hx: "fl_hx", fl_hy: "fl_hy", fl_kn: "fl_kn" },
62
+ sensors: {},
63
+ bodies: { body: "body", fl_hip: "fl_hip", fl_uleg: "fl_uleg" },
64
+ joints: { fl_hx: "fl_hx", fl_hy: "fl_hy", fl_kn: "fl_kn" },
65
+ sites: {},
66
+ geoms: { floor: "floor" },
67
+ keyframes: { home: "home" },
68
+ },
69
+ };
70
+
71
+ registerRobotResources(generatedRobotResources);
49
72
 
50
73
  declare module "mujoco-react" {
51
74
  interface Register {
@@ -76,7 +99,7 @@ declare module "mujoco-react" {
76
99
  }
77
100
  ```
78
101
 
79
- Once generated, hooks like `useCtrl`, `useSensor`, `useBodyState`, and API methods like `setCtrl`, `applyForce`, `getSensorData` accept the global union. For robot-scoped reusable code, use helpers such as `RobotActuators<"franka">`, `RobotSites<"franka">`, and `RobotBodies<"franka">`. When no `Register` augmentation is present, names fall back to `string`.
102
+ Once generated, hooks like `useCtrl`, `useSensor`, `useBodyState`, and API methods like `setCtrl`, `applyForce`, `getSensorData` accept the global union. For robot-scoped code, use package exports such as `RobotActuators.franka.gripper`, `RobotSites.franka.tcp`, and `RobotBodies.franka.hand`. Generic type helpers like `RobotActuators<"franka">` are still available for reusable library code. When no `Register` augmentation is present, names fall back to `string`.
80
103
 
81
104
  Non-Vite projects can generate the same file with:
82
105
 
@@ -113,10 +136,10 @@ export function App() {
113
136
 
114
137
  ```tsx
115
138
  import { OrbitControls } from "@react-three/drei";
116
- import { IkGizmo, useIkController } from "mujoco-react";
139
+ import { IkGizmo, RobotSites, useIkController } from "mujoco-react";
117
140
 
118
141
  function PandaTools() {
119
- const ik = useIkController({ siteName: "tcp" });
142
+ const ik = useIkController({ siteName: RobotSites.franka.tcp });
120
143
 
121
144
  return (
122
145
  <>
@@ -153,18 +176,34 @@ function MyController() {
153
176
 
154
177
  Controllers are just React children that read sensors, write `data.ctrl`, apply forces, or call the `MujocoSimAPI` at physics-step time.
155
178
 
156
- With generated resource types, reusable controllers can be scoped to one robot. Configure stable robot keys in the Vite plugin, then use those keys in helper types:
179
+ With generated resource values, reusable controllers can be scoped to one robot without hand-typing names:
157
180
 
158
181
  ```tsx
159
- import { useCtrl, useIkController } from "mujoco-react";
160
- import type { RobotActuators, RobotSites } from "mujoco-react";
161
-
162
- const frankaGripper = "gripper" satisfies RobotActuators<"franka">;
163
- const frankaTcp = "tcp" satisfies RobotSites<"franka">;
182
+ import { RobotActuators, RobotJoints, RobotSites, useCtrl, useIkController } from "mujoco-react";
164
183
 
165
184
  function FrankaTypedControls() {
166
- const gripper = useCtrl(frankaGripper);
167
- const ik = useIkController({ siteName: frankaTcp });
185
+ const gripper = useCtrl(RobotActuators.franka.gripper);
186
+ const ik = useIkController({
187
+ siteName: RobotSites.franka.tcp,
188
+ joints: [
189
+ RobotJoints.franka.joint1,
190
+ RobotJoints.franka.joint2,
191
+ RobotJoints.franka.joint3,
192
+ RobotJoints.franka.joint4,
193
+ RobotJoints.franka.joint5,
194
+ RobotJoints.franka.joint6,
195
+ RobotJoints.franka.joint7,
196
+ ],
197
+ actuators: [
198
+ RobotActuators.franka.actuator1,
199
+ RobotActuators.franka.actuator2,
200
+ RobotActuators.franka.actuator3,
201
+ RobotActuators.franka.actuator4,
202
+ RobotActuators.franka.actuator5,
203
+ RobotActuators.franka.actuator6,
204
+ RobotActuators.franka.actuator7,
205
+ ],
206
+ });
168
207
 
169
208
  return null;
170
209
  }
@@ -341,13 +380,14 @@ A `createControllerHook` factory is also available for the hook equivalent — s
341
380
  The built-in `useIkController()` uses Damped Least-Squares. Pass `ikSolveFn` to swap in your own solver (analytical, learned, etc.):
342
381
 
343
382
  ```tsx
383
+ import { RobotSites } from "mujoco-react";
344
384
  import type { IKSolveFn } from "mujoco-react";
345
385
 
346
386
  const myIK: IKSolveFn = (pos, quat, currentQ) => {
347
387
  return myAnalyticalSolver(pos, currentQ); // return joint angles or null
348
388
  };
349
389
 
350
- const ik = useIkController({ siteName: "tcp", ikSolveFn: myIK });
390
+ const ik = useIkController({ siteName: RobotSites.franka.tcp, ikSolveFn: myIK });
351
391
  ```
352
392
 
353
393
  ### `useIkController(config | null)`
@@ -355,7 +395,9 @@ const ik = useIkController({ siteName: "tcp", ikSolveFn: myIK });
355
395
  Hook for interactive end-effector control. Pass `null` to disable IK (safe to call unconditionally):
356
396
 
357
397
  ```tsx
358
- const ik = useIkController({ siteName: "tcp" });
398
+ import { IkGizmo, RobotSites, useIkController } from "mujoco-react";
399
+
400
+ const ik = useIkController({ siteName: RobotSites.franka.tcp });
359
401
  return ik ? <IkGizmo controller={ik} /> : null;
360
402
  ```
361
403
 
@@ -376,14 +418,32 @@ Pass the returned value to `<IkGizmo controller={ik} />` or to your own controll
376
418
  By default the controller infers scalar hinge/slide joints by walking from the site body toward the model root. For robots where the MJCF control layout is not a simple chain, pass explicit names:
377
419
 
378
420
  ```tsx
421
+ import { RobotActuators, RobotJoints, RobotSites } from "mujoco-react";
422
+
379
423
  const leftArmIk = useIkController({
380
- siteName: "left_tcp",
381
- joints: ["left_shoulder", "left_elbow", "left_wrist"],
424
+ siteName: RobotSites.franka.tcp,
425
+ joints: [
426
+ RobotJoints.franka.joint1,
427
+ RobotJoints.franka.joint2,
428
+ RobotJoints.franka.joint3,
429
+ RobotJoints.franka.joint4,
430
+ RobotJoints.franka.joint5,
431
+ RobotJoints.franka.joint6,
432
+ RobotJoints.franka.joint7,
433
+ ],
382
434
  });
383
435
 
384
436
  const gripperIk = useIkController({
385
- siteName: "tcp",
386
- actuators: /^actuator/,
437
+ siteName: RobotSites.franka.tcp,
438
+ actuators: [
439
+ RobotActuators.franka.actuator1,
440
+ RobotActuators.franka.actuator2,
441
+ RobotActuators.franka.actuator3,
442
+ RobotActuators.franka.actuator4,
443
+ RobotActuators.franka.actuator5,
444
+ RobotActuators.franka.actuator6,
445
+ RobotActuators.franka.actuator7,
446
+ ],
387
447
  });
388
448
  ```
389
449
 
@@ -424,15 +484,22 @@ interface SceneConfig {
424
484
  Load browser-selected MJCF or URDF files directly. Folder uploads preserve `webkitRelativePath`, and flat uploads fall back to matching referenced mesh/texture assets by basename:
425
485
 
426
486
  ```tsx
487
+ import { useEffect, useRef } from "react";
488
+ import { useMujoco } from "mujoco-react";
489
+
427
490
  function ModelUpload() {
428
491
  const sim = useMujoco();
492
+ const inputRef = useRef<HTMLInputElement>(null);
493
+
494
+ useEffect(() => {
495
+ inputRef.current?.setAttribute("webkitdirectory", "");
496
+ }, []);
429
497
 
430
498
  return (
431
499
  <input
500
+ ref={inputRef}
432
501
  type="file"
433
502
  multiple
434
- // @ts-expect-error Chromium/WebKit folder uploads
435
- webkitdirectory=""
436
503
  onChange={(event) => {
437
504
  if (sim.isReady && event.currentTarget.files) {
438
505
  sim.api.loadFromFiles(event.currentTarget.files);
@@ -5,7 +5,7 @@ import { generateMujocoRegister } from '../dist/vite.js';
5
5
 
6
6
  const usage = `
7
7
  Usage:
8
- mujoco-react codegen <scene.xml> [...more.xml] [--out src/mujoco-register.gen.d.ts] [--watch]
8
+ mujoco-react codegen <scene.xml> [...more.xml] [--out src/mujoco-register.gen.ts] [--watch]
9
9
  mujoco-react codegen franka=models/panda/scene.xml spot=models/spot/scene.xml
10
10
 
11
11
  Vite users usually do not need this command. Prefer:
@@ -32,7 +32,7 @@ if (command !== 'codegen') {
32
32
  }
33
33
 
34
34
  const commandArgs = args.slice(1);
35
- const out = valueAfter(commandArgs, '--out') ?? 'src/mujoco-register.gen.d.ts';
35
+ const out = valueAfter(commandArgs, '--out') ?? 'src/mujoco-register.gen.ts';
36
36
  const moduleName = valueAfter(commandArgs, '--module') ?? 'mujoco-react';
37
37
  const shouldWatch = commandArgs.includes('--watch');
38
38
  const models = commandArgs.filter((arg, index) => {
package/dist/index.d.ts CHANGED
@@ -41,13 +41,35 @@ type Robots = [RegisteredRobotMap] extends [never] ? string : Extract<keyof Regi
41
41
  type RobotResource<TRobot extends string, TKey extends string> = [
42
42
  RegisteredRobotMap
43
43
  ] extends [never] ? string : TRobot extends keyof RegisteredRobotMap ? TKey extends keyof RegisteredRobotMap[TRobot] ? RegisteredRobotMap[TRobot][TKey] : string : never;
44
+ type RegisterResourceKey = 'actuators' | 'sensors' | 'bodies' | 'joints' | 'sites' | 'geoms' | 'keyframes';
45
+ type RobotResourceObject<TRobot extends string, TKey extends RegisterResourceKey> = string extends RobotResource<TRobot, TKey> ? Record<string, string> : {
46
+ readonly [K in RobotResource<TRobot, TKey>]: K;
47
+ };
48
+ type RobotResourceCategory<TKey extends RegisterResourceKey> = string extends Robots ? Record<string, Record<string, string>> : {
49
+ readonly [TRobot in Robots]: RobotResourceObject<TRobot, TKey>;
50
+ };
51
+ type RobotResourceRegistry = string extends Robots ? Record<string, Record<RegisterResourceKey, Record<string, string>>> : {
52
+ readonly [TRobot in Robots]: {
53
+ readonly [TKey in RegisterResourceKey]: RobotResourceObject<TRobot, TKey>;
54
+ };
55
+ };
56
+ type RuntimeRobotResourceRegistration = Readonly<Record<string, Readonly<Record<RegisterResourceKey, Readonly<Record<string, string>>>>>>;
57
+ declare function registerRobotResources(resources: RuntimeRobotResourceRegistration): void;
58
+ declare const RobotResources: RobotResourceRegistry;
44
59
  type RobotActuators<TRobot extends string> = RobotResource<TRobot, 'actuators'>;
60
+ declare const RobotActuators: RobotResourceCategory<'actuators'>;
45
61
  type RobotSensors<TRobot extends string> = RobotResource<TRobot, 'sensors'>;
62
+ declare const RobotSensors: RobotResourceCategory<'sensors'>;
46
63
  type RobotBodies<TRobot extends string> = RobotResource<TRobot, 'bodies'>;
64
+ declare const RobotBodies: RobotResourceCategory<'bodies'>;
47
65
  type RobotJoints<TRobot extends string> = RobotResource<TRobot, 'joints'>;
66
+ declare const RobotJoints: RobotResourceCategory<'joints'>;
48
67
  type RobotSites<TRobot extends string> = RobotResource<TRobot, 'sites'>;
68
+ declare const RobotSites: RobotResourceCategory<'sites'>;
49
69
  type RobotGeoms<TRobot extends string> = RobotResource<TRobot, 'geoms'>;
70
+ declare const RobotGeoms: RobotResourceCategory<'geoms'>;
50
71
  type RobotKeyframes<TRobot extends string> = RobotResource<TRobot, 'keyframes'>;
72
+ declare const RobotKeyframes: RobotResourceCategory<'keyframes'>;
51
73
  type Actuators = Register extends {
52
74
  actuators: infer T extends string;
53
75
  } ? T : string;
@@ -1504,4 +1526,4 @@ interface CameraAnimationAPI {
1504
1526
  */
1505
1527
  declare function useCameraAnimation(): CameraAnimationAPI;
1506
1528
 
1507
- export { type ActuatedJointInfo, type ActuatorInfo, type Actuators, type Bodies, Body, type BodyInfo, type BodyProps, type BodyStateResult, type CameraAnimationAPI, type ContactInfo, ContactListener, type ContactListenerProps, ContactMarkers, type ControlGroupInfo, type ControlGroupSelector, type ControlJointInfo, type ControllerComponent, type ControllerOptions, type CtrlHandle, Debug, type DebugProps, DragInteraction, type DragInteractionProps, FlexRenderer, type GeomInfo, type Geoms, type IKSolveFn, type IkConfig, type IkContextValue, IkGizmo, type IkGizmoProps, InstancedGeomRenderer, type JointInfo, type JointStateResult, type Joints, type KeyBinding, type KeyboardTeleopConfig, type Keyframes, type ModelOptions, MujocoCanvas, type MujocoCanvasProps, type MujocoContact, type MujocoContactArray, type MujocoContextValue, type MujocoData, type MujocoLoader, type MujocoLoaderOptions, type MujocoModel, type MujocoModule, MujocoPhysics, type MujocoPhysicsProps, MujocoProvider, type MujocoProviderProps, type MujocoSimAPI, MujocoSimProvider, type MujocoWasmVariant, type ObservationConfig, type ObservationHandle, type ObservationLayoutItem, type ObservationOutput, type ObservationResult, type PhysicsConfig, type PhysicsStepCallback, type PlaybackState, type PolicyConfig, type RayHit, type Register, type RegisteredRobotMap, type ResourceSelector, type RobotActuators, type RobotBodies, type RobotGeoms, type RobotJoints, type RobotKeyframes, type RobotResource, type RobotSensors, type RobotSites, type Robots, type SceneConfig, SceneLights, type SceneLightsProps, type SceneMarker, type SceneObject, type SensorHandle, type SensorInfo, type SensorResult, type Sensors, type SiteInfo, type SitePositionResult, type Sites, type StateSnapshot, TendonRenderer, type TrajectoryData, type TrajectoryFrame, type TrajectoryInput, TrajectoryPlayer, type TrajectoryPlayerProps, type XmlPatch, buildObservation, createContiguousControlGroup, createController, createControllerHook, findActuatorByName, findBodyByName, findGeomByName, findJointByName, findKeyframeByName, findSensorByName, findSiteByName, findTendonByName, getActuatedJoints, getContact, getControlMap, getName, loadScene, resolveControlGroup, useActuators, useAfterPhysicsStep, useBeforePhysicsStep, useBodyMeshes, useBodyState, useCameraAnimation, useContactEvents, useContacts, useCtrl, useCtrlNoise, useGamepad, useGravityCompensation, useIkController, useJointState, useKeyboardTeleop, useMujoco, useMujocoWasm, useObservation, usePolicy, useSceneLights, useSelectionHighlight, useSensor, useSensors, useSitePosition, useTrajectoryPlayer, useTrajectoryRecorder, useVideoRecorder };
1529
+ export { type ActuatedJointInfo, type ActuatorInfo, type Actuators, type Bodies, Body, type BodyInfo, type BodyProps, type BodyStateResult, type CameraAnimationAPI, type ContactInfo, ContactListener, type ContactListenerProps, ContactMarkers, type ControlGroupInfo, type ControlGroupSelector, type ControlJointInfo, type ControllerComponent, type ControllerOptions, type CtrlHandle, Debug, type DebugProps, DragInteraction, type DragInteractionProps, FlexRenderer, type GeomInfo, type Geoms, type IKSolveFn, type IkConfig, type IkContextValue, IkGizmo, type IkGizmoProps, InstancedGeomRenderer, type JointInfo, type JointStateResult, type Joints, type KeyBinding, type KeyboardTeleopConfig, type Keyframes, type ModelOptions, MujocoCanvas, type MujocoCanvasProps, type MujocoContact, type MujocoContactArray, type MujocoContextValue, type MujocoData, type MujocoLoader, type MujocoLoaderOptions, type MujocoModel, type MujocoModule, MujocoPhysics, type MujocoPhysicsProps, MujocoProvider, type MujocoProviderProps, type MujocoSimAPI, MujocoSimProvider, type MujocoWasmVariant, type ObservationConfig, type ObservationHandle, type ObservationLayoutItem, type ObservationOutput, type ObservationResult, type PhysicsConfig, type PhysicsStepCallback, type PlaybackState, type PolicyConfig, type RayHit, type Register, type RegisteredRobotMap, type ResourceSelector, RobotActuators, RobotBodies, RobotGeoms, RobotJoints, RobotKeyframes, type RobotResource, RobotResources, RobotSensors, RobotSites, type Robots, type SceneConfig, SceneLights, type SceneLightsProps, type SceneMarker, type SceneObject, type SensorHandle, type SensorInfo, type SensorResult, type Sensors, type SiteInfo, type SitePositionResult, type Sites, type StateSnapshot, TendonRenderer, type TrajectoryData, type TrajectoryFrame, type TrajectoryInput, TrajectoryPlayer, type TrajectoryPlayerProps, type XmlPatch, buildObservation, createContiguousControlGroup, createController, createControllerHook, findActuatorByName, findBodyByName, findGeomByName, findJointByName, findKeyframeByName, findSensorByName, findSiteByName, findTendonByName, getActuatedJoints, getContact, getControlMap, getName, loadScene, registerRobotResources, resolveControlGroup, useActuators, useAfterPhysicsStep, useBeforePhysicsStep, useBodyMeshes, useBodyState, useCameraAnimation, useContactEvents, useContacts, useCtrl, useCtrlNoise, useGamepad, useGravityCompensation, useIkController, useJointState, useKeyboardTeleop, useMujoco, useMujocoWasm, useObservation, usePolicy, useSceneLights, useSelectionHighlight, useSensor, useSensors, useSitePosition, useTrajectoryPlayer, useTrajectoryRecorder, useVideoRecorder };
package/dist/index.js CHANGED
@@ -106,6 +106,63 @@ function MujocoProvider({
106
106
  }
107
107
 
108
108
  // src/types.ts
109
+ var runtimeRobotResources = {};
110
+ var REGISTER_RESOURCE_KEYS = ["actuators", "sensors", "bodies", "joints", "sites", "geoms", "keyframes"];
111
+ function createEmptyRuntimeResources() {
112
+ return {
113
+ actuators: {},
114
+ sensors: {},
115
+ bodies: {},
116
+ joints: {},
117
+ sites: {},
118
+ geoms: {},
119
+ keyframes: {}
120
+ };
121
+ }
122
+ function registerRobotResources(resources) {
123
+ for (const [robot, robotResources] of Object.entries(resources)) {
124
+ const existing = runtimeRobotResources[robot] ?? createEmptyRuntimeResources();
125
+ for (const key of REGISTER_RESOURCE_KEYS) {
126
+ existing[key] = { ...existing[key], ...robotResources[key] ?? {} };
127
+ }
128
+ runtimeRobotResources[robot] = existing;
129
+ }
130
+ }
131
+ function createResourceCategory(key) {
132
+ return new Proxy({}, {
133
+ get(_target, robot) {
134
+ if (typeof robot !== "string") return void 0;
135
+ return runtimeRobotResources[robot]?.[key] ?? {};
136
+ },
137
+ ownKeys() {
138
+ return Reflect.ownKeys(runtimeRobotResources);
139
+ },
140
+ getOwnPropertyDescriptor(_target, robot) {
141
+ if (typeof robot !== "string" || !(robot in runtimeRobotResources)) return void 0;
142
+ return { enumerable: true, configurable: true };
143
+ }
144
+ });
145
+ }
146
+ var RobotResources = new Proxy(runtimeRobotResources, {
147
+ get(target, robot) {
148
+ if (typeof robot !== "string") return void 0;
149
+ return target[robot] ?? createEmptyRuntimeResources();
150
+ },
151
+ ownKeys(target) {
152
+ return Reflect.ownKeys(target);
153
+ },
154
+ getOwnPropertyDescriptor(target, robot) {
155
+ if (typeof robot !== "string" || !(robot in target)) return void 0;
156
+ return { enumerable: true, configurable: true };
157
+ }
158
+ });
159
+ var RobotActuators = createResourceCategory("actuators");
160
+ var RobotSensors = createResourceCategory("sensors");
161
+ var RobotBodies = createResourceCategory("bodies");
162
+ var RobotJoints = createResourceCategory("joints");
163
+ var RobotSites = createResourceCategory("sites");
164
+ var RobotGeoms = createResourceCategory("geoms");
165
+ var RobotKeyframes = createResourceCategory("keyframes");
109
166
  function getContact(contacts, i) {
110
167
  try {
111
168
  return contacts.get(i);
@@ -5045,6 +5102,6 @@ function useCameraAnimation() {
5045
5102
  * useCameraAnimation — composable camera animation hook.
5046
5103
  */
5047
5104
 
5048
- export { Body, ContactListener, ContactMarkers, Debug, DragInteraction, FlexRenderer, IkGizmo, InstancedGeomRenderer, MujocoCanvas, MujocoPhysics, MujocoProvider, MujocoSimProvider, SceneLights, TendonRenderer, TrajectoryPlayer, buildObservation, createContiguousControlGroup, createController, createControllerHook, findActuatorByName, findBodyByName, findGeomByName, findJointByName, findKeyframeByName, findSensorByName, findSiteByName, findTendonByName, getActuatedJoints, getContact, getControlMap, getName, loadScene, resolveControlGroup, useActuators, useAfterPhysicsStep, useBeforePhysicsStep, useBodyMeshes, useBodyState, useCameraAnimation, useContactEvents, useContacts, useCtrl, useCtrlNoise, useGamepad, useGravityCompensation, useIkController, useJointState, useKeyboardTeleop, useMujoco, useMujocoWasm, useObservation, usePolicy, useSceneLights, useSelectionHighlight, useSensor, useSensors, useSitePosition, useTrajectoryPlayer, useTrajectoryRecorder, useVideoRecorder };
5105
+ export { Body, ContactListener, ContactMarkers, Debug, DragInteraction, FlexRenderer, IkGizmo, InstancedGeomRenderer, MujocoCanvas, MujocoPhysics, MujocoProvider, MujocoSimProvider, RobotActuators, RobotBodies, RobotGeoms, RobotJoints, RobotKeyframes, RobotResources, RobotSensors, RobotSites, SceneLights, TendonRenderer, TrajectoryPlayer, buildObservation, createContiguousControlGroup, createController, createControllerHook, findActuatorByName, findBodyByName, findGeomByName, findJointByName, findKeyframeByName, findSensorByName, findSiteByName, findTendonByName, getActuatedJoints, getContact, getControlMap, getName, loadScene, registerRobotResources, resolveControlGroup, useActuators, useAfterPhysicsStep, useBeforePhysicsStep, useBodyMeshes, useBodyState, useCameraAnimation, useContactEvents, useContacts, useCtrl, useCtrlNoise, useGamepad, useGravityCompensation, useIkController, useJointState, useKeyboardTeleop, useMujoco, useMujocoWasm, useObservation, usePolicy, useSceneLights, useSelectionHighlight, useSensor, useSensors, useSitePosition, useTrajectoryPlayer, useTrajectoryRecorder, useVideoRecorder };
5049
5106
  //# sourceMappingURL=index.js.map
5050
5107
  //# sourceMappingURL=index.js.map