@vertexvis/viewer 1.1.1-testing.3 → 1.1.1-testing.5

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 (476) hide show
  1. package/README.template.md +14 -8
  2. package/dist/cjs/{bundle-07I6_WqC.js → bundle-BCS0nA91.js} +28 -25
  3. package/dist/cjs/bundle-BCS0nA91.js.map +1 -0
  4. package/dist/cjs/{config-CepHuwRF.js → config-OELTgslY.js} +3 -3
  5. package/dist/cjs/{config-CepHuwRF.js.map → config-OELTgslY.js.map} +1 -1
  6. package/dist/cjs/{controller-Dklbe0Y6.js → controller-DvE3p6ta.js} +3 -3
  7. package/dist/cjs/{controller-Dklbe0Y6.js.map → controller-DvE3p6ta.js.map} +1 -1
  8. package/dist/cjs/{dom-Dlu6-7PF.js → dom-BuQSLPWr.js} +3 -3
  9. package/dist/cjs/{dom-Dlu6-7PF.js.map → dom-BuQSLPWr.js.map} +1 -1
  10. package/dist/cjs/{entities-BdWnb6KI.js → entities-rj-TEPKc.js} +4 -4
  11. package/dist/cjs/{entities-BdWnb6KI.js.map → entities-rj-TEPKc.js.map} +1 -1
  12. package/dist/cjs/{geometry_pb-BISQT2vx.js → geometry_pb-asn2mNvW.js} +3 -3
  13. package/dist/cjs/{geometry_pb-BISQT2vx.js.map → geometry_pb-asn2mNvW.js.map} +1 -1
  14. package/dist/cjs/grpc-D5Apx_zz.js.map +1 -1
  15. package/dist/cjs/index.cjs.js +13 -13
  16. package/dist/cjs/loader.cjs.js +1 -1
  17. package/dist/cjs/{markup-C-qyTwID.js → markup-Du4uVRo4.js} +3 -3
  18. package/dist/cjs/{markup-C-qyTwID.js.map → markup-Du4uVRo4.js.map} +1 -1
  19. package/dist/cjs/{model-Dy5FvjIA.js → model-BC6acIWJ.js} +3 -3
  20. package/dist/cjs/{model-Dy5FvjIA.js.map → model-BC6acIWJ.js.map} +1 -1
  21. package/dist/cjs/model-Bw4h8wNt.js.map +1 -1
  22. package/dist/cjs/{model-k5VBFN6C.js → model-DqxeakCS.js} +3 -3
  23. package/dist/cjs/{model-k5VBFN6C.js.map → model-DqxeakCS.js.map} +1 -1
  24. package/dist/cjs/{multiElementInteractionHandler-Bqpg2wVT.js → multiElementInteractionHandler-Bdeo6FYp.js} +6 -5
  25. package/dist/cjs/multiElementInteractionHandler-Bdeo6FYp.js.map +1 -0
  26. package/dist/cjs/{overlays-BujVkBnG.js → overlays-DASFbMSp.js} +3 -3
  27. package/dist/cjs/{overlays-BujVkBnG.js.map → overlays-DASFbMSp.js.map} +1 -1
  28. package/dist/cjs/{queries-GhYmoomu.js → queries-e19TP_oF.js} +5 -5
  29. package/dist/cjs/queries-e19TP_oF.js.map +1 -0
  30. package/dist/cjs/{regl-component-CB004H91.js → regl-component-DjVaO3t3.js} +6 -6
  31. package/dist/cjs/{regl-component-CB004H91.js.map → regl-component-DjVaO3t3.js.map} +1 -1
  32. package/dist/cjs/{representation_pb-CHCm5o1e.js → representation_pb-BVBPrHLf.js} +3 -3
  33. package/dist/cjs/{representation_pb-CHCm5o1e.js.map → representation_pb-BVBPrHLf.js.map} +1 -1
  34. package/dist/cjs/{results-BpfUIwa8.js → results-CU9Ctm2K.js} +3 -3
  35. package/dist/cjs/{results-BpfUIwa8.js.map → results-CU9Ctm2K.js.map} +1 -1
  36. package/dist/cjs/{streamAttributes-CJOD7AxG.js → streamAttributes-M3UUIO3l.js} +118 -95
  37. package/dist/cjs/streamAttributes-M3UUIO3l.js.map +1 -0
  38. package/dist/cjs/{util-smaTO4bk.js → util-gX3IGslq.js} +3 -3
  39. package/dist/cjs/{util-smaTO4bk.js.map → util-gX3IGslq.js.map} +1 -1
  40. package/dist/cjs/{utils-BsXO-wLi.js → utils-D5TGpFAV.js} +3 -3
  41. package/dist/cjs/utils-D5TGpFAV.js.map +1 -0
  42. package/dist/cjs/{utils-DY6afhh8.js → utils-opS9hsaU.js} +3 -3
  43. package/dist/cjs/{utils-DY6afhh8.js.map → utils-opS9hsaU.js.map} +1 -1
  44. package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js +2 -2
  45. package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js.map +1 -1
  46. package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +3 -3
  47. package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js.map +1 -1
  48. package/dist/cjs/vertex-scene-tree-table-column.cjs.entry.js.map +1 -1
  49. package/dist/cjs/vertex-scene-tree.cjs.entry.js +3 -3
  50. package/dist/cjs/vertex-scene-tree.cjs.entry.js.map +1 -1
  51. package/dist/cjs/vertex-viewer-annotation-callout.cjs.entry.js.map +1 -1
  52. package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js +4 -4
  53. package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js.map +1 -1
  54. package/dist/cjs/vertex-viewer-button_3.cjs.entry.js +6 -1
  55. package/dist/cjs/vertex-viewer-button_3.cjs.entry.js.map +1 -1
  56. package/dist/cjs/vertex-viewer-default-toolbar.cjs.entry.js +2 -2
  57. package/dist/cjs/vertex-viewer-default-toolbar.cjs.entry.js.map +1 -1
  58. package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +5 -5
  59. package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js +1 -1
  60. package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js +5 -5
  61. package/dist/cjs/vertex-viewer-markup-arrow_3.cjs.entry.js +3 -3
  62. package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js +4 -4
  63. package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js.map +1 -1
  64. package/dist/cjs/vertex-viewer-markup.cjs.entry.js +3 -3
  65. package/dist/cjs/vertex-viewer-markup.cjs.entry.js.map +1 -1
  66. package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js +3 -3
  67. package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js +8 -8
  68. package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +5 -5
  69. package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js +7 -7
  70. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +7 -7
  71. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js.map +1 -1
  72. package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js +9 -8
  73. package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js.map +1 -1
  74. package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js +3 -3
  75. package/dist/cjs/vertex-viewer-spinner.cjs.entry.js.map +1 -1
  76. package/dist/cjs/vertex-viewer-teleport-tool.cjs.entry.js +2 -2
  77. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +7 -7
  78. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js.map +1 -1
  79. package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +2 -2
  80. package/dist/cjs/vertex-viewer-walk-mode-tool.cjs.entry.js +1 -1
  81. package/dist/cjs/vertex-viewer.cjs.entry.js +8 -8
  82. package/dist/cjs/viewer.cjs.js +1 -1
  83. package/dist/cjs/{viewport-B70DgDZj.js → viewport-BDbB9o9T.js} +3 -3
  84. package/dist/cjs/{viewport-B70DgDZj.js.map → viewport-BDbB9o9T.js.map} +1 -1
  85. package/dist/collection/components/scene-tree/scene-tree.css +2 -3
  86. package/dist/collection/components/scene-tree/scene-tree.js.map +1 -1
  87. package/dist/collection/components/scene-tree-notification-banner/scene-tree-notification-banner.css +1 -1
  88. package/dist/collection/components/scene-tree-search/scene-tree-search.css +1 -1
  89. package/dist/collection/components/scene-tree-search/scene-tree-search.js +1 -1
  90. package/dist/collection/components/scene-tree-search/scene-tree-search.js.map +1 -1
  91. package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.css +10 -10
  92. package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js +1 -1
  93. package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js.map +1 -1
  94. package/dist/collection/components/scene-tree-table-column/scene-tree-table-column.css +0 -1
  95. package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.css +3 -3
  96. package/dist/collection/components/viewer-annotation-callout/viewer-annotation-callout.css +3 -4
  97. package/dist/collection/components/viewer-box-query-tool/types.js.map +1 -1
  98. package/dist/collection/components/viewer-box-query-tool/viewer-box-query-tool.css +9 -7
  99. package/dist/collection/components/viewer-button/viewer-button.js +32 -1
  100. package/dist/collection/components/viewer-button/viewer-button.js.map +1 -1
  101. package/dist/collection/components/viewer-default-toolbar/viewer-default-toolbar.css +2 -2
  102. package/dist/collection/components/viewer-default-toolbar/viewer-default-toolbar.js +1 -1
  103. package/dist/collection/components/viewer-default-toolbar/viewer-default-toolbar.js.map +1 -1
  104. package/dist/collection/components/viewer-markup/viewer-markup.js.map +1 -1
  105. package/dist/collection/components/viewer-markup-arrow/utils.js.map +1 -1
  106. package/dist/collection/components/viewer-markup-tool/viewer-markup-tool.css +2 -2
  107. package/dist/collection/components/viewer-pin-group/viewer-pin-group.css +12 -11
  108. package/dist/collection/components/viewer-pin-label/viewer-pin-label.css +21 -8
  109. package/dist/collection/components/viewer-pin-label/viewer-pin-label.js +4 -3
  110. package/dist/collection/components/viewer-pin-label/viewer-pin-label.js.map +1 -1
  111. package/dist/collection/components/viewer-pin-label-line/viewer-pin-label-line.css +5 -4
  112. package/dist/collection/components/viewer-spinner/viewer-spinner.css +2 -2
  113. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js +1 -1
  114. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js.map +1 -1
  115. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.css +1 -2
  116. package/dist/collection/lib/grpc.js.map +1 -1
  117. package/dist/collection/lib/interactions/baseInteractionHandler.js +2 -1
  118. package/dist/collection/lib/interactions/baseInteractionHandler.js.map +1 -1
  119. package/dist/collection/lib/scenes/scene.js.map +1 -1
  120. package/dist/collection/lib/scenes/sceneViewStateLoader.js.map +1 -1
  121. package/dist/collection/lib/stream/state.js.map +1 -1
  122. package/dist/collection/lib/types/loadableResource.js.map +1 -1
  123. package/dist/collection/lib/types/sceneViewStateIdentifier.js.map +1 -1
  124. package/dist/collection/lib/walk-mode/model.js.map +1 -1
  125. package/dist/collection/workers/png-decoder-pool.js +4 -3
  126. package/dist/collection/workers/png-decoder-pool.js.map +1 -1
  127. package/dist/components/index.js +1 -1
  128. package/dist/components/p-2UsvOTHJ.js +5 -0
  129. package/dist/components/p-2UsvOTHJ.js.map +1 -0
  130. package/dist/components/{p-CZgX-9yo.js → p-5bk1mHRt.js} +2 -2
  131. package/dist/components/{p-DRGCkSEK.js → p-B8530k7R.js} +2 -2
  132. package/dist/components/{p-garvKln8.js → p-BAuOB8M-.js} +2 -2
  133. package/dist/components/p-BAuOB8M-.js.map +1 -0
  134. package/dist/components/{p-BKQMbekH.js → p-BCuMPvZO.js} +2 -2
  135. package/dist/components/p-BFEV_v80.js +5 -0
  136. package/dist/components/p-BFEV_v80.js.map +1 -0
  137. package/dist/components/{p-C02XtMl4.js → p-BHyxBmg6.js} +2 -2
  138. package/dist/components/{p-O1_Yvjd6.js → p-BT9d9jRt.js} +2 -2
  139. package/dist/components/{p-oDn1DcWj.js → p-BZDn1Vuv.js} +2 -2
  140. package/dist/components/{p-VEJB73Ei.js → p-Bdf4AcJ2.js} +2 -2
  141. package/dist/components/p-BgzjmANj.js +5 -0
  142. package/dist/components/p-BgzjmANj.js.map +1 -0
  143. package/dist/components/p-BjvjKoy7.js +5 -0
  144. package/dist/components/p-BjvjKoy7.js.map +1 -0
  145. package/dist/components/p-Bwtyddca.js +5 -0
  146. package/dist/components/p-Bwtyddca.js.map +1 -0
  147. package/dist/components/{p-CMdP8O-G.js → p-Bx42CNGV.js} +2 -2
  148. package/dist/components/{p-CelQDFR0.js → p-C12jtCFb.js} +2 -2
  149. package/dist/components/p-C86HMDzi.js +5 -0
  150. package/dist/components/p-C86HMDzi.js.map +1 -0
  151. package/dist/components/{p-Dzs4u_ZY.js → p-CABws4i9.js} +2 -2
  152. package/dist/components/p-CIuxJYJL.js.map +1 -1
  153. package/dist/components/{p-BqeEZXPn.js → p-CPROw2BU.js} +2 -2
  154. package/dist/components/p-CSVgoQU8.js +5 -0
  155. package/dist/components/p-CSVgoQU8.js.map +1 -0
  156. package/dist/components/{p-DnVcQAR9.js → p-CTi-0-dI.js} +2 -2
  157. package/dist/components/{p-EG7pMA2M.js → p-CeZe0Qql.js} +2 -2
  158. package/dist/components/p-CioaIHsi.js.map +1 -1
  159. package/dist/components/{p-Due5EmBt.js → p-Clyxptbp.js} +2 -2
  160. package/dist/components/{p-taOlygmc.js → p-Cs2aiMUK.js} +2 -2
  161. package/dist/components/p-Cs2aiMUK.js.map +1 -0
  162. package/dist/components/p-DUo-H-nW.js +5 -0
  163. package/dist/components/p-DUo-H-nW.js.map +1 -0
  164. package/dist/components/{p-MnZadXO8.js → p-D_h07qsA.js} +2 -2
  165. package/dist/components/{p-DCTZZ5Rd.js → p-DjQ6RXWP.js} +2 -2
  166. package/dist/components/p-DxuSiXYg.js.map +1 -1
  167. package/dist/components/{p-CxzyM08j.js → p-DyL2wWm6.js} +2 -2
  168. package/dist/components/{p-avWSFTeP.js → p-JvS9LLoO.js} +2 -2
  169. package/dist/components/{p-CfTvpqud.js → p-KidjtXKE.js} +2 -2
  170. package/dist/{viewer/p-7m7Vr5V7.js → components/p-Ng27jBsS.js} +2 -2
  171. package/dist/components/p-Ng27jBsS.js.map +1 -0
  172. package/dist/components/{p-BC777sCK.js → p-UJR-ixsy.js} +2 -2
  173. package/dist/components/{p-Ib4vgh2t.js → p-UrT4ZJv3.js} +2 -2
  174. package/dist/components/{p-Ib4vgh2t.js.map → p-UrT4ZJv3.js.map} +1 -1
  175. package/dist/components/{p-mpsCUvSn.js → p-_qi2VkC2.js} +2 -2
  176. package/dist/components/{p-CNprIkKd.js → p-rDr0x5Z7.js} +2 -2
  177. package/dist/components/vertex-scene-tree-search.js +1 -1
  178. package/dist/components/vertex-scene-tree-table-cell.js +1 -1
  179. package/dist/components/vertex-scene-tree-table-cell.js.map +1 -1
  180. package/dist/components/vertex-scene-tree-table-column.js.map +1 -1
  181. package/dist/components/vertex-scene-tree-table-layout.js +1 -1
  182. package/dist/components/vertex-scene-tree.js +1 -1
  183. package/dist/components/vertex-scene-tree.js.map +1 -1
  184. package/dist/components/vertex-viewer-annotation-callout.js.map +1 -1
  185. package/dist/components/vertex-viewer-box-query-tool.js +1 -1
  186. package/dist/components/vertex-viewer-box-query-tool.js.map +1 -1
  187. package/dist/components/vertex-viewer-button.js +1 -1
  188. package/dist/components/vertex-viewer-default-toolbar.js +1 -1
  189. package/dist/components/vertex-viewer-default-toolbar.js.map +1 -1
  190. package/dist/components/vertex-viewer-dom-element.js +1 -1
  191. package/dist/components/vertex-viewer-dom-group.js +1 -1
  192. package/dist/components/vertex-viewer-dom-renderer.js +1 -1
  193. package/dist/components/vertex-viewer-hit-result-indicator.js +1 -1
  194. package/dist/components/vertex-viewer-markup-arrow.js +1 -1
  195. package/dist/components/vertex-viewer-markup-circle.js +1 -1
  196. package/dist/components/vertex-viewer-markup-freeform.js +1 -1
  197. package/dist/components/vertex-viewer-markup-tool.js +1 -1
  198. package/dist/components/vertex-viewer-markup-tool.js.map +1 -1
  199. package/dist/components/vertex-viewer-markup.js +1 -1
  200. package/dist/components/vertex-viewer-markup.js.map +1 -1
  201. package/dist/components/vertex-viewer-measurement-details.js +1 -1
  202. package/dist/components/vertex-viewer-measurement-distance.js +1 -1
  203. package/dist/components/vertex-viewer-measurement-line.js +1 -1
  204. package/dist/components/vertex-viewer-measurement-overlays.js +1 -1
  205. package/dist/components/vertex-viewer-measurement-precise.js +1 -1
  206. package/dist/components/vertex-viewer-pin-group.js +1 -1
  207. package/dist/components/vertex-viewer-pin-label-line.js +1 -1
  208. package/dist/components/vertex-viewer-pin-label.js +1 -1
  209. package/dist/components/vertex-viewer-pin-tool.js +1 -1
  210. package/dist/components/vertex-viewer-teleport-tool.js +1 -1
  211. package/dist/components/vertex-viewer-transform-widget.js +1 -1
  212. package/dist/components/vertex-viewer-transform-widget.js.map +1 -1
  213. package/dist/components/vertex-viewer-view-cube.js +1 -1
  214. package/dist/components/vertex-viewer-walk-mode-tool.js +1 -1
  215. package/dist/components/vertex-viewer.js +1 -1
  216. package/dist/esm/{bundle-CZZALKHT.js → bundle-2UsvOTHJ.js} +28 -25
  217. package/dist/esm/bundle-2UsvOTHJ.js.map +1 -0
  218. package/dist/esm/{config-CyaUTJEG.js → config-Cqrcty7U.js} +3 -3
  219. package/dist/esm/{config-CyaUTJEG.js.map → config-Cqrcty7U.js.map} +1 -1
  220. package/dist/esm/{controller-ByBd8r3O.js → controller-BPECXXfj.js} +3 -3
  221. package/dist/esm/{controller-ByBd8r3O.js.map → controller-BPECXXfj.js.map} +1 -1
  222. package/dist/esm/{dom-Bbf2HAst.js → dom-DaP9SiyY.js} +3 -3
  223. package/dist/esm/{dom-Bbf2HAst.js.map → dom-DaP9SiyY.js.map} +1 -1
  224. package/dist/esm/{entities-DriL3zBC.js → entities-CawBZH7i.js} +4 -4
  225. package/dist/esm/{entities-DriL3zBC.js.map → entities-CawBZH7i.js.map} +1 -1
  226. package/dist/esm/{geometry_pb-BEB8SExe.js → geometry_pb-COdZQiRi.js} +3 -3
  227. package/dist/esm/{geometry_pb-BEB8SExe.js.map → geometry_pb-COdZQiRi.js.map} +1 -1
  228. package/dist/esm/grpc-hWL8wFvk.js.map +1 -1
  229. package/dist/esm/index.js +13 -13
  230. package/dist/esm/index.mjs +13 -13
  231. package/dist/esm/loader.js +1 -1
  232. package/dist/esm/loader.mjs +1 -1
  233. package/dist/esm/{markup-y96-uR-l.js → markup-B58g75Hr.js} +3 -3
  234. package/dist/esm/{markup-y96-uR-l.js.map → markup-B58g75Hr.js.map} +1 -1
  235. package/dist/esm/{model-BJQo0DxL.js → model-B5KuXEsl.js} +3 -3
  236. package/dist/esm/{model-BJQo0DxL.js.map → model-B5KuXEsl.js.map} +1 -1
  237. package/dist/esm/model-BHVr1tU0.js.map +1 -1
  238. package/dist/esm/{model-CTdG73h9.js → model-Dc6T63-k.js} +3 -3
  239. package/dist/esm/{model-CTdG73h9.js.map → model-Dc6T63-k.js.map} +1 -1
  240. package/dist/esm/{multiElementInteractionHandler-C45E8VzE.js → multiElementInteractionHandler-3tE3OPpw.js} +6 -5
  241. package/dist/esm/multiElementInteractionHandler-3tE3OPpw.js.map +1 -0
  242. package/dist/esm/{overlays-DmcRtaSn.js → overlays-BwIqsqLW.js} +3 -3
  243. package/dist/esm/{overlays-DmcRtaSn.js.map → overlays-BwIqsqLW.js.map} +1 -1
  244. package/dist/esm/{queries-DWjy-LsV.js → queries-B4XotYyr.js} +5 -5
  245. package/dist/esm/queries-B4XotYyr.js.map +1 -0
  246. package/dist/esm/{regl-component-zzdsBise.js → regl-component-B1_h3_s8.js} +6 -6
  247. package/dist/esm/{regl-component-zzdsBise.js.map → regl-component-B1_h3_s8.js.map} +1 -1
  248. package/dist/esm/{representation_pb-CQdJxiGO.js → representation_pb-C4MJfZMo.js} +3 -3
  249. package/dist/esm/{representation_pb-CQdJxiGO.js.map → representation_pb-C4MJfZMo.js.map} +1 -1
  250. package/dist/esm/{results-ClIgKssN.js → results-De9arm7M.js} +3 -3
  251. package/dist/esm/{results-ClIgKssN.js.map → results-De9arm7M.js.map} +1 -1
  252. package/dist/esm/{streamAttributes-CTs61PCl.js → streamAttributes-BW9JzMeG.js} +117 -94
  253. package/dist/esm/streamAttributes-BW9JzMeG.js.map +1 -0
  254. package/dist/esm/{util-DUjEw5Kh.js → util-CMPFqnEv.js} +3 -3
  255. package/dist/esm/{util-DUjEw5Kh.js.map → util-CMPFqnEv.js.map} +1 -1
  256. package/dist/esm/{utils-DOjHP1wA.js → utils-B1mSYmAK.js} +3 -3
  257. package/dist/esm/{utils-DOjHP1wA.js.map → utils-B1mSYmAK.js.map} +1 -1
  258. package/dist/esm/{utils-DJ5FvINs.js → utils-c-mcLgsj.js} +3 -3
  259. package/dist/esm/utils-c-mcLgsj.js.map +1 -0
  260. package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js +2 -2
  261. package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js.map +1 -1
  262. package/dist/esm/vertex-scene-tree-table-cell.entry.js +3 -3
  263. package/dist/esm/vertex-scene-tree-table-cell.entry.js.map +1 -1
  264. package/dist/esm/vertex-scene-tree-table-column.entry.js.map +1 -1
  265. package/dist/esm/vertex-scene-tree.entry.js +3 -3
  266. package/dist/esm/vertex-scene-tree.entry.js.map +1 -1
  267. package/dist/esm/vertex-viewer-annotation-callout.entry.js.map +1 -1
  268. package/dist/esm/vertex-viewer-box-query-tool.entry.js +4 -4
  269. package/dist/esm/vertex-viewer-box-query-tool.entry.js.map +1 -1
  270. package/dist/esm/vertex-viewer-button_3.entry.js +6 -1
  271. package/dist/esm/vertex-viewer-button_3.entry.js.map +1 -1
  272. package/dist/esm/vertex-viewer-default-toolbar.entry.js +2 -2
  273. package/dist/esm/vertex-viewer-default-toolbar.entry.js.map +1 -1
  274. package/dist/esm/vertex-viewer-dom-element_2.entry.js +5 -5
  275. package/dist/esm/vertex-viewer-dom-group.entry.js +1 -1
  276. package/dist/esm/vertex-viewer-hit-result-indicator.entry.js +5 -5
  277. package/dist/esm/vertex-viewer-markup-arrow_3.entry.js +3 -3
  278. package/dist/esm/vertex-viewer-markup-tool.entry.js +4 -4
  279. package/dist/esm/vertex-viewer-markup-tool.entry.js.map +1 -1
  280. package/dist/esm/vertex-viewer-markup.entry.js +3 -3
  281. package/dist/esm/vertex-viewer-markup.entry.js.map +1 -1
  282. package/dist/esm/vertex-viewer-measurement-details.entry.js +3 -3
  283. package/dist/esm/vertex-viewer-measurement-distance.entry.js +8 -8
  284. package/dist/esm/vertex-viewer-measurement-line_2.entry.js +5 -5
  285. package/dist/esm/vertex-viewer-measurement-precise.entry.js +7 -7
  286. package/dist/esm/vertex-viewer-pin-group.entry.js +7 -7
  287. package/dist/esm/vertex-viewer-pin-group.entry.js.map +1 -1
  288. package/dist/esm/vertex-viewer-pin-label_2.entry.js +9 -8
  289. package/dist/esm/vertex-viewer-pin-label_2.entry.js.map +1 -1
  290. package/dist/esm/vertex-viewer-pin-tool.entry.js +3 -3
  291. package/dist/esm/vertex-viewer-spinner.entry.js.map +1 -1
  292. package/dist/esm/vertex-viewer-teleport-tool.entry.js +2 -2
  293. package/dist/esm/vertex-viewer-transform-widget.entry.js +7 -7
  294. package/dist/esm/vertex-viewer-transform-widget.entry.js.map +1 -1
  295. package/dist/esm/vertex-viewer-view-cube.entry.js +2 -2
  296. package/dist/esm/vertex-viewer-walk-mode-tool.entry.js +1 -1
  297. package/dist/esm/vertex-viewer.entry.js +8 -8
  298. package/dist/esm/viewer.js +1 -1
  299. package/dist/esm/{viewport-D90kzsD7.js → viewport-CHtidaFL.js} +3 -3
  300. package/dist/esm/{viewport-D90kzsD7.js.map → viewport-CHtidaFL.js.map} +1 -1
  301. package/dist/types/components/viewer-button/viewer-button.d.ts +5 -0
  302. package/dist/types/components.d.ts +14 -1
  303. package/dist/types/lib/walk-mode/model.d.ts +10 -10
  304. package/dist/types/regl-shape.d.ts +1 -5
  305. package/dist/types/workers/png-decoder-pool.d.ts +0 -1
  306. package/dist/viewer/index.esm.js +1 -1
  307. package/dist/viewer/{p-12a673f0.entry.js → p-1506f9a2.entry.js} +2 -2
  308. package/dist/viewer/p-1506f9a2.entry.js.map +1 -0
  309. package/dist/viewer/{p-78f422af.entry.js → p-287e0670.entry.js} +2 -2
  310. package/dist/viewer/{p-78f422af.entry.js.map → p-287e0670.entry.js.map} +1 -1
  311. package/dist/viewer/{p-7b4eec65.entry.js → p-293d8f3f.entry.js} +2 -2
  312. package/dist/viewer/p-2UsvOTHJ.js +5 -0
  313. package/dist/viewer/p-2UsvOTHJ.js.map +1 -0
  314. package/dist/viewer/{p-510fd2e1.entry.js → p-2d2fa147.entry.js} +2 -2
  315. package/dist/viewer/{p-a108a305.entry.js → p-2faddbf8.entry.js} +2 -2
  316. package/dist/viewer/{p-e3981cf8.entry.js → p-36349a80.entry.js} +2 -2
  317. package/dist/viewer/p-36349a80.entry.js.map +1 -0
  318. package/dist/viewer/{p-aa0359e0.entry.js → p-3c5dd716.entry.js} +2 -2
  319. package/dist/viewer/p-44395076.entry.js +5 -0
  320. package/dist/viewer/p-44395076.entry.js.map +1 -0
  321. package/dist/viewer/{p-fe434552.entry.js → p-45cc095e.entry.js} +2 -2
  322. package/dist/viewer/p-504e77a7.entry.js +5 -0
  323. package/dist/viewer/{p-c2c3579f.entry.js.map → p-504e77a7.entry.js.map} +1 -1
  324. package/dist/viewer/{p-71c03352.entry.js → p-53f6cc59.entry.js} +2 -2
  325. package/dist/viewer/{p-56e39cff.entry.js → p-83683307.entry.js} +2 -2
  326. package/dist/viewer/{p-91fca24b.entry.js → p-93311f46.entry.js} +2 -2
  327. package/dist/viewer/{p-BIR7Lfxx.js → p-BEOO-Ypv.js} +2 -2
  328. package/dist/viewer/{p-BIR7Lfxx.js.map → p-BEOO-Ypv.js.map} +1 -1
  329. package/dist/viewer/{p-C6YtUG51.js → p-BJGbLthH.js} +2 -2
  330. package/dist/viewer/{p-C6YtUG51.js.map → p-BJGbLthH.js.map} +1 -1
  331. package/dist/viewer/{p-O1_Yvjd6.js → p-BT9d9jRt.js} +2 -2
  332. package/dist/viewer/{p-O1_Yvjd6.js.map → p-BT9d9jRt.js.map} +1 -1
  333. package/dist/viewer/{p-VEJB73Ei.js → p-Bdf4AcJ2.js} +2 -2
  334. package/dist/viewer/{p-VEJB73Ei.js.map → p-Bdf4AcJ2.js.map} +1 -1
  335. package/dist/viewer/{p-C-huOg09.js → p-Br21pGVj.js} +2 -2
  336. package/dist/viewer/{p-C-huOg09.js.map → p-Br21pGVj.js.map} +1 -1
  337. package/dist/viewer/{p-Ce1j43tF.js → p-Bw_ryWU0.js} +2 -2
  338. package/dist/viewer/{p-Ce1j43tF.js.map → p-Bw_ryWU0.js.map} +1 -1
  339. package/dist/viewer/{p-CelQDFR0.js → p-C12jtCFb.js} +2 -2
  340. package/dist/viewer/{p-CelQDFR0.js.map → p-C12jtCFb.js.map} +1 -1
  341. package/dist/viewer/{p-B-J4CqZy.js → p-C4_1Jc7H.js} +2 -2
  342. package/dist/viewer/{p-B-J4CqZy.js.map → p-C4_1Jc7H.js.map} +1 -1
  343. package/dist/viewer/p-CEDqc5sS.js +5 -0
  344. package/dist/viewer/{p-BDy3SLKk.js.map → p-CEDqc5sS.js.map} +1 -1
  345. package/dist/viewer/p-Cc3XhAoA.js +5 -0
  346. package/dist/viewer/p-Cc3XhAoA.js.map +1 -0
  347. package/dist/viewer/{p-EG7pMA2M.js → p-CeZe0Qql.js} +2 -2
  348. package/dist/viewer/{p-EG7pMA2M.js.map → p-CeZe0Qql.js.map} +1 -1
  349. package/dist/viewer/p-CioaIHsi.js.map +1 -1
  350. package/dist/viewer/{p-EUeCUp3y.js → p-CxBXErQ8.js} +2 -2
  351. package/dist/viewer/{p-EUeCUp3y.js.map → p-CxBXErQ8.js.map} +1 -1
  352. package/dist/viewer/{p-CIBBr-p1.js → p-D0aTA_2m.js} +2 -2
  353. package/dist/viewer/{p-CIBBr-p1.js.map → p-D0aTA_2m.js.map} +1 -1
  354. package/dist/viewer/{p-UQXG8bCI.js → p-DBfvBC5O.js} +2 -2
  355. package/dist/viewer/p-DBfvBC5O.js.map +1 -0
  356. package/dist/{components/p-QhlhRt6X.js → viewer/p-DIbJ8Ijj.js} +2 -2
  357. package/dist/viewer/p-DIbJ8Ijj.js.map +1 -0
  358. package/dist/viewer/{p-Cju1inFh.js → p-DYDhLlLS.js} +2 -2
  359. package/dist/viewer/p-DYDhLlLS.js.map +1 -0
  360. package/dist/viewer/{p-CxzyM08j.js → p-DyL2wWm6.js} +2 -2
  361. package/dist/viewer/{p-CxzyM08j.js.map → p-DyL2wWm6.js.map} +1 -1
  362. package/dist/viewer/{p-avWSFTeP.js → p-JvS9LLoO.js} +2 -2
  363. package/dist/viewer/{p-avWSFTeP.js.map → p-JvS9LLoO.js.map} +1 -1
  364. package/dist/viewer/{p-mpsCUvSn.js → p-_qi2VkC2.js} +2 -2
  365. package/dist/viewer/{p-mpsCUvSn.js.map → p-_qi2VkC2.js.map} +1 -1
  366. package/dist/viewer/{p-9312a936.entry.js → p-a94b626c.entry.js} +2 -2
  367. package/dist/viewer/p-b5cc83a4.entry.js.map +1 -1
  368. package/dist/viewer/{p-fc7d9b2b.entry.js → p-c531ca97.entry.js} +2 -2
  369. package/dist/viewer/{p-fc7d9b2b.entry.js.map → p-c531ca97.entry.js.map} +1 -1
  370. package/dist/viewer/p-c9dee5c4.entry.js +5 -0
  371. package/dist/viewer/p-c9dee5c4.entry.js.map +1 -0
  372. package/dist/viewer/p-ce711ae0.entry.js +5 -0
  373. package/dist/viewer/p-ce711ae0.entry.js.map +1 -0
  374. package/dist/viewer/{p-82ed4346.entry.js → p-ced98004.entry.js} +2 -2
  375. package/dist/viewer/p-d357d235.entry.js.map +1 -1
  376. package/dist/viewer/p-dcb6ddfe.entry.js +5 -0
  377. package/dist/viewer/p-dcb6ddfe.entry.js.map +1 -0
  378. package/dist/viewer/p-e98db875.entry.js.map +1 -1
  379. package/dist/viewer/{p-c2454523.entry.js → p-ea45c3e9.entry.js} +2 -2
  380. package/dist/viewer/p-ebd9dd99.entry.js +5 -0
  381. package/dist/viewer/p-ebd9dd99.entry.js.map +1 -0
  382. package/dist/viewer/{p-a893a299.entry.js → p-ecd594f2.entry.js} +2 -2
  383. package/dist/viewer/{p-03a531d9.entry.js → p-ef9437ca.entry.js} +2 -2
  384. package/dist/viewer/p-fec5a15d.entry.js +5 -0
  385. package/dist/viewer/p-fec5a15d.entry.js.map +1 -0
  386. package/dist/viewer/p-ipyYHvea.js.map +1 -1
  387. package/dist/viewer/viewer.esm.js +1 -1
  388. package/package.json +10 -10
  389. package/readme.md +14 -8
  390. package/dist/cjs/bundle-07I6_WqC.js.map +0 -1
  391. package/dist/cjs/multiElementInteractionHandler-Bqpg2wVT.js.map +0 -1
  392. package/dist/cjs/queries-GhYmoomu.js.map +0 -1
  393. package/dist/cjs/streamAttributes-CJOD7AxG.js.map +0 -1
  394. package/dist/cjs/utils-BsXO-wLi.js.map +0 -1
  395. package/dist/components/p-B4sO9HdX.js +0 -5
  396. package/dist/components/p-B4sO9HdX.js.map +0 -1
  397. package/dist/components/p-C--Voxln.js +0 -5
  398. package/dist/components/p-C--Voxln.js.map +0 -1
  399. package/dist/components/p-CZZALKHT.js +0 -5
  400. package/dist/components/p-CZZALKHT.js.map +0 -1
  401. package/dist/components/p-Cn0vKqIN.js +0 -5
  402. package/dist/components/p-Cn0vKqIN.js.map +0 -1
  403. package/dist/components/p-DH341c7b.js +0 -5
  404. package/dist/components/p-DH341c7b.js.map +0 -1
  405. package/dist/components/p-DjrtwKcK.js +0 -5
  406. package/dist/components/p-DjrtwKcK.js.map +0 -1
  407. package/dist/components/p-Dmc49hX3.js +0 -5
  408. package/dist/components/p-Dmc49hX3.js.map +0 -1
  409. package/dist/components/p-QhlhRt6X.js.map +0 -1
  410. package/dist/components/p-Y8W_BXUk.js +0 -5
  411. package/dist/components/p-Y8W_BXUk.js.map +0 -1
  412. package/dist/components/p-garvKln8.js.map +0 -1
  413. package/dist/components/p-taOlygmc.js.map +0 -1
  414. package/dist/esm/bundle-CZZALKHT.js.map +0 -1
  415. package/dist/esm/multiElementInteractionHandler-C45E8VzE.js.map +0 -1
  416. package/dist/esm/queries-DWjy-LsV.js.map +0 -1
  417. package/dist/esm/streamAttributes-CTs61PCl.js.map +0 -1
  418. package/dist/esm/utils-DJ5FvINs.js.map +0 -1
  419. package/dist/viewer/p-02384d83.entry.js +0 -5
  420. package/dist/viewer/p-02384d83.entry.js.map +0 -1
  421. package/dist/viewer/p-12a673f0.entry.js.map +0 -1
  422. package/dist/viewer/p-49578ec9.entry.js +0 -5
  423. package/dist/viewer/p-49578ec9.entry.js.map +0 -1
  424. package/dist/viewer/p-4c223366.entry.js +0 -5
  425. package/dist/viewer/p-4c223366.entry.js.map +0 -1
  426. package/dist/viewer/p-7m7Vr5V7.js.map +0 -1
  427. package/dist/viewer/p-8774425b.entry.js +0 -5
  428. package/dist/viewer/p-8774425b.entry.js.map +0 -1
  429. package/dist/viewer/p-9c02567d.entry.js +0 -5
  430. package/dist/viewer/p-9c02567d.entry.js.map +0 -1
  431. package/dist/viewer/p-BDy3SLKk.js +0 -5
  432. package/dist/viewer/p-CZZALKHT.js +0 -5
  433. package/dist/viewer/p-CZZALKHT.js.map +0 -1
  434. package/dist/viewer/p-Cju1inFh.js.map +0 -1
  435. package/dist/viewer/p-Cr2EnhS-.js +0 -5
  436. package/dist/viewer/p-Cr2EnhS-.js.map +0 -1
  437. package/dist/viewer/p-UQXG8bCI.js.map +0 -1
  438. package/dist/viewer/p-c2c3579f.entry.js +0 -5
  439. package/dist/viewer/p-d5542b6a.entry.js +0 -5
  440. package/dist/viewer/p-d5542b6a.entry.js.map +0 -1
  441. package/dist/viewer/p-e3981cf8.entry.js.map +0 -1
  442. /package/dist/components/{p-CZgX-9yo.js.map → p-5bk1mHRt.js.map} +0 -0
  443. /package/dist/components/{p-DRGCkSEK.js.map → p-B8530k7R.js.map} +0 -0
  444. /package/dist/components/{p-BKQMbekH.js.map → p-BCuMPvZO.js.map} +0 -0
  445. /package/dist/components/{p-C02XtMl4.js.map → p-BHyxBmg6.js.map} +0 -0
  446. /package/dist/components/{p-O1_Yvjd6.js.map → p-BT9d9jRt.js.map} +0 -0
  447. /package/dist/components/{p-oDn1DcWj.js.map → p-BZDn1Vuv.js.map} +0 -0
  448. /package/dist/components/{p-VEJB73Ei.js.map → p-Bdf4AcJ2.js.map} +0 -0
  449. /package/dist/components/{p-CMdP8O-G.js.map → p-Bx42CNGV.js.map} +0 -0
  450. /package/dist/components/{p-CelQDFR0.js.map → p-C12jtCFb.js.map} +0 -0
  451. /package/dist/components/{p-Dzs4u_ZY.js.map → p-CABws4i9.js.map} +0 -0
  452. /package/dist/components/{p-BqeEZXPn.js.map → p-CPROw2BU.js.map} +0 -0
  453. /package/dist/components/{p-DnVcQAR9.js.map → p-CTi-0-dI.js.map} +0 -0
  454. /package/dist/components/{p-EG7pMA2M.js.map → p-CeZe0Qql.js.map} +0 -0
  455. /package/dist/components/{p-Due5EmBt.js.map → p-Clyxptbp.js.map} +0 -0
  456. /package/dist/components/{p-MnZadXO8.js.map → p-D_h07qsA.js.map} +0 -0
  457. /package/dist/components/{p-DCTZZ5Rd.js.map → p-DjQ6RXWP.js.map} +0 -0
  458. /package/dist/components/{p-CxzyM08j.js.map → p-DyL2wWm6.js.map} +0 -0
  459. /package/dist/components/{p-avWSFTeP.js.map → p-JvS9LLoO.js.map} +0 -0
  460. /package/dist/components/{p-CfTvpqud.js.map → p-KidjtXKE.js.map} +0 -0
  461. /package/dist/components/{p-BC777sCK.js.map → p-UJR-ixsy.js.map} +0 -0
  462. /package/dist/components/{p-mpsCUvSn.js.map → p-_qi2VkC2.js.map} +0 -0
  463. /package/dist/components/{p-CNprIkKd.js.map → p-rDr0x5Z7.js.map} +0 -0
  464. /package/dist/viewer/{p-7b4eec65.entry.js.map → p-293d8f3f.entry.js.map} +0 -0
  465. /package/dist/viewer/{p-510fd2e1.entry.js.map → p-2d2fa147.entry.js.map} +0 -0
  466. /package/dist/viewer/{p-a108a305.entry.js.map → p-2faddbf8.entry.js.map} +0 -0
  467. /package/dist/viewer/{p-aa0359e0.entry.js.map → p-3c5dd716.entry.js.map} +0 -0
  468. /package/dist/viewer/{p-fe434552.entry.js.map → p-45cc095e.entry.js.map} +0 -0
  469. /package/dist/viewer/{p-71c03352.entry.js.map → p-53f6cc59.entry.js.map} +0 -0
  470. /package/dist/viewer/{p-56e39cff.entry.js.map → p-83683307.entry.js.map} +0 -0
  471. /package/dist/viewer/{p-91fca24b.entry.js.map → p-93311f46.entry.js.map} +0 -0
  472. /package/dist/viewer/{p-9312a936.entry.js.map → p-a94b626c.entry.js.map} +0 -0
  473. /package/dist/viewer/{p-82ed4346.entry.js.map → p-ced98004.entry.js.map} +0 -0
  474. /package/dist/viewer/{p-c2454523.entry.js.map → p-ea45c3e9.entry.js.map} +0 -0
  475. /package/dist/viewer/{p-a893a299.entry.js.map → p-ecd594f2.entry.js.map} +0 -0
  476. /package/dist/viewer/{p-03a531d9.entry.js.map → p-ef9437ca.entry.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"grpc.js","sourceRoot":"","sources":["../../../../src/lib/grpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAahD,MAAM,UAAU,YAAY,CAC1B,MAAwB;IAExB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAClB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBAChB,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9D,CAAC;iBAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,YAAY,CACjC,KAAuD,EACvD,IAAoC;IAEpC,IAAI,MAAM,GAAG,SAAS,CAAC;IAEvB,GAAG,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9C,MAAM,GAAG,CAAC;QACV,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,WAAwB,EACxB,QAAiB;IAEjB,MAAM,GAAG,GAAG,MAAM,WAAW,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC;QAC7B,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC;YAC5B,GAAG;YACH,QAAQ,EAAE,EAAE,aAAa,EAAE,QAAQ,IAAI,EAAE,EAAE;SAC5C,CAAC;KACH,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import { grpc } from '@improbable-eng/grpc-web';\n\nexport type GrpcCaller<R, E> = (\n handler: GrpcHandler<R, E>,\n) => void | Promise<void>;\n\ntype GrpcHandler<R, E> = (err: E | null, res: R | null) => void | Promise<void>;\n\nexport type JwtProvider = () =>\n | Promise<string | undefined>\n | string\n | undefined;\n\nexport function requestUnary<R, E = unknown>(\n caller: GrpcCaller<R, E>,\n): Promise<R> {\n return new Promise((resolve, reject) => {\n caller((err, res) => {\n if (err != null) {\n reject(err instanceof Error ? err : new Error(String(err)));\n } else if (res != null) {\n resolve(res);\n } else {\n reject(new Error('Invalid gRPC response. Error and result are empty.'));\n }\n });\n });\n}\n\nexport async function* requestPaged<R, E = unknown>(\n fetch: (cursor: string | undefined) => GrpcCaller<R, E>,\n next: (res: R) => string | undefined,\n): AsyncGenerator<R, void, void> {\n let cursor = undefined;\n\n do {\n const res = await requestUnary(fetch(cursor));\n yield res;\n cursor = next(res);\n } while (cursor != null);\n}\n\nexport async function createMetadata(\n jwtProvider: JwtProvider,\n deviceId?: string,\n): Promise<grpc.Metadata> {\n const jwt = await jwtProvider();\n const meta = new grpc.Metadata({\n 'jwt-context': JSON.stringify({\n jwt,\n metadata: { 'x-device-id': deviceId || '' },\n }),\n });\n\n return meta;\n}\n"]}
