@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,73 @@
1
+ import { MercatorCoordinate } from 'maplibre-gl';
2
+ import { Line, Matrix4, Vector3 } from 'three';
3
+ import { useMapLibre } from '../hooks';
4
+ import { lngLatToCartesian, mercatorToCartesian } from '../math';
5
+ /**
6
+ *
7
+ * A plugin to integrate Three.js scenes into a Maplibre map.
8
+ *
9
+ * It syncs the projection matrix of a mapbibre-gl camera to a THREE.Camera in order to render objects
10
+ * from the perspective of the map viewer. The camera is set to look at the current center of the visible map.
11
+ *
12
+ * It also manages the position of any THREE.Object3D that has a `userData.lngLat` property. The position
13
+ * is determined by calculating the difference of the map's center lng,lat and the object's lng,lat and then
14
+ * making an approximate transform to an x,z plane offset in meters.
15
+ *
16
+ * The userData.lngLat property must be a maplibre LngLat object, or in the case of a THREE.Line, a LngLat[].
17
+ *
18
+ * @param scene A THREE.Scene instance.
19
+ * @param cameraSignal This should only be a THREE.Camera instance. Perspective and Orthographic cameras make projection defaults that will not work with Maplibre.
20
+ * @param renderFn A callback that runs on each map draw. Use it to render your scene.
21
+ */
22
+ export const useMapLibreThreeRenderer = (scene, cameraSignal, renderFn) => {
23
+ const { map } = useMapLibre();
24
+ const cameraTransform = new Matrix4();
25
+ const cameraMatrix = new Matrix4();
26
+ const scale = new Matrix4();
27
+ const rotation = new Matrix4().multiplyMatrices(new Matrix4().makeRotationX(-0.5 * Math.PI), new Matrix4().makeRotationY(Math.PI));
28
+ $effect(() => {
29
+ map.addLayer({
30
+ id: 'scene-layer',
31
+ type: 'custom',
32
+ renderingMode: '3d',
33
+ render(_, { modelViewProjectionMatrix }) {
34
+ const center = map.getCenter();
35
+ const mercator = MercatorCoordinate.fromLngLat(center, 0);
36
+ const mercatorScale = mercator.meterInMercatorCoordinateUnits();
37
+ const { x: cx, y: cy } = mercatorToCartesian(mercator, mercatorScale);
38
+ scale.makeScale(mercatorScale, mercatorScale, -mercatorScale);
39
+ cameraTransform
40
+ .multiplyMatrices(scale, rotation)
41
+ .setPosition(mercator.x, mercator.y, mercator.z);
42
+ cameraSignal.current.projectionMatrix = cameraMatrix
43
+ .fromArray(modelViewProjectionMatrix)
44
+ .multiply(cameraTransform);
45
+ scene.traverse((object) => {
46
+ const { lngLat } = object.userData;
47
+ if (lngLat === undefined) {
48
+ return;
49
+ }
50
+ if (Array.isArray(lngLat)) {
51
+ if (object instanceof Line) {
52
+ ;
53
+ object.geometry.setFromPoints(lngLat.map((value) => {
54
+ const { x: ox, y: oy } = lngLatToCartesian(value, mercatorScale);
55
+ return new Vector3(cx - ox, 0, cy - oy);
56
+ }));
57
+ object.computeLineDistances();
58
+ }
59
+ }
60
+ else {
61
+ const { x: ox, y: oy } = lngLatToCartesian(lngLat, mercatorScale);
62
+ object.position.set(cx - ox, 0, cy - oy);
63
+ }
64
+ });
65
+ renderFn(scene, cameraSignal.current);
66
+ map.triggerRepaint();
67
+ },
68
+ });
69
+ return () => {
70
+ map.removeLayer('scene-layer');
71
+ };
72
+ });
73
+ };
@@ -0,0 +1,4 @@
1
+ import type { StyleSpecification } from 'maplibre-gl';
2
+ import { type MapProvider } from './types';
3
+ export declare const getGoogleMapsStyle: (apiKey: string, maxzoom: number, mapType?: "roadmap" | "satellite") => StyleSpecification;
4
+ export declare const getStyleSpecification: (provider: MapProvider, apiKey?: string, maxZoom?: number, satelliteMode?: boolean) => Promise<StyleSpecification>;
@@ -0,0 +1,88 @@
1
+ import { registerGoogleMapsProtocol } from './plugins/google-maps';
2
+ import { MapProviders } from './types';
3
+ import { DEFAULT_MAX_ZOOM } from './zoom';
4
+ const tileSize = 256;
5
+ export const getGoogleMapsStyle = (apiKey, maxzoom, mapType = 'roadmap') => {
6
+ const style = {
7
+ version: 8,
8
+ sources: {
9
+ google: {
10
+ type: 'raster',
11
+ tiles: [`google://${mapType}/{z}/{x}/{y}?key=${apiKey}`],
12
+ tileSize,
13
+ attribution: '&copy; Google Maps',
14
+ maxzoom,
15
+ },
16
+ },
17
+ layers: [
18
+ {
19
+ id: 'google',
20
+ type: 'raster',
21
+ source: 'google',
22
+ },
23
+ ],
24
+ };
25
+ return style;
26
+ };
27
+ const getOpenStreetMapStyle = (maxzoom) => ({
28
+ version: 8,
29
+ sources: {
30
+ osm: {
31
+ type: 'raster',
32
+ tiles: ['https://a.tile.openstreetmap.org/{z}/{x}/{y}.png'],
33
+ tileSize,
34
+ attribution: '&copy; OpenStreetMap Contributors',
35
+ maxzoom,
36
+ },
37
+ satellite: {
38
+ type: 'raster',
39
+ tiles: [
40
+ 'https://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/tile/{z}/{y}/{x}',
41
+ ],
42
+ tileSize,
43
+ attribution: '&copy; USGS National Map Services',
44
+ maxzoom,
45
+ },
46
+ },
47
+ layers: [
48
+ {
49
+ id: 'osm',
50
+ type: 'raster',
51
+ source: 'osm',
52
+ },
53
+ {
54
+ id: 'satellite',
55
+ type: 'raster',
56
+ source: 'satellite',
57
+ layout: {
58
+ visibility: 'none',
59
+ },
60
+ },
61
+ ],
62
+ });
63
+ export const getStyleSpecification = async (provider, apiKey, maxZoom = DEFAULT_MAX_ZOOM, satelliteMode = false) => {
64
+ switch (provider) {
65
+ case MapProviders.googleMaps: {
66
+ if (!apiKey) {
67
+ console.warn('Google Maps API key is required, falling back to OpenStreetMap');
68
+ return getOpenStreetMapStyle(maxZoom);
69
+ }
70
+ try {
71
+ const success = await registerGoogleMapsProtocol(apiKey);
72
+ if (!success) {
73
+ console.warn('Google Maps protocol registration failed, falling back to OpenStreetMap');
74
+ return getOpenStreetMapStyle(maxZoom);
75
+ }
76
+ const mapType = satelliteMode ? 'satellite' : 'roadmap';
77
+ return getGoogleMapsStyle(apiKey, maxZoom, mapType);
78
+ }
79
+ catch (error) {
80
+ console.error('Failed to create Google Maps style, falling back to OpenStreetMap:', error);
81
+ return getOpenStreetMapStyle(maxZoom);
82
+ }
83
+ }
84
+ case MapProviders.openStreet: {
85
+ return getOpenStreetMapStyle(maxZoom);
86
+ }
87
+ }
88
+ };
@@ -0,0 +1,14 @@
1
+ import { LngLat } from 'maplibre-gl';
2
+ export declare const MapProviders: {
3
+ readonly openStreet: "open-street";
4
+ readonly googleMaps: "google-maps";
5
+ };
6
+ export type MapProvider = (typeof MapProviders)[keyof typeof MapProviders];
7
+ export declare class GeoPose extends LngLat {
8
+ rotation: number;
9
+ constructor(lng: number, lat: number, rotation: number);
10
+ }
11
+ export declare class Waypoint extends LngLat {
12
+ id: string;
13
+ constructor(lng: number, lat: number, id: string);
14
+ }
@@ -0,0 +1,19 @@
1
+ import { LngLat } from 'maplibre-gl';
2
+ export const MapProviders = {
3
+ openStreet: 'open-street',
4
+ googleMaps: 'google-maps',
5
+ };
6
+ export class GeoPose extends LngLat {
7
+ rotation;
8
+ constructor(lng, lat, rotation) {
9
+ super(lng, lat);
10
+ this.rotation = rotation;
11
+ }
12
+ }
13
+ export class Waypoint extends LngLat {
14
+ id;
15
+ constructor(lng, lat, id) {
16
+ super(lng, lat);
17
+ this.id = id;
18
+ }
19
+ }
@@ -0,0 +1 @@
1
+ export declare const DEFAULT_MAX_ZOOM = 21;
@@ -0,0 +1 @@
1
+ export const DEFAULT_MAX_ZOOM = 21;
@@ -0,0 +1,76 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte'
3
+
4
+ import { Icon, Tooltip } from '@viamrobotics/prime-core'
5
+ import { twMerge } from 'tailwind-merge'
6
+
7
+ import ErrorDisplay from './error.svelte'
8
+
9
+ interface Props {
10
+ title: string
11
+ tooltip?: string | undefined
12
+ description?: string | undefined
13
+ lastError: Error | null
14
+ class?: string
15
+ titleInput?: Snippet
16
+ error?: Snippet
17
+ children?: Snippet
18
+ }
19
+
20
+ const {
21
+ title,
22
+ tooltip,
23
+ description,
24
+ lastError = null,
25
+ class: className,
26
+ titleInput,
27
+ error,
28
+ children,
29
+ }: Props = $props()
30
+
31
+ const headingID = $props.id()
32
+ </script>
33
+
34
+ <section
35
+ class="flex flex-col gap-2 p-4"
36
+ aria-labelledby={headingID}
37
+ >
38
+ <div class={twMerge('flex grow flex-row flex-wrap gap-2', className)}>
39
+ <div class="flex max-w-[200px] grow flex-col gap-0.5 pr-4">
40
+ <h3
41
+ class="flex flex-row items-center gap-1 text-sm font-semibold"
42
+ id={headingID}
43
+ >
44
+ {title}
45
+ {#if tooltip}
46
+ <Tooltip>
47
+ <Icon
48
+ name="information-outline"
49
+ cx="text-gray-6"
50
+ />
51
+
52
+ <p
53
+ slot="description"
54
+ class="text-xs whitespace-pre-line"
55
+ >
56
+ {tooltip}
57
+ </p>
58
+ </Tooltip>
59
+ {/if}
60
+ </h3>
61
+ {#if description}
62
+ <p class="text-subtle-2 text-xs">{description}</p>
63
+ {/if}
64
+ {@render titleInput?.()}
65
+ </div>
66
+
67
+ <div class="flex grow flex-wrap justify-between gap-2">
68
+ {@render children?.()}
69
+ </div>
70
+ </div>
71
+ {#if error}
72
+ {@render error()}
73
+ {:else}
74
+ <ErrorDisplay {lastError} />
75
+ {/if}
76
+ </section>
@@ -0,0 +1,14 @@
1
+ import type { Snippet } from 'svelte';
2
+ interface Props {
3
+ title: string;
4
+ tooltip?: string | undefined;
5
+ description?: string | undefined;
6
+ lastError: Error | null;
7
+ class?: string;
8
+ titleInput?: Snippet;
9
+ error?: Snippet;
10
+ children?: Snippet;
11
+ }
12
+ declare const MutationSection: import("svelte").Component<Props, {}, "">;
13
+ type MutationSection = ReturnType<typeof MutationSection>;
14
+ export default MutationSection;
@@ -0,0 +1,29 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte'
3
+
4
+ import ErrorDisplay from './error.svelte'
5
+
6
+ interface Props {
7
+ lastError: Error | null
8
+
9
+ titleInput?: Snippet
10
+ error?: Snippet
11
+ children: Snippet
12
+ }
13
+
14
+ const { lastError, titleInput, error, children }: Props = $props()
15
+ </script>
16
+
17
+ <div class="flex flex-col gap-2">
18
+ <span class="inline-flex flex-wrap gap-2">
19
+ {@render titleInput?.()}
20
+ <div class="flex grow flex-wrap justify-between gap-2">
21
+ {@render children()}
22
+ </div>
23
+ </span>
24
+ {#if error}
25
+ {@render error()}
26
+ {:else}
27
+ <ErrorDisplay {lastError} />
28
+ {/if}
29
+ </div>
@@ -0,0 +1,10 @@
1
+ import type { Snippet } from 'svelte';
2
+ interface Props {
3
+ lastError: Error | null;
4
+ titleInput?: Snippet;
5
+ error?: Snippet;
6
+ children: Snippet;
7
+ }
8
+ declare const MutationView: import("svelte").Component<Props, {}, "">;
9
+ type MutationView = ReturnType<typeof MutationView>;
10
+ export default MutationView;
@@ -0,0 +1,139 @@
1
+ <!--
2
+ @component
3
+ Renders an in-progress rectangle that represents a drawn area by the user.
4
+ -->
5
+ <script lang="ts">
6
+ import type * as THREE from 'three'
7
+
8
+ import { T } from '@threlte/core'
9
+ import { theme } from '@viamrobotics/prime-core/theme'
10
+ import {
11
+ LngLat,
12
+ type MapLayerMouseEvent,
13
+ type MapLayerTouchEvent,
14
+ type MapMouseEvent,
15
+ MercatorCoordinate,
16
+ } from 'maplibre-gl'
17
+
18
+ import {
19
+ cartesianToMercator,
20
+ lngLatToMercator,
21
+ useMapLibre,
22
+ useMapLibreEvent,
23
+ } from '../../maplibre'
24
+ import { useNavigationMap } from '../use-navigation-map.svelte'
25
+
26
+ interface Props {
27
+ /** Fires when a rectangle is drawn. */
28
+ onUpdate: (payload: { width: number; height: number; center: LngLat }) => void
29
+ }
30
+
31
+ const { onUpdate }: Props = $props()
32
+
33
+ const { map } = useMapLibre()
34
+ const nav = useNavigationMap()
35
+
36
+ let downLngLat = $state(new LngLat(0, 0))
37
+ let downMercator = new MercatorCoordinate(0, 0, 0)
38
+
39
+ let drawing = $state(false)
40
+ let width = $state(0)
41
+ let height = $state(0)
42
+
43
+ const moveSign = $state({ x: 0, y: 0 })
44
+
45
+ const toPrecisionLevel = (number: number, decimals: number): number => {
46
+ const multiplier = 10 ** decimals
47
+ return Math.floor(number * multiplier) / multiplier
48
+ }
49
+
50
+ const handlePointerDown = (event: MapLayerMouseEvent | MapLayerTouchEvent) => {
51
+ event.preventDefault()
52
+ drawing = true
53
+ downLngLat = event.lngLat
54
+ downMercator = lngLatToMercator(downLngLat)
55
+ }
56
+
57
+ const handlePointerMove = (event: MapMouseEvent) => {
58
+ const moveMercator = lngLatToMercator(event.lngLat)
59
+ const scale = moveMercator.meterInMercatorCoordinateUnits()
60
+
61
+ moveSign.x = Math.sign(moveMercator.x - downMercator.x)
62
+ moveSign.y = Math.sign(moveMercator.y - downMercator.y)
63
+
64
+ width = toPrecisionLevel(Math.abs(moveMercator.x - downMercator.x) / scale, 2)
65
+ height = toPrecisionLevel(Math.abs(moveMercator.y - downMercator.y) / scale, 2)
66
+ }
67
+
68
+ const handlePointerUp = () => {
69
+ drawing = false
70
+
71
+ const scale = downMercator.meterInMercatorCoordinateUnits()
72
+ const offset = cartesianToMercator(-moveSign.x * (width / 2), -moveSign.y * (height / 2), scale)
73
+
74
+ downMercator.x -= offset.x
75
+ downMercator.y -= offset.y
76
+
77
+ const center = downMercator.toLngLat()
78
+
79
+ onUpdate({ width, height, center })
80
+
81
+ width = 0
82
+ height = 0
83
+ }
84
+
85
+ const handleGeometryCreate = (ref: THREE.BufferGeometry) => {
86
+ ref.rotateX(-Math.PI / 2)
87
+ }
88
+
89
+ useMapLibreEvent('mousedown', (event) => {
90
+ if (event.originalEvent.shiftKey) {
91
+ handlePointerDown(event)
92
+ }
93
+ })
94
+
95
+ const handleKeydown = (event: KeyboardEvent) => {
96
+ if (event.shiftKey) {
97
+ map.getCanvas().classList.add('!cursor-crosshair')
98
+ }
99
+ }
100
+
101
+ const handleKeyup = () => {
102
+ map.getCanvas().classList.remove('!cursor-crosshair')
103
+ }
104
+
105
+ $effect.pre(() => {
106
+ if (drawing) {
107
+ map.on('mousemove', handlePointerMove)
108
+ map.on('mouseup', handlePointerUp)
109
+ } else {
110
+ map.off('mousemove', handlePointerMove)
111
+ map.off('mouseup', handlePointerUp)
112
+ }
113
+ })
114
+ </script>
115
+
116
+ <svelte:window
117
+ onkeydown={handleKeydown}
118
+ onkeyup={handleKeyup}
119
+ />
120
+
121
+ <T.Group userData.lngLat={downLngLat}>
122
+ <T.Mesh
123
+ position.x={(-moveSign.x * width) / 2}
124
+ position.z={(-moveSign.y * height) / 2}
125
+ >
126
+ {#if nav.view === '3D'}
127
+ <T.BoxGeometry
128
+ args={[width, height, 10]}
129
+ oncreate={handleGeometryCreate}
130
+ />
131
+ {:else}
132
+ <T.PlaneGeometry
133
+ args={[width, height]}
134
+ oncreate={handleGeometryCreate}
135
+ />
136
+ {/if}
137
+ <T.MeshPhongMaterial color={theme.extend.colors.cyberpunk} />
138
+ </T.Mesh>
139
+ </T.Group>
@@ -0,0 +1,13 @@
1
+ import { LngLat } from 'maplibre-gl';
2
+ interface Props {
3
+ /** Fires when a rectangle is drawn. */
4
+ onUpdate: (payload: {
5
+ width: number;
6
+ height: number;
7
+ center: LngLat;
8
+ }) => void;
9
+ }
10
+ /** Renders an in-progress rectangle that represents a drawn area by the user. */
11
+ declare const DrawTool: import("svelte").Component<Props, {}, "">;
12
+ type DrawTool = ReturnType<typeof DrawTool>;
13
+ export default DrawTool;
@@ -0,0 +1,123 @@
1
+ <script lang="ts">
2
+ import { ToggleButtons, VectorInput } from '@viamrobotics/prime-core'
3
+
4
+ import type { Geometry, Shapes } from '../../types'
5
+
6
+ import { createGeometry } from '../../lib/create-geometry'
7
+
8
+ interface Props {
9
+ /** The geometry to edit. */
10
+ geometry: Geometry
11
+ oninput: (geometry: Geometry) => void
12
+ }
13
+
14
+ const { geometry, oninput }: Props = $props()
15
+
16
+ const getNormalizedSize = () => {
17
+ switch (geometry.type) {
18
+ case 'box': {
19
+ return geometry.length > geometry.height ? geometry.length / 2 : geometry.height / 2
20
+ }
21
+ case 'sphere': {
22
+ return geometry.radius
23
+ }
24
+ case 'capsule': {
25
+ return geometry.length
26
+ }
27
+ }
28
+ }
29
+
30
+ const handleShapeSelect = ({ detail }: CustomEvent<string>) => {
31
+ const currentSize = getNormalizedSize()
32
+ const currentRotation = geometry.pose.orientationVector.th
33
+ const nextType = detail.toLowerCase() as Shapes
34
+ oninput(createGeometry(nextType, currentSize, currentRotation))
35
+ }
36
+
37
+ const handleDimensionsInput = (event: CustomEvent<Record<string, number>>) => {
38
+ const nextGeometry = { ...geometry }
39
+
40
+ switch (nextGeometry.type) {
41
+ case 'box': {
42
+ const length = event.detail['Length (m)']
43
+ const width = event.detail['Width (m)']
44
+ const height = event.detail['Height (m)']
45
+
46
+ if (length !== undefined) {
47
+ nextGeometry.length = length
48
+ }
49
+ if (width !== undefined) {
50
+ nextGeometry.width = width
51
+ }
52
+ if (height !== undefined) {
53
+ nextGeometry.height = height
54
+ }
55
+ break
56
+ }
57
+ case 'sphere': {
58
+ const radius = event.detail['Radius (m)']
59
+
60
+ if (radius !== undefined) {
61
+ nextGeometry.radius = radius
62
+ }
63
+ break
64
+ }
65
+ case 'capsule': {
66
+ const radius = event.detail['Radius (m)']
67
+ const length = event.detail['Length (m)']
68
+
69
+ if (radius !== undefined) {
70
+ nextGeometry.radius = radius
71
+ }
72
+ if (length !== undefined) {
73
+ nextGeometry.length = length
74
+ }
75
+ break
76
+ }
77
+ }
78
+
79
+ oninput(nextGeometry)
80
+ }
81
+
82
+ const shapeMap = {
83
+ box: 'Box',
84
+ sphere: 'Sphere',
85
+ capsule: 'Capsule',
86
+ }
87
+ </script>
88
+
89
+ <div class="my-2 flex flex-col gap-2">
90
+ <ToggleButtons
91
+ options={['Box', 'Sphere', 'Capsule']}
92
+ selected={shapeMap[geometry.type]}
93
+ on:input={handleShapeSelect}
94
+ >
95
+ {#snippet legend()}
96
+ Shape
97
+ {/snippet}
98
+ </ToggleButtons>
99
+
100
+ {#if geometry.type === 'box'}
101
+ <VectorInput
102
+ labels={['Length (m)', 'Width (m)', 'Height (m)']}
103
+ values={{
104
+ 'Length (m)': geometry.length,
105
+ 'Width (m)': geometry.width,
106
+ 'Height (m)': geometry.height,
107
+ }}
108
+ on:input={handleDimensionsInput}
109
+ />
110
+ {:else if geometry.type === 'capsule'}
111
+ <VectorInput
112
+ labels={['Radius (m)', 'Length (m)']}
113
+ values={{ 'Radius (m)': geometry.radius, 'Length (m)': geometry.length }}
114
+ on:input={handleDimensionsInput}
115
+ />
116
+ {:else if geometry.type === 'sphere'}
117
+ <VectorInput
118
+ labels={['Radius (m)']}
119
+ values={{ 'Radius (m)': geometry.radius }}
120
+ on:input={handleDimensionsInput}
121
+ />
122
+ {/if}
123
+ </div>
@@ -0,0 +1,9 @@
1
+ import type { Geometry } from '../../types';
2
+ interface Props {
3
+ /** The geometry to edit. */
4
+ geometry: Geometry;
5
+ oninput: (geometry: Geometry) => void;
6
+ }
7
+ declare const Geometry: import("svelte").Component<Props, {}, "">;
8
+ type Geometry = ReturnType<typeof Geometry>;
9
+ export default Geometry;
@@ -0,0 +1,46 @@
1
+ <!--
2
+ @component
3
+ An editable 2d rotation input, presented to the user in degrees
4
+ -->
5
+ <script lang="ts">
6
+ import { Label, SliderInput } from '@viamrobotics/prime-core'
7
+ import { MathUtils } from 'three'
8
+
9
+ interface Props {
10
+ /** The rotation in radians */
11
+ th: number
12
+ /** Fires when orientation changes with the new value in radians */
13
+ oninput?: (th: number) => void
14
+ }
15
+
16
+ const { th, oninput = undefined }: Props = $props()
17
+
18
+ let input = $state<HTMLInputElement>()
19
+
20
+ const handleInput = () => {
21
+ if (!input) {
22
+ return
23
+ }
24
+
25
+ const value = input.valueAsNumber
26
+
27
+ if (!Number.isNaN(value)) {
28
+ oninput?.(MathUtils.degToRad(value))
29
+ }
30
+ }
31
+ </script>
32
+
33
+ <div class="w-1/2">
34
+ <Label position="top">
35
+ Rotation (deg)
36
+ <SliderInput
37
+ bind:input
38
+ slot="input"
39
+ value={MathUtils.radToDeg(th)}
40
+ placeholder={0}
41
+ on:blur={handleInput}
42
+ on:input={handleInput}
43
+ on:keydown={(event) => event.key === 'Enter' && handleInput()}
44
+ />
45
+ </Label>
46
+ </div>
@@ -0,0 +1,10 @@
1
+ interface Props {
2
+ /** The rotation in radians */
3
+ th: number;
4
+ /** Fires when orientation changes with the new value in radians */
5
+ oninput?: (th: number) => void;
6
+ }
7
+ /** An editable 2d rotation input, presented to the user in degrees */
8
+ declare const Orientation: import("svelte").Component<Props, {}, "">;
9
+ type Orientation = ReturnType<typeof Orientation>;
10
+ export default Orientation;