@vertexvis/viewer 1.0.2-canary.2 → 1.0.2-canary.4

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 (501) hide show
  1. package/dist/cjs/config-20ozv4y8.js.map +1 -1
  2. package/dist/cjs/controller-BhcNbaX_.js.map +1 -1
  3. package/dist/cjs/controller-CSwG6gbQ.js.map +1 -1
  4. package/dist/cjs/cursors-BZmDRtaZ.js.map +1 -1
  5. package/dist/cjs/dom-BBil4aN3.js.map +1 -1
  6. package/dist/cjs/dom-CvGkFQon.js.map +1 -1
  7. package/dist/cjs/entities-D6kgGria.js.map +1 -1
  8. package/dist/cjs/geometry_pb-BTko2Wi0.js.map +1 -1
  9. package/dist/cjs/grpc-BsWFEUrc.js.map +1 -1
  10. package/dist/cjs/index.cjs.js.map +1 -1
  11. package/dist/cjs/model-C9WvOKYT.js.map +1 -1
  12. package/dist/cjs/model-D17EQTIh.js.map +1 -1
  13. package/dist/cjs/model-DAB4oD5n.js.map +1 -1
  14. package/dist/cjs/model-DkXCzhs_.js.map +1 -1
  15. package/dist/cjs/multiElementInteractionHandler-BHvRKVIp.js.map +1 -1
  16. package/dist/cjs/overlays-B-06bUbI.js.map +1 -1
  17. package/dist/cjs/queries-Da9I-xMf.js.map +1 -1
  18. package/dist/cjs/regl-component-HhKCyGQ3.js.map +1 -1
  19. package/dist/cjs/representation_pb-CrCGjlyP.js.map +1 -1
  20. package/dist/cjs/results-1wRRZiYG.js.map +1 -1
  21. package/dist/cjs/row-Cet6xXup.js.map +1 -1
  22. package/dist/cjs/stencil-Hsr_8Chs.js.map +1 -1
  23. package/dist/cjs/streamAttributes-D_J-W8-2.js.map +1 -1
  24. package/dist/cjs/templates-DvjgjnlO.js.map +1 -1
  25. package/dist/cjs/util-DIJSIQXH.js.map +1 -1
  26. package/dist/cjs/utils-CibrnHQ4.js.map +1 -1
  27. package/dist/cjs/utils-D8MbXbwO.js.map +1 -1
  28. package/dist/cjs/utils-qErVs2Vt.js.map +1 -1
  29. package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js +6 -8
  30. package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js.map +1 -1
  31. package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +1 -1
  32. package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js.map +1 -1
  33. package/dist/cjs/vertex-scene-tree.cjs.entry.js +2 -2
  34. package/dist/cjs/vertex-scene-tree.cjs.entry.js.map +1 -1
  35. package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js +2 -2
  36. package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js.map +1 -1
  37. package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +1 -1
  38. package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js.map +1 -1
  39. package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js +1 -1
  40. package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js.map +1 -1
  41. package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js +1 -1
  42. package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js.map +1 -1
  43. package/dist/cjs/vertex-viewer-icon.cjs.entry.js.map +1 -1
  44. package/dist/cjs/vertex-viewer-markup-arrow_3.cjs.entry.js.map +1 -1
  45. package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js.map +1 -1
  46. package/dist/cjs/vertex-viewer-markup.cjs.entry.js +1 -1
  47. package/dist/cjs/vertex-viewer-markup.cjs.entry.js.map +1 -1
  48. package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js.map +1 -1
  49. package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js.map +1 -1
  50. package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +2 -2
  51. package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js.map +1 -1
  52. package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js.map +1 -1
  53. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +2 -2
  54. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js.map +1 -1
  55. package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js.map +1 -1
  56. package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js +1 -1
  57. package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js.map +1 -1
  58. package/dist/cjs/vertex-viewer-teleport-tool.cjs.entry.js.map +1 -1
  59. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +4 -5
  60. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js.map +1 -1
  61. package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +1 -1
  62. package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js.map +1 -1
  63. package/dist/cjs/vertex-viewer-walk-mode-tool.cjs.entry.js.map +1 -1
  64. package/dist/cjs/vertex-viewer.cjs.entry.js +9 -5
  65. package/dist/cjs/vertex-viewer.cjs.entry.js.map +1 -1
  66. package/dist/cjs/viewport-CG1VYkIU.js.map +1 -1
  67. package/dist/collection/components/scene-tree/errors.js.map +1 -1
  68. package/dist/collection/components/scene-tree/lib/controller.js.map +1 -1
  69. package/dist/collection/components/scene-tree/lib/dom.js.map +1 -1
  70. package/dist/collection/components/scene-tree/lib/errors.js.map +1 -1
  71. package/dist/collection/components/scene-tree/lib/grpc.js.map +1 -1
  72. package/dist/collection/components/scene-tree/lib/handlers.js.map +1 -1
  73. package/dist/collection/components/scene-tree/lib/row.js.map +1 -1
  74. package/dist/collection/components/scene-tree/lib/viewer-ops.js.map +1 -1
  75. package/dist/collection/components/scene-tree/scene-tree.js +2 -2
  76. package/dist/collection/components/scene-tree/scene-tree.js.map +1 -1
  77. package/dist/collection/components/scene-tree-search/scene-tree-search.js.map +1 -1
  78. package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js +1 -1
  79. package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js.map +1 -1
  80. package/dist/collection/components/scene-tree-table-cell/utils.js.map +1 -1
  81. package/dist/collection/components/scene-tree-table-layout/lib/dom.js.map +1 -1
  82. package/dist/collection/components/scene-tree-table-layout/lib/window.js.map +1 -1
  83. package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js +5 -5
  84. package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js.map +1 -1
  85. package/dist/collection/components/viewer/utils.js.map +1 -1
  86. package/dist/collection/components/viewer/viewer.js +9 -5
  87. package/dist/collection/components/viewer/viewer.js.map +1 -1
  88. package/dist/collection/components/viewer-box-query-tool/viewer-box-query-tool.js +2 -2
  89. package/dist/collection/components/viewer-box-query-tool/viewer-box-query-tool.js.map +1 -1
  90. package/dist/collection/components/viewer-dom-element/utils.js.map +1 -1
  91. package/dist/collection/components/viewer-dom-element/viewer-dom-element.js +1 -1
  92. package/dist/collection/components/viewer-dom-element/viewer-dom-element.js.map +1 -1
  93. package/dist/collection/components/viewer-dom-group/utils.js.map +1 -1
  94. package/dist/collection/components/viewer-dom-group/viewer-dom-group.js +1 -1
  95. package/dist/collection/components/viewer-dom-group/viewer-dom-group.js.map +1 -1
  96. package/dist/collection/components/viewer-dom-renderer/renderer2d.js.map +1 -1
  97. package/dist/collection/components/viewer-dom-renderer/renderer3d.js.map +1 -1
  98. package/dist/collection/components/viewer-dom-renderer/viewer-dom-renderer.js.map +1 -1
  99. package/dist/collection/components/viewer-hit-result-indicator/lib/dom.js.map +1 -1
  100. package/dist/collection/components/viewer-hit-result-indicator/lib/indicator.js.map +1 -1
  101. package/dist/collection/components/viewer-hit-result-indicator/lib/plane.js.map +1 -1
  102. package/dist/collection/components/viewer-hit-result-indicator/lib/point.js.map +1 -1
  103. package/dist/collection/components/viewer-hit-result-indicator/viewer-hit-result-indicator.js +1 -1
  104. package/dist/collection/components/viewer-hit-result-indicator/viewer-hit-result-indicator.js.map +1 -1
  105. package/dist/collection/components/viewer-icon/viewer-icon.js.map +1 -1
  106. package/dist/collection/components/viewer-markup/markup-utils.js.map +1 -1
  107. package/dist/collection/components/viewer-markup/viewer-markup-components.js.map +1 -1
  108. package/dist/collection/components/viewer-markup/viewer-markup.js +1 -1
  109. package/dist/collection/components/viewer-markup/viewer-markup.js.map +1 -1
  110. package/dist/collection/components/viewer-markup-arrow/interactions.js.map +1 -1
  111. package/dist/collection/components/viewer-markup-arrow/utils.js.map +1 -1
  112. package/dist/collection/components/viewer-markup-arrow/viewer-markup-arrow-components.js.map +1 -1
  113. package/dist/collection/components/viewer-markup-arrow/viewer-markup-arrow.js.map +1 -1
  114. package/dist/collection/components/viewer-markup-circle/interactions.js.map +1 -1
  115. package/dist/collection/components/viewer-markup-circle/utils.js.map +1 -1
  116. package/dist/collection/components/viewer-markup-circle/viewer-markup-circle.js.map +1 -1
  117. package/dist/collection/components/viewer-markup-freeform/interactions.js.map +1 -1
  118. package/dist/collection/components/viewer-markup-freeform/utils.js.map +1 -1
  119. package/dist/collection/components/viewer-markup-freeform/viewer-markup-freeform.js.map +1 -1
  120. package/dist/collection/components/viewer-markup-tool/viewer-markup-tool.js.map +1 -1
  121. package/dist/collection/components/viewer-measurement-details/viewer-measurement-details.js.map +1 -1
  122. package/dist/collection/components/viewer-measurement-distance/hitTest.js.map +1 -1
  123. package/dist/collection/components/viewer-measurement-distance/interactions.js.map +1 -1
  124. package/dist/collection/components/viewer-measurement-distance/utils.js.map +1 -1
  125. package/dist/collection/components/viewer-measurement-distance/viewer-measurement-distance.js.map +1 -1
  126. package/dist/collection/components/viewer-measurement-line/viewer-measurement-line.js +1 -1
  127. package/dist/collection/components/viewer-measurement-line/viewer-measurement-line.js.map +1 -1
  128. package/dist/collection/components/viewer-measurement-overlays/viewer-measurement-overlays.js +1 -1
  129. package/dist/collection/components/viewer-measurement-overlays/viewer-measurement-overlays.js.map +1 -1
  130. package/dist/collection/components/viewer-measurement-precise/viewer-measurement-precise.js.map +1 -1
  131. package/dist/collection/components/viewer-pin-group/utils.js.map +1 -1
  132. package/dist/collection/components/viewer-pin-group/viewer-pin-group.js +2 -2
  133. package/dist/collection/components/viewer-pin-group/viewer-pin-group.js.map +1 -1
  134. package/dist/collection/components/viewer-pin-label/viewer-pin-label.js.map +1 -1
  135. package/dist/collection/components/viewer-pin-tool/utils.js.map +1 -1
  136. package/dist/collection/components/viewer-pin-tool/viewer-pin-tool.js +1 -1
  137. package/dist/collection/components/viewer-pin-tool/viewer-pin-tool.js.map +1 -1
  138. package/dist/collection/components/viewer-teleport-tool/viewer-teleport-tool.js.map +1 -1
  139. package/dist/collection/components/viewer-transform-widget/util.js +1 -2
  140. package/dist/collection/components/viewer-transform-widget/util.js.map +1 -1
  141. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js.map +1 -1
  142. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js +3 -3
  143. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js.map +1 -1
  144. package/dist/collection/components/viewer-transform-widget/widget.js.map +1 -1
  145. package/dist/collection/components/viewer-view-cube/viewer-view-cube.js +1 -1
  146. package/dist/collection/components/viewer-view-cube/viewer-view-cube.js.map +1 -1
  147. package/dist/collection/components/viewer-walk-mode-tool/viewer-walk-mode-tool.js.map +1 -1
  148. package/dist/collection/lib/annotations/controller.js.map +1 -1
  149. package/dist/collection/lib/canvases/controller.js.map +1 -1
  150. package/dist/collection/lib/canvases/mapper.js.map +1 -1
  151. package/dist/collection/lib/config.js.map +1 -1
  152. package/dist/collection/lib/cursors.js.map +1 -1
  153. package/dist/collection/lib/dom.js.map +1 -1
  154. package/dist/collection/lib/grpc.js.map +1 -1
  155. package/dist/collection/lib/interactions/baseInteractionHandler.js.map +1 -1
  156. package/dist/collection/lib/interactions/flyToPartKeyInteraction.js.map +1 -1
  157. package/dist/collection/lib/interactions/flyToPositionKeyInteraction.js.map +1 -1
  158. package/dist/collection/lib/interactions/interactionApi.js.map +1 -1
  159. package/dist/collection/lib/interactions/interactionApiOrthographic.js.map +1 -1
  160. package/dist/collection/lib/interactions/interactionApiPerspective.js.map +1 -1
  161. package/dist/collection/lib/interactions/mouseInteractionHandler.js.map +1 -1
  162. package/dist/collection/lib/interactions/mouseInteractions.js.map +1 -1
  163. package/dist/collection/lib/interactions/multiElementInteractionHandler.js.map +1 -1
  164. package/dist/collection/lib/interactions/multiPointerInteractionHandler.js.map +1 -1
  165. package/dist/collection/lib/interactions/multiTouchInteractionHandler.js.map +1 -1
  166. package/dist/collection/lib/interactions/pointerInteractionHandler.js.map +1 -1
  167. package/dist/collection/lib/interactions/tapInteractionHandler.js.map +1 -1
  168. package/dist/collection/lib/interactions/touchInteractionHandler.js.map +1 -1
  169. package/dist/collection/lib/keyBinding.js.map +1 -1
  170. package/dist/collection/lib/mappers/annotation.js.map +1 -1
  171. package/dist/collection/lib/mappers/camera.js.map +1 -1
  172. package/dist/collection/lib/mappers/color.js.map +1 -1
  173. package/dist/collection/lib/mappers/colorMaterial.js.map +1 -1
  174. package/dist/collection/lib/mappers/corePb.js.map +1 -1
  175. package/dist/collection/lib/mappers/corePbJs.js.map +1 -1
  176. package/dist/collection/lib/mappers/frameStreaming.js.map +1 -1
  177. package/dist/collection/lib/mappers/geometry.js.map +1 -1
  178. package/dist/collection/lib/mappers/material.js.map +1 -1
  179. package/dist/collection/lib/mappers/pagination.js.map +1 -1
  180. package/dist/collection/lib/mappers/scalar.js.map +1 -1
  181. package/dist/collection/lib/mappers/streamAttributes.js.map +1 -1
  182. package/dist/collection/lib/markup/interactions.js.map +1 -1
  183. package/dist/collection/lib/measurement/controller.js.map +1 -1
  184. package/dist/collection/lib/measurement/entities.js.map +1 -1
  185. package/dist/collection/lib/measurement/interactions.js.map +1 -1
  186. package/dist/collection/lib/measurement/mapper.js.map +1 -1
  187. package/dist/collection/lib/measurement/model.js.map +1 -1
  188. package/dist/collection/lib/measurement/overlays.js.map +1 -1
  189. package/dist/collection/lib/measurement/results.js.map +1 -1
  190. package/dist/collection/lib/meters.js.map +1 -1
  191. package/dist/collection/lib/model-views/controller.js.map +1 -1
  192. package/dist/collection/lib/model-views/mapper.js.map +1 -1
  193. package/dist/collection/lib/pins/controller.js.map +1 -1
  194. package/dist/collection/lib/pins/interactions.js.map +1 -1
  195. package/dist/collection/lib/pmi/controller.js.map +1 -1
  196. package/dist/collection/lib/pmi/mapper.js.map +1 -1
  197. package/dist/collection/lib/rendering/canvas.js.map +1 -1
  198. package/dist/collection/lib/rendering/imageLoaders.js.map +1 -1
  199. package/dist/collection/lib/rendering/matrices.js.map +1 -1
  200. package/dist/collection/lib/rendering/timing.js.map +1 -1
  201. package/dist/collection/lib/rendering/utils.js.map +1 -1
  202. package/dist/collection/lib/rendering/vectors.js.map +1 -1
  203. package/dist/collection/lib/scene-items/controller.js.map +1 -1
  204. package/dist/collection/lib/scene-items/mapper.js.map +1 -1
  205. package/dist/collection/lib/scenes/camera.js.map +1 -1
  206. package/dist/collection/lib/scenes/cameraRenderResult.js.map +1 -1
  207. package/dist/collection/lib/scenes/colorMaterial.js.map +1 -1
  208. package/dist/collection/lib/scenes/crossSectioner.js.map +1 -1
  209. package/dist/collection/lib/scenes/mapper.js.map +1 -1
  210. package/dist/collection/lib/scenes/operations.js.map +1 -1
  211. package/dist/collection/lib/scenes/queries.js.map +1 -1
  212. package/dist/collection/lib/scenes/raycaster.js.map +1 -1
  213. package/dist/collection/lib/scenes/scene.js.map +1 -1
  214. package/dist/collection/lib/scenes/sceneOperationExecuteResult.js.map +1 -1
  215. package/dist/collection/lib/scenes/sceneViewStateLoader.js.map +1 -1
  216. package/dist/collection/lib/stencil.js.map +1 -1
  217. package/dist/collection/lib/storage.js.map +1 -1
  218. package/dist/collection/lib/stream/dispatcher.js.map +1 -1
  219. package/dist/collection/lib/stream/stream.js.map +1 -1
  220. package/dist/collection/lib/stream/utils.js.map +1 -1
  221. package/dist/collection/lib/teleportation/interactions.js.map +1 -1
  222. package/dist/collection/lib/templates.js.map +1 -1
  223. package/dist/collection/lib/token.js.map +1 -1
  224. package/dist/collection/lib/transforms/axis-lines.js.map +1 -1
  225. package/dist/collection/lib/transforms/axis-rotation.js.map +1 -1
  226. package/dist/collection/lib/transforms/axis-translation.js.map +1 -1
  227. package/dist/collection/lib/transforms/controller.js.map +1 -1
  228. package/dist/collection/lib/transforms/drawable.js.map +1 -1
  229. package/dist/collection/lib/transforms/hits.js.map +1 -1
  230. package/dist/collection/lib/transforms/line.js.map +1 -1
  231. package/dist/collection/lib/transforms/mesh.js.map +1 -1
  232. package/dist/collection/lib/transforms/shape.js.map +1 -1
  233. package/dist/collection/lib/transforms/transformation-delta.js.map +1 -1
  234. package/dist/collection/lib/transforms/util.js.map +1 -1
  235. package/dist/collection/lib/types/clippingPlanes.js.map +1 -1
  236. package/dist/collection/lib/types/depthBuffer.js.map +1 -1
  237. package/dist/collection/lib/types/featureMap.js.map +1 -1
  238. package/dist/collection/lib/types/flags.js.map +1 -1
  239. package/dist/collection/lib/types/frame.js.map +1 -1
  240. package/dist/collection/lib/types/frameCamera.js.map +1 -1
  241. package/dist/collection/lib/types/loadableResource.js.map +1 -1
  242. package/dist/collection/lib/types/orientation.js.map +1 -1
  243. package/dist/collection/lib/types/sceneViewStateIdentifier.js.map +1 -1
  244. package/dist/collection/lib/types/standardView.js.map +1 -1
  245. package/dist/collection/lib/types/stencilBuffer.js.map +1 -1
  246. package/dist/collection/lib/types/synchronizedClock.js.map +1 -1
  247. package/dist/collection/lib/types/viewport.js.map +1 -1
  248. package/dist/collection/lib/visibilityObserver.js.map +1 -1
  249. package/dist/collection/lib/volume-intersection/controller.js.map +1 -1
  250. package/dist/collection/lib/volume-intersection/interactions.js.map +1 -1
  251. package/dist/collection/lib/volume-intersection/model.js.map +1 -1
  252. package/dist/collection/lib/walk-mode/controller.js.map +1 -1
  253. package/dist/collection/lib/walk-mode/interactions.js.map +1 -1
  254. package/dist/collection/lib/walk-mode/model.js.map +1 -1
  255. package/dist/collection/lib/webgl/regl-component.js.map +1 -1
  256. package/dist/collection/testing/annotations.js.map +1 -1
  257. package/dist/collection/testing/canvases.js.map +1 -1
  258. package/dist/collection/testing/colors.js.map +1 -1
  259. package/dist/collection/testing/eventually.js.map +1 -1
  260. package/dist/collection/testing/fixtures.js.map +1 -1
  261. package/dist/collection/testing/grpc.js +3 -9
  262. package/dist/collection/testing/grpc.js.map +1 -1
  263. package/dist/collection/testing/modelViews.js.map +1 -1
  264. package/dist/collection/testing/pmi.js.map +1 -1
  265. package/dist/collection/testing/random.js.map +1 -1
  266. package/dist/collection/testing/resizeObserver.js.map +1 -1
  267. package/dist/collection/testing/scene-items-helper.js.map +1 -1
  268. package/dist/collection/testing/sceneTree.js.map +1 -1
  269. package/dist/collection/testing/viewer.js.map +1 -1
  270. package/dist/collection/testing/webgl.js.map +1 -1
  271. package/dist/components/index.js.map +1 -1
  272. package/dist/components/{p-St4ctu2K.js → p-3-bKfpqr.js} +2 -2
  273. package/dist/components/{p-St4ctu2K.js.map → p-3-bKfpqr.js.map} +1 -1
  274. package/dist/components/p-3DqRAYgO.js.map +1 -1
  275. package/dist/components/p-B-ToCp8-.js.map +1 -1
  276. package/dist/components/p-B156bTbY.js +5 -0
  277. package/dist/components/p-B156bTbY.js.map +1 -0
  278. package/dist/components/p-B9R0QWr4.js.map +1 -1
  279. package/dist/components/p-BCOD9yfw.js.map +1 -1
  280. package/dist/components/p-BHAaIoH5.js.map +1 -1
  281. package/dist/components/{p-Doltf1wO.js → p-BOJJZ1cN.js} +2 -2
  282. package/dist/components/p-BOJJZ1cN.js.map +1 -0
  283. package/dist/components/p-BkHp-aAR.js.map +1 -1
  284. package/dist/components/p-Bkm6H5uq.js.map +1 -1
  285. package/dist/components/p-C-VWDW9n.js.map +1 -1
  286. package/dist/components/p-C79PxobX.js.map +1 -1
  287. package/dist/components/p-CAugdB_8.js.map +1 -1
  288. package/dist/components/p-CEzVEgdQ.js.map +1 -1
  289. package/dist/components/p-CGCJ5hbJ.js.map +1 -1
  290. package/dist/components/p-COlcifvm.js.map +1 -1
  291. package/dist/components/p-CXTH3zrN.js.map +1 -1
  292. package/dist/components/p-CZCXdo3t.js.map +1 -1
  293. package/dist/components/p-Cd7kap5W.js.map +1 -1
  294. package/dist/components/p-CiSHWNC4.js.map +1 -1
  295. package/dist/components/p-CjG1fMh1.js.map +1 -1
  296. package/dist/components/p-CkjXRDNL.js.map +1 -1
  297. package/dist/components/p-D0KZu516.js.map +1 -1
  298. package/dist/components/p-D12q-fpW.js.map +1 -1
  299. package/dist/components/p-D33gVA2W.js.map +1 -1
  300. package/dist/components/p-DC86ZXai.js.map +1 -1
  301. package/dist/components/{p-B80hfIq6.js → p-DF4kEsJU.js} +2 -2
  302. package/dist/components/p-DF4kEsJU.js.map +1 -0
  303. package/dist/components/p-DRh4_Z-g.js.map +1 -1
  304. package/dist/components/p-DRnMrHWY.js.map +1 -1
  305. package/dist/components/{p-b0ZzPHz8.js → p-DUC59SSO.js} +2 -2
  306. package/dist/components/p-DUC59SSO.js.map +1 -0
  307. package/dist/components/p-DVW2WZTq.js.map +1 -1
  308. package/dist/components/p-DZI8pnGz.js.map +1 -1
  309. package/dist/components/p-Dbz9yUqC.js.map +1 -1
  310. package/dist/components/p-Yfi0i5Kj.js.map +1 -1
  311. package/dist/components/p-abSJ29r7.js.map +1 -1
  312. package/dist/components/p-ahjMltGJ.js.map +1 -1
  313. package/dist/components/p-bal2RLiw.js.map +1 -1
  314. package/dist/components/{p-BopQW1sA.js → p-oK38ynrd.js} +2 -2
  315. package/dist/components/p-oK38ynrd.js.map +1 -0
  316. package/dist/components/vertex-scene-tree-table-cell.js +1 -1
  317. package/dist/components/vertex-scene-tree-table-cell.js.map +1 -1
  318. package/dist/components/vertex-scene-tree-table-layout.js +1 -1
  319. package/dist/components/vertex-scene-tree.js +1 -1
  320. package/dist/components/vertex-scene-tree.js.map +1 -1
  321. package/dist/components/vertex-viewer-box-query-tool.js +1 -1
  322. package/dist/components/vertex-viewer-box-query-tool.js.map +1 -1
  323. package/dist/components/vertex-viewer-dom-element.js +1 -1
  324. package/dist/components/vertex-viewer-dom-group.js +1 -1
  325. package/dist/components/vertex-viewer-hit-result-indicator.js +1 -1
  326. package/dist/components/vertex-viewer-hit-result-indicator.js.map +1 -1
  327. package/dist/components/vertex-viewer-markup-tool.js.map +1 -1
  328. package/dist/components/vertex-viewer-markup.js +1 -1
  329. package/dist/components/vertex-viewer-markup.js.map +1 -1
  330. package/dist/components/vertex-viewer-measurement-details.js.map +1 -1
  331. package/dist/components/vertex-viewer-measurement-distance.js +1 -1
  332. package/dist/components/vertex-viewer-measurement-distance.js.map +1 -1
  333. package/dist/components/vertex-viewer-measurement-line.js +1 -1
  334. package/dist/components/vertex-viewer-measurement-overlays.js +1 -1
  335. package/dist/components/vertex-viewer-measurement-precise.js +1 -1
  336. package/dist/components/vertex-viewer-measurement-precise.js.map +1 -1
  337. package/dist/components/vertex-viewer-pin-group.js +1 -1
  338. package/dist/components/vertex-viewer-pin-tool.js +1 -1
  339. package/dist/components/vertex-viewer-pin-tool.js.map +1 -1
  340. package/dist/components/vertex-viewer-transform-widget.js +1 -1
  341. package/dist/components/vertex-viewer-transform-widget.js.map +1 -1
  342. package/dist/components/vertex-viewer-view-cube.js +1 -1
  343. package/dist/components/vertex-viewer-view-cube.js.map +1 -1
  344. package/dist/components/vertex-viewer-walk-mode-tool.js.map +1 -1
  345. package/dist/components/vertex-viewer.js +1 -1
  346. package/dist/components/vertex-viewer.js.map +1 -1
  347. package/dist/esm/config-lglER3mU.js.map +1 -1
  348. package/dist/esm/controller-BMWGs-I6.js.map +1 -1
  349. package/dist/esm/controller-Iymb_J2R.js.map +1 -1
  350. package/dist/esm/cursors-BbBDEutb.js.map +1 -1
  351. package/dist/esm/dom-B3m2VjbN.js.map +1 -1
  352. package/dist/esm/dom-DX6pEG54.js.map +1 -1
  353. package/dist/esm/entities-zRken6VS.js.map +1 -1
  354. package/dist/esm/geometry_pb-BiZRfctN.js.map +1 -1
  355. package/dist/esm/grpc-CZAYqbTu.js.map +1 -1
  356. package/dist/esm/index.js.map +1 -1
  357. package/dist/esm/model-BYW5YIye.js.map +1 -1
  358. package/dist/esm/model-CLtwOS0o.js.map +1 -1
  359. package/dist/esm/model-D0EJdHmW.js.map +1 -1
  360. package/dist/esm/model-DHJ5aE4y.js.map +1 -1
  361. package/dist/esm/multiElementInteractionHandler-DwjL-r55.js.map +1 -1
  362. package/dist/esm/overlays-BE1oqniA.js.map +1 -1
  363. package/dist/esm/queries-DEzCmbTD.js.map +1 -1
  364. package/dist/esm/regl-component-DmkowWhg.js.map +1 -1
  365. package/dist/esm/representation_pb-g4f0WC4k.js.map +1 -1
  366. package/dist/esm/results-CFB6nKu8.js.map +1 -1
  367. package/dist/esm/row-CiSHWNC4.js.map +1 -1
  368. package/dist/esm/stencil-BV-7pO4q.js.map +1 -1
  369. package/dist/esm/streamAttributes-Cp8PEH9A.js.map +1 -1
  370. package/dist/esm/templates-DRh4_Z-g.js.map +1 -1
  371. package/dist/esm/util-BCZZYmp4.js.map +1 -1
  372. package/dist/esm/utils-BvZ9-fs0.js.map +1 -1
  373. package/dist/esm/utils-DC86ZXai.js.map +1 -1
  374. package/dist/esm/utils-D_pIldrS.js.map +1 -1
  375. package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js +6 -8
  376. package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js.map +1 -1
  377. package/dist/esm/vertex-scene-tree-table-cell.entry.js +1 -1
  378. package/dist/esm/vertex-scene-tree-table-cell.entry.js.map +1 -1
  379. package/dist/esm/vertex-scene-tree.entry.js +2 -2
  380. package/dist/esm/vertex-scene-tree.entry.js.map +1 -1
  381. package/dist/esm/vertex-viewer-box-query-tool.entry.js +2 -2
  382. package/dist/esm/vertex-viewer-box-query-tool.entry.js.map +1 -1
  383. package/dist/esm/vertex-viewer-dom-element_2.entry.js +1 -1
  384. package/dist/esm/vertex-viewer-dom-element_2.entry.js.map +1 -1
  385. package/dist/esm/vertex-viewer-dom-group.entry.js +1 -1
  386. package/dist/esm/vertex-viewer-dom-group.entry.js.map +1 -1
  387. package/dist/esm/vertex-viewer-hit-result-indicator.entry.js +1 -1
  388. package/dist/esm/vertex-viewer-hit-result-indicator.entry.js.map +1 -1
  389. package/dist/esm/vertex-viewer-icon.entry.js.map +1 -1
  390. package/dist/esm/vertex-viewer-markup-arrow_3.entry.js.map +1 -1
  391. package/dist/esm/vertex-viewer-markup-tool.entry.js.map +1 -1
  392. package/dist/esm/vertex-viewer-markup.entry.js +1 -1
  393. package/dist/esm/vertex-viewer-markup.entry.js.map +1 -1
  394. package/dist/esm/vertex-viewer-measurement-details.entry.js.map +1 -1
  395. package/dist/esm/vertex-viewer-measurement-distance.entry.js.map +1 -1
  396. package/dist/esm/vertex-viewer-measurement-line_2.entry.js +2 -2
  397. package/dist/esm/vertex-viewer-measurement-line_2.entry.js.map +1 -1
  398. package/dist/esm/vertex-viewer-measurement-precise.entry.js.map +1 -1
  399. package/dist/esm/vertex-viewer-pin-group.entry.js +2 -2
  400. package/dist/esm/vertex-viewer-pin-group.entry.js.map +1 -1
  401. package/dist/esm/vertex-viewer-pin-label_2.entry.js.map +1 -1
  402. package/dist/esm/vertex-viewer-pin-tool.entry.js +1 -1
  403. package/dist/esm/vertex-viewer-pin-tool.entry.js.map +1 -1
  404. package/dist/esm/vertex-viewer-teleport-tool.entry.js.map +1 -1
  405. package/dist/esm/vertex-viewer-transform-widget.entry.js +4 -5
  406. package/dist/esm/vertex-viewer-transform-widget.entry.js.map +1 -1
  407. package/dist/esm/vertex-viewer-view-cube.entry.js +1 -1
  408. package/dist/esm/vertex-viewer-view-cube.entry.js.map +1 -1
  409. package/dist/esm/vertex-viewer-walk-mode-tool.entry.js.map +1 -1
  410. package/dist/esm/vertex-viewer.entry.js +9 -5
  411. package/dist/esm/vertex-viewer.entry.js.map +1 -1
  412. package/dist/esm/viewport-C8WQZxvx.js.map +1 -1
  413. package/dist/types/regl-shape.d.ts +1 -1
  414. package/dist/viewer/index.esm.js.map +1 -1
  415. package/dist/viewer/{p-eac63070.entry.js → p-051b5154.entry.js} +2 -2
  416. package/dist/viewer/p-051b5154.entry.js.map +1 -0
  417. package/dist/viewer/{p-3d3a7eeb.entry.js → p-0984c51f.entry.js} +2 -2
  418. package/dist/viewer/{p-3d3a7eeb.entry.js.map → p-0984c51f.entry.js.map} +1 -1
  419. package/dist/viewer/{p-864f40c7.entry.js → p-11cf755a.entry.js} +2 -2
  420. package/dist/viewer/p-11cf755a.entry.js.map +1 -0
  421. package/dist/viewer/{p-29d14611.entry.js → p-16775f7d.entry.js} +2 -2
  422. package/dist/viewer/p-16775f7d.entry.js.map +1 -0
  423. package/dist/viewer/{p-5a85cae5.entry.js → p-1eb636f8.entry.js} +2 -2
  424. package/dist/viewer/p-1eb636f8.entry.js.map +1 -0
  425. package/dist/viewer/{p-e993f300.entry.js → p-228d1d43.entry.js} +2 -2
  426. package/dist/viewer/p-228d1d43.entry.js.map +1 -0
  427. package/dist/viewer/p-33f44cc1.entry.js.map +1 -1
  428. package/dist/viewer/{p-3300d3dc.entry.js → p-35601c85.entry.js} +2 -2
  429. package/dist/viewer/p-35601c85.entry.js.map +1 -0
  430. package/dist/viewer/p-47766566.entry.js.map +1 -1
  431. package/dist/viewer/p-6e3a6bbd.entry.js.map +1 -1
  432. package/dist/viewer/p-7f388b45.entry.js.map +1 -1
  433. package/dist/viewer/p-89544066.entry.js.map +1 -1
  434. package/dist/viewer/{p-07b99ac9.entry.js → p-8c369777.entry.js} +2 -2
  435. package/dist/viewer/p-8c369777.entry.js.map +1 -0
  436. package/dist/viewer/{p-e59983dc.entry.js → p-9835c5e2.entry.js} +2 -2
  437. package/dist/viewer/p-9835c5e2.entry.js.map +1 -0
  438. package/dist/viewer/{p-aa95e21a.entry.js → p-9d8ff406.entry.js} +2 -2
  439. package/dist/viewer/p-9d8ff406.entry.js.map +1 -0
  440. package/dist/viewer/p-BDvACHun.js.map +1 -1
  441. package/dist/viewer/p-BIkuvTVH.js.map +1 -1
  442. package/dist/viewer/p-BRPkbTVP.js.map +1 -1
  443. package/dist/viewer/p-BsBIynwj.js.map +1 -1
  444. package/dist/viewer/p-BxtKMwBH.js.map +1 -1
  445. package/dist/viewer/p-C4y4Noe-.js.map +1 -1
  446. package/dist/viewer/p-C6KrfydC.js.map +1 -1
  447. package/dist/viewer/p-C7dYsPFU.js.map +1 -1
  448. package/dist/viewer/p-C9Cqbq6H.js.map +1 -1
  449. package/dist/viewer/p-CVWO4w6b.js.map +1 -1
  450. package/dist/viewer/p-ChqXy0cG.js.map +1 -1
  451. package/dist/viewer/p-CiSHWNC4.js.map +1 -1
  452. package/dist/viewer/p-CjG1fMh1.js.map +1 -1
  453. package/dist/viewer/p-Cs5KOvOQ.js.map +1 -1
  454. package/dist/viewer/p-CyGlYje2.js.map +1 -1
  455. package/dist/viewer/p-D6eJC1q4.js.map +1 -1
  456. package/dist/viewer/p-DC86ZXai.js.map +1 -1
  457. package/dist/viewer/p-DRh4_Z-g.js.map +1 -1
  458. package/dist/viewer/p-DUX5FvBC.js.map +1 -1
  459. package/dist/viewer/p-DX6pEG54.js.map +1 -1
  460. package/dist/viewer/p-D_ixWHO7.js.map +1 -1
  461. package/dist/viewer/p-DacE-wPp.js.map +1 -1
  462. package/dist/viewer/p-Dp56p_jX.js.map +1 -1
  463. package/dist/viewer/p-EsKoKfmx.js.map +1 -1
  464. package/dist/viewer/p-F8e15or2.js.map +1 -1
  465. package/dist/viewer/p-Jfxh0jq9.js.map +1 -1
  466. package/dist/viewer/p-WPRMWirY.js.map +1 -1
  467. package/dist/viewer/p-_93RRNxT.js.map +1 -1
  468. package/dist/viewer/p-a8a81cba.entry.js +5 -0
  469. package/dist/viewer/p-a8a81cba.entry.js.map +1 -0
  470. package/dist/viewer/p-a9282481.entry.js.map +1 -1
  471. package/dist/viewer/{p-63f4f702.entry.js → p-c7e62d66.entry.js} +2 -2
  472. package/dist/viewer/p-c7e62d66.entry.js.map +1 -0
  473. package/dist/viewer/p-d37e647b.entry.js.map +1 -1
  474. package/dist/viewer/{p-302f2078.entry.js → p-d9fe788f.entry.js} +2 -2
  475. package/dist/viewer/p-d9fe788f.entry.js.map +1 -0
  476. package/dist/viewer/p-e9b83dae.entry.js.map +1 -1
  477. package/dist/viewer/{p-70f3629d.entry.js → p-f271dc4a.entry.js} +2 -2
  478. package/dist/viewer/p-f271dc4a.entry.js.map +1 -0
  479. package/dist/viewer/p-f65c0769.entry.js.map +1 -1
  480. package/dist/viewer/viewer.esm.js +1 -1
  481. package/package.json +7 -7
  482. package/dist/components/p-B80hfIq6.js.map +0 -1
  483. package/dist/components/p-BopQW1sA.js.map +0 -1
  484. package/dist/components/p-DNtS2F8J.js +0 -5
  485. package/dist/components/p-DNtS2F8J.js.map +0 -1
  486. package/dist/components/p-Doltf1wO.js.map +0 -1
  487. package/dist/components/p-b0ZzPHz8.js.map +0 -1
  488. package/dist/viewer/p-07b99ac9.entry.js.map +0 -1
  489. package/dist/viewer/p-29d14611.entry.js.map +0 -1
  490. package/dist/viewer/p-302f2078.entry.js.map +0 -1
  491. package/dist/viewer/p-3300d3dc.entry.js.map +0 -1
  492. package/dist/viewer/p-5a85cae5.entry.js.map +0 -1
  493. package/dist/viewer/p-60c915e3.entry.js +0 -5
  494. package/dist/viewer/p-60c915e3.entry.js.map +0 -1
  495. package/dist/viewer/p-63f4f702.entry.js.map +0 -1
  496. package/dist/viewer/p-70f3629d.entry.js.map +0 -1
  497. package/dist/viewer/p-864f40c7.entry.js.map +0 -1
  498. package/dist/viewer/p-aa95e21a.entry.js.map +0 -1
  499. package/dist/viewer/p-e59983dc.entry.js.map +0 -1
  500. package/dist/viewer/p-e993f300.entry.js.map +0 -1
  501. package/dist/viewer/p-eac63070.entry.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"sceneOperationExecuteResult.js","sourceRoot":"","sources":["../../../../../src/lib/scenes/sceneOperationExecuteResult.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAGhE,MAAM,CAAC,MAAM,mCAAmC,GAAG,IAAI,GAAG,EAAE,CAAC;AAE7D,MAAM,OAAO,2BAA2B;IAGtC,YACE,MAAiB,EACjB,WAAyB,EACzB,aAAqB,EACrB,OAAgB;QAEhB,IAAI,CAAC,YAAY,GAAG,IAAI,wBAAwB,CAC9C,MAAM,EACN,CAAC,GAAG,EAAE,EAAE;;YACN,OAAA,CAAC,CAAC,CAAA,MAAA,MAAA,MAAA,GAAG,CAAC,OAAO,0CAAE,SAAS,0CAAE,mBAAmB,0CAAE,IAAI,CACjD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,aAAa,CAC7B,CAAA,CAAA;SAAA,EACH,CAAC,GAAG,EAAE,EAAE;;YACN,OAAA,CAAA,MAAA,GAAG,CAAC,OAAO,0CAAE,SAAS,KAAI,IAAI;gBAC5B,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;gBACpC,CAAC,CAAC,SAAS,CAAA;SAAA,EACf,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,mCAAmC,CAC/C,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { StreamApi } from '@vertexvis/stream-api';\n\nimport type { FrameDecoder } from '../mappers';\nimport { StreamApiEventDispatcher } from '../stream/dispatcher';\nimport { Frame } from '../types';\n\nexport const SCENE_ALTERATION_DEFAULT_TIMEOUT_MS = 1000 * 30;\n\nexport class SceneOperationExecuteResult {\n public onFrameDrawn: StreamApiEventDispatcher<Frame>;\n\n public constructor(\n stream: StreamApi,\n decodeFrame: FrameDecoder,\n correlationId: string,\n timeout?: number\n ) {\n this.onFrameDrawn = new StreamApiEventDispatcher<Frame>(\n stream,\n (msg) =>\n !!msg.request?.drawFrame?.frameCorrelationIds?.some(\n (id) => id === correlationId\n ),\n (msg) =>\n msg.request?.drawFrame != null\n ? decodeFrame(msg.request.drawFrame)\n : undefined,\n timeout ?? SCENE_ALTERATION_DEFAULT_TIMEOUT_MS\n );\n }\n}\n"]}
