@viamrobotics/test-widgets 0.2.0 → 0.3.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.
@@ -30,5 +30,5 @@ export declare const clientMap: {
30
30
  readonly 'rdk:service:world_state_store': typeof WorldStateStoreClient;
31
31
  readonly 'rdk:service:video': typeof VideoClient;
32
32
  };
33
- export declare const clientForBuiltinResource: (resource: ResourceName) => typeof ArmClient | typeof BaseClient | typeof GantryClient | typeof GripperClient | typeof MotorClient | typeof ServoClient | typeof AudioInClient | typeof AudioOutClient | typeof BoardClient | typeof ButtonClient | typeof CameraClient | typeof DiscoveryClient | typeof EncoderClient | typeof GenericComponentClient | typeof InputControllerClient | typeof MovementSensorClient | typeof PoseTrackerClient | typeof PowerSensorClient | typeof SensorClient | typeof SwitchClient | typeof DataManagerClient | typeof GenericServiceClient | typeof MLModelClient | typeof MotionClient | typeof NavigationClient | typeof SlamClient | typeof VisionClient | typeof WorldStateStoreClient | typeof VideoClient | undefined;
33
+ export declare const clientForResource: (resource: ResourceName) => typeof ArmClient | typeof BaseClient | typeof GantryClient | typeof GripperClient | typeof MotorClient | typeof ServoClient | typeof AudioInClient | typeof AudioOutClient | typeof BoardClient | typeof ButtonClient | typeof CameraClient | typeof DiscoveryClient | typeof EncoderClient | typeof GenericComponentClient | typeof InputControllerClient | typeof MovementSensorClient | typeof PoseTrackerClient | typeof PowerSensorClient | typeof SensorClient | typeof SwitchClient | typeof DataManagerClient | typeof GenericServiceClient | typeof MLModelClient | typeof MotionClient | typeof NavigationClient | typeof SlamClient | typeof VisionClient | typeof WorldStateStoreClient | typeof VideoClient | undefined;
34
34
  export declare const supportsDoCommand: (resource: ResourceName) => boolean;
@@ -31,11 +31,11 @@ export const clientMap = {
31
31
  'rdk:service:world_state_store': WorldStateStoreClient,
32
32
  'rdk:service:video': VideoClient,
33
33
  };
