@viamrobotics/test-widgets 0.0.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.
Files changed (479) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +65 -0
  3. package/dist/add-image-to-dataset.d.ts +18 -0
  4. package/dist/add-image-to-dataset.js +18 -0
  5. package/dist/assert.d.ts +14 -0
  6. package/dist/assert.js +21 -0
  7. package/dist/builtin.js +59 -0
  8. package/dist/components/angle-unit-toggle.svelte +27 -0
  9. package/dist/components/angle-unit-toggle.svelte.d.ts +7 -0
  10. package/dist/components/api-section.svelte +69 -0
  11. package/dist/components/api-section.svelte.d.ts +13 -0
  12. package/dist/components/board/pin-section.svelte +28 -0
  13. package/dist/components/board/pin-section.svelte.d.ts +9 -0
  14. package/dist/components/connection-status.svelte +87 -0
  15. package/dist/components/connection-status.svelte.d.ts +14 -0
  16. package/dist/components/content-rect.svelte +21 -0
  17. package/dist/components/content-rect.svelte.d.ts +9 -0
  18. package/dist/components/copy-button.svelte +37 -0
  19. package/dist/components/copy-button.svelte.d.ts +9 -0
  20. package/dist/components/error.svelte +25 -0
  21. package/dist/components/error.svelte.d.ts +8 -0
  22. package/dist/components/image-annotations/annotation-edit-utils.d.ts +21 -0
  23. package/dist/components/image-annotations/annotation-edit-utils.js +183 -0
  24. package/dist/components/image-annotations/bounding-box-labeler.svelte +521 -0
  25. package/dist/components/image-annotations/bounding-box-labeler.svelte.d.ts +51 -0
  26. package/dist/components/image-annotations/bounding-box-types.d.ts +29 -0
  27. package/dist/components/image-annotations/bounding-box-types.js +17 -0
  28. package/dist/components/image-annotations/bounding-box.svelte +230 -0
  29. package/dist/components/image-annotations/bounding-box.svelte.d.ts +44 -0
  30. package/dist/components/image-annotations/get-image-size.d.ts +7 -0
  31. package/dist/components/image-annotations/get-image-size.js +29 -0
  32. package/dist/components/image-annotations/labeler-constants.d.ts +4 -0
  33. package/dist/components/image-annotations/labeler-constants.js +4 -0
  34. package/dist/components/image-annotations/resize-corner.svelte +47 -0
  35. package/dist/components/image-annotations/resize-corner.svelte.d.ts +9 -0
  36. package/dist/components/image-annotations/resize-edge.svelte +51 -0
  37. package/dist/components/image-annotations/resize-edge.svelte.d.ts +9 -0
  38. package/dist/components/image-annotations/resize-handle-props.d.ts +60 -0
  39. package/dist/components/image-annotations/resize-handle-props.js +66 -0
  40. package/dist/components/image-annotations/resize-handles.svelte +53 -0
  41. package/dist/components/image-annotations/resize-handles.svelte.d.ts +8 -0
  42. package/dist/components/index.d.ts +57 -0
  43. package/dist/components/index.js +56 -0
  44. package/dist/components/is-moving.svelte +66 -0
  45. package/dist/components/is-moving.svelte.d.ts +12 -0
  46. package/dist/components/maplibre/controls/center.svelte +41 -0
  47. package/dist/components/maplibre/controls/center.svelte.d.ts +19 -0
  48. package/dist/components/maplibre/controls/follow.svelte +65 -0
  49. package/dist/components/maplibre/controls/follow.svelte.d.ts +11 -0
  50. package/dist/components/maplibre/controls/navigation.svelte +57 -0
  51. package/dist/components/maplibre/controls/navigation.svelte.d.ts +23 -0
  52. package/dist/components/maplibre/controls/satellite.svelte +31 -0
  53. package/dist/components/maplibre/controls/satellite.svelte.d.ts +19 -0
  54. package/dist/components/maplibre/directional-marker.svelte +34 -0
  55. package/dist/components/maplibre/directional-marker.svelte.d.ts +13 -0
  56. package/dist/components/maplibre/hooks.d.ts +38 -0
  57. package/dist/components/maplibre/hooks.js +45 -0
  58. package/dist/components/maplibre/index.d.ts +13 -0
  59. package/dist/components/maplibre/index.js +13 -0
  60. package/dist/components/maplibre/index.svelte +232 -0
  61. package/dist/components/maplibre/index.svelte.d.ts +75 -0
  62. package/dist/components/maplibre/lnglat-input.svelte +54 -0
  63. package/dist/components/maplibre/lnglat-input.svelte.d.ts +17 -0
  64. package/dist/components/maplibre/marker.svelte +60 -0
  65. package/dist/components/maplibre/marker.svelte.d.ts +29 -0
  66. package/dist/components/maplibre/math.d.ts +12 -0
  67. package/dist/components/maplibre/math.js +18 -0
  68. package/dist/components/maplibre/plugins/google-maps.d.ts +1 -0
  69. package/dist/components/maplibre/plugins/google-maps.js +74 -0
  70. package/dist/components/maplibre/plugins/raycast.d.ts +10 -0
  71. package/dist/components/maplibre/plugins/raycast.js +29 -0
  72. package/dist/components/maplibre/plugins/three.svelte.d.ts +21 -0
  73. package/dist/components/maplibre/plugins/three.svelte.js +73 -0
  74. package/dist/components/maplibre/style.d.ts +4 -0
  75. package/dist/components/maplibre/style.js +88 -0
  76. package/dist/components/maplibre/types.d.ts +14 -0
  77. package/dist/components/maplibre/types.js +19 -0
  78. package/dist/components/maplibre/zoom.d.ts +1 -0
  79. package/dist/components/maplibre/zoom.js +1 -0
  80. package/dist/components/mutation-section.svelte +76 -0
  81. package/dist/components/mutation-section.svelte.d.ts +14 -0
  82. package/dist/components/mutation-view.svelte +29 -0
  83. package/dist/components/mutation-view.svelte.d.ts +10 -0
  84. package/dist/components/navigation-map/components/draw-tool.svelte +139 -0
  85. package/dist/components/navigation-map/components/draw-tool.svelte.d.ts +13 -0
  86. package/dist/components/navigation-map/components/input/geometry.svelte +123 -0
  87. package/dist/components/navigation-map/components/input/geometry.svelte.d.ts +9 -0
  88. package/dist/components/navigation-map/components/input/orientation.svelte +46 -0
  89. package/dist/components/navigation-map/components/input/orientation.svelte.d.ts +10 -0
  90. package/dist/components/navigation-map/components/map.svelte +145 -0
  91. package/dist/components/navigation-map/components/map.svelte.d.ts +20 -0
  92. package/dist/components/navigation-map/components/nav/index.svelte +64 -0
  93. package/dist/components/navigation-map/components/nav/index.svelte.d.ts +12 -0
  94. package/dist/components/navigation-map/components/nav/key.svelte +16 -0
  95. package/dist/components/navigation-map/components/nav/key.svelte.d.ts +8 -0
  96. package/dist/components/navigation-map/components/nav/obstacles-legend.svelte +18 -0
  97. package/dist/components/navigation-map/components/nav/obstacles-legend.svelte.d.ts +26 -0
  98. package/dist/components/navigation-map/components/nav/obstacles.svelte +206 -0
  99. package/dist/components/navigation-map/components/nav/obstacles.svelte.d.ts +7 -0
  100. package/dist/components/navigation-map/components/nav/waypoints.svelte +62 -0
  101. package/dist/components/navigation-map/components/nav/waypoints.svelte.d.ts +8 -0
  102. package/dist/components/navigation-map/components/obstacle.svelte +265 -0
  103. package/dist/components/navigation-map/components/obstacle.svelte.d.ts +10 -0
  104. package/dist/components/navigation-map/components/path.svelte +30 -0
  105. package/dist/components/navigation-map/components/path.svelte.d.ts +9 -0
  106. package/dist/components/navigation-map/components/robot-marker.svelte +18 -0
  107. package/dist/components/navigation-map/components/robot-marker.svelte.d.ts +8 -0
  108. package/dist/components/navigation-map/components/scene-layer.svelte +22 -0
  109. package/dist/components/navigation-map/components/scene-layer.svelte.d.ts +7 -0
  110. package/dist/components/navigation-map/components/scene.svelte +98 -0
  111. package/dist/components/navigation-map/components/scene.svelte.d.ts +7 -0
  112. package/dist/components/navigation-map/components/waypoints.svelte +14 -0
  113. package/dist/components/navigation-map/components/waypoints.svelte.d.ts +18 -0
  114. package/dist/components/navigation-map/index.d.ts +2 -0
  115. package/dist/components/navigation-map/index.js +2 -0
  116. package/dist/components/navigation-map/index.svelte +99 -0
  117. package/dist/components/navigation-map/index.svelte.d.ts +51 -0
  118. package/dist/components/navigation-map/lib/create-geometry.d.ts +2 -0
  119. package/dist/components/navigation-map/lib/create-geometry.js +31 -0
  120. package/dist/components/navigation-map/lib/create-name.d.ts +1 -0
  121. package/dist/components/navigation-map/lib/create-name.js +9 -0
  122. package/dist/components/navigation-map/lib/create-obstacle.d.ts +3 -0
  123. package/dist/components/navigation-map/lib/create-obstacle.js +12 -0
  124. package/dist/components/navigation-map/plugins/compute-bounding.svelte.d.ts +1 -0
  125. package/dist/components/navigation-map/plugins/compute-bounding.svelte.js +33 -0
  126. package/dist/components/navigation-map/plugins/interactivity.d.ts +6 -0
  127. package/dist/components/navigation-map/plugins/interactivity.js +27 -0
  128. package/dist/components/navigation-map/types.d.ts +37 -0
  129. package/dist/components/navigation-map/types.js +5 -0
  130. package/dist/components/navigation-map/use-navigation-map.svelte.d.ts +17 -0
  131. package/dist/components/navigation-map/use-navigation-map.svelte.js +69 -0
  132. package/dist/components/progress.svelte +4 -0
  133. package/dist/components/progress.svelte.d.ts +26 -0
  134. package/dist/components/queries.svelte +73 -0
  135. package/dist/components/queries.svelte.d.ts +12 -0
  136. package/dist/components/query.svelte +21 -0
  137. package/dist/components/query.svelte.d.ts +10 -0
  138. package/dist/components/readings-list.svelte +73 -0
  139. package/dist/components/readings-list.svelte.d.ts +6 -0
  140. package/dist/components/refetch-controller.svelte +122 -0
  141. package/dist/components/refetch-controller.svelte.d.ts +12 -0
  142. package/dist/components/refetch-interval-store.svelte.d.ts +18 -0
  143. package/dist/components/refetch-interval-store.svelte.js +37 -0
  144. package/dist/components/resource-icon.svelte +31 -0
  145. package/dist/components/resource-icon.svelte.d.ts +6 -0
  146. package/dist/components/section-group.svelte +64 -0
  147. package/dist/components/section-group.svelte.d.ts +14 -0
  148. package/dist/components/slam/map2d/base-marker.txt +1 -0
  149. package/dist/components/slam/map2d/color-map.d.ts +2 -0
  150. package/dist/components/slam/map2d/color-map.js +55 -0
  151. package/dist/components/slam/map2d/destination-marker.txt +1 -0
  152. package/dist/components/slam/map2d/helpers.svelte +29 -0
  153. package/dist/components/slam/map2d/helpers.svelte.d.ts +22 -0
  154. package/dist/components/slam/map2d/hooks/use-raycast-click/index.d.ts +9 -0
  155. package/dist/components/slam/map2d/hooks/use-raycast-click/index.js +36 -0
  156. package/dist/components/slam/map2d/hooks/use-raycast-click/normalize-device-coordinates.d.ts +2 -0
  157. package/dist/components/slam/map2d/hooks/use-raycast-click/normalize-device-coordinates.js +9 -0
  158. package/dist/components/slam/map2d/index.svelte +60 -0
  159. package/dist/components/slam/map2d/index.svelte.d.ts +37 -0
  160. package/dist/components/slam/map2d/legend.svelte +67 -0
  161. package/dist/components/slam/map2d/legend.svelte.d.ts +27 -0
  162. package/dist/components/slam/map2d/marker.svelte +41 -0
  163. package/dist/components/slam/map2d/marker.svelte.d.ts +13 -0
  164. package/dist/components/slam/map2d/motion-path.svelte +65 -0
  165. package/dist/components/slam/map2d/motion-path.svelte.d.ts +15 -0
  166. package/dist/components/slam/map2d/points.svelte +60 -0
  167. package/dist/components/slam/map2d/points.svelte.d.ts +23 -0
  168. package/dist/components/slam/map2d/render-order.d.ts +7 -0
  169. package/dist/components/slam/map2d/render-order.js +7 -0
  170. package/dist/components/slam/map2d/scene.svelte +130 -0
  171. package/dist/components/slam/map2d/scene.svelte.d.ts +16 -0
  172. package/dist/components/status-pill.svelte +25 -0
  173. package/dist/components/status-pill.svelte.d.ts +8 -0
  174. package/dist/components/stop-button.svelte +21 -0
  175. package/dist/components/stop-button.svelte.d.ts +7 -0
  176. package/dist/components/stop.svelte +51 -0
  177. package/dist/components/stop.svelte.d.ts +9 -0
  178. package/dist/components/table.svelte +46 -0
  179. package/dist/components/table.svelte.d.ts +7 -0
  180. package/dist/components/three/axes-helper.svelte +79 -0
  181. package/dist/components/three/axes-helper.svelte.d.ts +10 -0
  182. package/dist/components/three/index.d.ts +1 -0
  183. package/dist/components/three/index.js +1 -0
  184. package/dist/components/widgets/arm/arm.svelte +132 -0
  185. package/dist/components/widgets/arm/arm.svelte.d.ts +7 -0
  186. package/dist/components/widgets/arm/get-joint-positions.svelte +53 -0
  187. package/dist/components/widgets/arm/get-joint-positions.svelte.d.ts +6 -0
  188. package/dist/components/widgets/arm/move-to-joint-positions-widget.svelte +45 -0
  189. package/dist/components/widgets/arm/move-to-joint-positions-widget.svelte.d.ts +7 -0
  190. package/dist/components/widgets/arm/move-to-joint-positions.svelte +113 -0
  191. package/dist/components/widgets/arm/move-to-joint-positions.svelte.d.ts +8 -0
  192. package/dist/components/widgets/arm/move-to-position-widget.svelte +43 -0
  193. package/dist/components/widgets/arm/move-to-position-widget.svelte.d.ts +7 -0
  194. package/dist/components/widgets/arm/move-to-position.svelte +143 -0
  195. package/dist/components/widgets/arm/move-to-position.svelte.d.ts +9 -0
  196. package/dist/components/widgets/arm/quick-move-widget.svelte +45 -0
  197. package/dist/components/widgets/arm/quick-move-widget.svelte.d.ts +7 -0
  198. package/dist/components/widgets/arm/quick-move.svelte +62 -0
  199. package/dist/components/widgets/arm/quick-move.svelte.d.ts +8 -0
  200. package/dist/components/widgets/base/base.svelte +130 -0
  201. package/dist/components/widgets/base/base.svelte.d.ts +7 -0
  202. package/dist/components/widgets/base/move-straight-widget.svelte +31 -0
  203. package/dist/components/widgets/base/move-straight-widget.svelte.d.ts +7 -0
  204. package/dist/components/widgets/base/move-straight.svelte +78 -0
  205. package/dist/components/widgets/base/move-straight.svelte.d.ts +6 -0
  206. package/dist/components/widgets/base/quick-move-widget.svelte +49 -0
  207. package/dist/components/widgets/base/quick-move-widget.svelte.d.ts +7 -0
  208. package/dist/components/widgets/base/quick-move.svelte +230 -0
  209. package/dist/components/widgets/base/quick-move.svelte.d.ts +8 -0
  210. package/dist/components/widgets/base/set-power-widget.svelte +31 -0
  211. package/dist/components/widgets/base/set-power-widget.svelte.d.ts +7 -0
  212. package/dist/components/widgets/base/set-power.svelte +43 -0
  213. package/dist/components/widgets/base/set-power.svelte.d.ts +7 -0
  214. package/dist/components/widgets/base/set-velocity-widget.svelte +31 -0
  215. package/dist/components/widgets/base/set-velocity-widget.svelte.d.ts +7 -0
  216. package/dist/components/widgets/base/set-velocity.svelte +41 -0
  217. package/dist/components/widgets/base/set-velocity.svelte.d.ts +7 -0
  218. package/dist/components/widgets/base/spin-widget.svelte +31 -0
  219. package/dist/components/widgets/base/spin-widget.svelte.d.ts +7 -0
  220. package/dist/components/widgets/base/spin.svelte +77 -0
  221. package/dist/components/widgets/base/spin.svelte.d.ts +6 -0
  222. package/dist/components/widgets/base/vec3-builder.svelte +144 -0
  223. package/dist/components/widgets/base/vec3-builder.svelte.d.ts +13 -0
  224. package/dist/components/widgets/board/analog-read-wrapper.svelte +42 -0
  225. package/dist/components/widgets/board/analog-read-wrapper.svelte.d.ts +9 -0
  226. package/dist/components/widgets/board/analog-read.svelte +55 -0
  227. package/dist/components/widgets/board/analog-read.svelte.d.ts +7 -0
  228. package/dist/components/widgets/board/analog-write-wrapper.svelte +33 -0
  229. package/dist/components/widgets/board/analog-write-wrapper.svelte.d.ts +9 -0
  230. package/dist/components/widgets/board/analog-write.svelte +44 -0
  231. package/dist/components/widgets/board/analog-write.svelte.d.ts +6 -0
  232. package/dist/components/widgets/board/board.d.ts +16 -0
  233. package/dist/components/widgets/board/board.js +8 -0
  234. package/dist/components/widgets/board/board.svelte +23 -0
  235. package/dist/components/widgets/board/board.svelte.d.ts +7 -0
  236. package/dist/components/widgets/board/confirming-button.svelte +42 -0
  237. package/dist/components/widgets/board/confirming-button.svelte.d.ts +8 -0
  238. package/dist/components/widgets/board/gpio-read-wrapper.svelte +68 -0
  239. package/dist/components/widgets/board/gpio-read-wrapper.svelte.d.ts +9 -0
  240. package/dist/components/widgets/board/gpio-read.svelte +134 -0
  241. package/dist/components/widgets/board/gpio-read.svelte.d.ts +11 -0
  242. package/dist/components/widgets/board/gpio-write-wrapper.svelte +55 -0
  243. package/dist/components/widgets/board/gpio-write-wrapper.svelte.d.ts +9 -0
  244. package/dist/components/widgets/board/gpio-write.svelte +106 -0
  245. package/dist/components/widgets/board/gpio-write.svelte.d.ts +8 -0
  246. package/dist/components/widgets/board/pin-section.svelte +28 -0
  247. package/dist/components/widgets/board/pin-section.svelte.d.ts +9 -0
  248. package/dist/components/widgets/board/pin-selector.svelte +69 -0
  249. package/dist/components/widgets/board/pin-selector.svelte.d.ts +8 -0
  250. package/dist/components/widgets/board/read-write-pins-widget.svelte +15 -0
  251. package/dist/components/widgets/board/read-write-pins-widget.svelte.d.ts +7 -0
  252. package/dist/components/widgets/board/read-write-pins.svelte +72 -0
  253. package/dist/components/widgets/board/read-write-pins.svelte.d.ts +7 -0
  254. package/dist/components/widgets/button/button.svelte +23 -0
  255. package/dist/components/widgets/button/button.svelte.d.ts +7 -0
  256. package/dist/components/widgets/button/push.svelte +32 -0
  257. package/dist/components/widgets/button/push.svelte.d.ts +7 -0
  258. package/dist/components/widgets/camera/camera.svelte +202 -0
  259. package/dist/components/widgets/camera/camera.svelte.d.ts +7 -0
  260. package/dist/components/widgets/camera/export-screenshot.svelte +68 -0
  261. package/dist/components/widgets/camera/export-screenshot.svelte.d.ts +9 -0
  262. package/dist/components/widgets/camera/live-or-polling-video.svelte +419 -0
  263. package/dist/components/widgets/camera/live-or-polling-video.svelte.d.ts +18 -0
  264. package/dist/components/widgets/camera/picture-in-picture-button.svelte +81 -0
  265. package/dist/components/widgets/camera/picture-in-picture-button.svelte.d.ts +9 -0
  266. package/dist/components/widgets/discovery/component-preview.d.ts +9 -0
  267. package/dist/components/widgets/discovery/component-preview.js +1 -0
  268. package/dist/components/widgets/discovery/discovery.svelte +155 -0
  269. package/dist/components/widgets/discovery/discovery.svelte.d.ts +13 -0
  270. package/dist/components/widgets/discovery/resources-list.svelte +109 -0
  271. package/dist/components/widgets/discovery/resources-list.svelte.d.ts +13 -0
  272. package/dist/components/widgets/discovery/transform-component-config.d.ts +17 -0
  273. package/dist/components/widgets/discovery/transform-component-config.js +32 -0
  274. package/dist/components/widgets/do-command/do-command.svelte +101 -0
  275. package/dist/components/widgets/do-command/do-command.svelte.d.ts +8 -0
  276. package/dist/components/widgets/encoder/encoder.svelte +117 -0
  277. package/dist/components/widgets/encoder/encoder.svelte.d.ts +7 -0
  278. package/dist/components/widgets/encoder/position.svelte +26 -0
  279. package/dist/components/widgets/encoder/position.svelte.d.ts +8 -0
  280. package/dist/components/widgets/gantry/gantry.svelte +135 -0
  281. package/dist/components/widgets/gantry/gantry.svelte.d.ts +7 -0
  282. package/dist/components/widgets/gantry/home.svelte +33 -0
  283. package/dist/components/widgets/gantry/home.svelte.d.ts +7 -0
  284. package/dist/components/widgets/gantry/match-array-length.d.ts +1 -0
  285. package/dist/components/widgets/gantry/match-array-length.js +13 -0
  286. package/dist/components/widgets/gantry/move-to-position-widget.svelte +43 -0
  287. package/dist/components/widgets/gantry/move-to-position-widget.svelte.d.ts +7 -0
  288. package/dist/components/widgets/gantry/move-to-position.svelte +121 -0
  289. package/dist/components/widgets/gantry/move-to-position.svelte.d.ts +8 -0
  290. package/dist/components/widgets/gantry/position-and-lengths.svelte +32 -0
  291. package/dist/components/widgets/gantry/position-and-lengths.svelte.d.ts +7 -0
  292. package/dist/components/widgets/gantry/quick-move-widget.svelte +47 -0
  293. package/dist/components/widgets/gantry/quick-move-widget.svelte.d.ts +7 -0
  294. package/dist/components/widgets/gantry/quick-move.svelte +69 -0
  295. package/dist/components/widgets/gantry/quick-move.svelte.d.ts +8 -0
  296. package/dist/components/widgets/generic/generic.svelte +31 -0
  297. package/dist/components/widgets/generic/generic.svelte.d.ts +8 -0
  298. package/dist/components/widgets/gripper/closed-gripper-svg.svelte +13 -0
  299. package/dist/components/widgets/gripper/closed-gripper-svg.svelte.d.ts +26 -0
  300. package/dist/components/widgets/gripper/grab.svelte +37 -0
  301. package/dist/components/widgets/gripper/grab.svelte.d.ts +7 -0
  302. package/dist/components/widgets/gripper/gripper.svelte +69 -0
  303. package/dist/components/widgets/gripper/gripper.svelte.d.ts +7 -0
  304. package/dist/components/widgets/gripper/open-gripper-svg.svelte +13 -0
  305. package/dist/components/widgets/gripper/open-gripper-svg.svelte.d.ts +26 -0
  306. package/dist/components/widgets/gripper/open.svelte +37 -0
  307. package/dist/components/widgets/gripper/open.svelte.d.ts +7 -0
  308. package/dist/components/widgets/input-controller/input-controller.svelte +74 -0
  309. package/dist/components/widgets/input-controller/input-controller.svelte.d.ts +7 -0
  310. package/dist/components/widgets/input-controller/standard-gamepad-event.d.ts +8 -0
  311. package/dist/components/widgets/input-controller/standard-gamepad-event.js +1 -0
  312. package/dist/components/widgets/input-controller/webgamepad-scene.svelte +22 -0
  313. package/dist/components/widgets/input-controller/webgamepad-scene.svelte.d.ts +8 -0
  314. package/dist/components/widgets/input-controller/webgamepad.svelte +142 -0
  315. package/dist/components/widgets/input-controller/webgamepad.svelte.d.ts +8 -0
  316. package/dist/components/widgets/ml-model-service/ml-model-service.svelte +65 -0
  317. package/dist/components/widgets/ml-model-service/ml-model-service.svelte.d.ts +7 -0
  318. package/dist/components/widgets/ml-model-service/results-table.svelte +49 -0
  319. package/dist/components/widgets/ml-model-service/results-table.svelte.d.ts +7 -0
  320. package/dist/components/widgets/ml-model-service/tensor-row.svelte +33 -0
  321. package/dist/components/widgets/ml-model-service/tensor-row.svelte.d.ts +9 -0
  322. package/dist/components/widgets/motor/go-for-view.svelte +31 -0
  323. package/dist/components/widgets/motor/go-for-view.svelte.d.ts +7 -0
  324. package/dist/components/widgets/motor/go-for.svelte +79 -0
  325. package/dist/components/widgets/motor/go-for.svelte.d.ts +6 -0
  326. package/dist/components/widgets/motor/go-to-view.svelte +31 -0
  327. package/dist/components/widgets/motor/go-to-view.svelte.d.ts +7 -0
  328. package/dist/components/widgets/motor/go-to.svelte +78 -0
  329. package/dist/components/widgets/motor/go-to.svelte.d.ts +6 -0
  330. package/dist/components/widgets/motor/motor.svelte +179 -0
  331. package/dist/components/widgets/motor/motor.svelte.d.ts +7 -0
  332. package/dist/components/widgets/motor/quick-move-widget.svelte +31 -0
  333. package/dist/components/widgets/motor/quick-move-widget.svelte.d.ts +7 -0
  334. package/dist/components/widgets/motor/quick-move.svelte +81 -0
  335. package/dist/components/widgets/motor/quick-move.svelte.d.ts +6 -0
  336. package/dist/components/widgets/motor/set-power-widget.svelte +29 -0
  337. package/dist/components/widgets/motor/set-power-widget.svelte.d.ts +7 -0
  338. package/dist/components/widgets/motor/set-power.svelte +54 -0
  339. package/dist/components/widgets/motor/set-power.svelte.d.ts +6 -0
  340. package/dist/components/widgets/motor/set-rpm-widget.svelte +29 -0
  341. package/dist/components/widgets/motor/set-rpm-widget.svelte.d.ts +7 -0
  342. package/dist/components/widgets/motor/set-rpm.svelte +52 -0
  343. package/dist/components/widgets/motor/set-rpm.svelte.d.ts +6 -0
  344. package/dist/components/widgets/movement-sensor/accuracy.svelte +71 -0
  345. package/dist/components/widgets/movement-sensor/accuracy.svelte.d.ts +7 -0
  346. package/dist/components/widgets/movement-sensor/compass-heading.svelte +44 -0
  347. package/dist/components/widgets/movement-sensor/compass-heading.svelte.d.ts +6 -0
  348. package/dist/components/widgets/movement-sensor/map.svelte +61 -0
  349. package/dist/components/widgets/movement-sensor/map.svelte.d.ts +8 -0
  350. package/dist/components/widgets/movement-sensor/movement-sensor.svelte +255 -0
  351. package/dist/components/widgets/movement-sensor/movement-sensor.svelte.d.ts +7 -0
  352. package/dist/components/widgets/movement-sensor/orientation.svelte +43 -0
  353. package/dist/components/widgets/movement-sensor/orientation.svelte.d.ts +7 -0
  354. package/dist/components/widgets/movement-sensor/position.svelte +32 -0
  355. package/dist/components/widgets/movement-sensor/position.svelte.d.ts +7 -0
  356. package/dist/components/widgets/movement-sensor/safe-read-coordinate.d.ts +1 -0
  357. package/dist/components/widgets/movement-sensor/safe-read-coordinate.js +6 -0
  358. package/dist/components/widgets/movement-sensor/vector3.svelte +36 -0
  359. package/dist/components/widgets/movement-sensor/vector3.svelte.d.ts +7 -0
  360. package/dist/components/widgets/navigation/directional-marker.svelte +26 -0
  361. package/dist/components/widgets/navigation/directional-marker.svelte.d.ts +8 -0
  362. package/dist/components/widgets/navigation/navigation.svelte +236 -0
  363. package/dist/components/widgets/navigation/navigation.svelte.d.ts +7 -0
  364. package/dist/components/widgets/navigation/obstacles/__tests__/__fixtures__/obstacles.d.ts +2 -0
  365. package/dist/components/widgets/navigation/obstacles/__tests__/__fixtures__/obstacles.js +56 -0
  366. package/dist/components/widgets/navigation/obstacles/color.d.ts +1 -0
  367. package/dist/components/widgets/navigation/obstacles/color.js +10 -0
  368. package/dist/components/widgets/navigation/obstacles/legend.svelte +117 -0
  369. package/dist/components/widgets/navigation/obstacles/legend.svelte.d.ts +12 -0
  370. package/dist/components/widgets/navigation/obstacles/meshes.svelte +104 -0
  371. package/dist/components/widgets/navigation/obstacles/meshes.svelte.d.ts +10 -0
  372. package/dist/components/widgets/navigation/obstacles/obstacles.svelte +30 -0
  373. package/dist/components/widgets/navigation/obstacles/obstacles.svelte.d.ts +10 -0
  374. package/dist/components/widgets/navigation/obstacles/scene.svelte +59 -0
  375. package/dist/components/widgets/navigation/obstacles/scene.svelte.d.ts +7 -0
  376. package/dist/components/widgets/navigation/waypoints/__tests__/__fixtures__/waypoints.d.ts +7 -0
  377. package/dist/components/widgets/navigation/waypoints/__tests__/__fixtures__/waypoints.js +23 -0
  378. package/dist/components/widgets/navigation/waypoints/legend.svelte +67 -0
  379. package/dist/components/widgets/navigation/waypoints/legend.svelte.d.ts +13 -0
  380. package/dist/components/widgets/navigation/waypoints/waypoints.svelte +34 -0
  381. package/dist/components/widgets/navigation/waypoints/waypoints.svelte.d.ts +11 -0
  382. package/dist/components/widgets/operations-and-sessions/operations-and-sessions.svelte +115 -0
  383. package/dist/components/widgets/operations-and-sessions/operations-and-sessions.svelte.d.ts +6 -0
  384. package/dist/components/widgets/operations-and-sessions/operations-table.svelte +82 -0
  385. package/dist/components/widgets/operations-and-sessions/operations-table.svelte.d.ts +8 -0
  386. package/dist/components/widgets/operations-and-sessions/rtt-pill.svelte +26 -0
  387. package/dist/components/widgets/operations-and-sessions/rtt-pill.svelte.d.ts +6 -0
  388. package/dist/components/widgets/operations-and-sessions/sessions-table.svelte +78 -0
  389. package/dist/components/widgets/operations-and-sessions/sessions-table.svelte.d.ts +8 -0
  390. package/dist/components/widgets/pcd/__tests__/__fixtures__/pcd.d.ts +1 -0
  391. package/dist/components/widgets/pcd/__tests__/__fixtures__/pcd.js +12 -0
  392. package/dist/components/widgets/pcd/download.svelte +25 -0
  393. package/dist/components/widgets/pcd/download.svelte.d.ts +6 -0
  394. package/dist/components/widgets/pcd/inputs.svelte +70 -0
  395. package/dist/components/widgets/pcd/inputs.svelte.d.ts +11 -0
  396. package/dist/components/widgets/pcd/pcd-widget.svelte +45 -0
  397. package/dist/components/widgets/pcd/pcd-widget.svelte.d.ts +6 -0
  398. package/dist/components/widgets/pcd/point-label.svelte +76 -0
  399. package/dist/components/widgets/pcd/point-label.svelte.d.ts +7 -0
  400. package/dist/components/widgets/pcd/points.svelte +35 -0
  401. package/dist/components/widgets/pcd/points.svelte.d.ts +7 -0
  402. package/dist/components/widgets/pcd/scene.svelte +62 -0
  403. package/dist/components/widgets/pcd/scene.svelte.d.ts +9 -0
  404. package/dist/components/widgets/power-sensor/current-reading.svelte +18 -0
  405. package/dist/components/widgets/power-sensor/current-reading.svelte.d.ts +6 -0
  406. package/dist/components/widgets/power-sensor/power-reading.svelte +14 -0
  407. package/dist/components/widgets/power-sensor/power-reading.svelte.d.ts +6 -0
  408. package/dist/components/widgets/power-sensor/power-sensor.svelte +134 -0
  409. package/dist/components/widgets/power-sensor/power-sensor.svelte.d.ts +7 -0
  410. package/dist/components/widgets/power-sensor/voltage-reading.svelte +18 -0
  411. package/dist/components/widgets/power-sensor/voltage-reading.svelte.d.ts +6 -0
  412. package/dist/components/widgets/sensor/sensor.svelte +59 -0
  413. package/dist/components/widgets/sensor/sensor.svelte.d.ts +7 -0
  414. package/dist/components/widgets/servo/move-widget.svelte +44 -0
  415. package/dist/components/widgets/servo/move-widget.svelte.d.ts +7 -0
  416. package/dist/components/widgets/servo/move.svelte +102 -0
  417. package/dist/components/widgets/servo/move.svelte.d.ts +8 -0
  418. package/dist/components/widgets/servo/quick-move-widget.svelte +44 -0
  419. package/dist/components/widgets/servo/quick-move-widget.svelte.d.ts +7 -0
  420. package/dist/components/widgets/servo/quick-move.svelte +34 -0
  421. package/dist/components/widgets/servo/quick-move.svelte.d.ts +8 -0
  422. package/dist/components/widgets/servo/servo.svelte +111 -0
  423. package/dist/components/widgets/servo/servo.svelte.d.ts +7 -0
  424. package/dist/components/widgets/slam/__fixtures__/position.d.ts +3 -0
  425. package/dist/components/widgets/slam/__fixtures__/position.js +13 -0
  426. package/dist/components/widgets/slam/move-on-map.svelte +101 -0
  427. package/dist/components/widgets/slam/move-on-map.svelte.d.ts +11 -0
  428. package/dist/components/widgets/slam/pose.d.ts +2 -0
  429. package/dist/components/widgets/slam/pose.js +1 -0
  430. package/dist/components/widgets/slam/position.svelte +77 -0
  431. package/dist/components/widgets/slam/position.svelte.d.ts +7 -0
  432. package/dist/components/widgets/slam/slam.svelte +267 -0
  433. package/dist/components/widgets/slam/slam.svelte.d.ts +7 -0
  434. package/dist/components/widgets/switch/position-view.svelte +59 -0
  435. package/dist/components/widgets/switch/position-view.svelte.d.ts +7 -0
  436. package/dist/components/widgets/switch/position.svelte +43 -0
  437. package/dist/components/widgets/switch/position.svelte.d.ts +10 -0
  438. package/dist/components/widgets/switch/switch.svelte +62 -0
  439. package/dist/components/widgets/switch/switch.svelte.d.ts +7 -0
  440. package/dist/components/widgets/vision-service/__tests__/__fixtures__/classifications.d.ts +10 -0
  441. package/dist/components/widgets/vision-service/__tests__/__fixtures__/classifications.js +5 -0
  442. package/dist/components/widgets/vision-service/__tests__/__fixtures__/detections.d.ts +2 -0
  443. package/dist/components/widgets/vision-service/__tests__/__fixtures__/detections.js +9 -0
  444. package/dist/components/widgets/vision-service/color.d.ts +7 -0
  445. package/dist/components/widgets/vision-service/color.js +53 -0
  446. package/dist/components/widgets/vision-service/context.svelte.d.ts +24 -0
  447. package/dist/components/widgets/vision-service/context.svelte.js +50 -0
  448. package/dist/components/widgets/vision-service/detection.svelte +101 -0
  449. package/dist/components/widgets/vision-service/detection.svelte.d.ts +8 -0
  450. package/dist/components/widgets/vision-service/geometry-details.svelte +116 -0
  451. package/dist/components/widgets/vision-service/geometry-details.svelte.d.ts +7 -0
  452. package/dist/components/widgets/vision-service/get-image-size.d.ts +14 -0
  453. package/dist/components/widgets/vision-service/get-image-size.js +28 -0
  454. package/dist/components/widgets/vision-service/image.svelte +133 -0
  455. package/dist/components/widgets/vision-service/image.svelte.d.ts +15 -0
  456. package/dist/components/widgets/vision-service/legend.svelte +135 -0
  457. package/dist/components/widgets/vision-service/legend.svelte.d.ts +9 -0
  458. package/dist/components/widgets/vision-service/object-point-cloud-scene.svelte +74 -0
  459. package/dist/components/widgets/vision-service/object-point-cloud-scene.svelte.d.ts +7 -0
  460. package/dist/components/widgets/vision-service/object-point-clouds.svelte +91 -0
  461. package/dist/components/widgets/vision-service/object-point-clouds.svelte.d.ts +7 -0
  462. package/dist/components/widgets/vision-service/scene.svelte +50 -0
  463. package/dist/components/widgets/vision-service/scene.svelte.d.ts +7 -0
  464. package/dist/components/widgets/vision-service/vision-service.svelte +225 -0
  465. package/dist/components/widgets/vision-service/vision-service.svelte.d.ts +7 -0
  466. package/dist/event-handlers.d.ts +1 -0
  467. package/dist/event-handlers.js +5 -0
  468. package/dist/format.d.ts +13 -0
  469. package/dist/format.js +31 -0
  470. package/dist/fps.svelte.d.ts +4 -0
  471. package/dist/fps.svelte.js +22 -0
  472. package/dist/index.d.ts +2 -0
  473. package/dist/index.js +2 -0
  474. package/dist/resource.js +26 -0
  475. package/dist/scroll-into-view.d.ts +2 -0
  476. package/dist/scroll-into-view.js +17 -0
  477. package/dist/sort.d.ts +21 -0
  478. package/dist/sort.js +31 -0
  479. package/package.json +117 -0
