@viamrobotics/test-widgets 0.7.0 → 0.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 +33 -0
- package/dist/client-map.d.ts +30 -30
- package/dist/client-map.js +32 -29
- package/dist/components/index.d.ts +22 -0
- package/dist/components/index.js +22 -0
- package/dist/components/is-moving.svelte +1 -4
- package/dist/components/mutation-section.svelte +1 -1
- package/dist/components/navigation-map/components/obstacle.svelte +2 -1
- package/dist/components/three/capsule-geometry.d.ts +10 -0
- package/dist/components/three/capsule-geometry.js +19 -0
- package/dist/components/three/index.d.ts +1 -0
- package/dist/components/three/index.js +1 -0
- package/dist/components/widgets/arm/arm.svelte +8 -5
- package/dist/components/widgets/arm/get-joint-positions-widget.svelte +36 -0
- package/dist/components/widgets/arm/get-joint-positions-widget.svelte.d.ts +7 -0
- package/dist/components/widgets/arm/is-moving-widget.svelte +20 -0
- package/dist/components/widgets/arm/is-moving-widget.svelte.d.ts +7 -0
- package/dist/components/widgets/arm/move-to-joint-positions-widget.svelte +9 -5
- package/dist/components/widgets/arm/move-to-position.svelte +31 -3
- package/dist/components/widgets/audio-input/get-properties-widget.svelte +43 -0
- package/dist/components/widgets/audio-input/get-properties-widget.svelte.d.ts +7 -0
- package/dist/components/widgets/audio-output/get-properties-widget.svelte +43 -0
- package/dist/components/widgets/audio-output/get-properties-widget.svelte.d.ts +7 -0
- package/dist/components/widgets/base/is-moving-widget.svelte +20 -0
- package/dist/components/widgets/base/is-moving-widget.svelte.d.ts +7 -0
- package/dist/components/widgets/base/quick-move.svelte +12 -5
- package/dist/components/widgets/camera/live-or-polling-video.svelte +8 -1
- package/dist/components/widgets/do-command/do-command.svelte +21 -7
- package/dist/components/widgets/do-command/do-command.svelte.d.ts +8 -1
- package/dist/components/widgets/encoder/encoder-position-type.d.ts +8 -0
- package/dist/components/widgets/encoder/encoder-position-type.js +20 -0
- package/dist/components/widgets/encoder/encoder.svelte +3 -20
- package/dist/components/widgets/encoder/get-position-widget.svelte +54 -0
- package/dist/components/widgets/encoder/get-position-widget.svelte.d.ts +7 -0
- package/dist/components/widgets/gantry/get-position-widget.svelte +43 -0
- package/dist/components/widgets/gantry/get-position-widget.svelte.d.ts +7 -0
- package/dist/components/widgets/gantry/is-moving-widget.svelte +20 -0
- package/dist/components/widgets/gantry/is-moving-widget.svelte.d.ts +7 -0
- package/dist/components/widgets/gripper/gripper.svelte +1 -1
- package/dist/components/widgets/gripper/is-holding-something.svelte +1 -4
- package/dist/components/widgets/gripper/is-moving-widget.svelte +20 -0
- package/dist/components/widgets/gripper/is-moving-widget.svelte.d.ts +7 -0
- package/dist/components/widgets/motion/component-name-select.svelte +29 -0
- package/dist/components/widgets/motion/component-name-select.svelte.d.ts +9 -0
- package/dist/components/widgets/motion/frame-system-config.d.ts +28 -0
- package/dist/components/widgets/motion/frame-system-config.js +30 -0
- package/dist/components/widgets/motion/motion.svelte +27 -0
- package/dist/components/widgets/motion/motion.svelte.d.ts +7 -0
- package/dist/components/widgets/motion/move-widget.svelte +84 -0
- package/dist/components/widgets/motion/move-widget.svelte.d.ts +7 -0
- package/dist/components/widgets/motion/move.svelte +127 -0
- package/dist/components/widgets/motion/move.svelte.d.ts +14 -0
- package/dist/components/widgets/motion/parse-move-args.d.ts +24 -0
- package/dist/components/widgets/motion/parse-move-args.js +23 -0
- package/dist/components/widgets/motion/parse-pasted-pose.d.ts +10 -0
- package/dist/components/widgets/motion/parse-pasted-pose.js +30 -0
- package/dist/components/widgets/motion/pose-in-frame-input.svelte +168 -0
- package/dist/components/widgets/motion/pose-in-frame-input.svelte.d.ts +10 -0
- package/dist/components/widgets/motor/is-moving-widget.svelte +20 -0
- package/dist/components/widgets/motor/is-moving-widget.svelte.d.ts +7 -0
- package/dist/components/widgets/motor/motor.svelte +2 -8
- package/dist/components/widgets/movement-sensor/get-accuracy-widget.svelte +38 -0
- package/dist/components/widgets/movement-sensor/get-accuracy-widget.svelte.d.ts +7 -0
- package/dist/components/widgets/movement-sensor/get-compass-heading-widget.svelte +38 -0
- package/dist/components/widgets/movement-sensor/get-compass-heading-widget.svelte.d.ts +7 -0
- package/dist/components/widgets/movement-sensor/get-orientation-widget.svelte +38 -0
- package/dist/components/widgets/movement-sensor/get-orientation-widget.svelte.d.ts +7 -0
- package/dist/components/widgets/movement-sensor/get-position-widget.svelte +38 -0
- package/dist/components/widgets/movement-sensor/get-position-widget.svelte.d.ts +7 -0
- package/dist/components/widgets/navigation/obstacles/meshes.svelte +1 -2
- package/dist/components/widgets/power-sensor/get-current-widget.svelte +38 -0
- package/dist/components/widgets/power-sensor/get-current-widget.svelte.d.ts +7 -0
- package/dist/components/widgets/power-sensor/get-power-widget.svelte +38 -0
- package/dist/components/widgets/power-sensor/get-power-widget.svelte.d.ts +7 -0
- package/dist/components/widgets/power-sensor/get-voltage-widget.svelte +38 -0
- package/dist/components/widgets/power-sensor/get-voltage-widget.svelte.d.ts +7 -0
- package/dist/components/widgets/servo/is-moving-widget.svelte +20 -0
- package/dist/components/widgets/servo/is-moving-widget.svelte.d.ts +7 -0
- package/dist/components/widgets/slam/get-position-widget.svelte +38 -0
- package/dist/components/widgets/slam/get-position-widget.svelte.d.ts +7 -0
- package/dist/components/widgets/vision-service/vision-service.svelte +9 -10
- package/dist/index.d.ts +6 -1
- package/dist/index.js +6 -1
- package/dist/is-known-resource.d.ts +3 -0
- package/dist/is-known-resource.js +5 -0
- package/dist/pip/context.svelte.d.ts +2 -0
- package/dist/pip/context.svelte.js +48 -20
- package/dist/registry.d.ts +28 -0
- package/dist/registry.js +176 -0
- package/dist/resource-triplet.d.ts +37 -0
- package/dist/resource-triplet.js +37 -0
- package/dist/resource-widget-types.d.ts +21 -0
- package/dist/resource-widget-types.js +1 -0
- package/dist/resource.d.ts +0 -9
- package/dist/resource.js +0 -72
- package/dist/show-resource-widget.d.ts +3 -0
- package/dist/show-resource-widget.js +10 -0
- package/package.json +23 -6
package/dist/registry.js
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { ArmGetJointPositionsWidget, ArmIsMovingWidget, ArmMoveToJointPositionsWidget, ArmMoveToPositionWidget, ArmQuickMoveWidget, ArmWidget, AudioInputGetPropertiesWidget, AudioInputWidget, AudioOutputGetPropertiesWidget, AudioOutputWidget, BaseIsMovingWidget, BaseMoveStraightWidget, BaseQuickMoveWidget, BaseSetPowerWidget, BaseSetVelocityWidget, BaseSpinWidget, BaseWidget, BoardWidget, ButtonWidget, CameraWidget, DiscoveryWidget, EncoderGetPositionWidget, EncoderWidget, GantryGetPositionWidget, GantryHomeWidget, GantryIsMovingWidget, GantryMoveToPositionWidget, GantryQuickMoveWidget, GantryWidget, GripperGrabWidget, GripperIsHoldingSomethingWidget, GripperIsMovingWidget, GripperOpenWidget, GripperWidget, InputControllerWidget, MLModelServiceWidget, MotionMoveWidget, MotionServiceWidget, MotorGoForWidget, MotorGoToWidget, MotorIsMovingWidget, MotorQuickMoveWidget, MotorSetPowerWidget, MotorSetRPMWidget, MotorWidget, MovementSensorGetAccuracyWidget, MovementSensorGetCompassHeadingWidget, MovementSensorGetOrientationWidget, MovementSensorGetPositionWidget, MovementSensorWidget, NavigationServiceWidget, PowerSensorGetCurrentWidget, PowerSensorGetPowerWidget, PowerSensorGetVoltageWidget, PowerSensorWidget, SensorWidget, ServoIsMovingWidget, ServoMoveWidget, ServoQuickMoveWidget, ServoWidget, SlamGetPositionWidget, SlamWidget, SwitchWidget, VisionServiceWidget, } from "./components/index.js";
|
|
2
|
+
import { getResourceAPI } from "./get-resource-api.js";
|
|
3
|
+
import { ResourceTriplets } from "./resource-triplet.js";
|
|
4
|
+
/**
|
|
5
|
+
* Maps a resource's API triplet to its composite test card and individual API widgets.
|
|
6
|
+
* Referencing this pulls every widget (and its optional peers) into the build, which is
|
|
7
|
+
* why the lookups below live behind the `/registry` entry point rather than the root.
|
|
8
|
+
*/
|
|
9
|
+
const resourceWidgetRegistry = {
|
|
10
|
+
// components
|
|
11
|
+
[ResourceTriplets.Arm]: {
|
|
12
|
+
widget: ArmWidget,
|
|
13
|
+
apis: [
|
|
14
|
+
{
|
|
15
|
+
id: 'move-to-joint-positions',
|
|
16
|
+
label: 'MoveToJointPositions',
|
|
17
|
+
widgets: [ArmMoveToJointPositionsWidget],
|
|
18
|
+
},
|
|
19
|
+
{ id: 'move-to-position', label: 'MoveToPosition', widgets: [ArmMoveToPositionWidget] },
|
|
20
|
+
{ id: 'quick-move', label: 'Quick move', widgets: [ArmQuickMoveWidget] },
|
|
21
|
+
{
|
|
22
|
+
id: 'get-joint-positions',
|
|
23
|
+
label: 'GetJointPositions',
|
|
24
|
+
widgets: [ArmGetJointPositionsWidget],
|
|
25
|
+
},
|
|
26
|
+
{ id: 'is-moving', label: 'IsMoving', widgets: [ArmIsMovingWidget] },
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
[ResourceTriplets.AudioInput]: {
|
|
30
|
+
widget: AudioInputWidget,
|
|
31
|
+
apis: [
|
|
32
|
+
{ id: 'get-properties', label: 'GetProperties', widgets: [AudioInputGetPropertiesWidget] },
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
[ResourceTriplets.AudioOutput]: {
|
|
36
|
+
widget: AudioOutputWidget,
|
|
37
|
+
apis: [
|
|
38
|
+
{
|
|
39
|
+
id: 'get-properties',
|
|
40
|
+
label: 'GetProperties',
|
|
41
|
+
widgets: [AudioOutputGetPropertiesWidget],
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
[ResourceTriplets.Base]: {
|
|
46
|
+
widget: BaseWidget,
|
|
47
|
+
apis: [
|
|
48
|
+
{ id: 'quick-move', label: 'Quick move', widgets: [BaseQuickMoveWidget] },
|
|
49
|
+
{ id: 'move-straight', label: 'MoveStraight', widgets: [BaseMoveStraightWidget] },
|
|
50
|
+
{ id: 'spin', label: 'Spin', widgets: [BaseSpinWidget] },
|
|
51
|
+
{ id: 'set-power', label: 'SetPower', widgets: [BaseSetPowerWidget] },
|
|
52
|
+
{ id: 'set-velocity', label: 'SetVelocity', widgets: [BaseSetVelocityWidget] },
|
|
53
|
+
{ id: 'is-moving', label: 'IsMoving', widgets: [BaseIsMovingWidget] },
|
|
54
|
+
],
|
|
55
|
+
},
|
|
56
|
+
[ResourceTriplets.Board]: { widget: BoardWidget, apis: [] },
|
|
57
|
+
[ResourceTriplets.Button]: { widget: ButtonWidget, apis: [] },
|
|
58
|
+
[ResourceTriplets.Camera]: { widget: CameraWidget, apis: [] },
|
|
59
|
+
[ResourceTriplets.Encoder]: {
|
|
60
|
+
widget: EncoderWidget,
|
|
61
|
+
apis: [{ id: 'get-position', label: 'GetPosition', widgets: [EncoderGetPositionWidget] }],
|
|
62
|
+
},
|
|
63
|
+
[ResourceTriplets.Gantry]: {
|
|
64
|
+
widget: GantryWidget,
|
|
65
|
+
apis: [
|
|
66
|
+
{ id: 'home', label: 'Home', widgets: [GantryHomeWidget] },
|
|
67
|
+
{ id: 'move-to-position', label: 'MoveToPosition', widgets: [GantryMoveToPositionWidget] },
|
|
68
|
+
{ id: 'quick-move', label: 'Quick move', widgets: [GantryQuickMoveWidget] },
|
|
69
|
+
{ id: 'get-position', label: 'GetPosition', widgets: [GantryGetPositionWidget] },
|
|
70
|
+
{ id: 'is-moving', label: 'IsMoving', widgets: [GantryIsMovingWidget] },
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
|
+
[ResourceTriplets.Gripper]: {
|
|
74
|
+
widget: GripperWidget,
|
|
75
|
+
apis: [
|
|
76
|
+
{ id: 'open-grab', label: 'Open / Grab', widgets: [GripperOpenWidget, GripperGrabWidget] },
|
|
77
|
+
{
|
|
78
|
+
id: 'is-holding-something',
|
|
79
|
+
label: 'IsHoldingSomething',
|
|
80
|
+
widgets: [GripperIsHoldingSomethingWidget],
|
|
81
|
+
},
|
|
82
|
+
{ id: 'is-moving', label: 'IsMoving', widgets: [GripperIsMovingWidget] },
|
|
83
|
+
],
|
|
84
|
+
},
|
|
85
|
+
[ResourceTriplets.InputController]: { widget: InputControllerWidget, apis: [] },
|
|
86
|
+
[ResourceTriplets.Motor]: {
|
|
87
|
+
widget: MotorWidget,
|
|
88
|
+
apis: [
|
|
89
|
+
{ id: 'quick-move', label: 'Quick move', widgets: [MotorQuickMoveWidget] },
|
|
90
|
+
{ id: 'set-power', label: 'SetPower', widgets: [MotorSetPowerWidget] },
|
|
91
|
+
{ id: 'set-rpm', label: 'SetRPM', widgets: [MotorSetRPMWidget] },
|
|
92
|
+
{ id: 'go-for', label: 'GoFor', widgets: [MotorGoForWidget] },
|
|
93
|
+
{ id: 'go-to', label: 'GoTo', widgets: [MotorGoToWidget] },
|
|
94
|
+
{ id: 'is-moving', label: 'IsMoving', widgets: [MotorIsMovingWidget] },
|
|
95
|
+
],
|
|
96
|
+
},
|
|
97
|
+
[ResourceTriplets.MovementSensor]: {
|
|
98
|
+
widget: MovementSensorWidget,
|
|
99
|
+
apis: [
|
|
100
|
+
{ id: 'get-position', label: 'GetPosition', widgets: [MovementSensorGetPositionWidget] },
|
|
101
|
+
{
|
|
102
|
+
id: 'get-orientation',
|
|
103
|
+
label: 'GetOrientation',
|
|
104
|
+
widgets: [MovementSensorGetOrientationWidget],
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
id: 'get-compass-heading',
|
|
108
|
+
label: 'GetCompassHeading',
|
|
109
|
+
widgets: [MovementSensorGetCompassHeadingWidget],
|
|
110
|
+
},
|
|
111
|
+
{ id: 'get-accuracy', label: 'GetAccuracy', widgets: [MovementSensorGetAccuracyWidget] },
|
|
112
|
+
],
|
|
113
|
+
},
|
|
114
|
+
[ResourceTriplets.PowerSensor]: {
|
|
115
|
+
widget: PowerSensorWidget,
|
|
116
|
+
apis: [
|
|
117
|
+
{ id: 'get-voltage', label: 'GetVoltage', widgets: [PowerSensorGetVoltageWidget] },
|
|
118
|
+
{ id: 'get-current', label: 'GetCurrent', widgets: [PowerSensorGetCurrentWidget] },
|
|
119
|
+
{ id: 'get-power', label: 'GetPower', widgets: [PowerSensorGetPowerWidget] },
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
[ResourceTriplets.Sensor]: { widget: SensorWidget, apis: [] },
|
|
123
|
+
[ResourceTriplets.Servo]: {
|
|
124
|
+
widget: ServoWidget,
|
|
125
|
+
apis: [
|
|
126
|
+
{ id: 'move', label: 'Move', widgets: [ServoMoveWidget] },
|
|
127
|
+
{ id: 'quick-move', label: 'Quick move', widgets: [ServoQuickMoveWidget] },
|
|
128
|
+
{ id: 'is-moving', label: 'IsMoving', widgets: [ServoIsMovingWidget] },
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
[ResourceTriplets.Switch]: { widget: SwitchWidget, apis: [] },
|
|
132
|
+
// services
|
|
133
|
+
[ResourceTriplets.Discovery]: { widget: DiscoveryWidget, apis: [] },
|
|
134
|
+
[ResourceTriplets.MLModel]: { widget: MLModelServiceWidget, apis: [] },
|
|
135
|
+
[ResourceTriplets.Motion]: {
|
|
136
|
+
widget: MotionServiceWidget,
|
|
137
|
+
apis: [{ id: 'move', label: 'Move', widgets: [MotionMoveWidget] }],
|
|
138
|
+
},
|
|
139
|
+
[ResourceTriplets.Navigation]: { widget: NavigationServiceWidget, apis: [] },
|
|
140
|
+
[ResourceTriplets.Slam]: {
|
|
141
|
+
widget: SlamWidget,
|
|
142
|
+
apis: [{ id: 'get-position', label: 'GetPosition', widgets: [SlamGetPositionWidget] }],
|
|
143
|
+
},
|
|
144
|
+
[ResourceTriplets.Vision]: { widget: VisionServiceWidget, apis: [] },
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* Returns a resource's individual API widgets. Each entry carries a stable `id`, a
|
|
148
|
+
* display `label`, and the `widgets` to render with `{ partID, resourceName }`.
|
|
149
|
+
*
|
|
150
|
+
* Returns `[]` for a resource with a card but no standalone API widgets, and for
|
|
151
|
+
* unrecognized resources.
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* apiWidgetsForResource(gripperResourceName)
|
|
155
|
+
* // [{ id: 'open-grab', label: 'Open / Grab', widgets: [GripperOpenWidget, GripperGrabWidget] }, ...]
|
|
156
|
+
*/
|
|
157
|
+
export const apiWidgetsForResource = (resource) => resourceWidgetRegistry[getResourceAPI(resource)]?.apis ?? [];
|
|
158
|
+
/**
|
|
159
|
+
* Returns every resource triplet that has a test card, mapped to its API widgets.
|
|
160
|
+
* Use this to enumerate the full catalog, e.g. a menu spanning every resource type;
|
|
161
|
+
* for a single resource, prefer `apiWidgetsForResource`.
|
|
162
|
+
*
|
|
163
|
+
* @example
|
|
164
|
+
* availableAPIWidgets()[ResourceTriplets.Gripper]
|
|
165
|
+
* // [{ id: 'open-grab', label: 'Open / Grab', widgets: [GripperOpenWidget, GripperGrabWidget] }, ...]
|
|
166
|
+
*/
|
|
167
|
+
export const availableAPIWidgets = () => {
|
|
168
|
+
const result = {};
|
|
169
|
+
for (const [api, entry] of Object.entries(resourceWidgetRegistry)) {
|
|
170
|
+
if (entry)
|
|
171
|
+
result[api] = entry.apis;
|
|
172
|
+
}
|
|
173
|
+
return result;
|
|
174
|
+
};
|
|
175
|
+
/** Returns the full composite test card for a resource, or `undefined` if none exists. */
|
|
176
|
+
export const widgetForResource = (resource) => resourceWidgetRegistry[getResourceAPI(resource)]?.widget;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/** The canonical set of Viam resource API triplets. */
|
|
2
|
+
export declare const ResourceTriplets: {
|
|
3
|
+
readonly Arm: "rdk:component:arm";
|
|
4
|
+
readonly AudioInput: "rdk:component:audio_in";
|
|
5
|
+
readonly AudioOutput: "rdk:component:audio_out";
|
|
6
|
+
readonly Base: "rdk:component:base";
|
|
7
|
+
readonly Board: "rdk:component:board";
|
|
8
|
+
readonly Button: "rdk:component:button";
|
|
9
|
+
readonly Camera: "rdk:component:camera";
|
|
10
|
+
readonly Encoder: "rdk:component:encoder";
|
|
11
|
+
readonly Gantry: "rdk:component:gantry";
|
|
12
|
+
readonly GenericComponent: "rdk:component:generic";
|
|
13
|
+
readonly Gripper: "rdk:component:gripper";
|
|
14
|
+
readonly InputController: "rdk:component:input_controller";
|
|
15
|
+
readonly Motor: "rdk:component:motor";
|
|
16
|
+
readonly MovementSensor: "rdk:component:movement_sensor";
|
|
17
|
+
readonly PoseTracker: "rdk:component:pose_tracker";
|
|
18
|
+
readonly PowerSensor: "rdk:component:power_sensor";
|
|
19
|
+
readonly Sensor: "rdk:component:sensor";
|
|
20
|
+
readonly Servo: "rdk:component:servo";
|
|
21
|
+
readonly Switch: "rdk:component:switch";
|
|
22
|
+
readonly BaseRemoteControl: "rdk:service:base_remote_control";
|
|
23
|
+
readonly DataManager: "rdk:service:data_manager";
|
|
24
|
+
readonly Discovery: "rdk:service:discovery";
|
|
25
|
+
readonly GenericService: "rdk:service:generic";
|
|
26
|
+
readonly MLModel: "rdk:service:mlmodel";
|
|
27
|
+
readonly Motion: "rdk:service:motion";
|
|
28
|
+
readonly Navigation: "rdk:service:navigation";
|
|
29
|
+
readonly Slam: "rdk:service:slam";
|
|
30
|
+
readonly Sensors: "rdk:service:sensors";
|
|
31
|
+
readonly Shell: "rdk:service:shell";
|
|
32
|
+
readonly Video: "rdk:service:video";
|
|
33
|
+
readonly Vision: "rdk:service:vision";
|
|
34
|
+
readonly WorldStateStore: "rdk:service:world_state_store";
|
|
35
|
+
};
|
|
36
|
+
/** A Viam resource API triplet, e.g. `'rdk:component:arm'`. */
|
|
37
|
+
export type ResourceTriplet = (typeof ResourceTriplets)[keyof typeof ResourceTriplets];
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/** The canonical set of Viam resource API triplets. */
|
|
2
|
+
export const ResourceTriplets = {
|
|
3
|
+
// components
|
|
4
|
+
Arm: 'rdk:component:arm',
|
|
5
|
+
AudioInput: 'rdk:component:audio_in',
|
|
6
|
+
AudioOutput: 'rdk:component:audio_out',
|
|
7
|
+
Base: 'rdk:component:base',
|
|
8
|
+
Board: 'rdk:component:board',
|
|
9
|
+
Button: 'rdk:component:button',
|
|
10
|
+
Camera: 'rdk:component:camera',
|
|
11
|
+
Encoder: 'rdk:component:encoder',
|
|
12
|
+
Gantry: 'rdk:component:gantry',
|
|
13
|
+
GenericComponent: 'rdk:component:generic',
|
|
14
|
+
Gripper: 'rdk:component:gripper',
|
|
15
|
+
InputController: 'rdk:component:input_controller',
|
|
16
|
+
Motor: 'rdk:component:motor',
|
|
17
|
+
MovementSensor: 'rdk:component:movement_sensor',
|
|
18
|
+
PoseTracker: 'rdk:component:pose_tracker',
|
|
19
|
+
PowerSensor: 'rdk:component:power_sensor',
|
|
20
|
+
Sensor: 'rdk:component:sensor',
|
|
21
|
+
Servo: 'rdk:component:servo',
|
|
22
|
+
Switch: 'rdk:component:switch',
|
|
23
|
+
// services
|
|
24
|
+
BaseRemoteControl: 'rdk:service:base_remote_control',
|
|
25
|
+
DataManager: 'rdk:service:data_manager',
|
|
26
|
+
Discovery: 'rdk:service:discovery',
|
|
27
|
+
GenericService: 'rdk:service:generic',
|
|
28
|
+
MLModel: 'rdk:service:mlmodel',
|
|
29
|
+
Motion: 'rdk:service:motion',
|
|
30
|
+
Navigation: 'rdk:service:navigation',
|
|
31
|
+
Slam: 'rdk:service:slam',
|
|
32
|
+
Sensors: 'rdk:service:sensors',
|
|
33
|
+
Shell: 'rdk:service:shell',
|
|
34
|
+
Video: 'rdk:service:video',
|
|
35
|
+
Vision: 'rdk:service:vision',
|
|
36
|
+
WorldStateStore: 'rdk:service:world_state_store',
|
|
37
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Component } from 'svelte';
|
|
2
|
+
/** Every resource widget shares this prop contract and is self-contained. */
|
|
3
|
+
export interface ResourceWidgetProps {
|
|
4
|
+
partID: string;
|
|
5
|
+
resourceName: string;
|
|
6
|
+
}
|
|
7
|
+
export type ResourceWidget = Component<ResourceWidgetProps>;
|
|
8
|
+
/** One of a resource's individual API widgets (e.g. a menu entry); renders one or more self-contained widgets. */
|
|
9
|
+
export interface ResourceAPIWidget {
|
|
10
|
+
/** Stable identifier, safe to persist. Never rename. e.g. `'move-to-joint-positions'`. */
|
|
11
|
+
id: string;
|
|
12
|
+
/** Human-readable menu label. e.g. `'MoveToJointPositions'` or `'Quick move'`. */
|
|
13
|
+
label: string;
|
|
14
|
+
/** The self-contained widget(s) this entry renders, each with `{ partID, resourceName }`. */
|
|
15
|
+
widgets: ResourceWidget[];
|
|
16
|
+
}
|
|
17
|
+
/** A registry entry: a resource's composite card plus its individual API widgets. */
|
|
18
|
+
export interface ResourceWidgetEntry {
|
|
19
|
+
widget: ResourceWidget;
|
|
20
|
+
apis: ResourceAPIWidget[];
|
|
21
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/resource.d.ts
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import type { ResourceStatus } from '@viamrobotics/svelte-sdk';
|
|
2
|
-
import type { Component } from 'svelte';
|
|
3
2
|
import { type ResourceName } from '@viamrobotics/sdk';
|
|
4
3
|
export type NamedResourceStatus = ResourceStatus & {
|
|
5
4
|
name: ResourceName;
|
|
6
5
|
};
|
|
7
|
-
interface ResourceWidget {
|
|
8
|
-
partID: string;
|
|
9
|
-
resourceName: string;
|
|
10
|
-
}
|
|
11
6
|
export declare const ResourceStatusText: {
|
|
12
7
|
0: string;
|
|
13
8
|
3: string;
|
|
@@ -17,7 +12,3 @@ export declare const ResourceStatusText: {
|
|
|
17
12
|
4: string;
|
|
18
13
|
};
|
|
19
14
|
export declare const sortResourceNames: (names: ResourceName[]) => ResourceName[];
|
|
20
|
-
export declare const hasWidget: (resource: ResourceName) => boolean;
|
|
21
|
-
export declare const widgetForResource: (resource: ResourceName) => Component<ResourceWidget> | undefined;
|
|
22
|
-
export declare const showResourceWidget: (resource: ResourceName) => boolean;
|
|
23
|
-
export {};
|
package/dist/resource.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
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';
|
|
4
|
-
import { getResourceAPI } from "./get-resource-api.js";
|
|
5
2
|
export const ResourceStatusText = {
|
|
6
3
|
[robotApi.ResourceStatus_State.UNSPECIFIED]: 'unspecified',
|
|
7
4
|
[robotApi.ResourceStatus_State.READY]: 'ready',
|
|
@@ -10,60 +7,6 @@ export const ResourceStatusText = {
|
|
|
10
7
|
[robotApi.ResourceStatus_State.UNCONFIGURED]: 'unconfigured',
|
|
11
8
|
[robotApi.ResourceStatus_State.REMOVING]: 'removing',
|
|
12
9
|
};
|
|
13
|
-
// The types are nicer to work with as arrays (as opposed to a record of objects) because TS will infer the types.
|
|
14
|
-
// try not to expose this map so that we can easily refactor it.
|
|
15
|
-
const resourceMap =
|
|
16
|
-
// api: [client, testView, showResourceInControlView]
|
|
17
|
-
// list created via `cat rdkbuiltins/viam-server-stable.json | rg "api" | sort | uniq`
|
|
18
|
-
{
|
|
19
|
-
'rdk:component:arm': [clientMap['rdk:component:arm'], ArmWidget, true],
|
|
20
|
-
'rdk:component:audio_in': [clientMap['rdk:component:audio_in'], AudioInputWidget, true],
|
|
21
|
-
'rdk:component:audio_out': [clientMap['rdk:component:audio_out'], AudioOutputWidget, true],
|
|
22
|
-
'rdk:component:base': [clientMap['rdk:component:base'], BaseWidget, true],
|
|
23
|
-
'rdk:component:board': [clientMap['rdk:component:board'], BoardWidget, true],
|
|
24
|
-
'rdk:component:button': [clientMap['rdk:component:button'], ButtonWidget, true],
|
|
25
|
-
'rdk:component:camera': [clientMap['rdk:component:camera'], CameraWidget, true],
|
|
26
|
-
'rdk:component:encoder': [clientMap['rdk:component:encoder'], EncoderWidget, true],
|
|
27
|
-
'rdk:component:gantry': [clientMap['rdk:component:gantry'], GantryWidget, true],
|
|
28
|
-
'rdk:component:generic': [clientMap['rdk:component:generic'], undefined, true],
|
|
29
|
-
'rdk:component:gripper': [clientMap['rdk:component:gripper'], GripperWidget, true],
|
|
30
|
-
'rdk:component:input_controller': [
|
|
31
|
-
clientMap['rdk:component:input_controller'],
|
|
32
|
-
InputControllerWidget,
|
|
33
|
-
true,
|
|
34
|
-
],
|
|
35
|
-
'rdk:component:motor': [clientMap['rdk:component:motor'], MotorWidget, true],
|
|
36
|
-
'rdk:component:movement_sensor': [
|
|
37
|
-
clientMap['rdk:component:movement_sensor'],
|
|
38
|
-
MovementSensorWidget,
|
|
39
|
-
true,
|
|
40
|
-
],
|
|
41
|
-
'rdk:component:pose_tracker': [clientMap['rdk:component:pose_tracker'], undefined, true],
|
|
42
|
-
'rdk:component:power_sensor': [
|
|
43
|
-
clientMap['rdk:component:power_sensor'],
|
|
44
|
-
PowerSensorWidget,
|
|
45
|
-
true,
|
|
46
|
-
],
|
|
47
|
-
'rdk:component:sensor': [clientMap['rdk:component:sensor'], SensorWidget, true],
|
|
48
|
-
'rdk:component:servo': [clientMap['rdk:component:servo'], ServoWidget, true],
|
|
49
|
-
'rdk:component:switch': [clientMap['rdk:component:switch'], SwitchWidget, true],
|
|
50
|
-
'rdk:service:base_remote_control': [undefined, undefined, true],
|
|
51
|
-
// dont show -- confusing to users
|
|
52
|
-
'rdk:service:data_manager': [clientMap['rdk:service:data_manager'], undefined, false],
|
|
53
|
-
'rdk:service:discovery': [clientMap['rdk:service:discovery'], DiscoveryWidget, true],
|
|
54
|
-
'rdk:service:generic': [clientMap['rdk:service:generic'], undefined, true],
|
|
55
|
-
'rdk:service:mlmodel': [clientMap['rdk:service:mlmodel'], MLModelServiceWidget, true],
|
|
56
|
-
// dont show -- confusing to users
|
|
57
|
-
'rdk:service:motion': [clientMap['rdk:service:motion'], undefined, false],
|
|
58
|
-
'rdk:service:navigation': [clientMap['rdk:service:navigation'], NavigationServiceWidget, true],
|
|
59
|
-
// dont show -- confusing to users
|
|
60
|
-
'rdk:service:sensors': [undefined, undefined, false],
|
|
61
|
-
'rdk:service:shell': [undefined, undefined, false],
|
|
62
|
-
'rdk:service:slam': [clientMap['rdk:service:slam'], SlamWidget, true],
|
|
63
|
-
'rdk:service:vision': [clientMap['rdk:service:vision'], VisionServiceWidget, true],
|
|
64
|
-
'rdk:service:world_state_store': [clientMap['rdk:service:world_state_store'], undefined, true],
|
|
65
|
-
'rdk:service:video': [clientMap['rdk:service:video'], undefined, true],
|
|
66
|
-
};
|
|
67
10
|
// sorts resource names by local/remote -> type -> name (alphabetical) to produce a list like
|
|
68
11
|
// component a
|
|
69
12
|
// component z
|
|
@@ -79,18 +22,3 @@ export const sortResourceNames = (names) => names.toSorted(({ type, name }, { ty
|
|
|
79
22
|
// sort components before services
|
|
80
23
|
return type === otherType ? name.localeCompare(otherName) : type.localeCompare(otherType);
|
|
81
24
|
});
|
|
82
|
-
export const hasWidget = (resource) => getResourceAPI(resource) in resourceMap;
|
|
83
|
-
export const widgetForResource = (resource) => {
|
|
84
|
-
const resAPI = getResourceAPI(resource);
|
|
85
|
-
return resAPI in resourceMap
|
|
86
|
-
? resourceMap[resAPI][1]
|
|
87
|
-
: undefined;
|
|
88
|
-
};
|
|
89
|
-
export const showResourceWidget = (resource) => {
|
|
90
|
-
if (resource.namespace === 'rdk-internal') {
|
|
91
|
-
return false;
|
|
92
|
-
}
|
|
93
|
-
const resAPI = getResourceAPI(resource);
|
|
94
|
-
// unknown apis should still get cards & show up in the sidebar
|
|
95
|
-
return resAPI in resourceMap ? resourceMap[resAPI][2] : true;
|
|
96
|
-
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { getResourceAPI } from "./get-resource-api.js";
|
|
2
|
+
import { ResourceTriplets } from "./resource-triplet.js";
|
|
3
|
+
const hiddenResources = new Set([
|
|
4
|
+
ResourceTriplets.DataManager,
|
|
5
|
+
ResourceTriplets.Motion,
|
|
6
|
+
ResourceTriplets.Sensors,
|
|
7
|
+
ResourceTriplets.Shell,
|
|
8
|
+
]);
|
|
9
|
+
/** Whether the control view should surface a card for this resource. */
|
|
10
|
+
export const showResourceWidget = (resource) => resource.namespace !== 'rdk-internal' && !hiddenResources.has(getResourceAPI(resource));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@viamrobotics/test-widgets",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -17,6 +17,10 @@
|
|
|
17
17
|
".": {
|
|
18
18
|
"types": "./dist/index.d.ts",
|
|
19
19
|
"svelte": "./dist/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./registry": {
|
|
22
|
+
"types": "./dist/registry.d.ts",
|
|
23
|
+
"svelte": "./dist/registry.js"
|
|
20
24
|
}
|
|
21
25
|
},
|
|
22
26
|
"publishConfig": {
|
|
@@ -33,13 +37,26 @@
|
|
|
33
37
|
"@viamrobotics/prime-core": ">=0.1",
|
|
34
38
|
"@viamrobotics/sdk": ">=0.68",
|
|
35
39
|
"@viamrobotics/svelte-sdk": ">=1.1",
|
|
40
|
+
"@viamrobotics/three": ">=0.0.9",
|
|
36
41
|
"lodash-es": ">=4",
|
|
42
|
+
"maplibre-gl": ">=5",
|
|
37
43
|
"runed": ">=0.28",
|
|
38
44
|
"svelte": ">=5",
|
|
39
45
|
"three": ">=0.178",
|
|
40
46
|
"threlte-uikit": ">=2"
|
|
41
47
|
},
|
|
48
|
+
"peerDependenciesMeta": {
|
|
49
|
+
"@viamrobotics/three": {
|
|
50
|
+
"optional": true
|
|
51
|
+
},
|
|
52
|
+
"maplibre-gl": {
|
|
53
|
+
"optional": true
|
|
54
|
+
}
|
|
55
|
+
},
|
|
42
56
|
"devDependencies": {
|
|
57
|
+
"@ag-grid-community/client-side-row-model": "^32.3.9",
|
|
58
|
+
"@ag-grid-community/core": "^32.3.9",
|
|
59
|
+
"@ag-grid-community/styles": "^32.3.9",
|
|
43
60
|
"@changesets/cli": "^2.31.0",
|
|
44
61
|
"@eslint/compat": "^2.0.5",
|
|
45
62
|
"@eslint/js": "^10.0.1",
|
|
@@ -66,15 +83,15 @@
|
|
|
66
83
|
"@types/lodash-es": "^4.17.12",
|
|
67
84
|
"@types/node": "^25.6.0",
|
|
68
85
|
"@types/three": "^0.183.1",
|
|
69
|
-
"@viamrobotics/motion-tools": "^1.19.1",
|
|
70
86
|
"@viamrobotics/prime-core": "^0.1.22",
|
|
71
87
|
"@viamrobotics/sdk": "^0.69.0",
|
|
72
88
|
"@viamrobotics/svelte-sdk": "^1.2.1",
|
|
73
89
|
"@viamrobotics/tailwind-config": "^1.0.0",
|
|
74
90
|
"@viamrobotics/three": "^0.0.9",
|
|
75
|
-
"@vitest/browser": "^4.1.
|
|
91
|
+
"@vitest/browser": "^4.1.8",
|
|
76
92
|
"@vitest/browser-playwright": "^4.1.5",
|
|
77
93
|
"@vitest/coverage-v8": "^4.1.5",
|
|
94
|
+
"@zag-js/dialog": "^1.37.0",
|
|
78
95
|
"eslint": "^10.2.1",
|
|
79
96
|
"eslint-config-prettier": "^10.1.8",
|
|
80
97
|
"eslint-plugin-perfectionist": "^5.9.0",
|
|
@@ -100,7 +117,7 @@
|
|
|
100
117
|
"type-fest": "^5.6.0",
|
|
101
118
|
"typescript": "^6.0.3",
|
|
102
119
|
"typescript-eslint": "^8.59.1",
|
|
103
|
-
"vite": "^8.0.
|
|
120
|
+
"vite": "^8.0.16",
|
|
104
121
|
"vite-plugin-devtools-json": "^1.0.0",
|
|
105
122
|
"vite-plugin-glsl": "^1.6.0",
|
|
106
123
|
"vitest": "^4.1.5",
|
|
@@ -118,8 +135,8 @@
|
|
|
118
135
|
"preview": "vite preview",
|
|
119
136
|
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --fail-on-warnings",
|
|
120
137
|
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
|
121
|
-
"lint": "eslint .",
|
|
122
|
-
"lint:fix": "eslint . --fix",
|
|
138
|
+
"lint": "eslint . --concurrency auto",
|
|
139
|
+
"lint:fix": "eslint . --fix --concurrency auto",
|
|
123
140
|
"format": "prettier --check .",
|
|
124
141
|
"format:fix": "prettier --write .",
|
|
125
142
|
"test:unit": "vitest",
|