@viamrobotics/motion-tools 1.14.0 → 1.15.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.
Files changed (127) hide show
  1. package/dist/FrameConfigUpdater.svelte.d.ts +2 -2
  2. package/dist/HoverUpdater.svelte.d.ts +1 -1
  3. package/dist/attribute.js +1 -1
  4. package/dist/color.d.ts +1 -1
  5. package/dist/color.js +2 -2
  6. package/dist/components/App.svelte +25 -21
  7. package/dist/components/App.svelte.d.ts +1 -1
  8. package/dist/components/BatchedArrows.svelte +5 -3
  9. package/dist/components/Camera.svelte +1 -0
  10. package/dist/components/CameraControls.svelte +5 -3
  11. package/dist/components/Entities/Arrows/ArrowGroups.svelte +6 -3
  12. package/dist/components/Entities/Arrows/Arrows.svelte +6 -3
  13. package/dist/components/Entities/Entities.svelte +7 -5
  14. package/dist/components/Entities/Frame.svelte +8 -5
  15. package/dist/components/Entities/Frame.svelte.d.ts +2 -2
  16. package/dist/components/Entities/GLTF.svelte +8 -5
  17. package/dist/components/Entities/GLTF.svelte.d.ts +2 -2
  18. package/dist/components/Entities/Geometry.svelte +8 -5
  19. package/dist/components/Entities/Line.svelte +8 -5
  20. package/dist/components/Entities/Line.svelte.d.ts +1 -1
  21. package/dist/components/Entities/LineDots.svelte +1 -1
  22. package/dist/components/Entities/LineGeometry.svelte +1 -1
  23. package/dist/components/Entities/Mesh.svelte +8 -5
  24. package/dist/components/Entities/Points.svelte +9 -6
  25. package/dist/components/Entities/Points.svelte.d.ts +2 -2
  26. package/dist/components/Entities/Pose.svelte +4 -3
  27. package/dist/components/Entities/hooks/useEntityEvents.svelte.d.ts +1 -1
  28. package/dist/components/Entities/hooks/useEntityEvents.svelte.js +2 -2
  29. package/dist/components/FileDrop/FileDrop.svelte +10 -6
  30. package/dist/components/FileDrop/file-dropper.d.ts +1 -1
  31. package/dist/components/FileDrop/pcd-dropper.js +1 -1
  32. package/dist/components/FileDrop/ply-dropper.js +1 -1
  33. package/dist/components/FileDrop/snapshot-dropper.js +1 -1
  34. package/dist/components/Focus.svelte +4 -2
  35. package/dist/components/KeyboardControls.svelte +4 -2
  36. package/dist/components/Lasso/Debug.svelte +5 -2
  37. package/dist/components/Lasso/Lasso.svelte +9 -6
  38. package/dist/components/Lasso/Tool.svelte +10 -7
  39. package/dist/components/MeasureTool/MeasurePoint.svelte +2 -1
  40. package/dist/components/MeasureTool/MeasurePoint.svelte.d.ts +1 -1
  41. package/dist/components/MeasureTool/MeasureTool.svelte +7 -5
  42. package/dist/components/PCD.svelte +4 -3
  43. package/dist/components/PointerMissBox.svelte +3 -2
  44. package/dist/components/Scene.svelte +12 -9
  45. package/dist/components/SceneProviders.svelte +20 -18
  46. package/dist/components/Selected.svelte +5 -3
  47. package/dist/components/Snapshot.svelte +8 -5
  48. package/dist/components/StaticGeometries.svelte +10 -7
  49. package/dist/components/hover/HoveredEntities.svelte +2 -1
  50. package/dist/components/hover/HoveredEntity.svelte +2 -1
  51. package/dist/components/hover/HoveredEntityTooltip.svelte +1 -0
  52. package/dist/components/hover/LinkedHoveredEntity.svelte +7 -5
  53. package/dist/components/overlay/AddRelationship.svelte +4 -2
  54. package/dist/components/overlay/Details.svelte +21 -19
  55. package/dist/components/overlay/FloatingPanel.svelte +40 -3
  56. package/dist/components/overlay/FloatingPanel.svelte.d.ts +1 -0
  57. package/dist/components/overlay/LiveUpdatesBanner.svelte +1 -0
  58. package/dist/components/overlay/Logs.svelte +4 -2
  59. package/dist/components/overlay/Popover.svelte +3 -2
  60. package/dist/components/overlay/RefreshRate.svelte +4 -2
  61. package/dist/components/overlay/dashboard/Button.svelte +2 -1
  62. package/dist/components/overlay/dashboard/Button.svelte.d.ts +1 -1
  63. package/dist/components/overlay/dashboard/Dashboard.svelte +3 -1
  64. package/dist/components/overlay/left-pane/AddFrames.svelte +4 -2
  65. package/dist/components/overlay/left-pane/Drawer.svelte +3 -2
  66. package/dist/components/overlay/left-pane/Tree.svelte +6 -12
  67. package/dist/components/overlay/left-pane/TreeContainer.svelte +33 -50
  68. package/dist/components/overlay/left-pane/TreeContainer.svelte.d.ts +1 -1
  69. package/dist/components/overlay/settings/Settings.svelte +37 -10
  70. package/dist/components/overlay/settings/Tabs.svelte +2 -1
  71. package/dist/components/overlay/widgets/ArmPositions.svelte +3 -2
  72. package/dist/components/overlay/widgets/Camera.svelte +6 -5
  73. package/dist/components/weblab/WeblabActive.svelte +2 -1
  74. package/dist/components/xr/ArmTeleop.svelte +7 -6
  75. package/dist/components/xr/BentPlaneGeometry.svelte +3 -2
  76. package/dist/components/xr/CameraFeed.svelte +2 -0
  77. package/dist/components/xr/Controllers.svelte +5 -3
  78. package/dist/components/xr/Draggable.svelte +4 -3
  79. package/dist/components/xr/HandCollider.svelte +2 -1
  80. package/dist/components/xr/JointLimitsWidget.svelte +1 -0
  81. package/dist/components/xr/OriginMarker.svelte +2 -1
  82. package/dist/components/xr/PointDistance.svelte +3 -2
  83. package/dist/components/xr/XR.svelte +8 -6
  84. package/dist/components/xr/XRConfigPanel.svelte +4 -3
  85. package/dist/components/xr/XRControllerSettings.svelte +2 -1
  86. package/dist/components/xr/XRToast.svelte +4 -3
  87. package/dist/ecs/traits.d.ts +1 -1
  88. package/dist/ecs/traits.js +1 -1
  89. package/dist/ecs/useQuery.svelte.js +1 -1
  90. package/dist/frame.js +1 -1
  91. package/dist/hooks/use3DModels.svelte.js +3 -3
  92. package/dist/hooks/useConfigFrames.svelte.js +3 -3
  93. package/dist/hooks/useDrawAPI.svelte.js +9 -9
  94. package/dist/hooks/useFramelessComponents.svelte.js +1 -1
  95. package/dist/hooks/useFrames.svelte.js +7 -7
  96. package/dist/hooks/useGeometries.svelte.js +8 -8
  97. package/dist/hooks/useMouseRaycaster.svelte.d.ts +1 -1
  98. package/dist/hooks/useMouseRaycaster.svelte.js +1 -1
  99. package/dist/hooks/usePartConfig.svelte.d.ts +1 -1
  100. package/dist/hooks/usePartConfig.svelte.js +3 -3
  101. package/dist/hooks/usePointcloudObjects.svelte.js +6 -6
  102. package/dist/hooks/usePointclouds.svelte.js +5 -5
  103. package/dist/hooks/usePose.svelte.js +7 -7
  104. package/dist/hooks/useSelection.svelte.d.ts +1 -1
  105. package/dist/hooks/useWeblabs.svelte.d.ts +1 -0
  106. package/dist/hooks/useWeblabs.svelte.js +15 -3
  107. package/dist/hooks/useWorldState.svelte.js +8 -8
  108. package/dist/plugins/bvh.svelte.js +2 -2
  109. package/dist/snapshot.d.ts +2 -2
  110. package/dist/snapshot.js +4 -4
  111. package/dist/three/BatchedArrow.d.ts +1 -1
  112. package/dist/three/BatchedArrow.js +1 -1
  113. package/dist/three/InstancedArrows/InstancedArrows.d.ts +1 -1
  114. package/dist/three/InstancedArrows/InstancedArrows.js +3 -3
  115. package/dist/three/InstancedArrows/box.js +1 -1
  116. package/dist/three/InstancedArrows/geometry.js +1 -1
  117. package/dist/three/InstancedArrows/raycast.d.ts +1 -1
  118. package/dist/three/InstancedArrows/raycast.js +1 -1
  119. package/dist/three/OBBHelper.d.ts +1 -1
  120. package/dist/three/OBBHelper.js +1 -1
  121. package/dist/three/OrientationVector.js +1 -1
  122. package/dist/transform.js +1 -1
  123. package/package.json +3 -2
  124. package/dist/hooks/__tests__/fixtures/ResizableTestWrapper.svelte +0 -41
  125. package/dist/hooks/__tests__/fixtures/ResizableTestWrapper.svelte.d.ts +0 -6
  126. package/dist/hooks/useResizable.svelte.d.ts +0 -12
  127. package/dist/hooks/useResizable.svelte.js +0 -46