@@ -0,0 +1,31 @@
1
+ import { ViamObject3D } from '@viamrobotics/three';
2
+ export const createGeometry = (type, size = 5, rotation = 0) => {
3
+ const pose = new ViamObject3D();
4
+ pose.orientationVector.th = rotation;
5
+ switch (type) {
6
+ case 'box': {
7
+ return {
8
+ type,
9
+ length: size * 2,
10
+ width: size * 2,
11
+ height: size * 2,
12
+ pose,
13
+ };
14
+ }
15
+ case 'sphere': {
16
+ return {
17
+ type,
18
+ radius: size,
19
+ pose,
20
+ };
21
+ }
22
+ case 'capsule': {
23
+ return {
24
+ type,
25
+ radius: size / 2,
26
+ length: size,
27
+ pose,
28
+ };
29
+ }
30
+ }
31
+ };
@@ -0,0 +1 @@
1
+ export declare const createName: (existingNames: string[], template: string, index: number) => string;
@@ -0,0 +1,9 @@
1
+ export const createName = (existingNames, template, index) => {
2
+ let i = index;
3
+ let name = `${template} ${i}`;
4
+ while (existingNames.includes(name)) {
5
+ i += 1;
6
+ name = `${template} ${i}`;
7
+ }
8
+ return name;
9
+ };
@@ -0,0 +1,3 @@
1
+ import { LngLat } from 'maplibre-gl';
2
+ import type { Obstacle, Shapes } from '../types';
3
+ export declare const createObstacle: (name: string, lngLat: LngLat, type?: Shapes) => Obstacle;
@@ -0,0 +1,12 @@
1
+ import { theme } from '@viamrobotics/prime-core/theme';
2
+ import { LngLat } from 'maplibre-gl';
3
+ import { createGeometry } from './create-geometry';
4
+ export const createObstacle = (name, lngLat, type = 'box') => {
5
+ return {
6
+ name,
7
+ location: new LngLat(lngLat.lng, lngLat.lat),
8
+ geometries: [createGeometry(type)],
9
+ label: 'static',
10
+ color: theme.extend.colors.cyberpunk,
11
+ };
12
+ };
@@ -0,0 +1 @@
1
+ export declare const computeBoundingPlugin: () => void;
@@ -0,0 +1,33 @@
1
+ import { injectPlugin } from '@threlte/core';
2
+ import { omit } from 'lodash-es';
3
+ import { BufferGeometry } from 'three';
4
+ import { useNavigationMap } from '../use-navigation-map.svelte';
5
+ export const computeBoundingPlugin = () => injectPlugin('computeBounding', ({ ref, props }) => {
6
+ const nav = useNavigationMap();
7
+ let currentRef = ref;
8
+ let currentProps = props;
9
+ if (!(currentRef instanceof BufferGeometry) || !currentProps.computeBounding) {
10
+ return;
11
+ }
12
+ const handleChange = () => {
13
+ currentRef.computeBoundingSphere();
14
+ const radius = currentRef.boundingSphere?.radius;
15
+ if (radius) {
16
+ nav.boundingRadius[currentProps.computeBounding] = radius;
17
+ }
18
+ };
19
+ return {
20
+ pluginProps: ['computeBounding'],
21
+ onRefChange(nextRef) {
22
+ currentRef = nextRef;
23
+ handleChange();
24
+ return () => {
25
+ nav.boundingRadius = omit(nav.boundingRadius, [currentProps.computeBounding]);
26
+ };
27
+ },
28
+ onPropsChange(nextProps) {
29
+ currentProps = nextProps;
30
+ handleChange();
31
+ },
32
+ };
33
+ });
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Provides interactivity as described in @threlte/extras,
3
+ * but carries out necessary camera and screen-space transforms
4
+ * to be compatible with the map camera.
5
+ */
6
+ export declare const interactivityPlugin: () => void;
@@ -0,0 +1,27 @@
1
+ import { useThrelte } from '@threlte/core';
2
+ import { interactivity } from '@threlte/extras';
3
+ import { useMapLibre, useMapLibreThreeRaycast } from '../../maplibre';
4
+ /**
5
+ * Provides interactivity as described in @threlte/extras,
6
+ * but carries out necessary camera and screen-space transforms
7
+ * to be compatible with the map camera.
8
+ */
9
+ export const interactivityPlugin = () => {
10
+ const { camera } = useThrelte();
11
+ const { map } = useMapLibre();
12
+ const { pointer, compute } = useMapLibreThreeRaycast(camera);
13
+ interactivity({
14
+ target: map.getCanvas(),
15
+ filter: (hits) => {
16
+ // Only return the first hit
17
+ return hits.slice(0, 1);
18
+ },
19
+ compute: (_, state) => {
20
+ state.pointer.update((vec2) => {
21
+ vec2.copy(pointer);
22
+ return vec2;
23
+ });
24
+ compute(state.raycaster);
25
+ },
26
+ });
27
+ };
@@ -0,0 +1,37 @@
1
+ import type { ViamObject3D } from '@viamrobotics/three';
2
+ import type { LngLat } from 'maplibre-gl';
3
+ interface BaseGeometry {
4
+ pose: ViamObject3D;
5
+ }
6
+ export declare const NavigationTab: {
7
+ readonly Waypoints: "Waypoints";
8
+ readonly Obstacles: "Obstacles";
9
+ readonly Attributes: "Attributes";
10
+ };
11
+ export type NavigationTabType = (typeof NavigationTab)[keyof typeof NavigationTab];
12
+ export type Shapes = 'box' | 'sphere' | 'capsule';
13
+ export type CapsuleGeometry = BaseGeometry & {
14
+ type: 'capsule';
15
+ radius: number;
16
+ length: number;
17
+ };
18
+ export type SphereGeometry = BaseGeometry & {
19
+ type: 'sphere';
20
+ radius: number;
21
+ };
22
+ export type BoxGeometry = BaseGeometry & {
23
+ type: 'box';
24
+ length: number;
25
+ width: number;
26
+ height: number;
27
+ };
28
+ export type Geometry = BoxGeometry | SphereGeometry | CapsuleGeometry;
29
+ export interface Obstacle {
30
+ name: string;
31
+ location: LngLat;
32
+ geometries: Geometry[];
33
+ color: string;
34
+ label: string;
35
+ }
36
+ export type Path = LngLat[];
37
+ export {};
@@ -0,0 +1,5 @@
1
+ export const NavigationTab = {
2
+ Waypoints: 'Waypoints',
3
+ Obstacles: 'Obstacles',
4
+ Attributes: 'Attributes',
5
+ };
@@ -0,0 +1,17 @@
1
+ import type { Waypoint } from '../maplibre/types';
2
+ import type { NavigationTabType, Obstacle, Path } from './types';
3
+ export type Environments = 'debug' | 'configure';
4
+ export interface NavigationMapContext {
5
+ tab: NavigationTabType;
6
+ tabs: NavigationTabType[];
7
+ waypoints: Waypoint[];
8
+ obstacles: Obstacle[];
9
+ paths: Path[];
10
+ environment: Environments;
11
+ hovered: string | undefined;
12
+ selected: string | undefined;
13
+ view: '2D' | '3D';
14
+ boundingRadius: Record<string, number>;
15
+ }
16
+ export declare const provideNavigationMapContext: (tab: () => NavigationTabType, tabs: () => NavigationTabType[], waypoints: () => Waypoint[], paths: () => Path[], environment: () => Environments) => NavigationMapContext;
17
+ export declare const useNavigationMap: () => NavigationMapContext;
@@ -0,0 +1,69 @@
1
+ import { getContext, setContext } from 'svelte';
2
+ const CONTEXT_KEY = 'navigation-map-context';
3
+ export const provideNavigationMapContext = (tab, tabs, waypoints, paths, environment) => {
4
+ let obstacles = $state([]);
5
+ let currentTab = $state(tab());
6
+ let hovered = $state();
7
+ let selected = $state();
8
+ let view = $state('2D');
9
+ let boundingRadius = $state({});
10
+ const context = {
11
+ get tab() {
12
+ return currentTab;
13
+ },
14
+ set tab(value) {
15
+ currentTab = value;
16
+ },
17
+ get tabs() {
18
+ return tabs();
19
+ },
20
+ get waypoints() {
21
+ return waypoints();
22
+ },
23
+ get paths() {
24
+ return paths();
25
+ },
26
+ get environment() {
27
+ return environment();
28
+ },
29
+ get hovered() {
30
+ return hovered;
31
+ },
32
+ set hovered(value) {
33
+ hovered = value;
34
+ },
35
+ get selected() {
36
+ return selected;
37
+ },
38
+ set selected(value) {
39
+ selected = value;
40
+ },
41
+ get obstacles() {
42
+ return obstacles;
43
+ },
44
+ set obstacles(value) {
45
+ obstacles = value;
46
+ },
47
+ get view() {
48
+ return view;
49
+ },
50
+ set view(value) {
51
+ view = value;
52
+ },
53
+ get boundingRadius() {
54
+ return boundingRadius;
55
+ },
56
+ set boundingRadius(value) {
57
+ boundingRadius = value;
58
+ },
59
+ };
60
+ setContext(CONTEXT_KEY, context);
61
+ return context;
62
+ };
63
+ export const useNavigationMap = () => {
64
+ const context = getContext(CONTEXT_KEY);
65
+ if (!context) {
66
+ throw new Error('NavigationMapContext not found');
67
+ }
68
+ return context;
69
+ };
@@ -0,0 +1,4 @@
1
+ <div
2
+ role="progressbar"
3
+ class="bg-medium h-full w-full animate-pulse"
4
+ ></div>
@@ -0,0 +1,26 @@
1
+ export default Progress;
2
+ type Progress = SvelteComponent<{
3
+ [x: string]: never;
4
+ }, {
5
+ [evt: string]: CustomEvent<any>;
6
+ }, {}> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ declare const Progress: $$__sveltets_2_IsomorphicComponent<{
10
+ [x: string]: never;
11
+ }, {
12
+ [evt: string]: CustomEvent<any>;
13
+ }, {}, {}, string>;
14
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
15
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
16
+ $$bindings?: Bindings;
17
+ } & Exports;
18
+ (internal: unknown, props: {
19
+ $$events?: Events;
20
+ $$slots?: Slots;
21
+ }): Exports & {
22
+ $set?: any;
23
+ $on?: any;
24
+ };
25
+ z_$$bindings?: Bindings;
26
+ }
@@ -0,0 +1,73 @@
1
+ <script lang="ts">
2
+ import type { ResizeDetail } from '@svelte-put/resize'
3
+ import type { QueryObserverResult } from '@tanstack/svelte-query'
4
+ import type { Snippet } from 'svelte'
5
+
6
+ import { resize } from '@svelte-put/resize'
7
+
8
+ import ContentRect from './content-rect.svelte'
9
+ import ErrorDisplay from './error.svelte'
10
+ import Progress from './progress.svelte'
11
+
12
+ interface Props {
13
+ queries: QueryObserverResult[]
14
+ contentCx?: string
15
+ children?: Snippet<[{ data: unknown[] }]>
16
+ }
17
+
18
+ const { queries, contentCx = '', children }: Props = $props()
19
+
20
+ let contentRect = $state<DOMRect>()
21
+ const handleResize = (event: CustomEvent<ResizeDetail>) => {
22
+ contentRect = event.detail.entry.contentRect
23
+ }
24
+
25
+ let errors = $state.raw<Error[]>([])
26
+ let data = $state.raw<unknown[]>([])
27
+
28
+ // Errors are null during loading, so keep the latest errors during polling.
29
+ $effect.pre(() => {
30
+ const nextErrors = queries.map((query) => query.error).filter((error) => error !== null)
31
+ if (nextErrors.length > 0) {
32
+ errors = nextErrors
33
+ } else if (queries.every((query) => query.isSuccess)) {
34
+ errors = []
35
+ }
36
+ })
37
+
38
+ // Data is undefined during loading, so keep the latest data during polling.
39
+ $effect.pre(() => {
40
+ const nextData = queries.map((query) => query.data)
41
+ if (nextData.length > 0) {
42
+ data = nextData
43
+ }
44
+ })
45
+
46
+ const isLoading = $derived(queries.some((query) => query.isLoading))
47
+ </script>
48
+
49
+ {#if errors.length > 0}
50
+ <ContentRect
51
+ {contentRect}
52
+ cx={contentCx}
53
+ >
54
+ {#each errors as error (error)}
55
+ <ErrorDisplay lastError={error} />
56
+ {/each}
57
+ </ContentRect>
58
+ {:else if isLoading}
59
+ <ContentRect
60
+ {contentRect}
61
+ cx={contentCx}
62
+ >
63
+ <Progress />
64
+ </ContentRect>
65
+ {:else}
66
+ <div
67
+ class="w-full"
68
+ use:resize
69
+ onresized={handleResize}
70
+ >
71
+ {@render children?.({ data })}
72
+ </div>
73
+ {/if}
@@ -0,0 +1,12 @@
1
+ import type { QueryObserverResult } from '@tanstack/svelte-query';
2
+ import type { Snippet } from 'svelte';
3
+ interface Props {
4
+ queries: QueryObserverResult[];
5
+ contentCx?: string;
6
+ children?: Snippet<[{
7
+ data: unknown[];
8
+ }]>;
9
+ }
10
+ declare const Queries: import("svelte").Component<Props, {}, "">;
11
+ type Queries = ReturnType<typeof Queries>;
12
+ export default Queries;
@@ -0,0 +1,21 @@
1
+ <script lang="ts">
2
+ import type { QueryObserverResult } from '@tanstack/svelte-query'
3
+ import type { Snippet } from 'svelte'
4
+
5
+ import Queries from './queries.svelte'
6
+
7
+ interface Props {
8
+ query: QueryObserverResult
9
+ contentCx?: string
10
+ children?: Snippet
11
+ }
12
+
13
+ const { query, contentCx = '', children }: Props = $props()
14
+ </script>
15
+
16
+ <Queries
17
+ queries={[query]}
18
+ {contentCx}
19
+ >
20
+ {@render children?.()}
21
+ </Queries>
@@ -0,0 +1,10 @@
1
+ import type { QueryObserverResult } from '@tanstack/svelte-query';
2
+ import type { Snippet } from 'svelte';
3
+ interface Props {
4
+ query: QueryObserverResult;
5
+ contentCx?: string;
6
+ children?: Snippet;
7
+ }
8
+ declare const Query: import("svelte").Component<Props, {}, "">;
9
+ type Query = ReturnType<typeof Query>;
10
+ export default Query;
@@ -0,0 +1,73 @@
1
+ <script lang="ts">
2
+ import { IconButton, Tooltip } from '@viamrobotics/prime-core'
3
+ import { truncate } from 'lodash-es'
4
+
5
+ import { sortObjectKeys } from '../sort'
6
+
7
+ interface Props {
8
+ data: Record<string, unknown>
9
+ }
10
+
11
+ const { data }: Props = $props()
12
+
13
+ const sortedData = $derived(Object.entries(sortObjectKeys(data)))
14
+
15
+ // TODO(zp) Bring the CopyToClipboard component into the svelte sdk or prime-core so that we can use it here
16
+ const copyToClipboard = async () => {
17
+ try {
18
+ const readingsStr = JSON.stringify(data, null, 2)
19
+ await globalThis.navigator.clipboard.writeText(readingsStr)
20
+ } catch (error) {
21
+ console.error('failed to copy reading to clipboard', error)
22
+ }
23
+ }
24
+ </script>
25
+
26
+ {#if sortedData.length === 0}
27
+ <p class="text-subtle-2 text-xs">No readings currently available</p>
28
+ {:else}
29
+ <div class="text-xs">
30
+ <div class="text-gray-6 absolute top-1.5 right-1.5">
31
+ <Tooltip let:tooltipID>
32
+ <IconButton
33
+ aria-describedby={tooltipID}
34
+ icon="content-copy"
35
+ label="Copy JSON"
36
+ on:click={copyToClipboard}
37
+ />
38
+
39
+ <div slot="description">Copy JSON</div>
40
+ </Tooltip>
41
+ </div>
42
+ <dl class="font-roboto-mono flex flex-col gap-y-2">
43
+ {#each sortedData as [key, value] (key)}
44
+ {@const valueString = JSON.stringify(value, null, 2)}
45
+ <div class="flex flex-row">
46
+ <dt
47
+ class="text-default w-50 min-w-50 truncate pr-2 font-medium"
48
+ title={key}
49
+ >
50
+ {key}
51
+ </dt>
52
+ <dd class="text-subtle-1 min-w-50">
53
+ {#if typeof value === 'object'}
54
+ <div class="border-light bg-extralight min-w-50 border px-3 py-2">
55
+ <pre class="whitespace-pre-wrap">
56
+ <code>{valueString}</code>
57
+ </pre>
58
+ </div>
59
+ {:else if typeof value === 'string' && value.startsWith('data:image/')}
60
+ <img
61
+ class="max-h-80"
62
+ src={value}
63
+ alt={key}
64
+ />
65
+ {:else}
66
+ {truncate(valueString, { length: 300 })}
67
+ {/if}
68
+ </dd>
69
+ </div>
70
+ {/each}
71
+ </dl>
72
+ </div>
73
+ {/if}
@@ -0,0 +1,6 @@
1
+ interface Props {
2
+ data: Record<string, unknown>;
3
+ }
4
+ declare const ReadingsList: import("svelte").Component<Props, {}, "">;
5
+ type ReadingsList = ReturnType<typeof ReadingsList>;
6
+ export default ReadingsList;
@@ -0,0 +1,122 @@
1
+ <script lang="ts">
2
+ import type { QueryObserverResult } from '@tanstack/svelte-query'
3
+ import type { PersistedState } from 'runed'
4
+
5
+ import { IconButton, Select } from '@viamrobotics/prime-core'
6
+
7
+ import {
8
+ type RefetchInterval,
9
+ RefetchIntervals,
10
+ type RefetchRate,
11
+ RefetchRates,
12
+ RefetchRateToInterval,
13
+ } from './refetch-interval-store.svelte.js'
14
+
15
+ interface Props {
16
+ refetchInterval: PersistedState<RefetchInterval>
17
+ queries: QueryObserverResult[]
18
+ refetchNotifyDurationMs?: number
19
+ allowLive?: boolean
20
+ }
21
+
22
+ const {
23
+ refetchInterval,
24
+ queries,
25
+ refetchNotifyDurationMs = 500,
26
+ allowLive = false,
27
+ }: Props = $props()
28
+
29
+ let selectedOption = $derived(
30
+ RefetchRateToInterval.find(([, interval]) => interval === refetchInterval.current)?.[0] ??
31
+ RefetchRates.ONE_SEC
32
+ )
33
+
34
+ const selectOption = (selected: string) => {
35
+ selectedOption = selected as RefetchRate
36
+ const interval =
37
+ RefetchRateToInterval.find(([rate]) => rate === selectedOption)?.[1] ??
38
+ RefetchIntervals.ONE_SEC
39
+ refetchInterval.current = interval
40
+ }
41
+
42
+ let refetchState = $state<'idle' | 'success' | 'refetching'>('idle')
43
+ const manualIconState = $derived(
44
+ {
45
+ idle: { name: 'refresh' as const },
46
+ success: { name: 'check' as const },
47
+ refetching: { progress: 'indeterminate' as const },
48
+ }[refetchState]
49
+ )
50
+
51
+ let refetchingStateTimeout: number | undefined
52
+
53
+ const refetchQueries = async () => {
54
+ // Clear the timeout to prevent races if refetchQueries is called during a refetch
55
+ window.clearTimeout(refetchingStateTimeout)
56
+
57
+ // This is in a timeout to prevent icon-flashing on very quick queries
58
+ refetchingStateTimeout = window.setTimeout(() => {
59
+ refetchState = 'refetching'
60
+ }, 250)
61
+ const refetchCalls = queries.map(async (query) => query.refetch())
62
+ await Promise.all(refetchCalls)
63
+ clearTimeout(refetchingStateTimeout)
64
+ refetchState = 'success'
65
+ resetToIdleEventually()
66
+ }
67
+
68
+ let stateNotifyTimeout: number | undefined
69
+
70
+ const resetToIdleEventually = () => {
71
+ window.clearTimeout(stateNotifyTimeout)
72
+ stateNotifyTimeout = window.setTimeout(() => {
73
+ refetchState = 'idle'
74
+ }, refetchNotifyDurationMs)
75
+ }
76
+
77
+ const onChange = (event: Event) => {
78
+ selectOption((event.target as HTMLSelectElement).value)
79
+ }
80
+
81
+ const refetchOptions = $derived(
82
+ allowLive
83
+ ? Object.values(RefetchRates)
84
+ : Object.values(RefetchRates).filter((value) => value !== RefetchRates.LIVE)
85
+ )
86
+
87
+ $effect(() => {
88
+ return () => {
89
+ globalThis.clearTimeout(stateNotifyTimeout)
90
+ }
91
+ })
92
+ </script>
93
+
94
+ <div class="text-default flex flex-row gap-2 text-xs">
95
+ <div class="w-50">
96
+ <Select on:change={onChange}>
97
+ {#each refetchOptions as option (option)}
98
+ <option selected={selectedOption === option}>{option}</option>
99
+ {/each}
100
+ </Select>
101
+ </div>
102
+ {#if selectedOption === RefetchRates.MANUAL}
103
+ <IconButton
104
+ icon={manualIconState.name ?? 'refresh'}
105
+ progress={'progress' in manualIconState ? 'indeterminate' : undefined}
106
+ label="refetch"
107
+ variant="secondary"
108
+ cx="border-light border"
109
+ on:click={refetchQueries}
110
+ />
111
+ {:else}
112
+ <IconButton
113
+ icon="pause"
114
+ label="pause"
115
+ variant="secondary"
116
+ cx="border-light border"
117
+ on:click={() => {
118
+ selectOption(RefetchRates.MANUAL)
119
+ }}
120
+ />
121
+ {/if}
122
+ </div>
@@ -0,0 +1,12 @@
1
+ import type { QueryObserverResult } from '@tanstack/svelte-query';
2
+ import type { PersistedState } from 'runed';
3
+ import { type RefetchInterval } from './refetch-interval-store.svelte.ts';
4
+ interface Props {
5
+ refetchInterval: PersistedState<RefetchInterval>;
6
+ queries: QueryObserverResult[];
7
+ refetchNotifyDurationMs?: number;
8
+ allowLive?: boolean;
9
+ }
10
+ declare const RefetchController: import("svelte").Component<Props, {}, "">;
11
+ type RefetchController = ReturnType<typeof RefetchController>;
12
+ export default RefetchController;
@@ -0,0 +1,18 @@
1
+ import type { ValueOf } from 'type-fest';
2
+ import { PersistedState } from 'runed';
3
+ export declare const RefetchRates: {
4
+ readonly LIVE: "Live";
5
+ readonly ONE_SEC: "Refresh every second";
6
+ readonly FIVE_SEC: "Refresh every 5 seconds";
7
+ readonly MANUAL: "Manual refresh";
8
+ };
9
+ export declare const RefetchIntervals: {
10
+ readonly LIVE: 33.3333;
11
+ readonly ONE_SEC: 1000;
12
+ readonly FIVE_SEC: 5000;
13
+ readonly MANUAL: false;
14
+ };
15
+ export type RefetchRate = ValueOf<typeof RefetchRates>;
16
+ export type RefetchInterval = ValueOf<typeof RefetchIntervals>;
17
+ export declare const RefetchRateToInterval: ["Live" | "Refresh every second" | "Refresh every 5 seconds" | "Manual refresh", false | 1000 | 33.3333 | 5000][];
18
+ export declare const createRefetchIntervalStore: (partID: () => string, resourceName: () => string, scope: string, defaultInterval?: RefetchInterval) => PersistedState<RefetchInterval>;