@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,37 @@
1
+ import { PersistedState } from 'runed';
2
+ export const RefetchRates = {
3
+ LIVE: 'Live',
4
+ ONE_SEC: 'Refresh every second',
5
+ FIVE_SEC: 'Refresh every 5 seconds',
6
+ MANUAL: 'Manual refresh',
7
+ };
8
+ export const RefetchIntervals = {
9
+ LIVE: 33.3333,
10
+ ONE_SEC: 1000,
11
+ FIVE_SEC: 5000,
12
+ MANUAL: false,
13
+ };
14
+ export const RefetchRateToInterval = Object.entries(RefetchRates).map(([rateKey, rate]) => [
15
+ rate,
16
+ RefetchIntervals[rateKey],
17
+ ]);
18
+ // create a persisted store for the specified partID + resourceName +
19
+ // scope. Scope is useful to differentiate multiple refresh rates per card
20
+ export const createRefetchIntervalStore = (partID, resourceName, scope, defaultInterval = RefetchIntervals.ONE_SEC) => {
21
+ const key = $derived(`control-card-refresh/${partID()}/${resourceName()}/${scope}`);
22
+ const persisted = $derived(new PersistedState(key, defaultInterval));
23
+ $effect(() => {
24
+ // Reset to default if the stored option is not a valid interval
25
+ if (!Object.values(RefetchIntervals).includes(persisted.current)) {
26
+ persisted.current = defaultInterval;
27
+ }
28
+ });
29
+ return {
30
+ get current() {
31
+ return persisted.current;
32
+ },
33
+ set current(value) {
34
+ persisted.current = value;
35
+ },
36
+ };
37
+ };
@@ -0,0 +1,31 @@
1
+ <script lang="ts">
2
+ import { Icon } from '@viamrobotics/prime-core'
3
+
4
+ interface Props {
5
+ type: string
6
+ }
7
+
8
+ const { type }: Props = $props()
9
+
10
+ const getIconName = (resourceType: string) => {
11
+ if (resourceType === 'component') {
12
+ return 'viam-component' as const
13
+ }
14
+
15
+ return resourceType === 'service' ? ('viam-service' as const) : undefined
16
+ }
17
+
18
+ const iconName = $derived(getIconName(type))
19
+ </script>
20
+
21
+ <!-- 'check' is just a placeholder when there's not an iconName -->
22
+ <Icon
23
+ name={iconName ?? 'check'}
24
+ cx={[
25
+ 'shrink-0',
26
+ 'text-gray-6',
27
+ {
28
+ 'opacity-0': !iconName,
29
+ },
30
+ ]}
31
+ />
@@ -0,0 +1,6 @@
1
+ interface Props {
2
+ type: string;
3
+ }
4
+ declare const ResourceIcon: import("svelte").Component<Props, {}, "">;
5
+ type ResourceIcon = ReturnType<typeof ResourceIcon>;
6
+ export default ResourceIcon;
@@ -0,0 +1,64 @@
1
+ <!--
2
+ @component
3
+
4
+ A group of sections in a card. For example, "test" or "do command"
5
+ -->
6
+ <script lang="ts">
7
+ import type { Snippet } from 'svelte'
8
+
9
+ import { Icon } from '@viamrobotics/prime-core'
10
+ import { slide } from 'svelte/transition'
11
+
12
+ interface Props {
13
+ /** Title for the group. */
14
+ title: string
15
+ /** Collapsed state. */
16
+ isCollapsed: boolean
17
+ /** Toggle collapsed state. */
18
+ toggleIsCollapsed: () => void
19
+ children?: Snippet
20
+ }
21
+
22
+ const { title, isCollapsed, toggleIsCollapsed, children }: Props = $props()
23
+
24
+ const id = $props.id()
25
+ const collapseID = `section-group-collapse-${id}`
26
+ const headingID = `section-group-heading-${id}`
27
+ </script>
28
+
29
+ <section
30
+ class="flex flex-col"
31
+ aria-labelledby={headingID}
32
+ >
33
+ <header class={['border-gray-3 bg-light hover:bg-medium h-7', !isCollapsed && 'border-b']}>
34
+ <button
35
+ class="group flex h-full w-full flex-row items-center gap-2 px-[11px]"
36
+ aria-controls={collapseID}
37
+ aria-expanded={!isCollapsed}
38
+ aria-label={`${isCollapsed ? 'expand' : 'collapse'} ${title}`}
39
+ onclick={toggleIsCollapsed}
40
+ >
41
+ <Icon
42
+ name={isCollapsed ? 'unfold-more-horizontal' : 'unfold-less-horizontal'}
43
+ cx="group-hover:text-gray-7 text-[#AEAEB5]"
44
+ />
45
+
46
+ <h2
47
+ id={headingID}
48
+ class="font-roboto-mono text-subtle-2 m-0 text-left text-xs tracking-[0.06em] uppercase"
49
+ >
50
+ {title}
51
+ </h2>
52
+ </button>
53
+ </header>
54
+ {#if !isCollapsed}
55
+ <div
56
+ id={collapseID}
57
+ role="region"
58
+ class="divide-y"
59
+ transition:slide={{ duration: 150 }}
60
+ >
61
+ {@render children?.()}
62
+ </div>
63
+ {/if}
64
+ </section>
@@ -0,0 +1,14 @@
1
+ import type { Snippet } from 'svelte';
2
+ interface Props {
3
+ /** Title for the group. */
4
+ title: string;
5
+ /** Collapsed state. */
6
+ isCollapsed: boolean;
7
+ /** Toggle collapsed state. */
8
+ toggleIsCollapsed: () => void;
9
+ children?: Snippet;
10
+ }
11
+ /** A group of sections in a card. For example, "test" or "do command" */
12
+ declare const SectionGroup: import("svelte").Component<Props, {}, "">;
13
+ type SectionGroup = ReturnType<typeof SectionGroup>;
14
+ export default SectionGroup;
@@ -0,0 +1 @@
1
+ data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAABfVBMVEUAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////w/VAaAAAAfnRSTlMAAQIDBAUGBwgJCgsMDQ4QEhQVFhcYGRodHyIlKCstLjAxMzQ1ODs8QUJESElNTk9VVltcXmJjZmlqb3B2d3x9gIOEiYqQkZaXmZ2eoqSlqaqrrLGys7e4vr/ExcjLztDS09XW19rb3eDi5efp6+3u7/Dx8/X29/j5+vv8/f5jKYBhAAAAAWJLR0R+P7hBcwAAAlVJREFUGBntwWlTUlEABuAXkczMPVNTo9IE0xQr9wW1RHNDE9fSjMyNTHNLRd7fHsMwBnKBc+49Z6YPPA9ycnKkOZ3Qa3ICWhWfnJZApz6yFzptkUFo5GJUM/SZY9QstCm/YNRlJXQZYswgNLHtMGY3D3q0Ma4VegQYtwgtasKMC9dChzHeGoUGjgPeCjmgXicTeKDeGhOsQrn6CBM1QDUfk4xDscIjJjkuglrdvKMLam3wjk0o1cQUjVBpmimmoFDpGVOcl0GdARrohzpBGti2QZUWGnJDlQUamociVVc0dF0NNbxMYxhK2PeYxr4dKnQwrXaosMK0lqHAkxumFamDdR+YwXtYVvCTGRzeh1VvmdEbWPWZGa3DIiezeA5rJpnFBCwpPmEWpyWwoo9Z9cKKLWYVhAUuCmiGeXMUMAvTyi8o4LISZg1RyCBMsu1QyG4ezGmjoFaYE6CgRZhSE6agcC3MGKOwUZjgOKCwkAPyOinBA3lrlLAKafURymiALB+ljENS4RGlHBdBTjcldUHOBiVtQkoTpTVCxjSlTUFC6RmlnZdB3ACN3Sy5Xsxc0Vg/xAVp5MRXi6jHI79oZNsGUS00sDtUiriHPd9pwA1RC0yx7rEjQd6rpQjvmoegqismu5x/iRTPPl4w2XU1xHiZ5LevBoYejRwyyTCE2PeY4Ef/A6RV8O4bE+zbIaKD/6y/tiEz11KEt9ohYoVxf2aeQkCd74xxyxDhZ0zIWwFBFd4QY/wQYZ8j+bWnEBLueb6Q/OSAkHx/wA1p7oA/Hzk5OTn/p7/SQudi6Kx0wAAAAABJRU5ErkJggg==
@@ -0,0 +1,2 @@
1
+ import { type BufferAttribute } from 'three';
2
+ export declare const mapColorAttributeGrayscale: (colors: BufferAttribute) => void;
@@ -0,0 +1,55 @@
1
+ import { theme } from '@viamrobotics/prime-core/theme';
2
+ import { Color, Vector3 } from 'three';
3
+ /*
4
+ * this color map is greyscale. The color map is being used map probability values of a PCD
5
+ * into different color buckets provided by the color map.
6
+ * generated with: https://grayscale.design/app
7
+ */
8
+ const colorMapGrey = [
9
+ [240, 240, 240],
10
+ [220, 220, 220],
11
+ [200, 200, 200],
12
+ [190, 190, 190],
13
+ [170, 170, 170],
14
+ [150, 150, 150],
15
+ [40, 40, 40],
16
+ [20, 20, 20],
17
+ [10, 10, 10],
18
+ [0, 0, 0],
19
+ ].map(([red, green, blue]) => new Vector3(red, green, blue).multiplyScalar(1 / 255));
20
+ const USER_GENERATED_POINT_COLOR = new Color(theme.extend.colors.cyberpunk);
21
+ /*
22
+ * Find the desired color bucket for a given probability. This assumes the probability will be a value from 0 to 100
23
+ * ticket to add testing: https://viam.atlassian.net/browse/RSDK-2606
24
+ */
25
+ const probToColorMapBucket = (probability, numBuckets) => {
26
+ const prob = Math.max(Math.min(100, probability * 255), 0);
27
+ return Math.floor(((numBuckets - 1) * prob) / 100);
28
+ };
29
+ /*
30
+ * Map the color of a pixel to a color bucket value.
31
+ * probability represents the probability value normalized by the size of a byte(255) to be between 0 to 1.
32
+ * ticket to add testing: https://viam.atlassian.net/browse/RSDK-2606
33
+ */
34
+ const colorBuckets = (probability) => {
35
+ const bucket = probToColorMapBucket(probability, colorMapGrey.length);
36
+ return colorMapGrey[bucket] ?? new Vector3();
37
+ };
38
+ export const mapColorAttributeGrayscale = (colors) => {
39
+ for (let i = 0; i < colors.count; i += 1) {
40
+ /*
41
+ * Probability is currently assumed to be held in the b part of the rgb field of the PCD map, on a scale of 0 to 100.
42
+ * ticket to look into this further https://viam.atlassian.net/browse/RSDK-2605.
43
+ *
44
+ * User generated points that have been added to the pcd are marked as such by putting 100% probability
45
+ * in the r part of the rgb field. If that has been set, we will draw the point in blue instead of mapping it to its
46
+ * corresponding shade of gray to signal it is a user generated point.
47
+ */
48
+ if (colors.getX(i) === 1) {
49
+ colors.setXYZ(i, USER_GENERATED_POINT_COLOR.r, USER_GENERATED_POINT_COLOR.g, USER_GENERATED_POINT_COLOR.b);
50
+ continue;
51
+ }
52
+ const colorMapPoint = colorBuckets(colors.getZ(i) * 10);
53
+ colors.setXYZ(i, colorMapPoint.x, colorMapPoint.y, colorMapPoint.z);
54
+ }
55
+ };
@@ -0,0 +1 @@
1
+ data:image/png;base64,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
@@ -0,0 +1,29 @@
1
+ <!--
2
+ @component
3
+ Helpers for orienting the user spacially within a map.
4
+ Contains a grid and axes, with small grid spaces placed at 1m.
5
+ -->
6
+ <script lang="ts">
7
+ import { Grid } from '@threlte/extras'
8
+
9
+ import { AxesHelper } from '../../three'
10
+ import { renderOrder } from './render-order'
11
+ </script>
12
+
13
+ <Grid
14
+ infiniteGrid
15
+ fadeDistance={150}
16
+ renderOrder={renderOrder.grid}
17
+ rotation.x={Math.PI / 2}
18
+ cellColor="#ddd"
19
+ sectionColor="#ccc"
20
+ sectionThickness={1.5}
21
+ position.z={-0.1}
22
+ />
23
+
24
+ <AxesHelper length={10_000} />
25
+
26
+ <AxesHelper
27
+ rotation.z={Math.PI}
28
+ length={10_000}
29
+ />
@@ -0,0 +1,22 @@
1
+ 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> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ /**
15
+ * Helpers for orienting the user spacially within a map.
16
+ * Contains a grid and axes, with small grid spaces placed at 1m.
17
+ */
18
+ declare const Helpers: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
19
+ [evt: string]: CustomEvent<any>;
20
+ }, {}, {}, string>;
21
+ type Helpers = InstanceType<typeof Helpers>;
22
+ export default Helpers;
@@ -0,0 +1,9 @@
1
+ import { Vector3 } from 'three';
2
+ /**
3
+ * Fires when the user clicks on the canvas, and reports
4
+ * the intersection of a ray cast from the mouse coordinate
5
+ * to an infinite xy plane at z=0.
6
+ */
7
+ type ClickHandler = (value: Vector3) => void;
8
+ export declare const useRaycastClick: (onClick: ClickHandler) => void;
9
+ export {};
@@ -0,0 +1,36 @@
1
+ import { useThrelte } from '@threlte/core';
2
+ import { onMount } from 'svelte';
3
+ import { Plane, Raycaster, Vector2, Vector3 } from 'three';
4
+ import { normalizeDeviceCoordinates } from './normalize-device-coordinates';
5
+ const EPSILON = 0.001;
6
+ export const useRaycastClick = (onClick) => {
7
+ const { renderer, camera } = useThrelte();
8
+ const canvas = renderer.domElement;
9
+ const raycaster = new Raycaster();
10
+ const pointerDown = new Vector2();
11
+ const pointerUp = new Vector2();
12
+ const plane = new Plane();
13
+ plane.normal.set(0, 0, -1);
14
+ const handleDown = (event) => {
15
+ normalizeDeviceCoordinates(canvas, event.clientX, event.clientY, pointerDown);
16
+ };
17
+ const handleUp = (event) => {
18
+ normalizeDeviceCoordinates(canvas, event.clientX, event.clientY, pointerUp);
19
+ const pointerMoved = pointerDown.sub(pointerUp).lengthSq() > EPSILON;
20
+ if (pointerMoved) {
21
+ return;
22
+ }
23
+ const vec3 = new Vector3();
24
+ raycaster.setFromCamera(pointerUp, camera.current);
25
+ raycaster.ray.intersectPlane(plane, vec3);
26
+ onClick(vec3);
27
+ };
28
+ onMount(() => {
29
+ canvas.addEventListener('pointerdown', handleDown);
30
+ canvas.addEventListener('click', handleUp);
31
+ return () => {
32
+ canvas.removeEventListener('pointerdown', handleDown);
33
+ canvas.removeEventListener('click', handleUp);
34
+ };
35
+ });
36
+ };
@@ -0,0 +1,2 @@
1
+ import { Vector2 } from 'three';
2
+ export declare const normalizeDeviceCoordinates: (element: HTMLElement, x: number, y: number, target: Vector2) => void;
@@ -0,0 +1,9 @@
1
+ import { Vector2 } from 'three';
2
+ export const normalizeDeviceCoordinates = (element, x, y, target) => {
3
+ if (element.clientWidth === 0 || element.clientHeight === 0) {
4
+ throw new Error('normalizeDeviceCoordinates cannot operate on a dimensionless element');
5
+ }
6
+ const rect = element.getBoundingClientRect();
7
+ target.x = ((x - rect.x) / element.clientWidth) * 2 - 1;
8
+ target.y = -(((y - rect.y) / element.clientHeight) * 2) + 1;
9
+ };
@@ -0,0 +1,60 @@
1
+ <!--
2
+ @component
3
+ Renders a 2d pointcloud from a top-down perspective.
4
+ The pointcloud exists on the xy axis, with the camera set at z=1.
5
+ Has the ability to also render other environmental features,
6
+ such as the pose of a base and / or a motion plan.
7
+
8
+ ```svelte
9
+ <SlamMap2d
10
+ pointcloud={new Uint8Array()} // An arraybuffer representing a PCD file.
11
+ basePose={{ x: number, y: number, z: number }} // An optional pose of a robot.
12
+ destination={{ x: number, y: number }} // An optional user-specificed robot destination.
13
+ helpers={true | false} // Whether or not scene helpers should be rendered. Default true.
14
+ motionPath={new Float32Array(x1, y1, x2, y2, x3, y3])} // An optional motion path. Units are assumed to be in Meters. Must not contain NaN.
15
+ />
16
+ ```
17
+ -->
18
+ <script lang="ts">
19
+ import type { Vector2, Vector3 } from 'three'
20
+
21
+ import { Canvas } from '@threlte/core'
22
+
23
+ import Legend from './legend.svelte'
24
+ import Scene from './scene.svelte'
25
+
26
+ interface Props {
27
+ /** A buffer representing a .pcd file */
28
+ pointcloud?: Uint8Array | undefined
29
+ /** The pose of the base of the robot */
30
+ basePose?: { x: number; y: number; theta: number } | undefined
31
+ /** A user-specificed robot destination */
32
+ destination?: Vector2 | undefined
33
+ /** Whether or not scene helpers should be rendered */
34
+ helpers?: boolean
35
+ /** An optional motion path */
36
+ motionPath?: Float32Array | undefined
37
+ onClick: (value: Vector3) => void
38
+ }
39
+
40
+ const { pointcloud, basePose, destination, helpers = true, motionPath, onClick }: Props = $props()
41
+ </script>
42
+
43
+ <div class="relative h-full w-full">
44
+ <Canvas>
45
+ <Scene
46
+ {helpers}
47
+ {pointcloud}
48
+ {basePose}
49
+ {destination}
50
+ {motionPath}
51
+ {onClick}
52
+ />
53
+ </Canvas>
54
+
55
+ {#if helpers}
56
+ <p class="absolute top-3 left-3 bg-white text-xs">Grid set to 1 meter</p>
57
+ {/if}
58
+
59
+ <Legend />
60
+ </div>
@@ -0,0 +1,37 @@
1
+ import type { Vector2, Vector3 } from 'three';
2
+ interface Props {
3
+ /** A buffer representing a .pcd file */
4
+ pointcloud?: Uint8Array | undefined;
5
+ /** The pose of the base of the robot */
6
+ basePose?: {
7
+ x: number;
8
+ y: number;
9
+ theta: number;
10
+ } | undefined;
11
+ /** A user-specificed robot destination */
12
+ destination?: Vector2 | undefined;
13
+ /** Whether or not scene helpers should be rendered */
14
+ helpers?: boolean;
15
+ /** An optional motion path */
16
+ motionPath?: Float32Array | undefined;
17
+ onClick: (value: Vector3) => void;
18
+ }
19
+ /**
20
+ * Renders a 2d pointcloud from a top-down perspective.
21
+ * The pointcloud exists on the xy axis, with the camera set at z=1.
22
+ * Has the ability to also render other environmental features,
23
+ * such as the pose of a base and / or a motion plan.
24
+ *
25
+ * ```svelte
26
+ * <SlamMap2d
27
+ * pointcloud={new Uint8Array()} // An arraybuffer representing a PCD file.
28
+ * basePose={{ x: number, y: number, z: number }} // An optional pose of a robot.
29
+ * destination={{ x: number, y: number }} // An optional user-specificed robot destination.
30
+ * helpers={true | false} // Whether or not scene helpers should be rendered. Default true.
31
+ * motionPath={new Float32Array(x1, y1, x2, y2, x3, y3])} // An optional motion path. Units are assumed to be in Meters. Must not contain NaN.
32
+ * />
33
+ * ```
34
+ */
35
+ declare const Index: import("svelte").Component<Props, {}, "">;
36
+ type Index = ReturnType<typeof Index>;
37
+ export default Index;
@@ -0,0 +1,67 @@
1
+ <!--
2
+ @component
3
+ A user legend for the SLAM map axes.
4
+ -->
5
+ <svg
6
+ class="absolute top-3 right-3"
7
+ width="30"
8
+ height="30"
9
+ viewBox="0 0 30 30"
10
+ fill="none"
11
+ >
12
+ <rect
13
+ width="10"
14
+ height="10"
15
+ rx="5"
16
+ fill="green"
17
+ />
18
+ <path
19
+ d="M4.7 6H4.5L2.8 2.4H3.5L5 5.5H5L6.5 2.4H7.2L5.5 6H5.3V8H4.7V6Z"
20
+ fill="white"
21
+ />
22
+
23
+ <rect
24
+ x="20"
25
+ y="20"
26
+ width="10"
27
+ height="10"
28
+ rx="5"
29
+ fill="red"
30
+ />
31
+ <path
32
+ d="M23.7 22.4L24.9 24.9H25L26.3 22.4H27.1L25.7 25.144V25.24L27.1 28H26.3L25 26H24.9L23.7 28H22.9L24.3 25.2V25.1L22.9 22.4H23.7Z"
33
+ fill="white"
34
+ />
35
+
36
+ <rect
37
+ x="4"
38
+ y="9"
39
+ width="2"
40
+ height="17"
41
+ fill="green"
42
+ />
43
+ <rect
44
+ x="21"
45
+ y="24"
46
+ width="2"
47
+ height="17"
48
+ transform="rotate(90 21 24)"
49
+ fill="red"
50
+ />
51
+ <rect
52
+ x="0.5"
53
+ y="20.5"
54
+ width="9"
55
+ height="9"
56
+ rx="4.5"
57
+ fill="#E0FAE3"
58
+ />
59
+ <rect
60
+ x="0.5"
61
+ y="20.5"
62
+ width="9"
63
+ height="9"
64
+ rx="4.5"
65
+ stroke="#3D7D3F"
66
+ />
67
+ </svg>
@@ -0,0 +1,27 @@
1
+ export default Legend;
2
+ type Legend = SvelteComponent<{
3
+ [x: string]: never;
4
+ }, {
5
+ [evt: string]: CustomEvent<any>;
6
+ }, {}> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ /** A user legend for the SLAM map axes. */
10
+ declare const Legend: $$__sveltets_2_IsomorphicComponent<{
11
+ [x: string]: never;
12
+ }, {
13
+ [evt: string]: CustomEvent<any>;
14
+ }, {}, {}, string>;
15
+ 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> {
16
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
17
+ $$bindings?: Bindings;
18
+ } & Exports;
19
+ (internal: unknown, props: {
20
+ $$events?: Events;
21
+ $$slots?: Slots;
22
+ }): Exports & {
23
+ $set?: any;
24
+ $on?: any;
25
+ };
26
+ z_$$bindings?: Bindings;
27
+ }
@@ -0,0 +1,41 @@
1
+ <!--
2
+ @component
3
+ A 2D marker that can accept a texture.
4
+ Used for rendering the base position, endpoints, etc.
5
+ -->
6
+ <script
7
+ lang="ts"
8
+ module
9
+ >
10
+ import { TextureLoader } from 'three'
11
+
12
+ const textureLoader = new TextureLoader()
13
+ </script>
14
+
15
+ <script lang="ts">
16
+ import { T } from '@threlte/core'
17
+
18
+ import { renderOrder } from './render-order'
19
+
20
+ interface Props {
21
+ name: string
22
+ url: string
23
+ rotation?: number
24
+ [key: string]: unknown
25
+ }
26
+
27
+ const { name, url, rotation = 0, ...rest }: Props = $props()
28
+ </script>
29
+
30
+ <T.Sprite
31
+ {name}
32
+ {...rest}
33
+ renderOrder={renderOrder.markers}
34
+ >
35
+ <T.SpriteMaterial
36
+ map={textureLoader.load(url)}
37
+ sizeAttenuation={false}
38
+ color="#ff0047"
39
+ {rotation}
40
+ />
41
+ </T.Sprite>
@@ -0,0 +1,13 @@
1
+ interface Props {
2
+ name: string;
3
+ url: string;
4
+ rotation?: number;
5
+ [key: string]: unknown;
6
+ }
7
+ /**
8
+ * A 2D marker that can accept a texture.
9
+ * Used for rendering the base position, endpoints, etc.
10
+ */
11
+ declare const Marker: import("svelte").Component<Props, {}, "">;
12
+ type Marker = ReturnType<typeof Marker>;
13
+ export default Marker;
@@ -0,0 +1,65 @@
1
+ <!--
2
+ @component
3
+ Renders a motion plan using thick lines.
4
+
5
+ Assumes the motion plan is coming in as a Float32Array in the following format:
6
+ Float32Array([x1, y1, x2, y2, x3, y3, ...])
7
+
8
+ Units are assumed to be in Meters.
9
+ Must not contain NaN.
10
+ -->
11
+ <script lang="ts">
12
+ import { T } from '@threlte/core'
13
+ import { Line2 } from 'three/examples/jsm/lines/Line2.js'
14
+ import { LineGeometry } from 'three/examples/jsm/lines/LineGeometry.js'
15
+ import { LineMaterial } from 'three/examples/jsm/lines/LineMaterial.js'
16
+
17
+ import { renderOrder } from './render-order'
18
+
19
+ interface Props {
20
+ path: Float32Array | undefined
21
+ }
22
+
23
+ const { path }: Props = $props()
24
+
25
+ const updatePath = (xy?: Float32Array) => {
26
+ if (xy === undefined) {
27
+ return
28
+ }
29
+
30
+ const lineGeometry = new LineGeometry()
31
+ const xyz: number[] = []
32
+ for (let i = 0; i < xy.length - 1; i += 2) {
33
+ const x = xy[i]
34
+ const y = xy[i + 1]
35
+ if (x !== undefined && y !== undefined) {
36
+ xyz.push(x, y, 0)
37
+ }
38
+ }
39
+
40
+ lineGeometry.setPositions(xyz)
41
+
42
+ return lineGeometry
43
+ }
44
+
45
+ let geometry: LineGeometry | undefined = $state()
46
+
47
+ $effect.pre(() => {
48
+ geometry?.dispose()
49
+ geometry = updatePath(path)
50
+ })
51
+ </script>
52
+
53
+ {#if geometry}
54
+ <T
55
+ is={Line2}
56
+ renderOrder={renderOrder.motionPath}
57
+ >
58
+ <T
59
+ is={LineMaterial}
60
+ color="#FF0047"
61
+ linewidth={1}
62
+ />
63
+ <T is={geometry} />
64
+ </T>
65
+ {/if}