@@ -1,8 +1,8 @@
1
- import { createFrame } from '../frame';
2
- import { createPoseFromFrame } from '../transform';
3
- import { Struct, Pose } from '@viamrobotics/sdk';
1
+ import { Pose, Struct } from '@viamrobotics/sdk';
4
2
  import { createAppMutation, createAppQuery } from '@viamrobotics/svelte-sdk';
5
3
  import { getContext, setContext } from 'svelte';
4
+ import { createFrame } from '../frame';
5
+ import { createPoseFromFrame } from '../transform';
6
6
  const key = Symbol('part-config-context');
7
7
  export const providePartConfig = (partID, params) => {
8
8
  const props = $derived(params());
@@ -1,15 +1,15 @@
1
1
  import { VisionClient } from '@viamrobotics/sdk';
2
2
  import { createResourceClient, createResourceQuery, useResourceNames, } from '@viamrobotics/svelte-sdk';
3
- import { RefreshRates, useMachineSettings } from './useMachineSettings.svelte';
4
- import { useLogs } from './useLogs.svelte';
5
- import { parsePcdInWorker } from '../lib';
6
3
  import { getContext, setContext, untrack } from 'svelte';
7
- import { traits, useWorld } from '../ecs';
8
4
  import { createBufferGeometry, updateBufferGeometry } from '../attribute';
9
- import { useEnvironment } from './useEnvironment.svelte';
10
5
  import { RefetchRates } from '../components/overlay/RefreshRate.svelte';
11
- import { createPose } from '../transform';
6
+ import { traits, useWorld } from '../ecs';
12
7
  import { updateGeometryTrait } from '../ecs/traits';
8
+ import { parsePcdInWorker } from '../lib';
9
+ import { createPose } from '../transform';
10
+ import { useEnvironment } from './useEnvironment.svelte';
11
+ import { useLogs } from './useLogs.svelte';
12
+ import { RefreshRates, useMachineSettings } from './useMachineSettings.svelte';
13
13
  const key = Symbol('pointcloud-object-context');
14
14
  export const providePointcloudObjects = (partID) => {
15
15
  const world = useWorld();
@@ -1,13 +1,13 @@
1
1
  import { CameraClient } from '@viamrobotics/sdk';
2
- import { setContext, getContext, untrack } from 'svelte';
3
2
  import { createResourceClient, createResourceQuery, useResourceNames, } from '@viamrobotics/svelte-sdk';
4
- import { parsePcdInWorker } from '../loaders/pcd';
5
- import { RefreshRates, useMachineSettings } from './useMachineSettings.svelte';
6
- import { useLogs } from './useLogs.svelte';
3
+ import { getContext, setContext, untrack } from 'svelte';
4
+ import { createBufferGeometry, updateBufferGeometry } from '../attribute';
7
5
  import { RefetchRates } from '../components/overlay/RefreshRate.svelte';
8
6
  import { traits, useWorld } from '../ecs';
7
+ import { parsePcdInWorker } from '../loaders/pcd';
9
8
  import { useEnvironment } from './useEnvironment.svelte';
10
- import { createBufferGeometry, updateBufferGeometry } from '../attribute';
9
+ import { useLogs } from './useLogs.svelte';
10
+ import { RefreshRates, useMachineSettings } from './useMachineSettings.svelte';
11
11
  const key = Symbol('pointcloud-context');
12
12
  export const providePointclouds = (partID) => {
13
13
  const environment = useEnvironment();
@@ -1,15 +1,15 @@
1
- import { createRobotQuery, useRobotClient } from '@viamrobotics/svelte-sdk';
2
- import { usePartID } from './usePartID.svelte';
3
- import { commonApi, Pose } from '@viamrobotics/sdk';
4
- import { RefreshRates, useMachineSettings } from './useMachineSettings.svelte';
5
- import { useEnvironment } from './useEnvironment.svelte';
6
1
  import { observe } from '@threlte/core';
2
+ import { commonApi, Pose } from '@viamrobotics/sdk';
3
+ import { createRobotQuery, useRobotClient } from '@viamrobotics/svelte-sdk';
7
4
  import { untrack } from 'svelte';
8
- import { useFrames } from './useFrames.svelte';
9
5
  import { RefetchRates } from '../components/overlay/RefreshRate.svelte';
6
+ import { useEnvironment } from './useEnvironment.svelte';
7
+ import { useFrames } from './useFrames.svelte';
10
8
  import { useLogs } from './useLogs.svelte';
11
- import { useResourceByName } from './useResourceByName.svelte';
9
+ import { RefreshRates, useMachineSettings } from './useMachineSettings.svelte';
10
+ import { usePartID } from './usePartID.svelte';
12
11
  import { useRefetchPoses } from './useRefetchPoses';
12
+ import { useResourceByName } from './useResourceByName.svelte';
13
13
  const originFrameComponentTypes = new Set(['arm', 'gantry', 'gripper', 'base']);
14
14
  export const usePose = (name, parent) => {
15
15
  const environment = useEnvironment();
@@ -1,5 +1,5 @@
1
- import { Object3D } from 'three';
2
1
  import type { Entity } from 'koota';
2
+ import { Object3D } from 'three';
3
3
  interface SelectedEntityContext {
4
4
  readonly current: Entity | undefined;
5
5
  readonly instance: number | undefined;
@@ -3,6 +3,7 @@ export declare const WEBLABS_CONTEXT_KEY: unique symbol;
3
3
  interface Context {
4
4
  load: (experiments: string[]) => void;
5
5
  isActive(experiment: string): boolean;
6
+ toggle(experiment: string): void;
6
7
  }
7
8
  export declare const createWeblabs: () => Context;
8
9
  export declare const provideWeblabs: () => void;
@@ -37,11 +37,22 @@ export const createWeblabs = () => {
37
37
  }
38
38
  }
39
39
  };
40
+ const toggle = (experiment) => {
41
+ const cookieExperiments = new Set(getCookieExperiments());
42
+ if (activeExperiments.has(experiment)) {
43
+ activeExperiments.delete(experiment);
44
+ cookieExperiments.delete(experiment);
45
+ }
46
+ else {
47
+ activeExperiments.add(experiment);
48
+ cookieExperiments.add(experiment);
49
+ }
50
+ addCookie('weblab_experiments', [...cookieExperiments].join(','));
51
+ };
40
52
  return {
41
53
  load,
42
- isActive: (experiment) => {
43
- return activeExperiments.has(experiment);
44
- },
54
+ isActive: (experiment) => activeExperiments.has(experiment),
55
+ toggle,
45
56
  };
46
57
  };
47
58
  export const provideWeblabs = () => {
@@ -58,6 +69,7 @@ export const useWeblabs = () => {
58
69
  return {
59
70
  load: () => { },
60
71
  isActive: () => false,
72
+ toggle: () => { },
61
73
  };
62
74
  }
63
75
  return context;
@@ -1,16 +1,16 @@
1
- import { WorldStateStoreClient, TransformChangeType, } from '@viamrobotics/sdk';
1
+ import { useThrelte } from '@threlte/core';
2
+ import { TransformChangeType, WorldStateStoreClient, } from '@viamrobotics/sdk';
2
3
  import { createResourceClient, createResourceQuery, createResourceStream, useResourceNames, } from '@viamrobotics/svelte-sdk';
3
- import { parseMetadata } from '../metadata';
4
- import { asColor, asOpacity, isPerVertexColors, STRIDE } from '../buffer';
5
4
  import { Color } from 'three';
6
- import { usePartID } from './usePartID.svelte';
5
+ import { createBufferGeometry } from '../attribute';
6
+ import { asColor, asOpacity, isPerVertexColors, STRIDE } from '../buffer';
7
7
  import { traits, useWorld } from '../ecs';
8
- import { createPose } from '../transform';
9
- import { useThrelte } from '@threlte/core';
10
8
  import { createBox, createCapsule, createSphere } from '../geometry';
11
- import { parsePlyInput } from '../ply';
12
9
  import { parsePcdInWorker } from '../loaders/pcd';
13
- import { createBufferGeometry } from '../attribute';
10
+ import { parseMetadata } from '../metadata';
11
+ import { parsePlyInput } from '../ply';
12
+ import { createPose } from '../transform';
13
+ import { usePartID } from './usePartID.svelte';
14
14
  const colorUtil = new Color();
15
15
  export const provideWorldStates = () => {
16
16
  const partID = usePartID();
@@ -1,6 +1,6 @@
1
1
  import { injectPlugin, isInstanceOf } from '@threlte/core';
2
- import { BatchedMesh, Points, Mesh } from 'three';
3
- import { acceleratedRaycast, computeBoundsTree, disposeBoundsTree, computeBatchedBoundsTree, disposeBatchedBoundsTree, PointsBVH, SAH, BVHHelper, } from 'three-mesh-bvh';
2
+ import { BatchedMesh, Mesh, Points } from 'three';
3
+ import { acceleratedRaycast, BVHHelper, computeBatchedBoundsTree, computeBoundsTree, disposeBatchedBoundsTree, disposeBoundsTree, PointsBVH, SAH, } from 'three-mesh-bvh';
4
4
  export const bvh = (raycaster, options) => {
5
5
  const bvhOptions = $derived({
6
6
  strategy: SAH,
@@ -1,7 +1,7 @@
1
- import type { World, Entity } from 'koota';
1
+ import type { Entity, World } from 'koota';
2
2
  import type { Snapshot } from './buf/draw/v1/snapshot_pb';
3
- import { type SceneMetadata } from './buf/draw/v1/scene_pb';
4
3
  import type { Settings } from './hooks/useSettings.svelte';
4
+ import { type SceneMetadata } from './buf/draw/v1/scene_pb';
5
5
  /**
6
6
  * Merges scene-level metadata (grid, camera, point/line settings) into the
7
7
  * current viewer settings. Millimetre values from the proto are converted
package/dist/snapshot.js CHANGED
@@ -1,13 +1,13 @@
1
+ import { Geometry } from '@viamrobotics/sdk';
1
2
  import { Color, Vector3, Vector4 } from 'three';
2
3
  import { NURBSCurve } from 'three/addons/curves/NURBSCurve.js';
3
- import { RenderArmModels } from './buf/draw/v1/scene_pb';
4
4
  import {} from './buf/draw/v1/drawing_pb';
5
+ import { RenderArmModels } from './buf/draw/v1/scene_pb';
5
6
  import { traits } from './ecs';
6
- import { Geometry } from '@viamrobotics/sdk';
7
7
  import { parseMetadata } from './metadata';
8
- import { rgbaToHex } from './color';
9
- import { asColor, asFloat32Array, asOpacity, isPerVertexColors, STRIDE } from './buffer';
10
8
  import { createBufferGeometry } from './attribute';
9
+ import { asColor, asFloat32Array, asOpacity, isPerVertexColors, STRIDE } from './buffer';
10
+ import { rgbaToHex } from './color';
11
11
  const vec3 = new Vector3();
12
12
  const colorUtil = new Color();
13
13
  /**
@@ -1,5 +1,5 @@
1
- import { BatchedMesh, Vector3, Color } from 'three';
2
1
  import type { OBB } from 'three/addons/math/OBB.js';
2
+ import { BatchedMesh, Color, Vector3 } from 'three';
3
3
  export declare class BatchedArrow {
4
4
  mesh: BatchedMesh;
5
5
  _geometryId: number;
@@ -1,4 +1,4 @@
1
- import { BatchedMesh, MeshBasicMaterial, Object3D, Vector3, Color, Box3 } from 'three';
1
+ import { BatchedMesh, Box3, Color, MeshBasicMaterial, Object3D, Vector3 } from 'three';
2
2
  import { createArrowGeometry } from './arrow';
3
3
  const black = new Color('black');
4
4
  const axis = new Vector3();
@@ -1,4 +1,4 @@
1
- import { Group, Mesh, BufferGeometry, InstancedInterleavedBuffer, type ColorRepresentation, Vector3, Box3 } from 'three';
1
+ import { Box3, BufferGeometry, type ColorRepresentation, Group, InstancedInterleavedBuffer, Mesh, Vector3 } from 'three';
2
2
  export declare class InstancedArrows extends Group {
3
3
  isInstancedArrows: boolean;
4
4
  count: number;
@@ -1,8 +1,8 @@
1
- import { RawShaderMaterial, FrontSide, Group, InstancedBufferAttribute, DynamicDrawUsage, Mesh, BufferGeometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, Material, Color, Vector3, Box3, } from 'three';
2
- import vertexShader from './vertex.glsl';
1
+ import { Box3, BufferGeometry, Color, DynamicDrawUsage, FrontSide, Group, InstancedBufferAttribute, InstancedInterleavedBuffer, InterleavedBufferAttribute, Material, Mesh, RawShaderMaterial, Vector3, } from 'three';
2
+ import { computeBoundingBox } from './box';
3
3
  import fragmentShader from './fragment.glsl';
4
4
  import { createHeadGeometry, createShaftGeometry, toInstanced } from './geometry';
5
- import { computeBoundingBox } from './box';
5
+ import vertexShader from './vertex.glsl';
6
6
  const defaults = {
7
7
  LENGTH: 0.1,
8
8
  HEAD_LENGTH: 0.02,
@@ -1,4 +1,4 @@
1
- import { RawShaderMaterial, Box3, BufferGeometry } from 'three';
1
+ import { Box3, BufferGeometry, RawShaderMaterial } from 'three';
2
2
  const bounds = new Box3();
3
3
  export function computeBoundingBox(geometry) {
4
4
  const src = this.poses.array;
@@ -1,4 +1,4 @@
1
- import { BufferGeometry, BufferAttribute, InstancedBufferGeometry } from 'three';
1
+ import { BufferAttribute, BufferGeometry, InstancedBufferGeometry } from 'three';
2
2
  export const createShaftGeometry = () => {
3
3
  // Triangular prism aligned to +Y, base at y=0, top at y=1.
4
4
  // No caps, 6 verts, 6 side triangles.
@@ -1,4 +1,4 @@
1
- import { Raycaster, type Intersection } from 'three';
1
+ import { type Intersection, Raycaster } from 'three';
2
2
  import type { InstancedArrows } from './InstancedArrows';
3
3
  export declare function meshBoundsRaycast(this: InstancedArrows, raycaster: Raycaster, intersects: Intersection[]): void;
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { Ray, Matrix4, Raycaster, Vector3, Box3, RawShaderMaterial } from 'three';
1
+ import { Box3, Matrix4, RawShaderMaterial, Ray, Raycaster, Vector3 } from 'three';
2
2
  const vec3 = new Vector3();
3
3
  const inverseMatrix = new Matrix4();
4
4
  const localRay = new Ray();
@@ -1,4 +1,4 @@
1
- import { Vector3, Object3D } from 'three';
1
+ import { Object3D, Vector3 } from 'three';
2
2
  import { LineSegments2 } from 'three/examples/jsm/lines/LineSegments2.js';
3
3
  export declare class OBBHelper extends LineSegments2 {
4
4
  constructor(color?: number, linewidth?: number);
@@ -1,4 +1,4 @@
1
- import { EdgesGeometry, BoxGeometry, Vector3, Quaternion, Matrix4, Object3D, Mesh, BufferGeometry, Matrix3, } from 'three';
1
+ import { BoxGeometry, BufferGeometry, EdgesGeometry, Matrix3, Matrix4, Mesh, Object3D, Quaternion, Vector3, } from 'three';
2
2
  import { LineMaterial } from 'three/addons/lines/LineMaterial.js';
3
3
  import { LineSegments2 } from 'three/examples/jsm/lines/LineSegments2.js';
4
4
  import { LineSegmentsGeometry } from 'three/examples/jsm/lines/LineSegmentsGeometry.js';
@@ -1,4 +1,4 @@
1
- import { Euler, Quaternion, Vector3, MathUtils } from 'three';
1
+ import { Euler, MathUtils, Quaternion, Vector3 } from 'three';
2
2
  export const EPSILON = 0.0001;
3
3
  const xAxis = new Quaternion(-1, 0, 0, 0);
4
4
  const zAxis = new Quaternion(0, 0, +1, 0);
package/dist/transform.js CHANGED
@@ -1,5 +1,5 @@
1
- import { OrientationVector } from './three/OrientationVector';
2
1
  import { Euler, MathUtils, Matrix4, Quaternion, Vector3 } from 'three';
2
+ import { OrientationVector } from './three/OrientationVector';
3
3
  const quaternion = new Quaternion();
4
4
  const euler = new Euler();
5
5
  const ov = new OrientationVector();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@viamrobotics/motion-tools",
3
- "version": "1.14.0",
3
+ "version": "1.15.0",
4
4
  "description": "Motion visualization with Viam",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -51,6 +51,7 @@
51
51
  "esbuild": "^0.27.3",
52
52
  "eslint": "10.0.2",
53
53
  "eslint-config-prettier": "10.1.8",
54
+ "eslint-plugin-perfectionist": "^5.6.0",
54
55
  "eslint-plugin-svelte": "3.15.0",
55
56
  "eslint-plugin-unicorn": "^63.0.0",
56
57
  "globals": "16.3.0",
@@ -149,7 +150,7 @@
149
150
  "preview": "vite preview",
150
151
  "check": "svelte-kit sync && pnpm build:workers && svelte-check --tsconfig ./tsconfig.json && pnpm vet",
151
152
  "check:watch": "svelte-kit sync && pnpm build:workers && svelte-check --tsconfig ./tsconfig.json --watch",
152
- "format": "prettier --write .",
153
+ "format": "prettier --write . && eslint . --fix",
153
154
  "lint:draw": "golangci-lint run ./draw/...",
154
155
  "lint:client": "golangci-lint run ./client/...",
155
156
  "lint:prettier": "prettier --check .",
@@ -1,41 +0,0 @@
1
- <script lang="ts">
2
- import { useResizable } from '../../useResizable.svelte'
3
-
4
- interface Props {
5
- name: string
6
- }
7
-
8
- let { name }: Props = $props()
9
-
10
- const resizable = useResizable(() => name)
11
-
12
- let container = $state<HTMLDivElement>()
13
-
14
- $effect(() => {
15
- if (container) {
16
- resizable.observe(container)
17
- }
18
- })
19
- </script>
20
-
21
- <div data-testid="status">
22
- {#if resizable.isLoaded}
23
- loaded
24
- {:else}
25
- loading
26
- {/if}
27
- </div>
28
-
29
- <div data-testid="dimensions">
30
- {resizable.current.width}x{resizable.current.height}
31
- </div>
32
-
33
- <div
34
- bind:this={container}
35
- data-testid="container"
36
- class="resize"
37
- style:width={`${resizable.current.width}px`}
38
- style:height={`${resizable.current.height}px`}
39
- >
40
- Resizable container
41
- </div>
@@ -1,6 +0,0 @@
1
- interface Props {
2
- name: string;
3
- }
4
- declare const ResizableTestWrapper: import("svelte").Component<Props, {}, "">;
5
- type ResizableTestWrapper = ReturnType<typeof ResizableTestWrapper>;
6
- export default ResizableTestWrapper;
@@ -1,12 +0,0 @@
1
- interface Dimensions {
2
- width: number;
3
- height: number;
4
- }
5
- interface Context {
6
- readonly current: Dimensions;
7
- readonly isLoaded: boolean;
8
- observe: (target: HTMLElement) => void;
9
- }
10
- export declare const MIN_DIMENSIONS: Dimensions;
11
- export declare const useResizable: (name: () => string, defaultDimensions?: () => Dimensions) => Context;
12
- export {};
@@ -1,46 +0,0 @@
1
- import { get, set } from 'idb-keyval';
2
- export const MIN_DIMENSIONS = { width: 240, height: 320 };
3
- export const useResizable = (name, defaultDimensions) => {
4
- const key = $derived(`${name()}-resizable`);
5
- let dimensions = $derived(defaultDimensions?.() ?? MIN_DIMENSIONS);
6
- let loaded = $state(false);
7
- let observer;
8
- $effect(() => {
9
- get(key).then((saved) => {
10
- if (saved) {
11
- dimensions = saved;
12
- }
13
- loaded = true;
14
- });
15
- });
16
- const observe = (target) => {
17
- // Disconnect previous observer if any
18
- observer?.disconnect();
19
- observer = new ResizeObserver((entries) => {
20
- const entry = entries[0];
21
- if (!entry)
22
- return;
23
- const next = {
24
- width: Math.max(entry.contentRect.width, MIN_DIMENSIONS.width),
25
- height: Math.max(entry.contentRect.height, MIN_DIMENSIONS.height),
26
- };
27
- set(key, next);
28
- });
29
- observer.observe(target);
30
- };
31
- const disconnect = () => {
32
- observer?.disconnect();
33
- };
34
- $effect(() => {
35
- return disconnect;
36
- });
37
- return {
38
- get current() {
39
- return dimensions;
40
- },
41
- get isLoaded() {
42
- return loaded;
43
- },
44
- observe,
45
- };
46
- };