34
- export const clientForBuiltinResource = (resource) => {
34
+ export const clientForResource = (resource) => {
35
35
  const resAPI = getResourceAPI(resource);
36
36
  return resAPI in clientMap ? clientMap[resAPI] : undefined;
37
37
  };
38
38
  export const supportsDoCommand = (resource) => {
39
- const client = clientForBuiltinResource(resource);
39
+ const client = clientForResource(resource);
40
40
  return client !== undefined && client !== MLModelClient;
41
41
  };
@@ -1,6 +1,6 @@
1
1
  import { MachineConnectionEvent, MLModelClient, ResourceName } from '@viamrobotics/sdk';
2
2
  import { useConnectionStatus, useRobotClient } from '@viamrobotics/svelte-sdk';
3
- import { clientForBuiltinResource, clientMap } from '../../../client-map';
3
+ import { clientForResource, clientMap } from '../../../client-map';
4
4
  export const createDoCommandClient = (resource, partID, resourceName) => {
5
5
  const robotClient = useRobotClient(partID);
6
6
  const connectionStatus = useConnectionStatus(partID);
@@ -9,7 +9,7 @@ export const createDoCommandClient = (resource, partID, resourceName) => {
9
9
  return;
10
10
  if (connectionStatus.current !== MachineConnectionEvent.CONNECTED)
11
11
  return;
12
- const constructor = clientForBuiltinResource(resource());
12
+ const constructor = clientForResource(resource());
13
13
  if (!constructor)
14
14
  return;
15
15
  if (constructor === MLModelClient)
package/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
1
  export { createAddImageToDatasetContext, type ImageData, useAddImageToDataset, } from './add-image-to-dataset';
2
+ export { clientForResource } from './client-map';
2
3
  export * from './components';
3
4
  export { providePip, usePip } from './pip/context.svelte';
5
+ export { getResourceAPI, hasWidget, showResourceWidget, widgetForResource } from './resource';
package/dist/index.js CHANGED
@@ -1,3 +1,5 @@
1
1
  export { createAddImageToDatasetContext, useAddImageToDataset, } from './add-image-to-dataset';
2
+ export { clientForResource } from './client-map';
2
3
  export * from './components';
3
4
  export { providePip, usePip } from './pip/context.svelte';
5
+ export { getResourceAPI, hasWidget, showResourceWidget, widgetForResource } from './resource';
package/dist/resource.js CHANGED
@@ -1,4 +1,6 @@
1
1
  import { robotApi } from '@viamrobotics/sdk';
2
+ import { ArmWidget, AudioInputWidget, AudioOutputWidget, BaseWidget, BoardWidget, ButtonWidget, CameraWidget, DiscoveryWidget, EncoderWidget, GantryWidget, GripperWidget, InputControllerWidget, MLModelServiceWidget, MotorWidget, MovementSensorWidget, NavigationServiceWidget, PowerSensorWidget, SensorWidget, ServoWidget, SlamWidget, SwitchWidget, VisionServiceWidget, } from './';
3
+ import { clientMap } from "./client-map.js";
2
4
  export const ResourceStatusText = {
3
5
  [robotApi.ResourceStatus_State.UNSPECIFIED]: 'unspecified',
4
6
  [robotApi.ResourceStatus_State.READY]: 'ready',
@@ -7,6 +9,60 @@ export const ResourceStatusText = {
7
9
  [robotApi.ResourceStatus_State.UNCONFIGURED]: 'unconfigured',
8
10
  [robotApi.ResourceStatus_State.REMOVING]: 'removing',
9
11
  };
12
+ // The types are nicer to work with as arrays (as opposed to a record of objects) because TS will infer the types.
13
+ // try not to expose this map so that we can easily refactor it.
14
+ const resourceMap =
15
+ // api: [client, testView, showResourceInControlView]
16
+ // list created via `cat rdkbuiltins/viam-server-stable.json | rg "api" | sort | uniq`
17
+ {
18
+ 'rdk:component:arm': [clientMap['rdk:component:arm'], ArmWidget, true],
19
+ 'rdk:component:audio_in': [clientMap['rdk:component:audio_in'], AudioInputWidget, true],
20
+ 'rdk:component:audio_out': [clientMap['rdk:component:audio_out'], AudioOutputWidget, true],
21
+ 'rdk:component:base': [clientMap['rdk:component:base'], BaseWidget, true],
22
+ 'rdk:component:board': [clientMap['rdk:component:board'], BoardWidget, true],
23
+ 'rdk:component:button': [clientMap['rdk:component:button'], ButtonWidget, true],
24
+ 'rdk:component:camera': [clientMap['rdk:component:camera'], CameraWidget, true],
25
+ 'rdk:component:encoder': [clientMap['rdk:component:encoder'], EncoderWidget, true],
26
+ 'rdk:component:gantry': [clientMap['rdk:component:gantry'], GantryWidget, true],
27
+ 'rdk:component:generic': [clientMap['rdk:component:generic'], undefined, true],
28
+ 'rdk:component:gripper': [clientMap['rdk:component:gripper'], GripperWidget, true],
29
+ 'rdk:component:input_controller': [
30
+ clientMap['rdk:component:input_controller'],
31
+ InputControllerWidget,
32
+ true,
33
+ ],
34
+ 'rdk:component:motor': [clientMap['rdk:component:motor'], MotorWidget, true],
35
+ 'rdk:component:movement_sensor': [
36
+ clientMap['rdk:component:movement_sensor'],
37
+ MovementSensorWidget,
38
+ true,
39
+ ],
40
+ 'rdk:component:pose_tracker': [clientMap['rdk:component:pose_tracker'], undefined, true],
41
+ 'rdk:component:power_sensor': [
42
+ clientMap['rdk:component:power_sensor'],
43
+ PowerSensorWidget,
44
+ true,
45
+ ],
46
+ 'rdk:component:sensor': [clientMap['rdk:component:sensor'], SensorWidget, true],
47
+ 'rdk:component:servo': [clientMap['rdk:component:servo'], ServoWidget, true],
48
+ 'rdk:component:switch': [clientMap['rdk:component:switch'], SwitchWidget, true],
49
+ 'rdk:service:base_remote_control': [undefined, undefined, true],
50
+ // dont show -- confusing to users
51
+ 'rdk:service:data_manager': [clientMap['rdk:service:data_manager'], undefined, false],
52
+ 'rdk:service:discovery': [clientMap['rdk:service:discovery'], DiscoveryWidget, true],
53
+ 'rdk:service:generic': [clientMap['rdk:service:generic'], undefined, true],
54
+ 'rdk:service:mlmodel': [clientMap['rdk:service:mlmodel'], MLModelServiceWidget, true],
55
+ // dont show -- confusing to users
56
+ 'rdk:service:motion': [clientMap['rdk:service:motion'], undefined, false],
57
+ 'rdk:service:navigation': [clientMap['rdk:service:navigation'], NavigationServiceWidget, true],
58
+ // dont show -- confusing to users
59
+ 'rdk:service:sensors': [undefined, undefined, false],
60
+ 'rdk:service:shell': [undefined, undefined, false],
61
+ 'rdk:service:slam': [clientMap['rdk:service:slam'], SlamWidget, true],
62
+ 'rdk:service:vision': [clientMap['rdk:service:vision'], VisionServiceWidget, true],
63
+ 'rdk:service:world_state_store': [clientMap['rdk:service:world_state_store'], undefined, true],
64
+ 'rdk:service:video': [clientMap['rdk:service:video'], undefined, true],
65
+ };
10
66
  export const getResourceAPI = ({ namespace, type, subtype }) => `${namespace}:${type}:${subtype}`;
11
67
  export const getResourceKey = (name) => `${getResourceAPI(name)}/${name.name}`;
12
68
  // sorts resource names by local/remote -> type -> name (alphabetical) to produce a list like
@@ -24,3 +80,18 @@ export const sortResourceNames = (names) => names.toSorted(({ type, name }, { ty
24
80
  // sort components before services
25
81
  return type === otherType ? name.localeCompare(otherName) : type.localeCompare(otherType);
26
82
  });
83
+ export const hasWidget = (resource) => getResourceAPI(resource) in resourceMap;
84
+ export const widgetForResource = (resource) => {
85
+ const resAPI = getResourceAPI(resource);
86
+ return resAPI in resourceMap
87
+ ? resourceMap[resAPI][1]
88
+ : undefined;
89
+ };
90
+ export const showResourceWidget = (resource) => {
91
+ if (resource.namespace === 'rdk-internal') {
92
+ return false;
93
+ }
94
+ const resAPI = getResourceAPI(resource);
95
+ // unknown apis should still get cards & show up in the sidebar
96
+ return resAPI in resourceMap ? resourceMap[resAPI][2] : true;
97
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@viamrobotics/test-widgets",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "files": [
package/dist/builtin.js DELETED
@@ -1,70 +0,0 @@
1
- import { ArmWidget, AudioInputWidget, AudioOutputWidget, BaseWidget, BoardWidget, ButtonWidget, CameraWidget, DiscoveryWidget, EncoderWidget, GantryWidget, GripperWidget, InputControllerWidget, MLModelServiceWidget, MotorWidget, MovementSensorWidget, NavigationServiceWidget, PowerSensorWidget, SensorWidget, ServoWidget, SlamWidget, SwitchWidget, VisionServiceWidget, } from './';
2
- import { clientMap } from "./client-map.js";
3
- import { getResourceAPI } from "./resource.js";
4
- export { clientForBuiltinResource } from "./client-map.js";
5
- // The types are nicer to work with as arrays (as opposed to a record of objects) because TS will infer the types.
6
- // try not to expose this map so that we can easily refactor it.
7
- const resourceMap =
8
- // api: [client, testView, showResourceInControlView]
9
- // list created via `cat rdkbuiltins/viam-server-stable.json | rg "api" | sort | uniq`
10
- {
11
- 'rdk:component:arm': [clientMap['rdk:component:arm'], ArmWidget, true],
12
- 'rdk:component:audio_in': [clientMap['rdk:component:audio_in'], AudioInputWidget, true],
13
- 'rdk:component:audio_out': [clientMap['rdk:component:audio_out'], AudioOutputWidget, true],
14
- 'rdk:component:base': [clientMap['rdk:component:base'], BaseWidget, true],
15
- 'rdk:component:board': [clientMap['rdk:component:board'], BoardWidget, true],
16
- 'rdk:component:button': [clientMap['rdk:component:button'], ButtonWidget, true],
17
- 'rdk:component:camera': [clientMap['rdk:component:camera'], CameraWidget, true],
18
- 'rdk:component:encoder': [clientMap['rdk:component:encoder'], EncoderWidget, true],
19
- 'rdk:component:gantry': [clientMap['rdk:component:gantry'], GantryWidget, true],
20
- 'rdk:component:generic': [clientMap['rdk:component:generic'], undefined, true],
21
- 'rdk:component:gripper': [clientMap['rdk:component:gripper'], GripperWidget, true],
22
- 'rdk:component:input_controller': [
23
- clientMap['rdk:component:input_controller'],
24
- InputControllerWidget,
25
- true,
26
- ],
27
- 'rdk:component:motor': [clientMap['rdk:component:motor'], MotorWidget, true],
28
- 'rdk:component:movement_sensor': [
29
- clientMap['rdk:component:movement_sensor'],
30
- MovementSensorWidget,
31
- true,
32
- ],
33
- 'rdk:component:pose_tracker': [clientMap['rdk:component:pose_tracker'], undefined, true],
34
- 'rdk:component:power_sensor': [
35
- clientMap['rdk:component:power_sensor'],
36
- PowerSensorWidget,
37
- true,
38
- ],
39
- 'rdk:component:sensor': [clientMap['rdk:component:sensor'], SensorWidget, true],
40
- 'rdk:component:servo': [clientMap['rdk:component:servo'], ServoWidget, true],
41
- 'rdk:component:switch': [clientMap['rdk:component:switch'], SwitchWidget, true],
42
- 'rdk:service:base_remote_control': [undefined, undefined, true],
43
- // dont show -- confusing to users
44
- 'rdk:service:data_manager': [clientMap['rdk:service:data_manager'], undefined, false],
45
- 'rdk:service:discovery': [clientMap['rdk:service:discovery'], DiscoveryWidget, true],
46
- 'rdk:service:generic': [clientMap['rdk:service:generic'], undefined, true],
47
- 'rdk:service:mlmodel': [clientMap['rdk:service:mlmodel'], MLModelServiceWidget, true],
48
- // dont show -- confusing to users
49
- 'rdk:service:motion': [clientMap['rdk:service:motion'], undefined, false],
50
- 'rdk:service:navigation': [clientMap['rdk:service:navigation'], NavigationServiceWidget, true],
51
- // dont show -- confusing to users
52
- 'rdk:service:sensors': [undefined, undefined, false],
53
- 'rdk:service:shell': [undefined, undefined, false],
54
- 'rdk:service:slam': [clientMap['rdk:service:slam'], SlamWidget, true],
55
- 'rdk:service:vision': [clientMap['rdk:service:vision'], VisionServiceWidget, true],
56
- 'rdk:service:world_state_store': [clientMap['rdk:service:world_state_store'], undefined, true],
57
- 'rdk:service:video': [clientMap['rdk:service:video'], undefined, true],
58
- };
59
- export const viewForBuiltinResource = (resource) => {
60
- const resAPI = getResourceAPI(resource);
61
- return resAPI in resourceMap ? resourceMap[resAPI][1] : undefined;
62
- };
63
- export const showResourceInControlView = (resource) => {
64
- if (resource.namespace === 'rdk-internal') {
65
- return false;
66
- }
67
- const resAPI = getResourceAPI(resource);
68
- // unknown apis should still get cards & show up in the sidebar
69
- return resAPI in resourceMap ? resourceMap[resAPI][2] : true;
70
- };