@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.
Files changed (98) hide show
  1. package/README.md +33 -0
  2. package/dist/client-map.d.ts +30 -30
  3. package/dist/client-map.js +32 -29
  4. package/dist/components/index.d.ts +22 -0
  5. package/dist/components/index.js +22 -0
  6. package/dist/components/is-moving.svelte +1 -4
  7. package/dist/components/mutation-section.svelte +1 -1
  8. package/dist/components/navigation-map/components/obstacle.svelte +2 -1
  9. package/dist/components/three/capsule-geometry.d.ts +10 -0
  10. package/dist/components/three/capsule-geometry.js +19 -0
  11. package/dist/components/three/index.d.ts +1 -0
  12. package/dist/components/three/index.js +1 -0
  13. package/dist/components/widgets/arm/arm.svelte +8 -5
  14. package/dist/components/widgets/arm/get-joint-positions-widget.svelte +36 -0
  15. package/dist/components/widgets/arm/get-joint-positions-widget.svelte.d.ts +7 -0
  16. package/dist/components/widgets/arm/is-moving-widget.svelte +20 -0
  17. package/dist/components/widgets/arm/is-moving-widget.svelte.d.ts +7 -0
  18. package/dist/components/widgets/arm/move-to-joint-positions-widget.svelte +9 -5
  19. package/dist/components/widgets/arm/move-to-position.svelte +31 -3
  20. package/dist/components/widgets/audio-input/get-properties-widget.svelte +43 -0
  21. package/dist/components/widgets/audio-input/get-properties-widget.svelte.d.ts +7 -0
  22. package/dist/components/widgets/audio-output/get-properties-widget.svelte +43 -0
  23. package/dist/components/widgets/audio-output/get-properties-widget.svelte.d.ts +7 -0
  24. package/dist/components/widgets/base/is-moving-widget.svelte +20 -0
  25. package/dist/components/widgets/base/is-moving-widget.svelte.d.ts +7 -0
  26. package/dist/components/widgets/base/quick-move.svelte +12 -5
  27. package/dist/components/widgets/camera/live-or-polling-video.svelte +8 -1
  28. package/dist/components/widgets/do-command/do-command.svelte +21 -7
  29. package/dist/components/widgets/do-command/do-command.svelte.d.ts +8 -1
  30. package/dist/components/widgets/encoder/encoder-position-type.d.ts +8 -0
  31. package/dist/components/widgets/encoder/encoder-position-type.js +20 -0
  32. package/dist/components/widgets/encoder/encoder.svelte +3 -20
  33. package/dist/components/widgets/encoder/get-position-widget.svelte +54 -0
  34. package/dist/components/widgets/encoder/get-position-widget.svelte.d.ts +7 -0
  35. package/dist/components/widgets/gantry/get-position-widget.svelte +43 -0
  36. package/dist/components/widgets/gantry/get-position-widget.svelte.d.ts +7 -0
  37. package/dist/components/widgets/gantry/is-moving-widget.svelte +20 -0
  38. package/dist/components/widgets/gantry/is-moving-widget.svelte.d.ts +7 -0
  39. package/dist/components/widgets/gripper/gripper.svelte +1 -1
  40. package/dist/components/widgets/gripper/is-holding-something.svelte +1 -4
  41. package/dist/components/widgets/gripper/is-moving-widget.svelte +20 -0
  42. package/dist/components/widgets/gripper/is-moving-widget.svelte.d.ts +7 -0
  43. package/dist/components/widgets/motion/component-name-select.svelte +29 -0
  44. package/dist/components/widgets/motion/component-name-select.svelte.d.ts +9 -0
  45. package/dist/components/widgets/motion/frame-system-config.d.ts +28 -0
  46. package/dist/components/widgets/motion/frame-system-config.js +30 -0
  47. package/dist/components/widgets/motion/motion.svelte +27 -0
  48. package/dist/components/widgets/motion/motion.svelte.d.ts +7 -0
  49. package/dist/components/widgets/motion/move-widget.svelte +84 -0
  50. package/dist/components/widgets/motion/move-widget.svelte.d.ts +7 -0
  51. package/dist/components/widgets/motion/move.svelte +127 -0
  52. package/dist/components/widgets/motion/move.svelte.d.ts +14 -0
  53. package/dist/components/widgets/motion/parse-move-args.d.ts +24 -0
  54. package/dist/components/widgets/motion/parse-move-args.js +23 -0
  55. package/dist/components/widgets/motion/parse-pasted-pose.d.ts +10 -0
  56. package/dist/components/widgets/motion/parse-pasted-pose.js +30 -0
  57. package/dist/components/widgets/motion/pose-in-frame-input.svelte +168 -0
  58. package/dist/components/widgets/motion/pose-in-frame-input.svelte.d.ts +10 -0
  59. package/dist/components/widgets/motor/is-moving-widget.svelte +20 -0
  60. package/dist/components/widgets/motor/is-moving-widget.svelte.d.ts +7 -0
  61. package/dist/components/widgets/motor/motor.svelte +2 -8
  62. package/dist/components/widgets/movement-sensor/get-accuracy-widget.svelte +38 -0
  63. package/dist/components/widgets/movement-sensor/get-accuracy-widget.svelte.d.ts +7 -0
  64. package/dist/components/widgets/movement-sensor/get-compass-heading-widget.svelte +38 -0
  65. package/dist/components/widgets/movement-sensor/get-compass-heading-widget.svelte.d.ts +7 -0
  66. package/dist/components/widgets/movement-sensor/get-orientation-widget.svelte +38 -0
  67. package/dist/components/widgets/movement-sensor/get-orientation-widget.svelte.d.ts +7 -0
  68. package/dist/components/widgets/movement-sensor/get-position-widget.svelte +38 -0
  69. package/dist/components/widgets/movement-sensor/get-position-widget.svelte.d.ts +7 -0
  70. package/dist/components/widgets/navigation/obstacles/meshes.svelte +1 -2
  71. package/dist/components/widgets/power-sensor/get-current-widget.svelte +38 -0
  72. package/dist/components/widgets/power-sensor/get-current-widget.svelte.d.ts +7 -0
  73. package/dist/components/widgets/power-sensor/get-power-widget.svelte +38 -0
  74. package/dist/components/widgets/power-sensor/get-power-widget.svelte.d.ts +7 -0
  75. package/dist/components/widgets/power-sensor/get-voltage-widget.svelte +38 -0
  76. package/dist/components/widgets/power-sensor/get-voltage-widget.svelte.d.ts +7 -0
  77. package/dist/components/widgets/servo/is-moving-widget.svelte +20 -0
  78. package/dist/components/widgets/servo/is-moving-widget.svelte.d.ts +7 -0
  79. package/dist/components/widgets/slam/get-position-widget.svelte +38 -0
  80. package/dist/components/widgets/slam/get-position-widget.svelte.d.ts +7 -0
  81. package/dist/components/widgets/vision-service/vision-service.svelte +9 -10
  82. package/dist/index.d.ts +6 -1
  83. package/dist/index.js +6 -1
  84. package/dist/is-known-resource.d.ts +3 -0
  85. package/dist/is-known-resource.js +5 -0
  86. package/dist/pip/context.svelte.d.ts +2 -0
  87. package/dist/pip/context.svelte.js +48 -20
  88. package/dist/registry.d.ts +28 -0
  89. package/dist/registry.js +176 -0
  90. package/dist/resource-triplet.d.ts +37 -0
  91. package/dist/resource-triplet.js +37 -0
  92. package/dist/resource-widget-types.d.ts +21 -0
  93. package/dist/resource-widget-types.js +1 -0
  94. package/dist/resource.d.ts +0 -9
  95. package/dist/resource.js +0 -72
  96. package/dist/show-resource-widget.d.ts +3 -0
  97. package/dist/show-resource-widget.js +10 -0
  98. package/package.json +23 -6
@@ -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 {};
@@ -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,3 @@
1
+ import type { ResourceName } from '@viamrobotics/sdk';
2
+ /** Whether the control view should surface a card for this resource. */
3
+ export declare const showResourceWidget: (resource: ResourceName) => boolean;
@@ -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.7.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.6",
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.10",
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",