1
+ {"version":3,"file":"grpc.js","sourceRoot":"","sources":["../../../../src/lib/grpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAWhD,MAAM,UAAU,YAAY,CAC1B,MAAwB;IAExB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAClB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBAChB,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9D,CAAC;iBAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,YAAY,CACjC,KAAuD,EACvD,IAAoC;IAEpC,IAAI,MAAM,GAAG,SAAS,CAAC;IAEvB,GAAG,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9C,MAAM,GAAG,CAAC;QACV,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,WAAwB,EACxB,QAAiB;IAEjB,MAAM,GAAG,GAAG,MAAM,WAAW,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC;QAC7B,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC;YAC5B,GAAG;YACH,QAAQ,EAAE,EAAE,aAAa,EAAE,QAAQ,IAAI,EAAE,EAAE;SAC5C,CAAC;KACH,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import { grpc } from '@improbable-eng/grpc-web';\n\nexport type GrpcCaller<R, E> = (\n handler: GrpcHandler<R, E>,\n) => void | Promise<void>;\n\ntype GrpcHandler<R, E> = (err: E | null, res: R | null) => void | Promise<void>;\n\nexport type JwtProvider = () =>\n Promise<string | undefined> | string | undefined;\n\nexport function requestUnary<R, E = unknown>(\n caller: GrpcCaller<R, E>,\n): Promise<R> {\n return new Promise((resolve, reject) => {\n caller((err, res) => {\n if (err != null) {\n reject(err instanceof Error ? err : new Error(String(err)));\n } else if (res != null) {\n resolve(res);\n } else {\n reject(new Error('Invalid gRPC response. Error and result are empty.'));\n }\n });\n });\n}\n\nexport async function* requestPaged<R, E = unknown>(\n fetch: (cursor: string | undefined) => GrpcCaller<R, E>,\n next: (res: R) => string | undefined,\n): AsyncGenerator<R, void, void> {\n let cursor = undefined;\n\n do {\n const res = await requestUnary(fetch(cursor));\n yield res;\n cursor = next(res);\n } while (cursor != null);\n}\n\nexport async function createMetadata(\n jwtProvider: JwtProvider,\n deviceId?: string,\n): Promise<grpc.Metadata> {\n const jwt = await jwtProvider();\n const meta = new grpc.Metadata({\n 'jwt-context': JSON.stringify({\n jwt,\n metadata: { 'x-device-id': deviceId || '' },\n }),\n });\n\n return meta;\n}\n"]}
@@ -265,7 +265,8 @@ export class BaseInteractionHandler {
265
265
  // is very unlikely to change frequently or while doing wheel movements.
266
266
  if (this.bodyStyleCache == null) {
267
267
  const bodyStyle = window.getComputedStyle(document.body);
268
- const fontSize = Number.parseFloat(bodyStyle.getPropertyValue('fontSize')) || DEFAULT_FONT_SIZE;
268
+ const fontSize = Number.parseFloat(bodyStyle.getPropertyValue('fontSize')) ||
269
+ DEFAULT_FONT_SIZE;
269
270
  const lineHeight = Number.parseFloat(bodyStyle.getPropertyValue('lineHeight'));
270
271
  this.bodyStyleCache = {
271
272
  lineHeightPixels: Number.isFinite(lineHeight)
@@ -1 +1 @@
1
- {"version":3,"file":"baseInteractionHandler.js","sourceRoot":"","sources":["../../../../../src/lib/interactions/baseInteractionHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { Point } from '@vertexvis/geometry';\nimport { Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\n\nimport { ConfigProvider } from '../config';\nimport { getMouseClientPosition } from '../dom';\nimport { InteractionApi } from './interactionApi';\nimport { BaseEvent } from './interactionEvent';\nimport { InteractionHandler } from './interactionHandler';\nimport {\n MouseInteraction,\n PanInteraction,\n PivotInteraction,\n RotateInteraction,\n RotatePointInteraction,\n TwistInteraction,\n ZoomInteraction,\n} from './mouseInteractions';\n\nexport type InteractionType =\n | 'rotate'\n | 'zoom'\n | 'pan'\n | 'twist'\n | 'rotate-point'\n | 'pivot';\n\nconst DEFAULT_FONT_SIZE = 16;\nconst DEFAULT_FONT_TO_LINE_HEIGHT_MULTIPLIER = 1.2;\n\nexport abstract class BaseInteractionHandler implements InteractionHandler {\n protected interactionApi?: InteractionApi;\n protected element?: HTMLElement;\n protected downPosition?: Point.Point;\n private downPositionCanvas?: Point.Point;\n private primaryInteraction: MouseInteraction;\n private currentInteraction?: MouseInteraction;\n private draggingInteraction: MouseInteraction | undefined;\n private lastPrimaryRotateInteraction?: MouseInteraction;\n private isDragging = false;\n private lastMoveEvent?: BaseEvent;\n private interactionTimer?: number;\n private keyboardControls = false;\n\n protected disableIndividualInteractions = false;\n\n private bodyStyleCache?: {\n lineHeightPixels: number;\n height: number;\n };\n\n private primaryInteractionTypeChange = new EventDispatcher<void>();\n\n public constructor(\n protected downEvent: 'mousedown' | 'pointerdown',\n protected upEvent: 'mouseup' | 'pointerup',\n protected moveEvent: 'mousemove' | 'pointermove',\n private rotateInteraction: RotateInteraction,\n private rotatePointInteraction: RotatePointInteraction,\n private zoomInteraction: ZoomInteraction,\n private panInteraction: PanInteraction,\n private twistInteraction: TwistInteraction,\n private pivotInteraction: PivotInteraction,\n private getConfig: ConfigProvider,\n ) {\n this.primaryInteraction = rotateInteraction;\n this.handleDownEvent = this.handleDownEvent.bind(this);\n this.handleMouseWheel = this.handleMouseWheel.bind(this);\n this.handleWindowMove = this.handleWindowMove.bind(this);\n this.handleWindowUp = this.handleWindowUp.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.interactionApi = api;\n element.addEventListener(this.downEvent, this.handleDownEvent);\n element.addEventListener('mousedown', this.handleDoubleClick);\n element.addEventListener('wheel', this.handleMouseWheel, {\n passive: false,\n });\n }\n\n public dispose(): void {\n this.element?.removeEventListener(this.downEvent, this.handleDownEvent);\n this.element?.removeEventListener('mousedown', this.handleDoubleClick);\n this.element?.removeEventListener('wheel', this.handleMouseWheel);\n this.element = undefined;\n }\n\n public onPrimaryInteractionTypeChange(listener: Listener<void>): Disposable {\n return this.primaryInteractionTypeChange.on(listener);\n }\n\n public setCurrentInteractionType(type?: InteractionType): void {\n switch (type) {\n case 'rotate':\n this.currentInteraction = this.rotateInteraction;\n break;\n case 'zoom':\n this.currentInteraction = this.zoomInteraction;\n break;\n case 'pan':\n this.currentInteraction = this.panInteraction;\n break;\n case 'twist':\n this.currentInteraction = this.twistInteraction;\n break;\n case 'rotate-point':\n this.currentInteraction = this.rotatePointInteraction;\n break;\n case 'pivot':\n this.currentInteraction = this.pivotInteraction;\n break;\n default:\n this.currentInteraction = undefined;\n }\n\n if (this.draggingInteraction) {\n const point = this.draggingInteraction.getPosition();\n this.draggingInteraction =\n this.currentInteraction || this.primaryInteraction;\n this.interactionApi?.resetLastAngle();\n this.draggingInteraction.setPosition(point);\n }\n }\n\n public getPrimaryInteractionType(): InteractionType {\n return this.primaryInteraction.getType();\n }\n\n public getCurrentInteractionType(): InteractionType {\n return (this.currentInteraction || this.primaryInteraction).getType();\n }\n\n public setPrimaryInteractionType(type: InteractionType): void {\n switch (type) {\n case 'rotate':\n this.primaryInteraction = this.rotateInteraction;\n this.lastPrimaryRotateInteraction = this.rotateInteraction;\n break;\n case 'rotate-point':\n this.primaryInteraction = this.rotatePointInteraction;\n this.lastPrimaryRotateInteraction = this.rotatePointInteraction;\n break;\n case 'zoom':\n this.primaryInteraction = this.zoomInteraction;\n break;\n case 'pan':\n this.primaryInteraction = this.panInteraction;\n break;\n case 'pivot':\n this.primaryInteraction = this.pivotInteraction;\n break;\n }\n this.primaryInteractionTypeChange.emit();\n }\n\n public setDefaultKeyboardControls(keyboardControls: boolean): void {\n this.keyboardControls = keyboardControls;\n }\n\n protected handleDownEvent(event: BaseEvent): void {\n // Prevent selection of any text while interacting with the model.\n event.preventDefault();\n\n this.interactionTimer = window.setTimeout(() => {\n this.downPosition = Point.create(event.screenX, event.screenY);\n this.downPositionCanvas = this.getCanvasPosition(event);\n this.interactionTimer = undefined;\n\n // Perform the current movement in the case that the interaction timer elapses\n if (this.lastMoveEvent != null) {\n this.handleWindowMove(this.lastMoveEvent);\n }\n }, this.getConfig().interactions.interactionDelay);\n\n window.addEventListener(this.moveEvent, this.handleWindowMove);\n window.addEventListener(this.upEvent, this.handleWindowUp);\n }\n\n protected handleWindowMove(event: BaseEvent): void {\n if (this.interactionTimer == null) {\n if (this.disableIndividualInteractions) {\n return;\n }\n\n const position = Point.create(event.screenX, event.screenY);\n const pixelThreshold =\n this.interactionApi != null\n ? this.interactionApi.pixelThreshold(this.isTouch(event))\n : 2;\n if (\n this.downPosition != null &&\n Point.distance(position, this.downPosition) >= pixelThreshold &&\n !this.isDragging\n ) {\n this.beginDrag(event);\n this.isDragging = true;\n }\n\n if (this.isDragging) {\n this.drag(event);\n }\n }\n\n this.lastMoveEvent = event;\n }\n\n protected async handleWindowUp(event: BaseEvent): Promise<void> {\n if (this.isDragging) {\n this.endDrag(event);\n this.isDragging = false;\n }\n\n if (this.interactionTimer != null) {\n window.clearTimeout(this.interactionTimer);\n this.interactionTimer = undefined;\n }\n\n window.removeEventListener(this.moveEvent, this.handleWindowMove);\n window.removeEventListener(this.upEvent, this.handleWindowUp);\n this.lastMoveEvent = undefined;\n }\n\n protected async handleDoubleClick(event: BaseEvent): Promise<void> {\n // event.detail is the number of clicks that have happened recently. If the number is 2, then the user double clicked.\n if (\n event.detail === 2 &&\n event.buttons === 4 &&\n this.interactionApi != null\n ) {\n await this.interactionApi.viewAll();\n }\n }\n\n protected beginDrag(event: BaseEvent): void {\n if (this.keyboardControls && event.metaKey && event.shiftKey) {\n this.currentInteraction = this.rotatePointInteraction;\n } else if (this.keyboardControls && event.shiftKey && event.altKey) {\n this.currentInteraction = this.twistInteraction;\n } else if (this.keyboardControls && event.shiftKey) {\n this.currentInteraction = this.zoomInteraction;\n } else if (this.keyboardControls && (event.metaKey || event.ctrlKey)) {\n this.currentInteraction = this.panInteraction;\n } else if (this.keyboardControls && event.altKey) {\n this.currentInteraction = this.rotateInteraction;\n }\n\n if (event.buttons === 1) {\n this.draggingInteraction =\n this.currentInteraction || this.primaryInteraction;\n } else if (event.buttons === 2) {\n this.draggingInteraction = this.panInteraction;\n } else if (event.buttons === 4) {\n this.draggingInteraction =\n this.lastPrimaryRotateInteraction ?? this.rotateInteraction;\n }\n\n if (\n this.draggingInteraction != null &&\n this.interactionApi != null &&\n this.element != null\n ) {\n // Ensure any scroll wheel interactions have been ended prior to beginning\n // another interaction to prevent the interaction from being ended early.\n this.zoomInteraction.endDrag(event, this.interactionApi);\n\n this.draggingInteraction.beginDrag(\n event,\n this.downPositionCanvas || Point.create(event.clientX, event.clientY),\n this.interactionApi,\n this.element,\n );\n }\n }\n\n protected drag(event: BaseEvent): void {\n if (this.keyboardControls && event.altKey && event.shiftKey) {\n this.currentInteraction = this.twistInteraction;\n } else {\n this.currentInteraction = undefined;\n }\n this.draggingInteraction =\n this.currentInteraction ||\n this.draggingInteraction ||\n this.primaryInteraction;\n if (this.draggingInteraction != null && this.interactionApi != null) {\n this.draggingInteraction.drag(event, this.interactionApi);\n }\n }\n\n protected endDrag(event: BaseEvent): void {\n if (\n this.keyboardControls &&\n this.currentInteraction === this.twistInteraction\n ) {\n this.currentInteraction = undefined;\n }\n\n if (this.draggingInteraction != null && this.interactionApi != null) {\n this.draggingInteraction.endDrag(event, this.interactionApi);\n this.draggingInteraction = undefined;\n }\n }\n\n protected handleMouseWheel(event: WheelEvent): void {\n event.preventDefault();\n\n if (\n this.element != null &&\n this.interactionApi != null &&\n event.buttons !== 4\n ) {\n const delta =\n -this.wheelDeltaToPixels(event.deltaY, event.deltaMode) / 10;\n const rect = this.element.getBoundingClientRect();\n const point = getMouseClientPosition(event, rect);\n const scrollSize = Math.abs(event.deltaY);\n\n if (scrollSize < 12) {\n // For small wheel movements, send a single zoom event.\n void this.zoomInteraction.zoomToPoint(\n point,\n delta,\n this.interactionApi,\n );\n } else {\n const divisions = Math.min(10, Math.ceil(scrollSize / 12));\n const zoomDelta = delta / divisions;\n // For larger wheel movements, divide the delta into multiple zoom events with increasing delay\n // which approximates a smooth zoom deceleration curve for the end user.\n for (let i = 1; i <= divisions; i++) {\n const delayMs = i * 5;\n window.setTimeout(() => {\n if (this.interactionApi != null) {\n this.zoomInteraction.zoomToPoint(\n point,\n zoomDelta,\n this.interactionApi,\n delayMs,\n );\n }\n }, delayMs);\n }\n }\n }\n }\n\n protected wheelDeltaToPixels(deltaY: number, deltaMode: number): number {\n // Cached values are an optimization we can use given mouseWheel\n // events can happen dozen or hundreds of times per scroll, but body style\n // is very unlikely to change frequently or while doing wheel movements.\n if (this.bodyStyleCache == null) {\n const bodyStyle = window.getComputedStyle(document.body);\n const fontSize =\n Number.parseFloat(bodyStyle.getPropertyValue('fontSize')) || DEFAULT_FONT_SIZE;\n const lineHeight = Number.parseFloat(bodyStyle.getPropertyValue('lineHeight'));\n this.bodyStyleCache = {\n lineHeightPixels: Number.isFinite(lineHeight)\n ? lineHeight\n : fontSize * DEFAULT_FONT_TO_LINE_HEIGHT_MULTIPLIER,\n height:\n Number.parseFloat(bodyStyle.getPropertyValue('height')) ||\n window.innerHeight,\n };\n window.setTimeout(() => {\n this.bodyStyleCache = undefined;\n }, 4800); // For now hardcoded. Could be derived. eg mouseWheelInteractionEndDebounce * 12\n }\n\n if (deltaMode === 1) {\n // deltaMode 1 corresponds to DOM_DELTA_LINE, which computes deltas in lines\n return deltaY * this.bodyStyleCache.lineHeightPixels;\n } else if (deltaMode === 2) {\n // deltaMode 2 corresponds to DOM_DELTA_PAGE, which computes deltas in pages\n return deltaY * this.bodyStyleCache.height;\n }\n // deltaMode 0 corresponds to DOM_DELTA_PIXEL, which computes deltas in pixels\n return deltaY;\n }\n\n protected getCanvasPosition(event: BaseEvent): Point.Point | undefined {\n const canvasBounds = this.element?.getBoundingClientRect();\n const canvasOffset =\n canvasBounds != null\n ? Point.create(canvasBounds.left, canvasBounds.top)\n : undefined;\n\n return canvasOffset != null\n ? Point.subtract(Point.create(event.clientX, event.clientY), canvasOffset)\n : undefined;\n }\n\n protected isTouch(event: BaseEvent): boolean {\n return window.PointerEvent != null && event instanceof PointerEvent\n ? event.pointerType === 'touch'\n : false;\n }\n}\n"]}
1
+ {"version":3,"file":"baseInteractionHandler.js","sourceRoot":"","sources":["../../../../../src/lib/interactions/baseInteractionHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { Point } from '@vertexvis/geometry';\nimport { Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\n\nimport { ConfigProvider } from '../config';\nimport { getMouseClientPosition } from '../dom';\nimport { InteractionApi } from './interactionApi';\nimport { BaseEvent } from './interactionEvent';\nimport { InteractionHandler } from './interactionHandler';\nimport {\n MouseInteraction,\n PanInteraction,\n PivotInteraction,\n RotateInteraction,\n RotatePointInteraction,\n TwistInteraction,\n ZoomInteraction,\n} from './mouseInteractions';\n\nexport type InteractionType =\n 'rotate' | 'zoom' | 'pan' | 'twist' | 'rotate-point' | 'pivot';\n\nconst DEFAULT_FONT_SIZE = 16;\nconst DEFAULT_FONT_TO_LINE_HEIGHT_MULTIPLIER = 1.2;\n\nexport abstract class BaseInteractionHandler implements InteractionHandler {\n protected interactionApi?: InteractionApi;\n protected element?: HTMLElement;\n protected downPosition?: Point.Point;\n private downPositionCanvas?: Point.Point;\n private primaryInteraction: MouseInteraction;\n private currentInteraction?: MouseInteraction;\n private draggingInteraction: MouseInteraction | undefined;\n private lastPrimaryRotateInteraction?: MouseInteraction;\n private isDragging = false;\n private lastMoveEvent?: BaseEvent;\n private interactionTimer?: number;\n private keyboardControls = false;\n\n protected disableIndividualInteractions = false;\n\n private bodyStyleCache?: {\n lineHeightPixels: number;\n height: number;\n };\n\n private primaryInteractionTypeChange = new EventDispatcher<void>();\n\n public constructor(\n protected downEvent: 'mousedown' | 'pointerdown',\n protected upEvent: 'mouseup' | 'pointerup',\n protected moveEvent: 'mousemove' | 'pointermove',\n private rotateInteraction: RotateInteraction,\n private rotatePointInteraction: RotatePointInteraction,\n private zoomInteraction: ZoomInteraction,\n private panInteraction: PanInteraction,\n private twistInteraction: TwistInteraction,\n private pivotInteraction: PivotInteraction,\n private getConfig: ConfigProvider,\n ) {\n this.primaryInteraction = rotateInteraction;\n this.handleDownEvent = this.handleDownEvent.bind(this);\n this.handleMouseWheel = this.handleMouseWheel.bind(this);\n this.handleWindowMove = this.handleWindowMove.bind(this);\n this.handleWindowUp = this.handleWindowUp.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.interactionApi = api;\n element.addEventListener(this.downEvent, this.handleDownEvent);\n element.addEventListener('mousedown', this.handleDoubleClick);\n element.addEventListener('wheel', this.handleMouseWheel, {\n passive: false,\n });\n }\n\n public dispose(): void {\n this.element?.removeEventListener(this.downEvent, this.handleDownEvent);\n this.element?.removeEventListener('mousedown', this.handleDoubleClick);\n this.element?.removeEventListener('wheel', this.handleMouseWheel);\n this.element = undefined;\n }\n\n public onPrimaryInteractionTypeChange(listener: Listener<void>): Disposable {\n return this.primaryInteractionTypeChange.on(listener);\n }\n\n public setCurrentInteractionType(type?: InteractionType): void {\n switch (type) {\n case 'rotate':\n this.currentInteraction = this.rotateInteraction;\n break;\n case 'zoom':\n this.currentInteraction = this.zoomInteraction;\n break;\n case 'pan':\n this.currentInteraction = this.panInteraction;\n break;\n case 'twist':\n this.currentInteraction = this.twistInteraction;\n break;\n case 'rotate-point':\n this.currentInteraction = this.rotatePointInteraction;\n break;\n case 'pivot':\n this.currentInteraction = this.pivotInteraction;\n break;\n default:\n this.currentInteraction = undefined;\n }\n\n if (this.draggingInteraction) {\n const point = this.draggingInteraction.getPosition();\n this.draggingInteraction =\n this.currentInteraction || this.primaryInteraction;\n this.interactionApi?.resetLastAngle();\n this.draggingInteraction.setPosition(point);\n }\n }\n\n public getPrimaryInteractionType(): InteractionType {\n return this.primaryInteraction.getType();\n }\n\n public getCurrentInteractionType(): InteractionType {\n return (this.currentInteraction || this.primaryInteraction).getType();\n }\n\n public setPrimaryInteractionType(type: InteractionType): void {\n switch (type) {\n case 'rotate':\n this.primaryInteraction = this.rotateInteraction;\n this.lastPrimaryRotateInteraction = this.rotateInteraction;\n break;\n case 'rotate-point':\n this.primaryInteraction = this.rotatePointInteraction;\n this.lastPrimaryRotateInteraction = this.rotatePointInteraction;\n break;\n case 'zoom':\n this.primaryInteraction = this.zoomInteraction;\n break;\n case 'pan':\n this.primaryInteraction = this.panInteraction;\n break;\n case 'pivot':\n this.primaryInteraction = this.pivotInteraction;\n break;\n }\n this.primaryInteractionTypeChange.emit();\n }\n\n public setDefaultKeyboardControls(keyboardControls: boolean): void {\n this.keyboardControls = keyboardControls;\n }\n\n protected handleDownEvent(event: BaseEvent): void {\n // Prevent selection of any text while interacting with the model.\n event.preventDefault();\n\n this.interactionTimer = window.setTimeout(() => {\n this.downPosition = Point.create(event.screenX, event.screenY);\n this.downPositionCanvas = this.getCanvasPosition(event);\n this.interactionTimer = undefined;\n\n // Perform the current movement in the case that the interaction timer elapses\n if (this.lastMoveEvent != null) {\n this.handleWindowMove(this.lastMoveEvent);\n }\n }, this.getConfig().interactions.interactionDelay);\n\n window.addEventListener(this.moveEvent, this.handleWindowMove);\n window.addEventListener(this.upEvent, this.handleWindowUp);\n }\n\n protected handleWindowMove(event: BaseEvent): void {\n if (this.interactionTimer == null) {\n if (this.disableIndividualInteractions) {\n return;\n }\n\n const position = Point.create(event.screenX, event.screenY);\n const pixelThreshold =\n this.interactionApi != null\n ? this.interactionApi.pixelThreshold(this.isTouch(event))\n : 2;\n if (\n this.downPosition != null &&\n Point.distance(position, this.downPosition) >= pixelThreshold &&\n !this.isDragging\n ) {\n this.beginDrag(event);\n this.isDragging = true;\n }\n\n if (this.isDragging) {\n this.drag(event);\n }\n }\n\n this.lastMoveEvent = event;\n }\n\n protected async handleWindowUp(event: BaseEvent): Promise<void> {\n if (this.isDragging) {\n this.endDrag(event);\n this.isDragging = false;\n }\n\n if (this.interactionTimer != null) {\n window.clearTimeout(this.interactionTimer);\n this.interactionTimer = undefined;\n }\n\n window.removeEventListener(this.moveEvent, this.handleWindowMove);\n window.removeEventListener(this.upEvent, this.handleWindowUp);\n this.lastMoveEvent = undefined;\n }\n\n protected async handleDoubleClick(event: BaseEvent): Promise<void> {\n // event.detail is the number of clicks that have happened recently. If the number is 2, then the user double clicked.\n if (\n event.detail === 2 &&\n event.buttons === 4 &&\n this.interactionApi != null\n ) {\n await this.interactionApi.viewAll();\n }\n }\n\n protected beginDrag(event: BaseEvent): void {\n if (this.keyboardControls && event.metaKey && event.shiftKey) {\n this.currentInteraction = this.rotatePointInteraction;\n } else if (this.keyboardControls && event.shiftKey && event.altKey) {\n this.currentInteraction = this.twistInteraction;\n } else if (this.keyboardControls && event.shiftKey) {\n this.currentInteraction = this.zoomInteraction;\n } else if (this.keyboardControls && (event.metaKey || event.ctrlKey)) {\n this.currentInteraction = this.panInteraction;\n } else if (this.keyboardControls && event.altKey) {\n this.currentInteraction = this.rotateInteraction;\n }\n\n if (event.buttons === 1) {\n this.draggingInteraction =\n this.currentInteraction || this.primaryInteraction;\n } else if (event.buttons === 2) {\n this.draggingInteraction = this.panInteraction;\n } else if (event.buttons === 4) {\n this.draggingInteraction =\n this.lastPrimaryRotateInteraction ?? this.rotateInteraction;\n }\n\n if (\n this.draggingInteraction != null &&\n this.interactionApi != null &&\n this.element != null\n ) {\n // Ensure any scroll wheel interactions have been ended prior to beginning\n // another interaction to prevent the interaction from being ended early.\n this.zoomInteraction.endDrag(event, this.interactionApi);\n\n this.draggingInteraction.beginDrag(\n event,\n this.downPositionCanvas || Point.create(event.clientX, event.clientY),\n this.interactionApi,\n this.element,\n );\n }\n }\n\n protected drag(event: BaseEvent): void {\n if (this.keyboardControls && event.altKey && event.shiftKey) {\n this.currentInteraction = this.twistInteraction;\n } else {\n this.currentInteraction = undefined;\n }\n this.draggingInteraction =\n this.currentInteraction ||\n this.draggingInteraction ||\n this.primaryInteraction;\n if (this.draggingInteraction != null && this.interactionApi != null) {\n this.draggingInteraction.drag(event, this.interactionApi);\n }\n }\n\n protected endDrag(event: BaseEvent): void {\n if (\n this.keyboardControls &&\n this.currentInteraction === this.twistInteraction\n ) {\n this.currentInteraction = undefined;\n }\n\n if (this.draggingInteraction != null && this.interactionApi != null) {\n this.draggingInteraction.endDrag(event, this.interactionApi);\n this.draggingInteraction = undefined;\n }\n }\n\n protected handleMouseWheel(event: WheelEvent): void {\n event.preventDefault();\n\n if (\n this.element != null &&\n this.interactionApi != null &&\n event.buttons !== 4\n ) {\n const delta =\n -this.wheelDeltaToPixels(event.deltaY, event.deltaMode) / 10;\n const rect = this.element.getBoundingClientRect();\n const point = getMouseClientPosition(event, rect);\n const scrollSize = Math.abs(event.deltaY);\n\n if (scrollSize < 12) {\n // For small wheel movements, send a single zoom event.\n void this.zoomInteraction.zoomToPoint(\n point,\n delta,\n this.interactionApi,\n );\n } else {\n const divisions = Math.min(10, Math.ceil(scrollSize / 12));\n const zoomDelta = delta / divisions;\n // For larger wheel movements, divide the delta into multiple zoom events with increasing delay\n // which approximates a smooth zoom deceleration curve for the end user.\n for (let i = 1; i <= divisions; i++) {\n const delayMs = i * 5;\n window.setTimeout(() => {\n if (this.interactionApi != null) {\n this.zoomInteraction.zoomToPoint(\n point,\n zoomDelta,\n this.interactionApi,\n delayMs,\n );\n }\n }, delayMs);\n }\n }\n }\n }\n\n protected wheelDeltaToPixels(deltaY: number, deltaMode: number): number {\n // Cached values are an optimization we can use given mouseWheel\n // events can happen dozen or hundreds of times per scroll, but body style\n // is very unlikely to change frequently or while doing wheel movements.\n if (this.bodyStyleCache == null) {\n const bodyStyle = window.getComputedStyle(document.body);\n const fontSize =\n Number.parseFloat(bodyStyle.getPropertyValue('fontSize')) ||\n DEFAULT_FONT_SIZE;\n const lineHeight = Number.parseFloat(\n bodyStyle.getPropertyValue('lineHeight'),\n );\n this.bodyStyleCache = {\n lineHeightPixels: Number.isFinite(lineHeight)\n ? lineHeight\n : fontSize * DEFAULT_FONT_TO_LINE_HEIGHT_MULTIPLIER,\n height:\n Number.parseFloat(bodyStyle.getPropertyValue('height')) ||\n window.innerHeight,\n };\n window.setTimeout(() => {\n this.bodyStyleCache = undefined;\n }, 4800); // For now hardcoded. Could be derived. eg mouseWheelInteractionEndDebounce * 12\n }\n\n if (deltaMode === 1) {\n // deltaMode 1 corresponds to DOM_DELTA_LINE, which computes deltas in lines\n return deltaY * this.bodyStyleCache.lineHeightPixels;\n } else if (deltaMode === 2) {\n // deltaMode 2 corresponds to DOM_DELTA_PAGE, which computes deltas in pages\n return deltaY * this.bodyStyleCache.height;\n }\n // deltaMode 0 corresponds to DOM_DELTA_PIXEL, which computes deltas in pixels\n return deltaY;\n }\n\n protected getCanvasPosition(event: BaseEvent): Point.Point | undefined {\n const canvasBounds = this.element?.getBoundingClientRect();\n const canvasOffset =\n canvasBounds != null\n ? Point.create(canvasBounds.left, canvasBounds.top)\n : undefined;\n\n return canvasOffset != null\n ? Point.subtract(Point.create(event.clientX, event.clientY), canvasOffset)\n : undefined;\n }\n\n protected isTouch(event: BaseEvent): boolean {\n return window.PointerEvent != null && event instanceof PointerEvent\n ? event.pointerType === 'touch'\n : false;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"scene.js","sourceRoot":"","sources":["../../../../../src/lib/scenes/scene.ts"],"names":[],"mappings":"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","sourcesContent":["import { vertexvis } from '@vertexvis/frame-streaming-protos';\nimport { BoundingBox, Dimensions, Point } from '@vertexvis/geometry';\nimport { StreamApi } from '@vertexvis/stream-api';\nimport { UUID } from '@vertexvis/utils';\n\nimport { CameraType } from '../../interfaces';\nimport { InvalidArgumentError, InvalidCameraError } from '../errors';\nimport { CameraTypeEncoder, FrameDecoder } from '../mappers';\nimport { SceneViewStateIdentifier } from '../types';\nimport { Frame } from '../types/frame';\nimport {\n Camera,\n CameraRenderOptions,\n OrthographicCamera,\n PerspectiveCamera,\n} from '.';\nimport { ColorMaterial, fromHex } from './colorMaterial';\nimport { CrossSectioner } from './crossSectioner';\nimport {\n buildSceneElementOperationOnAnnotation,\n buildSceneElementOperationOnItem,\n} from './mapper';\nimport {\n ItemOperation,\n ItemOperationBuilder,\n PmiAnnotationOperation,\n PmiAnnotationOperationBuilder,\n PmiAnnotationOperations,\n RepresentationId,\n SceneItemOperations,\n} from './operations';\nimport {\n QueryExpression,\n SceneElementQueryExecutor,\n SceneItemQueryExecutor,\n} from './queries';\nimport { Raycaster } from './raycaster';\nimport { SceneOperationExecuteResult } from './sceneOperationExecuteResult';\nimport { SceneViewStateLoader } from './sceneViewStateLoader';\n\nexport interface SceneExecutionOptions {\n suppliedCorrelationId?: string;\n}\n\nexport interface SceneElementsExecutionOptions extends SceneExecutionOptions {\n /**\n * Skips the wait for a frame correlated to this alteration before\n * completing the Promise returned by the `execute()` method.\n */\n skipAwaitCorrelatedFrame?: boolean;\n}\n\nexport interface SceneItemsExecutionOptions extends SceneExecutionOptions {\n /**\n * Waits for the frame correlated to this alteration before\n * completing the Promise returned by the `execute()` method.\n */\n awaitCorrelatedFrame?: boolean;\n}\n\nexport interface ApplySceneViewStateOptions\n extends SceneElementsExecutionOptions, CameraRenderOptions {\n waitForAnimation?: boolean;\n cameraTypeOverride?: CameraType;\n}\n\nexport interface ResetViewOptions {\n includeCamera?: boolean;\n cameraTypeOverride?: CameraType;\n suppliedCorrelationId?: string;\n}\n\nexport interface SceneElementOperationsBuilder {\n isItemBuilder(): this is SceneItemOperationsBuilder;\n isAnnotationBuilder(): this is PmiAnnotationOperationsBuilder;\n}\n\n/**\n * A class that is responsible for building operations on scene items for a specific scene.\n * This executor requires a query, and expects `execute()` to be invoked in\n * order for the changes to take effect.\n */\nexport class SceneItemOperationsBuilder\n implements\n SceneItemOperations<SceneItemOperationsBuilder>,\n SceneElementOperationsBuilder\n{\n private builder: ItemOperationBuilder;\n\n public constructor(\n private query: QueryExpression,\n givenBuilder?: ItemOperationBuilder,\n ) {\n this.builder = givenBuilder ?? new ItemOperationBuilder();\n }\n\n public isItemBuilder(): this is SceneItemOperationsBuilder {\n return true;\n }\n\n public isAnnotationBuilder(): this is PmiAnnotationOperationsBuilder {\n return false;\n }\n\n /**\n * Specifies that the scene items matching the query should have their default\n * material overridden to match the specified material.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Override the material for the item with the `item-uuid` ID to\n * // be red with an opacity of 0.5.\n * await scene.elements((op) => [\n * op\n * .items.where((q) => q.withItemId('item-uuid'))\n * .materialOverride(ColorMaterial.create(255, 0, 0, 0.5)),\n * ]);\n *\n * // Override the material for the item with the `item-uuid` ID to\n * // be red with an opacity of 1.\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).materialOverride('#ff0000'),\n * ]).execute();\n * ```\n */\n public materialOverride(\n color: ColorMaterial | string,\n ): SceneItemOperationsBuilder {\n if (typeof color === 'string') {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.materialOverride(fromHex(color)),\n );\n } else {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.materialOverride(color),\n );\n }\n }\n\n /**\n * Specifies that the scene items matching the query should be hidden.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Hide the item with the `item-uuid` ID\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).hide(),\n * ]).execute();\n * ```\n */\n public hide(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(this.query, this.builder.hide());\n }\n\n /**\n * Specifies that the scene items matching the query should be shown.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Show the item with the `item-uuid` ID\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).show(),\n * ]).execute();\n * ```\n */\n public show(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(this.query, this.builder.show());\n }\n\n /**\n * Specifies that the scene items matching the query should be selected.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Select the item with the `item-uuid` ID\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).select(),\n * ]).execute();\n * ```\n */\n public select(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(this.query, this.builder.select());\n }\n\n /**\n * Specifies that the scene items matching the query should be deselected.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Deselect the item with the `item-uuid` ID\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).deselect(),\n * ]).execute();\n * ```\n */\n public deselect(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(this.query, this.builder.deselect());\n }\n\n /**\n * Specifies that the scene items matching the query should have any overridden\n * material removed.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Clear the overridden material on the item with the `item-uuid` ID\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).clearMaterialOverrides(),\n * ]);\n * ```\n */\n public clearMaterialOverrides(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.clearMaterialOverrides(),\n );\n }\n\n /**\n * Specifies that the scene items matching the query should have their\n * transformation matrix overridden to match the specified transformation\n * matrix.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Override the transformation matrix for the item with the `item-uuid` ID to\n * // move the element along the x-axis\n * await scene.elements((op) => [\n * op\n * .items.where((q) => q.withItemId('item-uuid'))\n * .transform(Matrix4.makeTranslation(Vector3.create(100, 0, 0))),\n * ]);\n * ```\n */\n public transform(\n matrix: vertexvis.protobuf.core.IMatrix4x4f | number[],\n ): SceneItemOperationsBuilder {\n if (Array.isArray(matrix)) {\n if (matrix.length !== 16) {\n throw new InvalidArgumentError(\n 'Matrix provided must contain exactly 16 values (4x4).',\n );\n }\n\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.transform({\n r0: {\n x: matrix[0],\n y: matrix[1],\n z: matrix[2],\n w: matrix[3],\n },\n r1: {\n x: matrix[4],\n y: matrix[5],\n z: matrix[6],\n w: matrix[7],\n },\n r2: {\n x: matrix[8],\n y: matrix[9],\n z: matrix[10],\n w: matrix[11],\n },\n r3: {\n x: matrix[12],\n y: matrix[13],\n z: matrix[14],\n w: matrix[15],\n },\n }),\n );\n } else {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.transform(matrix),\n );\n }\n }\n\n /**\n * Specifies that the scene items matching the query should have their overridden\n * transformation matrix removed. The `cascade` flag determines whether\n * children of the scene items matching the query should also have their overridden\n * transformation matrix removed, and defaults to `true`.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Clear the overridden the transformation matrix for the item with the `item-uuid` ID\n * // and do not cascade to preserve transformations on children\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).clearTransforms(false),\n * ]);\n *\n * // Clear the overridden the transformation matrix for the item with the `item-uuid` ID\n * // and cascade to clear overridden transformations on children\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).clearTransforms(true),\n * ]);\n * ```\n */\n public clearTransforms(cascade = true): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.clearTransforms(cascade),\n );\n }\n\n /**\n * Specifies that the scene items matching the query should have their phantom state\n * overridden to match the specified `phantomState` flag. If the\n * `phantomState` flag is not provided, it will default to `true`.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Mark the item with the `item-uuid` ID as phantom\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).setPhantom(true),\n * ]);\n *\n * // Unmark the item with the `item-uuid` ID as phantom\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).setPhantom(false),\n * ]);\n * ```\n */\n public setPhantom(phantomState?: boolean): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.setPhantom(phantomState),\n );\n }\n\n /**\n * Specifies that the scene items matching the query should have their overridden\n * phantom state removed.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Clear the overridden phantom state of the item with the `item-uuid` ID\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).clearPhantom(),\n * ]);\n * ```\n */\n public clearPhantom(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.clearPhantom(),\n );\n }\n\n /**\n * Specifies that the scene items matching the query should have their end item\n * state overridden to match the specified `endItemState` flag. If the\n * `endItemState` flag is not provided, it will default to `true`.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Mark the item with the `item-uuid` ID as an end item\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).setEndItem(true),\n * ]);\n *\n * // Unmark the item with the `item-uuid` ID as an end item\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).setEndItem(false),\n * ]);\n * ```\n *\n * @remarks\n * End item states do not propagate to children similar to other states like\n * other operations. I.e. calling setEndItem(false) on an item will cause it\n * to be unmarked as an end item, but any children where setEndItem(true) was\n * called previously will remain as end items.\n */\n public setEndItem(endItemState?: boolean): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.setEndItem(endItemState),\n );\n }\n\n /**\n * Specifies that the scene items matching the query should have their overridden\n * end item state removed.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Clear the overridden end item state of the item with the `item-uuid` ID\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).clearEndItem(),\n * ]);\n * ```\n */\n public clearEndItem(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.clearEndItem(),\n );\n }\n\n /**\n * Changes the rendition of a scene item matching the query. This operation only\n * applies to scene items that reference a revision that contains the given\n * rendition.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Switch the rendition of the matching item.\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).viewRenditionById('rendition-uuid'),\n * ]);\n * ```\n */\n public viewRenditionById(id: UUID.UUID): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.viewRenditionById(id),\n );\n }\n\n /**\n * Changes the rendition of any scene item matching the query that contains a\n * rendition with the given supplied ID. This operation only applies to scene items\n * that reference a revision that contain a rendition with a matching supplied\n * ID.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Switch the rendition of the given item.\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).viewRenditionBySuppliedId('rendition-supplied-id'),\n * ]);\n * ```\n */\n public viewRenditionBySuppliedId(\n suppliedId: string,\n ): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.viewRenditionBySuppliedId(suppliedId),\n );\n }\n\n /**\n * Changes the rendition of scene items matching the query back to their revision's\n * default rendition. This operation only applies to scene items that reference a\n * revision.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Switch the rendition of the given item.\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).viewDefaultRendition(),\n * ]);\n * ```\n */\n public viewDefaultRendition(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.viewDefaultRendition(),\n );\n }\n\n /**\n * Clears the rendition of scene items matching the query, which will revert the\n * scene item back to the rendition used when creating the item.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Switch the rendition of the given item.\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).clearRendition(),\n * ]);\n * ```\n */\n public clearRendition(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.clearRendition(),\n );\n }\n\n /**\n * Changes the representation of scene items matching a query. This operation only\n * applies to scene items that reference a rendition with the given representation\n * ID.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Switch the rendition of the given item.\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).viewRepresentation('rep-id'),\n * ]);\n * ```\n */\n public viewRepresentation(id: RepresentationId): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.viewRepresentation(id),\n );\n }\n\n /**\n * Clears the representation for scene items matching the query.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Switch the rendition of the given item.\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).clearRepresentation(),\n * ]);\n * ```\n */\n public clearRepresentation(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.clearRepresentation(),\n );\n }\n\n /**\n * @internal\n */\n public build(): QueryOperation {\n return {\n query: this.query,\n operations: this.builder.build(),\n };\n }\n}\n\n/**\n * @ignore\n * @beta PMI Annotation operations are being actively developed. These APIs\n * should be considered unstable, and will potentially change with following\n * releases.\n *\n * A class that is responsible for building operations on pmi annotations for a specific scene.\n * This executor requires a query, and expects `execute()` to be invoked in\n * order for the changes to take effect.\n */\nexport class PmiAnnotationOperationsBuilder\n implements\n PmiAnnotationOperations<PmiAnnotationOperationsBuilder>,\n SceneElementOperationsBuilder\n{\n private builder: PmiAnnotationOperationBuilder;\n\n public constructor(\n private query: QueryExpression,\n givenBuilder?: PmiAnnotationOperationBuilder,\n ) {\n this.builder = givenBuilder ?? new PmiAnnotationOperationBuilder();\n }\n\n public isItemBuilder(): this is SceneItemOperationsBuilder {\n return false;\n }\n\n public isAnnotationBuilder(): this is PmiAnnotationOperationsBuilder {\n return true;\n }\n\n /**\n * @ignore\n * @beta PMI Annotation operations are being actively developed. These APIs\n * should be considered unstable, and will potentially change with following\n * releases.\n *\n * Specifies that the PMI annotations matching the query should be hidden.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Hide the annotation with the `annotation-uuid` ID\n * await scene.elements((op) => [\n * op.annotations.where((q) => q.withAnnotationId('annotation-uuid')).hide(),\n * ]).execute();\n * ```\n */\n public hide(): PmiAnnotationOperationsBuilder {\n return new PmiAnnotationOperationsBuilder(this.query, this.builder.hide());\n }\n\n /**\n * @ignore\n * @beta PMI Annotation operations are being actively developed. These APIs\n * should be considered unstable, and will potentially change with following\n * releases.\n *\n * Specifies that the PMI annotations matching the query should be shown.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Show the annotation with the `annotation-uuid` ID\n * await scene.elements((op) => [\n * op.annotations.where((q) => q.withAnnotationId('annotation-uuid')).show(),\n * ]).execute();\n * ```\n */\n public show(): PmiAnnotationOperationsBuilder {\n return new PmiAnnotationOperationsBuilder(this.query, this.builder.show());\n }\n\n /**\n * @ignore\n * @beta PMI Annotation operations are being actively developed. These APIs\n * should be considered unstable, and will potentially change with following\n * releases.\n *\n * Specifies that the PMI annotations matching the query should be selected.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Select the annotation with the `annotation-uuid` ID\n * await scene.elements((op) => [\n * op.annotations.where((q) => q.withAnnotationId('annotation-uuid')).select(),\n * ]).execute();\n * ```\n */\n public select(): PmiAnnotationOperationsBuilder {\n return new PmiAnnotationOperationsBuilder(\n this.query,\n this.builder.select(),\n );\n }\n\n /**\n * @ignore\n * @beta PMI Annotation operations are being actively developed. These APIs\n * should be considered unstable, and will potentially change with following\n * releases.\n *\n * Specifies that the PMI annotations matching the query should be deselected.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Deselect the annotation with the `annotation-uuid` ID\n * await scene.elements((op) => [\n * op.annotations.where((q) => q.withAnnotationId('annotation-uuid')).deselect(),\n * ]).execute();\n * ```\n */\n public deselect(): PmiAnnotationOperationsBuilder {\n return new PmiAnnotationOperationsBuilder(\n this.query,\n this.builder.deselect(),\n );\n }\n\n /**\n * @internal\n */\n public build(): QueryAnnotationOperation {\n return {\n query: this.query,\n operations: this.builder.build(),\n };\n }\n}\n\nexport interface QueryOperation {\n query: QueryExpression;\n operations: ItemOperation[];\n}\n\nexport interface QueryAnnotationOperation {\n query: QueryExpression;\n operations: PmiAnnotationOperation[];\n}\n\nexport class OperationExecutor<T extends SceneExecutionOptions> {\n public constructor(\n protected sceneViewId: UUID.UUID,\n protected stream: StreamApi,\n protected decodeFrame: FrameDecoder,\n protected dimensions: Dimensions.Dimensions,\n protected sceneItemQueryOperations: QueryOperation[],\n protected pmiAnnotationQueryOperations: QueryAnnotationOperation[],\n ) {}\n\n public async execute(executionOptions?: T): Promise<void> {\n const pbItemOperations = this.sceneItemQueryOperations.map((op) =>\n buildSceneElementOperationOnItem(op.query, op.operations, {\n dimensions: this.dimensions,\n }),\n );\n const pbPmiAnnotationOperations = this.pmiAnnotationQueryOperations.map(\n (op) =>\n buildSceneElementOperationOnAnnotation(op.query, op.operations, {\n dimensions: this.dimensions,\n }),\n );\n\n const requestCorrelationId =\n executionOptions?.suppliedCorrelationId ?? UUID.create();\n\n const request = {\n sceneViewId: {\n hex: this.sceneViewId,\n },\n elementOperations: [...pbItemOperations, ...pbPmiAnnotationOperations],\n suppliedCorrelationId: {\n value: requestCorrelationId,\n },\n };\n\n await this.stream.createSceneAlteration(request);\n }\n}\n\nexport class SceneItemsOperationExecutor extends OperationExecutor<SceneItemsExecutionOptions> {\n public async execute(\n executionOptions?: SceneItemsExecutionOptions,\n ): Promise<void> {\n if (executionOptions?.awaitCorrelatedFrame) {\n const correlationId =\n executionOptions.suppliedCorrelationId ?? UUID.create();\n const executeResult = new SceneOperationExecuteResult(\n this.stream,\n this.decodeFrame,\n correlationId,\n );\n\n await super.execute({\n ...executionOptions,\n suppliedCorrelationId: correlationId,\n });\n await executeResult.onFrameDrawn.once();\n } else {\n await super.execute(executionOptions);\n }\n }\n}\n\nexport class SceneElementsOperationExecutor extends OperationExecutor<SceneElementsExecutionOptions> {\n public async execute(\n executionOptions?: SceneElementsExecutionOptions,\n ): Promise<void> {\n if (executionOptions?.skipAwaitCorrelatedFrame) {\n await super.execute(executionOptions);\n } else {\n const correlationId =\n executionOptions?.suppliedCorrelationId ?? UUID.create();\n const executeResult = new SceneOperationExecuteResult(\n this.stream,\n this.decodeFrame,\n correlationId,\n );\n\n await super.execute({\n ...executionOptions,\n suppliedCorrelationId: correlationId,\n });\n await executeResult.onFrameDrawn.once();\n }\n }\n}\n\nexport type TerminalItemOperationBuilder =\n | PmiAnnotationOperationsBuilder\n | SceneItemOperationsBuilder\n | Array<SceneItemOperationsBuilder | PmiAnnotationOperationsBuilder>;\n\nexport type ImageScaleProvider = () => Point.Point | undefined;\n\n/**\n * The features of a scene view state that can be applied to the current scene\n */\nexport type SceneViewStateFeature =\n | 'camera'\n | 'cross_section'\n | 'material_overrides'\n | 'selection'\n | 'transforms'\n | 'visibility'\n | 'phantom'\n | 'shading';\n\n/**\n * A class that represents the `Scene` that has been loaded into the viewer. On\n * it, you can retrieve attributes of the scene, such as the camera. It also\n * contains methods for updating the scene and performing requests to rerender\n * the scene.\n */\nexport class Scene {\n private sceneViewStateLoader: SceneViewStateLoader;\n\n public constructor(\n private stream: StreamApi,\n private frame: Frame,\n private decodeFrame: FrameDecoder,\n private encodeCameraType: CameraTypeEncoder,\n private imageScaleProvider: ImageScaleProvider,\n private dimensions: Dimensions.Dimensions,\n public readonly sceneId: UUID.UUID,\n public readonly sceneViewId: UUID.UUID,\n ) {\n this.sceneViewStateLoader = new SceneViewStateLoader(\n stream,\n decodeFrame,\n encodeCameraType,\n sceneId,\n sceneViewId,\n );\n }\n\n /**\n * Applies the provided scene view state to the scene.\n */\n public async applySceneViewState(\n sceneViewStateId:\n | UUID.UUID\n | SceneViewStateIdentifier.SceneViewStateIdentifier,\n opts: ApplySceneViewStateOptions = {},\n ): Promise<vertexvis.protobuf.stream.ILoadSceneViewStateResult | undefined> {\n return await this.sceneViewStateLoader.applySceneViewState(\n sceneViewStateId,\n opts,\n );\n }\n\n /**\n * Applies the specified features of the provided scene view state to the scene.\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 return await this.sceneViewStateLoader.applyPartialSceneViewState(\n sceneViewStateId,\n featuresToApply,\n opts,\n );\n }\n\n /**\n * Resets the view to its default state, with the ability to reset the camera to that of the base scene.\n */\n public async reset(\n opts: ResetViewOptions = {},\n ): Promise<vertexvis.protobuf.stream.IResetViewResult | undefined> {\n return await this.stream.resetSceneView(\n {\n includeCamera: opts.includeCamera,\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 /**\n * Returns an executor that accepts a function as a parameter that contains one or more operations to apply\n * to the scene view. The operations will be applied transactionally.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Deselect everything, then select a specific item by ID\n * await scene.items(op => [\n * op.items.where(q => q.all()).deselect(),\n * op.items.where(q => q.withItemId('item-id')).select(),\n * ]).execute();\n * ```\n *\n * @see {@link RootQuery} for more information on available queries.\n *\n * @see {@link SceneItemOperationsBuilder} for more information on available operations.\n *\n * @param operations\n */\n public items(\n operations: (q: SceneItemQueryExecutor) => TerminalItemOperationBuilder,\n ): SceneItemsOperationExecutor {\n const sceneOperations = operations(new SceneItemQueryExecutor());\n\n const ops: Array<\n SceneItemOperationsBuilder | PmiAnnotationOperationsBuilder\n > = Array.isArray(sceneOperations) ? sceneOperations : [sceneOperations];\n const itemOps = ops.filter((op) =>\n op.isItemBuilder(),\n ) as Array<SceneItemOperationsBuilder>;\n\n const operationList = itemOps.reduce(\n (acc, builder: SceneItemOperationsBuilder) => acc.concat(builder.build()),\n [] as QueryOperation[],\n );\n\n return new SceneItemsOperationExecutor(\n this.sceneViewId,\n this.stream,\n this.decodeFrame,\n this.dimensions,\n operationList,\n [],\n );\n }\n\n /**\n * Returns an executor that accepts a function as a parameter that contains one or more operations to apply\n * to items or annotations in the scene view. The operations will be applied transactionally.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Deselect everything, then select a specific scene item by ID\n * await scene.elements(op => [\n * op.items.where(q => q.all()).deselect(),\n * op.annotations.where(q => q.all()).deselect(),\n * op.items.where(q => q.withItemId('item-id')).select(),\n * ]).execute();\n * ```\n *\n * @see {@link RootQuery} for more information on available queries on scene items.\n *\n * @see {@link SceneItemOperationsBuilder} for more information on available operations to the scene items.\n *\n * @see {@link PmiAnnotationRootQuery} for more information on available queries on PMI annotations.\n *\n * @see {@link PmiAnnotationOperationsBuilder} for more information on available operations to the PMI annotations.\n *\n * @param operations\n */\n public elements(\n operations: (q: SceneElementQueryExecutor) => TerminalItemOperationBuilder,\n ): SceneElementsOperationExecutor {\n const ops = operations(new SceneElementQueryExecutor());\n const opsAsArray = Array.isArray(ops) ? ops : [ops];\n\n // Operations on scene items\n const sceneItemOps = opsAsArray.filter((op) =>\n op.isItemBuilder(),\n ) as Array<SceneItemOperationsBuilder>;\n const sceneItemsOperationList = sceneItemOps.reduce(\n (acc, builder: SceneItemOperationsBuilder) => acc.concat(builder.build()),\n [] as QueryOperation[],\n );\n\n // Operations on PMI annotations\n const pmiAnnotationOps = opsAsArray.filter((op) =>\n op.isAnnotationBuilder(),\n ) as Array<PmiAnnotationOperationsBuilder>;\n const pmiAnnotationOperationList = pmiAnnotationOps.reduce(\n (acc, builder: PmiAnnotationOperationsBuilder) =>\n acc.concat(builder.build()),\n [] as QueryAnnotationOperation[],\n );\n\n return new SceneElementsOperationExecutor(\n this.sceneViewId,\n this.stream,\n this.decodeFrame,\n this.dimensions,\n sceneItemsOperationList,\n pmiAnnotationOperationList,\n );\n }\n\n /**\n * An instance of the current camera of the scene. The camera provides a number of\n * methods that can be used in combination with the `render` method to make programmatic\n * updates to the scene's camera.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n * const camera = scene.camera();\n *\n * // Fit the camera to the visible bounding box of the scene with a 1 second animation\n * await camera.viewAll().render({ animation: { milliseconds: 1000 } });\n * ```\n *\n * @see {@link Camera} for more information on available camera operations.\n */\n public camera(): Camera {\n const { scene } = this.frame;\n\n if (scene.camera.isOrthographic()) {\n return new OrthographicCamera(\n this.stream,\n Dimensions.aspectRatio(this.viewport()),\n {\n viewVector: scene.camera.viewVector,\n lookAt: scene.camera.lookAt,\n up: scene.camera.up,\n fovHeight: scene.camera.fovHeight,\n rotationPoint: scene.camera.lookAt,\n },\n this.frame.scene.boundingBox,\n this.decodeFrame,\n );\n } else if (scene.camera.isPerspective()) {\n return new PerspectiveCamera(\n this.stream,\n Dimensions.aspectRatio(this.viewport()),\n {\n position: scene.camera.position,\n lookAt: scene.camera.lookAt,\n up: scene.camera.up,\n fovY: scene.camera.fovY,\n },\n this.frame.scene.boundingBox,\n this.decodeFrame,\n );\n } else {\n throw new InvalidCameraError(\n 'Cannot retrieve camera. Scene has an unknown or invalid camera type.',\n );\n }\n }\n\n public isOrthographic(): boolean {\n const { scene } = this.frame;\n\n return scene.camera.isOrthographic();\n }\n\n /**\n * Returns the current visible BoundingBox for the scene.\n */\n public boundingBox(): BoundingBox.BoundingBox {\n return this.frame.scene.boundingBox;\n }\n\n /**\n * CrossSectioner to update cross sectioning planes and get current configuration.\n */\n public crossSectioning(): CrossSectioner {\n return new CrossSectioner(this.stream, this.frame.scene.crossSection);\n }\n\n /**\n * Raycaster to request items that intersect a point.\n */\n public raycaster(): Raycaster {\n return new Raycaster(this.stream, this.imageScaleProvider);\n }\n\n /**\n * The current viewport of the scene, in pixels.\n */\n public viewport(): Dimensions.Dimensions {\n return this.frame.dimensions;\n }\n\n /**\n * The current x and y scale of the rendered image.\n */\n public scale(): Point.Point {\n return this.imageScaleProvider() || Point.create(1, 1);\n }\n}\n"]}
1
+ {"version":3,"file":"scene.js","sourceRoot":"","sources":["../../../../../src/lib/scenes/scene.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,UAAU,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAGxC,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAIrE,OAAO,EAGL,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,GAAG,CAAC;AACX,OAAO,EAAiB,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EACL,sCAAsC,EACtC,gCAAgC,GACjC,MAAM,UAAU,CAAC;AAClB,OAAO,EAEL,oBAAoB,EAEpB,6BAA6B,GAI9B,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAuC9D;;;;GAIG;AACH,MAAM,OAAO,0BAA0B;IAOrC,YACU,KAAsB,EAC9B,YAAmC;QAD3B,UAAK,GAAL,KAAK,CAAiB;QAG9B,IAAI,CAAC,OAAO,GAAG,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,IAAI,oBAAoB,EAAE,CAAC;IAC5D,CAAC;IAEM,aAAa;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,mBAAmB;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACI,gBAAgB,CACrB,KAA6B;QAE7B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAC9C,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CACrC,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;OAaG;IACI,IAAI;QACT,OAAO,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;IAED;;;;;;;;;;;;;OAaG;IACI,IAAI;QACT,OAAO,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;IAED;;;;;;;;;;;;;OAaG;IACI,MAAM;QACX,OAAO,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED;;;;;;;;;;;;;OAaG;IACI,QAAQ;QACb,OAAO,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACI,sBAAsB;QAC3B,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CACtC,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACI,SAAS,CACd,MAAsD;QAEtD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;gBACzB,MAAM,IAAI,oBAAoB,CAC5B,uDAAuD,CACxD,CAAC;YACJ,CAAC;YAED,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;gBACrB,EAAE,EAAE;oBACF,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;oBACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;oBACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;oBACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;iBACb;gBACD,EAAE,EAAE;oBACF,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;oBACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;oBACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;oBACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;iBACb;gBACD,EAAE,EAAE;oBACF,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;oBACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;oBACZ,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;oBACb,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;iBACd;gBACD,EAAE,EAAE;oBACF,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;oBACb,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;oBACb,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;oBACb,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;iBACd;aACF,CAAC,CACH,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAC/B,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACI,eAAe,CAAC,OAAO,GAAG,IAAI;QACnC,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CACtC,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACI,UAAU,CAAC,YAAsB;QACtC,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CACtC,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACI,YAAY;QACjB,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAC5B,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACI,UAAU,CAAC,YAAsB;QACtC,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CACtC,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACI,YAAY;QACjB,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAC5B,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACI,iBAAiB,CAAC,EAAa;QACpC,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC,CACnC,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACI,yBAAyB,CAC9B,UAAkB;QAElB,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,UAAU,CAAC,CACnD,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACI,oBAAoB;QACzB,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CACpC,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACI,cAAc;QACnB,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAC9B,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACI,kBAAkB,CAAC,EAAoB;QAC5C,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC,CACpC,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;OAaG;IACI,mBAAmB;QACxB,OAAO,IAAI,0BAA0B,CACnC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CACnC,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,KAAK;QACV,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;SACjC,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;;;GASG;AACH,MAAM,OAAO,8BAA8B;IAOzC,YACU,KAAsB,EAC9B,YAA4C;QADpC,UAAK,GAAL,KAAK,CAAiB;QAG9B,IAAI,CAAC,OAAO,GAAG,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,IAAI,6BAA6B,EAAE,CAAC;IACrE,CAAC;IAEM,aAAa;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,mBAAmB;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACI,IAAI;QACT,OAAO,IAAI,8BAA8B,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACI,IAAI;QACT,OAAO,IAAI,8BAA8B,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACI,MAAM;QACX,OAAO,IAAI,8BAA8B,CACvC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CACtB,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACI,QAAQ;QACb,OAAO,IAAI,8BAA8B,CACvC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CACxB,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,KAAK;QACV,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;SACjC,CAAC;IACJ,CAAC;CACF;AAYD,MAAM,OAAO,iBAAiB;IAC5B,YACY,WAAsB,EACtB,MAAiB,EACjB,WAAyB,EACzB,UAAiC,EACjC,wBAA0C,EAC1C,4BAAwD;QALxD,gBAAW,GAAX,WAAW,CAAW;QACtB,WAAM,GAAN,MAAM,CAAW;QACjB,gBAAW,GAAX,WAAW,CAAc;QACzB,eAAU,GAAV,UAAU,CAAuB;QACjC,6BAAwB,GAAxB,wBAAwB,CAAkB;QAC1C,iCAA4B,GAA5B,4BAA4B,CAA4B;IACjE,CAAC;IAEG,KAAK,CAAC,OAAO,CAAC,gBAAoB;;QACvC,MAAM,gBAAgB,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAChE,gCAAgC,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,EAAE;YACxD,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CACH,CAAC;QACF,MAAM,yBAAyB,GAAG,IAAI,CAAC,4BAA4B,CAAC,GAAG,CACrE,CAAC,EAAE,EAAE,EAAE,CACL,sCAAsC,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,EAAE;YAC9D,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CACL,CAAC;QAEF,MAAM,oBAAoB,GACxB,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,qBAAqB,mCAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAE3D,MAAM,OAAO,GAAG;YACd,WAAW,EAAE;gBACX,GAAG,EAAE,IAAI,CAAC,WAAW;aACtB;YACD,iBAAiB,EAAE,CAAC,GAAG,gBAAgB,EAAE,GAAG,yBAAyB,CAAC;YACtE,qBAAqB,EAAE;gBACrB,KAAK,EAAE,oBAAoB;aAC5B;SACF,CAAC;QAEF,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;CACF;AAED,MAAM,OAAO,2BAA4B,SAAQ,iBAA6C;IACrF,KAAK,CAAC,OAAO,CAClB,gBAA6C;;QAE7C,IAAI,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,oBAAoB,EAAE,CAAC;YAC3C,MAAM,aAAa,GACjB,MAAA,gBAAgB,CAAC,qBAAqB,mCAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1D,MAAM,aAAa,GAAG,IAAI,2BAA2B,CACnD,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,EAChB,aAAa,CACd,CAAC;YAEF,MAAM,KAAK,CAAC,OAAO,CAAC;gBAClB,GAAG,gBAAgB;gBACnB,qBAAqB,EAAE,aAAa;aACrC,CAAC,CAAC;YACH,MAAM,aAAa,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;CACF;AAED,MAAM,OAAO,8BAA+B,SAAQ,iBAAgD;IAC3F,KAAK,CAAC,OAAO,CAClB,gBAAgD;;QAEhD,IAAI,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,wBAAwB,EAAE,CAAC;YAC/C,MAAM,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,MAAM,aAAa,GACjB,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,qBAAqB,mCAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC3D,MAAM,aAAa,GAAG,IAAI,2BAA2B,CACnD,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,EAChB,aAAa,CACd,CAAC;YAEF,MAAM,KAAK,CAAC,OAAO,CAAC;gBAClB,GAAG,gBAAgB;gBACnB,qBAAqB,EAAE,aAAa;aACrC,CAAC,CAAC;YACH,MAAM,aAAa,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAC1C,CAAC;IACH,CAAC;CACF;AAsBD;;;;;GAKG;AACH,MAAM,OAAO,KAAK;IAGhB,YACU,MAAiB,EACjB,KAAY,EACZ,WAAyB,EACzB,gBAAmC,EACnC,kBAAsC,EACtC,UAAiC,EACzB,OAAkB,EAClB,WAAsB;QAP9B,WAAM,GAAN,MAAM,CAAW;QACjB,UAAK,GAAL,KAAK,CAAO;QACZ,gBAAW,GAAX,WAAW,CAAc;QACzB,qBAAgB,GAAhB,gBAAgB,CAAmB;QACnC,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,eAAU,GAAV,UAAU,CAAuB;QACzB,YAAO,GAAP,OAAO,CAAW;QAClB,gBAAW,GAAX,WAAW,CAAW;QAEtC,IAAI,CAAC,oBAAoB,GAAG,IAAI,oBAAoB,CAClD,MAAM,EACN,WAAW,EACX,gBAAgB,EAChB,OAAO,EACP,WAAW,CACZ,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,mBAAmB,CAC9B,gBAC+D,EAC/D,OAAmC,EAAE;QAErC,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CACxD,gBAAgB,EAChB,IAAI,CACL,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,0BAA0B,CACrC,gBAC+D,EAC/D,eAAwC,EACxC,OAAmC,EAAE;QAErC,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,0BAA0B,CAC/D,gBAAgB,EAChB,eAAe,EACf,IAAI,CACL,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,KAAK,CAChB,OAAyB,EAAE;QAE3B,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CACrC;YACE,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,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;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACI,KAAK,CACV,UAAuE;QAEvE,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,sBAAsB,EAAE,CAAC,CAAC;QAEjE,MAAM,GAAG,GAEL,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QACzE,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAChC,EAAE,CAAC,aAAa,EAAE,CACkB,CAAC;QAEvC,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAClC,CAAC,GAAG,EAAE,OAAmC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EACzE,EAAsB,CACvB,CAAC;QAEF,OAAO,IAAI,2BAA2B,CACpC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,UAAU,EACf,aAAa,EACb,EAAE,CACH,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACI,QAAQ,CACb,UAA0E;QAE1E,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,yBAAyB,EAAE,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAEpD,4BAA4B;QAC5B,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAC5C,EAAE,CAAC,aAAa,EAAE,CACkB,CAAC;QACvC,MAAM,uBAAuB,GAAG,YAAY,CAAC,MAAM,CACjD,CAAC,GAAG,EAAE,OAAmC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EACzE,EAAsB,CACvB,CAAC;QAEF,gCAAgC;QAChC,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAChD,EAAE,CAAC,mBAAmB,EAAE,CACgB,CAAC;QAC3C,MAAM,0BAA0B,GAAG,gBAAgB,CAAC,MAAM,CACxD,CAAC,GAAG,EAAE,OAAuC,EAAE,EAAE,CAC/C,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAC7B,EAAgC,CACjC,CAAC;QAEF,OAAO,IAAI,8BAA8B,CACvC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,UAAU,EACf,uBAAuB,EACvB,0BAA0B,CAC3B,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACI,MAAM;QACX,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAE7B,IAAI,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,CAAC;YAClC,OAAO,IAAI,kBAAkB,CAC3B,IAAI,CAAC,MAAM,EACX,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EACvC;gBACE,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;gBACnC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;gBAC3B,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;gBACnB,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS;gBACjC,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;aACnC,EACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAC5B,IAAI,CAAC,WAAW,CACjB,CAAC;QACJ,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC;YACxC,OAAO,IAAI,iBAAiB,CAC1B,IAAI,CAAC,MAAM,EACX,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EACvC;gBACE,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;gBAC/B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;gBAC3B,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;gBACnB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;aACxB,EACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAC5B,IAAI,CAAC,WAAW,CACjB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,kBAAkB,CAC1B,sEAAsE,CACvE,CAAC;QACJ,CAAC;IACH,CAAC;IAEM,cAAc;QACnB,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAE7B,OAAO,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;IACvC,CAAC;IAED;;OAEG;IACI,WAAW;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;IACtC,CAAC;IAED;;OAEG;IACI,eAAe;QACpB,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACxE,CAAC;IAED;;OAEG;IACI,SAAS;QACd,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACI,QAAQ;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;IAC/B,CAAC;IAED;;OAEG;IACI,KAAK;QACV,OAAO,IAAI,CAAC,kBAAkB,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;CACF","sourcesContent":["import { vertexvis } from '@vertexvis/frame-streaming-protos';\nimport { BoundingBox, Dimensions, Point } from '@vertexvis/geometry';\nimport { StreamApi } from '@vertexvis/stream-api';\nimport { UUID } from '@vertexvis/utils';\n\nimport { CameraType } from '../../interfaces';\nimport { InvalidArgumentError, InvalidCameraError } from '../errors';\nimport { CameraTypeEncoder, FrameDecoder } from '../mappers';\nimport { SceneViewStateIdentifier } from '../types';\nimport { Frame } from '../types/frame';\nimport {\n Camera,\n CameraRenderOptions,\n OrthographicCamera,\n PerspectiveCamera,\n} from '.';\nimport { ColorMaterial, fromHex } from './colorMaterial';\nimport { CrossSectioner } from './crossSectioner';\nimport {\n buildSceneElementOperationOnAnnotation,\n buildSceneElementOperationOnItem,\n} from './mapper';\nimport {\n ItemOperation,\n ItemOperationBuilder,\n PmiAnnotationOperation,\n PmiAnnotationOperationBuilder,\n PmiAnnotationOperations,\n RepresentationId,\n SceneItemOperations,\n} from './operations';\nimport {\n QueryExpression,\n SceneElementQueryExecutor,\n SceneItemQueryExecutor,\n} from './queries';\nimport { Raycaster } from './raycaster';\nimport { SceneOperationExecuteResult } from './sceneOperationExecuteResult';\nimport { SceneViewStateLoader } from './sceneViewStateLoader';\n\nexport interface SceneExecutionOptions {\n suppliedCorrelationId?: string;\n}\n\nexport interface SceneElementsExecutionOptions extends SceneExecutionOptions {\n /**\n * Skips the wait for a frame correlated to this alteration before\n * completing the Promise returned by the `execute()` method.\n */\n skipAwaitCorrelatedFrame?: boolean;\n}\n\nexport interface SceneItemsExecutionOptions extends SceneExecutionOptions {\n /**\n * Waits for the frame correlated to this alteration before\n * completing the Promise returned by the `execute()` method.\n */\n awaitCorrelatedFrame?: boolean;\n}\n\nexport interface ApplySceneViewStateOptions\n extends SceneElementsExecutionOptions, CameraRenderOptions {\n waitForAnimation?: boolean;\n cameraTypeOverride?: CameraType;\n}\n\nexport interface ResetViewOptions {\n includeCamera?: boolean;\n cameraTypeOverride?: CameraType;\n suppliedCorrelationId?: string;\n}\n\nexport interface SceneElementOperationsBuilder {\n isItemBuilder(): this is SceneItemOperationsBuilder;\n isAnnotationBuilder(): this is PmiAnnotationOperationsBuilder;\n}\n\n/**\n * A class that is responsible for building operations on scene items for a specific scene.\n * This executor requires a query, and expects `execute()` to be invoked in\n * order for the changes to take effect.\n */\nexport class SceneItemOperationsBuilder\n implements\n SceneItemOperations<SceneItemOperationsBuilder>,\n SceneElementOperationsBuilder\n{\n private builder: ItemOperationBuilder;\n\n public constructor(\n private query: QueryExpression,\n givenBuilder?: ItemOperationBuilder,\n ) {\n this.builder = givenBuilder ?? new ItemOperationBuilder();\n }\n\n public isItemBuilder(): this is SceneItemOperationsBuilder {\n return true;\n }\n\n public isAnnotationBuilder(): this is PmiAnnotationOperationsBuilder {\n return false;\n }\n\n /**\n * Specifies that the scene items matching the query should have their default\n * material overridden to match the specified material.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Override the material for the item with the `item-uuid` ID to\n * // be red with an opacity of 0.5.\n * await scene.elements((op) => [\n * op\n * .items.where((q) => q.withItemId('item-uuid'))\n * .materialOverride(ColorMaterial.create(255, 0, 0, 0.5)),\n * ]);\n *\n * // Override the material for the item with the `item-uuid` ID to\n * // be red with an opacity of 1.\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).materialOverride('#ff0000'),\n * ]).execute();\n * ```\n */\n public materialOverride(\n color: ColorMaterial | string,\n ): SceneItemOperationsBuilder {\n if (typeof color === 'string') {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.materialOverride(fromHex(color)),\n );\n } else {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.materialOverride(color),\n );\n }\n }\n\n /**\n * Specifies that the scene items matching the query should be hidden.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Hide the item with the `item-uuid` ID\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).hide(),\n * ]).execute();\n * ```\n */\n public hide(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(this.query, this.builder.hide());\n }\n\n /**\n * Specifies that the scene items matching the query should be shown.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Show the item with the `item-uuid` ID\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).show(),\n * ]).execute();\n * ```\n */\n public show(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(this.query, this.builder.show());\n }\n\n /**\n * Specifies that the scene items matching the query should be selected.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Select the item with the `item-uuid` ID\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).select(),\n * ]).execute();\n * ```\n */\n public select(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(this.query, this.builder.select());\n }\n\n /**\n * Specifies that the scene items matching the query should be deselected.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Deselect the item with the `item-uuid` ID\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).deselect(),\n * ]).execute();\n * ```\n */\n public deselect(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(this.query, this.builder.deselect());\n }\n\n /**\n * Specifies that the scene items matching the query should have any overridden\n * material removed.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Clear the overridden material on the item with the `item-uuid` ID\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).clearMaterialOverrides(),\n * ]);\n * ```\n */\n public clearMaterialOverrides(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.clearMaterialOverrides(),\n );\n }\n\n /**\n * Specifies that the scene items matching the query should have their\n * transformation matrix overridden to match the specified transformation\n * matrix.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Override the transformation matrix for the item with the `item-uuid` ID to\n * // move the element along the x-axis\n * await scene.elements((op) => [\n * op\n * .items.where((q) => q.withItemId('item-uuid'))\n * .transform(Matrix4.makeTranslation(Vector3.create(100, 0, 0))),\n * ]);\n * ```\n */\n public transform(\n matrix: vertexvis.protobuf.core.IMatrix4x4f | number[],\n ): SceneItemOperationsBuilder {\n if (Array.isArray(matrix)) {\n if (matrix.length !== 16) {\n throw new InvalidArgumentError(\n 'Matrix provided must contain exactly 16 values (4x4).',\n );\n }\n\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.transform({\n r0: {\n x: matrix[0],\n y: matrix[1],\n z: matrix[2],\n w: matrix[3],\n },\n r1: {\n x: matrix[4],\n y: matrix[5],\n z: matrix[6],\n w: matrix[7],\n },\n r2: {\n x: matrix[8],\n y: matrix[9],\n z: matrix[10],\n w: matrix[11],\n },\n r3: {\n x: matrix[12],\n y: matrix[13],\n z: matrix[14],\n w: matrix[15],\n },\n }),\n );\n } else {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.transform(matrix),\n );\n }\n }\n\n /**\n * Specifies that the scene items matching the query should have their overridden\n * transformation matrix removed. The `cascade` flag determines whether\n * children of the scene items matching the query should also have their overridden\n * transformation matrix removed, and defaults to `true`.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Clear the overridden the transformation matrix for the item with the `item-uuid` ID\n * // and do not cascade to preserve transformations on children\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).clearTransforms(false),\n * ]);\n *\n * // Clear the overridden the transformation matrix for the item with the `item-uuid` ID\n * // and cascade to clear overridden transformations on children\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).clearTransforms(true),\n * ]);\n * ```\n */\n public clearTransforms(cascade = true): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.clearTransforms(cascade),\n );\n }\n\n /**\n * Specifies that the scene items matching the query should have their phantom state\n * overridden to match the specified `phantomState` flag. If the\n * `phantomState` flag is not provided, it will default to `true`.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Mark the item with the `item-uuid` ID as phantom\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).setPhantom(true),\n * ]);\n *\n * // Unmark the item with the `item-uuid` ID as phantom\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).setPhantom(false),\n * ]);\n * ```\n */\n public setPhantom(phantomState?: boolean): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.setPhantom(phantomState),\n );\n }\n\n /**\n * Specifies that the scene items matching the query should have their overridden\n * phantom state removed.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Clear the overridden phantom state of the item with the `item-uuid` ID\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).clearPhantom(),\n * ]);\n * ```\n */\n public clearPhantom(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.clearPhantom(),\n );\n }\n\n /**\n * Specifies that the scene items matching the query should have their end item\n * state overridden to match the specified `endItemState` flag. If the\n * `endItemState` flag is not provided, it will default to `true`.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Mark the item with the `item-uuid` ID as an end item\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).setEndItem(true),\n * ]);\n *\n * // Unmark the item with the `item-uuid` ID as an end item\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).setEndItem(false),\n * ]);\n * ```\n *\n * @remarks\n * End item states do not propagate to children similar to other states like\n * other operations. I.e. calling setEndItem(false) on an item will cause it\n * to be unmarked as an end item, but any children where setEndItem(true) was\n * called previously will remain as end items.\n */\n public setEndItem(endItemState?: boolean): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.setEndItem(endItemState),\n );\n }\n\n /**\n * Specifies that the scene items matching the query should have their overridden\n * end item state removed.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Clear the overridden end item state of the item with the `item-uuid` ID\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).clearEndItem(),\n * ]);\n * ```\n */\n public clearEndItem(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.clearEndItem(),\n );\n }\n\n /**\n * Changes the rendition of a scene item matching the query. This operation only\n * applies to scene items that reference a revision that contains the given\n * rendition.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Switch the rendition of the matching item.\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).viewRenditionById('rendition-uuid'),\n * ]);\n * ```\n */\n public viewRenditionById(id: UUID.UUID): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.viewRenditionById(id),\n );\n }\n\n /**\n * Changes the rendition of any scene item matching the query that contains a\n * rendition with the given supplied ID. This operation only applies to scene items\n * that reference a revision that contain a rendition with a matching supplied\n * ID.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Switch the rendition of the given item.\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).viewRenditionBySuppliedId('rendition-supplied-id'),\n * ]);\n * ```\n */\n public viewRenditionBySuppliedId(\n suppliedId: string,\n ): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.viewRenditionBySuppliedId(suppliedId),\n );\n }\n\n /**\n * Changes the rendition of scene items matching the query back to their revision's\n * default rendition. This operation only applies to scene items that reference a\n * revision.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Switch the rendition of the given item.\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).viewDefaultRendition(),\n * ]);\n * ```\n */\n public viewDefaultRendition(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.viewDefaultRendition(),\n );\n }\n\n /**\n * Clears the rendition of scene items matching the query, which will revert the\n * scene item back to the rendition used when creating the item.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Switch the rendition of the given item.\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).clearRendition(),\n * ]);\n * ```\n */\n public clearRendition(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.clearRendition(),\n );\n }\n\n /**\n * Changes the representation of scene items matching a query. This operation only\n * applies to scene items that reference a rendition with the given representation\n * ID.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Switch the rendition of the given item.\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).viewRepresentation('rep-id'),\n * ]);\n * ```\n */\n public viewRepresentation(id: RepresentationId): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.viewRepresentation(id),\n );\n }\n\n /**\n * Clears the representation for scene items matching the query.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Switch the rendition of the given item.\n * await scene.elements((op) => [\n * op.items.where((q) => q.withItemId('item-uuid')).clearRepresentation(),\n * ]);\n * ```\n */\n public clearRepresentation(): SceneItemOperationsBuilder {\n return new SceneItemOperationsBuilder(\n this.query,\n this.builder.clearRepresentation(),\n );\n }\n\n /**\n * @internal\n */\n public build(): QueryOperation {\n return {\n query: this.query,\n operations: this.builder.build(),\n };\n }\n}\n\n/**\n * @ignore\n * @beta PMI Annotation operations are being actively developed. These APIs\n * should be considered unstable, and will potentially change with following\n * releases.\n *\n * A class that is responsible for building operations on pmi annotations for a specific scene.\n * This executor requires a query, and expects `execute()` to be invoked in\n * order for the changes to take effect.\n */\nexport class PmiAnnotationOperationsBuilder\n implements\n PmiAnnotationOperations<PmiAnnotationOperationsBuilder>,\n SceneElementOperationsBuilder\n{\n private builder: PmiAnnotationOperationBuilder;\n\n public constructor(\n private query: QueryExpression,\n givenBuilder?: PmiAnnotationOperationBuilder,\n ) {\n this.builder = givenBuilder ?? new PmiAnnotationOperationBuilder();\n }\n\n public isItemBuilder(): this is SceneItemOperationsBuilder {\n return false;\n }\n\n public isAnnotationBuilder(): this is PmiAnnotationOperationsBuilder {\n return true;\n }\n\n /**\n * @ignore\n * @beta PMI Annotation operations are being actively developed. These APIs\n * should be considered unstable, and will potentially change with following\n * releases.\n *\n * Specifies that the PMI annotations matching the query should be hidden.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Hide the annotation with the `annotation-uuid` ID\n * await scene.elements((op) => [\n * op.annotations.where((q) => q.withAnnotationId('annotation-uuid')).hide(),\n * ]).execute();\n * ```\n */\n public hide(): PmiAnnotationOperationsBuilder {\n return new PmiAnnotationOperationsBuilder(this.query, this.builder.hide());\n }\n\n /**\n * @ignore\n * @beta PMI Annotation operations are being actively developed. These APIs\n * should be considered unstable, and will potentially change with following\n * releases.\n *\n * Specifies that the PMI annotations matching the query should be shown.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Show the annotation with the `annotation-uuid` ID\n * await scene.elements((op) => [\n * op.annotations.where((q) => q.withAnnotationId('annotation-uuid')).show(),\n * ]).execute();\n * ```\n */\n public show(): PmiAnnotationOperationsBuilder {\n return new PmiAnnotationOperationsBuilder(this.query, this.builder.show());\n }\n\n /**\n * @ignore\n * @beta PMI Annotation operations are being actively developed. These APIs\n * should be considered unstable, and will potentially change with following\n * releases.\n *\n * Specifies that the PMI annotations matching the query should be selected.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Select the annotation with the `annotation-uuid` ID\n * await scene.elements((op) => [\n * op.annotations.where((q) => q.withAnnotationId('annotation-uuid')).select(),\n * ]).execute();\n * ```\n */\n public select(): PmiAnnotationOperationsBuilder {\n return new PmiAnnotationOperationsBuilder(\n this.query,\n this.builder.select(),\n );\n }\n\n /**\n * @ignore\n * @beta PMI Annotation operations are being actively developed. These APIs\n * should be considered unstable, and will potentially change with following\n * releases.\n *\n * Specifies that the PMI annotations matching the query should be deselected.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Deselect the annotation with the `annotation-uuid` ID\n * await scene.elements((op) => [\n * op.annotations.where((q) => q.withAnnotationId('annotation-uuid')).deselect(),\n * ]).execute();\n * ```\n */\n public deselect(): PmiAnnotationOperationsBuilder {\n return new PmiAnnotationOperationsBuilder(\n this.query,\n this.builder.deselect(),\n );\n }\n\n /**\n * @internal\n */\n public build(): QueryAnnotationOperation {\n return {\n query: this.query,\n operations: this.builder.build(),\n };\n }\n}\n\nexport interface QueryOperation {\n query: QueryExpression;\n operations: ItemOperation[];\n}\n\nexport interface QueryAnnotationOperation {\n query: QueryExpression;\n operations: PmiAnnotationOperation[];\n}\n\nexport class OperationExecutor<T extends SceneExecutionOptions> {\n public constructor(\n protected sceneViewId: UUID.UUID,\n protected stream: StreamApi,\n protected decodeFrame: FrameDecoder,\n protected dimensions: Dimensions.Dimensions,\n protected sceneItemQueryOperations: QueryOperation[],\n protected pmiAnnotationQueryOperations: QueryAnnotationOperation[],\n ) {}\n\n public async execute(executionOptions?: T): Promise<void> {\n const pbItemOperations = this.sceneItemQueryOperations.map((op) =>\n buildSceneElementOperationOnItem(op.query, op.operations, {\n dimensions: this.dimensions,\n }),\n );\n const pbPmiAnnotationOperations = this.pmiAnnotationQueryOperations.map(\n (op) =>\n buildSceneElementOperationOnAnnotation(op.query, op.operations, {\n dimensions: this.dimensions,\n }),\n );\n\n const requestCorrelationId =\n executionOptions?.suppliedCorrelationId ?? UUID.create();\n\n const request = {\n sceneViewId: {\n hex: this.sceneViewId,\n },\n elementOperations: [...pbItemOperations, ...pbPmiAnnotationOperations],\n suppliedCorrelationId: {\n value: requestCorrelationId,\n },\n };\n\n await this.stream.createSceneAlteration(request);\n }\n}\n\nexport class SceneItemsOperationExecutor extends OperationExecutor<SceneItemsExecutionOptions> {\n public async execute(\n executionOptions?: SceneItemsExecutionOptions,\n ): Promise<void> {\n if (executionOptions?.awaitCorrelatedFrame) {\n const correlationId =\n executionOptions.suppliedCorrelationId ?? UUID.create();\n const executeResult = new SceneOperationExecuteResult(\n this.stream,\n this.decodeFrame,\n correlationId,\n );\n\n await super.execute({\n ...executionOptions,\n suppliedCorrelationId: correlationId,\n });\n await executeResult.onFrameDrawn.once();\n } else {\n await super.execute(executionOptions);\n }\n }\n}\n\nexport class SceneElementsOperationExecutor extends OperationExecutor<SceneElementsExecutionOptions> {\n public async execute(\n executionOptions?: SceneElementsExecutionOptions,\n ): Promise<void> {\n if (executionOptions?.skipAwaitCorrelatedFrame) {\n await super.execute(executionOptions);\n } else {\n const correlationId =\n executionOptions?.suppliedCorrelationId ?? UUID.create();\n const executeResult = new SceneOperationExecuteResult(\n this.stream,\n this.decodeFrame,\n correlationId,\n );\n\n await super.execute({\n ...executionOptions,\n suppliedCorrelationId: correlationId,\n });\n await executeResult.onFrameDrawn.once();\n }\n }\n}\n\nexport type TerminalItemOperationBuilder =\n | PmiAnnotationOperationsBuilder\n | SceneItemOperationsBuilder\n | Array<SceneItemOperationsBuilder | PmiAnnotationOperationsBuilder>;\n\nexport type ImageScaleProvider = () => Point.Point | undefined;\n\n/**\n * The features of a scene view state that can be applied to the current scene\n */\nexport type SceneViewStateFeature =\n | 'camera'\n | 'cross_section'\n | 'material_overrides'\n | 'selection'\n | 'transforms'\n | 'visibility'\n | 'phantom'\n | 'shading';\n\n/**\n * A class that represents the `Scene` that has been loaded into the viewer. On\n * it, you can retrieve attributes of the scene, such as the camera. It also\n * contains methods for updating the scene and performing requests to rerender\n * the scene.\n */\nexport class Scene {\n private sceneViewStateLoader: SceneViewStateLoader;\n\n public constructor(\n private stream: StreamApi,\n private frame: Frame,\n private decodeFrame: FrameDecoder,\n private encodeCameraType: CameraTypeEncoder,\n private imageScaleProvider: ImageScaleProvider,\n private dimensions: Dimensions.Dimensions,\n public readonly sceneId: UUID.UUID,\n public readonly sceneViewId: UUID.UUID,\n ) {\n this.sceneViewStateLoader = new SceneViewStateLoader(\n stream,\n decodeFrame,\n encodeCameraType,\n sceneId,\n sceneViewId,\n );\n }\n\n /**\n * Applies the provided scene view state to the scene.\n */\n public async applySceneViewState(\n sceneViewStateId:\n UUID.UUID | SceneViewStateIdentifier.SceneViewStateIdentifier,\n opts: ApplySceneViewStateOptions = {},\n ): Promise<vertexvis.protobuf.stream.ILoadSceneViewStateResult | undefined> {\n return await this.sceneViewStateLoader.applySceneViewState(\n sceneViewStateId,\n opts,\n );\n }\n\n /**\n * Applies the specified features of the provided scene view state to the scene.\n */\n public async applyPartialSceneViewState(\n sceneViewStateId:\n UUID.UUID | SceneViewStateIdentifier.SceneViewStateIdentifier,\n featuresToApply: SceneViewStateFeature[],\n opts: ApplySceneViewStateOptions = {},\n ): Promise<vertexvis.protobuf.stream.ILoadSceneViewStateResult | undefined> {\n return await this.sceneViewStateLoader.applyPartialSceneViewState(\n sceneViewStateId,\n featuresToApply,\n opts,\n );\n }\n\n /**\n * Resets the view to its default state, with the ability to reset the camera to that of the base scene.\n */\n public async reset(\n opts: ResetViewOptions = {},\n ): Promise<vertexvis.protobuf.stream.IResetViewResult | undefined> {\n return await this.stream.resetSceneView(\n {\n includeCamera: opts.includeCamera,\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 /**\n * Returns an executor that accepts a function as a parameter that contains one or more operations to apply\n * to the scene view. The operations will be applied transactionally.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Deselect everything, then select a specific item by ID\n * await scene.items(op => [\n * op.items.where(q => q.all()).deselect(),\n * op.items.where(q => q.withItemId('item-id')).select(),\n * ]).execute();\n * ```\n *\n * @see {@link RootQuery} for more information on available queries.\n *\n * @see {@link SceneItemOperationsBuilder} for more information on available operations.\n *\n * @param operations\n */\n public items(\n operations: (q: SceneItemQueryExecutor) => TerminalItemOperationBuilder,\n ): SceneItemsOperationExecutor {\n const sceneOperations = operations(new SceneItemQueryExecutor());\n\n const ops: Array<\n SceneItemOperationsBuilder | PmiAnnotationOperationsBuilder\n > = Array.isArray(sceneOperations) ? sceneOperations : [sceneOperations];\n const itemOps = ops.filter((op) =>\n op.isItemBuilder(),\n ) as Array<SceneItemOperationsBuilder>;\n\n const operationList = itemOps.reduce(\n (acc, builder: SceneItemOperationsBuilder) => acc.concat(builder.build()),\n [] as QueryOperation[],\n );\n\n return new SceneItemsOperationExecutor(\n this.sceneViewId,\n this.stream,\n this.decodeFrame,\n this.dimensions,\n operationList,\n [],\n );\n }\n\n /**\n * Returns an executor that accepts a function as a parameter that contains one or more operations to apply\n * to items or annotations in the scene view. The operations will be applied transactionally.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n *\n * // Deselect everything, then select a specific scene item by ID\n * await scene.elements(op => [\n * op.items.where(q => q.all()).deselect(),\n * op.annotations.where(q => q.all()).deselect(),\n * op.items.where(q => q.withItemId('item-id')).select(),\n * ]).execute();\n * ```\n *\n * @see {@link RootQuery} for more information on available queries on scene items.\n *\n * @see {@link SceneItemOperationsBuilder} for more information on available operations to the scene items.\n *\n * @see {@link PmiAnnotationRootQuery} for more information on available queries on PMI annotations.\n *\n * @see {@link PmiAnnotationOperationsBuilder} for more information on available operations to the PMI annotations.\n *\n * @param operations\n */\n public elements(\n operations: (q: SceneElementQueryExecutor) => TerminalItemOperationBuilder,\n ): SceneElementsOperationExecutor {\n const ops = operations(new SceneElementQueryExecutor());\n const opsAsArray = Array.isArray(ops) ? ops : [ops];\n\n // Operations on scene items\n const sceneItemOps = opsAsArray.filter((op) =>\n op.isItemBuilder(),\n ) as Array<SceneItemOperationsBuilder>;\n const sceneItemsOperationList = sceneItemOps.reduce(\n (acc, builder: SceneItemOperationsBuilder) => acc.concat(builder.build()),\n [] as QueryOperation[],\n );\n\n // Operations on PMI annotations\n const pmiAnnotationOps = opsAsArray.filter((op) =>\n op.isAnnotationBuilder(),\n ) as Array<PmiAnnotationOperationsBuilder>;\n const pmiAnnotationOperationList = pmiAnnotationOps.reduce(\n (acc, builder: PmiAnnotationOperationsBuilder) =>\n acc.concat(builder.build()),\n [] as QueryAnnotationOperation[],\n );\n\n return new SceneElementsOperationExecutor(\n this.sceneViewId,\n this.stream,\n this.decodeFrame,\n this.dimensions,\n sceneItemsOperationList,\n pmiAnnotationOperationList,\n );\n }\n\n /**\n * An instance of the current camera of the scene. The camera provides a number of\n * methods that can be used in combination with the `render` method to make programmatic\n * updates to the scene's camera.\n *\n * @example\n * ```typescript\n * const viewer = document.querySelector('vertex-viewer');\n * const scene = await viewer.scene();\n * const camera = scene.camera();\n *\n * // Fit the camera to the visible bounding box of the scene with a 1 second animation\n * await camera.viewAll().render({ animation: { milliseconds: 1000 } });\n * ```\n *\n * @see {@link Camera} for more information on available camera operations.\n */\n public camera(): Camera {\n const { scene } = this.frame;\n\n if (scene.camera.isOrthographic()) {\n return new OrthographicCamera(\n this.stream,\n Dimensions.aspectRatio(this.viewport()),\n {\n viewVector: scene.camera.viewVector,\n lookAt: scene.camera.lookAt,\n up: scene.camera.up,\n fovHeight: scene.camera.fovHeight,\n rotationPoint: scene.camera.lookAt,\n },\n this.frame.scene.boundingBox,\n this.decodeFrame,\n );\n } else if (scene.camera.isPerspective()) {\n return new PerspectiveCamera(\n this.stream,\n Dimensions.aspectRatio(this.viewport()),\n {\n position: scene.camera.position,\n lookAt: scene.camera.lookAt,\n up: scene.camera.up,\n fovY: scene.camera.fovY,\n },\n this.frame.scene.boundingBox,\n this.decodeFrame,\n );\n } else {\n throw new InvalidCameraError(\n 'Cannot retrieve camera. Scene has an unknown or invalid camera type.',\n );\n }\n }\n\n public isOrthographic(): boolean {\n const { scene } = this.frame;\n\n return scene.camera.isOrthographic();\n }\n\n /**\n * Returns the current visible BoundingBox for the scene.\n */\n public boundingBox(): BoundingBox.BoundingBox {\n return this.frame.scene.boundingBox;\n }\n\n /**\n * CrossSectioner to update cross sectioning planes and get current configuration.\n */\n public crossSectioning(): CrossSectioner {\n return new CrossSectioner(this.stream, this.frame.scene.crossSection);\n }\n\n /**\n * Raycaster to request items that intersect a point.\n */\n public raycaster(): Raycaster {\n return new Raycaster(this.stream, this.imageScaleProvider);\n }\n\n /**\n * The current viewport of the scene, in pixels.\n */\n public viewport(): Dimensions.Dimensions {\n return this.frame.dimensions;\n }\n\n /**\n * The current x and y scale of the rendered image.\n */\n public scale(): Point.Point {\n return this.imageScaleProvider() || Point.create(1, 1);\n }\n}\n"]}
@@ -1 +1 @@
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
+ {"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 | 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 | 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":"state.js","sourceRoot":"","sources":["../../../../../src/lib/stream/state.ts"],"names":[],"mappings":"","sourcesContent":["import { Disposable } from '@vertexvis/utils';\n\nimport { Token } from '../token';\nimport { Frame, Orientation, SynchronizedClock } from '../types';\nimport { Resource } from '../types/loadableResource';\n\nexport interface Disconnected {\n readonly type: 'disconnected';\n}\n\nexport interface Connecting {\n readonly type: 'connecting';\n readonly resource: Resource;\n readonly connection: Disposable;\n}\n\nexport interface Connected {\n readonly type: 'connected';\n readonly resource: Resource;\n readonly connection: Disposable;\n readonly streamId: string;\n readonly sceneId: string;\n readonly sceneViewId: string;\n readonly deviceId: string;\n readonly worldOrientation: Orientation;\n readonly token: Token;\n readonly frame: Frame;\n readonly clock: SynchronizedClock;\n readonly fallbackDepthBufferBytes: Uint8Array | undefined;\n}\n\nexport interface ConnectionFailed {\n readonly type: 'connection-failed';\n readonly message: string;\n readonly error?: unknown;\n}\n\nexport interface Reconnecting {\n readonly type: 'reconnecting';\n readonly resource: Resource;\n readonly connection: Disposable;\n}\n\nexport type ViewerStreamState =\n | Disconnected\n | Connecting\n | ConnectionFailed\n | Connected\n | Reconnecting;\n"]}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../../../src/lib/stream/state.ts"],"names":[],"mappings":"","sourcesContent":["import { Disposable } from '@vertexvis/utils';\n\nimport { Token } from '../token';\nimport { Frame, Orientation, SynchronizedClock } from '../types';\nimport { Resource } from '../types/loadableResource';\n\nexport interface Disconnected {\n readonly type: 'disconnected';\n}\n\nexport interface Connecting {\n readonly type: 'connecting';\n readonly resource: Resource;\n readonly connection: Disposable;\n}\n\nexport interface Connected {\n readonly type: 'connected';\n readonly resource: Resource;\n readonly connection: Disposable;\n readonly streamId: string;\n readonly sceneId: string;\n readonly sceneViewId: string;\n readonly deviceId: string;\n readonly worldOrientation: Orientation;\n readonly token: Token;\n readonly frame: Frame;\n readonly clock: SynchronizedClock;\n readonly fallbackDepthBufferBytes: Uint8Array | undefined;\n}\n\nexport interface ConnectionFailed {\n readonly type: 'connection-failed';\n readonly message: string;\n readonly error?: unknown;\n}\n\nexport interface Reconnecting {\n readonly type: 'reconnecting';\n readonly resource: Resource;\n readonly connection: Disposable;\n}\n\nexport type ViewerStreamState =\n Disconnected | Connecting | ConnectionFailed | Connected | Reconnecting;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"loadableResource.js","sourceRoot":"","sources":["../../../../../src/lib/types/loadableResource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAEvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAepD,MAAM,UAAU,OAAO,CAAC,GAAW;;IACjC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE3B,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC,GACvD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAEzB,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CACV,+EAA+E,CAChF,CAAC;IACJ,CAAC;IAED,QAAQ,YAAY,EAAE,CAAC;QACrB,KAAK,YAAY;YACf,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrC,MAAM,WAAW,GACf,MAAA,mBAAmB,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,mCAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAEpC,CAAC;YAEjB,OAAO;gBACL,QAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE;gBAChD,WAAW;gBACX,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC;aAC9D,CAAC;QACJ;YACE,MAAM,IAAI,uBAAuB,CAC/B,sCAAsC,YAAY,EAAE,CACrD,CAAC;IACN,CAAC;AACH,CAAC;AASD,SAAS,mBAAmB,CAAC,IAAa;IACxC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACjB,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEzD,QAAQ,eAAe,EAAE,CAAC;YACxB,KAAK,mBAAmB;gBACtB,OAAO;oBACL,IAAI,EAAE,kBAAkB;oBACxB,EAAE,EAAE,aAAa;iBAClB,CAAC;YACJ;gBACE,OAAO,SAAS,CAAC;QACrB,CAAC;IACH,CAAC;AACH,CAAC;AASD,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE;YAC5C,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE5D,QAAQ,YAAY,EAAE,CAAC;gBACrB,KAAK,aAAa;oBAChB,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;gBACjD,KAAK,kBAAkB;oBACrB,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;gBACtD;oBACE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC","sourcesContent":["import { Uri } from '@vertexvis/utils';\n\nimport { InvalidResourceUrnError } from '../errors';\n\ninterface StreamKeyResource {\n type: 'stream-key';\n id: string;\n}\n\nexport type LoadableResource = StreamKeyResource;\n\nexport interface Resource {\n resource: LoadableResource;\n subResource?: PathResource;\n queries: QueryValue[];\n}\n\nexport function fromUrn(urn: string): Resource {\n const uri = Uri.parse(urn);\n\n if (uri.scheme !== 'urn' || uri.path == null) {\n throw new Error('Invalid URN. Expected URN scheme.');\n }\n\n const [nid, resourceType, resourceId, ...subResourcePath] =\n uri.path.split(/[:/]/);\n\n if (nid !== 'vertexvis' && nid !== 'vertex') {\n throw new Error('Invalid URN. Expected URN to be vertex namespace');\n }\n\n if (nid === 'vertexvis') {\n console.warn(\n \"vertexvis namespace is deprecated. Use 'vertex' for the namespace urn instead\",\n );\n }\n\n switch (resourceType) {\n case 'stream-key':\n const queries = fromQuery(uri.query);\n const subResource =\n fromSubResourcePath(subResourcePath.join('/')) ??\n (queries.find((q) => q.type === 'scene-view-state') as\n | SceneViewStateResource\n | undefined);\n\n return {\n resource: { type: 'stream-key', id: resourceId },\n subResource,\n queries: queries.filter((q) => q.type !== 'scene-view-state'),\n };\n default:\n throw new InvalidResourceUrnError(\n `Invalid URN. Unknown resource type ${resourceType}`,\n );\n }\n}\n\nexport interface SceneViewStateResource {\n type: 'scene-view-state';\n id?: string;\n}\n\nexport type PathResource = SceneViewStateResource;\n\nfunction fromSubResourcePath(path?: string): PathResource | undefined {\n if (path != null) {\n const [subResourceType, subResourceId] = path.split('/');\n\n switch (subResourceType) {\n case 'scene-view-states':\n return {\n type: 'scene-view-state',\n id: subResourceId,\n };\n default:\n return undefined;\n }\n }\n}\n\nexport interface SuppliedIdQueryValue {\n type: 'supplied-id';\n id: string;\n}\n\nexport type QueryValue = SceneViewStateResource | SuppliedIdQueryValue;\n\nfunction fromQuery(query?: string): QueryValue[] {\n if (query != null) {\n return query.split('&').map((queryFragment) => {\n const [resourceType, resourceId] = queryFragment.split('=');\n\n switch (resourceType) {\n case 'supplied-id':\n return { type: 'supplied-id', id: resourceId };\n case 'scene-view-state':\n return { type: 'scene-view-state', id: resourceId };\n default:\n throw new Error('Invalid URN. Unknown query value type');\n }\n });\n } else {\n return [];\n }\n}\n"]}
1
+ {"version":3,"file":"loadableResource.js","sourceRoot":"","sources":["../../../../../src/lib/types/loadableResource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAEvC,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAepD,MAAM,UAAU,OAAO,CAAC,GAAW;;IACjC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE3B,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC,GACvD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAEzB,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CACV,+EAA+E,CAChF,CAAC;IACJ,CAAC;IAED,QAAQ,YAAY,EAAE,CAAC;QACrB,KAAK,YAAY;YACf,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrC,MAAM,WAAW,GACf,MAAA,mBAAmB,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,mCAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CACb,CAAC;YAExC,OAAO;gBACL,QAAQ,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE;gBAChD,WAAW;gBACX,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC;aAC9D,CAAC;QACJ;YACE,MAAM,IAAI,uBAAuB,CAC/B,sCAAsC,YAAY,EAAE,CACrD,CAAC;IACN,CAAC;AACH,CAAC;AASD,SAAS,mBAAmB,CAAC,IAAa;IACxC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACjB,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEzD,QAAQ,eAAe,EAAE,CAAC;YACxB,KAAK,mBAAmB;gBACtB,OAAO;oBACL,IAAI,EAAE,kBAAkB;oBACxB,EAAE,EAAE,aAAa;iBAClB,CAAC;YACJ;gBACE,OAAO,SAAS,CAAC;QACrB,CAAC;IACH,CAAC;AACH,CAAC;AASD,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE;YAC5C,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE5D,QAAQ,YAAY,EAAE,CAAC;gBACrB,KAAK,aAAa;oBAChB,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;gBACjD,KAAK,kBAAkB;oBACrB,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;gBACtD;oBACE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC","sourcesContent":["import { Uri } from '@vertexvis/utils';\n\nimport { InvalidResourceUrnError } from '../errors';\n\ninterface StreamKeyResource {\n type: 'stream-key';\n id: string;\n}\n\nexport type LoadableResource = StreamKeyResource;\n\nexport interface Resource {\n resource: LoadableResource;\n subResource?: PathResource;\n queries: QueryValue[];\n}\n\nexport function fromUrn(urn: string): Resource {\n const uri = Uri.parse(urn);\n\n if (uri.scheme !== 'urn' || uri.path == null) {\n throw new Error('Invalid URN. Expected URN scheme.');\n }\n\n const [nid, resourceType, resourceId, ...subResourcePath] =\n uri.path.split(/[:/]/);\n\n if (nid !== 'vertexvis' && nid !== 'vertex') {\n throw new Error('Invalid URN. Expected URN to be vertex namespace');\n }\n\n if (nid === 'vertexvis') {\n console.warn(\n \"vertexvis namespace is deprecated. Use 'vertex' for the namespace urn instead\",\n );\n }\n\n switch (resourceType) {\n case 'stream-key':\n const queries = fromQuery(uri.query);\n const subResource =\n fromSubResourcePath(subResourcePath.join('/')) ??\n (queries.find((q) => q.type === 'scene-view-state') as\n SceneViewStateResource | undefined);\n\n return {\n resource: { type: 'stream-key', id: resourceId },\n subResource,\n queries: queries.filter((q) => q.type !== 'scene-view-state'),\n };\n default:\n throw new InvalidResourceUrnError(\n `Invalid URN. Unknown resource type ${resourceType}`,\n );\n }\n}\n\nexport interface SceneViewStateResource {\n type: 'scene-view-state';\n id?: string;\n}\n\nexport type PathResource = SceneViewStateResource;\n\nfunction fromSubResourcePath(path?: string): PathResource | undefined {\n if (path != null) {\n const [subResourceType, subResourceId] = path.split('/');\n\n switch (subResourceType) {\n case 'scene-view-states':\n return {\n type: 'scene-view-state',\n id: subResourceId,\n };\n default:\n return undefined;\n }\n }\n}\n\nexport interface SuppliedIdQueryValue {\n type: 'supplied-id';\n id: string;\n}\n\nexport type QueryValue = SceneViewStateResource | SuppliedIdQueryValue;\n\nfunction fromQuery(query?: string): QueryValue[] {\n if (query != null) {\n return query.split('&').map((queryFragment) => {\n const [resourceType, resourceId] = queryFragment.split('=');\n\n switch (resourceType) {\n case 'supplied-id':\n return { type: 'supplied-id', id: resourceId };\n case 'scene-view-state':\n return { type: 'scene-view-state', id: resourceId };\n default:\n throw new Error('Invalid URN. Unknown query value type');\n }\n });\n } else {\n return [];\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sceneViewStateIdentifier.js","sourceRoot":"","sources":["../../../../../src/lib/types/sceneViewStateIdentifier.ts"],"names":[],"mappings":"AAmBA,MAAM,UAAU,kBAAkB,CAChC,UAAoC;IAEpC,OAAQ,UAA+B,CAAC,EAAE,IAAI,IAAI,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,UAAoC;IAEpC,OAAQ,UAAuC,CAAC,UAAU,IAAI,IAAI,CAAC;AACrE,CAAC","sourcesContent":["import { UUID } from '@vertexvis/utils';\n\nexport interface SceneViewStateId {\n id: UUID.UUID;\n}\n\nexport interface SceneViewStateSuppliedId {\n suppliedId: string;\n}\n\n/**\n * An object describing an ID for the scene view state. Can either be an\n * object containing the ID generated on creation, or an object containing\n * a supplied id provided during creation.\n */\nexport type SceneViewStateIdentifier =\n | SceneViewStateId\n | SceneViewStateSuppliedId;\n\nexport function isSceneViewStateId(\n identifier: SceneViewStateIdentifier,\n): identifier is SceneViewStateId {\n return (identifier as SceneViewStateId).id != null;\n}\n\nexport function isSceneViewStateSuppliedId(\n identifier: SceneViewStateIdentifier,\n): identifier is SceneViewStateSuppliedId {\n return (identifier as SceneViewStateSuppliedId).suppliedId != null;\n}\n"]}
1
+ {"version":3,"file":"sceneViewStateIdentifier.js","sourceRoot":"","sources":["../../../../../src/lib/types/sceneViewStateIdentifier.ts"],"names":[],"mappings":"AAkBA,MAAM,UAAU,kBAAkB,CAChC,UAAoC;IAEpC,OAAQ,UAA+B,CAAC,EAAE,IAAI,IAAI,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,UAAoC;IAEpC,OAAQ,UAAuC,CAAC,UAAU,IAAI,IAAI,CAAC;AACrE,CAAC","sourcesContent":["import { UUID } from '@vertexvis/utils';\n\nexport interface SceneViewStateId {\n id: UUID.UUID;\n}\n\nexport interface SceneViewStateSuppliedId {\n suppliedId: string;\n}\n\n/**\n * An object describing an ID for the scene view state. Can either be an\n * object containing the ID generated on creation, or an object containing\n * a supplied id provided during creation.\n */\nexport type SceneViewStateIdentifier =\n SceneViewStateId | SceneViewStateSuppliedId;\n\nexport function isSceneViewStateId(\n identifier: SceneViewStateIdentifier,\n): identifier is SceneViewStateId {\n return (identifier as SceneViewStateId).id != null;\n}\n\nexport function isSceneViewStateSuppliedId(\n identifier: SceneViewStateIdentifier,\n): identifier is SceneViewStateSuppliedId {\n return (identifier as SceneViewStateSuppliedId).suppliedId != null;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../../src/lib/walk-mode/model.ts"],"names":[],"mappings":"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","sourcesContent":["import { Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\n\nimport { KeyBinding } from '../keyBinding';\n\nexport interface ViewerWalkModeConfiguration {\n teleportHeightPercentage: number;\n teleportDistancePercentage: number;\n teleportCollisionDistance: number;\n keyboardWalkSpeed: number;\n keyboardPivotDegrees: number;\n keyboardRepeatIntervalMs: number;\n}\n\nexport type ViewerTeleportMode =\n | 'teleport'\n | 'teleport-and-align'\n | 'teleport-toward';\n\nexport enum ViewerWalkModeOperation {\n 'MOVE_DOWN' = 'MOVE_DOWN',\n 'MOVE_UP' = 'MOVE_UP',\n 'PIVOT_DOWN' = 'PIVOT_DOWN',\n 'PIVOT_LEFT' = 'PIVOT_LEFT',\n 'PIVOT_RIGHT' = 'PIVOT_RIGHT',\n 'PIVOT_UP' = 'PIVOT_UP',\n 'WALK_BACKWARD' = 'WALK_BACKWARD',\n 'WALK_FORWARD' = 'WALK_FORWARD',\n 'WALK_LEFT' = 'WALK_LEFT',\n 'WALK_RIGHT' = 'WALK_RIGHT',\n}\n\nexport type ViewerWalkModeKeyBindings = Record<\n ViewerWalkModeOperation,\n KeyBinding[]\n>;\n\nexport class WalkModeModel {\n private keyBindings: ViewerWalkModeKeyBindings = {\n [ViewerWalkModeOperation.MOVE_DOWN]: [\n new KeyBinding('PageDown', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.MOVE_UP]: [\n new KeyBinding('PageUp', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.PIVOT_DOWN]: [\n new KeyBinding('ArrowDown', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.PIVOT_LEFT]: [\n new KeyBinding('ArrowLeft', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.PIVOT_RIGHT]: [\n new KeyBinding('ArrowRight', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.PIVOT_UP]: [\n new KeyBinding('ArrowUp', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.WALK_BACKWARD]: [new KeyBinding('s')],\n [ViewerWalkModeOperation.WALK_FORWARD]: [new KeyBinding('w')],\n [ViewerWalkModeOperation.WALK_LEFT]: [new KeyBinding('a')],\n [ViewerWalkModeOperation.WALK_RIGHT]: [new KeyBinding('d')],\n };\n\n private configuration: ViewerWalkModeConfiguration = {\n teleportHeightPercentage: 11.75,\n teleportDistancePercentage: 2,\n teleportCollisionDistance: 1000,\n keyboardWalkSpeed: 5,\n keyboardPivotDegrees: 1,\n keyboardRepeatIntervalMs: 25,\n };\n\n private excludedPredicate?: (el: Element) => boolean;\n\n private enabled = true;\n private teleportMode?: ViewerTeleportMode;\n\n private enabledChanged: EventDispatcher<boolean> = new EventDispatcher();\n\n private teleportModeChanged: EventDispatcher<ViewerTeleportMode | undefined> =\n new EventDispatcher<ViewerTeleportMode | undefined>();\n\n private configurationChanged: EventDispatcher<ViewerWalkModeConfiguration> =\n new EventDispatcher<ViewerWalkModeConfiguration>();\n\n private keyBindingsChanged: EventDispatcher<ViewerWalkModeKeyBindings> =\n new EventDispatcher<ViewerWalkModeKeyBindings>();\n\n public setEnabled(enabled: boolean): void {\n this.enabled = enabled;\n this.enabledChanged.emit(enabled);\n }\n\n public setTeleportMode(mode?: ViewerTeleportMode): void {\n this.teleportMode = mode;\n this.teleportModeChanged.emit(mode);\n }\n\n public setConfiguration(configuration: ViewerWalkModeConfiguration): void {\n this.configuration = configuration;\n this.configurationChanged.emit(configuration);\n }\n\n public addKeyBinding(\n operation: ViewerWalkModeOperation,\n keyBinding: KeyBinding,\n ): void {\n this.keyBindings[operation] = [...this.keyBindings[operation], keyBinding];\n this.keyBindingsChanged.emit(this.keyBindings);\n }\n\n public replaceKeyBinding(\n operation: ViewerWalkModeOperation,\n keyBinding: KeyBinding,\n ): void {\n this.keyBindings[operation] = [keyBinding];\n this.keyBindingsChanged.emit(this.keyBindings);\n }\n\n public setExcludedPredicate(predicate: (el: Element) => boolean): void {\n this.excludedPredicate = predicate;\n }\n\n public getEnabled(): boolean {\n return this.enabled;\n }\n\n public getTeleportMode(): ViewerTeleportMode | undefined {\n return this.teleportMode;\n }\n\n public getTeleportHeightPercentage(): number {\n return this.configuration.teleportHeightPercentage;\n }\n\n public getKeyboardWalkSpeed(): number {\n return this.configuration.keyboardWalkSpeed;\n }\n\n public getKeyboardPivotDegrees(): number {\n return this.configuration.keyboardPivotDegrees;\n }\n\n public getKeyboardRepeatInterval(): number {\n return this.configuration.keyboardRepeatIntervalMs;\n }\n\n public getConfiguration(): ViewerWalkModeConfiguration {\n return this.configuration;\n }\n\n public getKeyBindings(): ViewerWalkModeKeyBindings {\n return this.keyBindings;\n }\n\n public operationMatches(\n operation: ViewerWalkModeOperation,\n state: Record<string, boolean>,\n ): boolean {\n return this.keyBindings[operation].some((binding) =>\n binding.matches(state),\n );\n }\n\n public isElementExcluded(el: Element): boolean {\n return !!this.excludedPredicate?.(el);\n }\n\n public onEnabledChange(listener: Listener<boolean>): Disposable {\n return this.enabledChanged.on(listener);\n }\n\n public onTeleportModeChange(\n listener: Listener<ViewerTeleportMode | undefined>,\n ): Disposable {\n return this.teleportModeChanged.on(listener);\n }\n\n public onConfigurationChange(\n listener: Listener<ViewerWalkModeConfiguration>,\n ): Disposable {\n return this.configurationChanged.on(listener);\n }\n\n public onKeyBindingsChange(\n listener: Listener<ViewerWalkModeKeyBindings>,\n ): Disposable {\n return this.keyBindingsChanged.on(listener);\n }\n}\n"]}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../../src/lib/walk-mode/model.ts"],"names":[],"mappings":"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","sourcesContent":["import { Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\n\nimport { KeyBinding } from '../keyBinding';\n\nexport interface ViewerWalkModeConfiguration {\n teleportHeightPercentage: number;\n teleportDistancePercentage: number;\n teleportCollisionDistance: number;\n keyboardWalkSpeed: number;\n keyboardPivotDegrees: number;\n keyboardRepeatIntervalMs: number;\n}\n\nexport type ViewerTeleportMode =\n 'teleport' | 'teleport-and-align' | 'teleport-toward';\n\nexport enum ViewerWalkModeOperation {\n MOVE_DOWN = 'MOVE_DOWN',\n MOVE_UP = 'MOVE_UP',\n PIVOT_DOWN = 'PIVOT_DOWN',\n PIVOT_LEFT = 'PIVOT_LEFT',\n PIVOT_RIGHT = 'PIVOT_RIGHT',\n PIVOT_UP = 'PIVOT_UP',\n WALK_BACKWARD = 'WALK_BACKWARD',\n WALK_FORWARD = 'WALK_FORWARD',\n WALK_LEFT = 'WALK_LEFT',\n WALK_RIGHT = 'WALK_RIGHT',\n}\n\nexport type ViewerWalkModeKeyBindings = Record<\n ViewerWalkModeOperation,\n KeyBinding[]\n>;\n\nexport class WalkModeModel {\n private keyBindings: ViewerWalkModeKeyBindings = {\n [ViewerWalkModeOperation.MOVE_DOWN]: [\n new KeyBinding('PageDown', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.MOVE_UP]: [\n new KeyBinding('PageUp', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.PIVOT_DOWN]: [\n new KeyBinding('ArrowDown', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.PIVOT_LEFT]: [\n new KeyBinding('ArrowLeft', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.PIVOT_RIGHT]: [\n new KeyBinding('ArrowRight', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.PIVOT_UP]: [\n new KeyBinding('ArrowUp', '!Shift', '!Alt'),\n ],\n [ViewerWalkModeOperation.WALK_BACKWARD]: [new KeyBinding('s')],\n [ViewerWalkModeOperation.WALK_FORWARD]: [new KeyBinding('w')],\n [ViewerWalkModeOperation.WALK_LEFT]: [new KeyBinding('a')],\n [ViewerWalkModeOperation.WALK_RIGHT]: [new KeyBinding('d')],\n };\n\n private configuration: ViewerWalkModeConfiguration = {\n teleportHeightPercentage: 11.75,\n teleportDistancePercentage: 2,\n teleportCollisionDistance: 1000,\n keyboardWalkSpeed: 5,\n keyboardPivotDegrees: 1,\n keyboardRepeatIntervalMs: 25,\n };\n\n private excludedPredicate?: (el: Element) => boolean;\n\n private enabled = true;\n private teleportMode?: ViewerTeleportMode;\n\n private enabledChanged: EventDispatcher<boolean> = new EventDispatcher();\n\n private teleportModeChanged: EventDispatcher<ViewerTeleportMode | undefined> =\n new EventDispatcher<ViewerTeleportMode | undefined>();\n\n private configurationChanged: EventDispatcher<ViewerWalkModeConfiguration> =\n new EventDispatcher<ViewerWalkModeConfiguration>();\n\n private keyBindingsChanged: EventDispatcher<ViewerWalkModeKeyBindings> =\n new EventDispatcher<ViewerWalkModeKeyBindings>();\n\n public setEnabled(enabled: boolean): void {\n this.enabled = enabled;\n this.enabledChanged.emit(enabled);\n }\n\n public setTeleportMode(mode?: ViewerTeleportMode): void {\n this.teleportMode = mode;\n this.teleportModeChanged.emit(mode);\n }\n\n public setConfiguration(configuration: ViewerWalkModeConfiguration): void {\n this.configuration = configuration;\n this.configurationChanged.emit(configuration);\n }\n\n public addKeyBinding(\n operation: ViewerWalkModeOperation,\n keyBinding: KeyBinding,\n ): void {\n this.keyBindings[operation] = [...this.keyBindings[operation], keyBinding];\n this.keyBindingsChanged.emit(this.keyBindings);\n }\n\n public replaceKeyBinding(\n operation: ViewerWalkModeOperation,\n keyBinding: KeyBinding,\n ): void {\n this.keyBindings[operation] = [keyBinding];\n this.keyBindingsChanged.emit(this.keyBindings);\n }\n\n public setExcludedPredicate(predicate: (el: Element) => boolean): void {\n this.excludedPredicate = predicate;\n }\n\n public getEnabled(): boolean {\n return this.enabled;\n }\n\n public getTeleportMode(): ViewerTeleportMode | undefined {\n return this.teleportMode;\n }\n\n public getTeleportHeightPercentage(): number {\n return this.configuration.teleportHeightPercentage;\n }\n\n public getKeyboardWalkSpeed(): number {\n return this.configuration.keyboardWalkSpeed;\n }\n\n public getKeyboardPivotDegrees(): number {\n return this.configuration.keyboardPivotDegrees;\n }\n\n public getKeyboardRepeatInterval(): number {\n return this.configuration.keyboardRepeatIntervalMs;\n }\n\n public getConfiguration(): ViewerWalkModeConfiguration {\n return this.configuration;\n }\n\n public getKeyBindings(): ViewerWalkModeKeyBindings {\n return this.keyBindings;\n }\n\n public operationMatches(\n operation: ViewerWalkModeOperation,\n state: Record<string, boolean>,\n ): boolean {\n return this.keyBindings[operation].some((binding) =>\n binding.matches(state),\n );\n }\n\n public isElementExcluded(el: Element): boolean {\n return !!this.excludedPredicate?.(el);\n }\n\n public onEnabledChange(listener: Listener<boolean>): Disposable {\n return this.enabledChanged.on(listener);\n }\n\n public onTeleportModeChange(\n listener: Listener<ViewerTeleportMode | undefined>,\n ): Disposable {\n return this.teleportModeChanged.on(listener);\n }\n\n public onConfigurationChange(\n listener: Listener<ViewerWalkModeConfiguration>,\n ): Disposable {\n return this.configurationChanged.on(listener);\n }\n\n public onKeyBindingsChange(\n listener: Listener<ViewerWalkModeKeyBindings>,\n ): Disposable {\n return this.keyBindingsChanged.on(listener);\n }\n}\n"]}
@@ -1,8 +1,7 @@
1
1
  /*!
2
2
  * Copyright (c) 2026 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import "threadsx/register";
5
- import { Pool, spawn } from "threadsx";
4
+ import { Pool, spawn, Worker } from "threadsx";
6
5
  import { pngDecoderWorkerUrl } from "./worker-url";
7
6
  let poolLoader;
8
7
  const DEFAULT_POOL_SIZE = 1;
@@ -20,7 +19,9 @@ function getPool() {
20
19
  if (poolLoader == null) {
21
20
  const size = getPoolSize();
22
21
  console.debug(`Spawning PNG worker pool [size=${size}]`);
23
- poolLoader = Pool(() => spawn(new Worker(pngDecoderWorkerUrl)), { size });
22
+ poolLoader = Pool(
23
+ // threadsx applies its cross-origin workaround only to string URLs.
24
+ () => spawn(new Worker(pngDecoderWorkerUrl.href)), { size });
24
25
  }
25
26
  return poolLoader;
26
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"png-decoder-pool.js","sourceRoot":"","sources":["../../../../src/workers/png-decoder-pool.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAC;AAE3B,OAAO,EAAa,IAAI,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGlD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAInD,IAAI,UAAqC,CAAC;AAE1C,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,SAAS,WAAW;;IAClB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,MAAA,MAAM,CAAC,SAAS,CAAC,mBAAmB,mCAAI,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,OAAO,iBAAiB,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,SAAS,OAAO;IACd,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,kCAAkC,IAAI,GAAG,CAAC,CAAC;QACzD,UAAU,GAAG,IAAI,CACf,GAAG,EAAE,CAAC,KAAK,CAAc,IAAI,MAAM,CAAC,mBAAmB,CAAC,CAAC,EACzD,EAAE,IAAI,EAAE,CACT,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAgB,KAAK,EAAE,KAAK,EAAE,EAAE;IACpD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,MAAmB,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5D,CAAC,CAAC","sourcesContent":["import 'threadsx/register';\n\nimport { ExposedAs, Pool, spawn } from 'threadsx';\n\nimport type { DecodePngFn } from './png-decoder.worker';\nimport { pngDecoderWorkerUrl } from './worker-url';\n\ntype DecodePngPool = Pool<ExposedAs<DecodePngFn>>;\n\nlet poolLoader: DecodePngPool | undefined;\n\nconst DEFAULT_POOL_SIZE = 1;\n\nfunction getPoolSize(): number {\n if (typeof window !== 'undefined') {\n const concurrency = window.navigator.hardwareConcurrency ?? 8;\n return Math.ceil(concurrency / 4);\n } else {\n return DEFAULT_POOL_SIZE;\n }\n}\n\nfunction getPool(): DecodePngPool {\n if (poolLoader == null) {\n const size = getPoolSize();\n console.debug(`Spawning PNG worker pool [size=${size}]`);\n poolLoader = Pool(\n () => spawn<DecodePngFn>(new Worker(pngDecoderWorkerUrl)),\n { size },\n );\n }\n return poolLoader;\n}\n\nexport const decodePng: DecodePngFn = async (bytes) => {\n const pool = getPool();\n return pool.queue((decode: DecodePngFn) => decode(bytes));\n};\n"]}
1
+ {"version":3,"file":"png-decoder-pool.js","sourceRoot":"","sources":["../../../../src/workers/png-decoder-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAG1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAInD,IAAI,UAAqC,CAAC;AAE1C,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,SAAS,WAAW;;IAClB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,MAAA,MAAM,CAAC,SAAS,CAAC,mBAAmB,mCAAI,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,OAAO,iBAAiB,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,SAAS,OAAO;IACd,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,kCAAkC,IAAI,GAAG,CAAC,CAAC;QACzD,UAAU,GAAG,IAAI;QACf,oEAAoE;QACpE,GAAG,EAAE,CAAC,KAAK,CAAc,IAAI,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,EAC9D,EAAE,IAAI,EAAE,CACT,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAgB,KAAK,EAAE,KAAK,EAAE,EAAE;IACpD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,MAAmB,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5D,CAAC,CAAC","sourcesContent":["import { ExposedAs, Pool, spawn, Worker } from 'threadsx';\n\nimport type { DecodePngFn } from './png-decoder.worker';\nimport { pngDecoderWorkerUrl } from './worker-url';\n\ntype DecodePngPool = Pool<ExposedAs<DecodePngFn>>;\n\nlet poolLoader: DecodePngPool | undefined;\n\nconst DEFAULT_POOL_SIZE = 1;\n\nfunction getPoolSize(): number {\n if (typeof window !== 'undefined') {\n const concurrency = window.navigator.hardwareConcurrency ?? 8;\n return Math.ceil(concurrency / 4);\n } else {\n return DEFAULT_POOL_SIZE;\n }\n}\n\nfunction getPool(): DecodePngPool {\n if (poolLoader == null) {\n const size = getPoolSize();\n console.debug(`Spawning PNG worker pool [size=${size}]`);\n poolLoader = Pool(\n // threadsx applies its cross-origin workaround only to string URLs.\n () => spawn<DecodePngFn>(new Worker(pngDecoderWorkerUrl.href)),\n { size },\n );\n }\n return poolLoader;\n}\n\nexport const decodePng: DecodePngFn = async (bytes) => {\n const pool = getPool();\n return pool.queue((decode: DecodePngFn) => decode(bytes));\n};\n"]}
@@ -1,5 +1,5 @@
1
1
  /*!
2
2
  * Copyright (c) 2026 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import{g as o}from"./p-Bb32XUUS.js";export{a as getAssetPath,r as render,s as setAssetPath,b as setNonce,c as setPlatformOptions}from"./p-Bb32XUUS.js";export{C as Camera,c as ColorMaterial,a as CrossSectioner,I as ItemOperationBuilder,l as LoadableResource,M as ModelViewController,P as PmiAnnotationOperationsBuilder,b as PmiAnnotationsQueryExecutor,k as PmiController,R as Raycaster,d as RootQuery,S as Scene,e as SceneElementQueryExecutor,f as SceneElementsOperationExecutor,g as SceneItemOperationsBuilder,h as SceneItemQueryExecutor,i as SceneItemsOperationExecutor,s as SceneViewStateIdentifier,j as SynchronizedClock}from"./p-DH341c7b.js";export{S as SceneTreeController}from"./p-DMG1CW3A.js";export{f as fromNodeProto,i as isLoadedRow}from"./p-DeUGB_Ik.js";export{S as SCENE_ITEM_NAME_METADATA_KEY}from"./p-BZwvQkyb.js";export{C as CursorManager,b as boxQueryCursor,l as labelPinCursor,m as measurementCursor,a as measurementWithArrowCursor,p as pinCursor}from"./p-DxMDDbmh.js";export{M as MeasurementController,a as MeasurementEntity}from"./p-MnZadXO8.js";export{M as MeasurementModel}from"./p-BY3lpCm6.js";export{M as MeasurementOverlayManager}from"./p-CxzyM08j.js";export{m as makeMinimumDistanceResult}from"./p-mpsCUvSn.js";import{v as n,q as u,m as x}from"./p-CZZALKHT.js";export{T as TransformController}from"./p-CelQDFR0.js";export{f as flattenPointArray,a as toDegreesTransform,e as toLocalTransform,b as toMatrix,t as toRadiansTransform,c as toTransform,d as toWorldTransform}from"./p-O1_Yvjd6.js";export{A as AngleUnits,h as AreaUnits,c as CrossSectioning,D as DistanceUnits,E as EntityType,f as FrameCamera,F as FrameCameraBase,O as Orientation,a as ReceivedFrame,b as ReceivedFrameImage,d as ReceivedFrameScene,e as ReceivedOrthographicCamera,g as ReceivedPerspectiveCamera,S as StandardView}from"./p-DjrtwKcK.js";export{A as ArrowMarkup,C as CircleMarkup,F as FreeformMarkup}from"./p-avWSFTeP.js";export{V as Viewport}from"./p-EG7pMA2M.js";export{V as VolumeIntersectionQueryController,a as VolumeIntersectionQueryModel}from"./p-VEJB73Ei.js";const y=.9999;function v(e){const r=n.create(0,e.z,-e.y);const a=n.create(-e.z,0,e.x);const s=n.magnitudeSquared(r)>n.magnitudeSquared(a)?r:a;return n.normalize(n.cross(e,s))}function _(e,r){const a=n.dot(e,r);if(a>y){const r=v(e);const a=u.fromAxisAngle(r,Math.PI);return x.transpose(x.makeRotation(a))}else if(a<=-y){return x.makeIdentity()}else{const a=n.angleTo(r,e);const s=n.normalize(n.cross(e,r));return x.transpose(x.makeRotation(u.fromAxisAngle(s,a+Math.PI)))}}function B(e,r,a,s){const o=_(e,a);const t=x.makeTranslation(s);return x.multiply(x.makeTranslation(n.negate(r)),x.multiply(o,t))}var w=Object.freeze({__proto__:null,ALMOST_ONE:y,calculateOrthogonalCoordinate:v,computeRotationMatrix:_,computeTransformationDelta:B});o();export{w as TransformationDelta};
4
+ import{g as o}from"./p-Bb32XUUS.js";export{a as getAssetPath,r as render,s as setAssetPath,b as setNonce,c as setPlatformOptions}from"./p-Bb32XUUS.js";export{C as Camera,c as ColorMaterial,a as CrossSectioner,I as ItemOperationBuilder,l as LoadableResource,M as ModelViewController,P as PmiAnnotationOperationsBuilder,b as PmiAnnotationsQueryExecutor,k as PmiController,R as Raycaster,d as RootQuery,S as Scene,e as SceneElementQueryExecutor,f as SceneElementsOperationExecutor,g as SceneItemOperationsBuilder,h as SceneItemQueryExecutor,i as SceneItemsOperationExecutor,s as SceneViewStateIdentifier,j as SynchronizedClock}from"./p-CSVgoQU8.js";export{S as SceneTreeController}from"./p-DMG1CW3A.js";export{f as fromNodeProto,i as isLoadedRow}from"./p-DeUGB_Ik.js";export{S as SCENE_ITEM_NAME_METADATA_KEY}from"./p-BZwvQkyb.js";export{C as CursorManager,b as boxQueryCursor,l as labelPinCursor,m as measurementCursor,a as measurementWithArrowCursor,p as pinCursor}from"./p-DxMDDbmh.js";export{M as MeasurementController,a as MeasurementEntity}from"./p-D_h07qsA.js";export{M as MeasurementModel}from"./p-BY3lpCm6.js";export{M as MeasurementOverlayManager}from"./p-DyL2wWm6.js";export{m as makeMinimumDistanceResult}from"./p-_qi2VkC2.js";import{v as n,q as u,m as x}from"./p-2UsvOTHJ.js";export{T as TransformController}from"./p-C12jtCFb.js";export{f as flattenPointArray,a as toDegreesTransform,e as toLocalTransform,b as toMatrix,t as toRadiansTransform,c as toTransform,d as toWorldTransform}from"./p-BT9d9jRt.js";export{A as AngleUnits,h as AreaUnits,c as CrossSectioning,D as DistanceUnits,E as EntityType,f as FrameCamera,F as FrameCameraBase,O as Orientation,a as ReceivedFrame,b as ReceivedFrameImage,d as ReceivedFrameScene,e as ReceivedOrthographicCamera,g as ReceivedPerspectiveCamera,S as StandardView}from"./p-BjvjKoy7.js";export{A as ArrowMarkup,C as CircleMarkup,F as FreeformMarkup}from"./p-JvS9LLoO.js";export{V as Viewport}from"./p-CeZe0Qql.js";export{V as VolumeIntersectionQueryController,a as VolumeIntersectionQueryModel}from"./p-Bdf4AcJ2.js";const y=.9999;function v(e){const r=n.create(0,e.z,-e.y);const a=n.create(-e.z,0,e.x);const s=n.magnitudeSquared(r)>n.magnitudeSquared(a)?r:a;return n.normalize(n.cross(e,s))}function B(e,r){const a=n.dot(e,r);if(a>y){const r=v(e);const a=u.fromAxisAngle(r,Math.PI);return x.transpose(x.makeRotation(a))}else if(a<=-y){return x.makeIdentity()}else{const a=n.angleTo(r,e);const s=n.normalize(n.cross(e,r));return x.transpose(x.makeRotation(u.fromAxisAngle(s,a+Math.PI)))}}function _(e,r,a,s){const o=B(e,a);const t=x.makeTranslation(s);return x.multiply(x.makeTranslation(n.negate(r)),x.multiply(o,t))}var Q=Object.freeze({__proto__:null,ALMOST_ONE:y,calculateOrthogonalCoordinate:v,computeRotationMatrix:B,computeTransformationDelta:_});o();export{Q as TransformationDelta};
5
5
  //# sourceMappingURL=index.js.map