1
+ {"version":3,"file":"sceneOperationExecuteResult.js","sourceRoot":"","sources":["../../../../../src/lib/scenes/sceneOperationExecuteResult.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAGhE,MAAM,CAAC,MAAM,mCAAmC,GAAG,IAAI,GAAG,EAAE,CAAC;AAE7D,MAAM,OAAO,2BAA2B;IAGtC,YACE,MAAiB,EACjB,WAAyB,EACzB,aAAqB,EACrB,OAAgB;QAEhB,IAAI,CAAC,YAAY,GAAG,IAAI,wBAAwB,CAC9C,MAAM,EACN,CAAC,GAAG,EAAE,EAAE;;YACN,OAAA,CAAC,CAAC,CAAA,MAAA,MAAA,MAAA,GAAG,CAAC,OAAO,0CAAE,SAAS,0CAAE,mBAAmB,0CAAE,IAAI,CACjD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,aAAa,CAC7B,CAAA,CAAA;SAAA,EACH,CAAC,GAAG,EAAE,EAAE;;YACN,OAAA,CAAA,MAAA,GAAG,CAAC,OAAO,0CAAE,SAAS,KAAI,IAAI;gBAC5B,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;gBACpC,CAAC,CAAC,SAAS,CAAA;SAAA,EACf,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,mCAAmC,CAC/C,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { StreamApi } from '@vertexvis/stream-api';\n\nimport type { FrameDecoder } from '../mappers';\nimport { StreamApiEventDispatcher } from '../stream/dispatcher';\nimport { Frame } from '../types';\n\nexport const SCENE_ALTERATION_DEFAULT_TIMEOUT_MS = 1000 * 30;\n\nexport class SceneOperationExecuteResult {\n public onFrameDrawn: StreamApiEventDispatcher<Frame>;\n\n public constructor(\n stream: StreamApi,\n decodeFrame: FrameDecoder,\n correlationId: string,\n timeout?: number,\n ) {\n this.onFrameDrawn = new StreamApiEventDispatcher<Frame>(\n stream,\n (msg) =>\n !!msg.request?.drawFrame?.frameCorrelationIds?.some(\n (id) => id === correlationId,\n ),\n (msg) =>\n msg.request?.drawFrame != null\n ? decodeFrame(msg.request.drawFrame)\n : undefined,\n timeout ?? SCENE_ALTERATION_DEFAULT_TIMEOUT_MS,\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sceneViewStateLoader.js","sourceRoot":"","sources":["../../../../../src/lib/scenes/sceneViewStateLoader.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,GAC3B,MAAM,UAAU,CAAC;AAElB,MAAM,OAAO,oBAAoB;IAC/B,YACU,MAAiB,EACjB,WAAyB,EACzB,gBAAmC,EAC3B,OAAkB,EAClB,WAAsB;QAJ9B,WAAM,GAAN,MAAM,CAAW;QACjB,gBAAW,GAAX,WAAW,CAAc;QACzB,qBAAgB,GAAhB,gBAAgB,CAAmB;QAC3B,YAAO,GAAP,OAAO,CAAW;QAClB,gBAAW,GAAX,WAAW,CAAW;IACrC,CAAC;IAEG,KAAK,CAAC,mBAAmB,CAC9B,gBAEqD,EACrD,OAAmC,EAAE;QAErC,MAAM,SAAS,GAAG,6BAA6B,CAAC,gBAAgB,CAAC,CAAC;QAElE,MAAM,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAEpD,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CACzC;YACE,GAAG,SAAS;YACZ,kBAAkB,EAAE,IAAI,CAAC,qBAAqB;gBAC5C,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE;gBACvC,CAAC,CAAC,SAAS;YACb,UAAU,EAAE,IAAI,CAAC,kBAAkB;gBACjC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC;gBAChD,CAAC,CAAC,SAAS;SACd,EACD,IAAI,CACL,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,0BAA0B,CACrC,gBAEqD,EACrD,eAAwC,EACxC,OAAmC,EAAE;QAErC,MAAM,SAAS,GAAG,6BAA6B,CAAC,gBAAgB,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,0BAA0B,CAAC,eAAe,CAAC,CAAC;QAE/D,IAAI,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CACzC;YACE,GAAG,SAAS;YACZ,kBAAkB,EAAE,IAAI,CAAC,qBAAqB;gBAC5C,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE;gBACvC,CAAC,CAAC,SAAS;YACb,2BAA2B,EAAE,UAAU;YACvC,UAAU,EAAE,IAAI,CAAC,kBAAkB;gBACjC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC;gBAChD,CAAC,CAAC,SAAS;SACd,EACD,IAAI,CACL,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,uBAAuB,CACnC,UAQK,EACL,IAAgC;;QAEhC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAE7B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CACzC;gBACE,wBAAwB,EAAE,UAAU;gBACpC,SAAS,EAAE;oBACT,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;iBACvD;gBACD,kBAAkB,EAAE;oBAClB,KAAK,EAAE,MAAM;iBACd;aACF,EACD,IAAI,CACL,CAAC;YAEF,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC3D,MAAM,YAAY,GAAG,IAAI,kBAAkB,CACzC,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,EAChB;oBACE,WAAW,EAAE,MAAA,MAAA,MAAA,WAAW,CAAC,KAAK,0CAAE,WAAW,0CAAE,GAAG,mCAAI,SAAS;oBAC7D,aAAa,EAAE,MAAM;iBACtB,EACD,IAAI,CAAC,SAAS,CAAC,YAAY,GAAG,qBAAqB,CACpD,CAAC;gBAEF,MAAM,YAAY,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;CACF","sourcesContent":["import { vertexvis } from '@vertexvis/frame-streaming-protos';\nimport { StreamApi, toProtoDuration } from '@vertexvis/stream-api';\nimport { UUID } from '@vertexvis/utils';\n\nimport { CameraTypeEncoder, FrameDecoder } from '../mappers';\nimport { DEFAULT_TIMEOUT_IN_MS } from '../stream/dispatcher';\nimport { SceneViewStateIdentifier } from '../types';\nimport { ApplySceneViewStateOptions, SceneViewStateFeature } from '.';\nimport { CameraRenderResult } from './cameraRenderResult';\nimport {\n buildSceneViewStateIdentifier,\n toPbSceneViewStateFeatures,\n} from './mapper';\n\nexport class SceneViewStateLoader {\n public constructor(\n private stream: StreamApi,\n private decodeFrame: FrameDecoder,\n private encodeCameraType: CameraTypeEncoder,\n public readonly sceneId: UUID.UUID,\n public readonly sceneViewId: UUID.UUID\n ) {}\n\n public async applySceneViewState(\n sceneViewStateId:\n | UUID.UUID\n | SceneViewStateIdentifier.SceneViewStateIdentifier,\n opts: ApplySceneViewStateOptions = {}\n ): Promise<vertexvis.protobuf.stream.ILoadSceneViewStateResult | undefined> {\n const pbIdField = buildSceneViewStateIdentifier(sceneViewStateId);\n\n await this.animateToSceneViewState(pbIdField, opts);\n\n return await this.stream.loadSceneViewState(\n {\n ...pbIdField,\n frameCorrelationId: opts.suppliedCorrelationId\n ? { value: opts.suppliedCorrelationId }\n : undefined,\n cameraType: opts.cameraTypeOverride\n ? this.encodeCameraType(opts.cameraTypeOverride)\n : undefined,\n },\n true\n );\n }\n\n public async applyPartialSceneViewState(\n sceneViewStateId:\n | UUID.UUID\n | SceneViewStateIdentifier.SceneViewStateIdentifier,\n featuresToApply: SceneViewStateFeature[],\n opts: ApplySceneViewStateOptions = {}\n ): Promise<vertexvis.protobuf.stream.ILoadSceneViewStateResult | undefined> {\n const pbIdField = buildSceneViewStateIdentifier(sceneViewStateId);\n const pbFeatures = toPbSceneViewStateFeatures(featuresToApply);\n\n if (featuresToApply.includes('camera')) {\n await this.animateToSceneViewState(pbIdField, opts);\n }\n\n return await this.stream.loadSceneViewState(\n {\n ...pbIdField,\n frameCorrelationId: opts.suppliedCorrelationId\n ? { value: opts.suppliedCorrelationId }\n : undefined,\n sceneViewStateFeatureSubset: pbFeatures,\n cameraType: opts.cameraTypeOverride\n ? this.encodeCameraType(opts.cameraTypeOverride)\n : undefined,\n },\n true\n );\n }\n\n private async animateToSceneViewState(\n identifier:\n | Pick<\n vertexvis.protobuf.stream.ILoadSceneViewStatePayload,\n 'sceneViewStateId'\n >\n | Pick<\n vertexvis.protobuf.stream.ILoadSceneViewStatePayload,\n 'sceneViewStateSuppliedId'\n >,\n opts: ApplySceneViewStateOptions\n ): Promise<void> {\n if (opts.animation != null) {\n const corrId = UUID.create();\n\n const flyToResult = await this.stream.flyTo(\n {\n sceneViewStateIdentifier: identifier,\n animation: {\n duration: toProtoDuration(opts.animation.milliseconds),\n },\n frameCorrelationId: {\n value: corrId,\n },\n },\n true\n );\n\n if (opts.waitForAnimation == null || opts.waitForAnimation) {\n const renderResult = new CameraRenderResult(\n this.stream,\n this.decodeFrame,\n {\n animationId: flyToResult.flyTo?.animationId?.hex ?? undefined,\n correlationId: corrId,\n },\n opts.animation.milliseconds + DEFAULT_TIMEOUT_IN_MS\n );\n\n await renderResult.onAnimationCompleted.once();\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"sceneViewStateLoader.js","sourceRoot":"","sources":["../../../../../src/lib/scenes/sceneViewStateLoader.ts"],"names":[],"mappings":"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","sourcesContent":["import { vertexvis } from '@vertexvis/frame-streaming-protos';\nimport { StreamApi, toProtoDuration } from '@vertexvis/stream-api';\nimport { UUID } from '@vertexvis/utils';\n\nimport { CameraTypeEncoder, FrameDecoder } from '../mappers';\nimport { DEFAULT_TIMEOUT_IN_MS } from '../stream/dispatcher';\nimport { SceneViewStateIdentifier } from '../types';\nimport { ApplySceneViewStateOptions, SceneViewStateFeature } from '.';\nimport { CameraRenderResult } from './cameraRenderResult';\nimport {\n buildSceneViewStateIdentifier,\n toPbSceneViewStateFeatures,\n} from './mapper';\n\nexport class SceneViewStateLoader {\n public constructor(\n private stream: StreamApi,\n private decodeFrame: FrameDecoder,\n private encodeCameraType: CameraTypeEncoder,\n public readonly sceneId: UUID.UUID,\n public readonly sceneViewId: UUID.UUID,\n ) {}\n\n public async applySceneViewState(\n sceneViewStateId:\n | UUID.UUID\n | SceneViewStateIdentifier.SceneViewStateIdentifier,\n opts: ApplySceneViewStateOptions = {},\n ): Promise<vertexvis.protobuf.stream.ILoadSceneViewStateResult | undefined> {\n const pbIdField = buildSceneViewStateIdentifier(sceneViewStateId);\n\n await this.animateToSceneViewState(pbIdField, opts);\n\n return await this.stream.loadSceneViewState(\n {\n ...pbIdField,\n frameCorrelationId: opts.suppliedCorrelationId\n ? { value: opts.suppliedCorrelationId }\n : undefined,\n cameraType: opts.cameraTypeOverride\n ? this.encodeCameraType(opts.cameraTypeOverride)\n : undefined,\n },\n true,\n );\n }\n\n public async applyPartialSceneViewState(\n sceneViewStateId:\n | UUID.UUID\n | SceneViewStateIdentifier.SceneViewStateIdentifier,\n featuresToApply: SceneViewStateFeature[],\n opts: ApplySceneViewStateOptions = {},\n ): Promise<vertexvis.protobuf.stream.ILoadSceneViewStateResult | undefined> {\n const pbIdField = buildSceneViewStateIdentifier(sceneViewStateId);\n const pbFeatures = toPbSceneViewStateFeatures(featuresToApply);\n\n if (featuresToApply.includes('camera')) {\n await this.animateToSceneViewState(pbIdField, opts);\n }\n\n return await this.stream.loadSceneViewState(\n {\n ...pbIdField,\n frameCorrelationId: opts.suppliedCorrelationId\n ? { value: opts.suppliedCorrelationId }\n : undefined,\n sceneViewStateFeatureSubset: pbFeatures,\n cameraType: opts.cameraTypeOverride\n ? this.encodeCameraType(opts.cameraTypeOverride)\n : undefined,\n },\n true,\n );\n }\n\n private async animateToSceneViewState(\n identifier:\n | Pick<\n vertexvis.protobuf.stream.ILoadSceneViewStatePayload,\n 'sceneViewStateId'\n >\n | Pick<\n vertexvis.protobuf.stream.ILoadSceneViewStatePayload,\n 'sceneViewStateSuppliedId'\n >,\n opts: ApplySceneViewStateOptions,\n ): Promise<void> {\n if (opts.animation != null) {\n const corrId = UUID.create();\n\n const flyToResult = await this.stream.flyTo(\n {\n sceneViewStateIdentifier: identifier,\n animation: {\n duration: toProtoDuration(opts.animation.milliseconds),\n },\n frameCorrelationId: {\n value: corrId,\n },\n },\n true,\n );\n\n if (opts.waitForAnimation == null || opts.waitForAnimation) {\n const renderResult = new CameraRenderResult(\n this.stream,\n this.decodeFrame,\n {\n animationId: flyToResult.flyTo?.animationId?.hex ?? undefined,\n correlationId: corrId,\n },\n opts.animation.milliseconds + DEFAULT_TIMEOUT_IN_MS,\n );\n\n await renderResult.onAnimationCompleted.once();\n }\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"stencil.js","sourceRoot":"","sources":["../../../../src/lib/stencil.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO,EAAgB,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAMlE,MAAM,UAAU,OAAO,CAAC,IAAgB;IACtC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAgB;IACvC,SAAS,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,KAAsB,EACtB,IAAY;IAEZ,IAAI,KAAK,GAAuB,SAAS,CAAC;IAC1C,SAAS,QAAQ,CAAC,KAAQ;QACxB,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC3B,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO;QACL,8DAA8D;QAC9D,IAAI,EAAE,QAAe;QACrB,OAAO;YACL,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["// eslint-disable-next-line no-restricted-imports\nimport { EventEmitter, readTask, writeTask } from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\n\nexport interface EventEmitterDisposable<E>\n extends EventEmitter<E>, Disposable {}\n\nexport function readDOM(task: () => void): void {\n readTask(task);\n}\n\nexport function writeDOM(task: () => void): void {\n writeTask(task);\n}\n\nexport function debounceEvent<E>(\n event: EventEmitter<E>,\n wait: number\n): EventEmitterDisposable<E> {\n let timer: number | undefined = undefined;\n function debounce(value: E): void {\n window.clearTimeout(timer);\n timer = window.setTimeout(() => event.emit(value), wait);\n }\n return {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n emit: debounce as any,\n dispose() {\n window.clearTimeout(timer);\n },\n };\n}\n"]}
1
+ {"version":3,"file":"stencil.js","sourceRoot":"","sources":["../../../../src/lib/stencil.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO,EAAgB,QAAQ,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAMlE,MAAM,UAAU,OAAO,CAAC,IAAgB;IACtC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAgB;IACvC,SAAS,CAAC,IAAI,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,KAAsB,EACtB,IAAY;IAEZ,IAAI,KAAK,GAAuB,SAAS,CAAC;IAC1C,SAAS,QAAQ,CAAC,KAAQ;QACxB,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC3B,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO;QACL,8DAA8D;QAC9D,IAAI,EAAE,QAAe;QACrB,OAAO;YACL,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["// eslint-disable-next-line no-restricted-imports\nimport { EventEmitter, readTask, writeTask } from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\n\nexport interface EventEmitterDisposable<E>\n extends EventEmitter<E>, Disposable {}\n\nexport function readDOM(task: () => void): void {\n readTask(task);\n}\n\nexport function writeDOM(task: () => void): void {\n writeTask(task);\n}\n\nexport function debounceEvent<E>(\n event: EventEmitter<E>,\n wait: number,\n): EventEmitterDisposable<E> {\n let timer: number | undefined = undefined;\n function debounce(value: E): void {\n window.clearTimeout(timer);\n timer = window.setTimeout(() => event.emit(value), wait);\n }\n return {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n emit: debounce as any,\n dispose() {\n window.clearTimeout(timer);\n },\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../../src/lib/storage.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,WAEX;AAFD,WAAY,WAAW;IACrB,gDAAiC,CAAA;AACnC,CAAC,EAFW,WAAW,KAAX,WAAW,QAEtB;AAED,SAAS,eAAe;IACtB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,MAAM,CAAC,YAAY,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,GAAW,EACX,MAAyB,EACzB,UAAmB,eAAe,EAAE;IAEpC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;QACvD,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,GAAW,EACX,CAA8C,EAC9C,UAAmB,eAAe,EAAE;IAEpC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAElC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC","sourcesContent":["export enum StorageKeys {\n DEVICE_ID = 'vertexvis:device-id',\n}\n\nfunction getLocalStorage(): Storage {\n if (typeof window === 'undefined') {\n throw new Error('Local storage is not available.');\n }\n\n return window.localStorage;\n}\n\nexport function upsertStorageEntry<T>(\n key: string,\n values: Record<string, T>,\n storage: Storage = getLocalStorage()\n): void {\n const existing = storage.getItem(key);\n\n if (existing != null) {\n const updated = { ...JSON.parse(existing), ...values };\n storage.setItem(key, JSON.stringify(updated));\n } else {\n storage.setItem(key, JSON.stringify(values));\n }\n}\n\nexport function getStorageEntry<T>(\n key: string,\n f: (value: Record<string, T>) => T | undefined,\n storage: Storage = getLocalStorage()\n): T | undefined {\n const item = storage.getItem(key);\n\n if (item != null) {\n return f(JSON.parse(item));\n }\n}\n"]}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../../src/lib/storage.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,WAEX;AAFD,WAAY,WAAW;IACrB,gDAAiC,CAAA;AACnC,CAAC,EAFW,WAAW,KAAX,WAAW,QAEtB;AAED,SAAS,eAAe;IACtB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,MAAM,CAAC,YAAY,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,GAAW,EACX,MAAyB,EACzB,UAAmB,eAAe,EAAE;IAEpC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;QACvD,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,GAAW,EACX,CAA8C,EAC9C,UAAmB,eAAe,EAAE;IAEpC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAElC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC","sourcesContent":["export enum StorageKeys {\n DEVICE_ID = 'vertexvis:device-id',\n}\n\nfunction getLocalStorage(): Storage {\n if (typeof window === 'undefined') {\n throw new Error('Local storage is not available.');\n }\n\n return window.localStorage;\n}\n\nexport function upsertStorageEntry<T>(\n key: string,\n values: Record<string, T>,\n storage: Storage = getLocalStorage(),\n): void {\n const existing = storage.getItem(key);\n\n if (existing != null) {\n const updated = { ...JSON.parse(existing), ...values };\n storage.setItem(key, JSON.stringify(updated));\n } else {\n storage.setItem(key, JSON.stringify(values));\n }\n}\n\nexport function getStorageEntry<T>(\n key: string,\n f: (value: Record<string, T>) => T | undefined,\n storage: Storage = getLocalStorage(),\n): T | undefined {\n const item = storage.getItem(key);\n\n if (item != null) {\n return f(JSON.parse(item));\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../../../../src/lib/stream/dispatcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAwB,MAAM,kBAAkB,CAAC;AAE/D,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAE,CAAC;AAE/C,MAAM,OAAO,wBAAwB;IAKnC,YACU,MAAiB,EACjB,SAEI,EACJ,SAEU,EACV,UAAkB,qBAAqB;QAPvC,WAAM,GAAN,MAAM,CAAW;QACjB,cAAS,GAAT,SAAS,CAEL;QACJ,cAAS,GAAT,SAAS,CAEC;QACV,YAAO,GAAP,OAAO,CAAgC;QAZzC,cAAS,GAAuB,EAAE,CAAC;QAczC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAEM,EAAE,CAAC,QAAqB;QAC7B,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,EAAE,CAAC;YACnE,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAEM,GAAG,CAAC,QAAqB;QAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAEM,IAAI;QACT,IAAI,OAA0B,CAAC;QAC/B,OAAO,KAAK,CAAC,OAAO,CAClB,IAAI,CAAC,OAAO,EACZ,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,EAAE;YACzB,OAAO,GAAG,CAAC,IAAO,EAAE,EAAE;gBACpB,OAAO,CAAC,IAAI,CAAC,CAAC;gBACd,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACpB,CAAC,CAAC;YAEF,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC,CAAC,CACH,CAAC,OAAO,CAAC,GAAG,EAAE;YACb,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,GAA6C;QACjE,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAExC,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;gBACxB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACrE,CAAC;IAEO,eAAe;;QACrB,MAAA,IAAI,CAAC,eAAe,0CAAE,OAAO,EAAE,CAAC;QAChC,MAAA,IAAI,CAAC,iBAAiB,0CAAE,OAAO,EAAE,CAAC;IACpC,CAAC;CACF","sourcesContent":["import { vertexvis } from '@vertexvis/frame-streaming-protos';\nimport { StreamApi } from '@vertexvis/stream-api';\nimport { Async, Disposable, Listener } from '@vertexvis/utils';\n\nexport const DEFAULT_TIMEOUT_IN_MS = 1000 * 10;\n\nexport class StreamApiEventDispatcher<T> {\n private listeners: Array<Listener<T>> = [];\n private eventDisposable?: Disposable;\n private requestDisposable?: Disposable;\n\n public constructor(\n private stream: StreamApi,\n private predicate: (\n msg: vertexvis.protobuf.stream.IStreamMessage\n ) => boolean,\n private transform: (\n msg: vertexvis.protobuf.stream.IStreamMessage\n ) => T | undefined,\n private timeout: number = DEFAULT_TIMEOUT_IN_MS\n ) {\n this.handleMessage = this.handleMessage.bind(this);\n }\n\n public on(listener: Listener<T>): void {\n this.listeners = [...this.listeners, listener];\n if (this.eventDisposable == null || this.requestDisposable == null) {\n this.addListeners();\n }\n }\n\n public off(listener: Listener<T>): void {\n this.listeners = this.listeners.filter((l) => l !== listener);\n if (this.listeners.length === 0) {\n this.removeListeners();\n }\n }\n\n public once(): Promise<T> {\n let handler: (data: T) => void;\n return Async.timeout(\n this.timeout,\n new Promise<T>((resolve) => {\n handler = (data: T) => {\n resolve(data);\n this.off(handler);\n };\n\n this.on(handler);\n })\n ).finally(() => {\n this.off(handler);\n });\n }\n\n private handleMessage(msg: vertexvis.protobuf.stream.IStreamMessage): void {\n if (this.predicate(msg)) {\n const transformed = this.transform(msg);\n\n if (transformed != null) {\n this.listeners.forEach((l) => l(transformed));\n }\n }\n }\n\n private addListeners(): void {\n this.eventDisposable = this.stream.onEvent(this.handleMessage);\n this.requestDisposable = this.stream.onRequest(this.handleMessage);\n }\n\n private removeListeners(): void {\n this.eventDisposable?.dispose();\n this.requestDisposable?.dispose();\n }\n}\n"]}
1
+ {"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../../../../src/lib/stream/dispatcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAwB,MAAM,kBAAkB,CAAC;AAE/D,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAE,CAAC;AAE/C,MAAM,OAAO,wBAAwB;IAKnC,YACU,MAAiB,EACjB,SAEI,EACJ,SAEU,EACV,UAAkB,qBAAqB;QAPvC,WAAM,GAAN,MAAM,CAAW;QACjB,cAAS,GAAT,SAAS,CAEL;QACJ,cAAS,GAAT,SAAS,CAEC;QACV,YAAO,GAAP,OAAO,CAAgC;QAZzC,cAAS,GAAuB,EAAE,CAAC;QAczC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAEM,EAAE,CAAC,QAAqB;QAC7B,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,EAAE,CAAC;YACnE,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAEM,GAAG,CAAC,QAAqB;QAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAEM,IAAI;QACT,IAAI,OAA0B,CAAC;QAC/B,OAAO,KAAK,CAAC,OAAO,CAClB,IAAI,CAAC,OAAO,EACZ,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,EAAE;YACzB,OAAO,GAAG,CAAC,IAAO,EAAE,EAAE;gBACpB,OAAO,CAAC,IAAI,CAAC,CAAC;gBACd,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACpB,CAAC,CAAC;YAEF,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC,CAAC,CACH,CAAC,OAAO,CAAC,GAAG,EAAE;YACb,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,GAA6C;QACjE,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAExC,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;gBACxB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;IACH,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACrE,CAAC;IAEO,eAAe;;QACrB,MAAA,IAAI,CAAC,eAAe,0CAAE,OAAO,EAAE,CAAC;QAChC,MAAA,IAAI,CAAC,iBAAiB,0CAAE,OAAO,EAAE,CAAC;IACpC,CAAC;CACF","sourcesContent":["import { vertexvis } from '@vertexvis/frame-streaming-protos';\nimport { StreamApi } from '@vertexvis/stream-api';\nimport { Async, Disposable, Listener } from '@vertexvis/utils';\n\nexport const DEFAULT_TIMEOUT_IN_MS = 1000 * 10;\n\nexport class StreamApiEventDispatcher<T> {\n private listeners: Array<Listener<T>> = [];\n private eventDisposable?: Disposable;\n private requestDisposable?: Disposable;\n\n public constructor(\n private stream: StreamApi,\n private predicate: (\n msg: vertexvis.protobuf.stream.IStreamMessage,\n ) => boolean,\n private transform: (\n msg: vertexvis.protobuf.stream.IStreamMessage,\n ) => T | undefined,\n private timeout: number = DEFAULT_TIMEOUT_IN_MS,\n ) {\n this.handleMessage = this.handleMessage.bind(this);\n }\n\n public on(listener: Listener<T>): void {\n this.listeners = [...this.listeners, listener];\n if (this.eventDisposable == null || this.requestDisposable == null) {\n this.addListeners();\n }\n }\n\n public off(listener: Listener<T>): void {\n this.listeners = this.listeners.filter((l) => l !== listener);\n if (this.listeners.length === 0) {\n this.removeListeners();\n }\n }\n\n public once(): Promise<T> {\n let handler: (data: T) => void;\n return Async.timeout(\n this.timeout,\n new Promise<T>((resolve) => {\n handler = (data: T) => {\n resolve(data);\n this.off(handler);\n };\n\n this.on(handler);\n }),\n ).finally(() => {\n this.off(handler);\n });\n }\n\n private handleMessage(msg: vertexvis.protobuf.stream.IStreamMessage): void {\n if (this.predicate(msg)) {\n const transformed = this.transform(msg);\n\n if (transformed != null) {\n this.listeners.forEach((l) => l(transformed));\n }\n }\n }\n\n private addListeners(): void {\n this.eventDisposable = this.stream.onEvent(this.handleMessage);\n this.requestDisposable = this.stream.onRequest(this.handleMessage);\n }\n\n private removeListeners(): void {\n this.eventDisposable?.dispose();\n this.requestDisposable?.dispose();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../../../src/lib/stream/stream.ts"],"names":[],"mappings":"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","sourcesContent":["import { Dimensions } from '@vertexvis/geometry';\nimport {\n ConnectionDescriptor,\n currentDateAsProtoTimestamp,\n Settings,\n StreamApi,\n StreamRequestError,\n WebSocketClient,\n} from '@vertexvis/stream-api';\nimport {\n Async,\n Color,\n Disposable,\n EventDispatcher,\n Listener,\n Mapper,\n Objects,\n Uri,\n} from '@vertexvis/utils';\nimport deepEqual from 'fast-deep-equal';\n\nimport { Color3, StreamAttributes } from '../../interfaces';\nimport { Config, parseAndValidateConfig } from '../config';\nimport {\n CustomError,\n SceneRenderError,\n WebsocketConnectionError,\n} from '../errors';\nimport {\n fromPbFrameOrThrow,\n fromPbReconnectResponseOrThrow,\n fromPbRefreshTokenResponseOrThrow,\n fromPbStartStreamResponseOrThrow,\n fromPbSyncTimeResponseOrThrow,\n toPbCameraType,\n toPbRGBi,\n toPbStreamAttributes,\n} from '../mappers';\nimport { acknowledgeFrameRequests } from '../rendering';\nimport { Token } from '../token';\nimport {\n Frame,\n LoadableResource,\n Orientation,\n SynchronizedClock,\n} from '../types';\nimport { FrameCameraType } from '../types/frameCamera';\nimport { Resource, SuppliedIdQueryValue } from '../types/loadableResource';\nimport {\n Connected,\n Connecting,\n Reconnecting,\n ViewerStreamState,\n} from './state';\nimport { retryIfNotAborted } from './utils';\n\ntype StreamResult = Omit<\n Connected,\n 'type' | 'frame' | 'connection' | 'clock'\n> & { frame: Frame | undefined };\n\ninterface FrameStreamOptions {\n /**\n * The number of seconds before the token expires, when the token will be\n * refreshed. Defaults to 30 seconds.\n */\n tokenRefreshOffsetInSeconds?: number;\n\n /**\n * Indicates if debug logs will be emitted for websocket messages.\n */\n loggingEnabled?: boolean;\n\n /**\n * The number of seconds after the host goes offline before a reconnect is\n * attempted.\n */\n offlineThresholdInSeconds?: number;\n\n /**\n * The number of seconds before we consider loading a scene failed.\n */\n loadTimeoutInSeconds?: number;\n\n /**\n * Enable temporal refinement of still images.\n */\n enableTemporalRefinement?: boolean;\n}\n\ninterface UpdateFields {\n dimensions?: ViewerStream['dimensions'];\n streamAttributes?: ViewerStream['streamAttributes'];\n enableTemporalRefinement?: ViewerStream['enableTemporalRefinement'];\n frameBgColor?: ViewerStream['frameBgColor'];\n config?: ViewerStream['config'];\n clientId?: ViewerStream['clientId'];\n deviceId?: ViewerStream['deviceId'];\n}\n\nexport class ViewerStream extends StreamApi {\n private static WS_RECONNECT_DELAYS = [0, 1000, 1000, 5000];\n\n private dimensions: Dimensions.Dimensions;\n private streamAttributes: StreamAttributes;\n private enableTemporalRefinement: boolean;\n private frameBgColor: Color3;\n private config: Config;\n private clientId: string | undefined;\n private deviceId: string | undefined;\n private abortController?: AbortController;\n\n private state: ViewerStreamState = { type: 'disconnected' };\n private pausedState?: Connected;\n public readonly stateChanged = new EventDispatcher<ViewerStreamState>();\n\n private options: Required<Omit<FrameStreamOptions, 'loggingEnabled'>>;\n\n public constructor(ws: WebSocketClient, opts: FrameStreamOptions = {}) {\n super(ws, { loggingEnabled: opts.loggingEnabled });\n\n this.dimensions = Dimensions.create(0, 0);\n this.streamAttributes = {};\n this.enableTemporalRefinement = opts.enableTemporalRefinement ?? true;\n this.frameBgColor = Color.create(255, 255, 255);\n this.config = parseAndValidateConfig('platprod');\n\n this.options = {\n tokenRefreshOffsetInSeconds: opts.tokenRefreshOffsetInSeconds ?? 30,\n offlineThresholdInSeconds: opts.offlineThresholdInSeconds ?? 30,\n loadTimeoutInSeconds: opts.loadTimeoutInSeconds ?? 15,\n enableTemporalRefinement: opts.enableTemporalRefinement ?? true,\n };\n }\n\n public isPaused(): boolean {\n return this.pausedState != null;\n }\n\n public getState(): ViewerStreamState {\n return this.state;\n }\n\n public disconnect(): void {\n if (\n this.state.type !== 'disconnected' &&\n this.state.type !== 'connection-failed'\n ) {\n console.debug('Disconnecting websocket');\n this.state.connection.dispose();\n this.updateState({ type: 'disconnected' });\n }\n }\n\n public async load(\n urn: string,\n clientId: string | undefined,\n deviceId: string | undefined,\n config: Config = parseAndValidateConfig('platprod'),\n cameraType?: FrameCameraType\n ): Promise<ViewerStreamState> {\n this.clientId = clientId;\n this.deviceId = deviceId;\n this.config = config;\n\n if (this.state.type === 'disconnected') {\n await this.loadIfDisconnected(urn, cameraType);\n } else if (this.state.type === 'connection-failed') {\n await this.loadIfDisconnected(urn, cameraType);\n } else {\n await this.loadIfConnectingOrConnected(urn, this.state, cameraType);\n }\n return this.state;\n }\n\n public update(fields: UpdateFields): void {\n this.frameBgColor = fields.frameBgColor\n ? fields.frameBgColor\n : this.frameBgColor;\n\n if (\n fields.dimensions != null &&\n !deepEqual(fields.dimensions, this.dimensions)\n ) {\n this.dimensions = fields.dimensions;\n this.ifState('connected', () =>\n this.updateDimensions({ dimensions: this.getDimensions() })\n );\n }\n\n const streamAttributesAreDifferent = !deepEqual(\n this.streamAttributes,\n fields.streamAttributes\n );\n if (fields.streamAttributes != null && streamAttributesAreDifferent) {\n this.streamAttributes = fields.streamAttributes;\n this.ifState('connected', () =>\n this.updateStream({\n streamAttributes: toPbStreamAttributesOrThrow(this.streamAttributes),\n })\n );\n }\n\n if (\n fields.enableTemporalRefinement != null &&\n fields.enableTemporalRefinement !== this.enableTemporalRefinement\n ) {\n this.enableTemporalRefinement = fields.enableTemporalRefinement;\n\n if (this.state.type === 'connected') {\n this.closeAndReconnect(this.state);\n }\n }\n }\n\n public pause(): void {\n if (this.state.type === 'connected') {\n this.pausedState = this.state;\n\n console.debug(\n `Stream paused [stream-id=${this.pausedState.streamId}, scene-id=${this.pausedState.sceneId}, scene-view-id=${this.pausedState.sceneViewId}]`\n );\n\n this.disconnect();\n }\n }\n\n public async resume(): Promise<void> {\n if (this.pausedState != null) {\n console.debug(\n `Stream resumed [stream-id=${this.pausedState.streamId}, scene-id=${this.pausedState.sceneId}, scene-view-id=${this.pausedState.sceneViewId}]`\n );\n\n await this.connectToExistingStream(this.pausedState);\n\n this.pausedState = undefined;\n }\n }\n\n private async loadIfConnectingOrConnected(\n urn: string,\n state: Connected | Connecting | Reconnecting,\n cameraType?: FrameCameraType\n ): Promise<void> {\n const { resource: pResource, subResource: pSubResource } = state.resource;\n const resource = LoadableResource.fromUrn(urn);\n\n const hasResourceChanged = !Objects.isEqual(pResource, resource.resource);\n const hasSubResourceChanged = !Objects.isEqual(\n pSubResource,\n resource.subResource\n );\n const isConnecting =\n state.type === 'connecting' || state.type === 'reconnecting';\n const isConnected = state.type === 'connected';\n\n if (hasResourceChanged || (isConnecting && hasSubResourceChanged)) {\n this.disconnect();\n return this.loadIfDisconnected(urn);\n } else if (\n isConnected &&\n hasSubResourceChanged &&\n resource.subResource?.type === 'scene-view-state'\n ) {\n const suppliedIdQuery = resource.queries.find(\n (q) => q.type === 'supplied-id'\n ) as SuppliedIdQueryValue | undefined;\n\n const payload = {\n ...(resource.subResource.id != null\n ? { sceneViewStateId: { hex: resource.subResource.id } }\n : {}),\n ...(suppliedIdQuery != null\n ? { sceneViewStateSuppliedId: { value: suppliedIdQuery.id } }\n : {}),\n ...(cameraType != null\n ? { cameraType: toPbCameraTypeOrThrow(cameraType) }\n : {}),\n };\n\n await this.loadSceneViewState(payload);\n this.updateState({ ...state, resource });\n }\n }\n\n private async loadIfDisconnected(\n urn: string,\n cameraType?: FrameCameraType\n ): Promise<void> {\n try {\n await this.connectWithNewStream(\n LoadableResource.fromUrn(urn),\n cameraType\n );\n } catch (e) {\n if (e instanceof CustomError) {\n this.updateState({\n type: 'connection-failed',\n message: `Cannot load scene. ${e.message}`,\n error: e,\n });\n } else if (e instanceof StreamRequestError) {\n this.updateState({\n type: 'connection-failed',\n message: `Cannot load scene. Stream request failed to start stream.`,\n error: e,\n });\n } else {\n this.updateState({\n type: 'connection-failed',\n message: `Cannot load scene for unknown reason. See console logs.`,\n error: e,\n });\n }\n\n throw e;\n }\n }\n\n private connectWithNewStream(\n resource: Resource,\n cameraType?: FrameCameraType\n ): Promise<void> {\n return this.openWebsocketStream(resource, 'connecting', () =>\n this.requestNewStream(resource, cameraType)\n );\n }\n\n private connectToExistingStream(state: Connected): Promise<void> {\n return this.openWebsocketStream(\n state.resource,\n 'reconnecting',\n () => this.requestReconnectStream(state),\n { maxRetries: Number.POSITIVE_INFINITY }\n );\n }\n\n private async openWebsocketStream(\n resource: Resource,\n type: Connecting['type'] | Reconnecting['type'],\n requestStream: () => Promise<StreamResult>,\n { maxRetries = 3 }: { maxRetries?: number } = {}\n ): Promise<void> {\n const descriptor = getWebsocketDescriptor(\n getWebsocketUri(\n this.config,\n resource.resource,\n this.clientId,\n this.deviceId\n )\n );\n console.debug(`Initiating WS connection [uri=${descriptor.url}]`);\n\n // Ensure that any previous attempt to initiate a WebSocket connection has been\n // aborted prior to attempting to create a new connection. This prevents scenarios\n // where a previously initiated connection attempt is still in the `connecting`\n // state and gets closed, and the `Async.retry` utility attempts to connect again.\n this.abortController?.abort();\n const newAbortController = new AbortController();\n this.abortController = newAbortController;\n\n const settings = getStreamSettings(this.config);\n this.updateState({\n type,\n resource,\n connection: {\n dispose: () => {\n this.dispose();\n newAbortController.abort();\n },\n },\n });\n\n const connection = await Async.abort(\n newAbortController.signal,\n retryIfNotAborted(\n newAbortController.signal,\n () => this.connect(descriptor, settings),\n {\n dispose: () => {\n // Intentional empty dispose to prevent typing mismatches.\n },\n },\n {\n maxRetries,\n delaysInMs: ViewerStream.WS_RECONNECT_DELAYS,\n }\n )\n ).catch((e) => {\n throw new WebsocketConnectionError(\n 'Websocket connection failed.',\n e instanceof Error ? e : undefined\n );\n });\n\n if (!connection.aborted) {\n return this.requestNewOrExistingStream(\n resource,\n connection.result,\n requestStream\n );\n } else {\n this.updateState({ type: 'disconnected' });\n }\n }\n\n private async requestNewOrExistingStream(\n resource: Resource,\n connection: Disposable,\n requestStream: () => Promise<StreamResult>\n ): Promise<void> {\n const pendingClock = this.requestClock();\n\n const stream = await requestStream();\n console.debug(\n `Stream connected [stream-id=${stream.streamId}, scene-id=${stream.sceneId}, scene-view-id=${stream.sceneViewId}]`\n );\n\n const onRequest = this.onRequest((msg) => {\n const req = msg.request.drawFrame;\n if (req != null) {\n const frame = fromPbFrameOrThrow(stream.worldOrientation)(req);\n\n if (this.state.type === 'connected') {\n if (\n frame.depthBufferBytes != null ||\n this.state.frame.temporalRefinementCorrelationId !==\n frame.temporalRefinementCorrelationId\n ) {\n this.updateState({\n ...this.state,\n frame: frame,\n fallbackDepthBufferBytes: frame.depthBufferBytes,\n });\n } else {\n this.updateState({\n ...this.state,\n frame: frame.copy({\n depthBufferBytes: this.state.fallbackDepthBufferBytes,\n }),\n });\n }\n }\n }\n });\n\n const reconnect = this.reconnectWhenNeeded();\n const refreshToken = this.refreshTokenWhenExpired(stream.token);\n const acknowledgeFrameRequests = this.acknowledgeFrameRequests();\n const frame =\n stream.frame == null\n ? await this.waitForFrame(\n stream.worldOrientation,\n this.options.loadTimeoutInSeconds\n )\n : stream.frame;\n const clock = await pendingClock;\n console.debug(\n `Synchronized clocks [local-time=${clock.knownLocalTime.toISOString()}, remote-time=${clock.knownRemoteTime.toISOString()}]`\n );\n\n this.updateState({\n type: 'connected',\n connection: {\n dispose: () => {\n reconnect.dispose();\n onRequest.dispose();\n refreshToken.dispose();\n acknowledgeFrameRequests.dispose();\n connection.dispose();\n },\n },\n resource,\n streamId: stream.streamId,\n deviceId: stream.deviceId,\n sceneId: stream.sceneId,\n sceneViewId: stream.sceneViewId,\n worldOrientation: stream.worldOrientation,\n token: stream.token,\n frame,\n clock,\n fallbackDepthBufferBytes: undefined,\n });\n }\n\n private async requestNewStream(\n resource: Resource,\n cameraType?: FrameCameraType\n ): Promise<StreamResult> {\n const suppliedIdQuery = resource.queries.find(\n (q) => q.type === 'supplied-id'\n ) as SuppliedIdQueryValue | undefined;\n\n const res = fromPbStartStreamResponseOrThrow(\n await this.startStream({\n streamKey: { value: resource.resource.id },\n dimensions: this.getDimensions(),\n frameBackgroundColor: toPbColorOrThrow(this.frameBgColor),\n clientSupportsTemporalRefinement: this.enableTemporalRefinement,\n streamAttributes: toPbStreamAttributesOrThrow(this.streamAttributes),\n sceneViewStateId:\n resource.subResource?.type === 'scene-view-state' &&\n resource.subResource.id != null\n ? { hex: resource.subResource.id }\n : undefined,\n sceneViewStateSuppliedId:\n resource.subResource?.type === 'scene-view-state' &&\n suppliedIdQuery != null\n ? { value: suppliedIdQuery.id }\n : undefined,\n cameraType:\n cameraType != null ? toPbCameraTypeOrThrow(cameraType) : undefined,\n })\n );\n\n return {\n resource: resource,\n streamId: res.streamId,\n sceneId: res.sceneId,\n sceneViewId: res.sceneViewId,\n deviceId: res.sessionId,\n token: res.token,\n worldOrientation: res.worldOrientation,\n frame: undefined,\n fallbackDepthBufferBytes: undefined,\n };\n }\n\n private async requestReconnectStream(\n state: Connected\n ): Promise<StreamResult> {\n const res = fromPbReconnectResponseOrThrow(\n await this.reconnect({\n streamId: { hex: state.streamId },\n dimensions: this.getDimensions(),\n frameBackgroundColor: toPbColorOrThrow(this.frameBgColor),\n streamAttributes: toPbStreamAttributesOrThrow(this.streamAttributes),\n clientSupportsTemporalRefinement: this.enableTemporalRefinement,\n })\n );\n return { ...state, token: res.token };\n }\n\n private async requestClock(): Promise<SynchronizedClock> {\n const remoteTime = fromPbSyncTimeResponseOrThrow(\n await this.syncTime({\n requestTime: currentDateAsProtoTimestamp(),\n })\n );\n\n return new SynchronizedClock(remoteTime);\n }\n\n private reconnectWhenNeeded(): Disposable {\n const whenDisconnected = this.onClose(() => {\n if (this.state.type === 'connected') {\n this.closeAndReconnect(this.state);\n }\n });\n\n const whenRequested = this.onRequest((msg) => {\n const isReconnectMsg = msg.request.gracefulReconnection != null;\n if (isReconnectMsg && this.state.type === 'connected') {\n console.debug(\n 'Received request for graceful reconnect. Closing connection and attempting reconnect.'\n );\n this.closeAndReconnect(this.state);\n }\n });\n\n const whenOffline = this.reconnectWhenOffline();\n\n return {\n dispose: () => {\n whenDisconnected.dispose();\n whenRequested.dispose();\n whenOffline.dispose();\n },\n };\n }\n\n private refreshTokenWhenExpired(token: Token): Disposable {\n let timer: number;\n\n const startTimer = (token: Token): void => {\n const { tokenRefreshOffsetInSeconds } = this.options;\n const ms = token.remainingTimeInMs(tokenRefreshOffsetInSeconds);\n\n timer = window.setTimeout(async () => {\n const res = await this.refreshToken();\n const newToken = fromPbRefreshTokenResponseOrThrow(res);\n startTimer(newToken);\n if (this.state.type === 'connected') {\n this.updateState({ ...this.state, token: newToken });\n }\n }, ms);\n };\n\n startTimer(token);\n\n return { dispose: () => clearTimeout(timer) };\n }\n\n private reconnectWhenOffline(): Disposable {\n let timer: number;\n\n const clearTimer = (): void => window.clearTimeout(timer);\n\n const restartTimer = (): void => {\n clearTimer();\n\n const delayInSec = this.options.offlineThresholdInSeconds;\n console.debug(\n `Detected that host is offline. Will attempt reconnect in ${delayInSec}s.`\n );\n\n timer = window.setTimeout(() => {\n if (this.state.type === 'connected') {\n this.closeAndReconnect(this.state);\n }\n }, delayInSec * 1000);\n };\n\n const handleOnline = (): void => {\n console.debug('Detected that host is online.');\n clearTimer();\n };\n\n const handleOffline = (): void => restartTimer();\n\n window.addEventListener('offline', handleOffline);\n window.addEventListener('online', handleOnline);\n\n return {\n dispose: () => {\n clearTimer();\n window.removeEventListener('offline', handleOffline);\n window.removeEventListener('online', handleOnline);\n },\n };\n }\n\n private closeAndReconnect(state: Connected): Promise<void> {\n state.connection.dispose();\n return this.connectToExistingStream(state);\n }\n\n private async waitForFrame(\n worldOrientation: Orientation,\n timeoutInSeconds: number\n ): Promise<Frame> {\n let disposable: Disposable | undefined;\n\n try {\n return await Async.timeout(\n timeoutInSeconds * 1000,\n new Promise<Frame>((resolve) => {\n disposable = this.onRequest((msg) => {\n try {\n const req = msg.request.drawFrame;\n if (req != null) {\n const frame = fromPbFrameOrThrow(worldOrientation)(req);\n resolve(frame);\n }\n } finally {\n disposable?.dispose();\n }\n });\n })\n );\n } catch (e) {\n throw new SceneRenderError(\n `Frame timed out after ${timeoutInSeconds}s`,\n e instanceof Error ? e : undefined\n );\n } finally {\n disposable?.dispose();\n }\n }\n\n private acknowledgeFrameRequests(): Disposable {\n return this.onRequest(\n acknowledgeFrameRequests(this, () =>\n this.state.type === 'connected' ? this.state.clock : undefined\n )\n );\n }\n\n private updateState(state: ViewerStreamState): void {\n if (this.state !== state) {\n this.state = state;\n this.stateChanged.emit(this.state);\n }\n }\n\n private getDimensions(): Dimensions.Dimensions {\n if (Dimensions.area(this.dimensions) === 0) {\n // Ensure we always request at least a 1-pixel frame, even if the dimensions\n // haven't been set higher than zero.\n return Dimensions.create(1, 1);\n }\n return this.dimensions;\n }\n\n private ifState<T>(\n state: ViewerStreamState['type'],\n f: () => T\n ): T | undefined {\n if (this.state.type === state) {\n return f();\n }\n }\n\n public onStateChanged(listener: Listener<ViewerStreamState>): Disposable {\n return this.stateChanged.on(listener);\n }\n}\n\nconst toPbStreamAttributesOrThrow = Mapper.ifInvalidThrow(toPbStreamAttributes);\nconst toPbColorOrThrow = Mapper.ifInvalidThrow(toPbRGBi);\nconst toPbCameraTypeOrThrow = Mapper.ifInvalidThrow(toPbCameraType);\n\nfunction getStreamSettings(config: Config): Settings {\n return {\n EXPERIMENTAL_frameDelivery: {\n ...config.EXPERIMENTAL_frameDelivery,\n rateLimitingEnabled: config.flags.throttleFrameDelivery,\n },\n EXPERIMENTAL_adaptiveRendering: {\n ...config.EXPERIMENTAL_adaptiveRendering,\n enabled: config.flags.adaptiveRendering,\n },\n EXPERIMENTAL_qualityOfService: {\n ...config.EXPERIMENTAL_qualityOfService,\n },\n };\n}\n\nfunction getWebsocketDescriptor(uri: Uri.Uri): ConnectionDescriptor {\n return {\n url: Uri.toString(uri),\n protocols: ['ws.vertexvis.com'],\n };\n}\n\nfunction getWebsocketUri(\n config: Config,\n resource: LoadableResource.LoadableResource,\n clientId?: string,\n deviceId?: string\n): Uri.Uri {\n if (clientId != null) {\n return Uri.appendPath(\n Uri.toString(\n Uri.parseAndAddParams('/ws', {\n clientId,\n deviceId,\n })\n ),\n Uri.parse(config.network.renderingHost)\n );\n } else {\n return Uri.appendPath(\n `/stream-keys/${resource.id}/session`,\n Uri.parse(config.network.renderingHost)\n );\n }\n}\n"]}
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../../../src/lib/stream/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAEL,2BAA2B,EAE3B,SAAS,EACT,kBAAkB,GAEnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,EACL,KAAK,EAEL,eAAe,EAEf,MAAM,EACN,OAAO,EACP,GAAG,GACJ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,SAAS,MAAM,iBAAiB,CAAC;AAGxC,OAAO,EAAU,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,kBAAkB,EAClB,8BAA8B,EAC9B,iCAAiC,EACjC,gCAAgC,EAChC,6BAA6B,EAC7B,cAAc,EACd,QAAQ,EACR,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,EAEL,gBAAgB,EAEhB,iBAAiB,GAClB,MAAM,UAAU,CAAC;AASlB,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAgD5C,MAAM,OAAO,YAAa,SAAQ,SAAS;IAkBzC,YAAmB,EAAmB,EAAE,OAA2B,EAAE;;QACnE,KAAK,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAP7C,UAAK,GAAsB,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;QAE5C,iBAAY,GAAG,IAAI,eAAe,EAAqB,CAAC;QAOtE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,wBAAwB,GAAG,MAAA,IAAI,CAAC,wBAAwB,mCAAI,IAAI,CAAC;QACtE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;QAEjD,IAAI,CAAC,OAAO,GAAG;YACb,2BAA2B,EAAE,MAAA,IAAI,CAAC,2BAA2B,mCAAI,EAAE;YACnE,yBAAyB,EAAE,MAAA,IAAI,CAAC,yBAAyB,mCAAI,EAAE;YAC/D,oBAAoB,EAAE,MAAA,IAAI,CAAC,oBAAoB,mCAAI,EAAE;YACrD,wBAAwB,EAAE,MAAA,IAAI,CAAC,wBAAwB,mCAAI,IAAI;SAChE,CAAC;IACJ,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC;IAClC,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEM,UAAU;QACf,IACE,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,cAAc;YAClC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,mBAAmB,EACvC,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAChC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,IAAI,CACf,GAAW,EACX,QAA4B,EAC5B,QAA4B,EAC5B,SAAiB,sBAAsB,CAAC,UAAU,CAAC,EACnD,UAA4B;QAE5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACvC,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACnD,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,2BAA2B,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAEM,MAAM,CAAC,MAAoB;QAChC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY;YACrC,CAAC,CAAC,MAAM,CAAC,YAAY;YACrB,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;QAEtB,IACE,MAAM,CAAC,UAAU,IAAI,IAAI;YACzB,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,EAC9C,CAAC;YACD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,EAAE,CAC7B,IAAI,CAAC,gBAAgB,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAC5D,CAAC;QACJ,CAAC;QAED,MAAM,4BAA4B,GAAG,CAAC,SAAS,CAC7C,IAAI,CAAC,gBAAgB,EACrB,MAAM,CAAC,gBAAgB,CACxB,CAAC;QACF,IAAI,MAAM,CAAC,gBAAgB,IAAI,IAAI,IAAI,4BAA4B,EAAE,CAAC;YACpE,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;YAChD,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,EAAE,CAC7B,IAAI,CAAC,YAAY,CAAC;gBAChB,gBAAgB,EAAE,2BAA2B,CAAC,IAAI,CAAC,gBAAgB,CAAC;aACrE,CAAC,CACH,CAAC;QACJ,CAAC;QAED,IACE,MAAM,CAAC,wBAAwB,IAAI,IAAI;YACvC,MAAM,CAAC,wBAAwB,KAAK,IAAI,CAAC,wBAAwB,EACjE,CAAC;YACD,IAAI,CAAC,wBAAwB,GAAG,MAAM,CAAC,wBAAwB,CAAC;YAEhE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACpC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAEM,KAAK;QACV,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACpC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;YAE9B,OAAO,CAAC,KAAK,CACX,4BAA4B,IAAI,CAAC,WAAW,CAAC,QAAQ,cAAc,IAAI,CAAC,WAAW,CAAC,OAAO,mBAAmB,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAC9I,CAAC;YAEF,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,MAAM;QACjB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CACX,6BAA6B,IAAI,CAAC,WAAW,CAAC,QAAQ,cAAc,IAAI,CAAC,WAAW,CAAC,OAAO,mBAAmB,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAC/I,CAAC;YAEF,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAErD,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC/B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,2BAA2B,CACvC,GAAW,EACX,KAA4C,EAC5C,UAA4B;;QAE5B,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC1E,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAE/C,MAAM,kBAAkB,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1E,MAAM,qBAAqB,GAAG,CAAC,OAAO,CAAC,OAAO,CAC5C,YAAY,EACZ,QAAQ,CAAC,WAAW,CACrB,CAAC;QACF,MAAM,YAAY,GAChB,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC;QAC/D,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC;QAE/C,IAAI,kBAAkB,IAAI,CAAC,YAAY,IAAI,qBAAqB,CAAC,EAAE,CAAC;YAClE,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC;aAAM,IACL,WAAW;YACX,qBAAqB;YACrB,CAAA,MAAA,QAAQ,CAAC,WAAW,0CAAE,IAAI,MAAK,kBAAkB,EACjD,CAAC;YACD,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAC3C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CACI,CAAC;YAEtC,MAAM,OAAO,GAAG;gBACd,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,IAAI;oBACjC,CAAC,CAAC,EAAE,gBAAgB,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE;oBACxD,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,eAAe,IAAI,IAAI;oBACzB,CAAC,CAAC,EAAE,wBAAwB,EAAE,EAAE,KAAK,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE;oBAC7D,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,UAAU,IAAI,IAAI;oBACpB,CAAC,CAAC,EAAE,UAAU,EAAE,qBAAqB,CAAC,UAAU,CAAC,EAAE;oBACnD,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;YAEF,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,GAAW,EACX,UAA4B;QAE5B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,oBAAoB,CAC7B,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,EAC7B,UAAU,CACX,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,WAAW,EAAE,CAAC;gBAC7B,IAAI,CAAC,WAAW,CAAC;oBACf,IAAI,EAAE,mBAAmB;oBACzB,OAAO,EAAE,sBAAsB,CAAC,CAAC,OAAO,EAAE;oBAC1C,KAAK,EAAE,CAAC;iBACT,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,CAAC,YAAY,kBAAkB,EAAE,CAAC;gBAC3C,IAAI,CAAC,WAAW,CAAC;oBACf,IAAI,EAAE,mBAAmB;oBACzB,OAAO,EAAE,2DAA2D;oBACpE,KAAK,EAAE,CAAC;iBACT,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,WAAW,CAAC;oBACf,IAAI,EAAE,mBAAmB;oBACzB,OAAO,EAAE,yDAAyD;oBAClE,KAAK,EAAE,CAAC;iBACT,CAAC,CAAC;YACL,CAAC;YAED,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAEO,oBAAoB,CAC1B,QAAkB,EAClB,UAA4B;QAE5B,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,CAC3D,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAC5C,CAAC;IACJ,CAAC;IAEO,uBAAuB,CAAC,KAAgB;QAC9C,OAAO,IAAI,CAAC,mBAAmB,CAC7B,KAAK,CAAC,QAAQ,EACd,cAAc,EACd,GAAG,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,EACxC,EAAE,UAAU,EAAE,MAAM,CAAC,iBAAiB,EAAE,CACzC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,QAAkB,EAClB,IAA+C,EAC/C,aAA0C,EAC1C,EAAE,UAAU,GAAG,CAAC,KAA8B,EAAE;;QAEhD,MAAM,UAAU,GAAG,sBAAsB,CACvC,eAAe,CACb,IAAI,CAAC,MAAM,EACX,QAAQ,CAAC,QAAQ,EACjB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,QAAQ,CACd,CACF,CAAC;QACF,OAAO,CAAC,KAAK,CAAC,iCAAiC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC;QAElE,+EAA+E;QAC/E,kFAAkF;QAClF,+EAA+E;QAC/E,kFAAkF;QAClF,MAAA,IAAI,CAAC,eAAe,0CAAE,KAAK,EAAE,CAAC;QAC9B,MAAM,kBAAkB,GAAG,IAAI,eAAe,EAAE,CAAC;QACjD,IAAI,CAAC,eAAe,GAAG,kBAAkB,CAAC;QAE1C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,WAAW,CAAC;YACf,IAAI;YACJ,QAAQ;YACR,UAAU,EAAE;gBACV,OAAO,EAAE,GAAG,EAAE;oBACZ,IAAI,CAAC,OAAO,EAAE,CAAC;oBACf,kBAAkB,CAAC,KAAK,EAAE,CAAC;gBAC7B,CAAC;aACF;SACF,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,KAAK,CAClC,kBAAkB,CAAC,MAAM,EACzB,iBAAiB,CACf,kBAAkB,CAAC,MAAM,EACzB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,EACxC;YACE,OAAO,EAAE,GAAG,EAAE;gBACZ,0DAA0D;YAC5D,CAAC;SACF,EACD;YACE,UAAU;YACV,UAAU,EAAE,YAAY,CAAC,mBAAmB;SAC7C,CACF,CACF,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACZ,MAAM,IAAI,wBAAwB,CAChC,8BAA8B,EAC9B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CACnC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,0BAA0B,CACpC,QAAQ,EACR,UAAU,CAAC,MAAM,EACjB,aAAa,CACd,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,0BAA0B,CACtC,QAAkB,EAClB,UAAsB,EACtB,aAA0C;QAE1C,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAEzC,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;QACrC,OAAO,CAAC,KAAK,CACX,+BAA+B,MAAM,CAAC,QAAQ,cAAc,MAAM,CAAC,OAAO,mBAAmB,MAAM,CAAC,WAAW,GAAG,CACnH,CAAC;QAEF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE;YACvC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;YAClC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBAChB,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC;gBAE/D,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBACpC,IACE,KAAK,CAAC,gBAAgB,IAAI,IAAI;wBAC9B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,+BAA+B;4BAC9C,KAAK,CAAC,+BAA+B,EACvC,CAAC;wBACD,IAAI,CAAC,WAAW,CAAC;4BACf,GAAG,IAAI,CAAC,KAAK;4BACb,KAAK,EAAE,KAAK;4BACZ,wBAAwB,EAAE,KAAK,CAAC,gBAAgB;yBACjD,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,WAAW,CAAC;4BACf,GAAG,IAAI,CAAC,KAAK;4BACb,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;gCAChB,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,wBAAwB;6BACtD,CAAC;yBACH,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChE,MAAM,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;QACjE,MAAM,KAAK,GACT,MAAM,CAAC,KAAK,IAAI,IAAI;YAClB,CAAC,CAAC,MAAM,IAAI,CAAC,YAAY,CACrB,MAAM,CAAC,gBAAgB,EACvB,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAClC;YACH,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QACnB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC;QACjC,OAAO,CAAC,KAAK,CACX,mCAAmC,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,iBAAiB,KAAK,CAAC,eAAe,CAAC,WAAW,EAAE,GAAG,CAC7H,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC;YACf,IAAI,EAAE,WAAW;YACjB,UAAU,EAAE;gBACV,OAAO,EAAE,GAAG,EAAE;oBACZ,SAAS,CAAC,OAAO,EAAE,CAAC;oBACpB,SAAS,CAAC,OAAO,EAAE,CAAC;oBACpB,YAAY,CAAC,OAAO,EAAE,CAAC;oBACvB,wBAAwB,CAAC,OAAO,EAAE,CAAC;oBACnC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACvB,CAAC;aACF;YACD,QAAQ;YACR,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK;YACL,KAAK;YACL,wBAAwB,EAAE,SAAS;SACpC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,QAAkB,EAClB,UAA4B;;QAE5B,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAC3C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CACI,CAAC;QAEtC,MAAM,GAAG,GAAG,gCAAgC,CAC1C,MAAM,IAAI,CAAC,WAAW,CAAC;YACrB,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE;YAC1C,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE;YAChC,oBAAoB,EAAE,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC;YACzD,gCAAgC,EAAE,IAAI,CAAC,wBAAwB;YAC/D,gBAAgB,EAAE,2BAA2B,CAAC,IAAI,CAAC,gBAAgB,CAAC;YACpE,gBAAgB,EACd,CAAA,MAAA,QAAQ,CAAC,WAAW,0CAAE,IAAI,MAAK,kBAAkB;gBACjD,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,IAAI;gBAC7B,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE;gBAClC,CAAC,CAAC,SAAS;YACf,wBAAwB,EACtB,CAAA,MAAA,QAAQ,CAAC,WAAW,0CAAE,IAAI,MAAK,kBAAkB;gBACjD,eAAe,IAAI,IAAI;gBACrB,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,EAAE,EAAE;gBAC/B,CAAC,CAAC,SAAS;YACf,UAAU,EACR,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;SACrE,CAAC,CACH,CAAC;QAEF,OAAO;YACL,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,QAAQ,EAAE,GAAG,CAAC,SAAS;YACvB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;YACtC,KAAK,EAAE,SAAS;YAChB,wBAAwB,EAAE,SAAS;SACpC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,KAAgB;QAEhB,MAAM,GAAG,GAAG,8BAA8B,CACxC,MAAM,IAAI,CAAC,SAAS,CAAC;YACnB,QAAQ,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE;YACjC,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE;YAChC,oBAAoB,EAAE,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC;YACzD,gBAAgB,EAAE,2BAA2B,CAAC,IAAI,CAAC,gBAAgB,CAAC;YACpE,gCAAgC,EAAE,IAAI,CAAC,wBAAwB;SAChE,CAAC,CACH,CAAC;QACF,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;IACxC,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,MAAM,UAAU,GAAG,6BAA6B,CAC9C,MAAM,IAAI,CAAC,QAAQ,CAAC;YAClB,WAAW,EAAE,2BAA2B,EAAE;SAC3C,CAAC,CACH,CAAC;QAEF,OAAO,IAAI,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAEO,mBAAmB;QACzB,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YACzC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACpC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE;YAC3C,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,oBAAoB,IAAI,IAAI,CAAC;YAChE,IAAI,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACtD,OAAO,CAAC,KAAK,CACX,uFAAuF,CACxF,CAAC;gBACF,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAEhD,OAAO;YACL,OAAO,EAAE,GAAG,EAAE;gBACZ,gBAAgB,CAAC,OAAO,EAAE,CAAC;gBAC3B,aAAa,CAAC,OAAO,EAAE,CAAC;gBACxB,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,CAAC;SACF,CAAC;IACJ,CAAC;IAEO,uBAAuB,CAAC,KAAY;QAC1C,IAAI,KAAa,CAAC;QAElB,MAAM,UAAU,GAAG,CAAC,KAAY,EAAQ,EAAE;YACxC,MAAM,EAAE,2BAA2B,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;YACrD,MAAM,EAAE,GAAG,KAAK,CAAC,iBAAiB,CAAC,2BAA2B,CAAC,CAAC;YAEhE,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;gBACnC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtC,MAAM,QAAQ,GAAG,iCAAiC,CAAC,GAAG,CAAC,CAAC;gBACxD,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACrB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBACpC,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC,EAAE,EAAE,CAAC,CAAC;QACT,CAAC,CAAC;QAEF,UAAU,CAAC,KAAK,CAAC,CAAC;QAElB,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;IAChD,CAAC;IAEO,oBAAoB;QAC1B,IAAI,KAAa,CAAC;QAElB,MAAM,UAAU,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAE1D,MAAM,YAAY,GAAG,GAAS,EAAE;YAC9B,UAAU,EAAE,CAAC;YAEb,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC;YAC1D,OAAO,CAAC,KAAK,CACX,4DAA4D,UAAU,IAAI,CAC3E,CAAC;YAEF,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;gBAC7B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBACpC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC,CAAC;QACxB,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,GAAS,EAAE;YAC9B,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC/C,UAAU,EAAE,CAAC;QACf,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,GAAS,EAAE,CAAC,YAAY,EAAE,CAAC;QAEjD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAClD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAEhD,OAAO;YACL,OAAO,EAAE,GAAG,EAAE;gBACZ,UAAU,EAAE,CAAC;gBACb,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;gBACrD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACrD,CAAC;SACF,CAAC;IACJ,CAAC;IAEO,iBAAiB,CAAC,KAAgB;QACxC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,gBAA6B,EAC7B,gBAAwB;QAExB,IAAI,UAAkC,CAAC;QAEvC,IAAI,CAAC;YACH,OAAO,MAAM,KAAK,CAAC,OAAO,CACxB,gBAAgB,GAAG,IAAI,EACvB,IAAI,OAAO,CAAQ,CAAC,OAAO,EAAE,EAAE;gBAC7B,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE;oBAClC,IAAI,CAAC;wBACH,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;wBAClC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;4BAChB,MAAM,KAAK,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC;4BACxD,OAAO,CAAC,KAAK,CAAC,CAAC;wBACjB,CAAC;oBACH,CAAC;4BAAS,CAAC;wBACT,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,EAAE,CAAC;oBACxB,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,gBAAgB,CACxB,yBAAyB,gBAAgB,GAAG,EAC5C,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CACnC,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,OAAO,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,wBAAwB;QAC9B,OAAO,IAAI,CAAC,SAAS,CACnB,wBAAwB,CAAC,IAAI,EAAE,GAAG,EAAE,CAClC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC/D,CACF,CAAC;IACJ,CAAC;IAEO,WAAW,CAAC,KAAwB;QAC1C,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAEO,aAAa;QACnB,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,4EAA4E;YAC5E,qCAAqC;YACrC,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAEO,OAAO,CACb,KAAgC,EAChC,CAAU;QAEV,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC9B,OAAO,CAAC,EAAE,CAAC;QACb,CAAC;IACH,CAAC;IAEM,cAAc,CAAC,QAAqC;QACzD,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;;AAtmBc,gCAAmB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,AAAxB,CAAyB;AAymB7D,MAAM,2BAA2B,GAAG,MAAM,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;AAChF,MAAM,gBAAgB,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AACzD,MAAM,qBAAqB,GAAG,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;AAEpE,SAAS,iBAAiB,CAAC,MAAc;IACvC,OAAO;QACL,0BAA0B,EAAE;YAC1B,GAAG,MAAM,CAAC,0BAA0B;YACpC,mBAAmB,EAAE,MAAM,CAAC,KAAK,CAAC,qBAAqB;SACxD;QACD,8BAA8B,EAAE;YAC9B,GAAG,MAAM,CAAC,8BAA8B;YACxC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB;SACxC;QACD,6BAA6B,EAAE;YAC7B,GAAG,MAAM,CAAC,6BAA6B;SACxC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAY;IAC1C,OAAO;QACL,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;QACtB,SAAS,EAAE,CAAC,kBAAkB,CAAC;KAChC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,MAAc,EACd,QAA2C,EAC3C,QAAiB,EACjB,QAAiB;IAEjB,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,OAAO,GAAG,CAAC,UAAU,CACnB,GAAG,CAAC,QAAQ,CACV,GAAG,CAAC,iBAAiB,CAAC,KAAK,EAAE;YAC3B,QAAQ;YACR,QAAQ;SACT,CAAC,CACH,EACD,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CACxC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,CAAC,UAAU,CACnB,gBAAgB,QAAQ,CAAC,EAAE,UAAU,EACrC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CACxC,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["import { Dimensions } from '@vertexvis/geometry';\nimport {\n ConnectionDescriptor,\n currentDateAsProtoTimestamp,\n Settings,\n StreamApi,\n StreamRequestError,\n WebSocketClient,\n} from '@vertexvis/stream-api';\nimport {\n Async,\n Color,\n Disposable,\n EventDispatcher,\n Listener,\n Mapper,\n Objects,\n Uri,\n} from '@vertexvis/utils';\nimport deepEqual from 'fast-deep-equal';\n\nimport { Color3, StreamAttributes } from '../../interfaces';\nimport { Config, parseAndValidateConfig } from '../config';\nimport {\n CustomError,\n SceneRenderError,\n WebsocketConnectionError,\n} from '../errors';\nimport {\n fromPbFrameOrThrow,\n fromPbReconnectResponseOrThrow,\n fromPbRefreshTokenResponseOrThrow,\n fromPbStartStreamResponseOrThrow,\n fromPbSyncTimeResponseOrThrow,\n toPbCameraType,\n toPbRGBi,\n toPbStreamAttributes,\n} from '../mappers';\nimport { acknowledgeFrameRequests } from '../rendering';\nimport { Token } from '../token';\nimport {\n Frame,\n LoadableResource,\n Orientation,\n SynchronizedClock,\n} from '../types';\nimport { FrameCameraType } from '../types/frameCamera';\nimport { Resource, SuppliedIdQueryValue } from '../types/loadableResource';\nimport {\n Connected,\n Connecting,\n Reconnecting,\n ViewerStreamState,\n} from './state';\nimport { retryIfNotAborted } from './utils';\n\ntype StreamResult = Omit<\n Connected,\n 'type' | 'frame' | 'connection' | 'clock'\n> & {\n frame: Frame | undefined;\n};\n\ninterface FrameStreamOptions {\n /**\n * The number of seconds before the token expires, when the token will be\n * refreshed. Defaults to 30 seconds.\n */\n tokenRefreshOffsetInSeconds?: number;\n\n /**\n * Indicates if debug logs will be emitted for websocket messages.\n */\n loggingEnabled?: boolean;\n\n /**\n * The number of seconds after the host goes offline before a reconnect is\n * attempted.\n */\n offlineThresholdInSeconds?: number;\n\n /**\n * The number of seconds before we consider loading a scene failed.\n */\n loadTimeoutInSeconds?: number;\n\n /**\n * Enable temporal refinement of still images.\n */\n enableTemporalRefinement?: boolean;\n}\n\ninterface UpdateFields {\n dimensions?: ViewerStream['dimensions'];\n streamAttributes?: ViewerStream['streamAttributes'];\n enableTemporalRefinement?: ViewerStream['enableTemporalRefinement'];\n frameBgColor?: ViewerStream['frameBgColor'];\n config?: ViewerStream['config'];\n clientId?: ViewerStream['clientId'];\n deviceId?: ViewerStream['deviceId'];\n}\n\nexport class ViewerStream extends StreamApi {\n private static WS_RECONNECT_DELAYS = [0, 1000, 1000, 5000];\n\n private dimensions: Dimensions.Dimensions;\n private streamAttributes: StreamAttributes;\n private enableTemporalRefinement: boolean;\n private frameBgColor: Color3;\n private config: Config;\n private clientId: string | undefined;\n private deviceId: string | undefined;\n private abortController?: AbortController;\n\n private state: ViewerStreamState = { type: 'disconnected' };\n private pausedState?: Connected;\n public readonly stateChanged = new EventDispatcher<ViewerStreamState>();\n\n private options: Required<Omit<FrameStreamOptions, 'loggingEnabled'>>;\n\n public constructor(ws: WebSocketClient, opts: FrameStreamOptions = {}) {\n super(ws, { loggingEnabled: opts.loggingEnabled });\n\n this.dimensions = Dimensions.create(0, 0);\n this.streamAttributes = {};\n this.enableTemporalRefinement = opts.enableTemporalRefinement ?? true;\n this.frameBgColor = Color.create(255, 255, 255);\n this.config = parseAndValidateConfig('platprod');\n\n this.options = {\n tokenRefreshOffsetInSeconds: opts.tokenRefreshOffsetInSeconds ?? 30,\n offlineThresholdInSeconds: opts.offlineThresholdInSeconds ?? 30,\n loadTimeoutInSeconds: opts.loadTimeoutInSeconds ?? 15,\n enableTemporalRefinement: opts.enableTemporalRefinement ?? true,\n };\n }\n\n public isPaused(): boolean {\n return this.pausedState != null;\n }\n\n public getState(): ViewerStreamState {\n return this.state;\n }\n\n public disconnect(): void {\n if (\n this.state.type !== 'disconnected' &&\n this.state.type !== 'connection-failed'\n ) {\n console.debug('Disconnecting websocket');\n this.state.connection.dispose();\n this.updateState({ type: 'disconnected' });\n }\n }\n\n public async load(\n urn: string,\n clientId: string | undefined,\n deviceId: string | undefined,\n config: Config = parseAndValidateConfig('platprod'),\n cameraType?: FrameCameraType,\n ): Promise<ViewerStreamState> {\n this.clientId = clientId;\n this.deviceId = deviceId;\n this.config = config;\n\n if (this.state.type === 'disconnected') {\n await this.loadIfDisconnected(urn, cameraType);\n } else if (this.state.type === 'connection-failed') {\n await this.loadIfDisconnected(urn, cameraType);\n } else {\n await this.loadIfConnectingOrConnected(urn, this.state, cameraType);\n }\n return this.state;\n }\n\n public update(fields: UpdateFields): void {\n this.frameBgColor = fields.frameBgColor\n ? fields.frameBgColor\n : this.frameBgColor;\n\n if (\n fields.dimensions != null &&\n !deepEqual(fields.dimensions, this.dimensions)\n ) {\n this.dimensions = fields.dimensions;\n this.ifState('connected', () =>\n this.updateDimensions({ dimensions: this.getDimensions() }),\n );\n }\n\n const streamAttributesAreDifferent = !deepEqual(\n this.streamAttributes,\n fields.streamAttributes,\n );\n if (fields.streamAttributes != null && streamAttributesAreDifferent) {\n this.streamAttributes = fields.streamAttributes;\n this.ifState('connected', () =>\n this.updateStream({\n streamAttributes: toPbStreamAttributesOrThrow(this.streamAttributes),\n }),\n );\n }\n\n if (\n fields.enableTemporalRefinement != null &&\n fields.enableTemporalRefinement !== this.enableTemporalRefinement\n ) {\n this.enableTemporalRefinement = fields.enableTemporalRefinement;\n\n if (this.state.type === 'connected') {\n this.closeAndReconnect(this.state);\n }\n }\n }\n\n public pause(): void {\n if (this.state.type === 'connected') {\n this.pausedState = this.state;\n\n console.debug(\n `Stream paused [stream-id=${this.pausedState.streamId}, scene-id=${this.pausedState.sceneId}, scene-view-id=${this.pausedState.sceneViewId}]`,\n );\n\n this.disconnect();\n }\n }\n\n public async resume(): Promise<void> {\n if (this.pausedState != null) {\n console.debug(\n `Stream resumed [stream-id=${this.pausedState.streamId}, scene-id=${this.pausedState.sceneId}, scene-view-id=${this.pausedState.sceneViewId}]`,\n );\n\n await this.connectToExistingStream(this.pausedState);\n\n this.pausedState = undefined;\n }\n }\n\n private async loadIfConnectingOrConnected(\n urn: string,\n state: Connected | Connecting | Reconnecting,\n cameraType?: FrameCameraType,\n ): Promise<void> {\n const { resource: pResource, subResource: pSubResource } = state.resource;\n const resource = LoadableResource.fromUrn(urn);\n\n const hasResourceChanged = !Objects.isEqual(pResource, resource.resource);\n const hasSubResourceChanged = !Objects.isEqual(\n pSubResource,\n resource.subResource,\n );\n const isConnecting =\n state.type === 'connecting' || state.type === 'reconnecting';\n const isConnected = state.type === 'connected';\n\n if (hasResourceChanged || (isConnecting && hasSubResourceChanged)) {\n this.disconnect();\n return this.loadIfDisconnected(urn);\n } else if (\n isConnected &&\n hasSubResourceChanged &&\n resource.subResource?.type === 'scene-view-state'\n ) {\n const suppliedIdQuery = resource.queries.find(\n (q) => q.type === 'supplied-id',\n ) as SuppliedIdQueryValue | undefined;\n\n const payload = {\n ...(resource.subResource.id != null\n ? { sceneViewStateId: { hex: resource.subResource.id } }\n : {}),\n ...(suppliedIdQuery != null\n ? { sceneViewStateSuppliedId: { value: suppliedIdQuery.id } }\n : {}),\n ...(cameraType != null\n ? { cameraType: toPbCameraTypeOrThrow(cameraType) }\n : {}),\n };\n\n await this.loadSceneViewState(payload);\n this.updateState({ ...state, resource });\n }\n }\n\n private async loadIfDisconnected(\n urn: string,\n cameraType?: FrameCameraType,\n ): Promise<void> {\n try {\n await this.connectWithNewStream(\n LoadableResource.fromUrn(urn),\n cameraType,\n );\n } catch (e) {\n if (e instanceof CustomError) {\n this.updateState({\n type: 'connection-failed',\n message: `Cannot load scene. ${e.message}`,\n error: e,\n });\n } else if (e instanceof StreamRequestError) {\n this.updateState({\n type: 'connection-failed',\n message: `Cannot load scene. Stream request failed to start stream.`,\n error: e,\n });\n } else {\n this.updateState({\n type: 'connection-failed',\n message: `Cannot load scene for unknown reason. See console logs.`,\n error: e,\n });\n }\n\n throw e;\n }\n }\n\n private connectWithNewStream(\n resource: Resource,\n cameraType?: FrameCameraType,\n ): Promise<void> {\n return this.openWebsocketStream(resource, 'connecting', () =>\n this.requestNewStream(resource, cameraType),\n );\n }\n\n private connectToExistingStream(state: Connected): Promise<void> {\n return this.openWebsocketStream(\n state.resource,\n 'reconnecting',\n () => this.requestReconnectStream(state),\n { maxRetries: Number.POSITIVE_INFINITY },\n );\n }\n\n private async openWebsocketStream(\n resource: Resource,\n type: Connecting['type'] | Reconnecting['type'],\n requestStream: () => Promise<StreamResult>,\n { maxRetries = 3 }: { maxRetries?: number } = {},\n ): Promise<void> {\n const descriptor = getWebsocketDescriptor(\n getWebsocketUri(\n this.config,\n resource.resource,\n this.clientId,\n this.deviceId,\n ),\n );\n console.debug(`Initiating WS connection [uri=${descriptor.url}]`);\n\n // Ensure that any previous attempt to initiate a WebSocket connection has been\n // aborted prior to attempting to create a new connection. This prevents scenarios\n // where a previously initiated connection attempt is still in the `connecting`\n // state and gets closed, and the `Async.retry` utility attempts to connect again.\n this.abortController?.abort();\n const newAbortController = new AbortController();\n this.abortController = newAbortController;\n\n const settings = getStreamSettings(this.config);\n this.updateState({\n type,\n resource,\n connection: {\n dispose: () => {\n this.dispose();\n newAbortController.abort();\n },\n },\n });\n\n const connection = await Async.abort(\n newAbortController.signal,\n retryIfNotAborted(\n newAbortController.signal,\n () => this.connect(descriptor, settings),\n {\n dispose: () => {\n // Intentional empty dispose to prevent typing mismatches.\n },\n },\n {\n maxRetries,\n delaysInMs: ViewerStream.WS_RECONNECT_DELAYS,\n },\n ),\n ).catch((e) => {\n throw new WebsocketConnectionError(\n 'Websocket connection failed.',\n e instanceof Error ? e : undefined,\n );\n });\n\n if (!connection.aborted) {\n return this.requestNewOrExistingStream(\n resource,\n connection.result,\n requestStream,\n );\n } else {\n this.updateState({ type: 'disconnected' });\n }\n }\n\n private async requestNewOrExistingStream(\n resource: Resource,\n connection: Disposable,\n requestStream: () => Promise<StreamResult>,\n ): Promise<void> {\n const pendingClock = this.requestClock();\n\n const stream = await requestStream();\n console.debug(\n `Stream connected [stream-id=${stream.streamId}, scene-id=${stream.sceneId}, scene-view-id=${stream.sceneViewId}]`,\n );\n\n const onRequest = this.onRequest((msg) => {\n const req = msg.request.drawFrame;\n if (req != null) {\n const frame = fromPbFrameOrThrow(stream.worldOrientation)(req);\n\n if (this.state.type === 'connected') {\n if (\n frame.depthBufferBytes != null ||\n this.state.frame.temporalRefinementCorrelationId !==\n frame.temporalRefinementCorrelationId\n ) {\n this.updateState({\n ...this.state,\n frame: frame,\n fallbackDepthBufferBytes: frame.depthBufferBytes,\n });\n } else {\n this.updateState({\n ...this.state,\n frame: frame.copy({\n depthBufferBytes: this.state.fallbackDepthBufferBytes,\n }),\n });\n }\n }\n }\n });\n\n const reconnect = this.reconnectWhenNeeded();\n const refreshToken = this.refreshTokenWhenExpired(stream.token);\n const acknowledgeFrameRequests = this.acknowledgeFrameRequests();\n const frame =\n stream.frame == null\n ? await this.waitForFrame(\n stream.worldOrientation,\n this.options.loadTimeoutInSeconds,\n )\n : stream.frame;\n const clock = await pendingClock;\n console.debug(\n `Synchronized clocks [local-time=${clock.knownLocalTime.toISOString()}, remote-time=${clock.knownRemoteTime.toISOString()}]`,\n );\n\n this.updateState({\n type: 'connected',\n connection: {\n dispose: () => {\n reconnect.dispose();\n onRequest.dispose();\n refreshToken.dispose();\n acknowledgeFrameRequests.dispose();\n connection.dispose();\n },\n },\n resource,\n streamId: stream.streamId,\n deviceId: stream.deviceId,\n sceneId: stream.sceneId,\n sceneViewId: stream.sceneViewId,\n worldOrientation: stream.worldOrientation,\n token: stream.token,\n frame,\n clock,\n fallbackDepthBufferBytes: undefined,\n });\n }\n\n private async requestNewStream(\n resource: Resource,\n cameraType?: FrameCameraType,\n ): Promise<StreamResult> {\n const suppliedIdQuery = resource.queries.find(\n (q) => q.type === 'supplied-id',\n ) as SuppliedIdQueryValue | undefined;\n\n const res = fromPbStartStreamResponseOrThrow(\n await this.startStream({\n streamKey: { value: resource.resource.id },\n dimensions: this.getDimensions(),\n frameBackgroundColor: toPbColorOrThrow(this.frameBgColor),\n clientSupportsTemporalRefinement: this.enableTemporalRefinement,\n streamAttributes: toPbStreamAttributesOrThrow(this.streamAttributes),\n sceneViewStateId:\n resource.subResource?.type === 'scene-view-state' &&\n resource.subResource.id != null\n ? { hex: resource.subResource.id }\n : undefined,\n sceneViewStateSuppliedId:\n resource.subResource?.type === 'scene-view-state' &&\n suppliedIdQuery != null\n ? { value: suppliedIdQuery.id }\n : undefined,\n cameraType:\n cameraType != null ? toPbCameraTypeOrThrow(cameraType) : undefined,\n }),\n );\n\n return {\n resource: resource,\n streamId: res.streamId,\n sceneId: res.sceneId,\n sceneViewId: res.sceneViewId,\n deviceId: res.sessionId,\n token: res.token,\n worldOrientation: res.worldOrientation,\n frame: undefined,\n fallbackDepthBufferBytes: undefined,\n };\n }\n\n private async requestReconnectStream(\n state: Connected,\n ): Promise<StreamResult> {\n const res = fromPbReconnectResponseOrThrow(\n await this.reconnect({\n streamId: { hex: state.streamId },\n dimensions: this.getDimensions(),\n frameBackgroundColor: toPbColorOrThrow(this.frameBgColor),\n streamAttributes: toPbStreamAttributesOrThrow(this.streamAttributes),\n clientSupportsTemporalRefinement: this.enableTemporalRefinement,\n }),\n );\n return { ...state, token: res.token };\n }\n\n private async requestClock(): Promise<SynchronizedClock> {\n const remoteTime = fromPbSyncTimeResponseOrThrow(\n await this.syncTime({\n requestTime: currentDateAsProtoTimestamp(),\n }),\n );\n\n return new SynchronizedClock(remoteTime);\n }\n\n private reconnectWhenNeeded(): Disposable {\n const whenDisconnected = this.onClose(() => {\n if (this.state.type === 'connected') {\n this.closeAndReconnect(this.state);\n }\n });\n\n const whenRequested = this.onRequest((msg) => {\n const isReconnectMsg = msg.request.gracefulReconnection != null;\n if (isReconnectMsg && this.state.type === 'connected') {\n console.debug(\n 'Received request for graceful reconnect. Closing connection and attempting reconnect.',\n );\n this.closeAndReconnect(this.state);\n }\n });\n\n const whenOffline = this.reconnectWhenOffline();\n\n return {\n dispose: () => {\n whenDisconnected.dispose();\n whenRequested.dispose();\n whenOffline.dispose();\n },\n };\n }\n\n private refreshTokenWhenExpired(token: Token): Disposable {\n let timer: number;\n\n const startTimer = (token: Token): void => {\n const { tokenRefreshOffsetInSeconds } = this.options;\n const ms = token.remainingTimeInMs(tokenRefreshOffsetInSeconds);\n\n timer = window.setTimeout(async () => {\n const res = await this.refreshToken();\n const newToken = fromPbRefreshTokenResponseOrThrow(res);\n startTimer(newToken);\n if (this.state.type === 'connected') {\n this.updateState({ ...this.state, token: newToken });\n }\n }, ms);\n };\n\n startTimer(token);\n\n return { dispose: () => clearTimeout(timer) };\n }\n\n private reconnectWhenOffline(): Disposable {\n let timer: number;\n\n const clearTimer = (): void => window.clearTimeout(timer);\n\n const restartTimer = (): void => {\n clearTimer();\n\n const delayInSec = this.options.offlineThresholdInSeconds;\n console.debug(\n `Detected that host is offline. Will attempt reconnect in ${delayInSec}s.`,\n );\n\n timer = window.setTimeout(() => {\n if (this.state.type === 'connected') {\n this.closeAndReconnect(this.state);\n }\n }, delayInSec * 1000);\n };\n\n const handleOnline = (): void => {\n console.debug('Detected that host is online.');\n clearTimer();\n };\n\n const handleOffline = (): void => restartTimer();\n\n window.addEventListener('offline', handleOffline);\n window.addEventListener('online', handleOnline);\n\n return {\n dispose: () => {\n clearTimer();\n window.removeEventListener('offline', handleOffline);\n window.removeEventListener('online', handleOnline);\n },\n };\n }\n\n private closeAndReconnect(state: Connected): Promise<void> {\n state.connection.dispose();\n return this.connectToExistingStream(state);\n }\n\n private async waitForFrame(\n worldOrientation: Orientation,\n timeoutInSeconds: number,\n ): Promise<Frame> {\n let disposable: Disposable | undefined;\n\n try {\n return await Async.timeout(\n timeoutInSeconds * 1000,\n new Promise<Frame>((resolve) => {\n disposable = this.onRequest((msg) => {\n try {\n const req = msg.request.drawFrame;\n if (req != null) {\n const frame = fromPbFrameOrThrow(worldOrientation)(req);\n resolve(frame);\n }\n } finally {\n disposable?.dispose();\n }\n });\n }),\n );\n } catch (e) {\n throw new SceneRenderError(\n `Frame timed out after ${timeoutInSeconds}s`,\n e instanceof Error ? e : undefined,\n );\n } finally {\n disposable?.dispose();\n }\n }\n\n private acknowledgeFrameRequests(): Disposable {\n return this.onRequest(\n acknowledgeFrameRequests(this, () =>\n this.state.type === 'connected' ? this.state.clock : undefined,\n ),\n );\n }\n\n private updateState(state: ViewerStreamState): void {\n if (this.state !== state) {\n this.state = state;\n this.stateChanged.emit(this.state);\n }\n }\n\n private getDimensions(): Dimensions.Dimensions {\n if (Dimensions.area(this.dimensions) === 0) {\n // Ensure we always request at least a 1-pixel frame, even if the dimensions\n // haven't been set higher than zero.\n return Dimensions.create(1, 1);\n }\n return this.dimensions;\n }\n\n private ifState<T>(\n state: ViewerStreamState['type'],\n f: () => T,\n ): T | undefined {\n if (this.state.type === state) {\n return f();\n }\n }\n\n public onStateChanged(listener: Listener<ViewerStreamState>): Disposable {\n return this.stateChanged.on(listener);\n }\n}\n\nconst toPbStreamAttributesOrThrow = Mapper.ifInvalidThrow(toPbStreamAttributes);\nconst toPbColorOrThrow = Mapper.ifInvalidThrow(toPbRGBi);\nconst toPbCameraTypeOrThrow = Mapper.ifInvalidThrow(toPbCameraType);\n\nfunction getStreamSettings(config: Config): Settings {\n return {\n EXPERIMENTAL_frameDelivery: {\n ...config.EXPERIMENTAL_frameDelivery,\n rateLimitingEnabled: config.flags.throttleFrameDelivery,\n },\n EXPERIMENTAL_adaptiveRendering: {\n ...config.EXPERIMENTAL_adaptiveRendering,\n enabled: config.flags.adaptiveRendering,\n },\n EXPERIMENTAL_qualityOfService: {\n ...config.EXPERIMENTAL_qualityOfService,\n },\n };\n}\n\nfunction getWebsocketDescriptor(uri: Uri.Uri): ConnectionDescriptor {\n return {\n url: Uri.toString(uri),\n protocols: ['ws.vertexvis.com'],\n };\n}\n\nfunction getWebsocketUri(\n config: Config,\n resource: LoadableResource.LoadableResource,\n clientId?: string,\n deviceId?: string,\n): Uri.Uri {\n if (clientId != null) {\n return Uri.appendPath(\n Uri.toString(\n Uri.parseAndAddParams('/ws', {\n clientId,\n deviceId,\n }),\n ),\n Uri.parse(config.network.renderingHost),\n );\n } else {\n return Uri.appendPath(\n `/stream-keys/${resource.id}/session`,\n Uri.parse(config.network.renderingHost),\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/lib/stream/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,MAAM,UAAU,iBAAiB,CAC/B,WAAwB,EACxB,EAAoB,EACpB,QAAW,EACX,IAAwB;IAExB,OAAO,KAAK,CAAC,KAAK,CAAI,GAAe,EAAE;QACrC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,EAAE,EAAE,CAAC;QACd,CAAC;QAED,sEAAsE;QACtE,gEAAgE;QAChE,oEAAoE;QACpE,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC,EAAE,IAAI,CAAC,CAAC;AACX,CAAC","sourcesContent":["import { Async } from '@vertexvis/utils';\n\nexport function retryIfNotAborted<T>(\n abortSignal: AbortSignal,\n fn: () => Promise<T>,\n fallback: T,\n opts: Async.RetryOptions\n): Promise<T> {\n return Async.retry<T>((): Promise<T> => {\n if (!abortSignal.aborted) {\n return fn();\n }\n\n // Intentionally return a resolved fallback promise if the AbortSignal\n // associated to this attempt has been aborted to avoid attempts\n // to rerun the function after another process has aborted this one.\n return Promise.resolve(fallback);\n }, opts);\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/lib/stream/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,MAAM,UAAU,iBAAiB,CAC/B,WAAwB,EACxB,EAAoB,EACpB,QAAW,EACX,IAAwB;IAExB,OAAO,KAAK,CAAC,KAAK,CAAI,GAAe,EAAE;QACrC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,EAAE,EAAE,CAAC;QACd,CAAC;QAED,sEAAsE;QACtE,gEAAgE;QAChE,oEAAoE;QACpE,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC,EAAE,IAAI,CAAC,CAAC;AACX,CAAC","sourcesContent":["import { Async } from '@vertexvis/utils';\n\nexport function retryIfNotAborted<T>(\n abortSignal: AbortSignal,\n fn: () => Promise<T>,\n fallback: T,\n opts: Async.RetryOptions,\n): Promise<T> {\n return Async.retry<T>((): Promise<T> => {\n if (!abortSignal.aborted) {\n return fn();\n }\n\n // Intentionally return a resolved fallback promise if the AbortSignal\n // associated to this attempt has been aborted to avoid attempts\n // to rerun the function after another process has aborted this one.\n return Promise.resolve(fallback);\n }, opts);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"interactions.js","sourceRoot":"","sources":["../../../../../src/lib/teleportation/interactions.ts"],"names":[],"mappings":"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","sourcesContent":["import { BoundingBox, Plane, Point, Ray, Vector3 } from '@vertexvis/geometry';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { getMouseClientPosition } from '../dom';\nimport { ElementRectObserver } from '../elementRectObserver';\nimport {\n CameraTransform,\n InteractionApi,\n InteractionHandler,\n} from '../interactions';\nimport { Camera, CameraRenderOptions } from '../scenes';\nimport { ViewerTeleportMode, WalkModeModel } from '../walk-mode/model';\n\nexport interface AnimationConfiguration {\n durationMs: number;\n}\n\nexport class TeleportInteractionHandler implements InteractionHandler {\n private api?: InteractionApi;\n private element?: HTMLElement;\n\n private rectObserver = new ElementRectObserver();\n\n private downPosition?: Point.Point;\n private downButtons?: number;\n\n private enabledChangeDisposable?: Disposable;\n private teleportModeChangeDisposable?: Disposable;\n private cursorDisposable?: Disposable;\n\n public constructor(\n private model: WalkModeModel,\n private animationConfiguration?: AnimationConfiguration\n ) {\n this.handlePointerDown = this.handlePointerDown.bind(this);\n this.handlePointerUp = this.handlePointerUp.bind(this);\n this.handleEnabledChange = this.handleEnabledChange.bind(this);\n this.handleTeleportModeChange = this.handleTeleportModeChange.bind(this);\n\n this.enabledChangeDisposable = this.model.onEnabledChange(\n this.handleEnabledChange\n );\n }\n\n public dispose(): void {\n this.disable();\n this.enabledChangeDisposable?.dispose();\n\n this.element = undefined;\n this.api = undefined;\n\n this.rectObserver.disconnect();\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.api = api;\n\n this.rectObserver.observe(element);\n\n this.handleEnabledChange(this.model.getEnabled());\n }\n\n public setAnimations(config?: AnimationConfiguration): void {\n this.animationConfiguration = config;\n }\n\n public enable(): void {\n this.disable();\n\n this.teleportModeChangeDisposable = this.model.onTeleportModeChange(\n this.handleTeleportModeChange\n );\n this.element?.addEventListener('pointerdown', this.handlePointerDown);\n\n this.handleTeleportModeChange(this.model.getTeleportMode());\n }\n\n public disable(): void {\n this.teleportModeChangeDisposable?.dispose();\n this.cursorDisposable?.dispose();\n\n this.element?.removeEventListener('pointerdown', this.handlePointerDown);\n }\n\n private async handlePointerDown(event: PointerEvent): Promise<void> {\n this.downPosition = getMouseClientPosition(event, this.rectObserver.rect);\n this.downButtons = event.buttons;\n\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n\n private async handlePointerUp(event: PointerEvent): Promise<void> {\n const mode = this.model.getTeleportMode();\n const threshold = this.api?.pixelThreshold() ?? 2;\n const point = getMouseClientPosition(event, this.rectObserver.rect);\n const isRightClick = this.downButtons === 2;\n const hasModifier =\n event.shiftKey || event.altKey || event.metaKey || event.ctrlKey;\n\n if (\n mode != null &&\n this.downPosition != null &&\n Point.distance(this.downPosition, point) <= threshold &&\n !isRightClick &&\n !hasModifier\n ) {\n switch (mode) {\n case 'teleport':\n return this.teleportToHit(point);\n case 'teleport-toward':\n return this.teleportTowardHit(point);\n case 'teleport-and-align':\n return this.teleportAndAlign(point);\n }\n }\n\n this.downPosition = undefined;\n\n window.removeEventListener('pointerup', this.handlePointerUp);\n }\n\n private async beginInteraction(): Promise<void> {\n if (!this.api?.isInteracting()) {\n await this.api?.beginInteraction();\n }\n }\n\n private async endInteraction(): Promise<void> {\n await this.api?.endInteraction();\n }\n\n private async teleportTowardHit(point: Point.Point): Promise<void> {\n const worldPoint = await this.api?.getWorldPointFromViewport(point);\n const mouseRay = this.api?.getRayFromPoint(point);\n\n if (mouseRay != null) {\n const { teleportDistancePercentage, teleportCollisionDistance } =\n this.model.getConfiguration();\n const teleportDistanceScalar = teleportDistancePercentage / 100;\n\n return this.performInteraction(({ camera, boundingBox }) => {\n const stepDistance =\n Math.max(...Vector3.toArray(BoundingBox.lengths(boundingBox))) *\n teleportDistanceScalar;\n\n const positionPlane = Plane.fromNormalAndCoplanarPoint(\n camera.up,\n camera.position\n );\n const projectedWorldPoint = Plane.projectPoint(\n positionPlane,\n worldPoint ?? camera.position\n );\n const distanceToWorldPoint = Vector3.distance(\n camera.position,\n projectedWorldPoint\n );\n\n if (\n distanceToWorldPoint < stepDistance &&\n distanceToWorldPoint > teleportCollisionDistance * 1.1\n ) {\n const mouseRayAtWorldPoint = Ray.create({\n ...mouseRay,\n origin: projectedWorldPoint,\n });\n const nextPosition = Plane.projectPoint(\n positionPlane,\n Ray.at(mouseRayAtWorldPoint, -teleportCollisionDistance)\n );\n\n return camera.update({\n position: nextPosition,\n lookAt: Vector3.add(\n camera.lookAt,\n Vector3.subtract(nextPosition, camera.position)\n ),\n });\n } else {\n const projectedNextStep = Plane.projectPoint(\n positionPlane,\n Ray.at(mouseRay, stepDistance)\n );\n\n return camera.update({\n position: projectedNextStep,\n lookAt: Vector3.add(\n camera.lookAt,\n Vector3.subtract(projectedNextStep, camera.position)\n ),\n });\n }\n });\n }\n }\n\n private async teleportToHit(point: Point.Point): Promise<void> {\n const worldPoint = await this.getWorldPointWithFallback(point);\n\n if (worldPoint != null) {\n return this.performInteraction(({ camera, boundingBox }) => {\n const shortestBoundingBoxLength = this.shortestLength(boundingBox);\n const heightScalar = this.model.getTeleportHeightPercentage() / 100;\n\n const cameraPlane = Plane.fromNormalAndCoplanarPoint(\n camera.up,\n camera.position\n );\n const projectedHitPosition = Plane.projectPoint(\n cameraPlane,\n worldPoint\n );\n\n const rayToHitPosition = Ray.create({\n origin: camera.position,\n direction: Vector3.normalize(\n Vector3.subtract(projectedHitPosition, camera.position)\n ),\n });\n const distanceToHitPosition = Vector3.distance(\n camera.position,\n projectedHitPosition\n );\n const distanceToLookAt = Vector3.distance(\n camera.position,\n camera.lookAt\n );\n\n const newPosition = Ray.at(\n rayToHitPosition,\n distanceToHitPosition - shortestBoundingBoxLength * heightScalar\n );\n const newPositionViewVectorRay = Ray.create({\n origin: newPosition,\n direction: Vector3.normalize(camera.viewVector),\n });\n\n return camera.update({\n position: newPosition,\n lookAt: Ray.at(newPositionViewVectorRay, distanceToLookAt),\n });\n });\n }\n }\n\n private async teleportAndAlign(point: Point.Point): Promise<void> {\n const hits = await this.api?.hitItems(point);\n const hit = hits != null ? hits[0] : undefined;\n\n if (hit?.hitNormal != null && hit?.hitPoint) {\n await this.performInteraction(({ camera, boundingBox }) => {\n const shortestBoundingBoxLength = this.shortestLength(boundingBox);\n const heightScalar = this.model.getTeleportHeightPercentage() / 100;\n\n const upRay = Ray.create({\n origin: hit.hitPoint as Vector3.Vector3,\n direction: hit.hitNormal as Vector3.Vector3,\n });\n\n return camera.alignTo(\n Ray.at(upRay, shortestBoundingBoxLength * heightScalar),\n hit.hitNormal as Vector3.Vector3\n );\n });\n }\n }\n\n private async performInteraction(fn: CameraTransform<Camera>): Promise<void> {\n await this.beginInteraction();\n await this.api?.transformCamera(fn, this.renderConfiguration());\n await this.endInteraction();\n }\n\n private async getWorldPointWithFallback(\n point: Point.Point\n ): Promise<Vector3.Vector3 | undefined> {\n const worldPoint = await this.api?.getWorldPointFromViewport(point);\n\n if (worldPoint == null) {\n const hits = await this.api?.hitItems(point);\n const hit = hits != null ? hits[0] : undefined;\n\n return hit?.hitPoint != null\n ? (hit.hitPoint as Vector3.Vector3)\n : worldPoint;\n }\n return worldPoint;\n }\n\n private handleEnabledChange(enabled: boolean): void {\n if (enabled) {\n this.enable();\n } else {\n this.disable();\n }\n }\n\n private handleTeleportModeChange(mode?: ViewerTeleportMode): void {\n this.cursorDisposable?.dispose();\n\n if (mode != null) {\n this.cursorDisposable = this.api?.addCursor('crosshair');\n }\n }\n\n private shortestLength(boundingBox: BoundingBox.BoundingBox): number {\n return Math.min(...Vector3.toArray(BoundingBox.lengths(boundingBox)));\n }\n\n private renderConfiguration(): CameraRenderOptions {\n return this.animationConfiguration != null\n ? { animation: { milliseconds: this.animationConfiguration.durationMs } }\n : {};\n }\n}\n"]}
1
+ {"version":3,"file":"interactions.js","sourceRoot":"","sources":["../../../../../src/lib/teleportation/interactions.ts"],"names":[],"mappings":"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","sourcesContent":["import { BoundingBox, Plane, Point, Ray, Vector3 } from '@vertexvis/geometry';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { getMouseClientPosition } from '../dom';\nimport { ElementRectObserver } from '../elementRectObserver';\nimport {\n CameraTransform,\n InteractionApi,\n InteractionHandler,\n} from '../interactions';\nimport { Camera, CameraRenderOptions } from '../scenes';\nimport { ViewerTeleportMode, WalkModeModel } from '../walk-mode/model';\n\nexport interface AnimationConfiguration {\n durationMs: number;\n}\n\nexport class TeleportInteractionHandler implements InteractionHandler {\n private api?: InteractionApi;\n private element?: HTMLElement;\n\n private rectObserver = new ElementRectObserver();\n\n private downPosition?: Point.Point;\n private downButtons?: number;\n\n private enabledChangeDisposable?: Disposable;\n private teleportModeChangeDisposable?: Disposable;\n private cursorDisposable?: Disposable;\n\n public constructor(\n private model: WalkModeModel,\n private animationConfiguration?: AnimationConfiguration,\n ) {\n this.handlePointerDown = this.handlePointerDown.bind(this);\n this.handlePointerUp = this.handlePointerUp.bind(this);\n this.handleEnabledChange = this.handleEnabledChange.bind(this);\n this.handleTeleportModeChange = this.handleTeleportModeChange.bind(this);\n\n this.enabledChangeDisposable = this.model.onEnabledChange(\n this.handleEnabledChange,\n );\n }\n\n public dispose(): void {\n this.disable();\n this.enabledChangeDisposable?.dispose();\n\n this.element = undefined;\n this.api = undefined;\n\n this.rectObserver.disconnect();\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.api = api;\n\n this.rectObserver.observe(element);\n\n this.handleEnabledChange(this.model.getEnabled());\n }\n\n public setAnimations(config?: AnimationConfiguration): void {\n this.animationConfiguration = config;\n }\n\n public enable(): void {\n this.disable();\n\n this.teleportModeChangeDisposable = this.model.onTeleportModeChange(\n this.handleTeleportModeChange,\n );\n this.element?.addEventListener('pointerdown', this.handlePointerDown);\n\n this.handleTeleportModeChange(this.model.getTeleportMode());\n }\n\n public disable(): void {\n this.teleportModeChangeDisposable?.dispose();\n this.cursorDisposable?.dispose();\n\n this.element?.removeEventListener('pointerdown', this.handlePointerDown);\n }\n\n private async handlePointerDown(event: PointerEvent): Promise<void> {\n this.downPosition = getMouseClientPosition(event, this.rectObserver.rect);\n this.downButtons = event.buttons;\n\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n\n private async handlePointerUp(event: PointerEvent): Promise<void> {\n const mode = this.model.getTeleportMode();\n const threshold = this.api?.pixelThreshold() ?? 2;\n const point = getMouseClientPosition(event, this.rectObserver.rect);\n const isRightClick = this.downButtons === 2;\n const hasModifier =\n event.shiftKey || event.altKey || event.metaKey || event.ctrlKey;\n\n if (\n mode != null &&\n this.downPosition != null &&\n Point.distance(this.downPosition, point) <= threshold &&\n !isRightClick &&\n !hasModifier\n ) {\n switch (mode) {\n case 'teleport':\n return this.teleportToHit(point);\n case 'teleport-toward':\n return this.teleportTowardHit(point);\n case 'teleport-and-align':\n return this.teleportAndAlign(point);\n }\n }\n\n this.downPosition = undefined;\n\n window.removeEventListener('pointerup', this.handlePointerUp);\n }\n\n private async beginInteraction(): Promise<void> {\n if (!this.api?.isInteracting()) {\n await this.api?.beginInteraction();\n }\n }\n\n private async endInteraction(): Promise<void> {\n await this.api?.endInteraction();\n }\n\n private async teleportTowardHit(point: Point.Point): Promise<void> {\n const worldPoint = await this.api?.getWorldPointFromViewport(point);\n const mouseRay = this.api?.getRayFromPoint(point);\n\n if (mouseRay != null) {\n const { teleportDistancePercentage, teleportCollisionDistance } =\n this.model.getConfiguration();\n const teleportDistanceScalar = teleportDistancePercentage / 100;\n\n return this.performInteraction(({ camera, boundingBox }) => {\n const stepDistance =\n Math.max(...Vector3.toArray(BoundingBox.lengths(boundingBox))) *\n teleportDistanceScalar;\n\n const positionPlane = Plane.fromNormalAndCoplanarPoint(\n camera.up,\n camera.position,\n );\n const projectedWorldPoint = Plane.projectPoint(\n positionPlane,\n worldPoint ?? camera.position,\n );\n const distanceToWorldPoint = Vector3.distance(\n camera.position,\n projectedWorldPoint,\n );\n\n if (\n distanceToWorldPoint < stepDistance &&\n distanceToWorldPoint > teleportCollisionDistance * 1.1\n ) {\n const mouseRayAtWorldPoint = Ray.create({\n ...mouseRay,\n origin: projectedWorldPoint,\n });\n const nextPosition = Plane.projectPoint(\n positionPlane,\n Ray.at(mouseRayAtWorldPoint, -teleportCollisionDistance),\n );\n\n return camera.update({\n position: nextPosition,\n lookAt: Vector3.add(\n camera.lookAt,\n Vector3.subtract(nextPosition, camera.position),\n ),\n });\n } else {\n const projectedNextStep = Plane.projectPoint(\n positionPlane,\n Ray.at(mouseRay, stepDistance),\n );\n\n return camera.update({\n position: projectedNextStep,\n lookAt: Vector3.add(\n camera.lookAt,\n Vector3.subtract(projectedNextStep, camera.position),\n ),\n });\n }\n });\n }\n }\n\n private async teleportToHit(point: Point.Point): Promise<void> {\n const worldPoint = await this.getWorldPointWithFallback(point);\n\n if (worldPoint != null) {\n return this.performInteraction(({ camera, boundingBox }) => {\n const shortestBoundingBoxLength = this.shortestLength(boundingBox);\n const heightScalar = this.model.getTeleportHeightPercentage() / 100;\n\n const cameraPlane = Plane.fromNormalAndCoplanarPoint(\n camera.up,\n camera.position,\n );\n const projectedHitPosition = Plane.projectPoint(\n cameraPlane,\n worldPoint,\n );\n\n const rayToHitPosition = Ray.create({\n origin: camera.position,\n direction: Vector3.normalize(\n Vector3.subtract(projectedHitPosition, camera.position),\n ),\n });\n const distanceToHitPosition = Vector3.distance(\n camera.position,\n projectedHitPosition,\n );\n const distanceToLookAt = Vector3.distance(\n camera.position,\n camera.lookAt,\n );\n\n const newPosition = Ray.at(\n rayToHitPosition,\n distanceToHitPosition - shortestBoundingBoxLength * heightScalar,\n );\n const newPositionViewVectorRay = Ray.create({\n origin: newPosition,\n direction: Vector3.normalize(camera.viewVector),\n });\n\n return camera.update({\n position: newPosition,\n lookAt: Ray.at(newPositionViewVectorRay, distanceToLookAt),\n });\n });\n }\n }\n\n private async teleportAndAlign(point: Point.Point): Promise<void> {\n const hits = await this.api?.hitItems(point);\n const hit = hits != null ? hits[0] : undefined;\n\n if (hit?.hitNormal != null && hit?.hitPoint) {\n await this.performInteraction(({ camera, boundingBox }) => {\n const shortestBoundingBoxLength = this.shortestLength(boundingBox);\n const heightScalar = this.model.getTeleportHeightPercentage() / 100;\n\n const upRay = Ray.create({\n origin: hit.hitPoint as Vector3.Vector3,\n direction: hit.hitNormal as Vector3.Vector3,\n });\n\n return camera.alignTo(\n Ray.at(upRay, shortestBoundingBoxLength * heightScalar),\n hit.hitNormal as Vector3.Vector3,\n );\n });\n }\n }\n\n private async performInteraction(fn: CameraTransform<Camera>): Promise<void> {\n await this.beginInteraction();\n await this.api?.transformCamera(fn, this.renderConfiguration());\n await this.endInteraction();\n }\n\n private async getWorldPointWithFallback(\n point: Point.Point,\n ): Promise<Vector3.Vector3 | undefined> {\n const worldPoint = await this.api?.getWorldPointFromViewport(point);\n\n if (worldPoint == null) {\n const hits = await this.api?.hitItems(point);\n const hit = hits != null ? hits[0] : undefined;\n\n return hit?.hitPoint != null\n ? (hit.hitPoint as Vector3.Vector3)\n : worldPoint;\n }\n return worldPoint;\n }\n\n private handleEnabledChange(enabled: boolean): void {\n if (enabled) {\n this.enable();\n } else {\n this.disable();\n }\n }\n\n private handleTeleportModeChange(mode?: ViewerTeleportMode): void {\n this.cursorDisposable?.dispose();\n\n if (mode != null) {\n this.cursorDisposable = this.api?.addCursor('crosshair');\n }\n }\n\n private shortestLength(boundingBox: BoundingBox.BoundingBox): number {\n return Math.min(...Vector3.toArray(BoundingBox.lengths(boundingBox)));\n }\n\n private renderConfiguration(): CameraRenderOptions {\n return this.animationConfiguration != null\n ? { animation: { milliseconds: this.animationConfiguration.durationMs } }\n : {};\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../../src/lib/templates.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAC3B,QAA6B;IAE7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAgB,CAAC;IACjE,MAAM,OAAO,GAAG,QAAQ,CAAC,iBAAiB,CAAC;IAC3C,OAAO,OAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,QAA6B,EAC7B,UAA0C,EAC1C,QAAqB;IAErB,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,EAAI,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAe,EACf,EAAU,EACV,UAA0C,EAC1C,wBAAoC,EACpC,kBAA8B;IAE9B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,wBAAwB,CAAC,CAAC;IACzE,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,OAAO,2BAA2B,CAChC,QAAQ,EACR,UAAU,EACV,kBAAkB,CACnB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAAe,EACf,EAAU,EACV,QAAqB;IAErB,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAE/C,IAAI,OAAO,YAAY,mBAAmB,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,EAAI,CAAC;IACf,CAAC;AACH,CAAC","sourcesContent":["export function stampTemplate<E extends Element>(\n template: HTMLTemplateElement\n): E {\n const fragment = template.content.cloneNode(true) as HTMLElement;\n const element = fragment.firstElementChild;\n return element as E;\n}\n\nexport function stampTemplateWithValidation<E extends Element>(\n template: HTMLTemplateElement,\n validation: (value: unknown) => value is E,\n errorMsg?: () => void\n): E | undefined {\n const element = stampTemplate(template);\n if (validation(element)) {\n return element;\n } else {\n errorMsg?.();\n }\n}\n\nexport function stampTemplateWithId<E extends Element>(\n parent: Element,\n id: string,\n validation: (value: unknown) => value is E,\n templateNotFoundErrorMsg: () => void,\n validationErrorMsg: () => void\n): E | undefined {\n const template = getTemplateWithId(parent, id, templateNotFoundErrorMsg);\n if (template != null) {\n return stampTemplateWithValidation(\n template,\n validation,\n validationErrorMsg\n );\n }\n}\n\nexport function getTemplateWithId(\n parent: Element,\n id: string,\n errorMsg?: () => void\n): HTMLTemplateElement | undefined {\n const element = parent.querySelector(`#${id}`);\n\n if (element instanceof HTMLTemplateElement) {\n return element;\n } else {\n errorMsg?.();\n }\n}\n"]}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../../src/lib/templates.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAC3B,QAA6B;IAE7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAgB,CAAC;IACjE,MAAM,OAAO,GAAG,QAAQ,CAAC,iBAAiB,CAAC;IAC3C,OAAO,OAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,QAA6B,EAC7B,UAA0C,EAC1C,QAAqB;IAErB,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,EAAI,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAe,EACf,EAAU,EACV,UAA0C,EAC1C,wBAAoC,EACpC,kBAA8B;IAE9B,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,wBAAwB,CAAC,CAAC;IACzE,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,OAAO,2BAA2B,CAChC,QAAQ,EACR,UAAU,EACV,kBAAkB,CACnB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAAe,EACf,EAAU,EACV,QAAqB;IAErB,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAE/C,IAAI,OAAO,YAAY,mBAAmB,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC;IACjB,CAAC;SAAM,CAAC;QACN,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,EAAI,CAAC;IACf,CAAC;AACH,CAAC","sourcesContent":["export function stampTemplate<E extends Element>(\n template: HTMLTemplateElement,\n): E {\n const fragment = template.content.cloneNode(true) as HTMLElement;\n const element = fragment.firstElementChild;\n return element as E;\n}\n\nexport function stampTemplateWithValidation<E extends Element>(\n template: HTMLTemplateElement,\n validation: (value: unknown) => value is E,\n errorMsg?: () => void,\n): E | undefined {\n const element = stampTemplate(template);\n if (validation(element)) {\n return element;\n } else {\n errorMsg?.();\n }\n}\n\nexport function stampTemplateWithId<E extends Element>(\n parent: Element,\n id: string,\n validation: (value: unknown) => value is E,\n templateNotFoundErrorMsg: () => void,\n validationErrorMsg: () => void,\n): E | undefined {\n const template = getTemplateWithId(parent, id, templateNotFoundErrorMsg);\n if (template != null) {\n return stampTemplateWithValidation(\n template,\n validation,\n validationErrorMsg,\n );\n }\n}\n\nexport function getTemplateWithId(\n parent: Element,\n id: string,\n errorMsg?: () => void,\n): HTMLTemplateElement | undefined {\n const element = parent.querySelector(`#${id}`);\n\n if (element instanceof HTMLTemplateElement) {\n return element;\n } else {\n errorMsg?.();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../../src/lib/token.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,cAAc,CAAC;AAC/B,OAAO,wBAAwB,MAAM,mCAAmC,CAAC;AACzE,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,GAAG,MAAM,cAAc,CAAC;AAE/B,MAAM,OAAO,KAAK;IAChB,YACkB,KAAa,EACb,SAAiB,EACjB,SAAe;QAFf,UAAK,GAAL,KAAK,CAAQ;QACb,cAAS,GAAT,SAAS,CAAQ;QACjB,cAAS,GAAT,SAAS,CAAM;IAC9B,CAAC;IAEG,MAAM,CAAC,MAAM,CAAC,KAAa,EAAE,SAAiB;QACnD,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1D,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC;IAEM,UAAU;QACf,OAAO,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAEM,iBAAiB,CAAC,eAAuB;QAC9C,OAAO,wBAAwB,CAC7B,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,EACjD,IAAI,IAAI,EAAE,CACX,CAAC;IACJ,CAAC;CACF","sourcesContent":["import add from 'date-fns/add';\nimport differenceInMilliseconds from 'date-fns/differenceInMilliseconds';\nimport isAfter from 'date-fns/isAfter';\nimport sub from 'date-fns/sub';\n\nexport class Token {\n public constructor(\n public readonly token: string,\n public readonly expiresIn: number,\n public readonly expiresAt: Date\n ) {}\n\n public static create(token: string, expiresIn: number): Token {\n const expiresAt = add(new Date(), { seconds: expiresIn });\n return new Token(token, expiresIn, expiresAt);\n }\n\n public hasExpired(): boolean {\n return isAfter(new Date(), this.expiresAt);\n }\n\n public remainingTimeInMs(offsetInSeconds: number): number {\n return differenceInMilliseconds(\n sub(this.expiresAt, { seconds: offsetInSeconds }),\n new Date()\n );\n }\n}\n"]}
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../../src/lib/token.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,cAAc,CAAC;AAC/B,OAAO,wBAAwB,MAAM,mCAAmC,CAAC;AACzE,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,GAAG,MAAM,cAAc,CAAC;AAE/B,MAAM,OAAO,KAAK;IAChB,YACkB,KAAa,EACb,SAAiB,EACjB,SAAe;QAFf,UAAK,GAAL,KAAK,CAAQ;QACb,cAAS,GAAT,SAAS,CAAQ;QACjB,cAAS,GAAT,SAAS,CAAM;IAC9B,CAAC;IAEG,MAAM,CAAC,MAAM,CAAC,KAAa,EAAE,SAAiB;QACnD,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1D,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC;IAEM,UAAU;QACf,OAAO,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAEM,iBAAiB,CAAC,eAAuB;QAC9C,OAAO,wBAAwB,CAC7B,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,EACjD,IAAI,IAAI,EAAE,CACX,CAAC;IACJ,CAAC;CACF","sourcesContent":["import add from 'date-fns/add';\nimport differenceInMilliseconds from 'date-fns/differenceInMilliseconds';\nimport isAfter from 'date-fns/isAfter';\nimport sub from 'date-fns/sub';\n\nexport class Token {\n public constructor(\n public readonly token: string,\n public readonly expiresIn: number,\n public readonly expiresAt: Date,\n ) {}\n\n public static create(token: string, expiresIn: number): Token {\n const expiresAt = add(new Date(), { seconds: expiresIn });\n return new Token(token, expiresIn, expiresAt);\n }\n\n public hasExpired(): boolean {\n return isAfter(new Date(), this.expiresAt);\n }\n\n public remainingTimeInMs(offsetInSeconds: number): number {\n return differenceInMilliseconds(\n sub(this.expiresAt, { seconds: offsetInSeconds }),\n new Date(),\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"axis-lines.js","sourceRoot":"","sources":["../../../../../src/lib/transforms/axis-lines.ts"],"names":[],"mappings":"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","sourcesContent":["import { Matrix4, Ray, Vector3 } from '@vertexvis/geometry';\n\nimport { FrameCameraBase } from '../types';\nimport { AxisLinePoints, RotationLinePoints } from './line';\nimport { TriangleMesh } from './mesh';\n\nexport function axisPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n arrowMesh: TriangleMesh\n): AxisLinePoints {\n const position = Vector3.fromMatrixPosition(widgetTransform);\n return new AxisLinePoints(\n arrowMesh.points.valid,\n position,\n arrowMesh.points.worldBase,\n Vector3.transformMatrix(position, camera.projectionViewMatrix),\n arrowMesh.points.base\n );\n}\n\nexport function rotationAxisPositions(\n camera: FrameCameraBase,\n rotationMesh?: TriangleMesh,\n towardPoint?: Vector3.Vector3,\n triangleSize = 3\n): RotationLinePoints | undefined {\n if (rotationMesh != null && towardPoint != null) {\n const baseDistance = Vector3.distance(\n rotationMesh.points.worldBase,\n towardPoint\n );\n const tipDistance = Vector3.distance(\n rotationMesh.points.worldTip,\n towardPoint\n );\n\n const origin =\n baseDistance < tipDistance\n ? rotationMesh.points.worldBase\n : rotationMesh.points.worldTip;\n const middle = Vector3.scale(0.5, Vector3.add(origin, towardPoint));\n\n const centerPointRay = Ray.create({\n origin: middle,\n direction: Vector3.normalize(\n Vector3.subtract(\n rotationMesh.points.worldRight,\n rotationMesh.points.worldLeft\n )\n ),\n });\n\n const worldPoints = [0, 0.05, 0.1, 0.15].map((v) =>\n computeQuadraticBezierCurvePoint(\n origin,\n Ray.at(centerPointRay, triangleSize * 2),\n towardPoint,\n v\n )\n );\n\n return new RotationLinePoints(\n rotationMesh.points.valid,\n worldPoints,\n worldPoints.map((p) =>\n Vector3.transformMatrix(p, camera.projectionViewMatrix)\n )\n );\n }\n return undefined;\n}\n\nfunction computeQuadraticBezierCurvePoint(\n start: Vector3.Vector3,\n control: Vector3.Vector3,\n end: Vector3.Vector3,\n distance: number\n): Vector3.Vector3 {\n const distanceInverse = 1 - distance;\n const startScalar = distanceInverse * distanceInverse;\n const controlScalar = 2 * distanceInverse * distance;\n const endScalar = distance * distance;\n\n return Vector3.create(\n startScalar * start.x + controlScalar * control.x + endScalar * end.x,\n startScalar * start.y + controlScalar * control.y + endScalar * end.y,\n startScalar * start.z + controlScalar * control.z + endScalar * end.z\n );\n}\n"]}
1
+ {"version":3,"file":"axis-lines.js","sourceRoot":"","sources":["../../../../../src/lib/transforms/axis-lines.ts"],"names":[],"mappings":"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","sourcesContent":["import { Matrix4, Ray, Vector3 } from '@vertexvis/geometry';\n\nimport { FrameCameraBase } from '../types';\nimport { AxisLinePoints, RotationLinePoints } from './line';\nimport { TriangleMesh } from './mesh';\n\nexport function axisPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n arrowMesh: TriangleMesh,\n): AxisLinePoints {\n const position = Vector3.fromMatrixPosition(widgetTransform);\n return new AxisLinePoints(\n arrowMesh.points.valid,\n position,\n arrowMesh.points.worldBase,\n Vector3.transformMatrix(position, camera.projectionViewMatrix),\n arrowMesh.points.base,\n );\n}\n\nexport function rotationAxisPositions(\n camera: FrameCameraBase,\n rotationMesh?: TriangleMesh,\n towardPoint?: Vector3.Vector3,\n triangleSize = 3,\n): RotationLinePoints | undefined {\n if (rotationMesh != null && towardPoint != null) {\n const baseDistance = Vector3.distance(\n rotationMesh.points.worldBase,\n towardPoint,\n );\n const tipDistance = Vector3.distance(\n rotationMesh.points.worldTip,\n towardPoint,\n );\n\n const origin =\n baseDistance < tipDistance\n ? rotationMesh.points.worldBase\n : rotationMesh.points.worldTip;\n const middle = Vector3.scale(0.5, Vector3.add(origin, towardPoint));\n\n const centerPointRay = Ray.create({\n origin: middle,\n direction: Vector3.normalize(\n Vector3.subtract(\n rotationMesh.points.worldRight,\n rotationMesh.points.worldLeft,\n ),\n ),\n });\n\n const worldPoints = [0, 0.05, 0.1, 0.15].map((v) =>\n computeQuadraticBezierCurvePoint(\n origin,\n Ray.at(centerPointRay, triangleSize * 2),\n towardPoint,\n v,\n ),\n );\n\n return new RotationLinePoints(\n rotationMesh.points.valid,\n worldPoints,\n worldPoints.map((p) =>\n Vector3.transformMatrix(p, camera.projectionViewMatrix),\n ),\n );\n }\n return undefined;\n}\n\nfunction computeQuadraticBezierCurvePoint(\n start: Vector3.Vector3,\n control: Vector3.Vector3,\n end: Vector3.Vector3,\n distance: number,\n): Vector3.Vector3 {\n const distanceInverse = 1 - distance;\n const startScalar = distanceInverse * distanceInverse;\n const controlScalar = 2 * distanceInverse * distance;\n const endScalar = distance * distance;\n\n return Vector3.create(\n startScalar * start.x + controlScalar * control.x + endScalar * end.x,\n startScalar * start.y + controlScalar * control.y + endScalar * end.y,\n startScalar * start.z + controlScalar * control.z + endScalar * end.z,\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"axis-rotation.js","sourceRoot":"","sources":["../../../../../src/lib/transforms/axis-rotation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Angle, Matrix4, Quaternion, Ray, Vector3 } from '@vertexvis/geometry';\n\nimport { FrameCameraBase } from '../types';\nimport { TriangleMeshPoints } from './mesh';\n\nexport function xAxisRotationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3,\n rotationSizeScalar = 1,\n translationSizeScalar = 1\n): TriangleMeshPoints {\n return computeRotationNdcValues(\n widgetTransform,\n camera,\n Vector3.back(),\n Vector3.up(),\n triangleSize,\n rotationSizeScalar,\n translationSizeScalar\n );\n}\n\nexport function yAxisRotationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3,\n rotationSizeScalar = 1,\n translationSizeScalar = 1\n): TriangleMeshPoints {\n return computeRotationNdcValues(\n widgetTransform,\n camera,\n Vector3.right(),\n Vector3.back(),\n triangleSize,\n rotationSizeScalar,\n translationSizeScalar\n );\n}\n\nexport function zAxisRotationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3,\n rotationSizeScalar = 1,\n translationSizeScalar = 1\n): TriangleMeshPoints {\n return computeRotationNdcValues(\n widgetTransform,\n camera,\n Vector3.right(),\n Vector3.up(),\n triangleSize,\n rotationSizeScalar,\n translationSizeScalar\n );\n}\n\nfunction computeRotationNdcValues(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n xDirection: Vector3.Vector3,\n yDirection: Vector3.Vector3,\n triangleSize: number,\n rotationSizeScalar = 1,\n translationSizeScalar = 1\n): TriangleMeshPoints {\n const transformedDirection = Vector3.transformMatrix(\n Vector3.add(xDirection, yDirection),\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform))\n );\n const transformedX = Vector3.transformMatrix(\n xDirection,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform))\n );\n const transformedY = Vector3.transformMatrix(\n yDirection,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform))\n );\n // Position the rotation handle relative to the translation scale to\n // ensure that the rotation axis lines are angled inward.\n // This is a loose line of best fit based on the base scale of\n // `1` corresponding to a scalar of `10` and some experimentation.\n const relativePositionScalar = 10 * translationSizeScalar ** 0.25;\n\n const basePosition = Vector3.fromMatrixPosition(widgetTransform);\n const position = Vector3.add(\n basePosition,\n Vector3.scale(triangleSize * relativePositionScalar, transformedDirection)\n );\n\n const xRay = Ray.create({\n origin: position,\n direction: transformedX,\n });\n const yRay = Ray.create({\n origin: position,\n direction: transformedY,\n });\n const rotationAxis = Vector3.cross(transformedX, transformedY);\n\n const base = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(yRay, -(triangleSize * rotationSizeScalar)),\n rotationAxis,\n position\n );\n const right = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(xRay, triangleSize * rotationSizeScalar),\n rotationAxis,\n position\n );\n const up = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(yRay, triangleSize * rotationSizeScalar),\n rotationAxis,\n position\n );\n const left = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(xRay, -(triangleSize * rotationSizeScalar)),\n rotationAxis,\n position\n );\n\n return new TriangleMeshPoints(\n Vector3.dot(transformedX, camera.direction) !== -1 &&\n Vector3.dot(transformedY, camera.direction) !== -1,\n base,\n left,\n right,\n up,\n Vector3.transformMatrix(base, camera.projectionViewMatrix),\n Vector3.transformMatrix(left, camera.projectionViewMatrix),\n Vector3.transformMatrix(right, camera.projectionViewMatrix),\n Vector3.transformMatrix(up, camera.projectionViewMatrix)\n );\n}\n"]}
1
+ {"version":3,"file":"axis-rotation.js","sourceRoot":"","sources":["../../../../../src/lib/transforms/axis-rotation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Angle, Matrix4, Quaternion, Ray, Vector3 } from '@vertexvis/geometry';\n\nimport { FrameCameraBase } from '../types';\nimport { TriangleMeshPoints } from './mesh';\n\nexport function xAxisRotationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3,\n rotationSizeScalar = 1,\n translationSizeScalar = 1,\n): TriangleMeshPoints {\n return computeRotationNdcValues(\n widgetTransform,\n camera,\n Vector3.back(),\n Vector3.up(),\n triangleSize,\n rotationSizeScalar,\n translationSizeScalar,\n );\n}\n\nexport function yAxisRotationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3,\n rotationSizeScalar = 1,\n translationSizeScalar = 1,\n): TriangleMeshPoints {\n return computeRotationNdcValues(\n widgetTransform,\n camera,\n Vector3.right(),\n Vector3.back(),\n triangleSize,\n rotationSizeScalar,\n translationSizeScalar,\n );\n}\n\nexport function zAxisRotationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3,\n rotationSizeScalar = 1,\n translationSizeScalar = 1,\n): TriangleMeshPoints {\n return computeRotationNdcValues(\n widgetTransform,\n camera,\n Vector3.right(),\n Vector3.up(),\n triangleSize,\n rotationSizeScalar,\n translationSizeScalar,\n );\n}\n\nfunction computeRotationNdcValues(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n xDirection: Vector3.Vector3,\n yDirection: Vector3.Vector3,\n triangleSize: number,\n rotationSizeScalar = 1,\n translationSizeScalar = 1,\n): TriangleMeshPoints {\n const transformedDirection = Vector3.transformMatrix(\n Vector3.add(xDirection, yDirection),\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform)),\n );\n const transformedX = Vector3.transformMatrix(\n xDirection,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform)),\n );\n const transformedY = Vector3.transformMatrix(\n yDirection,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform)),\n );\n // Position the rotation handle relative to the translation scale to\n // ensure that the rotation axis lines are angled inward.\n // This is a loose line of best fit based on the base scale of\n // `1` corresponding to a scalar of `10` and some experimentation.\n const relativePositionScalar = 10 * translationSizeScalar ** 0.25;\n\n const basePosition = Vector3.fromMatrixPosition(widgetTransform);\n const position = Vector3.add(\n basePosition,\n Vector3.scale(triangleSize * relativePositionScalar, transformedDirection),\n );\n\n const xRay = Ray.create({\n origin: position,\n direction: transformedX,\n });\n const yRay = Ray.create({\n origin: position,\n direction: transformedY,\n });\n const rotationAxis = Vector3.cross(transformedX, transformedY);\n\n const base = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(yRay, -(triangleSize * rotationSizeScalar)),\n rotationAxis,\n position,\n );\n const right = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(xRay, triangleSize * rotationSizeScalar),\n rotationAxis,\n position,\n );\n const up = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(yRay, triangleSize * rotationSizeScalar),\n rotationAxis,\n position,\n );\n const left = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(xRay, -(triangleSize * rotationSizeScalar)),\n rotationAxis,\n position,\n );\n\n return new TriangleMeshPoints(\n Vector3.dot(transformedX, camera.direction) !== -1 &&\n Vector3.dot(transformedY, camera.direction) !== -1,\n base,\n left,\n right,\n up,\n Vector3.transformMatrix(base, camera.projectionViewMatrix),\n Vector3.transformMatrix(left, camera.projectionViewMatrix),\n Vector3.transformMatrix(right, camera.projectionViewMatrix),\n Vector3.transformMatrix(up, camera.projectionViewMatrix),\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"axis-translation.js","sourceRoot":"","sources":["../../../../../src/lib/transforms/axis-translation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Angle, Matrix4, Quaternion, Ray, Vector3 } from '@vertexvis/geometry';\n\nimport { FrameCameraBase } from '../types';\nimport { TriangleMeshPoints } from './mesh';\n\nexport function xAxisArrowPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3,\n sizeScalar = 1\n): TriangleMeshPoints {\n return computeArrowNdcValues(\n widgetTransform,\n camera,\n Vector3.right(),\n triangleSize,\n sizeScalar\n );\n}\n\nexport function yAxisArrowPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3,\n sizeScalar = 1\n): TriangleMeshPoints {\n return computeArrowNdcValues(\n widgetTransform,\n camera,\n Vector3.up(),\n triangleSize,\n sizeScalar\n );\n}\n\nexport function zAxisArrowPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3,\n sizeScalar = 1\n): TriangleMeshPoints {\n return computeArrowNdcValues(\n widgetTransform,\n camera,\n Vector3.back(),\n triangleSize,\n sizeScalar\n );\n}\n\nexport function computeArrowNdcValues(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n direction: Vector3.Vector3,\n triangleSize: number,\n sizeScalar = 1\n): TriangleMeshPoints {\n const transformedDirection = Vector3.transformMatrix(\n direction,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform))\n );\n\n const basePosition = Vector3.fromMatrixPosition(widgetTransform);\n const position = Vector3.add(\n basePosition,\n Vector3.scale(triangleSize * 9, transformedDirection)\n );\n\n const worldX = Vector3.normalize(\n Vector3.cross(transformedDirection, Vector3.normalize(camera.viewVector))\n );\n const xRay = Ray.create({\n origin: position,\n direction: worldX,\n });\n const yRay = Ray.create({\n origin: position,\n direction: transformedDirection,\n });\n\n const left = Ray.at(xRay, -(triangleSize * sizeScalar * 1.25));\n const right = Ray.at(xRay, triangleSize * sizeScalar * 1.25);\n const up = Ray.at(yRay, triangleSize * sizeScalar * 3);\n\n return new TriangleMeshPoints(\n !isNaN(worldX.x),\n position,\n left,\n right,\n up,\n Vector3.transformMatrix(position, camera.projectionViewMatrix),\n Vector3.transformMatrix(left, camera.projectionViewMatrix),\n Vector3.transformMatrix(right, camera.projectionViewMatrix),\n Vector3.transformMatrix(up, camera.projectionViewMatrix)\n );\n}\n\nexport function xyAxisTranslationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3,\n rotationSizeScalar = 1\n): TriangleMeshPoints {\n return computeTwoAxisTranslationNdcValues(\n widgetTransform,\n camera,\n Vector3.right(),\n Vector3.up(),\n triangleSize,\n rotationSizeScalar\n );\n}\n\nexport function xzAxisTranslationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3,\n rotationSizeScalar = 1\n): TriangleMeshPoints {\n return computeTwoAxisTranslationNdcValues(\n widgetTransform,\n camera,\n Vector3.right(),\n Vector3.back(),\n triangleSize,\n rotationSizeScalar\n );\n}\n\nexport function yzAxisTranslationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3,\n rotationSizeScalar = 1\n): TriangleMeshPoints {\n return computeTwoAxisTranslationNdcValues(\n widgetTransform,\n camera,\n Vector3.back(),\n Vector3.up(),\n triangleSize,\n rotationSizeScalar\n );\n}\n\nfunction computeTwoAxisTranslationNdcValues(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n xDirection: Vector3.Vector3,\n yDirection: Vector3.Vector3,\n triangleSize: number,\n rotationSizeScalar = 1\n): TriangleMeshPoints {\n const transformedDirection = Vector3.transformMatrix(\n Vector3.add(xDirection, yDirection),\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform))\n );\n const transformedX = Vector3.transformMatrix(\n xDirection,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform))\n );\n const transformedY = Vector3.transformMatrix(\n yDirection,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform))\n );\n\n const basePosition = Vector3.fromMatrixPosition(widgetTransform);\n const position = Vector3.add(\n basePosition,\n Vector3.scale(triangleSize * 2.5, transformedDirection)\n );\n\n const xRay = Ray.create({\n origin: position,\n direction: transformedX,\n });\n const yRay = Ray.create({\n origin: position,\n direction: transformedY,\n });\n const rotationAxis = Vector3.cross(transformedX, transformedY);\n\n const base = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(yRay, -(triangleSize * rotationSizeScalar)),\n rotationAxis,\n position\n );\n const right = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(xRay, triangleSize * rotationSizeScalar),\n rotationAxis,\n position\n );\n const up = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(yRay, triangleSize * rotationSizeScalar),\n rotationAxis,\n position\n );\n const left = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(xRay, -(triangleSize * rotationSizeScalar)),\n rotationAxis,\n position\n );\n\n return new TriangleMeshPoints(\n Vector3.dot(transformedX, camera.direction) !== -1 &&\n Vector3.dot(transformedY, camera.direction) !== -1,\n base,\n left,\n right,\n up,\n Vector3.transformMatrix(base, camera.projectionViewMatrix),\n Vector3.transformMatrix(left, camera.projectionViewMatrix),\n Vector3.transformMatrix(right, camera.projectionViewMatrix),\n Vector3.transformMatrix(up, camera.projectionViewMatrix)\n );\n}\n"]}
1
+ {"version":3,"file":"axis-translation.js","sourceRoot":"","sources":["../../../../../src/lib/transforms/axis-translation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Angle, Matrix4, Quaternion, Ray, Vector3 } from '@vertexvis/geometry';\n\nimport { FrameCameraBase } from '../types';\nimport { TriangleMeshPoints } from './mesh';\n\nexport function xAxisArrowPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3,\n sizeScalar = 1,\n): TriangleMeshPoints {\n return computeArrowNdcValues(\n widgetTransform,\n camera,\n Vector3.right(),\n triangleSize,\n sizeScalar,\n );\n}\n\nexport function yAxisArrowPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3,\n sizeScalar = 1,\n): TriangleMeshPoints {\n return computeArrowNdcValues(\n widgetTransform,\n camera,\n Vector3.up(),\n triangleSize,\n sizeScalar,\n );\n}\n\nexport function zAxisArrowPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3,\n sizeScalar = 1,\n): TriangleMeshPoints {\n return computeArrowNdcValues(\n widgetTransform,\n camera,\n Vector3.back(),\n triangleSize,\n sizeScalar,\n );\n}\n\nexport function computeArrowNdcValues(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n direction: Vector3.Vector3,\n triangleSize: number,\n sizeScalar = 1,\n): TriangleMeshPoints {\n const transformedDirection = Vector3.transformMatrix(\n direction,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform)),\n );\n\n const basePosition = Vector3.fromMatrixPosition(widgetTransform);\n const position = Vector3.add(\n basePosition,\n Vector3.scale(triangleSize * 9, transformedDirection),\n );\n\n const worldX = Vector3.normalize(\n Vector3.cross(transformedDirection, Vector3.normalize(camera.viewVector)),\n );\n const xRay = Ray.create({\n origin: position,\n direction: worldX,\n });\n const yRay = Ray.create({\n origin: position,\n direction: transformedDirection,\n });\n\n const left = Ray.at(xRay, -(triangleSize * sizeScalar * 1.25));\n const right = Ray.at(xRay, triangleSize * sizeScalar * 1.25);\n const up = Ray.at(yRay, triangleSize * sizeScalar * 3);\n\n return new TriangleMeshPoints(\n !isNaN(worldX.x),\n position,\n left,\n right,\n up,\n Vector3.transformMatrix(position, camera.projectionViewMatrix),\n Vector3.transformMatrix(left, camera.projectionViewMatrix),\n Vector3.transformMatrix(right, camera.projectionViewMatrix),\n Vector3.transformMatrix(up, camera.projectionViewMatrix),\n );\n}\n\nexport function xyAxisTranslationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3,\n rotationSizeScalar = 1,\n): TriangleMeshPoints {\n return computeTwoAxisTranslationNdcValues(\n widgetTransform,\n camera,\n Vector3.right(),\n Vector3.up(),\n triangleSize,\n rotationSizeScalar,\n );\n}\n\nexport function xzAxisTranslationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3,\n rotationSizeScalar = 1,\n): TriangleMeshPoints {\n return computeTwoAxisTranslationNdcValues(\n widgetTransform,\n camera,\n Vector3.right(),\n Vector3.back(),\n triangleSize,\n rotationSizeScalar,\n );\n}\n\nexport function yzAxisTranslationPositions(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n triangleSize = 3,\n rotationSizeScalar = 1,\n): TriangleMeshPoints {\n return computeTwoAxisTranslationNdcValues(\n widgetTransform,\n camera,\n Vector3.back(),\n Vector3.up(),\n triangleSize,\n rotationSizeScalar,\n );\n}\n\nfunction computeTwoAxisTranslationNdcValues(\n widgetTransform: Matrix4.Matrix4,\n camera: FrameCameraBase,\n xDirection: Vector3.Vector3,\n yDirection: Vector3.Vector3,\n triangleSize: number,\n rotationSizeScalar = 1,\n): TriangleMeshPoints {\n const transformedDirection = Vector3.transformMatrix(\n Vector3.add(xDirection, yDirection),\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform)),\n );\n const transformedX = Vector3.transformMatrix(\n xDirection,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform)),\n );\n const transformedY = Vector3.transformMatrix(\n yDirection,\n Matrix4.makeRotation(Quaternion.fromMatrixRotation(widgetTransform)),\n );\n\n const basePosition = Vector3.fromMatrixPosition(widgetTransform);\n const position = Vector3.add(\n basePosition,\n Vector3.scale(triangleSize * 2.5, transformedDirection),\n );\n\n const xRay = Ray.create({\n origin: position,\n direction: transformedX,\n });\n const yRay = Ray.create({\n origin: position,\n direction: transformedY,\n });\n const rotationAxis = Vector3.cross(transformedX, transformedY);\n\n const base = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(yRay, -(triangleSize * rotationSizeScalar)),\n rotationAxis,\n position,\n );\n const right = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(xRay, triangleSize * rotationSizeScalar),\n rotationAxis,\n position,\n );\n const up = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(yRay, triangleSize * rotationSizeScalar),\n rotationAxis,\n position,\n );\n const left = Vector3.rotateAboutAxis(\n Angle.toRadians(45),\n Ray.at(xRay, -(triangleSize * rotationSizeScalar)),\n rotationAxis,\n position,\n );\n\n return new TriangleMeshPoints(\n Vector3.dot(transformedX, camera.direction) !== -1 &&\n Vector3.dot(transformedY, camera.direction) !== -1,\n base,\n left,\n right,\n up,\n Vector3.transformMatrix(base, camera.projectionViewMatrix),\n Vector3.transformMatrix(left, camera.projectionViewMatrix),\n Vector3.transformMatrix(right, camera.projectionViewMatrix),\n Vector3.transformMatrix(up, camera.projectionViewMatrix),\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../../../../src/lib/transforms/controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { vertexvis } from '@vertexvis/frame-streaming-protos';\nimport { Matrix4, Vector3 } from '@vertexvis/geometry';\nimport { StreamApi } from '@vertexvis/stream-api';\n\nexport class TransformController {\n private isTransforming = false;\n private previousDelta?: Matrix4.Matrix4;\n private currentDelta: Matrix4.Matrix4 = Matrix4.makeIdentity();\n private endDebounceTimeout?: NodeJS.Timeout;\n\n public constructor(private stream: StreamApi) {}\n\n public async dispose(): Promise<void> {\n if (this.isTransforming) {\n this.endTransform();\n }\n }\n\n public async beginTransform(\n delta: Matrix4.Matrix4 = Matrix4.makeIdentity()\n ): Promise<void> {\n this.clearEndInteractionTimeout();\n\n if (!this.isTransforming) {\n this.currentDelta = delta;\n this.isTransforming = true;\n\n console.debug('Beginning transform interaction');\n\n await this.stream.beginInteraction({\n transform: {\n delta: this.toDeltaTransform(delta),\n },\n });\n }\n }\n\n public async updateTransform(delta: Matrix4.Matrix4): Promise<void> {\n this.currentDelta = delta;\n\n await this.stream.updateInteraction({\n transform: {\n delta: this.toDeltaTransform(this.currentDelta, true),\n },\n });\n }\n\n public async updateTranslation(delta: Vector3.Vector3): Promise<void> {\n this.currentDelta = Matrix4.makeTranslation(delta);\n\n await this.stream.updateInteraction({\n transform: {\n delta: this.toDeltaTransform(this.currentDelta),\n },\n });\n }\n\n public getCurrentDelta(): Matrix4.Matrix4 | undefined {\n return this.currentDelta;\n }\n\n public async endTransform(): Promise<void> {\n if (this.isTransforming) {\n await this.endInteraction();\n }\n }\n\n public async endTransformDebounced(\n startCallback?: VoidFunction,\n endCallback?: VoidFunction\n ): Promise<void> {\n if (this.isTransforming) {\n this.restartEndInteractionTimeout(startCallback, endCallback);\n }\n }\n\n public clearTransform(): void {\n this.currentDelta = Matrix4.makeIdentity();\n this.previousDelta = undefined;\n this.endTransform();\n }\n\n public async EXPERIMENTAL_undoTransform(): Promise<\n Matrix4.Matrix4 | undefined\n > {\n if (this.previousDelta != null) {\n const undoDelta = Matrix4.invert(this.previousDelta);\n\n console.debug(`Undo of previous transform [delta-applied=${undoDelta}]`);\n\n await this.beginTransform();\n await this.updateTransform(Matrix4.invert(this.previousDelta));\n await this.endTransform();\n\n this.previousDelta = undefined;\n\n return undoDelta;\n } else {\n console.debug('No previous transform to undo.');\n }\n }\n\n private async endInteraction(): Promise<void> {\n console.debug(`Ending transform interaction [delta=${this.currentDelta}]`);\n\n this.clearEndInteractionTimeout();\n\n this.previousDelta = this.currentDelta;\n await this.stream.endInteraction({\n transform: {\n delta: this.toDeltaTransform(this.currentDelta),\n },\n });\n this.isTransforming = false;\n this.currentDelta = Matrix4.makeIdentity();\n }\n\n private restartEndInteractionTimeout(\n startCallback?: VoidFunction,\n endCallback?: VoidFunction\n ): void {\n this.clearEndInteractionTimeout();\n\n this.endDebounceTimeout = setTimeout(async () => {\n startCallback?.();\n await this.endInteraction();\n endCallback?.();\n }, 500);\n }\n\n private clearEndInteractionTimeout(): void {\n if (this.endDebounceTimeout != null) {\n clearTimeout(this.endDebounceTimeout);\n this.endDebounceTimeout = undefined;\n }\n }\n\n private toDeltaTransform(\n delta: Matrix4.Matrix4,\n columnMajor = false\n ): vertexvis.protobuf.core.IAffineMatrix4f {\n const asObject = Matrix4.toObject(delta);\n\n // TODO: update this to pass a single order for the\n // transform matrix after work in https://vertexvis.atlassian.net/browse/PLAT-1582\n const basisX = columnMajor\n ? {\n x: asObject.m11,\n y: asObject.m21,\n z: asObject.m31,\n }\n : {\n x: asObject.m11,\n y: asObject.m12,\n z: asObject.m13,\n };\n const basisY = columnMajor\n ? {\n x: asObject.m12,\n y: asObject.m22,\n z: asObject.m32,\n }\n : {\n x: asObject.m21,\n y: asObject.m22,\n z: asObject.m23,\n };\n const basisZ = columnMajor\n ? {\n x: asObject.m13,\n y: asObject.m23,\n z: asObject.m33,\n }\n : {\n x: asObject.m31,\n y: asObject.m32,\n z: asObject.m33,\n };\n\n return {\n basisX,\n basisY,\n basisZ,\n xlate: {\n x: asObject.m14,\n y: asObject.m24,\n z: asObject.m34,\n },\n scale: asObject.m44,\n };\n }\n}\n"]}
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../../../../src/lib/transforms/controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { vertexvis } from '@vertexvis/frame-streaming-protos';\nimport { Matrix4, Vector3 } from '@vertexvis/geometry';\nimport { StreamApi } from '@vertexvis/stream-api';\n\nexport class TransformController {\n private isTransforming = false;\n private previousDelta?: Matrix4.Matrix4;\n private currentDelta: Matrix4.Matrix4 = Matrix4.makeIdentity();\n private endDebounceTimeout?: NodeJS.Timeout;\n\n public constructor(private stream: StreamApi) {}\n\n public async dispose(): Promise<void> {\n if (this.isTransforming) {\n this.endTransform();\n }\n }\n\n public async beginTransform(\n delta: Matrix4.Matrix4 = Matrix4.makeIdentity(),\n ): Promise<void> {\n this.clearEndInteractionTimeout();\n\n if (!this.isTransforming) {\n this.currentDelta = delta;\n this.isTransforming = true;\n\n console.debug('Beginning transform interaction');\n\n await this.stream.beginInteraction({\n transform: {\n delta: this.toDeltaTransform(delta),\n },\n });\n }\n }\n\n public async updateTransform(delta: Matrix4.Matrix4): Promise<void> {\n this.currentDelta = delta;\n\n await this.stream.updateInteraction({\n transform: {\n delta: this.toDeltaTransform(this.currentDelta, true),\n },\n });\n }\n\n public async updateTranslation(delta: Vector3.Vector3): Promise<void> {\n this.currentDelta = Matrix4.makeTranslation(delta);\n\n await this.stream.updateInteraction({\n transform: {\n delta: this.toDeltaTransform(this.currentDelta),\n },\n });\n }\n\n public getCurrentDelta(): Matrix4.Matrix4 | undefined {\n return this.currentDelta;\n }\n\n public async endTransform(): Promise<void> {\n if (this.isTransforming) {\n await this.endInteraction();\n }\n }\n\n public async endTransformDebounced(\n startCallback?: VoidFunction,\n endCallback?: VoidFunction,\n ): Promise<void> {\n if (this.isTransforming) {\n this.restartEndInteractionTimeout(startCallback, endCallback);\n }\n }\n\n public clearTransform(): void {\n this.currentDelta = Matrix4.makeIdentity();\n this.previousDelta = undefined;\n this.endTransform();\n }\n\n public async EXPERIMENTAL_undoTransform(): Promise<\n Matrix4.Matrix4 | undefined\n > {\n if (this.previousDelta != null) {\n const undoDelta = Matrix4.invert(this.previousDelta);\n\n console.debug(`Undo of previous transform [delta-applied=${undoDelta}]`);\n\n await this.beginTransform();\n await this.updateTransform(Matrix4.invert(this.previousDelta));\n await this.endTransform();\n\n this.previousDelta = undefined;\n\n return undoDelta;\n } else {\n console.debug('No previous transform to undo.');\n }\n }\n\n private async endInteraction(): Promise<void> {\n console.debug(`Ending transform interaction [delta=${this.currentDelta}]`);\n\n this.clearEndInteractionTimeout();\n\n this.previousDelta = this.currentDelta;\n await this.stream.endInteraction({\n transform: {\n delta: this.toDeltaTransform(this.currentDelta),\n },\n });\n this.isTransforming = false;\n this.currentDelta = Matrix4.makeIdentity();\n }\n\n private restartEndInteractionTimeout(\n startCallback?: VoidFunction,\n endCallback?: VoidFunction,\n ): void {\n this.clearEndInteractionTimeout();\n\n this.endDebounceTimeout = setTimeout(async () => {\n startCallback?.();\n await this.endInteraction();\n endCallback?.();\n }, 500);\n }\n\n private clearEndInteractionTimeout(): void {\n if (this.endDebounceTimeout != null) {\n clearTimeout(this.endDebounceTimeout);\n this.endDebounceTimeout = undefined;\n }\n }\n\n private toDeltaTransform(\n delta: Matrix4.Matrix4,\n columnMajor = false,\n ): vertexvis.protobuf.core.IAffineMatrix4f {\n const asObject = Matrix4.toObject(delta);\n\n // TODO: update this to pass a single order for the\n // transform matrix after work in https://vertexvis.atlassian.net/browse/PLAT-1582\n const basisX = columnMajor\n ? {\n x: asObject.m11,\n y: asObject.m21,\n z: asObject.m31,\n }\n : {\n x: asObject.m11,\n y: asObject.m12,\n z: asObject.m13,\n };\n const basisY = columnMajor\n ? {\n x: asObject.m12,\n y: asObject.m22,\n z: asObject.m32,\n }\n : {\n x: asObject.m21,\n y: asObject.m22,\n z: asObject.m23,\n };\n const basisZ = columnMajor\n ? {\n x: asObject.m13,\n y: asObject.m23,\n z: asObject.m33,\n }\n : {\n x: asObject.m31,\n y: asObject.m32,\n z: asObject.m33,\n };\n\n return {\n basisX,\n basisY,\n basisZ,\n xlate: {\n x: asObject.m14,\n y: asObject.m24,\n z: asObject.m34,\n },\n scale: asObject.m44,\n };\n }\n}\n"]}