@viamrobotics/test-widgets 0.2.0 → 0.3.1
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/client-map.d.ts +1 -1
- package/dist/client-map.js +2 -2
- package/dist/components/widgets/do-command/create-do-command-client.svelte.js +2 -2
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/resource.d.ts +25 -0
- package/dist/resource.js +71 -0
- package/package.json +1 -1
- package/dist/builtin.js +0 -70
package/dist/client-map.d.ts
CHANGED
|
@@ -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
|
|
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;
|
package/dist/client-map.js
CHANGED
|
@@ -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
|
|
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 =
|
|
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 {
|
|
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 =
|
|
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';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ResourceStatus } from '@viamrobotics/svelte-sdk';
|
|
2
|
+
import type { Component } from 'svelte';
|
|
3
|
+
import { type ResourceName } from '@viamrobotics/sdk';
|
|
4
|
+
export type NamedResourceStatus = ResourceStatus & {
|
|
5
|
+
name: ResourceName;
|
|
6
|
+
};
|
|
7
|
+
interface ResourceWidget {
|
|
8
|
+
partID: string;
|
|
9
|
+
resourceName: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const ResourceStatusText: {
|
|
12
|
+
0: string;
|
|
13
|
+
3: string;
|
|
14
|
+
2: string;
|
|
15
|
+
5: string;
|
|
16
|
+
1: string;
|
|
17
|
+
4: string;
|
|
18
|
+
};
|
|
19
|
+
export declare const getResourceAPI: ({ namespace, type, subtype }: ResourceName) => string;
|
|
20
|
+
export declare const getResourceKey: (name: ResourceName) => string;
|
|
21
|
+
export declare const sortResourceNames: (names: ResourceName[]) => ResourceName[];
|
|
22
|
+
export declare const hasWidget: (resource: ResourceName) => boolean;
|
|
23
|
+
export declare const widgetForResource: (resource: ResourceName) => Component<ResourceWidget> | undefined;
|
|
24
|
+
export declare const showResourceWidget: (resource: ResourceName) => boolean;
|
|
25
|
+
export {};
|
package/dist/resource.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { robotApi } from '@viamrobotics/sdk';
|
|
2
|
+
import { clientMap } from "./client-map.js";
|
|
3
|
+
import { ArmWidget, AudioInputWidget, AudioOutputWidget, BaseWidget, BoardWidget, ButtonWidget, CameraWidget, DiscoveryWidget, EncoderWidget, GantryWidget, GripperWidget, InputControllerWidget, MLModelServiceWidget, MotorWidget, MovementSensorWidget, NavigationServiceWidget, PowerSensorWidget, SensorWidget, ServoWidget, SlamWidget, SwitchWidget, VisionServiceWidget, } from './components';
|
|
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
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
|
-
};
|